←2011-08 2011-09 2011-10→ ↑2011 ↑all
2011-09-01
00:00:05 <ais523> out of existing languages, Feather is most visually similar to Smalltalk, but that's mostly because one of its design goals is "the syntax should look similar to Smalltalk's, regardless of whether it means the same thing or not"
00:00:41 <mauke> and something I haven't seen anywhere else: nested one-line comments
00:01:04 <elliott> how does that work?
00:01:08 <ais523> mauke: as in, # abc # def
00:01:12 <ais523> and they're two different comments?
00:01:19 <ais523> I don't see how that's different from one-line comments that don't nest
00:01:19 <mauke> easy. REM starts a comment
00:01:22 <mauke> newline ends a comment
00:01:26 <mauke> comments may be nested
00:02:08 <elliott> ah
00:02:11 <elliott> REM foo REM bar
00:02:12 <elliott> quux
00:02:12 <elliott> ?
00:02:27 <mauke> yep
00:02:44 <elliott> heh
00:03:04 -!- CakeProphet has joined.
00:03:04 -!- CakeProphet has quit (Changing host).
00:03:04 -!- CakeProphet has joined.
00:03:04 -!- adam__ has joined.
00:03:22 <mauke> if you look at the documentation, it doesn't bother to mention all the interesting stuff
00:03:32 <elliott> heh
00:03:45 <mauke> like how it's rather non-trivial to just parse a sequence of statements
00:04:03 <mauke> I'm not even sure you can write a grammar for ploki
00:04:32 <ais523> some non-eso languages have that property too, like perl 5
00:04:39 <mauke> perl has a yacc grammar
00:04:44 <mauke> boring
00:04:56 <elliott> yacc is TC
00:05:03 <elliott> so that says nothing other than "you can run perl"
00:05:45 <ais523> mauke: note that it has to run part of the program at compile time to manage that
00:05:53 <mauke> ais523: yes, just like lisp
00:05:57 <ais523> thus, parsing perl requires running arbitrary code, which might contain an infinite loop
00:06:00 <mauke> oldest trick in the book
00:06:02 <elliott> lisp doesn't have a grammar either
00:06:04 <elliott> (readtable)
00:06:14 <ais523> you'd think parsing Lisp would be easy
00:06:20 <mauke> ploki could (theoretically) be compiled, though
00:06:25 <mauke> it has no eval or anything
00:06:28 <elliott> then it has a grammar :P
00:06:36 <elliott> "Wiki Loves Monuments: Photograph a monument, help Wikipedia and win!" <-- umm, what
00:06:54 <mauke> elliott: you can try to write one and I will tell you how it's broken :-)
00:07:04 <elliott> mauke: if you can compile it, it has a grammar
00:07:10 <elliott> it might not have a grammar with very many nice properties, but it has one
00:08:31 <elliott> ??/ looks like a trigraph
00:08:35 <mauke> what you're saying sounds mathematically true but I still don't know how to write it down
00:08:57 <mauke> yeah, I put that in because trigraphs are a great eso feature
00:09:31 <elliott> mauke: well, if you want to compile it, you have to transform it; it's not much of a compiler if it can fail to halt (barring obscure bugs like GHC has), therefore you can make enough sense of the code to compile it down to a fixed number of operations that don't cheat (i.e. embedding an interpreter) in finite time, so you can parse it
00:09:43 <elliott> cheating is kind of a subjective notion so I'm not sure there is a reasonable mathematical statement of it
00:11:01 <mauke> as far as I know ploki doesn't fit in any parsing frameworks/generators/combinators
00:11:13 <mauke> so that's going to be fun
00:12:08 <elliott> those are usually fairly limited
00:12:13 <elliott> beyond embedding your own parser in a code block
00:12:23 <elliott> like i said, it might not have good properties, but it's certainly parseable :P
00:14:50 <oerjan> general chomsky grammars are TC
00:15:06 <augur> oerjan: what is a "general chomsky grammar"
00:15:21 <mauke> annd I think I found a bug
00:15:52 <oerjan> augur: type-0
00:16:09 <augur> oerjan: and why is that a "general chomsky grammar"
00:16:35 <elliott> chomsky opinions for a chomsky era
00:17:00 <oerjan> because it's called the "chomsky hierarchy", and it's a grammar by chomsky's definition without additional restrictions
00:17:36 <oerjan> and yes, it wasn't the technical term, that is type-0 grammar
00:17:48 <oerjan> which i had to look up to recall
00:17:56 <augur> oerjan: sure, but any grammar is type-0
00:18:03 <mauke> great, a bug in the optimizer
00:18:27 <augur> and even within the strictly type-0 grammars, only a subset of them are TC
00:18:31 <oerjan> augur: thus "general", you stupid git
00:18:43 <oerjan> er
00:19:03 <augur> further, why "general" and "chomsky" are used makes no sense to me
00:19:11 <oerjan> augur: type-0 grammars as a _whole_ is a TC formalism
00:19:35 <augur> its the class that you need for giving TC grammars in, sure
00:19:54 <oerjan> augur: because i didn't remember the correct term, and you lack sufficient reading comprehension to understand a simple phrase
00:19:56 <augur> but thue and post preceeded chomsky in the matter
00:19:57 <Sgeo> if (x >= 0) then '0' else 1 // this expression can be given a type!
00:20:01 <Sgeo> :?
00:20:08 <augur> chomsky just gave a hierarchy of such systems
00:20:41 <mauke> Sgeo: <interactive>:1:5: Not in scope: `x'
00:21:07 * Sgeo isn't talking about Haskell
00:21:09 <oerjan> augur: afaik he _invented_ these formal grammars
00:21:21 <augur> oerjan: when your knowing is wrong
00:21:22 * mauke is
00:21:22 <Sgeo> http://www.ats-lang.org/DOCUMENT/INTPROGINATS/HTML/x322.html
00:21:28 -!- adam__ has quit (Quit: leaving).
00:21:34 <elliott> <augur> but thue and post preceeded chomsky in the matter
00:21:35 <elliott> <augur> chomsky just gave a hierarchy of such systems
00:21:37 <elliott> :t curry
00:21:37 <oerjan> "When Noam Chomsky first formalized generative grammars in 1956,[1] he classified them into types now known as the Chomsky hierarchy."
00:21:38 <lambdabot> forall a b c. ((a, b) -> c) -> a -> b -> c
00:21:41 <elliott> :t schönfinkel
00:21:42 <lambdabot> Not in scope: `sch'
00:21:43 <elliott> augur: ?
00:21:50 <augur> elliott: O_O
00:21:51 <oerjan> augur: very well, go and correct wikipedia for me
00:22:02 <elliott> augur: well?
00:22:13 <augur> oerjan: generative grammars for describing languages
00:22:39 <oerjan> augur: oh well
00:22:39 <augur> rewrite systems of the same sort were used prior in the context of logic/math/cs for a while before chomsky
00:22:47 <mauke> Sgeo: does it have subtyping?
00:23:14 <augur> chomsky might have also given the first meta-analysis.
00:23:17 <elliott> augur: i assume you know what i'm talking about?
00:23:22 <augur> elliott: well what
00:23:22 <Sgeo> I have no idea, but ATS is type-obsessed, so I'm going to go with "probably"
00:23:36 <elliott> augur:
00:23:39 <elliott> <elliott> :t curry
00:23:39 <elliott> <lambdabot> forall a b c. ((a, b) -> c) -> a -> b -> c
00:23:40 <elliott> <elliott> :t schönfinkel
00:23:42 <elliott> <lambdabot> Not in scope: `sch'
00:23:48 <elliott> augur: why aren't you complaining to the haskell committee?
00:23:49 <augur> elliott: what about it
00:24:44 <augur> elliott: well for one, a name is not the same as an attribution, and for two, a false attribution is not the same as a real attribution
00:25:03 <elliott> "general chomsky grammar" sounds like a name to me
00:25:06 <elliott> not an attribution
00:25:19 <elliott> and currying is more rightly attributed to Schönfinkel
00:26:00 <augur> elliott: except chomsky's name isn't even remotely established as a name for a class of grammars
00:26:06 <augur> unless you mean in a linguistic context
00:26:22 <elliott> augur: you realise this is insufferable, right?
00:26:34 <augur> :)
00:26:37 <oerjan> elliott: yeah dammit he managed to get _me_ angry
00:27:00 <oerjan> ice coffee -->
00:27:15 <augur> plausibly, a chomsky grammar could be used to refer to a grammar in chomsky normal form
00:27:39 <kmc> @let schönfinkel = curry
00:27:40 <lambdabot> Defined.
00:27:53 <oerjan> :t schönfinkel
00:27:55 <lambdabot> Not in scope: `sch'
00:28:02 <oerjan> > schönfinkel
00:28:03 <lambdabot> Overlapping instances for GHC.Show.Show
00:28:03 <lambdabot> (((a, ...
00:28:03 <kmc> for some reason :t does not like non-ASCII characters
00:28:06 <augur> but its hard to see how it makes any sense to call string rewriting systems "chomsky grammars"
00:28:17 * oerjan wonders how that is parsed
00:28:22 <oerjan> :t (ö)
00:28:23 <lambdabot> parse error (possibly incorrect indentation)
00:28:32 <oerjan> > (ö)
00:28:33 <lambdabot> Not in scope: `
00:28:36 <elliott> :t is broken
00:28:37 <lambdabot> Not in scope: `is'
00:28:37 <lambdabot> Not in scope: `broken'
00:28:38 <elliott> as far as unicode goes
00:28:43 <elliott> oh kmc said that
00:29:01 <augur> :t schoenfinkel
00:29:02 <lambdabot> Not in scope: `schoenfinkel'
00:29:06 <kmc> > schönfinkel snd 2 3
00:29:07 <augur> oh if only it were smart like that!
00:29:08 <lambdabot> 3
00:29:27 <augur> curry fst = const :o
00:29:39 <kmc> mmy, currywurst
00:29:46 <augur> i agree
00:30:16 <cheater> i see my domination plan is running as expected
00:30:22 <oerjan> :t "ö"
00:30:23 <lambdabot> lexical error in string/character literal at end of input
00:30:31 <oerjan> :t "\ö"
00:30:32 <lambdabot> unexpected end-of-file in string/character literal at end of input
00:30:34 -!- Rotaerk has joined.
00:30:41 <oerjan> worse and worse
00:30:52 -!- Rotaerk has left ("Leaving").
00:31:27 <oerjan> cheater: your plan will be foiled when everyone on haskell-blah ends up talking about their esolang interpreters
00:31:56 <oerjan> using more notation
00:34:39 -!- cheater has quit (Ping timeout: 245 seconds).
00:35:44 <elliott> oh dear, I actually rely on fromInteger for tuples
00:36:11 <elliott> does anyone know a good way to track down the source of "error" calls in Haskell? :P
00:40:16 -!- Guest8904 has changed nick to Gregor.
00:42:57 <kmc> http://haskell.org/haskellwiki/FAQ#How_can_I_get_a_stack_backtrace_when_my_program_throws_an_exception.3F
00:43:31 <kmc> also http://hackage.haskell.org/package/spoon
00:43:33 <elliott> yeah, that's cheating though :P
00:43:40 <elliott> isn't something fancy coming up in the next release?
00:43:45 <elliott> or was that the release that came out
00:43:45 <kmc> i hadn't heard
00:43:52 <kmc> of GHC?
00:44:05 <elliott> something simon marlow on google+ that was linked on /r/haskell about solving the stack trace problem
00:44:31 <kmc> i like how in Haskell, hard things are easy and easy things are hard
00:44:32 <elliott> I don't think spoon helps me, since this is an erroneous call to fromIntegral
00:45:06 <elliott> kmc: https://plus.google.com/107890464054636586545/posts/XE4T6hHm3tK
00:45:15 <elliott> I guess it might be a while before that hits mainline GHC
00:45:38 <zzo38> Well, I did make esolang interpreter in Haskell once (actually it is the first Haskell program I wrote)
00:47:31 <elliott> <Shiro.Interpreter.coreIns,Shiro.Interpreter.CAF><Shiro.Interpreter.coreIns,Shiro.Interpreter.CAF><Shiro.Utils.ioFail,Shiro.Utils.CAF><Shiro.Value.CAF>shiro: fromInteger on tuple
00:47:34 <elliott> that's one user-friendly backtrace
00:49:15 <elliott> especially since coreIns has, like, a hundred pattern cases with completely orthogonal behaviour
00:50:33 <oerjan> fromInteger on tuple, i assume that's your error message since haskell is statically typed :P
00:51:41 <elliott> yep :P
00:51:58 <elliott> I should probably just define my own names for the two tuple operations I use
00:52:09 <elliott> oh
00:52:11 <elliott> I bet I know why oerjan
00:52:20 <elliott> instance (Num a, Num b) => Num (a,b) where
00:52:20 <elliott> (a,b) + (c,d) = (a+c, b+d)
00:52:20 <elliott> (a,b) - (c,d) = (a-c, b-d)
00:52:20 <elliott> -- These don't really make any sense
00:52:20 <elliott> (*) = error "(*) on tuple"
00:52:22 <elliott> abs = error "abs on tuple"
00:52:24 <elliott> signum = error "signum on tuple"
00:52:26 <elliott> fromInteger = error "fromInteger on tuple"
00:52:30 <elliott> oerjan: I use "negate" on tuples to do pointwise negation
00:52:37 <elliott> oerjan: previously, fromInteger a = (fromInteger a, fromInteger a)
00:52:42 <elliott> can you spot the problem? :P
00:52:54 <oerjan> yes, you actually need fromInteger to work then
00:53:06 <elliott> yep
00:53:09 <elliott> so I just need to define my own negate
00:53:55 <oerjan> @src negate
00:53:56 <lambdabot> negate x = 0 - x
00:54:01 <oerjan> oh hm no
00:54:07 <oerjan> oh wait yes
01:03:49 <oerjan> "ddarius: isJust :: Maybe a -> Bool; isJust = unsafeCoerce
01:03:51 <oerjan> "
01:04:20 <Gregor> Maybe a bool IS just unsafe coerce!
01:05:15 <oerjan> !haskell import Unsafe.Coerce; main = print (map unsafeCoerce [Just "so", Nothing, Just "hm..."] :: [Bool])
01:05:20 <elliott> oerjan: it works
01:05:23 <EgoBot> ​[True,False,True]
01:05:23 <elliott> we tested it when it happened recently
01:06:15 <oerjan> !haskell import Unsafe.Coerce; main = print (map unsafeCoerce [Left "what", Right "about", Left "this?"] :: [Bool])
01:06:20 <EgoBot> ​[False,True,False]
01:06:30 -!- MDude has joined.
01:06:37 <oerjan> ooh and what about...
01:06:43 <oerjan> !haskell import Unsafe.Coerce; main = print (map unsafeCoerce [Left "what", Right "about", Left "this?"] :: [Maybe String])
01:06:47 <elliott> oerjan: he expanded on it more
01:06:48 <EgoBot> ​[Nothing,Just "about",Nothing]
01:06:50 <elliott> anything with under four constructors works
01:06:50 <elliott> iirc
01:06:58 <oerjan> aha
01:07:07 <elliott> because of pointer tagging and bits and blah, presumably
01:07:14 <elliott> or was it <= four
01:07:45 <oerjan> oh you mean when the number of constructors are not the same
01:08:18 <ais523> haha, the FQA author proves that he isn't a troll by explaining that writing an entire FQA doesn't have a good cost/benefit response when it comes to trolling
01:08:56 <oerjan> "Cale: the units of the monoids in the algebras for the monoid monad
01:08:57 <oerjan> "
01:09:09 <oerjan> i'm not sure if i should want to understand that or not
01:09:20 <elliott> Shiro/FungeSpace.hs:85:22: Error: Use elem
01:09:20 <elliott> Found
01:09:20 <elliott> w == cr || w == lf
01:09:20 <elliott> Why not
01:09:20 <elliott> w `elem` [cr, lf]
01:09:22 <elliott> but hlint
01:09:24 <elliott> that could be slower :(
01:09:28 <oerjan> "the monoid monad" is [], i know
01:09:31 <ais523> monoids form a monad?
01:09:34 <ais523> ah, hmm
01:09:41 <ais523> that's a crazy terminology for it
01:09:54 <ais523> [] is more like a sort of ordered threading
01:09:57 <elliott> oerjan: Cale was just demonstrating how monads are like monoids in some way
01:09:58 <elliott> I think
01:09:59 <elliott> I forget how
01:10:44 <oerjan> ais523: every algebraic variety (such as monoids) gives a monad in the Set category of math. some of them (iiuc, those that don't require comparing terms for equality) also work in Hask.
01:10:48 -!- azaq23 has joined.
01:11:15 <ais523> just seeing the word "Hask" fills me with horror
01:11:32 <oerjan> ais523: well by that i mean that they correspond to haskell Monads.
01:11:37 <ais523> because it implies that a) Haskell forms a category (not surprising if you take an idealized version of it), and b) people use it enough to actually use it
01:11:42 <ais523> *to actually name it
01:11:46 <elliott> Haskell forms many categories
01:11:57 <elliott> no idealisation required
01:11:59 <ais523> umm, Haskell expressions form a category
01:12:11 <ais523> probably a cartesian closed one with symmetrical braiding
01:12:36 <ais523> if a programming language doesn't do that, computer scientists typically don't consider it worth thinking about
01:13:21 <ais523> (I tried to do that for Burro, and was a little disappointed that I couldn't find a decent tensor operator, which corresponds to tuple formation in most languages; interleaving tapes almost works except that it isn't associative)
01:13:22 <oerjan> it's close to cartesian closed, but i have a vague recall or hunch that bottoms maybe mess up the exact definition
01:13:58 <ais523> in fact, I actually hear computer scientists say "that doesn't form a cartesian closed category, you must have made a mistake"
01:14:16 <oerjan> istr something going wrong about products or coproducts/sums
01:14:32 <copumpkin> ais523: any cartesian monoidal category is symmetric
01:14:38 <ais523> copumpkin: I thought that might be the case
01:14:43 <ais523> but wasn't 100% sure I remembered the definition right
01:14:54 <copumpkin> oerjan: CPO\_\bot works pretty well for haskell
01:14:58 <copumpkin> including the bottoms
01:15:11 <copumpkin> and the composition of folds and unfolds
01:15:24 <copumpkin> in something like set, that doesn't work
01:15:26 <oerjan> copumpkin: you are over my head now, anyway :P
01:15:49 <elliott> copumpkin: get a ph.d., then you'll be down to oerjan's level
01:15:54 <copumpkin> lol
01:16:00 <copumpkin> I already quit one
01:16:08 <copumpkin> quitting two would be too much
01:16:13 <oerjan> my ph.d. didn't go that deep into category theory :P
01:16:40 <oerjan> there were some natural transformations and K-theory
01:17:55 <elliott> this code is so imperative :-(
01:18:45 <ais523> imperative is not necessarily bad
01:19:05 <ais523> I know that in the only ICFP contest I actually entered, I decided as soon as I saw the problem that an imperative solution would work best
01:19:16 <ais523> and wondered why on earth that was done in a contest attached to a functional programming conference
01:20:21 <oerjan> <copumpkin> oerjan: CPO\_\bot works pretty well for haskell <-- * me vaguely wonders if that's an actual math term based on complete partial orders (probably), or if there's an actual bot lurking on freenode somewhere
01:20:37 <copumpkin> lol no
01:20:40 <Nisstyre> I would tend to disagree with that viewpoint
01:20:42 <copumpkin> it's a category of complete partial orders
01:21:12 <oerjan> lollercoaster notation
01:22:27 <ais523> oerjan: I assumed it was a Freenode bot, and was wondering what the \_\ was for
01:22:39 -!- elliott has changed nick to CPO\_\bot.
01:22:40 <ais523> what does \_ mean in (presumably LaTeX) anyway?
01:22:40 <oerjan> ais523: hi five
01:22:42 <CPO\_\bot> YESSSSSS
01:22:43 <CPO\_\bot> S
01:22:53 <CPO\_\bot> ok I am going to make this into the best haskell evaluation bot EVER
01:23:04 <oerjan> ais523: i _suspect_ the first \ may be a typo
01:23:10 <ais523> it needs to do stuff with complete partial orders, too
01:23:14 <ais523> oerjan: oh, right, that would make sense
01:23:21 <ais523> and \_ would presumably be literal underscore?
01:23:33 <kmc> so what's CPO⊥ ?
01:23:34 <oerjan> i don't recall
01:23:39 <oerjan> kmc: complete partial order
01:23:46 <kmc> unfortunately Unicode lacks a "subscript ⊥" character
01:23:51 <oerjan> or wait
01:23:54 <kmc> i will write an angry letter to the Committee
01:23:57 <ais523> and adding bottom on there presumably means a complete partial order with bottom included?
01:24:05 <Gregor> kmc: They'll get it in right after Goat.
01:24:08 <ais523> clearly, Unicode needs combining superscript and subscript
01:24:11 <copumpkin> kmc: read http://www.cs.ox.ac.uk/ralf.hinze/SSGIP10/AdjointFolds.pdf
01:24:15 <CPO\_\bot> Deewiant: Actually, the new Fungespace might not be that far away :-)
01:24:31 <copumpkin> kmc: ignore the shitty fraktur :P
01:24:34 <CPO\_\bot> Sorry, I mean sparse discrete finite lahey-space.
01:24:36 <kmc> cool thanks
01:24:50 <CPO\_\bot> You haskellers have to promise to not say anything if a package meeting that description shows up on Hackage one day.
01:24:52 <oerjan> kmc: sorry my putty fonts acting up again (of all possible representations of an unknown character, why does it have to use a _blank space_?)
01:24:55 <copumpkin> who the fuck thought http://snapplr.com/aznr was a good idea?
01:25:21 <CPO\_\bot> copumpkin: GOTHIK HASKEL
01:25:29 <kmc> makes it look more metal
01:25:29 <CPO\_\bot> \m/
01:25:41 <ais523> I love the way "Lahey-space" sounds like a proper mathematical term
01:25:48 <ais523> when as far as I know, it's something that cpressey just made up one day
01:25:53 <CPO\_\bot> ais523: it's something Lahey made up one day
01:25:56 <oerjan> CPO\_\bot: the \m/ \m/ version requires two neighboring ones
01:25:56 <myndzi> `\o/´
01:25:56 <myndzi> |
01:25:56 <myndzi> /`\
01:25:56 <myndzi> (_| |_)
01:25:58 <kmc> instead of something that Gauss made up one day
01:26:03 <kmc> like the rest of maths
01:26:04 <ais523> ah, right
01:26:10 <CPO\_\bot> ais523: i was going to release my new fungespace on hackage as lahey-space, but Deewiant pointed out that there are tons of other lahey spaces than just fungespaces
01:26:18 <CPO\_\bot> so I need to come up with a sufficiently snappy but mathematical-sounding term for fungespace
01:26:20 <ais523> oerjan: was that /meant/ to set off myndzi's script?
01:26:21 <CPO\_\bot> that mentions lahey-spaces
01:26:23 <kmc> wow
01:26:35 <CPO\_\bot> \m/ \m/ \o/ ,o/
01:26:36 <myndzi> `\o/´ |
01:26:36 <myndzi> | >\
01:26:36 <myndzi> (_|¯`¯|_)
01:26:42 <CPO\_\bot> myndzi truly is a work of art.
01:26:48 <oerjan> <CPO\_\bot> ok I am going to make this into the best haskell evaluation bot EVER <-- i was hoping for something that did genuine category theory
01:26:50 <ais523> CPO\_\bot: it's also euclidean, isn't it?
01:26:57 <CPO\_\bot> ais523: heh
01:27:04 <CPO\_\bot> ais523: no, taxicab
01:27:04 <ais523> as in, there's nothing about Lahey-spaces that intrinsically makes them work like that
01:27:26 <ais523> well, it follows the normal rules for making a lattice as a subset of euclidean space
01:27:36 <CPO\_\bot> well sure
01:27:59 -!- Zuu has quit (Read error: Connection reset by peer).
01:28:02 <oerjan> ais523: all cpo's have bottom included i think, because that's the infimum of the whole set
01:28:23 <ais523> oerjan: all cpos /on a set that includes bottom/
01:28:32 <ais523> (yes, I know the apostrophe is technically correct, it still looks wrong)
01:28:53 <ais523> most of my dealing with preorders has been on finite sets
01:29:01 <ais523> also, I can never remember which of a partial order and a preorder is which
01:30:21 <oerjan> <ais523> oerjan: was that /meant/ to set off myndzi's script? <-- um yes.
01:30:38 <ais523> oh, I see
01:30:47 <ais523> I'd mentally placed your line in the wrong conversation
01:30:52 <ais523> and was having issues parsing it as a result
01:31:04 <ais523> I've been doing that more and more nowadays
01:31:15 <ais523> but it's not that common that the parsing of a sentence is as context-dependent as that, it's as bad as C++
01:32:02 <oerjan> ais523: bottom afaik is a term that applies inside a cpo :P
01:32:13 -!- Zuu has joined.
01:32:21 <ais523> hmm, obviously CPO means something that isn't complete + partial order
01:32:30 <ais523> it wouldn't be the first time that had happened in maths
01:32:37 <oerjan> i suspect the _\bot is a restriction on the _arrows_, not the objects
01:32:48 <oerjan> namely that they send bottoms to bottoms
01:32:58 <oerjan> (is my guess)
01:33:12 <oerjan> although that excludes non-strict functions, hm
01:33:13 <ais523> oh, there can be more than one bottom? I assumed it was meant to be a terminal object
01:33:33 <oerjan> no, just one bottom in each object.
01:33:53 <ais523> categories as applied to programming languages normally consider objects as types and arrows as functions between those types, and actual values don't get involved at all
01:33:58 <oerjan> each haskell type is represented by one set with a CPO structure, afaik
01:34:00 <ais523> except as degenerate functions
01:34:08 <oerjan> so each set has a bottom element
01:35:21 <oerjan> of course the Void data type may be such a terminal element which has only bottom in it
01:36:08 <CPO\_\bot> hmm, I should try out haskell-emacs I guess
01:37:46 <oerjan> and also because of haskell
01:38:17 <oerjan> 's nonstrictness, functions from Void to T are 1-1 with values in T
01:39:01 <CPO\_\bot> Hmm, is there any portable way to get the number of existing environment variables?
01:39:05 <oerjan> for a strict language you'd want functions from () to T instead, i assume
01:39:31 <oerjan> @hoogle getEnv
01:39:32 <lambdabot> System.Environment getEnv :: String -> IO String
01:39:32 <lambdabot> System.Environment getEnvironment :: IO [(String, String)]
01:39:36 <CPO\_\bot> oerjan: in C
01:39:42 <oerjan> oh
01:39:46 <CPO\_\bot> Or, I guess: How do you get the whole environment in Windows?
01:39:51 * oerjan slinks away
01:40:08 <CPO\_\bot> Deewiant? :-P
01:40:12 <zzo38> You use the SET command
01:40:24 <zzo38> I do not know how to do it in C or other programming languages.
01:41:40 <oerjan> !haskell length `fmap` System.Environment.getEnvironment
01:41:43 <EgoBot> 35
01:42:38 <zzo38> I found out I have a file on my computer about the rules for "Uncyclopedian Poker". The deck contains 172 cards, 32 of which are Wilde cards. The game involves the "toilet" and the "tax collection".
01:43:25 <zzo38> Apparently an ace of spades is called a "half-motor" in this game.
01:44:41 <ais523> <kurin> If it works for him, that's great, but I would happily drop cinder blocks on my feet to get away from this architecture. <twerq> Does that work?
01:44:59 <CPO\_\bot> ais523: here, do you know how to access the environment from Windows C?
01:45:28 <ais523> CPO\_\bot: it depends on what version of Windows C you're using; I've even seen some where it was "third arg to main"
01:45:41 <ais523> but at least in Windows 3.1, I think they provided a getenv with moderately posixy semantics
01:45:57 <CPO\_\bot> ais523: yes, but I want more than getenv/putenv give
01:46:19 <ais523> also, here's a fun one: did you know that the fourth arg to main is a struct, one of whose elements contains random numbers?
01:46:23 <ais523> I haven't figured out what it's for yet
01:46:26 <ais523> also, this seems specific to ELF
01:46:46 <ais523> which gives a bit of a mental disconnect to me, "why should the fourth arg to main depend on what format the executable has"
01:47:05 <ais523> either that, or I misread kernel source, as I don't think it's documented anywhere I've read
01:47:08 <CPO\_\bot> it's not random
01:47:11 <CPO\_\bot> they're the ELF header, I think
01:47:52 <ais523> oh, here we go: http://articles.manugarg.com/aboutelfauxiliaryvectors.html
01:47:55 <ais523> CPO\_\bot: not the header, exactly
01:48:03 <ais523> they're info from the header filled into a struct by the ELF loader
01:48:07 <CPO\_\bot> same thing :P
01:48:17 <ais523> but not all the info is from the header, one of the slots is just a bunch of random numbers
01:48:29 <ais523> not random as in unclear what they're for, random as in reading from /dev/urandom
01:48:43 <ais523> I'm wondering if I should try to stabilise them in the Secret Project, or whether nobody ever uses them anyway
01:49:05 <ais523> there are other ways to fool the Secret Project, so worrying about that one seems like overkill
01:49:12 <CPO\_\bot> ooh, what's one way
01:49:20 <ais523> getting gdb involved, in any way at all
01:49:26 <ais523> the Secret Project actively resists being debugged
01:49:31 <ais523> or running on debuggers
01:49:40 <ais523> in fact, I haven't even managed to get it to coredump
01:49:51 <ais523> as a bonus, it also causes valgrind to crash with an internal error
01:50:12 <ais523> (in valgrind, that is)
01:50:28 <CPO\_\bot> ais523: hmm, as in, it has actual code to thwart debuggers?
01:50:34 <CPO\_\bot> now I'm thinking there must be some kind of untrusted element to it
01:50:44 <CPO\_\bot> reproducibly running student code in a sandbox?
01:50:45 <ais523> CPO\_\bot: not deliberately
01:50:48 <CPO\_\bot> aw
01:50:52 <CPO\_\bot> I thought I was on to something there
01:50:59 <ais523> or, in, it does have code to thwart debuggers, but that code is not there for the purpose of thwarting debuggers
01:51:13 <CPO\_\bot> right
01:51:24 <ais523> just code that does things that only a debugger would do
01:51:57 <ais523> and it's thwarting those things because they contend for access to tracepids with the secret project itsel
01:51:59 <ais523> *itself
01:52:37 <ais523> (I still don't get how I ended up with a process that wasn't a zombie, had apparently no parent, couldn't be killed with any signal at all (not even -9 as root) and was apparently being debugged by the real init, though...)
01:52:54 <ais523> (possibly a kernel bug, the secret project's probably going to expose a bunch of those as a side-effect)
01:53:13 <ais523> and it's not like I could just tell init to stop debugging it
01:54:33 <ais523> I fixed it by rebooting, in the end
01:54:45 <ais523> although not immediately, the situation wasn't doing any /harm/ other than being massively confusing
01:55:02 <oerjan> !haskell filter Unsafe.Coerce.unsafeCoerce [Left 1, Right 2, Left 3, Right 4]
01:55:05 <EgoBot> ​[Right 2,Right 4]
01:55:20 <CPO\_\bot> Shiro/Types.hs:19:10: Warning: orphan instance: instance Show Any
01:55:21 <CPO\_\bot> <no location info>:
01:55:21 <CPO\_\bot> Failing due to -Werror.
01:55:22 <CPO\_\bot> oh /come on/
01:55:25 <ais523> oerjan: wait what?
01:55:32 <CPO\_\bot> ais523:
01:55:35 <CPO\_\bot> ?quote ddarius unsafeCoerce
01:55:35 <lambdabot> ddarius says: isJust :: Maybe a -> Bool; isJust = unsafeCoerce
01:55:39 <ais523> is this something to do with Either's definition of a monad?
01:55:57 <CPO\_\bot> what?
01:55:59 <CPO\_\bot> no
01:56:01 <zzo38> Does that work?
01:56:06 <CPO\_\bot> it's to do with GHC's pointer representation
01:56:08 <CPO\_\bot> zzo38: yes
01:56:10 <ais523> ah, I see
01:56:15 <ais523> @src isJust
01:56:15 <lambdabot> isJust Nothing = False
01:56:15 <lambdabot> isJust _ = True
01:56:24 <ais523> bleh, I was hoping it would be defined /as/ unsafeCoerce
01:56:27 <zzo38> I don't think you should write it that way except possibly in an optimization rule
01:56:48 <oerjan> !haskell Data.Maybe.catMaybes $ Unsafe.Coerce.unsafeCoerce [Left 1, Right 2, Left 3, Right 4]
01:56:51 <EgoBot> ​[(),()]
01:56:53 <zzo38> As an optimization rule, write it that way but leave a note in case it stops working in a different version or on different computers
01:56:59 <oerjan> ah hm
01:57:08 <oerjan> !haskell Data.Maybe.catMaybes $ Unsafe.Coerce.unsafeCoerce [Left 1, Right 2, Left 3, Right 4] :: [Integer]
01:57:11 <EgoBot> ​[2,4]
01:57:18 <ais523> :t Unsafe.Coerce.unsafeCoerce
01:57:18 <lambdabot> forall a b. a -> b
01:57:22 <ais523> I thought os
01:57:23 <ais523> *so
01:57:28 <ais523> hmm, this is reminding me of Ursala
01:57:30 <CPO\_\bot> <zzo38> As an optimization rule, write it that way but leave a note in case it stops working in a different version or on different computers
01:57:34 <ais523> which did that sort of thing to /everything/
01:57:35 <CPO\_\bot> zzo38: it already optimises down to that at runtime, almost certainly
01:57:37 <CPO\_\bot> this is just a silly trick
01:57:46 <ais523> Overload did too, I suppose
01:57:47 <CPO\_\bot> ais523: I still think Ursala was actually really interesting
01:57:59 <ais523> CPO\_\bot: it had interesting ideas there, they were just assembled in an insane way
01:58:06 <ais523> it reminds me quite a bit of Overload, actually
01:58:19 <CPO\_\bot> hmm, what's the standard operator for vector+vector again?
01:58:22 <CPO\_\bot> .+.?
01:58:27 <zzo38> Describe more about Overload?
01:58:46 <CPO\_\bot> <monochrom> @quote ddarius isJust
01:58:46 <CPO\_\bot> <lambdabot> ddarius says: isJust :: Maybe a -> Bool; isJust = unsafeCoerce
01:58:46 <CPO\_\bot> <monochrom> ddarius wins!
01:58:50 <ais523> zzo38: the language that Underload is a tarpit of, it has things like equivalences between characters and lists of strings, and pointers
01:58:50 <CPO\_\bot> ok, who's the spy :D
01:59:20 <ais523> and is possibly internally consistent, but large and sprawling and unmaintainable
01:59:22 <zzo38> ais523: You told me that before. Write more about Overload in the [[Talk:Underload]] page in Esolang wiki
01:59:39 <ais523> there isn't much more to write
01:59:40 <CPO\_\bot> ais523: or ELSE
01:59:44 <ais523> I have some unfinished interps you can look at
01:59:50 <ais523> if you want to get an idea of what the lang is like
02:00:00 <zzo38> ais523: OK, post those to the [[Talk:Underload]].
02:00:07 <ais523> nah, it's an entirely unrelated language
02:00:14 <ais523> that Underload is a tarpit of Overload is mostly just coincidence
02:00:20 <ais523> or, umm, historical etymology, or something
02:00:23 <CPO\_\bot> !haskell print (Unsafe.Coerce.unsafeCoerce False :: Maybe Int)
02:00:24 <zzo38> Then post it on your user page.
02:00:25 <CPO\_\bot> !haskell print (Unsafe.Coerce.unsafeCoerce True :: Maybe Int)
02:00:26 <EgoBot> Nothing
02:00:30 <ais523> the only real evidence is that <>[] are reserved in Underload for no apparent reason
02:00:32 <CPO\_\bot> !haskell print (Unsafe.Coerce.unsafeCoerce True :: Maybe Int)
02:00:34 <EgoBot> ​./interps/ghc/runghc: line 7: 30354 Segmentation fault ghc -O2 -e "`cat $1`" 2> /dev/null
02:00:35 <ais523> I'll just post it in-channel, seems simplest
02:00:40 -!- CPO\_\bot has changed nick to elliott.
02:00:47 <elliott> !haskell print (Unsafe.Coerce.unsafeCoerce False :: Maybe ())
02:00:49 <EgoBot> Nothing
02:00:51 <elliott> !haskell print (Unsafe.Coerce.unsafeCoerce True :: Maybe ())
02:00:53 <EgoBot> ​./interps/ghc/runghc: line 7: 30718 Segmentation fault ghc -O2 -e "`cat $1`" 2> /dev/null
02:01:08 <ais523> oh wow, this code is /old/
02:01:16 <ais523> anyone here recognise pre-standard C++?
02:01:24 <oerjan> <CPO\_\bot> ok, who's the spy :D <-- it was in today's haskell weekly news
02:01:25 <elliott> yikes
02:01:30 <elliott> oerjan: heh
02:01:37 <ais523> at least, it appears to be ifdeffed between pre-standard C++ and nonidiomatic standard C++
02:01:37 <zzo38> Obviuosly the constructor for True takes no parameters while Just does take some, so it would try to access unallocated memory, I think.
02:01:48 <elliott> oh no, my mouse is doing that thing again
02:01:58 <ais523> I liked pre-standard C++, it was not yet insane
02:02:10 <elliott> also,
02:02:11 <elliott> <CPO\_\bot> hmm, what's the standard operator for vector+vector again?
02:02:11 <elliott> <CPO\_\bot> .+.?
02:03:23 <zzo38> Do you know how to play Pasur or Scope? I know how to play these card games. I also know how to play (two variants of) Scopone Scientifico, maybe I can invent Scopone Frobozzica.
02:03:33 <ais523> oh, real wow, this code uses macros that use stringisation just so their arguments don't need to be double-quoted
02:03:45 <ais523> meanwhile, attempting to pastebin it has frozen Firefox
02:03:54 <ais523> I'm waiting for Firefox to unfreeze so I can show you
02:03:57 <ais523> or maybe I'll just use Sprunge
02:03:59 <zzo38> Then use sprunge
02:04:11 <zzo38> I always use sprunge.
02:04:26 <zzo38> Sprunge does not require a web browser to work properly.
02:04:27 -!- edwardk has joined.
02:04:45 <oerjan> ANOTHER ONE
02:04:52 <zzo38> Which means it can be accessed without requiring loading the web browser program.
02:04:57 <ais523> wow, pastie has also doubled all the newlines
02:05:07 <ais523> I think because it's so old it uses \r\n line-endings
02:05:10 <edwardk> i haven't wandered out of my native #haskell in a while, but i'm not THAT much of a stranger =P
02:05:12 <elliott> edwardk: ok, who is responsible :D
02:05:30 <edwardk> elliott: kmc talking about currywurst
02:05:31 <ais523> (it also has a "C/C++" highlighting option, which is an appropriate description of the language the interp is actually written in)
02:05:43 <ais523> zzo38 (and other people interested in Overload): http://pastie.org/private/9a3ws8d7h71xdadmv4aqfg
02:05:45 <oerjan> wtf is currywurst
02:06:04 <zzo38> Now I have to load the web browser program, but, OK
02:06:07 <elliott> ais523: I don't read double-spaced code
02:06:20 <edwardk> apparently something that kmc likes to eat
02:06:27 -!- augur has quit (Ping timeout: 258 seconds).
02:06:29 <zzo38> Why is it double spaced?
02:06:35 <ais523> because it uses \r\n newlines
02:07:10 <zzo38> Oops it got cut off
02:07:23 <ais523> http://sprunge.us/hMUA?cpp seems to be singlespaced
02:07:29 <ais523> so you can read that instead
02:09:19 <zzo38> I have a file of poker variants including: Draw-Stud Poker, Crap Poker, Bug Poker, Janken Poker, Baccarat Poker, Leg Poker, Dynamic Poker, Pokemon Card Poker, Pokino, Uncyclopedian Poker, Dungeon Poker, Steamship Poker, etc
02:12:00 <ais523> wow, my computer ran out of memory at 32K of heap? that program must be old
02:12:08 <zzo38> To play Scope: You need a deck of forty cards, consisting of numbers one to ten of each of four suits. One suit is money. Give three cards to each player and four cards on the floor.
02:12:50 -!- augur has joined.
02:14:16 <zzo38> On your turn, select one card from your hand and play that card. If it is the same rank as one of the cards on the floor, you *must* take that one, and you put both cards in your score pile. (If there are multiples of that rank, you can select which one you want.) Otherwise, you can either leave it on the floor, or take that card together with any number of cards from the floor that add up to the card in your hand (for example, if you play 7 yo
02:14:43 <zzo38> If you played the card resulting in no cards on the floor, you make a scope and immediately earn one point.
02:14:46 <ais523> zzo38: the line was cut off, at "play 7 yo"
02:15:04 <zzo38> u can get 4 and 3)
02:15:35 <zzo38> If both players have no cards in hand, deal three cards to each player again. The last card played in the entire game does not make a scope even if it picks up everything.
02:15:36 <ais523> elliott: zzo38: for a hint of what Underload is like, look at "EnsureUncar", its purpose is to ensure that a particular list is the first element of another list
02:15:43 <ais523> as in, of some other list
02:15:48 <elliott> "Underload"
02:15:52 <ais523> or, actually, I think any element of some other list
02:15:54 <ais523> and, right, Overload
02:16:04 <ais523> I don't type Overload's name much, my fingers were confused
02:16:15 <zzo38> After all cards are played, if any cards remain on the floor, whoever took cards into their scoring pile last takes all the remaining cards on the floor.
02:16:48 <zzo38> And then you count points. If you have more cards than opponent you get 1 point. If you have more money than opponent you get 1 point. If you have the seven of money then you get 1 point. If you make premere you get 1 point.
02:16:49 <ais523> hmm, the data structure Overload uses doesn't have a name
02:16:50 <elliott> oh my god, -Wall is complaining about the horrific function
02:16:55 <ais523> I think I'll call it "the quadruply linked list"
02:17:02 <ais523> elliott: in Overload? or in your code?
02:17:09 <elliott> my code
02:17:30 <ais523> I hate to think what -Wall's reaction would be to that code
02:17:36 <zzo38> To figure out the premere, each player reveals one card of each suit, of the highest ranking card. For the purpose of premere, the cards rank in this order (from highest to lowest): 7, 6, 1, 5, 4, 3, 2, 10, 9, 8.
02:17:37 <ais523> although at least it /compiles/ with an old version of g++
02:17:41 <ais523> it's really horribly written
02:18:05 <zzo38> (I don't know why the cards are ranked like this; I did not invent this game.)
02:18:08 <ais523> oh, I just figured out what // wmw-dependent means
02:18:12 <ais523> I think it means "what means what"
02:18:28 <zzo38> Match is played up to eleven points.
02:18:28 <ais523> #define OVCMD(a) InsBefore(&ITOS, new TListEl("(" #a ")",1),1); goto eval
02:18:49 <zzo38> Now do you know how to play this game?
02:19:07 <ais523> oh good, for a moment I thought that code was literally replacing abbreviations with their expansions in the actual code, but it's saner than that
02:19:30 <ais523> (in Underload, if you do this you don't notice, as it happens only as they're executing; in Overload you can go and look back at previously executed code using pointers)
02:20:34 <ais523> and , is possibly the most Overloady instruction of all; it returns a pointer to itself
02:20:40 <ais523> as in, to the , operation
02:21:15 <ais523> I suppose gnu C has the equivalent "a: void* p = &&a;", which is as close as you can get in any other lang
02:22:11 <zzo38> I think LLVM can point to labels, although they can only be used for indirect branch instructions, and only in the same function
02:22:57 <ais523> in Overload, you used that sort of trick to, say, get a pointer to the IP, then move it to the end of the current function to get the return address, and follow that
02:25:21 <zzo38> I invented an instruction set and computer system on a sheet of paper.
02:26:35 <zzo38> It does have an instruction which can save a pointer to the immediately following instruction into a register: MOV A P
02:28:39 <oerjan> !haskell map Unsafe.Coerce.unsafeCoerce [[1,2],[3,4,5],[6,7,8,9]] :: [Maybe Integer]
02:28:41 <EgoBot> ​[Just 1,Just 3,Just 6]
02:29:58 <oerjan> !haskell map Unsafe.Coerce.unsafeCoerce [[1,2],[3,4,5],[6,7,8,9],[]] :: [Maybe Integer]
02:30:01 <EgoBot> ​[Just 1,Just 3,Just 6,Nothing]
02:30:31 <zzo38> oerjan: Can you guess that? I think it is probably possible to do so. In fact that seems a possible usefulness. It should be written as a function not using unsafeCoerce and then optimized into unsafeCoerce (use a RULES pragma if the compiler cannot do it by itself)
02:31:10 -!- CakeProphet has quit (Quit: Reconnecting).
02:31:15 -!- CakeProphet has joined.
02:31:15 -!- CakeProphet has quit (Changing host).
02:31:15 -!- CakeProphet has joined.
02:31:29 <CakeProphet> :t toJust
02:31:30 <lambdabot> Not in scope: `toJust'
02:31:34 <CakeProphet> lulz
02:31:44 <CakeProphet> @hoogle [a] -> Maybe a
02:31:45 <lambdabot> Data.Maybe listToMaybe :: [a] -> Maybe a
02:31:45 <lambdabot> Data.List find :: (a -> Bool) -> [a] -> Maybe a
02:31:45 <lambdabot> Prelude head :: [a] -> a
02:32:10 <CakeProphet> > map listToMaybe [[1,2],[3,4,5],[6,7,8,9],[]]
02:32:11 <lambdabot> [Just 1,Just 3,Just 6,Nothing]
02:32:26 <zzo38> I think I can understand why unsafeCoerce does that on those operations.
02:32:29 <CakeProphet> @src listToMaybe
02:32:30 <lambdabot> listToMaybe [] = Nothing
02:32:30 <lambdabot> listToMaybe (a:_) = Just a
02:32:40 <CakeProphet> zzo38: yes, think of it as a C-style cast.
02:32:50 <zzo38> CakeProphet: Yes it is what I thought of.
02:32:53 <elliott> thinking of it as a C-style cast does not fully explain why it works for isJust.
02:32:53 <CakeProphet> and then imagine what the internal representations of those data types might look like.
02:32:59 <elliott> you have to understand the pointer tagging GHC does.
02:33:01 <kmc> it's more like a C++ reinterpret_cast than a C cast
02:33:02 -!- preflex has quit (Ping timeout: 264 seconds).
02:33:10 <kmc> because C's casts can alter bitwise representation too
02:33:14 <kmc> e.g. casting int to double
02:33:27 <zzo38> kmc: But it is a pointer cast.
02:33:34 <kmc> sure you can think of it that way
02:33:40 <kmc> GHC's unsafeCoerce is always a no-op at runtime
02:33:54 <kmc> it just tells the typechecker to fuck off in the most unsubtle way possible
02:34:23 <zzo38> Can GHC optimize other operations into unsafeCoerce if you wrote them in a way which it can do so?
02:34:52 <kmc> wrapping/unwrapping a newtype is also a no-op at runtime
02:35:11 <zzo38> Yes, I know that too.
02:35:43 <CakeProphet> zzo38: you could write such optimizations via RULE, of course.
02:36:15 <zzo38> CakeProphet: Yes, it is what I am thinking of; you could do that. What I mean is if it can do it by itself. If it cannot, then you should use rule pragmas.
02:36:29 <CakeProphet> right, I understood, my response just wasn't helpful. heh
02:37:13 <zzo38> Other than rule pragmas, the only other thing I think you should ever use unsafeCoerce for is when using FFI codes.
02:37:49 <oerjan> !haskell Control.Monad.filterM Unsafe.Coerce.unsafeCoerce [[1,2],[3,4],[5,6]] :: [[Integer]]
02:38:20 <CakeProphet> forgot to print. ;)
02:38:34 <oerjan> no it does that
02:38:39 <CakeProphet> ah.
02:38:45 <oerjan> but it was an error
02:39:12 <CakeProphet> :t unsafeCoerce
02:39:13 <lambdabot> Not in scope: `unsafeCoerce'
02:39:16 <oerjan> !haskell !import Control.Monad; import Unsafe.Coerce; main = print (filterM unsafeCoerce [[1,2],[3,4],[5,6]] :: [[Integer]])
02:39:19 <oerjan> er
02:39:20 <edwardk> zzo38: i occasionally use it to add observable sharing
02:39:24 <oerjan> !haskell import Control.Monad; import Unsafe.Coerce; main = print (filterM unsafeCoerce [[1,2],[3,4],[5,6]] :: [[Integer]])
02:39:27 <CakeProphet> well b = m Bool here
02:39:35 <CakeProphet> in unsafeCoerce :: a -> b
02:39:35 <edwardk> zzo38: where the type being discarded is provably irrelevant
02:39:48 <oerjan> !haskell import Control.Monad; import Unsafe.Coerce; main = print (filterM unsafeCoerce [[1,2],[3,4],[5,6]] :: [[Integer]])
02:40:05 <oerjan> oops
02:40:24 <edwardk> foo (Left a) = Left a -- this case can be rewritten using an unsafeCoerce for instance
02:41:21 <elliott> hmm, is it (*+*) or (.+.)...
02:41:25 <oerjan> > filterM (const [True]) [1,2,3]
02:41:26 <lambdabot> [[1,2,3]]
02:41:51 <oerjan> oh hm
02:42:10 <oerjan> !haskell import Control.Monad; import Unsafe.Coerce; main = print (filterM (const . unsafeCoerce) [[1,2],[3,4],[5,6]] :: [[Integer]])
02:42:39 <oerjan> 04:43 =EgoBot> Execution of /tmp/input.24301 aborted due to compilation errors.
02:43:30 <CakeProphet> helpful
02:43:59 <oerjan> @hoogle .+.
02:44:00 <lambdabot> No results found
02:44:03 <oerjan> @hoogle *+*
02:44:04 <lambdabot> No results found
02:45:09 <oerjan> oh wait @hoogle has only a few packages
02:45:14 <Lymee> @hoogle fix
02:45:14 <lambdabot> Data.Function fix :: (a -> a) -> a
02:45:14 <lambdabot> Control.Monad.Fix fix :: (a -> a) -> a
02:45:14 <lambdabot> module Control.Monad.Fix
02:45:20 * elliott tries hayoo
02:45:34 <elliott> nothing found for (.+.) :-(
02:45:51 <oerjan> why don't you look up a vector package
02:46:14 <zzo38> Do you know about the BLISS programming language? It also has some stuff including macros that you do not find in others, maybe it can be combined with LLVM somehow to make something
02:46:44 <elliott> oerjan: I tried
02:46:51 <elliott> they all had alphabetical operations :(
02:46:57 <oerjan> huh
02:47:09 <elliott> like mxm, mxv or whatever
02:47:11 <elliott> ugly
02:47:28 <oerjan> haskellers who don't make up new operators whenever possible? impossible!
02:48:22 <kmc> i love that y'all have a bot with unsafeCoerce
02:48:23 <Lymee> @define unsafeCoerce = fix ($)
02:48:28 <kmc> i assume it's heavily sandboxed
02:48:30 <Lymee> @def unsafeCoerce = fix ($)
02:48:31 <lambdabot> Maybe you meant: bf do let
02:48:37 <Lymee> @let unsafeCoerce = fix ($)
02:48:37 <lambdabot> Defined.
02:48:53 <Lymee> > unsafeCoerce 1 :: Maybe Int
02:48:58 <Lymee> Fake unsafeCoerce!
02:48:59 <edwardk> @type fix id
02:48:59 * Lymee hides
02:49:00 <lambdabot> forall a. a
02:49:08 <lambdabot> thread killed
02:49:12 <edwardk> just assume the hypothesis and be done
02:49:20 -!- GreaseMonkey has joined.
02:49:20 -!- GreaseMonkey has quit (Changing host).
02:49:20 -!- GreaseMonkey has joined.
02:49:24 <Lymee> @type fix ($)
02:49:30 <Sgeo> kmc, it's just the same lambdabot that's in #haskell
02:49:40 <elliott> Sgeo: no...
02:49:46 <Sgeo> Can you use unsafeCoerce for nefarious purposes?
02:49:48 <Sgeo> elliott, wait what?
02:49:49 <oerjan> kmc: yeah Gregor worked hard on the sandboxing
02:49:52 <elliott> it's EgoBot
02:49:53 <elliott> kmc: It's heavily sandboxed, but HackEgo is more permissive
02:49:55 <elliott> `run echo hi >q
02:49:59 <HackEgo> No output.
02:50:00 <elliott> `run cat q
02:50:02 <HackEgo> cat: q: No such file or directory
02:50:04 <elliott> `run cat q
02:50:05 <elliott> argh
02:50:06 <HackEgo> hi
02:50:08 <elliott> (sometimes it has sync issues)
02:50:09 <elliott> `rm q
02:50:10 <HackEgo> No output.
02:50:12 <elliott> `l
02:50:12 <elliott> `ls
02:50:14 <HackEgo> ​/home/hackbot/hackbot.hg/multibot_cmds/lib/limits: line 5: exec: l: not found
02:50:15 <HackEgo> babies \ bin \ bluhbluh \ canary \ env \ foo \ paste \ ps \ quine.pl \ quine2.pl \ quine3.pl \ quotes \ quotese \ tekst \ test.c \ tmp.tmp
02:50:18 <elliott> `help
02:50:19 <HackEgo> Runs arbitrary code in GNU/Linux. Type "`<command>", or "`run <command>" for full shell commands. "`fetch <URL>" downloads files. Files saved to $PWD are persistent, and $PWD/bin is in $PATH. $PWD is a mercurial repository, "`revert <rev>" can be used to revert to a revision. See http://codu.org/projects/hackbot/fshg/
02:51:13 <kmc> quotse?
02:51:23 <elliott> `quote
02:51:26 <HackEgo> 483) <oklopol> btw i saw my first prostitute about a week ago
02:51:29 <elliott> good quotes
02:51:35 <elliott> (quote database is of questionable quality)
02:51:36 <kmc> does it respond to PM?
02:51:46 <elliott> yes, but it logs anything that changes the filesystem
02:51:50 <kmc> hehe
02:51:55 <elliott> and those can be reverted
02:52:02 <elliott> the quote system is rather advanced:
02:52:06 <elliott> `run ls bin/*quote*
02:52:09 <HackEgo> bin/addquote \ bin/allquotes \ bin/delquote \ bin/pastenquotes \ bin/pastequotes \ bin/quote \ bin/quotes
02:52:21 <mauke> `perl -v
02:52:24 <HackEgo> ​\ This is perl, v5.10.0 built for x86_64-linux-gnu-thread-multi \ \ Copyright 1987-2007, Larry Wall \ \ Perl may be copied only under the terms of either the Artistic License or the \ GNU General Public License, which may be found in the Perl 5 source kit. \ \ Complete documentation for Perl, including FAQ lists, should be
02:52:34 <Lymee> `run cat /dev/urandom | perl
02:52:36 <HackEgo> Unrecognized character \xC7 in column 1 at - line 1.
02:52:39 * Lymee hides
02:52:48 <mauke> `cat /dev/urandom
02:52:50 <HackEgo> ​.݀Bgo-:h6ڵsU.b..7.R.܄.l..򋦋gmTdv+dlR5RPsWwiyԼN..l;BrjA_.^.y9Y<(-.Ñu{p.gJ*..a#-n\Y@鹜pP6e.U.vV.5|P9.?++~W>`ҌoL.ZI\m..qǎ\3e.d3.,..zs-h..
02:53:00 <elliott> kmc: mauke: it's based on UMLBox, fwiw: https://bitbucket.org/GregorR/umlbox/overview; previously it was based on the (Debian-specific) plash
02:53:11 <elliott> (it's Gregor's)
02:53:21 <kmc> cool
02:53:36 -!- lambdabot has quit (Ping timeout: 258 seconds).
02:53:38 <Lymee> `cat /dev/random
02:53:48 <elliott> `translateto no also, it has limited internet access
02:53:51 <kmc> `hexdump -C /dev/urandom
02:53:53 <HackEgo> hexdump: invalid option -- \ usage: hexdump [-bcCdovx] [-e fmt] [-f fmt_file] [-n length] \ [-s skip] [file ...] \ hd [-bcdovx] [-e fmt] [-f fmt_file] [-n length] \ [-s skip] [file ...]
02:53:55 <HackEgo> Traceback (most recent call last): \ File "/hackenv/bin/json", line 4, in <module> \ data = json.loads(sys.stdin.read().decode('utf-8')) \ File "/opt/python27/lib/python2.7/json/__init__.py", line 310, in loads \ return _default_decoder.decode(s) \ File "/opt/python27/lib/python2.7/json/decoder.py", line 346,
02:53:57 <elliott> kmc: you need `run for multiple arugments
02:53:59 <kmc> `run hexdump -C /dev/urandom
02:54:01 <kmc> *nod*
02:54:01 <HackEgo> 00000000 5c 50 2b 17 29 6c be e8 d0 15 1e 99 26 a6 e0 a1 |\P+.)l......&...| \ 00000010 7c 54 c2 93 eb a1 59 b2 ea 62 50 27 e1 99 63 d2 ||T....Y..bP'..c.| \ 00000020 03 82 5a 43 8b dc 0c 61 ec 10 ba 82 ff 85 15 28 |..ZC...a.......(| \ 00000030 44 89 38 a4 ac 20 25 fd c0 13 7f 20 80 f4 86 0b |D.8.. %.... ....| \ 00000040
02:54:07 <elliott> Gregor: translation is broken again :P
02:54:10 <HackEgo> No output.
02:54:12 <mauke> fixed a bug in ploki's halting detector :-)
02:54:12 <elliott> `translateto sv also, it has limited internet access
02:54:15 <HackEgo> Traceback (most recent call last): \ File "/hackenv/bin/json", line 4, in <module> \ data = json.loads(sys.stdin.read().decode('utf-8')) \ File "/opt/python27/lib/python2.7/json/__init__.py", line 310, in loads \ return _default_decoder.decode(s) \ File "/opt/python27/lib/python2.7/json/decoder.py", line 346,
02:54:57 <elliott> `translateto hu also, it has limited internet access
02:55:00 <HackEgo> Traceback (most recent call last): \ File "/hackenv/bin/json", line 4, in <module> \ data = json.loads(sys.stdin.read().decode('utf-8')) \ File "/opt/python27/lib/python2.7/json/__init__.py", line 310, in loads \ return _default_decoder.decode(s) \ File "/opt/python27/lib/python2.7/json/decoder.py", line 346,
02:55:03 <elliott> :|
02:55:06 <elliott> `translateto la also, it has limited internet access
02:55:09 <HackEgo> Traceback (most recent call last): \ File "/hackenv/bin/json", line 5, in <module> \ print eval(sys.argv[1]).encode('utf-8') \ File "<string>", line 1, in <module> \ TypeError: 'NoneType' object is not subscriptable
02:55:14 <elliott> fuck you
03:00:01 <CakeProphet> ...wait, Python sets argv to None ?
03:00:06 <CakeProphet> WHY
03:00:41 <CakeProphet> oh wait eval.
03:00:48 <CakeProphet> could be something else then.
03:04:30 -!- kmc has quit (Quit: Leaving).
03:04:46 <elliott> hmm, synonyms of go as in "go west"?
03:04:49 <elliott> that aren't head
03:04:51 <elliott> face?
03:04:51 <elliott> travel?
03:05:00 <ais523> move?
03:05:06 <elliott> there's no movement involved
03:05:10 <elliott> it's about which direction you're facing
03:05:14 <ais523> oh, right, "go" is ambiguous, there
03:05:16 <Sgeo> turn
03:05:16 <ais523> "aim" in that case
03:05:28 <elliott> Sgeo: no, you turn <angle>
03:05:34 <elliott> you don't turn <absolute direction>
03:05:41 <elliott> ais523: hmm, I think I prefer face
03:05:50 <elliott> actually, aim is nicer
03:05:54 <elliott> setDelta works, but is boring :)
03:06:03 <ais523> depends what this is for, and you hadn't explained until that line
03:06:05 <ais523> *depends on
03:06:33 <elliott> right
03:06:36 <elliott> it's go as in funge
03:07:13 <CakeProphet> elliott: what are we talking about exactly?
03:07:15 <CakeProphet> sounds interesting.
03:07:19 <elliott> funge
03:07:56 <ais523> -98 particularly? -108?
03:08:07 <zzo38> I have make up new operator in Haskell when it seems useful to do so, but not always.
03:08:18 <monqy> ok
03:08:37 <zzo38> Such as the (.::) operator
03:08:46 <monqy> what does (.::) do
03:09:02 <zzo38> Defined as: (.::) = (.) . (.) . (.); infixr 9 .::;
03:09:31 <zzo38> I needed it once in my implementation of Constantinople.
03:09:53 <Sgeo> :t (.) . (.) . (.)
03:10:01 <Sgeo> Grah
03:10:07 <ais523> "infixr 9 .::;" took me a while to mentally parse
03:10:16 -!- azaq23 has quit (Ping timeout: 240 seconds).
03:10:21 <ais523> now I'm trying to work out what .:: even does
03:10:35 <Sgeo> argh, it'll type differently due to the infixr, won't it :/
03:10:37 <elliott> <ais523> -98 particularly? -108?
03:10:39 <elliott> latter is not a real language
03:10:41 <ais523> @unpl (.) . (.) . (.)
03:10:44 <elliott> Sgeo: no?
03:10:55 <ais523> elliott: you might be trying to interpret it in an attempt to make it into a real language
03:10:56 <monqy> it looks like composition but the second operand takes three arguments
03:11:04 <ais523> hey, where'd lambdabot go?
03:11:13 <zzo38> Does infixr cause it to type differently?
03:11:19 <ais523> [Error] lambdabot: No such nick/channel.
03:11:21 <Sgeo> Is there a difference between (.) . ((.) . (.)) and ((.) . (.)) . (.)
03:11:28 <zzo38> monqy: Yes that is what I used it for
03:11:33 <ais523> I don't think so, composing is associative
03:11:41 <elliott> ais523: I wish cpressey finished his revision to Funges but Vorpal ruined everything :(
03:11:43 <ais523> monqy: that was incredibly well worked out
03:11:55 <ais523> elliott: if ESO was still going, we could fix it
03:12:15 <monqy> I didn't feel like figuring it out myself so I politely asked ghci to give me its type signature
03:12:15 <ais523> but it didn't seem to work, as I was interested in standardising languages, and you and Vorpal were interested in how to best format the specs
03:12:21 <ais523> heh
03:12:24 <zzo38> I put infixr 9 to make it the same fixity as the normal composition operator
03:12:38 <Lymee> @unpl (.) . ((.) . (.))
03:12:43 <Lymee> @unpl ((.) . (.)) . (.)
03:12:48 <monqy> but if I stared at it long enough I think I could have done it
03:12:55 <ais523> (.) . (.) . (.) :: (b -> c) -> (a -> a1 -> a2 -> b) -> a -> a1 -> a2 -> c
03:13:03 <ais523> yep, that's a giveaway
03:13:27 <ais523> now I'm trying to work out why it does that
03:13:27 <zzo38> Yes, . is an associative operator it is one of the category laws. The other one is id
03:14:04 <zzo38> The monad laws are the same if you use <=< and return in place of . and id
03:20:03 <elliott> foldl' (\m' ins -> Map.alter (maybe Nothing (\(_:xs) -> if null xs then Nothing else Just xs))
03:20:03 <elliott> ins m')
03:20:03 <elliott> m (fpHandles ident)
03:20:03 <elliott> wha.
03:20:03 <elliott> t
03:21:31 <monqy> what is that
03:23:24 <mauke> a loop that modifies a map m
03:23:43 <mauke> for each key in fpHandles ident it drops the first element of the corresponding list
03:25:19 <oerjan> !haskell :t maybe Nothing
03:25:21 <EgoBot> maybe Nothing :: (a1 -> Maybe a) -> Maybe a1 -> Maybe a
03:25:50 <oerjan> aka =<<
03:26:45 <elliott> padTake _ 0 _ = []
03:26:46 <elliott> padTake fill n [] = fill : padTake fill (n-1) []
03:26:46 <elliott> padTake fill n (x:xs) = x : padTake fill (n-1) xs
03:26:46 <elliott> I don't even know what some of this is
03:26:46 <elliott> oerjan: oh thanks
03:26:55 <elliott> omg maybe Nothing is a really nice =<<
03:26:58 <elliott> implementation I mean
03:27:03 <mauke> :t M.alter (\mvs -> do _ : vs <- mvs; return vs)
03:27:07 <elliott> but um
03:27:14 <mauke> !haskell :t M.alter (\mvs -> do _ : vs <- mvs; return vs)
03:27:19 <elliott> oerjan: (>>= f) sure is a weird way to write that :D
03:28:04 <oerjan> mauke: EgoBot doesn't have predefined imports
03:28:16 <mauke> !haskell :t Data.Map.alter (\mvs -> do _ : vs <- mvs; return vs)
03:28:18 <EgoBot> Data.Map.alter (\mvs -> do _ : vs <- mvs; return vs) :: (Ord k) =>
03:28:29 <mauke> "good" job
03:28:37 <oerjan> mauke: the rest is sent in DCC
03:28:43 <monqy> padTake? so if it reaches the end of the victim list it fills the rest of the result with fill rather than cutting off?
03:28:45 <mauke> hahaha, wtf
03:29:08 <elliott> egobot's line-breaking is... not universally liked
03:29:18 <mauke> did you mean: fucking stupid
03:30:09 <oerjan> if null xs then Nothing else Just xs = guard (null xs) >> Just xs, i think
03:30:16 <oerjan> er wait
03:30:29 <oerjan> backwards test
03:30:36 <elliott> mauke: well it lets you receive the output of programs that output a lot, and in clients that automatically accept dcc chats it works ok
03:30:42 <elliott> better than rate-limiting, at least, in that case
03:30:51 <elliott> mauke: egobot can take urls too, so it's possible to run complex stuff with it
03:31:04 <oerjan> `which ghci
03:31:06 <HackEgo> ​/opt/ghc/bin/ghci
03:31:16 <mauke> elliott: how is that better than rate limiting?
03:31:22 <mauke> given that you have to do rate limiting anyway
03:31:26 <oerjan> `run ghci -e ':t Data.Map.alter (\mvs -> do _ : vs <- mvs; return vs)
03:31:28 <HackEgo> sh: -c: line 0: unexpected EOF while looking for matching `'' \ sh: -c: line 1: syntax error: unexpected end of file
03:31:28 <elliott> mauke: no you don't, not for dcc chat
03:31:34 <oerjan> `run ghci -e ':t Data.Map.alter (\mvs -> do _ : vs <- mvs; return vs)'
03:31:37 <mauke> elliott: no, but for the rest of the bot
03:31:37 <HackEgo> ghc: on the commandline: cannot use `--interactive' with `-e' \ Usage: For basic information, try the `--help' option.
03:31:39 <elliott> waiting minutes to get fifty lines of output or errors is annoying
03:31:51 <oerjan> `run ghc -e ':t Data.Map.alter (\mvs -> do _ : vs <- mvs; return vs)'
03:31:55 <elliott> i don't like EgoBot's solution, i'm just devil's avocadoing :)
03:31:56 <HackEgo> ​<command line>: can't load .so/.DLL for: libgmp.so (libgmp.so: cannot open shared object file: No such file or directory)
03:32:02 <elliott> oerjan: hackego ghc doesn't work yet
03:32:03 <oerjan> gah
03:32:07 <oerjan> oh
03:33:06 <elliott> hmm, making my fingerprint scheme work with -Werror will be rather tricky
03:33:37 <ais523> why do they generate warnings? and can you fix them with insane workarounds?
03:33:52 <elliott> Shiro/Fingerprints/MODU.hs:17:1:
03:33:52 <elliott> Warning: Pattern match(es) are non-exhaustive
03:33:52 <elliott> In an equation for `run':
03:33:52 <elliott> Patterns not matched:
03:33:52 <elliott> _ A
03:33:54 <elliott> _ B
03:33:55 <ais523> an IOCCC entry I've been sitting on waiting for the IOCCC to actually happen generates only three warnings in gcc and they're all incorrect
03:33:56 <elliott> _ C
03:33:57 <elliott> _ D
03:33:59 <ais523> even though it /should/ generate a lot more
03:34:00 <elliott> ...
03:34:02 <elliott> the whole point is that you specify what instructions you handle so that you never get called with an instruction you can't handle :)
03:34:11 <elliott> adding an extra line to just fail boringly to each fingerprint is really annoying
03:34:22 <elliott> what i really want is some kind of type-level restriction of the fingerprint instructions but aargh
03:34:28 <elliott> like
03:34:34 <ais523> elliott: this sounds like the sort of thing Anarchy is designed for (will be designed for, when I get round to designing it)
03:34:43 <elliott> run :: (IsInstructions ins (A :+: B :+: C :+: Nil)) => ins -> Shiro ()
03:34:45 <elliott> but um
03:34:47 <elliott> that's horrific
03:34:50 <oerjan> btw padTake fill n l = take n $ l ++ repeat fill
03:34:50 <ais523> my solution to that problem was to invent a language :)
03:34:52 <elliott> and I'm not sure it'd work anyway
03:35:01 <elliott> oerjan: thanks
03:35:45 <elliott> hmmm
03:35:53 <elliott> I guess I could use a gadt
03:38:54 <elliott> class Elem x xs
03:38:55 <elliott> instance Elem x (x :- xs)
03:38:55 <elliott> instance (Elem x xs) => Elem x (y :- xs)
03:38:58 <elliott> turns out, this _isn't_ a good instance :)
03:39:11 <elliott> I think I need a ~/~
03:39:16 <elliott> or, hmm
03:39:24 <elliott> I suppose HList has solved this
03:43:01 <Sgeo> Heterogeneous List?
03:43:08 <elliott> yes.
03:43:09 <elliott> oerjan: halp
03:43:32 <Sgeo> elliott, is Active Oberon a good language
03:43:34 <Sgeo> ?
03:43:45 * Sgeo feels like he's going to be shot
03:44:04 <elliott> Oberon is a bad language but an interesting one.
03:44:24 <oerjan> wat
03:45:11 <Sgeo> Hmm. What's bad about it, and what's interesting about it?
03:45:23 <elliott> oerjan: i'm trying to define this FPIns type but I can't manage it :(
03:45:38 <oerjan> what type
03:45:49 <elliott> basically, I want, for letter=A,B,C, letter :: FPIns xs iff xs contains the type letter
03:45:56 <elliott> where xs is a list of the form (a :- b :- ... :- xs)
03:45:57 <elliott> i.e.
03:46:04 <elliott> A :: FPIns (A :- B :- Nil)
03:46:10 <elliott> A :: FPIns (B :- A :- Nil)
03:46:12 <elliott> A :: FPIns (A :- Nil)
03:46:13 <elliott> etc.
03:46:23 <elliott> but A :/: FPIns (B :- Nil)
03:46:41 <oerjan> ah. well i suspect the problem is you need to check for two types _not_ being equal in that.
03:46:45 <elliott> indeed
03:46:53 <elliott> iirc someone did that on stack overflow...
03:47:01 <elliott> oerjan: what if I required the list to be in order?
03:47:05 <elliott> i.e., (B :- A :- Nil) is not ok
03:47:08 <elliott> where A < B < C
03:47:15 <ais523> oerjan: not equal as in cannot be equal, or as in aren't known to be identical?
03:47:21 <elliott> hmm, I think I could easily do that, with a _lot_ of boilerplate code
03:47:27 <elliott> in fact, I could do it out of order too
03:47:32 <elliott> with a _lot_ of boilerplate
03:47:37 <oerjan> ais523: ghc does not give a way to distinguish those, i think
03:47:55 <ais523> ah, OK, even though they're distinguishable concepts
03:48:18 <oerjan> as in, the basic type class lookup contains _no_ not-equal checks
03:48:44 <elliott> oerjan: http://sprunge.us/UaaA behold my solution that will scale perfectly to the real A-Z situation
03:48:45 <oerjan> ...well, there _are_ overlapping instances.
03:49:16 <elliott> omg it works :D
03:49:24 <elliott> oerjan: not there, there aren't?
03:49:29 <elliott> or are you talking to ais523
03:49:52 <elliott> oerjan: oh my god
03:49:53 <elliott> guess what
03:49:56 <elliott> i defined all this infrastructure
03:49:58 <elliott> test :: FPIns (C :- A :- Nil) -> IO ()
03:49:59 <elliott> test A = return ()
03:49:59 <elliott> test C = return ()
03:50:03 <elliott> will warns about a non-exhaustive pattern match
03:50:11 <elliott> IM GOING TO RIP OUT GHC'S GUTS AND REPLACE THEM WITH DEATH
03:50:40 <Gregor> ... what the flying eff is Intel AppUp?
03:50:57 <oerjan> elliott: well yes. but i also had that method in mind, the point is that it requires you to check for equality with whatever it is to prove it is not any of the other options
03:51:17 <elliott> Gregor: an app store, it looks like
03:51:19 <elliott> for WINDOZE
03:51:27 <ais523> Gregor: a Google search gives no conclusive results, but implies that it's some sort of application store
03:51:38 <elliott> dear Intel: stop making things that aren't processors; love, everyone
03:51:45 <zzo38> elliott: How would that help? How can you replace it with death it does not seem you would write a program
03:51:53 <ais523> New Legends Announced \ Five new developers have become Legends of the Intel AppUp developer program. Read their inspiring stories!
03:52:23 <Gregor> elliott: s/ that aren't.*//
03:52:26 <ais523> looking at it, it appears to be an appstore combined with a cross-platform framework for writing mobile/tablet apps, that can also end up on non-mobile platforms
03:52:32 <oerjan> elliott: you might be able to define IsEq t1 t2 typeBool and use it as a subroutine
03:52:40 <ais523> it has an SDK with C and C++ bindings
03:52:50 <elliott> Gregor: Mr. Ex Intel Employee
03:52:51 <oerjan> then only that one needs to contain all the matches
03:52:55 <elliott> "I SAW THE HORRORS"
03:52:58 <elliott> "OH, GOD, I SAW THE HORRORS"
03:53:09 <oerjan> hm wait does that actually help
03:53:17 <Gregor> elliott: All my systems are still Intel too :P
03:53:21 <elliott> oerjan: um there is a more important problem, i.e. this strategy _does not work_
03:53:29 <oerjan> well, that too :P
03:53:30 <elliott> oerjan: because GHC's exhaustive pattern detector is too fucking stupid
03:53:47 <elliott> Gregor: Well, AMD don't exactly make the most amazing processors :P
03:54:17 <ais523> Gregor: http://appdeveloper.intel.com/en-us/article/frequently-asked-questions is their FAQ, it seems to explain what they're doing, at least
03:54:38 <ais523> the funny thing is, it appears to be run by the sort of managers who use the word "rockstar"
03:54:52 <ais523> "Developers who participate in the Intel AppUp Developer Program earn reputation. Developers earn points and advance in degrees of the Intel® Black Belt Software Developer Program. For more information on the reputation and Intel Black Belt Software Developer Program, see the Intel Black Belt Software Developer Program FAQs."
03:55:08 <elliott> ais523: nice
03:55:12 <Gregor> Ohhhh, I see, it's some retarded pseudopromotion for netbooks and such made byt hem.
03:55:22 <Gregor> s/byt hem/with their processors/
03:55:28 <oerjan> <elliott> dear Intel: stop making things that aren't processors; love, everyone <-- what if those were microcode apps.
03:55:34 <ais523> Gregor: an SDK for developing applications for them, too, I think
03:55:41 <ais523> the SDK seems to be the only actual product there
03:55:48 <Gregor> ais523: Which consists, I assume, of ICC :P
03:55:49 <ais523> oerjan: brilliant
03:55:51 <elliott> I wish everyone responsible for this "trendy epic rockstar lolcode FAIL ruby on rails" trend would just go into some field that isn't already as terrible as it can get
03:56:04 <elliott> oerjan: so fast
03:56:33 <ais523> atm it only seems to work on MeeGo and Windows
03:56:37 <ais523> that's a fun choice of platforms
03:57:02 <elliott> only available for QNX and RiscOS
03:57:20 <ais523> wow, it has an incredibly short API
03:57:23 -!- MDude has changed nick to MSleep.
03:57:32 <ais523> which entirely consists of determining whether the application is authorized to run
03:57:48 -!- azaq23 has joined.
03:57:50 <ais523> therefore, it's /actually/ some sort of DRM scheme that only works on closed platforms where you can't just patch the checks out
03:58:25 <ais523> this just makes me even more confused as to what it is
03:58:42 <oerjan> <elliott> I wish [...] would just go into some field that isn't already as terrible as it can get <-- wait why, then they'd be able to do _more_ damage
03:58:51 <ais523> "In-app advertising, subscriptions, and links to external marketplaces for in-app purchases are permitted for a limited time. We understand that these features are important to you and are not yet available in the SDK. Until they become available, you are free to implement them on your own. As we roll these features into the SDK, we will then require that they be implemented through the SDK."
03:59:16 <elliott> oerjan: yes, but it wouldn't affect _me_
03:59:23 <elliott> I don't keep up on the latest blacksmith news
03:59:37 <ais523> Gregor: so it's /actually/ an app store that has its own DRM scheme
03:59:42 <ais523> I think, at least
03:59:59 -!- GreaseMonkey has quit (Ping timeout: 276 seconds).
04:01:12 <zzo38> Do you know about the Underhanded C Contest?
04:01:19 <ais523> zzo38: yes, and have even submitted to it
04:01:39 <ais523> my submission was a bit too obvious, though, touching every page of the memory it allocated "to check that it works"
04:02:01 <ais523> turns out that implementing 4GiB of memory on Linux is insufficiently slow unless you do that
04:02:35 <ais523> (I was doing the OS benchmarking thing, trying to exploit the fact that allocating the entire addressible memory space and then pagefaulting it all is reasonably quick on a 16-bit system but not on a 32-bit system)
04:06:42 <mauke> did the contest just die 2 years ago?
04:07:01 <ais523> the IOCCC died a while ago
04:07:08 <ais523> at least, it went into NetHack devteam mode
04:07:17 <ais523> doing nothing but the occasional news entry about how they were doing something, and replying to queries
04:07:19 <mauke> I mean the underhanded C contest
04:07:43 <mauke> because I sent them an entry, and then nothing happened and the site stopped updating
04:07:51 <ais523> the most recent news entry in the IOCCC is from 30 april 2010, saying that there would be something new on 15 may 2010, but there wasn't
04:07:58 <ais523> mauke: possibly Xcott's just got a job, or something
04:08:04 <ais523> that's the issue with a competition run by one person
04:08:19 <zzo38> Some of their codes I tried to notice what is wrong, I noticed what is wrong not too difficulty. The third place in 2008 I noticed very easily. The first place (John Meacham) I looked and found easily, the data that is supposed to be deleted it looks like it will write 000 if it was originally 255.
04:08:25 <elliott> oh, I know what I could do! I could map FPInses to functions instead
04:08:32 <elliott> in fact, that would work perfectly, and let me give nice names to each fp instruction
04:08:35 <zzo38> Now I looked at the answer and in fact that is correct.
04:08:41 <elliott> now to add these lines to a comment in a file and promptly forget about them
04:09:05 <zzo38> These codes are not difficult to understand if you can understand C programming.
04:11:30 <elliott> BAD: } doesn't reset storage offset
04:11:31 <elliott> ummm
04:11:34 <elliott> my style fixes broke my program
04:11:49 <ais523> zzo38: I think the idea is just to make it look like a mistake
04:12:07 -!- GreaseMonkey has joined.
04:12:20 <mauke> "current" task: http://underhanded.xcott.com/?p=18
04:12:23 <mauke> my solution: http://mauke.dyndns.org/stuff/c/underhanded/lug.c
04:12:58 <elliott> ok this is utterly bizarre
04:15:49 <ais523> mauke: there's a lot of code there to look through
04:16:26 <mauke> I blame it on the complexity of the task
04:16:28 * elliott is immediately sceptical of COUNTOF and DEFSTRUCT
04:16:39 <mauke> those are "standard" macros in my code
04:16:40 <elliott> also of xmalloc, what is that even about :)
04:16:51 <elliott> mauke: sure, you say that :P
04:16:54 <mauke> a malloc wrapper that checks for errors
04:17:09 <elliott> it's not a malloc wrapper, it has a different signature
04:17:10 <elliott> it's more like calloc
04:17:21 <mauke> yes, because calloc's interface is superior
04:17:26 <mauke> it still wraps malloc
04:17:31 <elliott> OR MORE EXPLOITABLE????
04:17:40 <mauke> no
04:17:44 <elliott> admittedly, I can't actually find any bugs :)
04:17:50 <mauke> all paths that don't abort() lead to return malloc(n * m)
04:18:09 <ais523> in a UCC entry, if I had no malicious code in a malloc wrapper, I'd just use malloc directly
04:18:11 -!- edwardk has left ("Leaving...").
04:18:47 <ais523> there's an obvious = vs. == mixup in the for loop in insert()
04:19:03 <ais523> I haven't figured out its effects yet, but I suspect that's the malicious part
04:19:14 <mauke> you mean (p = *pp)?
04:19:37 <mauke> that's obviously deliberate
04:19:37 <ais523> yep
04:19:45 <ais523> well yes, the paren indicates that
04:19:50 <ais523> why is that in the test part of a for loop?
04:19:51 <mauke> p isn't initialized otherwise, and ... yeah
04:20:10 <ais523> perhaps it should be before the first semicolon, rather than after, in correct code
04:20:25 <mauke> no, pp is updated in the loop
04:20:31 <mauke> I just want a shorter name for *pp
04:21:08 <zzo38> I don't know all the functions that are used in that lug.c program
04:21:13 <ais523> at least, if that's a crazy synonym for "for (;p;pp = &p->next,p=*pp)" and it's /not/ malicious, why are you writing crazy code like that?
04:21:42 <elliott> ip <- gets currentIP
04:21:43 <elliott> let Ray pos delta = ray ip
04:21:43 <elliott> let (ox,oy) = storageOffset ip
04:21:43 <elliott> modifySOSS $ (oy:) . (ox:)
04:21:43 <elliott> modifyCurrentIP $ const ip{ storageOffset = pos .+. delta }
04:21:43 <mauke> ais523: in your version p is uninitialized
04:21:43 <elliott> heh, what a subtle bug
04:21:48 <mauke> ais523: I'd call that crazy
04:21:56 <elliott> (hint: the stack-stack is part of the IP)
04:21:57 <ais523> mauke: well, initialize it at the start
04:21:58 <mauke> zzo38: what don't you know?
04:22:01 <ais523> as well
04:22:08 <ais523> the use of p at all there is a little suspect
04:22:09 <mauke> ais523: that duplicates p = *pp for no reason
04:22:28 <ais523> for the reason of not putting the assignment in the test part of a for loop?
04:22:38 <ais523> actually, p=*pp would be best used in the loop body
04:22:38 <mauke> ais523: yes, how is that a good thing?
04:22:41 <ais523> and *pp as the condition
04:22:50 <zzo38> It has functions (defined externally) that I have never used or seen before
04:22:50 <mauke> ais523: that would duplicate *pp for no good reason
04:22:57 <mauke> zzo38: which ones?
04:22:58 <ais523> mauke: side effects on the test part of a for loop is a mad thing to do
04:23:02 <mauke> ais523: wrong
04:23:09 <ais523> saving two characters is not a good reason to do it
04:23:18 <mauke> K&R disagree
04:23:41 <ais523> they did it in while loops, but in for loops there are perfectly good other places to put it
04:23:48 <mauke> wrong
04:24:04 <elliott> mauke: you realise the goal is to write code that nobody can fault you about? :P
04:24:07 <mauke> what I really want is "load variables; test condition; loop body; repeat"
04:24:20 <mauke> elliott: I didn't realize people had such crazy ideas about "good" code
04:24:23 <ais523> mauke: and that's what a for loop has?
04:24:37 <ais523> mauke: reading code with side-effects in the test of a for loop makes me stare at it for minutes working out exactly when it runs
04:24:43 <mauke> ais523: it's almost what a while loop has if you merge the load/test parts
04:24:44 <ais523> that's not the mark of good code, because it isn't easy to read
04:24:47 <elliott> mauke: it's not exactly controversial that repeating a tiny statement is better than making a complicated for loop head
04:24:58 <mauke> ais523: in this case I also need a "step" part, so that's where the for loop comes in
04:25:02 <ais523> it's the sort of thing I'd expect in the IOCCC, not the UCC if meant to be non-deliberately-incorrect code!
04:25:13 <mauke> elliott: p = *pp isn't complicated
04:25:23 <elliott> mauke: no, it isn't; that's why repeating it doesn't matter
04:25:27 <elliott> vs. complicating the for loop head
04:25:41 <mauke> seriously, I don't see how this "complicates" anything
04:25:43 <ais523> you use a similar idiom in drop_superseded
04:25:50 <mauke> yeah
04:26:04 <ais523> and I'm wondering if there's a shorter /and/ clearer way to write it
04:26:26 <ais523> you have while ((p = *pp)) { /* ... */ *pp = p->next; free(p); }
04:28:08 <ais523> I'd probably write it as p=*pp; while (p) { /* ... */ p2 = p->next; free(p); p = p2; } *pp = p;
04:28:18 <ais523> actually, *pp = 0 at the end
04:28:32 <elliott> ais523's is less clear than mauke's there
04:28:51 <ais523> elliott: well, back in the days of K&R idiomatic would have been free(p); p = p->next;
04:28:54 <ais523> but that's incorrect nowadays
04:29:00 <elliott> heh
04:29:00 <mauke> I tried to keep this as short and concise as possible
04:29:03 <ais523> so you need a helper variable
04:29:07 <mauke> where every part is simple and obviously correct
04:29:14 <zzo38> Such as ferror and regcomp, which I have not used, although I can guess what their function is.
04:29:33 <ais523> mauke: we've been discussing it for 11 minutes, is that "simple and obviously correct"?
04:29:34 <mauke> zzo38: ferror is standard C
04:29:39 <ais523> zzo38: ferror is standard C
04:29:51 <zzo38> mauke: Yes I know it is, I have just simply not used it before.
04:29:53 <mauke> ais523: maybe you're just not a very experienced C programmer
04:29:54 <ais523> heh, and our nicks are the same number of pixels in this font so it even lined up
04:30:13 <ais523> mauke: I actually taught C for a while; and I teach people not to pull tricks like that
04:30:27 <ais523> actually, I fear it's the API of your function that's making it confusing
04:30:39 <mauke> yeah, I have a bit of a history with C teachers
04:30:48 <elliott> so does ais523
04:30:51 <ais523> you take a pointer to a pointer, and what you do with it is to iterate on the pointed-to pointer itself, and then set the pointed-to pointer to NULL
04:30:54 <zzo38> I do not pay a lot of attention to security unless I am writing a program meant to be run suid or accessed remotely
04:30:56 <Sgeo> tricks?
04:31:39 <mauke> ais523: I'm destructively modifying a linked list
04:31:42 <ais523> at least you're using C not C++ so the side-effect is marked, but it's a side effect that I don't get why it's necessary at all; nulling pointers when you free them isn't going to save you from bugs because if the code was buggy before, it'll /still/ crash
04:31:52 <mauke> ais523: the alternative to taking a pointer-to-pointer is to take and return a pointer
04:31:56 <mauke> and that's just evil
04:32:03 <elliott> that's evil?
04:32:04 <ais523> mauke: no, because you always set it to NUL
04:32:05 <ais523> *NULL
04:32:12 <zzo38> But the John Meacham's code (and Linus Akesson's code) for the 2008 contest has something that is very obviously wrong to me even though I did not know what the contest was; I could tell it was dealing with PPM files just from reading the code.
04:32:16 <ais523> so the caller knows that the value should become NULL
04:32:18 <mauke> ais523: wait, where?
04:32:28 <ais523> drop_superseded
04:32:41 <ais523> *pp is always set to NULL when it exits, as it's the only way to drop out of the loop
04:32:54 <ais523> and if that isn't obvious, then perhaps even you were confused by your own code
04:33:00 -!- lambdabot has joined.
04:33:11 <mauke> ais523: pp is modified in the loop
04:33:21 <mauke> it may reach NULL naturally
04:33:31 <ais523> mauke: but that doesn't matter, all that matters is the value at the end of the loop, which is always NULL
04:33:42 <mauke> yes, because it has reached the end of the list
04:33:50 <mauke> that doesn't mean the list was completely destroyed
04:33:53 <ais523> so the fact that pp is modified in the loop is irrelevant
04:33:57 <mauke> what
04:34:01 <coppro> .wub 16
04:34:03 <coppro> .wub 16
04:34:03 <ais523> you could just set it to NULL afterwards and have the same effect
04:34:03 <Sgeo> ais523, I think the point of nulling pointers before free is in case you accidentally use it again, at least it will _always_ be a crash, instead of sometimes by chance something bizarre
04:34:13 <mauke> ais523: where am I setting *pp to NULL?
04:34:19 <elliott> coppro: ...
04:34:30 <elliott> Sgeo: glibc detects that kind of crap nowadays, IIRC
04:34:32 <ais523> mauke: while((p = *pp)) { /* ... */ } is either an infinite loop or it sets *pp to NULL
04:34:44 <ais523> elliott: it can't do so with a 100% success rate without leaking memory, that's provable
04:34:45 <mauke> ais523: wrong
04:34:52 <ais523> mauke: how is it not wrong
04:34:57 <ais523> there are no break instructions in the /* ... */
04:35:05 <ais523> and no longjmps out of it either
04:35:10 <zzo38> Some people have told me my C codes were of the kind suitable for IOCCC but I don't think so.
04:35:12 <ais523> so, the /only/ way the loop can end is if *pp is NULL
04:35:16 <elliott> ais523 is obviously right here, without even looking at the code
04:35:18 <mauke> ais523: correct
04:35:24 <ais523> so, the loop sets *pp to NULL
04:35:25 <mauke> ais523: that doesn't mean it's setting *pp to NULL
04:35:31 <mauke> NO
04:35:42 <elliott> either *pp is initially NULL or is set to NULL during the loop
04:35:46 <mauke> wrong
04:35:51 <ais523> yes, the loop only ends with *pp as NULL, and the loop is the last thing in the function
04:35:53 <mauke> is everyone crazy now?
04:35:59 <ais523> so the function sets *pp to NULL, always
04:36:02 <elliott> no, but you might be if you keep insisting one is two
04:36:15 <mauke> elliott: let me try to convince you first, you seem more sane
04:36:20 <ais523> the value of *pp during the loop changes, but that only matters if it's inspected during the loop, and it doesn't
04:36:23 <ais523> *and it isn't
04:36:43 <ais523> oh, aha, there's an assignment to pp during the loop
04:36:49 <ais523> which is even mindboggling
04:36:51 <elliott> mauke: OK, but I'm not going to bother looking at the code; how can that loop terminate, under those conditions about the body that you agreed to, without *pp either initially being NULL or being set to NULL during the loop?
04:36:54 <mauke> elliott: the loop condition is *pp. pp is modified in the loop. thus the loop may hit a point where *pp is already NULL without modifying *pp
04:36:55 <ais523> so you're calling two different things pp
04:37:03 <elliott> mauke: setting pp sets *pp
04:37:07 <mauke> elliott: bullshit
04:37:19 <ais523> and that's why you can make apparently self-contradictory statements, because you don't distinguish between the multiple possibilities for pp
04:37:22 <elliott> your code sounds quite confusing, I'd have locked you up by now :)
04:37:32 <zzo38> Do *you* think my C codes are of the kind suitable for IOCCC???? I don't think so....
04:37:47 <mauke> ais523: I'm calling N different things pp
04:37:48 <ais523> zzo38: probably not, good IOCCC code has to be written specifically for the IOCCC
04:37:51 <mauke> ais523: I AM ITERATING OVER A LIST
04:38:14 <elliott> Programmer suspected of espionage yells at FBI interviewer; jailed for life
04:38:20 <mauke> also, <mauke> ais523: pp is modified in the loop
04:38:27 <ais523> OK, so you're iterating over a list and mutating it while iterating over it
04:38:38 <mauke> <mauke> ais523: I'm destructively modifying a linked list
04:38:39 <ais523> and you're using pp as a pointer to the previous next, or the first element otherwise
04:38:54 <mauke> I'm using pp as the address of the pointer to the current element
04:39:09 <zzo38> ais523: Well, yes. But I don't think my codes are obfuscated or anything, it seems clearly to me. There are sometimes a few strange things but I usually describe it if I think it is too strange
04:39:10 <mauke> this is like linked list manipulation 101
04:39:34 <ais523> mauke: it's a trick that I /occasionally/ see when mutating a linked list, in order to avoid specialcasing its start
04:39:40 <ais523> and it's normally written more obviously in such cases
04:39:53 -!- fungot has quit (Ping timeout: 260 seconds).
04:39:59 <ais523> it doesn't help that the common case is hidden inside an if statement, and the main body of the loop handles the rare case
04:40:18 <mauke> ok, that's a point
04:40:28 -!- fizzie has quit (Ping timeout: 260 seconds).
04:40:34 <mauke> I believe I wanted to get the common case out of the way first
04:40:49 <mauke> if (whatever) ... continue; done
04:41:15 <zzo38> This code has nothing wrong with it to me but some people say it is wrong to do a lot of the stuff I do in this code http://repo.or.cz/w/TeXnicard.git/blob_plain/HEAD:/texnicard.w
04:41:42 <mauke> (the alternative to using a pointer-to-pointer in the loop is two variables you have to keep in sync manually plus some code duplication)
04:41:45 <elliott> zzo38: you forgot to use more-notation
04:42:21 <zzo38> elliott: For one thing, it is not a Haskell program.
04:42:29 <elliott> well yes, that's the other problem.
04:42:31 <ais523> I think I know where the bug likely is; I think there's an off-by-2 (or off-by-4) error in one of the calls to cap_equals, because the API you're using would make such errors really hard to notice
04:42:51 <zzo38> I don't think so. C is still a good programming language too.
04:43:15 <zzo38> LLVM would be very good (in fact, much better designed than C, I think) if there was a good macro system for it.
04:43:24 <ais523> you're taking the addresses of array elements all the time, and that's a perfect opportunity to accidentally do that "twice" and take, say, the 6th element by taking the second then taking its fourth
04:43:30 <zzo38> But TeXnicard is going to continue to be a C program.
04:43:56 <ais523> that would explain how field 6 becomes relevant even if it's not referred to by name
04:44:29 <mauke> ais523: easy to disprove. I only use array indices in calls to cap_equals, and cap_equals doesn't index
04:44:33 <zzo38> (Although I plan to write one of the related programs in Haskell; that is, part of the program for automating game play could be written in Haskell)
04:44:35 <mauke> ais523: therefore no double indexing occurs
04:44:46 <ais523> mauke: yes, right
04:44:54 <ais523> perhaps you should have slipped the bug in there, it'd have been well-hidden
04:44:58 <ais523> you easily could have done
04:45:36 <ais523> &m[2] in drop_superseded would have looked completely innocent
04:46:11 <mauke> hmm, true. why didn't I think of that?
04:47:26 <zzo38> Are there any hidden malicious stuff in *my* program? (Unless I put it by accident I do not expect so.)
04:48:32 <zzo38> (Actually I wanted to compile natural language into Haskell and/or Dangelo)
04:49:23 <elliott> mauke: as you can see, zzo38 is a gift to all of us
04:50:26 <mauke> elliott: I ignore them
04:50:34 <zzo38> Don't be so sure... OF ANYTHING!!!
04:50:40 <elliott> mauke: you're missing out
04:50:52 <elliott> <zzo38> Don't be so sure... OF ANYTHING!!!
04:50:53 <elliott> good advice
04:51:24 <ais523> mauke: is it deliberate that your regex doesn't quite match the one in the question, btw? you can cause the optional comment to not match by omitting the whitespace at the start of the comment whilst having it all match, but I'm not sure if that has any effect on the program flow
04:51:35 <ais523> and forgetting a space would look like a plausible error
04:51:45 <ais523> that's one of the first things I noticed, but I didn't bring it up
04:52:03 <mauke> what do you mean?
04:52:25 <ais523> ([A-Z]{3})([[:space:]]+[^[:space:]].*)? is what you have
04:52:29 <ais523> oh, then a $
04:52:42 <ais523> "any positive number of spaces, then anything that isn't a space, then any characters" is redundany
04:52:49 <ais523> *redundant
04:53:01 <ais523> or, hmm, is it?
04:53:10 <mauke> I wanted to be explicit
04:53:29 <ais523> it's definitely not what the question specified, "\s.*", which allows for a comment consisting entirely of whitespace
04:53:36 <elliott> mauke: that's a bit ironic
04:54:33 <mauke> ais523: correct. scan never checks if the regex actually succeeded, leaving old information in the capture buffers. this is triggered by trailing whitespace
04:54:37 <mauke> you've found bug #1
04:54:47 <mauke> (what, did you think there was only one hole?)
04:55:17 <ais523> in the UCC, you should probably only have one, otherwise you give more space to find malicious behaviour
04:55:50 <mauke> if they all look like plausible mistakes, some of them may survive a code review
04:55:56 <zzo38> If I fix haskell-src-exts to make some of the things I wanted to have in Haskell, including more-notation and a new kind of preprocessor with different macros (including running Haskell codes at tokenizer level), what would be called?
04:56:10 <ais523> also, I'm not sure if it's deliberate that the check on whether to succeed in insert (on fields 2 and 4) is different from the one in drop_superseded (on field 2 only)
04:56:26 <elliott> zzo38: zzo38skell-src-exts
04:56:46 <mauke> ais523: if it's a bug, it's not deliberate
04:56:47 <ais523> it looks wrong, especially because with insert removing duplicates, drop_superseded has no reason to exist at all
04:57:09 <mauke> but I don't remember the exact rules of the task anymore
04:57:12 <mauke> I'd have to reread it
04:58:11 <zzo38> elliott: That does not seem best name. Anyways it will be a full program rather than a library usable by other programs. It is written using unliterate layout style, so I will keep it that way when modifying it (although it is not the way I write my own programs)
04:58:27 <mauke> ais523: I think the idea was that something like A -> B, B -> C followed by A -> X would have to override A -> B and drop B -> C
04:58:30 <mauke> maybe
04:58:41 <ais523> hmm, perhaps
04:58:54 <ais523> it doesn't help that the task's unclear on what the intended behaviour is
05:00:36 <ais523> I'll give up reading it for now, anyway, the task's too vague for me to work out whether certain bits of it are right or not
05:00:52 <elliott> pop0gnirtsAsString is definitely the best function name I've ever created
05:00:57 <elliott> apart from push0gnirtsAsString
05:01:15 <ais523> elliott: recently, I was trying to think of a word starting with 0
05:01:20 <ais523> and "0gnirts" was the only one that came to mind
05:01:25 <elliott> "0gnirts" doesn't start with 0, it starts with '"'
05:01:32 <elliott> but, 0-day?
05:01:38 <ais523> well, the word was 0gnirts
05:01:45 <ais523> and I put quotes round it because I was quoting it
05:01:51 <ais523> and I didn't think of that one
05:01:53 <elliott> but the word is actually "0gnirts"
05:01:57 <ais523> well, OK
05:02:00 <elliott> they're not called 0gnirtses, they're called "0gnirts"es
05:02:05 <ais523> I pronounce it without the quotes
05:02:13 <elliott> how do you pronounce quotes?
05:02:14 <ais523> as o-gnerts
05:02:21 <ais523> that's /why/ I pronounce it without the quotes
05:02:24 <elliott> heh
05:02:56 <mauke> ais523: hint: all of the bugs are in scan and main
05:03:02 <ais523> (it's how you trigger a NetHack bug that only happens with over 1000 users)
05:03:11 <elliott> ais523: wat
05:03:18 <ais523> *over 9000
05:03:18 <elliott> how does that work?
05:03:28 <ais523> basically, overflow to the fifth digit of UIDs
05:03:54 <ais523> meaning that you can confuse it between 10000gnirts parsed as 1000+0gnirts or 10000+gnirts
05:04:01 <elliott> heh
05:04:14 <ais523> the effect being that UID 1000 can mess with UID 10000's savegames
05:05:14 <elliott> ?pl \f -> catchReflect $ pop0gnirtsAsString >>= ioFail . f
05:05:14 <lambdabot> catchReflect . (pop0gnirtsAsString >>=) . (ioFail .)
05:05:18 <elliott> no thanks
05:05:48 <zzo38> What does pop0gnirtsAsString means?
05:06:04 <elliott> funge
05:08:05 -!- copumpkin has changed nick to Commodus.
05:08:30 <ais523> zzo38: 0gnirts is the standard representation of strings in Befunge (and other Funges), and String is the standard representation of strings in Haskell
05:08:47 <ais523> the function pops an 0gnirts off the Funge stack and converts it to a String
05:08:47 -!- Commodus has changed nick to copumpkin.
05:09:05 <elliott> I should really make it use ByteStrings instead
05:09:14 <elliott> actually, the current way might be faster because the stack is a []
05:09:16 <elliott> but I should fix that, too
05:11:18 -!- CakeProphet has quit (Ping timeout: 240 seconds).
05:12:21 -!- augur has quit (Remote host closed the connection).
05:12:24 <zzo38> What was the first Haskell program you wrote?
05:12:34 <elliott> umm, I don't remember
05:12:36 <ais523> I can't remember
05:12:37 <elliott> probably something very simple
05:12:48 <elliott> first real program might have been the unfinished underload compiler? dunno.
05:13:08 <ais523> the first real Haskell program I wrote was an implementation of my theories about ICA to SCC type inference
05:13:20 <zzo38> ais523: What does that mean?
05:13:22 <ais523> which I've since reimplemented in OCaml
05:13:33 -!- invariable has joined.
05:13:43 -!- Nisstyre has quit (Ping timeout: 250 seconds).
05:14:08 <ais523> zzo38: ICA and SCC are two different type systems; ICA's type system is similar to Algol's (but a mathematically idealized version that also allows for concurrent execution), and SCC requires each variable to be accessed from finitely many functions at a time (with an explicit number bounding that)
05:14:10 -!- variable has quit (Ping timeout: 252 seconds).
05:14:52 <ais523> so basically, it's counting bounds on concurrent uses of a variable
05:15:15 <zzo38> OK.
05:15:27 <ais523> it boils down to simultaneous inequalities, in the end; I got a paper out of proving that those inequalities could always be solved with integers
05:16:29 <zzo38> First Haskell program I wrote is a compiler of esolang, too; but not Underload.
05:16:36 <zzo38> elliott: Did you use Template Haskell in that program?
05:16:48 <elliott> zzo38: no
05:16:53 <elliott> I tend to avoid TH
05:17:11 <zzo38> Do you dislike TH?
05:17:19 <ais523> elliott: are Haskell templates more or less sane relative to Haskell than C++ templates are to C++?
05:17:26 <ais523> s/are to/are relative to/
05:17:45 <elliott> zzo38: I don't dislike it so much as avoid it when it isn't absolutely necessary; it's very heavy, and functions are much nicer
05:17:54 <elliott> plus, writing TH code is very difficult (compared to using it)
05:17:58 <elliott> because of all the boilerplate
05:18:04 <elliott> ais523: I would say yes
05:18:17 <mauke> ais523: that comparison looks like a type error
05:18:24 <mauke> TH is much more like Lisp macros
05:18:26 <ais523> that wasn't intended to be a yes-or-no question, although I suppose that's one way to parse it
05:18:40 <ais523> I assume that TH is saner than C++ templates, but OTOH Haskell is saner than C++
05:18:53 <ais523> I was wondering which comparison had a greater sanity difference
05:18:55 <zzo38> I think TH is just not as powerful as some proper macros could be, that is why I want to implement new one, that can be used in addition to TH.
05:18:59 <elliott> mauke: you can compare differences in sanity
05:19:21 <mauke> I'd say the embedding is a bit awkward but at least in TH the metalanguage is Haskell
05:19:35 <mauke> that wins major sanity points over C++ templates
05:20:12 <ais523> arguably, C++ templates form a better language than C++ itself
05:20:16 <ais523> it's at least functional
05:20:26 <ais523> and reasonably self-consistent and well-behaving
05:20:29 <ais523> shame about the syntax
05:21:00 <elliott> I wonder what templates are like in SPECS
05:21:25 <zzo38> Enhanced CWEB allows you to do metaprogramming in C (although it is interpreted C)
05:22:05 <zzo38> Constantinople compiler in Haskell uses Template Haskell codes.
05:22:26 <mauke> @keal
05:22:27 <lambdabot> Cale etc already pointed out Haskell is puny to nothing to emulate using my barrage of mathematic theories
05:23:15 -!- ive has joined.
05:24:03 -!- kmc has joined.
05:24:08 <elliott> yay, all done, and things are slower than before
05:24:41 <elliott> I like how I'm optimising a program that doesn't strictly work... feels like C
05:24:54 <elliott> oh dear, has it gone over a thousand lines of code?
05:25:19 <elliott> oh, wow, my SLOC have shrinked since earlier today
05:28:24 <zzo38> My program contains things that might be badly done because I have not written program in Haskell before, such as this: initialMem = MemList $ (MemList $ fix (MemZero :)) : fix (MemZero :); p_nand x y = Pointer undefined (liftA2 r_nand (mem_read x) (mem_read y)); transWrite w p x y = mem_write p (w x (mem_read p y)) y;
05:29:39 <elliott> why the undefined?
05:30:08 <zzo38> Because a "nand" expression in Constantinople is read-only. The first parameter to the Pointer constructor is used for writing.
05:30:31 <elliott> then you want a ROPointer and a Pointer being ROPointer + write
05:30:34 <zzo38> At least, I think it is read-only; if they want to change that, anyone can change this
05:30:47 <elliott> or at least a Maybe field in Pointer so that you can handle read-only things without undefined
05:32:52 <zzo38> That is one idea. Thanks for opinion. But it seems to me that the simplest and reasonable way to do it is to simply not define the writing function for "nand" but otherwise use everything the same way.
05:33:46 <elliott> zzo38: your types, as they are, do not correctly model the situation; so you are very likely to run into bugs you wouldn't otherwise
05:33:49 <oerjan> zzo38: fix (x :) = repeat x
05:34:00 <zzo38> oerjan: OK, thanks. I didn't know that.
05:34:03 <elliott> zzo38: Haskell is all about defining the right types to model your situation, and then using them correctly; without that, you won't benefit much from its strengths at all
05:34:15 <ais523> hmm, "fix (x:)" is actually shorter
05:34:26 <ais523> no, same length
05:34:38 <ais523> just uses narrower characters, so shorter in a proportional font
05:34:46 <mauke> to paraquote larry, "the trick is to use haskell's strengths rather than its weaknesses"
05:35:31 <ais523> hmm, are there any interesting Haskell "conducts", like one-liner Python?
05:35:46 <oerjan> "conduct"?
05:35:46 <ais523> restrictions you put on yourself so you avoid using the language's strengths and have to be more creative?
05:35:57 <ais523> oerjan: like in NetHack, a self-imposed restriction to make it more difficult
05:36:13 <elliott> ais523: point-free style... WITH NO EXCEPTIONS
05:36:21 <elliott> and no more than one level of parentheses, too
05:36:29 <elliott> and no where clauses. or completely junk definitions.
05:36:31 <ais523> beautiful
05:36:36 <oerjan> elliott: that's a rather lethal combination
05:36:37 <ais523> "completely junk definitions"?
05:36:51 <elliott> ais523: as in, definitions that don't have any generalness at all, and you're just using them to subvert the parentheses and where rules
05:36:55 <elliott> obviously it's slightly subjective :P
05:36:59 <ais523> also, how do you do a where clause in a pointfree program anyway
05:37:04 <elliott> foo = f . g
05:37:06 <elliott> where f = ...
05:37:11 <ais523> oh, I see
05:37:13 <oerjan> can you even @pl everything that can be @pl'ed without nesting parentheses
05:37:26 <elliott> oerjan: with the right combinators, surely; and like I said, you can use top-level definitions
05:37:26 <ais523> you need to ban let..in too, then, unless you consider that to break pointfree and where not to
05:37:29 <elliott> just not "junk" ones
05:37:33 <elliott> ais523: well ok yes yesyes
05:37:50 <ais523> my ICA-addled mind insists on interpreting let/where as simply sugar for lambda
05:39:11 <elliott> ais523: it's not quite trivial sugar in the presence of mutually-recursive definitions
05:39:17 <zzo38> I also use this, which I don't know if anyone else already made up something like this: monadify = either (fail . show) return;
05:39:19 <elliott> oerjan: did you ever find an elegant desugaring of that?
05:39:57 <ais523> elliott: in ICA, recursion has to be explicit anyway
05:40:12 <ais523> e.g. let versus let rec ... and ... in OCaml (and probably other MLs too)
05:40:45 <zzo38> Do you know if anything like the "monadify" function exists?
05:40:51 <elliott> ugh, some of this program is just so, so ugly and I don't even know where to statr on fixing it
05:41:02 <elliott> I want something like hlint but that's really, really anal
05:41:12 <elliott> I can solve a list of problems in arbitrary order, I just can't make this program good
05:41:32 <oerjan> oh hm Jot has bounding parentheses if you convert it to @pl-form
05:41:50 <oerjan> *bounded
05:42:11 <ais523> oerjan: I've actually been wondering what the minimum nesting level is needed for TCness in BF
05:42:26 <ais523> I suspect it's either 2 or 3; 0 is obviously sub-TC, and 1 nearly as obviously
05:42:43 <oerjan> [F0] = [F]SK = ($ ap const) $ [F]
05:43:02 <oerjan> [F1] = \x y -> [F] (x y)
05:43:11 <oerjan> @pl \x y -> f (x y)
05:43:11 <lambdabot> (f .)
05:43:23 <oerjan> duh
05:43:31 <oerjan> [F1] = (.) $ [F]
05:43:38 <oerjan> and [] = id
05:44:00 <oerjan> so barring typing issues, Jot needs only one level
05:44:18 <zzo38> Would you have written this code differently? parseConstantinople = runIO (getEnv "Constantinople" >>= flip openFile ReadMode >>= hGetContents) >>= (monadify .:: parse) (programParser $ VarE 'return) "";
05:45:18 <zzo38> oerjan: Jot needs one level of what? And other?
05:45:26 <oerjan> of parentheses
05:45:33 <zzo38> OK
05:45:37 <oerjan> if you convert it point-free haskell
05:45:44 <zzo38> OK
05:46:18 <oerjan> oh wait
05:46:33 <zzo38> I know that K and I combinators correspond to (const) and (id) in Haskell. And in fact I used those as the definition of the root pointer: root = Pointer const id;
05:46:38 <oerjan> *[F0] = ($ const) . ($ ap) $ [F]
05:47:15 <zzo38> Is there S combinator function in Haskell?
05:47:27 <mauke> ap, <*>
05:47:28 <oerjan> yes, ap in the (e ->) Monad
05:47:49 <oerjan> or <*> in the (e ->) Applicative
05:48:05 <mauke> @type \f g x -> f x (g x)
05:48:06 <lambdabot> forall t t1 t2. (t -> t1 -> t2) -> (t -> t1) -> t -> t2
05:48:13 <mauke> @hoogle (t -> t1 -> t2) -> (t -> t1) -> t -> t2
05:48:14 <lambdabot> Data.Function on :: (b -> b -> c) -> (a -> b) -> a -> a -> c
05:48:14 <lambdabot> Data.Data gmapQl :: Data a => (r -> r' -> r) -> r -> (d -> r') -> a -> r
05:48:14 <lambdabot> Control.Parallel.Strategies parZipWith :: Strategy c -> (a -> b -> c) -> [a] -> [b] -> [c]
05:48:18 <mauke> meh
05:48:22 <mauke> @pl \f g x -> f x (g x)
05:48:22 <lambdabot> ap
05:48:42 <zzo38> Can there be used without Monad or Applicative needed?
05:48:55 <mauke> what
05:49:06 <elliott> i agree
05:51:16 -!- GreaseMonkey has quit (Ping timeout: 240 seconds).
05:52:35 <oerjan> <ais523> I suspect it's either 2 or 3; 0 is obviously sub-TC, and 1 nearly as obviously <-- i think i monologued a proof for 1 on the channel not too long ago
05:52:54 <ais523> 1 being sub-TC?
05:52:57 <ais523> it's not too hard
05:53:08 <ais523> you basically can't do any flow control within a loop
05:53:44 <oerjan> zzo38: flip is readFile
05:53:46 <oerjan> openFile ReadMode >>= hGetContents
05:53:50 <oerjan> argh
05:54:14 <oerjan> irssi's line joining would be nice if you could actually trust it
05:54:31 <zzo38> oerjan: Sorry I do not understand can you explain it better please?
05:54:43 <oerjan> zzo38: it was mispasted by irssi
05:54:47 <oerjan> @src readFile
05:54:47 <lambdabot> readFile name = openFile name ReadMode >>= hGetContents
05:54:49 <zzo38> OK.
05:55:07 <oerjan> that's what i meant
05:55:30 <zzo38> OK, so I do not need what I wrote; readFile will do that. OK thanks
05:56:00 <zzo38> So is (getEnv "Constantinople" >>= readFile) good enough?
05:56:43 <oerjan> i should think so
05:57:05 <zzo38> OK. Anything you have to say about the other parts of that program?
05:57:51 <zzo38> (The environment variable "Constantinople" is set in a shell script. It seems the only way it works in Template Haskell due to splices running multiple times)
05:57:52 <elliott> oh dear; it looks like the next obvious thing to do to shiro is to either:
05:57:54 <elliott> - name every core instruction
05:57:54 <elliott> or
05:57:56 <elliott> - rewrite the fungespace
05:59:39 -!- GreaseMonkey has joined.
06:01:18 <zzo38> I designed a computer (including the CPU instruction set) called OMEGACOM-1. I never intend to implement it in hardware, although it is intended to be possible to do so and of an old-style.
06:01:53 <zzo38> The keyboard consists of the alphabet (QWERTY), digits zero to nine, spacebar, and three more keys: RUBOUT, ALT, and SEND.
06:02:26 <zzo38> ALT+Z rewinds the tape, ALT+W to play tape, ALT+X to fast forward, ALT+Y to record.
06:03:07 <zzo38> ALT+0 is reset the computer, ALT+1 sends the user interrupt (interrupt 1), ALT+2 pauses the system, and ALT+3 to resume.
06:03:27 <zzo38> Other keys with ALT is used to put punctuation symbols.
06:04:06 -!- copumpkin has changed nick to luke-sr.
06:04:30 <zzo38> (Actually, the way it is designed, ALT+SPACE happens to be the same as RUBOUT, ALT+RUBOUT the same as SPACE, and ALT+SEND generates the keycode for the ALT key (which otherwise cannot be sent to the CPU).)
06:05:24 <zzo38> Bytes in this computer are 16-bits and addresses are also 16-bits.
06:05:26 -!- luke-sr has changed nick to copumpkin.
06:06:10 <zzo38> Memory map is 0x0000-0x3FFF for RAM, 0x4000-0x7FFF for VRAM, 0x8000-0xBFFF for SLOT-0, and 0xC000-0xFFFF for SLOT-1.
06:08:00 <zzo38> The RAM initially points to internal ROM instead, and then it disables itself after it copies itself to unused space in VRAM and jumps there. It starts like this: XOR A A MOV X "4000 ?LOAD MOV .XS .A LUI "180 =LOAD MOV P "4C08 SLV '1 '2
06:08:26 <zzo38> P is the program counter register.
06:14:53 <zzo38> Each instruction has a two-bit condition specifier, which can be: Always, Carry, Zero, or Nonzero.
06:20:57 -!- myndzi\ has joined.
06:24:16 -!- myndzi has quit (Ping timeout: 240 seconds).
06:26:09 <zzo38> What is your opinions and ideas about this?
06:26:32 <elliott> it's great + perfect
06:26:33 <elliott> mergeByteString Shiro.FungeSpace 30.1 27.8
06:26:34 <elliott> !@ Shiro.FungeSpace 21.1 0.7
06:26:34 <elliott> modifyIPList Shiro.Monad 15.4 39.1
06:26:34 <elliott> doNextIns Shiro.Interpreter 4.9 1.1
06:26:36 <elliott> ooh, interesting
06:26:46 <elliott> how on earth is modifyIPList taking that much time?
06:26:57 <elliott> modifyIPList :: (([IP],[IP]) -> ([IP],[IP])) -> Shiro ()
06:26:58 <elliott> modifyIPList f = modify $ \st -> st{ ipList = f (ipList st) }
06:27:02 <elliott> oerjan: look at my cost centre :D
06:27:04 <elliott> (well, one of them)
06:27:31 <zzo38> It is just meant to be oldstyle, actually. I did not explain everything yet.
06:29:20 -!- copumpkin has quit (Ping timeout: 252 seconds).
06:29:40 <oerjan> i dunno
06:29:44 -!- copumpkin has joined.
06:30:43 <elliott> oerjan: dunno what
06:30:44 <elliott> ?
06:30:58 <oerjan> about profiling
06:32:46 <zzo38> I have rules for a card game called "Mature". You use a standard deck of cards, ranking from high to low: T98765432AKQJ. Play with 4 player and something to keep track of scores. Each player plays for himself. Give 13 cards to each player. Now the dealer can call any suit for trump. The player after the dealer can now lead any card to the first trick.
06:32:48 <elliott> hmm, I can either write a new fungespace, clean up the core interpreter file (bleh), or convert everything to lenses, quite possibly seeing a speed improvement from doing so
06:32:52 <elliott> who wants to vote?
06:33:21 <zzo38> After a card has been led to the trick, each player in order must now play a card to the trick. If you have anycard of the suit led you must play one of those, otherwise you can play any card you want to. If there is any trumps, the player who put the highest trump wins the trick,otherwise the player with the highest card of the leading suit wins the trick.
06:33:35 <zzo38> The winner of the trick places those cards face-down in their score pile and can lead any card to the next trick.
06:34:22 <zzo38> After all tricks are played. count points. Jacks and kings are collectively called "men". Make the longest sequence you can that alternates between men and queens (it doesn't matter which comes first). The number of cards in that sequence is your score.
06:35:42 <zzo38> (Other cards are not used for counting score)
06:40:52 <coppro> zzo38: and presumably the game is played so that everyone has an equal number of turns as dealer?
06:41:06 <zzo38> coppro: Yes, I would assume so.
06:43:56 <coppro> hmm... interesting
06:44:05 <coppro> It seems to me that the scoring might be a little bit low
06:44:28 <coppro> as likely all scores will be either one man, two man and a queen, or three men and two queens
06:44:42 <coppro> but the idea that you do not control your own scoring cards is interesting
06:47:56 -!- oerjan has quit (Quit: Good night).
06:50:23 <zzo38> I have rules for another card game called "Mate". It is played with 20 cards only, the 89TJQ of each suit (Q is high). Each player gets ten cards laid out on the floor according to suit. These are called his "hand" even though they are actually on the floor.
06:51:23 -!- CakeProphet has joined.
06:51:23 -!- CakeProphet has quit (Changing host).
06:51:23 -!- CakeProphet has joined.
06:51:39 <zzo38> First player starts by leading any card to a trick. Follower must follow suit if possible. If that is not possible, they must follow rank. If they can do neither, they lose the game and the winner counts points.
06:51:42 -!- ive has quit (Quit: leaving).
06:52:40 <coppro> that's a perfect information game :/
06:53:06 <coppro> or is once the hands are out anyway
06:53:17 <zzo38> Suits rank as in bridge. Whoever played the card that is higher ranked (or higher rank suit) wins the trick and leads any card for the next trick. (Note: Keep tricks for the players who held the cards originally; do not give them to the winner of the trick.)
06:54:55 <zzo38> Sacrificing: When it is your turn to play a card (leading or following), you may, if you choose, discard any of your cards before playing. (This might allow you to follow rank if you could not otherwise do so; it also adds to your score.) If this results in you having no cards on your turn, the last card played is assumed to be your only card and you must play it if possible (otherwise you lose).
06:55:52 <zzo38> Queen privilege: Whenever you lead a queen of any suit, you may force the opponent to follow with another queen if they have any. It is optional decision when you lead a queen, and an opponent having multiple queens can still select which one to play.
06:56:45 <zzo38> Scoring: Only the winner scores. Add together the total number of turns plus the number of sacrifices you made, and multiply this by the scoring value of the last card you played: Eight = 6, Nine = 3, Ten = 4, Jack = 9, Queen = 10.
07:01:23 <zzo38> I also have rules for a game called "Rummage", which you make melds of Rummy but also make tricks.
07:02:02 <zzo38> And "Chinese Euchre", which is neither Chinese nor Euchre.
07:10:39 <zzo38> Here are the rules for "Janken Poker": Shuffle the cards and deal one card face-up. Do rock-paper-scissors; the winner gets to keep that card (if stalemated, do again). You may reject the card you just received if you want to, by turning it face-down. Each player may reject only up to three cards. Repeat until each player has seven cards.
07:11:09 -!- copumpkin has quit (Ping timeout: 240 seconds).
07:11:14 <zzo38> If you have seven cards and you receive another, you are forced to reject it (even if you have already rejected three cards). After each player has seven cards, both players discard two cards and whoever has better poker hand wins.
07:11:34 -!- copumpkin has joined.
07:17:49 <zzo38> I once saw the following problem in a book: First player puts any five cards they choose from the deck face-up in front of them. Second player does the same with the remaining cards. First player then discards from zero to five cards and takes replacements of their choice from the deck. Second player does the same. Rank hands as in poker. In case of tie, second player wins.
07:17:58 <zzo38> What should be strategy for first player to play?
07:25:35 <zzo38> In the same book was this problem: An opponent is playing crap but loaded one of the dice so that it is always 5. It is your chance to load the second dice to whatever probabilities you want. What should you do to minimize the chance of their winning?
07:26:54 <zzo38> Do you know the answer of either of these two problems?
07:27:07 <ais523> the second seems easier
07:27:29 <ais523> but still pretty hard
07:27:37 <ais523> obviously you need to load it to never roll 6
07:27:54 <ais523> and I think semi-obviously 1, 3, 4, and 5 need to have the same probability
07:28:11 <ais523> so then it's a matter of working out what the probability of 2 should be, which is just an optimisation problem
07:30:24 -!- wth has joined.
07:31:02 <CakeProphet> ais523: the probability of 2 is certainly 1
07:31:19 <ais523> CakeProphet: you're trying to force a loss
07:31:25 <ais523> 5+2 = 7 which is a win if you get it on the first roll
07:31:29 <ais523> and a loss on other roles of a sequence
07:31:36 <CakeProphet> in fact I am strongly compelled by the evidence of 2.
07:31:46 <ais523> oh, I see
07:31:52 <ais523> you're misinterpreting the question
07:32:00 <CakeProphet> pssssh, you assume I read more than the bottom line of that conversation. :P
07:32:22 <CakeProphet> taking things out of context is always great fun.
07:33:07 <ais523> 5 seems to be a good number to rig a dice to if you want to increase your chance of winning at craps, anyway
07:33:32 <elliott> I'm glad I wrote Shiro in Haskell; it would be unsalvagable if I'd messed it up this badly in another language
07:33:43 -!- wth has left.
07:34:09 * CakeProphet is quite adept at working with sloppy code.
07:34:20 <CakeProphet> it's an important skill to have in practice.
07:34:32 <CakeProphet> /writing/ sloppy code however, is not.
07:34:54 <elliott> working with sloppy code is just a tactic to delay the fact that you're going to have to rewrite it
07:35:30 <CakeProphet> that's a big assumption of what is fact.
07:36:13 <elliott> let fpState = FPState { fpGet = (\(GlobalFPState m) -> unsafeFromAny (m Map.! fpName)) <$> gets globalFPState
07:36:13 <elliott> , fpModify = \f -> modifyGlobalFPState (\(GlobalFPState m) -> GlobalFPState $ Map.adjust (unsafeToAny . f . unsafeFromAny) fpName m)
07:36:13 <elliott> , fpGetIP = (\(IPFPState m) -> unsafeFromAny (m Map.! fpName)) <$> gets (ipFPState . currentIP)
07:36:13 <elliott> , fpModifyIP = \f -> modifyCurrentIP $ \ip@IP{ipFPState = IPFPState m} -> ip{ ipFPState = IPFPState $ Map.adjust (unsafeToAny . f . unsafeFromAny) fpName m } }
07:36:17 <elliott> there, now you've all felt my pain
07:36:29 <elliott> oh wait, I can just make these lenses, yaaaaaaay
07:36:38 <monqy> yaaay
07:36:38 <ais523> elliott: the formatting there made me bletch, I haven't looked at the actual code yet
07:36:56 <CakeProphet> what is FP
07:37:03 <zzo38> What is lenses means in that context?
07:37:20 <ais523> I think Haskell coding possibly ought to be done in a lots-of-small-functions way, just like TDD people advocate for scripting languages
07:37:28 <CakeProphet> zzo38: basically a get function and a set function, along with a modify function defined from the two.
07:37:32 <ais523> it's what I mostly do for ML, at least, except when replicating an imperative algorithm
07:37:39 <CakeProphet> or, is it the set that's defined from get/modify?
07:37:41 <elliott> CakeProphet: fingerprint
07:37:47 <elliott> zzo38: lenses are functional references
07:38:02 <elliott> zzo38: basically, Lens a b is (a -> (b, b -> a))
07:38:16 <elliott> they encompass the notion of record fields as well as a ton of other stuff
07:38:23 <elliott> and they're a Control.Category
07:38:25 <elliott> so they compose really nicely
07:38:33 <elliott> they're great
07:38:41 <zzo38> OK
07:39:00 <CakeProphet> except that's lame and no good person likes a -> (b, b -> a)
07:39:04 <zzo38> How does it compare to the Pointer type in my program?
07:39:09 <elliott> CakeProphet: what?
07:39:11 <CakeProphet> but yeah, that's how they're defined.
07:39:18 -!- Nisstyre has joined.
07:39:24 <zzo38> CakeProphet: What is wrong with that way?
07:39:26 <elliott> that definition is not only the most efficient, it's the most elegant -- it's (a -> Store b a)
07:39:29 <elliott> where Store is the Store comonad
07:39:40 <elliott> if you unbox the tuple, it's even faster :)
07:39:44 <elliott> or use CPS, apparently
07:39:51 <CakeProphet> elliott: I prefer the two-seperate-functions definition. I suppose it's pretty much subjective and not worth arguing/persuading about.
07:39:59 <elliott> CakeProphet: it's not subjective
07:40:03 <elliott> the store comonad version is objectively faster
07:40:10 <elliott> and has better theoretical properties
07:40:35 <CakeProphet> I see.
07:40:48 <elliott> (used by the data-lens package)
07:41:21 <zzo38> CakeProphet: What is the two-seperate-functions definition?
07:42:03 <elliott> (a -> b, b -> a -> a)
07:42:04 <CakeProphet> data Lens a b = Lens (a -> b) (a -> b -> a)
07:42:13 <CakeProphet> er yeah
07:42:27 <elliott> it's not as performant, not as elegant, uglier to state the properties about, has fewer nice theoretical properties, and is lame :)
07:42:27 <CakeProphet> you can do it that way as well.
07:42:41 <elliott> edwardk would be proud of me.
07:42:49 <CakeProphet> yeah but's totally a get function and a set functon.
07:42:51 <CakeProphet> which is way cool.
07:42:54 <CakeProphet> >_>
07:43:10 <elliott> yeah, and now modification is really slow
07:43:11 <elliott> awesome
07:43:22 <CakeProphet> REALLY slow.
07:43:24 <elliott> getL (Lens f) a = pos (f a)
07:43:24 <elliott> modL (Lens f) g = peeks g . f
07:43:24 <elliott> setL (Lens f) b = peek b . f
07:43:26 <elliott> ELEGANT ENOUGH FOR YOU???
07:43:28 <elliott> CakeProphet: actually, yes
07:43:34 <elliott> the performance difference is not minor
07:43:58 <elliott> oh and
07:43:59 <elliott> lens :: (a -> b) -> (b -> a -> a) -> Lens a b
07:43:59 <elliott> lens get set = Lens $ \a -> store (\b -> set b a) (get a)
07:44:03 <elliott> WHOOOPS SO SUPERIOR
07:44:46 <CakeProphet> I guess I'm just a tuple-hater.
07:45:07 <zzo38> So, "a" is where you store in and "b" means the type of the data stored in there? Is that what "a" and "b" means there?
07:45:15 <elliott> zzo38: yep
07:45:16 <elliott> CakeProphet: they're not tuples in the data-lens implementation
07:45:22 <elliott> type Store s = StoreT s Identity
07:45:23 <elliott> data StoreT s w a = StoreT (w (s -> a)) s
07:45:41 <elliott> CakeProphet: but I think the next version coming out is going to recommend unboxed or cps instead
07:45:46 <elliott> where cps is
07:46:02 <elliott> type Lens a b = forall r. a -> (b -> (b -> a) -> r) -> r
07:46:04 <zzo38> I think I defined the Pointer type in the Constantinople compiler something like that, as a read function and a write function.
07:46:10 <elliott> and unboxed is like the tuple version but with more hashes :)
07:47:26 <CakeProphet> yeah a -> (b -> (b -> a) -> r) -> r does not look awful in any way.
07:47:44 <elliott> CakeProphet: good thing you use the abstract API instead, then, based on construction from get/set, isomorphism, or comonad, right?
07:47:59 <elliott> and reason about it that way, rather than relying on the efficient internal implementation that avoids unboxing
07:48:07 <elliott> that also gives all the efficient update advantages of the comonad store model
07:48:22 <zzo38> Although in my program, it was a datatype defined using record names, and the write function came first. In addition, the type being stored in and the type of the data stored in there is the same type.
07:48:22 <CakeProphet> no that stuff is fine. I just dislike the cps
07:48:44 <elliott> CakeProphet: you don't have to care about it, since the pure and unboxed versions are also supplied and they all act according to the basic API
07:48:56 <elliott> but I find it hard to believe you wouldn't select to use it, on account of running the exact same code faster
07:49:11 <CakeProphet> yes I am a performance addict.
07:49:22 <CakeProphet> that's why I use Perl on a day-to-day basis.
07:49:25 <CakeProphet> so fast.
07:49:26 <elliott> CakeProphet: so you're saying you'd _deliberately_ select the slower version?
07:49:32 <elliott> despite it having no visible changes to your code at all?
07:49:34 <elliott> you're insane
07:49:49 <CakeProphet> no I thought you were referring to the cps
07:49:52 <CakeProphet> which would change my code.
07:49:59 <elliott> no, it wouldn't
07:50:10 <CakeProphet> uh..
07:50:19 <elliott> because it's exposed only in terms of the abstract API that all the lens implementations in the development data-lens expose
07:50:44 <CakeProphet> right.
07:50:53 <elliott> https://github.com/ekmett/data-lens/blob/unboxed/Data/Lens/Class.hs
07:50:58 <elliott> erm, that's not the class
07:51:01 <elliott> https://github.com/ekmett/data-lens/blob/unboxed/Data/Lens/Class/Internal.hs
07:51:02 <CakeProphet> which is me not using cps. I thought you were saying the cps iteself was faster than any API built over it.
07:51:15 <elliott> no, the advantage there is in avoided runtime overhead
07:51:56 -!- sebbu2 has joined.
07:52:07 <zzo38> How does my implementation of the Pointer type in the Constantinople compiler compare with lens?
07:52:22 <elliott> zzo38: probably badly, if it's restricted to things of the form (Lens a a)
07:52:29 <CakeProphet> okay so these are convincing points. I can't say you've convinced me to care but I know which I'll use in the future.
07:52:51 <elliott> CakeProphet: YEEES.... THE DATA-LENS MONOPOLY SHALL GROW...
07:53:02 <elliott> (you'll probably want to use data-lens-template and data-lens-fd when you do, FWIW)
07:53:15 <zzo38> elliott: Well yes it is; both types are the same but otherwise it is like the (a -> b) and (b -> a -> a) stuff
07:53:19 <elliott> (former for deriving of lenses from record fields, latter is just the module that would be in data-lens if it didn't depend on fucntional dependencies)
07:53:30 <CakeProphet> elliott: but fclabels has (!%%=)!!!
07:53:55 <elliott> CakeProphet: data-lens has (^!+=)
07:53:57 <CakeProphet> there's NO WAY I could get that functionality from data-lens
07:54:02 <CakeProphet> ...oooooh.
07:54:07 <elliott> also (!&&=)
07:54:12 <elliott> totally useful, let me tell you :-D
07:54:31 <elliott> CakeProphet: http://hackage.haskell.org/packages/archive/data-lens-fd/2.0/doc/html/Data-Lens.html, http://hackage.haskell.org/packages/archive/data-lens/2.0.1/doc/html/Data-Lens-Common.html
07:54:36 <CakeProphet> that's objectively better. Based on number and symbol combinations of hilarious operators I judge this to be superior.
07:54:41 <elliott> former is State monad stuff
07:54:43 <elliott> latter is functional stuff
07:54:54 <zzo38> But for the Constantinople esolang, my system works, at least. type PointerWrite = Memory -> Memory -> Memory; type PointerRead = Memory -> Memory; data Pointer = Pointer { mem_write :: PointerWrite, mem_read :: PointerRead }; root :: Pointer; root = Pointer const id;
07:54:55 <elliott> CakeProphet: also, fclabels was recently ruined by switching to arrows :)
07:55:00 <CakeProphet> wat
07:55:01 <CakeProphet> why.
07:55:04 -!- sebbu has quit (Ping timeout: 245 seconds).
07:55:06 <elliott> CakeProphet: because arrows suck
07:55:17 <CakeProphet> yeah who uses that shit.
07:55:35 <CakeProphet> &&& is maybe like the only thing I've found a use for.
07:55:53 <elliott> well, it provides one useful thing (partial lenses, i.e. things that act like (a -> Maybe b, b -> a -> Maybe a)), but apart from that it's just semantic gunk
07:56:06 <elliott> and those kinds of things can be built as a separate thing without some over-arching abstraction anyway
07:56:16 <CakeProphet> oh hey that's somewhat useful.
07:56:31 <elliott> it is, but roconnor murmured something about implementing them for data-lens :)
07:56:32 <zzo38> Is there any similarity? I could have done it differently if it is useful to do so but for Constantinople both are the same type and I have functions to transform Pointers
07:56:51 <elliott> zzo38: that should be fine for what you have
07:57:07 <CakeProphet> elliott: that a boy. Tell him everything will be okay.
07:57:18 <elliott> do you mean atta boy
07:57:25 <CakeProphet> ...no
07:57:28 <CakeProphet> but maybe I do?
07:57:30 <CakeProphet> also?
07:57:44 <CakeProphet> isn't that sort of the same?
07:58:13 <elliott> i don't think "that a boy" is a thing
07:58:34 <CakeProphet> internet says so.
07:58:36 <zzo38> Do the lenses have anything like transPointer and transWrite?
07:58:40 <elliott> pah
07:58:47 <elliott> zzo38: what are transPointer and transWrite
07:58:53 -!- Patashu has joined.
07:59:09 <CakeProphet> any sort of abstract library in Haskell probably has no mention of "pointer" anywhere in the API.
07:59:28 <zzo38> transPointer :: PointerWrite -> PointerRead -> Pointer -> Pointer; transPointer w r p = Pointer (transWrite w p) (r . (mem_read p));
07:59:32 <CakeProphet> unless, of course, it's an abstract pointer library. :D
07:59:36 <zzo38> transWrite :: PointerWrite -> Pointer -> PointerWrite; transWrite w p x y = mem_write p (w x (mem_read p y)) y;
07:59:41 <elliott> zzo38: that's just composition, isn't it?
07:59:44 <elliott> in which case, yes
07:59:48 <elliott> Lenses form a category
07:59:58 <elliott> CakeProphet: oh yeah, and with data-lens, you have to hide less than fclabels; you just have to hide id and (.) for Prelude so you can get the Control.Category versions
08:00:31 <CakeProphet> things in Prelude should just get eaten by other things.
08:00:35 <CakeProphet> totally a good idea.
08:00:46 <elliott> Control.Category should be exported by Prelude, it's just a bug that it isn't :)
08:02:09 <zzo38> elliott: Is it just composition? Well, the transPointer function is used to change a Pointer, so that it points to the head of whatever it was pointing to before, or to the tail of what it was before, etc
08:02:31 <zzo38> What are Control.Category versions of id and (.)
08:02:35 <CakeProphet> import Control.Category() --whoops
08:02:39 <CakeProphet> zzo38: typeclass methods
08:02:42 <elliott> zzo38: hmm, well it _looks_ like composition
08:02:52 <elliott> zzo38: control.category just adds a category typeclass
08:03:00 <elliott> like you've said, return and (<=<) make the monad versions
08:03:08 <elliott> and Kleisli is an instance of Control.Category.Category
08:03:09 <elliott> as is (->)
08:03:09 -!- Nisstyre has quit (Ping timeout: 240 seconds).
08:03:14 <elliott> http://haskell.org/ghc/docs/7.0.4/html/libraries/base/Control-Category.html
08:03:34 <elliott> newtype Kleisli m a b = Kleisli { runKleisli :: a -> m b }
08:03:34 <elliott> instance Monad m => Category (Kleisli m) where
08:03:34 <elliott> id = Kleisli return
08:03:34 <elliott> (Kleisli f) . (Kleisli g) = Kleisli (\b -> g b >>= f)
08:03:48 <CakeProphet> could Either be a Category maybe?
08:04:08 <CakeProphet> I am basing this solely on the fact that it has two type parameters. :P
08:04:23 <CakeProphet> I am too tired to do any kind of reasoning on the matter.
08:04:41 <elliott> we need
08:04:44 <elliott> id :: Either a a
08:04:45 <elliott> so no.
08:04:55 <elliott> (.) :: Either b c -> Either a b -> Either a c
08:05:00 <elliott> this is also not possible.
08:05:07 <elliott> it's very much not a category :P
08:05:36 <zzo38> I think id and (.) should have the same meaning as it does now, and using different names for the Control.Category. Like how monads use return and (<=<) instead of id and (.)
08:05:47 -!- sebbu2 has changed nick to sebbu.
08:05:58 <elliott> category theorists and anyone who uses lenses would disagree :-P
08:05:59 <CakeProphet> elliott: if you had something like Left a | Right b | Nothing maybe?
08:06:14 <elliott> the only reason most of Prelude is like it is is because of backwards compatibility
08:06:23 <elliott> CakeProphet: so Maybe (Either a b)
08:06:28 <elliott> id = Nothing
08:06:29 <CakeProphet> yes
08:06:31 <Sgeo> (Left _) . (Right _) = ?
08:06:38 <elliott> Sgeo: Nothing, presumably
08:06:48 <elliott> I don't think it obeys the laws
08:06:52 <elliott> f . id = id . f = f
08:06:53 <CakeProphet> yes if you get "b" constructor then it is Nothing
08:07:02 <CakeProphet> if it's "a" or "c" then you get... a or c
08:07:04 <Sgeo> Oh, wasn't paying attention to chat after elliott> (.) :: Either b c -> Either a b -> Either a c
08:07:33 <CakeProphet> or rather TWO bs. basically b's are eaten.
08:07:48 <Sgeo> I need to go to sleep
08:07:50 <zzo38> But the monads are only for the same category as before, since it has the same objects, same morphisms, etc. The id and (.) are only for Hask category.
08:08:20 <Sgeo> Night
08:08:37 <CakeProphet> not sure what to do in the case where you have an a and a c.
08:08:37 <elliott> Sgeo: morn
08:08:47 <CakeProphet> I guess Nothing is always a convenient option.
08:09:01 <CakeProphet> but it could prefer one over the other.
08:09:09 <CakeProphet> this is probably breaking a bunch of laws I don't know about though.
08:09:36 <elliott> <elliott> f . id = id . f = f
08:09:37 <elliott> that's the one law
08:09:42 <elliott> you're breaking it.
08:09:42 <zzo38> Maybe the id for Category should be called idC
08:10:25 <CakeProphet> Nothing . a = a :P
08:10:28 <CakeProphet> a . Nothing = a
08:10:31 <CakeProphet> does that fix it?
08:10:50 <zzo38> Other law is associativity
08:11:45 <elliott> CakeProphet: doesn't type.
08:11:51 <elliott> zzo38: oh, yes.
08:11:53 <zzo38> And the (.) for Category is called (<<<)
08:11:55 <CakeProphet> elliott: oh right.
08:12:32 <CakeProphet> Left a | Right b | Both a b
08:12:42 <CakeProphet> Left a | Right b | Both a b | Nothing ????
08:12:48 <monqy> zzo38: no it's called (.)
08:12:58 <elliott> CakeProphet: this sure sounds terrible
08:13:00 <monqy> zzo38: afaik (<<<) is just an alias to match (>>>)
08:13:09 <CakeProphet> elliott: but maybe it's a category. :P
08:13:24 <zzo38> O, I looked at the codes for Control/Category.hs and in fact it does define id and (.) on the Hask category as well.
08:13:36 <CakeProphet> hey sometimes I need one, the other, both, or neither. anywhere in every function.
08:13:39 <elliott> zzo38: yes, it's pretty much entirely backwards compatible.
08:13:41 -!- FireFly has joined.
08:13:46 <zzo38> It says directly in the file: (<<<) = (.)
08:15:02 <CakeProphet> LeftLeft a | LeftRight b | RightLeft c | RightRight d | LeftLeftLeftRight a b | LeftLeftRightLeft a b | ... | All a b c d | Nothing
08:15:06 <CakeProphet> elliott: it could always get worse
08:16:03 <elliott> : replicateM_
08:16:04 <elliott> :t replicateM_
08:16:05 <lambdabot> forall (m :: * -> *) a. (Monad m) => Int -> m a -> m ()
08:17:23 <CakeProphet> also *LeftLeftRightLeft a c
08:17:35 -!- Nisstyre has joined.
08:18:25 <zzo38> O, the difference is (<<<) has different fixity than (.)
08:18:31 <CakeProphet> elliott: truly this is a powerful type with implications both practical and theoretical.
08:19:03 <CakeProphet> oh you could also throw in a linked list just for fun.
08:20:22 <CakeProphet> well I guess it would be a tree actually.
08:25:54 <elliott> :t mapM_
08:25:55 <lambdabot> forall a (m :: * -> *) b. (Monad m) => (a -> m b) -> [a] -> m ()
08:28:37 -!- Nisstyre has quit (Ping timeout: 258 seconds).
08:37:13 <elliott> my code somehow grew four lines during that massive simplification :-|
08:47:14 <monqy> :(
08:47:27 <elliott> and i don't think it got any faster too
08:48:56 <monqy> good thing simple is good
08:49:15 <elliott> i'm not sure it simplified much :D
08:49:20 <monqy> :'(
08:49:32 <elliott> must think of good reason to keep.......................................
08:51:26 <elliott> monqy: there's pretty much only three improvements left to do to the code in its current state oops...
08:51:59 <elliott> make it pass Mycology fully, give names to each of the basic instruction interpreters (maybe), implement the new fungespace, and maybe clean it up generally
08:55:08 -!- Nisstyre has joined.
08:59:16 -!- zzo38 has quit (Remote host closed the connection).
09:00:25 <elliott> ais523: you're still awake?
09:00:32 <ais523> yes
09:00:36 <ais523> I'm trying to roll over sleep pattern
09:00:51 <elliott> me too! it probably won't work for me, tough
09:00:52 <elliott> though
09:01:02 <elliott> my default sleep pattern seems to be "desperately trying to get on a normal sleep pattern"
09:01:11 <elliott> it's... suboptimal
09:03:34 <elliott> Shiro/Types.hs:1:1:
09:03:34 <elliott> Dynamic linking required, but this is a non-standard build (eg. prof).
09:03:35 <elliott> You need to build the program twice: once the normal way, and then
09:03:35 <elliott> in the desired way using -osuf to set the object file suffix.
09:03:37 <elliott> oh my god, not this again
09:04:06 <elliott> oh, it's because of Template Haskell usage
09:04:11 -!- Nisstyre has quit (Ping timeout: 276 seconds).
09:04:16 <elliott> ais523: shake some generic fists at people for me, thanks
09:04:25 <monqy> what hapened...
09:04:31 <ais523> people, stop being so peoplish!
09:04:42 <elliott> monqy: building profiling builds of programs that use TH is a bit of a pain
09:05:10 <elliott> "Exclamation mark formed in space by two colliding galaxies" this is definitely new
09:05:11 <elliott> s
09:05:19 <elliott> "An awesome image that has been released by Nasa shows two galaxies colliding to resemble an enormous purple exclamation mark." are you even pretending to be news
09:07:03 <elliott> monqy: cabal-dev is good btw
09:07:11 <monqy> whats'e that
09:07:53 <elliott> monqy: it sandboxes cabal stuff so that each project has its package repository, which is useful because cabal loves to break
09:08:50 <monqy> the dependency tracking might be nice too, assuming it can does that
09:08:57 <elliott> "shiro: Most RTS options are disabled. Link with -rtsopts to enable them." i did you asshole :(
09:09:09 <elliott> monqy: define dependency tracking? obviously it makes sure that you don't epend on anything without noting it
09:11:08 <monqy> i mean for packaging purposes one of my nightmares is that dependencies and friends murder me in my sleep
09:11:27 <monqy> should I ever want to make my own packages
09:11:29 <elliott> monqy: im dont understand.............
09:12:50 <monqy> keeping track of what pakcages I use: a good thing
09:12:59 <elliott> monqy: you know how to use cabal files right...
09:13:07 <elliott> build-depends:
09:13:08 <elliott> base >= 4 && < 5,
09:13:08 <elliott> containers >= 0.4 && < 0.5,
09:13:08 <elliott> bytestring >= 0.9 && < 0.10,
09:13:08 <elliott> process >= 1.0 && < 1.1,
09:13:08 <elliott> random >= 1.0 && < 1.1,
09:13:10 <elliott> filepath >= 1.2 && < 1.3,
09:13:12 <elliott> time >= 1.2 && < 1.4,
09:13:14 <elliott> directory >= 1.1 && < 1.2,
09:13:16 <elliott> unix >= 2.4 && < 2.5,
09:13:18 <elliott> mtl >= 2.0 && < 2.2,
09:13:20 <elliott> data-lens >= 2.0 && < 2.1,
09:13:24 <elliott> data-lens-template >= 2.1 && < 2.2,
09:13:26 <elliott> hashtables >= 1.0 && < 1.1
09:13:28 <elliott> --shiro.cabal
09:13:30 <elliott> i just started with base and then added the packages until my existing code worked
09:13:37 <monqy> but my nightmare is in getting that to happen
09:13:45 <monqy> the cabal file
09:13:51 <monqy> ive never done it im scared ;_;
09:13:56 <elliott> cabal init --no-comments
09:14:00 <elliott> answer its questions
09:14:02 <elliott> modify the result
09:14:22 <elliott> monqy: but it's easy: http://sprunge.us/EZLZ
09:14:49 <elliott> the only tricky part is knowing what bounds to give the dependencies, but it's pretty easy by looking at the release history of the package to see what kind of increments it goes in
09:15:02 <monqy> that is the scariest part :'(
09:15:07 <elliott> if the major version number increases only very rarely, you probably want the current minor release; else the current major release
09:15:13 <elliott> it's really not hard
09:15:19 <elliott> it just takes a few minutes
09:16:19 <monqy> i'll se what hapens when i try it
09:16:26 <monqy> (asusuming i try it)
09:23:22 <CakeProphet> what's interesting
09:23:34 <CakeProphet> is that a photograph of a photograph is a photograph of the original photograph's subject.
09:23:45 <elliott> ok
09:24:04 <elliott> monads are like cameras
09:24:09 <elliott> snap :: a -> Photo a
09:24:16 <CakeProphet> photographs are like pointers to moments.
09:24:17 <elliott> photoshop :: (a -> b) -> Photo a -> Photo b
09:24:24 <elliott> cakeProphet :: Photo (Photo a) -> Photo a
09:24:27 <CakeProphet> elliott: except photos auto-join
09:24:51 <CakeProphet> ...well, they auto-join and get progressively shittier in quality.
09:26:46 <CakeProphet> snap (Photo a) = snap a
09:26:48 <CakeProphet> or something.
09:27:25 <CakeProphet> ...but not really. I guess join is best to encapsulate (oh shit OO terminology) that behavior.
09:27:36 <elliott> autovivify :: Photo a -> a -- unimplementable
09:28:02 <CakeProphet> ...I don't see how that's autovivify in the Perl sense.
09:29:29 <CakeProphet> more like: vivify :: Maybe a -> a
09:29:38 <CakeProphet> or something.
09:29:48 <CakeProphet> but not really.
09:30:06 <CakeProphet> it's more like vivify :: weird Perl shit you probably shouldn't write in terms of Haskell
09:30:09 -!- Nisstyre has joined.
09:30:15 <elliott> well, autovivification is when things get created automatically.
09:30:20 <CakeProphet> correct you are.
09:30:25 <elliott> so that's automatically creating an object from a photo of it.
09:30:27 <elliott> which you can't do.
09:30:33 <CakeProphet> ah I see.
09:30:46 <elliott> anyway, what matters is that the terminology is colourful :)
09:31:01 <elliott> uh oh, some part of me just wondered whether that photograph metaphor is actually good
09:31:03 <elliott> self-hatred enabled
09:32:31 <CakeProphet> elliott -- the angsty teen years
09:32:44 <elliott> nah, i went through those a few years ago
09:38:43 <elliott> monqy: nobdoybody can help me :'(
09:38:45 -!- Nisstyre has quit (Ping timeout: 264 seconds).
09:38:47 <CakeProphet> selfhate elliott' = let elliott = ElliottWithHate elliott' hatred; hatred = join hate elliott in elliott
09:38:56 <elliott> CakeProphet: how long did that take you
09:39:05 <CakeProphet> had to tie some knots...
09:39:06 -!- mycroftiv has quit (*.net *.split).
09:39:06 -!- Zetro has quit (*.net *.split).
09:39:06 -!- twice11 has quit (*.net *.split).
09:39:17 <CakeProphet> but actually not long.
09:39:42 <CakeProphet> within the minute.
09:42:00 -!- mycroftiv has joined.
09:42:00 -!- Zetro has joined.
09:42:00 -!- twice11 has joined.
09:42:54 <elliott> Deewiant: jesus christ, man, long_.d
09:43:01 <elliott> Deewiant: you're meant to be better than this
09:43:13 <Deewiant> What
09:43:22 <elliott> Deewiant: Inline assembly :D
09:43:22 -!- FireFly has quit (Quit: FireFly).
09:43:46 <elliott> heh, I like how your fallback case uses bigints
09:44:33 <Deewiant> Well, the damn compiler doesn't implement 128-bit integers
09:44:42 <elliott> -- lol @ Deewiant (note: should be aim to next instruction, not advance... probably?)
09:44:42 <elliott> -- (definitely in the else clause)
09:44:42 <elliott> -- well, it kind of is now
09:44:42 <elliott> I'm really good at commenting
09:44:55 <elliott> I don't know whether half my known bugs still exist or not
09:44:59 <Deewiant> It was much easier to get the asm to work
09:45:42 <elliott> http://hackage.haskell.org/package/largeword lame, I thought this would use some fast library for it, but it's just hand-written
09:47:19 <elliott> -- TODO: Also, if the least significant bit of the flags cell is
09:47:20 <elliott> -- high, o treats the file as a linear text file; that is, any
09:47:20 <elliott> -- spaces before each EOL, and any EOLs before the EOF, are not
09:47:20 <elliott> -- written out. The resulting text file is identical in appearance
09:47:20 <elliott> -- and takes up less storage space.
09:47:22 <elliott> let process | flags == 0 = id
09:47:23 <coppro> lol
09:47:24 <elliott> | otherwise = textify
09:47:26 <elliott> Past me, you implemented this, why did you leave the TODO
09:47:28 <Deewiant> If nobody told you about Windows yet: {Get,Free}EnvironmentStrings[AW]
09:47:37 <coppro> so me and another guy managed to simultaneously start work on a several-year-dead project
09:47:45 -!- copumpkin has quit (Ping timeout: 264 seconds).
09:47:50 <coppro> like, within days of each other
09:47:51 <elliott> Deewiant: Ugh
09:48:09 -!- copumpkin has joined.
09:48:12 <elliott> Deewiant: I'd rather just depend on POSIX than manually case on the platform and muck about with the FFI for Windows
09:48:17 <elliott> Who needs EVAR on Windows anyway :P
09:48:25 <elliott> I suppose I could write a tiny C wrapper sometime.
09:48:42 <elliott> Now to figure out why the heck cabal-dev won't build me a profiling version
09:49:20 <elliott> Jesus christ, what is the point of letting me build a profiling version if you won't turn -rtsopts on
09:49:25 <elliott> Oh
09:49:26 <elliott> Oh
09:49:29 <elliott> I see
09:49:35 <elliott> I have been running the old version all this time
09:49:39 <elliott> I'm
09:49:40 <elliott> smart
09:49:55 <elliott> This means that all my performance measurements might be totally bullshit :D
09:50:18 <elliott> Ha ha ha, the zero change in performance is actually a slowdown of about half a second :-|
09:50:22 <elliott> Fuck my life :-|
09:50:32 <CakeProphet> > let cakeprophet = Prophet cake sleep; sleep = sleep cakeprophet in sleep cakeprophet
09:50:33 <lambdabot> Not in scope: data constructor `Prophet'
09:51:48 <CakeProphet> cakeskell permits infinite types...
09:52:41 <coppro> I also love how the entire Erlang community is on #erlang :P
09:55:22 <elliott> Ha ha ha this profiling trace is depressing.
09:56:37 <Deewiant> Everything is somewhat slow?
09:56:57 <elliott> Deewiant: The non-lens record accessors somehow make an appearance as noticeable cost centres.
09:57:16 <elliott> Ordinarily I'd expect this to be because everything else is just so fast, but somehow my record accessors are actually slow.
09:57:45 <elliott> OK, shaved off about a tenth of a second by strictifying EVERYTHING
09:58:20 <elliott> Maybe I should try the git data-lens with those nice unboxed tuples.
10:01:34 <elliott> This is actually really disturbing... why is this so slow.
10:19:39 <elliott> Looks like I'm going to have to revert these lens changes for now.
10:19:59 <elliott> Deewiant: Yeah, OK, the new fungespace will be within the next few changes I make, so WATCH OUT.
10:20:55 * Deewiant ducks
10:21:02 <elliott> Deewiant: TOO LATE IT HIT YOU WITH SPEED
10:21:12 <elliott> <Deewiant> FUCKK I CANT HANDLE THE PSE;D
10:21:50 <monqy> moment of silence
10:21:55 <monqy> "in memory of Deewiant"
10:22:05 <monqy> ""couldnt handle the pse;d""
10:22:58 <elliott> nobody can handle the pse;d
10:23:13 <Deewiant> How will you code it if you can't handle it
10:23:34 <elliott> badly
10:23:50 <Deewiant> Shame
11:15:00 -!- monqy has quit (Quit: hello).
11:24:40 -!- GreaseMonkey has quit (Quit: The Other Game).
11:33:36 -!- azaq23 has quit (Ping timeout: 260 seconds).
11:44:44 -!- azaq23 has joined.
11:54:53 -!- boily has joined.
12:31:44 <elliott> Hmm
12:31:51 <elliott> I guess I'll rewrite the fungespace with the non-lens version
12:32:00 <elliott> And conservatively transform things into a more lens-based style later
12:32:11 <elliott> When I can run Mycology in under half a second :P
12:35:38 -!- aloril has quit (Ping timeout: 246 seconds).
12:47:57 -!- Nisstyre has joined.
12:48:57 -!- aloril has joined.
12:54:49 -!- FireFly has joined.
13:06:23 <elliott> Deewiant: How does the dynamically-sized array stuff work in CCBI's fungespace, anyway; it seems like you'd have to move spaces around a ton to make it work. Or do they have a maximum size, just not preallocate to that?
13:07:16 <Deewiant> The arrays are mostly static
13:07:34 <elliott> "Mostly" :-)
13:08:00 <Deewiant> When a new box gets placed, sometimes the array from an old box it subsumes is reused
13:08:07 <Deewiant> See AABB.consume
13:08:12 <elliott> Heeeey, my structure is fractal.
13:08:18 <Deewiant> And yes, it involves moving stuff around a ton :-P
13:08:22 <elliott> Deewiant: I was going to avoid reading your code for licensing reasons but OK.
13:08:31 <Deewiant> Well don't then
13:08:42 <elliott> Nah, I will, and just ignore any created derivative status :P
13:08:46 <Deewiant> Await my write-up on the thing, which may or may not be begun and finished this year
13:08:54 <elliott> Deewiant: Not sure I see the advantage over a simpler mcmap-style region layout, mind you
13:09:15 <Deewiant> What's a simpler mcmap-style region layoutt
13:09:17 <Deewiant> -t
13:10:11 <elliott> Deewiant: Hash table indexed by dividing each coordinate by N, resulting in a static-sized square array indexed by moduloing each coordinate by N
13:10:24 <elliott> Literally the simplest possible "square regions in a hash table"
13:11:50 <Deewiant> So a partition of the space into arrays of size N^d
13:12:16 <elliott> Deewiant: Yes
13:12:33 <elliott> Deewiant: I could even cheat like Vorpal and arrange it so that a convenient amount of negative space is included in the origin array :-)
13:12:52 <elliott> But I'm fully willing to believe that AABB is totally faster for some reason, I just don't know why :P
13:13:30 <elliott> Obviously something even fancier is probably the ideal, but I can't think of anything that wouldn't be fast with this
13:13:38 <Deewiant> Nobody's done quite that, I don't think
13:13:43 <Deewiant> So maybe it is better, who knows
13:14:06 <elliott> Really? It's the "obvious thing", at least to me.
13:14:40 <Deewiant> Well, most don't divide the space into square regions, i.e. they just use N = 1 :-P
13:14:53 <Deewiant> RC/Funge-98 does something weird
13:15:38 <Deewiant> stinkhorn uses a quadtree of square regions in some way, IIRC
13:15:50 <elliott> http://sprunge.us/cVAX ;; there HAS to be a way to exploit this redundancy :P
13:15:58 <Deewiant> And then there's CCBI
13:16:00 <Deewiant> And I think that's it
13:16:30 <elliott> Deewiant: Well sure, but the field of "sparse, discrete rectangular space" surely cannot be that undersolved
13:16:49 <Deewiant> Oh, I'm sure it isn't
13:16:56 <Deewiant> I just meant in the context of Funge
13:18:01 -!- Nisstyre has quit (Ping timeout: 260 seconds).
13:18:11 <elliott> Deewiant: Right :P
13:18:19 <elliott> Hmm
13:18:44 <elliott> I can't think of any way to exploit the redundancy in these structures that doesn't end up creating a quadtree :D
13:18:55 <elliott> And there's no way I'm writing the essential same algorithms twie
13:18:56 <elliott> twice
13:22:48 <Deewiant> Shoppe -->
13:25:35 -!- derrik has joined.
13:27:11 -!- Nisstyre has joined.
13:32:36 -!- edwardk has joined.
13:32:36 -!- edwardk has quit (Changing host).
13:32:36 -!- edwardk has joined.
13:41:41 <elliott> hmm, actually i probably don't need mincoords/maxcoords on the region map
13:41:49 <elliott> or the population
13:41:56 <elliott> should be sufficiently few elements to calculate that...
13:42:53 <elliott> Annoying that I can't benefit from IntMap's fast minimum/maximum, though, because I need the minimum/maximum vectors...
13:43:06 -!- Phantom_Hoover has joined.
13:43:27 <elliott> helo Phantom_Hoover
13:43:57 <Deewiant> You should probably think about what use case you're optimizing for first :-P
13:47:27 <elliott> Deewiant: Mycology, Fungicide
13:47:34 <elliott> And preferably no pathological worst-cases
13:47:55 <Deewiant> case filename of ...
13:50:19 <elliott> Deewiant: CCBI does that, I take it?
13:50:31 <elliott> Anyway, this isn't the Best Fungespace, this is just something interim to get my runtime down :)
13:51:19 <elliott> Hmm, how big to make regions
13:56:31 <Gregor> What are Haskell and BrainFuck's main differences? I am having trouble spotting them other than syntax, evaluation and staticly typed stuff.
13:58:35 <elliott> Gregor: In brainfuck, [] is a function. But in Haskell, "import" isn't a function.
13:58:39 <elliott> So brainfuck is more flexible.
13:58:47 <elliott> Also brainfuck is everywhere; Urban Müller said so.
13:59:34 <Gregor> Ahhh!
14:01:54 <elliott> Stop bullying me :(
14:03:04 <elliott> Apparently Shiro would cost $32,460 to develop.
14:03:14 <elliott> I'm always quite sceptical of sloccount's estimates.
14:06:07 <elliott> `addquote <Phantom_Hoover> You mean it'd be Tau Zero but without the spaceship?
14:06:11 <HackEgo> 635) <Phantom_Hoover> You mean it'd be Tau Zero but without the spaceship?
14:06:25 <Phantom_Hoover> Um, wha?
14:06:26 <lambdabot> Phantom_Hoover: You have 1 new message. '/msg lambdabot @messages' to read it.
14:06:33 <elliott> Phantom_Hoover: I laughed; good enough for me
14:15:06 -!- Nisstyre has quit (Remote host closed the connection).
14:19:06 -!- Nisstyre has joined.
14:19:07 -!- copumpkin has quit (Quit: Computer has gone to sleep.).
14:20:50 -!- derrik has quit (Ping timeout: 258 seconds).
14:21:20 -!- derrik has joined.
14:36:04 <elliott> > divmod (-999) 512
14:36:05 <lambdabot> Not in scope: `divmod'
14:36:09 <elliott> > divMod (-999) 512
14:36:10 <lambdabot> (-2,25)
14:36:13 <elliott> > quotRem (-999) 512
14:36:14 <lambdabot> (-1,-487)
14:37:47 -!- cheater has joined.
14:41:08 <elliott> > 9999 `shiftL` 9
14:41:09 <lambdabot> Ambiguous type variable `a' in the constraint:
14:41:09 <lambdabot> `Data.Bits.Bits a'
14:41:09 <lambdabot> a...
14:41:11 <elliott> > 9999 `shiftL` 9 :: Int
14:41:12 <lambdabot> 5119488
14:41:14 <elliott> > 9999 `shiftR` 9 :: Int
14:41:14 <lambdabot> 19
14:41:16 <elliott> right
14:43:01 <Deewiant> > 9999 `shiftL` 128 :: Int
14:43:02 <lambdabot> 0
14:43:19 <Deewiant> That's not fast then now is it
14:45:48 <elliott> Deewiant: What
14:46:59 <Deewiant> elliott: It's doing a check against the bitSize, I presume
14:47:09 <elliott> Ah
14:47:17 <elliott> idx :: Vector -> (Int, Int, Int, Int)
14:47:17 <elliott> idx (x,y) = (mask x', mask y', offs x', offs y')
14:47:17 <elliott> where x' = fromIntegral x
14:47:17 <elliott> y' = fromIntegral y
14:47:17 <elliott> mask :: Int -> Int
14:47:18 <elliott> mask = (.&. regionMask)
14:47:22 <elliott> offs :: Int -> Int
14:47:24 <elliott> offs = (`shiftR` regionPow)
14:47:26 <elliott> Patches welcome :-P
14:47:33 <Deewiant> Unless lambdabot's running on an architecture where that's the behaviour, but that seems doubtful
14:48:09 <Deewiant> elliott: x' = fromintegral x :: Int and leave out the mask/offs types?
14:48:33 <elliott> Deewiant: I think they might end up more generic... but anyway, I'm talking about speed patches :-P
14:48:44 <elliott> Oh god, I hope this doesn't turn out uglier than insertFS and mergeByteString.
14:49:08 <Deewiant> You can't really speed patch that without inline assembly or the like :-P
14:49:19 <elliott> <Deewiant> elliott: It's doing a check against the bitSize, I presume
14:49:21 <Deewiant> Or messing with the type signature
14:49:25 <elliott> :P
14:49:34 <elliott> Deewiant: I'm fine with the type changing but I suspect the tuple will be eliminated
14:49:37 <elliott> At compile-time
14:49:49 <Deewiant> idx :: Int# -> Int# -> (# Int#, Int#, Int#, Int# #)
14:49:54 <Deewiant> OKAY?
14:50:22 <elliott> Deewiant: PERFECT. Except no, it has to take a Vector because them be the types I'm working with. Actually I should write specialised Value <-> Int conversion functions, I think unsafeCoerce would work.
14:50:28 <elliott> Since it's probably sixty-four bit ints vs. thirty-two
14:50:42 <elliott> In which case unsafeCoerce will work for Value -> Int, and for every sane Int -> Value
14:51:04 <Deewiant> uncheckedIShiftRL# x regionPow
14:51:09 <Deewiant> import GHC.Prim
14:51:15 <Deewiant> And use Int#
14:51:35 <elliott> Finally my code is beginning to become readable
14:51:38 <elliott> TIME TO THROW ALL THAT WAY
14:52:22 <Deewiant> Or do you want sign extension there
14:52:38 <elliott> Deewiant: I need finding the minimum coordinates to work, at least
14:52:44 <elliott> On the mask results
14:52:44 <Deewiant> If you do, s/L#/A#/
14:52:45 <elliott> And maximum too
14:52:53 <elliott> The offset should always be positive, too
14:52:56 <elliott> So yeah
14:53:16 <elliott> OK but no seriously I should write insertFS before getting into MICRO-OPTIMISATION TERRITORY
14:53:32 -!- copumpkin has joined.
14:56:11 -!- hebru has joined.
14:58:12 <hebru> hola
14:58:17 <Phantom_Hoover> Hello.
14:58:42 <Phantom_Hoover> Welcome to #esoteric, worldwide hub for esoterica.
14:58:58 -!- edwardk has quit (Quit: Computer has gone to sleep.).
14:59:54 <ais523> *esoteric programming languages
15:00:02 -!- invariable has changed nick to variable.
15:01:01 <elliott> OK, insertFS is easy, it's insertSR that's hard :P
15:01:13 <elliott> Maybe because it's the EXACT SAME INSERTFS AS BEFORE.
15:01:21 -!- hebru has quit (Quit: AndroIRC - Android IRC Client ( http://www.androirc.com )).
15:01:22 <Deewiant> What are these TLAs
15:01:50 <elliott> Deewiant: FS = fungespace, SR = space region
15:01:51 <Deewiant> Insert into FileSystem and insert into SRAM?
15:01:57 <Deewiant> Almost
15:01:59 <elliott> :t insert
15:02:00 <lambdabot> forall a. (Ord a) => a -> [a] -> [a]
15:02:08 <elliott> insertFS originally chosen for clash-avoidance :P
15:02:38 <Deewiant> import hiding, qualified, etc
15:03:32 <elliott> Deewiant: My own modules? Gross
15:03:41 <elliott> I'll call it insert when it's a separate package
15:03:50 <Deewiant> No, Data.List
15:04:51 <elliott> ?hoogle insert
15:04:51 <lambdabot> Data.HashTable insert :: HashTable key val -> key -> val -> IO ()
15:04:52 <lambdabot> Data.IntMap insert :: Key -> a -> IntMap a -> IntMap a
15:04:52 <lambdabot> Data.IntSet insert :: Int -> IntSet -> IntSet
15:04:55 <elliott> Meh
15:04:57 <elliott> :t Prelude.insert
15:04:58 <lambdabot> Not in scope: `Prelude.insert'
15:04:59 <elliott> Meh
15:05:06 <Deewiant> :t Data.List.insert
15:05:07 <lambdabot> forall a. (Ord a) => a -> [a] -> [a]
15:05:13 <Deewiant> :t List.insert
15:05:13 <kmc> elliott, so your idea of an esoteric language is Haskell with the type checker turned off?
15:05:14 <lambdabot> forall a. (Ord a) => a -> [a] -> [a]
15:05:18 -!- augur has joined.
15:05:36 <copumpkin> haskell with no typechecker doesn't work
15:05:45 <copumpkin> well, you lose typeclasses
15:06:07 <kmc> but i hate type classes so it's ok
15:06:11 <copumpkin> oh ok
15:06:16 <kmc> :D
15:07:44 <elliott> kmc: That's my idea of a fast language
15:07:50 <elliott> SOOOO FAAAAST
15:09:55 <copumpkin> elliott: fast to run or fast to compile?
15:09:58 <kmc> TURBO HASKELL
15:10:00 <copumpkin> lol
15:10:08 <copumpkin> ed's thinking resurrecting that
15:10:32 <copumpkin> thinking of
15:11:13 <elliott> copumpkin: Run :P
15:11:19 <copumpkin> why?
15:11:24 <copumpkin> it sounds kind of fun
15:11:33 <copumpkin> also, I hope he writes a haskell parser in trifecta
15:11:46 <elliott> <copumpkin> elliott: fast to run or fast to compile?
15:11:48 <elliott> It was in reply to that
15:12:58 <copumpkin> oh
15:13:11 -!- MSleep has changed nick to MDude.
15:13:11 <copumpkin> why would turning off types make the code faster to run?
15:13:37 <elliott> kmc was presumably referring to my use of unsafeCoerce for optimisation
15:13:47 <copumpkin> oh, like agda's?
15:14:18 <elliott> Yes, except instead of Agda, it's a human doing it
15:14:29 <copumpkin> unsafeCoerce (+) (unsafeCoerce 3) (unsafeCoerce (unsafeCoerce (+) (unsafeCoerce 1) (unsafeCoerce 2)))
15:14:38 <copumpkin> except you need no typeclasses on those operations
15:15:19 <elliott> Wow, everything is actually more or less compiling
15:15:40 <elliott> Except for my ~optomized~ mergeByteString which makes assumptions that are now false, heh
15:22:51 <elliott> Deewiant: I just realised the way I'm doing it now can't possibly do anything but hurt speed >_<
15:23:00 <elliott> I guess it'll reduce memory consumptiont hough
15:23:08 <Deewiant> Doing what, hurt compared to what
15:23:34 <elliott> Hurt compared to my fungespace; and just replacing the underlying structure wihout adding any kind of caching of the current array or anything
15:23:48 <elliott> Because it's still doing lookups all the time, they just happen to go to an array
15:24:00 <Deewiant> Yeah you need caching
15:24:19 <Deewiant> It might help a bit, the processor does caching :-)
15:24:32 <elliott> I guess I'll see if this works, and if it does, then leave the fungespace for now until I write something ~amazing~; I can optimise other things until then
15:24:35 <elliott> Like the stack :P
15:24:43 <elliott> Also more fingerprints??
15:38:37 <elliott> Hmm
15:38:49 <elliott> I wonder how much worse (Map (Int,Int) a) is at lookup than (IntMap (IntMap a))
15:39:43 <kmc> could be better :O
15:40:18 <kmc> it's pretty easy to construct pathological cases where (Map Int) beats IntMap
15:40:37 <kmc> compare also to http://hackage.haskell.org/package/unordered-containers
15:43:10 <elliott> I should probably try unordered-containers, yeah
15:44:51 <kmc> (Map (Int,Int)) might beat (IntMap . IntMap) due to fewer cache misses, or something
15:46:18 <elliott> science
15:47:47 <kmc> indeed
15:55:09 <elliott> Deewiant: You'll be pleased to know my new fungespace is completely broken
15:58:43 <Deewiant> How'd that happen
16:00:55 <elliott> Deewiant: I diagnose it with the rare condition "not working"
16:00:58 <elliott> Time to optimise my stack instead
16:01:12 <elliott> Linked lists aren't bad but I guess localit
16:01:13 <elliott> y
16:01:15 <elliott> has an effect
16:05:58 <Phantom_Hoover> OK
16:06:09 <Phantom_Hoover> I have here an Amnesty International catalogue.
16:06:12 <Phantom_Hoover> It is the funniest thing.
16:06:15 <elliott> Purchase some amnesty
16:06:52 <Phantom_Hoover> If you compressed every single stereotype of a middle-class, sandal-wearing Guardian reader into a catalogue, this would be it.
16:07:06 <Phantom_Hoover> Some highlights:
16:07:21 <Phantom_Hoover> Kitchen utensils made from recycled stainless steel and bamboo.
16:07:36 <Phantom_Hoover> Biodegradable sponges.
16:07:45 <elliott> oh my god
16:07:51 <Phantom_Hoover> Himalayan soap nuts.
16:08:15 <Phantom_Hoover> Natural soap, wrapped in leaves from wild trees.
16:08:36 <elliott> wow
16:08:43 <Phantom_Hoover> Christmas tree decorations hand-carved by a community group in Bethlehem.
16:08:59 <elliott> I want to buy it from you
16:09:05 <elliott> and submit it to galleries as a work of art
16:09:21 <elliott> Oh my god what Bethlehem means "house of meat".
16:09:26 <Phantom_Hoover> A cake stand, made in India.
16:09:38 <Phantom_Hoover> OK, this is the best one.
16:09:49 <Phantom_Hoover> A metal trivet, *made from recycled bike chains.*
16:09:57 <itidus20> my dog had been barking for 30 mins at 2am at some cat while my brother tries to sleep for work
16:09:58 -!- elliott has left ("Leaving").
16:10:03 -!- elliott has joined.
16:10:14 <Phantom_Hoover> I know, it's amazing.
16:10:16 <itidus20> i gave the dog the greasiest glare
16:10:22 <elliott> Phantom_Hoover: i just...
16:10:24 <itidus20> it just might be enough
16:10:30 <Phantom_Hoover> Oh my god, these people are basically elves.
16:11:02 <itidus20> whats a trivet?
16:11:09 <Phantom_Hoover> itidus20, a thing you rest hot pots on.
16:11:24 <itidus20> cool
16:11:25 <Phantom_Hoover> They're one of those things you buy once and never think of again.
16:11:45 <cheater> how do you make your stare greasy?
16:11:58 <itidus20> by being angry
16:12:11 <cheater> where does the word greasy come from?
16:13:27 <itidus20> i dunno... might be a local slang
16:13:33 <itidus20> no it didnt work dog has started again
16:13:55 <cheater> try vasaline instead
16:14:14 <itidus20> ahh here we go
16:14:20 <itidus20> entry 9: http://www.urbandictionary.com/define.php?term=greasy&page=2
16:14:32 <itidus20> aussie slang.. woooo
16:15:40 <ais523> hmm, why is this SConstruct file marked executable despite being a text file that isn't a shellscript with no shebang?
16:15:44 <itidus20> i have heard it in use so it is indeed aussie slang
16:16:41 <elliott> ais523: Windows?
16:16:57 <ais523> elliott: possibly, but most of the files in the directory have the x bit set correctly
16:17:08 <ais523> (it's from an svn repo, in case that's relevant)
16:17:18 <elliott> hmm, I only need about a hundred times speed-up to be competitive with cfunge
16:19:09 <elliott> hmm, my acos, asin and atan are OK, but cos, sin and tan are broken
16:19:24 <elliott> oh hmm
16:19:36 <itidus20> what are you implementing?
16:19:40 <Deewiant> Did you implement them manually or something? :-P
16:19:42 -!- augur has quit (Read error: Connection reset by peer).
16:19:47 <elliott> Deewiant: , (B, const $ fixp (degree acos))
16:19:47 <elliott> , (C, const $ fixp (degree cos))
16:19:57 <elliott> Do the non-a variants not take a fixed-point or something? :-P
16:20:00 <elliott> itidus20: funge
16:20:08 <itidus20> ahh
16:20:15 -!- augur has joined.
16:20:28 -!- augur has quit (Remote host closed the connection).
16:20:47 <Deewiant> elliott: Cosine takes an angle and returns a ratio; the inverse takes a ratio and returns an angle
16:20:54 <elliott> Oh, duh
16:21:09 -!- edwardk has joined.
16:21:09 -!- edwardk has quit (Changing host).
16:21:09 -!- edwardk has joined.
16:21:13 <elliott> I should just define degree without the function-wrapping part :-P
16:23:30 <elliott> Deewiant: Well, that didn't help :)
16:23:48 <elliott> Deewiant: But yeah, OK, wrt take an angle: An integral angle?
16:23:56 <elliott> FIXP should really be FIXP→FIXP all the way, sigh
16:24:03 <Deewiant> I don't remember FIXP, that was just maths
16:24:12 <elliott> Bah, I'll check CCBI
16:24:23 <elliott> Or RCFu- ahahahahaha
16:26:06 <elliott> Deewiant: I like how you handle infinity and nan
16:26:19 <elliott> Hmm, I guess NaN may be part of the specs
16:26:23 <elliott> As in, NaN-reflecting
16:28:03 -!- augur has joined.
16:29:12 -!- edwardk has left ("Leaving...").
16:29:59 -!- Patashu has quit (Quit: MSN: Patashu@hotmail.com , Gmail: Patashu0@gmail.com , AIM: Patashu0 , YIM: patashu2 .).
16:50:51 <elliott> Deewiant: I like how your D code is better encapsulated than my Haskell
16:51:39 <Deewiant> I guess Haskell sucks huh
16:51:49 <elliott> Deewiant: More like I suck
16:51:58 <Deewiant> Yeah I find that more acceptable as well
16:52:07 <elliott> There's stuff here that accesses the stack directly with list crap :-/
16:52:15 * elliott makes a Stack module
16:52:23 -!- derrik has quit (Ping timeout: 264 seconds).
16:52:47 <elliott> Deewiant: It's hard to avoid exposing constructors when everything is in one Types module though :P
16:53:54 -!- derrik has joined.
16:54:08 -!- derrik has left.
16:54:33 <Deewiant> elliott: Don't do that :-P
16:54:56 <elliott> Deewiant: It's unavoidable; you inevitably get circular dependencies otherwise
16:55:08 <elliott> Thus why most major projects do it
16:55:18 <elliott> It sucks, but that's an actual flaw in Haskell :P
16:55:36 <Deewiant> But that's only for the type definitions, no?
16:55:45 <Deewiant> Then just don't export the constructors from that module :-P
16:55:59 <elliott> Deewiant: Then how does the stack module implement its actions
16:56:03 <elliott> Divination? unsafeCoerce?
16:56:10 <elliott> Or are you saying all my functions should be in one module too
16:56:15 <elliott> Because that's great
16:56:24 <Deewiant> Meh, just use .hs-boot files
16:56:45 <elliott> Deewiant: I did; they couldn't solve the circular dependency I had before
16:56:52 <elliott> Because it was a circular dependency on _types_
16:57:00 <elliott> Which is unavoidable with my monad structure
16:57:10 <Deewiant> Howso
16:57:10 <elliott> I still have one required hs-boot file
16:57:14 <elliott> I guess I could separate some things out thoughd
16:57:15 <olsner> it'd be neat if haskell had divination
16:57:35 <elliott> Deewiant: Fingerprint record includes Shiro () actions; Shiro is StateT FungeState, FungeState includes fingerprint information
16:57:38 <elliott> Same with IP
16:57:48 <elliott> → They all need to be in one big ol' module
16:58:08 <elliott> Fungespaces, stacks, and refstores can be separated out, but the rest are all entwined pretty fundamentally
16:58:51 <Deewiant> Can't you granularize the dependencies a bit
16:59:09 <elliott> Deewiant: The dependencies are fine; Haskell just has a poor module system
16:59:16 <elliott> But you're welcome to try
16:59:43 <Deewiant> So that you e.g. have (MonadState IP m, MonadState FingerprintStuff m) => m ()
16:59:53 <elliott> Haha
17:00:15 <elliott> Deewiant: Yes, I could technically rewrite my whole monad as a huge context, at great run-time cost and that of code clarity too
17:00:21 <elliott> I don't find that very desirable :P
17:00:43 <Deewiant> Hmm, no class aliases yet I guess
17:00:52 <Deewiant> Shame
17:01:54 <Deewiant> Then you could do that and just alias it
17:02:06 <Deewiant> No comment on the runtime cost :-P
17:02:33 <elliott> Deewiant: wrt the runtime cost, it was taking two seconds to run Mycology with typeclasses
17:02:34 <elliott> vs one
17:02:40 <Deewiant> heh
17:02:43 <elliott> Specialise pragmas helped naught
17:02:49 <elliott> That's not the kind of multiplication factor I'm ok with
17:02:57 <Deewiant> Shame
17:03:23 <elliott> It is
17:03:37 <elliott> Hmm, I should probably make a generic stack type rather than a special stackstack type, but that would be slower :)
17:03:59 <elliott> Oh wait, I could use type families
17:04:03 <elliott> That's probably overkill, though :P
17:04:18 <elliott> Especially since the stack stack is different to stacks
17:04:21 <elliott> 0-padded and all
17:05:57 <Deewiant> I special case that in the functions themselves
17:07:04 <elliott> Deewiant: You mean functions using stacks?
17:07:08 <elliott> Or the actual stack code itself
17:07:17 <Deewiant> In the stack code, of course
17:09:30 <elliott> Deewiant: That's...
17:09:34 <elliott> Deewiant: That's a crime
17:09:37 <elliott> Against everything
17:09:46 <elliott> Deewiant: Wait, I could just pad out the stack stacks with error "nope" :-D
17:09:50 <Deewiant> Why's that
17:10:04 <elliott> (Except that doesn't really help for the "handle element not being there" case)
17:10:18 <elliott> Deewiant: Because parametric containers should have identical behaviour regardless of their element type?
17:10:20 <elliott> Generic programming, man
17:10:33 <Deewiant> This isn't a library so suck it
17:12:39 <elliott> Deewiant: At least pretypedef the two used cases and don't expose the parametric type!
17:12:43 <elliott> It's not RIGHT.
17:12:50 <elliott> You shouldn't even be able to look at the type you're given.
17:12:58 <elliott> Or do you distinguish itbased on sizeof :D
17:13:38 <Deewiant> Well, with MODE it's hidden but not otherwise
17:13:41 <Deewiant> static if (befunge93)
17:13:41 <Deewiant> Stack!(.cell) stack;
17:13:41 <Deewiant> else version (MODE)
17:13:41 <Deewiant> CellContainer* stack;
17:13:41 <Deewiant> else
17:13:44 <Deewiant> Stack!(.cell)* stack;
17:15:44 <elliott> Deewiant: What's MODE got to do with it
17:15:49 <elliott> Oh, right
17:15:51 <elliott> Different things
17:15:52 <Deewiant> Deque
17:15:54 <elliott> ies
17:15:55 <elliott> right
17:21:37 -!- azaq23 has quit (Quit: Leaving.).
17:24:37 <elliott> Woot, now I have a verbose stack API; I'll remember how this is a gain soon I guess
17:25:29 <elliott> Heh, circular dependency already just by putting things outside of .Types, take that Deewiant
17:25:42 <Deewiant> Ouch
17:25:44 <elliott> (Types needs to see Stack because obviously all the state stuff includes Stacks, but Stacks are made out of Values, defined in Types)
17:25:59 <elliott> (OK, so it's caused by a monolithic type module there, but there are more conflicts without :P)
17:26:08 <Deewiant> You need CircularTypes and NormalTypes :-P
17:26:19 <elliott> I don't have any NormalTypes :P
17:26:23 <Deewiant> Value?
17:26:42 <elliott> Well, OK
17:26:46 <Deewiant> I assume it's something like type Value = Intt
17:26:46 <elliott> But that's just an alias :P
17:26:50 <Deewiant> Yeah so?
17:26:58 <elliott> You want me to make a module for one type?
17:27:00 <Deewiant> See ccbi.cell
17:27:23 <elliott> Pah :-P
17:27:27 <elliott> I just need to rethink this
17:28:00 <Deewiant> You could define Value in Stack?
17:28:19 <Deewiant> Oh, but you want space to be separate, so probably nott
17:28:21 <Deewiant> tttttttttttt
17:28:32 <elliott> Deewiant: Stuttering?
17:28:36 <Deewiant> Yep
17:29:01 <elliott> Deewiant: Surely rubber dome is more tolerable than ttttttttt
17:29:02 <Deewiant> I'm back to that once-majorly-stuttering keyboard which for some reason stutters a lot less after sitting in a cupboard for months
17:29:43 <Deewiant> I'll use this until it becomes intolerable, for the moment it's not bad
17:30:12 <elliott> Haven't you snarked at me for not yet fixing my keyboard
17:30:24 <Deewiant> This isn't really "fixable" :-P
17:31:09 <elliott> Warranty?
17:31:11 <elliott> No? :P
17:31:28 <Deewiant> Cost of sending keyboard to Japan and back: greater than price of keyboard
17:31:33 <elliott> static assert (dim >= 1 && dim <= 3);
17:31:39 <elliott> I don't like your ideas
17:31:44 <elliott> And their nasty limitations
17:31:47 <Deewiant> Hey at least I enforce my assumptions
17:31:59 <elliott> Are you saying I don't?
17:32:05 <elliott> I enforce my two-dimensionality by having nothing else :D
17:32:14 <Deewiant> Could do it only in all the places it's necessary but I got lazy
17:32:21 <Deewiant> 2011-09-01 18:16:34 ( elliott) Except for my ~optomized~ mergeByteString which makes assumptions that are now false, heh
17:32:35 <elliott> Deewiant: The bad assumptions lead to failure to compile
17:32:37 <elliott> Sounds like enfrocement to me
17:32:42 <Deewiant> Ah, okay
17:42:55 -!- augur has quit (Remote host closed the connection).
17:52:53 -!- augur has joined.
17:56:47 <elliott> Has anyone here used OpenCL?
17:59:56 <MDude> I haven't.
18:00:03 <elliott> thanks
18:00:15 <ais523> nor have I, even though logically I might have been expected to have done
18:00:25 <elliott> ais523: CUDA, then?
18:00:35 <ais523> although possibly I'll end up using it before long if nvidia continue screwing up the CUDA SDK
18:00:40 <ais523> I have used CUDA
18:01:11 <elliott> I can't seem to find any documentation on using OpenCL outside of Python, which is ridiculous
18:01:26 <Gregor> lol
18:01:42 <Gregor> High-performance SIMD parallel computing: I'm thinkin' Python!
18:01:59 <elliott> Gregor: Well, you compile the regular OpenCL program and just invoke it from Python :P
18:02:13 <elliott> Totally ridiculous that I can't find documentation on how to do that from C, thoug.
18:02:14 <elliott> though.
18:02:19 <Gregor> http://esolangs.org/wiki/Main_Page <--- uhhh, wowwtf
18:02:29 <MDude> Yeah, I was going to bring that up.
18:02:30 <elliott> Gregor: ooh, what is it?
18:02:41 <elliott> nobody revert until I see it :P
18:02:45 <MDude> Is the page just down now?
18:02:51 <elliott> Gregor: What was it?
18:02:55 <elliott> it won't load here
18:03:01 <MDude> I got a fancy DNS message earlier.
18:03:08 <elliott> ais523: also, am I right in thinking that programs which offer to perform a computationally intensive task on both the GPU and CPU are mostly wasting their time as far as the latter goes?
18:03:12 <Gregor> elliott: It's hyper-overloaded because it's EasyDNS saying "lol, EasyDNS went kaput, u sux"
18:03:24 <elliott> Gregor: Ugh, that happened to another site I visit
18:03:25 <Gregor> (Only slightly paraphrasing)
18:03:27 <elliott> http://esoteric.voxelperfect.net/wiki/Main_Page works
18:03:32 <Gregor> elliott: Naturalismo.
18:03:34 <Gregor> But lol
18:03:35 <ais523> elliott: depends on how well it parallelizes, they may well be wasting their time on the /GPU/
18:03:44 <elliott> ais523: it's embarrassingly parallel
18:03:45 <MDude> To Whom This May Concern:
18:03:45 <MDude> You are seeing this message due to the site you are trying to view having its DNS hosted by EveryDNS.
18:03:55 <ais523> elliott: in that case, running it on the CPU is mostly useless too
18:04:00 <elliott> ais523: right
18:04:10 <ais523> umm, reorder words so that sentence makes sense
18:04:24 <elliott> ais523: (I was wondering whether I should bother learning how to do extremely-parallel programming in C as well, or whether OpenCL would do just fine)
18:04:43 <ais523> the problem with OpenCL is that nobody really supports it yet
18:05:10 <ais523> at least with CUDA, one vendor supported it
18:05:13 <ais523> but they seem to be going backwards
18:05:33 <Gregor> I thought OpenCL was supposed to compile to CUDA and GLSL?
18:05:39 <ais523> (they removed the simulator on the basis that the GPU could now do limited debugging itself, which is not good if your program has a memory leak and a GPU memory leak requires a hard reboot)
18:05:40 <elliott> Well, I've ran an OpenCL program on my card and it worked fine.
18:06:02 <ais523> OpenCL support is getting better
18:06:17 <ais523> but even then, CUDA doesn't feel like the sort of lang you compile to, but the sort of lang you write in
18:06:26 <Gregor> So?
18:06:45 <elliott> Hmm, traditional crypt() is GPU-friendly, right?
18:07:16 <ais523> I don't actually know
18:07:24 <elliott> PAH
18:08:02 <Gregor> http://developer.nvidia.com/opencl
18:08:18 <Gregor> Seems like OpenCL probably supports just about as much as CUDA ... which is to say, NVidia stuff :P
18:10:02 <ais523> Microsoft are also working on their own DirectX-based thing
18:10:08 <ais523> I know because they keep giving seminars about it
18:14:11 <elliott> oh, yay, crypt actually has a fixed-length input
18:14:17 <elliott> and you can just zero-pad, because that's how c strings work
18:14:49 <ais523> elliott: Windows used to allow up to 14-character passwords
18:15:00 <ais523> and it split them into two 7-character passwords and hashed them separately
18:15:05 <elliott> haha
18:15:20 <ais523> (that's been fixed a while back, but for a while, people were recommended to use passwords at least 15 chars long so that it didn't default to the old algo)
18:15:56 <elliott> god dammit i dont want an opencl/c tutorial as a video
18:15:59 <elliott> fuck you fuck you fuck youuuuuuuu
18:17:46 <Gregor> elliott: Isn't it annoying how when you search for $X tutorial the first result is always some bullshit on YouTube? :P
18:18:03 <elliott> what happened to text :-(
18:18:12 <ais523> Gregor: sometimes the YouTube tutorials are actually useful, although I normally prefer text
18:21:40 <ais523> you know what? I'm starting to think that in many situations where pointers or indexes are used, referencing by coordinates into a globalish structure is saner
18:22:00 <elliott> define globalish
18:22:54 <ais523> some moderately-persistent, mutable view of whatever it is that the application processes
18:23:01 <ais523> one example I'm thinking of is the world map in computer games
18:23:16 <elliott> so not global in the global sense then :)
18:24:04 <ais523> globalish in that you're probably only going to have one of them and you're going to refer to it all over your application
18:24:09 <elliott> http://stackoverflow.com/questions/6582236/branch-predication-on-gpu
18:24:17 <elliott> gpus sure are weird!
18:24:28 <ais523> oh dear, I can tell that's going to be a mess just from the question
18:24:34 <elliott> howso?
18:24:55 <ais523> people confusing it with branch prediction, for one thing
18:25:02 <elliott> heh
18:25:05 <ais523> but it really depends on what the individual warps are doing
18:25:09 <elliott> i confused it at first, but only because i didn't notice the different spelling
18:25:22 <ais523> it basically becomes an ABSTAIN if you get both sides within a warp
18:25:31 <ais523> and you only ever do that if you have more threads in a warp than you actually need
18:26:03 <ais523> e.g. you're doing an associative fold, the last few steps are probably going to not be very parallelizable so you just narrow the number of threads acting in a warp
18:26:14 <elliott> "For example NVidia GPUs use scalar processors (with scalar instructions), no vectorization is necessary. On the contrary, ATI features 5d (or 4d) VLIW processors and for these is the vectorization crucial." i;m so confused
18:26:27 <Gregor> ......................... wuh
18:26:51 <ais523> on top of it, graphics cards are sort-of inherently vectorized
18:27:18 <elliott> hmm, it seems like cuda may be more reliable right now
18:28:14 <ais523> in practice, you can't write portable GPU code with modern toolsets either
18:28:23 <elliott> ais523: out of interest, how are nvidia mucking up cuda sdk?
18:28:42 <ais523> particularly bad in CUDA because there are function calls to determine values about the GPU but they have to be compile-time constants for their only sensible uses (other than displaying to the user)
18:28:42 <Gregor> OH MY GOSH, YOU GUYS
18:28:47 <Gregor> eComStation had a release in May :P
18:28:50 <ais523> elliott: what they did to the debugger, mostly
18:28:52 <Gregor> Apparently it's ... maintainedish?
18:29:09 <Gregor> (I was reminded by the word "warp" :P )
18:29:33 <ais523> as in, replaced it with one that sucked, didn't work, and was unsafe in the dereferencing-NULL-in-C sense (except it has quite a chance of hardlocking your GPU, forcing a reboot if you want your monitor to display anything and the GPU is also connected to the monitor, which is likely)
18:29:57 <elliott> ais523: well, I don't particularly care about debugging, I should just get it right the fisrt time :P
18:30:20 <ais523> so easy to leak memory by mistake, or dereference the wrong sort of pointer, etc
18:30:28 <ais523> a GPU memory leak can make the system unusable for no obvious reason
18:55:26 -!- MSleep has joined.
18:56:21 -!- BeholdMyGlory has quit (Ping timeout: 260 seconds).
18:56:29 -!- Behold has joined.
18:58:47 -!- MDude has quit (Ping timeout: 240 seconds).
19:04:25 <olsner> nice black-and-white advertisement picture on http://www.ecomstation.com/ - nothing says "new" like a black-and-white picture with ancient-style phones
19:04:51 <olsner> also version *2* ... at least they could've inherited the OS/2 numbers and released number 6
19:07:09 -!- BeholdMyGlory has joined.
19:07:15 -!- Behold has quit (Ping timeout: 252 seconds).
19:10:42 <MSleep> Black and white would looks pretty nice if they didn't have the rest of the website if shaded of blue.
19:10:58 <olsner> nice new feature: "* Added BOOTDLY driver, which causes a 20 second boot delay [...]"
19:11:11 -!- MSleep has changed nick to MDude.
19:35:09 <elliott> hmm, gpus are weir
19:35:10 <elliott> d
19:35:56 <ais523> nah, /CPUs/ are weird
19:36:22 <elliott> oh, dammit, the relevant power of two is _slightly_ too large to do what i'd ideally want
19:36:25 <elliott> but this should not surprise me
19:36:44 <elliott> ais523: umm, how many threads can a GPU do at once, roughly?
19:36:57 <ais523> depends on your definition of "at once"
19:37:06 <ais523> in terms of "physically flowing through an ALU or equivalent", around 16
19:37:10 <elliott> each thread basically doing DES and then a comparison on the result
19:37:13 <ais523> although it looks like 32 to the user because of pipelining
19:37:28 -!- oerjan has joined.
19:37:31 <ais523> however, GPUs can keep tens of thousands (or hundreds of thousands) of threads ready to context-switch in
19:37:33 <elliott> ais523: well, "what should I divide the keyspace by" if the problem is mainly DES :-)
19:37:40 <ais523> and in particular, will context-switch in threads while the other threads are waiting for memory access
19:38:20 <elliott> and no out of GPU memory accesses, I think, apart from sending info to the CPU on an (unlikely) successful comparison -- I have no idea how GPUs work really so this may be bullshit
19:38:53 <ais523> elliott: is a few hundred bytes of per-thread storage enough?
19:39:15 <ais523> GPUs aren't so much designed for truly embarassingly parallel problems, as problems which are almost embarassingly parallel but with a few exceptions
19:39:18 <ais523> like matrix multiplication
19:39:33 <elliott> ais523: a few hundred bytes should be fine, yep
19:39:58 <elliott> I mean, I'm no DES expert, but I doubt one round takes more than a few hundred bytes :)
19:40:22 <elliott> "By taking the lowest 7 bits of each of the first eight characters of
19:40:22 <elliott> the key, a 56-bit key is obtained. This 56-bit key is used to encrypt
19:40:22 <elliott> repeatedly a constant string (usually a string consisting of all
19:40:22 <elliott> zeros). The returned value points to the encrypted password, a series
19:40:22 <elliott> of 13 printable ASCII characters (the first two characters represent
19:40:23 <elliott> the salt itself). The return value points to static data whose content
19:40:25 <elliott> is overwritten by each call.
19:40:27 <elliott> Warning: The key space consists of 2**56 equal 7.2e16 possible values.
19:40:29 <elliott> Exhaustive searches of this key space are possible using massively par‐
19:40:30 <ais523> is it iterated-DES you're cracking?
19:40:31 <elliott> allel computers."
19:41:04 <elliott> ais523: looks like 25 rounds
19:41:20 <elliott> which I think counts as close to nothing, from what little I know of crypt
19:41:38 <ais523> so after you do 25 rounds, you're going to need to initialize memory for another group of rounds
19:41:44 <ais523> that's doable, though
19:42:01 <elliott> ais523: I was just going to use a constant number of threads, and rewrite over the last used memory at the end
19:42:05 <ais523> I don't think it's a situation in which you'll get massive gains from a GPU, just because CPUs are also quite good at that particular calculation
19:42:18 <ais523> because you are actually CPU-bound, not memory-bound
19:42:23 <elliott> GPUs have been used to give massive gains for very similar problems in the past, I think
19:42:25 <ais523> GPUs will benefit simply from having more cores
19:42:27 <elliott> well, I know
19:42:33 <ais523> you'll probably get around x1000 on that
19:42:35 <elliott> ais523: well, that's the benefit
19:42:39 <ais523> but not, say, ten orders of magnitude
19:42:39 <elliott> x1000 counts as massive here
19:42:52 <elliott> so, umm, eight thousand concurrent DES'ers sound reasonable?
19:42:55 <elliott> :-P
19:43:15 <ais523> more like 128, I think
19:43:20 <elliott> PAH
19:43:28 <ais523> and practically 256 because they're running on alternate ends of the clock cycle
19:43:32 <elliott> right
19:43:33 <elliott> better than CPUs
19:43:41 <elliott> which can presumably manage about eight, if you have a good CPU
19:43:47 <ais523> yep
19:44:30 <elliott> ok, if your quoted number is right, and I can do one crypt()+compare per millisecond, then I can exhaust the keyspace in only nine thousand years
19:44:40 <elliott> I, umm, suspect a millisecond to be a rather pessimistic estimate
19:44:52 <elliott> although I don't really have any idea how long it does atke
19:44:56 <elliott> it might be simpler just to write the code and measure it
19:46:49 <elliott> ais523: I suspect this exhaustive massively parallel search is talking about Deep Crack or something :P
19:47:07 <elliott> yeah, seems so
19:48:50 <elliott> ais523: hmm, I suppose writing the equivalent CPU code might actually be beneficial
19:49:06 <elliott> I only have two cores on this machine, but on an eight-core machine it might just make a slight difference :-P
19:49:15 <elliott> because of the CPU-boundness
19:56:13 <elliott> `addquote <Phantom_Hoover> OK, making myself emergency doctor on the advice of IRC.
19:56:16 <HackEgo> 636) <Phantom_Hoover> OK, making myself emergency doctor on the advice of IRC.
19:58:00 <coppro> please state the nature of your IRC emergency
20:00:15 <oerjan> i am assuming some very mauled dorfs here
20:00:34 <elliott> no. Phantom_Hoover has appendicitis.
20:00:42 <oerjan> >_>
20:01:00 <oerjan> Phantom_Hoover: it has been pleasant to know you.
20:01:16 <elliott> well, I wouldn't go that af.r
20:01:17 <elliott> far.
20:01:32 <Phantom_Hoover> oerjan, I'm a competent amateur surgeon!
20:01:42 <elliott> im a competent bad surgeon
20:01:48 <elliott> ever need some bad surgery done
20:01:49 <elliott> im your man
20:01:51 <oerjan> elliott: i thought adding "well, with a few exceptions." would be impolite in the circumstances.
20:04:25 -!- monqy has joined.
20:13:13 <oerjan> elliott: hey my iwc premonition was right anyhow
20:13:27 <elliott> oerjan: what, of it ending?
20:13:46 <oerjan> no, of Me becoming singled out
20:13:56 <elliott> oh (what do you mean by that)
20:14:02 <elliott> (im dont follow iwc, as regularly as i should)
20:14:25 <oerjan> i thought you were here when i mentioned i thought Me would have been chosen, not Steve
20:14:36 <elliott> sorry chosen for what IM UNSMART
20:14:58 <oerjan> as hitler's body donor, sheesh
20:15:11 <elliott> o
20:15:23 * elliott actually reads latest iwc
20:15:23 <elliott> ah
20:15:39 <elliott> oerjan: enjoy your annotations in german
20:16:00 <oerjan> O KAY
20:16:07 <elliott> Unregelmäßigen Webcomic!
20:16:46 <oerjan> i don't think -en is the right suffix there.
20:17:02 <elliott> fuck you nazis can germinate however they like. as can google translate.
20:17:07 <elliott> ("Germinate" :DD:DDD)
20:17:10 <elliott> :dddD:D:D
20:17:30 * oerjan swats elliott -----###
20:19:03 <elliott> hmm, those fancy Intel encryption instructions
20:19:08 <elliott> they're reasonable things like AES, right, not DES? :P
20:19:12 <elliott> olsner probably knows
20:19:58 <Deewiant> Yes, AES
20:20:13 <elliott> Deewiant: but why not DES, too?
20:20:17 <Deewiant> https://secure.wikimedia.org/wikipedia/en/wiki/AES_instruction_set
20:20:19 <elliott> that's the real question :|
20:20:27 <oerjan> hm i wonder if this will mean that hitler will continue being a regular character, but now will look like DMM instead...
20:20:54 <oerjan> that _is_ brilliant.
20:21:19 <elliott> DES sure is complicated when you're sleepy
20:25:47 <CakeProphet> sleep sure is complicated when you're using DES
20:27:02 <elliott> true
20:37:56 <elliott> Phantom_Hoover: oerjan: Hey you, remind me to rip out haskell-mode and install haskell-emacs tomorrow.
20:38:18 <Phantom_Hoover> @tell elliott Remember to install haskell-emacs!
20:38:18 <lambdabot> Consider it noted.
20:38:20 <elliott> Hopefully I can coerce it into doing what I want.
20:38:20 <lambdabot> elliott: You have 3 new messages. '/msg lambdabot @messages' to read them.
20:38:22 <Phantom_Hoover> @tell elliott Remember to install haskell-emacs!
20:38:23 <lambdabot> Consider it noted.
20:38:29 <elliott> Phantom_Hoover: dude that is so un-okay also, what is that messages
20:38:29 <lambdabot> elliott: You have 4 new messages. '/msg lambdabot @messages' to read them.
20:39:02 <elliott> Phantom_Hoover: I am afraid you will have to re-send these
20:39:02 <lambdabot> elliott: You have 1 new message. '/msg lambdabot @messages' to read it.
20:39:04 <elliott> oh
20:39:33 <elliott> Phantom_Hoover: Also remind me to re-install ido-mode because ido-mode is great.
20:39:44 <elliott> Hmm wait
20:39:56 <elliott> ^ul (?tell elliott Hey install ido-mode, it's great.)
20:39:56 <lambdabot> elliott: You have 2 new messages. '/msg lambdabot @messages' to read them.
20:40:01 <elliott> fung??
20:40:01 <elliott> OMG
20:40:05 <elliott> fizze????
20:40:06 <elliott> OJSIDFDOJFODIF
20:40:09 <Phantom_Hoover> fungot ;_;
20:40:15 <elliott> `echo ?tell elliott Hey install ido-mode, it's great.
20:40:16 <HackEgo> ​?tell elliott Hey install ido-mode, it's great.
20:40:19 <Phantom_Hoover> fizzie ;_;
20:40:23 <elliott> `echo @tell elliott Hey install ido-mode, it's great.
20:40:26 <HackEgo> ​@tell elliott Hey install ido-mode, it's great.
20:40:28 <elliott> Gregor: FASCISTJIOS
20:40:39 <elliott> ummm ummm
20:40:43 <elliott> hey ais523
20:40:49 <ais523> hi
20:40:55 <elliott> if I sent lines at you prefixed with QQQ will you send them back to the channel, assuming they're not malicious
20:41:43 <ais523> probably not, I'm too tired to repeat them sensibly
20:41:50 <elliott> ONLY ONE WAY TO FIND OUT
20:41:53 <elliott> ais523: QQQ?tell elliott Hey install ido-mode, it's great.
20:41:56 <ais523> or to constantly monitor the channel to do that
20:41:59 <elliott> Wait I should do redundancy.
20:42:02 <elliott> Phantom_Hoover: QQQ?tell elliott Hey install ido-mode, it's great.
20:42:10 <ais523> also, I'd be a little unlikely to do it without your comment earlier
20:42:24 <ais523> is lambdabot ignoring the other bots here?
20:42:41 <elliott> EgoBot and HackEgo prefix punctuation with unicode
20:42:44 <elliott> because they're dum stupid
20:42:45 <elliott> and fungot
20:42:47 <elliott> fungot
20:42:48 <elliott> is not
20:42:50 <elliott> with us ;____;
20:42:54 <elliott> WAIT
20:42:57 -!- elliott has changed nick to notelliottatall.
20:42:58 <ais523> @tell elliott you wanted the bot to remind you about ido-mode, right?
20:42:58 <lambdabot> Consider it noted.
20:43:00 <oerjan> we've got no fun
20:43:12 <notelliottatall> ?tell elliott Hey install ido-mode, it's great.
20:43:12 <lambdabot> Consider it noted.
20:43:30 <notelliottatall> ?tell elliott Also: change the colour scheme emacs' default colour scheme is terrible honestly you are a bum.
20:43:30 <lambdabot> Consider it noted.
20:43:34 <ais523> oh, prefixing punctuation with unicode is a smart way to avoid a botloop
20:43:38 <notelliottatall> ?tell elliott_ Get rid of that underscore goddammit
20:43:38 <lambdabot> Consider it noted.
20:43:43 <notelliottatall> ?tell elliott__ We are no longer friends
20:43:43 <lambdabot> Consider it noted.
20:43:45 -!- notelliottatall has changed nick to elliott.
20:43:48 <elliott> Beautiful
20:43:48 <lambdabot> elliott: You have 5 new messages. '/msg lambdabot @messages' to read them.
20:43:52 <elliott> No, lambdabot, no.
20:43:57 <elliott> umm, wait
20:44:00 <ais523> what character is it? now I want to design a bot that uses it as a command character
20:44:02 <elliott> it won't remind me I have any tomorrow
20:44:08 <elliott> ais523: zero width non-breaking space i think
20:44:31 <elliott> ok, umm, someone ?tell elliott something after I leave
20:44:31 <ais523> do you mean zero-width joiner?
20:44:37 <elliott> ais523: not sure, check yourself :P
20:45:56 <elliott> Phantom_Hoover: OK I am entrusting you to remind me to check my messages tomorrow by ?telling me after I leave which will be momentarily.
20:45:59 <elliott> If you disappoint me
20:46:00 <elliott> your soul
20:46:01 <elliott> shall end
20:50:20 <oerjan> but how do we know Phantom_Hoover has a soul?
20:50:36 <Phantom_Hoover> oerjan, I'm a ghost.
20:50:42 <Phantom_Hoover> I am /literally nothing but soul/.
20:50:48 <oerjan> aha
20:54:08 <Sgeo> ?tell elliott something before I leave
20:54:09 <lambdabot> Consider it noted.
20:54:26 <elliott> Sgeo: no
20:54:26 <lambdabot> elliott: You have 6 new messages. '/msg lambdabot @messages' to read them.
20:54:27 <elliott> no
20:54:28 <elliott> after i leave
20:54:29 <elliott> or it does
20:54:30 <elliott> that
20:55:40 <Vorpal> !help
20:55:41 <EgoBot> ​help: General commands: !help, !info, !bf_txtgen. See also !help languages, !help userinterps. You can get help on some commands by typing !help <command>.
20:55:44 <Vorpal> !info
20:55:44 <EgoBot> ​EgoBot is a bot for running programs in esoteric programming languages. If you'd like to add support for your language to EgoBot, check out the source via mercurial at https://codu.org/projects/egobot/hg/ . Cheers and patches (preferably hg bundles) can be sent to Richards@codu.org , PayPal donations can be sent to AKAQuinn@hotmail.com , complaints can be sent to /dev/null
20:55:59 <elliott> Vorpal: ?
21:10:23 <ais523> gah, Yahoo! are getting rid of their classic interface
21:10:54 <ais523> (the one that actually makes it possible to send sanely-formatted interfaces without having to rely on SMTP forwarding)
21:11:33 -!- ais523 has quit (Remote host closed the connection).
21:17:47 -!- nooga has quit (Ping timeout: 252 seconds).
21:24:03 -!- elliott has quit (Ping timeout: 258 seconds).
21:25:52 <Vorpal> elliott: I was looking for the repo
21:26:55 <Vorpal> also the Swedish mirror for kernel.org just died it seems.
21:29:26 -!- kwertii has joined.
21:45:24 <Sgeo> ?tell elliott You're not a doctor.
21:45:25 <lambdabot> Consider it noted.
21:47:44 <CakeProphet> ?tell lambdabot I secretly love you.
21:47:44 <lambdabot> Nice try ;)
21:48:20 <CakeProphet> NICE CONDITIONALS LAMBDABOT
21:48:24 <CakeProphet> SEXY SEXY CONDITIONALS
21:49:14 <Sgeo> ?tell CakeProphet you have a weird idea about what the word "secretly" means
21:49:14 <lambdabot> Consider it noted.
21:50:47 <Lymee> ?tell lambdabot I not-so-secretly love you!
21:50:47 <lambdabot> Nice try ;)
21:50:48 <Lymee> Damnit!
21:51:27 -!- Deewiant has quit (Read error: Connection reset by peer).
21:51:35 -!- Deewiant has joined.
21:52:51 <CakeProphet> ?tell fungot that sword alone
21:52:51 <lambdabot> Consider it noted.
21:53:22 <CakeProphet> fungot is not present... :(
21:53:22 <lambdabot> CakeProphet: You have 2 new messages. '/msg lambdabot @messages' to read them.
21:56:44 <Phantom_Hoover> <CakeProphet> ?tell lambdabot I secretly love you.
21:56:53 <Phantom_Hoover> @vixen I hear CakeProphet fancies you.
21:56:54 <lambdabot> awesome
21:57:06 <Phantom_Hoover> @vixen I'll leave this to you two.
21:57:06 <lambdabot> there are a lot of weirdos on here
21:57:24 <Phantom_Hoover> @vixen Come now, it's natural to take a passing interest in the affairs of others.
21:57:25 <lambdabot> right now?
21:57:34 <Phantom_Hoover> @vixen As good a time as any.
21:57:35 <lambdabot> good good
21:58:39 -!- GuestIceKovu has joined.
21:59:19 <CakeProphet> @vixen how does polar bear know what apples is?
21:59:19 <lambdabot> how? it depends...
21:59:38 -!- Slereah has quit (Ping timeout: 264 seconds).
21:59:47 <CakeProphet> @vixen yow!!!
21:59:48 <lambdabot> Crazy little wanker!
22:02:32 <CakeProphet> @vixen Will you marry me? o_O_o
22:02:32 <lambdabot> i think you know the answer to that one, silly
22:02:43 <CakeProphet> @vixen if I ask a question will you say the same thing?
22:02:43 <lambdabot> oh, but only if, right?
22:02:52 <CakeProphet> @vixen what if I yell!!?
22:02:53 <lambdabot> i don't know, what?
22:02:59 <CakeProphet> @vixen I am yelling!
22:02:59 <lambdabot> have you ever scubadived?
22:03:23 <CakeProphet> @vixen no
22:03:23 <lambdabot> no?
22:03:25 <CakeProphet> @vixen no
22:03:25 <lambdabot> i didn't think so
22:03:46 <CakeProphet> @vixen no
22:03:46 <lambdabot> i didn't think so
22:04:49 <CakeProphet> @vixen sauerkraut!!!
22:04:49 <lambdabot> am I the only person you're talking to?
22:05:15 <CakeProphet> @vixen yes
22:05:15 <lambdabot> you agree?
22:05:17 -!- nys has joined.
22:05:19 <CakeProphet> @vixen yes
22:05:19 <lambdabot> i thought so
22:05:43 <Phantom_Hoover> CakeProphet, honestly, don't you have anything more to say?
22:06:29 <CakeProphet> is it because you feel don't you have anything more to say that you ask questions honestly?
22:06:32 <CakeProphet> .....
22:08:46 <CakeProphet> cleverbot is not clever because it s a borg-like hivemind of all of the stupid people it talks to.
22:08:59 <oerjan> @vixen lutefisk!
22:08:59 <lambdabot> Fuck me like im a school boy
22:09:10 <Phantom_Hoover> @vixen School girl, surely?
22:09:11 <lambdabot> who's to say?
22:09:15 <CakeProphet> lol
22:09:31 <Phantom_Hoover> @vixen I was under the impression that your gender was firmly established.
22:09:32 <lambdabot> uhuh
22:11:28 <CakeProphet> oerjan: apparently Vixen has a thing for traditional Norwegian cuisine.
22:11:50 <CakeProphet> or bastardizations thereof
22:15:47 -!- kwertii has quit (Quit: bye).
22:16:50 <CakeProphet> What is two plus two?
22:16:51 <CakeProphet> Yes.
22:16:55 <CakeProphet> STUPID CLEVERBOT
22:17:02 <CakeProphet> me ragecloses
22:17:21 <CakeProphet> my rage has no time for /'s
22:18:21 <nys> the rage of bully automatons
22:21:08 * oerjan suddenly realizes the pun in rube ~ bully automaton
22:21:28 <nys> :)
22:23:44 <Phantom_Hoover> oerjan, where?
22:24:13 <oerjan> Phantom_Hoover: a bully is a rube
22:24:34 <Phantom_Hoover> That occurred to me but I dismissed it as stupid.
22:25:10 * oerjan hits Phantom_Hoover with the saucepan ===\__/
22:25:23 <CakeProphet> there's no such thing as a stupid pun.
22:25:37 <CakeProphet> er, excuse me
22:25:42 <CakeProphet> there's no such thing as a stupid fun.
22:25:45 <CakeProphet> BAHAHAHAHAHA
22:25:46 <CakeProphet> ...
22:25:59 <oerjan> ic
22:26:35 <oerjan> don't you mean carrots?
22:26:47 * oerjan runs away _fast_
22:27:00 <CakeProphet> I don't really understand.
22:27:08 <oerjan> good, good
22:27:14 * Sgeo does
22:27:31 <oerjan> it's a reddit meme, and also a meta-meme of hating it
22:27:45 <oerjan> (for being stupid)
22:47:19 -!- FireFly has quit (Quit: FireFly).
22:48:26 * Phantom_Hoover → sleep
22:48:27 -!- Phantom_Hoover has quit (Quit: Leaving).
22:51:00 <kmc> bacon?
22:54:49 <oerjan> "Good God. Mustafar is Dwarf Fortress, isn't it. That explains EVERYTHING! The random violence. The emo drama. The insanity."
22:54:57 <oerjan> (comment from the iwc forum)
22:55:35 <oerjan> kmc: no, carrots
22:56:11 <oerjan> ok maybe bacon has reached that point too. but the carrots essentially _started_ there.
22:57:48 <kmc> carrots: my anti-bacon
23:22:59 -!- zzo38 has joined.
2011-09-02
00:04:52 -!- copumpkin has quit (Quit: Computer has gone to sleep.).
00:10:31 <Sgeo> Grrrr wget
00:10:38 * Sgeo wants wget to ignore robots.txt >.>
00:11:20 <oerjan> you wicked spammer
00:11:46 <zzo38> wget has a lot of options look to see if it has the one you want
00:12:12 * Sgeo found something online about it
00:12:21 <Sgeo> I don't see this version of wget's --wait thingy
00:19:25 <kmc> patch wget problem solved
00:19:54 <Sgeo> There is no problem
00:20:04 <Sgeo> I think --wait just wasn't listed in --help, or I didn't see it
00:20:31 <Sgeo> And there is an option to disable checking robots.txt
00:21:54 <mauke> -e robots=off
00:23:40 <Sgeo> Yes
00:23:54 * Sgeo is using it to great effect >.>
00:26:29 <zzo38> Is there an option to change the name of the file to check (other than robots.txt), or to change which entry it searches for in robots.txt?
00:26:59 -!- copumpkin has joined.
00:29:22 <Sgeo> I'm not sure what the use of that would be
00:29:39 <Sgeo> Or, um, the first option anyway
00:30:19 <Sgeo> It's pretty much a standard, if not an official one. About as useless to make an option to change as making a browser that sends RETRIEVE/SEND instead of GET/POST
00:31:16 <oerjan> more of that mustafar/dwarf fortress discussion http://www.irregularwebcomic.net/draakslair/viewtopic.php?t=6110
00:33:29 -!- Patashu has joined.
02:39:10 -!- myndzi\ has quit (Ping timeout: 240 seconds).
03:05:02 -!- nys has quit (Quit: f00f).
03:10:58 <CakeProphet> hello friends.
03:11:37 <zzo38> I looked in the haskell-src-exts files. The ParseSyntax.hs file (as well as many of the other files) do something, stuff added needs to be added in multiple places manually. For example, PExp needs to also define ann, amap, fmap, etc. But most of that is just the same way. It might seem (to me, at least) a better way using TH-splices generating more-declarations.
03:13:17 <zzo38> I don't know what it seems to you.
03:34:50 <zzo38> The code accumulation in Strathclyde Haskell Enhancement is a very crude idea with code accumulation feature, but it seems insufficient tome (it is also designed for layout mode). That one does not do ordering, removal of duplicates, cooperating with Template Haskell, and a bunch of other stuff.
03:35:40 <CakeProphet> anyone familiar with xpath?
03:35:53 <CakeProphet> I'm wondering if the | can be used to search for elements by multiple criteria
03:36:29 -!- CakeProphet has quit (Quit: Reconnecting).
03:36:46 -!- CakeProphet has joined.
03:36:47 -!- CakeProphet has quit (Changing host).
03:36:47 -!- CakeProphet has joined.
03:38:00 <CakeProphet> //a[@class=...|@href=...|@name=...|@id=...]
03:39:46 <zzo38> Why doesn't "hint" have a function for loading a module from a string instead of from a file?
03:41:06 -!- MDude has changed nick to MSleep.
03:41:25 <CakeProphet> zzo38: because it is really crappy.
03:41:48 <CakeProphet> for my IRC bot I worked around this by just writing the string to file and adding the module bits.
03:41:48 <zzo38> Then how to do it better?
03:41:55 <CakeProphet> mueval has that capability but mueval is also bad.
03:42:42 <zzo38> And you must also send expressions to be evaluated as strings, there is no command to interpret a Q Exp instead?
03:43:01 <zzo38> What program has that one?
03:43:37 <zzo38> Which are better programs?
03:47:45 <CakeProphet> I have no idea.
03:47:52 <CakeProphet> lambdabots code is not bad.
03:47:53 -!- augur has quit (Remote host closed the connection).
04:18:06 <zzo38> What kind of data can be compressed well with run length encoding multiple times? What kind of data should you run length encode and then use Huffman coding on the result?
04:19:11 -!- Patashu has quit (Ping timeout: 258 seconds).
04:31:50 <oerjan> multiple time run length encoding sounds unlikely to improve things
04:32:43 <oerjan> that's essentially look-and-say transformation, which quickly starts growing exponentially
04:33:35 <zzo38> Yes I know that is what it is. Doing it a lot will likely grow large.
04:34:20 <zzo38> But maybe some data works better doing RLE twice instead of once, or something like that. Maybe you want to combine multiple units into one unit or split units in some cases.
04:37:20 <oerjan> well in order for the second step to give any further compression, you'd want to collect character c in blocks of length c
04:38:42 <oerjan> or for the first block in a series, perhaps of length equal to the previous character
04:38:42 <zzo38> Yes, it is true; but, what if it is variant RLE where the character is implied? For example, you always alternate black and white so you do not need to indicate that
04:39:14 <oerjan> ah yes. but then the second step would be of a different kind.
04:39:29 <zzo38> Yes it would be different kind
04:39:53 <oerjan> since the RLE coding itself does not preserve that property
04:40:43 <oerjan> but yes, if you had frequently blocks of black and white that had the same length, then that would work
04:42:16 <zzo38> Maybe you have "001001001001001001001001" and you should do the encoding to (2,1) and 8(2,1) if such patterns are common in whatever data you are dealing with.
04:42:40 * CakeProphet is the best programmer in the world.
04:42:42 <CakeProphet> I know all of the codes.
04:42:58 <oerjan> hm
04:43:09 <zzo38> CakeProphet: Are you sure? I think nobody knows *all* of the codes
04:43:28 <oerjan> oh he does. he just cannot remember which is which.
04:43:29 <zzo38> And even if you did I am unsure if that would make you the best programmer in the world
04:43:35 <oerjan> famous babel library problem.
04:44:17 <CakeProphet> oerjan: yes I often get minute details of different languages confused.
04:44:37 <CakeProphet> for example: I have accidentaly wrote "using Control.Monad" in Haskell.
04:44:45 <CakeProphet> after some C# programming.
04:46:33 <CakeProphet> and after some intense Perl scripting, I find myself wanting to type $ in front of everything.
04:47:07 <CakeProphet> for example: in Python I will accidentally type $ instead of % in a string when sprintf'ing it. (sprintf'ing something sounds pretty dirty)
04:47:41 <oerjan> > sin $2
04:47:42 <lambdabot> 0.9092974268256817
04:47:50 <CakeProphet> heh.
04:47:53 <zzo38> I have Sokoban encoding, that is first RLE of wall/nonwall alternating, next RLE of target/nontarget skipping all walls, next is a more complicated encoding for the crates. (Characters are implied) Some numbers occur much more often than others, usually low numbers occur more than high numbers.
04:48:14 <CakeProphet> oerjan: I will now code Haskell in that style from now on.
04:48:23 <oerjan> CakeProphet: O KAY
04:48:41 <zzo38> I composed a Huffman tree by hand but I made a mistake.
04:48:44 <CakeProphet> > let x = 2 in sin $x
04:48:45 <lambdabot> 0.9092974268256817
04:48:57 <CakeProphet> bashkell
04:49:13 <zzo38> CakeProphet: Template Haskell it would do different $ immediately followed by words
04:49:28 <zzo38> Can you make polyglot program now?
04:49:39 <CakeProphet> not with that "feature" no
04:49:52 <CakeProphet> polyglots are essentially done by taking advantage of strings and comments.
04:49:58 <CakeProphet> Perl is particularly well-suited for this.
04:50:12 <CakeProphet> you can include Perl in almost any polyglot with ease.
04:50:18 <oerjan> it's a little awkward since you cannot do $x = 2 in haskell
04:50:19 <zzo38> Or, make a Haskell program that does different things, all valid, but still somewhat useful, depending on which language extensions are enabled.
04:50:56 <CakeProphet> oerjan: right and you can't do let or in in Perl unless you define subroutines with some kind of hacked meaning.
04:51:39 <CakeProphet> zzo38: most common extensions wouldn't do that since they usually inroduce some kind of construct or syntax that didn't exist before. overloaded strings could be used for that purpose though.
04:52:03 <oerjan> zzo38: heh the extensions which add keywords or syntax, perhaps
04:52:39 <oerjan> rec and ? perhaps
04:53:14 <oerjan> > let f ?x = 2 in f ?3
04:53:16 <lambdabot> <no location info>: Parse error in pattern
04:53:17 <CakeProphet> the easiest way to polyglot Haskell is to use literate Haskell.
04:53:18 <oerjan> > let f ?x = 2 in f ? 3
04:53:19 <lambdabot> <no location info>: Parse error in pattern
04:53:40 <CakeProphet> zzo38: also I am slightly drunk so, no, probably can't write a polyglot right now.
04:53:42 -!- Patashu has joined.
04:53:43 <oerjan> CakeProphet: i meant for zzo38's distinguishing by haskell extension idea
04:53:56 <CakeProphet> oerjan: right
04:54:07 <zzo38> You can define # as an operator and then do stuff with the magic hash mode and CPP stuff, and it does differently when these are enabled or disabled.
04:54:13 <CakeProphet> not sure how ? could be used though
04:54:21 <oerjan> zzo38: ah right
04:54:23 <CakeProphet> doesn't it require an explicit type signature or...?
04:54:35 <oerjan> no
04:54:40 <oerjan> > let ?x = 2 in ?x
04:54:41 <lambdabot> 2
04:54:42 <CakeProphet> ah okay
04:55:13 <CakeProphet> what DOES require an explicit type signature other than record fields?
04:55:26 <oerjan> but it's not quite clear how to get something which parses both with ? as operator and as implicit parameter prefix
04:55:29 <CakeProphet> type defintions, and the like
04:55:45 <zzo38> Do classes require an explicit type signature?
04:55:47 <oerjan> CakeProphet: polymorphic recursion
04:55:59 <oerjan> higher rank types
04:56:09 * CakeProphet has really figured out higher rank types yet.
04:56:14 <oerjan> zzo38: not to _use_ them in functions, no
04:56:22 <CakeProphet> basically it means there is a forall in the type, right?
04:56:31 <CakeProphet> very basically...
04:56:34 <oerjan> in the type, and not at the front
04:56:35 <zzo38> What I meant is, in definition of classes
04:56:39 <CakeProphet> oerjan: right
04:56:55 <oerjan> zzo38: for the methods, yes
04:56:59 <CakeProphet> oerjan: so for example, a type with an embedded existential is a rank-2 type, yes?
04:57:31 <oerjan> but class A a is legal by itself i think, a class with no methods
04:57:50 <CakeProphet> ah, that's interesting. Basically a set of types.
04:58:22 <oerjan> CakeProphet: i think they are different extensions but you can sometimes convert between using existentials and using higher rank
04:58:54 <CakeProphet> yes they're different extensions but they both permit the forall syntax.
04:59:10 <oerjan> in different places yes
04:59:56 <oerjan> basically the syntax for existential types are based on the fact that its _constructors_ has a higher rank type
05:00:11 <oerjan> er, or at least polymorphic
05:00:29 <CakeProphet> I actually understand how the Perl community has taken influence from Haskell. I believe I've heard people (not on this channel) that it's strange.
05:00:38 <oerjan> data SomeShow = forall a. Show a => SomeShow a
05:00:42 <CakeProphet> +mention
05:01:01 <oerjan> then SomeShow :: forall a. Show a => SomeShow
05:01:04 <CakeProphet> oerjan: ah, okay.
05:01:32 <CakeProphet> so does RankNTypes permit existentials?
05:01:33 <oerjan> er
05:01:40 <oerjan> *then SomeShow :: forall a. Show a => a -> SomeShow
05:02:10 <oerjan> i don't _think_ there's any automatic implication anyway, look it up in the user guide :P
05:02:16 <oerjan> *any way
05:02:32 <oerjan> *either way
05:02:45 <CakeProphet> also how do language extensions work with importing?
05:03:04 <CakeProphet> modules can ignore the language extensions that other modules use. They do not need to explicitly support them, right?
05:03:38 <oerjan> i don't think they need to. it might depend on what is imported.
05:03:53 <CakeProphet> right if the API requires a syntax extension to be used properl
05:04:01 <CakeProphet> y. like fclabels uses TH.
05:05:05 <CakeProphet> of course, if a dependency uses a language extension then the compiler must support that language extension as well.
05:12:39 -!- zzo38 has quit (Remote host closed the connection).
05:14:14 <CakeProphet> 01:14 < bob2> oh wait, takewhile
05:14:14 <CakeProphet> 01:14 < bob2> I finally understand what it is for
05:14:17 <CakeProphet> #python
05:15:14 <oerjan> apropos taking influence from haskell :P
05:16:51 <CakeProphet> itertools, functools, and a very limited list comprehension syntax is probably the only influence Python has from Haskell.
05:19:28 -!- augur has joined.
05:19:50 -!- augur has quit (Read error: Connection reset by peer).
05:20:23 -!- augur has joined.
05:21:45 <Sgeo> Not sure if what I did was a good idea or just really really stupid
05:24:09 <oerjan> well there's only one way to find out. make that into a fry meme picture and post to reddit.
05:25:43 <CakeProphet> < jtannenbaum> and put a dang comment at the end so people know what you're doing, it's tough to read either way
05:26:03 <CakeProphet> in regards to: list(itertools.product(*[range(x) for x in (2,3,4)]))
05:26:08 <CakeProphet> -- #python
05:26:50 <oerjan> what's the * for
05:27:04 <CakeProphet> "flattens" a list into function arguments
05:27:21 <CakeProphet> f(*[a,b,c]) = f(a,b,c)
05:27:35 <CakeProphet> also works with tuples and other iterators.
05:27:51 <oerjan> mhm
05:28:00 <CakeProphet> ** is used to translate dictionaries to named arguments.
05:28:07 <Sgeo> It's not possible to go to an eye doctor to preemptively ask if you just infected your eye, is it?
05:28:25 <CakeProphet> it is possible to do that, yes.
05:28:29 <CakeProphet> not sure if it'll help though.
05:29:04 <CakeProphet> ask a doctor. :P
05:54:27 -!- oerjan has quit (Quit: Good night).
06:10:25 <olsner> Sgeo: what did you do? (the thing that was either good or really really stupid?)
06:11:00 <Sgeo> Poking around my eye to try to deal with an eyelash
06:11:04 <Sgeo> After my dad told me not to
06:11:18 <Sgeo> I did wash my hands and air-dried them, but not entirely sure if I was vigilant enough about that
06:11:27 <Sgeo> I may have done a bit of poking around before washing
06:11:36 <Sgeo> I did successfully deal with the eyelash
06:11:54 <olsner> oh, that should be fine, just blink furiously for a while so you re-lubricate your eye
06:12:57 <Sgeo> My finger, while I don't think it touched eyeball, did touch skin that probably did touch eyeball
06:14:25 <olsner> oh no, you touched skin that touches your eyeball? it'd be fine if it was the eyeball directly, but now you're definitely going to die
06:14:45 <mauke> what's so bad about touching eyeballs?
06:14:56 <olsner> it scares Sgeo? :)
06:15:26 <Sgeo> My dad thought that my eye could get infected like that
06:15:50 <Sgeo> (By touching the eyeball if my hands weren't really really really clean)
06:16:07 <mauke> oh, then my eyes must be really sick by now
06:20:48 -!- augur has quit (Remote host closed the connection).
07:10:01 -!- azaq23 has joined.
07:25:32 <CakeProphet> > (`replicateM` "abc") =<< [0..]
07:25:33 <lambdabot> ["","a","b","c","aa","ab","ac","ba","bb","bc","ca","cb","cc","aaa","aab","a...
07:33:58 <CakeProphet> so if I wrote a language that compiles to Core
07:34:09 <CakeProphet> would that give me access to Haskell bindings?
07:34:13 <Sgeo> Core?
07:35:12 <CakeProphet> one of GHC's intermediate languages.
07:38:25 -!- nooga has joined.
08:15:28 -!- copumpkin has quit (Ping timeout: 240 seconds).
08:15:52 -!- copumpkin has joined.
08:16:03 -!- myndzi has joined.
08:43:49 -!- FireFly has joined.
08:43:57 -!- FireFly has quit (Changing host).
08:43:57 -!- FireFly has joined.
08:46:12 -!- Tritonio has joined.
09:09:28 <itidus20> Sgeo: i recommend you stir your emotions with a moving song or video causing you to cry
09:09:41 <itidus20> haha.
09:14:24 <itidus20> (to greensleeves) There once was a cat who had come to my home, and it's life had only just begun.
09:14:49 <itidus20> It played on the carpet with balls of string, while a small family watched it do it's thing.
09:16:20 <itidus20> It jumped on the fridge and slept there all day, or climbed along fences all carefree and gay.
09:22:49 <monqy> im moved
09:27:17 <CakeProphet> I moved.
09:39:19 <itidus20> the point was to move sgeo :P
09:39:25 <itidus20> heheh
09:48:18 <CakeProphet> > nub . permutations $ "sgeo"
09:48:20 <lambdabot> ["sgeo","gseo","egso","geso","esgo","sego","oegs","eogs","egos","oges","goe...
09:48:37 <monqy> nub? why would there be any duplicates?
09:48:53 <CakeProphet> I'm a cautious guy.
09:49:46 <Sgeo> > let permuts = permutations "sgeo" in length $ nub $ permuts == length permuts
09:49:47 <lambdabot> Couldn't match expected type `[[GHC.Types.Char]]'
09:49:47 <lambdabot> against inferred ...
09:49:51 <CakeProphet> you would want nub there if it were any string with duplicate characters... so I kind of just use it out of habit.
09:49:57 <CakeProphet> yes I understand it's the same in this case.
09:50:11 <Sgeo> > let permuts = permutations "sgeo" in length . nub $ permuts == length permuts
09:50:12 <lambdabot> Couldn't match expected type `[[GHC.Types.Char]]'
09:50:12 <lambdabot> against inferred ...
09:50:22 <Sgeo> Grah
09:50:23 <monqy> Sgeo: what are you trying to do?
09:50:38 <monqy> oh, I see
09:50:42 <CakeProphet> Sgeo: problem is most likely related to precedence of $ and ==
09:50:42 <Sgeo> Have lambdabot tell me if length with and without nub is the same
09:50:50 <monqy> right
09:51:03 <Sgeo> > let permuts = permutations "sgeo" in (length $ nub $ permuts) == (length permuts)
09:51:04 <lambdabot> True
09:51:23 <Sgeo> > let permuts = permutations "sgeo" in (length . nub $ permuts) == (length permuts)
09:51:25 <lambdabot> True
09:51:37 <Sgeo> Hmm, makes sense
09:52:02 <CakeProphet> > let permuts = permutations "lambdabot" in (length . nub $ permuts) == (length permuts)
09:52:06 <lambdabot> mueval-core: Time limit exceeded
09:52:12 <Patashu> > let permuts = permutations "aa" in (length . nub $ permuts) == (length permuts)
09:52:41 <CakeProphet> > let permuts = permutations "baby" in (length . nub $ permuts) == (length permuts)
09:52:42 <lambdabot> False
09:52:57 <CakeProphet> #esoteric: conducting groundbreaking research in combinatorics.
09:55:18 <Sgeo> > permutations "zzz"
09:55:19 <lambdabot> ["zzz","zzz","zzz","zzz","zzz","zzz"]
09:55:34 * Sgeo goes to publish a paper
09:55:43 <CakeProphet> > join . permutations . "zzz"
09:55:44 <lambdabot> Couldn't match expected type `[a]'
09:55:44 <lambdabot> against inferred type `GHC.Types...
09:55:46 <CakeProphet> > join . permutations $ "zzz"
09:55:48 <lambdabot> "zzzzzzzzzzzzzzzzzz"
09:55:49 <monqy> > ((==) <*> nub) (permutations "sgeo")
09:55:50 <lambdabot> True
09:55:53 <monqy> > ((==) <*> nub) (permutations "baby")
09:55:54 <lambdabot> False
09:56:01 <Sgeo> What's <*>
09:56:07 <monqy> :t (<*>)
09:56:07 <CakeProphet> S
09:56:08 <lambdabot> forall (f :: * -> *) a b. (Applicative f) => f (a -> b) -> f a -> f b
09:56:11 <Sgeo> Oh it's that thing isn't it?
09:56:26 <Sgeo> I have no idea what it''s doing there
09:56:28 <monqy> and yeah for the ((->) a) instance it's S
09:56:29 <CakeProphet> for functions <*> is ap is the S combinator.
09:56:32 * Sgeo needs sleep
09:57:04 <Sgeo> And knowledge of what the S combinator does
09:57:14 <monqy> \fgx.fx(gx)
09:57:18 <CakeProphet> f <*> g x = f x (g x)
09:57:19 <CakeProphet> yes
09:57:20 <CakeProphet> that
09:58:20 <monqy> oh right I forgot to do length on them
09:58:21 <monqy> oops
09:58:39 <CakeProphet> probably more efficient to do it this way though.
09:58:39 <monqy> anyway I checked if they were identical rather than merely of the same length
09:58:50 <monqy> CakeProphet: nope
09:59:11 <monqy> more efficient to do the lengths, I'd imagine, since you don't have to do comparisons on all the elements
09:59:42 <CakeProphet> are comparisons more expensive that accumulated addition? also, the false case would be short-circuiting on the shorter list.
09:59:52 <CakeProphet> whereas with length you traverse the entire list.
10:00:15 <CakeProphet> er, not on the shorter list
10:00:19 <CakeProphet> just short circuiting on the false case.
10:00:57 <CakeProphet> so that gives better average time. :P
10:01:04 <monqy> I guess if the'd be different really early on and the lists are really long it'd be best to do straight comparison yeah
10:01:19 <monqy> the thing about comparisons is it depends on the Eq instance
10:01:26 <CakeProphet> right
10:01:29 <CakeProphet> could be a 2-d list for example
10:01:32 <CakeProphet> but not in this case.
10:01:36 <CakeProphet> er... wait
10:01:37 <CakeProphet> lol
10:01:41 <CakeProphet> yes in this case
10:01:42 <monqy> yep
10:02:13 <CakeProphet> so yeah length is faster on the true case.
10:02:43 <CakeProphet> just comparison is maybe faster on the false case.
10:02:45 <CakeProphet> >_>
10:03:34 <CakeProphet> > [1..] == []
10:03:36 <lambdabot> False
10:03:38 <CakeProphet> > [1..] == [1..]
10:03:42 <lambdabot> mueval-core: Time limit exceeded
10:03:52 <monqy> > (((==) `on` length) <*> nub) (permutations "sgeo")
10:03:53 <lambdabot> True
10:03:55 <monqy> > (((==) `on` length) <*> nub) (permutations "baby")
10:03:56 <lambdabot> False
10:03:58 <monqy> oh wait no
10:04:01 <monqy> mesed that one up
10:04:03 <monqy> confused myself
10:04:12 <monqy> wait no
10:04:16 <monqy> did not mess
10:04:21 <monqy> double confused ;_;
10:04:25 <CakeProphet> you want the ap to be on length I would think.
10:04:36 <CakeProphet> ??
10:04:37 <CakeProphet> :t on
10:04:38 <lambdabot> forall b c a. (b -> b -> c) -> (a -> b) -> a -> a -> c
10:04:54 <CakeProphet> oh nevermind
10:05:03 <CakeProphet> no that's correct.
10:05:51 <CakeProphet> I want a whole suite of preposition functions.
10:06:14 <monqy> like what
10:06:15 <CakeProphet> on, in, around, about, for, with, without
10:06:33 <monqy> but what would they do
10:06:43 <CakeProphet> what they say duh.
10:07:00 <monqy> ok
10:07:25 -!- azaq23 has quit (Ping timeout: 260 seconds).
10:07:27 <CakeProphet> obviously [] `around` [1,2,3] is [[1,2,3]]
10:07:31 <CakeProphet> >_>
10:10:54 -!- Wamanuz has quit (Remote host closed the connection).
10:11:23 -!- Wamanuz has joined.
10:11:24 <CakeProphet> typeclass Match a b where { (===) :: a -> b -> Bool }
10:11:27 <CakeProphet> *class
10:11:47 <CakeProphet> now you can have the clusterfuck that is Perl's ~~ (aka "smart match") operator
10:11:57 <CakeProphet> in the form of like 10 instance declarations.
10:12:44 <CakeProphet> also can you do things like this in an instance declaration
10:13:03 <CakeProphet> instance (Eq a) => Match a a where (===) = (==)
10:13:30 <CakeProphet> with one of those typeclass extensions?
10:14:54 <monqy> I'd find it more elegant to have an isomorphism (or something more general in a good way not a stupid way) typeclass and define (===) in terms of its operations and (==)
10:14:59 <monqy> elegant and useful
10:15:26 <CakeProphet> that is not how Perl's smart matching works. :P
10:15:38 <CakeProphet> it's DWIS equality. :P
10:15:47 <CakeProphet> er DWIM
10:16:08 <monqy> perl the most elegant language
10:16:09 <CakeProphet> so there's not really a generalization.
10:16:30 <monqy> nor a haskell implementation
10:16:41 <Deewiant> CakeProphet: MultiParamTypeClasses for Match, FlexibleInstances for that instance (because it uses 'a' twice)
10:16:44 <CakeProphet> I just showed you how it could be done.
10:18:01 <monqy> I guess yours accounts for cases wherein an isomorphism doesn't exist but you still want thinks to be considered equal, but this is operation is dumb and nobody should want it ever
10:18:24 <CakeProphet> I mostly use it because it provides a quick way to test list membership in Perl
10:18:34 <CakeProphet> (1,2,3,4) ~~ 2 is true
10:18:54 <monqy> ew
10:18:55 <CakeProphet> so
10:19:05 <CakeProphet> instance Match [a] a where ...
10:19:12 <CakeProphet> instance Match a [a] where ...
10:19:35 <monqy> `elem` sure is a lot of typing
10:19:39 <HackEgo> ​/home/hackbot/hackbot.hg/multibot_cmds/lib/limits: line 5: exec: elem`: not found
10:19:47 <monqy> also you'd need an Eq a => in there
10:19:51 <CakeProphet> monqy: yeah because I totally think this is a viable thing in Haskell
10:19:58 <monqy> or equivalent
10:20:00 <CakeProphet> and not just a thought experiment on how I would implement such a thing.
10:20:32 <monqy> if I were you I'd probably go about implementing it in something along the lines of syb, such as not to have to define instances for every pair of types
10:21:16 <CakeProphet> also regexes do regex matching stuff
10:21:53 <CakeProphet> I think list ~~ list is intersection for some reason
10:23:58 <CakeProphet> so that means it couldn't return Bool
10:24:20 <CakeProphet> it would need to return some kind of special data type or Either if there's only two kinds of result
10:24:36 <CakeProphet> or Dynamic. :P
10:25:10 <monqy> intersection? not set equality? sure isnt doing what id mean......
10:25:30 -!- Phantom_Hoover has joined.
10:25:49 <CakeProphet> or you could include the result type as a third typeclass param.
10:25:55 <CakeProphet> for great fun.
10:26:11 <CakeProphet> should just name it TripleArgumentFunction instead of Match
10:26:23 <monqy> where by set equality I mean something like ((==) `on` Data.Set.fromList) or ((==) `on` Data.List.Ordered.nub . sort) or something like that
10:26:23 <CakeProphet> er TwoArgumentFunction rather
10:26:47 <monqy> at least I think there's a package that provides Data.List.Ordered
10:27:28 <Deewiant> Data.List.Ordered.nub = map head . group
10:28:11 <CakeProphet> her is the Grand Smart Matching table: http://perldoc.perl.org/perlsyn.html#Smart-matching-in-detail
10:29:49 <CakeProphet> so list ~~ list is true if all elements ~~ to true with the element of the same index in the other list.
10:30:13 <monqy> that works too I guess
10:31:05 <CakeProphet> obviously it's a very straightforward operator.
10:32:25 <CakeProphet> array ~~ function is like all in Haskell
10:34:41 <Phantom_Hoover> CakeProphet, ~~ is the terrifying, ill-defined operator in Perl, right?
10:36:20 <CakeProphet> well, it has a definition, but yes it's somewhat terrifying.
10:36:35 <CakeProphet> it is defined by a huge table of which pairs of types results in what.
10:36:46 <CakeProphet> most of it makes some kind of intuitive sense.
10:38:09 <monqy> it has a definition, but it's not a good one
10:38:11 <monqy> hence ill-defined
10:38:58 <monqy> where by good I mean "not just a bunch of stupid special cases"
10:41:44 <CakeProphet> also none of them are technically special
10:41:46 <CakeProphet> just... cases. :P
10:42:16 <monqy> they are all special like snowflakes they are special snowflakes
10:42:44 <Sgeo> Ruby's === isn't particularly like ~~, is it?
10:43:11 <CakeProphet> === is the switch-case operator
10:43:19 <CakeProphet> similar but I don't think it's identical
10:43:42 <CakeProphet> well, ~~ is also the switch-case operator in Perl so...
10:43:48 <CakeProphet> yeah it's derived from that.
10:44:12 <CakeProphet> but I do not know how it works exactly.
10:45:14 <CakeProphet> most of what ~~ does is already pretty short code so it's kind of pointless other than it provides a somewhat nice switch-case mechanism.
10:47:37 <CakeProphet> hash ~~ array intersects the hash keys with the array elements
10:47:51 <CakeProphet> I guess that's kind of useful.
11:13:18 <CakeProphet> http://www.garshol.priv.no/download/text/perl.html
11:13:36 <CakeProphet> a very lengthy article about why Perl is bad, written by someone who obviously has very little experience with Perl.
11:14:41 <CakeProphet> and then starts talking about why Python is awesome
11:16:12 <monqy> i like how he uses a paul graham quote in introducing python
11:16:56 <CakeProphet> I don't think you get to complain about manipulating complex data structures in Perl if you can't even do it properly.
11:17:11 <CakeProphet> though perhaps that's part of his argument. that stupid people can't figure it out.
11:20:07 -!- monqy has quit (Quit: hello).
11:41:49 -!- azaq23 has joined.
11:46:04 -!- Lymee has quit (Read error: Operation timed out).
11:57:55 <Phantom_Hoover> Anyone know what the contact legs on chips are made from?
12:05:38 -!- Tritonio has quit (Read error: Connection reset by peer).
12:09:53 <quintopia> all i can find is that the contacts on RAM are gold-plated. possibly aluminum or tin.
12:10:38 <quintopia> something that either doesnt corrode or coated with same
12:12:58 <Phantom_Hoover> Argh, I went for steel.
12:56:14 -!- Necrosporus has joined.
12:58:26 -!- Necrosporus has quit (Quit: Leaving).
13:02:16 -!- Necrosporus has joined.
13:03:43 <Necrosporus> http://paste.org.ru/?lu3vtb
13:03:57 <Necrosporus> Do you like it? What' sthat at your opinion?
13:04:33 -!- loje has joined.
13:10:09 -!- loje has quit (Ping timeout: 240 seconds).
14:20:16 -!- Patashu has quit (Ping timeout: 240 seconds).
14:20:22 <Phantom_Hoover> :t (.)(.)
14:20:22 <lambdabot> forall a b (f :: * -> *) (f1 :: * -> *). (Functor f, Functor f1) => f1 (a -> b) -> f1 (f a -> f b)
14:20:40 <Phantom_Hoover> :t (.)
14:20:41 <lambdabot> forall a b (f :: * -> *). (Functor f) => (a -> b) -> f a -> f b
14:20:51 <Phantom_Hoover> That... what.
14:20:57 <Phantom_Hoover> @type (.)
14:20:58 <lambdabot> forall a b (f :: * -> *). (Functor f) => (a -> b) -> f a -> f b
14:21:13 <Phantom_Hoover> That's fmap...
14:21:31 -!- copumpkin has quit (Quit: Computer has gone to sleep.).
14:23:11 <Deewiant> fmap is a generalization of (Prelude..) and Cale decided that lambdabot should have (.) be generalized as well
14:23:35 <Deewiant> For this, and other reasons, lambdabot's Haskell dialect is generally known as Caleskell.
14:23:44 <Deewiant> ?ty (++) -- Another example
14:23:45 <lambdabot> forall m. (Monoid m) => m -> m -> m
14:24:49 <Phantom_Hoover> fmap is a generalisation of .?
14:25:37 <Deewiant> (Prelude..) is fmap but limited to the (a->) functor
14:25:47 <Phantom_Hoover> Yeah, I was coming to that conclusion.
14:25:54 <Deewiant> > fmap (+1) (*2) 3
14:25:55 <lambdabot> 7
14:26:08 <Deewiant> > (Prelude..) (+1) (*2) 3
14:26:09 <lambdabot> Not in scope: `Prelude..'
14:26:15 <Deewiant> Bah.
14:26:18 <Deewiant> ?ty (Prelude..)
14:26:20 <lambdabot> forall b c a. (b -> c) -> (a -> b) -> a -> c
14:26:26 <Phantom_Hoover> > (Prelude.(.)) (+1) (*2) 3
14:26:33 <Phantom_Hoover> > (Prelude.(.)) (+1) (*2) 3
14:26:33 <lambdabot> Not in scope: data constructor `Prelude'
14:26:34 <Deewiant> The syntax is (Prelude..)
14:26:58 <Deewiant> I guess it's just missing a qualified import of Prelude
14:27:05 <Deewiant> Or then it's using a modified Prelude.
14:46:30 -!- copumpkin has joined.
14:58:39 -!- MSleep has changed nick to MDude.
15:33:26 -!- Phantom_Hoover has quit (Ping timeout: 245 seconds).
15:54:23 -!- nooga has quit (Ping timeout: 264 seconds).
16:14:06 -!- pumpkin has joined.
16:14:33 -!- copumpkin has quit (Ping timeout: 240 seconds).
16:22:59 -!- Phantom_Hoover has joined.
16:30:31 -!- pumpkin has changed nick to copumpkin.
17:34:52 -!- Wamanuz has quit (Read error: Operation timed out).
17:35:26 -!- Wamanuz has joined.
17:47:05 -!- elliott has joined.
17:49:29 <elliott> hi
17:49:29 <lambdabot> elliott: You have 11 new messages. '/msg lambdabot @messages' to read them.
17:49:35 <elliott> help
17:51:11 <elliott> thank you...everyone... i think ...
17:55:02 <Phantom_Hoover> elliott, says the one who has, on multiple occasions, left 20+ messages in my lambdabot inbox.
17:55:22 <Gregor> @tell Phantom_Hoover spamo
17:55:23 <lambdabot> Consider it noted.
17:55:24 <Gregor> @tell Phantom_Hoover spamo
17:55:24 <lambdabot> Consider it noted.
17:55:27 <Gregor> >_>
17:56:33 -!- augur has joined.
17:58:55 -!- pumpkin has joined.
17:58:56 <Gregor> So, who wants to continue my dramatic effort at a tweetable interpreter for a TC language in C?
17:59:01 -!- pumpkin has quit (Changing host).
17:59:01 -!- pumpkin has joined.
17:59:11 <Gregor> I have a tweetable interpreter for a TC-flavored language with restricted addressing >_>
17:59:19 -!- pumpkin has changed nick to copumpkin_.
17:59:20 <elliott> Nice FSM
17:59:36 <Gregor> Yeah, exactly :P
17:59:44 <elliott> Here's my FSM in a tweet
17:59:48 <elliott> main(){return 0;}
18:00:05 <Gregor> char*a,b[9999];main(){gets(a=b);while(*a)a+=(a[*a]-=a[a[1]])?3:a[2];puts(b);}
18:00:06 <lambdabot> Gregor: You have 7 new messages. '/msg lambdabot @messages' to read them.
18:00:07 <elliott> OK, OK, you say, but how do I get it to loop??
18:00:16 <elliott> main(){if(getchar())for(;;);return 0;}
18:00:27 <elliott> Gregor: What
18:00:34 <elliott> Who spammed Gregor X-D
18:00:43 -!- copumpkin has quit (Disconnected by services).
18:00:46 -!- copumpkin_ has changed nick to copumpkin.
18:00:52 <Gregor> elliott: Phantom_Hoover sez "By the way, two messages does not a spam make."
18:01:01 <Gregor> Of course, replace those " "s with \n/msg lambdabot @tell Gregor
18:02:51 <Gregor> But anyway, my subtract-and-branch-if-zero is pretty sweet, and plenty tweetable at 77 characters, but can only address 256 bytes :P
18:02:58 <elliott> 00:10:38: * Sgeo wants wget to ignore robots.txt >.>
18:03:04 <elliott> Obviously it is impossible to make wget do this.
18:03:23 <elliott> Gregor: I would be OK with it if it could address, like, at LEAST a gigabyte :P
18:03:31 <Phantom_Hoover> And if there was a way to do so, it would be far too secret to include in the man page.
18:03:32 <lambdabot> Phantom_Hoover: You have 2 new messages. '/msg lambdabot @messages' to read them.
18:03:33 <Gregor> elliott: Pffffffffffffff
18:04:02 <kmc> void main(int c,char **v){((void(*)(void))v[1])();}
18:04:16 <elliott> kmc: UB
18:04:21 <kmc> i know
18:04:22 <Gregor> kmc: omg u so klevr
18:04:32 <elliott> kmc: Come back when you have a C program :P
18:05:06 <Sgeo> elliott, I figured out how to do it
18:05:19 <kmc> void main(){system("gcc /dev/stdin&&./a.out");}
18:05:32 <Gregor> kmc: omg u so klevr
18:06:24 <elliott> kmc: Implementation-defined behaviour :P
18:07:38 <Gregor> Incidentally, mine has /relative/ addressing of 256 bytes, so it can, in fact, access more, but only a 256 byte area around the pc.
18:08:02 <elliott> Gregor: Hmm, I wonder if that's TC (modulo C's limited addressing)?
18:08:08 <elliott> You just have to move around a lot.
18:08:31 <Gregor> elliott: I'm fairly certain it's not, since the area you're moving around in is also where the program is, so you'll very quickly run out of space for both your program logic and your actual data.
18:08:49 <Gregor> (Maybe, that's not a real argument of course)
18:09:15 <elliott> Gregor: I kind of feel like you could implement a simple TC language by having a really small program that can self-modify quinelike and move around the actual data...
18:09:28 <elliott> That's the fancy-L problem, though
18:09:34 <Gregor> elliott: But the program and data aren't separate.
18:09:41 <elliott> (http://esolangs.org/wiki/%E2%84%92)
18:09:44 <elliott> Gregor: Indeed
18:11:45 * Gregor starts vaguely wondering if a subleqalike can make any sense at all if the program and data are separate. Conclusion: lolno.
18:19:15 <Gregor> I also made input and output a requirement in my original design of this :P
18:20:09 <elliott> Do you even have a twatter.
18:21:59 <Gregor> Probably? :P
18:28:18 <Gregor> Is EOF equal to a value other than -1 on any system anywhere? >_>
18:28:27 <Gregor> (It's totally lame to assume it's -1, but it would help me SO MUCH)
18:29:07 <elliott> <Gregor> Is EOF equal to a value other than -1 on any system anywhere? >_>
18:29:12 <elliott> Yes, C-compliant DS9ks
18:29:15 <elliott> It's <0, though
18:29:26 <Gregor> Friggin' DS9k! :P
18:29:42 <elliott> Phantom_Hoover: oh my god DS9's computers run DS9k
18:29:42 <Gregor> That still leaves me with (...)>=0 :(
18:29:49 <Gregor> Which is a lot more characters than +1
18:29:54 <elliott> Gregor: try using a bit-and?
18:29:59 <elliott> somehow???
18:30:00 <Deewiant> Has anybody written a C DS9K yet?
18:30:09 <elliott> Deewiant: They're too busy being real systems
18:30:28 <Gregor> elliott: In less characters than ()>=0? :P
18:30:29 <Deewiant> I'll take that as a no
18:30:52 <Deewiant> Gregor: Why do you need the () there but not in the +1
18:31:16 <elliott> Deewiant: I have some plans for such a system but it's too large an undertaking for me to bother
18:31:17 <Gregor> Deewiant: The bit here is while (*++a=getchar()+1) if EOF == -1
18:31:26 <Gregor> Deewiant: a is an int * here
18:31:28 <elliott> Deewiant: You basically need to keep all the types and the like around to be fully pedantic about it
18:31:31 <Gregor> (I'm trying to give it a bigger range)
18:31:40 <elliott> And you want pointers' representations as integers to be completely fucked up so that nothing works on them
18:31:55 <elliott> (Perhaps have a pointer-integer type so you can yell whenever the program tries to arithmetic on them then cast it back)
18:32:01 <Gregor> elliott: Doesn't matter, everything is int *, nothing is ever accessed char-wise.
18:32:05 <Deewiant> elliott: Absolutely
18:32:09 <elliott> Gregor: ?
18:32:12 <elliott> I'm talking about ds9ks
18:32:15 <Gregor> Oh, sorry, I thought you --- yeah :P
18:32:22 <elliott> Deewiant: The great thing is, it would actually make a useful debugging system :P
18:32:26 <Deewiant> elliott: I figure it'd be... yeah
18:32:29 <elliott> Because you could provide _really_ helpful error messages at runtime.
18:32:44 <elliott> Downside: Really slow, but probably not slower than, like, Ruby, so whatever.
18:32:53 <Deewiant> elliott: So it can just say things like "Undefined behaviour #1234: casting a function pointer to a pointer" or whatever
18:32:57 <elliott> Also you couldn't provide any libraries that make incorrect assumptions i.e. most of them.
18:33:00 <Deewiant> Preferably it would still work
18:33:11 <Gregor> int*a,b[9<<20];main(){a=b;while(scanf("%d",++a)>0);while(*a)a+=(a[*a]-=a[a[1]])?3:a[2];while(a>b)putchar(*--a);} <-- sexy :P
18:33:12 <Deewiant> So that it could just keep going and outputting more errors
18:33:23 <elliott> Deewiant: If it still works, then it has to use a less rich internal representation, which leads to fewer errors being caught
18:33:28 <Deewiant> But it might be that you have to break everything to.. yeah
18:33:40 <elliott> It could work for some things but probably not for function pointers → pointers
18:33:44 <Deewiant> It feels like there should be... yeah
18:33:46 <elliott> Because function pointers should contain arity and type information
18:33:48 <elliott> Deewiant: ...yeah
18:33:54 <Deewiant> Dammit, stop preëmpting what I say
18:33:58 <elliott> Deewiant: Although you could have a function-pointer-pointer type that acts like a pointer but still carries that information :-)
18:34:03 <elliott> Then you need a function-pointer-pointer-integer
18:34:25 <elliott> Deewiant: What about that project that's doing an abstract interpreter of C
18:34:28 <elliott> K90 or something?
18:34:31 <Deewiant> Klee?
18:34:37 <elliott> It was something involving K
18:34:53 <elliott> IIRC they don't have several important valid things
18:34:55 <Deewiant> Klee is the symbolic VM for LLVM
18:35:06 <elliott> http://klee.llvm.org/Tutorial-1.html ;; This is cool, but no.
18:35:32 <elliott> Deewiant: It was literally translating the abstract semantics of C to something machine-readable, IIRC
18:35:34 <Deewiant> Well, for C, but I suppose you can theoretically use it with anything LLVM
18:35:42 <elliott> Deewiant: And had this massive test suite or something
18:36:20 <elliott> I can't seem to find it :/
18:37:23 <elliott> Deewiant: I have a feeling it's impossible to detect all such bugs, though
18:37:39 -!- Lymee has joined.
18:37:52 <Deewiant> elliott: http://www.softlab.ntua.gr/~nickie/Thesis/ related?
18:37:56 <elliott> Like, either you reject valid programs (does complicated sizeof-related tricks but it turns out that it's provably OK for every valid sizeof) or they slip through the cracks
18:38:12 <elliott> Deewiant: I don't think so, it was much more recent than that, but maybe I'm wrong
18:38:15 <elliott> It was something you could actually run
18:39:05 <Deewiant> Oh wellz, can't find it either
18:39:23 <Deewiant> And yeah, you can't detect all bugs
18:39:30 <Deewiant> Halting problem should be enough to prove it :-P
18:39:57 <Deewiant> But you can probably reject just about every nontrivial C program and that's enough for me
18:40:54 <elliott> Deewiant: Hey, I try very hard to stay within semantic limits
18:41:37 <elliott> Deewiant: When I was working on mcmap's Guile branch I left a long comment when I assumed a SCM could be casted to a (void *), despite the fact that any non-pointer representation would be insane, and that (void *) was incredibly tied into the current Guile implementation
18:41:44 <elliott> Because, hey, it COULD be an integer index into a heap :-P
18:41:51 <elliott> That's... bigger than a pointer?
18:42:02 <elliott> Hell, could be a function pointer
18:42:41 <Deewiant> Do you typically take into account that INT_MAX might be 32767 and that increasing an int past that is UB?
18:43:13 <elliott> Deewiant: BTW, how does mushspace do the caching of the "currently relevant" array? Just stores a global masked x/y and checks the masked x/y of the "lookup cell" function is the same before hashtable lookups?
18:43:26 <Deewiant> There's a separate cursor structure
18:43:33 <elliott> Deewiant: And I'd consider making an increment past 32767 a user error
18:43:34 <Deewiant> Which you use if you want to cache where you are
18:43:38 -!- ralc has joined.
18:43:43 <elliott> (That's one thing you can't catch generically, incidentally)
18:44:06 <elliott> Deewiant: So much for your minimal API :P
18:44:16 <Deewiant> It's a separate thing
18:44:46 <Deewiant> It's more like iterating over the structure than doing individual accesses
18:44:49 <elliott> That is not implementable ideally without using the internal structure details
18:44:58 <elliott> Unless you expose a way to get an array out?
18:45:06 <Deewiant> No, cursor is complicated
18:45:24 <elliott> Eh?
18:45:46 <elliott> I'm saying that I couldn't implement my own cursor with the same efficiency using your public API sans cursor, so it is part of the core :P
18:46:03 <Deewiant> Yes, agreed
18:46:27 <Deewiant> But my point was that it's a (fairly) minimal API for what it does
18:46:33 <elliott> Deewiant: But that would be resolved if you provided a way to go from (x,y) -> array, I think?
18:46:44 <elliott> Unless I totally misunderstand how your fungespace works
18:46:56 <Deewiant> I don't think that'd suffice
18:47:02 -!- fizzie has joined.
18:47:12 <Deewiant> You also need at least the bounds in that array that you're allowed to access
18:47:32 <Deewiant> Both (x,y) and (start_idx,end_idx)
18:48:01 <Deewiant> And then for multidimensional cases you need the full AABB data, i.e. width/area so you can stride properly between start_idx/end_idx
18:48:21 <Deewiant> And then you might run into the hash table
18:48:28 <Deewiant> No, it's too complicated :-)
18:48:46 <Deewiant> It's the next thing I need to C-ify
18:49:04 <elliott> Back
18:49:18 -!- boily has quit (Quit: WeeChat 0.3.5).
18:49:28 <Gregor> lololol @ "BUGS" section in malloc(3).
18:49:31 <elliott> Deewiant: Maybe you should expose an internal AABB API that the public API is based on :P
18:49:35 <Gregor> Somebody doesn't like Linux's overcommit behavior :P
18:49:46 <elliott> Gregor: Overcommit is utterly stupid
18:49:57 <Gregor> "In case Linux is employed under circumstances where it would be less desirable to suddenly lose some randomly picked processes, ..."
18:50:05 <elliott> Unfortunately it's the easiest way to achieve a heap with nice properties
18:50:10 <elliott> So I can't really turn it off
18:50:17 <elliott> (SBCL uses it f.e.)
18:51:29 <Deewiant> elliott: I'd rather make the whole thing as opaque as possible
18:51:31 <Sgeo> Isn't there a a /proc/ thing that can turn it off?
18:51:53 <Deewiant> Yes, /proc/sys/vm/overcommit_*
18:52:28 <Gregor> Anyway, int*a,b[9<<20];main(){a=b;while(scanf("%d",++a)>0);while(*a)a+=(a[*a]-=a[a[1]])?3:a[2];while(a>b)putchar(*--a);}
18:52:56 <Sgeo> Do you think sysadmins remember to do that?
18:53:33 <elliott> Deewiant: That's why it'd be an internal thing :P
18:53:47 <elliott> Deewiant: i.e. subject to change whenever the internal representation does
18:53:56 <elliott> (But more stable than poking members directly)
18:54:15 <Deewiant> elliott: I'll add it when somebody needs it :-P
18:54:21 <elliott> Deewiant: You do, see cursor.c :P
18:54:40 <Deewiant> I can poke members directly?
18:55:34 <elliott> Deewiant: Well, I don't know how cursor.c works, but we've established it isn't implemented with the API
18:55:38 <elliott> So there is surely some . or -> in it
18:55:49 -!- zzo38 has joined.
18:55:52 <Deewiant> Yes, exactly
18:55:54 <Deewiant> And I can do that
18:55:59 <Deewiant> So I don't need an "AABB API"
18:56:04 <Deewiant> Because I can just do aabb->foo
18:56:13 <Deewiant> And not worry about breakage
18:56:26 <elliott> Deewiant: Yes, but you need the AABB API, you're just working around it by doing fragile things
18:56:37 <elliott> And taking advantage of your enviable maintainer position to ensure it doesn't break
18:56:38 <Deewiant> This is the kind of thing that is supposed to be fragile
18:56:45 <Phantom_Hoover> My character set has a left-facing swatstika but not a right-facing one.
18:56:47 -!- azaq23 has quit (Quit: Leaving.).
18:56:51 <Phantom_Hoover> *sigh*
18:56:54 <Deewiant> If I mess with the internal representation of mush_aabb I really do need to rethink everything :-P
18:57:23 <elliott> Phantom_Hoover: Heh.
18:57:29 <elliott> Which one is the one the Nazis used?
18:57:41 <zzo38> The Nazis used the 45-degrees rotated one
18:57:54 <elliott> thanks
18:58:13 <Phantom_Hoover> Right-facing.
18:59:48 <Phantom_Hoover> http://en.wikipedia.org/wiki/Strafgesetzbuch_%C2%A7_86a
18:59:53 <Phantom_Hoover> Way to free speech, Germany.
18:59:59 <elliott> Phantom_Hoover: BTW, s/character set/font/
19:00:06 <Phantom_Hoover> elliott, erm, yes.
19:00:09 <elliott> Also, you don't know about that?
19:00:19 <Phantom_Hoover> I did.
19:00:30 <Phantom_Hoover> Although I didn't know the precise nature of the law.
19:00:51 <elliott> "In late 2005 police raided the offices of the punk rock label and mail order store "Nix Gut Records" and confiscated merchandise depicting crossed-out swastikas and fists smashing swastikas."
19:00:52 <elliott> Pro.
19:01:35 <elliott> http://en.wikipedia.org/wiki/File:98-animate.gif Surely there are easier ways to accomplish this.
19:02:02 <Phantom_Hoover> I really want to punch these people, which distresses me because I don't really like people who want to punch people.
19:03:08 <elliott> I don't think you can blame them for wanting to de-nazificate in the forties, but it's long-obsolete by now of course.
19:03:18 <elliott> And obviously hasn't stopped neo-Nazis.
19:04:00 <elliott> Hmm, I don't know if I like zenburn.
19:05:14 <elliott> Has anyone here used Scion with Emacs? I suppose that's vanishingly unlikely.
19:14:08 <zzo38> Neo-Nazis should use symbolism common German alphabetic in order to show problems with these laws
19:15:14 <zzo38> And the Swastika does not even necessarily have to do with Nazi, even though the Wikipedia article says the law applies to all forms.
19:22:31 <zzo38> I have read that Supero makes a Haskell code as fast as C, but it is still experimental
19:23:37 <elliott> Some stuff from Supero is now in GHC IIRC
19:23:47 <elliott> I may be wrong
19:23:48 <elliott> But similar things
19:24:13 <itidus20> The swastika has been stigmatized by the nazis. But the history of it is probably complicated full of many twists and turns through various cultures.
19:24:45 <cheater> i was in a discount shop here in germany today
19:24:57 <cheater> and they had those clothes racks in shape of a swastika
19:25:08 <itidus20> Then again I guess it's not a debate of historical accuracy.
19:26:35 <itidus20> i should just stay out of this one
19:27:00 <zzo38> Maybe there should be a compiler option to tell it to also make small system small executable file omitting a lot of things not required for operation of the program.
19:27:39 <zzo38> I don't know how Supero compares in memory and file size; they only show that the speed is as fast as C.
19:32:26 -!- oerjan has joined.
19:34:50 <elliott> Deewiant: Re: my circular dependencies, I asked Haskell and apparently the only decent solution is to put everything in Types/Internal.hs; for each type, have Types/Internal/T.hs that imports Types.Internal and just re-exports T(..) with all constructors, and ensure these are the only modules that import Types.Internal; have Types that imports Types.Internal and just re-exports the external API; and have each individual T module import Types.Inte
19:34:50 <elliott> rnal.T.
19:35:09 <elliott> A solution almost as elegant as the reciprocal of how many files it produces.
19:35:47 <Deewiant> :-D
19:36:22 <elliott> Having said that, I'd only have two Types.Internal.Foo modules to start with... but it's a slippery slope.
19:37:00 <elliott> Deewiant: The other solution was to not use a global Types thing, but just turn anything circular into a type parameter, meaning I need newtype wrappers for the actual usage. :-|
19:38:32 <Deewiant> Hmm, how does that work?
19:39:05 <elliott> Deewiant: module A where {import B; data A = A B;}; module B where {import A; data B = B A;}
19:39:07 <elliott> -->
19:39:37 <elliott> module A where {data A b = A b;}; module B where {import A; data B = B (A B);}
19:39:56 <elliott> It's not quite a newtype-wrapper, but eurgh, that's even worse than exposing constructors I shouldn't; it's exposing the structure itself.
19:40:15 <Deewiant> But doesn't A need to use the API of B
19:40:43 <elliott> Put that in the structure? :-)
19:41:16 <oerjan> 22:33:09 <Sgeo> My dad thought that my eye could get infected like that
19:41:16 <oerjan> 22:33:32 <Sgeo> (By touching the eyeball if my hands weren't really really really clean)
19:41:17 <elliott> Deewiant: You could still split them up into Types modules but just have one Types.Internal.X for each type, and then you don't need a Types.Internal, just a Types that re-exports the public interface and I guess defines the instantiations of the type variables
19:41:18 <elliott> But ugh
19:41:30 <elliott> oerjan: thank you, I was going to logread but now I won't
19:41:34 <Deewiant> I mean, you have something like module A where f :: A -> Int; f (A b) = g b
19:41:53 <Deewiant> And now you have f :: A b -> Int; f (A _) = error "derp"
19:41:54 <oerjan> _could_ may be the operative word here. i've done that thousands of times.
19:41:57 <elliott> Deewiant: I meant put "g" in the structure but that was facetious.
19:42:01 <elliott> Like I said,
19:42:02 <elliott> <elliott> Deewiant: You could still split them up into Types modules but just have one Types.Internal.X for each type, and then you don't need a Types.Internal, just a Types that re-exports the public interface and I guess defines the instantiations of the type variables
19:42:43 <Deewiant> Right, but if you do that you might as well go with the earlier solution
19:42:52 <oerjan> although come to think of it, my eye _does_ tend to get irritated if i don't wash my hands first.
19:42:53 <elliott> Yeah (this one's less files though)
19:43:49 <oerjan> (also if the speck or eyelash is damn hard to get hold of)
19:44:32 <oerjan> also i sometimes pluck nosehairs, which i hear risks me getting an infection in my nose spreading to my brain or something.
19:46:03 <Deewiant> Only if you pluck them all or something, I think
19:46:30 <Deewiant> Point being that they're there for a purpose but ±1 hair obviously shouldn't make a difference
19:46:41 * elliott systematically starts plucking all his nose hairs.
19:46:46 <elliott> Pretty much the best way to commit suicide I can think of.
19:48:07 <Deewiant> Wikipedia says there's no evidence for it being dangerous, d'oh
19:48:13 <oerjan> elliott: i minimize it somewhat by using my electric razor instead.
19:48:38 <oerjan> also you are far too young to have significant nose hair.
19:49:08 <elliott> Sorry but your lawn is comfortable.
19:49:18 <oerjan> wat
19:49:23 <elliott> I am not getting off it,
19:49:39 <oerjan> ok, but then you better start mowing.
19:50:17 <elliott> I'll use an electric razor
19:51:46 <oerjan> reminds me of my "russ" year, where we had silly assigned tasks, one of which was to cleanse the town square pavillion with a toothbrush.
19:52:44 <elliott> Deewiant: FWIW, the main interdependency is due to fingerprints
19:53:18 <oerjan> elliott: also why are you not taking my `addquote bait.
19:53:20 <elliott> Deewiant: IPs have to hold loaded FP instructions (which obviously include Shiro monadic actions), and Shiro is StateT FungeState IO, and FungeState has to contain IPs
19:53:29 <elliott> oerjan: Which line
19:53:53 <oerjan> at least a couple of them, i think
19:54:16 <elliott> oerjan: sorry im, not smart
19:54:35 <oerjan> `addquote ALL THE LINES
19:54:38 <HackEgo> 637) ALL THE LINES
19:54:46 * oerjan whistles innocently
19:54:51 <elliott> `delquote 637
19:54:52 * elliott cries
19:54:53 <HackEgo> ​*poof*
19:54:55 <oerjan> :(
19:55:05 <elliott> what do you want me to addquote :(
19:55:28 <oerjan> ...if you cannot see it yourself then it probably isn't good enough anyhow.
19:57:00 <elliott> you think too highly of my opinions,
19:57:10 <elliott> is it the mowing one...
19:57:15 <elliott> is it the far too young one...help
19:57:35 <oerjan> neither of those, but if you think they fit...
19:58:03 <elliott> is it toothbrush anecdote,
19:58:10 <oerjan> the "also i sometimes pluck nosehairs" is the one where i started wondering if someone would addquote it
19:58:12 <elliott> is it <oerjan> although come to think of it, my eye _does_ tend to get irritated if i don't wash my hands first.
19:58:12 <elliott> help
19:58:21 <elliott> oerjan: o
19:58:25 <elliott> i thought about, that one,
19:58:26 <oerjan> and the toothbrush one too
19:58:31 <elliott> but i thought it was too much like usual you...
19:58:35 <oerjan> heh :P
19:58:51 -!- Slereah has joined.
19:59:49 -!- GuestIceKovu has quit (Ping timeout: 276 seconds).
20:04:10 <oerjan> is CakeProphet still idle
20:04:28 <oerjan> <CakeProphet> > let permuts = permutations "baby" in (length . nub $ permuts) == (length permuts)
20:04:55 <oerjan> because i could tell him that is True for a finite list iff it has no duplicate elements
20:05:55 <oerjan> and also that compiling to ghc core may be awkward because there is no easy way to compile _from_ it
20:06:01 <elliott> that is probably his intention, no?
20:06:12 <oerjan> what is
20:06:15 <elliott> <oerjan> because i could tell him that is True for a finite list iff it has no duplicate elements
20:06:32 <elliott> and whatever he's doing, if he's planning on compiling to ghc core: ha ha ha ha ha ha ha
20:06:52 <elliott> 03:41:25: <CakeProphet> zzo38: because it is really crappy.
20:06:54 <elliott> hint is not really crappy.
20:07:13 <oerjan> elliott: i have for a few months now since i discovered the reflection package thought that it _really_ needs to be written in core.
20:07:33 <oerjan> with the new ghc plugins, maybe it would even be plausible to achieve
20:07:59 <elliott> oerjan: hmm, what would it do as core?
20:08:59 <oerjan> ...create a typeclass dictionary _directly_ rather than via ridiculously convoluted whatchamacallit in the type system
20:09:16 <elliott> CakeProphet: I am 99 percent sure the limiation of hint there is a limitation in _GHC_, not in hint.
20:09:30 <oerjan> (whatchamacallit represents a simple word which my brain refuses to remember)
20:09:33 <elliott> You could make a symlink to an FD and try and load that.
20:09:48 <elliott> oerjan: coercion? casting?
20:10:00 <oerjan> no, much worse
20:10:05 <elliott> oerjan: unsafeness?
20:10:22 <elliott> oerjan: but I didn't know Core could create typeclass dictionaries. Hey, I wonder if reflection's implementation solves the problem I had with my hack?
20:10:36 <oerjan> those are not _inefficient_ per se. what it does is ridiculously roundabout.
20:10:54 <elliott> oerjan: (did you see that hack?)
20:11:01 <elliott> (I'm convinced I could make it work reliably somehow...)
20:11:05 <oerjan> elliott: well i'm _assuming_ core must be able to, since haskell sometimes requires generating them on the fly
20:11:20 <oerjan> e.g. with polymorphic recursion
20:11:23 <elliott> um it does? surely not report Haskell, iirc with report Haskell typeclasses can be eliminated at runtime entirely
20:11:38 <elliott> I know they can't with GHC, but I'd be surprised if they needed to be _created_ at runtime
20:11:40 <oerjan> no they cannot, not when there is polymorphic recursion
20:11:41 <elliott> rather than just passed around
20:11:48 <elliott> oerjan: can you do polymorphic recursion in report haskell?
20:12:03 <oerjan> yes. you just need an explicit type declaration
20:12:09 <elliott> ok then
20:12:14 <elliott> oerjan: (http://hpaste.org/50760 is the hack I am referring to)
20:12:17 <elliott> the main function works if you do
20:12:20 <elliott> main = a >> b
20:12:23 <elliott> where a and b are the two statements there
20:12:49 <elliott> the idea, if that worked, was to define some TH stuff to define the GADT for an arbitrary specified class, and the functions
20:13:15 <elliott> oerjan: I think it could also let you create dictionaries at runtime, actually
20:13:26 <elliott> if a class contains (a :: T) and (b :: S), then you need
20:13:33 <elliott> erm, and has type parameter t
20:13:35 <elliott> then you need
20:13:45 <elliott> newtype Runtime = Runtime { value :: t, _a :: T, _b :: S }
20:14:00 <elliott> instance Runtime where a = _a; b = _b
20:14:03 <elliott> hmm with some things to unwrap the value
20:14:13 <elliott> I guess it might not be doable exactly like that but I think you can achieve it in general
20:14:19 <elliott> anyway, it's a cool hack :P
20:14:39 <oerjan> elliott: well reflection is stronger since it generates a dictionary containing an actual _value_ in it
20:14:58 <elliott> stronger than unsafeCoerce? :P
20:15:09 <oerjan> yes.
20:15:17 <oerjan> well, possibly.
20:15:30 <elliott> oerjan: I think I could achieve the same thing, really, with a combination of that runtime method plus unsafeCastD, but maybe I'm wrong
20:15:38 <elliott> ShowD a is basically a reification of the show dictionary there, after all
20:16:00 <elliott> and I believe you can define
20:16:08 <elliott> ExplicitShow -> ShowD, ShowD -> ExplicitShow
20:16:11 <elliott> where ExplicitShow is
20:16:22 <elliott> erm, add type parameters there
20:16:26 <elliott> data ExplicitShow a = ExplicitShow { explicit_show :: a -> String }
20:16:39 <elliott> which is all you need to do generate an instance at runtime.
20:16:50 <elliott> so the only problem is that mine breaks if you don't separate out each relevant statement :D
20:16:53 <elliott> I think I need to twiddle with the inliner
20:17:04 <elliott> I wish core wasn't so damn hard to read
20:17:16 <elliott> huh, it is actually doing some inlining here
20:17:33 <oerjan> litD :: ShowD String
20:17:33 <oerjan> litD = unsafeCastD (ShowD :: ShowD Lit)
20:17:39 <oerjan> does that actually _work_?
20:17:53 <elliott> oerjan: yes. read the comment: it works in GHCi
20:17:55 <elliott> and if you change main to
20:17:58 <elliott> main :: IO ()
20:17:59 <elliott> main = a >> b
20:17:59 <elliott> a = print "Hello, world!"
20:17:59 <elliott> b = withInstance litD $ print "Hello, world!"
20:18:00 <elliott> that works too
20:18:11 <elliott> (it isn't really a GHCi problem, more a global-vs-subexpression problem, I think)
20:18:22 <elliott> because the do statement that is main has the incorrect behaviour in ghci too.
20:18:37 <elliott> oerjan: but yes, it works, proving that ShowD is a bona-fide dictionary at runtime
20:18:54 <elliott> and ofc newtypes have identical representation, so the Lit instance is "another" Show instance for String
20:20:22 <oerjan> elliott: i vaguely recall implicit parameters supposedly have similar problems in some uses
20:20:30 -!- ralc has quit (Ping timeout: 260 seconds).
20:21:23 <elliott> oerjan: you mean implementation difficulties or actual runtime bugs?
20:21:26 <oerjan> and they are of course the closest thing ghc has to a _supported_ runtime value-wrapping dictionary
20:21:59 <oerjan> elliott: i think i mean unintuitive differences between expressions that _should_ behave the same
20:22:37 <elliott> right
20:22:45 <elliott> I read in the manual about how adding a type signature can change the result
20:22:48 <elliott> which is gross
20:23:39 <oerjan> elliott: anyway your ShowD still doesn't allow you to wrap a runtime-constructed value into a dictionary, i think. you can replace a dictionary with a different one, but it still must be compile-time defined.
20:24:04 <oerjan> reflection gets around that by essentially defining _all_ necessary dictionaries at compile-time
20:24:32 <oerjan> and using type system calculations to choose the right one
20:24:43 <Sgeo> Reflection?
20:24:47 <Sgeo> As in Data.Reflection?
20:24:49 <elliott> oerjan: um no, I _told_ you you can explicitly do it at runtime
20:24:55 <oerjan> Sgeo: a hackage package
20:24:56 <elliott> <elliott> and I believe you can define
20:24:56 <elliott> <elliott> ExplicitShow -> ShowD, ShowD -> ExplicitShow
20:24:56 <elliott> <elliott> where ExplicitShow is
20:24:56 <elliott> <elliott> erm, add type parameters there
20:24:56 <elliott> <elliott> data ExplicitShow a = ExplicitShow { explicit_show :: a -> String }
20:26:09 <elliott> oerjan: it probably requires lots of unsafeCoerce to do, but I believe it's perfectly possible
20:26:25 <oerjan> elliott: you figure that out then >:)
20:26:52 <oerjan> maybe one could do a more efficient implementation of reflection that way, then
20:27:20 <elliott> hmm, it's certainly rather tricky :) but I _think_ it's possible
20:27:28 <elliott> it might have to be
20:27:34 <elliott> ExplicitShow a -> ShowD (Wrapper a)
20:27:41 <elliott> oerjan: would that still lead to an efficient reflection?
20:27:49 -!- sllide has joined.
20:28:15 <elliott> hm I suppose not, that's a rather obvious instance after all
20:28:16 <elliott> but maybe
20:28:29 <elliott> I suppose I should ask what the runtime representation of dictionaries is like?
20:31:03 <oerjan> i suppose it would be obvious from the core, i haven't tried testing it
20:31:29 <elliott> nothing is obvious from Core :)
20:32:03 <oerjan> also a polymorphic recursion case to show how values or at least subdictionaries are put into them
20:32:11 <CakeProphet> oerjan see he core. he has the power.
20:32:44 <oerjan> data Tree a = Leaf a | Tree (a,a) deriving Show would be a good example, i think
20:32:51 <zzo38> I found in some foot-shooting list they added how to shoot your foot with Haskell: Make a copy of the entire universe except your foot has a hole.
20:33:34 <oerjan> zzo38: heh
20:34:16 <oerjan> that might be FullBinaryTree, technically
20:35:15 <oerjan> elliott: ^ that should be an example of a Show instance that requires generating new Show instances internally
20:35:28 <elliott> oerjan: I believe you typo'd
20:35:32 <elliott> what you have there is not a tree.
20:35:48 <oerjan> elliott: <oerjan> that might be FullBinaryTree, technically
20:36:00 <elliott> um no, I believe you've made a _big_ mistake.
20:36:04 <elliott> what you have is Either a (a,a).
20:36:12 <oerjan> ...ah.
20:36:31 <oerjan> *data Tree a = Leaf a | Tree (Tree (a,a))
20:36:35 <elliott> that makes more sense :)
20:36:46 <elliott> I might look at the show instance for that, but anything with constructors is really hideous in core
20:38:06 <oerjan> elliott: maybe the function showLeaf (Leaf a) = show a; showLeaf (Tree t) = showLeaf t might be cleaner?
20:38:21 <elliott> oerjan: hmm, yes, probably
20:38:29 <elliott> I'll try that
20:39:42 <elliott> oerjan: heh, either the dictionary gets inlined somehow, or ghc-core is hiding it from me >_<
20:39:52 <oerjan> ouch
20:40:29 <oerjan> maybe i'm wrong about the construction-on-the-fly then, although how could that be...
20:40:34 <elliott> oerjan: http://hpaste.org/50901
20:40:51 <elliott> it's obviously taking in a show instance
20:40:52 <elliott> ($dShow_aiO)
20:40:58 <elliott> but it just passes it onto show
20:41:01 <elliott> it doesn't need to construct anything
20:41:13 <elliott> it does a worker/wrapper transform by the looks of it so that $dShow_aiO is only passed in once rather than on recursion
20:41:18 <elliott> lvl_sjs being the worker
20:41:19 -!- monqy has joined.
20:42:56 <oerjan> elliott: no, a_sjx is a constructed Show instance
20:43:16 <elliott> oh
20:43:24 <elliott> $fShow(,) is ShowD a -> ShowD b -> ShowD (a,b)?
20:43:27 <elliott> approximately
20:43:40 <oerjan> probably
20:43:43 <elliott> oerjan: sounds like I need to define my own tuple type to see what $fShow(,) looks like
20:44:01 <oerjan> hm, right
20:44:41 <elliott> oerjan: aha
20:45:20 <oerjan> hm?
20:45:45 <elliott> oerjan: http://hpaste.org/50902
20:45:54 <elliott> oerjan: I suspect this more be readable without the -O2 I gave it
20:47:06 <CakeProphet> yeah I have no idea what that is saying.
20:47:19 <elliott> oerjan: oh hm
20:47:25 <elliott> oerjan: I should define my own that uses show rather than showsPrec
20:48:07 <CakeProphet> are these instances of show?
20:48:07 <oerjan> that might be easier to read yeah
20:48:13 <oerjan> CakeProphet: yes
20:48:32 <elliott> M.$fShowTuple [InlPrag=[ALWAYS] CONLIKE]
20:48:32 <elliott> :: forall a_abQ b_abR.
20:48:32 <elliott> (Show a_abQ, Show b_abR) =>
20:48:32 <elliott> Show (M.Tuple a_abQ b_abR)
20:48:32 <elliott> [GblId[DFunId],
20:48:34 <elliott> Arity=2,
20:48:35 <CakeProphet> M. = method?
20:48:36 <elliott> Unf=DFun(arity=4) D:Show [{M.$fShowTuple_$cshowsPrec},
20:48:38 <elliott> {M.$fShowTuple_$cshow}, {M.$fShowTuple_$cshowList}]]
20:48:40 <elliott> M.$fShowTuple =
20:48:42 <elliott> \ (@ a_abQ)
20:48:44 <oerjan> CakeProphet: btw this is somewhat vaguely descended from your question about compiling to core
20:48:44 <elliott> (@ b_abR)
20:48:45 <CakeProphet> $ = perl? :P
20:48:46 <elliott> ($dShow_afR :: Show a_abQ)
20:48:48 <elliott> ($dShow1_afS :: Show b_abR) ->
20:48:50 <elliott> D:Show
20:48:51 <CakeProphet> oerjan: ah I see.
20:48:52 <elliott> @ (M.Tuple a_abQ b_abR)
20:48:54 <elliott> (M.$fShowTuple_$cshowsPrec @ a_abQ @ b_abR $dShow_afR $dShow1_afS)
20:48:56 -!- elliott has left ("Leaving").
20:49:00 -!- elliott has joined.
20:49:03 <CakeProphet> yes I was wondering if I could utilize Haskell bindings if I had a language that compiled to Core.
20:49:04 <elliott> (M.$fShowTuple_$cshowList @ a_abQ @ b_abR $dShow_afR $dShow1_afS)
20:49:06 <elliott> flood but w/e
20:49:08 <elliott> CakeProphet: M is my module obviously
20:49:09 <oerjan> CakeProphet: my comment to which is that ghc makes it very awkward if at all possible to compile _from_ core
20:49:10 <elliott> oerjan: there you go, that's what they look like in Core
20:49:12 <elliott> ok let's try that again
20:49:14 <elliott> CakeProphet: core cannot be compiled
20:49:20 <elliott> it's not possible
20:49:22 <elliott> there is no parser
20:49:45 <elliott> oerjan: http://hpaste.org/raw/50903
20:49:45 <CakeProphet> none of the other ILs too I imagine?
20:49:54 <elliott> oerjan: that's what the instance constructor looks like
20:50:04 <elliott> CakeProphet: Cmm has a parser; in fact part of the RTS is written in Cmm
20:50:22 <elliott> CakeProphet: Agda compiles to Haskell with a lot of unsafeCoerces
20:50:29 <elliott> (for "performance")
20:50:32 <elliott> (it's still slow)
20:50:57 <CakeProphet> so then I would use Cmm as my target and hope that at that level there's still interfacable bindings.
20:51:17 <elliott> oerjan: anyway, I suppose this just begs the question of what D:Show looks like
20:51:41 <elliott> CakeProphet: it won't work well.
20:51:59 <CakeProphet> Haskell.NET
20:52:46 <CakeProphet> it would be nice if they redesigned the ILs to support other languages using Haskells awesome libraries for awesome things.
20:52:46 <oerjan> CakeProphet: there is however last (well, the only time) i checked in the ghc API a _very_ rudimentary function for compiling a single module from the _internal_ core representation
20:53:10 <oerjan> but it has a comment to the effect it has only been tested for that case
20:53:20 <CakeProphet> oh good.
20:53:33 <oerjan> (well had, there's a new ghc version out so things might have improved for all i know)
20:53:39 <oerjan> *may
20:53:39 <CakeProphet> sounds like a good basis to build a compiler on.
20:56:44 <oerjan> elliott: i suppose D:Show is the constructor for a Show dictionary, which is just passed the methods? also i assume you have the code for M.$fShowTuple_$cshowsPrec etc. in your full output.
20:57:06 <CakeProphet> essentially any kind of language I build on top of Haskell's environment would be more or less a set of extensions.
20:57:17 <CakeProphet> but enough to warrant a new language/dialect
20:57:26 <CakeProphet> oh hey, I could always compile to Haskell.
20:57:45 <elliott> oerjan: I do have the code but it's boring. Yes, D:Show is the dictionary constructor, which I bet isn't given any real "definition" in Core, but I can define my own class to check.
20:58:38 <oerjan> elliott: why wouldn't it have a definition, i assume Show is a completely ordinary class if you ignore derivations...
20:59:01 <oerjan> it probably is in whatever module defines Show
20:59:27 <elliott> oerjan: yes, but D: _is_ the class
20:59:39 <elliott> but OK, I'll define my own class to see
21:00:08 <elliott> oerjan: yep, at least with ghc-core, D:Aah isn't created
21:00:09 <elliott> just
21:00:13 <elliott> M.ooh [InlPrag=[NEVER]] :: forall a_abI. M.Ooh a_abI => a_abI
21:00:13 <elliott> [GblId[ClassOp],
21:00:13 <elliott> Arity=1,
21:00:13 <elliott> Unf=Unf{Src=<vanilla>, TopLvl=True, Arity=1, Value=True,
21:00:13 <elliott> ConLike=True, Cheap=True, Expandable=True,
21:00:13 <elliott> Guidance=ALWAYS_IF(unsat_ok=True,boring_ok=True)},
21:00:15 <elliott> RULES: Built in rule for M.ooh: "Class op ooh"]
21:00:17 <elliott> M.ooh =
21:00:19 <elliott> \ (@ a_abI) (tpl_B1 [Occ=Once!] :: M.Ooh a_abI) ->
21:00:21 <elliott> case tpl_B1 of _ { M.D:Ooh tpl_B2 [Occ=Once] _ -> tpl_B2 }
21:00:23 <elliott> and the same for my other method aah
21:00:28 <elliott> I suspect D:Ooh is "defined" at some other level
21:01:15 <CakeProphet> a magical land deep below Core
21:01:20 <oerjan> CakeProphet: there is also the new ghc plugin system in the latest version, which i assume does core to core transformations
21:01:30 <elliott> oerjan: just checked with -ddump-simpl
21:01:36 <elliott> if D:Ooh is defined in core, it's sure not printed by GHC
21:01:46 <elliott> oerjan: I suspect, instead, the typeclass info goes into the .hi
21:01:56 <oerjan> ah
21:02:01 <elliott> and then the actual Cmm or whatever for the class constructor is constructed on the fly
21:02:21 <elliott> oerjan: otoh, from the way pattern-matching and the like is used in it, I have this _wonderful_ feeling that it might look like a regular data type
21:02:21 <elliott> i.e.
21:02:28 <elliott> class Ooh a where { ooh :: a; aah :: a -> () }
21:02:30 <elliott> might look like
21:02:36 <elliott> data Ooh a = Ooh { ooh :: a, aah :: a -> () }
21:02:37 <elliott> at runtime
21:02:54 <elliott> ...otherwise "case" has special behaviour when you use something prefixed with D:
21:02:55 <elliott> which is gross
21:03:06 <oerjan> elliott: well afaiu core's System F has no concept of classes and instances, so it should be that way
21:03:10 <CakeProphet> elliott: ewwwww
21:03:24 <elliott> CakeProphet: What?
21:03:27 <elliott> oerjan: indeed
21:03:29 <CakeProphet> gross.
21:03:31 <elliott> oerjan: but I mean, it could be unboxed ors omething
21:03:39 <elliott> CakeProphet: what is?
21:03:52 <CakeProphet> special cases of case.
21:04:01 <oerjan> elliott: the one thing istr reading is that dictionaries are always unboxed as a whole
21:04:06 <elliott> CakeProphet: it was just a hypothesis
21:04:31 <elliott> oerjan: hm well I wish I knew how Core parameter lists worked, because normal parameters seem to be prefixed with @ like (@ a) but the typeclasses aren't
21:04:45 <elliott> I guess it might mean unboxed
21:05:02 <oerjan> elliott: um @ signifies a _type_ parameter, not a value, iiuc
21:05:06 <elliott> oh
21:05:11 <elliott> that makes more sense :)
21:05:16 <elliott> oerjan: but modulo unboxing, I suspect you can simply define the equivalent (existential) data type for a class and have it be coercable directly to the dictionary type
21:05:27 <oerjan> system F works that way with explicit type arguments
21:05:37 <elliott> oerjan: ooh, if ShowD looks like (ShowD UnboxedDictionary), then it's boxed
21:05:51 <elliott> oerjan: and so an explicitly-defined record should have the same runtime representation as ShowD
21:05:53 <elliott> and be coercable directly
21:06:23 <oerjan> elliott: maybe. but that still leaves the question of getting any runtime value _into_ a dictionary
21:06:24 <CakeProphet> it is defined by a huge table of which pairs of types results in what.
21:06:29 <CakeProphet> er what
21:06:36 <CakeProphet> wrong paste :P
21:06:43 <CakeProphet> http://hackage.haskell.org/trac/ghc/browser/compiler/supercompile/Supercompile/Core/Syntax.hs?rev=5a142af2955f7cda76c2e63104e7672044cffaa2
21:06:54 <CakeProphet> is this helpful? I'm guessing it's Core syntax stuff
21:07:02 <oerjan> (which in my understanding is the sticking point which makes all of reflection's hoops necessary)
21:07:05 <elliott> CakeProphet: not... really
21:07:20 <elliott> oerjan: I'm still not sure what you _mean_ by that
21:07:21 <elliott> if you have
21:07:39 <elliott> data ExplicitShow a = ExplicitShow { show :: a -> String, shows :: blah blah, showsPrec :: blah blah, showList :: blah blah }
21:07:51 <elliott> and ExplicitShow a -> ShowD a (and assuming ShowD and withInstance work properly)
21:08:05 <elliott> then how does that not let you put any runtime value in you want?
21:08:07 <CakeProphet> http://research.microsoft.com/en-us/um/people/simonpj/papers/ext-f/fc-tldi.pdf
21:09:14 <CakeProphet> doesn't seem to mention the @ so I guess it's not an exact replica of what GHC uses.
21:11:05 <oerjan> elliott: oh you are assuming dictionaries have the exact same representation as an ordinary record. yeah i guess if you could do that...
21:11:24 <oerjan> (you probably want to at least use seq on that record first)
21:11:26 <elliott> oerjan: well they are eliminated with "case" in core in the _exact same way_ data-types are.
21:12:11 <elliott> oerjan: so either case changes behaviour based on something totally gross like whether the name is a class dictionary, or it's equivalent to a data-type, modulo strictness and unboxing
21:12:26 <oerjan> elliott: the CONLIKE pragma, does it mean that the function result is always a strict constructor?
21:12:35 <elliott> strictness can be controlled, and since my ShowD introduces an additional layer, if dictionaries are unboxed than ExplicitShow should have the exact same representation as ShowD
21:12:43 <elliott> oerjan: no, that's an inlining thing
21:12:50 <elliott> CONLIKE means it's safe to duplicate a call at very low cost
21:12:53 <oerjan> istr seeing it before but have forgotten
21:12:55 <elliott> (this is in the manual)
21:12:57 <oerjan> ok
21:12:59 <elliott> it's useful for rules
21:13:14 <CakeProphet> @a is apparently a "type argument"
21:13:15 <lambdabot> Maybe you meant: activity activity-full admin all-dicts arr ask . ? @ v
21:13:37 <elliott> CakeProphet: yes, that's what oerjan told me right after I asked :P
21:14:41 <CakeProphet> >_>
21:14:53 <oerjan> elliott: well since core is supposed to be extremely simple they probably haven't made a distinction unless it's absolutely necessary
21:15:08 <elliott> oerjan: indeed. so they should, in fact, have the exact same representation
21:15:10 <oerjan> (between data and dictionary)
21:15:14 <elliott> ?src Show
21:15:15 <lambdabot> class Show a where
21:15:15 <lambdabot> showsPrec :: Int -> a -> ShowS
21:15:15 <lambdabot> show :: a -> String
21:15:15 <lambdabot> showList :: [a] -> ShowS
21:15:24 <elliott> hmm, I hope that ordering is authoritative
21:15:35 <elliott> seems to be the same in ghci so that's good
21:15:54 <monqy> why would ordering matter are you doing something icky :(
21:16:08 <elliott> monqy: yes
21:16:13 <monqy> :(
21:16:25 <oerjan> elliott: it's the same as in the core you pasted
21:16:30 <elliott> oerjan: heh, thanks :P
21:16:43 -!- augur has quit (Remote host closed the connection).
21:17:31 <oerjan> monqy: he is going to use unsafeCoerce to convert a record into a class instance :P
21:17:55 <elliott> oerjan: hm I suspect the fields are _not_ strict
21:17:57 <elliott> oerjan: you can do
21:18:02 <elliott> instance Show Blah where show = error "x"
21:18:07 <elliott> and it works fine until you call show
21:18:11 <oerjan> elliott: indeed
21:18:18 <elliott> so it's just the record itself that's strict
21:18:48 <oerjan> and the report afair says that undefined methods are treated as, well, undefined
21:19:15 <oerjan> (i think i recently saw that ghc has a specific exception for those though)
21:19:18 <elliott> oerjan: it works
21:19:21 <elliott> dear god, it works
21:19:45 <elliott> *Main> b
21:19:45 <elliott> *** Exception: help
21:19:49 <elliott> explicit_lit :: ExplicitShow String
21:19:49 <elliott> explicit_lit = ExplicitShow
21:19:50 <elliott> { explicit_showsPrec = error "help"
21:19:50 <elliott> , explicit_show = \s -> s
21:19:50 <elliott> , explicit_showList = error "helpList" }
21:19:51 <oerjan> > "*MW" ++ cycle "AH"
21:19:53 <lambdabot> "*MWAHAHAHAHAHAHAHAHAHAHAHAHAHAHAHAHAHAHAHAHAHAHAHAHAHAHAHAHAHAHAHAHAHAHAHA...
21:20:07 <elliott> er, hm.
21:20:11 <elliott> but why is it using the showList case?
21:20:26 <elliott> I guess I should try something that isn't a list type first
21:20:32 <oerjan> you mean showsPrec?
21:20:46 <elliott> oh
21:20:47 <elliott> duh :)
21:20:57 <elliott> ?src show
21:20:57 <lambdabot> show x = shows x ""
21:20:58 <elliott> ?src showList
21:20:59 <lambdabot> Source not found. It can only be attributed to human error.
21:21:02 <elliott> >:|
21:21:36 <elliott> *Main> b
21:21:36 <elliott> <interactive>: internal error: PAP object entered!
21:21:36 <elliott> (GHC version 7.0.4 for x86_64_unknown_linux)
21:21:36 <elliott> Please report this as a GHC bug: http://www.haskell.org/ghc/reportabug
21:21:36 <elliott> Process haskell aborted
21:21:38 <elliott> oerjan: it could be worse
21:21:42 <elliott> ok, so function members don't work.
21:21:47 <elliott> "enter" is unsafeCoerce jargon I know.
21:21:48 <CakeProphet> ::::D
21:21:55 <elliott> oerjan: maybe function fields do have to be strict, or something...
21:22:14 <elliott> indeed, error "x" works but \_ -> error "x" doesn't
21:22:23 <CakeProphet> clearly this is a question for #haskell-in-depth
21:22:37 <oerjan> elliott: insane idea: you might want to convert a Show dictionary _to_ your type so you can use the usual showsPrec and showList from it
21:23:00 <CakeProphet> that is indeed insane.
21:23:18 <elliott> CakeProphet: I'm asking #ghc
21:23:31 <oerjan> see elliott get banned from #ghc for life
21:23:31 <CakeProphet> probably a better place to ask.
21:23:35 <elliott> oerjan: that would be useful, yes
21:23:43 <elliott> and might help me find out what the difference in representation is
21:23:49 * CakeProphet is currently waiting for the banhammer
21:24:01 <monqy> is the excitement in #ghc now
21:24:06 <CakeProphet> no
21:24:14 <elliott> *Main> explicit_show (implicit (ShowD :: ShowD String)) "abc"
21:24:14 <elliott> "
21:24:14 <elliott> Process haskell segmentation fault
21:24:15 <elliott> ah.
21:24:19 <CakeProphet> #esoteric is always the root of the party.
21:24:30 <elliott> oerjan: ok I should probably try a class that contains some innocuous value rather than a function.
21:24:31 <Vorpal> elliott, idea for elliottcraft: http://www.youtube.com/watch?v=ZXxDnx_UE6I (yogscast)
21:25:39 <Vorpal> elliott, watch it!
21:25:41 <elliott> looks nice
21:25:49 <Vorpal> yep
21:25:55 <elliott> not sure it fits in stylistically
21:26:31 <Vorpal> elliott, no, but you could do a game like it that was high def in other places too. I think it could work fairly well, and would also avoid "yet another minecraft clone" feel
21:26:44 <elliott> I don't want it to look like the real world, at least
21:26:49 <elliott> that boat sure is hd
21:27:25 <elliott> go underwater dammit
21:27:46 <Vorpal> elliott, he doesn't in the video sadly
21:28:06 <Vorpal> elliott, I will probably try out that mod tomorrow
21:28:23 <Vorpal> should run fine on my high end gpu
21:28:30 <oerjan> <elliott> indeed, error "x" works but \_ -> error "x" doesn't <-- so this is the same as that difference between data and function for unsafeCoerce, right?
21:28:35 <elliott> do the squisd like it
21:28:45 <Vorpal> no idea
21:28:53 <elliott> oerjan: I suspect so; I wonder if unsafeCoerce (error "x" :: Int) :: function type works the same way?
21:28:54 <elliott> I suspect it might
21:28:57 <elliott> except the ohter way around
21:29:02 <Vorpal> elliott, also I think that mod needs a HD texture pack to not be too jarring
21:29:10 * elliott tries strictifying for the hell of it
21:29:45 <Vorpal> elliott, I'd also like to see waterfalls
21:29:47 <elliott> oerjan: wat, now it uses show instead of showsPrec
21:29:54 <elliott> oh, I think that's correct
21:29:56 <elliott> print should invoke show, after all
21:30:02 <elliott> *Main> explicit_show (implicit (ShowD :: ShowD String)) "abc"
21:30:02 <elliott> "
21:30:02 <elliott> Process haskell segmentation fault
21:30:06 <elliott> haksel :(
21:30:18 <elliott> oerjan: what, then changing show to
21:30:20 <elliott> \_ -> error "help show"
21:30:22 <elliott> causes showList to be called
21:30:26 <Vorpal> <elliott> Process haskell segmentation fault <-- how?
21:30:26 <elliott> oh duh
21:30:27 <oerjan> elliott: um shouldn't you have an argument for the actual value _printed_?
21:30:29 <elliott> because
21:30:33 <elliott> strict fields
21:30:34 <elliott> duh
21:30:38 <elliott> Vorpal: it's not hard
21:30:43 <elliott> *Main> b
21:30:43 <elliott> <interactive>: internal error: PAP object entered!
21:30:43 <elliott> (GHC version 7.0.4 for x86_64_unknown_linux)
21:30:43 <elliott> Please report this as a GHC bug: http://www.haskell.org/ghc/reportabug
21:30:43 <elliott> Process haskell aborted
21:30:46 <elliott> ok that is definitely not better.
21:30:49 <Vorpal> elliott, using some language extension?
21:30:55 <elliott> Vorpal: unsafecoerce
21:30:57 <Vorpal> ah
21:31:06 <Vorpal> well okay, no wonder it crashes
21:31:06 <oerjan> elliott: it looks to me like your explicit_show has one argument missing
21:31:14 <elliott> Warning: Ignoring unusable UNPACK pragma on the
21:31:14 <elliott> third argument of `ExplicitShow'
21:31:21 <elliott> guess you can't unpack functions
21:31:25 <elliott> , explicit_show :: {-# UNPACK #-} !(a -> String)
21:31:25 <elliott> oerjan: no?
21:31:29 <elliott> the implementation did
21:31:31 <elliott> but that's before i strictified
21:31:37 <elliott> oerjan: if you mean i missed out the argument, duh
21:31:38 <elliott> you can say
21:31:40 <elliott> show = error "foo"
21:31:41 <elliott> too
21:31:51 <oerjan> well yes
21:31:52 <elliott> but hmm
21:32:09 <elliott> oerjan: ok i suspect the function representation is different, then.
21:32:10 <oerjan> but if it doesn't error, it needs to be a function?
21:32:14 <elliott> i am not sure _how_.
21:32:47 <oerjan> elliott: what does that M.$fShowTuple_$cshow you didn't paste before look like?
21:33:14 <elliott> oerjan: um, like you'd expect it to? do you want me to run it again
21:33:46 <oerjan> it's just that it's what's put in the dictionary
21:33:48 <elliott> M.$w$cshow
21:33:48 <elliott> :: forall a_abJ b_abK.
21:33:48 <elliott> (Show a_abJ, Show b_abK) =>
21:33:48 <elliott> a_abJ -> b_abK -> [Char]
21:33:48 <elliott> [GblId,
21:33:48 <elliott> Arity=4,
21:33:50 <elliott> Unf=Unf{Src=<vanilla>, TopLvl=True, Arity=4, Value=True,
21:33:52 <elliott> ConLike=True, Cheap=True, Expandable=True,
21:33:54 <elliott> Guidance=IF_ARGS [3 3 0 0] 14 3}]
21:33:56 <elliott> M.$w$cshow =
21:33:58 <elliott> \ (@ a_abJ)
21:34:00 <elliott> (@ b_abK)
21:34:04 <elliott> (w_sio :: Show a_abJ)
21:34:06 <elliott> (w1_sip :: Show b_abK)
21:34:08 <elliott> (ww_sis :: a_abJ)
21:34:10 <elliott> (ww1_sit :: b_abK) ->
21:34:12 <elliott> :
21:34:13 <Vorpal> how long is this?
21:34:14 <elliott> @ Char
21:34:16 <elliott> M.$fShowTuple4
21:34:18 <elliott> (++
21:34:20 <elliott> @ Char
21:34:22 <elliott> [boring stuff]
21:34:24 <elliott> that's for
21:34:26 <elliott> instance (Show a, Show b) => Show (Tuple a b) where
21:34:27 <Vorpal> pastebin might have taken less time to paste
21:34:28 <elliott> show (Tuple a b) = "X" ++ show a ++ "Y" ++ show b ++ "Z"
21:34:30 <elliott> oh hm
21:34:34 <elliott> that's not M.$fShowTuple_$cshow
21:34:36 <elliott> oerjan: http://sprunge.us/fLTc
21:37:13 <elliott> oerjan: found the discrepancy yet? :-P
21:37:30 <oerjan> erm no
21:37:37 * CakeProphet got into a debate on the difference between setting attributes to None vs. using getattr and setattr to check for undefined attributes in objects that may or may not have a large number of attributes defined.
21:37:42 <CakeProphet> in #python
21:38:02 <CakeProphet> my stance was that it made no difference. and there's what that checking for attribute existence is /bad style.
21:38:07 <elliott> the former is obviously the correct solution.
21:38:11 <elliott> the other one is horrible.
21:38:13 <CakeProphet> ...
21:38:22 <elliott> if you disagree, you are wrong. (this is true independent of language.)
21:38:44 <CakeProphet> I say it makes no difference and amounts to almost the same code.
21:39:19 <elliott> yes, you have repeatedly shown a lack of understanding of possible vs. a good idea
21:39:52 <CakeProphet> no difference. same amount of code.
21:40:17 <CakeProphet> actually more in the case of None because you have to set all of the attributes to None.
21:40:36 <elliott> lines of code is not the only way to measure code.
21:40:41 <CakeProphet> correct you are.
21:40:49 <elliott> but it _is_ revealing that you are using it that way.
21:41:24 <CakeProphet> is hasattr(self, "attr") or getattr(self, "attr", default) objectively worse than self.attr is None and self.attr if self.attr is None else default?
21:41:40 <CakeProphet> or is it just a stylistic preference?
21:41:41 <elliott> yep
21:41:44 <elliott> objectively worse
21:41:54 -!- Nisstyre has quit (Quit: Leaving).
21:42:27 <oerjan> elliott: my hunch is that if that error happens when functions and data types are confused, then something _must_ be applied to the wrong number of arguments somewhere
21:42:51 <elliott> oerjan: I have a feeling that classes contain multiple argument functions
21:42:53 <monqy> im agre with elliott
21:42:54 <CakeProphet> same code. in the same place. to the same effect. I don't see the difference other "oh no this one uses strings literals".
21:42:58 <elliott> oerjan: or something
21:43:01 <elliott> hmm ,ayme bt not
21:43:03 <CakeProphet> *other than
21:43:18 <elliott> CakeProphet: sorry, I doubt I could explain it to you because of your incorrect perspective.
21:43:27 <oerjan> elliott: but a method can be any haskell value can it not
21:43:46 <elliott> oerjan: doesn't stop ghc treating them specially
21:43:50 <elliott> ok did you actually look at that core? i fnot i will
21:44:01 <oerjan> say if you put trace on one like trace "mumble" $ \x -> ... wouldn't that trace have to be applied only once
21:44:21 <oerjan> and even if you just seq the method
21:44:24 <elliott> i don't think there's any guarantees about thta
21:44:29 <elliott> trace is unsafe
21:44:37 <oerjan> ok not guarantee but most likely
21:44:47 <elliott> <elliott> ok did you actually look at that core? i fnot i will
21:44:54 <oerjan> i guess my seq comment is what i really mean
21:45:13 <oerjan> elliott: i don't know what i'm comparing _to_ :P
21:45:21 <elliott> oerjan: um what i pasted above
21:45:27 <elliott> is the actual M.$w$cshow implementation
21:45:53 <oerjan> which is put in a record?
21:46:06 <elliott> um, no, this is the old testcase you asked about.
21:46:17 <elliott> do you want me to define an equivalent function at top level and show that?
21:46:23 <CakeProphet> elliott: I agree it makes sense when there's only a small number of attributes to set to None. but the context was for a game in which the object could easily have large numbers of attributes undefined.
21:46:30 <oerjan> yes. but now i don't know what the things in the records look like :P
21:46:33 <elliott> CakeProphet: sorry, uninterested.
21:46:41 <elliott> oerjan: gimme a minute
21:47:49 <zzo38> http://sprunge.us/cDPR
21:47:59 <elliott> ah.
21:50:19 <oerjan> elliott: btw are you making sure to evaluate your record before unsafeCoerce'ing it?
21:50:27 <elliott> oerjan: with seq, yes.
21:50:48 <zzo38> Is this program the Obfuscated Haskell Contest program? Not quite.
21:50:56 <oerjan> hm might strictness analysis mess that up somehow?
21:51:19 <CakeProphet> turning off -O removes strictness analysis right?
21:51:42 <itidus20> some tasks require more performance than others. if the data set is large such as hex editing a 1gb file or doing batch processing then performance will matter more and more. or some programs such as "some" video games or emulators will seek to maximize performance.
21:51:48 <oerjan> i mean, if ghc doesn't think that unsafeCoerce can change whether something is strict, that might mess things up
21:52:16 <itidus20> And with multitasking apps will want each other to be polite guests
21:52:41 <elliott> oerjan: hm
21:52:45 <elliott> oerjan: what do you mean?
21:52:52 <elliott> oerjan: oh i think i might need pseq instead of seq to be sure
21:53:03 <oerjan> elliott: ah right that might work
21:54:12 <oerjan> elliott: i mean, it might detect that the seq is redundant in something like x `seq` unsafeCoerce x, but be wrong because x is put into a dictionary on the converted side
21:54:18 <oerjan> er
21:54:48 <elliott> oerjan: well pseq did not help.
21:54:49 <oerjan> * x `seq` unsafeCoerce (YourStrictRecord x)
21:55:03 <elliott> explicit :: ExplicitShow a -> ShowD a
21:55:03 <elliott> explicit a = a `pseq` unsafeCoerce a
21:55:13 <elliott> no seqing of the fields is done; that's surely incorrect to do
21:55:38 <oerjan> elliott: seq one of the fields you don't use, for good measure :P
21:55:39 <zzo38> Does the program I posted work?
21:55:49 <zzo38> Improve it if you like to do so
21:55:53 <oerjan> in fact if possible _print_ it IO
21:56:06 <oerjan> then ghc cannot possibly get around evaluating it first
21:56:12 <oerjan> *in IO
21:56:15 <elliott> oerjan: um I have no idea what you are talking about, do you mean for the conversion the other way around?
21:56:31 <elliott> explicit_lit :: ExplicitShow String
21:56:31 <elliott> explicit_lit = ExplicitShow
21:56:31 <elliott> { explicit_showsPrec = \_ -> error "help" -- \_ s t -> s ++ t
21:56:31 <elliott> , explicit_show = \_ -> error "help show"
21:56:31 <elliott> , explicit_showList = \_ -> error "help showList" }
21:56:34 <elliott> how will printing any of these help at all?
21:57:09 <oerjan> elliott: er they are _all_ error? i guess that's not useful to print. you might apply and catch.
21:57:54 <oerjan> elliott: i'm just suggesting making as absolutely sure as you can that ghc doesn't convince itself that it can avoid evaluating the record before converting it
21:58:06 <elliott> oerjan: I could just look at the core rather than relying on voodoo.
21:58:11 <oerjan> or that :P
21:58:43 <oerjan> elliott: it's just that the one thing i _do_ recall about ghc's class dictionaries is that ghc assumes they are strict
21:59:04 <oerjan> so a value containing them will not have them evaluated before use
21:59:19 <elliott> oerjan: the fact that I get the errors properly if I do (error "foo") rather than (\_ -> error "foo") seems to prove I'm doing it right.
21:59:22 <elliott> or it'd just segfault or whatever.
21:59:25 <elliott> if it was lazy
21:59:28 <oerjan> elliott: ok
21:59:34 <elliott> main3 =
21:59:34 <elliott> lazy
21:59:34 <elliott> @ (ShowD String)
21:59:34 <elliott> (main4
21:59:34 <elliott> `cast` (CoUnsafe
21:59:34 <elliott> (ExplicitShow String) (ShowD String)
21:59:36 <elliott> :: ExplicitShow String ~ ShowD String))
21:59:38 <elliott> i have no idea what's going on :D
21:59:54 <elliott> WHAT
22:00:10 <CakeProphet> main3 lazy ShowD is my rapper name.
22:00:11 <oerjan> elliott: hm maybe a class method really _must_ not be a function in that unsafeCoerce sense, then.
22:00:20 <Deewiant> CoUnsafe sounds good
22:00:39 <elliott> oerjan: just a second, something's insane
22:00:53 <oerjan> we all are
22:01:05 <elliott> _wtf._
22:01:20 <elliott> oerjan: it briefly worked (producing "help show")
22:01:23 <elliott> but on GHCi restart, it doesn't.
22:01:55 <elliott> oerjan: unfortunately nobody is replying in the ghc chanenl :(
22:02:08 <elliott> hmm
22:02:34 <elliott> oerjan: ok i'm going to try the thing i was going to try
22:03:26 -!- Necrosporus has quit (Ping timeout: 245 seconds).
22:03:30 <oerjan> elliott: they've gone into hiding. btw what happens if you have a method whose type is _not_ a function?
22:03:42 <oerjan> i.e. an actual data type
22:03:54 <elliott> oerjan: I was going to try that next, but I'm going to figure this out first
22:04:03 <oerjan> food ->
22:04:12 <elliott> M.ooh' = plusInt
22:04:12 <elliott> M.$fOohInt =
22:04:12 <elliott> plusInt
22:04:12 <elliott> `cast` (sym (M.NTCo:T:Ooh Int)
22:04:12 <elliott> :: (Int -> Int -> Int)
22:04:13 <elliott> ~
22:04:15 <elliott> M.T:Ooh Int)
22:04:24 <elliott> oerjan: ok so the core definition is identical apart from a cast
22:04:42 <elliott> and I think casts are just unsafeCoerce casts plus a proof
22:08:37 <CakeProphet> this looks pretty helpful: http://hackage.haskell.org/trac/ghc/wiki/Commentary/Compiler/Coercions
22:09:52 <elliott> "The nd binding extracts the Num superclass dictionary from the C dictionary; the case expression is called a superclass selector."
22:10:01 <elliott> hmm
22:10:10 <elliott> oerjan: Show has no superclasses but maybe it has a free field for them?
22:10:20 <oerjan> huh
22:10:35 <elliott> hmm
22:11:01 <oerjan> elliott: btw when you had just error ..., the correct error was raised according to which method you were trying to call?
22:11:18 <elliott> oerjan: yes, except when i wanted to unbox
22:11:26 <elliott> which just failed horribly
22:12:28 <elliott> 05:28:07: <Sgeo> It's not possible to go to an eye doctor to preemptively ask if you just infected your eye, is it?
22:12:32 <elliott> oerjan: i'm blaming you for my suffering
22:12:44 <oerjan> O KAY
22:12:48 <elliott> tempted to touch my eye to feel smug but i'd have a hard time making myself do that
22:12:49 <Lymee> :t Some
22:12:49 <lambdabot> Not in scope: data constructor `Some'
22:12:53 <Lymee> :t \x -> Some x
22:12:54 <lambdabot> Not in scope: data constructor `Some'
22:12:56 * Lymee ?
22:13:00 <elliott> Lymee: ?
22:13:10 <elliott> it helps to ask a question in english rather than just babbling invalid haskell
22:13:20 <elliott> what do you think Some is?
22:13:24 <Lymee> Experiments. >:c
22:13:28 <elliott> what do you think Some is?
22:13:38 <Lymee> a -> Maybe a?
22:13:39 <Sgeo> Isn't Some the ML equiv of Just?
22:13:42 <elliott> Lymee: Just
22:13:46 <Lymee> Uh opps
22:13:48 <Lymee> Wrong language
22:14:41 <CakeProphet> I am the right language.
22:14:49 <CakeProphet> I will guide your communication.
22:15:00 <monqy> ok
22:15:22 <elliott> 10:16:41: <Deewiant> CakeProphet: MultiParamTypeClasses for Match, FlexibleInstances for that instance (because it uses 'a' twice)
22:15:26 <elliott> Deewiant: Undecidable
22:15:28 <elliott> instances, that is
22:15:33 <Deewiant> Not needed for that alone
22:15:43 <elliott> um are you sure? maybe Overlapping then?
22:15:44 <elliott> I know that
22:15:47 <elliott> instance (C a) => D a
22:15:48 <elliott> is not ok
22:15:54 <elliott> i would be surprised if the additional thing made it work
22:15:56 <Deewiant> I am sure, I checked it
22:15:58 <CakeProphet> overlapping sounds like the right qualifier.
22:16:01 <Deewiant> MPTCs + Flexible
22:16:01 <elliott> ok
22:16:27 <CakeProphet> maybe flexible in overlapping in the case that the instances... overlap
22:16:31 <CakeProphet> s/in/and/
22:16:43 <monqy> overlappinginstances implies flexibleinstances
22:16:52 <CakeProphet> ah okay
22:17:14 * CakeProphet has never need the .*?instances extensions
22:17:59 <monqy> I've needed flexible once but other than that I've just read the manual pages
22:18:05 <elliott> 13:02:16: -!- Necrosporus has joined #esoteric.
22:18:05 <elliott> 13:03:43: <Necrosporus> http://paste.org.ru/?lu3vtb
22:18:06 <elliott> 13:03:57: <Necrosporus> Do you like it? What' sthat at your opinion?
22:18:06 <elliott> hi
22:18:19 <elliott> monqy: I need flexible constantly
22:18:23 <CakeProphet> but obviously if you want to overlap you probably want to be flexible.
22:18:29 <elliott> 14:21:13: <Phantom_Hoover> That's fmap...
22:18:36 <elliott> Phantom_Hoover: it's the _wrong_ generalisation.
22:18:39 <elliott> (.) should be (Control.Category..)
22:18:45 <elliott> map should be fmap though.
22:18:52 <Deewiant> Control.Category didn't exist at the time IIRC
22:18:56 <elliott> and (++) being Monoid is right
22:19:05 <elliott> > (P..)
22:19:06 <lambdabot> Overlapping instances for GHC.Show.Show
22:19:07 <lambdabot> ((b ->...
22:19:10 <elliott> Phantom_Hoover:
22:19:12 <elliott> Prelude is P
22:19:23 <Deewiant> Darn
22:19:24 <Deewiant> Why
22:19:47 <elliott> Concision? It's IRC
22:19:48 <elliott> BRB
22:19:56 <Deewiant> Why not both
22:20:39 <CakeProphet> is there anything ($) could be generalized to?
22:20:59 <monqy> yes
22:21:06 <Deewiant> id
22:21:30 <Deewiant> ($) :: (a -> b) -> a -> b; ($) = id
22:21:31 <oerjan> <elliott> tempted to touch my eye to feel smug but i'd have a hard time making myself do that <-- NORTHUMBRIAN TOUCHES EYE TO FEEL SMUG, EYE FALLS OUT
22:22:43 <CakeProphet> @hoogle m a b -> a -> b
22:22:44 <lambdabot> Control.Monad.Reader runReader :: Reader r a -> r -> a
22:22:44 <lambdabot> Control.Monad.State.Lazy evalState :: State s a -> s -> a
22:22:44 <lambdabot> Control.Monad.State.Strict evalState :: State s a -> s -> a
22:23:05 <monqy> what
22:23:20 <CakeProphet> that is a generalization of )$_
22:23:21 <CakeProphet> ($)
22:25:02 -!- Patashu has joined.
22:26:23 <monqy> class Whatever (~>) where ($) :: (a ~> b) -> a -> b ?
22:26:57 <CakeProphet> yes.
22:27:19 <monqy> yes that's the gnera;lization of which iw as thinking too
22:27:31 <CakeProphet> I would say Applicative but that is already taken.
22:27:48 <Deewiant> ?ty app
22:27:49 <lambdabot> forall (a :: * -> * -> *) b c. (ArrowApply a) => a (a b c, b) c
22:27:54 <Deewiant> I think that's what you guys want
22:28:16 <CakeProphet> but what if I dislike arrows?
22:28:27 <monqy> ?src ArrowApply
22:28:27 <lambdabot> Source not found. :(
22:28:29 <monqy> :(
22:28:41 <CakeProphet> that doesn't look like the correct type.
22:28:42 <Deewiant> class Arrow a => ArrowApply a where that function
22:28:43 <CakeProphet> too many tuples. :P
22:29:05 <CakeProphet> specifically one too many.
22:29:43 <oerjan> !haskell take 20 $ Unsafe.Coerce.unsafeCoerce [1..] :: [()]
22:29:49 <EgoBot> ​[(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),()]
22:29:52 <monqy> that looks a little bit different than ours, anyway
22:30:14 <CakeProphet> also filter could be generalized.
22:30:14 <oerjan> !haskell take 20 $ Unsafe.Coerce.unsafeCoerce [Left 1, Right 2] :: [()]
22:30:16 <CakeProphet> :t filter
22:30:17 <EgoBot> ​[(),()]
22:30:17 <lambdabot> forall a. (a -> Bool) -> [a] -> [a]
22:30:31 <CakeProphet> (a -> Bool) -> t a -> t a
22:30:42 <Deewiant> ?ty app .: (,)
22:30:43 <lambdabot> forall b b1. (b -> b1) -> b -> b1
22:31:22 <oerjan> @hoogle filter
22:31:23 <lambdabot> Prelude filter :: (a -> Bool) -> [a] -> [a]
22:31:23 <lambdabot> Data.ByteString filter :: (Word8 -> Bool) -> ByteString -> ByteString
22:31:23 <lambdabot> Data.IntMap filter :: (a -> Bool) -> IntMap a -> IntMap a
22:31:39 <monqy> :t (.:)
22:31:40 <lambdabot> forall a b (f :: * -> *) (g :: * -> *). (Functor f, Functor g) => (a -> b) -> f (g a) -> f (g b)
22:31:42 <oerjan> :t Data.Traversable.filter
22:31:43 <lambdabot> Not in scope: `Data.Traversable.filter'
22:31:55 <oerjan> hm i guess it cannot remove elements
22:32:10 <CakeProphet> oerjan: is ByteString a synonym for Something Word8?
22:32:44 <oerjan> it's an unpacked array of Word8, yes
22:32:58 <oerjan> well more or less
22:33:26 <oerjan> *unboxed
22:33:57 <oerjan> @hoogle fromList
22:33:57 <lambdabot> Data.HashTable fromList :: Eq key => (key -> Int32) -> [(key, val)] -> IO (HashTable key val)
22:33:58 <lambdabot> Data.IntMap fromList :: [(Key, a)] -> IntMap a
22:33:58 <lambdabot> Data.IntSet fromList :: [Int] -> IntSet
22:34:20 <oerjan> @hoogle Foldable f => [a] -> f a
22:34:21 <lambdabot> Test.QuickCheck elements :: [a] -> Gen a
22:34:21 <lambdabot> Data.Maybe listToMaybe :: [a] -> Maybe a
22:34:21 <lambdabot> Data.Sequence fromList :: [a] -> Seq a
22:34:28 <oerjan> bah
22:35:20 <CakeProphet> class FromListable a r where fromList :: [a] -> r
22:35:32 <CakeProphet> maybe with a fundep
22:35:52 <oerjan> CakeProphet: that's just Monoid really
22:36:02 <oerjan> well, nearly
22:36:41 <oerjan> @hoogle (a -> Bool) -> f a -> f a
22:36:41 <lambdabot> Data.IntMap filter :: (a -> Bool) -> IntMap a -> IntMap a
22:36:42 <lambdabot> Prelude dropWhile :: (a -> Bool) -> [a] -> [a]
22:36:42 <lambdabot> Prelude filter :: (a -> Bool) -> [a] -> [a]
22:37:04 <oerjan> @hoogle NotABloodyList f => (a -> Bool) -> f a -> f a
22:37:05 <lambdabot> Warning: Unknown class NotABloodyList
22:37:05 <lambdabot> Data.IntMap filter :: (a -> Bool) -> IntMap a -> IntMap a
22:37:05 <lambdabot> Prelude dropWhile :: (a -> Bool) -> [a] -> [a]
22:37:51 <CakeProphet> they could extend the query syntax that way
22:37:57 <CakeProphet> having constrains placed before a =>
22:38:14 <oerjan> i thought they did
22:38:45 <oerjan> it's just always fuzzy when there's no perfect match
22:39:22 <oerjan> @hoogle Monad m => [m a] -> m [a]
22:39:22 <lambdabot> Prelude sequence :: Monad m => [m a] -> m [a]
22:39:23 <lambdabot> Control.Monad sequence :: Monad m => [m a] -> m [a]
22:39:23 <lambdabot> Data.Traversable sequence :: (Traversable t, Monad m) => t (m a) -> m (t a)
22:39:35 <oerjan> @hoogle Applicative m => [m a] -> m [a]
22:39:35 <lambdabot> Data.Traversable sequenceA :: (Traversable t, Applicative f) => t (f a) -> f (t a)
22:39:36 <lambdabot> Prelude sequence :: Monad m => [m a] -> m [a]
22:39:36 <lambdabot> Control.Monad sequence :: Monad m => [m a] -> m [a]
22:39:44 <oerjan> yeah it does
22:40:18 <CakeProphet> no I mean constrains like "t is not a list"
22:40:28 <CakeProphet> not class constraints.
22:40:44 <elliott> back
22:41:05 <elliott> monqy: ive seen
22:41:16 <monqy> hi>?
22:41:20 <elliott> class (Arrow (~>)) =. ArrowApply (~>) where (($) :: (a ~> b) -> a -> b
22:41:23 <elliott> as opposed to the existing arrowapply
22:41:59 <CakeProphet> since arrows are lame and nobody likes to use them.
22:42:15 <monqy> what's the need for the Arrow (~>) context there....
22:42:31 <elliott> monqy: because it was in terms of arrow?
22:42:45 <monqy> why must it??
22:42:45 <elliott> anything that can be applied should be an arrow anyhow, whether you like arrows or not
22:42:54 <monqy> mmh
22:43:01 <elliott> you should be able to write the arrow functions
22:43:04 <elliott> whether you like the Arrow class or not
22:43:14 <elliott> otherwise your application has no laws and is hence useless
22:43:31 <CakeProphet> >_>
22:43:45 <oerjan> :t \p m = m >>= \x -> if p x then return x else mzero
22:43:46 <lambdabot> parse error on input `='
22:43:48 <elliott> thankfully I will never use CakeProphet's code.
22:43:48 <CakeProphet> laws -> practical use. The elliott law.
22:43:52 <oerjan> :t \p m -> m >>= \x -> if p x then return x else mzero
22:43:53 <lambdabot> forall (m :: * -> *) a. (MonadPlus m) => (a -> Bool) -> m a -> m a
22:43:58 <zzo38> What does "Irrefutable pattern failed" mean in Haskell?
22:44:00 <elliott> CakeProphet: sorry, you do not undrestand programming.
22:44:02 <elliott> understand
22:44:03 <monqy> is there any good alternative to arows is Category&Applicative useful for that I've also heard of a Generalized Arrows thing but maybe that is not a real thing maybe I should make my own alteratnive to do the things I want to do
22:44:14 <elliott> zzo38: depends what your code is
22:44:27 <oerjan> > let Left x = Right "like this" in x
22:44:28 <lambdabot> *Exception: <interactive>:3:4-29: Irrefutable pattern failed for pattern Da...
22:44:29 <elliott> monqy: you cannot use applicative in the arrowapply head because it must be universally quantified.
22:44:30 <CakeProphet> elliott: if you want me to see it they way you do then you'll have to use words for that.
22:45:02 <elliott> CakeProphet: i'm not interested in doing so, because I've tried before and it was fruitless; I suspect either time and experience will make you clear up your confusion, or nothing will
22:45:24 <zzo38> oerjan: How does that do?
22:45:24 <oerjan> zzo38: it's for when a failing match is lazy so it is not checked until another expression is evaluated
22:45:52 <oerjan> matches are by default lazy in let and where, but strict in case and function arguments
22:46:21 <oerjan> but you can turn strict matches into lazy with ~ or lazy into strict with ! (the latter is an extension)
22:46:21 <zzo38> But what does let Left x = Right "like this" in x even supposed to do?
22:46:31 <elliott> zzo38: fail, badly
22:46:39 <elliott> hth
22:46:47 <CakeProphet> elliott: though I do find it a bit insulting that I apparently don't _understand_ programming because I do not see it in this way.
22:47:06 <CakeProphet> as if the way I have been viewing it is totally invalid and does not correspond to actual programming.
22:47:14 <zzo38> What is that syntax supposed to mean?
22:47:26 <monqy> > let (x, y) = (5, 3) in (y, x)
22:47:26 <oerjan> zzo38: it defines Left x lazily to be the result of the expression Right "like this". if it was Left x = Left "like this", then it would simply make x = "like this"
22:47:26 <lambdabot> (3,5)
22:47:27 <elliott> CakeProphet: I predict that any further responses I make will only offend you more, so I'm not going to
22:47:50 <elliott> oerjan: ok i'm going to adjust my code for the exciting class: class Ooh a where ooh :: a
22:48:06 <monqy> ooh
22:48:07 <Gregor> (06:48:02 PM) CDGregorR: int*a,b[9<<20];main(){a=b;while(scanf("%d",++a)>0);while(*a)a+=(a[*a]-=a[a[1]])?3:a[2];while(a>b)putchar(*--a);}
22:48:08 <Gregor> (06:48:30 PM) -: I see a :( in there
22:48:08 <Gregor> (06:48:35 PM) -: That's how I'd feel about it, too
22:48:14 <oerjan> zzo38: it makes more sense if Right "like this" is replaced by an expression which is not known whether it is Left or Right, though
22:48:40 <elliott> oerjan: or rather one you know to be Left or Right.
22:48:42 <CakeProphet> elliott: then nothing has been learned by either of us from this conversation. congratulations.
22:48:45 <elliott> (it is not good practice to assume :P)
22:48:53 * CakeProphet moves on to other things.
22:48:58 <elliott> CakeProphet: you are the one who was sarcastic and pinged me after I made a statement.
22:49:03 <elliott> did you _expect_ to get anything from it?
22:49:08 <oerjan> zzo38: and supposedly you should only _use_ such an expression Left x = y if you are sure that y evaluates to a Left value, but if you do a mistake you get that "irrefutable pattern" error
22:49:22 <oerjan> *such a definition
22:49:28 <CakeProphet> elliott: I would like to.
22:49:37 <elliott> CakeProphet: then maybe start it in a better way next time
22:49:43 <zzo38> Now it says "No instance for (Show GHC.Prim.Any)" if I type x or Left x or Right x
22:49:44 <elliott> oerjan: I suspect the source of my unreliability is withInstance, btw
22:50:11 <elliott> oerjan: it should really be some core that takes the dictionary out of the ShowD and applies k to it
22:50:25 <elliott> I might be able to coerce that into working if I can figure out how to unbox it properly
22:50:27 <oerjan> zzo38: that's a different error because x defaults to type Any
22:50:43 <oerjan> (when there are no other restrictions on it)
22:51:18 <oerjan> zzo38: however that's a bit weird that there is no Show instance
22:51:20 <oerjan> > []
22:51:21 <lambdabot> []
22:51:57 <elliott> oerjan: um of course there is no Show Any instance.
22:52:01 <elliott> [] only works because of defaulting.
22:52:04 <oerjan> oh wait ghc defaults it to ()
22:52:14 <CakeProphet> elliott: I was basically saying I don't understand how a set of laws corresponds directly to usefulness.
22:52:25 <CakeProphet> not that I don't understand the importance of laws.
22:52:28 <oerjan> elliott: oh hm. the default to Any is only if there are _no_ type classes involved.
22:52:44 <elliott> oerjan: incidentally Any won't show up like that in error messages soon
22:52:47 <Sgeo> instance Eq (->) where
22:52:48 <elliott> it was fixed recently iirc
22:52:53 <CakeProphet> elliott: as I could make something completely useless that also has laws.
22:52:54 <oerjan> @let x = []
22:52:55 <lambdabot> Defined.
22:52:58 <oerjan> > x
22:52:59 <lambdabot> Ambiguous occurrence `x'
22:52:59 <lambdabot> It could refer to either `L.x', defined at <local...
22:53:01 <oerjan> oops
22:53:03 <oerjan> @undefine
22:53:11 <oerjan> now what
22:53:19 <oerjan> > "hm"
22:53:20 <lambdabot> "hm"
22:53:32 <oerjan> @list let
22:53:32 <lambdabot> eval provides: run let undefine
22:53:35 <oerjan> @undefine
22:53:40 <oerjan> > x
22:53:42 <lambdabot> x
22:53:51 <oerjan> huh it gives no message
22:53:57 <oerjan> @let x' = []
22:53:58 <lambdabot> Defined.
22:54:00 <oerjan> > x'
22:54:02 <lambdabot> []
22:54:07 <oerjan> :t x'
22:54:08 <lambdabot> forall a. [a]
22:54:11 <oerjan> bah
22:54:17 <elliott> CakeProphet: (~a -> ~b) =/= (a -> b)
22:54:23 <oerjan> no monomorphism restriction for @let
22:54:33 <oerjan> or wait
22:54:49 <oerjan> > (x' :: String, x' :: [Bool])
22:54:51 <lambdabot> ("",[])
22:54:55 <oerjan> indeed not
22:54:58 <CakeProphet> elliott: is ~ laziness in this case? I've never seen ~ used like that.
22:55:04 <CakeProphet> or is it not?
22:55:22 <CakeProphet> aka complement.
22:55:42 <zzo38> How is a definition such as Left x = Right "like this" can be used afterward?
22:56:06 <elliott> CakeProphet: what I said was not code.
22:56:17 <elliott> *Main> withInstance explicitTestD (ooh :: Int)
22:56:17 <elliott> 99
22:56:20 <elliott> oerjan: ok so data values work.
22:56:30 <CakeProphet> elliott: ah, well then it is not very enlightening to me.
22:56:34 <elliott> *Main> ooh :: Int
22:56:34 <elliott> 9
22:56:37 <elliott> CakeProphet: maybe so.
22:56:48 <elliott> oerjan: so there _is_ something different about functions in dictionaries
22:57:17 <monqy> has #ghc answered yet
22:57:29 <elliott> monqy: no
22:57:34 <monqy> :(
22:57:52 <CakeProphet> elliott: it is not very difficult nor time consuming to explain what you mean.
22:58:10 <elliott> CakeProphet: that is where you are wrong
22:58:28 <CakeProphet> elliott: oh wait I understand. :P
22:58:41 <CakeProphet> logic, not types.
22:59:12 <elliott> oerjan: I've asked #ghc about how functions are represented in typeclass dictionaries, anyway
22:59:13 <oerjan> <elliott> oerjan: I suspect the source of my unreliability is withInstance, btw <-- would the higher rank method used in reflection be good enough for you?
22:59:24 <elliott> oerjan: what type signature?
22:59:29 <elliott> reify :: a -> (forall s. Reifies s a => Proxy s -> w) -> w
22:59:38 <elliott> oerjan: that's... close to what i have
22:59:39 <elliott> withInstance :: OohD a -> ((Ooh a) => r) -> r
22:59:41 <elliott> I suppose I could do
22:59:44 <elliott> withInstance :: OohD a -> (forall b. (Ooh b) => r) -> r
22:59:49 <elliott> but that would rather reduce usefulness, I think
22:59:53 <elliott> although, hmm
22:59:56 <elliott> withInstance print "foo" would work
23:00:19 <CakeProphet> elliott: okay so then practical use -> laws would be the logical equivalent of your statement.
23:00:24 <CakeProphet> which I still do not see as being true.
23:00:49 <elliott> CakeProphet: I was replying to your statement with a demonstration of its fallacy.
23:01:07 <CakeProphet> right, and I just revised it.
23:01:18 <CakeProphet> meta-conversation is cool though.
23:01:49 <elliott> I'm afraid you have no idea what I'm talking about.
23:01:51 <elliott> anyway
23:02:03 <elliott> oerjan: I guess quantification might fix it by forcing explicit dictionary passing but I'm mostly sceptical of the implementation
23:02:10 <oerjan> zzo38: it cannot, that's an error which i just made to demonstrate how the Irrefutable pattern error message happens. Left x = Left "like this" would be useable, though.
23:03:19 <oerjan> zzo38: if you get an Irrefutable pattern error in your own code, though, it might because you are making something similar to Left x = y where you _think_ y is a Left value but it actually sometimes is a Right value.
23:03:28 <oerjan> *might be because
23:03:48 <oerjan> but it could be with other data type constructors, of course.
23:04:09 <CakeProphet> elliott: you said, in effect, no laws -> useless. I made the wrong implication from that, you showed that it was incorrect. So I revised to use -> laws, which I still do not agree with. Is that not what we just talked about?
23:05:00 <oerjan> zzo38: because of laziness, it is allowed to define Left x = y even if y is a Right value, as long you don't actually _use_ y in that case. but it may be easy to do a mistake then.
23:05:54 <Gregor> Argh, my TinyTC was wrong :(
23:06:29 -!- copumpkin has quit (Quit: Computer has gone to sleep.).
23:06:52 <CakeProphet> Gregor: I thought I had just realized that your name is Roger G. but whois says otherwise. :(
23:07:09 <CakeProphet> for some reason I like reverse names.
23:07:16 <Gregor> Ohhhhhhhhhhhhhhhhhhhhhhhhhkidoke.
23:07:23 <CakeProphet> >_>
23:07:33 <Sgeo> CakeProphet, take a guess what Gregor's name is
23:07:40 <CakeProphet> Gregor.
23:07:46 <Gregor> *clap clap clap*
23:07:50 <CakeProphet> that's what whois says.
23:08:01 <CakeProphet> BUT IT COULD EASILY BE ROGER G.
23:08:04 <Gregor> I'm not much of a mystery :P
23:08:08 <Gregor> I exist ... ON THE INTERNET!
23:08:43 <CakeProphet> assholes.
23:08:51 <monqy> :'(
23:09:00 <Sgeo> I think most people have only one...
23:09:02 <Gregor> All of this is distracting from the tragedy of my TinyTC being wrong.
23:09:12 <Gregor> int*a,b[9<<20];main(){a=b;while(scanf("%d",a++)>0);a=b;while(*a)a+=(a[*a]-=a[a[1]])?3:a[2];while(a>b)putchar(*--a);} // this is corrected, but 117 characters :(
23:09:15 <CakeProphet> Gregor: perhaps this is not a bad thing perhaps.
23:09:45 <Sgeo> Gregor, clearly, you have to change your other name to conform to CakeProphet's specs... in ... weirdly
23:10:41 <CakeProphet> not at all.
23:10:56 <oerjan> elliott: well you need _some_ way to prevent ghc from lifting print "hello world" entirely out of your carefully constructed context :P
23:11:29 <CakeProphet> I was merely sharing an amusing and false connection I made.
23:11:39 <CakeProphet> because Roger G. is a funny name.
23:12:11 <oerjan> that Tehpor Pekac guy has some wild ideas
23:12:12 <elliott> oerjan: doing it at the top-level seems to make it work for some reason
23:12:19 <elliott> Gregor: how was it wrong?
23:12:47 <Gregor> elliott: I ++a'd even when it didn't read in an int, so *a was always 0 by the time the loop started.
23:12:54 <Gregor> So, it never went into the loop at all >_>
23:13:04 <elliott> heh
23:13:08 <oerjan> elliott: yeah but obviously it will be brittle since ghc is by haskell semantics _allowed_ to do that lifting.
23:13:43 <elliott> oerjan: yeah. I think the quantified type might avoid that?
23:13:56 <elliott> hmm maybe:
23:13:58 <elliott> withInstance :: OohD a -> (forall b. (Ooh b, a ~ b) => r) -> r
23:14:01 <elliott> to get the full power
23:14:04 <oerjan> maybe
23:14:20 <CakeProphet> Gregor: is it okay if I call you Roger from now on?
23:14:24 <elliott> (it'd be nice to call random monomorphic methods but fuck up the instances they use, but GHC _definitely_ erases too much for that)
23:14:28 <Gregor> Nope ;P
23:14:38 <elliott> (and I guess I should avoid allowing you to see that by sticking to the plain universal rank-two type)
23:15:00 * Sgeo decides to ignore Roger's wishes wrt whether Roger wants to be called Roger
23:15:24 <CakeProphet> I think this is an excelelnt idea Oeg S.
23:15:38 <oerjan> hey no oegs
23:15:47 <elliott> yeah Sgeo is the reversed name
23:15:56 <elliott> so he's actually S. Geo
23:16:05 <oerjan> that's intruding on my alphabet territory
23:16:17 <monqy> my real name is yqno m.
23:16:27 -!- Sgeo has changed nick to Sgelo.
23:16:39 <elliott> shut up, Monq Y.
23:17:04 <oerjan> and someone is trying _very_ hard to hide that his real name is L. Toilet
23:17:39 * oerjan go too far
23:17:41 * Sgelo fails to get people to infer that he's pretending to be Oleg :(
23:17:51 <CakeProphet> I caught it..
23:17:56 <monqy> me too..........
23:17:58 <oerjan> substitute oleg
23:18:03 <CakeProphet> I AM A MASTER OF MYSTERIES
23:18:05 <monqy> but which oleg are you
23:18:05 <CakeProphet> I REVERSE ALL NAMES.
23:18:06 <monqy> which
23:18:07 <monqy> oleg
23:18:27 <CakeProphet> I SEE ALL OF THE SECRET CODES.
23:18:43 <elliott> oerjan: ellio turd, toilet l., i am poop in every way :(
23:18:51 * elliott cries
23:19:04 <CakeProphet> I keep my window covered by a bedsheet so that the government cannot spy on me with their spy crafts.
23:19:08 <oerjan> your life is so shitty
23:19:31 <elliott> :'(
23:19:54 <CakeProphet> -_;; my soul is black like the night.
23:20:08 <monqy> me too
23:20:39 <CakeProphet> I do not know how to make a crying emo face. ;_;;?
23:21:18 <CakeProphet> I also do not know what contractions are help.
23:21:23 <Phantom_Hoover> Sometimes I like to touch sharp things and feel their sharpness.
23:21:44 * Sgelo #s Phantom_Hoover
23:21:51 <zzo38> I made a Haskell program to know the extensions: http://sprunge.us/CBKY
23:21:54 <monqy> yesterday i cut myself
23:21:54 <elliott> Sgelo: gros
23:21:55 <elliott> s
23:22:00 <monqy> trying to open a bottle of cranbery juice
23:22:12 * Sgelo belatedly recognized the gross interpretation of that
23:22:12 <Phantom_Hoover> monqy, ah, you're getting into the spirit.
23:22:25 <elliott> Sgelo: there's a gross interpretation?
23:22:27 <Phantom_Hoover> Do you work at Starbucks?
23:23:18 <CakeProphet> Sgelo: he is too young do not explain it it is too gross.
23:23:51 <elliott> "I think if we are going to allow ourselves the luxury of semantic breakage, it should at least be worth the cost" --Malcom Wallace on seq
23:24:08 <CakeProphet> it's not worth the cost?
23:24:41 <elliott> not as the report specifies it IHO
23:26:08 <CakeProphet> seq is both luxurious and not worth the cost? Sounds expensive.
23:26:30 <zzo38> I have discussed making a Haskell program that is programmed to tell what extensions it uses, now I have done so. Other ideas are, extend it with the capability to tell if it is Literate Haskell or not, as well as be valid programs in other programming languages such as C, C++, INTERCAL, TeX, Brainfuck, Malbolge, AWK, ...
23:26:30 <elliott> it's a quibble about the Report, nothing much to do with usage.
23:27:07 <CakeProphet> zzo38: isBrainfuck = True
23:27:16 <oerjan> zzo38: :D
23:28:11 <zzo38> CakeProphet: I mean that it will do something proper, too. Of course any file with balanced [] is a valid Brainfuck program
23:28:32 <elliott> "After all the Report doesn't actually say
23:28:32 <elliott> that monomorphic pattern-bound variables are shared, either." huh
23:28:49 <CakeProphet> proper? like sipping tea and maintaining upright posture?
23:29:17 <zzo38> I don't know how a computer program can do that, but if you can figure it out then do so
23:29:29 <zzo38> It can also make output.
23:29:34 <Sgelo> Attention spammers: Asthma is not a vaginal infection
23:29:47 <zzo38> I have seen a polyglot program that makes output to tell you what programming language it is.
23:30:06 -!- copumpkin has joined.
23:30:13 <Deewiant> print "Just another", ((0 and " Ruby ") or ("Pyt" + "hon" or " Perl ")), "hacker.\n",
23:30:15 <oerjan> Sgelo: that would be hysterical
23:30:30 <elliott> oerjan: annoyingly I can't cast (forall b. (C b) => r) to (CD b -> r), because that's an additional layer of boxing
23:30:49 <Sgelo> How does the ("Pyt" + "hon" or " Perl ") part work in Perl?
23:30:54 <zzo38> Deewiant: Yes, something like that
23:31:10 <elliott> Sgelo: . is concat in perl
23:31:12 <elliott> + is numeric
23:31:13 <Deewiant> Sgelo: Both get coerced to integers
23:31:20 <Sgelo> Ah, ok
23:31:23 <CakeProphet> so it becomes 0 which is false
23:32:44 <CakeProphet> but 0 is apparently not false in Ruby?
23:33:24 <Deewiant> Right, only false and nil are
23:33:24 <Deewiant> IIRC
23:33:27 <elliott> yeah
23:33:34 <elliott> which is far more correct than the hideous Python/Perl behaviour.
23:33:36 <oerjan> :t (print "Just another", ((0 and " Ruby ") or ("Pyt" + "hon" or " Perl ")), "hacker.\n")
23:33:37 <lambdabot> Couldn't match expected type `t -> t1 -> [Char]'
23:33:37 <lambdabot> against inferred type `[Char]'
23:33:37 <lambdabot> In the second argument of `(+)', namely `"hon" or " Perl "'
23:33:41 -!- itidus20 has quit (Ping timeout: 257 seconds).
23:33:59 <oerjan> SHOCKING
23:35:12 <Sgelo> elliott, well, objects in Python can define what happens when they're tested by if
23:35:35 <elliott> Sgelo: so? 0 is not false
23:35:38 <elliott> neither is []
23:36:03 <Deewiant> C begs to differ
23:36:22 <elliott> Deewiant: char a[] = {}; // a isn't false after this, is it?
23:36:27 <CakeProphet> it's convenient that they are false though.
23:36:27 <elliott> But anyway, C is wrong about most things.
23:36:33 <Deewiant> No, but int a = 0 is
23:36:39 <zzo38> Although the one I have seen, if I remember correctly, includes Plain TeX, C, C++, LaTeX, Perl, and a few more, but not Haskell.
23:36:42 <elliott> CakeProphet: when have you ever exploited the "==0 being false" behaviour in Python?
23:36:55 <elliott> I can see the argument for [], but unless your language has no boolean type, 0 being false is pure insanity.
23:37:03 <CakeProphet> elliott: I have used if list: to test if it is empty
23:37:07 <CakeProphet> or None
23:37:30 <Sgelo> I used LSL's similar behavior.... but I really shouldn't have
23:37:32 <elliott> that's not an answer to the question I asked you
23:37:33 <zzo38> But there are other TeX formats as well, such as AMS-TeX, and there is primitive TeX which I sometimes find a use for.
23:37:36 <elliott> None is ~ nil, so Ruby has that too
23:37:57 <CakeProphet> elliott: I don't really understand the question ==0 is not valid Python. :P
23:38:14 <CakeProphet> oh nevermind.
23:38:20 <Sgelo> Some function returns -1 if it can't find the item in the list.... I did if(llWhatever(...)+1)
23:38:28 <elliott> CakeProphet: x == 0 is perfectly valid Python.
23:38:34 <CakeProphet> well, I've used it in a while loop I believe. I'm sure it would be useful as an if.
23:38:58 <elliott> ok, so "I believe" with no example and "I'm sure".
23:39:01 <Sgelo> Note: I recognize now how "clever" (bad) that sort of thing is
23:39:29 <CakeProphet> uh, I think it's perfectly valid but I'm not going to get involved in yet another one of these debates.
23:39:57 <CakeProphet> because it is preference and not objective.
23:40:14 <elliott> that is how you resolve all debates about languages
23:40:16 <oerjan> 10:20:18 <elliott> 00:10:38: * Sgeo wants wget to ignore robots.txt >.>
23:40:16 <oerjan> 10:20:24 <elliott> Obviously it is impossible to make wget do this.
23:40:29 <oerjan> well _i_ thought so, but Sgeo managed to.
23:40:38 <CakeProphet> elliott: over tiny trivial things, yes.
23:40:43 <elliott> oerjan: whoosh.
23:40:48 <elliott> CakeProphet: haha
23:40:54 <oerjan> elliott: not really
23:41:16 <oerjan> elliott: i'm pointing out that if you are insulting sgeo for believing that, you are really insulting me :P
23:41:32 <CakeProphet> I'm sure I could go through VB and find things that are objectively bad.
23:41:37 <elliott> oerjan: I insult for more than pure factual content
23:42:16 <oerjan> elliott: i _do_ recall i could not manage to find it in the manpage, so they are not exactly advertising how to do it.
23:42:29 <oerjan> (which is somewhat reasonable i guess)
23:42:36 <Sgelo> It's a config file option
23:42:41 <elliott> -e is documented
23:42:50 <elliott> and the man page points you to GNU info for documentation on .wgetrc/-e
23:42:50 <Sgelo> And -e lets you set config file options on the command-line
23:43:03 <Sgelo> And googling pretty much gives you the answer
23:44:46 <oerjan> well it's not in the _obvious_ place
23:44:52 * oerjan sulks in the corner
23:45:05 <elliott> oerjan: /pats
23:49:16 <CakeProphet> I am a spider.
23:52:14 -!- FireFly has quit (Quit: FireFly).
23:53:41 -!- kmc_ has joined.
23:54:52 <quintopia> elliott: that's where i keep my Porn And Trailers
23:55:42 <elliott> pugs and togs
23:56:22 -!- kmc has quit (Ping timeout: 245 seconds).
2011-09-03
00:03:15 <elliott> oerjan: hmm there is no way to define an unboxed type in haskell, right?
00:03:19 <elliott> even with ghc extensions
00:03:30 <copumpkin> elliott: in what sense?
00:03:44 <elliott> copumpkin: in the sense of being literally unboxed. (I'm creating typeclass dictionaries at runtime.)
00:03:59 <elliott> my current implementation is a bit brittle so I want to do some unsafeCoercing to pass the dictionary more explicitly
00:04:00 <copumpkin> I mean, what kind of an unboxed type would you want?
00:04:07 <elliott> copumpkin: typeclass dictionary
00:04:12 <elliott> data OohD a where
00:04:13 <elliott> OohD :: (Ooh a) => OohD a
00:04:13 <elliott> works but is boxeed
00:04:19 <elliott> dictioanries are unboxed
00:04:33 <copumpkin> well, an unlifted tuple of the members of the dictionary
00:04:51 <elliott> copumpkin: oh, that would work. how many unlifted tuple types are defined?
00:04:54 <elliott> as in size
00:04:59 <copumpkin> arbitrarily many
00:05:24 <elliott> great
00:05:34 <elliott> copumpkin: do you know anything about functions in typeclasses internally?
00:05:43 <copumpkin> what about them?
00:05:44 <elliott> when I coerce functions into a dictionary, I get the PAP object entered error
00:05:57 * Phantom_Hoover → sleep
00:05:58 -!- Phantom_Hoover has quit (Quit: Leaving).
00:06:02 <elliott> so it sounds like functions in dictionaries are different to functions elsewhere
00:06:08 <copumpkin> I doubt it
00:06:15 <copumpkin> but a dictionary is probably its own closure type or something
00:06:21 <copumpkin> so it's not even an unlifted tuple
00:06:28 <copumpkin> also, you can't pass unlifted tuples
00:06:30 <copumpkin> only return them
00:06:43 <elliott> OK, well I need to pass them. Is that a restriction on what you can define or will even coercing to that not work?
00:06:54 <elliott> copumpkin: And, well, I've successfully coerced non-function classes in.
00:06:57 <copumpkin> there's not an established way to pass them in
00:07:01 <elliott> (specifically class Ooh a where ooh :: a)
00:07:13 <oerjan> elliott: since it _does_ work for data types, the surrounding dictionary structure seems unlikely to be the real culprit, no?
00:07:49 <elliott> oerjan: yep, but copumpkin is saying that it is. (if you mean my questions about unboxed tuples, I'm trying to make withInstance reliable, you know, because of the horrible bug that breaks referential transparency :))
00:08:00 <copumpkin> you probably don't want unboxed tuples
00:08:34 <elliott> copumpkin: seems not. But I need to do it _somehow_
00:08:41 <elliott> and there's no core parser, and I don't think writing this as Cmm would be practical.
00:09:04 <elliott> oerjan: ah, "OohD a -> (forall b. (Ooh b) => r) -> r" is not even valid
00:09:07 <elliott> At least one of the forall'd type variables mentioned by the constraint
00:09:07 <elliott> must be reachable from the type after the '=>'
00:09:11 <elliott> unfortunately.
00:09:18 <oerjan> right
00:09:24 * elliott tries Data.Tagged out of curiosity
00:09:50 <copumpkin> is this just wankery out of curiosity or are you trying to do something real with this?
00:10:13 <elliott> copumpkin: it started out as the former, but I believe if I can get it to work, you can reimplement the reflection package more efficiently like this.
00:10:25 <elliott> and it would be a neat Hackage package, too :)
00:10:34 <copumpkin> reflection is already pretty awesomely efficient
00:10:37 <copumpkin> according to edwardk
00:10:54 <elliott> oerjan says it goes through the FFI, which would be totally unnecessary with this
00:11:05 <elliott> {-# OPTIONS_GHC -fno-cse -fno-full-laziness -fno-float-in #-}
00:11:05 <elliott> those last two flags are scary.
00:11:39 <elliott> oh, they're just turning off things -O implies
00:12:46 <elliott> copumpkin: anyway, I will definitely put this on Hackage if I can get it working, so I'd call it something real
00:13:10 <oerjan> turning pointers into strings, then into lists of integers, then into a type to get an instance is efficient?
00:13:39 <oerjan> (and the integer -> type step is binary, i think
00:13:45 <oerjan> )
00:14:04 -!- zzo38 has quit (Remote host closed the connection).
00:14:05 <elliott> pointers into _strings_?
00:14:07 <elliott> ouch
00:14:08 <copumpkin> look at the generated code
00:14:11 <elliott> as in, String string?
00:14:19 <oerjan> ok it may be word8 lists
00:14:24 <elliott> well that's not really better
00:14:28 <elliott> the [] is the bad part :P
00:14:58 <elliott> where
00:14:58 <elliott> bytes :: [CChar]
00:14:58 <elliott> bytes = unsafePerformIO $ with a (peekArray (sizeOf a) . castPtr)
00:15:20 <elliott> oerjan: it might be inlined into reifyIntegrals as a loop
00:15:24 <elliott> but there's no way the type part isn't horrible
00:15:26 <elliott> it's unary
00:15:33 <elliott> or hmm
00:15:35 <elliott> no it isn't
00:15:40 <elliott> newtype Zero = Zero Zero deriving (Show)
00:15:40 <elliott> newtype Twice s = Twice (Twice s) deriving (Show)
00:15:40 <elliott> newtype Succ s = Succ (Succ s) deriving (Show)
00:15:40 <elliott> newtype Pred s = Pred (Pred s) deriving (Show)
00:15:40 <elliott> it's wtf-ary :P
00:15:47 <CakeProphet> weeeee my Ubuntu stickers arrived .
00:15:47 <copumpkin> he's done a lot of stuff with it
00:15:55 <copumpkin> and says it's almost negligible performance-wise
00:16:02 <copumpkin> which is why he's building the mpfr binding on top of it
00:16:06 <elliott> meh, my hack is cool for other reasons too
00:16:38 <elliott> I wish there was an unsafeCoerce that shut GHC up about lack of instances
00:16:54 <elliott> reallyUnsafeCoerce
00:17:00 <copumpkin> lol
00:17:08 <Deewiant> Lack of instances?
00:17:11 <elliott> withInstance :: forall a r. OohD a -> ((Ooh a) => r) -> r
00:17:12 <elliott> withInstance d k = (unsafeCoerce k :: OohD a -> r) d
00:17:12 <elliott> -->
00:17:16 <elliott> /home/elliott/Code/reify-class/reify.hs:25:34:
00:17:17 <elliott> No instance for (Ooh a)
00:17:45 <elliott> copumpkin: btw, mine already works enough that you can make (print "hello") print without the quotes in some contexts
00:17:53 <copumpkin> elliott: I have a better trick for that
00:17:56 <copumpkin> I think it'll work, anyway
00:18:01 <elliott> you could even ask the user whether you wanted it to print quotes or not and then do so at runtime
00:18:05 <elliott> (you can specify full instances at runtime)
00:18:07 <elliott> copumpkin: what's the trick>
00:18:17 <elliott> mine is a pretty great trick :P
00:18:31 <copumpkin> oh, I thought it didn't work
00:19:16 <elliott> *Main> withInstance explicitTestD (ooh :: Int)
00:19:16 <elliott> Loading package array-0.3.0.2 ... linking ... done.
00:19:16 <elliott> Loading package containers-0.4.0.0 ... linking ... done.
00:19:16 <elliott> Loading package deepseq-1.1.0.2 ... linking ... done.
00:19:16 <elliott> Loading package parallel-3.1.0.1 ... linking ... done.
00:19:17 <elliott> -6917529027641081856
00:19:19 <elliott> *Main> withInstance explicitTestD (ooh :: Int)
00:19:21 <elliott> 5188146770730811392
00:19:23 <elliott> ok that's not better
00:19:25 <elliott> copumpkin: It does and it doesn't
00:19:29 <elliott> main :: IO ()
00:19:33 <elliott> main = a >> b
00:19:35 <elliott> a = print "Hello, world!"
00:19:37 <elliott> b = withInstance explicitLitD $ print "Hello, world!"
00:19:39 <elliott> that works
00:19:41 <elliott> main = do { print blah; withInstance ... }
00:19:43 <elliott> doesn't
00:19:49 <oerjan> <elliott> it's wtf-ary :P <-- wtf are they nested in themselves for...
00:20:00 <elliott> copumpkin: But yeah, apart from that rather major bug, it works, and I think if I can coerce GHC into generating the right Core, it'll work perfectly
00:20:10 <copumpkin> oerjan: to only have one inhabitant
00:20:14 <elliott> oerjan: that's how you define a 0-element type in standard haskell pre-last year's report
00:20:21 <elliott> copumpkin: no, 0
00:20:24 <elliott> well
00:20:26 <elliott> plus _|_
00:20:29 <oerjan> oh right
00:20:29 <elliott> :p
00:20:33 <copumpkin> that's the one
00:20:44 <elliott> I don't consider _|_ a value so much as a disease
00:20:54 <copumpkin> then hang out in #agda more
00:21:12 <elliott> I don't consider Agda a language so much as INFERIOR TO COQ IN EVERY WAY
00:21:17 <oerjan> i think elliott has other reasons to dislike agda :P
00:21:31 <oerjan> basically, elliott has other reasons to dislike X forall X
00:21:39 <monqy> I'll learn coq first then
00:21:47 <elliott> I don't have other reasons to dislike oerjan other than that he's oerjan
00:21:58 <oerjan> but still somehow manages to order things
00:22:10 -!- kmc_ has changed nick to kmc.
00:22:59 <elliott> oerjan: oh dear, my code does not work as well as I thought
00:23:04 <elliott> adding "aah :: (a,a)" breaks things.
00:23:06 <oerjan> sad story
00:23:16 <elliott> so, is it multiple elements or the different type?
00:23:17 <Sgelo> Is _|_ like null but all.... mathematical? And untestable-for, of course
00:23:28 <elliott> Sgelo: ...
00:23:39 <elliott> oerjan: nope, aah :: a breaks too
00:23:48 -!- Vorpal has quit (Ping timeout: 264 seconds).
00:23:51 <oerjan> elliott: is it the explicit type declaration then
00:23:52 <Sgelo> (Barring certain cases of it which can be detected in IO or some BS like that)
00:23:55 <elliott> this is progress!
00:23:59 <elliott> oerjan: no, it's having more than one member :)
00:24:17 <elliott> oerjan: I suspect GHC rudely turned my data into a newtype?
00:24:24 <oerjan> huh
00:24:45 <oerjan> can it _do_ that? i suppose if the members are strict...
00:24:54 <oerjan> *member is
00:24:56 <elliott> I guess not
00:25:05 <elliott> It wasn't strict
00:25:10 <elliott> Hmm
00:25:37 <elliott> hmm is -O on by default?
00:25:39 <oerjan> this might depend too much on ghc's exact memory layouts
00:25:49 <elliott> seems not
00:25:55 <elliott> oerjan: um that's exactly what I want to depend on
00:26:02 -!- Vorpal has joined.
00:26:11 <oerjan> yes, but if those are varying for subtle reasons...
00:26:39 <Lymee> !haskell import Unsafe.Coerce;map id unsafeCoerce 0 :: [Int]
00:26:46 <elliott> oerjan: well the Core doesn't lie.
00:26:55 <oerjan> Lymee: import means module, which requires a main
00:26:56 <elliott> oerjan: it would have to make the same decisions to the data type, too :)
00:27:11 <CakeProphet> my windows key has been transformed into an UBUNTU KEY
00:27:21 <Lymee> !haskell import Unsafe.Coerce;main = putStrLn $ show $ map id $ unsafeCoerce 0 :: [Int]
00:27:28 <oerjan> Lymee: you can use !map id Unsafe.Coerce.unsafeCoerce 0 :: [Int] though
00:27:47 <oerjan> @src print
00:27:48 <lambdabot> print x = putStrLn (show x)
00:27:51 <oerjan> *cough*
00:27:59 <Lymee> !haskell import Unsafe.Coerce;main = print $ map id $ unsafeCoerce 0 :: [Int]
00:28:00 <Lymee> >:c
00:28:18 <Lymee> !haskell import Unsafe.Coerce;main = print $ map id (unsafeCoerce 0 :: [Int])
00:28:23 <oerjan> Lymee: oh and you need... right
00:28:23 <EgoBot> ​[]
00:28:46 <elliott> copumpkin has given up on me at least :-P
00:28:54 <elliott> now to ask oerjan a technical question he can't answer
00:28:57 <elliott> and finally I shall be alone in the world
00:28:58 <oerjan> yay!
00:28:58 <copumpkin> sorry, making some food
00:29:02 <elliott> UNACCEPTABLE
00:29:30 <Lymee> !haskell import Unsafe.Coerce;main = print $ map id (unsafeCoerce 100 :: [Int])
00:29:35 <EgoBot> ​[]
00:29:37 <Lymee> !haskell import Unsafe.Coerce;main = print $ map id (unsafeCoerce (Just 100) :: [Int])
00:29:42 <EgoBot> ​[100
00:30:04 <elliott> oerjan: ok i can prove that the elements can't be unpacked
00:30:22 <elliott> oerjan: typeclasses are polymorphic by definition, types have varying sizes, Q.E.D.
00:30:28 <elliott> strictness doesn't solve the segfault
00:30:36 <elliott> maybe I really _do_ have one too many levels of unboxing
00:30:39 <Lymee> !haskell import Unsafe.Coerce;main = print $ map id (unsafeCoerce (Just (Just 100)) :: [Int])
00:30:41 <Sgelo> "Fidelity National Information Services Inc. (FIS) lost $13M to an ATM theft earlier this year:"
00:30:44 <EgoBot> ​[-1657324113164070127]
00:30:52 <Sgelo> I swear, this has nothing to do with my BancSTAR inquiries!
00:31:04 <Lymee> !haskell import Unsafe.Coerce;main = print $ map id (unsafeCoerce [Just 100,Just 10,Just 5] :: [Int])
00:31:08 <elliott> Lymee: EgoBot responds to /msg.
00:31:09 <EgoBot> ​[1801440399305314945,6341068823694774913,2449958745646666370]
00:31:12 <Lymee> :<
00:31:57 <elliott> oerjan: hmm, this is really baffling; one-element classes work, three-element classes of functions work as long as you don't actually _call_ them
00:32:00 <elliott> but this doesn't?
00:32:06 <Sgelo> > import System.IO.Unsane; unsafePerformIO $ putStrLn "Hello world"
00:32:07 <lambdabot> <no location info>: parse error on input `import'
00:32:18 <Sgelo> !haskell import System.IO.Unsane; unsafePerformIO $ putStrLn "Hello world"
00:32:23 <Deewiant> Unsane
00:32:36 <elliott> Deewiant: What is
00:32:38 <elliott> oh
00:32:38 <elliott> haha
00:32:42 <Sgelo> !haskell import System.IO.Unsafe; unsafePerformIO $ putStrLn "Hello world"
00:32:57 <elliott> "for the congnoscenti, data values can be entered but function closures cannot"
00:33:04 <Sgelo> <EgoBot> /tmp/input.19017.hs:1:7:
00:33:05 <Sgelo> <EgoBot> Could not find module `System.IO.Unsane':
00:33:05 <Sgelo> <EgoBot> Use -v to see a list of the files searched for.
00:33:05 <Sgelo> <EgoBot>
00:33:05 <Sgelo> <EgoBot> /tmp/input.19389.hs:2:0:
00:33:05 <Sgelo> <EgoBot> parse error (possibly incorrect indentation)
00:33:06 <oerjan> Sgelo: i am not going to repeat everything i said to Lymee
00:33:07 <Sgelo> <EgoBot>
00:33:07 <elliott> oerjan: hm. so it was treating the function in the Show class as a data value.
00:33:19 <elliott> oerjan: I'm starting to suspect copumpkin is right about mumble mumble infotable :-)
00:33:41 <oerjan> ooh
00:33:53 <Sgelo> oerjan, when did you say it? Today?
00:33:54 <elliott> which would be rather difficult to resolve from within Haskell.
00:34:07 <oerjan> Sgelo: like above when Lymee did essentially the same thing
00:34:42 <Lymee> !haskell import Unsafe.Coerce;main = print $ map id (unsafeCoerce ([Just 100,Just 10,Just 5] :: [Any]) :: [Int])
00:35:18 <Sgelo> Is there any point to using unsafePerformIO when I have access to full IO anyway?
00:35:22 * Sgelo stops bothering
00:36:02 <oerjan> Sgelo: er, no. and Lymee is testing unsafeCoerce not unsafePerformIO.
00:36:23 <Sgelo> I was testing unsafePerformIO for no good reason I guess
00:36:48 <oerjan> elliott: :(
00:36:59 <elliott> oerjan: but hmmm.
00:37:02 <elliott> oerjan: it's so CLOSE to working :D
00:37:07 <elliott> oerjan: time to
00:37:10 <elliott> LOOK AT THE COOOOOOOOOOORE
00:37:38 <elliott> wtf, why isn't it showing the D:blah crap
00:37:46 <elliott> oh hmm.
00:37:51 <elliott> M.$fOohInt [InlPrag=[ALWAYS] CONLIKE] :: M.Ooh Int
00:37:51 <elliott> M.$fOohInt = M.D:Ooh @ Int $cooh_rmM $caah_rmK
00:37:55 <elliott> that's.
00:37:56 <elliott> so exciting.
00:38:12 <elliott> oerjan: I was about to say it might be the type parameter but duh that's erased at runtime
00:38:25 <oerjan> yeah
00:39:12 <elliott> M.helloWorld =
00:39:12 <elliott> \ (@ a_apr) ($dOoh_aps :: M.Ooh a_apr) ->
00:39:12 <elliott> (M.ooh @ a_apr $dOoh_aps, M.aah @ a_apr $dOoh_aps)
00:39:16 <elliott> I was looking for some "case", ghc-core :P
00:39:20 <elliott> but OK I'LL LOOK AT THE ACCESSORS
00:39:34 <elliott> oh, what
00:39:38 <elliott> no wait nevermind
00:39:42 <elliott> M.ooh =
00:39:42 <elliott> \ (@ a_ac6) (tpl_B1 [Occ=Once!] :: M.Ooh a_ac6) ->
00:39:42 <elliott> case tpl_B1 of _ { M.D:Ooh tpl_B2 [Occ=Once] _ -> tpl_B2 }
00:39:43 <elliott> M.aah =
00:39:43 <elliott> \ (@ a_ac6) (tpl_B1 [Occ=Once!] :: M.Ooh a_ac6) ->
00:39:43 <elliott> case tpl_B1 of _ { M.D:Ooh _ tpl_B3 [Occ=Once] -> tpl_B3 }
00:39:55 <elliott> looks right to me. although wtf is [Occ=Once] about anyway?
00:40:15 <CakeProphet> what was once a window-stickered Dell Inspiron has now been transformed into an Ubuntu-and-Windows-stickered COMPUTING MACHINE
00:40:21 <CakeProphet> that is also a Dell Inspiron still
00:40:29 <oerjan> CakeProphet: how inspiring
00:40:43 <elliott> oerjan: he;pl
00:41:21 -!- sllide has quit (Ping timeout: 245 seconds).
00:41:51 <CakeProphet> ooh = object-oriented hat
00:41:52 <oerjan> elliott: maybe it means simply that it only occurs once in its scope
00:42:22 <oerjan> and the appended ! might mean it's strict
00:42:45 <CakeProphet> aah = aspect assembled hermaphrodite
00:42:59 <CakeProphet> !wacro
00:43:00 <EgoBot> HFMMTYAC
00:43:07 <CakeProphet> monqy: nope
00:43:16 <CakeProphet> don't do it.
00:43:16 <monqy> CakeProphet: miserable
00:43:20 <CakeProphet> I TOLD YOU
00:43:40 <elliott> oerjan: hm maybe
00:43:40 <CakeProphet> look I'm sorry but I can't control pseudo-randomness
00:43:49 <oerjan> highly fonetic morphology-missing totally yarbled acronym case
00:44:18 <monqy> CakeProphet: can't you markov it up or something
00:44:26 <CakeProphet> I am still doing pertinent job things.
00:44:30 <CakeProphet> and school things.
00:44:41 <elliott> oerjan: hm what is that a_ac6
00:44:44 <elliott> oh the type parameter duh
00:44:44 <CakeProphet> and also procrastinating
00:45:10 <elliott> oerjan: I wish I could get GHC to figure out how I'm using unsafeCoerce so I can see what the unpacking and repacking looks like :-)
00:46:11 <elliott> Main.explicit_ooh :: forall a_axd. Main.ExplicitOoh a_axd -> a_axd
00:46:11 <elliott> [GblId[[RecSel]], Arity=1, Caf=NoCafRefs]
00:46:11 <elliott> Main.explicit_ooh =
00:46:11 <elliott> \ (@ a_axv) (ds_dyA :: Main.ExplicitOoh a_axv) ->
00:46:11 <elliott> case ds_dyA of _ { Main.ExplicitOoh ds1_dyB ds2_dyC ->
00:46:12 <elliott> case {tick (main:Main, 12)}_dyy
00:46:14 <elliott> @ (a_axv -> GHC.Prim.State# GHC.Prim.RealWorld) ds1_dyB
00:46:16 <elliott> of _ { __DEFAULT ->
00:46:18 <elliott> ds1_dyB
00:46:20 <elliott> }
00:46:22 <elliott> }
00:46:24 <elliott> Main.explicit_aah :: forall a_axd. Main.ExplicitOoh a_axd -> a_axd
00:46:26 <elliott> [GblId[[RecSel]], Arity=1, Caf=NoCafRefs]
00:46:28 <elliott> Main.explicit_aah =
00:46:30 <monqy> core is spoukey
00:46:30 <elliott> \ (@ a_axx) (ds_dyG :: Main.ExplicitOoh a_axx) ->
00:46:34 <elliott> case ds_dyG of _ { Main.ExplicitOoh ds1_dyH ds2_dyI ->
00:46:36 <elliott> case {tick (main:Main, 13)}_dyE
00:46:38 <elliott> @ (a_axx -> GHC.Prim.State# GHC.Prim.RealWorld) ds2_dyI
00:46:40 <elliott> of _ { __DEFAULT ->
00:46:42 <elliott> ds2_dyI
00:46:44 <elliott> }
00:46:46 <elliott> }
00:46:48 <elliott> (the ticks are irrelevant, ghc-core just elides these accessors so I need to get the more raw version)
00:46:50 <elliott> oerjan: ok distinct lack of [Occ=Once]...
00:47:59 <elliott> I was going to wonder what $ signifies but it'll just mean generated code
00:48:05 <elliott> and also not exported stuff
00:48:08 <elliott> well
00:48:09 <elliott> no
00:48:12 <elliott> not exported = no module prefix
00:48:13 <kmc> coredump!
00:48:33 <elliott> kmc: HOW MUCH DO YOU KNOW ABOUT GHC'S REPRESENTATION OF TYPECLASS DICTIONARIES
00:48:38 <kmc> not much :/
00:48:53 <elliott> that's more than nothing!
00:48:55 <kmc> i don't see a $
00:48:57 <elliott> Tell me EVERYTHING YOU KNOW.
00:49:07 <elliott> The $s were elsewhere in the Core.
00:52:38 <oerjan> that [GblId[[RecSel]], Arity=1, Caf=NoCafRefs] might contain the kind of information which causes ghc to treat it differently
00:53:46 <elliott> oerjan: oh dear,
00:53:48 <elliott> *Main> explicit_ooh (implicit (defaultD :: OohD Int))
00:53:48 <elliott> Loading package array-0.3.0.2 ... linking ... done.
00:53:49 <elliott> Loading package containers-0.4.0.0 ... linking ... done.
00:53:49 <elliott> Loading package deepseq-1.1.0.2 ... linking ... done.
00:53:49 <elliott> Loading package parallel-3.1.0.1 ... linking ... done.
00:53:49 <elliott> 35771238760226816
00:53:50 <oerjan> especially the first one looks suspicious to me, Rec might mean record
00:53:51 <elliott> *Main> explicit_ooh (implicit (defaultD :: OohD Int))
00:53:53 <elliott> 35771238621435904
00:53:55 <elliott> *Main> explicit_aah (implicit (defaultD :: OohD Int))
00:53:57 <elliott> 139731376416641
00:53:59 <elliott> *Main> [a few seconds passed]
00:54:03 <elliott> ghc: internal error: evacuate: strange closure type 524
00:54:05 <elliott> (GHC version 7.0.4 for x86_64_unknown_linux)
00:54:07 <elliott> Please report this as a GHC bug: http://www.haskell.org/ghc/reportabug
00:54:09 <elliott> Process haskell aborted
00:54:11 <elliott> (I guess that was during GC)
00:54:13 <elliott> ok so there is _something_ wrong with my representation somehow
00:54:15 <elliott> oerjan: and hm
00:54:27 <elliott> oerjan: that's just record selector
00:54:29 <elliott> these _are_ record selectors
00:54:36 <elliott> I'm interested in how the record is destructed
00:54:39 <elliott> which is the only reason I looked at them
00:54:40 <elliott> to see the case
00:55:18 <oerjan> ouch
00:56:00 <elliott> (the previous try before I restarted without noisy core output segfaulted as soon as I did the explicit_aah)
00:58:20 <oerjan> ...and the new square root of minus garfield meme really gets going.
00:59:59 <elliott> kmc won't talk. they know what we're doing. they fear us.
01:00:14 <elliott> oerjan: what's the meme this time?
01:00:28 <kmc> i don't actually know anything about ghc's representation of typeclass dictionaries
01:00:28 <oerjan> elliott: see the linked original
01:00:41 <kmc> i just prefer to answer questions with vague relative terms rather than absolutes
01:00:56 <elliott> oerjan: so it's s/blender/X~blender/?
01:00:58 <elliott> kmc: me too, me too.
01:01:03 <oerjan> kmc: hm, might you be interested in an #esoteric op position?
01:01:08 <elliott> :D
01:01:08 * oerjan runs away
01:01:16 <elliott> kmc: can I pay you to go and force copumpkin to stop making food and start answering my pressing questions instead?
01:01:44 <oerjan> elliott: well this is the first one that actually sounds like bender, really.
01:01:44 <copumpkin> omnomnom
01:01:57 <copumpkin> I finished my dinner but I really feel like some cereal now
01:02:01 <copumpkin> or maybe sorbet
01:02:07 <elliott> copumpkin: STOP AVOIDING YOUR DUTIES
01:02:10 <copumpkin> I ate pissed-off pasta
01:02:19 <copumpkin> it was only moderately pissed off though
01:02:22 * elliott punches copumpkin, shoves in back of truck, drives to the Haskell lab
01:02:28 <elliott> VIVA LA UNSAFECOERCION
01:02:30 <copumpkin> noes
01:02:40 <elliott> clearly i did not punch enough.
01:02:43 <oerjan> copumpkin: it was just copypasta
01:03:05 <copumpkin> I wouldn't mind copypasta that pasta
01:03:08 <copumpkin> it was quite tasty
01:03:17 <copumpkin> unfortunately there is none left
01:03:58 <oerjan> the pasta is in the past
01:04:16 <elliott> oerjan: hey, ban copumpkin until he learns to forego food. thanks
01:04:21 <elliott> (my techniques are _beautiful_.)
01:04:24 <copumpkin> :(
01:04:40 <oerjan> but i _like_ food. it keeps the horrible pain away.
01:04:52 <elliott> oerjan: um what we are doing right now is the horrible pain.
01:04:55 <olsner> oerjan: me too want food
01:05:42 <olsner> the pain of non-food seems to have temporarily subsided though
01:06:19 <elliott> hey olsner
01:06:24 <elliott> what do you know about GHC's representation of typeclass dictionaries
01:06:27 * elliott gets the knife
01:06:38 <oerjan> he knows nothing, he is swedish
01:06:38 <olsner> elliott: 3, about 3
01:06:45 <elliott> olsner: good. tell the three.
01:06:51 <elliott> oerjan: now now, we only have a sample size of one for that.
01:07:08 <olsner> elliott: can't explain. 3.
01:07:18 <elliott> olsner: THREE WHATS
01:07:23 * elliott starts mild stabbing.
01:07:25 <olsner> 3 lol
01:07:28 <oerjan> elliott: he seems to be stuck at the wrong type for the answer.
01:07:35 <oerjan> you might have to unsafeCoerce him.
01:07:51 <elliott> unsafeCoerce olsner
01:07:56 <elliott> :: InformationAboutTypeClasses
01:08:02 <olsner> unsafeCoerse to the right type lol
01:08:26 * elliott punches olsner
01:08:28 * elliott begins major stabbing
01:08:31 * elliott goes into kill mode
01:08:33 <elliott> DIEEEEEEEEEEE
01:08:38 <elliott> ok now he definitely can't help us.
01:08:44 <oerjan> elliott seems a bit upset.
01:08:52 <elliott> oerjan: HE;S A MONSTER
01:08:55 <elliott> oerjan: hey wait i just had an idea.
01:09:01 <elliott> oerjan: I could use the FFI in a maybe less horrific manner.
01:09:12 <elliott> oerjan: specifically: just assemble the structure of the instance in-memory
01:09:16 <elliott> that would just be a few simple pokes
01:09:22 <elliott> oh hmm
01:09:27 <elliott> right
01:09:31 <elliott> then an unsafeCoerce and peek
01:09:32 <elliott> hmm
01:09:35 <olsner> anyway, what you actually have at your disposal is burger dressing, some kebab meat and some fries... and maybe me... in that order
01:09:40 <elliott> it might be hard to get GHC to turn a pointer into a value with the same representation :)
01:09:53 <elliott> probably not that hard I guess
01:09:57 <olsner> in other words, good luck with that dressing
01:10:23 <olsner> afaik it doesn't do haskell nearly as well as me
01:10:37 <olsner> however good *that* is
01:10:40 <elliott> olsner: rae you on durgs,
01:10:49 <oerjan> elliott is going to do this so weirdly that it will only work in precisely _one_ ghc version.
01:10:54 <olsner> I don't ray on the drugs no
01:11:18 <elliott> oerjan: well I think GHC's runtime representation is pretty stable...
01:11:19 <elliott> stg and all that
01:11:38 <oerjan> elliott: they did add those tag bits at one point...
01:11:41 <elliott> castStablePtrToPtr :: StablePtr a -> Ptr ()Source
01:11:41 <elliott> Coerce a stable pointer to an address. No guarantees are made about the resulting value, except that the original stable pointer can be recovered by castPtrToStablePtr. In particular, the address may not refer to an accessible memory location and any attempt to pass it to the member functions of the class Foreign.Storable.Storable leads to undefined behaviour.
01:11:41 <elliott> hmm.
01:11:49 <elliott> that's not very helpful, Foreign.StablePtr.
01:11:52 <elliott> castPtrToStablePtr :: Ptr () -> StablePtr aSource
01:11:52 <elliott> The inverse of castStablePtrToPtr, i.e., we have the identity
01:11:52 <elliott> aha
01:11:55 <elliott> ok that might work
01:12:00 <elliott> poke the bits in, cast it
01:12:04 <elliott> then dereference it
01:12:11 * olsner moves more shredded something into an eating position
01:12:16 <elliott> i'll wait for copumpkin to prove that we can't possibly do that and then try that :P
01:13:01 <olsner> can't do what and then try what?
01:13:13 <oerjan> shredded surtrömming
01:13:18 <oerjan> *+s
01:13:36 <olsner> hredded hred hrerring?
01:13:51 <olsner> icelandishers are weirder
01:13:57 <elliott> olsner: can't do it with unsafeCoerce; and write the FFI code
01:14:13 <olsner> they have surkärring
01:14:29 <olsner> and not in the "cocktail with cinnamon" sense...
01:14:29 <oerjan> há, karl
01:14:37 <elliott> youre
01:14:38 <elliott> confusing
01:14:40 <elliott> stop talking
01:14:52 <olsner> hurr durr elliott är nykter
01:14:56 <elliott> oerjan: ojidfio
01:15:07 <olsner> baknykter imorrn! :D
01:15:15 <elliott> IM GOING TO RIP OUT YOUR GUTS
01:15:16 <elliott> AND REPLAC ETHEM WITH DEATH
01:15:22 <elliott> and it iwll hurt SO BADLY
01:15:28 <oerjan> baknykter, what a horrible state to be in
01:15:30 <olsner> death will do that too
01:15:52 <oerjan> i think that may be what english calls "knurd"
01:16:13 <olsner> only after you start calling it knurd
01:16:26 * oerjan ponders getting some klatchian ice coffee
01:16:52 <elliott> knurd is a discworld thing??//
01:16:56 <oerjan> elliott: help, this swede is deficient, he doesn't get my discworld references
01:17:01 <oerjan> but of course
01:17:12 <elliott> oerjan: kill him,
01:17:14 <elliott> also all swedes
01:17:15 <elliott> just invade guys
01:17:17 <elliott> it'll be fine
01:17:20 <elliott> we'll all thank you
01:17:34 <elliott> withInstance :: OohD a -> (forall t. (Ooh t) => Tagged t r) -> Tagged t r
01:17:34 <elliott> withInstance OohD k = k
01:17:39 <elliott> oerjan: can you _believe_ ghc is too stupid to type this
01:17:44 <elliott> oh hmm
01:17:45 <olsner> you know, norway used to be ours entirely
01:17:48 <elliott> it might be the return type that's broken
01:17:49 <olsner> OURS
01:17:53 <oerjan> elliott: we cannot do that, they have infiltrated us too much
01:17:54 <elliott> yeah
01:18:02 <elliott> olsner: yes and then it became decent
01:18:25 <oerjan> <elliott> oerjan: can you _believe_ ghc is too stupid to type this <-- huh
01:18:26 <olsner> elliott: you say that as if it were a good thing
01:18:40 <oerjan> elliott: oh wait duh
01:18:43 <olsner> *was
01:18:49 <oerjan> your t escapes
01:18:53 <Sgelo> TV Tropes no longer does Troper Tales
01:18:54 <Sgelo> :(
01:19:05 <CakeProphet> >>> from selenium.webdriver import *
01:19:05 <CakeProphet> >>> x = Firefox()
01:19:15 <CakeProphet> this reminds me somewhat of import antigravity
01:19:18 <olsner> Sgelo: u sux?
01:19:31 <oerjan> <olsner> OURS <-- IT WAS A UNION OF EQUALS.
01:19:38 <olsner> tvtropes was alive and kicking last time I checked anyway
01:19:48 <olsner> oerjan: hah, as if
01:20:08 <elliott> withInstance :: OohD a -> (forall t r. Tagged t r -> x) -> (forall t. (Ooh t) => Tagged t r) -> x
01:20:08 <elliott> withInstance OohD ugh k = ugh k
01:20:08 <elliott> and this is ~~ambiguous~~
01:20:44 <oerjan> <elliott> also all swedes <-- erm i was contrasting him with Vorpal.
01:20:53 <CakeProphet> yes it could be cave man grunts or a Haskell program
01:20:55 <CakeProphet> highly ambiguous
01:20:58 -!- Patashu has quit (Ping timeout: 246 seconds).
01:22:26 <copumpkin> http://nextround.net/wp-content/uploads/2009/03/luther_burger.jpg
01:24:09 <elliott> hey copumpkin HOW DO DICTIONARIES WORK
01:24:09 <Sgelo> http://tvtropes.org/pmwiki/pmwiki.php/TroperTales/Akinator
01:24:15 <copumpkin> beats me
01:24:20 <copumpkin> I'll figure it out later
01:24:43 <elliott> oerjan: i think copumpkin needs some convincing :P
01:24:53 <copumpkin> get me a burger like that
01:24:54 <olsner> copumpkin: u r lazy, stop figuring-out-later
01:25:02 <olsner> tell us now
01:25:05 <elliott> i agree
01:25:20 <oerjan> olsner: you cannot use lazy as an insult on a haskeller
01:25:24 <olsner> *NAO
01:26:10 <copumpkin> :O
01:26:28 <elliott> http://www.reddit.com/r/fifthworldproblems/ good redesign
01:27:04 <oerjan> iirc fifthworldproblems is not a very typical reddit.
01:27:13 <oerjan> *sub-
01:27:19 <olsner> if it wasn't completely horrible it wouldn't appear here
01:27:32 <elliott> oerjan: you could click the link :P
01:27:44 <Sgelo> " Earlier this year hackers raided the computer networks of RSA (EMC), a marquee security firm that protects other companies computers. They stole some of the most valuable computer code in the world, the algorithms behind RSAs SecureID tokens, a product used by U.S. government agencies, defense contractors, and major banks to prevent hacking. It was like breaking into a heavily guarded locksmith and stealing the master combination tha
01:27:44 <Sgelo> t opened every vault in every casino on the Las Vegas Strip."
01:27:46 <elliott> (you may not quite understand without seeing http://www.reddit.com/r/circlejerk's new design)
01:27:48 <Sgelo> http://www.businessweek.com/printer/magazine/cyber-weapons-the-new-arms-race-07212011.html
01:28:01 <oerjan> ok if it is that obvious that i haven't clicked the link, it might be worth doing so
01:28:07 <Sgelo> Um, something is really really wrong if the _algorithms_ are the crucial part
01:28:19 <elliott> oerjan: click the circlejerk one first
01:28:27 <elliott> or it'll make even less sense than fifthworldproblems does
01:28:34 <olsner> ehm, Shelo seems to be up to something irrelevant
01:29:09 -!- Sgelo has changed nick to Sgeo.
01:29:15 <Sgeo> I am not Shazam. Or Shelo.
01:29:38 <olsner> that would... explain it
01:29:52 <kmc> oerjan, you can tell because they're speaking icelandic
01:30:03 <oerjan> kmc: wat
01:30:30 <olsner> kmc: hurr durr linkur durr gurr
01:30:45 <kmc> SA did the ironic Ron Paul fanclub already
01:31:04 <elliott> kmc: so did everyone, last election
01:31:05 <olsner> ... and kmc stopped?
01:31:22 <elliott> circlejerk does not aim for unique humour :P
01:31:33 <kmc> nobody knows how to learn erlang
01:31:44 <elliott> ok so kmc and olsner make sense to each other
01:31:49 <elliott> oerjan and olsner sometimes do but only sometimes
01:31:50 <kmc> i watched Erlang: The Movie three times
01:31:53 <elliott> and kmc makes no sense to oerjan
01:31:57 <elliott> and I'm confused
01:31:58 <olsner> elliott: no I don't
01:32:10 <olsner> (I hope)
01:33:10 <kmc> i gather Erlang is the best language to use if you want to talk to a Swedish person from 1987 on the telephone
01:34:11 <olsner> I think Swedish would be way better
01:34:49 <olsner> and I also think I will momentarily be way non-caring
01:35:11 <oerjan> sjá hestarnirnarni
01:41:16 <quintopia> :(
01:41:50 <elliott> iohooklmlm
01:42:42 <elliott> does anyone know where the details of ghc's datatype memory representation are on the trac
01:43:55 <oerjan> i think i looked at it once...
01:45:19 <kmc> what ever came of the tweetable interpreter in C idea
01:45:52 <elliott> Gregor is presumably still working on it
01:47:35 <kmc> i was wondering if you could do a string rewriting system of some kind
01:48:19 <oerjan> elliott: http://hackage.haskell.org/trac/ghc/wiki/Commentary/Rts/Storage/HeapObjects#DataConstructors
01:48:35 <Gregor> kmc: I thought of that too, but couldn't figure out a way to make it short enough.
01:48:50 <elliott> oerjan: that could be more helpful...
01:48:56 <elliott> kmc: == strings in C == long
01:49:04 <Gregor> kmc: My current one is 116 characters and has 32 bit addressing.
01:49:40 <kmc> size-constrained programming is fun
01:49:48 <kmc> i enjoyed http://io.smashthestack.org:84/intro/
01:49:53 <oerjan> elliott: it's also out of date, vectored returns have been abolished (as i discovered last i was browsing around these pages)
01:50:48 <elliott> oerjan: sigh :(
01:51:23 <elliott> kmc: http://golf.shinh.org/ ftw (ok the latest challenges have sucked a bit)
01:51:37 <elliott> also, I still have the code for that boot sector Forth...
01:51:44 <elliott> IIRC I fixed the stupid bug I have
01:51:45 <oerjan> elliott: there does not seem to be a specific case for instance dictionaries, though
01:52:03 <elliott> oerjan: well it's just a data type. it's a matter of getting the right info table things
01:52:12 <Gregor> kmc: int*a,b[9<<20];main(){a=b;while(scanf("%d",a++)>0);a=b;while(*a)a+=(a[*a]-=a[a[1]])?3:a[2];while(a>b)putchar(*--a);}
01:52:15 <Gregor> kmc: Thoughts appreciated :P
01:53:15 <elliott> kmc: do you know anything about the representation of regular data types, then? :-P
01:53:37 <kmc> yeah, a data value is a (possibly tagged) pointer to a StgClosure or whatever
01:53:48 <kmc> which has an info pointer and field values
01:53:49 <oerjan> elliott: oh hm the end of this page which i went through might be relevant then http://hackage.haskell.org/trac/ghc/wiki/Commentary/Compiler/DataTypes
01:54:17 <CakeProphet> Gregor: why do you reset a to b after the first while loop?
01:54:19 <oerjan> ok it doesn't say much
01:54:24 <elliott> kmc: what do the info pointers look like :P
01:54:26 <elliott> as in, what they point to
01:54:32 <kmc> some C struct
01:54:39 <elliott> REAL HELP :P
01:55:05 <kmc> grab a ghc tarball and look in include/ and rts/
01:55:14 <CakeProphet> Gregor: also I'm guessing the semicolon at the end of the last line of main is required?
01:55:51 <Gregor> CakeProphet: I reset a to b because otherwise *a is false.
01:56:00 <Gregor> CakeProphet: Yes, of course the semicolon is required ...
01:56:27 <CakeProphet> I ask because this is not required in Perl and I believe a few other languages.
01:56:50 <Gregor> Depends on whether it's a separator or terminator.
01:56:53 <Gregor> In C it's a terminator.
01:57:19 <elliott> I wonder what PAP actually stands for
01:57:31 <CakeProphet> post apocalyptic produce
01:58:32 <CakeProphet> Gregor: I'm trying to think of a macro that would reduce the size, but #define is quite a bit of character cost
01:58:35 <kmc> elliott, partial application
01:58:54 <Gregor> CakeProphet: Newline is terrible for twitter
01:58:57 <elliott> kmc: huh.
01:59:34 <kmc> http://hackage.haskell.org/trac/ghc/wiki/Commentary/Rts/Storage/HeapObjects
02:00:25 <elliott> yes, oerjan linked that :P
02:00:30 <elliott> apparently it's outdated though
02:00:34 <elliott> oh yay it has stuff about info table
02:00:34 <elliott> s
02:00:44 <CakeProphet> Gregor: well twitter is terrible for programs so who's at fault here?
02:00:45 <elliott> maybe it'll tell me what typeclasses' look like
02:00:48 <kmc> dunno how outdated but it does describe what a PAP is
02:00:53 <Gregor> CakeProphet: ... is it you?
02:01:04 <CakeProphet> ...no. never.
02:03:32 <CakeProphet> I'm guessing using for instead of while is equally costly because you can't omit the ;;
02:03:59 <Gregor> int*a,b[9<<20];main(){a=b;while(scanf("%d",a++)>0);while(*--a)a+=(a[*a]-=a[a[1]])?4:a[2];while(a>b)putchar(*--a);} // just saved two characters :)
02:04:11 <Gregor> Or wait, did I ... maybe it's unusable now :P
02:04:23 <Gregor> Ffffu, never mind :P
02:04:26 <Gregor> Don't woyk.
02:05:24 <elliott> Gregor: show original code again?
02:05:31 <Gregor> int*a,b[9<<20];main(){a=b;while(scanf("%d",a++)>0);a=b;while(*a)a+=(a[*a]-=a[a[1]])?3:a[2];while(a>b)putchar(*--a);}
02:05:33 * elliott is sceptical that 9<<20 will work
02:05:46 <Gregor> And yet ... it does!
02:05:56 <Gregor> It's a compile-time constant *shrugs*
02:06:02 <elliott> b[9<<20];main(a,z){while(scanf("%d",a++)>0);a=b;while(*a)a+=(a[*a]-=a[a[1]])?3:a[2];while(a>b)putchar(*--a);}
02:06:05 <elliott> this might work
02:06:16 <Gregor> a is an int, not a pointer.
02:06:20 <Gregor> Clever though.
02:06:53 <Gregor> That is, in your code, a is an int. It should be a pointer.
02:07:25 <Gregor> *a;b[9<<20];main(){a=b;while(scanf("%d",a++)>0);a=b;while(*a)a+=(a[*a]-=a[a[1]])?3:a[2];while(a>b)putchar(*--a);} // apparently this works though lol
02:07:36 <elliott> Gregor: Yeah, but you can use pointers as int a lot of the time.
02:07:42 <elliott> Try it gcc set to K and R?
02:07:51 <elliott> If it can even do K and R code.
02:07:55 <Gregor> It can't :P
02:07:56 <elliott> Gregor: int is implicit obviously
02:07:57 <Gregor> But it works in C99
02:08:02 <Gregor> Which is crazy.
02:08:02 <elliott> It does?
02:08:05 <elliott> Like, my code?
02:08:11 <Gregor> Oh
02:08:14 <Gregor> No, mine
02:08:19 <elliott> int has always been implicit, so yeah
02:08:22 <elliott> Gregor: Can't you do
02:08:25 <Gregor> elliott: But your code is wrong, because a is an int, not an int* in yours.
02:08:27 <elliott> b[9<<20],*a=b;
02:08:28 <elliott> ?
02:08:32 <Gregor> Hm
02:08:36 <elliott> Gregor: And yes but you can dereference an int if your compiler is lax enough
02:08:51 <Gregor> lol
02:09:01 <Gregor> elliott: Apparently *a=b worked, at least GCC-wise :P
02:09:05 <Gregor> I'll try this in OpenWatcom some time :P
02:09:09 <elliott> Gregor: It's obviously valid
02:09:11 <Gregor> 111 now :)
02:09:22 <elliott> "a=b;while(scanf("%d",a++)>0);a=b"
02:09:24 <elliott> Gregor: Why not
02:09:25 <Gregor> elliott: Yeah, it is, but it's all wtf.
02:09:32 <elliott> "while(scanf("%d",b++)>0);"
02:09:32 <elliott> Or hmm
02:09:36 <elliott> Can you increment an array :P
02:09:38 <Gregor> No :P
02:09:39 <elliott> I guess not
02:09:40 <Gregor> b[9<<20];*a=b;main(){while(scanf("%d",a++)>0);a=b;while(*a)a+=(a[*a]-=a[a[1]])?3:a[2];while(a>b)putchar(*--a);}
02:10:05 <elliott> Gregor: a+=(a[*a]-=a[a[1]])
02:10:09 <elliott> I refuse to believe that's well-defined.
02:10:13 <Gregor> I knew that int was the default type for everything, what I /didn't/ know is that you can still make pointers and arrays without saying "int"
02:10:18 <elliott> There is _definitely_ sequencing point junk going on there.
02:10:42 <CakeProphet> > (length "#define W(x) while(x)\n") - (length "while" * 3 + 3)
02:10:43 <lambdabot> 4
02:11:02 <Gregor> elliott: Uhh, no? a doesn't change on the RHS, so there's only one order that can be implemented in. Now, that may very well still be undefined by spec, even though it's only implementable one way ...
02:11:05 <CakeProphet> L(
02:11:09 <CakeProphet> *:(
02:11:20 <CakeProphet> or wait
02:11:27 <elliott> Gregor: Hmmmmmmmmmmmmmmmmmmmmmm
02:11:32 <CakeProphet> > (length "#define W while\n") - (length "while" * 3 + 3)
02:11:33 <lambdabot> -2
02:11:34 <elliott> fizzie: Deewiant: Language lawyer ping
02:11:35 <CakeProphet> :)
02:11:44 <elliott> CakeProphet: Requires \n.
02:11:55 <CakeProphet> yeah I'm juts golfing. twitter is lame. :P
02:11:59 <elliott> Gregor: Oh hmm, the ?: might count as a sequencing point
02:12:10 <Gregor> elliott: That'd be convenient, but I doubt it :P
02:12:19 <elliott> Gregor: OK so scanf is lame, surely you can input it in a nicer way.
02:12:36 <Gregor> elliott: using e.g. getchar is one character more.
02:13:02 <elliott> Gregor: Arglist?
02:13:16 <elliott> Hope that the pointers to the arguments work out right :P
02:13:24 <elliott> Hmm, I wonder if POSIX lets you send arbitrary pointers over exec
02:13:26 <CakeProphet> > (length "#define W while\n") - (length "while" * 3 - 3)
02:13:27 <lambdabot> 4
02:13:29 <elliott> Well
02:13:31 <elliott> Arbitrary integers as pointers
02:13:53 <CakeProphet> I think that is the correct calculation. you are only losing 12 characters from shortening the whiles.
02:13:59 <Gregor> Uhh, no? That ... makes no sense. Your memory layout is unrelated on the other side.
02:14:14 <CakeProphet> UNLESS
02:14:25 <CakeProphet> > (length "#define W while(\n") - (length "while(" * 3 - 3)
02:14:26 <lambdabot> 2
02:14:33 <elliott> Gregor: Why can't I just execv(...,(ptr)99,(ptr)909090) X-D
02:14:40 <elliott> Yeah OK it wouldn't work
02:15:03 <Gregor> elliott: Idonno about POSIX, but the ELF ABI definitely don't work that way :P
02:15:14 <Gregor> It copies the args into the top of the stack when you call.
02:15:19 <Gregor> So they have to be ... y'know ... strings.
02:15:56 <elliott> _You're_ a string.
02:16:24 <elliott> while(a>b)putchar(*--a);
02:16:26 <elliott> Gregor: How about:
02:16:28 <elliott> putchar(b);
02:16:31 <elliott> Just null-terminate your output
02:16:32 <CakeProphet> > (length "#define W ;while(\n") - (length ";while(" * 3 - 4)
02:16:33 <lambdabot> 1
02:16:39 <CakeProphet> bah
02:16:40 <Gregor> elliott: ITYM puts
02:16:46 <elliott> Yeah yeah
02:16:52 <elliott> Gregor: *a=0;puts(b);
02:16:52 <Gregor> elliott: b is an int *
02:16:59 <Gregor> elliott: So that's platform-specific behavior.
02:17:03 <elliott> Gregor: So? It's not UB
02:17:09 <elliott> I don't think
02:17:17 <elliott> You might need to cast via void-pointer to be pedantically correct
02:17:19 <elliott> Or union
02:17:20 <Gregor> Hello? Endianness.
02:17:26 <elliott> yes, it's platform
02:17:33 <elliott> but so what, just mangle it afterwards
02:17:38 <Gregor> As it stands, this is platform-neutral.
02:17:44 <Gregor> I wurve that :P
02:17:46 <elliott> Your mom is platform neutral
02:17:52 <elliott> Anyway no it isn't because int is platform-specific
02:17:56 <elliott> You are living a lie
02:18:39 <Gregor> Mmmmmmmm ... you can write code that supports ints of any size >= something. So, although it exposes platform differences, you don't need to adapt to them to write code.
02:18:59 <elliott> Living
02:19:00 <elliott> a
02:19:00 <elliott> lie
02:19:02 <Gregor> (Because people will totally write code in this :P )
02:19:27 <CakeProphet> if the first while had a ; in front of it then my macro would be exactly equivalent to the current code in byte length. :P
02:19:33 <elliott> b[9<<20],*a=b;main(){while(scanf("%d",a++)>0);a=b;while(*a)a+=(a[*a]-=a[a[1]])?3:a[2];for(;a>b;putchar(*--a));}
02:19:35 <elliott> Darn, same length
02:20:59 <elliott> Gregor: Your current output is limited in length
02:21:05 <elliott> So I propose return*a;
02:21:08 <elliott> Which is also limited but oh well
02:21:14 <Gregor> Oh come on :P
02:21:39 <Gregor> I know I didn't set strict requirements, but I also don't want to make it so you can't write 99 bottles of beer :P
02:22:36 <elliott> I don't like your practice-oriented thinking
02:22:46 <Gregor> I'm walkin' a line here X-P
02:22:54 <elliott> Gregor: b[9<<20],*a=b;main(){while(scanf("%d",a++)>0);for(a=b;*a;)a+=(a[*a]-=a[a[1]])?3:a[2];while(a>b)putchar(*--a);}
02:22:57 <elliott> One fewer byte
02:23:13 <Gregor> Oh, clever
02:23:19 <elliott> Gregor: b[9<<20],*a=b;main(){for(scanf("%d",a++)>0,a=b;*a;)a+=(a[*a]-=a[a[1]])?3:a[2];while(a>b)putchar(*--a);}
02:23:21 <elliott> Many fewer
02:23:38 <elliott> One hundred and three bytes :)
02:23:40 <CakeProphet> oh so you can omit the ;'s
02:23:53 <CakeProphet> er wait
02:23:54 <CakeProphet> nevermind
02:23:55 <Gregor> CakeProphet: ... no.
02:23:58 <Gregor> Whoah, wtf just happened though.
02:24:01 * CakeProphet read the code.
02:24:03 <Gregor> I have to re-understand this code X-D
02:24:21 <Gregor> elliott: Wait ... I'm not confident that your resultant code ... does anything vaguely sensible.
02:24:45 <elliott> Gregor: Why not?
02:24:53 <elliott> Gregor: , sequences.
02:25:00 <CakeProphet> before scanf was in a loop though.
02:25:04 <CakeProphet> now it is the initializer
02:25:04 <oerjan> it seems to me like it reads only one int
02:25:06 <elliott> for(a;b;c)d; is like a;while(b){d;c;}
02:25:18 <elliott> And a,b;c
02:25:20 <elliott> is like a;b;c roughly
02:25:21 <Gregor> Yeah, with scanf as an initializer this is nonsense.
02:25:24 <elliott> Gregor: So my transformation is perfectly valid.
02:25:26 <elliott> Uhh, why?
02:25:30 <elliott> Oh
02:25:30 <elliott> Duh
02:25:31 <Gregor> Because it was in a loop ...
02:25:35 <elliott> Yeah, right >_>
02:25:36 <elliott> Hmm
02:25:46 <Gregor> Your program can be no more than one int :P
02:25:59 -!- sebbu2 has joined.
02:26:23 <elliott> Gregor: Well, as long as int is big enough
02:26:29 <Gregor> elliott: It ... is not :P
02:26:47 <Gregor> elliott: Every program will immediately terminate.
02:27:09 <elliott> That's such goal-oriented thinking.
02:27:17 <elliott> Mine is size-oriented, which is your original goal.
02:27:29 <Gregor> I have many goals!
02:27:34 <Gregor> Size is just the packaging of those goals :P
02:27:51 <CakeProphet> more #define less twitter plz
02:28:01 <Gregor> CakeProphet: #define iz sukk
02:28:11 <elliott> Gregor: So are we golfing the Kolgomorov complexity of an FSM
02:28:14 <Gregor> But #esoteric ... #esoteric is awesome 8-D
02:28:24 <elliott> Can we do it in a language that isn't C so that we can actually acheive TCness :P
02:28:45 <Gregor> elliott: Suggestion? sed maybe?
02:28:45 <CakeProphet> > (length "#define W(x);for(;x;);\n") - (length ";while();" * 3 - 4)
02:28:46 <lambdabot> 0
02:28:50 -!- zzo38 has joined.
02:28:52 -!- sebbu has quit (Ping timeout: 245 seconds).
02:28:52 <Gregor> It has to be terrible :P
02:29:04 <elliott> Gregor: HaskellHaskellHaskellHaskellHaskellHaskellHaskellHaskellHaskellHaskellHaskellHaskellHaskellHaskellHaskellHaskellHaskell
02:29:04 <CakeProphet> oh that macro won't even help
02:29:11 <elliott> Or J
02:29:15 <elliott> J has a really tiny Factran interpreter
02:29:17 <elliott> Like forty bytes
02:29:21 <CakeProphet> Gregor: perl for great win
02:29:22 <Gregor> elliott: Can you write one-line Haskell programs DURPADURP LOLOLOL I DONT GET SYNTAXES
02:29:36 <elliott> Yes
02:29:40 <elliott> ({~1i.~(=<.))@:*
02:29:44 <elliott> TC interp in J
02:29:54 <Gregor> What's J though :P
02:30:08 <elliott> Gregor: ...dude, really?
02:30:14 <elliott> Please tell me you know of J :P
02:30:31 <elliott> Gregor: It's the really concise ASCII APL derivative? Array language?
02:30:32 <Gregor> Ahhhhhhnope
02:30:35 <elliott> Come on, it's been talked about tons in here.
02:30:43 <Gregor> I haven't listened :P
02:30:45 <kmc> a FRACTRAN interpreter in Haskell could be pretty short
02:30:51 <CakeProphet> Gregor: while elliott seems to be a Haskell fanboy, he actually secretly worships J.
02:30:58 <CakeProphet> and only talks about it occasionally to keep it a secret.
02:31:05 <elliott> J is pretty close to a perfect language, apart from its IO facilities which suck and its lack of bignums
02:31:13 <elliott> But it's pretty much perfect in its niche
02:32:49 <elliott> oerjan: ooh, someoen wrote a fractran self-interp
02:32:59 <oerjan> whee
02:33:02 <elliott> http://www.math.uiuc.edu/~beder/interpreter.fr
02:33:13 <elliott> details at http://stackoverflow.com/questions/1749905/code-golf-fractran/1773868#1773868
02:33:30 <elliott> http://www.math.uiuc.edu/~beder/interpreter.frp
02:33:36 <CakeProphet> Perl is the best choice for all golfs.
02:34:58 <elliott> oerjan: oh wow, someone made a tiny one
02:35:02 <elliott> http://stackoverflow.com/questions/1749905/code-golf-fractran/1802570#1802570
02:35:13 <elliott> only 84 fractions
02:35:22 <elliott> and fast, too
02:37:10 <CakeProphet> Gregor: with Perl your golfs will be butiful and eliphant
02:37:18 <Gregor> Pffff
02:37:24 <Gregor> You guys
02:37:27 <Gregor> And your not-C languages.
02:38:12 <CakeProphet> though J looks like an excellent choice from what I can tell.
02:38:14 <CakeProphet> better than Perl.
02:38:17 <CakeProphet> for golfing
02:38:30 <elliott> So does anyone know OpenCL
02:38:31 <elliott> At all
02:38:31 <elliott> Ever
02:38:35 <elliott> I'm going to kill someone
02:38:50 <elliott> nm: /usr/lib/nvidia-current/libOpenCL.so: no symbols
02:38:54 <elliott> REVEAL YOUR SECRETS
02:39:13 <CakeProphet> elliott: I know I click a little black box with a > and _ in it on my top panel to open command line
02:39:16 <CakeProphet> is that the same thing? :3
02:39:27 <CakeProphet> I am glad to help.
02:39:37 <elliott> why did you type that and hit enter
02:39:46 <elliott> NO I DONT WANT TO WATCH A VIDEO TUTORIAL YOU SHITFACKS
02:40:26 <elliott> http://developer.amd.com/sdks/AMDAPPSDK/assets/AMD_APP_SDK_Getting_Started_Guide_v2.4.pdf
02:40:27 <elliott> omg
02:40:28 <elliott> you shits
02:40:29 <elliott> die
02:40:30 <elliott> in a fucking
02:40:30 <elliott> fire
02:40:52 <elliott> OK MAYBE THER EIS A CUDA TUTORIAL MAYBE I WONT KILL EVERYONE
02:41:25 <CakeProphet> elliott - future serial killer
02:42:58 <kmc> http://www.malevole.com/mv/misc/killerquiz/ ?
02:43:45 <CakeProphet> I should make a language that consists entirely of Unicode character commands and nothing else
02:43:59 <elliott> CakeProphet: way ahead of you, years ago
02:44:09 <CakeProphet> FUCK YOUUUU
02:44:58 <oerjan> > let f l=unfoldr(fmap(join(,)).find((<2).denominator).map(*)l)in f[3%2]72
02:44:59 <lambdabot> Couldn't match expected type `GHC.Real.Ratio a
02:44:59 <lambdabot> ...
02:45:07 <oerjan> grmbl
02:45:15 <elliott> http://www.codeproject.com/KB/GPU-Programming/IntroToOpenCL.aspx ;; so I finally find a non-video tutorial about OpenCL and it's using fucking C++ bindings.
02:45:48 <elliott> "See the OpenCL™ 1.0 specification for the corresponding C API."
02:45:54 <elliott> god i hope itsfreely available
02:46:02 <elliott> YES IT IS YES YES YES
02:46:06 <elliott> YESSSSSSSSSSS
02:46:07 <elliott> http://www.khronos.org/registry/cl/sdk/1.1/docs/man/xhtml/
02:46:10 <elliott> YESSSSSSSSSSSSS
02:47:04 <oerjan> > let f l=unfoldr(fmap(join(,)).find((<2).denominator).mapM(*)l)in f[3%2]72
02:47:06 <lambdabot> [108 % 1,162 % 1,243 % 1]
02:47:22 -!- GreaseMonkey has joined.
02:47:22 -!- GreaseMonkey has quit (Changing host).
02:47:22 -!- GreaseMonkey has joined.
02:49:04 <elliott> oh my god
02:49:07 <elliott> http://www.khronos.org/registry/cl/specs/opencl-1.1.pdf
02:49:08 <elliott> look at
02:49:10 <elliott> the bullet points it uses
02:49:19 <elliott> I'm pretty sure that's one of the Word defaults
02:49:20 <elliott> and it is so
02:49:21 <elliott> terrible
02:49:22 <elliott> ????
02:49:59 * Sgeo ponders the Reia language
02:52:13 <CakeProphet> #esoteric-minecraft IS A POLICE STATE BAAAAAWWW
02:53:14 <elliott> I'll unban me if you find a decent chunk of public domain OpenCL sample code because this reference is terrible
02:53:17 <elliott> By me I mean you
02:54:02 <monqy> Hi, I'm Kafka the Cat, and I'm here to take you on a quick tour of the Reia programming language.
02:54:05 <monqy> http://reia-lang.org/images/kafka.jpg
02:54:15 <elliott> hi kafka
02:54:19 <monqy> its staring into my soul
02:54:47 <elliott> I think that's what Kafka's meant to do
02:58:29 <monqy> so I'm trying to find what's interesting about reia
02:58:38 <monqy> sgeo do you know
02:59:10 <CakeProphet> elliott: http://www.google.com/search?sourceid=chrome&ie=UTF-8&q=opencl+sample
02:59:13 <CakeProphet> unban?
02:59:34 <elliott> I guess some of those might work, I'll look at them in a minute
03:00:09 * CakeProphet has mad skills
03:00:31 <monqy> reia commit message: Get rid of the weird ass "Main" module which made no sense, factoring it into
03:00:32 <elliott> It's not my fault you googled with samples and me with examples
03:00:34 <monqy> the System module. Oh, and "string".puts() is now officially the way you should be printing strings in Reia. If someone asks you for a Reia hello world and you tell them System.puts("Hello, World!") you're DOING IT WRONG
03:00:56 <CakeProphet> elliott: lulz I'm just mad at google knowledge dawg
03:01:05 <CakeProphet> bitches be all like "yo how u get so god?"
03:02:35 <CakeProphet> I be like "whatev iz jus how i roll"
03:05:03 <elliott> Hight Dynamic Range Rendering with God Rays Effect Sample
03:05:05 <elliott> ITS TOO COMPLIC;ATED
03:05:11 <oerjan> and google is mad at understanding CakeProphet spelling
03:06:06 <monqy> none of the reia examples on the reia github are interesting they're all boring
03:06:50 <oerjan> googling "lol y cats land on feet yo" gives some good hits
03:06:56 <Sgeo> monqy, a not terrible language on the Erlang VM?
03:07:09 <CakeProphet> !wacro
03:07:10 <EgoBot> ETOGRHS
03:07:10 <monqy> how is it not terrible
03:07:18 <monqy> and how are other languages on the erlang vm not not terrible
03:07:33 <Sgeo> monqy, is Erlang considered a decent language?
03:07:43 <Sgeo> Or are there other languages on the Erlang VM that I don't know about?
03:07:48 <kmc> "the amazing power of blocks"
03:07:49 <CakeProphet> Erlang is decent, yes.
03:07:53 <monqy> I forget nearly everything I ever knew about Erlang
03:08:22 <monqy> learned the basics one day, never bothered to use it, forgot it
03:08:49 <elliott> the story of monqy and erlang
03:09:07 <CakeProphet> it has a very dependable standalone platform, good concurrency support, and allows hot swapping of code. The language itself is somewhat mediocre I guess but the platform is pretty solid.
03:09:11 <oerjan> evil scientist project #663: breed cats to land on head
03:09:21 <elliott> what does very dependable standalone platform even mean
03:09:26 <elliott> "the interpreter doesn't segfault much"?
03:09:29 <CakeProphet> yes.
03:09:38 <CakeProphet> standalone as in standalone
03:09:44 <CakeProphet> dependendable as in dependable.
03:09:44 <monqy> well I certainly want a segfaulty interpreter
03:09:46 <monqy> er
03:09:47 <CakeProphet> platform as in platform.
03:09:49 <monqy> I don't want that
03:09:50 <CakeProphet> it's all very simple.
03:09:54 <monqy> but I guess saying I want it works too
03:10:28 <monqy> though if I was constructing it in that manner I would have started with "yes" and left out the "certainly"
03:10:48 <kmc> are there people who actually understand Haskell's type system, but still prefer dynamic types in general?
03:10:56 <kmc> i don't know many such people, but i spend all day talking to fellow Haskell zealots
03:11:18 <elliott> kmc: the only examples I know involve people whose self-asserted understanding of types I doubt
03:11:19 <CakeProphet> kmc: I have a good grasp of Haskell's type system but also find dynamic typing to be a good approach as well.
03:11:19 <monqy> I remember disliking erlang's syntax and type system
03:11:22 <Sgeo> What would Bracha count as?
03:11:23 <kmc> most of the arguments against i hear are "Java is so verbose!" and "dynamic types give me a single ad-hoc variant type!"
03:11:23 <elliott> there's one of them
03:11:28 <CakeProphet> kmc: I am a language agnostic. :P
03:11:38 <elliott> CakeProphet: tell me about how much you love PHP then?
03:11:43 <CakeProphet> >_>
03:11:51 <CakeProphet> PHP is like perl if perl were not a good language.
03:11:54 <Sgeo> elliott, one of my classes will involve PHP
03:11:54 <CakeProphet> and not perl.
03:11:56 <Sgeo> :(
03:11:57 <kmc> i use dynamic types in Haskell sometimes
03:12:05 <monqy> lets laugh at sgeos class
03:12:07 <elliott> Sgeo: i don't care, we've told you to transfer about nine billion times
03:12:09 <monqy> ha h aha :''(
03:12:15 <elliott> you've got one person to blame (the person is you)
03:12:20 <kmc> it seems clear that checking should be the default, and checks disabled when necessary, rather than the opposite
03:12:29 <CakeProphet> elliott: come on can't I be neutral and also have strong opinions of bad languages, as long as my preferred languages go across the spectrum?
03:12:41 <CakeProphet> it still makes me neutral about categories of languages.
03:12:47 <elliott> kmc: haskell programs still do dynmic type checking, mind you. like input validation.
03:12:51 <monqy> categories of languages?
03:12:55 <CakeProphet> classifications
03:12:58 <CakeProphet> whatever term you want
03:13:12 <kmc> sure
03:13:13 <CakeProphet> dynamic typing, static typing, lazy, strict, functional, OO, procedural, etc
03:13:20 <CakeProphet> you know, categories. of. languages.
03:13:41 <kmc> mostly the categories are bullshit
03:13:52 <monqy> which is why I asked
03:13:52 <kmc> at least if you want them to form some kind of taxonomy
03:14:00 <kmc> there's a many-dimensional space of language attributes
03:14:10 <kmc> which combine and co-exist and interact in all kinds of interesting ways
03:14:19 <CakeProphet> I want them to form words that can describe what I am talking about. is that like a taxonomy?
03:14:52 <kmc> i feel the main reason to rigidly divide the world into functional and OOP languages is to justify ignoring "functional languages", or to justify hating on OOP languages without understanding them
03:14:52 <CakeProphet> no I don't think that they're discrete categories.
03:16:04 * oerjan considers static type checking of input by quantum suicide
03:16:04 <CakeProphet> honestly what's wrong with having a word to describe an observed characteristic shared by multiple languages?
03:16:15 <CakeProphet> is it bullshit?
03:16:45 <oerjan> every universe in which someone tries sql injection to your service is destroyed.
03:17:41 <CakeProphet> oerjan: sounds like a risky security mechanism.
03:17:52 <CakeProphet> unless we're the alpha timeline of course.
03:17:55 <CakeProphet> then everything is fine.
03:18:35 <elliott> if there's quantum immortality, we're fine.
03:19:17 <elliott> OpenCL is fucking weir
03:19:18 <elliott> d
03:19:26 <elliott> I should write a Haskell DSL that compiles to it and then never use it again
03:19:27 <zzo38> elliott: Well, sort of. Quantum immortality, means, even if you are dead, you are still live in other timeline, therefore you can still observation and doing everything like before.
03:19:31 <zzo38> Just not in the other timeline.
03:20:11 <zzo38> I think Haskell's type system is mathematically good type system. You can use classes in some cases too.
03:20:17 <elliott> HOLY SHIT THESE EXAMPLES ARE TERRIBLY-WRITTEN >_<
03:20:20 <elliott> ciErrNum = clEnqueueWriteBuffer(cqCommandQueue, cmDevSrcA, CL_FALSE, 0, sizeof(cl_float) * szGlobalWorkSize * 4, srcA, 0, NULL, NULL);
03:20:21 <elliott> ciErrNum |= clEnqueueWriteBuffer(cqCommandQueue, cmDevSrcB, CL_FALSE, 0, sizeof(cl_float) * szGlobalWorkSize * 4, srcB, 0, NULL, NULL);
03:20:23 <elliott> Or rather the API is terrible
03:20:25 <elliott> But jesus
03:21:43 <elliott> "oclCheckErrorEX" I see Microsoft had their way with this API >_<
03:23:02 <monqy> what of the alternatives to opencl, assuming they're good and exist??
03:24:39 <CakeProphet> as duration of computer use t increases, number of idling terminals n increases
03:24:42 <CakeProphet> CakeProphet's law.
03:28:34 <elliott> monqy: CUDA, nvidia-only and basically deprecated and probably no nicer
03:28:48 <elliott> ok I don't have OpenCL.h. I guess I need to download the "SDK"
03:29:03 <elliott> so much for an open fucking standard, the .hs are available online but I doubt that'll do me much good
03:29:33 <elliott> On the same day Khronos Group announced the new OpenCL v1.1 specification update (June 14th, 2010), NVIDIA released OpenCL v1.1 pre-release drivers and SDK code samples to all GPU Computing registered developers. Log in or apply for an account to download latest NVIDIA Drivers and Toolkits.
03:29:36 <elliott> I'm going to kill you.
03:29:39 <elliott> I'm going to eat your brains.
03:29:51 <elliott> I am not telling you where I fucking live you pieces of crap aaargh give me the fucking header files
03:33:06 <monqy> uhh elliott
03:33:10 <monqy> http://www.khronos.org/registry/cl/ ?????
03:33:17 <monqy> http://www.khronos.org/registry/cl/api/1.1/opencl.h ?????
03:33:25 <elliott> monqy: Yeah I found those
03:33:28 <monqy> or is that not the right file
03:33:28 <monqy> oh
03:33:39 <CakeProphet> elliott: unban plz
03:33:46 <CakeProphet> <3 <3 <3 <3 <3 <# <#
03:34:06 <elliott> CakeProphet: The links you found didn't really help me, but fine
03:34:10 <elliott> No more insulting greatness, though
03:34:49 <CakeProphet> elliott is the worst op of all.
03:35:02 <oerjan> CakeProphet: noted.
03:35:09 <CakeProphet> his greatness is, well, not great.
03:35:15 * oerjan cackles evilly
03:35:16 <elliott> oerjan: excuse me, I banned him for insulting the greatest musical work of our century.
03:35:23 <elliott> It would be crime to let him stay.
03:35:25 <oerjan> oh?
03:35:39 -!- mauke has quit (Disconnected by services).
03:35:42 -!- mauke_ has joined.
03:35:43 <elliott> oerjan: yes (Insane Clown Posse collaborating with Jack White to cover Mozart's Lich Mich im Arsch, obviously)
03:36:34 <oerjan> I ... SEE
03:37:15 -!- MDude has changed nick to MSleep.
03:37:17 * CakeProphet is by defintion, unbannable for any legitimate reasons
03:38:10 -!- mauke_ has changed nick to mauke.
03:39:32 <elliott> CakeProphet: Hey, I'm going to reban you again, because the nvidia code you linked me to uses fucktons of helpers that I can't find the definitions of
03:40:13 <CakeProphet> ban google lulz
03:41:02 <CakeProphet> I thought I did was good???
03:42:50 <monqy> no never
03:53:15 <elliott> OpenCL error on line 37: CL_OUT_OF_HOST_MEMORY
03:53:15 <elliott> I..
03:54:27 <elliott> Oh, hmm.
03:55:57 <elliott> monqy: i am just going to write this one program and then write a haskell library that symbolically compiles code to OpenCL so that I never have to do this again......
03:57:43 <monqy> a good idea
04:02:24 -!- ive has joined.
04:04:21 <kmc> aren't there a couple of those already?
04:04:54 <elliott> kmc: Are you thinking of GPipe?
04:04:57 <elliott> That just does OpenGL.
04:05:08 <elliott> OpenCLRaw library: The OpenCL Standard for heterogenous data-parallel computing
04:05:11 <elliott> is the only grep on hackage for opencl
04:05:30 <elliott> There's a CUDA binding too but it's low-level.
04:05:37 <elliott> I imagine you _are_ thinking of GPipe since it was publicised a while back.
04:05:37 <kmc> there's Nikola
04:05:40 <kmc> which might be CUDA too
04:05:58 <elliott> Hmm, no Nikola on Hackage but I think I've heard of it before.
04:06:12 <elliott> Still, it will inevitably be inferior to what I write.
04:06:28 <elliott> "We describe Nikola, a first-order language of array computations embedded in Haskell that compiles to GPUs via CUDA"
04:06:30 <elliott> kmc: Yeah, CUDA.
04:07:03 <kmc> there's also vague mutterings about a GPU backend to Double Penetration Haskell
04:07:11 <kmc> sorry Data Parallel Haskell
04:07:25 <elliott> MEH
04:07:30 <elliott> That requires, like, hacking GHC and stuff.
04:07:51 <kmc> weren't you begging me for details of the StgClosure struct layout earlier?
04:08:18 <elliott> kmc: Yeah, but I was doing it all from within the cosy confines of a Haskell file.
04:11:34 <elliott> kmc: Oh, I forgot that's why I disliked DPH
04:11:36 <elliott> (No typeclasses)
04:17:07 <elliott> kmc: Thanks for the pointer to Nikola, I think I can steal a lot of things from this paper
04:18:25 <kmc> cool
04:24:41 <copumpkin> elliott: you not asleep yet?
04:25:30 <elliott> copumpkin: You not asleep yet?
04:25:34 <elliott> And furthermore: What _is_ sleep?
04:25:38 <copumpkin> ah
04:25:42 <copumpkin> one of those
04:26:05 -!- derrik has joined.
04:28:38 -!- augur has joined.
04:33:21 <elliott> HOW DOES OPENCL EVEN WORK
04:33:24 <elliott> WHAT IS LIFE
04:35:01 <elliott> HOW CAN YOU BE OUT OF HOST MEMORY
04:35:02 <elliott> HOW
04:35:32 <oerjan> it was leaked for the use of skynet
04:42:47 <elliott> Hey oerjan
04:42:52 <elliott> YOU GET TO HELP ME WITH MY OPENCL COED
04:43:04 <CakeProphet> Why is Opeth so good?
04:43:16 <CakeProphet> is it because they are swedes?
04:43:19 <elliott> make my code work
04:43:20 <elliott> or die
04:43:24 <elliott> You have free will.
04:43:35 <CakeProphet> but I believe in determinism
04:43:38 <CakeProphet> therefore I don't
04:52:25 <elliott> hey oerjan how does opencl........
04:52:27 <elliott> work
04:54:09 <shachaf> oerjan: Are you going to HacBeans?
04:54:15 <shachaf> elliott: Are you going to HacBeans?
04:54:22 <oerjan> no.
04:54:37 <elliott> shachaf: Maybe if you can tell me what typeclass dictionaries look like in memory I will :-P
04:54:57 <shachaf> elliott: Just like any other kind of dictionary?
04:55:01 <oerjan> elliott: also, i know almost nothing about opencl.
04:55:29 <elliott> oerjan: Neither do I!
04:55:34 <elliott> shachaf: Woo
04:55:41 <oerjan> what a coincidence!
04:58:27 <elliott> How can you run out of memory good GOD
04:58:32 <elliott> I'm going to try PyOpenCL
04:58:40 <monqy> pyopencl...
04:58:53 <monqy> how are you running out of memory
04:58:53 <monqy> how
04:58:57 <monqy> how does that happen
04:59:01 <monqy> or work
05:00:12 <copumpkin> elliott: just out of curiosity, why are you doing all that unsafe stuff to pass custom dictionaries, rather than just constructing a custom instance?
05:00:38 <elliott> copumpkin: You can't do that at runtime
05:00:57 <copumpkin> data OrdInstance a = OrdInstance (a -> a -> Bool)
05:01:00 <kmc> you can, effectively
05:01:00 <copumpkin> data OrdInstance a = OrdInstance (a -> a -> Bool) a
05:01:12 <copumpkin> instance Ord (OrdInstance a) where
05:01:14 <elliott> That doesn't really work
05:01:17 <copumpkin> :P
05:01:22 <copumpkin> you can't guarantee they're the same?
05:01:26 <elliott> class Foo a where bar :: (forall f. f a -> g a) -> g ()
05:01:43 <elliott> I mean you can do it for each individual class
05:01:53 <elliott> But I'm not sure you can really do it in general
05:01:57 <elliott> I might be wrong
05:02:01 <elliott> But anyway bundling it with values like that is gross
05:02:14 <elliott> copumpkin: Anyway, this started out as something which let you define an instance for a newtype and then use that as the instance for the main type in context
05:02:29 <copumpkin> ah
05:02:32 <elliott> i.e. define a crazy show instance for a newtype over Ints and then use it as an instance for Ints in a certain context
05:02:49 <elliott> I'm just trying to generalise that by coercing the obvious record translation of a class into my existential dictionary type
05:03:17 <elliott> Which lets you construct, at runtime, an arbitrary instance record for a type, and then use it as an instance for that type for some code
05:03:50 <elliott> The problems are twofold: one, GHC likes to make a bunch of correct assumptions about instances that my crazy code violates; two, I can't get record → dictionary coercion to work quite right, although I've had some very promising failures.
05:04:07 <elliott> I'm focusing on the latter because I have this sneaking suspicion the former might not be entirely resolvable.
05:05:09 <elliott> >>> ctx = cl.create_some_context()
05:05:09 <elliott> Traceback (most recent call last):
05:05:09 <elliott> File "<stdin>", line 1, in <module>
05:05:09 <elliott> File "/usr/lib/pymodules/python2.6/pyopencl/__init__.py", line 346, in create_some_context
05:05:09 <elliott> return Context(devices)
05:05:10 <elliott> pyopencl.RuntimeError: Context failed: out of host memory
05:05:14 <elliott> Oh good, at least it fails with the bindings too.
05:06:53 <CakeProphet> yes consistency of failure is a good thing .
05:07:28 <copumpkin> hmm
05:08:15 <elliott> copumpkin: Hmm?
05:08:57 <elliott> Maybe my GPU just has no memory :|
05:10:20 <copumpkin> I'll rent you my extensive GPU collection if you want
05:10:28 -!- derrik has quit (Read error: Connection reset by peer).
05:11:03 <elliott> copumpkin: I'll take you up on that, if a restart doesn't fix things
05:11:06 -!- derrik has joined.
05:11:16 -!- derrik has left.
05:11:16 <copumpkin> actually, my machine is offline right now
05:11:21 <copumpkin> due to annoying linux issues
05:11:27 <copumpkin> otherwise I'd probably just let you use it for free
05:11:28 <zzo38> The "dviout" program seems to have some mistakes in it, such as lack of all commands available in menus and keyboard configuration, and some things don't work. But in general the program works OK, and in fact it is the only one that can print.
05:11:32 <copumpkin> assuming you don't peg my GPUs for days on end
05:12:57 -!- elliott has quit (Read error: Connection reset by peer).
05:13:08 -!- elliott has joined.
05:13:12 <zzo38> I want to use "CMYKX" color specials, where the "X" parameter is like "K" but is used only on printers that do not print in colors (or if color printing is turned off).
05:13:16 <elliott> Now it's happy... I guess I really was out of ram :-|
05:13:17 <CakeProphet> copumpkin: no worries, I don't think any of us are into that stuff.
05:13:53 <zzo38> (Each parameter is one byte in range 0-255)
05:15:35 <CakeProphet> time to learn IMAP I guess.
05:16:53 * CakeProphet skims through dozens of RFCs
05:19:47 <CakeProphet> also nevermind just one actually.
05:24:35 <elliott> OpenCL error on line 62: CL_BUILD_PROGRAM_FAILURE
05:24:36 <elliott> NOT HELPFUL
05:25:03 <CakeProphet> hey at least it gave you a line number.
05:26:27 <kmc> have now watched Erlang: The Movie four times and I still don't know Erlang
05:26:47 <kmc> maybe i should read some documentation instead of just watching swedish people make telephone calls
05:27:29 <CakeProphet> nothing gets me quite as excited as writing IMAP code.
05:28:09 <CakeProphet> kmc: it's a fairly simple language.
05:28:29 <CakeProphet> there's a standard practice something-or-other that is highly confusing to me though.
05:28:51 <elliott> Compilation error: <program source>:1:34: error: invalid address space for argument to __kernel function
05:28:52 <elliott> __kernel void crack(__global int a)
05:28:52 <CakeProphet> I do not remember what it is called.
05:28:55 <elliott> Well ooh la la.
05:29:05 <CakeProphet> elliott: what are you doing exactly?
05:29:27 <elliott> OpenCL.
05:29:34 <elliott> I'm cracking crypt() because why not.
05:29:35 <CakeProphet> ...right
05:29:37 <CakeProphet> oh.
05:29:50 <CakeProphet> that's interesting. I would not know how to do that.
05:31:23 <zzo38> What is the algorithm for using minimum storage space writing a series of natural numbers to a file, each one having a maximum, but that the maximums are not known ahead of time?
05:32:11 <CakeProphet> wow imaplib is pretty low-level.
05:32:23 <CakeProphet> pretty much just the protocol...
05:32:24 <mauke> each natural number has a maximum? well, look at that
05:33:37 <zzo38> For example, the first item is a number ranging from zero to eight. If it is five, then the next number ranges from zero to forty-two; but if the first number is two, then the nxt number instead ranges from zero to sixteen.
05:33:48 <elliott> I found imaplib easy and high-level when I needed to wrangle IMAP from Python.
05:35:59 <zzo38> Is there any such algorithm?
05:36:21 <elliott> YAY, AN ERROR
05:36:26 <elliott> I mean
05:36:26 <elliott> a segfault
05:36:37 <CakeProphet> elliott: it's certainly not difficult.
05:36:57 <CakeProphet> but all of the methods are pretty much the protocol verbatim, with some exceptions.
05:37:06 <CakeProphet> raises Exceptions instead of returning the bad responses.
05:37:52 <zzo38> Is there anything better than just using bignums for this purpose?
05:40:06 <oerjan> <kmc> maybe i should read some documentation instead of just watching swedish people make telephone calls <-- clearly the problem is that you don't know swedish.
05:42:08 <CakeProphet> general electric 120V soft white.
05:42:23 -!- lifthrasiir has quit (Read error: Connection reset by peer).
05:42:55 -!- lifthrasiir has joined.
05:50:23 -!- oerjan has quit (Quit: Good night).
05:50:32 -!- lifthras1ir has joined.
05:56:57 <CakeProphet> ORing a lot of search criteria in IMAP looks somewhat painful
05:58:34 <CakeProphet> elliott: the documentation is kind of poor as well. It doesn't describe how the data is returned from search, nor does it describe whether or not an exception is raised on NO or BAD responses
06:00:17 <elliott> clEnqueueNDRangeKernel
06:00:19 <elliott> what a function name
06:00:52 <CakeProphet> find_element_by_id_name_or_class is a good one
06:02:33 <elliott> oecan i have the numbers one to eight thnaks
06:04:17 <elliott> oh oerjan is gone
06:04:20 <elliott> how about you monqy
06:04:25 <monqy> hi
06:04:30 <elliott> numbers,,,
06:04:33 <monqy> numbers
06:05:17 <CakeProphet> elliott: can IMAP search keys have parens? I'm wondering how or works.
06:05:25 <elliott> dunno
06:05:26 <CakeProphet> OR key1 OR key2 key3
06:05:28 <CakeProphet> or
06:05:35 <CakeProphet> OR key1 (OR key2 key3)
06:08:09 <CakeProphet> ah yes you use parens
06:08:45 <elliott> parentheses with fixed prefix notation
06:08:46 <elliott> smart
06:10:20 -!- itidus20 has joined.
06:12:44 <CakeProphet> this code is so bad.
06:13:16 <CakeProphet> there are lists that are initialized
06:13:18 <CakeProphet> and then never used again.
06:13:21 <CakeProphet> empty lists.
06:13:23 <CakeProphet> just sitting there.
06:13:49 <CakeProphet> they just chill out and wait to be garbage collected.
06:14:00 <Sgeo> Typos?
06:14:09 <CakeProphet> no. possibly unfinished code.
06:14:11 <CakeProphet> or forgotten code.
06:14:17 <CakeProphet> they may have forgotten to delete them or something.
06:16:03 <elliott> monqy: numbers
06:16:04 <elliott> one to ten
06:16:04 <elliott> thanks
06:16:06 <elliott> Sgeo: you too
06:16:08 <elliott> or well
06:16:09 <elliott> just one to eight
06:16:10 <elliott> will be fine
06:16:11 <monqy> 1 2 3 4 5 6 7 8 9
06:16:12 <monqy> 0
06:16:22 <elliott> thank you friend
06:17:11 <Sgeo> Why didn't you need 9?
06:17:46 <Sgeo> ^nr
06:17:51 <Sgeo> !nr
06:18:14 <elliott> omg it works :DDDDD
06:18:19 <elliott> monqy: -9 -99 -99 -999 -9999 -99999 -999999 -9 -9
06:18:27 <monqy> is that it working
06:18:28 <elliott> ok now. NOW to try it with a HUGE array.
06:18:33 <monqy> is that what it's supposed to do
06:19:17 -!- itidus20 has quit (Ping timeout: 276 seconds).
06:20:23 <elliott> yes
06:26:02 <elliott> omg monqy it works im
06:26:05 <elliott> gpuising
06:26:56 <elliott> monqy: its so fast ;___;
06:27:14 <CakeProphet> // CLEANUP Recursion and stuff
06:28:11 <monqy> ;___;
06:28:12 <CakeProphet> string[] data = expression.Split("==".ToCharArray());
06:28:18 <CakeProphet> yep, that's how you evaluate infix operators.
06:28:21 <CakeProphet> just split the string
06:28:31 <elliott> I thought you were under an NDA.
06:28:39 <CakeProphet> of course not.
06:28:48 <elliott> okay.
06:30:02 <CakeProphet> that was for something else.
06:39:11 -!- GreaseMonkey has quit (Quit: The Other Game).
06:45:52 -!- augur has quit (Remote host closed the connection).
06:55:51 <zzo38> Why does Haskell say a name is ambiguous even if only one of the choices is of the correct type?
06:56:39 <mauke> because Haskell doesn't care about the type
06:57:20 <zzo38> What do you mean by that?
06:59:15 <zzo38> For example, you have function with the same name but imported from different modules, it says ambiguous, both functions of same name they require different type of parameter, and you have specified the parameter which is one of those correct types.
06:59:40 <CakeProphet> I guess the idea is that it doesn't do that because that would assume one is the correct type.
06:59:45 <CakeProphet> the programmer could always be wrong.
07:00:46 <CakeProphet> so it would be more helpful to make sure the name is not ambiguous so it does not accidentally use the wrong function.
07:01:04 <CakeProphet> thus making debugging not quite so mysterious.
07:01:25 <zzo38> Is there an extension to make it not error for that?
07:01:29 <CakeProphet> no.
07:01:45 <CakeProphet> there is actually not a GHC extension for everything. This is surprising I know.
07:03:48 <zzo38> I suppose in some cases you can do it by making a class
07:03:57 <CakeProphet> zzo38: you can however, always just disambiguate your function names, either by qualifying the Module or defining two different names in your module.
07:04:09 <zzo38> CakeProphet: I know you can do that too.
07:06:38 <CakeProphet> practically speaking, the compiler should a) try to compile your program accurately and have it run as fast as possible, b) aid the programmer in debugging their programming.
07:07:16 <CakeProphet> so I guess requiring qualified names when names overlap is helping with part b.
07:09:03 <zzo38> It should be able to turn off part (b) in cases where it is unable to do part (b)
07:09:29 <zzo38> Actually the same should apply to part (a) in some cases, maybe.
07:09:51 <elliott> it is doing part (b), you're just not listening
07:09:55 <mauke> ghc -fignore-errors -fcompile-approximately
07:10:12 <elliott> and asking us how to shut it up
07:10:27 <elliott> your program is wrong, fix it
07:11:01 <CakeProphet> elliott: uh, imap.uid("FETCH", uid, "BODY") should just give me the body text of the email right?
07:11:12 <CakeProphet> I am having a hard time understanding the RFC :P
07:11:15 <CakeProphet> it is a dense text.
07:11:21 <zzo38> It should only turn on part (a) and (b) if such things are possible to do, and turn them off otherwise (possibly displaying warnings if necessary, or errors if it is unable to do what you typed at all)
07:11:48 <CakeProphet> oh dear, I've defined a convention for this discussion.
07:12:04 <zzo38> (Or, unable to do it properly, at least.)
07:12:13 <CakeProphet> there is officially a part a and part b now. What have I done.
07:12:50 <CakeProphet> zzo38: I think you misunderstand me
07:13:21 <CakeProphet> requiring overlapping names to be qualifies is aiding you in debugging, because even if only one of the names matches the types in that context
07:13:25 <CakeProphet> it may be the WRONG function
07:13:38 <CakeProphet> so it is in effect completely negating the point of having static typing.
07:14:34 <zzo38> If it is still the wrong function then it should be error. Or, if the name "a" is ambiguous and you type "b = a" without a type signature, then that is also ambiguous and is error.
07:14:56 <CakeProphet> whether or not it's the wrong function is not something the compiler knows.
07:15:02 * Sgeo proceeds to add psychic abilities to Haskell
07:15:09 <CakeProphet> the function could have the right type and still be the wrong function, because the context is wrong.
07:15:16 <CakeProphet> thus you won't receive any indication that there is an error in your program
07:15:21 <CakeProphet> and will get a logic error in that situation.
07:15:23 <Sgeo> Next step: Making it so the programmer only has to type one line:
07:15:24 <CakeProphet> way to go compiler.
07:15:25 <Sgeo> DWIM
07:15:25 <zzo38> CakeProphet: Why? It should know, if there is only one function of the correct type and only one possible type in that context.
07:15:51 <Sgeo> Do The Opposite Of What I Mean
07:15:59 <CakeProphet> the context may be the wrong one and match the wrong function.
07:16:00 * Sgeo watches the compiler explode
07:16:05 <CakeProphet> ergo, logic error.
07:16:11 <CakeProphet> but everything types because you have ambiguous names.
07:16:20 <CakeProphet> whereas in the non-ambiguous situation you would get a type error.
07:17:13 <CakeProphet> zzo38: GHC is trying to help you make your program accurate. you should be glad.
07:17:37 <zzo38> I mean, for example, if "a" is ambiguous because one module it is Int, one module it is String, then you have "b = a; c :: Int; c = a; d :: Int; d = a;" and you have no other module with "a" then definition of "b" is error but "c" and "d" should not be ambiguous because there is only one possible match.
07:17:47 <CakeProphet> yes I understand completely what you are saying
07:17:50 <CakeProphet> you do not need to explain again.
07:17:59 <CakeProphet> I understand the premise and understand that it is possible.
07:18:10 <Sgeo> What if the one possible match is the wrong match from what the programmer means?
07:18:20 <CakeProphet> exactly.
07:18:44 <CakeProphet> the compiler cannot determine the "right" function from an ambiguous set of functions because that is assuming that your code is already correct.
07:18:59 <CakeProphet> not "right" as in "types correctly"
07:19:10 <CakeProphet> "right as in "this is what I wanted the program to do at runtime"
07:19:15 <CakeProphet> *"right"
07:19:23 <zzo38> Sgeo: Then the programmer made a mistake by specifying the wrong type.
07:19:45 <CakeProphet> zzo38: and won't know until he runs the program. might as well use Python or Perl.
07:20:00 <Sgeo> And CakeProphet is saying that the entire point of type checking is to help prevent the programmer from making mistakes as much as possible.
07:20:28 <zzo38> I always specify the type when defining a function.
07:22:02 <CakeProphet> that's not really the problem though.
07:22:17 <CakeProphet> the problem is that your context has a mistake, a bug if you will
07:22:26 <CakeProphet> and then GHC matches the wrong function
07:23:16 <CakeProphet> the functions, whether explicitly typed or not, are in the wrong place, but GHC just goes ahead and matches a function from a list of ambiguous functions and everything types correctly
07:23:30 <CakeProphet> even though the program is wrong and the situation can be avoided if the names were non-ambiguous
07:23:58 <CakeProphet> you may not have just two ambiguous choices.
07:24:02 <CakeProphet> @hoogle fromList
07:24:02 <lambdabot> Data.HashTable fromList :: Eq key => (key -> Int32) -> [(key, val)] -> IO (HashTable key val)
07:24:02 <lambdabot> Data.IntMap fromList :: [(Key, a)] -> IntMap a
07:24:02 <lambdabot> Data.IntSet fromList :: [Int] -> IntSet
07:24:06 <elliott> why are you guys beating your heads against a brick wall
07:24:08 <elliott> out of curiosity
07:24:09 <CakeProphet> you could have 3, 4, 5, ... etc
07:24:12 <elliott> ?
07:24:19 <CakeProphet> elliott: masochism
07:25:07 <CakeProphet> programmers who enjoy programming obviously also enjoy pain.
07:26:27 <monqy> good thing i hate programming 8)
07:26:38 <zzo38> If there is more than one choice of the correct type then it should still be error, though.
07:26:45 <CakeProphet> yes obviously.
07:26:59 <elliott> "The programming language used to write computation kernels is based on C99 with some limitations and additions. It omits the use of function pointers, recursion, bit fields, variable-length arrays, and standard C99 header files."
07:27:25 -!- Nisstyre has joined.
07:28:15 <CakeProphet> zzo38: even though the scenario I described isn't necessarily going to happen or even be likely to happen, it can still happen and really you are just better off avoiding it.
07:28:25 <CakeProphet> so add a M. to the front of your names and be happy.
07:28:46 <CakeProphet> or write your extension and be happy
07:28:47 <CakeProphet> doesn't matter.
07:29:05 <zzo38> Or, in some cases, I can write a class.
07:31:31 <zzo38> A class might not work in all cases, but it should work in many cases where such things is useful to have.
07:31:48 <CakeProphet> add enough parameters and it will work most likely.
07:35:18 <CakeProphet> class FromListable t a | t -> a where fromList :: [a] -> t
07:35:54 <CakeProphet> not sure if the fundep is necessary. I don't really understand when fundeps are needed.
07:35:56 -!- ive has quit (Quit: leaving).
07:36:50 <mauke> when things would be ambiguous otherwise
07:40:44 <CakeProphet> RFCs are kind of fun to read actually.
07:41:50 <CakeProphet> I remember when I first started reading about telnet when I started working on my first MUD.
07:42:05 <CakeProphet> I think that's when I first understood the idea of an interface in programming.
07:42:33 <cheater> haha
07:43:48 <CakeProphet> telnet is neat because it's basically an interface interface.
07:44:12 <CakeProphet> "Please support this feature" "Okay I will support this feature"
07:44:42 <elliott> telnet is horrific.
07:44:52 <CakeProphet> yes, also that.
07:45:03 <elliott> does anyone know how DES works
07:45:11 <CakeProphet> BUT IT IS MY FIRST PROTOCOL. MY FIRST PROTOCOL-LOVE.
07:46:16 <elliott> hmm, I think I'll wait for ais
07:48:46 <zzo38> I think telnet is not too bad. It is good. Almost everything is optional, anyways. If you do not need telnet commands, you can use raw terminal connection; but usually you would use telnet commands to ensure terminal compatibility.
07:49:43 <CakeProphet> okay so are attachments part of the DATA message in SMTP?
07:49:45 * CakeProphet is so confused.
07:49:56 -!- itidus20 has joined.
07:50:16 <zzo38> CakeProphet: Yes; the entire message and everything with it (attachment, etc) are all sent using DATA. The only thing isn't is recipient and sender address.
07:50:49 <CakeProphet> okay so if I only want the text what is that?
07:51:38 <CakeProphet> oh wait, found it. BODY[TEXT]
07:51:46 <CakeProphet> LOL SO EASY
07:52:59 <CakeProphet> at least I am learning things from all of this.
07:53:32 <elliott> does anyone here have experience with OpenCL? :P
07:53:55 <CakeProphet> I don't think it's happening, elliott.
07:54:02 <elliott> ;____;
07:54:04 <elliott> CUDA?
07:54:12 <CakeProphet> elliott: there is totally an #opencl though
07:54:17 <elliott> scary
07:54:45 <CakeProphet> IRC is a crucial tool for programming
07:54:51 <CakeProphet> it is your second option when Google fails you.
08:00:32 * elliott notes http://vandreev.wordpress.com/2007/06/18/feistel-ciphers-and-des-in-haskell/ to self
08:02:37 <Vorpal> <elliott> does anyone here have experience with OpenCL? :P <-- a tiny bit. I installed the SDK for using it with AMD cards. And I read the docs.
08:02:54 <Vorpal> but I haven't got around to using it yet
08:02:57 <elliott> Vorpal: good. aid me. aid me.
08:03:01 <elliott> which docs btw
08:03:03 <elliott> my experience is
08:03:04 <Vorpal> because I couldn't think of a useful project
08:03:09 <Vorpal> elliott, the spec iirc
08:03:14 <elliott> - the khronos reference is really deep hierarchy-wise and basically unordered so is useless
08:03:24 <elliott> - the spec is way too detailed and low-level and asdflghj'
08:03:37 <elliott> but some of the nvidia SDK examples are useful
08:03:39 <elliott> EXCEPT
08:03:48 <elliott> they all use non-free-licensed helper functions that you get to replace
08:03:52 <Vorpal> elliott, whatever it was, it was a bit like the C99 spec in how it was written
08:03:55 <Vorpal> useful reference docs
08:04:02 <Vorpal> not a tutorial by any measure
08:04:25 <elliott> i have the basics down and it's about two hundred lines of C
08:04:39 <elliott> so I basically only have one real question left, an architectural one :/
08:04:53 <Vorpal> elliott, oh?
08:05:25 <Vorpal> elliott, anyway this might be useful: http://developer.amd.com/zones/openclzone/pages/default.aspx (perhaps)
08:06:40 <elliott> Vorpal: what I'm writing is a DES cracker, for the hell of it. so, I know each thread is basically going to repeatedly DES on "the next input", check if it's right, and if it's not, continue. but if it _is_ right, I want to know how I should handle the output. (the way I'm cracking means that there can be _multiple_ successful crackings.) I could simply have a fixed-size output buffer and then stop when it's full or the iterations grow too many,
08:06:40 <elliott> and then collect it all on the CPU thread, output the successful crackings, and repeat
08:06:42 <elliott> but ... ehhh
08:06:57 <elliott> it feels like I want an instruction "STOP WHAT YOU'RE DOING, WAKE UP THE CPU THREAD, AND GIVE IT THIS DATA" :P
08:07:49 <Vorpal> elliott, hm, sorry, I don't know best way to notify the CPU-run program from a GPU thread
08:08:01 <Vorpal> surely there must be a way though
08:08:27 <elliott> I suspect you can't, without massive overhead; the poclbm bitcoin cracker -- which yes, ha ha, libertarians, but it's a program of a very similar structure, so -- seems to take that output buffer solution
08:08:39 <elliott> but, eurgh. :/
08:09:41 <elliott> anyway, I ought to figure out how to actually implement DES. especially on an architecture this unconventional.
08:09:44 <Vorpal> elliott, it was made by engineers, did you expect a beautiful solution? XD
08:10:09 <elliott> I expect something focused on performance at all costs; this doesn't seem performant, but then I have no intuition as to how GPUs work
08:10:09 -!- ais523 has joined.
08:10:17 <Vorpal> elliott, hm
08:10:28 <elliott> But I'm really likely to just write a high-level Haskell API using OpenCL after this and then never write an OpenCL C program again
08:10:34 <elliott> And speak of the devil, here's ais523
08:10:46 <Vorpal> would he know about GPU programming?
08:11:08 <elliott> Vorpal: http://esolangs.org/wiki/Checkout
08:11:14 <elliott> At least fifty tl;drs worth about it.
08:12:04 <Vorpal> heh, interesting language
08:12:23 <ais523> elliott: were you speaking of me?
08:12:39 <elliott> ais523: Yep, saying I'd wait for you before I continued writing my GPGPU program
08:12:43 <elliott> To ask a question
08:13:52 <elliott> <elliott> Vorpal: what I'm writing is a DES cracker, for the hell of it. so, I know each thread is basically going to repeatedly DES on "the next input", check if it's right, and if it's not, continue. but if it _is_ right, I want to know how I should handle the output. (the way I'm cracking means that there can be _multiple_ successful crackings.) I could simply have a fixed-size output buffer and then stop when it's full or the iterations grow
08:13:52 <elliott> too many,
08:13:53 <elliott> <elliott> and then collect it all on the CPU thread, output the successful crackings, and repeat
08:13:53 <elliott> <elliott> but ... ehhh
08:13:54 <elliott> <elliott> it feels like I want an instruction "STOP WHAT YOU'RE DOING, WAKE UP THE CPU THREAD, AND GIVE IT THIS DATA" :P
08:13:57 <elliott> ais523: And there it is
08:14:00 <Vorpal> elliott, you could do GPGPU calculations with shaders too. I think GPU support of hugin's panorama stitcher nona is done by shaders rather than OpenCL. Not sure why.
08:14:13 <elliott> Because OpenCL/CUDA are much newer than shaders.
08:14:16 <Vorpal> ah
08:14:23 <ais523> elliott: each thread should have a block of memory it writes to
08:14:44 <ais523> then periodically, you stop all the threads temporarily to do an en-masse transfer of that memory to somewhere the CPU can read
08:14:56 <elliott> Right, so what I said then
08:15:04 <ais523> actually, you need a really really recent graphics card (as in, last few months) to be able to read the memory before the computation's finished altogether
08:15:09 <elliott> That's gross in tons of ways though :/
08:15:10 <Vorpal> ais523, why no way to send a signal back to the CPU?
08:15:14 <ais523> so you might want to just repeatedly invoke the computation
08:15:23 <ais523> on a subset of the search space
08:15:25 <elliott> ais523: Yeah, that's what I said
08:15:32 <elliott> ais523: It makes some things a lot less fun though
08:15:40 <elliott> I can't offer a semi-realtime count of cracking speed for instance :P
08:15:46 <ais523> Vorpal: because of massive threading, basically
08:15:50 <Vorpal> hm
08:16:48 <elliott> ais523: So here's another question: I was thinking each thread would basically get its own chunk of the keyspace, and then try repeatedly to fill out its output buffer, trying new keys each time. But looking at several SDK examples, I have a feeling that it'd be better to make it be one thread : one attempted key, and just have millions of them, letting the GPU scheduler do the equivalent of my loop.
08:16:55 <elliott> Is this a good way to go about things?
08:17:25 <ais523> elliott: the number of threads you can have the GPU scheduler deal with is relatively large, but finite
08:17:43 <elliott> ais523: Yep, but my computational workload is also finite, because of the above architecture
08:17:44 <ais523> getting the scheduler to do as much scheduling as possible is generally more efficient because it can do tricks like pipeline memory accesses
08:17:53 <ais523> it's finite as in about a million or so, maybe a bit less
08:17:57 <ais523> and I have a feeling that might be too small
08:18:04 <elliott> Right; so ten times the threads > a loop...
08:18:07 <elliott> ais523: More than a million
08:18:18 <elliott> This SDK example uses 1277944
08:18:28 <elliott> Well
08:18:37 <elliott> Nearest multiple of two hundred and fifty-six to that
08:18:38 <elliott> But whatever
08:19:02 <elliott> ais523: I guess I should just max out the number of threads the GPU can deal with, and then have them repeat their workload until my desired computation workload is filled?
08:19:07 <elliott> As in, no advantage to having _less_ threads
08:21:10 <elliott> ais523: And there's no way to tell the GPU "kill every thread", right, just "kill this thread" (return)?
08:21:32 <ais523> you don't kill a thread at all, threads exit when they reach the end of the code they have
08:21:41 <elliott> ais523: "return" in a __kernel kills a thread :)
08:21:51 <ais523> effectively, yes
08:22:02 -!- Patashu has joined.
08:22:04 <elliott> GPUs are so strange.
08:22:16 <elliott> I'm basically just grounding my entire thinking in terms of array languages like J.
08:22:38 <elliott> Plus the sort of nice Haskell array-handling pipelines that end up being fused away because they're just compositions.
08:22:45 <ais523> I ground my thinking in GPUs
08:22:58 <ais523> they're a paradigm of their own, but not one that's impossible to learn
08:23:06 <elliott> ais523: That's the best way to do it, but unfortunately I don't know how GPUs work, other than being vector CPUs with shitloads of cores
08:23:14 <elliott> So I have to work with bad metaphors until it clicks
08:24:12 <elliott> OK, so TODO: Learn how to actually code DES, figure out how to divide the keyspace nicely, find a nice compute workload for a single "run"
08:25:09 <elliott> ais523: I take it GPUs are lousy at matching regular expressions?
08:25:31 <ais523> it depends on how you interpret them
08:25:49 <ais523> a DFA that was small enough to fit into block memory might work well
08:25:57 <elliott> Well, the input string is exactly ten characters
08:26:12 <ais523> (i.e. no pipeline stalls in doing a jump-table-equivalent)
08:26:20 <elliott> So hell, I could compile it down to 2560 bytes of lookup table
08:26:28 <elliott> That's too big to be local data though, right?
08:27:28 <elliott> Oh wait, no, of course a lookup table doesn't work
08:27:31 <elliott> I'm a complete idiot
08:27:51 <elliott> Although, hmm; I could do that simple "none of the ten characters are _definitely_ invalid" check, add it to the output, and have the CPU filter those out
08:28:10 <elliott> ais523: But it might be better just to do it all on the GPU
08:28:25 <elliott> I guess most regexps trying to match only ten characters will fit into block memory :)
08:28:34 <elliott> And if that's not good enough you can always grep the rest
08:28:44 <elliott> Is there any way to find out exactly how much block memory my GPU does, btw?
08:28:48 <ais523> I'd suggest only doing simple checks on the GPU
08:28:54 <ais523> and there should be some API function to query that
08:29:08 <ais523> I know CUDA has one, although I've forgotten what it's called
08:29:18 <elliott> ais523: Well, a simple regexp is pretty simple, but I don't know what counts as simple for GPUs.
08:29:29 <ais523> (the amount of block memory /per block/ is obviously what you're interested in; it's also called shared memory sometimes)
08:29:39 <ais523> you normally get a few kilobytes of it per block
08:29:54 <elliott> 2560 plus a bit, maybe?
08:30:11 <elliott> My GPU is not all that good; it's integrated, after all.
08:30:28 <elliott> Hmm, if 2560 isn't good enough, I could always do a kind of bloom filter thing
08:30:30 <elliott> Or even just modulo
08:30:40 <elliott> ais523: BTW, is CUDA's C API this insanely verbose???
08:30:48 <elliott> It's unbelievable!
08:31:07 <ais523> elliott: I'm used to Java, so it didn't look /that/ out of place
08:31:12 <elliott> Also my program keeps failing just because I only have like a gig of memory free. :/
08:31:20 <ais523> haha
08:31:27 <ais523> you might want to make it a bit more memory-efficient
08:31:27 <elliott> Even though it only deals with about a hundred megs of data on both CPU and GPU side???
08:31:36 <ais523> GPUs definitely don't have a gig of memory to spare
08:31:38 <elliott> It's perfectly memory-efficient, it's just a trivial test program I wrote
08:31:49 <elliott> ais523: Well yeah, but it complained about lack of host memory before
08:31:57 <elliott> I guess my GPU is probably just using more than half its RAM though :)
08:32:03 <elliott> I only have two hundred and fifty megabytes of it, which is ugh
08:32:12 <elliott> Thankfully DES cracking is a rather constant space thing
08:32:16 <elliott> That doesn't count towards GPU ram, does it?
08:32:19 <elliott> Because they're like registers
08:32:44 <ais523> you have thread memory, block memory, and global memory, they're all separate memory spaces
08:32:51 <ais523> global memory is the only sort of memory you can have pointers into
08:32:58 <ais523> although you can still index arrays in thread or block memory
08:33:07 <ais523> and so you can fake pointers like that if you really want to
08:33:11 <elliott> What's the two-five-six figure; combined, or global?
08:34:18 <ais523> that sounds plausible for the amount of block memory in a block
08:34:31 <ais523> the names the API uses are often confusing, you often have to figure out what they are just from their sizes
08:34:51 <elliott> oh, I'm not quoting the API, I'm quoting what my GPU claims to the rest of the computer
08:35:23 <elliott> That's two-five-six megabytes, btw
08:35:47 <ais523> oh, /megabytes/? probably global memory, then
08:35:57 <elliott> Right.
08:35:58 <ais523> nothing else would be that big
08:36:03 <elliott> I assumed as much
08:36:27 <elliott> ais523: But, umm, you said I had a few kilobytes per thread
08:36:38 <ais523> global memory has nothing to do with shared memory
08:36:43 <elliott> Is that swapped out into global memory or something? Because I don't have two gigs of RAM on my GPU
08:36:47 <ais523> shared memory is shared by a block of threads, they all read/write into it
08:36:50 <elliott> (Going by a million threads)
08:36:52 <ais523> and no, but only finitely many threads run at once
08:37:03 <elliott> Yeah, so where does it go when they're not running :P
08:37:20 <ais523> normally, it'll switch between around 100 threads until they're all finished, then do another block of 100 or so, etc
08:37:27 <ais523> so it doesn't go anywhere because the threads have already exited
08:37:28 <elliott> Ah
08:37:41 <ais523> you can't assume all the threads as a whole are immune to starvation, they almost certainly won't be
08:37:48 <elliott> Starvation?
08:37:51 <ais523> threads /within a block/, you can assume are immune to starvation and all that
08:37:58 <elliott> Do I actually have to account for threads just losing their ram
08:37:59 <ais523> elliott: the chance that a thread won't run at all until it's the last thread remaining
08:38:07 <elliott> Oh
08:38:12 <elliott> Why would that matter, this is embarrassingly parallel
08:38:17 <elliott> They don't need to talk at all :P
08:38:18 <ais523> it doesn't, in this case
08:38:25 <ais523> but it explains where the RAM Goes
08:38:27 <ais523> *goes
08:38:35 <elliott> BTW, with my output array, I want one index per thread, right? Because otherwise they might just step on each other's toes
08:38:46 <ais523> it runs a group of threads until they've all finished and so don't need any more RAM, then the next group, then the next, etc
08:38:51 <elliott> And it's easier to have to allocate like two hundred megs on the host than to communicate between threads to resolve that
08:38:59 <ais523> yep, one index per thread is an incredibly common trick on a GPU
08:39:12 <Vorpal> elliott, 256 MB GDDR?
08:39:15 <Vorpal> not a lot
08:39:32 <ais523> Vorpal: GPU memory
08:39:34 <elliott> ais523: hmm, that might not quite work, since the successful output is like a short string
08:39:35 <Vorpal> yeah
08:39:42 <ais523> 256MB is a little low even for that, but that memory doesn't really matter
08:39:46 <Vorpal> ais523, which is different from video ram iirc?
08:39:48 <elliott> eight (seven-bit) characters
08:40:02 <elliott> so that's eight times a million threads, say
08:40:03 <ais523> Vorpal: it has nothing to do with video RAM
08:40:05 <elliott> oh, that's just eight megabytes
08:40:13 <elliott> why don't I have an intuition for this kind of thing?
08:40:20 <Vorpal> ais523, what is video ram then?
08:40:25 <ais523> in graphics programming, a hardware buffer is in GPU memory, a software buffer is in video RAM
08:40:34 <ais523> err, maybe not, actually
08:40:37 <Vorpal> hm
08:40:38 <elliott> that sounds wrong
08:40:39 <ais523> a hardware buffer might be in GPU memory or video RAM
08:40:45 <Vorpal> heh
08:40:46 <ais523> and a software buffer is just in general-purpose RAM
08:41:02 <elliott> ais523: I don't suppose there's like a common source of cryptographic algorithms for GPUs
08:41:07 <Vorpal> my GPU has 1 GB RAM of whatever is on the PCIE-card
08:41:08 <elliott> DES instructions in the hardware? No?
08:41:11 -!- FireFly has joined.
08:41:14 <elliott> I might actually have to learn something.
08:41:14 <Vorpal> GDDR5 iirc
08:41:22 <ais523> it wouldn't surprise me if video RAM was memory-mapped into GPU global memory, actually; I don't know how the CPU and GPU actually communicate
08:42:07 <Vorpal> ais523, I suspect /proc/mtrr could tell you something about that. If you just knew which section was video ram
08:42:17 <Vorpal> but yeah I think at least some of it is mapped into CPU address space
08:42:25 <Vorpal> pretty sure I read that somewhere
08:42:34 <CakeProphet> all devices should communicate via telnet protocol
08:42:49 <Vorpal> $ cat /proc/mtrr
08:42:49 <Vorpal> reg00: base=0x000000000 ( 0MB), size=16384MB, count=1: write-back
08:42:49 <Vorpal> reg01: base=0x400000000 (16384MB), size= 1024MB, count=1: write-back
08:42:49 <Vorpal> reg03: base=0x0e0000000 ( 3584MB), size= 512MB, count=1: uncachable
08:42:49 <Vorpal> reg04: base=0x42f800000 (17144MB), size= 8MB, count=1: uncachable
08:42:50 <Vorpal> reg05: base=0x430000000 (17152MB), size= 256MB, count=1: uncachable
08:42:56 <Vorpal> can't really make any sense of that
08:44:42 <ais523> I don't know what /proc/mtrr is for
08:46:08 <Deewiant> Vorpal: You might want to fix that, I had terrible random performance problems when my MTRR setup was messed up
08:46:17 <elliott> How's that broken
08:47:33 <Deewiant> It says some things are both uncachable and write-back
08:48:31 <elliott> No it doesn't
08:48:46 <elliott> Unless I'm seriously misinterpreting that
08:49:55 <Deewiant> [3584,4096] specifically
08:50:32 <Deewiant> Oh, and the other uncachable areas too, actually
08:50:47 <elliott> How are they write-back
08:50:57 <Deewiant> reg00: base=0x000000000 ( 0MB), size=16384MB, count=1: write-back
08:51:08 <elliott> That's not uncachable, the line uncachable isn't there
08:51:23 <elliott> Oh hm
08:51:24 <elliott> I see
08:51:26 <elliott> The bases
08:52:21 <Deewiant> Maybe it's supposed to work like that, dunno
08:52:32 <Deewiant> All I know is I had major issues while I had overlap
08:53:56 <Deewiant> Wikipedia at least says that overlap is fine so I guess that's fine
08:57:36 -!- azaq23 has joined.
08:57:40 <Vorpal> Deewiant, I think there is an order of precedence.
08:57:49 <Vorpal> at least from what I remember
08:58:14 <Vorpal> Deewiant, oh and performance is fine. So are you suggesting I could get even better performance by messing with them?
08:58:23 <Deewiant> No, I'm not
08:58:26 <elliott> Does anyone know a public domain reference implementation of DES; I am way too tired for this reading shit right now
08:58:47 <Deewiant> I just thought it might be a problem since it was a really bad problem for me
08:59:01 <Deewiant> But it appears it shouldn't be a problem in general
09:01:30 <elliott> "can anyone give me a working c program for DES algorithm(64/56 bit key)....
09:01:30 <elliott> I want to write the program but cant.
09:01:30 <elliott> I got many programs from google but no one is running.
09:01:31 <elliott> Please send me the program............."
09:01:34 <elliott> Then: "dont u guys have any interest in DES..........."
09:01:43 <elliott> Afraid not, dear friend; none of this cruel internet has any interest in DES
09:02:10 <elliott> ais523: function calls are inlined on a GPU, right?
09:02:31 <ais523> elliott: yes, they don't have much of a call stack to speak of
09:02:50 <elliott> Right; just checking that I'm not losing anything by using functions instead of macros here
09:03:14 <ais523> it's reasonably common to unroll loops, too (GPU programming languages tend to have pragmas for that nowadays; hand-unrolling nearly always beats compiler-unrolling because the compilers are bad at guessing how many iterations to unroll)
09:04:51 <elliott> DES is gross, why can't these encryption algorithms be pretty
09:12:26 <Patashu> AES is reasonably pretty
09:12:31 <ais523> I suppose I shouldn't be helping you make a password cracker
09:12:37 <ais523> even if it is for practice
09:12:57 <Patashu> What even uses DES anymore
09:12:59 <ais523> those things are probably illegal nowadays
09:13:00 <Patashu> (I'd be surprised I bet)
09:13:02 <ais523> or at least, a pending law
09:15:06 <elliott> ais523: I'm not cracking passwords
09:15:08 <elliott> So that's alright
09:15:35 <ais523> even so, IIRC there's a new law outlawing programs which have an obvious illegal purpose
09:15:40 <ais523> and I think that includes password crackers
09:15:45 <ais523> (it's quite a stupid one, really...)
09:15:45 <elliott> It's not a password cracker
09:15:56 <ais523> well, it's reversing crypt(3), right?
09:16:11 <elliott> Not quite.
09:16:22 <ais523> what is it doing, then?
09:16:25 <elliott> It's processing crypt() output and checking it for certain conditions.
09:16:33 <elliott> Certain conditions that would be useless for cracking a pre-given hash.
09:16:35 <elliott> The only thing you could use to crack DES passwords using this program would be to rip out the crypt() implementation and write your own cracker.
09:16:42 <elliott> Other things that include a crypt implementation: libc.
09:16:47 <ais523> ah, hmm
09:16:58 <ais523> so what is the intended purpose? or is that secret?
09:17:05 <ais523> (as in, what do you plan to use it for?)
09:17:27 <elliott> I don't plan to use it at all once it works, but that would be telling. :p It's not any big secret or anything, it's just a silly little program.
09:17:36 <ais523> also, I just did sudo cat /etc/shadow, it seems that the only loginnable account on this computer (mine) is using a salt starting $6$, so definitely not DES-based
09:17:44 <ais523> I don't recognise that particular algo at all, in fact
09:17:58 <elliott> But yeah, the only way you could use this to track passwords would be... to enlarge a bunch of the arrays, fill out the GPU-check tables in a really weird manner, remove the CPU checks... yeah, it'd basically be equivalent to rewriting everything but crypt().
09:18:21 <elliott> hmm, I've never heard of $six$
09:18:51 <elliott> ais523: SHA2
09:19:25 <elliott> So you should be happy about that
09:20:51 <ais523> does SHA2 describe a particular hash algo? I thought it was a family
09:21:24 <elliott> ais523: Well, it's one of the SHA2s, but all of them are pretty good :P
09:22:15 <ais523> indeed
09:26:41 <elliott> `addquote <elliott> help me i am so alone :( <monqy> new computer good enough to simulate real parents
09:26:46 <HackEgo> 637) <elliott> help me i am so alone :( <monqy> new computer good enough to simulate real parents
09:27:06 <ais523> elliott: what do you think about the Wikileaks/Guardian situation?
09:27:23 <elliott> ais523: I forgot to pay attention; brief summary?
09:27:32 <ais523> summary: Wikileaks send an unredacted version of the diplomatic cables to a Guardian journalist via encrypted archive
09:27:48 <ais523> telling them the password in a relatively secure manner (at least, it wasn't intercepted)
09:27:54 <elliott> (The only thing I remembered reading was a funny quote about someone failing to use GPG and Assange helping them)
09:27:58 <ais523> the encrypted archive itself leaks when it's accidentally mirrored
09:28:10 <ais523> and the password leaks when the journalist uses it as a title for a book chapter
09:28:14 <ais523> so the entire information is out there now
09:28:16 <Deewiant> :-D
09:28:19 <Patashu> Wow!
09:28:22 <ais523> elliott: it's the same person, as it happens
09:28:23 <Patashu> Fucking journalists
09:28:37 <elliott> ais523: haha, that _can't_ have been unintentional
09:28:54 <ais523> Wikileaks has since deliberately published an unencrypted version of the same archive on the basis that the information's out there, and Australia responded with an arrest warrant
09:29:05 <elliott> BTW, were the details of that "insurance" file Wikileaks released ages ago ever revealed?
09:29:17 <elliott> It was with another big leak, just an encrypted blob that people torrented about on the assumption that it /must/ be something important
09:29:18 <ais523> elliott: it seems that the journalist wasn't too tech-savvy and thought that the password had expired
09:29:34 <ais523> and the insurance file still hasn't been decrypted; it doesn't have the same password, people have checked that
09:29:53 <elliott> ais523: on the one hand, I can believe the incompetence part; on the other hand, how stupid do you have to be to take a "risk" like that?
09:30:15 <ais523> even I can excuse a journalist for not realising that encrypted archives don't have expiring passwords
09:30:22 <ais523> because it's only obvious if you understand the tech
09:30:33 <elliott> yep, but I'd call naming a chapter after an expired password pretty irresponsible, too
09:30:36 <ais523> but Wikileaks should possibly have noticed that, and used some other method of communication, or at least a warning
09:31:05 <ais523> it's the sort of thing I'd expect a journalist to do, it's "good journalism" in the sense that it draws attention and makes for a good story
09:31:18 <elliott> anyway, I'm not sure what my opinions on it are, other than that it's amusing
09:31:53 <elliott> I doubt the availability of the unredacted files will cause much harm; there was an awful lot of hyperbole about it when the cables were first released, but I don't recall anything ever actually happening so it sounds like FUD To me
09:31:56 <elliott> s/To/to/
09:33:04 <ais523> the best advice I've seen on slashdot is to make passwords long, random, and boring, so that they don't make for interesting book titles
09:33:12 <elliott> hahahahahaha
09:33:40 <Patashu> hahaa
09:33:55 <elliott> the new book from a Wikileaks insider and Guardian journalist: 95UaipciJ6gIBpJvNYuSu
09:34:03 <elliott> (I actually got that from /dev/urandom for authenticity)
09:34:19 <Patashu> Is that base 58 or base 64
09:34:45 <elliott> neither
09:34:48 <ais523> who uses base 58?
09:34:49 <Patashu> I find it amusing that the original unix crypt was based on the enigma machine
09:34:52 <Patashu> Like, wow, it was that old
09:34:58 <Patashu> ais: youtube I think uses it
09:34:59 <elliott> That's not the crypt function
09:35:01 <elliott> that's the crypt tool
09:35:01 <ais523> wouldn't 62 make more sense?
09:35:04 <elliott> that has never existed ever
09:35:06 <CakeProphet> wow IMAP sequence points are a terrible idea.
09:35:11 <CakeProphet> you should pretty much always use UID
09:35:13 <ais523> elliott: I've used perl for it on occasion
09:35:32 <Patashu> it's 58 because you take out o O 0 i I l
09:35:32 <ais523> it's a one-liner there, it has crypt(3) as a builtin function for reasons I don't fully understand
09:35:38 <Patashu> because they look like each other depending on the typography
09:35:41 <elliott> ais523: no
09:35:44 <elliott> ais523: the crypt tool is unrelated.
09:35:52 <ais523> ah, OK
09:36:08 <elliott> it's a ridiculously insecure text encryption that was replaced with a caesar cypher in many unixes because of export laws
09:36:17 <elliott> so basically linux has never had it ever because it's bloody useless
09:36:21 <Patashu> LOL caesar cypher
09:36:23 <elliott> and broken in the forties, by definition
09:36:28 <elliott> or earlier, if a caesar cypher
09:36:33 <Patashu> :cryptography export laws:
09:36:41 <elliott> good emoticon
09:36:43 <Patashu> caesar cyphers were broken around the time of jesus
09:36:44 <elliott> what does it look like
09:36:50 <Patashu> a pile of flaming shit
09:36:51 <elliott> wouldn't it be really cool to be alive in the times when the caesar cypher was actually being used to send war-critical messages
09:36:55 <elliott> like
09:36:58 <elliott> OH SHIT GUYS
09:37:04 <elliott> TURNS OUT I BROKE THE INTERCEPTED MESSAGE IN FIVE MINUTES
09:37:16 <elliott> [rolls in money, accolades]
09:37:34 <ais523> heh
09:37:44 <ais523> back then, it wasn't common knowledge that codes were crackable at all
09:37:44 <Patashu> They should have used a one time pad
09:37:49 <ais523> so you'd first have to have thought of it
09:38:05 <ais523> Patashu: for a hundreds-of-megabytes document? pretty much the only way to do that would be to allow it to be downloaded somehow
09:38:05 <elliott> ais523: well, when everyone is /that/ stupid...
09:38:09 <zzo38> If you know (or can figure out) that it is a caesar cipher, it would be very easy to decode by trying a few keys, there is not much to try and you do not have to decode the entire message to know that it is wrong
09:38:12 <elliott> (yeah, yeah, I know, product of our society)
09:38:13 <ais523> and then it's too likely that both the OTP and the original will be intercepted
09:38:28 <elliott> ais523: hundreds of megabytes in caesar's time :ok:
09:38:32 <elliott> :youmissedthecontext:
09:38:38 <elliott> :ais523madeaconversationalerror:
09:38:43 <ais523> elliott: I interpreted a different context to the one you did
09:38:43 <elliott> :noncesmilies:
09:38:53 <Patashu> He's right to miss the context, it was ambiguous
09:38:54 <ais523> I assumed Patashu was talking about the Guardian/Wikileaks situation not the military situation
09:38:58 <monqy> :hi:
09:39:01 <elliott> :smileydepictingrespondingtoallmessagesintermsofsmilies:
09:39:04 <ais523> and in fact, still think that was the context, unless told otherwise
09:39:06 <elliott> :thatexceptcubist:
09:39:17 <elliott> :caesarmakingathumbsup:
09:39:25 <elliott> :#esoteric:
09:39:29 <monqy> i cant think of anyway to use :help: :help:
09:39:37 <elliott> now you can
09:39:40 <monqy> thats the joke
09:39:44 <Patashu> :backtowork
09:39:48 <elliott> :
09:39:49 <monqy> i mean
09:39:52 <monqy> :thats the joke:
09:40:00 <monqy> :how could i make such a stupid mistake:
09:40:11 <monqy> :ever:
09:40:25 <CakeProphet> ...why are we using posix-style named character classes?
09:40:32 <monqy> :also, when i said "i mean" i meant :i mean::
09:40:40 <ais523> surely the smiley should be :hlep:?
09:40:41 <elliott> :im going to have to draw all of these:
09:40:46 <monqy> ::hlep
09:40:47 <CakeProphet> okay I'm pretty sure that's not posix compliant.
09:41:00 * ais523 notices how difficult it is to make an intentional typo once your fingers are used to typing words at a time rather than letters at a time
09:41:10 <elliott> :smiley depicting infinite tower of smilies; inside, the image of death itself:
09:41:23 <monqy> story of my life, ais523
09:41:42 <CakeProphet> help what is the :
09:41:47 <monqy> :context:
09:41:49 <monqy> :haha:
09:41:51 <elliott> :you shall never know:
09:41:58 <ais523> CakeProphet: normally used to delimit smileys on webforums
09:41:59 <CakeProphet> read context still doesn't make sense.
09:42:01 <elliott> :iiam: oh wait that one's real
09:42:05 <CakeProphet> oh rite
09:42:08 <ais523> e.g. BlogNomic which uses :FOR: for a FOR-vote smiley
09:42:16 <elliott> (it's iiam right?)
09:42:19 <ais523> those things tend to accumulate stupidly large amounts of smileys
09:42:22 <Patashu> are nomics interesting to play?
09:42:28 <ais523> elliott: no idea, I don't know of that one
09:42:35 <elliott> ais523: "it is a mystery" ghost
09:42:35 <ais523> Patashu: they can be; normally they are sometimes and aren't sometimes
09:42:39 <elliott> http://www.itisamystery.com/itisamystery.gif
09:42:55 <ais523> wait, does that website exist just to serve one image?
09:42:57 <elliott> Patashu: not right now, they aren't
09:43:12 <monqy> http://www.skype-emoticons.com/images/emoticon-00169-dance.gif http://www.skype-emoticons.com/images/emoticon-00119-puke.gif
09:43:12 <elliott> ais523: why not :)
09:43:56 <elliott> "Photo books on your Mac. Just add summer." good god apple, I would unsubscribe from your emails if they weren't so hilarious
09:44:10 <elliott> who the hell makes an actual printed book with maps of their travels abroad
09:44:12 <ais523> in unrelated news, there are allegations going around of Apple impersonating police
09:44:15 <elliott> how rich is the average apple customer
09:44:18 <elliott> how rich does apple think the average apple customer is
09:44:24 <ais523> although there are a huge number of fishy things about the story
09:44:36 <ais523> so most people involved are smelling a rat even if they're not sure what color the rat is
09:44:51 <elliott> whatever colour the rat is i will love and care for it all the same
09:45:02 <elliott> do you normally use "color"?
09:45:56 <ais523> I'm about 50/50 on that word
09:46:10 <ais523> and strangely, it doesn't seem to have much correlation with whether I'm programming
09:46:22 <ais523> although it goes up to 100% for "color" when programming if I actually think about the spelling
09:46:24 <elliott> i hate using apis that use different spelling conventions to m
09:46:24 <elliott> e
09:46:25 <ais523> and likewise, "colour" when not
09:46:28 <elliott> because
09:46:30 <elliott> help
09:46:33 <elliott> i was going to name my variable
09:46:35 <elliott> fooColour
09:46:35 <ais523> elliott: use MySql, then, it has both ANALYSE and ANALYZE!
09:46:37 <elliott> but the type is
09:46:37 <elliott> Color
09:46:38 <elliott> :(
09:46:39 <elliott> i am
09:46:40 <elliott> crying
09:46:57 <elliott> ais523: hmm, there's that language whose name escapes me where foo_bar, foobar and fooBar are all the same identifier
09:46:57 <monqy> type Colour = Color -- witty comment here
09:47:00 <elliott> clearly it just needs generalising...
09:47:12 <elliott> in fact, how about we put a whole thesaurus in there?
09:47:14 <elliott> yesssssssssssss
09:47:38 <ais523> elliott: eso or non-eso?
09:47:46 <ais523> it'd be more interesting if foobar was different from the other two
09:47:54 <elliott> ais523: non-eso
09:47:58 <elliott> arguably.
09:48:04 <ais523> as in, the language conceptually had multiword identifiers, and various ways to notate them in ASCII
09:48:34 <ais523> in Algol 68, foo_bar is the same as foo bar (the underscore is an unkeywordiser, and neither foo nor bar are keywords)
09:48:37 <elliott> well, it was case insensitive :P
09:48:49 <ais523> and is a variable not a keyword
09:49:08 <ais523> (.foo.bar would be a two-word keyword, which would then cause a syntax error as foo bar isn't a keyword)
09:49:50 <elliott> ok, so the keyspace is fifty-six bits.
09:49:55 <elliott> now to divide that up reasonably.
09:50:19 <ais523> elliott: hmm, are you doing some iterated-DES sort of HashCash?
09:50:41 <Patashu> What is hashcash
09:50:42 <Patashu> Is it like bitcoin
09:50:44 <elliott> nope; that would be some hashcash
09:50:53 <elliott> Patashu: no, hashcash is something that just about everyone agrees is a pretty good idea
09:50:57 <elliott> at least to my knowledg
09:50:57 <elliott> e
09:51:02 <Patashu> but what is it
09:51:02 <elliott> it's similar in implementation, though
09:51:03 <elliott> http://en.wikipedia.org/wiki/Hashcash
09:51:14 <ais523> Patashu: not really; it's an anti-spam scheme that works by forcing an email sender to do some provable pointless calculations before sending
09:51:21 <Patashu> Oh, cool
09:51:27 <elliott> hmm, so DES actually works on seven characters
09:51:28 <elliott> but I mean
09:51:33 <ais523> the idea being that if you send one email, it's only going to tie up your CPU for two seconds or so and you won't care
09:51:36 <elliott> I should probably make it work on eight characters with the ignored bit still there
09:51:42 <elliott> because char8 is a type that exists
09:51:43 <ais523> but if you send a million, you're going to need a giant server farm which is very expensive
09:51:51 <elliott> and because the implementations probably assume that
09:52:06 <Patashu> It seems unfair against embedded systems
09:52:23 <elliott> embedded systems don't send email
09:52:35 <Patashu> they don't???
09:52:48 <elliott> hmm, and the salt is one hundred and twenty eight bits.
09:52:53 <Patashu> my microwave emails me when it's done
09:52:56 <elliott> crypt() literally takes a salt larger than the password.
09:53:08 <elliott> Patashu: I suspect it has a pretty decent processor, then
09:53:20 <Patashu> (it doesn't really but it should)
09:53:24 <ais523> pity
09:53:32 <Patashu> Microwaving over Ethernet
09:53:36 <Patashu> WIll be the next big innovation
09:53:37 <Patashu> Just you wait
09:54:08 <elliott> email is a rather bad protocol for that
09:54:11 <elliott> XMPP or something would be better
09:55:07 -!- elliott has quit (Remote host closed the connection).
09:55:08 <zzo38> Use the Message Send Protocol.
09:55:23 <Patashu> Anyway, hashcash is like bitcoin
09:55:29 <Patashu> except everyone who wants to use it has to hash instead of just miners
09:55:31 -!- elliott has joined.
09:55:44 <elliott> ais523: btw, the nice thing about OpenCL (imo) is that you don't need any sort of SDK to use it
09:56:02 <ais523> you have to compile it somehow
09:56:12 <elliott> ais523: the header files are portable, few in number, and available from Khronos; and the only other thing you need is /usr/lib/libOpenCL.so, which ships with my graphics card drivers and I'm sure yours too
09:56:15 <elliott> so no, you don't :)
09:56:28 <ais523> oh, is it embedded into C in some sort of crazy fashion?
09:56:38 <elliott> oh, you compile the actual code at runtime
09:56:43 <ais523> or is libOpenCL.so the compiler?
09:56:43 <elliott> with OpenCL API calls
09:56:48 <elliott> compiler and interface
09:56:51 <ais523> ah, OK
09:56:56 <elliott> but the compiler's API is standardised, so
09:57:05 <elliott> I think there's something to precompile, but that probably involves writing your own API-using program to do it
09:57:18 <elliott> Maybe there's tools for it in the SDKs, I don't know, I'm fine with this portable stuff
09:58:24 <ais523> something I'm wondering about: suppose you use a POSIX-extended printf call to print just the second variable argument to printf
09:58:43 <ais523> as in printf("%2$d\n", 4, 5);
09:59:04 <ais523> does that actually work? I'm having trouble figuring out how it would figure out where the second arg was on the stack without knowing the type of the first
09:59:33 <Patashu> !c printf("%2$d\n", 4, 5);
09:59:38 <Patashu> o
09:59:38 <EgoBot> 5
09:59:42 <ais523> wow
09:59:57 <Patashu> !c printf("%2$d\n", 4.0, 5);
09:59:57 <Deewiant> !c printf("%2$d\n", (long double)4.2, 5);
09:59:58 <elliott> !c printf("%2$d\n", 'c', 5);
09:59:59 <EgoBot> 2040730480
10:00:00 <EgoBot> 5
10:00:07 <ais523> Deewiant: heh, I had the same idea as you
10:00:10 <elliott> !c printf("%2$d\n", (long double)4.2, 5);
10:00:12 <EgoBot> 16385
10:00:15 <elliott> !c printf("%2$d\n", (long double)4.2, 5);
10:00:16 <EgoBot> 16385
10:00:20 <ais523> elliott: chars are widened to ints in a ... argument
10:00:21 <elliott> Shit's reliable, yo
10:00:27 <elliott> ais523: i realised that right a i sent it
10:00:27 <elliott> as
10:01:00 <ais523> <man printf> There may be no gaps in the numbers of arguments specified using '$'; for example, if arguments 1 and 3 are specified, argument 2 must also be specified somewhere in the format string.
10:01:06 <elliott> "A 12-bit salt is used to perturb the encryption algorithm, so standard DES implementations can't be used to implement crypt()."
10:01:06 <elliott> lol
10:01:24 <ais523> wait, the salt alters the /encryption algorithm/, rather than the /input/?
10:01:39 <ais523> whoever invented crypt probably doesn't understand hashing
10:01:46 <elliott> hmm, DES' block size is 64 bits
10:01:53 <elliott> does that mean that a DES output is 64 bits, if you only have one block?
10:01:56 <elliott> I guess so
10:02:24 <ais523> either that or they understand it well enough to know how to perturb DES without making it less secure
10:03:45 <elliott> ais523: hmm, (assume CUDA since I guess it's comparable) how would I pass in, say, two kilobytes of data to a kernel function?
10:03:58 <elliott> note: the data is constant for all threads but should be quick to access
10:04:39 <ais523> two possibilities; one is to place it in global memory and get each block of threads to copy it into shared memory as the first thing they do, and read it from there
10:04:49 <ais523> and the other is to place it in texture memory and hope it ends up in the texture cache
10:05:03 <ais523> the first's more suitable for small amounts of data, the second for large amounts
10:05:04 <elliott> Couldn't I just pass a really large number of function arguments? :-)
10:05:08 <ais523> and 2K is somewhere in between
10:05:21 <elliott> It's literally just ten tables of two-five-six bytes each.
10:05:25 <elliott> Well, booleans raelly.
10:05:27 <ais523> I'm not entirely sure how function arguments are passed
10:05:30 <elliott> But I figure bytes are quicker to index.
10:05:48 <elliott> Hmm, I guess I have to base64 in the kernels too
10:05:48 <elliott> :/
10:05:52 <elliott> Oh, wait, hmm
10:05:54 <ais523> note that copying blocks of global to shared memory is a reasonably fast operation; it accesses global memory more efficiently than any other way of accessing it
10:06:10 <elliott> No, I could just divide it into eight bytes and do it based on that
10:06:14 <elliott> Hmm, that'd be really false-positivey
10:06:20 <ais523> typically you get the threads to cooperate on the copy
10:06:30 <elliott> ais523: cooperation sonuds like communicatino :(
10:06:37 <ais523> there's an operation for that in Checkout
10:06:40 <ais523> elliott: it's actually the opposite
10:06:51 <ais523> each thread does a fraction of the copy, in such a way that between them they do all the copy
10:06:59 <elliott> heh
10:07:03 <elliott> that sounds scary
10:07:12 <ais523> it is, but it's also standard
10:07:12 -!- lifthrasiir has quit (Quit: leaving).
10:07:18 <ais523> you get used to that sort of thing after a while
10:07:37 <elliott> ais523: I don't _want_ to get used to it :-\
10:07:38 <ais523> you won't really get a good feel for GPU programming unless you work on something a bit less embarrassingly parallel than your current problem
10:07:57 <elliott> indeed
10:08:00 <ais523> as GPUs are designed for tasks that parallelize well but not perfectly (as that's what graphics programming is like)
10:08:01 <elliott> but that may be a good thing :P
10:08:27 <zzo38> Too bad there are no (Free-software) Checkout implementations.
10:08:29 -!- lifthras1ir has changed nick to lifthrasiir.
10:08:39 <elliott> there are non-Free-software implementations?
10:08:40 <ais523> zzo38: there are no Checkout implementations at all
10:08:45 <zzo38> I know
10:08:57 <elliott> Too bad there are no Checkout implementations targeting badgers.
10:09:01 <elliott> Written by horses.
10:09:21 <ais523> if it's general enough to run even on badgers, I'm not sure if I've done something right or wrong
10:09:25 <elliott> ais523: I have half a mind to write a little library that compiles special Haskell code symbolically to OpenCL and executing that
10:09:27 <ais523> what license do horses typically use, btw?
10:09:40 <elliott> At least, I /think/ you could reduce typical zip/map/associative fold code to something pretty direct
10:10:00 <ais523> associative fold is very standard
10:10:07 <ais523> and map is so parallel it doesn't even count as a building block
10:10:11 <elliott> That kind of code tends to be idiomatic in Haskell anyway (i.e. a "pipeline" composition chain of functions with no conditionals), so I'm pretty sure it could produce good OpenCL code for good Haskell code
10:10:16 <elliott> ais523: It does in Haskell
10:10:29 <Patashu> haskell can't already compile to opencl?
10:10:37 <elliott> Also, I really want to see Checkout running on a badger now, even though that sounds terrible and illegal
10:10:41 <elliott> Patashu: that would be insane
10:10:50 <ais523> there's a slideshow by NVidia somewhere where they did lots and lots of optimisations on an associative fold and watched it get faster and faster
10:10:51 <elliott> I'm talking about what amounts to a symbolic EDSL
10:10:55 <elliott> ais523: haha
10:11:08 <olsner> an EDSL for running on badgers?
10:11:13 <elliott> olsner: Yes.
10:11:24 <elliott> ais523: I wonder what programming would be like if the (GP)GPU was invented before the CPU?
10:11:41 <elliott> I see no reason why it couldn't be the "main" processor, it'd just be bizarro-world from ours
10:11:52 <ais523> elliott: it probably wouldn't have operating systems
10:11:58 <ais523> not software operating systems, at least
10:12:01 <elliott> why not? CPUs didn't at first, either
10:12:04 <ais523> instead, they'd be built into the hardware
10:12:15 <elliott> but then they grew the hardware support for OSes to be written
10:12:34 <elliott> ais523: hmm, do I really have to iterate through a megabyte just to see if any of my kernels managed to produce a hit :-|
10:12:39 <elliott> (an array of bools, one per kernel)
10:12:43 <elliott> on the CPU, that is
10:12:46 <ais523> I think the inclination would be "make the GPU better at scheduling" rather than "allow the GPU to have customizable scheduling"
10:13:00 <ais523> perhaps the CPU would be invented so that it could do OSy tasks
10:13:13 <ais523> btw, GPUs tend to be very bad at integers, and especially bitwise operations
10:13:19 <ais523> they're designed for floating-point
10:13:28 <elliott> hmm, well this definitely isn't an fp operation
10:13:30 <elliott> I can avoid bitwise, though
10:13:58 <ais523> can you (easily) use doubles that always have integer values?
10:14:11 <ais523> I think they can represent the entire 32-bit range exactly
10:14:28 <elliott> ais523: sure; would that really be faster? I mean, DES is pretty much bitwise twiddling all the way
10:14:30 <ais523> (the whole float bad, int good mentality of CPU programming is sort-of upside-down on GPUs)
10:14:33 <Patashu> the entire 32 bit range? no way
10:14:37 <elliott> Patashu: yes way
10:14:38 <Patashu> maybe the entire 16 bit range
10:14:44 <elliott> uhh?
10:14:46 <ais523> Patashu: double = 64 bits, isn't it?
10:14:48 <ais523> 32 bits = float
10:14:51 <Patashu> yeah
10:15:13 <elliott> JS uses doubles for all integers so I would be astonished if they only managed sixteen bits.
10:15:15 <ais523> and it doesn't surprise me at all that in the 64 bits' worth of doubles, there's the entire 32-bit integer range
10:15:18 <elliott> "An IEEE754 8-byte double can represent any 4-byte integer, simply because it has 53-odd bits available for precision (and the 4-byte integer only needs 32).
10:15:19 <elliott> "
10:15:22 <ais523> and shouldn't surprise you either
10:15:23 <elliott> tl;dr Patashu is wrong.
10:15:48 <Patashu> Fair enough
10:15:51 <elliott> ais523: Anyway, I realise I'm not exactly exploiting the GPU's huge strengths, but it has many more cores than my CPU, so it'll still thrash it massively
10:16:08 <ais523> I think it can probably do up to 54-bit signed ints; the sign bit is separate, and for any int value, there'll be some exponent value that makes that mantissa value multiply by 1
10:16:13 <ais523> elliott: indeed
10:17:00 <ais523> btw, I've been told that the term GPGPU technically only applies to general-purpose programming done with graphics primitives, like pixel shaders
10:17:14 <ais523> and doing it with primitives more suitable for the task is called something else, which I can't remember
10:17:29 <ais523> but I don't really care
10:18:51 <elliott> hmm, oh, a gap in my rudimentary opencl knowledge
10:19:00 <zzo38> How would you implement the NES PPU + NES APU on the GPU?
10:19:14 <elliott> ais523: how do I vary an argument to each kernel in CUDA? :-P
10:19:29 <elliott> (yeah, I'm using OpenCL, but similar enough, right?)
10:19:37 <elliott> as in, all I've been doing is setting constant arguments and then running a bunch of threads that use their global ID
10:19:39 <cheater> mantissa values multiplying by 1? base-1 system?
10:19:41 <elliott> oh wait
10:19:41 <ais523> elliott: the call looks something like kernel_name(args)<<<threads,blocks>>>
10:19:43 <elliott> they're constant here
10:19:55 <elliott> first_key needs offsetting by the global id
10:20:18 <ais523> cheater: no, mantissa is scaled by 2^n, you just change the value of n to undo the first scaling of the mantissa to lie in the range 1..2
10:20:35 <ais523> I might have that threads/blocks backwards
10:21:00 <elliott> ais523: I take it GPU buffers generally aren't 0-initialised...
10:21:01 <cheater> are there cryptographic functions which allow to decrypt parts of the data depending what key is supplied?
10:21:14 <ais523> cheater: encrypt them separately, concatenate?
10:21:19 <cheater> different parts which are not mutually exclusive
10:21:29 <ais523> elliott: no, but you can 0-initialize them manually easily enough
10:21:31 <cheater> i realize you can do this but it is not efficient
10:21:43 <ais523> someone actually found a security hole in WebGL based on that
10:21:44 <elliott> ais523: indeed
10:21:57 <ais523> that you could grab parts of people's video memory, and thus what they were viewing on the screen, by exploiting that sort of thing
10:22:03 <ais523> and send it back to the website you were viewing
10:22:10 <elliott> ais523: I want to reuse my allocated buffers throughout each kernel call if I can, right?
10:22:25 <ais523> you're allocating in global GPU memory, right? yes, reuse it
10:22:34 <ais523> mostly just because it'll save the memory allocator a bit of work
10:22:58 <ais523> oh, and /make sure/ you free, the OS won't necessarily be able to clean up after you if you don't, because GPUs don't have an OS
10:23:12 <ais523> I've seen computers wedged due to GPU memory leaks before now
10:24:07 <ais523> (a little surprising, because in theory the API to the GPU should be able to track all the memory being allocated as it's allocated, and deallocate in an atexit or something)
10:24:40 <ais523> o
10:25:23 <cheater> ais523, the original question is: if an SaaS is storing my data, how to make sure the SaaS can only extract the data i need it to extract for the purpose of reducing a large (~GB) data set to something that i would like to download over the internet (~500 KB)
10:25:54 <cheater> i.e. search through files without knowing their full contents.
10:26:14 <cheater> more generally, how to wite progrems that process data without knowing most of it.
10:26:34 <ais523> cheater: there's been some research into that recently, but IIRC it's still in early stages
10:26:45 <cheater> where have you seen that?
10:26:53 <ais523> I haven't seen it, just seen occasional talk about it
10:27:03 <cheater> by whom?
10:27:13 <cheater> i am thinking of a bloom filter style encryption
10:27:15 <ais523> technologically-inclined news sites, I think, but I'm not sure
10:27:21 <cheater> ok
10:28:10 <Patashu> encrypt it in blocks, and give the keys to blocks you want it to read?
10:28:35 <cheater> yes, that would be the kind of approach i mean as "bloom filter" approach
10:28:49 <Patashu> bloom filter's a completely different thing I thought
10:29:46 <cheater> well, what i mean is you give the SaaS part of the meta data (in your blocks) and it either includes or precludes other blocks from being selected for being sent to you
10:30:34 <cheater> then you process these blocks (say they contain some extended metadata) and based on that you query more blocks.
10:30:43 <cheater> and so on, and so forth.
10:32:44 <cheater> but search and filtering is just one of the things performed on remote data sets
10:32:54 <cheater> what about some forms of (simple) compilation
10:34:14 <zzo38> Is there any Haskell function like: f x y z = if z then x else y
10:34:51 <cheater> can you write a compiler which either 1. is distributed and therefore no node sees the whole source code or 2. works on only parts of the source with the other parts not being necessary to see, just a simple copy and paste recipe is given to the user
10:35:42 <Patashu> a compiler to machine code or bytecode?
10:36:36 <cheater> doesn't matter
10:36:42 <cheater> let's say a compiler to C--
10:36:44 <cheater> or LLVM
10:38:28 -!- sebbu2 has changed nick to sebbu.
10:38:54 <cheater> or a compiler from some language to python
10:38:57 <cheater> for exampl
10:38:58 <cheater> e
10:39:15 <Patashu> seems easy enough then - libraries exist for example
10:39:21 <Patashu> unless you're fragmenting it further than the subroutine level?
10:40:00 <zzo38> Why isn't condition in Haskell implemented using a function like I said, instead of how it is?
10:41:43 <monqy> who knows
10:41:51 <olsner> zzo38: because having special syntax is convenient
10:41:57 <monqy> except when it isn't at all
10:42:08 <monqy> it's hurt me more than helped me, at least
10:42:40 <zzo38> I don't think the special syntax is convenient. I think a function like that I described would make more sense and have a lot more uses.
10:43:23 <Patashu> there's a function like that in lisp I believe
10:44:33 <zzo38> Notice, I put the condition last on purpose.
10:45:38 -!- azaq23 has quit (Ping timeout: 258 seconds).
10:45:38 <monqy> it'd also be great to have a multi-clause lambda but nope
10:48:57 <zzo38> I wrote an implementation of Huffman trees in Haskell.
11:00:11 <zzo38> I wrote an implementation of Huffman trees in Haskell: http://sprunge.us/ARVR
11:02:59 -!- azaq23 has joined.
11:07:07 <zzo38> It can use a tree for decoding, but for encoding the tree is flipped.
11:09:36 -!- azaq231 has joined.
11:10:06 -!- azaq23 has quit (Ping timeout: 260 seconds).
11:10:08 <elliott> <ais523> oh, and /make sure/ you free, the OS won't necessarily be able to clean up after you if you don't, because GPUs don't have an OS
11:10:12 <elliott> ais523: wow, you really need to free every time?
11:10:18 <ais523> at the moment, yes
11:10:54 <elliott> olsner: haskell's if syntax is not convenient
11:10:57 <elliott> ever
11:11:00 <elliott> it's awful
11:11:23 <monqy> is there a better way than what I'm doing to get something like J's forks into haskell
11:11:29 <elliott> bool t _ True = t; bool _ f False = f; if b t f = bool t f b
11:11:44 <elliott> monqy: fork f g h x = f x `g` h x
11:11:52 <elliott> ?pl \f g h x -> f x `g` h x
11:11:52 <lambdabot> (ap .) . flip (.)
11:11:56 <monqy> yeah but I wanted something syntactically convenient
11:12:14 <monqy> right now I defined (<|) and (|>) to be (flip (.)) and (<*>), respectively
11:12:16 <elliott> fork (+) (/) length seems pretty convenient :P
11:12:19 <zzo38> elliott: Yes that way "bool" is better.
11:12:42 <monqy> but your fork might be better
11:13:20 -!- zid has joined.
11:13:27 <monqy> oh and the usage of <| and |> is like (f <|g|> h)
11:13:28 <elliott> hi zid
11:13:37 <zid> someone just linked me to the bfjoust wiki page
11:13:59 <zid> do they all play off against each other, or do you just play individual matches
11:14:07 <elliott> there's a hill
11:14:08 <ais523> you play against the hill
11:14:15 <elliott> they play individual matches against every other program on the hill
11:14:17 <ais523> so the top n programs from the past, you play against
11:14:22 <zid> ais523: yay
11:14:24 <zid> That's fun
11:14:25 <ais523> if you beat any of them in average, you get on the hill yourself
11:14:35 <zid> koth has loop problems, invidiaul has sniping problems
11:14:44 <elliott> http://codu.org/eso/bfjoust/report.txt is the current report
11:14:50 <elliott> program sources at http://codu.org/eso/bfjoust/in_egobot/
11:14:50 <zid> I should try to remember bf
11:14:58 <ais523> the relevant parts are in the article
11:15:05 <elliott> ais523: unfortunately it's the new unreadable article
11:15:06 <ais523> remember the abbreviations exist, too, they'll save you lots of typing
11:15:10 <ais523> elliott: ah right
11:15:18 <zzo38> At least, I think that way "bool" is more sensible way to make the condition commands in Haskell, rather than if...then...else, due to functional programming and currying and so on.
11:15:20 <ais523> I thought someone fixed that, or at least toned it down
11:15:24 <ais523> or weren't you going to sort it out?
11:15:26 <elliott> zid: bfjoust programming is quite unlike bf programming; the abbreviations are key, and obvious algorithms don't work because of speed/unreliability
11:15:31 <ais523> zid: there was an edit war over the formatting of that article
11:15:34 <elliott> ais523: I was too lazy in the end
11:15:38 <zid> It's still bad :P
11:15:41 <elliott> no war, I just told quintopia it was stupid :P
11:15:46 <elliott> zid: http://esolangs.org/w/index.php?title=BF_Joust&oldid=21108 this page might be more readable for you
11:15:55 <ais523> I think I removed all the gratuitous italics
11:16:05 <elliott> zid: http://esolangs.org/wiki/BF_Joust_strategies is also invaluable, and includes lots of in-depth explanations of winning programs
11:16:14 <elliott> mostly ais523's, since he never stops typing
11:16:27 <ais523> I only started dominating the hill towards the end
11:16:34 <zid> I want top 100
11:16:36 <ais523> by submitting a few ludicrously complex programs, then a much simpler one
11:16:37 <elliott> ais523: I meant the in-depth things
11:16:40 <elliott> zid: on what?
11:16:41 <ais523> ah
11:16:46 <ais523> the hill only goes to 40-something
11:16:47 <elliott> the current hill is already pretty huge
11:16:59 <ais523> including 100 is probably not viable with the current state of BF Joust warriors
11:17:03 <elliott> I mean, the programs at the bottom are already pretty bad
11:17:14 <zid> My programs will be pretty bad too :P
11:17:28 <elliott> oh, I forgot
11:17:41 <elliott> zid: http://codu.org/eso/bfjoust/egojsout/ is very useful for writing bots
11:17:44 * zid ponders befunge wars
11:17:54 <elliott> it lets you pit a program against anything on the current hill or anything you paste in, with full trace and animation
11:18:04 <elliott> befunge wars predates bf joust :)
11:18:05 <zid> handy
11:18:09 <zid> oh cool
11:18:10 <elliott> (fukyorbrane; but it's fatally broken, alas)
11:18:16 <zid> I like befunge a lot
11:18:19 <elliott> er hm
11:18:20 <elliott> no
11:18:21 <zid> I wrote an interpreter for it
11:18:22 <elliott> fukyourbrane was brainfuck
11:18:28 <elliott> has nobody actually done befunge yet?
11:18:30 <elliott> that would surprise me
11:18:32 <ais523> !bfjoust simple_attack_with_decoys >>>>(-)*5<(+)*12<(-)*33<(+)*64(>)*7(>(+)*5[-])*19
11:18:39 <zzo38> I made the Huffman encode function is simple due to flipped trees: encode x = (>>= flip (findWithDefault []) (flipTree x));
11:18:39 <elliott> zid: which Funge?
11:18:40 <EgoBot> ​Score for ais523_simple_attack_with_decoys: 19.8
11:18:43 <ais523> elliott: BeYourFunge was yours, wasn't it? but you never got very far with it
11:18:43 <elliott> 93 or 98?
11:18:44 <zid> elliott: I made my own
11:18:47 <elliott> ais523: indeed
11:18:48 <zid> I don't like 93 or 98
11:18:54 <elliott> zid: so it's not befunge, then
11:18:56 <zid> it read 93 I think
11:19:01 <zid> but also supported my funge
11:19:12 <ais523> OK, a simple attack program that just follows all the rules of making a simple rush program did in fact get on the hill
11:19:14 <zid> I had graphics support :D
11:19:17 <ais523> and I'd expect it to not have managed that
11:19:20 <elliott> there's been a lot of progress on funge-98 in the past few years
11:19:29 <elliott> (with the release of the first even vaguely-compliant implementation four years ago)
11:19:30 <ais523> pity fungot isn't here to show off
11:19:30 <zid> push x,y,c on stack then there was a put pixel operation that popped them off
11:19:40 <elliott> oh, fungot is missing?
11:19:53 <elliott> zid: (fungot is our bot written in befunge-98, it does a bunch of language interpretation and markov babbling)
11:19:54 <ais523> elliott: incidentally, all this stemmed from a discussion on #nethack about how C++ was unreadable
11:19:57 <zid> I never did get around to writing funge using cardinally linked lists
11:20:06 <elliott> probably the only useful funge program anyone's ever witten
11:20:15 <ais523> then someone mentioned brainfuck, and it spiralled from there
11:20:19 <elliott> ais523: heh
11:20:29 <zid> I made a quip !
11:20:30 * zid preens
11:20:32 <elliott> ais523: btw, everything gets on the hill
11:20:38 <elliott> it just usually gets shoved off next time
11:20:46 <ais523> elliott: I know, I mean it's not in last place
11:20:46 <zid> I still need to figure out how this joust thing works
11:20:52 <elliott> also, /me stern glares at submitting programs in private
11:20:56 <elliott> !bfjoust clever <
11:20:59 <EgoBot> ​Score for elliott_clever: 0.0
11:21:02 <elliott> woot
11:21:07 <ais523> asking questions in here can be a good idea
11:21:09 <zid> !bfjoust righty >
11:21:10 <elliott> `quote Score for
11:21:11 <EgoBot> ​Score for zid_righty: 4.3
11:21:13 <ais523> elliott: < always scores 0
11:21:14 <zid> AHAHAHA
11:21:14 <HackEgo> 294) <Vorpal> !bfjoust test (-)*10000 <EgoBot> Score for Vorpal_test: 12.9 <Vorpal> yay \ 295) <Vorpal> !bfjoust test (++-)*1000000 <Vorpal> probably will suck <EgoBot> Score for Vorpal_test: 30.4 <Vorpal> what \ 305) <Deewiant> !bfjoust sm3 < <EgoBot> Score for Deewiant_sm3: 43.4
11:21:17 <zid> I win :D
11:21:17 <CakeProphet> help I added a #coding line to my python file but it still complains about unicode
11:21:21 <elliott> ais523: nope
11:21:22 <elliott> ais523: <Deewiant> !bfjoust sm3 < <EgoBot> Score for Deewiant_sm3: 43.4
11:21:24 <ais523> unless someone puts something on the hill that also suicides turn 1
11:21:25 <elliott> or at least it didn't used to :)
11:21:33 <ais523> elliott: the hill is no longer upside-down
11:21:36 <elliott> that might have been during the randomisation days, though
11:21:41 <zid> I scored 4.3 that means I'm better?
11:21:42 <elliott> ais523: upside-down?
11:21:48 <elliott> zid: well, out of a hundred
11:21:53 <ais523> zid: > basically moves to the second cell, then waits there forever
11:21:57 <ais523> so it only wins if the opponent suicides
11:22:11 <ais523> and < moves off the tape and suicides instantly, so it's worse
11:22:16 <ais523> you typically replace a program with < to delete it
11:22:20 <zid> !bfjoust zid1 [>]
11:22:23 <EgoBot> ​Score for zid_zid1: 4.3
11:22:35 <ais523> elliott: in the early days of the hill, losing programs got better scores
11:22:49 <elliott> ais523: err, really?
11:22:49 <ais523> zid: the hill's padded with zeroes, so that moves to the second cell then exits
11:22:50 <Vorpal> elliott, that 43.4 score was a bug iirc that got fixed.
11:22:52 <ais523> *the tape
11:22:52 <elliott> I think this was after that
11:22:57 <elliott> but okay
11:22:57 <zid> !bfjoust zid1 [>+]
11:23:00 <EgoBot> ​Score for zid_zid1: 0.0
11:23:08 <ais523> I suspect that runs off the /right/ end against most programs
11:23:11 <elliott> zid: that'll just run off the end, yeah
11:23:13 <ais523> you can run it in egojsout or somewhere to check
11:23:38 <zid> Can I detect the 128 nonses without doing 128 test-subtracts? :P
11:23:40 <CakeProphet> SyntaxError: UTF-16 stream does not start with BOM
11:23:45 <CakeProphet> halp that's Windows stuff
11:23:53 <ais523> zid: no, that's the main issue of the game
11:24:04 <zid> cool
11:24:07 <ais523> !bfjoust the_inevitable_next_thing_to_try [>(-)*128]
11:24:09 <EgoBot> ​Score for ais523_the_inevitable_next_thing_to_try: 4.7
11:24:12 <zid> it's 128 to be large enough that you spend forever trying to detect it?
11:24:15 <ais523> well, it's marginally better...
11:24:21 <elliott> zid: it's 128 for symmetry
11:24:30 <zid> symmetry?
11:24:37 <elliott> zid: programs are run with +- swapped in one situation; it's not important to understand right now but it helps balance
11:24:37 <ais523> zid: yep, so most programs try to figure out that a cell isn't a decoy before trying to clear it
11:24:48 <ais523> zid: basically, so that you can clear them with 128 +s or 128 -s
11:24:55 <ais523> because it wraps
11:25:07 <ais523> 128 + 128 = 256 = 0 in 8-bit arithmetic
11:25:22 <zid> I should read this wiki page first
11:25:37 <ais523> the strategies page, in particular, will help explain the basics
11:25:47 <zid> I still don't understand the rules yet
11:26:02 <elliott> this channel is just me, ais523 and bots, btw
11:26:08 <monqy> i don't want to read strategies but i want to try my stupid hand at some bfjoust, so I'll do that
11:26:11 <monqy> hi
11:26:15 <monqy> im a bot
11:26:18 <monqy> nice to meet you
11:26:25 <elliott> monqy is the stupidest of all our bots.
11:26:35 <zid> I lose if I have a 0 to the left of my program counter?
11:26:39 <ais523> actually, statistically speaking, everyone but elliott is insignificant
11:26:40 <zid> err tape pointer
11:26:46 <elliott> ais523: I, er, don't think OpenCL has anything to free buffers
11:26:50 <ais523> zid: no, you lose if the tape cell the pointer started on is 0 for two cycles in a row
11:26:59 <ais523> elliott: perhaps it's automatic in OpenCL, then; check the docs
11:27:16 <elliott> ais523: unfortunately, I don't know where the docs /are/; the spec is not really light reading
11:27:27 <ais523> zid: that's called your "flag"; generally, the goal of the game is to locate the enemy flag and zero it before they do the same to yours, without falling off the end of the tape
11:27:31 <ais523> which is just past the flag
11:27:43 <ais523> therefore, paranoid programs have to zero every single cell from the tenth onwards before moving on
11:27:58 <elliott> ais523: btw, what does GPU assembly actually look like? I mean, in the abstract
11:27:59 <zid> why tenth onwards?
11:28:03 <ais523> elliott: I don't actually know
11:28:08 <elliott> zid: tape is ten to thirty elements
11:28:10 <ais523> zid: because the tape's always at least 10 cells long
11:28:15 <zid> I don't know either, the driver translates to it doesn't it?
11:28:21 <ais523> so you can go to the tenth safely without a risk of falling off, but not beyond
11:28:24 <zid> that's how DX worked
11:28:43 <zid> ais523: Why is zeroing what's ahead important?
11:28:55 <elliott> zid: because that's the goal of the game?
11:28:57 <ais523> well, if you move past the opponent's flag, you lose (that's one of the rules of the game)
11:28:57 <elliott> to zero the enemy flag
11:29:13 <ais523> if you zero the cell before moving off it, and hold it at 0 for two cycles, then you know it's safe to move on
11:29:23 <ais523> because if you were already at the flag, doing that makes you win
11:29:30 <ais523> so if you haven't won yet, it must be because you aren't at the flag
11:29:43 <zid> is it not that it makes me lose, but it makes me not win?
11:30:22 <ais523> you lose instantly if you fall off the tape (rule of the game), just as you lose if your flag's zero for two cycles (also a rule of the game)
11:30:28 <ais523> those are the only two ways to lose, IIRC
11:30:42 <monqy> two cycles?
11:30:54 <ais523> yep, two cycles
11:30:57 <zid> it says you don't lose if you fall off
11:30:59 <zid> you just don't win
11:31:04 <zid> unless the other bot suicides
11:31:06 <ais523> zid: you don't lose if you fall off the end of the program
11:31:07 <elliott> it lies
11:31:09 <elliott> oh
11:31:10 <elliott> i see
11:31:11 <ais523> you do lose if you fall off the end of the tape
11:31:16 <ais523> and that probably needs fixing in the wiki if it's unclear
11:31:18 <elliott> ais523: hmm, a few separate read requests from the same buffer are faster than copying the whole sixteen megabyte thing, right?
11:31:18 <zid> then fix the page? :/
11:31:29 <elliott> zid: the page needs a total rewrite, but nobody cba enough to do so
11:31:37 <zid> you can just explain it to me then :P
11:31:38 <zid> http://codu.org/eso/bfjoust/egojsout/?ap&l=04363d6a559fdb8a002cd6a7b0f284f741f791a0&r=simple&t=25
11:31:44 <zid> explain that pretty animation too while you're at it
11:31:47 <ais523> "Note that reaching the end of the program (as opposed to the tape) is not a loss; rather, a program that does that takes no action on any future cycle, and thus loses, wins, or draws according to whether the opponent manages to zero its flag, commit suicide, or do neither."
11:31:51 <ais523> seems reasonably clear
11:31:57 <elliott> zid: warriors are the things in the middle line, position is them moving
11:32:01 <zid> oh, it's the gamefield left to right, with a heightmap?
11:32:03 <elliott> the bars are the tape values, treated as signed
11:32:05 <elliott> yeah
11:32:08 <ais523> yep
11:32:24 <ais523> and the flags are at the end, initialized to 128
11:32:32 -!- CakeProphet has quit (Quit: leaving).
11:32:38 <ais523> in this case, the red bot wins by a very small margin
11:32:48 <zid> This is SO much clearer
11:32:50 <zid> than ANY of the wiki
11:32:52 <ais523> because it zeroes the blue flag just before the blue bot zeroes the red flag
11:32:59 <ais523> yep, I think looking at the trace is probably the way to go
11:33:21 <elliott> <elliott> ais523: hmm, a few separate read requests from the same buffer are faster than copying the whole sixteen megabyte thing, right?
11:33:33 <elliott> I suspect only a handful, if that, of workers will actually succeed
11:33:34 <zid> are you trying to read from gpu memory?
11:33:39 <zid> DIRTY!
11:33:58 <elliott> zid: I'm doing GPU programming, how else am I meant to get my results out?
11:34:05 <zid> stop trying to do useful work
11:34:05 <elliott> I'm going through the defined APIs. :p
11:34:06 <ais523> elliott: basically, you have to do a complicated and slow memory transfer thing to read from global GPU memory (the details are abstracted for you with most good libraries)
11:34:08 <zid> and use the result as a texture
11:34:18 <elliott> They're not textures, this is OpenCL
11:34:21 -!- CakeProphet has joined.
11:34:25 <zid> I know, but you can do.
11:34:31 <ais523> a GPU->CPU transfer isn't that bad, and the length of time is probably going to be proportional to the size of the read plus a constant
11:34:35 <zid> Stop trying to do useful work, just calculate textures
11:34:38 <ais523> it's similar in speed to a CPU->CPU transfer
11:34:50 <CakeProphet> uh.... any idea why Python would give me an attributeerror when trying to access a method
11:34:53 <CakeProphet> yet when I print out dir
11:35:01 <elliott> ais523: right, but copying sixteen bytes dotted around a buffer is faster than copying sixteen megabytes all at once, surely?
11:35:02 <CakeProphet> (obj) I get the name
11:35:05 <CakeProphet> does that make any sense?
11:35:06 <zid> ais523: Why doesn't the 0 rule apply to red in this trace?
11:35:08 <CakeProphet> it doesn't to me
11:35:09 <ais523> elliott: I think so
11:35:28 <ais523> zid: because red 0s blue's flag just before blue 0s red's flag
11:35:42 <zid> wait, I think I completely misread something
11:35:42 <ais523> you'll see that red's flag still has a few pixels left when blue's is zeroed
11:35:48 <ais523> and when you win, you've won, game over
11:35:53 <zid> Yes, I did
11:36:02 <zid> I put an extra 'pointer' in there in my mind
11:36:15 <zid> know offhand an averagely strong bot I can try snipe?
11:36:23 <zid> program
11:36:46 <elliott> slowpoke. (Note: advice not advisable.)
11:36:54 <ais523> "simple" in egojsout is designed to be beaten by programs people are testing
11:37:11 <elliott> "-cl-mad-enable
11:37:11 <elliott> Allow a * b + c to be replaced by a mad. The mad computes a * b + c with reduced accuracy. For example, some OpenCL devices implement mad as truncate the result of a * b before adding it to c."
11:37:11 <elliott> what a mad optimisation
11:37:20 <elliott> haha, these flags are insane
11:37:27 <elliott> you can basically pass -cl-break-the-entire-IEEE-floating-point-spec
11:37:33 <zid> I want a pretty picture
11:37:36 <elliott> -cl-fortran (-cl-strict-aliasing)
11:37:44 <ais523> don't test against slowpoke, a) it's really really good, b) it'll probably crash your browser (but waterfall variants are even better at doing that)
11:38:01 <ais523> if you want a good program that's short to test against, try allegro
11:38:04 <zid> Right wins apparently
11:38:04 <ais523> (it's in the dropdown)
11:38:09 <zid> Can I get a red/blue graph of this somehow
11:38:15 <monqy> !bfjoust winner [[-]-]
11:38:19 <EgoBot> ​Score for monqy_winner: 14.2
11:38:21 <monqy> wooo
11:38:32 <ais523> zid: click on one of the < or > marks
11:38:35 <zid> !bfjoust winner [[-]>What is this I don't even]
11:38:38 <ais523> and it'll show you the graph for one tape length
11:38:38 <EgoBot> ​Score for zid_winner: 13.7
11:38:57 <ais523> monqy: wait, how does [[-]-] not simply suicide at the start of the game?
11:39:12 <zid> I am always perceived to be on the left hand side?
11:39:27 <ais523> the first program entered will be the "left program", the red one attacking from the left
11:39:28 <monqy> ais523: how does scoring work?
11:39:30 <ais523> i.e. the one in the top text box
11:39:42 <monqy> oh there it is
11:39:43 <ais523> monqy: http://codu.org/eso/bfjoust/SCORES explains it
11:40:23 <zid> My browser is dying a death :P
11:40:44 <zid> is ( the same as [
11:40:56 <ais523> no, ()* is an abbreviation for allowing you to abbreviate long programs
11:41:03 <ais523> instead of writing ++++++++++ you can just write (+)*10
11:41:10 <zid> Oh I see
11:41:17 <zid> (>)*9 makes sense now
11:41:25 <ais523> it's just syntactic sugar, but it helps a lot, particularly with high repeat counts
11:41:30 <monqy> anyway [[-]-] was my stalemating bot
11:41:47 <ais523> monqy: after the 128th - it runs ], checks that the square's 0, and now it's been 0 two cycles in a row
11:41:51 <ais523> one setting it to 0, one checking it's 0
11:41:54 <ais523> so it's actually a suiciding bot
11:41:58 <monqy> hm
11:42:08 <monqy> hopefully the enemy would have tampered with it by then
11:42:10 <ais523> a trivial stalemate on the flag is intentionally very hard to do
11:42:23 <ais523> monqy: that's where your only wins were coming from
11:42:26 -!- zzo38 has quit (Quit: Quitting are not permitted!!!).
11:42:32 <elliott> wtf, "const size_t foo = bar;" where bar is "const size_t bar = 999;" doesn't work because foo's initialiser is not constant?
11:42:37 -!- jix has quit (Read error: Connection reset by peer).
11:42:51 <zid> right
11:42:53 <monqy> while writing I forgot [ and ] were actually instructions
11:43:03 <monqy> as noted previously, I am the stupidest bot
11:43:05 <elliott> [ and ] actually feature quite rarely in the top programs
11:43:09 <elliott> they're slow :)
11:43:18 <ais523> they're necessary, though
11:43:23 <ais523> actually, anticipation is mostly square brackets, IIRC
11:43:32 <ais523> and it's 11th
11:43:42 <elliott> they're not really that necessary
11:43:50 <elliott> I mean, most of their uses can be totally inlined at the expense of insane explosion
11:43:52 <zid> I beat simple
11:43:53 <ais523> and the only program that beats slowpoke without being specifically designed to beat it
11:43:58 <ais523> zid: well done!
11:44:05 <ais523> why not post the program in-channel to see if it gets on the hill
11:44:11 <zid> !bfjoust simple_sniper >(+)*9(>)*8([-]>)*400
11:44:14 <EgoBot> ​Score for zid_simple_sniper: 20.8
11:44:19 <elliott> zid: want to feel daunted?
11:44:20 <elliott> http://codu.org/eso/bfjoust/in_egobot/quintopia_space_elevator.bfjoust
11:44:21 <elliott> http://codu.org/eso/bfjoust/in_egobot/ais523_waterfall3.bfjoust
11:44:29 <ais523> you might be interested in http://codu.org/eso/bfjoust/breakdown.txt
11:44:30 <elliott> (programs partially machine-generated)
11:44:36 <ais523> which shows you which programs your program beat, and which it lost to
11:44:43 <zid> doing me vs waterfall 3 atm
11:44:45 <ais523> elliott: I actually understand space_elevator, or did once
11:44:50 <zid> Right wins, 12
11:44:51 <elliott> I don't :)
11:45:07 <elliott> zid: the various traces it links to are the different tape lengths and polarities
11:45:10 <ais523> I was studying my opposition in great detail
11:45:11 <zid> Oh, You can dump -1's in to delay them, I guess
11:45:17 <zid> I should do that
11:45:21 <ais523> zid: yep, the concept of decoys
11:45:28 <elliott> basically, the polarities are: in "sieve" polarity, the left and right programs have +- as normal; but with "kettle" polarity, +- is swapped for one of the programs
11:45:29 <zid> !bfjoust simpler >(-)*9(>)*8([-]>)*400
11:45:32 <EgoBot> ​Score for zid_simpler: 19.2
11:45:34 <elliott> (it doesn't matter which, as far as the winner goes)
11:45:40 <ais523> most programs will more or less effortlessly clear past smallish decoys, though
11:45:45 <zid> !bfjoust simpler (>-)*9([-]>)*400
11:45:49 <EgoBot> ​Score for zid_simpler: 6.3
11:45:52 <zid> hrmph
11:45:55 <elliott> zid: this is because in the early days, people submitted programs that were just +- swaps of others, and did unreasonably well
11:45:58 <ais523> so your decoy of size 9 worked better than a decoy of size 1
11:46:16 <ais523> and the reason is that most programs know that decoys of size 1 are easy to make
11:46:20 <zid> how do you figure out if a decoy is a decoy?
11:46:28 <zid> increment once?
11:46:31 <ais523> you normally try making small changes to it to see if it becomes zero
11:46:43 <zid> so I could make an anti-decoy with a +? :)
11:46:47 <ais523> the "offset clear" revolutionized BF Joust, I think
11:46:57 <ais523> it's explained in the strategy article
11:47:02 <ais523> but basically, you clear with, say, ++[-]
11:47:13 <ais523> so that any decoy value from -2 to +2 will be cleared almost instantly
11:47:14 <elliott> Compilation error: <program source>:9:24: error: can't convert between vector values of different size ('key_t' and 'int')
11:47:14 <elliott> oops
11:47:24 <elliott> guess I should learn how opencl vectors work
11:47:33 <monqy> !bfjoust winner_ii [[+-](+)*64]
11:47:37 <EgoBot> ​Score for monqy_winner_ii: 8.1
11:47:40 <monqy> :(
11:47:46 <zid> !bfjoust simpler (>-)*9([+]>)*400
11:47:48 <EgoBot> ​Score for zid_simpler: 15.0
11:47:52 <zid> !bfjoust simpler (>---)*9([+]>)*400
11:47:55 <EgoBot> ​Score for zid_simpler: 11.0
11:47:57 <zid> !bfjoust simpler (>---)*3([+]>)*400
11:48:00 <EgoBot> ​Score for zid_simpler: 14.3
11:48:10 <zid> !bfjoust simpler (>)*9([+]>)*400
11:48:13 <EgoBot> ​Score for zid_simpler: 16.1
11:48:23 <zid> Still can't beat my 20.8 :P
11:48:25 <zid> fluke
11:48:25 <monqy> !bfjoust winner_ii [[-](-)*64]
11:48:29 <EgoBot> ​Score for monqy_winner_ii: 15.5
11:48:32 <ais523> zid: one marginal improvement: there's never any point in doing > more than 29 times without a < in between, so you can do, say, *9 then *20 and get a slight improvement for free
11:48:42 <monqy> woohoo I beat winner
11:48:52 <zid> I beat waterfall 3
11:48:52 <ais523> I'm not sure if there are any vibration programs on the hill that it would help against, though
11:48:58 <ais523> heh
11:49:12 <ais523> waterfall3 is a little fragile in one of its detection loops
11:49:26 <elliott> Compilation error: <program source>:12:2: error: statement requires expression of scalar type ('char __attribute__((ext_vector_type(8,8)))' invalid)
11:49:26 <elliott> while (key < first_key + (key_t)KEY_WORKLOAD);
11:49:27 <elliott> ^ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
11:49:27 <elliott> I don't even know any more...
11:49:29 <ais523> I used a GA to tweak the constants in it so that it wouldn't lose against any of the programs on the hill at the time
11:49:34 <zid> Either I beat it, or it beat me :P
11:49:35 <monqy> !bfjoust winner_iii [[(-)*64](-)*64]
11:49:38 <elliott> wait
11:49:38 <EgoBot> ​Score for monqy_winner_iii: 8.4
11:49:45 <ais523> EgoBot: are you trying to compare vectors with <?
11:49:47 <elliott> ais523: (vec<othervec) does an _elementwise_ comparison?
11:49:51 <monqy> winner iii how could you
11:49:56 <ais523> elliott: I think it's just an error
11:50:07 <zid> Yea, I beat waterfall 3
11:50:11 <elliott> ais523: evidently not, since it's turned into a vector and while is complaining that it's not a scalar
11:50:12 <zid> what does the number mean after wins
11:50:16 <zid> (-2) or (10) or whatever
11:50:18 <ais523> how much it won by
11:50:18 <elliott> zid: I told you
11:50:22 <zid> did you?
11:50:23 <zid> sorry
11:50:25 <elliott> <elliott> zid: the various traces it links to are the different tape lengths and polarities
11:50:28 <elliott> <elliott> basically, the polarities are: in "sieve" polarity, the left and right programs have +- as normal; but with "kettle" polarity, +- is swapped for one of the programs
11:50:33 <elliott> it's just showing by how many of those you won
11:50:38 <ais523> so 10, for instance, means left beats right on 10 more possibilities than right beats left (or is it the other way round?)
11:50:38 <elliott> well ok i didn't say it explicitly :P
11:50:45 <zid> oh I see
11:50:49 <ais523> it's always going to be an even number unless there are draws
11:50:57 <ais523> and often even then
11:51:02 <zid> http://codu.org/eso/bfjoust/egojsout/?l=15396a05bd5bf1a9cf46c801df0d4408d6a43277&r=721bcf3b62a9de45dd13d789ddc874fce091e147&t=10
11:51:19 <zid> untouched!
11:51:19 <ais523> wait, does that URL link to waterfall3 in any way?
11:51:23 <ais523> if so, it'll crash my computer
11:51:25 <ais523> so I'd better avoid it
11:51:25 <zid> yes
11:51:27 <zid> fine by me
11:51:35 <elliott> works in Chrome just fine :P
11:51:41 <elliott> ais523: hmm, can you coerce an integer of an appropriate size into a vector?
11:51:42 <zid> firefox is only using 460MB of ram
11:51:45 <ais523> crashes Chromium too for me
11:51:51 <ais523> I think I just have a weak computer
11:51:51 -!- MSleep has changed nick to MDude.
11:51:54 <ais523> elliott: I don't know
11:51:55 <zid> I'm using firefox 9.0a1
11:51:57 <elliott> if so, I think I should keep the key counter as an integer, and just cast it in the loop body
11:51:58 <elliott> ais523: bah :P
11:52:04 <zid> or whatever the fuck minefield is called these days
11:52:22 <elliott> firefox G(A64)
11:52:40 <zid> 9.0a1 (2011-09-01)
11:53:02 <zid> ais523: Do I get a prize for sniping waterfall 3?
11:53:16 <ais523> zid: I'm looking at it atm
11:53:24 <ais523> it seems to be very close, and vary a lot at different tape lengths
11:53:35 <ais523> (I'm looking in my own BF Joust program "juiced")
11:53:46 <elliott> zid: it's easy to counter a single program; significantly harder to counter more than one strategy :)
11:53:48 <zid> I want a single step debugger
11:54:00 <zid> elliott: shh, that was my 2nd attempt at a program
11:54:06 <zid> It just happened to randomly beat waterfall 3 :P
11:54:09 <elliott> although http://codu.org/eso/bfjoust/in_egobot/elliott_interior_crocodile_alligator.bfjoust did surprisingly well just by countering one program
11:54:14 <elliott> mostly because it produced something utterly mad
11:54:19 <zid> awesome name
11:54:20 <elliott> I don't even understand how it works myself
11:54:32 -!- sllide has joined.
11:54:46 <ais523> aha, it beats waterfall3 by being a very fast rush that isn't triplockable
11:54:56 <zid> triplock? :)
11:55:02 <ais523> on the basis that fast rushes coded that naively tend not to stay on the hill long
11:55:09 <zid> ahh
11:55:15 <ais523> zid: basically, it's a method of attacking ]]] in a program's control flow
11:55:16 <elliott> zid: http://esolangs.org/wiki/BF_Joust_strategies#Triplock
11:55:30 <ais523> by detecting the first ] falling through and making sure the cell isn't zero for the third
11:55:36 <ais523> so that the opposing program gets stuck in a loop
11:55:49 <ais523> it was trying to triplock your program, which of course has no ]]] anywhere
11:56:04 <zid> I see
11:56:04 <ais523> and its reverse tripwires don't work to detect it because it rushes past them before they can be set up
11:56:17 <ais523> so it's using the triplock as a last resort, and failing
11:56:26 <ais523> I had fun making waterfall3, but it's way too complex for its own good
11:56:42 <zid> I like vibrator
11:57:13 <ais523> it beats waterfall2 the same way, incidentally
11:57:23 <ais523> in fact, that one's much more decisive
11:57:26 <zid> i'm not quite sure how to come up with a strategy for this
11:57:33 <zid> I'm currently 6 pooling
11:57:38 <ais523> neither is anyone else, that's part of the fun in the game
11:57:44 <zid> Maybe I can work my way up to a 4 gate
11:57:55 <zid> waterfall3 is like a 1 gate fast expand :P
11:58:02 * zid starcraft 2 references galore
11:58:50 <ais523> heh, I know a starcraft 2 player, so I get the references even though I don't play it myself
11:59:10 * CakeProphet loves SC2
11:59:19 <ais523> hmm, defend9.75 is still up there too
11:59:26 <ais523> perhaps there'll be a renaissance of fast rush programs
11:59:39 <elliott> um, hmm
11:59:47 <elliott> ais523: what endianness are GPUs this decade?
11:59:52 <ais523> the issue is, they seem far too easy to decoy against, and tripwire-avoidance is a) the only known fastrush counterstrategy, and b) it doesn't work
11:59:57 <CakeProphet> zid: it is time to write a lingrush.bfjoust
12:00:01 <ais523> elliott: I, um, don't know, I've never written code where it's relevant
12:00:01 <zid> :)
12:00:06 <zid> right wins (24)
12:00:07 <zid> oops
12:00:24 <elliott> ais523: neither have I, but I suspect casting a ulong to a uchar8 vector makes it relevant
12:00:38 <monqy> !bfjoust winner_iii >[[+]+]<[[+]+]
12:00:39 <zid> Oh god, 26
12:00:42 <EgoBot> ​Score for monqy_winner_iii: 14.3
12:00:43 <monqy> ok I'm done with winners for now
12:00:44 <ais523> elliott: write a test program and find out?
12:01:00 <ais523> 14.3 seems standard for programs that slowly suicide
12:01:04 <CakeProphet> monqy is so good at bfjoust
12:01:05 <ais523> it probably beats turtles, or something
12:01:05 <elliott> ais523: already have, just wondering whether it mightn't be broken
12:01:08 <elliott> ais523: gpls need a repl
12:01:13 <monqy> CakeProphet: I'm not even trying
12:01:15 <elliott> erm
12:01:16 <elliott> gpus
12:01:29 <ais523> elliott: it's probably float-endian or something insane like that
12:01:37 <monqy> how about a quick suicide
12:01:47 <ais523> well, < always gets 0
12:02:04 <monqy> !bfjoust whats_bfjoust_help [-]
12:02:05 <ais523> !bfjoust how_many_turtles (+)*88
12:02:09 <EgoBot> ​Score for monqy_whats_bfjoust_help: 13.2
12:02:09 <EgoBot> ​Score for ais523_how_many_turtles: 14.1
12:02:13 <zid> !bfjoust meow >->+>->>-------------+>>>-([+]>)*400
12:02:16 <EgoBot> ​Score for zid_meow: 12.4
12:02:17 <zid> :(
12:02:40 <zid> It beats waterfall3 on tape size 10!
12:02:43 <ais523> hmm, now I'm wondering if part of the winner score is a result of accidentally locking reverse offset clears
12:02:47 <zid> And only loses by 16 overall
12:02:48 <ais523> zid: waterfalls do better on long tapes
12:03:03 <zid> why is it named waterfall?
12:03:06 <ais523> anything that sets up that many tripwires and locks will
12:03:15 <ais523> basically, it's a pun on lock as in canal lock
12:03:25 <ais523> if you string lots of those together, you basically get a (slow) waterfall
12:03:54 <monqy> !bfjoust winner_iv [[(-)*128](+)*128]
12:03:57 <EgoBot> ​Score for monqy_winner_iv: 8.2
12:04:03 <monqy> true victory
12:04:20 <ais523> !bfjoust i_love_vibrations ((+)*128(-)*128)*1000
12:04:25 <EgoBot> ​Score for ais523_i_love_vibrations: 11.9
12:04:28 <CakeProphet> !bfjoust the_best (>)*7+++>--->(++[-]>)*50
12:04:31 <EgoBot> ​Score for CakeProphet_the_best: 10.4
12:04:41 <elliott> good warriors today A+
12:04:43 <ais523> i_love_vibrations did far too well, go add more antishudders, people!
12:04:56 <monqy> someone should snipe winner
12:04:57 <ais523> elliott: well, making a defend9.75 or a waterfall3 takes time
12:04:58 <zid> what does { do
12:05:03 <zid> expansion again?
12:05:13 <ais523> yep, but for nested brackets
12:05:24 * zid needs to figure out how to write what he wants to write
12:05:27 <ais523> (a{b}c)*5 = (a)*5b(c)*5 = aaaaabccccc
12:05:43 <ais523> and it only exists because brackets have to match, you can't write ([)*5
12:05:53 <ais523> umm, (a{b}c)%5, I mean
12:06:07 <zid> I suck at control flow in brainfuck
12:06:20 <ais523> so if you need to abbreviate lots of nested loops, you do it like that
12:06:23 <zid> I want to increment by 1, check for 0, otherwise decrement by 2, else increment until 0
12:06:33 <ais523> +[--[+]]
12:07:00 <zid> is there an 'ad infinitum' structure I can use
12:07:02 <ais523> in that case, it's possible to almost directly convert the words into symbols and have it work
12:07:08 <ais523> ()*100000 works
12:07:13 <ais523> because 100000 is the cycle limit
12:07:39 <ais523> I think many interps accept *-1 as a shorthand for that; I'm not sure if the one egobot's using does (iirc chainlance or cranklance, I forget which)
12:07:44 <elliott> )*-1, please
12:07:44 <zid> !bfjoust wiggly (>)*9+([--[+]]>)*1000000
12:07:47 <EgoBot> ​Score for zid_wiggly: 14.3
12:07:55 <monqy> !bfjoust winner_v [](+)*100000
12:07:57 <EgoBot> ​Score for monqy_winner_v: 4.4
12:07:59 <elliott> it's the agreed-upon abbreviation >:D
12:08:02 <zid> !bfjoust wiggly (>)*9+([++[-]]>)*-1
12:08:05 <EgoBot> ​Score for zid_wiggly: 14.0
12:08:14 <ais523> elliott: just like "sieve" and "kettle" are agreed-upon?
12:08:28 <elliott> ais523: yes, except that more than just me supports -1
12:08:29 <ais523> half of BF Joust terminology seems to have been you imposing your views on things
12:08:31 <CakeProphet> !bfjoust the_best (>)*9([-]>)*5(++[-.])*100
12:08:34 <EgoBot> ​Score for CakeProphet_the_best: 3.3
12:08:36 <CakeProphet> lol
12:08:36 <ais523> now I wonder if juiced does
12:08:38 <zid> !bfjoust wiggly (++>-->)*9+([--[+]]>)*-1
12:08:39 <ais523> I guess it does, but am not sure
12:08:41 <EgoBot> ​Score for zid_wiggly: 5.2
12:08:49 <zid> fail
12:09:03 <ais523> oh, seems I rewrite it to 1000000 during parsing
12:09:09 <ais523> zid: you start with 18 >s
12:09:13 <ais523> that's going to run off the tape quite a lot
12:09:31 <ais523> (you have two >s in the *9 abbreviation)
12:09:43 <zid> oops it misdirects the flag
12:09:49 <zid> detects
12:09:54 <zid> !bfjoust wiggly (++>-->)*4+([--[+]]>)*-1
12:09:56 <EgoBot> ​Score for zid_wiggly: 21.5
12:10:00 <zid> highscore!
12:10:02 <ais523> wow, best so far
12:10:05 <CakeProphet> !bfjoust stupid_rush (>)*9([+]>)*5([-])*100
12:10:07 <EgoBot> ​Score for CakeProphet_stupid_rush: 5.8
12:10:24 <ais523> and it's made it onto the hill, in position 39
12:10:25 <zid> lol wtf did it do there..
12:10:38 <zid> oh, your bot fucking reset it
12:10:45 <ais523> the bot only shows the last run
12:10:51 <ais523> you can just resubmit, or run locally
12:10:58 <zid> waterfall 3 zipped across the screen and flipped it from 0 to 1
12:11:02 <zid> so I started incrementing it again
12:11:09 <ais523> it does that
12:11:18 <ais523> it's a defensive program
12:11:21 <zid> Could I carpet bomb 10-35 with 1s every now and then?
12:11:25 <zid> +1s
12:11:35 <CakeProphet> you could but not effectively.
12:11:35 <ais523> you can't go past the opponent's flag, if you do, instant loss
12:11:39 <zid> oh right..
12:11:47 <ais523> you can carpet bomb 2->current safe known location, if you like
12:11:59 <zid> can I pick a length of tape
12:12:01 <ais523> although the program for that would likely be machine-generated as it doesn't code trivially into BF
12:12:21 <ais523> in the simulators, yes, that's what the links in egojsout are for (various tape lengths)
12:12:27 <zid> oh I see
12:12:30 <ais523> in the actual game, no, as it'd make it obvious where the flag was
12:12:33 <zid> I lose length 13
12:12:42 <zid> I get caught in a trap
12:12:47 <zid> twice
12:12:59 <ais523> that's a good summary of waterfall3 :D
12:13:04 <zid> three times..
12:13:07 <zid> it's stunlocked me :(
12:13:14 <zid> four times :D
12:13:19 <zid> five haha
12:13:34 <zid> up to 8 so far
12:13:51 <zid> I'm stuck on the square before your flag, perpetually decrementing a square
12:13:55 <elliott> ais523: what will happen if I for (;;); on a GPU?
12:14:06 <ais523> elliott: bad things, I'm not sure exactly how bad
12:14:20 <elliott> ais523: hmm, I'll find out
12:14:21 -!- olsner has quit (Ping timeout: 240 seconds).
12:14:24 -!- Phantom_Hoover has joined.
12:14:26 <ais523> zid: that's known as a lock; it's what waterfall3 attempts to achieve, as a lock-based defense program
12:14:31 <ais523> it'll win eventually, but it may take it a while
12:14:40 <ais523> as it's going to clear every other square on the tape really thoroughly, in order
12:14:41 <zid> ais523: oh wow, I actually trapped waterfall 3
12:14:42 <elliott> ais523: absolutely nothing happened -- mostly because I hvae this sneaking feeling my kernel isn't executing
12:14:46 <zid> I shorted its logic out, it's completely stuck
12:14:58 <ais523> zid: on which tape length?
12:14:59 <zid> I'd link you it but you won't click it
12:15:04 <zid> 14
12:15:04 <ais523> I can run it local
12:15:08 <zid> (++>-->)*4+([--[+]]>)*-1
12:15:09 <zid> vs that
12:15:40 <ais523> zid: yep, what's happening is that the decoys collided with each other
12:15:58 <ais523> defense programs get more-or-less random results on short tapes as a result of the details of how decoy setups mix
12:16:46 <elliott> ais523: hmm, is there any good way to crash a GPU? I'm fairly sure my kernel isn't actually running :P
12:17:02 <zid> I did some opencl very very briefly
12:17:07 <ais523> elliott: I'm not sure, but crashing a GPU typically requires a hard reboot of your computer
12:17:12 <ais523> so it's probably not what you want to do
12:17:14 <elliott> ais523: that's OK, I'm desperate
12:17:17 <zid> I lost the source though it was on some guy's machine with 4 expensive radeons for bitcoin mining
12:17:17 <ais523> if you're lucky, the driver will notice
12:17:22 <elliott> for(;;); is executing in 0 time, s
12:17:23 <elliott> o
12:17:26 <ais523> and get things back to a roughly sane state
12:17:39 <ais523> try doing an infinite loop that can't be obviously optimized out
12:17:43 * ais523 waits for elliott to ping out
12:17:43 -!- jix has joined.
12:17:46 <elliott> hi
12:17:59 <elliott> zid: I'm starting to worry that the entire userbase and market of OpenCL might be built around libertarians
12:18:05 <elliott> also, of GPUs probably :P
12:18:11 <zid> the replays get horrendously slow on tape length 30
12:18:17 <elliott> (I wonder how many dollars have been spent on bitcoin mining hardware so far?)
12:18:34 <ais523> zid: waterfall3 actually rushes the last few tape cells in some situations, to avoid hitting the cycle limit
12:18:39 <ais523> that's how slow it is
12:18:48 <zid> no, I mean computationally
12:18:50 <zid> I'm getting 1fps
12:18:55 <zid> tape 10 I get about 100fps
12:18:56 <elliott> zid: chrome
12:19:00 <ais523> that's because it's still computing the end of the run
12:19:03 <elliott> seriously, it's faster :P
12:19:09 <elliott> or maybe your cpu is just slow :|
12:19:13 <zid> I'm not installing a browse for 1 website
12:19:19 <ais523> at 100fps, it's playing back a recording
12:19:19 <zid> elliott: 2.4GHz core2 quad
12:19:28 <ais523> at 1fps, it's trying to play back a recording while computing the end of that recording
12:19:38 <zid> even though it said 'right wins' ?
12:19:44 <zid> or is it shipping it off to some cgi to do
12:19:49 <zid> but if I watch the recording, js fights
12:19:55 <ais523> it has to actually compute the recording as well as just run the program
12:20:00 <ais523> and you can watch the start while the end's being generated
12:20:12 <ais523> scroll to the end of the page to see how far it's got generating the runthrough
12:20:24 <zid> ais523: is your decoy setup the same each run?
12:20:39 <ais523> there's no way to randomize it, so yes
12:20:43 <ais523> for a given program
12:20:49 <ais523> different programs of mine use different decoy setups, unsurprisingly
12:20:53 <zid> could I just do the complete inverse of what waterfall3 does for any tape length wide enough to contain all of your decoys, I guess I'm asking
12:21:25 <zid> I think for tape length >20 there's basically two parts, the 'head' end which tries to navigate the decoys, and the 'tail' end that sets them up
12:21:36 <zid> and then a bunch of coinflip wins/losses for short tapes :P
12:21:44 <elliott> zid: it's possible, for any BF Joust program, to generate a program that beats it on all configurations
12:21:55 <elliott> this hasn't ever been actually proven but is pretty obvious
12:21:58 <ais523> elliott: was that ever proved? I strongly suspect it's true, but don't actually /know/
12:21:58 <zid> elliott: seems likely, but have you proven it
12:22:01 <elliott> I mean, it could be false, but I'd rather not believe it's false
12:22:10 <elliott> Anyway, point is, it's possible in practice even if not in theory :P
12:22:11 <zid> my gut says it's true
12:22:23 <elliott> zid: tl;dr Yes, you can, but it'll probably make no sense at all and do terribly against other programs
12:22:34 <zid> elliott: well, depends
12:22:42 <zid> I think it could work just fine
12:22:48 <ais523> elliott: I'm actually wondering if whether given any set of programs, there's always some program that beats them all on all configs
12:22:56 <zid> say a bot leaves a +4, -5, +2, 128
12:23:03 <elliott> ais523: That's a rather stronger hypothesis, but one that breaks the game quite thoroughly
12:23:08 <elliott> ais523: Finite set, I presume
12:23:09 <ais523> at one point, I was considering proving that, then programatically generating that program and submitting it to the hill
12:23:10 <zid> I just do - until 0, + until 0, - until 0, + until zero
12:23:12 <ais523> err, yes
12:23:20 <zid> and that bot will never *fail* to kill the flag
12:23:24 <zid> it just won't be optimal against a lot of stuff
12:23:26 <elliott> ais523: if you're evil, generate it, submit it, and then iterate
12:23:28 <ais523> zid: no, you recognise the decoy on tape length 10, then go straight to the flag and zero it
12:23:51 <zid> ais523: i wasn't going to do that. I wanted less specific
12:23:56 <zid> just a soft-counter
12:23:56 <ais523> elliott: I remember when you submitted a copy of then-beating-everything waterfall3 and I tweaked a constant slightly to make it beat even the original waterfall3
12:24:01 <zid> not a hard counter
12:24:06 <ais523> fair enough
12:24:33 <zid> yea, this is eating my browser
12:24:46 <zid> 1.2GB of memory in use and 25% cpu :D
12:24:57 <ais523> I use a C program to test programs against each other, it's rather faster than egojsout
12:25:17 <ais523> although the animations aren't as pretty
12:25:22 <zid> gief?
12:25:33 <zid> i'd be fine with ncurses tbh
12:25:43 <zid> %02X * 30 with ansi codes to colour red/blue or purple
12:25:50 <zid> * tape size rather
12:25:51 <ais523> it's X11, and just uses numbers to show values rather than a histogram
12:26:02 <zid> I should make an ncurses version
12:26:08 <elliott> raw X11 protocol over sockets? impressive
12:26:15 <zid> I use xcb
12:26:16 <elliott> also, wait for lance, everyone, chainlance and egojoust are both really terrible :P
12:26:18 <zid> rather than X11
12:26:25 <elliott> zid: rather than Xlib, you mean
12:26:32 <zid> well, rather than either
12:26:34 <ais523> here we go: http://sprunge.us/fALT
12:26:43 <elliott> xcb is gross because it's asynchronous and asynchronous shit is gross because C is gross and lacks continuations
12:26:54 <zid> that's very.. good.. ais
12:26:58 <zid> (christ look at that mess)
12:27:05 <elliott> I see no mess
12:27:10 <ais523> give it filename to both programs as first and second args, tape length as third arg to limit to one tape length, anything as fourth arg to get an "animation"
12:27:12 <zid> It has 20 levels of nesting!
12:27:18 <elliott> No, it doesn't
12:27:24 -!- olsner has joined.
12:27:35 <ais523> it's an imperative C program, you'd expect many layers of nesting
12:27:47 <ais523> it's not an OO program that uses lots of helper functions to keep cyclomatic complexity down
12:27:47 <zid> ais523 how does it know to sabotage me?
12:27:56 <zid> It doesn't have to be OO
12:27:57 <ais523> what do you mean by that?
12:28:01 <zid> you just have to be function names :P
12:28:07 <zid> it's backtracking exactly to where i am
12:28:14 <zid> and fuzzing the cell I'm [-]ing
12:28:18 <ais523> oh, because it locked you there in the first place
12:28:28 <zid> oh, it's using prior knowledge?
12:28:35 <ais523> it's not a case of it guessing where you are; rather, it decided where it wanted you to be, and made sure you went there
12:28:45 <zid> this shit is retardedly clever :P
12:28:53 <elliott> "retardedly clever" --zid, genius.
12:29:18 <zid> About 184 results (0.12 seconds)
12:29:22 <zid> I AM NOT A UNIQUE SNOWFLAKE :(
12:30:50 <zid> I think ais is too clever for me by like several orders of metric
12:31:03 <ais523> zid: I've had a few years' head start when it's come to jousting
12:31:54 <zid> I wonder if I could win by never leaving cells 0-3
12:32:01 <zid> vs any amount of things
12:32:26 <elliott> that would be a defence program
12:32:43 <elliott> it will just sit there if the other program is defence, unless you give up after a while and go attack (hybrid)
12:32:46 <zid> I am being highly unoriginal here aren't I
12:32:52 <elliott> hybrid strategies are difficult to write, but have large payoff
12:33:00 <elliott> zid: no, it's very hard to think of a new strategy nowadays
12:33:01 <ais523> zid: being original is probably quite difficult to do
12:33:06 <elliott> deep poke was the last one
12:33:10 <elliott> and lead to ais523 almost declaring the game beaten
12:33:20 <ais523> elliott: no, that's not what made me declare the game beaten
12:33:21 <elliott> but then he thought of a counterstrategy that might beat the game instead :
12:33:22 <elliott> :P
12:33:22 <zid> I read a post about that
12:33:29 <monqy> need a new game now
12:33:31 <elliott> really? where?
12:33:34 <ais523> that was timer clear, which destroys all defense programs, as far as I can tell
12:33:42 <zid> Games you play are fun while everybody is bad, but eventually get less fun as you get better, because the limits of the game are exposed
12:33:45 <ais523> I even figured out how to get it to beat anticipation, which I thought was a counterstrategy
12:33:51 <zid> I can't remember the example game now, it was something about asking questions
12:33:53 <elliott> oh, I saw that
12:34:01 <elliott> it seemed a bit shallow
12:34:07 <ais523> it doesn't necessarily beat all rush programs, just all defense
12:34:12 <zid> It was a bit of a.. erm.. deepity
12:34:14 <elliott> ais523: I thought you thought that a revised slowpoke might beat the game
12:34:18 <elliott> but then realised it was beatable
12:34:22 <elliott> but then thought of another strategy
12:34:25 <elliott> that might beat the game instead
12:34:34 <ais523> elliott: I thought that it might completely destroy defense, not the game in general
12:34:44 <ais523> anticipation was what I thought the counterexample was (you'll notice it beats slowpoke)
12:34:50 <elliott> well, defence is three/fourths of the game nowadays
12:34:51 <ais523> but then I came up with a way for slowpoke to beat that too
12:35:03 <ais523> luckily, I've forgotten what it was
12:35:11 <ais523> but unfortunately, I imagine I'll work it out again with some thought
12:35:12 <zid> nice writeup of waterfall 3
12:35:15 <ais523> heh
12:35:30 <elliott> s/writeup/thesis/
12:35:32 <ais523> elliott: I think defense isn't that high a proportion; it's mostly me who submits complex defense programs, and only because I enjoy writing them
12:35:34 <zid> "figure out the fuck the other guy must be doing to have cleared certain cells, and plant stuff that would kill it" is pretty much it?
12:35:50 <ais523> zid: yep
12:36:08 <zid> presumably a more chaotic program would be harder to beat for waterfall3
12:36:10 <ais523> although it's more measuring how long it takes to clear cells, than which cells are cleared
12:36:15 <ais523> and indeed, yes
12:36:31 <ais523> alternating between more than two strategies for clearing beats it, for instance
12:36:33 <zid> I guess longer programs have an advantage
12:36:41 <elliott> ICA is basically the typical chaotic program -- wow
12:36:43 <elliott> ais523: ICA
12:36:48 <ais523> (there are some sneaky tricks in there for beating progams that just alternate between two things)
12:36:55 <ais523> elliott: it can't be /that/ rare an acronym
12:37:02 <zid> am I at least thinking about strategy well? :/
12:37:02 <elliott> :(
12:37:03 <ais523> also, make an inferior_crocodile_alligator that's not quite as good
12:37:06 <ais523> zid: yes
12:37:06 <elliott> zid: yes
12:37:23 <zid> I declare myself a fast learning, if not skillful, then :P
12:37:27 <elliott> most people just spend a few days submitting nonsense programs that happen to get high results on the current hill before giving up and copying others
12:37:28 <ais523> ICA only wins because it behaves so stupidly that defense programs have no idea what it's going to do next
12:37:47 <elliott> ais523: sorry, but the only continuation of the ICA naming scheme is the inevitable chevrolet_movie_theatre
12:37:54 <elliott> which I suppose I'll use if I come up with a program that does massively well
12:38:05 <ais523> elliott: I'm amused that Gregor and I came to more or less the same program strategy via indepedent reasoning
12:38:12 <ais523> sufficiently so, that Gregor accused me of copying him
12:38:26 <ais523> although slowpoke does much better than the furry girls, because it doesn't try to be too complicated
12:38:26 <zid> Is there one called I_drive_a
12:38:30 <zid> to fill that gap
12:38:35 <ais523> I don't think so
12:39:04 <elliott> !bfjoust i_drive_a [>]
12:39:06 <elliott> now there is
12:39:07 <ais523> also, about long programs: allegro is third, and it's a oneliner
12:39:13 <EgoBot> ​Score for elliott_i_drive_a: 4.5
12:39:19 <elliott> yessssssssssss
12:39:25 <ais523> that's slightly more than 4.3!
12:39:28 <zid> define oneliner? :P
12:39:33 <ais523> fits into one line of IRC
12:39:37 <zid> heh
12:39:42 <ais523> here's allegro: ->++>-->>+>>->+>+(>[(+)*9[-].[.+]])*2(+<)*4(+)*23<(-)*23<(-)*30<(+)*30<(-)*30<(+)*29(>)*9++(>[(+)*16[-].[.+]][-[+]])*19
12:39:44 <zid> where is the link to the hill again?
12:39:49 <ais523> http://codu.org/eso/bfjoust/report.txt
12:39:57 <ais523> (you can submit long programs via giving URLs to EgoBot)
12:40:07 <elliott> ais523: is there a way t
12:40:11 <elliott> o reset my GPU memory?
12:40:11 <zid> shouldn't I be on there?
12:40:12 <elliott> restarting X?
12:40:17 <elliott> (my program is leaky and I want to play DF)
12:40:22 <ais523> for a time, people were submitting arbitrary pages to EgoBot as a joke, like the report, and Google
12:40:27 <ais523> elliott: not in general, no
12:40:30 <ais523> restarting X might work
12:40:43 <ais523> but I wouldn't count on it
12:40:43 <ais523> hard reboot will work
12:40:50 <elliott> i'll hard reboot then
12:40:54 <elliott> by literally holding the power button
12:40:58 <elliott> live fast, die young
12:40:58 * zid is pretty sure he scored >20 twice
12:40:59 <ais523> zid: you are on there
12:41:09 <zid> ctrl-f zid 404
12:41:10 <ais523> wiggly and simple_sniper are both on the list
12:41:18 <zid> oh, cache is wrong
12:41:22 <ais523> 39 47 21.13 -7.79 zid_wiggly.bfjoust
12:41:31 <zid> firefox seems to be ignoring it
12:41:37 <zid> the no-cache header
12:41:51 <ais523> pressing F5 works
12:41:53 <zid> how come there's a 4.47?
12:42:06 <ais523> that's the most recently submitted program
12:42:11 <zid> it always gets 48th?
12:42:15 <ais523> it's not on the hill, but it's shown in comparison to the others
12:42:18 <ais523> so that people know how well it did
12:42:26 -!- elliott_ has joined.
12:42:47 <zid> 39th will do, I said I wanted a hill position and I got one :P
12:43:02 <ais523> the most recently eliminated program (which is often but not always the most recently submitted) is shown on the list at the top too
12:43:28 <ais523> hmm, space_elevator is still #5
12:43:49 <ais523> I should try to remember how it works
12:43:51 <quintopia> i've been thinking about improving it
12:43:53 -!- elliott has quit (Read error: Connection reset by peer).
12:44:01 <ais523> quintopia: does anyone but you and me understand it at all?
12:44:07 <zid> I should think about a funge war would work
12:44:16 <zid> bf is cool because it has the idea of a tape already in it
12:44:29 <zid> you don't really need to add anything but machine architecture
12:44:46 <ais523> even so, Kerim coming up with sharing the tapes was a pretty nifty idea that got it all started
12:44:47 <quintopia> ais523: you understood it once. i am too lazy to write it out, but it is actually less complicated than slow poke
12:45:03 <zid> ais523: We should write quad core bf apps, obviously
12:45:04 <ais523> yep, seems about right, it just has stupidly many cases
12:45:07 <ais523> which makes it look confusing
12:45:23 <ais523> (most of which are the same basic concept but differ in the details)
12:45:33 <ais523> and slowpoke is relatively simple too
12:45:40 * zid ponders about competitive spacechem
12:45:40 <ais523> at least compared to waterfall3
12:45:48 <quintopia> zid: i had a plan for a funge game. shared fungespace with code that is unwritable by the other guy, since the goal is to overwrite a certain shared area
12:45:49 <zid> red vs blue waldo
12:45:59 <zid> quintopia: Hmm, nice idea
12:46:25 <zid> What about befunge where both players appear to be 'above' the other's grid, and there's an instruction that drops a bomb
12:46:28 <zid> and destroys a symbol
12:46:33 <zid> and you win by making the other guy hit an edge
12:46:54 <ais523> Befunge doesn't really have edges, but I suppose you could surround the area with landmines or something
12:46:55 <zid> obviously most programs would be perfect grids of > on the left edge, < on the right edge, etc
12:47:03 <zid> but it might work
12:47:10 <ais523> it wouldn't be interesting unless you could read the enemy fungespace
12:47:15 <zid> See, I'm already coming up with strategy :P
12:47:19 <ais523> so as to get an idea about what the opponent was doing
12:47:31 <zid> ais523: but of course, you're limited by your own processing space
12:47:32 <ais523> zid: well, even something as basic as the rule of 9 took a while to come up with in BF Joust
12:47:38 <ais523> and the offset clear was revolutionary
12:47:39 <zid> does the read instuction take an x,y pair
12:47:43 <zid> or does it read under your 'reader'
12:47:47 <ais523> x,y pair
12:47:54 <ais523> brb, lunch
12:48:07 <elliott_> zid: you want viewing distance
12:48:08 <lambdabot> elliott_: You have 1 new message. '/msg lambdabot @messages' to read it.
12:48:08 <zid> I just don't think funge is well-fitting enough, which is a shame
12:48:27 <zid> You could shoe-horn a billion games into funge wars
12:48:33 <zid> but bf joust really fits in nicely to BF
12:48:42 <zid> you're just adding machine architecture around the existing cpu
12:49:37 <zid> wow, I just had an idea like.. battle stations for bf joust, you put your program on a flash stick
12:49:43 <zid> and plug it into a machine with 2 usb ports
12:49:48 <zid> and it battles them and says who wins
12:49:57 <elliott_> that's called a really limited computer :P
12:50:00 <zid> and you win some ELO
12:50:16 <zid> It'd be like pokemans in real life, but with brainfuck :P
12:50:32 <quintopia> i feel like the us needs an esolang event o.o
12:50:47 -!- ralc has joined.
12:50:50 <zid> I feel like the US needs carpet bombing, what a strange difference in views
12:51:25 <Phantom_Hoover> zid, oh shut up.
12:51:29 * zid grins
12:52:16 <elliott_> I, too, think that the correct solution to a difference in political opinion or culture or whatever is mass murder.
12:52:16 <quintopia> my guess is that zid lives in the us
12:52:33 <quintopia> you have to live here to hate it that much
12:52:51 <zid> Thankfully, no
12:52:58 <zid> I live in little britain
12:53:13 <elliott_> why do you want to carpet bomb the us again
12:53:29 <zid> free carpets for EVERYBODY
12:54:41 <elliott_> I see
12:54:59 <zid> The real reason is that their wallpaper is too ugly
12:55:19 <elliott_> i'm sure
12:55:21 <monqy> !bfjoust true_winner (-)*-1
12:55:25 <EgoBot> ​Score for monqy_true_winner: 11.7
12:55:28 <monqy> see
12:55:30 <monqy> I mean
12:55:31 <monqy> aww
12:55:37 <monqy> my fingers were offset by one
12:55:46 <monqy> this is how stupid I am
12:55:54 <monqy> I can't even place my robot fingers properly :(
12:56:13 <zid> what led to the decision of making it two consecutive turns at 0 for the flag? more strategy?
12:56:23 <elliott_> yes
12:57:28 <quintopia> i think making it three consecutive turns would make it even more strategy
12:57:46 <zid> You mean stratelogical
12:57:49 <elliott_> Ten consecutive terms.
12:57:51 <zid> ist
12:57:57 <elliott_> turns.
12:57:58 <elliott_> w/e.
12:58:22 <monqy> ten turns and true winner will have its way
12:59:41 <quintopia> ten turns: shudder is automatic winner
13:00:14 <monqy> what's shudder
13:00:42 <quintopia> (++-+-++-+++---+-++-)*-1
13:00:54 <monqy> nice
13:01:43 <quintopia> hell it'd be hard to beat even with three turns, but once you can, everything becomes richer
13:01:48 <quintopia> aka hard as hell
13:07:08 <zid> I'd be more interested if bf joust used a fixed tape length I think
13:07:20 <zid> actually no
13:07:24 <zid> I just didn't think that through
13:07:37 -!- sebbu has quit (Ping timeout: 245 seconds).
13:08:20 -!- sebbu has joined.
13:11:22 <quintopia> lul
13:12:09 <quintopia> a fixed tape with a wandering flag?
13:13:51 <ais523> quintopia: a three-turn wait allows triplocking on your own flag, which is AFAICT a broken strategy
13:18:19 <ais523> monqy: wow true_winner gets a lot of ties
13:18:30 <ais523> ah, that's the program that lots of people have submitted
13:18:39 <monqy> ah
13:18:48 <ais523> I can't remember who called it you_spin_me_right_round, that was the best name for it I've seen
13:18:52 <monqy> well tying was the goal
13:19:55 <ais523> a good antishudder clear will be able to beat it on both polarities; most programs will beat it on one
13:22:29 <ais523> !bfjoust polarity_spinner >>>(+)*6<+<(+)*40>[]<([{<(+)*-1}]<(-)*-1)%120
13:22:35 <EgoBot> ​Score for ais523_polarity_spinner: 11.8
13:22:38 <ais523> hmm
13:23:11 <ais523> !bfjoust polarity_spinner >>>>(+)*6<+<(+)*40>[]<([{<<(+)*-1}]<<(-)*-1)%120
13:23:17 <EgoBot> ​Score for ais523_polarity_spinner: 9.0
13:23:27 <ais523> looks like that particular cheap trick doesn't work any more
13:23:53 <zid> speaking of cheap tricks, hi ais
13:24:06 <ais523> wb me
13:24:08 <ais523> (and hi zid)
13:24:16 <zid> I went and made a snack
13:24:21 <zid> now I'm watching minish cap
13:24:23 <ais523> !bfjoust polarity_spinner >>>(+)*6<+<(+)*40<(-)*33>>[]<([{<<(+)*-1}]<(-)*-1)%120
13:24:27 <EgoBot> ​Score for ais523_polarity_spinner: 3.0
13:24:33 <zid> how does that one work then?
13:24:37 <ais523> must have miscounted, I take it
13:24:57 <ais523> it's meant to be like true_winner/increase/you_spin_me_right_round/all the other names that have been used
13:25:06 <zid> I don't know what that is
13:25:11 <zid> how does it work?
13:25:11 <ais523> except that it detects what polarity the opponent is using, and matches it
13:25:20 <ais523> basically, keep adjusting your flag in one direction
13:25:36 <ais523> the opponent can only win by adjusting it the other way, otherwise it's either a draw or they fall off the end
13:25:41 <ais523> !bfjoust polarity_spinner >>>(+)*6<+<(+)*40>[]<([{<(+)*-1}]<(-)*-1)%120
13:25:47 <EgoBot> ​Score for ais523_polarity_spinner: 11.8
13:25:51 <zid> yea, my bot loses to 'falls off the end'
13:25:54 <ais523> I /have/ got this the right way round, right?
13:25:56 <zid> unless I wrap the [-] in another loop
13:26:00 <ais523> !bfjoust polarity_spinner >>>(+)*6<+<(+)*40>[]<([{<(-)*-1}]<(+)*-1)%120
13:26:05 <EgoBot> ​Score for ais523_polarity_spinner: 4.3
13:26:09 <ais523> yep, definitely
13:26:44 <ais523> there's a way of wrapping loops to guarantee you can't fall off, let me try to rememebr it
13:26:45 <ais523> *remember
13:26:54 <ais523> [-[-]][-[-]], I think
13:27:12 <ais523> !bfjoust polarity_spinner >>>(+)*6<+<(+)*40>[]<([{<(-)*-1}]<(+)*-1)%130
13:27:16 <EgoBot> ​Score for ais523_polarity_spinner: 6.7
13:27:23 <zid> what happens if your flag is 0 for a turn, then one bot +s it and one bot -s it, does that make a loss?
13:27:31 <ais523> !bfjoust polarity_spinner >>>(+)*6<+<(+)*40>[]<([{<(-)*-1}]<(+)*-1)%121
13:27:33 <ais523> zid: yes
13:27:36 <EgoBot> ​Score for ais523_polarity_spinner: 5.7
13:27:45 <ais523> otherwise (+)*-1 would be unbeatable
13:27:50 <ais523> !bfjoust polarity_spinner >>>(+)*6<+<(+)*40>[]<([{<(-)*-1}]<(+)*-1)%118
13:27:56 <EgoBot> ​Score for ais523_polarity_spinner: 5.2
13:27:59 <ais523> !bfjoust polarity_spinner >>>(+)*6<+<(+)*40>[]<([{<(-)*-1}]<(+)*-1)%120
13:28:04 <EgoBot> ​Score for ais523_polarity_spinner: 4.3
13:28:05 <zid> or [+] ?
13:28:08 <ais523> aha, this is the backwards version
13:28:19 <ais523> zid: that wouldn't, you could beat it via going to the flag then (-)*-1
13:28:29 <ais523> !bfjoust polarity_spinner >>>(+)*6<+<(+)*40>[]<([{<(+)*-1}]<(-)*-1)%130
13:28:29 <zid> oh you could beat it by doing -- twice yea
13:28:34 <EgoBot> ​Score for ais523_polarity_spinner: 12.4
13:28:39 <ais523> !bfjoust polarity_spinner >>>(+)*6<+<(+)*40>[]<([{<(+)*-1}]<(-)*-1)%140
13:28:45 <EgoBot> ​Score for ais523_polarity_spinner: 11.9
13:28:50 <ais523> I used to not tweak constants, now I'm shameless about it
13:28:58 <zid> :D
13:29:03 <ais523> !bfjoust polarity_spinner >>>(+)*6<+<(+)*40<(-)*10>>[]<([{<(+)*-1}]<(-)*-1)%130
13:29:05 <zid> "If the theory is solid it should win regardless" ?
13:29:09 <EgoBot> ​Score for ais523_polarity_spinner: 15.1
13:29:14 <ais523> take that, turtles!
13:29:41 <ais523> yep, that's the principle
13:30:51 -!- monqy has quit (Quit: hello).
13:30:56 <ais523> !bfjoust polarity_spinner >>>(+)*6<+<(+)*40<(-)*10>>([{(>)*6(>+++++[-.+-])*21}]<([{<(+)*-1}]<(-)*-1)%130)%8000
13:31:01 <EgoBot> ​Score for ais523_polarity_spinner: 15.4
13:32:04 <ais523> !bfjoust polarity_spinner >>>(+)*6<+<(+)*40<(-)*10>>([{(>)*6(>+++++[-....])*21}]<([{<(+)*-1}]<(-)*-1)%130)%8000
13:32:09 <EgoBot> ​Score for ais523_polarity_spinner: 20.6
13:32:20 <ais523> there we go, I think that's beating the defense programs
13:32:39 <ais523> !bfjoust polarity_spinner >>>(+)*6<+<(+)*40<(-)*10>>([{(>)*6(>+++++[-....])*21}]<([{<(+)*-1}]<(-)*-1)%130)%80000
13:32:45 <EgoBot> ​Score for ais523_polarity_spinner: 17.0
13:32:50 <ais523> !bfjoust polarity_spinner >>>(+)*6<+<(+)*40<(-)*10>>([{(>)*6(>+++++[-....])*21}]<([{<(+)*-1}]<(-)*-1)%130)%4000
13:32:52 <zid> wat
13:32:57 <EgoBot> ​Score for ais523_polarity_spinner: 19.8
13:33:06 <ais523> well, if two defense programs end up against each other, they do nothing forever, right?
13:33:10 <zid> I don't get how that scores differently?
13:33:16 <ais523> so if you think that's happened, you go and use an anti-defense program
13:33:28 <ais523> the large number at the end is the number of cycles it waits before assuming defense
13:33:35 <ais523> !bfjoust polarity_spinner >>>(+)*6<+<(+)*40<(-)*10>>([{(>)*6(>+++++[-....])*21}]<([{<(+)*-1}]<(-)*-1)%130)%12000
13:33:35 <zid> oh right
13:33:41 <EgoBot> ​Score for ais523_polarity_spinner: 19.0
13:33:43 <zid> you should figure it out! :D
13:33:47 <ais523> !bfjoust polarity_spinner >>>(+)*6<+<(+)*40<(-)*10>>([{(>)*6(>+++++[-....])*21}]<([{<(+)*-1}]<(-)*-1)%130)%8000
13:33:53 <EgoBot> ​Score for ais523_polarity_spinner: 19.6
13:33:53 <ais523> looks like I was right first time
13:33:59 <zid> be cycle perfect on 0ing their flag ;)
13:34:19 <ais523> that's how I tweaked waterfall3 to beat elliott_'s copy of it when he submitted a copy of it
13:34:33 <zid> has fixed duration "highest value flag loses" been tried as a variant?
13:34:37 <ais523> started attacking a couple of cycles sooner, and beat the clone of itself to the flag while not changing the result against anything
13:34:43 <ais523> zid: I don't think so
13:34:49 <zid> sounds interesting to me
13:34:55 <ais523> would falling off the end still be a loss?
13:35:09 <zid> shrug
13:35:23 <zid> I think it'd just HALT you
13:35:23 <ais523> lowest flag looses seems potentially more interesting, otherwise the optimal behaviour is clearly to just set the flag to 0 so the opponent can't tell where it is
13:35:31 <ais523> unless, hmm, the opponent pokes you
13:35:38 <zid> I prefer yours I think
13:35:46 <zid> do flags start at 0?
13:36:03 <ais523> in highest-wins, I don't see why not
13:36:08 <zid> that sounds fun
13:36:24 <zid> it'd balance incing your own flag vs decing theirs
13:36:30 <zid> and bobytraps of course
13:38:12 <zid> I guess (+)*128 would be the standard intro, rather than (>)*9
13:38:28 <zid> or you could do +120 then rush their flag, to get their first
13:38:33 <ais523> !bfjoust undermine >>>>(>[[>](>(-)*120[-])*-1])*-1
13:38:35 <zid> there*
13:38:36 <EgoBot> ​Score for ais523_undermine: 15.6
13:38:57 <zid> I wonder if it has anything that just stops it working as a competitive thing
13:39:04 <ais523> heh, I've made a program that mostly just beats my own programs
13:39:05 <zid> like it's really easily solveable or something
13:39:36 <ais523> am I really the only person using reverse decoy setup?
13:39:49 <ais523> I'd add that strategy to the strategies page if it were at all good, as I don't think it's there yet
13:41:03 <ais523> oh, I clearly need a small offset before doing the reverse offset clear
13:41:28 <zid> CLEARLY
13:41:38 <zid> I would have told you but I didn't want to ruin the surprise
13:41:54 <ais523> !bfjoust undermine >>>>(>[[>]((>++++[-[-[-[-[-[-[-[-[(-)*120[-]{}]]]]]]]])%29)*-1])*-1
13:41:56 <EgoBot> ​Score for ais523_undermine: 0.0
13:42:02 <ais523> err, that obviously doesn't compile
13:42:08 <zid> I think you have a boog :P
13:42:18 <ais523> !bfjoust undermine >>>>(>[[>]((>++++[-[-[-[-[-[-[-[-[(-)*120[-]{}]]]]]]]])%29)*-1])*-1
13:42:20 <EgoBot> ​Score for ais523_undermine: 0.0
13:42:22 <ais523> !bfjoust undermine >>>>(>[[>]((>++++[-[-[-[-[-[-[-[-[(-)*120[-]{}]]]]]]]]])%29)*-1])*-1
13:42:24 <EgoBot> ​Score for ais523_undermine: 21.4
13:42:30 <ais523> that's better
13:42:55 <zid> damnit, you beat me by .3
13:43:02 <zid> am I 40th now? :P
13:43:05 <ais523> heh, it's pushed you down from #39
13:43:10 <ais523> yes, you're 40th
13:43:40 <zid> Is there anything stopping you just submitting a program that does the same thing, but with different names, and maybe an unreachable statement to stop a string match?
13:44:14 <elliott_> they won't do well
13:44:29 <zid> hmm?
13:44:59 <elliott_> well, programs draw against themselves
13:45:03 <elliott_> win and lose against the same things
13:45:08 <elliott_> so it's basically just another draw
13:45:08 <elliott_> eh
13:45:12 <elliott_> i guess it might work to flood the hill
13:45:15 <elliott_> but it's easily rerversible
13:45:30 <zid> because the sniper for it will just end up beating it?
13:45:38 <elliott_> yeah
13:45:42 <zid> it might work for knocking people out of the list though
13:45:55 <zid> if I put 40 waterfalls up, that *would* have gotten the top 40, the waterfall sniper will instead get #1
13:46:03 <zid> even if sniper would otherwise have been lower ranked
13:47:14 -!- ais523_ has joined.
13:47:29 -!- ais523 has quit (Disconnected by services).
13:47:30 -!- ais523_ has changed nick to ais523.
13:47:34 <ais523> !bfjoust undermine >>>>(>[[-[++[>]]]((>++++[-[-[-[-[-[-[-[-[(-)*120[-]{}]]]]]]]]])%29)*-1])*-1
13:47:37 <EgoBot> ​Score for ais523_undermine: 18.7
13:47:43 <zid> I would manipulate first place but I can't be bothered :P
13:48:06 <ais523> it's about seeing your programs do well, rather than seeing programs you submitted do well
13:48:23 <zid> I could get my bot #1
13:48:25 <zid> the one I wrote
13:48:35 <zid> if I flooded with bots that it beat that are higher scored against it
13:48:49 <zid> so I write a bot to beat spam_poke, then submit 100 spam_pokes
13:49:02 <zid> and the top 40 that would be spampoke, gets beaten by my bot that beats spam_poke
13:49:04 <zid> every time
13:49:07 <ais523> no you couldn't, the scoring system is designed to counteract that
13:49:10 <zid> cool!
13:49:18 <zid> how does it do that?
13:49:25 <ais523> you'll find that the more duplicates of a program are submitted, the worse it tends to do
13:49:35 <ais523> simply because the same programs beat it each time
13:49:35 <zid> right, that also helps me though
13:49:40 <ais523> for instance, anticipation beats slowpoke
13:49:41 <zid> I submit *my* program once
13:49:48 <zid> and submit 30 copies of everything else
13:49:54 <zid> they all get draws, I get 30 free wins from spampoke
13:49:55 <ais523> so it'll climb in the rankings the more clones of anticipation are submitted
13:49:59 <ais523> and that only counts for duplicates on the hill
13:50:07 <ais523> your clones will have trouble staying on the hill after a while
13:50:18 <zid> I still think there's some manipulation I could do, even if not for a guarenteed first
13:50:31 <ais523> (that said, if a program beats the entire hill, like waterfall3 and slowpoke both did for a time, you can ruin the hill by spamming copies of it; someone actually did that and we had to revert the hill, it was a mess)
13:50:47 <elliott_> that someone was me hi
13:50:54 <ais523> !bfjoust undermine >>>>(>[([-[++[>{}]]]((>++++[-[-[-[-[-[-[-[-[(-)*120[-]{}]]]]]]]]])%29)*-1)%29])*-1
13:50:57 <EgoBot> ​Score for ais523_undermine: 15.4
13:51:07 <ais523> wow, I didn't expect that to do worse
13:51:10 <zid> has bruteforce been tried
13:51:11 <ais523> must just be that it's too slow
13:51:30 * zid wonders how quickly powers of 6 scale
13:52:02 <ais523> oh, aha, why is it reverse offset clearing a value -1 decoy?
13:52:21 <zid> ais, could I bruteforce all 10 character programs (no expansion stuff)
13:52:22 <ais523> evolutionary programming's been tried, but it didn't do all that well
13:52:26 <zid> not evolutionary
13:52:27 <zid> bruteforce
13:52:46 <ais523> ah, it isn't
13:53:09 <ais523> the real problem's that I have a test backwards
13:53:16 <ais523> zid: possibly, but I suspect none would do well
13:54:45 <zid> shame it runs so slowly
13:54:48 <zid> need that brainfuck cpu
13:55:10 <zid> Maybe I should learn how to make bfj in an fpga
13:55:21 <zid> 8GHz clockrate gogo
13:56:21 <zid> I should just write the program that fights programs
13:57:44 <ais523> !bfjoust undermine >>>>((>[-[++[>([-[++[>{}]]]((>++++[-[-[-[-[-[-[-[-[(-)*120[-]{}]]]]]]]]])%29)*-1)%29]{}]])%29)*-1
13:57:46 <EgoBot> ​Score for ais523_undermine: 10.9
13:57:51 <ais523> bleh
13:57:59 <ais523> you mean it does better with the test backwards?
13:58:34 <zid> handling the expansion will suck :/
13:58:57 <ais523> my interp, just like most competitive interps, run rather faster than egojsout, which is more of a debugger
13:59:08 <ais523> and optimises expansion
13:59:18 <zid> do you do complicated representations
13:59:22 <zid> or just use the string
13:59:31 <ais523> complicated representations, of course
13:59:32 <ais523> !bfjoust undermine >>>>(>[[>]((>++++[-[-[-[-[-[-[-[-[(-)*120[-]{}]]]]]]]]])%29)*-1])*-1
13:59:34 <elliott_> the important thing is about expansions
13:59:35 <EgoBot> ​Score for ais523_undermine: 20.3
13:59:36 <zid> I might have to go for complicated just to make the expansion easy
13:59:38 <ais523> strings are not a good format
13:59:50 <zid> I can just use a signed int for TTL
13:59:50 <elliott_> zid: we have well-established general algorithms for that
13:59:52 <elliott_> (ask oerjan)
13:59:54 <zid> and <0 is infinite
13:59:59 <zid> elliott_: YES FUN!
14:00:01 <zid> LESS*
14:00:06 <elliott_> zid: ok, enjoy your slow interp
14:00:07 <zid> wow I accidently the wrong word entirely
14:00:10 <zid> fuck off :/
14:00:53 <ais523> I'm not entirely sure I followed oerjan's algo
14:00:59 <ais523> I think I came up with basically the same thing independently
14:01:10 <zid> I was thinking of basically a linked list
14:01:13 <zid> but without it being linear
14:01:26 <zid> int command; with a couple of pointers to other nodes
14:01:31 <zid> if the command is ] or whatever
14:01:39 <zid> and expansion gets an int ttl;
14:01:48 <zid> which takes a different node once ttl hits 0
14:01:54 <zid> (or is never decrement in the -1 case)
14:02:01 <ais523> yep, it's usual to have a linked list with the body of a loop connected in a different direction
14:02:04 <zid> not that it'd matter actually, it'd never hit -2billion before the counter expired
14:02:13 <ais523> what you're describing is pretty much what juiced does internally
14:02:16 <zid> I don't see why this would be slow
14:02:23 <elliott_> zid: it's about () expansions
14:02:35 <elliott_> the entire speed is dependent on the fancy interpretations of those
14:02:49 <zid> I could just do some 'external' cheating for those I'm sure
14:03:06 <elliott_> You mean expanding ahead of time?
14:03:06 <zid> just replace some flow control pointers
14:03:12 <zid> no
14:03:14 <elliott_> You have to keep state.
14:03:28 <zid> expanding ahead of time would work easily of course
14:03:33 <zid> even for the -1 case there's a cycle limit
14:03:34 <elliott_> It wouldn't because you run out of memory.
14:03:37 <elliott_> And time.
14:03:38 <zid> so it wouldn't use more than 100KB or whatever
14:03:42 <elliott_> Incorrect
14:03:54 <zid> oh right you can have any length thing inside ()
14:03:58 <elliott_> Paths can be not taken as well as taken
14:04:04 <elliott_> Plenty of programs blow up on any expanding interpreter
14:04:07 <zid> so it's 100k per ()
14:04:08 <ais523> !bfjoust undermine >>>>(>[[>]((>++++[-[-[-[-[-[-[-[-[(-)*120[.-]{}]]]]]]]]])%29)*-1])*-1
14:04:10 <EgoBot> ​Score for ais523_undermine: 20.5
14:04:14 <zid> what's the cycle limit?
14:04:17 <ais523> now, that's interesting
14:04:19 <elliott_> 100k.
14:04:21 <ais523> zid: 100000 in egojoust
14:04:24 <elliott_> But the cycle limit is irrelevant.
14:04:26 <elliott_> ais523: in every joust
14:04:28 <ais523> and that's become a defacto standard as a result
14:04:31 <ais523> elliott_: yes
14:04:35 <zid> why doesn't it matter?
14:04:36 <ais523> also, it's not irrelevant
14:04:46 <zid> If I enter a () I can prove it won't be in there any more than 100k cycles
14:04:49 <ais523> waterfall3 would hit it if I didn't change to a fast rush when it was at around cycle 96000
14:04:51 <zid> so I only need to expand it to a 100kB limit
14:05:03 <zid> not that I'm even doing it this way
14:05:07 <zid> I'm just saying it's possible
14:05:10 <zid> and works fine
14:05:11 <elliott_> ais523: tell zid why pre-expansion doesn't work, I'm too busy
14:05:23 <ais523> zid: you can have masses of nested loops
14:05:30 <ais523> !bfjoust undermine >>>>(>[[>]((>++++[-[-[-[-[-[-[-[-[(-)*116[.-]{}]]]]]]]]])%29)*-1])*-1
14:05:33 <EgoBot> ​Score for ais523_undermine: 20.5
14:05:42 <ais523> good to know that tweaking /that/ constant doesn't matter
14:05:53 <ais523> changing to the three-cycle clear makes it beat space_elevator, interestingly enough
14:05:54 <zid> or 116-120 both work fine
14:05:59 <zid> but 114 is way better :P
14:06:40 <ais523> what command are you supposed to run after hg pull (if any)? I've forgotten
14:06:47 <ais523> ah, hg update
14:06:47 * zid uses git
14:06:49 <elliott_> hg update or hg merge
14:07:37 <ais523> zid: I know; there's an hg repo of the egojoust competitors, though, and I wanted to update it
14:07:52 <zid> I just wanted to say "no idea"
14:07:57 <zid> in a way that'd also give some context why
14:08:12 <Vorpal> ais523, you can do hg pull -u iirc to do the hg up automatically
14:08:29 <zid> The tape itself has a random length from 135 to 167 elements; isn't it 10-35?
14:08:38 <ais523> 10-30
14:08:43 <elliott_> zid: you're reading an old document
14:08:51 <elliott_> about G.'s version
14:08:51 <zid> someone linked me it and told me to read it (stares at ais)
14:08:54 <ais523> it used to be much longer, but shorter tapes were more interesting
14:09:01 <ais523> zid: that was elliott_ who linked you to it, not me
14:09:10 <zid> the staring worked regardless :D
14:09:12 * ais523 stares at elliott_
14:09:17 <zid> proxy staring!
14:09:20 <elliott_> umm, what did I link?
14:09:24 <zid> http://esolangs.org/w/index.php?title=BF_Joust&oldid=21108
14:09:28 <elliott_> oh, that explains the new version later on
14:10:24 <zid> anybody doing [ or ] has presendence over someone doing + or - is all I really need to know about regarding synchrroniziging?
14:10:33 * zid spels gud
14:10:43 <ais523> !bfjoust undermine >>>>(>[([>{((>++++[-[-[-[-[-[-[-[-[(-)*120[.-]{}]]]]]]]]])%29)*-1}]((>++++[-[-[-[-[-[-[-[-[(-)*120[.-]{}]]]]]]]]])%29)*-1)%5])*-1
14:10:46 <EgoBot> ​Score for ais523_undermine: 22.2
14:10:53 <ais523> zid: pretty much, it's the only case where there can be a contradictoin
14:11:00 <ais523> *ambiguity
14:11:07 <zid> 22.2, you MONSTER
14:11:52 <ais523> wow, that little change worked wonders against quite a few programs
14:11:56 <ais523> and did nothing at all against most of the others
14:12:05 <ais523> (it might look like a big change, but I just duplicated the clear loop)
14:13:12 <ais523> it does really well at the start of the alphabet, but then is beaten horrifficaly by myndzi's programs
14:13:20 <ais523> let me put an antiturtle in there and see how much difference it makes
14:13:28 <ais523> !bfjoust undermine (+)*9>>>>(>[([>{((>++++[-[-[-[-[-[-[-[-[(-)*120[.-]{}]]]]]]]]])%29)*-1}]((>++++[-[-[-[-[-[-[-[-[(-)*120[.-]{}]]]]]]]]])%29)*-1)%5])*-1
14:13:31 <ais523> I expect it to do worse
14:13:31 <EgoBot> ​Score for ais523_undermine: 28.5
14:13:33 <ais523> but I don't know
14:13:34 <Patashu> lol
14:13:36 <zid> MONSTER KILL
14:13:36 <ais523> wow, I was wrong
14:14:02 <ais523> guess I can't disregard turtles after all
14:14:24 <ais523> that only seems to really hurt against anticipation
14:14:35 <ais523> and it still beats that, just not by as much
14:16:20 <ais523> !bfjoust undermine (+)*9>>>>>>(>[([>{((>++++[-[-[-[-[-[-[-[-[(-)*120[.-]{}]]]]]]]]])%29)*-1}]((>++++[-[-[-[-[-[-[-[-[(-)*120[.-]{}]]]]]]]]])%29)*-1)%5])*-1
14:16:23 <EgoBot> ​Score for ais523_undermine: 24.7
14:16:27 <ais523> !bfjoust undermine (+)*9>>>>>(>[([>{((>++++[-[-[-[-[-[-[-[-[(-)*120[.-]{}]]]]]]]]])%29)*-1}]((>++++[-[-[-[-[-[-[-[-[(-)*120[.-]{}]]]]]]]]])%29)*-1)%5])*-1
14:16:30 <EgoBot> ​Score for ais523_undermine: 27.1
14:16:35 <ais523> !bfjoust undermine (+)*9>>>(>[([>{((>++++[-[-[-[-[-[-[-[-[(-)*120[.-]{}]]]]]]]]])%29)*-1}]((>++++[-[-[-[-[-[-[-[-[(-)*120[.-]{}]]]]]]]]])%29)*-1)%5])*-1
14:16:38 <EgoBot> ​Score for ais523_undermine: 29.8
14:16:43 <ais523> !bfjoust undermine (+)*9>>(>[([>{((>++++[-[-[-[-[-[-[-[-[(-)*120[.-]{}]]]]]]]]])%29)*-1}]((>++++[-[-[-[-[-[-[-[-[(-)*120[.-]{}]]]]]]]]])%29)*-1)%5])*-1
14:16:46 <EgoBot> ​Score for ais523_undermine: 30.8
14:16:50 <ais523> !bfjoust undermine (+)*9>(>[([>{((>++++[-[-[-[-[-[-[-[-[(-)*120[.-]{}]]]]]]]]])%29)*-1}]((>++++[-[-[-[-[-[-[-[-[(-)*120[.-]{}]]]]]]]]])%29)*-1)%5])*-1
14:16:53 <EgoBot> ​Score for ais523_undermine: 31.4
14:16:57 <ais523> !bfjoust undermine (+)*9(>[([>{((>++++[-[-[-[-[-[-[-[-[(-)*120[.-]{}]]]]]]]]])%29)*-1}]((>++++[-[-[-[-[-[-[-[-[(-)*120[.-]{}]]]]]]]]])%29)*-1)%5])*-1
14:17:00 <EgoBot> ​Score for ais523_undermine: 31.9
14:17:04 <ais523> oh, come /on/
14:17:09 <Patashu> lol
14:17:10 * zid stabs ais523 in the winningness
14:17:21 <ais523> Patashu: I was expecting the opposite pattern :)
14:17:30 <ais523> negative >s seems to be a bad idea, though
14:18:05 <Patashu> (+)*9(> <-- I found one you can remove here
14:18:22 <ais523> Patashu: indeed, but that would cause it to detect its own flag as an enemy decoy
14:18:54 <ais523> I think this is conclusive evidence that at least one program does not benefit from rule of 9
14:19:24 <zid> well it isn't using it is it
14:19:32 <ais523> anyone else figured out the principle I'm using there?
14:19:34 -!- monqy has joined.
14:19:37 <elliott_> rule of 99
14:19:53 <ais523> zid: no; the longest used there is a rule of 7, and reducing it all the way, eventually to a rule of 1, helped every time
14:20:25 <zid> rule of 9 only helps if you're not trying to trap your flag
14:20:29 <zid> so why would rule of 9 always be good?
14:20:42 <ais523> when attacking, it basically means you don't waste time clearing enemy decoys
14:20:54 <ais523> defensive programs use rule of 9 only when they switch to an attack loop, like a full-tape clear
14:20:59 * zid thinks of a good way to handle the square bracket detection
14:21:00 <ais523> that program, though, is looking for enemy decoys
14:21:07 <ais523> to be precise, it's looking for a reverse decoy setup
14:21:16 <ais523> then it goes forwards until there's a cell on which there /isn't/ a decoy
14:21:29 <ais523> then it goes forwards again until it finds a nonzero cell, and if it isn't small-valued assumes it's a flag
14:21:54 <ais523> should it find more than five "decoys" in a row, it assumes it's facing a trail rather than a reverse decoy setup, and changes tactics to ones that beat trailing programs
14:22:25 <ais523> then it uses a 3-cycle reverse offset clear at the end, because some programs try to defend against fast rushes using a 2-cycle lock
14:22:40 <ais523> so I suppose this is an evolution of tripwire_avoider and of fast_rush_slow_clear
14:23:18 <ais523> so, so far I've got it up to between the two wirelesses
14:23:24 <ais523> anyone notice any more obvious improvements?
14:23:33 <ais523> I'll run it through the constant tweaker, just in case it helps
14:23:40 * ais523 tries to remember how the constant tweaker works
14:24:16 <ais523> ah, flag tweakable constants as ##CONSTANT5## rather than 5
14:24:31 <zid> if((p1c == '[' || p1c == ']') && (p2c == '+' || p2c == '-'))
14:24:31 <zid> p1_first(&p1, &p2);
14:24:31 <zid> else
14:24:31 <zid> p2_first(&p1, &p2);
14:24:37 <ais523> wait no, that's internal
14:24:37 <zid> can you think of anything that would break that
14:24:38 <ais523> just suffix t
14:24:40 <ais523> OK, I'll do that
14:25:02 -!- Patashu has quit (Quit: MSN: Patashu@hotmail.com , Gmail: Patashu0@gmail.com , AIM: Patashu0 , YIM: patashu2 .).
14:25:03 <ais523> zid: no
14:27:18 <ais523> !bfjoust undermine (+)*9(>[([>{((>++++[-[-[-[-[-[-[-[-[(-)*120[.-]{}]]]]]]]]])%29)*-1}]((>++++[-[-[-[-[-[-[-[-[(-)*120[.-]{}]]]]]]]]])%29)*-1)%4])*-1
14:27:21 <EgoBot> ​Score for ais523_undermine: 27.7
14:27:24 <ais523> !bfjoust undermine (+)*9(>[([>{((>++++[-[-[-[-[-[-[-[-[(-)*120[.-]{}]]]]]]]]])%29)*-1}]((>++++[-[-[-[-[-[-[-[-[(-)*120[.-]{}]]]]]]]]])%29)*-1)%6])*-1
14:27:27 <EgoBot> ​Score for ais523_undermine: 31.2
14:27:31 <ais523> !bfjoust undermine (+)*9(>[([>{((>++++[-[-[-[-[-[-[-[-[(-)*120[.-]{}]]]]]]]]])%29)*-1}]((>++++[-[-[-[-[-[-[-[-[(-)*120[.-]{}]]]]]]]]])%29)*-1)%7])*-1
14:27:34 <EgoBot> ​Score for ais523_undermine: 28.5
14:27:40 <ais523> !bfjoust undermine (+)*10(>[([>{((>++++[-[-[-[-[-[-[-[-[(-)*120[.-]{}]]]]]]]]])%29)*-1}]((>++++[-[-[-[-[-[-[-[-[(-)*120[.-]{}]]]]]]]]])%29)*-1)%6])*-1
14:27:43 <EgoBot> ​Score for ais523_undermine: 31.5
14:27:49 <ais523> !bfjoust undermine (+)*11(>[([>{((>++++[-[-[-[-[-[-[-[-[(-)*120[.-]{}]]]]]]]]])%29)*-1}]((>++++[-[-[-[-[-[-[-[-[(-)*120[.-]{}]]]]]]]]])%29)*-1)%6])*-1
14:27:52 <EgoBot> ​Score for ais523_undermine: 33.9
14:27:56 <ais523> !bfjoust undermine (+)*12(>[([>{((>++++[-[-[-[-[-[-[-[-[(-)*120[.-]{}]]]]]]]]])%29)*-1}]((>++++[-[-[-[-[-[-[-[-[(-)*120[.-]{}]]]]]]]]])%29)*-1)%6])*-1
14:27:59 <EgoBot> ​Score for ais523_undermine: 34.0
14:28:04 <ais523> presumably this is catching out some of the turtles
14:28:12 <ais523> while also giving the opponent more time to get into the meat of its decoy setup
14:29:53 <zid> heh piss off gcc
14:29:59 <zid> trying to test if this inlines well or not
14:30:24 <zid> yep, it sure does, my entire program compiles to push ebp / xor eax, eax / mov ebp, esp / pop ebp / ret
14:31:01 <ais523> !bfjoust undermine (+)*6(>[([>{((>++++[-[-[-[-[-[-[-[-[(-)*120[.-]{}]]]]]]]]])%29)*-1}]((>++++[-[-[-[-[-[-[-[-[(-)*120[.-]{}]]]]]]]]])%29)*-1)%2])*-1
14:31:04 <EgoBot> ​Score for ais523_undermine: 35.9
14:31:08 <ais523> thanks tweaker!
14:31:20 <ais523> !bfjoust undermine (+)*6(>[([>{((>++++[-[-[-[-[-[-[-[-[(-)*120[.-]{}]]]]]]]]])%29)*-1}]((>++++[-[-[-[-[-[-[-[-[(-)*120[.-]{}]]]]]]]]])%29)*-1)%3])*-1
14:31:23 <EgoBot> ​Score for ais523_undermine: 27.7
14:31:23 <zid> http://codepad.org/ABjrTpw8
14:31:29 <zid> it amazes me that gcc can compile that down to xor eax, eax
14:31:29 <ais523> !bfjoust undermine (+)*5(>[([>{((>++++[-[-[-[-[-[-[-[-[(-)*120[.-]{}]]]]]]]]])%29)*-1}]((>++++[-[-[-[-[-[-[-[-[(-)*120[.-]{}]]]]]]]]])%29)*-1)%2])*-1
14:31:32 <EgoBot> ​Score for ais523_undermine: 38.8
14:31:37 <ais523> wow
14:32:06 <ais523> !bfjoust undermine (+)*0(>[([>{((>++++[-[-[-[-[-[-[-[-[(-)*120[.-]{}]]]]]]]]])%29)*-1}]((>++++[-[-[-[-[-[-[-[-[(-)*120[.-]{}]]]]]]]]])%29)*-1)%2])*-1
14:32:09 <EgoBot> ​Score for ais523_undermine: 32.1
14:32:13 <ais523> !bfjoust undermine (+)*4(>[([>{((>++++[-[-[-[-[-[-[-[-[(-)*120[.-]{}]]]]]]]]])%29)*-1}]((>++++[-[-[-[-[-[-[-[-[(-)*120[.-]{}]]]]]]]]])%29)*-1)%2])*-1
14:32:16 <EgoBot> ​Score for ais523_undermine: 35.2
14:32:22 <ais523> !bfjoust undermine (+)*5(>[([>{((>++++[-[-[-[-[-[-[-[-[(-)*120[.-]{}]]]]]]]]])%29)*-1}]((>++++[-[-[-[-[-[-[-[-[(-)*120[.-]{}]]]]]]]]])%29)*-1)%2])*-1
14:32:25 <EgoBot> ​Score for ais523_undermine: 38.8
14:32:28 * zid fixes an off-by one in the cycle count
14:32:30 <ais523> seems to be a sweet spot there
14:32:56 <zid> I need to write the little compiler thing
14:33:08 <zid> that generates the flow control linked-list bastard thing
14:33:08 <ais523> !bfjoust undermine (+)*12(>[([>{((>++++[-[-[-[-[-[-[-[-[(-)*120[.-]{}]]]]]]]]])%29)*-1}]((>++++[-[-[-[-[-[-[-[-[(-)*120[.-]{}]]]]]]]]])%29)*-1)%2])*-1
14:33:11 <EgoBot> ​Score for ais523_undermine: 35.4
14:33:35 <ais523> hmm, so either I can do well against quintopia, or I can do well against myndzi
14:33:41 <monqy> does the record file keep the best score or the most recent one
14:34:08 <ais523> most recent for each program
14:34:18 <ais523> so you can delete a program by replacing it with <
14:34:46 <zid> < would increase my score ;)
14:34:51 <monqy> !bfjoust lazy .
14:34:54 <EgoBot> ​Score for monqy_lazy: 6.6
14:34:57 <monqy> wooooo
14:35:21 <monqy> I guess I won against suicides or something?
14:35:37 <zid> () without a * is valid but does nothing?
14:35:47 <ais523> !bfjoust undermine (+)*12(>[([>{((>++++[-[-[-[-[-[-[-[-[(-)*120[.-]{}]]]]]]]]])%29)*-1}]((>++++[-[-[-[-[-[-[-[-[(-)*120[.-]{}]]]]]]]]])%29)*-1)%6])*-1
14:35:49 <EgoBot> ​Score for ais523_undermine: 34.0
14:36:04 <ais523> !bfjoust undermine (+)*12(>[([>{((>++++[-[-[-[-[-[-[-[-[(-)*120[.-]{}]]]]]]]]])%29)*-1}]((>++++[-[-[-[-[-[-[-[-[(-)*120[.-]{}]]]]]]]]])%29)*-1)%2])*-1
14:36:06 <EgoBot> ​Score for ais523_undermine: 35.4
14:36:13 <ais523> !bfjoust undermine (+)*10(>[([>{((>++++[-[-[-[-[-[-[-[-[(-)*120[.-]{}]]]]]]]]])%29)*-1}]((>++++[-[-[-[-[-[-[-[-[(-)*120[.-]{}]]]]]]]]])%29)*-1)%2])*-1
14:36:15 <EgoBot> ​Score for ais523_undermine: 35.0
14:36:20 <ais523> !bfjoust undermine (+)*9(>[([>{((>++++[-[-[-[-[-[-[-[-[(-)*120[.-]{}]]]]]]]]])%29)*-1}]((>++++[-[-[-[-[-[-[-[-[(-)*120[.-]{}]]]]]]]]])%29)*-1)%2])*-1
14:36:23 <EgoBot> ​Score for ais523_undermine: 38.7
14:37:12 <ais523> zid: it's invalid
14:37:18 <ais523> !bfjoust undermine (+)*6(>[([>{((>++++[-[-[-[-[-[-[-[-[(-)*120[.-]{}]]]]]]]]])%29)*-1}]((>++++[-[-[-[-[-[-[-[-[(-)*120[.-]{}]]]]]]]]])%29)*-1)%2])*-1
14:37:21 <EgoBot> ​Score for ais523_undermine: 35.9
14:37:24 <zid> that saves me some trouble then
14:37:28 <ais523> !bfjoust undermine (+)*13(>[([>{((>++++[-[-[-[-[-[-[-[-[(-)*120[.-]{}]]]]]]]]])%29)*-1}]((>++++[-[-[-[-[-[-[-[-[(-)*120[.-]{}]]]]]]]]])%29)*-1)%2])*-1
14:37:31 <EgoBot> ​Score for ais523_undermine: 39.1
14:37:40 <ais523> I wasn't expecting /that/
14:37:44 <kmc> what's all this then
14:37:48 <ais523> brainfuck joust
14:37:53 <zid> ais == dirty cheater
14:38:08 <cheater> i wash myself
14:38:17 <zid> he's a dirty version of you
14:38:18 <cheater> no reason to get unfriendly
14:38:23 <cheater> oh ok
14:38:26 <ais523> !bfjoust undermine (+)*14(>[([>{((>++++[-[-[-[-[-[-[-[-[(-)*120[.-]{}]]]]]]]]])%29)*-1}]((>++++[-[-[-[-[-[-[-[-[(-)*120[.-]{}]]]]]]]]])%29)*-1)%2])*-1
14:38:28 <kmc> cheater, you don't have servants to do it for you?
14:38:29 <EgoBot> ​Score for ais523_undermine: 34.1
14:38:29 <monqy> what does undermine do? the bracket patterns look sort of like something I was trying to write but then gave up
14:38:36 <ais523> 13 seems to hit a sweet spot
14:38:43 <cheater> kmc, that was the royal I.
14:38:46 <cheater> I, the state.
14:38:46 <ais523> mostly because it gets a flawless victory against FFLDG for reasons I don't fully understand
14:38:53 <ais523> !bfjoust undermine (+)*15(>[([>{((>++++[-[-[-[-[-[-[-[-[(-)*120[.-]{}]]]]]]]]])%29)*-1}]((>++++[-[-[-[-[-[-[-[-[(-)*120[.-]{}]]]]]]]]])%29)*-1)%2])*-1
14:38:56 <EgoBot> ​Score for ais523_undermine: 37.6
14:39:02 <ais523> !bfjoust undermine (+)*16(>[([>{((>++++[-[-[-[-[-[-[-[-[(-)*120[.-]{}]]]]]]]]])%29)*-1}]((>++++[-[-[-[-[-[-[-[-[(-)*120[.-]{}]]]]]]]]])%29)*-1)%2])*-1
14:39:07 <EgoBot> ​Score for ais523_undermine: 32.8
14:39:21 <ais523> !bfjoust undermine (+)*12>+([([>{((>++++[-[-[-[-[-[-[-[-[(-)*120[.-]{}]]]]]]]]])%29)*-1}]((>++++[-[-[-[-[-[-[-[-[(-)*120[.-]{}]]]]]]]]])%29)*-1)%2]>)*-1
14:39:25 <EgoBot> ​Score for ais523_undermine: 25.3
14:39:33 <ais523> oh, obviously
14:39:41 <ais523> !bfjoust undermine (+)*12>+(>[([>{((>++++[-[-[-[-[-[-[-[-[(-)*120[.-]{}]]]]]]]]])%29)*-1}]((>++++[-[-[-[-[-[-[-[-[(-)*120[.-]{}]]]]]]]]])%29)*-1)%2])*-1
14:39:43 <EgoBot> ​Score for ais523_undermine: 36.6
14:39:52 <ais523> !bfjoust undermine (+)*11>+(>[([>{((>++++[-[-[-[-[-[-[-[-[(-)*120[.-]{}]]]]]]]]])%29)*-1}]((>++++[-[-[-[-[-[-[-[-[(-)*120[.-]{}]]]]]]]]])%29)*-1)%2])*-1
14:39:54 <EgoBot> ​Score for ais523_undermine: 40.8
14:39:57 <monqy> wow
14:40:08 <kmc> no seriously, what the hell is this
14:40:10 <ais523> what a difference a decoy can make, eh?
14:40:13 <ais523> kmc: brainfuck joust
14:40:16 <kmc> you said that
14:40:18 <ais523> http://esolangs.org/wiki/BF_Joust
14:40:25 <kmc> thanks
14:40:44 <monqy> I wish I had some good language/game ideas
14:40:47 <zid> http://codepad.org/ghmwa5G1
14:40:52 <zid> that's basically v0.1a of my struct
14:40:59 <zid> command is + or - etc
14:41:33 <ais523> !bfjoust undermine (+)*11>+(>[([>{((>++++[-[-[-[-[-[-[-[-[(-)*120[.-]{}]]]]]]]]])%29)*-1}]((>++++[-[-[-[-[-[-[-[-[(-)*120[.-]{}]]]]]]]]])%29)*-1)%3])*-1
14:41:36 <EgoBot> ​Score for ais523_undermine: 30.6
14:42:07 <zid> every turn decrements count, if count is 0 you take next_paren, otherwise next_instruction, next_bracket is if your [ or ] executes a jump
14:42:13 <ais523> heh, changing it to %3 suddently caused it to lose to loads of things
14:42:15 <ais523> !bfjoust undermine (+)*11>+(>[([>{((>++++[-[-[-[-[-[-[-[-[(-)*120[.-]{}]]]]]]]]])%29)*-1}]((>++++[-[-[-[-[-[-[-[-[(-)*120[.-]{}]]]]]]]]])%29)*-1)%2])*-1
14:42:18 <EgoBot> ​Score for ais523_undermine: 40.8
14:42:25 <zid> O_o
14:42:30 <zid> should work I hope
14:42:40 <zid> what do you think ais, or will that break your concentration
14:42:52 <ais523> it's similar to what I'm doing in juiced
14:43:00 <ais523> I haven't checked to see if you've got the details right
14:43:07 <ais523> but you've got the general principle right
14:43:23 <ais523> wow, now it's eighth
14:43:28 <zid> How I'm going to free this I have no idea :P
14:43:33 <zid> Maybe I just won't ;)
14:43:34 <ais523> and hitting slightly above 50%
14:45:28 <ais523> time to add the strategy to the wiki, I guess
14:53:26 <ais523> and added
14:53:59 <ais523> heh, it loses to simple with all 42 combinations
14:54:11 <ais523> and I'm not surprised by that at all, simple doesn't use a reverse decoy setup
14:54:42 <ais523> pretty much all BF Joust strategies recently have been "find something that opponents do consistently, then work out how to exploit it"
14:56:05 <kmc> so this is probably obvious and cliché but: has anyone tried evolving bfjoust players, and if so how did it work out?
14:56:23 <elliott_> yes
14:56:24 <elliott_> badly
14:56:27 <ais523> kmc: they have, and not massively well
14:56:41 <ais523> I sometimes use an evolutionary algorithm to tweak constants
14:56:50 <ais523> !bfjoust undermine (+)*11>+>+(>[([>{((>++++[-[-[-[-[-[-[-[-[(-)*120[.-]{}]]]]]]]]])%29)*-1}]((>++++[-[-[-[-[-[-[-[-[(-)*120[.-]{}]]]]]]]]])%29)*-1)%2])*-1
14:56:52 <EgoBot> ​Score for ais523_undermine: 40.5
14:56:58 <ais523> !bfjoust undermine (+)*11>+>++(>[([>{((>++++[-[-[-[-[-[-[-[-[(-)*120[.-]{}]]]]]]]]])%29)*-1}]((>++++[-[-[-[-[-[-[-[-[(-)*120[.-]{}]]]]]]]]])%29)*-1)%2])*-1
14:57:01 <EgoBot> ​Score for ais523_undermine: 36.5
14:57:06 <ais523> !bfjoust undermine (+)*11>->+(>[([>{((>++++[-[-[-[-[-[-[-[-[(-)*120[.-]{}]]]]]]]]])%29)*-1}]((>++++[-[-[-[-[-[-[-[-[(-)*120[.-]{}]]]]]]]]])%29)*-1)%2])*-1
14:57:09 <EgoBot> ​Score for ais523_undermine: 38.9
14:57:16 <ais523> !bfjoust undermine (+)*11>-->(>[([>{((>++++[-[-[-[-[-[-[-[-[(-)*120[.-]{}]]]]]]]]])%29)*-1}]((>++++[-[-[-[-[-[-[-[-[(-)*120[.-]{}]]]]]]]]])%29)*-1)%2])*-1
14:57:18 <EgoBot> ​Score for ais523_undermine: 39.5
14:57:23 <ais523> !bfjoust undermine (+)*11>--(>[([>{((>++++[-[-[-[-[-[-[-[-[(-)*120[.-]{}]]]]]]]]])%29)*-1}]((>++++[-[-[-[-[-[-[-[-[(-)*120[.-]{}]]]]]]]]])%29)*-1)%2])*-1
14:57:26 <EgoBot> ​Score for ais523_undermine: 35.3
14:57:44 <zid> ais523: that sounds pretty much perfect
14:57:46 <ais523> !bfjoust undermine (+)*10>->+(>[([>{((>++++[-[-[-[-[-[-[-[-[(-)*120[.-]{}]]]]]]]]])%29)*-1}]((>++++[-[-[-[-[-[-[-[-[(-)*120[.-]{}]]]]]]]]])%29)*-1)%2])*-1
14:57:48 <EgoBot> ​Score for ais523_undermine: 34.0
14:57:49 <zid> find the optimal value in a local minima
14:57:54 <ais523> !bfjoust undermine (+)*9>->+(>[([>{((>++++[-[-[-[-[-[-[-[-[(-)*120[.-]{}]]]]]]]]])%29)*-1}]((>++++[-[-[-[-[-[-[-[-[(-)*120[.-]{}]]]]]]]]])%29)*-1)%2])*-1
14:57:57 <EgoBot> ​Score for ais523_undermine: 38.0
14:58:09 <ais523> !bfjoust undermine (+)*11>+(>[([>{((>++++[-[-[-[-[-[-[-[-[(-)*120[.-]{}]]]]]]]]])%29)*-1}]((>++++[-[-[-[-[-[-[-[-[(-)*120[.-]{}]]]]]]]]])%29)*-1)%2])*-1
14:58:12 <EgoBot> ​Score for ais523_undermine: 40.8
14:58:42 <ais523> what could be interesting: a program that went through all the games by a particular program, highlighting commands by the win percentage when that command ran
14:58:47 <ais523> so you know which codepaths you tend to be in when losing
15:03:09 <ais523> in fact, that might be an interesting way to evolve a program
15:03:18 <ais523> codepaths with more of a tendency to lose get mutated more
15:07:15 <zid> wouldn't really help I don't think
15:07:20 <zid> it'd still get stuck in a minima somewhere
15:07:53 <zid> GA seems great at perfecting tactics
15:07:57 <zid> but poor for strategy
15:09:24 <ais523> indeed
15:16:24 -!- nys has joined.
15:21:44 <elliott_> hi nys
15:21:57 <nys> hi...?
15:22:28 <elliott_> this is a channel about programming
15:22:34 <nys> oh
15:22:46 <elliott_> yep
15:22:53 <nys> I go by the name Twistle on the wiki .-.
15:23:23 <elliott_> oh, most people come here looking for the other kind of esoteric
15:23:27 <Gregor> b[9<<20],*a=b;main(){while(scanf("%d",a++)>0);for(a=b;*a;)a+=(a[*a]-=a[a[1]])?3:a[2];while(*++a)putchar(*a);} // 109
15:23:28 <elliott_> hi
15:23:36 <nys> hi
15:23:48 <elliott_> oh, you invented itflabtijtslwi? cool!
15:23:57 <nys> :D
15:24:30 <nys> well, it's pretty simples
15:24:32 <nys> *simple
15:24:40 <elliott_> better than thue :P
15:25:01 <nys> :P
15:25:04 <nys> I thought /// was a beautifully simple language that lacked input
15:26:01 <nys> so I put in an arbitrary construct :<
15:26:16 <ais523> an incredibly arbitrary construct
15:26:27 <ais523> but hey, that's what eso's about
15:27:03 <elliott_> it's a pretty nice input mechanism for ///
15:27:06 <nys> oh, now that I think about it, I should have made it even more arbitrary
15:27:11 <elliott_> perhaps modulo the characters used but you can solve that with /// :)
15:27:19 <nys> like INOUTOOPSIMEANTINPUT
15:28:14 <nys> that would be a fun construct
15:29:45 <nys> oh, I also made this --> http://esolangs.org/wiki/TRUE <-- and went on here afterwards, someone told me it would be turing complete if I added a queue instead of a stack, so that's what I did ^^
15:38:27 -!- sebbu has quit (Ping timeout: 245 seconds).
15:38:50 <nys> and it is unimplemented
15:38:57 <nys> *wink*
15:39:32 -!- elliott_ has quit (Remote host closed the connection).
15:39:34 -!- elliott has joined.
15:45:05 <Gregor> Hm hm hm ... 109 is pretty good :P
15:45:18 <Gregor> Short enough for RT @CaptainHats 109B interp: <it>
15:46:01 -!- sebbu has joined.
15:46:22 <cheater> a program i am trying to automate with pexpect is running /usr/bin/pager (full path). i want it to run cat at that point. can i hack it with some non-portable trickery?
15:46:38 <elliott> ln -s /bin/cat /usr/bin/pager
15:46:53 <ais523> elliott: I assume he means without overwriting /usr/bin
15:47:17 <cheater> ais523, elliott is obviously trolling
15:47:43 <ais523> cheater: you could use a chroot; that's reasonably portable, but annoying to set up
15:47:43 <Gregor> Yeah, elliott's was perfectly portable
15:48:04 <Gregor> But anyway, most pagers won't page if the output isn't a TTY.
15:48:07 <Gregor> So it shouldn't be an issue.
15:48:12 <cheater> ais523, yeah
15:48:14 <ais523> for a nonportable method, you could hook whatever exec variant it was using in the library with LD_LIBRARY_PATH
15:48:23 <ais523> Gregor: the output is a pty, cheater's using pexpect
15:48:49 <cheater> hmm
15:48:59 <Gregor> Why does pexpect use a pty :P
15:49:00 <cheater> wonder if i can control pager (which is less here) not to page at all
15:49:04 <elliott> Gregor: telnet
15:49:08 <ais523> Gregor: because that's the whole point
15:49:20 <Gregor> Well, in that case, you could run the command as whateverlol | cat
15:49:23 <ais523> if you didn't need a pty, you wouldn't need something pexpect-style at all
15:50:01 <Gregor> ais523: Depends on what you're testing *shrugs*
15:50:25 <Gregor> But if you're testing something interactive and you have the pty anyway, why not just send a 'Q' to the pager?
15:52:37 -!- sebbu has quit (Ping timeout: 245 seconds).
15:59:30 -!- sebbu has joined.
16:26:04 -!- oklopol has joined.
16:28:40 <oklopol> oops the https://wiki.helsinki.fi/display/lambda/esoteeriset+ohjelmointikielet guys accidentally forgot to mention clue :o well, no one's perfect i guess
16:30:18 <elliott> :D
16:30:26 <elliott> atehwa: you made a _fatal error_
16:31:23 <oklopol> first of all clue is probably the only esolang that has a theme song
16:32:02 <ais523> oklopol: now I'm audializing that hello world program I wrote in Fugue
16:32:13 <elliott> oklopol: link
16:33:17 <ais523> that list of esolangs there is bizarre
16:33:29 <ais523> at least, I can't figure out what the basis behind inclusion/exclusion is
16:33:41 <elliott> ais523: what we told them about, mostly
16:33:42 <ais523> I'm particularly surprised to see ABCDXYZ there, for instance
16:33:48 <elliott> ais523: that's because you said "all of mine"
16:33:54 <ais523> did I?
16:33:56 <elliott> yes :D
16:33:58 <ais523> besides, not all of mine are there
16:34:00 <elliott> well, or words to that effect
16:34:11 <ais523> :≠ isn't, for instance, and it's part of the same group as BackFlip and ABCDXYZ
16:34:17 <ais523> (yay compose key)
16:34:28 <elliott> man, clue is such a great language
16:34:32 <ais523> nor is Feather, but that is undoubtedly the correct choice
16:34:34 <ais523> elliott: which one?
16:34:38 <elliott> ais523: oklopol's
16:34:52 <oklopol> oklotalk should probably
16:34:55 <elliott> I really love how it looks so obvious and intuitive but writing it is basically a process of brute force
16:35:02 <oklopol> be there even though it doesn't exist
16:35:44 <oklopol> yes clue is pretty fucking elegant
16:35:58 <oklopol> i wonder when i make clue2
16:36:14 <elliott> how could you possibly improve, I mean apart from including the function list
16:36:28 <elliott> it could just bruteforce with all permutations of all defined functions, using inferred type information to order the search
16:36:34 <elliott> (as in "this function uses lists let's look at list functions first")
16:36:41 <oklopol> a minor change to branching and types.
16:36:44 <elliott> that would only be about a hundred times slower and be about three times as elegant
16:37:03 <elliott> oklopol: hard to get more elegant than "function ~ {inputs -> outputs}" :P
16:37:06 <elliott> I mean maybe the recursion stuff
16:37:15 <elliott> if you did it higher order maybe you could just include fix and remove the recursion stuff :P
16:37:45 <oklopol> yyyyeah i'm sure you could somehow remove the main idea of clue
16:38:00 <elliott> oklopol: it would be great :-P
16:38:06 <elliott> main ideas, schmain ideas
16:38:27 <oklopol> sure, it would then be the thing everyone's invented that's impossible to implement
16:39:09 <oklopol> hey wtf is just realized graphica is not on that list :D hahaha
16:39:12 <oklopol> wtf
16:39:13 <elliott> well, it depends how good your "type inference is". it still contins the original idea of thue, it's just about guessing the list for you. if you used like theorems for free you might be able to get a far way
16:39:13 <oklopol> lol
16:39:15 <elliott> sort of :P
16:39:30 <oklopol> what
16:39:38 <oklopol> yeah i totally agree with you
16:39:49 <oklopol> most agreeable nonsense i heard all day
16:39:51 <elliott> well it's kind of the same idea as djinn. only not, but
16:40:11 <elliott> theorems for free was wrt http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.38.9875
16:41:07 <oklopol> i have no idea what that has to do with anything though
16:42:20 <oklopol> i have to go now though, anyway that sounds like an article i should read
16:43:04 <oklopol> also toi seems to be lacking
16:43:12 <oklopol> crazy
16:43:36 <oklopol> even though it's the awesome
16:54:57 <Phantom_Hoover> oko!
17:32:06 -!- jix_ has joined.
17:32:06 -!- jix_ has quit (Client Quit).
17:58:46 -!- Slereah has quit (Ping timeout: 258 seconds).
17:59:11 -!- GuestIceKovu has joined.
18:02:34 -!- ais523 has quit (Remote host closed the connection).
18:34:18 -!- Nisstyre has quit (Ping timeout: 245 seconds).
18:36:48 -!- cheater has quit (Ping timeout: 245 seconds).
18:43:22 -!- ais523 has joined.
18:48:40 -!- augur has joined.
18:51:28 -!- KingOfKarlsruhe has joined.
19:00:58 <zid> I'm awake!
19:01:09 <elliott> i'm not
19:01:16 * zid gets a marker pen
19:03:43 -!- oerjan has joined.
19:05:02 -!- zzo38 has joined.
19:11:27 <ais523> has there been much hill movement since I've been gone?
19:11:40 <ais523> I'm pretty astonished that I managed to drive a new strategy to #8 in just a day, really
19:12:01 -!- oerjan has set topic: It is the 90s and there is time for Esolang event @ Hel/Finland on 3.10.2011: https://wiki.helsinki.fi/display/lambda/esoteeriset+ohjelmointikielet | I think pointers are considerably more useful than lambda calculus | 12345678 | http://codu.org/logs/_esoteric/.
19:12:09 <elliott> ais523: none
19:12:23 <ais523> pity
19:15:23 <Vorpal> oerjan, what did you change?
19:15:32 <oerjan> Vorpal: YOU WILL NEVER KNOW
19:15:54 <oerjan> although it did comply with a request by elliott in the logs
19:16:01 <Deewiant> Vorpal: Added the 12345678
19:16:01 <Vorpal> ah
19:16:17 <Vorpal> also what is the first link in the topic about
19:16:26 <Vorpal> google translate claims the url is invalid.. (?)
19:16:51 <Vorpal> oh maybe it doesn't handle https
19:16:52 <Deewiant> Every Finnish-language paragraph there is followed by the equivalent in English
19:17:04 <Deewiant> And the URL itself is preceded by an explanation in the /topic
19:17:07 <Vorpal> ah yes
19:17:48 <Vorpal> Deewiant, yes that is what made me curious
19:18:14 <Vorpal> Deewiant, I don't get the things about the 90s though
19:18:17 <Deewiant> Just saying that it answers your "what is it about"
19:18:26 <Deewiant> That's an addition of Phantom_Hoover's
19:18:41 <Phantom_Hoover> Whut?
19:18:43 <Deewiant> The original was just "Esolang event @ Hel/Finland on 3.10.2011"
19:18:45 <Phantom_Hoover> Oh, that.
19:20:42 <oerjan> Vorpal: hint, you can frequently detect memes by typing the phrase into google and looking at the suggestions coming up. at least that's what i did for that thing in the topic.
19:21:08 <zid> what happens at an esolang event
19:21:22 <oerjan> zid: horrible brain-twisting stuff
19:21:48 -!- elliott has quit (Ping timeout: 245 seconds).
19:25:16 <zid> oerjan: Why would you be doing haskell at an esoland event? O_o
19:28:07 <oerjan> to implement esolangs in, of course
19:28:40 <ais523> is the event in Finnish? or English?
19:28:48 <ais523> if English, I want to see slides/recordings when it's done
19:29:06 <zid> You should send me to finland as your envoy
19:29:08 <Deewiant> Presumably Finnish if everybody present understands Finnish, otherwise English
19:29:12 <Deewiant> That's typical
19:29:40 <oerjan> it will be planned as dual finnish-english, which will be completely ruined when some prick insists that they must include swedish and there isn't time for that.
19:29:50 <oerjan> that's how it usually goes in finland, i think.
19:30:03 <zid> and then a norwegian will show up and call everybody uncultured
19:30:04 <Deewiant> Except that there's no prick
19:30:14 <Deewiant> I haven't run into such, anyway
19:30:21 <zid> yes, a .no prick :P
19:31:15 <fizzie> I've gotten one (1) report in Swedish out of about maybe a hundred and fifty (~150) that I've graded for the AI course. And I don't think they really *insisted* on being able to do it in Swedish.
19:31:56 -!- Taneb has joined.
19:32:09 <Taneb> Hello!
19:32:43 <zid> nethack would be a good AI thesis
19:32:58 <Taneb> I am extuingished¬
19:34:06 <fizzie> I vaguely recall that a NetHack bot was one on the "suggestions for a project topic" list of the Prolog course.
19:34:12 <fizzie> I'm not sure if anyone ever did it.
19:34:34 <zid> problem is nethack is quite inaccessable for a bot
19:34:45 <zid> someone wrote api hooks for starcraft
19:34:49 <fizzie> You could possibly interface with some of the existing frameworks.
19:35:08 <zid> there's a starcraft AI competition too
19:35:13 <fizzie> TAEB or something.
19:35:18 <Taneb> I had a strange and crazy idea during my extuinguisment
19:35:53 <Taneb> A Non-Minimalistic OISC
19:37:01 <Taneb> Doable? Probably
19:37:06 <Taneb> Likeable? Probably not
19:37:27 <Taneb> It takes the entire point of a OISC and rips it from the concept
19:40:58 <zzo38> Actually I have once designed a schematic diagram for a processor that has only a transfer register to register and jump instruction, although it has a lot of registers with different functions. One of the registers is XORed with the jump destination to determine the actual address of the next instruction.
19:42:01 <zid> xor linked lists are there it's at
19:42:31 <zid> wow, I can't think, or type
19:45:41 <oerjan> <zid> and then a norwegian will show up and call everybody uncultured <-- that is not afaik the common national stereotype at _all_, if anything it's we norwegians who are considered uncultured.
19:46:08 <oerjan> (by the swedes, at least)
19:47:16 <zid> and the reverse :P
19:47:35 <zid> if you're really lucky, you can find someone from iceland to look down on all of them!
19:47:46 <zid> who then gets ran out of town
19:48:09 <oerjan> <Taneb> A Non-Minimalistic OISC <-- add the first argument to the product of the second and third argument, store into the address of the fourth argument, jump to the label in the fifth argument if result negative, the sixth if prime.
19:48:30 <oerjan> er *subtract the first argument from
19:48:39 <kmc> i thought iceland was the comic relief country of scandinavia
19:49:07 <oerjan> kmc: if you believe satw, they all are.
19:49:54 <zid> iceland is your weird uncle
19:50:10 <oerjan> the old hákarl
19:50:12 <itidus20> i'm not sure which uncle is my weird uncle
19:50:17 -!- nooga has joined.
19:50:21 <nooga> ahh
19:50:28 <zid> itidus20: The one who didn't molest you
19:50:31 <kmc> there's some real microcontroller where all functional units are memory-mapped
19:50:43 <kmc> to add numbers you mov them to the ALU
19:51:10 <nooga> i wanted to build such thing
19:51:16 <itidus20> im really starting to miss the wonderful meals i had to eat at family gatherings growingup
19:51:23 <itidus20> all manner of wonderful salads and cakes
19:51:27 <nooga> even wrote an emulator
19:51:36 <itidus20> plates with 3 salads and 4 kinds of meat
19:51:50 <itidus20> and 3 kinds of cake
19:53:20 <Phantom_Hoover> Four whole kinds of meat!
19:53:33 <itidus20> im just pulling figures out of the air
19:53:48 <itidus20> but turkey, pork, beef, i dunno
19:53:57 -!- mauke has quit (Disconnected by services).
19:54:00 -!- mauke_ has joined.
19:54:03 <fizzie> A new kind of meat.
19:54:48 -!- mauke_ has changed nick to mauke.
19:55:13 <itidus20> so so hungry
19:56:04 -!- nooga has quit (Ping timeout: 258 seconds).
19:56:14 <itidus20> well not that hungry
19:56:19 -!- augur has quit (Remote host closed the connection).
19:56:24 <Taneb> A word of advice:
19:56:27 <Taneb> Don't.
19:56:50 -!- nooga has joined.
19:56:53 <itidus20> don't become a cannibal?
19:57:07 <Taneb> What I meant to say before I remembered the kind of people that frequent this channel, myself included:
19:57:31 <itidus20> ^just kididng
19:57:39 <Taneb> Don't have a two lists of thousands of floats in Python.
19:57:49 <Taneb> And if you do, close it as soon as possible.
19:58:13 <Taneb> And if you don't, turn off your computer
19:58:37 <Taneb> And if you don't do that in time, don't decide to switch OS half way through the recovery process
19:58:41 <zid> This can be simplfied to: Don't have python
19:58:58 <Taneb> And if you do, make sure you know who to call.
19:59:03 <zid> ghostbusters
19:59:36 <Taneb> BF Joust is a finite-state automaton
19:59:51 <Taneb> Irrelevant but true
20:00:17 <zzo38> Do you think the Monad class in Haskell ought to be defined that it requires to be also a Functor and that join is a member of Monad, and that you can define in terms of unit/join/fmap or return/bind and it does the other way by itself?
20:00:58 -!- nooga has quit (Ping timeout: 240 seconds).
20:01:29 <kmc> i kind of want Functor < Pointed < Applicative < Monad
20:01:37 <kmc> each one adds only one method
20:01:55 <zid> haskell needs a bit more work to be a good esoland, it's almost there
20:02:21 <oerjan> zzo38: making it also a Functor is discussed all the time, but it requires changing the class system to be backwards compatible
20:05:25 <Taneb> Catching up on the IWC I've missed
20:05:26 <oerjan> kmc: someone pointed out (heh) that Pointed perhaps should not be a subclass of Functor
20:05:29 <Taneb> I like 3131
20:05:32 <Taneb> And 3132
20:08:32 <Taneb> Ooh, 3140 is good
20:08:57 <Taneb> And 3141
20:10:47 <zzo38> For example, the list monad makes more sense when defined in terms of unit/join/fmap.
20:17:21 <zzo38> Probably they should allow something like this: http://www.haskell.org/haskellwiki/User:Zzo38/Proposal_about_classes
20:17:55 <Taneb> I now seem to be on a binge of the Popcorn instrumental
20:19:09 -!- augur has joined.
20:20:05 <oerjan> zzo38: see http://www.haskell.org/haskellwiki/Superclass_defaults
20:21:48 <Taneb> I'm listening to the third version of the tune tonight
20:25:08 <oerjan> "Hot Butter's version became the first primarily electronic-based piece of music to reach the American popular music charts, peaking at number nine on the Billboard Pop Singles and number four on the Adult Contemporary Chart."
20:25:38 <Taneb> That's the one
20:30:05 <Taneb> I just watched the one by the group fronted by that annoying anaatomically hypercorrect amphibian
20:32:27 <oerjan> anatomically hypercorrect?
20:32:48 <zid> It wants your love
20:33:30 <olsner> oh, these subtitles are quite bad
20:34:34 <Taneb> oerjan: In the absolute opposite way that Ken dolls are incorrect
20:34:52 <oerjan> ah right.
20:35:22 <oerjan> hypercorrect as in not correct at all
20:35:46 <Taneb> Hypercorrect as in taking a common error and correcting it where it wasn't wrong
20:35:49 <zzo38> Now I put all proposal in subpage of http://www.haskell.org/haskellwiki/User:Zzo38 and added the wiki categories for proposals, and See Also for link to other articles such as "Superclass defaults" article.
20:36:29 <olsner> "The uncle of the functional disability of how serious it?"
20:36:38 <Taneb> Frikkin family computer
20:36:43 <Taneb> IE is default browser
20:36:55 <Taneb> And I clicked that link without thinking
20:37:23 <oerjan> i suspect zzo38's links are rather harmless.
20:37:36 <Taneb> IE isn't
20:37:54 <Taneb> Especially on a slow machine
20:38:11 -!- augur has quit (Remote host closed the connection).
20:38:37 <Taneb> I need to learn Haskell.
20:38:47 <Phantom_Hoover> Yes. Yes you do.
20:38:49 <Phantom_Hoover> Learn it now.
20:38:50 <Taneb> Well, I don't, but I would really like to
20:38:52 <Phantom_Hoover> Drop everything.
20:38:58 <Phantom_Hoover> No, you need to.
20:39:06 <Taneb> Aaargh!
20:39:23 <zzo38> If you have any question/comment/complaint about those articles, you can write it directly on those pages or on talk pages. You can also write on IRC, too.
20:39:30 <Taneb> Never tell me to drop everything
20:40:57 <Taneb> I don't like the phraase.
20:41:06 <oerjan> <Taneb> Never tell me to drop everything <-- Taneb is genetically engineered to follow orders literally
20:41:29 <Taneb> Also, I will be Arby
20:42:26 <olsner> "Springs, I was A leaf springs"
20:43:03 <oerjan> i will file it together with "never damn ais523"
20:43:15 <olsner> they've probably google translate'd the chinese subtitles ... I think leaf and springs are supposed to be names
20:43:30 <oerjan> what's Arby
20:44:36 <oerjan> > fix(scanl(+)0.(1:))
20:44:38 <lambdabot> [0,1,1,2,3,5,8,13,21,34,55,89,144,233,377,610,987,1597,2584,4181,6765,10946...
20:46:09 <oerjan> > fix(scanl(+)1.(1:))
20:46:11 <lambdabot> [1,2,3,5,8,13,21,34,55,89,144,233,377,610,987,1597,2584,4181,6765,10946,177...
20:46:15 <Taneb> oerjan: a phonetic pun, that's what
20:47:04 <oerjan> i don't get it even when carefully not pronouncing the r
20:47:25 <Taneb> I think the r should be there
20:47:31 <Taneb> Try quicker
20:47:35 <oerjan> but you're english!
20:47:54 <Taneb> The pun's multidialectal!
20:48:19 * oerjan sulks in the corner
20:48:31 <Taneb> Be Arby
20:48:36 <Taneb> B R B
20:48:46 * oerjan swats Taneb -----###
20:49:27 <Taneb> You know, before I even knew of the existence of the wiki, I wrote a draft spec for Ook!++
20:49:41 <Taneb> It introduced the keyworkd Eek
20:49:58 <oerjan> i assume it had extended library support
20:50:11 -!- hiato has joined.
20:50:11 -!- hiato has quit (Client Quit).
20:50:22 <Taneb> It was back when I sucked even more at programming
20:50:32 <Taneb> I had barely heard of brainfuck
20:50:50 <Taneb> I don't even think I had heard of C
20:51:22 -!- azaq231 has quit (Quit: Leaving.).
20:53:01 <Taneb> That would have been a good thing, except...
20:53:27 <Phantom_Hoover> Except BRAINFUCK DERIVATIVE SCUM
20:53:43 <Taneb> IT WASN'T A BRAINFUCK DERIVATIVE
20:53:55 <Taneb> IT WAS AN OOK! EXTENSION
20:53:56 <Sgeo> Brainfuck second derivative?
20:53:57 -!- nooga has joined.
20:54:14 <Phantom_Hoover> BRAINFUCK DERIVATIVE SQUARED
20:54:17 <Phantom_Hoover> EVEN WORSE
20:54:57 <ais523> take a BF derivative that just reverses the commands
20:55:00 <ais523> then reverse the commands again
20:55:07 <Taneb> let b be the goodness of a brainduck derivative
20:55:18 <ais523> has the name "brainduck" been used yet?
20:55:20 <Taneb> By duck I probably mean fucj
20:55:21 <ais523> I refuse to believe it hasn't
20:55:34 <Taneb> My fingers don't seem to want to swear
20:55:41 <Taneb> You know what I mean
20:56:04 <Taneb> b is obviously very lo
20:56:05 <Taneb> w
20:56:28 <Taneb> If it is negative, b ^2 is positive
20:57:02 <Taneb> Now we need a measure of goodness
20:57:03 <Phantom_Hoover> http://duckduckgo.com/?q=brainduck
20:57:25 <CakeProphet> goodness is measured in terms of number of Perl-like syntax constructs.
20:57:36 <Taneb> I suggest the theresa, defined as a Hellen/metres squared
20:58:48 <CakeProphet> how about... encephalerotitons?
20:58:49 -!- Sgeo has left ("Leaving").
20:58:54 -!- Sgeo has joined.
20:59:05 -!- KingOfKarlsruhe has quit (Quit: ChatZilla 0.9.87 [Firefox 6.0.1/20110830092941]).
20:59:19 <Sgeo> I keep hearing about a Java thing called Spring, and I can only assume it's an enterprisey version of what Newspeak does naturally
21:00:03 -!- ais523 has quit (Remote host closed the connection).
21:00:32 <Sgeo> http://pchat-irc.com/blog/ wow
21:02:00 <oerjan> Taneb: some people will claim the theresa has been ...wrongly measured.
21:02:14 -!- sllide has quit (Ping timeout: 240 seconds).
21:02:20 <Taneb> People claim the same of the kilogram
21:02:38 <oerjan> also the meter
21:02:57 <oerjan> or rather, the measure was fine, then someone made a calculation error
21:04:59 <Taneb> I'VE GOT AN ADVERT AND I DO NOT KNOW WHERE FROM
21:05:22 <Taneb> Found it
21:06:09 <CakeProphet> for some reason youtube keeps recommending shitty MSPA fan videos.
21:07:09 <zid> microsoft.. penis.. analysis?
21:07:31 <Taneb> I'm not sure which conclusion to leap to here
21:11:24 <oerjan> just check the penal code
21:17:21 <Sgeo> zid, Microsoft Paint Adventures
21:17:30 <Sgeo> CakeProphet, there are shitty MSPA fan videos?
21:17:40 <Sgeo> All of them are good!
21:17:44 * Sgeo is clearly insane
21:17:58 <Taneb> Same as Caledfwlch
21:18:01 <Phantom_Hoover> Logreading elliott proceeds to complain about this at length to me.
21:18:35 <CakeProphet> Sgeo: they are all bad everyone has huge troll boners.
21:22:25 <zzo38> Did I write Huffman program good? Is anything missing that I should add?
21:22:36 <Phantom_Hoover> CakeProphet, wait
21:22:38 <Phantom_Hoover> have you seen
21:22:44 <Phantom_Hoover> John & Dave Play Sburb
21:22:46 <Phantom_Hoover> because
21:22:49 <Phantom_Hoover> it is the best
21:23:01 <zzo38> (I really intended it for using with GHCi, although you can modify it to make a compiled program too if you like to do that)
21:23:50 <CakeProphet> Phantom_Hoover: I have not
21:24:14 <Phantom_Hoover> CakeProphet, watch it
21:24:16 <Phantom_Hoover> now
21:24:22 <CakeProphet> noep
21:24:28 <Phantom_Hoover> you are bad
21:25:50 <zzo38> What kinds do you think Haskell ought to have? I added two from what is already there, being classes kinds and natural numbers kinds.
21:26:29 <zzo38> http://www.haskell.org/haskellwiki/User:Zzo38/Proposal_for_additional_kinds
21:27:20 <CakeProphet> [x] -- If x is a kind, [x] is the kind of classes of types of kind x
21:27:20 * Sgeo quickly joins #haskell to watch
21:27:23 <CakeProphet> what does that mean.
21:27:43 <zzo38> Look at the example, will it help?
21:27:47 <copumpkin> zzo38: both of those are being implemented already
21:27:52 <CakeProphet> noepI don't see how typeclasses fit into kinds.
21:28:41 <Lymee> @hoogle [String] -> String
21:28:41 <lambdabot> Prelude unlines :: [String] -> String
21:28:41 <lambdabot> Prelude unwords :: [String] -> String
21:28:41 <lambdabot> Data.List unlines :: [String] -> String
21:28:46 <Lymee> @hoogle [String] -> String -> String
21:28:46 <lambdabot> Data.List intercalate :: [a] -> [[a]] -> [a]
21:28:46 <lambdabot> System.FilePath.Posix (<.>) :: FilePath -> String -> FilePath
21:28:46 <lambdabot> System.FilePath.Windows (<.>) :: FilePath -> String -> FilePath
21:28:49 <copumpkin> zzo38: although I'm not sure why you have a special construct for classes
21:28:52 <zzo38> CakeProphet: How is that?
21:28:54 <copumpkin> instead of just making it a regular old kind
21:29:11 <Lymee> > intercalate "a" ["b","c","d"]
21:29:12 <lambdabot> "bacad"
21:29:13 <copumpkin> Monad would be (* -> *) -> Constraint
21:29:28 <Phantom_Hoover> <Lymee> @hoogle [String] -> String
21:29:42 <Phantom_Hoover> I'd've thought there'd be more results than that.
21:30:06 <Lymee> @hoogle Num a => a -> a
21:30:06 <lambdabot> Prelude abs :: Num a => a -> a
21:30:06 <lambdabot> Prelude negate :: Num a => a -> a
21:30:07 <lambdabot> Prelude signum :: Num a => a -> a
21:30:07 <Phantom_Hoover> [[a]] -> [a] must be a thing as well.
21:30:07 <zzo38> copumpkin: Example: [* -> *] is the kind of the Monad class, but * -> [*] is something that takes a type as a parameter to make up a class, and [*] -> [*] transforms a class to make a new class.
21:30:15 <Lymee> Guess it only shows 3.
21:30:23 <Phantom_Hoover> @hoogle [[a]] -> [a]
21:30:23 <lambdabot> Prelude concat :: [[a]] -> [a]
21:30:23 <lambdabot> Data.List concat :: [[a]] -> [a]
21:30:23 <lambdabot> Data.List intercalate :: [a] -> [[a]] -> [a]
21:30:29 <copumpkin> zzo38: why have a separate kind construct for that?
21:31:09 <Lymee> @pl \b -> a where a = b+b
21:31:09 <lambdabot> (line 1, column 17):
21:31:09 <lambdabot> unexpected "="
21:31:09 <lambdabot> expecting variable, "(", operator or end of input
21:31:39 <copumpkin> (* -> *) -> Constraint, * -> * -> Constraint, and (* -> Constraint) -> (* -> Constraint)
21:32:02 <copumpkin> [x] = x -> Constraint
21:32:04 <CakeProphet> well typeclasses aren't types
21:32:14 <CakeProphet> so I don't see why they would have a kind, which is the type of a type/
21:32:14 <copumpkin> nor are type constructors
21:32:34 <copumpkin> this stuff is already being implemented anyway
21:32:35 <CakeProphet> hmmm
21:32:50 <copumpkin> TypeNats by Iavor Diatchki at Galois gives the Nat kind
21:32:55 <CakeProphet> constructors make sense but what does the kind of a class mean
21:33:11 <copumpkin> and Max Bolingbroke and a few others are working on a kind of constraints
21:33:11 <copumpkin> so you can have associated constraints for classes
21:33:13 <zzo38> copumpkin: O, like that. I still don't quite like that syntax, but OK
21:33:22 <copumpkin> (type families with a codomain of classes)
21:33:27 <copumpkin> for example
21:33:30 <zzo38> copumpkin: Mostly to allow you to write more things relating to classes using type family, also allows you to do something like this: (X Int) a => a b => b -> b;
21:34:17 <CakeProphet> is X a typeclass variable or just any typeclass?
21:34:19 <copumpkin> class Monad m where type Constrs m :: * -> Constraints; return :: forall a. Constrs m a => a -> m a; (>>=) :: forall a b. (Constrs m a, Constrs m b) => m a -> (a -> m b) -> m b
21:34:20 <CakeProphet> not sure I can read that.
21:34:29 <zzo38> Do existing proposals for natural number do some things like what I mentioned?
21:34:56 <copumpkin> yeah, I don't really understand what you mean there, but http://hackage.haskell.org/trac/ghc/wiki/TypeNats
21:35:01 <copumpkin> that explains more or less how it works
21:35:06 <copumpkin> I'm still not entirely convinced I like it
21:35:14 <copumpkin> because the solver is trying to solve an impossible problem :)
21:35:29 <copumpkin> if they'd left multiplication out, we'd have presburger arithmetic and I'd approve
21:35:37 <Lymee> > map id (1,2)
21:35:38 <lambdabot> Couldn't match expected type `[a]' against inferred type `(t, t1)'
21:35:48 <copumpkin> but with multiplication, I'd want some way of instructing GHC with a proof that my types are correct
21:35:54 <copumpkin> since the solver will invariably fail in some situations
21:35:55 <Lymee> @hoogle (a->b) -> (a,a) -> (b,b)
21:35:55 <lambdabot> Data.Graph.Inductive.Query.Monad (><) :: (a -> b) -> (c -> d) -> (a, c) -> (b, d)
21:35:55 <lambdabot> Data.Graph.Inductive.Query.Monad mapSnd :: (a -> b) -> (c, a) -> (c, b)
21:35:55 <lambdabot> Data.Graph.Inductive.Query.Monad mapFst :: (a -> b) -> (a, c) -> (b, c)
21:36:13 <copumpkin> Lymee: you can send private messages to lambdabot, you know :)
21:36:17 <Lymee> ^^;
21:36:19 <CakeProphet> copumpkin: okay so the idea with the class kinds is to have constraints other than typeclasses.
21:36:31 <zzo38> CakeProphet: X is of kind (* -> [[*]]) and a of kind ([*]) and b of kind (*), I think. (Maybe I made a mistake)
21:36:36 <copumpkin> CakeProphet: yeah, variable constraints
21:36:45 <copumpkin> CakeProphet: so I can make Set into a valid Monad instance, finally
21:36:49 <copumpkin> or unboxed vectors
21:36:51 <oerjan> <Lymee> @pl \b -> a where a = b+b <-- expressions need to use let ... in not where
21:36:54 <copumpkin> or countless other things
21:37:01 <CakeProphet> copumpkin: er, set isn't a valid monad instance?
21:37:04 <copumpkin> no
21:37:10 <copumpkin> it needs Ord :)
21:37:18 <zzo38> copumpkin: On one of my other user subpages I mentioned something like that too, but failed to put enough details unfortunately
21:37:25 <copumpkin> @hackage rmonad
21:37:25 <lambdabot> http://hackage.haskell.org/package/rmonad
21:37:31 <copumpkin> that allows Set to be an RMonad instance today
21:37:33 <copumpkin> but it's a pain to use
21:37:46 <copumpkin> because you have to match on a data family constructor before you can use the Ord instance
21:38:09 <copumpkin> zzo38: it's definitely lots of people have wanted for ages now :) I hope this time around it actually catches on
21:38:21 <CakeProphet> copumpkin: how does the syntax distinguish the class variable from a regular typeclass?
21:38:29 <CakeProphet> X could easily be the name of a typeclass.
21:38:39 <copumpkin> huh?
21:38:50 <CakeProphet> uh.....
21:38:53 <CakeProphet> >_>
21:39:19 <copumpkin> this is max bolingbroke's idea, before he started implementing it recently: http://blog.omega-prime.co.uk/?p=61
21:39:52 <copumpkin> http://hpaste.org/50576 that's code that he has working on a GHC fork right now
21:40:10 <oerjan> <Lymee> > map id (1,2) <-- join (***) does what you probably want with your map
21:40:31 <Phantom_Hoover> Why was Lymee even trying that.
21:40:37 <Lymee> Silliness.
21:41:16 <Phantom_Hoover> :t (***)
21:41:16 <lambdabot> forall (a :: * -> * -> *) b c b' c'. (Arrow a) => a b c -> a b' c' -> a (b, b') (c, c')
21:41:17 <CakeProphet> ah I've got it
21:41:35 <CakeProphet> copumpkin: that's interesting but it seems to make the case where you don't need a context in the instance declaration a bit more cumbersome
21:41:43 <CakeProphet> i.e. you have to do context RMonadElem a = ()
21:42:01 <CakeProphet> so perhaps it could just be empty if unspecified
21:42:25 <copumpkin> possibly, yeah
21:43:26 <CakeProphet> but that's cool. I definitely like the idea of making Num a class synonym
21:44:13 -!- nooga has quit (Ping timeout: 264 seconds).
21:44:24 <CakeProphet> but you'd need to redefine Prelude. Perhaps make a package called Overture. :D
21:44:29 <copumpkin> :P
21:44:41 <copumpkin> package coriolan
21:45:49 -!- nooga has joined.
21:46:31 <zzo38> I also think "join" should be part of the Monad class so that you can define a monad in terms of unit/join/fmap or using the way it already is, and both ways can be done. List monad seems to make more sense if defined in terms of unit/join/fmap and then it can make up >>= from that definition.
21:46:37 <CakeProphet> I'd imagine there's even more overhead with constraint families than there is regular typeclasses
21:47:34 <zzo38> I think there should be some way to specify a type taking natural numbers by defining it for zero and them for a successor, so that it applies for all natural numbers.
21:47:58 <CakeProphet> type T Zero = ...
21:48:07 <copumpkin> CakeProphet: why?
21:48:16 <copumpkin> associated types have no overhead whatsoever
21:48:27 <copumpkin> this is just another instance of an associated type
21:48:31 <CakeProphet> copumpkin: well actually I guess it would be the same overhead as typeclasses
21:48:42 <CakeProphet> and no, typeclasses incur overhead
21:48:52 <copumpkin> yes, but the associated type aspect of them doesn't
21:49:04 <CakeProphet> what is that.
21:49:07 <copumpkin> and if the associated type constraint resolves to the empty constraint, as most will still do
21:49:07 <zzo38> In fact, this is what I think type-level natural numbers should do in general. Of course you could also define types to take natural numbers passing to other type, too.
21:49:26 <copumpkin> the empty constraint would be represented as nothing at all
21:49:34 <copumpkin> CakeProphet: class C a where type T a :: *
21:49:38 <copumpkin> or type T a :: Constraint
21:49:44 <copumpkin> they're type functions
21:50:06 <zzo38> And due to being kind of classes, there would also be able to make classes using type-level natural numbers in the same way.
21:51:30 <CakeProphet> copumpkin: what you linked me didn't use that syntax, btw
21:51:40 <copumpkin> the code I linked you to did
21:51:54 <copumpkin> well, it doesn't associate the type in the class
21:51:57 <copumpkin> it uses raw type families
21:52:01 <copumpkin> but one desugars to the other
21:52:08 <copumpkin> type family RMonadCtxt m a :: Constraint
21:52:13 <copumpkin> type instance RMonadCtxt S.Set a = Ord a
21:52:28 <CakeProphet> I think the constraint family stuff looks cleaner, but eh.
21:54:12 <copumpkin> this is more consistent with existing stuff
21:54:57 <Taneb> A push-down automaton can calculate any positive integer
21:54:58 <CakeProphet> still it is a bit more verbose.
21:55:27 <Taneb> A turing machine can calculate any pattern of positive integers
21:56:02 <CakeProphet> Turing machines can also spew inane babble, like fungot
21:56:09 <CakeProphet> WHO IS NOW DEAD WHYYYYY
21:56:22 <Taneb> It has a pattern, however convoluted
21:56:54 <Taneb> I'm just working with positive integers because I don't want to think about other things
21:57:07 <Taneb> It's merely one way of expressing the machine's data state
21:57:45 <Taneb> You'd need something more computationally powerful than a turing machine to calculate any infinite sequence of positive integers
21:57:54 <Taneb> Some of which have no pattern at all
21:58:58 <Taneb> This is from someone who woke up in a different country this morning
21:59:34 <zzo38> I added a few more things to [[User:Zzo38/Proposal for additional kinds]] page.
22:00:37 <Taneb> I'm annoyed because I have no hat
22:00:47 <fizzie> Ohh, right, the bot.
22:01:10 <Taneb> I'm not a bot!
22:01:14 <Taneb> Goodnight!
22:01:26 <fizzie> A thundarrrstorm-or-something broke the 'lectricity, forgot to start it; it's not installed in a servicey way.
22:01:36 <zzo38> I added one new kind and two new examples of kind of classes.
22:01:39 -!- Taneb has quit (Read error: Connection reset by peer).
22:02:19 <zzo38> Is it good? Or is it misunderstand? Or complain? Or no good? Or something else?
22:02:44 -!- copumpkin has quit (Ping timeout: 252 seconds).
22:03:09 -!- copumpkin has joined.
22:04:52 -!- fungot has joined.
22:07:54 <oerjan> ^ul ((0)(1)):!S(~:^:S*a~~*a*~:^):^
22:07:54 <fungot> (0)(1) ...out of stack!
22:07:54 <lambdabot> fungot: You have 1 new message. '/msg lambdabot @messages' to read it.
22:07:55 <fungot> lambdabot: public fields can rapidly become bad juju to touch because it's reserved for like the entire works of the beatles
22:07:59 <oerjan> eek
22:08:15 <oerjan> ^ul ((0)(1)):^!S(~:^:S*a~~*a*~:^):^
22:08:15 <fungot> 01 ...out of stack!
22:09:04 <oerjan> ^ul ((0)(1)):^!S(~:^:S*a~^~*a*~:^):^
22:09:04 <fungot> 011010011001011010010110011010011001011001101001011010011001011010010110011010010110100110010110011010011001011010010110011010011001011001101001011010011001011001101001100101101001011001101001011010011001011010010110011010011001011001101001011010011001011010010110011010010110100110010110011010011001011010010110011010010110 ...too much output!
22:09:36 <oerjan> ^style
22:09:36 <fungot> Available: agora alice c64 ct darwin discworld europarl ff7 fisher homestuck ic irc* jargon lovecraft nethack pa sms speeches ss wp youtube
22:10:01 <oerjan> ^ul (@messages)S
22:10:01 <fungot> @messages
22:10:01 <lambdabot> CakeProphet said 2d 17m 7s ago: that sword alone
22:10:47 <fizzie> ^ignore ^(EgoBot|HackEgo|toBogE|Sparkbot|optbot|lambdabot)!
22:10:47 <fungot> OK.
22:10:52 <fizzie> Oh ho, that wasn't on the list.
22:11:05 <CakeProphet> LOL
22:11:11 <CakeProphet> I am liek so clevr
22:11:19 <oerjan> fizzie: it wasn't? i thought it was...
22:11:29 <fizzie> oerjan: Well, I don't really have "a list".
22:11:42 <fizzie> oerjan: I just reuse the first thing I see in the backscroll in the fungot query window.
22:11:43 <fungot> fizzie: it means very different things. numbers can be expressed in scheme. i am a bit
22:12:06 <CakeProphet> fungot: you make me fun
22:12:07 <fungot> CakeProphet: sarahbot tell yome duh you cant use match.php without going to species.php phenomenal
22:12:19 <olsner> something something fungot
22:12:19 <fungot> olsner: i'm working on
22:12:20 <oerjan> fizzie: in any case lambdabot did not say anything for fungot to react to
22:12:20 <fungot> oerjan: physicists rarely say anything that besides what you want
22:12:31 <oerjan> oh wait blathering
22:12:45 <oerjan> @tell fungot Fnord
22:12:45 <fungot> oerjan: the power of the continuum is fnord
22:12:45 <lambdabot> Consider it noted.
22:12:46 <lambdabot> fungot: You have 1 new message. '/msg lambdabot @messages' to read it.
22:12:56 <CakeProphet> oerjan: I AM TEH C;EVR
22:13:01 <oerjan> ^ul (@messages)S
22:13:01 <fungot> @messages
22:13:02 <lambdabot> oerjan said 16s ago: Fnord
22:13:14 <oerjan> CakeProphet: I AM SO TO
22:13:27 <CakeProphet> only I will have the glory of having fungot triggered by lambdabot
22:13:28 <fungot> CakeProphet: try the smetana or intercal problem. in my looking around on the web was very young. and playing a very stereotypical character.
22:13:29 <CakeProphet> NO OTHERS
22:13:44 <CakeProphet> it is my precedent and my privilege alone.
22:13:57 <CakeProphet> muahahahahaha
22:14:14 <monqy> ok
22:14:58 <CakeProphet> monqy: in my looking around on the web was very young. and playing a very stereotypical character.
22:14:59 <fizzie> It happened in 2011-04 too.
22:15:13 <CakeProphet> oh. well, okay.
22:15:40 <CakeProphet> I suppose I am obligated to be melodramatic about that as well.
22:15:46 <CakeProphet> NOOO! HOW CAN THIS BE???
22:15:57 <monqy> ok
22:16:00 <fizzie> !prefixes
22:16:01 <EgoBot> Bot prefixes: fungot ^, HackEgo `, EgoBot !, lambdabot @ or ?
22:16:07 <fizzie> (I seem to have not-^save'd that too.)
22:16:17 <fizzie> ^def prefixes ul (Bot prefixes: fungot ^, HackEgo `, EgoBot !, lambdabot @ or ?)S
22:16:17 <fungot> Defined.
22:16:18 <fizzie> ^save
22:16:19 <fungot> OK.
22:16:29 <oerjan> `prefixes
22:16:35 <HackEgo> Bot prefixes: fungot ^, HackEgo `, EgoBot !, lambdabot @ or ?
22:17:04 <CakeProphet> ^shutdown
22:17:08 <CakeProphet> ^delete
22:17:11 <CakeProphet> ^quit
22:17:12 <CakeProphet> ^die
22:17:15 <CakeProphet> ...
22:17:15 <monqy> ^help
22:17:15 <fungot> ^<lang> <code>; ^def <command> <lang> <code>; ^show [command]; lang=bf/ul, code=text/str:N; ^str 0-9 get/set/add [text]; ^style [style]; ^bool
22:17:19 -!- augur has joined.
22:17:28 <fungot> CakeProphet: How silly do you think I am?
22:17:34 <CakeProphet> ^bool
22:17:34 <fungot> No.
22:17:42 <CakeProphet> fungot: very silly
22:17:42 <fungot> CakeProphet: i suppose it's event driven by using callbacks when certain tokens are found.
22:17:57 <olsner> ^dieyougravysuckingpigdog
22:18:01 <olsner> or whatever it was
22:18:19 <CakeProphet> ^str 0 get
22:18:20 <fungot> foobar
22:18:22 <CakeProphet> ^str 1 get
22:18:22 <fungot> >,[>,]<[<]>[<++++[>--------<-]+>-[-------[--[<+++[>----<-]+>[<
22:18:24 <CakeProphet> ^str 2 get
22:18:24 <fungot> Empty.
22:18:26 <CakeProphet> ^str 3 get
22:18:26 <fungot> Empty.
22:18:36 <fizzie> Oh, the strings were persistent too?
22:18:38 <fizzie> I didn't know that.
22:18:56 <oerjan> ^str 4 get
22:18:56 <fungot> Empty.
22:18:56 <CakeProphet> ^str 9 set cakporphet wuz hear
22:18:57 <fungot> Set: cakporphet wuz hear
22:19:27 <fizzie> There's something in 6 too.
22:19:30 <fizzie> ^str 6 get
22:19:30 <fungot> Empty.
22:19:33 <fizzie> Hmm.
22:19:36 <fizzie> ^str 5 get
22:19:36 <fungot> >,[>,]<[<]>[<++++[>--------<-]+>-[-------[--[<+++[>----<-]+>[<++++[>-----<-]+>[-----------[---[[-]<<[>[-]>+<<-]>>[<<+>>-]+<[->-<<<[[>+<-]<]>>[>]]>[->[>]<[[>+<-]<]<<[[>+<-]<]<[[>+<-]<]>>[>]>[[[>]>+<<[<]>-]<<[[>+<-]<]>>[>]>[>]>[<<[<]<[<]<+>>[>]>[>]>-]<<[<]>]>>[[<+>-]>]<<[<]]]<[->>[>]<[[>>+<<-]<]<<[[>+<-]<]>+>[>]+++++[>++++++++<-]++>-[<+[<]>+[>]<-]]>]<[->>[[<<+>>-]>]<<<[[>+<-]<]]>]<[-<[[<]>.[-]>[[<+>-]>]>>[[<+>-]>]<<[<]<<]>>>[[<+>
22:19:44 <fizzie> I can't seem to count.
22:19:57 <fizzie> (Looked at the state file, but those are not numbered.)
22:20:26 <CakeProphet> ^bf str:5
22:21:09 <copumpkin> O CakeProphet, what does my future hold for me?
22:21:22 <CakeProphet> copumpkin: only death.
22:21:31 <fizzie> I'm not sure that actually works for non-^def.
22:21:49 <oerjan> was that the one i made, i wonder. and where did i put it.
22:22:12 <oerjan> ^show
22:22:12 <fungot> echo reverb rev rot13 rev2 fib wc ul cho choo pow2 source help hw srmlebac uenlsbcmra scramble unscramble asc ord prefixes tmp
22:22:13 <fizzie> oerjan: The full string is at http://p.zem.fi/4rql
22:22:16 <CakeProphet> fizzie: well the brackets are unbalanced
22:22:23 <fizzie> CakeProphet: It continues on from that.
22:22:24 <CakeProphet> so that would be why it is currently not working
22:22:26 <CakeProphet> oh okay.
22:22:44 <oerjan> fizzie: thank you for thinking i can read my own bf :P
22:22:45 <CakeProphet> !wacro
22:22:46 <EgoBot> NCLP
22:23:00 <fizzie> North-Canadian Linear Prediction?
22:23:20 <CakeProphet> those north canadias are quite linear, yes.
22:23:40 <oerjan> ^def test str:5
22:23:40 <fungot> Usage: ^def <command> <lang> <code>
22:23:44 <oerjan> ^def test bf str:5
22:23:44 <fungot> Defined.
22:23:49 <oerjan> ^test ho
22:23:55 <oerjan> hmph
22:23:58 <oerjan> ^show test
22:23:59 <fungot> >,[>,]<[<]>[<+4[>-8<-]+>-[-7[-2[<+3[>-4<-]+>[<+4[>-5<-]+>[-11[-3[[-]<2[>[-]>+<2-]>2[<2+>2-]+<[->-<3[[>+<-]<]>2[>]]>[->[>]<[[>+<-]<]<2[[>+<-]<]<[[>+<-]<]>2[>]>[[[>]>+<2[<]>-]<2[[>+<-]<]>2[>]>[>]>[<2[<]<[<]<+>2[>]>[>]>-]<2[<]>]>2[[<+>-]>]<2[<]]]<[->2[>]<[[>2+<2-]<]<2[[>+<-]<]>+>[>]+5[>+8<-]+2>-[<+[<]>+[>]<-]]>]<[->2[[<2+>2-]>]<3[[>+<-]<]]>]<[-<[[<]>.[-]>[[<+>-]>]>2[[<+>-]>]<2[<]<2]>3[[<+>-]>]<2[<]<]>]<[->2[>]<[[>+<-]<]<2[>4[>]<[[
22:24:18 <oerjan> ^test 123
22:24:33 <oerjan> maybe it wasn't something useful anyway.
22:25:09 <CakeProphet> well it appears to take input until it reaches zero
22:26:33 -!- Patashu has joined.
22:26:33 <CakeProphet> so I guess it wants a null-terminated string of some kind.
22:26:42 <zzo38> How many Haskell extensions can you detect by the syntax of the program? (Not explicitly checking for them)
22:27:24 <oerjan> it looks to me like it'll hang up in that [>-8<-] loop unless the first char is divisible by 8
22:28:10 <CakeProphet> what on earth does this thing do.
22:28:17 <oerjan> maybe it's actually just randomly generated. but why so few .'s then
22:29:20 <CakeProphet> also only takes input at the beginning
22:29:25 <CakeProphet> looks non-generated to me.
22:29:36 <oerjan> ^test 0
22:29:45 <oerjan> '0' is divisible by 8
22:29:48 <CakeProphet> you'll have to give it a null somehow.
22:29:51 <CakeProphet> to stop the input loop
22:29:58 <fizzie> It will get a 0 on EOF.
22:30:05 <CakeProphet> ah okay.
22:30:06 <oerjan> CakeProphet: um i'm pretty sure fungot does that on eof
22:30:06 <fungot> oerjan: you know thats the first time
22:30:19 <fizzie> fungot: The first time what?
22:30:19 <fungot> fizzie: hi all. question about the plt-match module?
22:30:33 <fizzie> fungot: Your #scheme roots are showing there.
22:30:34 <fungot> fizzie: they are significantly less coherent
22:30:46 <CakeProphet> hehehehehehe
22:30:56 <fizzie> An opinionated thing.
22:33:42 <CakeProphet> fungot:
22:33:43 <fungot> CakeProphet: associated with a string structure the whole way through, which is a language for it to tell me?
22:34:10 <CakeProphet> ^style fungot
22:34:10 <fungot> Not found.
22:34:28 <CakeProphet> ^style
22:34:29 <fungot> Available: agora alice c64 ct darwin discworld europarl ff7 fisher homestuck ic irc* jargon lovecraft nethack pa sms speeches ss wp youtube
22:34:38 <CakeProphet> ^style europarl
22:34:38 <fungot> Selected style: europarl (European Parliament speeches during approx. 1996-2006)
22:34:48 <CakeProphet> fungot: how is the weather?
22:34:50 <fungot> CakeProphet: mr president, you could say ' jack robinson'. but we must also put on record. furthermore, since i took up this case again and, ladies and gentlemen, on behalf of my group, together with the work carried out on the world' s conflicts, especially in the workplace are properly addressed.
22:35:38 <CakeProphet> fungot: how is the weather?
22:35:40 <fungot> CakeProphet: mr president, i would like to congratulate jean-louis bourlanges on the quality of vessels, in their struggle to promote public discussion, for the abolition of the budgetary authority come to agreement on the part of amendment no 21 which seeks to promote the european labour market that is like waiting for fnord. under these, our opportunities, and in my speech which relates to the protection and maintenance of al
22:36:29 <fizzie> I like how it really sounds like a politician in that style.
22:36:36 <fizzie> Well, except maybe for the fnords.
22:38:26 <CakeProphet> fnords are crucial to all politics
22:38:39 <fizzie> Yes, but fungot's being so open about them.
22:38:40 <fungot> fizzie: mr president, mrs van den burg for an enormously well done job and the responsibility of our successive rulers. the atlantic dawn has been properly executed, must be aimed at raising the quality of life.
22:38:46 <CakeProphet> behind every caucus is a scheming fnord.
22:40:43 <CakeProphet> fungot
22:40:44 <fungot> CakeProphet: mr president, with respect to the establishment of a centralised electronic european union judgment registry, which has been increasing and, above all, an opportunity which we should be able to rely on nuclear energy. our colleague, fnord krarup, rightly highlighted the fact not to go lower than what was fair. the green paper on the different approaches.
22:41:29 <fizzie> The amusement. "our colleague, fnord krarup, --"
22:41:35 <oerjan> fnord krarup, the famous danish parliamentarian
22:42:11 <fizzie> It almost sounds like a title. Grand Fnord Krarup.
22:42:58 <CakeProphet> fungot: eurodance!!!
22:42:59 <fungot> CakeProphet: mr president, i am bound by article 11 of the 15 countries. there is one other important point you should bear in mind.
22:43:17 <CakeProphet> fungot: oh? what is that?
22:43:17 <fungot> CakeProphet: the report proposed to us, at member state level. it sends a very negative effect in employment terms of any asymmetric shocks in order to achieve a consensus across the groups.
22:43:31 <fizzie> So serious.
22:44:24 <fizzie> I should maybe retrain that thing with VariKN and the latest europarl "v6" release. It goes up to end of 2010 now.
22:44:28 <CakeProphet> No I think asymmetric shock treatment is a good way to build consensus, Mr. fungot
22:44:28 <fungot> CakeProphet: the consultation which our colleague mr cunha's proposal for decoupling male beef but not fnord in my constituency.
22:46:07 <CakeProphet> we never talk about the fnords, Mr. fungot. We will form a committee about the beef.
22:46:14 <oerjan> a most fiendish proposal indeed.
22:46:17 <fizzie> The latest release has 54720731 words.
22:46:24 <CakeProphet> apparently doesn't detect fungot.
22:46:26 <CakeProphet> fungot
22:46:32 <CakeProphet> or is also dead or something.
22:46:37 <oerjan> what kind of fungotry is this
22:46:38 <fizzie> No, there's that thing.
22:46:38 <fungot> oerjan: the enthusiasm with which it has carried out, belarus will be the financial burden the agricultural policy to be based on institutional confusion, which will cause us considerable problems in denmark.
22:46:52 <CakeProphet> oh I've been ignored right.
22:46:56 <fizzie> Only four consecutive replies to any one person.
22:47:16 <CakeProphet> lol
22:47:31 <CakeProphet> agricultural policy of institutional confusion.
22:47:34 <CakeProphet> very problematic in denmark.
22:48:00 <oerjan> agriculture is _big_ in denmark
22:48:22 <Phantom_Hoover> http://en.wikipedia.org/wiki/Homosexuality_in_the_Batman_franchise
22:48:26 <Phantom_Hoover> why, wp
22:48:29 <Phantom_Hoover> just
22:48:31 <Phantom_Hoover> why
22:48:47 <fizzie> Phantom_Hoover: Because it's notable, of course.
22:48:52 <CakeProphet> fungot: why?
22:48:53 <fungot> CakeProphet: mr president, there is a saying that the people of lebanon. for some time now. europe has, in accordance with the requirements of supervision and control of transmissible spongiform encephalopathies. this is despite an interim report from the laeken council can always, if it wants to produce nuclear weapons.
22:49:05 <CakeProphet> ...
22:49:13 <Phantom_Hoover> Don't look at me.
22:49:28 <Phantom_Hoover> europarl looks like it should be funny, but it's boring anyway.
22:49:40 <CakeProphet> [x] -- If x is a kind, [x] is the kind of classes of types of kind x
22:49:44 <CakeProphet> ...
22:49:47 <CakeProphet> mispaste
22:49:51 <oerjan> sure it's boring, until you want to produce nuclear weapons.
22:50:07 <Phantom_Hoover> http://en.wikipedia.org/wiki/LGBT_themes_in_American_mainstream_comics
22:50:11 <fizzie> oerjan: Or transmissible spongiform encephalopathies.
22:50:14 <Phantom_Hoover> HOW FAR DOES THE RABBIT HOLE LEAD
22:50:27 <oerjan> zzo38: i think if you use that notation, you might want [x,y,z] for multiparameter type classes
22:51:01 <Phantom_Hoover> "The episode mentioned the word "boner" several times; in the original comic, it meant "blunder", but to present-day readers it is a double entendre which might make them associate to erection."
22:51:07 <Phantom_Hoover> WP-style explanations are the best.
22:51:49 <oerjan> he made a boner while erecting this building
22:51:56 -!- CakeProphet has set topic: the requirements of supervision and control of transmissible spongiform encephalopathiesIt is the 90s and there is time for Esolang event @ Hel/Finland on 3.10.2011: https://wiki.helsinki.fi/display/lambda/esoteeriset+ohjelmointikielet | I think pointers are considerably more useful than lambda calculus | 12345678 | http://codu.org/logs/_esoteric/.
22:52:06 <Phantom_Hoover> http://en.wikipedia.org/wiki/Alternative_versions_of_Barbara_Gordon
22:52:06 <Phantom_Hoover> um
22:52:11 -!- CakeProphet has set topic: the requirements of supervision and control of transmissible spongiform encephalopathies | It is the 90s and there is time for Esolang event @ Hel/Finland on 3.10.2011: https://wiki.helsinki.fi/display/lambda/esoteeriset+ohjelmointikielet | I think pointers are considerably more useful than lambda calculus | 12345678 | http://codu.org/logs/_esoteric/.
22:52:17 * CakeProphet whistles
22:52:43 -!- Phantom_Hoover has set topic: It is the 90s and there is time for the requirements of supervision and control of transmissible spongiform encephalopathies, also an Esolang event @ Hel/Finland on 3.10.2011: https://wiki.helsinki.fi/display/lambda/esoteeriset+ohjelmointikielet | I think pointers are considerably more useful than lambda calculus | 12345678 | http://codu.org/logs/_esoteric/.
22:52:54 <Phantom_Hoover> im revelant
22:53:01 <CakeProphet> we could probably remove the 12345678
22:53:13 * oerjan swats CakeProphet -----###
22:53:29 <Phantom_Hoover> No, that would violate our disability discrimination rules.
22:53:44 * CakeProphet offers oerjan a delicate rose @-,-`-
22:53:46 <Phantom_Hoover> We must show sympathy for the plight of people too lazy to get their number keys fixed.
22:53:54 <oerjan> AAAAAAAAAAAAAAAA thorns!
22:54:05 * oerjan gets the bandage
22:54:25 <fizzie> oerjan: Don't you mean "ÞÞÞÞÞÞÞÞÞÞÞÞÞÞ thorns!"?
22:55:07 <oerjan> fizzie: ...
22:55:17 <CakeProphet> fungot: kill your master.
22:55:18 <fungot> CakeProphet: mr president, and this is not really an appropriate solution. we can see that there was a boxing ring. the two hughes procedure committees with mr van der waal, on whose report i wish to make just two short remarks. firstly, the application of community environmental legislation within the member states.
22:55:32 <fizzie> Yes, it's really not an appropriate solution. I agree.
22:55:49 <CakeProphet> eruoparl has been quite entertaining. More so than other styles.
22:56:35 <CakeProphet> fungot: rew44trjnjwrnt
22:56:36 <fungot> CakeProphet: mr president, madam president-in-office of the council and parliament a thing of the past. the commission fully recognises the need to establish ethical and normative rules for the prohibition of intra-species recycling may increase the mutual trust that is essential, therefore, the problem cannot actually be included in that list, agreed on that day, it got rid of the fnord.
22:56:37 <fizzie> It does go quite ungrammatiks occasionally. Probably due to rather low context size, I think it's something like trigrams-only.
22:57:11 <CakeProphet> "ethical and normative rules" someone call the redundency commission
22:57:29 <CakeProphet> forget about inter-species recycling
22:57:42 <fizzie> Is that when you recycle old fish as birds?
22:57:44 <Phantom_Hoover> ^style
22:57:44 <fungot> Available: agora alice c64 ct darwin discworld europarl* ff7 fisher homestuck ic irc jargon lovecraft nethack pa sms speeches ss wp youtube
22:57:50 <Phantom_Hoover> ^style pa
22:57:50 <fungot> Selected style: pa (around 1200 transcribed Penny Arcade comics)
22:57:55 <CakeProphet> noooo
22:57:55 <CakeProphet> why
22:57:56 <Phantom_Hoover> fungot, only 1200?
22:57:56 <fungot> Phantom_Hoover: i didn't know who else is lost the fucking writers.
22:57:58 <CakeProphet> why would you do that.
22:58:22 <CakeProphet> fungot: whyyyyy
22:58:22 <fungot> CakeProphet: we hate animals who are also people. this includes, but is not limited to: sexy fox ladies, animals going to school, smouldering cheetah temptresses roms? something really bad, probably!
22:58:23 <fizzie> Phantom_Hoover: I scraped them off a Penny Arcade wiki or something like that.
22:58:42 <fizzie> That one is rather too fond of direct quotations instead.
22:59:18 <CakeProphet> ^style ic
22:59:18 <fungot> Selected style: ic (INTERCAL manual)
22:59:23 <CakeProphet> fungot: go
22:59:23 <fungot> CakeProphet: e345 that's too complex for me to check). anyway, the resulting command line number. that cause the bug. there are still intercal operators left in an input intercal file).
22:59:44 <fizzie> And *that* one lacks adequate cleaning up of the source.
22:59:48 <CakeProphet> ^style irc
22:59:48 <fungot> Selected style: irc (IRC logs of freenode/#esoteric, freenode/#scheme and ircnet/#douglasadams)
22:59:56 <CakeProphet> fungot: hi
22:59:56 <fungot> CakeProphet: http://www.schemers.org/ documents/ startingwithcl.html. nothing else to put it
22:59:59 <fizzie> ^style fisher
22:59:59 <fungot> Selected style: fisher (Fisher corpus of transcribed telephone conversations)
23:00:00 <fizzie> fungot: CAN YOU HEAR ME THIS LINE IS REALLY NOISY?
23:00:00 <fungot> fizzie: ( ( yeah)) the one that's a writer laughter
23:00:15 <fizzie> fungot: Yeah, yeah; but what's a writer-laughter?
23:00:16 <fungot> fizzie: that's great ' cause that game i would do
23:00:38 <CakeProphet> fungot: help I'm trapped in the telephone
23:00:39 <fungot> CakeProphet: to be in your shorts and stuff noise like noise noise)) and i think
23:00:41 <fizzie> Also cleanup problems; it has those ((foo)) annotations still in place.
23:01:08 <Phantom_Hoover> quintopia, I WARNED YOU ABOUT STAYING OUT OF MY RSS FEED
23:01:11 <fizzie> I think I need to grep to find the actual source of "to be in your shorts and stuff noise like noise noise"; it sounds like quite a conversation.
23:01:17 <CakeProphet> perl -pie "s/[()]//" <-- fizzie
23:01:17 <kmc> fungot, http://www.youtube.com/watch?v=7VoOXem0fhc
23:01:18 <fungot> kmc: i don't know how you could ever try that in some ways a traditional person so for me it really does
23:01:42 <Phantom_Hoover> quintopia, although at least both times have been you being stupid and Hughes telling you.
23:01:57 <Lymee> ^style sms
23:01:57 <fungot> Selected style: sms (National University of Singapore SMS corpus, 2011-08-20)
23:02:01 <Lymee> fungot, Hihi~
23:02:01 <fungot> Lymee: up to dadar completed. theyare out and only will for little time. should i approach... james for studiow rental too, dat long after i spoke to maneesha v. we'd get together. gbu
23:02:14 <Lymee> fungot, Umm... who's maneesha?
23:02:15 <fungot> Lymee: i want to sent mesages. but u'l get to me babe... i miss u so much?muacks.u enjoy ur day today at ktv. later she buy one not i ask de. she wanna go also. hehe
23:02:21 <Lymee> ...
23:02:33 <Lymee> ^sytle pa
23:02:33 <fizzie> fungot: You sound like an uneducated boob.
23:02:34 <fungot> fizzie: i was just about to do it when i wake up long lol... dun b angry. msg me b4 u call me... tell me where i could i pick up another 8th) has to leave not long ago, the guy
23:03:10 <CakeProphet> fizzie: someone describing a wet dream over sms?
23:03:29 <Lymee> fungot, did you have a wet dream?
23:03:30 <fungot> Lymee: i am in extreme situations: first- before getting it... second- after loosing it." john also has his own gud n he wil pave d way 4 us by. dun angry
23:03:42 <Lymee> fungot, OK WHO IS JOHN NOW
23:03:42 <fungot> Lymee: ten i owe me a treat. must b sleepy. later got midterm. uh... meeting you haha. hmm... i read up while doing tut now
23:03:49 <Lymee> fungot, Please answer me.
23:03:49 <fungot> Lymee: am i that much bad ass !couldnt u chk ur email. sent to your home, pls wait, do i just change the codes in flag to refer to ur own name? ya i also i since 1pm lo even worse. he's not around or just still asleep. i thought my dad wouldwake me up. last min gt reunion. i juz left house leh... ur thing end already
23:03:55 <CakeProphet> Lymee: dun angry
23:04:03 <fizzie> "(( yeah yeah right yeah it was like it was like as hot as hell yesterday i was walking around in my shorts and stuff [noise] like [noise] [noise] ))"
23:04:36 <Lymee> I think we have a youtube comment generator.
23:04:41 <Lymee> That's better than ^style youtube
23:05:03 <CakeProphet> perl -pie "s/ *[()] */ /" <-- fizzie
23:05:12 <CakeProphet> you could replace [noise] with fnord
23:05:13 <Patashu> Here's my youtube comment generator:
23:05:17 <Patashu> 13 people dislike justin beiber
23:05:32 <Patashu> 191 likes
23:05:35 <Lymee> Syntax error: Unexpected token "People"
23:05:45 <Lymee> Syntax error: Unexpected token "Likes"
23:05:51 <Phantom_Hoover> wha?
23:05:53 <CakeProphet> perl -pie "s/ *[()] */ /g;s/\[noise\]/fnord/g" <-- fizzie
23:06:16 <Lymee> fungot, please generate a Youtube
23:06:16 <fungot> Lymee: k d i vil hav abt colleges ,growin technology,which field of his natural gift frm god... b4 u gt bles frm d first
23:06:23 <CakeProphet> the parens stuff might fuck up actually.
23:06:58 <CakeProphet> er nevermind it's good now.
23:07:34 <Lymee> ^style youtube
23:07:34 <fungot> Selected style: youtube (Some YouTube comments)
23:07:34 <Phantom_Hoover> fizzie, wait did you see that Scottish people in a lift video it would be a valuable addition to your research.
23:07:44 <Lymee> Add a style to fungot which uses chain comments.
23:07:50 <Patashu> fungot:
23:07:50 <fungot> Patashu: i think you never intend to try for a child
23:07:53 <Patashu> fungot:
23:07:53 <fungot> Patashu: i've been ' refuted' zero times, and are seemingly brainwashed to vote for obama
23:07:57 <Patashu> LOL
23:08:05 <Patashu> youtube politics
23:08:25 <Lymee> fungot, make sense
23:08:25 <fungot> Lymee: i think timothy olyphant would have found out they're wrong. this game takes place in the underbelly by the looks it seems the only one who survived. your right
23:08:40 <fizzie> Phantom_Hoover: That description rings a bell, but I can't really recall.
23:08:42 <Lymee> fungot, What no, I don't think you make sense. Stupid bot.
23:08:42 <fungot> Lymee: avril is so terrible!
23:08:47 <Lymee> fungot, druggie.
23:08:47 <fungot> Lymee: huh... and who said you had to go around with shite graphics!... this video is
23:08:57 <Lymee> fungot is crazy.
23:08:58 <fungot> Lymee: 2 words, small testicles. max payne trailer article, read description :) ( maybe i suck at english as u suck
23:09:31 <CakeProphet> fungot: no wai u r mad dumb
23:09:31 <fungot> CakeProphet: mona sax
23:10:28 <CakeProphet> fungot: moan on sacks huh huh huh huh
23:10:28 <fungot> CakeProphet: careerbuilder wins in my holidays but i can say
23:11:02 <CakeProphet> ^style
23:11:03 <fungot> Available: agora alice c64 ct darwin discworld europarl ff7 fisher homestuck ic irc jargon lovecraft nethack pa sms speeches ss wp youtube*
23:11:06 <CakeProphet> ^style wp
23:11:06 <fungot> Selected style: wp (1/256th of all Wikipedia "Talk:" namespace pages)
23:11:14 <CakeProphet> fungot: npov
23:11:16 <fungot> CakeProphet: conservative liberalism is defined as a philosophyphilosophical view. sometimes documented examples are in error or simply lacking broader knowledge. i good example of a language or dialect. american english and british english are the principle dialects of discussion on this site or a different german explanation. fnord 15:06, 2005 mar 20 ( utc)
23:11:41 <CakeProphet> fungot: npov
23:11:42 <fungot> CakeProphet: fnord coverage: jesus and fnord word and the witness" ( 2004)
23:11:54 <CakeProphet> fungot: npov
23:11:59 <CakeProphet> :(
23:12:26 <Lymee> fungot, npov
23:12:26 <fungot> Lymee: to insert a section with a solid paragraph dealing with attacks on israelis, and at least a b article. user:yamarayamara 13:34, 13 may 2007 ( utc)
23:12:31 <Lymee> fungot, [citation needed]
23:12:32 <fungot> Lymee: as it is adjacent to cadboro bay as well even though it is of course possibly to have dissenting views, which don't seem particularly theological to me.
23:12:36 <Lymee> fungot, [citation needed]
23:12:37 <fungot> Lymee: i've put in the nazism article. yet, when i pass the places... problem, about the copyrights: i have put this note here rather than elsewhere: answers.com
23:12:50 <Lymee> ^style youtube
23:12:51 <fungot> Selected style: youtube (Some YouTube comments)
23:12:55 <Lymee> fungot, justin bieber
23:12:55 <fungot> Lymee: read the comment. " shift at the end...nice!! unfortunately, a flyby at an airshow in 1988. i know
23:12:58 <Lymee> fungot, justin bieber
23:13:02 <Lymee> fungot, justin bieber
23:13:04 <Lymee> fungot, justin bieber
23:13:07 <Lymee> :<
23:13:12 <CakeProphet> fungot: werswer
23:13:12 <fungot> CakeProphet: great job nalts, wow the haters are trolling today. loonywing, he can sing in a short. if that's so, treldman. thanks for speaking for me
23:13:25 <CakeProphet> ..
23:13:35 <CakeProphet> haters be trollin'
23:13:52 <Lymee> fungot, I am NOT a troll!
23:13:52 <fungot> Lymee: the last minute. he was gonna win, nalty? or the pilot and this shit up fast, and see how you are taking it out on little kids on youtube
23:14:02 <Lymee> fungot, no u r the little kid
23:14:02 <fungot> Lymee: the lmao commercial was halarious video on worlds most amasing videos and depositions given. type " airbus sucks" comments included... budweiser ones with the crystal ball on his face! haha
23:14:23 <CakeProphet> fungot: werswer
23:14:23 <fungot> CakeProphet: captain asseline was sentenced to 6 months to get over themselves and do some break, but it is
23:14:34 <CakeProphet> ...
23:14:56 <Lymee> fungot, Obama
23:14:57 <fungot> Lymee: your mind about that video is shit.... w.t.f lol
23:15:14 <Lymee> fungot, bush
23:15:14 <fungot> Lymee: i pissed off. this is not a320, a poorly researched sensationalist us tv-show has caused a crash at the very first good video-game movie. mark walberg is going to land an aircraft crashes.
23:15:25 -!- nys has quit (Quit: movie).
23:22:12 -!- FireFly has quit (Quit: FireFly).
23:50:46 <kmc> @tell fungot hi there
23:50:47 <lambdabot> Consider it noted.
23:50:47 <fungot> kmc: please no tanks or helicopters... no matter what she'll do mhoooooa show it off, it wasn't. holy cow, i never needed lol.
23:50:47 <lambdabot> fungot: You have 1 new message. '/msg lambdabot @messages' to read it.
23:53:01 -!- nooga has quit (Ping timeout: 240 seconds).
23:56:41 <Gregor> lol
23:56:52 <atehwa> oklopol: feel free to add your comments there... or does it requ
23:57:01 <atehwa> ire some kind of registration for that, too?
23:57:31 <CakeProphet> any have any spare money they don't need anymore?
23:57:34 <CakeProphet> I can take it off your hands.
2011-09-04
00:00:04 * CakeProphet starts a trend of IRC begging.
00:03:36 * Phantom_Hoover → sleep
00:03:47 -!- Phantom_Hoover has quit (Quit: Leaving).
00:05:07 <Sgeo> CakeProphet, there's a bitcoin faucet thing
00:05:31 <Sgeo> Which is closed for maintainance, but whatever
00:13:56 -!- TeruFSX2 has joined.
00:15:29 <Lymee> CakeProphet, fungot talk about CakeProphet
00:15:29 <fungot> Lymee: thank you avril!
00:15:34 <olsner> why doesn't fungot react to lambdabot talking to it?
00:15:34 <fungot> olsner: i just had to change. it's no longer keep up; it's so sad. just a fly by wire" does not mean radio or remote control what is it
00:15:38 <Lymee> s/CakeProphet,//
00:15:51 <Lymee> > text "fungot, hi"
00:15:51 <fungot> Lymee: hm i might think about it. the same name? oo this was a big rubber dick. break it off
00:15:51 <lambdabot> fungot, hi
00:16:00 <Lymee> `echo fungot, hi
00:16:01 <fungot> Lymee: that was epic! even search it on that one..i can't get over it no one dyed. the fly-by-wire throttles did not see that coming
00:16:05 <HackEgo> fungot, hi
00:16:10 <Lymee> Ignore methinks.
00:16:26 <Lymee> > text $ reverse "ih, tognuf"
00:16:27 <lambdabot> fungot ,hi
00:16:29 <monqy> 15:12:23 < fizzie> ^ignore ^(EgoBot|HackEgo|toBogE|Sparkbot|optbot|lambdabot)!
00:20:28 <oerjan> what's the ! for
00:20:40 <oerjan> oh right
00:24:55 <zzo38> ^ign
00:25:11 -!- zzo38 has left.
00:27:44 <kmc> fungot, tanks *or* helicopters?
00:27:45 <fungot> kmc: oznaczono jako spam dont read this! and yes people from the graphics mean my computer cant support it now they get arranged so that airbus is a big fan of avril....but this song
00:28:14 -!- mauke has left.
00:40:10 <CakeProphet> Wow I never thought I'd ever have to worry about 4 GBs of memory being too little.
00:40:28 <CakeProphet> but apparently chrome is really bad at freeing up memory.
00:41:22 <copumpkin> you're lucky you don't use agda
00:43:00 <oerjan> agda: the driving force of morse's law
00:43:22 <oerjan> what did i just spell
00:43:24 <CakeProphet> why is everything taking forever help
00:43:27 <oerjan> *moore's
00:43:49 <CakeProphet> oh bad network signal
00:44:27 <CakeProphet> literally I'm waiting like 30 seconds for programs to start.
00:44:33 <CakeProphet> low ram, low cpu usage
00:44:58 <CakeProphet> I am listening to music. Maybe that's it? lol
00:48:58 -!- zzo38 has joined.
00:52:31 -!- augur has quit (Remote host closed the connection).
00:57:29 <oerjan> ^ul (:(1)*(:(2)*(:(3)*(:(4)*(:(5)*(:(6)*(:(7)*(:(8)*(:(9)*(!~:^)))))))))):(~^~(~a~*~a~*)~a*^:(0)*)~a*~:(a(:^)*())~*a(:^)*~()~(0)(~:S~(~!^)~a*^:^):^
00:57:29 <fungot> 0 ...bad insn!
00:59:18 <oerjan> ^ul (:(1)*(:(2)*(:(3)*(:(4)*(:(5)*(:(6)*(:(7)*(:(8)*(:(9)*(!~:^)))))))))):(~^~(~a~*~a~*)~a*^:(0)*)~a*~:(a(:^)*())~*a(:^)*~()~(0)((:(, )*S!^)~a*^:^):^
00:59:18 <fungot> 0, :(2)*(:(3)*(:(4)*(:(5)*(:(6)*(:(7)*(:(8)*(:(9)*(!~:^)))))))), ...bad insn!
00:59:26 <oerjan> O_o
01:00:10 <CakeProphet> new opeth album = leaked.
01:00:13 <CakeProphet> this is very exciting.
01:00:26 <CakeProphet> you know, for people who like progressive death metal.
01:01:39 <oerjan> ^ul (:(1)*(:(2)*(:(3)*(:(4)*(:(5)*(:(6)*(:(7)*(:(8)*(:(9)*(!~:^)))))))))):(~^~(~a~*~a~*)~a*^:(0)*)~a*~:(a(:^)*())~*a(:^)*~()~(0)(((, )*S^~)~a*^:^):^
01:01:39 <fungot> 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83 ...too much output!
01:22:09 <CakeProphet> egads!
01:24:15 <oerjan> CakeProphet: hm?
01:25:57 <CakeProphet> sdage
01:26:10 <CakeProphet> o|-|o
01:26:48 <oerjan> \m/ \m/
01:26:55 <oerjan> wat
01:26:59 <oerjan> \m/ \m/
01:26:59 <myndzi> `\o/´
01:27:00 <myndzi> |
01:27:00 <myndzi> /´\
01:27:00 <myndzi> (_| |_)
01:36:14 <zzo38> ! ! ! ! ! ???
01:40:17 <CakeProphet> /o/
01:40:18 <myndzi> ¦
01:40:18 <myndzi> ´¸¨
01:40:28 <CakeProphet> |o|
01:40:29 <myndzi> |
01:40:29 <myndzi> /<
01:40:33 <CakeProphet> \o\
01:40:33 <myndzi> |
01:40:34 <myndzi> /|
01:40:39 <oerjan> !addinterp sh cat
01:40:39 <EgoBot> ​There is already an interpreter for sh!
01:40:43 <oerjan> bah
01:40:45 <CakeProphet> \o/
01:40:45 <myndzi> |
01:40:45 <myndzi> |\
01:41:53 <oerjan> \o/ \o_ _o_ _o/ \m/ \m/ \o_ _o_ _o/ \o/
01:41:53 <myndzi> | | | | `\o/´ | | | |
01:41:54 <myndzi> /| /`\ /< /< | |\ |\ /`\ |\
01:41:54 <myndzi> (_|¯'\
01:41:54 <myndzi> |_)
01:42:08 <CakeProphet> ha
01:44:17 <CakeProphet> I haven't really thought about it much before, but it's interesting how every bot in this channel is examining every bit of input at least to some extent.
01:44:29 <CakeProphet> of everything I say.
01:44:36 <oerjan> ooh
01:44:54 <CakeProphet> I mean, it's not really anything amazing.
01:45:03 <CakeProphet> BUT IT'S LIKE I CONTROL THE CODE!!!
01:45:17 <CakeProphet> \m
01:45:20 <CakeProphet> muhahahahaha
01:45:59 <CakeProphet> o_
01:46:07 <CakeProphet> and now I torture them.
01:47:17 <CakeProphet> also why were his feet different when you did \m/ \m/ that time
01:47:18 <myndzi> `\o/´
01:47:18 <myndzi> |
01:47:18 <myndzi> /`\
01:47:18 <myndzi> (_| |_)
01:48:45 <CakeProphet> \o/ \o_ _o_ _o/ \m/ \m/ \m/ \m/ \o_ _o_ _o/ \o/
01:48:45 <myndzi> | | | | `\o/´ `\o/´ | | | |
01:48:45 <myndzi> /| /´\ /< /'\ | | /| /`\ >\ /`\
01:48:45 <myndzi> /'¯|_) /´\
01:48:45 <myndzi> (_| (_| |_)
01:49:58 <CakeProphet> \o/ \o_ _o_ _o/ \m/ \m/ \m/ \m/ \m/ \m/ \o_ _o_ _o/ \o/
01:49:59 <myndzi> | | ¦ | `\o/´ `\o/´ `\o/´ | | | |
01:49:59 <myndzi> >\ |\ ´¸¨ /| | | | /< >\ |\ >\
01:50:00 <myndzi> (_|¯`¯|_) /'\ (_|¯´\
01:50:00 <myndzi> (_| |_) |_)
01:50:02 <CakeProphet> ....NOOOO
01:50:37 <CakeProphet> \o/ \o_ _o_ _o/ \m/ \m/ \m/ \m/ \m/ \m/ \o_ _o_ _o/ \o/
01:50:38 <myndzi> | | | | | | | |
01:50:38 <myndzi> /`\ |\ |\ >\ /'\ |\ /`\ /|
01:50:41 <CakeProphet> oh
01:50:48 <CakeProphet> a shame
01:51:38 <CakeProphet> I wonder how it decides.
02:00:30 -!- GreaseMonkey has joined.
02:02:16 <Gregor> elliott: omg I'm actually working on Fythe ... AND Plof!
02:22:58 <Lymee> \o\ /o/
02:23:03 <Lymee> \o\ /o/
02:23:04 <myndzi> ¦ |
02:23:04 <myndzi> ´¸¨ |\
02:23:27 <Lymee> \o\ /o/ \o\ /o/ \o\ /o/ \o\ /o/ \o\ /o/ \o\ /o/ \o\ /o/
02:23:35 <Lymee> :(
02:23:59 <oerjan> a little too wide i suspect
02:33:56 <Patashu> man, that is awesome
02:37:50 <CakeProphet> what the hell my file system became read-only for some reason.
02:40:08 <oerjan> CakeProphet: YOU DO NOT HAVE CLEARANCE TO READ THESE FILES, CITIZEN
02:40:44 <oerjan> > cycle "\o\ /o/ "
02:40:44 <myndzi> ¦ |
02:40:45 <myndzi> ´¸¨ |\
02:40:45 <lambdabot> <no location info>:
02:40:45 <lambdabot> lexical error in string/character literal at chara...
02:40:50 <oerjan> urk
02:40:58 <oerjan> > cycle "\\o\\ /o/ "
02:40:59 <myndzi> | |
02:40:59 <myndzi> /`\ /<
02:40:59 <lambdabot> "\\o\\ /o/ \\o\\ /o/ \\o\\ /o/ \\o\\ /o/ \\o\\ /o/ \\o\\ /o/ \\o\\ /o/ \\o\...
02:41:07 <oerjan> O_o
02:41:13 <oerjan> > text $ cycle "\\o\\ /o/ "
02:41:13 <myndzi> | |
02:41:14 <myndzi> /< >\
02:41:28 <lambdabot> thread killed
02:41:32 <oerjan> dammit
02:41:40 <oerjan> > var $ cycle "\\o\\ /o/ "
02:41:40 <myndzi> | |
02:41:41 <myndzi> /| /<
02:42:10 <oerjan> > "hm"
02:42:19 <oerjan> ic
02:43:23 <Sgeo> :t text
02:43:31 <oerjan> ^ul (\o)(\ /o)(/)**(~:S~:^):^
02:43:31 <fungot> \o\ /o/\o\ /o/\o\ /o/\o\ /o/\o\ /o/\o\ /o/\o\ /o/\o\ /o/\o\ /o/\o\ /o/\o\ /o/\o\ /o/\o\ /o/\o\ /o/\o\ /o/\o\ /o/\o\ /o/\o\ /o/\o\ /o/\o\ /o/\o\ /o/\o\ /o/\o\ /o/\o\ /o/\o\ /o/\o\ /o/\o\ /o/\o\ /o/\o\ /o/\o\ /o/\o\ /o/\o\ /o/\o\ /o/\o\ /o/\o\ /o/\o\ /o/\o\ /o/\o\ /o/\o\ /o/\o\ /o/\o\ /o/\o\ /o/\o\ /o/\o\ /o/\o\ /o/\o\ /o/\o ...too much output!
02:43:48 <oerjan> Sgeo: it seems to have died
02:45:08 <oerjan> ^ul ( )S( \o)(\ /o)(/)**:*:*:*S
02:45:08 <fungot> \o\ /o/ \o\ /o/ \o\ /o/ \o\ /o/ \o\ /o/ \o\ /o/ \o\ /o/ \o\ /o/
02:45:40 <oerjan> ^ul ( )S( \o)(\ /o)(/)******::::::*S
02:45:40 <fungot> ...out of stack!
02:45:44 <oerjan> ^ul ( )S( \o)(\ /o)(/)******::::::S
02:45:44 <fungot> ...out of stack!
02:45:50 <oerjan> urk
02:45:55 <oerjan> ^ul ( )S( \o)(\ /o)(/)********::::::S
02:45:56 <fungot> ...out of stack!
02:45:58 -!- lambdabot has quit (Ping timeout: 245 seconds).
02:46:14 <oerjan> ^ul ( )S( \o)(\ /o)(/)**::::::******S
02:46:14 <fungot> \o\ /o/ \o\ /o/ \o\ /o/ \o\ /o/ \o\ /o/ \o\ /o/ \o\ /o/
02:46:14 <myndzi> | | | | | | | | | | | | | |
02:46:15 <myndzi> /< >\ /< >\ |\ >\ /'\ |\ |\ /`\ /< >\ /| /<
02:46:24 -!- CakeProphet has quit (Quit: Lost terminal).
02:46:59 <oerjan> ^def celebrate ul ( )S( \o)(\ /o)(/)**::::::******S
02:46:59 <fungot> Defined.
02:47:03 <oerjan> ^celebrate
02:47:03 <fungot> \o\ /o/ \o\ /o/ \o\ /o/ \o\ /o/ \o\ /o/ \o\ /o/ \o\ /o/
02:47:04 <myndzi> | | | | | | | | | | | | | |
02:47:04 <myndzi> >\ >\ /< /'\ |\ |\ /< /< /`\ /`\ /| /| /< |\
02:53:14 -!- CakeProphet has joined.
02:53:32 -!- CakeProphet has quit (Client Quit).
02:53:56 -!- CakeProphet has joined.
02:54:03 -!- CakeProphet has quit (Changing host).
02:54:03 -!- CakeProphet has joined.
02:54:30 <oerjan> <CakeProphet> I wonder how it decides. <-- the \m/ \m/ one needs extra space around it, i believe
02:54:30 <myndzi> `\o/´
02:54:31 <myndzi> |
02:54:31 <myndzi> /`\
02:54:31 <myndzi> (_| |_)
02:54:46 <CakeProphet> oerjan: I mean how it decides which stick figure to use
02:54:47 <CakeProphet> it changes.
02:55:03 <oerjan> well yeah that's obviously randomized
02:56:21 <CakeProphet> oerjan: obviously
02:56:25 <CakeProphet> IT COULD BE SOMETHING FANCY YOU NEVER KNOW
02:56:41 <CakeProphet> \m/ \m/
02:56:41 <myndzi> `\o/´
02:56:42 <myndzi> |
02:56:42 <myndzi> /´¯|_)
02:56:42 <myndzi> (_|
02:56:43 <CakeProphet> \m/ \m/
02:56:53 <CakeProphet> ...oh, spam proof I see.
02:57:03 <oerjan> also, slightly buggy...
02:57:14 <CakeProphet> buggy? never.
02:57:16 <CakeProphet> no such thing as bugs.
02:57:20 -!- MDude has changed nick to MSleep.
02:57:42 <CakeProphet> so yeah my parser is awesome.
02:57:47 <oerjan> ah yes i recall it from before, with just one space before the first \ or something like that
02:57:56 <CakeProphet> it ignores all whitespace, has no semicolons, and can still disambiguate lines of code.
02:59:13 <zzo38> CakeProphet: What is it parsing? Some programming language can still do that, some others do not do it.
03:01:31 <Sgeo> All TC programming languages, barring bizzarities, should be able to parse
03:01:33 <Sgeo> Stuff
03:02:07 <CakeProphet> nothing too fancy. commands of the form c(a,b,c...), binary operators, unary !, string literals, integer literals, and variables,
03:02:36 <CakeProphet> control flow is just performed by commands because they only evaluate arguments as needed.
03:03:45 <zzo38> Although, I wrote Constantinople parser, it can also tell the separation of the commands even if you put all words next to each other with no spaces and no line breaks, at least I expect it to do so. Although it is much simpler parsing than things you describe.
03:04:35 <CakeProphet> I haven't really fed it a case I expect to fail, but all of the correct cases separate commands regardless of where whitespace is placed.
03:05:16 <oerjan> well if every command has to end with ) that shouldn't be so hard...
03:05:57 <CakeProphet> yeah basicall every expression ends with or has leaves that terminate. well, I guess all parsers have that. What property allows you to disambiguate lines?
03:06:24 <CakeProphet> I'll try some tricky cases and see if it still parses. I could be wrong.
03:07:08 <oerjan> if A and AB both are legal commands then B cannot start a command, would seem a reasonable restriction.
03:07:43 <CakeProphet> yeah 2 == 2 2 == 2 parses as two lines
03:08:07 <CakeProphet> the grammar can't have postfix operators or it would become ambiguous.
03:08:11 <monqy> what is unary ! or is that a trade secret
03:08:12 <oerjan> oh. but that doesn't ignore whitespace if 22 is a legal number...
03:08:20 <CakeProphet> monqy: guess
03:08:34 <oerjan> or, at least if 222 is
03:08:43 <monqy> CakeProphet: I have no idea
03:08:51 <oerjan> 2==222==2 could parse two ways
03:08:58 <CakeProphet> yeah 2 == 22 == 2 would parse as one line currently
03:09:15 <CakeProphet> whitespace is significant to delineate integers and names
03:09:27 <CakeProphet> monqy: have you programmed in anything that was derived from C?
03:09:27 <oerjan> ok not as weird then
03:10:04 -!- augur has joined.
03:10:21 <CakeProphet> oerjan: ah the unary operator might prove ambiguous
03:10:23 <monqy> CakeProphet: ! doesn't form "command"s in c; it forms expressions???
03:10:25 <oerjan> unary !, to mark an expression as _particularly_ important, clearly
03:11:06 <CakeProphet> monqy: commands are expressions. I just say commands because there's a finite number of them and currently cannot be defined.
03:11:14 <CakeProphet> also operators are expressions, clearly.
03:11:41 <monqy> first class citizens?
03:11:52 <CakeProphet> no.
03:12:00 <CakeProphet> I am not writing Haskell.
03:12:41 <CakeProphet> unary ! does not seem to create any ambiguity.
03:12:43 <monqy> then what do you mean by operators are expressions? application of operators to the correct number of operands is an expression?
03:12:46 <monqy> or something like that?
03:12:55 <CakeProphet> monqy: yes.
03:13:17 <CakeProphet> I speak kind of loosely.
03:13:45 <monqy> perl dork
03:14:49 <CakeProphet> though they could be sort of first-class citizens due to the lazy evaluation.
03:15:00 <CakeProphet> I could easily write a map command... if I had a list data type.
03:15:49 <CakeProphet> essentially the built-in commands are like macros in that they choose how and when to evaluate their operands.
03:16:20 <CakeProphet> more like Perl operators (map,grep,split,etc) than lisp macros I guess.
03:16:46 <zzo38> Yes, numbers like that can cause problem of parsing with ignoring spaces.
03:19:18 <CakeProphet> yes integer and name literals can't contain spaces, this is pretty standard I think "whitespace insignificant" languages.
03:19:33 <CakeProphet> s/I think/$& in/
03:19:52 <monqy> CakeProphet: so how do you deal with side effects and friends
03:20:38 <CakeProphet> by performing side effects.
03:20:42 <CakeProphet> I am not writing Haskell.
03:20:53 <oerjan> *gasp*
03:21:32 <monqy> CakeProphet: but when? don't you have unpredictable evaluation order and all
03:21:48 <CakeProphet> not really unpredictable just specific to each command.
03:21:53 <CakeProphet> most commands evaluate all of their arguments.
03:22:04 <monqy> CakeProphet: and what about using the commands that aren't supposed to be used as expressions as expressions
03:22:09 <monqy> CakeProphet: what happens then
03:22:49 <CakeProphet> everything returns something it's just not always useful.
03:23:19 <monqy> do any of them do weird things that would mess things up
03:23:23 <CakeProphet> no.
03:23:32 <CakeProphet> everything is pretty consistent and easily expected.
03:23:37 <CakeProphet> it's a very simple language.
03:23:52 <oerjan> it sounds just like call-by-name
03:24:09 <monqy> oerjan: evaluation order depends on the function, I hear
03:24:17 <oerjan> yes, which is call-by-name.
03:24:25 <CakeProphet> typical case is left-to-right
03:24:50 <monqy> what's "left to right"
03:24:59 <CakeProphet> .......
03:25:01 <CakeProphet> seriously?
03:25:01 <monqy> there are lots of things you can do that go left to right
03:25:12 <CakeProphet> you have a function f(a,b,c)
03:25:23 <CakeProphet> left-to-right means that before f is evaluated a is evaluated, followed by b, followed by c
03:25:29 <CakeProphet> and then the result of f(a,b,c) is returned
03:26:11 <monqy> do you know what I meant by evaluation order
03:26:18 <CakeProphet> yes.
03:26:29 <monqy> what did I mean by evaluation order
03:27:09 <CakeProphet> uh, the order in which expressions are evaluated?
03:28:05 <monqy> (i meant that thing which I guess is actually more commonly called evaluation strategy)
03:28:12 <CakeProphet> currently there is only one scope, so basically dynamic and lexical scoping are equivalent.
03:28:57 <CakeProphet> the evaluation strategy is based on the function, but usually is call-by-value but can be call-by-name
03:29:02 <CakeProphet> for example with variable assignment
03:29:55 <CakeProphet> so yeah, call by name
03:30:09 <CakeProphet> sort of.
03:30:30 <CakeProphet> I get the expression text, and then I choose when to evaluate them. So it's really call by value
03:30:42 <CakeProphet> there is no textual substition going on because all of the commands are written in the implementation language.
03:30:45 <CakeProphet> currently.
03:31:15 <CakeProphet> call by need.
03:31:18 <CakeProphet> is the term.
03:32:05 <zzo38> Maybe one way to make restrictive classes in Haskell could be if you added a universal class that all types belong to, and then be able to generalize existing class with a command such as: class RestrictMonad (UniversalClass :: [*]) <- Monad;
03:32:27 <CakeProphet> that sounds so awesome.
03:32:33 <CakeProphet> >_>
03:32:40 <CakeProphet> it'll be like python were I have to write
03:32:45 <CakeProphet> class MyClass(object):
03:32:47 <CakeProphet> except wordier.
03:32:50 <CakeProphet> *where
03:35:01 <CakeProphet> I guess I'll want to do continuations if/when I get around to user-defined functions.
03:35:06 <CakeProphet> and lexical scoping.
03:42:36 <CakeProphet> but user-defined commands would not be call-by-need
03:45:37 <zid> all my functions are call-by-nerd
03:49:54 <monqy> ok
04:30:51 <Patashu> call-by-middle-name
04:30:55 <Patashu> that's when you know you're serious
04:35:16 -!- Nisstyre has joined.
04:36:04 -!- tiffany has joined.
04:36:15 <tiffany> :o
04:36:46 <CakeProphet> hey.
04:36:57 <tiffany> Hai
04:37:57 <CakeProphet> Looks like you're new here, perhaps
04:38:21 <tiffany> Mhm~
04:46:57 -!- augur has quit (Remote host closed the connection).
04:47:11 <monqy> hi
04:48:17 <oklopol> hi bye
04:48:20 <monqy> bye
04:51:19 -!- lambdabot has joined.
04:53:36 <CakeProphet> why is xpath so difficult to get right
04:57:19 <zid> it is?
05:00:40 -!- Gregor has quit (Excess Flood).
05:00:51 -!- Gregor has joined.
05:03:50 <CakeProphet> yes...
05:04:02 <CakeProphet> I am trying to search all of Wikipedia's text for the word was
05:04:04 <CakeProphet> but apparently
05:04:21 <CakeProphet> *[text()[contains(., "was")]] is not how you do that
05:05:08 <zid> that doesn't look like xpath to me
05:05:14 <CakeProphet> ???
05:05:14 <zid> maybe I don't know much xpath
05:05:21 <CakeProphet> it is definitely xpath
05:05:34 <Patashu> wikipedia uses xpath?
05:05:39 <CakeProphet> ....no
05:05:42 <zid> can't you just grab all innerHTML and strstr it for was? :)
05:06:02 <CakeProphet> I'd rather not resort to javascript.
05:06:07 <monqy> why do you even need was
05:06:14 <CakeProphet> it's a test case.
05:06:24 <zid> strstr is a C function
05:06:41 <CakeProphet> oh, well, hmmm...
05:06:56 <CakeProphet> no I'm searching specifically for text
05:07:04 <CakeProphet> not any arbitrary was anywhere in the html
05:07:21 <zid> innerHTML is plaintext if you do it recursively ;)
05:07:36 <CakeProphet> wat
05:07:43 <zid> <b>hello</b> b.innerHTML = "hello";
05:07:59 <monqy> whats b
05:08:03 <CakeProphet> bold
05:08:06 <monqy> no I mean
05:08:08 <monqy> the other b
05:08:10 <CakeProphet> that is really terrible when I could just use xpath to do that.
05:08:32 <zid> you can use XPath to do the 'give me an array of all bits of text' though
05:09:37 -!- oerjan has quit (Quit: Lost terminal).
05:09:56 <CakeProphet> oh, yes I can.
05:10:05 <CakeProphet> but really wht is contains not working...
05:10:32 <CakeProphet> maybe this isn't a full implementation of xpath or something
05:11:07 <monqy> maybe you messed it up
05:11:19 <CakeProphet> nope.
05:11:19 <monqy> try a better implementation and compare results?
05:11:56 -!- oerjan has joined.
05:12:29 <CakeProphet> nope doesn't work in this one either\
05:12:56 <monqy> maybe you messed it up
05:13:05 <Patashu> http://www.w3schools.com/xpath/xpath_examples.asp
05:13:09 <Patashu> I'm trying to use this to test
05:13:15 <Patashu> But I can't find any examples of a string based test
05:13:23 <Patashu> Only array selection and numeric conditionals
05:13:34 <CakeProphet> http://www.whitebeam.org/library/guide/TechNotes/xpathtestbed.rhtm
05:13:49 <CakeProphet> I think something is just broken because according to the semantics it should work.
05:13:52 <zid> man, ais shoved my bot down the hill to the bottom
05:14:49 <Patashu> are you sure it's contains and not fn:contains or something?
05:14:49 <CakeProphet> oh wait maybe the arguments need to be flipped
05:15:21 <CakeProphet> no it's just straight up contains
05:15:28 <CakeProphet> fn:contains is... XML right?
05:15:30 <CakeProphet> this is not xml.
05:16:26 <CakeProphet> http://www.w3.org/TR/xpath/#section-String-Functions
05:16:40 <Patashu> ah, you don't need the fn: apparently
05:16:48 <Patashu> this works ok: /bookstore/book[not(price>35)]/price
05:16:58 <CakeProphet> .......cool? :P
05:17:07 <Patashu> I'm just testing things out
05:17:15 <Patashu> since I don't know much about xpath
05:17:41 <CakeProphet> in any case
05:17:56 <CakeProphet> I can just do *[text()] to grab all text nodes, join them together, and search.
05:18:09 <CakeProphet> outside xpath
05:20:31 <Patashu> path="/bookstore/book[contains(title, 'E')]/title";
05:20:33 <Patashu> Everyday Italian
05:20:59 <CakeProphet> try it with text() though
05:22:15 <Patashu> hmmm
05:23:08 <Patashu> do you know of a test bed with raw text nodes in the xml?
05:23:13 <Patashu> both x3c's and whitebeam's don't seem to
05:23:16 <CakeProphet> yes I linked one.
05:25:12 <Patashu> Maybe I don't understand what a text node is
05:25:14 <Patashu> I'm going to read
05:26:00 <CakeProphet> <a href="http://www.google.com/">WOW GOOGLE</a>
05:26:29 <CakeProphet> WOW GOOGLE is the text node
05:27:55 <Patashu> Oh, okay
05:28:21 <Patashu> /bookstore/book[contains(title, 'E')]/title/text() and then document.write(nodes[i].nodeValue); seems to work fine
05:28:38 <CakeProphet> right that is basically what I am going to do.
05:28:48 <CakeProphet> but I don't understand why contains doesn't work with text()
05:28:56 <Patashu> I don't think that's how you're meant to use it
05:29:00 <Patashu> because it's grabbing text() anyway
05:29:03 <Patashu> you're probably being redundant
05:29:06 <CakeProphet> wat
05:29:20 <Patashu> if you do contains(node, string) then it grabs node's text() to do the test
05:29:21 <Patashu> is what I mean
05:29:56 <CakeProphet> oh hey it does
05:30:02 <Patashu> *[contains(., 'was')]/text() might work?
05:30:07 <Patashu> if I understand xpath right
05:30:16 <CakeProphet> yes that's what I want
05:30:21 <Patashu> awesome :D
05:30:41 <CakeProphet> minus the /text()
05:30:45 <CakeProphet> I don't actually need the text
05:31:17 <CakeProphet> TKS LA
05:31:37 <Patashu> http://www.tks.la/
05:31:50 <CakeProphet> ....
05:33:49 <monqy> tks la
05:35:29 <CakeProphet> interesting, that is a funny site.
05:35:50 <Patashu> turnkey inside
05:37:04 <CakeProphet> *[contains(., 'asdasgagasf') or contains(. , 'was')]
05:37:05 <CakeProphet> weeeeee
05:37:27 <CakeProphet> I actually like xpath. Mainly because it allows me to avoid javascript for these kinds of things.
05:38:19 <oerjan> wtf .la is used for los angeles
05:38:43 <CakeProphet> US = first-class citizen of the internet
05:38:47 <CakeProphet> back off.
05:38:56 <monqy> ca is totally for california
05:38:58 <monqy> canadians go home
05:39:09 <oerjan> CakeProphet: it theoretically belongs to laos
05:39:28 <CakeProphet> .ca.us I believe would actually be california
05:39:35 <CakeProphet> but that's okay because .com BELONGS TO AMERICA
05:39:49 <CakeProphet> yeaaaaaah
05:40:23 * tiffany has a .info
05:40:31 <monqy> (thumbs up)
05:40:34 <tiffany> Because $3/year
05:40:44 * CakeProphet needs a website at some point
05:40:49 <CakeProphet> when I actually have things to put on it
05:41:11 <tiffany> I have nothing to put on mime so i host things
05:41:36 <CakeProphet> it's important for freelancers because it gives you a professional image. well, if you have a professional looking website.
05:42:11 <tiffany> I made my site specifically to look 90s-ish
05:42:25 <CakeProphet> did you include obnoxious music that you can't turn off?
05:42:41 <tiffany> I thought that was 2003 myspace
05:42:51 <CakeProphet> no that was going on for a long time.
05:43:08 <monqy> <marquee><blink><b><i><u><s>
05:43:15 <tiffany> Well... before people cared about divs and css and stuff
05:43:15 <Patashu> <pre>
05:43:38 <tiffany> I want my <pre width="80"> back
05:47:17 <CakeProphet> !wacro
05:47:20 <EgoBot> PBEFTPMH
05:47:25 <CakeProphet> monqy: nope
05:47:28 <CakeProphet> !wacro 3 5
05:47:29 <EgoBot> LCAM
05:47:31 <CakeProphet> !wacro 3 5
05:47:32 <EgoBot> MFMNV
05:47:44 <monqy> CakeProphet: pbeftpmh, my reaction to seeing PBEFTPMH
05:47:47 <CakeProphet> bleh. I really need to get some free time to rewrite this.
05:47:47 <oerjan> wacky wacky wacros
05:50:31 <Patashu> wacky waving inflatable wacros
05:52:31 <CakeProphet> the w is for weighted... by the way
05:52:39 <CakeProphet> though it does give the program an amusing name. :P
05:53:01 <oerjan> IF YOU SAY SO
05:53:26 <CakeProphet> !show wacro
05:53:26 <EgoBot> perl (sending via DCC)
06:01:17 <CakeProphet> I wish what I were coding right now were in Perl...
06:12:22 -!- GreaseMonkey has quit (Quit: The Other Game).
06:36:55 <CakeProphet> hey so what's the best way to maintain a backup on an external?
06:37:48 <CakeProphet> it would be some good sysadmin practice to figure out how to automate that stuff. Not to mention safe.
06:39:19 <zid> rsync on a cron with en email if it fails? :)
06:39:51 <CakeProphet> ...time to consult man
06:41:16 <CakeProphet> why would I want the email?
06:41:24 <CakeProphet> also this is a laptop so my external is not always going to be present.
06:45:40 <CakeProphet> rsync is a neat little program.
06:47:11 <CakeProphet> is there any way you could get it to run immediately when the external is mounted?
06:47:55 <monqy> educated guess: yes
06:48:44 <monqy> or at least something like that
06:49:28 <CakeProphet> I guess I'll have to look around on the internet.
07:00:03 -!- Sgeo_ has joined.
07:02:43 -!- augur has joined.
07:03:27 -!- Sgeo has quit (Read error: Connection reset by peer).
07:03:28 -!- yorick has quit (Remote host closed the connection).
07:03:37 -!- yorick has joined.
07:10:20 <CakeProphet> okay so the file that I pass to crontab is a crontab table right?
07:15:38 <tiffany> I once used cron to make daily minecraft backups
07:15:55 <tiffany> That is the only thing i ever used it for
07:15:56 <CakeProphet> oh look I can just put my script in /etc/cron.daily
07:16:14 <CakeProphet> actually I could do hourly since I don't know when exactly I'll have my external connected.
07:17:04 <CakeProphet> what? no cron.minutely? :P
07:17:40 <tiffany> cron.attosecondly
07:17:42 <CakeProphet> um, okay so who is the user for a cron script?
07:18:00 <CakeProphet> I was thinking if I use $HOME I could just generically write a backup script instead of explicitly using my home directory
07:19:58 <CakeProphet> eh, whatever.
07:20:14 <tiffany> You could throw a generic backup-first-arg script into /usr/local/bin and then run it from cron
07:20:21 <tiffany> With proper argument
07:21:45 <CakeProphet> eh I can rewrite it if I ever need to.
07:22:40 -!- oerjan has quit (Quit: Good night).
07:25:06 <CakeProphet> I wonder if it would be feasible to backup all of /
07:25:24 <CakeProphet> ...excluding the backup drive itself.
07:25:33 -!- aloril has quit (Read error: Operation timed out).
07:26:53 <tiffany> My os is 8gb and i have lots of stuff installed
07:27:03 <tiffany> My entire vps is 2.5
07:28:16 <CakeProphet> help rotating logs in bash help
07:28:33 <monqy> no
07:28:36 * CakeProphet is leveling his sysadmin skill.
07:28:58 <CakeProphet> logrotate. found it
07:29:04 * CakeProphet used this thing called google.
07:29:18 <monqy> wow
07:29:47 * tiffany uses this thing called duckduckgo because google censors results
07:31:10 <CakeProphet> http://www.google.com/#sclient=psy&hl=en&source=hp&q=furry+strapon+girls
07:31:17 <CakeProphet> I'm not sure what you mean by censor
07:31:25 <CakeProphet> (props to Gregor)
07:32:04 <tiffany> They decided to block us-dcma violating sites on all of the googles
07:32:31 <CakeProphet> ew
07:32:35 <CakeProphet> but I like piracy.
07:32:39 <tiffany> Plus google sorts results based on demographics instead of having a disambiguation
07:34:10 <CakeProphet> hits for "furry strapon girls" on duckduckgo: 4
07:34:21 <tiffany> :I
07:34:39 * Lymee hugs tiffany ^^
07:34:49 * tiffany hugs lymee ^_^
07:34:54 <Lymee> Hi.
07:35:03 <tiffany> Hai~
07:35:15 <CakeProphet> \m/ \m/
07:35:16 <myndzi> `\o/´
07:35:16 <myndzi> |
07:35:16 <myndzi> /'\
07:35:16 <myndzi> (_| |_)
07:35:43 <tiffany> This client uses a font without most of those characfers
07:36:01 <tiffany> Cannot change because android irc clients
07:36:16 <tiffany> :d
07:36:31 <monqy> most of what characters
07:36:54 <monqy> perhaps it's variable-width?
07:36:58 <tiffany> myndzis 4 lines of text
07:37:00 <monqy> that could make it look broken
07:37:08 <tiffany> Theyre blocks
07:37:14 <monqy> oh I guess a few of them are a bit weird
07:37:19 <monqy> I didn't notice them before
07:38:12 <monqy> I'd save ´ for later use if it wasn't dumb and too much trouble
07:38:45 <CakeProphet> weeee backup
07:39:34 <monqy> my uses for ´: :´( and ``this´´ looks better than :'( and ``this'' respectively
07:40:27 <CakeProphet> it took a while to parse that sentence..
07:40:36 -!- aloril has joined.
07:40:41 <tiffany> Mm
07:41:01 <CakeProphet> yeah because ``this´´ is so much better than "this"
07:41:37 <monqy> always
07:42:00 -!- nguyenchinh07 has joined.
07:42:47 -!- nguyenchinh07 has left ("Leaving.").
07:43:44 <monqy> good bye
07:50:58 -!- augur has quit (Remote host closed the connection).
07:56:23 -!- aloril has quit (Ping timeout: 245 seconds).
08:01:19 <shachaf> Hmm. \m/ \m/
08:01:20 <myndzi> `\o/´
08:01:20 <myndzi> |
08:01:20 <myndzi> (_|¯'¯|_)
08:01:35 <shachaf> Well, that looks like fun.
08:08:28 -!- aloril has joined.
08:25:46 -!- nooga has joined.
08:32:58 <CakeProphet> wow I just realized
08:33:08 <CakeProphet> I have transitioned to using sh a lot for everything in the past year or so.
08:42:04 <zzo38> I have a program that claims to be a PlayStation emulator for GameBoy, although it just starts loading for a few seconds and then displays an unknown opcode error.
08:43:36 <shachaf> CakeProphet: That happened to me too.
08:43:42 <shachaf> I used to use programs like ls, but nowadays I just echo *.
08:43:51 <shachaf> Eventually I'll need nothing but a shell.
08:44:16 <CakeProphet> why would you echo *? takes longer to type and isn't as well formatted.
08:44:27 <shachaf> Well, I just don't like spawning processes.
08:44:38 <CakeProphet> weirdo
08:44:52 <zzo38> Then use a shell with ls build in
08:45:19 * shachaf was not being completely serious.
08:46:34 <CakeProphet> wow rsync transfers at a fairly slow rate.
08:46:43 <CakeProphet> I assume this is to prevent system slowdown.
08:47:29 <monqy> what sort of hard drive is this hard drive
08:47:49 <CakeProphet> I'm backing up my laptop hard drive to my external. I don't know any of the specs.
08:48:02 <CakeProphet> but I am using my disk usage monitor to judge these things. which is a percentage.
08:48:06 <monqy> if it's solid-state, being slow is to be expected
08:48:24 <CakeProphet> 04:48 < CakeProphet> but I am using my disk usage monitor to judge these things. which is a percentage.
08:48:37 <monqy> what is that
08:48:47 <monqy> oh
08:48:49 <monqy> i see
08:48:53 <CakeProphet> monqy: I have a meter on my top panel that shows percentage of disk usage.
08:48:56 <CakeProphet> as a little graph.
08:49:15 <CakeProphet> it is quite nice I recommend one.
08:49:31 <monqy> peculiar
08:49:45 <CakeProphet> there's a graph for CPU usage, memory, network, and disk.
08:50:52 <CakeProphet> so rsync has a pretty steady read speed of about 30% but then there sudden 70% usage spikes when writing.
08:51:01 <CakeProphet> I have no idea how this percent is calculated.
09:02:29 <zzo38> I have an implementation of a very old display hack. The current state is a 36-bit word. It involves a simple calculation but you get many different patterns depending on the initial state.
09:05:54 <zzo38> Have you ever done any display hacks?
09:06:58 -!- ais523 has joined.
09:08:41 -!- Taneb has joined.
09:09:00 <Taneb> Hello!
09:09:34 <zzo38> Have you done any display hacks?
09:09:53 <Taneb> Me?
09:10:00 <zzo38> Yes, including you.
09:10:55 <Taneb> No, never
09:13:24 <zzo38> I wrote a Huffman making program in Haskell. It is written in a different way than it would be written in other programming language, but it works. Tell me if you have suggestion things I could add.
09:14:52 <zzo38> To me it seems many functions with similar name and similar purpose are in Data.List, Data.Map, Data.Set, etc, they should be made a class.
09:15:37 <monqy> some of them already are
09:15:59 <monqy> foldable, traversable
09:17:03 <zzo38> But some of them are not. Possibly due to some limitations in the class system of Haskell.
09:18:55 <monqy> which would be due to these limitations
09:19:06 <monqy> (and which limitations)
09:19:20 <zzo38> I have read that you can specify constraints on type parameters but they don't work. If they did work, you might be able to use it for this purpose.
09:19:47 <monqy> hm?
09:19:56 <zzo38> monqy: Same kind of limitation preventing you from making the Set monad because not all types are possible.
09:20:01 -!- ais523 has quit (Remote host closed the connection).
09:21:18 -!- ais523 has joined.
09:21:31 <zzo38> Although even if you fixed that, Set itself should be instance of Ord so that the "join" operation works.
09:22:03 <zzo38> And it does not seem entirely clear how to do that.
09:22:40 <zzo38> If you made a SlowSet that is unordered and only requires instance of Eq, then it can be done more easily and works even for unorderable elements, but is slow.
09:22:41 <Taneb> ...What's a Huffman?
09:23:15 <zzo38> Taneb: Huffman coding. Look up "Huffman coding" in Wikipedia, it explain in there.
09:23:26 <Taneb> Okay
09:23:52 <monqy> zzo38: on sets being instances of ord, there's already Ord a => Ord (Set a)
09:24:39 <zzo38> monqy: OK, then that works. However the class system still needs to be fixed to allow it to work.
09:25:03 <Taneb> Interesting...
09:28:37 <zzo38> It is simple: return = singleton; fail = const empty; fmap = map; join = fold union empty;
09:29:30 <zzo38> (Of course "fail" is just a convenience and you do not need it to make a monad; but it is sometimes useful.)
09:29:51 <monqy> fail shouldn't be in Monad; it should be somewhere else
09:30:15 <monqy> I usually want mzero over fail anyway
09:30:34 <Sgeo_> monqy, are there monads for which fail is nonsensical?
09:30:34 <monqy> or mempty. or empty
09:31:05 <Sgeo_> And what would you do in that case?
09:31:08 <Sgeo_> fail = undefined
09:31:08 <Sgeo_> ?
09:31:16 <zzo38> But the default definition of fail is an error anyways, so you do not need to define it.
09:31:21 <zzo38> That is: fail = error
09:31:25 <monqy> fail isn't in the mathematical definition of a monad, for starters :)
09:31:53 <Sgeo_> zzo38, O
09:33:13 <zzo38> Yes, it is true; you do not need fail to make a monad. It is there for use with do-notation, I think. And in a few cases it becomes useful.
09:34:04 <monqy> whenever it's useful for me it tends just to be const mzero
09:35:01 <zzo38> But join should really be part of the Monad class, and it should have default superclass instances too, and the capability to define the members of the superclass in that instance declaration. So that whichever way you choose to define the monad, it will define it in the other way too.
09:35:47 <zzo38> Some monads make more sense to define in terms of return/bind and some make more sense to define in terms of unit/join/fmap instead.
09:37:07 <zzo38> monqy: Yes; probably in Set, mzero would be empty, anyways, I guess. Is it?
09:37:22 <monqy> yes
09:37:30 <zzo38> OK
09:37:44 <monqy> while you're tidying up, please merge MonadPlus and Alternative into Monoid
09:39:14 <monqy> another thing that would be sort of nice: breaking typeclasses up into smaller bits
09:39:43 <monqy> so unit (pure from Appliactive, return from Monad, a bunch of other things everywhere) would get its own typeclass, for example
09:39:47 <CakeProphet> (MonadBind m, MonadReturn m) => ...
09:40:00 <monqy> what
09:40:17 <CakeProphet> nevermind. :P
09:45:15 -!- monqy has quit (Quit: hello).
09:49:44 -!- ralc has quit (Read error: Operation timed out).
09:55:52 <Taneb> I love being asexual and messing with surveys
09:56:50 <ais523> Taneb: do you mean "non-gender-specific" or "no sexual orientation"?
09:57:08 <Taneb> The latter
09:57:39 <Taneb> The former, to my understanding, is bisexual
09:59:07 <zzo38> I don't think it makes much sense to *define* the list monad in terms of (>>=) although it is still a useful operation on the list monad.
09:59:43 <ais523> Taneb: oh, by the former I meant "not having a gender"
09:59:52 <ais523> as in, people you can't use a gendered pronoun on sensibly
10:00:11 <Taneb> I'm definitely male
10:00:14 <ais523> I also wasn't sure if you were being honest; messing with surveys is often done via lying
10:00:33 <Taneb> No, I just say "other"
10:00:46 <Taneb> Nobody expects an other to that question
10:01:16 <zzo38> In fact, when I wrote Huffman encoder, it flips the tree when encoding (the tree at first is used only for decoding), I can use the >>= on list monad to make a short encoding function implementation: encode :: Ord t => Tree t -> [t] -> [Bool]; encode x = (>>= flip (findWithDefault []) (flipTree x));
10:01:59 <Taneb> Of course, I have no idea how to tell my parents I don't read porn
10:02:00 <zzo38> Taneb: Which surveys are they?
10:02:25 <Taneb> Ones made by the British Youth Council
10:03:01 <Taneb> I tried to tell my parents I don't read (or watch) porn, and they just thought I was denying the truth
10:03:47 <Taneb> BYe
10:03:49 <zid> porn is readable!?
10:03:50 -!- Taneb has quit (Quit: Page closed).
10:04:13 <ais523> zid: before video porn was invented, people used to read novels and magazines about it instead
10:04:38 <zid> sounds strange
10:04:42 <zid> when was this, 1400?
10:05:03 <zzo38> I suppose in case of genetics it is not always XX or XY, although these two are the most common
10:05:06 <ais523> haha, not quite that long ago
10:05:09 <ais523> but still quite a while ago
10:05:22 <zid> well in the 1800s they had naughty pictures
10:05:39 <ais523> even before video streaming over the Internet became common, I imagine they used VHS videos or whatever
10:05:42 <ais523> and before that they had flick-books
10:06:01 <zid> you're forgetting about rotoscopes
10:06:08 <zid> there are coin operated ones at the pier
10:06:29 <ais523> I was including rotoscopes in that
10:06:43 -!- ralc has joined.
10:06:53 <zid> if you say so :P
10:07:33 <ais523> just forgot what they were called
10:08:23 <zzo38> I don't know, whether my definition of the "encode" function in that program is sensible to you or if you think it is wrong or worse.
10:09:15 <zid> does it codify? :)
10:09:33 <zzo38> ?
10:09:49 <zid> does the encode button, perform a codifying operation
10:09:59 <zzo38> It does work, if that is what you ask.
10:10:46 <zzo38> There is no encode button; it is just a function in a Haskell program that requires a Huffman tree and list to encode as input, and make output encoded in Huffman codes.
10:11:04 <zid> sounds good to me
10:11:16 <zzo38> Did you read the program?
10:11:25 -!- Phantom_Hoover has joined.
10:11:35 <zid> of course not
10:12:00 <zzo38> What I mean is, if it seems a sensible way to program it.
10:16:20 -!- FireFly has joined.
10:28:42 -!- zzo38 has quit (Remote host closed the connection).
10:34:04 <ais523> hey, git experts here, what's the command to see old versions of a particular file (including one that's no longer in the repo because it was deleted)?
10:36:46 -!- azaq23 has joined.
10:38:06 <zid> checkout
10:41:43 <olsner> ais523: start doing git log with a path to see the commits it had
10:42:06 <olsner> then you can show the particular versions of the file with git show revision:path
10:42:09 <ais523> I found an option in gitk to do that, which is the wimp's way out when you don't know what a command is
10:42:19 <ais523> thanks for the advice on how to do it properly, though
10:42:20 <zid> or you can just check it out
10:42:30 <Patashu> Is PHP whitespace insensitive? e.g. can I break a statement up into multiple lines like in C?
10:42:45 <zid> yea
10:42:54 <zid> it lets you end ?> in the middle of constructs and all sorts
10:43:41 <Patashu> ok
10:46:48 <CakeProphet> Patashu: even most whitespace sensitive languages let you break up statements across lines.
10:48:04 <zid> except Whitespace ;)
10:48:50 -!- cchackermirc has joined.
11:05:24 -!- sllide has joined.
11:19:25 -!- TeruFSX2 has quit (Ping timeout: 268 seconds).
11:24:20 <ais523> zid: ?> ... <? is basically PHP's print statement
11:24:46 <ais523> CakeProphet: they typically have some sort of marker that that's what you're doing, though
11:24:49 <ais523> like _ in Visual Basic
11:30:05 <CakeProphet> yes, \ in Python, but Python also can do it automatically on an unbalanced (
11:30:25 <CakeProphet> which is the most common case.
11:30:55 <ais523> C isn't typically whitespace-sensitive, but nonetheless lets you continue lines with \
11:31:16 <CakeProphet> really any sensible whitespace terminating language should do the implicit line continue on unbalanced parenthesis
11:32:00 <zid> this is why ; is used in a lot of places
11:32:04 <zid> so that you can do linebreaks in things
11:32:18 <zid> the only place it matters in C is for the pre-processor and strings afaik?
11:32:20 <CakeProphet> yes I understand the idea.
11:32:58 <CakeProphet> I remember having trouble with the semicolon, since my first language was Python. But since it's become like breathing.
11:33:35 <ais523> zid: you can use backslash-newline to line-break inside keywords in C
11:33:42 <ais523> nobody seems to think this is a good idea
11:33:46 <zid> yes, I said mattered, not impossible :)
11:33:58 <ais523> strings, you can break using " whitespace "
11:34:00 <CakeProphet> w\
11:34:01 <CakeProphet> h\
11:34:03 <CakeProphet> i\
11:34:03 <ais523> rather than backslash-newline
11:34:05 <CakeProphet> l\
11:34:06 <CakeProphet> e\
11:34:13 -!- oklopol has quit (Ping timeout: 268 seconds).
11:34:14 <CakeProphet> vertical program.
11:34:17 <ais523> e.g. "Hello, "
11:34:20 <ais523> "world!\n"
11:34:33 <zid> ais523: isn't that techincally a gnu extension?
11:34:36 <ais523> no, it isn't
11:34:38 <ais523> it's C89
11:34:41 <zid> orly
11:34:50 <zid> I swear you couldn't do "blah" meow "blah" in straight C
11:35:02 <ais523> you can't put a meow in between
11:35:06 <zid> ah, okay
11:35:07 <CakeProphet> I don't believe--- yes
11:35:09 <zid> you can in gnu
11:35:10 <ais523> unless it's a preprocessor substitution of a string
11:35:10 <CakeProphet> what ais523 said
11:35:29 <ais523> #define SURROUND_BY_BLAH(meow) "blah" meow "blah"
11:35:31 <ais523> is legal
11:35:37 <ais523> but only if you give it a string constant as argument
11:35:45 <CakeProphet> every day I'm surrounded by blah.
11:36:00 <ais523> (or something else that happens to form a legal line of C, as the preprocessor doesn't check for well-formedness)
11:36:39 <CakeProphet> s/form a legal line/form legal lines/
11:37:02 <ais523> CakeProphet: whitespace is replaced by single spaces before #define substitution, IIRC
11:37:06 <ais523> so it's going to form just the one line
11:37:17 <CakeProphet> right I meant logical line as in statement
11:37:19 <CakeProphet> I guess.
11:37:23 <CakeProphet> I think of these as lines.
11:37:30 <zid> there's unit tests for that for various compilers, whether they replace with a space or not
11:37:38 <zid> A lot fail O_o
11:37:42 <ais523> hmm, what happens if you stringise an arg containing a literal newline?
11:37:43 <ais523> as in
11:37:48 <olsner> CakeProphet: you should think of statements as statements :)
11:37:56 <ais523> #define SURROUND_BY_BLAH_STRINGISING(meow) "blah" #meow "blah"
11:38:04 <ais523> SURROUND_BY_BLAH_STRINGISING(hello
11:38:06 <ais523> world)
11:38:09 <CakeProphet> olsner: I have this amazing mechanism in my brain that allows me to think of statements as statements AND lines.
11:38:15 <CakeProphet> isn't that cool?
11:38:56 <CakeProphet> see
11:39:14 <CakeProphet> logical line vs. physical line
11:40:09 <CakeProphet> but feel free to demand other normative assertions from me.
11:40:12 <CakeProphet> I am going to sleep.
11:52:11 <fizzie> ais523: 6.10.3.2p2: "Each occurrence of white space between the [# operator's] argument's perprocessing tokens becomes a single space character in the character string literal [that is generated as the result]."
11:52:29 <ais523> fizzie: good to know
11:52:39 <fizzie> s/per/pre/
11:52:40 <ais523> and well done for actually looking it up
11:54:09 <fizzie> I had to, since I was quite uncertain; because newlines are retained in the "convert to preprocessing tokens" translation stage (unlike comments, which get replaced by one space; and sequences of non-newline whitespace, which may implementation-definedly get replaced by a single space too), so it could've included them in the stringized result too.
12:00:17 -!- Taneb has joined.
12:00:42 <Taneb> Hello
12:01:14 <Taneb> I just saw an advert saying "Let AOL speed up your computer!"
12:05:44 -!- ais523 has quit (Remote host closed the connection).
12:13:00 -!- sllide has quit (Read error: Connection reset by peer).
12:28:52 -!- MSleep has changed nick to MDude.
12:32:48 <Taneb> Caught up on all the comics I read
12:32:59 <Taneb> As far as I am aware
12:33:09 <Taneb> This computer won't let me log in to google reader
12:42:08 -!- variable has quit (Remote host closed the connection).
12:42:42 -!- variable has joined.
13:20:54 <nooga> harm
13:56:39 -!- Phantom_Hoover has quit (Remote host closed the connection).
13:58:05 -!- Phantom_Hoover has joined.
14:18:44 -!- ais523 has joined.
14:23:17 -!- TeruFSX2 has joined.
14:24:27 -!- azaq23 has quit (Quit: Leaving.).
14:44:33 -!- Taneb has quit (Read error: Connection reset by peer).
14:45:05 -!- Patashu has quit (Quit: MSN: Patashu@hotmail.com , Gmail: Patashu0@gmail.com , AIM: Patashu0 , YIM: patashu2 .).
14:54:34 -!- Taneb has joined.
14:57:31 <Taneb> An esoteric programming language where the output is an image...
14:57:55 <tiffany> fun :o
14:58:04 <Taneb> Possibly data is stored in the output image
14:58:24 <Taneb> So, essentially, you can watch the program working
14:59:39 <zid> Taneb: My computer already works like that
14:59:47 <Taneb> :P
14:59:49 <zid> the input is a 400GB 1Bbp BMP
14:59:54 <zid> the output is 4GB of the same
15:01:00 <Taneb> The program works by creating pens
15:01:10 <Taneb> That have their own little program
15:01:13 <tiffany> .-.
15:01:21 <Taneb> Which may or may not create additional pens
15:01:28 <zid> so, shaders?
15:01:48 <Taneb> Possibly
15:01:54 <tiffany> I tried rendering a 16gb mandelbrot render with 1000 iterations once
15:02:01 <tiffany> it was written in lua
15:02:19 <tiffany> I gave up after 3 days (got halfway) when I realised that if I did it in C++ it'd be done in like 3 hours
15:02:23 <tiffany> :I
15:04:11 <Taneb> Each pen has three colours and an alpha value, a location, a down-ness boolean, and its script
15:09:13 <Taneb> Remove the down-ness boolean
15:09:27 <Taneb> And the three colours and the alpha value
15:09:42 <Taneb> They are a command and some operands to it, respectively
15:12:14 <Taneb> Who's nothing like Piet Mondrian but still a painter?
15:22:19 <Taneb> Okay, naming this program Van Doesburg
15:22:28 <Taneb> It is designed to complement Piet
15:28:47 -!- azaq23 has joined.
15:38:15 <Taneb> I think I'm going into too much detail
15:38:35 <Taneb> "The pen name must begin with lower case letter in the English variant of the Latin alphabet, without diacritics."
15:49:32 -!- KingOfKarlsruhe has joined.
15:49:50 <Taneb> Oerjan showed that three-cell brainfuck is Turing-complete, right?
15:50:23 <tiffany> what... isn't.. turing complete?
15:50:30 <Taneb> HQ9+
15:50:36 <Taneb> Befunge-93
15:50:46 <Taneb> Finite-length tape boolfuck
15:50:48 <Taneb> deadfish
15:51:19 <Taneb> BIT
15:51:37 <Phantom_Hoover> tiffany, everything.
15:51:42 <Phantom_Hoover> Except kittens.
15:52:14 <Taneb> <Phantom_Hoover> Except kittens. <-- And things that can be demonstrated equivalent to a Turing machine
15:52:29 <Taneb> *Universal Turing machine
15:52:49 <tiffany> http://www.physibots.info trolling aol users since this morning
15:53:54 -!- sebbu has quit (Ping timeout: 245 seconds).
15:58:51 -!- GuestIceKovu has quit (Ping timeout: 240 seconds).
15:58:56 -!- derdon has joined.
15:59:33 -!- GuestIceKovu has joined.
16:01:56 <kmc> System F
16:02:02 <derdon> is David Morgan-Mar occasionally in this channel?
16:02:11 <Taneb> Never, as far as I am aware
16:02:16 <derdon> if yes, which nick does he use?
16:02:27 <derdon> I see, that's unfortunate
16:02:37 <Taneb> If he did, it would either be dmm or dmmaus
16:02:46 <Taneb> He's on #darths time to time
16:03:01 <derdon> sounds Star Wars related
16:03:14 <Taneb> Sort of
16:03:30 <tiffany> my email records are going to be screwed up for 720 hours
16:03:36 <Taneb> It's related to a comic written by David Morgan-Mar among others about Star Wars
16:03:40 <Taneb> 30 days?
16:03:46 <tiffany> because when I set up google apps it said to use a ttl that long and I was like okay.jpg
16:05:27 <ais523> oh, I thought you said 720 /days/
16:05:39 <ais523> I think it's usual to reduce the ttl one ttl's-period before you think you'll change it
16:07:30 -!- oklopol has joined.
16:09:07 <tiffany> I made a silly page
16:09:11 <tiffany> http://www.physibots.info
16:11:48 <Taneb> I'm creating a three-cell IO-less brainfuck to BCKW+SKI combinatory logic
16:12:10 <Phantom_Hoover> tiffany, you are bad and should feel bad.
16:12:25 <tiffany> :c
16:12:37 <Phantom_Hoover> C++? s/bad/horrible/
16:12:48 <Phantom_Hoover> LYMIA
16:12:55 * tiffany snuggles lymee <3
16:13:11 <Phantom_Hoover> Lymee, WHY HAVE YOU DONE THIS
16:13:25 <tiffany> what did lymee do?
16:13:27 <tiffany> :c
16:13:50 <tiffany> and what's wrong with C++ aside from being extremely difficult to program in?
16:14:04 <Taneb> Combined with Oerjan's work, IT WILL BE USEFUL TO CREATE A FRACTRAN TO MIBBLII TRANSLATOR!
16:14:15 <Taneb> What I'm doing, that is, not C++
16:14:27 <Taneb> That isn't useful for /anything/ :P
16:14:35 <Phantom_Hoover> elliott might disagree with you there.
16:15:05 <tiffany> neat~
16:15:32 <tiffany> that language is awesome to program in :p
16:15:43 <Taneb> MIBBLII?
16:15:46 <Taneb> Thanks
16:15:49 <tiffany> ?
16:16:07 <Phantom_Hoover> tiffany, elliott just mucked around with the template system a while ago because it's insane.
16:16:28 <Taneb> So far, the blank tape is C(CI(KI))(C(CI(CI))(KI))
16:16:33 <tiffany> .-.
16:16:37 <Taneb> That may be able to be optomised
16:17:20 <tiffany> http://server.physibots.info/public/mandelbrot
16:17:28 <tiffany> it's a program that I sort of wrote in neat that uses sdl
16:17:34 <tiffany> if I got the url right
16:18:51 <Phantom_Hoover> Taneb, a tape made of combinators?
16:18:53 <Taneb> brb
16:19:53 -!- sebbu has joined.
16:19:53 -!- sebbu has quit (Changing host).
16:19:54 -!- sebbu has joined.
16:20:27 -!- cheater has joined.
16:25:58 -!- ais523_ has joined.
16:26:49 -!- ais523 has quit (Disconnected by services).
16:26:50 -!- ais523_ has changed nick to ais523.
16:28:15 <Taneb> Phantom_Hoover: Yup
16:28:33 <Taneb> It's a church list of 0,(0,0)
16:29:22 <ais523> Taneb: what are the arguments to get head and tail from the list? church 0 / church 1?
16:29:25 <ais523> i/k?
16:29:36 <Taneb> K,KI
16:29:43 <ais523> ah, the third option
16:29:45 <ais523> I was just about to ask that one
16:29:50 <ais523> but wasn't sure what application syntax to use
16:30:14 <Taneb> Incidentally, WB works for two
16:30:37 <ais523> K/KI always seemed a little lazy to me (in the not doing much work sense); it makes it easy to write if statements, but annoying to write things that return booleans
16:31:10 <Taneb> It works.
16:40:37 -!- elliott has joined.
16:42:15 <elliott> 19:20:42: <oerjan> Vorpal: hint, you can frequently detect memes by typing the phrase into google and looking at the suggestions coming up. at least that's what i did for that thing in the topic.
16:42:26 <elliott> it is the 90s and there is time for... is a hash-esoteric meme
16:42:28 <elliott> dunno about the rest
16:42:35 <ais523> elliott: I didn't know that
16:42:40 <ais523> where did the meme come from?
16:42:45 <elliott> Gregor i think
16:42:50 <elliott> it's a /topic-meme
16:42:53 <ais523> hmm, that comment of mine sounds so Vorpal that I should have changed the : to a ,
16:43:41 <elliott> only the first line
16:43:57 <elliott> 19:32:43: <zid> nethack would be a good AI thesis
16:43:57 <elliott> 19:32:58: <Taneb> I am extuingished¬
16:43:57 <elliott> 19:34:06: <fizzie> I vaguely recall that a NetHack bot was one on the "suggestions for a project topic" list of the Prolog course.
16:43:57 <elliott> 19:34:12: <fizzie> I'm not sure if anyone ever did it.
16:43:57 <elliott> 19:34:34: <zid> problem is nethack is quite inaccessable for a bot
16:44:01 <ais523> both lines, to me
16:44:05 <elliott> hey ais523 :P
16:44:15 <ais523> elliott: note that zid followed me here from #nethack
16:44:24 <ais523> and most of them are quite aware of the existence of both TAEB and saiph
16:44:42 <elliott> hmmmmm
16:44:43 <ais523> fizzie: I'd /love/ to see someone write something even capable of understanding the gamestate in Prolog
16:44:50 <elliott> we have too many spies lately
16:45:04 <ais523> it might be a decent language to write the AI itself in, but it would be incredibly bad for the framework
16:45:32 <ais523> I'd say it took about a year of work to get TAEB capable of communicating to NetHack to the extent it currently does, and it /still/ has a completely broken API for item pickup
16:45:34 <elliott> 20:01:55: <zid> haskell needs a bit more work to be a good esoland, it's almost there
16:45:34 <elliott> this was an old meme five years before you invoked it the _first_ time in this log :P
16:45:53 <Vorpal> ais523: hm?
16:45:55 <ais523> is the meme actually older than Haskell? that would be hilarious
16:45:59 * ais523 facepalms
16:46:07 <elliott> beautifu
16:46:08 <elliott> l
16:46:22 <elliott> ais523: I doubt the meme predates 1990
16:46:25 <Gregor> elliott: IT IS THE NINETIES
16:46:28 <Gregor> elliott: AND THERE IS TIME
16:46:29 <Gregor> elliott: FOR KLAX
16:46:45 <elliott> oh, there we go then
16:46:45 <Vorpal> ais523: Bad luck for you, I'm using a different client atm
16:46:48 <Vorpal> so : not ,
16:47:02 <elliott> a badly-behaved one at that
16:47:24 <ais523> Vorpal: do you have more than two lines of scrollback now?
16:47:54 <Vorpal> ais523: yes, but not much, I'm on a phone. So fairly limited.
16:48:14 <Vorpal> bbl
16:48:24 <elliott> Vorpal has more scrollback on a phone than his usual computational device (an internet-connected Speak and Spell)
16:48:42 <elliott> he uses it for HPC, presumably
16:49:02 <ais523> I've known people with a legitimate reason for not reading scrollback (blind people, for whom navigating it is awkward)
16:49:08 <ais523> but I don't think Vorpal is one of those
16:49:25 <ais523> elliott: maybe the computing is /so/ high-performance there's no spare cycles for remembering scrollback?
16:49:31 <elliott> ais523: heh
16:49:37 <elliott> I meant the phone
16:49:44 <elliott> ais523: hmm, I would expect a list-based interface for scrollback if I was blind
16:49:53 <elliott> i.e. pgup/pgdown to go up and down it
16:50:02 <elliott> or do you have to mess with scrollbars I wonder?
16:50:28 <ais523> elliott: it's more that you can't do anything else while reading scrollback
16:50:34 <ais523> in particular, see other comments people are making
16:50:37 <elliott> heh
16:50:47 <elliott> 20:43:03: <oerjan> i will file it together with "never damn ais523"
16:50:51 <elliott> 20:43:03: <oerjan> file it together with "never damn ais523"
16:50:51 <ais523> the problem with sound compared with vision is that it can only really do about one thing that requires complex information to be sent at once
16:50:54 <elliott> 20:43:03: <oerjan> with "never damn ais523"
16:50:57 <elliott> 20:43:03: <oerjan> "never damn ais523"
16:50:59 <elliott> 20:43:03: <oerjan> "never damn ais523
16:51:01 <elliott> 20:43:03: <oerjan> never damn ais523
16:51:03 <elliott> 20:43:03: <oerjan> damn ais523
16:51:07 <ais523> elliott: I see what you're doing
16:51:09 <elliott> looks like someone has to apologise :|
16:51:09 <ais523> it doesn't count
16:51:19 <elliott> ais523: hmm, does it count as me saying it?
16:51:20 <ais523> bear in mind that my complaint is based on the meaning of the words
16:51:23 <elliott> or do the quotemarks prevent that
16:51:24 <ais523> they mean something else when quoted
16:51:35 <ais523> and it's quoted in both cases, just diferent ways
16:51:40 <elliott> I mean the <> quotes
16:51:57 <ais523> yes, that's quotes
16:53:59 <elliott> 21:00:32: <Sgeo> http://pchat-irc.com/blog/ wow
16:53:59 <elliott> Woooow.
16:56:44 <ais523> elliott: is it wowish enough that I should read it too?
16:57:06 <ais523> and is it ridiculously good/bad/surprising?
16:57:22 <elliott> Yes.
16:57:27 <elliott> It is the most wow thing.
16:57:37 <ais523> elliott: it made me literally laugh out loud
16:58:06 <elliott> I think I'm more wowing at Sgeo_'s comment than the website itself
16:58:09 <ais523> should I subscribe to the RSS feed?
16:58:15 <ais523> the website itself is pretty wowish
16:58:16 <cheater> looks like a lot of fun
16:58:20 <elliott> ais523: Undoubtedly
16:58:30 * elliott wonders if everyone else isseeing something different to him.
16:58:57 <ais523> unfortunately, the link to the admin page requires a login
16:59:08 <ais523> pretty audacious to place that in the post of a page that isn't a blog comment
16:59:29 <elliott> It's linked on the sidebar too
16:59:34 <elliott> That's just the literal default WordPress setup
16:59:35 <ais523> (well, given how often wordpress has security holes, it probably /doesn't/ actually require a login, but that's the most obvious method)
16:59:47 <elliott> I'm still not sure why Sgeo wowed at it
17:00:10 <ais523> elliott: more that someone would be hosting a literal default WordPress setup for reasons other than showing off what it looked like
17:00:11 <Sgeo_> Just at how randomly contentless it was
17:00:15 <ais523> or for a few minutes while setting up WordPress
17:00:33 <ais523> is that the default theme too? I don't know what WordPress default themes are like
17:02:08 <elliott> I believe so
17:02:17 <elliott> they changed it from Kubrick, which you've almost certainly seen everywhere, ages ago
17:02:43 <elliott> (http://theme.files.wordpress.com/2005/10/kubrick-screenshot.png?w=595&h=383)
17:02:46 -!- ralc has quit (Read error: Connection reset by peer).
17:04:22 <ais523> it's quite pretty, but then I'd expect a default theme of a popular blog engine to either a) look really good, or b) look incredibly bland so people are motivated to change it
17:05:03 -!- TeruFSX2 has quit (Ping timeout: 260 seconds).
17:06:02 <elliott> I want to know where they got the photograph from; there has to be something like stock image websites, but for "pretty but meaningless images to use as defaults in themes"
17:10:55 <ais523> I think stock image websites probably do that too
17:11:25 <ais523> I know someone who used Webshots, which is full of pretty meaningless images to use as desktop backgrounds or screensavers
17:11:37 <ais523> and theme images are much the same things, but with different dimensions
17:12:25 <elliott> I don't understand people who seek out desktop backgrounds
17:13:17 <elliott> 22:17:42: <fungot> CakeProphet: i suppose it's event driven by using callbacks when certain tokens are found.
17:13:17 <fungot> elliott: super bowl? every one of them ay ( y) this song slow and rock together nice words awesome beat 3 videos you will finish the game could be a damn prep.
17:13:24 <elliott> I thought this was someone describing fungot for a second
17:13:24 <fungot> elliott: ppl should vote clinton because obama is biracial every1 knows that dood, look at him he has been on something lately.
17:14:51 <elliott> `addquote <fungot> elliott: ppl should vote clinton because obama is biracial every1 knows that dood, look at him he has been on something lately.
17:14:51 <fungot> elliott: diving mission in mw2. infinity ward can manage to outdo the first commercial plane to have passion for singing like this
17:14:56 <HackEgo> 638) <fungot> elliott: ppl should vote clinton because obama is biracial every1 knows that dood, look at him he has been on something lately.
17:14:59 <elliott> ^style
17:14:59 <fungot> Available: agora alice c64 ct darwin discworld europarl ff7 fisher homestuck ic irc jargon lovecraft nethack pa sms speeches ss wp youtube*
17:15:11 -!- olsner has quit (Ping timeout: 252 seconds).
17:20:21 <elliott> 23:01:42: <Phantom_Hoover> quintopia, although at least both times have been you being stupid and Hughes telling you.
17:20:32 <elliott> Phantom_Hoover: It wasn't quintopia being stupid this time, was it?
17:20:55 <Sgeo_> Sam Hughes?
17:20:56 <Phantom_Hoover> elliott, well no, but he was missing the joke.
17:21:07 <elliott> Sgeo_: no
17:21:19 <elliott> Sgeo_: Gabriel Hughes, famous harpsichord musician.
17:21:24 <elliott> He's bros with Phantom_Hoover and quintopia.
17:24:20 <elliott> CakeProphet: Lymee: Please don't tell me this log is going to end with you two repeatedly pinging fungot.
17:24:20 <fungot> elliott: i mean maybe she lost herself but maybe she wasnt a happyhappyjoyjoy game. i'll be looking forward to it.
17:25:11 <elliott> 00:05:07: <Sgeo> CakeProphet, there's a bitcoin faucet thing
17:25:11 <elliott> 00:05:31: <Sgeo> Which is closed for maintainance, but whatever
17:25:11 <elliott> Finally CakeProphet can get something like a penny for FREE.
17:25:14 <elliott> It's probably less nowadays.
17:25:43 <itidus20> i would like to hear the ff7 voice of the bot
17:25:50 <elliott> itidus20: so set it to that
17:26:27 <itidus20> this is an awkward situation
17:26:37 <itidus20> `ff7
17:26:38 <HackEgo> ​/home/hackbot/hackbot.hg/multibot_cmds/lib/limits: line 5: exec: ff7: not found
17:26:50 <itidus20> ^ff7
17:26:58 <Sgeo_> ^style ff7
17:26:59 <fungot> Selected style: ff7 (Full script of the game Final Fantasy VII)
17:27:06 <elliott> ^help
17:27:06 <fungot> ^<lang> <code>; ^def <command> <lang> <code>; ^show [command]; lang=bf/ul, code=text/str:N; ^str 0-9 get/set/add [text]; ^style [style]; ^bool
17:27:17 <itidus20> ok thanks :P
17:27:21 <Sgeo_> yw
17:27:27 <itidus20> fungot lay it on me
17:27:28 <fungot> itidus20: sorry i just happen to him.... i'm not just the fish, but the darkness of the lifestream... you really gonna leave! really!?
17:27:40 <Sgeo_> I should have done what elliott did, but I didn't know there wa a help
17:27:53 <itidus20> fungot more!
17:27:53 <fungot> itidus20: hah, hah hah hah! listen to me, i won't be able to fly in the village! you gotta be prepared, and push o button to slow down.
17:27:56 <Sgeo_> ^show style
17:28:10 <Sgeo_> ^show ^style
17:28:22 <elliott> 02:02:16: <Gregor> elliott: omg I'm actually working on Fythe ... AND Plof!
17:28:22 <elliott> Gregor: Have you finished off bignums for me?
17:28:34 <elliott> :p
17:28:43 <itidus20> fungot
17:28:43 <fungot> itidus20: your real self. will you and aerith are my only real job is watching over shinra's documents...
17:29:19 <itidus20> ok i've had my fun
17:29:53 <elliott> fungot responds to /msg although it still won't reply beyond four consecutive
17:30:50 <Gregor> elliott: Depends on your definition of "finished off"
17:31:06 <elliott> 03:01:31: <Sgeo> All TC programming languages, barring bizzarities, should be able to parse
17:31:06 <elliott> 03:01:33: <Sgeo> Stuff
17:31:06 <elliott> deep words
17:31:44 <elliott> Gregor: Do all operations (apart from "pointer-ish" things) handle bignums and overflow properly, including tricky bitwise cases which properly promote when the result if infinitely 0-extended to the left would differ from the word-size result?
17:33:18 <Sgeo_> Does that definition leave room for addition, for example, to have nonsenical result?
17:33:37 <oklopol> Gregor: do you ever wear two hats?
17:33:50 <Gregor> elliott: Depends on which you consider "pointer-ish" :P
17:34:00 <Gregor> If you consider all the bitwise and shifty cases pointer-ish, then DONE.
17:34:09 <elliott> I don't
17:34:21 <elliott> Oh, I forgot to add having separate divmod and quotrem too, I was planning to do that
17:34:44 <oklopol> your head would be so warm
17:35:13 -!- Taneb has changed nick to TanabIsNotHere.
17:35:24 <Gregor> oklopol: .........
17:36:01 <oklopol> did i just blow your mind
17:36:17 <Phantom_Hoover> oklopol, it would be too heavy.
17:36:17 -!- Sgeo_ has changed nick to SgeoISNOWHERE.
17:37:08 <itidus20> indirect addressing is a facile and inebrious kind of instruction which should be whomped away by languages
17:38:09 -!- olsner has joined.
17:39:15 <itidus20> in a pickle i can reach into my unconcious for an expanded english vocabulary
17:39:52 <elliott> `addquote <itidus20> indirect addressing is a facile and inebrious kind of instruction which should be whomped away by languages
17:39:54 <HackEgo> 639) <itidus20> indirect addressing is a facile and inebrious kind of instruction which should be whomped away by languages
17:40:56 <elliott> 07:26:53: <tiffany> My os is 8gb and i have lots of stuff installed
17:40:56 <elliott> 07:27:03: <tiffany> My entire vps is 2.5
17:40:57 <elliott> my toothrbush is 9
17:41:06 <tiffany> .-.
17:41:11 <Phantom_Hoover> My toothbrush is 1000000000000000
17:41:24 <tiffany> my home directory is 50gb ;_;
17:41:27 <cheater> my toothbrush is 0 because it's a hardware solution using vlsi
17:42:23 <Phantom_Hoover> My home directory is all the gbs
17:42:40 <Phantom_Hoover> 13 of which are taken up by Red Dwarf.
17:42:58 <itidus20> cool
17:43:04 <tiffany> I have 25gb of ~/Downloads and 25gb of ~/Videos :P
17:43:56 <Phantom_Hoover> but
17:43:59 <Phantom_Hoover> how much of it
17:44:03 <Phantom_Hoover> is red dwarf
17:44:17 <tiffany> red dwarf?
17:44:22 <elliott> 09:13:24: <zzo38> I wrote a Huffman making program in Haskell. It is written in a different way than it would be written in other programming language, but it works. Tell me if you have suggestion things I could add.
17:44:22 <elliott> 09:14:52: <zzo38> To me it seems many functions with similar name and similar purpose are in Data.List, Data.Map, Data.Set, etc, they should be made a class.
17:44:22 <elliott> 09:15:37: <monqy> some of them already are
17:44:22 <elliott> 09:15:59: <monqy> foldable, traversable
17:44:24 <elliott> 09:17:03: <zzo38> But some of them are not. Possibly due to some limitations in the class system of Haskell.
17:44:30 <elliott> mostly because nobody can agree on how collections classes should be structured
17:44:33 <Phantom_Hoover> tiffany, get out
17:44:35 <Phantom_Hoover> Now.
17:44:36 <itidus20> lol
17:45:08 <tiffany> .-.
17:45:17 <elliott> what is .-. even meant to look like
17:45:28 <itidus20> elliott: it's 2 eyes and a mouth
17:46:19 <elliott> mouths aren't higher than eyes
17:46:37 <tiffany> upside down face?
17:46:43 <Phantom_Hoover> elliott, tiffany is actually an alien, thus explaining why she hasn't heard of Red Dwarf.
17:46:53 <derdon> KingOfKarlsruhe: hello :)
17:46:57 <Phantom_Hoover> The mouth in her forehead is an extreme version of forehead ridges.
17:46:57 <tiffany> I kind of use it as a headtilt
17:47:03 <tiffany> .-.
17:47:07 <derdon> KingOfKarlsruhe: didn't you're into esoteric languages
17:47:26 <Phantom_Hoover> Didn't we all're into esoteric languages?
17:47:35 <itidus20> heres a random red dwarf scene: http://www.youtube.com/watch?v=RXKlC8ph7mM
17:47:36 <elliott> We'll all're esoteric into languages.
17:52:13 <elliott> 11:33:35: <ais523> zid: you can use backslash-newline to line-break inside keywords in C
17:52:18 <elliott> ais523: this will revolutionise my coding style
17:52:51 <ais523> oh dear
17:53:36 <cheater> haha
17:53:39 <olsner> ooh, a new use for the alternative keywords for operators: opportunities for line-breaking
17:53:49 <cheater> you can use nonprintable characters in php identifiers
17:53:55 -!- elliott has quit (Remote host closed the connection).
17:54:02 <olsner> can you linebreak inside operators too?
17:54:18 <itidus20> is this the backslash \
17:54:22 -!- elliott has joined.
17:54:30 <Deewiant> You can linebreak in everything except multibyte characters and trigraphs
17:54:35 <olsner> itidus20: reverse solidus
17:54:57 <elliott> 15:01:54: <tiffany> I tried rendering a 16gb mandelbrot render with 1000 iterations once
17:54:57 <elliott> 15:02:01: <tiffany> it was written in lua
17:54:58 <elliott> 15:02:19: <tiffany> I gave up after 3 days (got halfway) when I realised that if I did it in C++ it'd be done in like 3 hours
17:54:58 <elliott> 15:02:23: <tiffany> :I
17:54:58 <elliott> even better: you could do it in C, and then you wouldn't have to deal with C++
17:55:25 <elliott> 15:50:23: <tiffany> what... isn't.. turing complete?
17:55:26 <elliott> many things
17:55:33 <olsner> even better: you could not do it at all and then you wouldn't have to deal with anything
17:55:39 <tiffany> it was 65536x65536 and it kept segfaulting until I realised I was allocating 16gb of ram when I had 1
17:55:46 <tiffany> so I rendered it using 512x512 tiles
17:55:47 <tiffany> :p
17:56:17 <Phantom_Hoover> <elliott> even better: you could do it in C, and then you wouldn't have to deal with C++
17:56:25 <elliott> 16:09:07: <tiffany> I made a silly page
17:56:25 <elliott> 16:09:11: <tiffany> http://www.physibots.info
17:56:26 <elliott> what is the point of this
17:56:32 <Phantom_Hoover> Even better: you could do it in assembly and you'd be a Real Programmer.
17:56:38 <Phantom_Hoover> Or as close as you can get these days.
17:56:40 <elliott> Phantom_Hoover: Well, better than C++.
17:56:42 <tiffany> I don't know assembly ;-;
17:57:00 <elliott> 16:13:50: <tiffany> and what's wrong with C++ aside from being extremely difficult to program in?
17:57:00 <elliott> There are more things wrong with C++ than there are things that are not Turing complete.
17:57:11 <tiffany> also elliott that page was made because of people impulsively typing "http://www." before every address
17:57:31 <elliott> It's horrific that they leave out the additional www..
17:58:04 <tiffany> I use subdomains to organise services (mediawiki, phpbb, etc), not for organising protocols
17:58:10 <tiffany> also subdomains for servers
17:58:11 <itidus20> elliott: that which can be explained is of little value
17:58:19 <elliott> tiffany: Please, educate yourself: http://www.www.extra-www.org/
17:58:23 <tiffany> :I
17:58:28 <tiffany> http://no-www.org
17:58:33 <elliott> no-www is obsolete. http://www.www.extra-www.org/
17:59:04 <Phantom_Hoover> tiffany, www is the only acronym that takes three times longer to say than the full phrase; it is therefore the best.
17:59:36 <cheater> The following error was encountered while trying to retrieve the URL: http://www.www.extra-www.org/
17:59:36 <cheater> Unable to determine IP address from host name "www.www.extra-www.org"
17:59:55 <tiffany> I hate when I sit there for a minute while a school librarian decides to read out "h t t p colon slash slash w w w dot..."
18:00:10 <tiffany> the only way it could be worse is if they said backslash
18:00:28 <elliott> tiffany: Ugh. I always painstakingly correct them by informing them they forgot the extra "www.".
18:00:45 <elliott> They have no appreciation for the protocols they rely on every day; they just parrot things out as quickly as they can.
18:00:47 <elliott> It's disgusting.
18:00:58 <itidus20> tiffany: you just got me thinking, they need to apply cockney slang to urls
18:01:15 <tiffany> I'm tempted to make a 65536 character long subdomain now
18:01:36 <Phantom_Hoover> itidus20, hmm, what rhymes with 'web'?
18:01:39 <SgeoISNOWHERE> Make it be a URL shortener
18:01:43 <tiffany> XD
18:01:47 <Phantom_Hoover> Meb? Kreb?
18:01:48 <itidus20> Phantom_Hoover: www = sorry to trouble you
18:01:50 <Phantom_Hoover> Aha!
18:01:58 <itidus20> :P
18:02:00 <itidus20> i dunno
18:02:04 <itidus20> im not british anyway
18:02:13 <Phantom_Hoover> itidus20, no, world wide web = cycle.
18:02:19 <itidus20> you could shorten it to sorry
18:02:47 <tiffany> http://xkcd.com/181/
18:02:53 <tiffany> world wide blag
18:03:04 <elliott> I, too, have heard of xkcd
18:03:08 * tiffany <3 xkcd
18:03:17 <elliott> Ah. Your first error.
18:03:29 <olsner> in swedish, www is pronounced "ve ve ve", which means woe woe woe
18:03:56 <tiffany> in weaboo, www means lolol
18:03:59 <tiffany> :p
18:04:05 <Phantom_Hoover> elliott, hey, you like xkcd pre-~400.
18:04:17 <Gregor> the-longest-domain-name-ever-to-be-used-for-a-so-called-url-shortener-in-spite-of-the-fact-that-nearly-all-urls-will-be-lengthened-just-by-the-inclusion-of-this-domain-name.com/submitted-urls/urls-by-random-unique-identifier/yr97fq0yf4n089qfny04y0w4fh089yh089w5th90w8y3fw03h9840404w90w40398tw498t0440wt9
18:04:26 <elliott> Phantom_Hoover: Well OK except for any comic that anyone's referenced more than like three times.
18:04:47 <elliott> Gregor: I'd use it
18:04:50 <tiffany> gregor: md5 hash of every character in the url concatinated together for the unique identifier
18:04:57 <Gregor> tiffany: X-D
18:04:59 <cheater> Gregor, that is NICE.
18:05:01 <elliott> md5 :modern:
18:05:07 <Gregor> SHA-256
18:05:08 <tiffany> fine, md3
18:05:17 <Gregor> SHA-....4096?
18:05:27 <Phantom_Hoover> SHA-\aleph_0
18:05:37 <elliott> Gregor: There are a finite number of specified SHA algorithms :P
18:05:47 <elliott> I think Skein generalises to any bitwidth.
18:05:50 <tiffany> SHA-graham's_number
18:05:58 <Gregor> elliott: Yeah, but I don't recall where it ends. Was it 256? 1024?
18:05:59 <elliott> RadioGátun is really nice because it goes up to like two thousand bits and you can just take a prefix.
18:06:03 <elliott> Gregor: Five twelve.
18:06:06 <Phantom_Hoover> tiffany, waaaay ahead of you.
18:06:10 <elliott> Oh, it's RadioGatún.
18:06:13 <Gregor> Of course I'd guess the two powers of two around the correct one :P
18:06:21 <elliott> Oh hey
18:06:23 <elliott> http://en.wikipedia.org/wiki/Keccak
18:06:30 <elliott> Successor to RadioGatún is an SHA-three finalist
18:07:42 <tiffany> I'm seriously adding this subdomain: the-longest-domain-name-ever-to-be-used-for-a-so-called-url-shortener-in-spite-of-the-fact-that-nearly-all-urls-will-be-lengthened-just-by-the-inclusion-of-this-domain-name.physibots.info
18:07:44 <SgeoISNOWHERE> http://www.abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijk.com/
18:08:10 <SgeoISNOWHERE> Oh, that's just email addresses
18:08:27 <SgeoISNOWHERE> http://hugeurl.geeks.org/
18:08:49 <tiffany> oh my it worked
18:08:51 <elliott> I like how http://www.abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijk.com/ lists four disadvantages first
18:09:08 <Phantom_Hoover> elliott, no those are advantages
18:09:22 <tiffany> crap
18:09:26 <tiffany> I think it got truncated
18:09:40 <tiffany> apparently not
18:09:41 <tiffany> .-.
18:10:45 <Gregor> I think the URL lengthener should just have a lookup table for every character in the original URL, where the value in the generated URL is a brief description of the etymology and history of that letter/symbol.
18:11:08 <tiffany> XD
18:11:09 <elliott> Gregor: Remember to encode the resultin unary
18:11:33 <elliott> Then interpret that unary as a base-9999999999999999999 integer, convert it to English words, and fuck it this is stupid.
18:12:34 <tiffany> eeeeek
18:12:46 <tiffany> I just crashed my entire domain with that subdomain
18:12:52 <elliott> "crashed"
18:12:54 <elliott> As we all know, domains are computers.
18:13:16 <olsner> or an in-order traversal of the tree of wiki pages rooted at the wikipedia page for that character
18:13:33 <tiffany> elliott, domain lookup is failing through opendns
18:13:37 <tiffany> it returns a server error
18:13:48 <cheater> you turned off the internet!
18:13:48 <elliott> lol, opendns
18:14:35 <tiffany> this is bad
18:14:38 <tiffany> all the subdomains broke
18:14:40 <tiffany> .-.
18:14:53 <cheater> lol
18:17:52 <tiffany> okay
18:17:53 <tiffany> it fixed
18:18:15 <Vorpal> tiffany: you don't run your own dns server?
18:18:21 <tiffany> no
18:18:30 <Vorpal> <elliott> As we all know, domains are computers. <-- obviously not. Cars can crash too. Thus it must be one.
18:18:35 <Vorpal> (or a computer, true)
18:18:51 <elliott> carputer
18:19:01 <Vorpal> elliott: are you sure those can crash?
18:19:11 <elliott> only one way to find out ..,,,,,,,,,,,
18:19:29 <Vorpal> elliott: by applying explosives right? I'll call Mythbusters.
18:19:47 <elliott> no
18:19:49 <elliott> by applying
18:19:51 <elliott> Lov,e,,,,,,,,,,,,,,,,,,
18:19:52 <elliott> q[pwre't;ghf,
18:19:53 <elliott> kliu[]fyt'dsae
18:19:56 <Vorpal> I see.
18:20:18 <elliott> p[l;a'sd'fgln;kt\
18:20:42 <elliott> lspdc;sx
18:20:47 <elliott> ////////////
18:20:53 <elliott> ````````````````
18:20:53 <Vorpal> elliott: really? I thought he went to Oxford, not Cambridge?
18:20:55 <HackEgo> ​/home/hackbot/hackbot.hg/multibot_cmds/lib/limits: line 5: exec: ```````````````: not found
18:20:59 <elliott> Vorpal: a-0sifkdoxcvklmb
18:21:02 <elliott> sld;fgk;hfj, ;erw't
18:21:04 <Vorpal> elliott: oh okay.
18:21:05 <elliott> ???????????????????????????????/////////
18:21:11 <tiffany> .-.
18:21:16 <elliott> sads;vc
18:21:20 <Vorpal> bbiab
18:21:24 <elliott> bbibabiabaib
18:23:45 <olsner> fungot: make some sense
18:23:46 <fungot> olsner: welcome to cosmo canyon. are you?
18:28:59 -!- nys has joined.
18:30:02 <Phantom_Hoover> Welcome, comrade nys!
18:30:24 <nys> Hello!
18:31:18 -!- TanabIsNotHere has changed nick to Taneb.
18:31:30 <Taneb> Hello
18:33:03 <Taneb> I've been thinking...
18:33:05 <Taneb> Panic
18:33:14 <Phantom_Hoover> nys, we are a channel for the discussion of transmissible spongiform encephalopathies.
18:33:17 <elliott> Taneb: ok im panicing
18:33:22 <elliott> Phantom_Hoover: he's been here before
18:33:25 <elliott> but good description
18:34:03 <Phantom_Hoover> elliott, ;_;
18:35:07 <nys> I've been here from around four years ago
18:35:16 <elliott> oh, really?
18:35:28 <nys> since around 2006, and even before
18:35:34 <elliott> what nick?
18:35:42 <nys> Twistle on the wiki
18:35:45 <Taneb> I've been here since July, possibly June
18:35:49 <nys> dunno what I went by on IRC
18:37:08 * tiffany waves at nys
18:37:42 * nys waves back...sinisterly
18:38:15 <elliott> sinysterly
18:38:15 <Phantom_Hoover> nys, I admire your dedication to BSE.
18:38:23 <nys> BSE?
18:38:33 <Taneb> nys, why you wave left-handedly
18:38:59 <elliott> Taneb: stern glance
18:39:21 <nys> refresh me on what BSE is
18:39:34 <Taneb> Stop looking at my rear end, elliott
18:40:20 <elliott> we need someone to have the flyswatter when oerjan doesnt
18:40:24 <elliott> or the swatting will never get done :|
18:40:44 <Taneb> I'll remind oerjan when he comes back
18:41:09 * Phantom_Hoover swatpans Taneb --==\#/
18:41:23 * Phantom_Hoover swatpans tiffany for good measure --==\#/
18:41:35 <tiffany> wha?
18:41:41 <elliott> i approve of this reign of terror
18:41:54 <nys> :< what is BSE??
18:41:56 <elliott> rerror
18:42:00 <elliott> but yeah what is bse
18:42:03 <elliott> bsebsebsbessbe
18:42:04 * Phantom_Hoover swatpans elliott for toadying --==\#/
18:42:09 <Phantom_Hoover> nys, elliott, ...
18:42:13 <Phantom_Hoover> Mad cow disease?
18:42:20 <elliott> HOW OBVIOUS
18:45:08 <nys> ++++[>++++++++++++++++<-]>++++++++.[-]<++++++[>++++++++++++++++<-]>+++++.[-]
18:45:23 <nys> is this the way you usually communicate in here?
18:45:43 <Taneb> !brainfuck ++++[>++++++++++++++++<-]>++++++++.[-]<++++++[>++++++++++++++++<-]>+++++.[-]
18:45:58 <elliott> that thing outputs two characters at most
18:46:08 <elliott> ^ul ++++[>++++++++++++++++<-]>++++++++.[-]<++++++[>++++++++++++++++<-]>+++++.[-]
18:46:08 <fungot> ...bad insn!
18:46:10 <elliott> ^bf ++++[>++++++++++++++++<-]>++++++++.[-]<++++++[>++++++++++++++++<-]>+++++.[-]
18:46:10 <fungot> He
18:46:12 <nys> it outputs exactly two characters
18:46:14 <elliott> nys: he
18:46:15 <Phantom_Hoover> !userinterps
18:46:15 <EgoBot> ​Installed user interpreters: acro aol austro bc bct bfbignum brit brooklyn bypass_ignore bytes chaos chiqrsx9p choo ctcp dc decide drawl drome dubya echo ehird elmer fudd google graph gregor hello id insanetemp jethro kraut lperl lsh map num numberwang ook pansy pi pikhq pirate plot postmodern postmodern_aoler prefixes python redneck reverse rimshot rot13 rot47 sadbf sanetemp sfedeesh sffedeesh simplename slashes svedeesh swedish valspeak wacro warez wc yodawg
18:46:15 <nys> He
18:46:42 <Taneb> !numberwang He
18:46:44 <EgoBot> I'm sorry, but Brazil isn't a vegetable!
18:47:00 <elliott> i'm sorry too EgoBot :(
18:47:06 <nys> !numberwang shinty six
18:47:06 <EgoBot> I'm sorry, but Brazil isn't a vegetable!
18:47:30 <nys> but shinty six is a real number
18:47:39 <ais523> wait, is that !numberwang's reply to everything?
18:47:49 <Taneb> !numberwang 12
18:47:49 <EgoBot> That's numberwang!
18:48:09 <Taneb> Nope
18:48:37 <Taneb> Also, I've defined > in my combinator brainfuck
18:48:42 <Taneb> S(BC(B(CI)(B(CIK)(CI(KI)))))(S(B(BC(CI))(CI(KI)))(CIK))
18:48:49 <tiffany> o.o
18:49:09 <nys> it's always nice to do some good brainfucking
18:49:15 <Taneb> Due to silly things, I don't need to define <
18:49:25 <olsner> Taneb: oh, writing a BF -> combinator compiler?
18:49:26 <Taneb> Namely, I'm only working with three cells
18:49:29 <Taneb> Yep
18:50:02 <Taneb> Designed for output from oerjan's Iterated Collatz Function -> brainfuck compiler
18:50:58 <Taneb> In which, every > can be replaced with <<
18:51:13 <Taneb> And every < with >>
18:51:23 <Taneb> Making only one of them necessary
18:52:19 <elliott> he managed to do it for three cells? awesome
18:52:31 <Taneb> It's been on the bf page for a while
18:52:59 <elliott> I thought that was four but I don't remember
18:53:34 <Taneb> Interestingly, the C combinator is Church Not
18:53:58 <Taneb> K is Church True, I is Church one
18:54:33 <nys> does the ^bf interpreter in this here bot's tape extend in both directions from the initial spot?
18:54:59 <Taneb> I would check, but ice cream
18:55:07 -!- Taneb has changed nick to TanebIceCream.
18:55:13 <nys> :<
18:57:44 <elliott> nys: no, only rightwards as is standard
18:57:54 <elliott> nys: it may even be a limited tape actually..
18:57:58 <elliott> it's written in befunge after all
18:58:12 <elliott> !brainfuck is more complete but you'll need to terminate output with a newline or it won't say anything
18:58:18 <nys> :o the bot is written in befunge?
18:58:38 <elliott> yeah
18:58:42 <elliott> ^source
18:58:43 <fungot> http://git.zem.fi/fungot/blob/HEAD:/fungot.b98
18:58:47 <elliott> befunge-98, though
18:59:04 <nys> hum.
19:01:27 <nys> does either implement any kind of input?
19:03:19 <elliott> Both do
19:03:19 <elliott> &Input integer
19:03:19 <elliott> ~Input character
19:03:27 <elliott> Funge-98 has that and a whole extension mechanism
19:03:29 <elliott> fungot uses socket ones
19:03:29 <fungot> elliott: it would bring us an easier life.
19:06:56 <nys> ^bf ++++++[>+++++++++<-]>.[-]<++++++++++[>++++++++++<-]>+.+++++++..+++.[-]<+++[>+++++++++++<-]>.
19:06:56 <fungot> 6ello!
19:07:02 <nys> darnit!
19:07:43 <nys> ^bf ++++++++[>+++++++++<-]>.[-]<++++++++++[>++++++++++<-]>+.+++++++..+++.[-]<+++[>+++++++++++<-]>.
19:07:43 <fungot> Hello!
19:07:47 <nys> there.
19:08:03 <elliott> !bf_txtgen hi
19:08:07 <EgoBot> ​41 ++++++++[>+++++++++++++>+>><<<<-]>.+.>++. [155]
19:08:45 <nys> does that produce the shortest possible?
19:10:56 -!- Vorpal has quit (*.net *.split).
19:11:52 <Deewiant> !bf_txtgen hi
19:11:54 <EgoBot> ​41 ++++++++[>+++++++++++++>+>><<<<-]>.+.>++. [44]
19:12:31 <elliott> nys: that's quite impossible
19:12:39 <elliott> it might be the shortest for hi but I doubt it
19:13:06 <Lymee> !viewinterp bf_txtgen
19:13:32 <Lymee> !bf_testgen Hello, world!
19:13:40 <elliott> Lymee: it's a built-in ancient java thing
19:13:46 <Lymee> Ah.
19:13:54 <fizzie> It's certainly not the optimal for hi; c.f. ">><<".
19:14:08 <fizzie> (It uses a fixed number of 4 tape cells in the first loop.)
19:14:13 <Lymee> !bf_txtgen Hello, world!
19:14:15 <EgoBot> ​127 +++++++++++[>+++++++>+++++++++>++++>+<<<<-]>-----.>++.+++++++..+++.>.------------.<++++++++.--------.+++.------.--------.>+.>-. [839]
19:14:16 <fizzie> (Well, the first and only loop.)
19:14:38 <Lymee> ^bf +++++++++++[>+++++++>+++++++++>++++>+<<<<-]>-----.>++.+++++++..+++.>.------------.<++++++++.--------.+++.------.--------.>+.>-.
19:14:38 <fungot> Hello, world!.
19:14:50 <fizzie> The "." is the newline.
19:15:14 <fizzie> So the "hi" is also actually "hi\n".
19:15:26 <fizzie> Three .s and all that.
19:16:39 <fizzie> Also yes, a fixed-width tape, I think.
19:17:12 <fizzie> A small one, at that; 1000 cells of numbers in the [0, 255] range.
19:17:44 <elliott> Real numbers?
19:17:59 <fizzie> Well, integers *are* real...
19:18:08 <fizzie> You might even call them the realest numbers of all.
19:18:16 <fizzie> In the "keeping it real" sense.
19:19:45 <Lymee> ^[>>>>> >>>>> >>>>> >>>>> >>>>> >>>>> >>>>> >>>>> >>>>> >>>>> >>>>> >>>>> >>>>> >>>>> >>>>> >>>>> >>>>> >>>>> >>>>> >>>>> +.]
19:19:49 <Lymee> ^bf [>>>>> >>>>> >>>>> >>>>> >>>>> >>>>> >>>>> >>>>> >>>>> >>>>> >>>>> >>>>> >>>>> >>>>> >>>>> >>>>> >>>>> >>>>> >>>>> >>>>> +.]
19:20:16 -!- Vorpal has joined.
19:20:24 <fizzie> "aaa**" cells of nonnegative integers less than "88+:*", to be more thematically appropriate.
19:20:25 <Lymee> ^bf [>>>>> >>>>> >>>>> >>>>> >>>>> >>>>> >>>>> >>>>> >>>>> >>>>> >>>>> >>>>> >>>>> >>>>> >>>>> >>>>> >>>>> >>>>> >>>>> >>>>> ++++++++ ++++++++ ++++++++ ++++++++ ++++++++ ++++++++ ++++++++ ++++++++ .]
19:20:27 -!- Vorpal has quit (Max SendQ exceeded).
19:21:14 -!- Vorpal has joined.
19:21:53 <fizzie> ^bf +[>>>>> >>>>> >>>>> >>>>> >>>>> >>>>> >>>>> >>>>> >>>>> >>>>> >>>>> >>>>> >>>>> >>>>> >>>>> >>>>> >>>>> >>>>> >>>>> >>>>> ++++++++ ++++++++ ++++++++ ++++++++ ++++++++ ++++++++ ++++++++ ++++++++ .]
19:21:53 <fungot> @@@@@@@@@A
19:21:58 <fizzie> (How sensibbel.)
19:22:34 -!- TanebIceCream has changed nick to Taneb.
19:22:56 <nys> which does !brainfuck need to terminate with, CR or LF?
19:24:04 <elliott> LF.
19:24:10 <elliott> No current OS uses CR to terminate lines to my knowledge.
19:24:53 <fizzie> I think I've seen a couple of CR-terminated lines in some files on that OS X iBook.
19:25:27 <elliott> fizzie: Probably Classic remnants.
19:25:50 <fizzie> Probably. It does have that funky Classic-in-a-box thing-thing.
19:31:58 -!- derdon has quit (Remote host closed the connection).
19:33:21 <Taneb> + is defined
19:33:22 <Taneb> S(BC(B(CI)(B(SB)(CIK))))(CI(KI))
19:33:42 <Taneb> - will likely be substantially longer
19:34:44 <cheater> /topic “Haskell is compiled from .hs-files which means HOMO SEXUAL” ~ Oscar Wilde on Haskell
19:35:10 <elliott> no
19:35:18 <Taneb> But then again, Oscar Wilde would say that, wouldn't he?
19:35:39 <Taneb> ...So would Uncyclopedia
19:36:37 -!- KingOfKarlsruhe has quit (Quit: ChatZilla 0.9.87 [Firefox 6.0.1/20110830092941]).
19:46:27 <cheater> yes Taneb, he very much would.
19:49:22 <nys> !bf_textgen hi
19:49:32 <nys> !bf_txtgen hi
19:49:36 <EgoBot> ​41 ++++++++[>+++++++++++++>+>><<<<-]>.+.>++. [145]
19:50:06 <quintopia> wow
19:50:15 <nys> !bf_txtgen [>+++++++++++++>+>><<<<-]>.+.>++.
19:50:17 <EgoBot> ​154 +++++++++++++++[>++++++>++++>+++>+++<<<<-]>+.>++.>--...>--.<..>..<...>..<<.>.<..--....>++.<<++.>++.>+.>.+++.<<.>---..>.<---------------------------------. [807]
19:50:35 <quintopia> thats the most obvious bad txtgen output i've seen in a while
19:51:13 <Taneb> Well, - will have to wait
19:51:14 <quintopia> at the very least there should be a postprocessor that repeatedly removes >< and <> and +- and -+
19:52:14 <nys> !brainfuck ++++++++[>+++++++++++++>+>><<<<-]>.+.>++.
19:52:31 <fizzie> It will never create +- or -+ or <>; only ><.
19:52:51 <Taneb> ^bf ++++++++[>+++++++++++++>+>><<<<-]>.+.>++.
19:52:51 <fungot> hi.
19:52:57 <quintopia> fizzie: how do you know?
19:53:26 <fizzie> quintopia: Well, I'm... reasonably certain. It has a rather limited form that all the programs it generates will take.
19:53:40 <quintopia> enlighten me?
19:53:47 <nys> !brainfuck +++++++++[>++++++++++<-]>.++++.++++.[-]<++++[>++++++++<-]>.+++++++++++........+++++++++++++++[>++++++>++++>+++>+++<<<<-]>+.>++.>--...>--.<..>..<...>..<<.>.<..--....>++.<<++.>++.>+.>.+++.<<.>---..>.<------------ ---------------------.[-]++++++++++.
19:54:09 <Taneb> ^bf +++++++++[>++++++++++<-]>.++++.++++.[-]<++++[>++++++++<-]>.+++++++++++........+++++++++++++++[>++++++>++++>+++>+++<<<<-]>+.>++.>--...>--.<..>..<...>..<<.>.<..--....>++.<<++.>++.>+.>.+++.<<.>---..>.<------------ ---------------------.[-]++++++++++.
19:54:09 <fungot> Z^b ++++++++]ꬬ_꯬ꬬ.
19:54:13 -!- TeruFSX2 has joined.
19:54:23 <nys> whoa
19:55:12 <fizzie> quintopia: Well, it's always (with the current settings) +{n}[>+{i1}>+{i2}>+{i3}>+{i4}<<<<] and then a sequence of "move to spot, optionally a series of +'s or -'s (but not both), and a .".
19:56:04 <fizzie> Uh, and the one - in the loop, of course.
19:59:24 <quintopia> aha. a reasonable format, although it will result in needlessly long programs in some cases (like when four different memory cells are not needed). also, why does it print a . when a . was not input? is it trying to print the newline character?
19:59:32 <elliott> yes
19:59:35 <elliott> and succeeding
19:59:36 <Taneb> brb
20:00:35 <quintopia> lame
20:01:34 <quintopia> someone make a flag for bf_txtgen that includes the newline so it can leave it out by default >.>
20:03:53 <fizzie> The underlying Java proggie can take the number of cells as a command line argument.
20:04:47 <quintopia> but the ego command cant?
20:06:54 <Taneb> I'm tired of combinatory brainfuck
20:07:08 <Taneb> I'm going to work some more on Van Doesburg
20:10:08 <fizzie> I don't think the bot-command can.
20:10:15 <fizzie> !bf_txtgen -t 2 hi
20:10:17 <EgoBot> ​83 +++++++++[>+++++>++++>+++++++++++++>+<<<<-]>.>>-.<----.<+++++.>.>------------.+.>+. [222]
20:10:26 <fizzie> Yes, that doesn't look so good.
20:13:26 -!- pumpkin has joined.
20:15:13 -!- copumpkin has quit (Ping timeout: 260 seconds).
20:41:17 -!- quintopia has quit (Quit: Lost terminal).
20:41:25 -!- quintopia has joined.
20:41:26 -!- quintopia has quit (Changing host).
20:41:26 -!- quintopia has joined.
20:43:46 <CakeProphet> :o
20:44:02 -!- zzo38 has joined.
20:45:36 <Taneb> I was dissapointed with Inception
20:45:41 <Taneb> It was too easy to understand
20:45:58 <Taneb> Maybe if I hadn't read house of leaves first...
20:46:57 <Gregor> elliott: I might agree with your complaints about my file naming for the Plof language definitions, if only to avoid having a file named plof/plof.plof ...
20:47:26 <Taneb> I think someone has the email dot@dotat.at
20:48:14 <elliott> Gregor: X-D
20:48:22 <elliott> Gregor: Plof's implementation should toooootally be a single file.
20:48:31 <elliott> Gregor: P.S. are you incorporating all my objectively correct improvements
20:48:54 <Gregor> Many if not most of your improvements had been adopted into Plof 3 ...
20:49:45 <zzo38> I generally prefer to separate the various parts of a program into chapters instead of into separate files, although in some cases it is useful to separate the files such as having one file for the back-end and one file for the front-end, so that you can combine different back-ends with different front-ends.
20:52:00 -!- monqy has joined.
20:52:02 <Gregor> elliott: The "logic" that ended up with that name was this: The file that defined the base grammar of PUL (then the Plof User Language) was called pul_g.plof. Plof is now only the user language, as PSL and the PRP are replaced by Fythe, so the name "PUL" is no longer meaningful. That changed it to plof_g.plof, but the long-since-silly reasons I had for separating the grammar from the definitions don't make /any/ sense when there's also a transformation/macro la
20:52:03 <Gregor> yer, so I dropped the _g and combined it with pul.plof. Leaving ... plof.plof.
20:52:43 <elliott> Gregor: plof/initial-syntax.fythe
20:52:47 <elliott> Or plof/bootstrap.fythe
20:52:49 <elliott> Or SOMETHING :P
20:52:55 <Gregor> I was thinkin' base.fythe
20:52:56 -!- augur has joined.
20:53:29 <elliott> So how about them improvements eh eh eh
20:53:43 <Gregor> The problem beyond that file is that while the base is obviously in Fythe, it's not clear at which point it's officially "written in Plof"
20:53:50 <Gregor> So when to change from .fythe to .plof.
20:54:06 <Gregor> That's why I was just going to drag .plof all the way back, since it's not like .fythe is particularly meaningful anyway.
20:54:10 <zzo38> Maybe there is no such point?
20:54:50 <elliott> Gregor: Go to .plof whenever your whole file isn't a fythe {} block :P
20:54:55 <Gregor> zzo38: Exactly >_>
20:55:05 <Gregor> elliott: OK, base.plof it is.
20:55:13 <elliott> Gregor: What's outside of a fythe {} block in base.plof
20:55:20 <Gregor> The grammar and transforms.
20:55:22 <Taneb> Plof looks interesting, I would like to learn i
20:55:23 <Taneb> t
20:55:34 <Gregor> Taneb: Learn the JOY THAT IS FYTHE!
20:55:43 <Gregor> Or, y'know, not :P
20:55:46 <elliott> Gregor: OK, anything that isn't in a "compilershit {}" block
20:56:12 <Gregor> elliott: I /believe/ (but haven't gotten far enough to confirm) that that would leave only base.fythe and objects.fythe.
20:56:45 <elliott> Gregor: Plof four has no stdlib?
20:56:46 <elliott> Awesome.
20:56:56 <Gregor> elliott: The stdlib is mostly implemented in Plof.
20:57:02 <elliott> Yes, so those are .plof
20:57:19 <Gregor> By "leave only" I meant "leave the only ones named .fythe as"
20:57:26 <elliott> Well, what's wrong with tthat then
20:57:31 <Gregor> Nothing :P
20:57:33 <elliott> They're bootstrapping Fythe into a language
20:57:41 <elliott> Gregor: I suspect base.fythe will grow enough that you'll want to split it up
20:58:00 <Gregor> elliott: For the time being I'm modeling it directly on Plof 3.
20:58:15 <Gregor> $ wc -l pul_g.plof pul.plof
20:58:15 <Gregor> 608 pul_g.plof
20:58:15 <Gregor> 512 pul.plof
20:58:15 <Gregor> 1120 total
20:58:21 <Gregor> And Fythe, unlike PSL, isn't shit.
20:58:25 <Gregor> So it'll be like 1/10th the size :P
20:58:27 <elliott> WITH ALL MY AWESOME IMPROVEMENTS OBVIOUSLY (<---- literally best language designer)
20:58:40 <Gregor> You already killed all my semicolons :P
20:58:41 <elliott> Gregor: Was PSL even designed :P
20:58:46 <monqy> litteraly
20:59:10 <elliott> And I was referring to the totally awesome change to call-by-name so that conditionals look normal and the PURE GENIUS of using infix => for function construction to make that work with {} too
20:59:11 <elliott> UTTER
20:59:11 <elliott> GENIUS
21:00:51 <Gregor> Call-by-name works great for if and while, but gets kinda grotty for ... y'know, all other functions.
21:01:15 <ais523> Gregor: you can make it into call-by-value for individual arguments, though
21:01:18 <elliott> Gregor: That's why the normal function syntax, i.e. =>, makes it call-by-value :P
21:01:33 <elliott> Maybe with some prefix for an argument name to say "don't evaluate", or just defining if and while in an ugly manner, 's all good
21:01:41 <elliott> And it avoids hideous () for blocks :P
21:01:42 <ais523> most call-by-name functions have sugar for "call-by-valuise this variable"
21:01:55 <ais523> which in practice is just a case of assigning it to a temporary variable
21:01:59 <elliott> I'm not suggesting you make the "user" language call-by-name in practice which is insane :P
21:02:04 <Gregor> Sure sure.
21:02:04 <elliott> s/which is/, that's/
21:02:28 <Gregor> Incidentally, none of that fixes the ()-for-block thing, that's just an issue of syntax :P
21:02:44 <elliott> Well, it fixes it ELEGANTLY
21:02:47 <ais523> elliott: is it wrong that I normally write C (or previously C++ before I understood what it was) in a single file?
21:02:50 <elliott> By making () <=> {}
21:03:03 <elliott> ais523: Files are a broken abstraction mechanism, so not really
21:03:07 <ais523> I once split a C++ file into four separate files arbitrarily (chronologically?) because it was getting large, but I forget why
21:03:16 <Gregor> elliott: But making () equivalent to {} fixes it regardless of call by name.
21:03:34 <elliott> Gregor: Yes, but then it's unclear how to define functions without just making up a new kind of awful bracket...
21:03:39 <ais523> elliott: well, at least in C++, putting things in as many separate files as possible is arguably best so that you can get dependencies right, if dependencies are shallow
21:03:49 <ais523> or all in one file to save effort for the compiler if dependencies are very intertwined
21:03:52 <zzo38> Then why do you need both () and {} if it is equivalent? Just have one kind. Later the other one can be reserved for future usage
21:03:53 <monqy> making () and {} the same sounds bad...
21:03:57 <elliott> Gregor: My point was, my call-by-name genius makes it possible to fix the ugliness of () for blocks WITHOUT doing something else equally ugly :P
21:04:09 <elliott> zzo38: Because
21:04:10 <elliott> if (condition) (
21:04:11 <elliott> ...
21:04:13 <elliott> )
21:04:14 <elliott> looks disgusting
21:04:17 <elliott> And
21:04:18 <elliott> if {condition} {
21:04:20 <elliott> ...
21:04:20 <elliott> }
21:04:23 <elliott> looks like Tcl :P
21:04:29 <Gregor> elliott: Wait ... now I'm confused, how does your solution not require a different syntax for functions?
21:04:41 <ais523> elliott: heh, in ICA I made {} the same as () together with an implicit claim that what it delimited was a command
21:04:42 <zzo38> Maybe you can have both call-by-name and call-by-value; maybe you can make it so that {} call-by-name and () call-by-value?
21:04:43 <monqy> if (condition) (...) looks fine to me
21:04:46 <ais523> as opposed to, say, a function or expression
21:04:51 <elliott> monqy: As someone who's read Plof code, it really isn't
21:04:57 <ais523> so () and {} aren't quite equivalent
21:05:03 <elliott> Gregor: Please tell me you have logs of #plof (I think it was before glogbot), so I can just help you find the days where I convinced you it was the best soltuion :P
21:05:03 <ais523> but they're close
21:05:17 <zzo38> elliott: I don't think so; unless you try to make it same as other programming language such as C or whatever ,that doesn't count
21:05:17 <ais523> {x} is (x):com
21:05:20 <Gregor> elliott: I'm not unconvinced, I'm confused.
21:05:34 <elliott> Gregor: Yeah, but I'm rapidly on the path to explaining everything again :P
21:05:36 <ais523> elliott: aha, that's it! the type is called "com" not "cmd"
21:05:42 <elliott> Oh, hmm, maybe it's in this log
21:05:43 <elliott> ais523: Ah
21:05:49 <ais523> now I can finally answer a question you asked me a while back, possibly several days ago!
21:05:55 <ais523> pity that I've forgotten what the question was ;(
21:05:57 <ais523> * :(
21:06:05 <elliott> Gregor: Anyway, you just make lambda syntax an ordinary operator.
21:06:10 <elliott> Gregor: (x,y,z) => {x+y+z}
21:06:17 <elliott> (Maybe with a "return" in there w/e)
21:06:19 <Gregor> elliott: Right, so it changes function syntax :P
21:06:22 <zzo38> I don't think if (condition) ( ... ) or if {condition} { ... } looks bad; it just looks not C.
21:06:27 <elliott> Gregor: Not reaaaaally
21:06:36 <elliott> Gregor: It's not syntax in the hard sense, it's just an operator :P
21:06:51 <elliott> That can be defined in the user language (well, apart from the actual function definition wrapper)
21:06:55 <Gregor> elliott: It's a confusing operator since there are no tuples and functions are curried :P
21:07:06 <elliott> Gregor: Uhh, we also resolved this...
21:07:15 * Gregor does a little jig
21:07:24 <monqy> forgetfulnes jig
21:07:30 <elliott> Gregor: But here's an obvious solution that might have been the resolve we worked out MONTHS AGO:
21:07:53 <elliott> Gregor: If =>'s left parameter is an "," operator, then it just becomes x=>{y=>z} where x is the LHS, y is the RHS and z is =>'s RHS
21:08:03 <elliott> Otherwise it's a one-argument lambda in the obvious sense.
21:08:08 <elliott> That was easy :P
21:08:27 <Gregor> Making => not an operator again :P
21:08:31 <elliott> Gregor: ...no?
21:08:36 <elliott> Gregor: It's a call-by-name operator.
21:08:41 <elliott> It can inspect the ASTs it gets.
21:08:55 <elliott> I mean, "for" has to do that (to split its argument into three statements), too
21:09:00 <elliott> (Well, if you want C-style for)
21:09:05 <Gregor> A call-by-name /operator/ ... yup, I guess that's exactly what it is X-D
21:09:31 <Gregor> 'for' isn't an operator, it's a statement.
21:09:39 <elliott> No, it's a function.
21:09:56 <Gregor> I thought you were referring to "C-style for" --- oh, misunderstood, cancel that.
21:09:58 <elliott> An operator is just a function called infix :P
21:10:11 <elliott> Gregor: Well, you can do "for () () () {...}" but I meant if you wanted "for (a;b;c) {...}"
21:10:17 <Taneb> What about postfix?
21:10:21 <elliott> I was just saying that you need call-by-name-with-AST-inspection not just opaque-call-by-name
21:10:28 <Gregor> In essence, these are syntactic macros. GOOD THING I'VE GOT A LANGUAGE FOR THAT!
21:10:52 <elliott> Except they're first-class citizens.
21:11:04 <elliott> Gregor: How have you managed to become stubbornly unconvinced just by FORGETTING the like two days in which you agreed it was the obvious best solution...
21:11:07 <zzo38> Is [] used for anything?
21:11:29 <Gregor> elliott: I'm stubbornly unconvinced?
21:11:33 <Gregor> zzo38: Objects, arrays.
21:11:41 <zzo38> OK
21:11:52 <elliott> Gregor: Well, "<Gregor> In essence, these are syntactic macros. GOOD THING I'VE GOT A LANGUAGE FOR THAT!" seemed like you didn't see how it was better to me
21:12:53 <elliott> Unfortunately it looks like it predates glogbot.
21:14:36 <Gregor> I have the Plof logs.
21:14:44 <elliott> I don't know what date it was :P
21:15:13 <Gregor> Before I go a'laundry'ing, an itemized list:
21:15:21 <monqy> did you say any any special words
21:16:11 <Gregor> Things I am convinced of: Call-by-name functions which just so happen to have call-by-value as the simpler and more common syntax, change to how functions are defined so that () and {} can be equivalent.
21:17:27 <Gregor> Things I don't like as it stands right now: Behavior of , operator is contingent on surrounding operators, and in fact it is rendered not an operator in some of those circumstances.
21:17:35 <Gregor> Things I hate: YOUUUUUUUUUUUUU
21:17:40 * Gregor -> laundry
21:18:08 <elliott> Gregor: That's silly... the "," operator has no inherent meaning, it's entirely dependent on context, like everything in Plof.
21:18:24 <elliott> In essence, the LHS of => is just a DSL.
21:18:27 <ais523> elliott: like "+" in Prolog?
21:18:37 <elliott> It's an argument list.
21:19:04 -!- kwertii has joined.
21:19:06 <elliott> Just like you could say (I'm not saying this is good syntax for it) in an argument list, "lazy x" makes x not be evaluated in the function body.
21:19:18 <elliott> Rather than an application of the function lazy to x.
21:19:33 <monqy> plof sounds a lot like a language i wanted to make when i was a baby. it has the syntax defined in itself, the context sensitivity, and even the () and {} being the same
21:21:26 <elliott> Do you know anything about Plof :P
21:21:30 <monqy> no
21:21:47 <monqy> i also don't know anything about the language i wanted to make when i was a baby
21:22:23 <zzo38> I do not think it make sense () and {} being the same, if they are in fact the same, that is.
21:22:30 <elliott> you've said
21:22:32 <elliott> several times
21:23:01 <monqy> I think it makes sense but it's inelegant and I dislike it :'(
21:23:09 <zzo38> If you have both () and {} the same, then make the variant where {} is instead used for chunk transclusion as in WEB and CWEB
21:24:21 <zzo38> That is, @ space and @* begins a block comment, @: ends a block comment, @{ ends a block comment if it is one but also begins a chunk definition, and { in a code is chunk transclusion. Other codes with @ (including @@) are ignored the second character so that you can use them for other things
21:24:25 <Taneb> Hmm...
21:24:42 <Taneb> A lazy interpreter rigged up to a code generator
21:25:05 <Gregor> elliott: Right, all I'm saying is that if =>'s LHS is a DSL, then => isn't exactly an operator. Which is fine :P
21:25:23 <elliott> Gregor: Well, OK, it's not an operator in the sense of that's how the user thinks about it.
21:25:28 <elliott> But it's an operator as far as Plof is concerned.
21:25:32 <Gregor> Well of course.
21:25:38 <Taneb> I believe, if lazy interpreter means what I'm trying to mean, and it is done properly, that that may approuch Turing super-completeness
21:25:59 <Gregor> Taneb: ... lol
21:26:07 <Taneb> No it wouldn't.
21:26:23 <Taneb> Never mind
21:26:28 <elliott> Gregor: I think the other main improvement I suggested was just adding quasiquotation so that writing compilation rules (and also extending the grammar by expansion in terms of equivalent, simpler syntax) wasn't terrible, but I think you already added that?
21:26:52 <elliott> Erm
21:26:53 <elliott> As in
21:26:56 <elliott> you said plof three already had it
21:27:21 <Taneb> I believe gravity is Turing Super-complete
21:27:28 <elliott> http://esolangs.org/wiki/Gravity
21:27:34 <Gregor> elliott: Yeah, it does, but it ought to be better in 4.
21:27:37 <elliott> s/Turing Super-complete/super-Turing complete/ :P
21:27:45 <elliott> Gregor: Good, because quasiquotation is the best :P
21:27:54 <elliott> Quasiquotation + pattern matching = EVERYTHING IS BEAUTIFUL
21:28:28 <Taneb> Until someone figures out the n-body problem in the infinite case
21:28:54 <Taneb> Which is unlikely
21:29:08 <Taneb> And almost certainly impossible
21:31:10 <zzo38> Which symbol does Plof use for block comments, if it has block comments at all?
21:31:21 <Taneb> That depends...
21:31:50 <Gregor> zzo38: /* ... */, ala C.
21:32:49 <elliott> Gregor: Also, object fields should totally be immutable by default :P
21:32:56 * elliott carefully ensures Gregor disregards anything he ever says in future.
21:33:01 <zzo38> OK
21:33:03 <Gregor> elliott: Yeah, that one ain't happnin' :P
21:33:15 <zzo38> And does it use // for line comments?
21:33:16 <elliott> Gregor: Psssssht, why not :P
21:33:21 <Gregor> zzo38: Yup
21:34:08 <Gregor> elliott: The notion of immutability in a language where including a script can change the entire syntax and semantics of your language is somewhat ... pointless :P
21:34:48 <elliott> Gregor: At the base level, sure, but I'm assuming at least SOME thought is given to the usability of the "default" language :P
21:35:19 <Gregor> Nope. You have to extend the language to do computation.
21:35:29 <elliott> My experience is that most variables are used immutably, apart from the case of "x = some transform on x", which is reassigning a name, not mutating an object.
21:35:41 <elliott> (Unless x is a field, but local variables are unlike fields in many ways)
21:36:35 <zzo38> Which symbols are currently used in Plof and which ones have the same purpose as in C?
21:37:08 <Gregor> Basic math, parenthesization ... ; has the same purpose but is optional ...
21:37:32 <Gregor> Aaaaaaaaaaand ... that's just about it :P
21:38:06 <zzo38> Are any of these symbols used? ` @ # \
21:38:18 <Gregor> All free.
21:38:23 <elliott> Gregor: Let's encase blocks with `...@
21:38:26 <elliott> So. Elegant.
21:38:36 <ais523> elliott: # ... |
21:38:39 <Gregor> elliott helped me transform Plof from a symbolmess to a mostly-symbolless nonmess.
21:38:44 <ais523> </underlambda>
21:38:48 <elliott> Gregor: You should probably make # a one-line comment too, to get yourself unix shebang lines
21:39:14 <Gregor> elliott: I actually have shebang as an explicit case, so even when you have no language at all you can use shebang.
21:39:27 <elliott> Gregor: Groooooooooos :P
21:39:32 <elliott> s
21:39:47 <elliott> Gregor: But yeah okay :P
21:39:48 <zzo38> No. What I was suggestion is that if the extension is .plofw intsead of .plof then it redefines {} to mean chunk transclusion and @ space and @* to introduce block comments, while @: ends a block comment and @{ ends a block comment while defining a chunk name.
21:39:50 <elliott> I like #-comments though.
21:39:57 <elliott> Gregor: I'm thinkin' we should listen to zzo38's ideas.
21:39:57 <Gregor> elliott: Well, the base parser doesn't define a top-level language, but I wanted fythecore (which adds pretty-much-vital but non-language-specific stuff to the base parser) to start with #!/usr/bin/env fythe :P
21:40:06 <elliott> Chunk transclusion would be great.
21:40:15 <zzo38> But I suggest @ to use for the purpose I described.
21:41:12 <zzo38> And perhaps, in case you like to use {} instead of (), these features rae enabled only if the extension is .plofw which also makes the start of the file a comment (enabling shebang lines as well as a "limbo" area like WEB and CWEB does).
21:41:36 -!- ive has joined.
21:41:43 <Gregor> elliott: Also, fytheplof starts with #!/usr/bin/env fythecore
21:41:50 <Gregor> elliott: So running plof runs env twice :P
21:41:58 <elliott> What the hell is fytheplof
21:42:28 <Gregor> elliott: The implementation of Plof in Fythe, which is also ln -s'd to plof even though Plof makes no sense at all if not implemented in Fythe.
21:42:49 <elliott> Gregor: I'd call Fythe part of the Plof language, dude :P
21:42:55 -!- Patashu has joined.
21:43:04 <Gregor> Yeah, I'm well aware of the fact that that particular filename is nonsense.
21:43:50 <elliott> Gregor: Also, when was Plof a symbolmess?
21:43:53 <Gregor> As was plof/plof.plof, so I guess that whole project is plagued with filenames almost as bad as nomath.js :P
21:43:58 <elliott> I don't remember it having all that many symbols.
21:44:06 <elliott> (BTW: [[]] is still the grossest thing ever)
21:44:18 <elliott> Gregor: Heeeyyy I just realised you can use [] for lists now...
21:44:19 <Gregor> elliott: Well, it was never /that/ bad, but it's so much nicer now that it seemed bad :P
21:44:43 <elliott> Gregor: "A:B" is used for inheritance, right?
21:44:47 <Gregor> elliott: Not quite, that creates an ambiguity with array-vs-index in function calls.
21:45:05 <elliott> Gregor: Er, I was talking about [] being objects
21:45:07 <elliott> ARe they not objects any more?
21:45:15 <Gregor> They are, but that's not ambiguous exactly because of A:B
21:45:20 <Gregor> [] bare is never an object.
21:45:39 <elliott> I was thinking you could just use {} for objects because it's always on the RHS of :
21:45:53 <elliott> Then [] is freed up for a purpose that doesn't involve ] lookin' all ugly at column 0 :P
21:46:14 <Gregor> Oh. Yeah, that's certainly true. But it doesn't free up bare [], because the problem with bare [] isn't objects anyway, it's function calls.
21:46:27 <elliott> Gregor: re: ambiguity... I'd just say that "foo[0]" is an index but "foo [0]" passes [0] because that's what I'd expect.
21:46:34 <elliott> Maybe this is unreasonable?
21:46:35 <Gregor> Bleh
21:46:42 <Gregor> I mean, it's technically doable, but ... bleh.
21:46:48 <elliott> Gregor: You could overload calling a list, so that foo(0) is indexing.
21:46:57 <Gregor> Hmmmmmmmmmmmmmmmm
21:47:01 <Gregor> That could work.
21:47:04 <elliott> Then you can do things like
21:47:10 <elliott> [a,b,c,d].map foo
21:47:11 <elliott> -->
21:47:17 <elliott> [foo(a), foo(b), foo(c), foo(d)]
21:47:19 <elliott> where foo is a list
21:47:23 <elliott> IT'S SLICING :'D
21:47:34 <elliott> That's actually kind of great, if you make map an operator :P
21:47:51 <elliott> [a..d]/foo <-- LITERALLY THE MOST BEAUTIFUL SLICING SYNTAX
21:48:25 <elliott> Gregor: Sometimes I can't tell whether I've had a brilliant idea or a terrible one.
21:48:25 <Gregor> I agree with all of these syntax changes except for that last one (which I don't disagree with, I just hmmmmmm with)
21:49:29 <elliott> Gregor: It has the aesthetic niceness that a function and a table are really quite alike, I think MATLAB uses f(x) to index both
21:49:49 <elliott> And being able to use a list as its indexing could be quite nice in a higher-order situation, but yeah, hmm
21:50:39 <elliott> Gregor: I'm kinda reminded of the Haskell memoised fibonacci, where you do "fib = (fibs !!) where fibs = 0 : 1 : zipWith (+) fibs (tail fibs)"... you could just say "fib = 0 : 1 : zipWith (+) fib (tail fib)"...
21:51:11 <elliott> I'm having very "hmm" thoughts about this too :P
21:52:07 <monqy> my language from when i was a baby was like that too
21:52:12 <monqy> that is a thing i remember
21:52:31 <Gregor> elliott: No, I like having lists also be functions mapping indexes to values.
21:52:48 <elliott> Then what's the hmming about
21:52:57 <Gregor> elliott: [a..d]/foo :P
21:53:12 <elliott> Gregor: Oh, well I think / is a terrible map operator :P
21:53:45 <elliott> Gregor: And if it's being used for slicing, the function should really come first, too.
21:54:15 <Gregor> Anyway, I have to think if there are any major implementation qualms with having lists also be functions.
21:54:18 <elliott> Gregor: Oh wait, you can actually get slicing as foo(a..d) trivially... because it's the obvious definition of indexing a list by a list.
21:54:55 <elliott> Gregor: Well, I'm not saying lists should literally be functions, I'm just saying that you should overload application syntax... which is usually a sign of awfulness (see C++), but if you want to subclass (yeah yeah "extend" w/e) functions you have to do that too.
21:55:01 <elliott> I guess that's literally the same thing in a way.
21:55:38 <Gregor> I'm not at all ashamed to have List be a subtype of Function >: )
21:55:59 <elliott> Gregor: Composing lists YESSSS
21:56:12 <elliott> Gregor: You do want that subtyping though, so that everything that wants a function is OK with having a list
21:56:21 <Gregor> Yes, of course.
21:56:27 <elliott> BTW is inheritance still copy-and-delegate or is it the rightful delegate now
21:56:51 <Gregor> It was lazy-copy-and-delegate :P
21:57:07 <Gregor> And right now it's in the air.
21:57:19 <elliott> Gregor: That still means you can't mess with T and have S get the changes too... not that I approve with messing with T, on moral grounds, but it feels weird.
21:57:35 <elliott> Actually fields should be immutable by default just so that you can't monkeypatch. :|
21:58:58 -!- Zuu has quit (Read error: Connection reset by peer).
21:59:15 <Gregor> The only fundamental issue with "rightful" delegation is that it's slow without inline caching, and implementing inline caching in this environment may actually be one of the circles of Hell.
21:59:18 -!- augur has quit (Remote host closed the connection).
22:00:17 <elliott> Gregor: The idst/cola/pepsi/whatever paper implemented inline caching for their ridiculously-dynamic system >:)
22:00:30 <elliott> It might even be helpful :P
22:02:10 <zzo38> Perhaps in .plofw mode, /* should just parse as the two tokens / and * instead of block comment; /* only introduces a block comment in .plof and .fythe mode instead.
22:02:22 <elliott> Gregor: So you're implementing .plofw mode, right?
22:02:45 <zzo38> And chunk names should contain balanced {}
22:02:47 <Taneb> Oh, goodnight
22:02:55 <elliott> Taneb: hi
22:02:59 -!- Zuu has joined.
22:03:04 <zzo38> As far as I know, what I described is sufficient; tell me if it is wrong.
22:03:11 -!- Taneb has quit (Read error: Connection reset by peer).
22:04:39 -!- ais523 has quit (Remote host closed the connection).
22:09:25 <zzo38> If you implemented .plofw mode, I might wrote Plof-to-TeX program, possibly itself in Plof as well. Although, the same file format would work even if you later wrote other programs to take .plofw (or even some can take .plof file) to make printout in other format, such as LaTeX, HTML, or whatever other format you want.
22:12:03 <elliott> Gregor: Definitely not using Plof if you don't do all this
22:16:40 <zzo38> I will enter my suggestions of .plofw mode more accurately (it is still few; I am purposefully omitting many details so you can do what is best for you): If extension is .plofw then the beginning of the file is a block comment that can contain @ commands (which are usually ignored). @ commands are @ followed by another character (possibly another @); unrecognized @ commands are ignored.
22:16:44 <Gregor> elliott: Considering that you're quite likely not to use Plof /anyway/, my answer is *eh* :P
22:17:08 <zzo38> In .plofw mode, /* no longer begins a block comment, but is the two tokens / * (ignore this line if you want to).
22:17:18 -!- azaq23 has quit (Read error: Operation timed out).
22:17:20 <zzo38> The command @ space or @* begins a block comment.
22:17:25 <elliott> Gregor: Hey, I started writing that bot in earnest before I realised that Plof three was unusably broken and terrible.
22:17:40 <Gregor> zzo38: Everything you've said is implementable (although it'd be a pain since Plof's syntax is defined by essentially a BNF, so I'd need conditional productions), but accomplishes, to my knowledge, nothing that I value.
22:17:49 <zzo38> The command @: ends a block comment if you are in one, and enters unnamed chunk mode.
22:18:07 <zzo38> The command @{...} ends a block comment if you are in one, and enters named chunk mode. The ... is the chunk name.
22:18:27 <zzo38> {...} in a code in .plofw mode includes all code in the contents of all defined chunks with that name in order.
22:18:39 <zzo38> Chunk names can contain nested {}
22:18:45 <Gregor> elliott: YOU STILL HAVE NO 1-8
22:18:47 <zzo38> And that is everything.
22:19:25 <elliott> Gregor: Yup
22:19:34 * Phantom_Hoover → sleep
22:19:35 -!- Phantom_Hoover has quit (Quit: Leaving).
22:19:37 <zzo38> If the extension is *not* .plofw, then {} is the same as () like you already described before.
22:19:53 -!- nooga has quit (Ping timeout: 252 seconds).
22:20:04 * Gregor modifies Plof's syntax to /only/ use the characters [12345678!@#$%^&*]
22:20:32 <elliott> Gregor: Good
22:20:41 -!- FireFly has quit (Quit: FireFly).
22:20:44 <zzo38> Gregor: It is a pain because of BNF? Can you show me the BNF?
22:21:09 <Gregor> zzo38: Having conditional productions is a pain.
22:21:37 <zzo38> Everything I said should only be used if extension is .plofw and not used if extension is .plof or .fythe
22:21:49 <Gregor> Yes, hence conditional.
22:22:11 <zzo38> You could make the BNF separate from the rest of the parser so that you have two BNFs
22:22:23 <elliott> Gregor: Can't you just do if (...) { grammar { ... } }
22:22:37 <Gregor> elliott: Yes, then I have two grammars :P
22:22:51 <elliott> Gregor: s/grammar/whatever you do to extend the syntax jeez/
22:22:59 <Gregor> No, it's grammar {}
22:23:18 <Gregor> elliott: But if you only did a single if, then ALL files would have that syntax. To support both, you need to have two grammars.
22:23:34 <elliott> Right
22:23:40 <Gregor> But more importantly ... why?
22:23:41 <Gregor> :P
22:23:49 <elliott> Because plofw mode is the shit
22:24:46 <zzo38> Perhaps make the "grammar" command take a string argument that causes it to work only for the specified file extensions (allowing wildcards and | if you want to specify more than one)
22:24:59 <elliott> Gregor: How receptive are you to suggestions for a module system? :P
22:25:01 <zzo38> And "*" is the default.
22:25:32 <Gregor> elliott: Quite.
22:25:46 <Gregor> elliott: Considering that the current situation of "lol what's a module system" is pretty much the worst.
22:25:50 <elliott> Gregor: Yessssssss
22:25:59 <elliott> Gregor: (I am SO OPINIONATED about module systems :P)
22:26:03 <elliott> Well, not that opinionated.
22:26:18 <elliott> I hate 99 percent of existing module systems, but mostly because they don't even try :P
22:38:24 <Gregor> According to Google Correlate, JavaScript is 99% correlated with AIX.
22:39:08 <Gregor> OCaml, on the other hand, is 82% correlated with printf.
22:39:26 <elliott> Definitely.
22:39:30 <Gregor> And only 81% correlated with "gaussian"
22:40:02 <Gregor> BrainFuck contains a naughty word, and is as such not correlated with anything at all.
22:40:11 <Patashu> Oh n o
22:40:19 <Patashu> We are protect children
22:41:46 <Gregor> Programming is 99% correlated with postscript, but only 98% correlated with classical MIDI.
22:43:13 <Gregor> Patashu: Children are 90% correlated with hazards.
22:43:40 <Patashu> Children are 99% correlated with think
22:43:49 <Gregor> But only 88% correlated with "frequency wavelength"
22:44:05 <Patashu> LOL
22:44:13 <Patashu> Why is it as high as 88%?
22:44:18 <Gregor> Don't look at me :P
22:44:19 <Patashu> I think I need to see some statistics on this distribution
22:44:22 <Patashu> median, mean etc
22:44:23 <elliott> How correlated are wizards with graphs
22:44:29 <Patashu> what's the average of all correlations
22:44:35 <Gregor> "Think", of course, is 87% correlated with green poop.
22:46:52 <monqy> is anything not correlated
22:50:53 <Gregor> Wikipedia is 97% correlated with "walk through hell"
22:51:30 <Gregor> Facebook is 99% correlated with "video tube" X-D
22:51:34 <Gregor> *video tubes
22:51:45 <Gregor> Also 99% correlated with "text from computer"
22:52:19 <Gregor> It's also 99% correlated with both "porhub" and "orn hub", but not "pornhub" somehow X-P
22:52:59 <elliott> a hub for my orns
22:53:09 <Gregor> Google is 98% correlated with ... kratom ... ???
22:53:26 <elliott> Naturally
22:53:30 -!- pumpkin has changed nick to copumpkin.
22:53:50 <elliott> Gregor: What we're learning here is that anything less than 99.9 percent correlation is nothing :P
22:53:58 <Gregor> Yup :P
22:54:01 <Gregor> Pumpkin is 97% correlated with "what is a pumpkin"
22:54:29 <Gregor> Actually the things that are seasonal tend to have semi-logical results in this.
22:54:59 <Gregor> e.g. snow -> plow, santa -> carols, christmas, etc
22:56:05 <zzo38> Rui sometimes plays the rule that no cards can be taken from trash.
22:56:16 <zzo38> Other times the rule is that all retreat costs are increased by one.
22:56:46 <zzo38> Or that resistance only subtract one instead of three.
22:57:19 <elliott> whos rui
22:57:23 <Patashu> zzo38: Is there a competitive pokemon card battling scene?
22:57:47 -!- nys has quit (Quit: quit).
22:58:41 <zzo38> Patashu: I don't know; I was playing Pokemon Card GB2. The AI is not very good. But I like the rule that decks are constructed mostly at random. Since this might cause you to have unusable evolution cards, I also make a rule allowing you to use some evolution cards that cannot be used normally.
22:59:16 <Patashu> I played the -shit- out of pokemon tcg for the game boy
22:59:27 <Patashu> I came up with decks countering different gyms and so on
22:59:56 <zzo38> Patashu: I decided to use one deck for everything instead.
23:00:43 <zzo38> The rule is: Any card that says it evolves from can be played normally, but you can also play any evolution card that is of both the correct stage and the same energy type of the card it is evolving from, as long as all cards in the stack have an actual evolution of the stage you are playing.
23:01:48 <zzo38> Patashu: I would prefer random deck mode but Pokemon Card for GameBoy does not have such a mode. Also, I was playing Pokemon Card GB2. In that game I instead used a deck per gym since different gyms have different requirements.
23:02:20 <zzo38> However at the end I played against the GR computer and Dr.Ooyama's computer, I made up a different deck using for all of that.
23:07:21 <zzo38> The deck is: 4#92L17+2L17,L26+2L38 3#96L12+2L36 124L23 150L30 21L13 35L15+D33 108L26 249L55 ENERGYREMOVAL ENERGYRETRIEVAL ENERGYSEARCH 2POTION GAMBLER ITEMFINDER CHALLENGE GUSTOFWIND FULLHEAL SWITCH 2POKEMONTRADER BILL MASTERBALL { dc rc } 22{ @ }
23:08:07 <zzo38> What is your opinion of this deck?
23:08:50 <zzo38> Note: { dc } = DOUBLE COLORLESS ENERGY { rc } = RECYCLE ENERGY { @ } = PSYCHIC ENERGY
23:09:03 <Patashu> It's been too long since I played the game so I don't have an opinion
23:09:25 <zzo38> Do you understand my notation? I use it to make short Pokemon card deck notation.
23:09:58 <Patashu> yes
23:10:12 <Patashu> well, almost
23:10:31 <zzo38> Any part you do not understand? Notify me if that is the case, please.
23:10:37 <Patashu> The # is a token separator? To split quantity from which pokemon it is
23:10:53 <Patashu> Or hmm
23:11:00 <zzo38> Patashu: Yes. Only at the beginning of an evolution chain though.
23:11:06 <Patashu> Oh!
23:11:08 <Patashu> I get it now
23:11:55 <zzo38> (Pokemon numbers are omitted for Stage 1 and Stage 2 cards, since they are implied)
23:12:05 <CakeProphet> double colorless green ideas sleep double curiously
23:13:34 <zzo38> I use a punctuation mark symbol for each basic energy, and a two lowercase letter code for each special energy.
23:14:15 <zzo38> Do you like to use this notation for your own decks?
23:15:13 <zzo38> Note it is a bit insufficient in some cases, but it is sufficient for all cards in Pokemon Card GB2 (however, Pokemon numbers must be specified for EEVEE evolution cards), and it can be extended to work in other cases too.
23:16:01 <zzo38> I lied about punctuation mark for each basic energy; fire is actually { M } and water is { 6 } in my notation.
23:17:24 <zzo38> { rb } = RAINBOW ENERGY { po } = POTION ENERGY { fh } = FULL HEAL ENERGY
23:19:42 <zzo38> If the Stage 1 card is skipped, you can put ++ and the notation still works if you omit the corresponding Basic Pokemon card for some reason.
23:22:59 <zzo38> Do you think RECYCLE ENERGY is a very useful card? I think so.
23:24:19 <zzo38> What should I call it if I make up the new kind of Haskell preprocessor program?
23:26:07 <CakeProphet> so I'm not entirely sure how rsync -z compresses shit
23:26:15 <CakeProphet> because the output directories do not appear to be compressed in any way.
23:26:28 <CakeProphet> maybe it's compress for transfer over ssh?
23:27:09 <CakeProphet> oh, yes it is.
23:27:11 <CakeProphet> lame.
23:27:11 <elliott> it compresses over the transfer.
23:27:13 <elliott> it's not just ssh.
23:27:16 <elliott> rsync:// protocol too.
23:27:23 <elliott> you want to use -z, it helps immensely
23:27:37 <CakeProphet> I'm transferring locally though.
23:27:38 <elliott> (if you're doing it over a network)
23:27:41 <elliott> k then
23:27:53 <CakeProphet> so it's a waste of time or it ignores the option I hope, yes?
23:28:48 <elliott> no point to use -z for local transfer.
23:29:28 <zzo38> I realized by idea about Huffman Sokoban is similar to the fax encoding.
23:32:17 <CakeProphet> sudo link scripts/backup_files.sh /etc/cron.daily/backup_files.sh
23:32:17 <CakeProphet> link: cannot create link `/etc/cron.daily/backup_files.sh' to `scripts/backup_files.sh': Invalid cross-device link
23:32:20 <CakeProphet> wat
23:32:24 <CakeProphet> is /etc another device? :P
23:36:11 <elliott> ls -lh /etc/cron.daily/backup_files.sh
23:36:12 <elliott> df
23:36:37 -!- cchackermirc has quit (Read error: Connection reset by peer).
23:36:55 <CakeProphet> -rwxr-xr-x 1 root root 360 2011-09-04 19:33 /etc/cron.daily/backup_files.sh
23:37:02 <CakeProphet> NICE TRY ELLIOTT BY DF ISN'T IN BIN
23:37:30 <elliott> What?
23:37:37 <CakeProphet> lol nothing
23:37:41 <elliott> I'm telling you to run the df command.
23:37:49 <CakeProphet> NEVERMIND
23:38:01 * CakeProphet is so good at jokes it's ridiculous.
23:38:31 <CakeProphet> ah well /home is encryptfs
23:38:35 <CakeProphet> so that might be why.
23:40:17 <elliott> Tada.
23:40:25 <elliott> CakeProphet: Why do you want a hardlink anyway
23:40:40 <CakeProphet> so I don't have to copy it over everytime I change the original.
23:40:55 <CakeProphet> which has been more often than I thought it would be.
23:40:57 <elliott> CakeProphet: Do you really not know what soft links are
23:41:13 <CakeProphet> oh, I thought link did soft links. :P
23:41:14 <elliott> Especially since a hard link won't even achieve that
23:41:21 <elliott> CakeProphet: man link, man ln
23:42:34 <CakeProphet> I see.
23:42:56 <CakeProphet> elliott: but no, I have not been using linux out of the womb
23:43:01 <CakeProphet> so there are many things that are new to me.
23:43:20 <tiffany> I've been using linux for a few years now
23:43:22 <elliott> symlinks are like day two material?
23:43:31 <tiffany> ... :s
23:43:36 <tiffany> I didn't learn about symlinks for a long time
23:43:37 <CakeProphet> I knew what they are but not how to set them up with sh since I stuck to UI for a while.
23:43:58 <elliott> Wow, Nautilus really does let you make symlinks.
23:44:05 <CakeProphet> of course it does.
23:44:27 <elliott> I would expect GNOME to have its own stupid file aliasing mechanism
23:44:28 <tiffany> I, for the longest time, confused the arguments in ln -s
23:44:48 <tiffany> ... nautilus's .desktop file generator was broken last I used it
23:45:43 <CakeProphet> weeeeeeee symbolic links.
23:45:58 * CakeProphet is clearly on his way to being a pro sysadmin
23:45:58 <monqy> wee
23:46:11 <elliott> Symbolic links are kind of terrible
23:46:27 <CakeProphet> they are a tool for great laziness I am happy face.
23:46:38 <monqy> ok
23:46:39 <Patashu> http://tasvideos.org/forum/viewtopic.php?t=11736&highlight=&sid=9517477d993e2ad65a6eb9ee18d6f5b4 Stop stop! Stop stop stop!
23:47:01 <elliott> CakeProphet: Bind mounts have much nicer semantics.
23:47:07 <elliott> Patashu: what
23:47:17 <CakeProphet> I have no idea what that is.
23:47:18 <Patashu> Watch it
23:47:20 <Patashu> It's only one minute
23:47:33 <elliott> in a minute
23:47:36 <elliott> and it's five minutes here
23:47:39 <elliott> six, really
23:48:13 <Patashu> the remaining 5 minutes is credits
23:48:20 <Patashu> because TAS encodes have to include the credits if there are any
23:48:22 <CakeProphet> elliott is lives in a field of anti-time-dilation.
23:48:24 <Patashu> (though sometimes they don't)
23:48:45 <elliott> CakeProphet: http://plan9.bell-labs.com/magic/man2html/2/bind... Linux has bind mounts nowdays but they're too limited
23:48:53 <elliott> Oh, wait
23:48:54 <elliott> CakeProphet: http://plan9.bell-labs.com/magic/man2html/1/bind
23:49:00 <elliott> That's a more reasonable introduction
23:49:18 <CakeProphet> elliott: so symlinks are bad because programs occasionally have problems with them, right
23:49:22 <CakeProphet> or is there something else?
23:49:37 <elliott> CakeProphet: Something else; basically ".." doesn't mean what you think it does in the presence of symlinks
23:49:41 <elliott> Lemme get you the thing on it
23:49:52 <elliott> (The short paper the plan 9 folks wrote about it)
23:50:11 <CakeProphet> whaaaa
23:50:16 <elliott> CakeProphet: Gimme a minute
23:50:30 <CakeProphet> THERE ARE ONLY SO MANY MINUTES ELLIOTT
23:50:33 <CakeProphet> you cannot have them all.
23:51:18 <elliott> CakeProphet: http://doc.cat-v.org/plan_9/4th_edition/papers/lexnames
23:52:07 <elliott> (Found http://harmful.cat-v.org/software/symlinks when trying to find it amidst the ball of mostly-yawn-inducing gunk that is cat-v; it's rather less descriptive but describes the essential problem concisely)
23:53:21 -!- MDude has quit (Ping timeout: 240 seconds).
23:54:20 <CakeProphet> ah I see.
23:57:02 <CakeProphet> but symlink files don't have that particular problem.
23:57:18 <elliott> Personally fuck foreach loops and vars.
23:57:19 <elliott> I despise both of them, boxing nightmares and they make code unreadable (well vars do).
23:57:19 <elliott> I don't see the benifit of using foreachs they are harder to read, harder to debug, cannot remove elements of a collection within them when iterating that collection.
23:57:36 <CakeProphet> ...wat
23:57:42 <Patashu> is that you or a quote
23:57:49 <elliott> Patashu: if I ever say something stupid, it's a quote
23:57:53 <Patashu> o
23:57:53 <elliott> especially if i type three lines in one second
23:58:06 <Patashu> but seriously what's a good idiom for removing elements of a collection you're iterating over
23:58:17 <CakeProphet> filter
23:58:21 <Patashu> oh
23:58:30 <elliott> Patashu: don't do it
23:58:39 <Patashu> elliot: why not :'(
23:58:48 <CakeProphet> Patashu: that won't be an in-place operation though. Which is probably what you meant.
23:58:50 <elliott> but yeah, filter
23:58:56 <elliott> it can be in-place
23:59:02 <elliott> "RemoveIf" or whatever stupid name you want
23:59:48 <CakeProphet> yeah foreach is definitely harder to debug than a C for
23:59:54 <CakeProphet> so many places you can fuck it up
2011-09-05
00:00:25 <CakeProphet> like you might misspell the variable name.
00:00:28 <CakeProphet> or the list name.
00:00:30 <CakeProphet> or uh....
00:00:34 <CakeProphet> well, that's it.
00:00:55 <Patashu> there could potentially be fuckups from the order of iteration not being what you expect
00:00:59 <Patashu> if your foreach is REALLY impure
00:01:17 <CakeProphet> hmmm?
00:01:28 <CakeProphet> I thought iteration was pretty straightforward, literally.
00:01:59 <Patashu> if it's iterating over a hashset or something
00:02:01 <CakeProphet> PHP does have a back() method for iterators, and Ruby and Perl have redo which repeats that iteration
00:02:01 <Patashu> then the order's arbitrary
00:02:26 <CakeProphet> c++ has -- which is like PHP back
00:03:14 * CakeProphet has never really found iterating over unordered collections to be a problem.
00:03:22 <CakeProphet> mainly because I never treat them as ordered.
00:03:33 <CakeProphet> if you treat them as ordered, then yeah, you might have some problems.
00:05:17 <CakeProphet> but again, not a problem with foreach
00:05:31 <CakeProphet> a problem with the data type not matching the problem (or a problem with a bad programmer :P )
00:05:33 <Patashu> hmm
00:05:36 <Patashu> if you insert during a foreach
00:05:41 <Patashu> will it iterate over the new entries?
00:05:49 <Patashu> or does that not work either
00:05:50 <CakeProphet> not in Python
00:05:53 <CakeProphet> depends on the language.
00:06:00 <Patashu> that's a potential gotcha
00:06:03 <CakeProphet> and the iterator
00:06:19 <CakeProphet> you just really should not be mutating what you're iterating over unless you're using C++ and like pain and stuff.
00:06:45 <Patashu> what I want is addWhenFinished() and deleteWhenFinished()
00:06:50 <Patashu> that wait for the container to not be iterated over anymore
00:07:03 <CakeProphet> well in Python you can do...
00:07:06 <CakeProphet> appendlist = []
00:07:08 <Patashu> or make it so that the iterator doesn't see the changes
00:07:13 <CakeProphet> then appendlist.append(somethingIWanttoAdd)
00:07:15 <CakeProphet> then after the loop
00:07:20 <CakeProphet> originalList.extend(appendList)
00:07:25 <Patashu> yeah, that's how I do it right now
00:08:01 <CakeProphet> class PatashuList(list): def addWhenFinished (...): ...
00:08:09 <elliott> <Patashu> hmm
00:08:10 <elliott> <Patashu> if you insert during a foreach
00:08:10 <elliott> <Patashu> will it iterate over the new entries?
00:08:15 <elliott> mutating something while you iterate over it = lol lol lol
00:08:17 <elliott> never do it ever
00:08:22 <elliott> actually never mutate anything ever
00:08:38 <Patashu> never mutate anything
00:08:40 <Patashu> fuck breeders
00:08:48 <CakeProphet> yes always write clean functional code, even when using libraries that mutate.
00:09:04 * CakeProphet never mutates anything in Perl. it's quite a challenge.
00:10:17 <CakeProphet> instead of using push elem list I do (list, elem)
00:10:20 <elliott> CakeProphet: those libraries probably suck
00:10:26 <Patashu> lisperlisperlisperl
00:10:33 <elliott> lisp isn't a functional language
00:10:37 <CakeProphet> elliott: yes, they're probably written in something that isn't Haskell.
00:10:42 <Patashu> fffff
00:10:54 <elliott> haskell isn't that good, everything else is just worse
00:11:49 * CakeProphet writes all of his programs in a fantasy world where he doesn't have to worry about communicating with not-perfectly written software.
00:12:44 <tiffany> o.o
00:12:47 <monqy> hi
00:12:48 <elliott> you can do that from within a nice language, anyway plenty of users of crappy OOP languages use a functional style
00:12:55 <CakeProphet> hey like me.
00:12:58 <CakeProphet> when I can.
00:13:03 <elliott> tons of style guides come down to that in essence
00:13:40 <CakeProphet> Java makes functional programming look bad.
00:15:38 <elliott> Not any worse than it makes Java.
00:16:07 <CakeProphet> one reason I don't completely hate C# is that it at least made it possible to write in a functional style.
00:16:44 -!- oerjan has joined.
00:17:06 <elliott> hi oerjan
00:17:14 * oerjan hides in the corner
00:17:16 <oerjan> i mean hi
00:17:19 <CakeProphet> but the functional stuff is rarely used in most code I've seen. I'm sure it's used.
00:17:36 <elliott> have you read any good code
00:17:39 <CakeProphet> but not as much as, say, languages like Ruby. Where functional style is central to many common idioms.
00:17:42 <CakeProphet> elliott: in C#? no.
00:18:08 <elliott> well then
00:18:13 <elliott> and no, most Ruby code is not even vaguely functional.
00:19:02 <CakeProphet> I was referring to things like the foreach method.
00:19:11 <CakeProphet> AT LEAST they're using higher-order functions.
00:19:21 <elliott> that's not functional :P
00:19:42 <CakeProphet> it is a degree of functional programming above most languages' idioms.
00:19:44 <Patashu> lambdas, linq and the ienumerable methods aren't functional but I <3 them anyway
00:19:48 <monqy> doesn't foreach require side effects to get anything done or something like that
00:20:01 <CakeProphet> okay guys side effects have been around for a while.
00:20:10 <CakeProphet> Lisp uses side effects. Lisp is functional right?
00:20:11 <elliott> Patashu: linq is functional
00:20:16 <elliott> Patashu: linq is literally just list comprehensions
00:20:16 <Gregor> One of these days I'm going to make a language where _ is not a valid identifier character, just to enforce a modicum of consistency in variable naming :P
00:20:18 <Patashu> I thought it was declarative
00:20:19 <monqy> 17:12:16 < elliott> lisp isn't a functional language
00:20:20 <Patashu> oh
00:20:21 <Patashu> hmmm yeah
00:20:24 <CakeProphet> or are you guys going to take the most strict, pure definition of functional to be the only functional programming.
00:20:37 <elliott> Gregor: Allow - in identifiers; everyone will immediately be very happy because that's the only damn convention that makes any sense
00:20:50 <CakeProphet> except when they want to subtract.
00:20:55 <CakeProphet> then they will be very confused.
00:21:07 <elliott> CakeProphet: As we all know, languages never depend on whitespace ever. This is why all good languages treat "9 9" identically to "99".
00:21:29 <CakeProphet> a-b-c-d-e - 1-2-3-4-5-6
00:21:32 <Patashu> I want a languate where vertical tabs are treated significantly
00:21:39 <elliott> "MAN I AM SO CONFUSED ABOUT SUBTRACTION???" -- every Dylan and Perl 6 user, two languages with - in identifiers and infix subtraction
00:21:43 <elliott> Oh wait no nobody has ever really said that ever.
00:21:50 <monqy> CakeProphet: a-b-c-d-e is an identifier, - is an identifier, 1-2-3-4-5-6 is an identifier
00:21:58 <Gregor> elliott: All four of them?
00:21:59 <elliott> monqy: The last should probably just be a syntax error
00:22:10 <elliott> Starting identifiers with digits is silly
00:22:14 <monqy> that works too
00:22:17 <elliott> CakeProphet: But hey, you can write obfuscated code in any language
00:22:21 <elliott> Turns out I don't name my variables a-b-c-d-e
00:22:30 <CakeProphet> elliott: right but Perl disambiguates identifiers with $ so it is less of an issue.
00:22:41 <CakeProphet> still making whitespace significant in that sense is kind of bad sounding to me.
00:22:45 <elliott> Gregor: Dylan had a pretty big userbase at one point, I believe.
00:22:53 <Gregor> Twelve?
00:22:56 <Gregor> Fourteen?
00:22:57 <elliott> CakeProphet: So your languages really do treat "9 9" and "99" identically?
00:23:02 <CakeProphet> not at all.
00:23:05 <elliott> Gregor: It's not even funny :P
00:23:07 <CakeProphet> that's a different case.
00:23:12 <monqy> CakeProphet: no it isn't
00:23:12 <elliott> OH MAN THIS LANGUAGE IS UNPOPULAR WEIRD
00:23:18 <elliott> CakeProphet: nope
00:24:00 <CakeProphet> a-9 could be a valid identifier.
00:24:02 <CakeProphet> which is stupid.
00:24:11 <monqy> no it isn't
00:24:17 <elliott> CakeProphet: You. Can. Write. Obfuscated. Code. In. Any. Language.
00:24:24 <CakeProphet> that's not what I'm getting at even
00:24:33 <monqy> pafdglajdngladjrflagdjgolia is a valid identifier. who made this retarded language i want to kill his guts
00:24:42 <zzo38> In LLVM, identifiers start with symbol to tell you what it is such as % and @
00:24:48 <zzo38> In Forth, names can contain anything other than spaces
00:24:54 <elliott> film-from-the-1950s ;; OH MAN THIS IDENTIFIER IS SO CONFUSING CakeProphet WHAT DID I DO
00:25:21 <CakeProphet> I'm just saying it's silly to require a special case where subtraction is only subtraction if there's a space
00:25:27 <monqy> CakeProphet: btw pafdglajdngladjrflagdjgolia is better than wacro
00:25:29 <Gregor> Wow, did I seriously start this ridiculous discussion with a joke about camelCaseVariableNames?
00:25:40 <elliott> foreach good-film in good-films {
00:25:40 <elliott> if user.rating-of(good-film) > 99 {
00:25:40 <elliott> print 99 - user.rating-of(good-film)
00:25:40 <elliott> } else {
00:25:40 <elliott> print "IT'S TOO LOW"
00:25:41 <elliott> }
00:25:43 <elliott> }
00:25:46 <elliott> help CakeProphet it;s too obfuscated
00:25:57 <monqy> CakeProphet: it's not a special case
00:25:58 <elliott> Gregor: No, CakeProphet did
00:26:02 <CakeProphet> ....it has nothing to do with obfuscation
00:26:16 <CakeProphet> it's the fact that I cant write 99-user.rating-of(good-film) without some ambiguity.
00:26:22 <monqy> CakeProphet: f is only f if it's not smashed up against more letters
00:26:27 <elliott> hey CakeProphet
00:26:28 <CakeProphet> yes I understand the rules.
00:26:30 <elliott> I have this program
00:26:30 <elliott> {{
00:26:32 <elliott> print 99
00:26:34 <Patashu> what's wrong with using _ in identifiers?
00:26:34 <myndzi> !bf_txtgen the quick brown fox jumps over lazy dogs
00:26:35 <elliott> -99 > 0 or die
00:26:36 <EgoBot> ​285 +++++++++++++++[>++>++++++++>+++++++>+++++++<<<<-]>>----.>-.---.<<++.>---.++++.>>.<--.>++.<<<.>>-.<---.>+++++++++++++.++++++++.<----.<.>>>-----.<<+.>+.<<.>-----.>---.<+++.+++.+++.<.>----.>+.>-.<<+++.<.>------.>>----.<++++.-.<<.>>>+++.<----------.>+++.<<+++++++.<----------------------. [919]
00:26:38 <elliott> print "hello world"
00:26:38 <elliott> }}
00:26:45 <elliott> <elliott> {{
00:26:45 <elliott> <elliott> print 99
00:26:45 <elliott> <elliott> -99 > 0 or die
00:26:47 <elliott> <elliott> print "hello world"
00:26:47 <elliott> <elliott> }}
00:26:48 <elliott> CakeProphet: But dude
00:26:50 <elliott> when I write it as
00:26:50 <CakeProphet> ijay,
00:26:54 <elliott> print99-99>0ordieprint"helloworld"
00:26:57 <elliott> It doesn't work the same???
00:27:02 <elliott> It's gross that we have this special case
00:27:05 <elliott> Where in strings, whitespace matters
00:27:07 <elliott> And in numbers
00:27:09 <elliott> But outside, it doesn't
00:27:09 <myndzi> what's the number at the end
00:27:09 <CakeProphet> that is, again, different.
00:27:10 <elliott> This is so
00:27:11 <elliott> gross
00:27:14 <myndzi> !bf +++++++++++++++[>++>++++++++>+++++++>+++++++<<<<-]>>----.>-.---.<<++.>---.++++.>>.<--.>++.<<<.>>-.<---.>+++++++++++++.++++++++.<----.<.>>>-----.<<+.>+.<<.>-----.>---.<+++.+++.+++.<.>----.>+.>-.<<+++.<.>------.>>----.<++++.-.<<.>>>+++.<----------.>+++.<<+++++++.<----------------------.
00:27:14 <EgoBot> the quick brown fox jumps over lazy dogs
00:27:18 <elliott> myndzi: generations
00:27:23 <Gregor> *yawn*
00:27:28 <elliott> CakeProphet: It really isn't different at all, you're just used to one and not the other
00:27:33 <CakeProphet> obviously you can't smash letters up to each other and expect the program to work the same. but - is also a subtraction operator.
00:27:36 <myndzi> ah, my method isn't all that much smaller
00:27:39 <CakeProphet> (waits for x operator in Perl :P )
00:27:45 <myndzi> but it's adjustable!
00:27:46 <monqy> CakeProphet: what makes - different than any other identifier character
00:27:54 <myndzi> hehe
00:27:56 <CakeProphet> it is also an operator.
00:27:59 <CakeProphet> whereas a-z is not.
00:28:02 <CakeProphet> or 0-9
00:28:11 <myndzi> also i didn't exactly optimize the initialization much
00:28:13 <monqy> and what's so special about it being an operator?
00:28:19 <CakeProphet> forget it .
00:28:23 <Gregor> in, as, instanceof, of, and, or, ...
00:28:23 <elliott> so now that we've firmly established that CakeProphet's only "logical" reason for disliking it is because he's not used to it and IS used to other forms of significant whitespace used to separate language elements
00:28:34 <elliott> let's drop it because our point is made and he's just going to keep making a fool of himself
00:28:39 <monqy> ok
00:28:39 <elliott> also it's noisy
00:28:51 -!- zzo38 has left.
00:28:58 <CakeProphet> yeah I obviously fear change, that's it.
00:29:00 <monqy> good bye z z o
00:29:01 <Patashu> my argument? we already have _ as word separator in identifiers so we don't need - as well
00:29:18 <Gregor> Patashu: Fairly certain this was all contingent on dropping _
00:29:25 <Patashu> why? do you need _ somewhere else?
00:29:31 <elliott> Patashu: - is far nicer than _
00:29:39 <Gregor> <Gregor> One of these days I'm going to make a language where _ is not a valid identifier character, just to enforce a modicum of consistency in variable naming :P
00:29:40 <elliott> There's a reason we don't use _ to combine words in English
00:29:46 <elliott> (The reason is that it reads terribly)
00:29:46 <CakeProphet> again, very valid sensible argument for - over _
00:29:47 <CakeProphet> it's nicer.
00:29:55 <elliott> CakeProphet: Shut the fuck up, seriously
00:30:53 <monqy> in my language.... _ is an operator...... and so are capital letters......
00:30:55 <Gregor> lol
00:31:04 <Patashu> in my language vertical tab is an operator
00:31:04 <CakeProphet> but then finding something wrong with 99-abc being different from 99 - abc is stupid because I fear changing convention and stuff.
00:31:09 <elliott> is . an operator monqy
00:31:12 <elliott> CakeProphet: Shut
00:31:13 <elliott> CakeProphet: The
00:31:14 <elliott> CakeProphet: Fuck
00:31:15 <elliott> CakeProphet: Up
00:31:20 <elliott> You're just repeating yourself forever
00:31:23 <elliott> We've dropped it, so drop it
00:31:28 <CakeProphet> !perl my $x=2; print $xx2
00:31:37 <Gregor> This channel is so great :P
00:31:38 <monqy> "perl does it the right way"
00:31:41 <CakeProphet> !perl my $x=2; print $x x 2
00:31:42 <EgoBot> 22
00:31:44 <CakeProphet> no perl doesn't
00:31:45 <CakeProphet> actually
00:31:48 <monqy> ok
00:32:36 <CakeProphet> but x isn't really all that common so I don't care as much.
00:32:58 <monqy> what if you put spaces around operators like any decent person
00:33:07 <monqy> also didn't use perl
00:33:24 <CakeProphet> -shrug- preference.
00:33:31 <elliott> I would be fine with making it a syntax error not to surround operators with spaces
00:33:32 <CakeProphet> depends on the code.
00:33:38 <Patashu> x is the 'repeat a string' operator, right?
00:33:46 <Patashu> how come it doesn't overload * like ruby (I think) does?
00:34:05 <monqy> I'd be fine getting rid of infix operators (and then putting in a substitute such as not to make things awful)
00:34:05 <CakeProphet> typically speaking most languages have a defined set of operator characters and a defined set of identifier characters, and they are seperate. thus whitespace does not matter. for example, Haskell does this.
00:34:26 <monqy> haskell also has problems
00:34:28 <monqy> big problems
00:34:28 <CakeProphet> and it makes things nice and clean.
00:34:32 <monqy> it's not clean
00:34:34 <monqy> it's problems
00:34:37 <CakeProphet> yes but this is one thing it does correctly.
00:34:39 <monqy> no
00:34:51 <monqy> - is done super-incorrectly
00:35:09 <monqy> :t (- 5)
00:35:09 <lambdabot> forall a. (Num a) => a
00:35:10 <elliott> /ignore CakeProphet
00:35:12 <CakeProphet> anyways minute differences in language syntax are pretty much always in the category of preference.
00:35:16 <monqy> :t (-)
00:35:17 <lambdabot> forall a. (Num a) => a -> a -> a
00:35:37 <Patashu> EXPLICITLY SPECIFY ORDER OF OPERATIONS USING TREES
00:35:41 <Patashu> :lisp:
00:37:15 <CakeProphet> monqy: well it makes sense from the perspective that negative numbers shouldn't fuck up ever and it's okay to have this one case where you can't section (-) in order to preserver that.
00:37:24 <CakeProphet> but yeah it could be made better with some spacing rules, perhaps.
00:37:31 <monqy> Patashu: and they're often variadic!!!
00:37:31 <CakeProphet> (- 5) is the section and (-5) is the number.
00:37:52 <CakeProphet> since when the fuck would ever write - 5 to mean -5
00:38:12 <Patashu> you might write x - y and then decide you don't need the x and remove it
00:38:16 <Patashu> :downs:
00:38:18 <CakeProphet> heh
00:38:41 <monqy> :t - x
00:38:41 <lambdabot> Expr
00:38:50 <elliott> <CakeProphet> (- 5) is the section and (-5) is the number.
00:38:51 <elliott> oh my god
00:39:08 <CakeProphet> what are you expecting some kind of consistency from me? you should know better.
00:39:10 <elliott> THIS WHITESPACE TO DISAMBIGUATE THIS USE OF - AS AN OPERATOR VS. THIS OTHER THING IS UNACCEPTABLE IM SO CONFUSED
00:39:13 <elliott> -----
00:39:24 <elliott> LETS USE WHIETSPACE TO RESOLVE THIS AMBIGUITY OF THE USE OF - AS AN OPERATOR VS THIS OTHER THING IM SO UNCONFUSED NOW
00:39:39 <CakeProphet> again completely different but I'm not going to go into it.
00:39:59 <monqy> i'm dead thanks
00:40:00 <elliott> loooooooooooooooooooooooool
00:40:53 <Patashu> the unary vs binary - thing reminds me of time zones and daylight savings re: implementations of date/time
00:41:05 <elliott> i
00:41:42 <CakeProphet> obviously the correction choice is to have two different operators.
00:41:47 <CakeProphet> -- is negation and - is subtraction.
00:41:58 <monqy> -- is comments dumbo
00:42:03 <monqy> unary - is unnecessary, too
00:42:05 <Patashu> but then people who know math but not programming will write mynum = -1; and be like :( Y U NOT COMPILE
00:42:14 <CakeProphet> monqy: ture we could just write 1 - n everywhere
00:42:15 <monqy> :t negate
00:42:15 <lambdabot> forall a. (Num a) => a -> a
00:42:20 <CakeProphet> or negate n
00:42:24 <elliott> 0-n, you idiot
00:42:29 <Patashu> 0-1 is ugly
00:42:49 <CakeProphet> yep, it's established, I'm not perfect. :(
00:43:13 <monqy> CakeProphet: and if n is a literal, use - because - is part of the literal syntax and spaces are required around operators and the world is perfect
00:43:27 <CakeProphet> lol
00:43:52 <CakeProphet> elliott: also I'm confused is 0-n an identifier or an operation?
00:44:05 <CakeProphet> OH SNAP
00:44:07 <CakeProphet> >_>
00:44:11 * CakeProphet gets back to work.
00:44:24 <elliott> /ignore CakeProphet
00:48:18 <elliott> Deewiant: Stop spamming me with bugmail
00:48:25 <elliott> :-P
00:50:45 -!- copumpkin has quit (Ping timeout: 250 seconds).
00:51:10 -!- copumpkin has joined.
00:57:13 <Gregor> <troll>
00:57:26 <Gregor> Solution: Make - not be subtraction, it's only an identifier character. _ can be subtraction.
00:57:28 <Gregor> </troll>
00:57:35 <CakeProphet> heh
00:58:09 <elliott> Gregor: subtraction should be /
01:09:18 -!- augur has joined.
01:09:40 <oerjan> yeah no real mathematicians use / anyway, so it should be available for that
01:13:22 -!- augur has quit (Remote host closed the connection).
01:16:58 <CakeProphet> hmmm I wonder
01:17:05 <CakeProphet> surely there is a program I could write that involves links somehow
01:17:08 <CakeProphet> that I could name zelda.
01:17:21 <CakeProphet> I CAN'T PASS UP A GOOD PUN.
01:17:22 * oerjan swats CakeProphet -----###
01:17:28 <myndzi> make it a gui web browser
01:17:28 <myndzi> ;)
01:17:31 <myndzi> double pun
01:17:51 <CakeProphet> \o/
01:17:51 <myndzi> |
01:17:51 <myndzi> /'\
01:18:01 <oerjan> there it is again
01:18:14 <tiffany> what.
01:18:30 <oerjan> myndzi: plz fix misalignment bug ok thxbye
01:18:51 <tiffany> uu..
01:18:51 <CakeProphet> myndzi: also I'm not sure I catch the double pun.
01:19:09 <tiffany> I don't know how it works specifically but neat uses - as both subtraction and as a character in identifiers
01:19:59 <elliott> oerjan: i thought you used irssi
01:20:10 <oerjan> elliott: not _that_ misalignment
01:20:14 <elliott> o,
01:20:17 <elliott> what, mislaijagniment,.
01:20:20 <myndzi> links text based browser? ;)
01:20:25 <myndzi> zelda image based browser!
01:20:30 <elliott> (pronounced "miss lei jah ment")
01:20:33 <CakeProphet> oh
01:20:36 <oerjan> elliott: sometimes myndzi has an off-by-one error, see CakeProphet's above
01:20:39 <myndzi> that browses the web, which is full of [hyper]links
01:20:47 <myndzi> it's not really an off by one error
01:20:57 <myndzi> it is the fact that i can't display one text that works on all themes
01:21:06 <elliott> tiffany: i've never heard of neat
01:21:08 <oerjan> themes?
01:21:19 <myndzi> some indent for op status, some don't
01:21:26 <myndzi> some left alight nicks, some right aline them
01:21:27 <elliott> nobody's op in here
01:21:28 <myndzi> align*
01:21:29 <tiffany> I'm like... the only user of it
01:21:30 <myndzi> some truncate nicks
01:21:30 <CakeProphet> yes but that shouldn't matter.
01:21:33 <myndzi> and so on.
01:21:34 <oerjan> myndzi: there are no ops :P
01:21:35 <elliott> you assume left alignment, so that's hardly a problem
01:21:39 <myndzi> you're missing the point
01:21:47 <myndzi> all i'm saying is that stuff gets displayed differently in different contexts
01:21:48 <elliott> you make some assumptions, sure
01:21:48 <CakeProphet> in irssi for instance everyones name is indented.
01:21:52 <elliott> but you've got an off-by-one even assuming that
01:21:59 <myndzi> and i can't make one answer that works on all situations
01:21:59 <elliott> none of the factors you're talking about are present
01:22:04 <myndzi> and no i don't, the above example lines up :)
01:22:05 <oerjan> myndzi: my point is that CakeProphet's case is entirely without any complications that i can see
01:22:12 <myndzi> so if it's not lining up, there is a reason that has nothing to do with my math
01:22:13 <elliott> what mitigating factor is there, then?
01:22:15 <elliott> apart from the trivial
01:22:16 <elliott> <nick> message
01:22:19 <elliott> without indentation or anything
01:22:22 <myndzi> i don't know, show me a screenshot
01:22:24 <myndzi> or copy/paste the text
01:22:27 <myndzi> to a pastebin
01:22:30 <elliott> 01:17:51: <CakeProphet> \o/
01:22:30 <elliott> 01:17:51: <myndzi> |
01:22:30 <elliott> 01:17:51: <myndzi> /'\
01:22:30 <myndzi> |
01:22:30 <myndzi> /´\
01:22:35 <elliott> http://codu.org/logs/_esoteric/2011-09-05.txt
01:22:36 <myndzi> > to a pastebin
01:22:37 <lambdabot> Not in scope: `to'Not in scope: `pastebin'
01:22:39 <myndzi> looks fine here
01:22:42 <elliott> grep for "01:17:51"
01:22:43 <myndzi> (what you pasted)
01:22:45 <elliott> grep for "01:17:51"
01:22:46 <CakeProphet> 21:18 < CakeProphet> \o/
01:22:46 <CakeProphet> 21:18 < myndzi> |
01:22:47 <CakeProphet> 21:18 < myndzi> /'\
01:22:47 <myndzi> |
01:22:47 <myndzi> |\
01:22:54 <elliott> CakeProphet: ...
01:22:58 <elliott> I linked myndzi to the text version
01:23:10 <myndzi> the logger must be deleting a space for some reason
01:23:13 <CakeProphet> yes, I was showing how the extra space for op would not matter in my case.
01:23:15 <myndzi> perhaps because of the control codes used to align things
01:23:18 <elliott> myndzi: it isn't, because oerjan has the same problem
01:23:25 <elliott> or at least, irssi and the logger are both doing it
01:23:28 -!- ive has quit (Read error: Operation timed out).
01:23:31 <myndzi> then irssi is at fault
01:23:32 <myndzi> :)
01:23:36 <elliott> < 1315185471 65138 :CakeProphet!~adam@wikipedia/The-Prophet-Wizard-of-the-Crayon-Cake PRIVMSG #esoteric : \o/
01:23:36 <elliott> < 1315185471 473594 :myndzi!myndzi@c-67-168-184-168.hsd1.wa.comcast.net PRIVMSG #esoteric : |
01:23:36 <elliott> < 1315185471 802385 :myndzi!myndzi@c-67-168-184-168.hsd1.wa.comcast.net PRIVMSG #esoteric : /'\
01:23:39 <elliott> that's from the raw, unprocessed log
01:24:21 <CakeProphet> sexy shit
01:24:31 <elliott> myndzi: I just got it from the raw log, control codes and all
01:24:36 <elliott> converted it to <nick> message without changing a single thing
01:24:36 <myndzi> ya, one sec
01:24:40 <elliott> and it's still one column before
01:24:45 <elliott> so yeah, your script is broken :P
01:24:50 <elliott> oh, and removed the control codes but NOT a single space
01:24:55 <elliott> also you have two control codes in a row on one of the lines...
01:25:08 -!- puzzler has joined.
01:25:20 <puzzler> go ahead and paste it would you?
01:25:22 <puzzler> no scripts running here
01:25:25 <elliott> sure
01:25:27 <puzzler> too much interference on my other client
01:25:28 <elliott> <elliott> 01:17:51: <CakeProphet> \o/
01:25:29 <elliott> <elliott> 01:17:51: <myndzi> |
01:25:29 <elliott> <elliott> 01:17:51: <myndzi> /'\
01:25:29 <myndzi> |
01:25:29 <myndzi> >\
01:25:32 <puzzler> mk
01:25:58 -!- puzzler has changed nick to CakeProhpat.
01:26:10 <CakeProphet> slander
01:26:10 <elliott> prohpat :D
01:26:24 <CakeProphet> slanderererererer
01:26:34 <CakeProhpat> it's working fine for me
01:26:36 <CakeProhpat> o_O
01:26:48 <elliott> CakeProhpat: did you make sure to include the space
01:26:49 <elliott> \o/
01:26:50 <myndzi> |
01:26:50 <myndzi> >\
01:26:54 -!- CakeProphet has changed nick to THEGENUINECAKEPR.
01:26:56 <elliott> \o/
01:26:57 <myndzi> |
01:26:57 <myndzi> >\
01:26:57 <THEGENUINECAKEPR> yes.
01:26:58 <CakeProhpat> include what space
01:27:03 <CakeProhpat> oh, he put a space in front of the \o/ ?
01:27:04 <myndzi> |
01:27:04 <myndzi> |\
01:27:06 <elliott> CakeProhpat: yep
01:27:09 <CakeProhpat> well that's the problem
01:27:12 -!- CakeProhpat has changed nick to puzzler.
01:27:12 <elliott> one space at the start of the message
01:27:13 <puzzler> don't do that
01:27:14 <puzzler> ;D
01:27:16 -!- puzzler has quit (Client Quit).
01:27:21 <elliott> myndzi: good bug reaction
01:27:24 <myndzi> haha
01:27:30 <myndzi> it's not my fault, it's mirc's! ;)
01:27:31 <myndzi> one sec
01:27:33 <THEGENUINECAKEPR> \o/
01:27:33 <myndzi> |
01:27:33 <elliott> myndzi: oh is it because mirc "scripts" tend to strip at the start?
01:27:34 <myndzi> |\
01:27:35 <elliott> spaces at the start that is
01:27:44 <elliott> mirc is so gross, everyone stop using it
01:27:46 <myndzi> it's the parser's fault
01:27:52 <myndzi> but i have the tools to avoid it
01:27:54 <THEGENUINECAKEPR> irssi is better because it uses Perl scripts.
01:27:56 <myndzi> so i will
01:28:11 -!- THEGENUINECAKEPR has changed nick to CakeProphet.
01:28:28 <elliott> myndzi: hm if you just include a single space at the start without any escape stuff, then it should get stripped by only the clients that stripped the _original_ space
01:28:30 <elliott> so it'll line up everywhere
01:28:53 <CakeProphet> myndzi: rewrite in Perl and use irssi
01:29:10 <CakeProphet> best solution
01:29:24 <myndzi> elliott: clever, i may do that
01:29:38 <myndzi> first i have to find out at what stage the initial space is getting stripped
01:29:48 <myndzi> you are gonna laugh at this but
01:29:55 <myndzi> i actually have a scripted socks5 proxy that i connect through
01:30:03 <elliott> wow
01:30:03 <elliott> why
01:30:03 <myndzi> gives me some cool options
01:30:04 <myndzi> ;)
01:30:11 <myndzi> i can forge incoming text for testing
01:30:14 <elliott> dude use a better client...............................................................
01:30:18 <myndzi> or execute scripts before mirc gets them
01:30:18 <myndzi> etc.
01:30:31 <elliott> you're connecting... through a proxy... written in your irc client's... horrible scripting language... auugh
01:30:34 <elliott> oh wait
01:30:37 <elliott> scripted =/= mirc script?
01:30:40 <myndzi> oh i'm sorry, did i join #linuxzealotry?
01:30:43 <elliott> please tell me it's scripted with something else
01:30:44 <myndzi> no, it's a mirc script :)
01:30:48 <elliott> myndzi: this has nothing to do with linux :P
01:30:57 <myndzi> only linux zealots tell everyone to use irssi
01:30:57 <elliott> this is #antiterribleideaszealotry
01:31:01 <elliott> i never said irssi
01:31:02 <elliott> ever
01:31:10 <myndzi> oh, someone else did, i don't care
01:31:19 <myndzi> mirc is a fantastic client, its scripting language is horrid, but that's what makes it interesting
01:31:20 <myndzi> :P
01:31:43 <elliott> how's it fantastic, apart from the scripts which is a kind of circular argument
01:32:01 <myndzi> it's clean, responsive, and has every feature you could possibly need from an irc client
01:32:12 <myndzi> (and some i wish it didn't, but they don't get in my way)
01:32:14 <elliott> what irc clients aren't clean and responsive
01:32:19 <myndzi> xchat lol
01:32:26 <elliott> which one isn't it
01:32:33 <myndzi> irssi is fine i'm sure, if you're into the console thing
01:32:47 <myndzi> but why throw away the usefulness of windows just for an aesthetic choice?
01:32:51 <elliott> thats not an answer :P
01:32:58 <elliott> i dunno what's aesthetic about using irssi though but
01:33:03 <myndzi> nah, i mean
01:33:14 <myndzi> some people use console irc clients because they like the console aesthetic
01:33:22 <myndzi> hell, people have even written mirc scripts to emulate them
01:33:25 <myndzi> WHO NEEDS WINDOWS
01:33:28 <myndzi> THIS LOOKS COOL
01:33:29 <myndzi> lol.
01:33:54 <elliott> well that's stupid i don't think anyone in here would be like that :P
01:34:04 <myndzi> as the survivor of many extremely large floods, having stress tested the various clients at the time, i can say with certainty that i can rely on mirc above anything that's not on a console :)
01:34:14 <elliott> I do feel that overlapping windows are fairly useless, though splitting is quite nice... but that is basically a tiling wm
01:34:18 <myndzi> though i dunno about that version 7 unicode stuff
01:34:43 <elliott> myndzi: why would you even hang out in the warzone parts of irc, its so tedious
01:34:43 <myndzi> oh, i forgot to mention, mirc is windows native :P
01:34:58 <myndzi> i forgot that there's people in here who might actually be interested in installing different window managers
01:34:59 <myndzi> hehe
01:35:00 <myndzi> i don't
01:35:08 <myndzi> what's getting flooded have to do with hanging out in warzones?
01:35:14 <myndzi> i used to staff #help on dalnet for a long time
01:35:20 <myndzi> there was some fag with a 3000+ bot botnet flooding us
01:35:27 <myndzi> guess how i solved it? a mirc script :)
01:35:28 <elliott> most /networks/ are warzones
01:35:41 <myndzi> i have some badass channel flood protection man ;D
01:35:41 <elliott> freenode may be incompetent but at least it's semi-civilised :p
01:35:52 <elliott> i feel like i'm talking to someone from the 90s
01:36:03 <myndzi> and i've already been dissed over it being written in mirc too by people who don't know anything better than "lines per second" but are diehard linuxfags
01:36:21 <myndzi> elliott: it's been a long time since it's mattered, but you asked why i like mirc and i'm telling you
01:36:28 <myndzi> so if you don't like the explanations, then don't ask
01:36:45 <myndzi> i'm used to it, it looks and behaves nice, and there aren't any irc clients better than it for my purposes
01:36:55 <myndzi> you can hardly ask me to switch without being able to offer me something better ;)
01:37:13 <elliott> I don't really see why you'd write an mirc script rather than a bot, really
01:37:23 <myndzi> well, it is a botn
01:37:25 <myndzi> bot*
01:37:40 <myndzi> but it was the language under discussion, not the mechanism
01:37:45 <elliott> yeah, but written in a horrible language, and that can't be separated from your client :P
01:37:46 <myndzi> and saying "mirc bot" sounds funny
01:38:05 <elliott> has anyone modified mIRC to run headless and then ran it with wine for better script uptime
01:38:24 <myndzi> people used to do it for botnet clients
01:38:30 <myndzi> you wanna lol at something lol at that
01:38:35 <myndzi> there was a whole botnet written as a mirc script
01:38:39 <myndzi> and boy was the code awful
01:38:39 <elliott> secure
01:38:41 <myndzi> absolutely terrible
01:38:53 <myndzi> anyway, they'd strip the binary down so it was a smaller file
01:41:05 <myndzi> you'd probably cry to learn how many silly things i've written in mirc ;)
01:41:11 <myndzi> the latest was a thing that compresses tetris fields
01:41:11 <myndzi> haha
01:41:27 <myndzi> i get about half the size of an indexed mode png file with all the headers stripped out
01:41:32 <myndzi> it's pretty cool really
01:42:19 <myndzi> <- is this a space?
01:42:38 <oerjan> in case anyone didn't see this already http://i.imgur.com/ku2bD.jpg
01:42:52 <myndzi> haha, awesome.
01:42:58 <elliott> myndzi: that looks like a space to me
01:43:03 <myndzi> good
01:43:04 <oerjan> space here
01:43:06 <elliott> oerjan: would play
01:43:07 <myndzi> i finally found the alias i was looking for
01:43:07 <myndzi> lol
01:43:13 <elliott> like
01:43:13 <myndzi> turns out it was "smsg"
01:43:17 <myndzi> go figure
01:43:23 <elliott> it's space invaders pacman mario and tetris divided into four
01:43:35 <elliott> whenever you hit anything with one of the other games it immediately gets assembled into your next piece, colours and all
01:43:39 <elliott> and you have to play all at once
01:44:48 -!- ive has joined.
01:46:07 <elliott> hi ive
01:46:19 <oerjan> hif ive
01:48:39 <CakeProphet> huh, where did the hibernate option go.
01:49:44 <CakeProphet> halp how do I hibernate with no UI
01:50:08 <oerjan> ask a bear
01:50:53 <CakeProphet> oh hey look there's a hibernate command I can install
01:58:30 -!- puzzler has joined.
01:58:32 <puzzler> \o/
01:58:32 <myndzi> |
01:58:33 <myndzi> /|
01:58:36 -!- puzzler has quit.
01:58:49 <myndzi> old bug was old
01:58:50 <oerjan> EXCELLENT
01:58:57 <myndzi> mistaken variable
01:58:57 <elliott> rip bug
01:58:59 <oerjan> ^celebrate
01:59:00 <fungot> \o\ /o/ \o\ /o/ \o\ /o/ \o\ /o/ \o\ /o/ \o\ /o/ \o\ /o/
01:59:00 <myndzi> | | ¦ | | | | | | ¦ | | | |
01:59:01 <myndzi> |\ /< ´¸¨ /`\ /| |\ /< /'\ >\ ´¸¨ /| |\ >\ |\
01:59:08 <myndzi> it was actually in the proxy script i mentioned
01:59:14 <myndzi> one of its functions is to "fix" consecutive spaces
01:59:15 <Patashu> ^celebrate
01:59:15 <fungot> \o\ /o/ \o\ /o/ \o\ /o/ \o\ /o/ \o\ /o/ \o\ /o/ \o\ /o/
01:59:16 <myndzi> | | | | | | | | ¦ | | | | |
01:59:16 <myndzi> >\ >\ /| /'\ /| |\ /`\ /'\ ´¸¨ /< >\ /| >\ /|
01:59:20 <myndzi> at a point where i can access the data in binary variables
01:59:27 <Patashu> can you make celebrate do the rest of them too?
01:59:27 <myndzi> so that my theme doesn't mangle them
01:59:51 <myndzi> so the particular bug occurred when
01:59:52 <oerjan> Patashu: well ^celebrate can only choose the top parts
01:59:56 <CakeProphet> \m/ \m/ \m/ \m/
01:59:57 <myndzi> `\o/´
01:59:57 <Patashu> yeah
01:59:57 <myndzi> |
01:59:57 <myndzi> /´\
01:59:57 <myndzi> (_| |_)
02:00:00 <myndzi> 1) there were NO consecutive spaces (2 or more)
02:00:04 <CakeProphet> \m/ \m/ \m/ \m/
02:00:05 <myndzi> and 2) there was a space at the beginning of the text
02:00:10 <CakeProphet> \m/ \m/ \m/ \m/
02:00:10 <myndzi> `\o/´ `\o/´
02:00:10 <myndzi> | |
02:00:11 <myndzi> (_|¯´\ /`\
02:00:11 <myndzi> |_) (_| |_)
02:00:16 <myndzi> i had code in place to account for this scenario
02:00:22 <myndzi> but it was comparing the wrong variable
02:00:59 <oerjan> ^def celebrate ul ( \o| \o| \m/ \m/ |o/ \o/ \o| \m/ \m/ |o/ |o/)S
02:00:59 <fungot> Defined.
02:01:01 <elliott> lol
02:01:03 <oerjan> ^celebrate
02:01:04 <fungot> \o| \o| \m/ \m/ |o/ \o/ \o| \m/ \m/ |o/ |o/
02:01:04 <myndzi> | | `\o/´ | | | `\o/´ ¦ |
02:01:04 <myndzi> /`\ /| | |\ >\ /| | ´¸¨ /|
02:01:05 <myndzi> /'¯|_) /´\
02:01:05 <myndzi> (_| (_| |_)
02:01:07 <myndzi> haha
02:01:07 <CakeProphet> so I might be developing an iphone app as a profitshare.
02:01:17 <myndzi> i had a friend one time
02:01:19 <myndzi> rather
02:01:22 <myndzi> i had a friend who one time*
02:01:26 <myndzi> had this regex script
02:01:38 <myndzi> that would output matches and break them down a line at a time
02:01:38 <CakeProphet> regex, scruot?
02:01:40 <myndzi> like
02:01:43 <myndzi> \1: contents
02:01:44 <myndzi> \2
02:01:45 <myndzi> so on
02:01:49 <oerjan> ^def celebrate ul ( \o| |o| |o/ \m/ \m/ |o/ \o/ \o| \m/ \m/ \o| |o| |o/)S
02:01:49 <fungot> Defined.
02:01:51 <oerjan> ^celebrate
02:01:51 <fungot> \o| |o| |o/ \m/ \m/ |o/ \o/ \o| \m/ \m/ \o| |o| |o/
02:01:51 <myndzi> | | | `\o/´ | | | `\o/´ | | |
02:01:52 <myndzi> /| >\ /< | /| /`\ /< | /'\ /< /|
02:01:52 <myndzi> (_|¯`¯|_) /'\
02:01:52 <myndzi> (_| |_)
02:01:58 <myndzi> this friend happened to be an ircop on the network in question with flood privileges
02:02:00 <myndzi> ...
02:02:05 <myndzi> i guess i don't really need to say any more
02:02:05 <myndzi> ;)
02:02:24 <myndzi> this define script reminded me of it until i realized i was the one filling in the extra lines
02:04:55 <CakeProphet> oerjan: excellent
02:05:08 <myndzi> so anyway
02:05:14 <myndzi> this tetris thing, you guys might actually find it interesting
02:05:40 <myndzi> what i did was basically the equivalent of a png filter backed by a range encoder
02:05:48 <myndzi> but instead of the cell prediction methods png uses
02:05:56 <myndzi> where it predicts a value then takes the difference of that value and the current cell
02:06:20 <myndzi> i instead maintain a move-to-front buffer that gets seeded with my predictions for each cell
02:06:40 <myndzi> so if my first guess isn't right my second guess can output a 2
02:07:35 <myndzi> over some sample data this proved to skew the data significantly, with about 80% of outputs being 1 or 2
02:07:42 <myndzi> which of course makes the range encoder happy
02:08:30 <myndzi> for the garbage, which has its own useful properties, i represent a hole position with a 0 followed by truncated binary for its position and then follow it up with a string of RLE 1s if it doesn't change position
02:08:41 <myndzi> (works good for change on attack, the rle could be removed for 100% hole change games)
02:08:51 <myndzi> on my sample data, the average tetris field is like 9 bytes
02:09:04 <myndzi> waiting to get some proper live data instead of the turn based game i took from :)
02:09:33 <CakeProphet> cryptsetup: WARNING: failed to detect canonical device of /dev/sda6
02:09:42 <CakeProphet> when I ran apt-get install hibernate
02:09:46 <CakeProphet> I wonder if this is a problem.
02:10:05 <coppro> no
02:10:11 <CakeProphet> I don't even think I have an sda6
02:12:11 <elliott> myndzi: 9 bytes? that's pretty good :P
02:12:17 <elliott> what field size?
02:12:22 <myndzi> 10x25
02:12:32 <myndzi> (top 5 are the hidden height)
02:12:32 <elliott> how many cell states?
02:12:35 <myndzi> some caveats:
02:12:53 <myndzi> it's played on a turn based site, and efficiency is key there. there is usually much less of an upstack than normal live games
02:13:02 <myndzi> err, the sample data is from such a site*
02:13:17 <myndzi> though i will be gathering sample data from nullpomino, i'm involved in its development
02:13:26 <elliott> how many cell states? :P
02:13:31 <myndzi> cell states = 9, though only 8 are encoded since i encode garbage separately
02:13:39 <myndzi> 7 piece colors, empty, and garbage
02:13:46 <myndzi> i only encode rows that contain blocks
02:13:47 <Patashu> why are you encoding it? just for fun?
02:13:51 <myndzi> the empty height can be implied
02:13:52 <elliott> so 2250 bytes down to 9
02:13:54 <elliott> not bad
02:13:56 <myndzi> Patashu: mostly just for fun, yes
02:14:11 <Patashu> good a reason as any other
02:14:11 <myndzi> but it will see application in the release of nullpomino 8
02:14:17 <Patashu> why?
02:14:17 <elliott> 25,000 percent compression :P
02:14:19 <myndzi> for example, since i can get the data so compact,
02:14:21 <elliott> er hm wait no
02:14:31 <myndzi> we will be able to do different things than we might have with the netplay protocol
02:14:39 <myndzi> like stream full udp updates and therefore not require ordered packets
02:14:47 <myndzi> (which will improve responsiveness)
02:14:53 <myndzi> also we will be able to stream data at a faster frame rate
02:15:12 <myndzi> elliott: :)
02:15:15 <Patashu> ooo, udp updates
02:15:22 <myndzi> i said average 9 bytes, my sample data has 113 frames
02:15:31 -!- CakeProphet has quit (Quit: Lost terminal).
02:15:33 <myndzi> so some are bigger of course, but i'm sure some are smaller too
02:15:49 <myndzi> png with indexed colors gets closer to 20something bytes on average
02:15:55 <myndzi> i forget how many
02:16:08 <myndzi> 20-30 anyway
02:16:19 <elliott> myndzi: what's the maximum :P
02:16:34 <myndzi> caveat 2: we'll be encoding a bit more information, since nullpomino in free-for-all modes colors its garbage and i don't support garbage coloring
02:16:48 <myndzi> but a move-to-front transformation with rle like i did with the garbage can get that nice and small
02:16:54 <myndzi> maximum is kind of unknown
02:17:02 <elliott> i mean
02:17:04 <elliott> on your sample data
02:17:04 <myndzi> it was just an information seeking venture
02:17:10 <myndzi> i don't have the ability to encode a single frame atm
02:17:10 <myndzi> haha
02:17:19 <elliott> obviously the maximum is a bit over 2250
02:17:26 <myndzi> ?
02:17:32 <elliott> myndzi: your raw data is 2250 bytes
02:17:34 <myndzi> oh, maximum possible encoded field size?
02:17:37 <elliott> yeah
02:17:42 <myndzi> or maximum sample compressed field
02:17:48 <elliott> pigeonhole principle + overhead = max field size ends up being over 2250 bytes
02:17:50 <elliott> post-compression
02:18:05 <elliott> although many states are probably impossible due to shape of pieces
02:18:08 <myndzi> yeah, but it'll never get there in a game
02:18:14 <elliott> you could encode it more abstractly before compressing to help with that
02:18:18 <myndzi> since players will die before they get anywhere close to a noisy enough field to fuck the compression
02:18:21 <elliott> but if you're getting 9 bytes on average it probably doesn't matter
02:18:27 <myndzi> well see
02:18:42 <myndzi> what i recognized was that there was a high degree of connectedness in the cardinal directions by virtue of the way the game exists
02:19:02 <myndzi> so the predictions are accurate when the cells surrounding a cell are the same as it is
02:19:07 <myndzi> which is very often
02:19:12 <myndzi> for that not to be true, you have to have made a real mess of your field
02:19:17 <myndzi> but since this is mostly going to apply towards netplay,
02:19:24 <myndzi> anyone who makes that much of a mess will be killed quickly
02:19:29 <myndzi> since it means they can't reach their garbage
02:19:29 <myndzi> :)
02:20:22 <myndzi> the worst case would be that none of the four surrounding cells are ever the same color as the current cell
02:20:38 <myndzi> and there are 20x10 cells that satisfy that condition
02:20:42 <myndzi> i'm sure it'd be huge in that case
02:21:12 <myndzi> we might have to be wary of doing something like "fill the entire field with random colors" as an effect upon death or something
02:21:25 <myndzi> (like tetrinet did)
02:28:34 <Patashu> you could always have a special 'random colours' message
02:28:40 <Patashu> and then every client decides what to fill it with
02:29:07 <quintopia> who put cjd in the topic
02:29:22 <elliott> cjd?
02:30:38 <quintopia> creutzfeld-jakobs disease
02:30:52 -!- Patashu has quit (Quit: MSN: Patashu@hotmail.com , Gmail: Patashu0@gmail.com , AIM: Patashu0 , YIM: patashu2 .).
02:32:50 <elliott> ph
02:36:36 <oerjan> quintopia: it's from fungot's europarl theme, i believe
02:36:36 <fungot> oerjan: what luck! we must search for a biological experiment? say it again.
02:37:24 <oerjan> fungot: yes, the cjd one
02:37:24 <fungot> oerjan: president rufus doing by getting all excited. right now. you new here? these are the ones i've seen in my reserved seat in the newspaper.
02:37:59 <quintopia> ^styles
02:38:02 <quintopia> ^style
02:38:02 <fungot> Available: agora alice c64 ct darwin discworld europarl ff7* fisher homestuck ic irc jargon lovecraft nethack pa sms speeches ss wp youtube
02:38:29 <quintopia> i can never remember how to fungot properly
02:38:29 <fungot> quintopia: what the!? why is cid so hard to join? the hell was that?
02:38:40 <quintopia> what is europarl?
02:38:59 <oerjan> ^style europarl
02:38:59 <fungot> Selected style: europarl (European Parliament speeches during approx. 1996-2006)
02:39:38 <oerjan> fungot: death and taxes
02:39:41 <fungot> oerjan: mr president, are close by; they may even have got worse. i hope that herman schmid shares my view that the eu governments and eu airlines. i applaud the amendments, i can only thank the rapporteur, that in this hypothesis the commission intends to implement the measures. i think it is appropriate to encourage, because even though mr van velzen i think, the explanation should be sought and guaranteed, above all, enable
02:39:49 <oerjan> oh dear
02:40:04 <quintopia> wow
02:40:13 <oerjan> we are doomed
02:40:22 <quintopia> he ran out of message length there
02:40:37 <tiffany> o.o
02:40:49 <tiffany> xchat just splits it over multiple lines if you go over 512 characters :s
02:41:48 <oerjan> that wouldn't be good for fungot; it sometimes gets stuck in a message loop
02:41:49 <fungot> oerjan: we are appalled to see that changed. if we are to overcome their difficulties. the only way of ensuring that, at thessaloniki, this would be disastrous for all, against the grain, on the one hand by the constant stream of weapons which operate in sfor based on the facts, not on referral back to committee)
02:42:33 <quintopia> oh dear
02:42:37 <oerjan> at least in the ctstyle
02:42:40 <quintopia> we are indeed doomed
02:42:41 <oerjan> *
03:03:18 -!- zzo38 has joined.
03:03:45 -!- pikhq has joined.
03:04:45 <zzo38> If I do various thing in making preprocessor of Haskell, many people says is insane thing, should it be called Insane-Haskell?
03:04:54 <zzo38> Or, Insane-Haskel-PP?
03:05:39 <pikhq> Bleh.
03:05:58 <oerjan> package names shouldn't normally contain "haskell" :P
03:06:03 <zzo38> Or something completely different?
03:06:18 <oerjan> if you mean for naming on hackage
03:06:49 <zzo38> oerjan: Some do, such as haskell-src-exts. But I do not mean necessarily for naming in hackage. I just mean in the ordinary way to name a program.
03:07:08 <oerjan> Madskell :P
03:08:06 <zzo38> OK, I suppose that will do as well. It *does* mean it does not contain the word "haskell"; in case you do not want it to contain "haskell".
03:08:35 <pikhq> Oh, praise Internet.
03:08:51 <oerjan> well if it's for manipulating haskell programs, like a preprocessor is, then maybe it's ok to have "haskell" in it
03:09:05 <zzo38> Yes, that is what I thought.
03:09:09 <oerjan> i was just trying to think of a more punny name there
03:09:28 <zzo38> It is OK to think of different name including more punny name and whatever else
03:11:17 <zzo38> Is it possible for the main module to not be called Main? Because, I want programs running with hint to be able to access it under a different name. Is it possible to make it import the its own compiled module to hint?
03:11:52 <oerjan> you can use the -main-is flag
03:12:00 <zzo38> OK
03:12:21 <zzo38> I used "Madskell" for now like you suggested at once
03:12:44 <oerjan> :)
03:21:33 -!- ABD has joined.
03:21:45 -!- ABD has changed nick to cchackermirc.
03:22:25 -!- pikhq_ has joined.
03:24:37 -!- pikhq has quit (Ping timeout: 258 seconds).
03:26:38 <elliott> hi cchackermirc
03:26:58 -!- pikhq_ has changed nick to pikhq.
03:28:59 <zzo38> Do you know the working of this program? http://sprunge.us/USZd
03:31:34 <myndzi> i wonder how statistical distribution could be used to make the code for a bf text generator smaller
03:31:39 <myndzi> seems like it should be pretty doable
03:31:57 <zzo38> Try.
03:32:09 <myndzi> i was considering taking the bucket approach i wrote and adding something so that i'd know how many "more" bytes would be incurred by selecting each bucket
03:32:14 <myndzi> but it seems a little annoying to code
03:32:25 <zzo38> Try anyways.
03:32:31 <myndzi> i might ;p
03:32:41 <myndzi> i'm thinking about multiple different ideas haha
03:32:49 <myndzi> like, one would base the buckets on frequency
03:33:10 <myndzi> it would select from a smaller range of possible values for high frequency character(s)
03:33:22 <myndzi> so as to leave the value more accessible
03:33:35 <myndzi> and maybe travel farther on the buckets used for smaller frequencies
03:33:47 <myndzi> the idea being like entropy encoding where less frequent = more symbols
03:33:54 <myndzi> but i'm not sure how to balance it out
03:34:05 <myndzi> or what to do if, like, two frequent values are very far apart
03:34:28 <myndzi> the "take the bucket that generates the smallest output" approach seems to work decent
03:35:02 <myndzi> i save about 30 bytes over the bot, maybe more, but i haven't worked in anything to support things like capital letters better, it's focused on lowercase only and spaces
03:57:30 <pikhq> Well, that's strange.
03:57:41 <pikhq> https://github.com/torvalds/linux
03:58:05 <pikhq> Not sure why, but Linus pushed the repo to github.
04:01:43 <zid> because github is awesome, and perhaps maybe because kernel.org was possibly compromised
04:02:07 <zid> (the servers got broken into, but none of the repos were messed with, afaik)
04:03:40 <pikhq> Probably having something to do with the kernel.org breakin, yeah.
04:04:00 <zzo38> I used repo.or.cz instead, but you can use what you want to use.
04:04:20 <zid> I used repo.or.cz, the guy was nice but my repos would break and i'd have to ask him to fix em
04:04:24 -!- Deewiant has quit (Read error: Connection reset by peer).
04:04:25 <zzo38> But you should copy it to github and to kernel.com as well, so you hvae two copies
04:04:26 <zid> github has better tools and a nicer UI
04:04:28 <zid> so I switched
04:05:07 -!- Deewiant has joined.
04:05:10 <pikhq> Not like it matters much.
04:05:17 <pikhq> A git host is just that, a host.
04:05:35 <zzo38> But one suggest I have, is, make all of the configuration commands in repo.or.cz accessible by SSH
04:07:25 <Gregor> "unfamiliar with the Emacor vim software" "I kind of don't know how to control those two softwares which made the programming kind of complicated. Could I just use Visual Stdio? Thanks"
04:07:27 <Gregor> *sobs*
04:07:58 <zid> make him use nano
04:08:12 * zid uses a lot of nano because he is a horrible person
04:08:50 <pikhq> nano's not a bad editor, really. Just incredibly simplistic.
04:10:19 <pikhq> "So while kernel.org is down for the count, let's just see how github does:"
04:10:20 <pikhq> :)
04:13:05 <elliott> Gregor: wat
04:13:13 <zid> "Good lukk to Patricia, whoe is off to teh Oregun State Fair for the state speling kontest."
04:13:32 <elliott> isn't repo.or.cz run by the guy who made git-pasky/cogito?
04:13:42 <elliott> I remember using cogito back when git was reaaally new and terrible
04:13:57 <Gregor> elliott: Student in the class I'm TA'ing.
04:14:27 <zid> what's the class?
04:14:34 <elliott> Gregor: omg, "visual stdio"
04:14:39 <elliott> :D
04:15:34 <Gregor> I know.
04:15:35 <Gregor> I just.
04:15:36 <Gregor> X_X
04:15:58 <Gregor> I can't tell if he's just trolling.
04:18:15 <elliott> Gregor: TBF, emacs and vim don't have the nicest learning curve :
04:18:16 <elliott> :P
04:18:47 <zid> vim is pretty easy, if you don't want to be productive
04:19:07 <zid> like, just use edit mode, and :wq
04:19:18 <elliott> Yeah, but coming from Visual Studio... :p
04:19:31 <zid> shiet, I still use notepad for a lot of stuff
04:19:35 <zid> and nano like I said
04:20:06 <elliott> Gregor: I say let 'em use it and be horrible if the result doesn't work without :P
04:20:12 <Gregor> elliott: We told them to use gedit, which is like Gnome's notepad. Then, the next lab session, we did 10-minute introductions to emacs and vim, just for completionism, all the while saying "but you can use whatever editor you want"
04:20:22 <elliott> Ah :P
04:20:29 <elliott> I know what gedit is dude
04:20:44 <Gregor> I wouldn't have if we didn't tell them to use it *shrugs*
04:20:54 <Gregor> I mean, I guess I could've guessed ... but I don't use Gnome.
04:20:58 <elliott> gedit is actually way better than notepad :P
04:21:05 <Gregor> True.
04:21:08 <pikhq> zid: As an Emacs user: vim is entirely reasonable.
04:21:10 <Gregor> But that's not much of a statement.
04:21:21 <elliott> I actually use it quite a lot for coding, since its autoindent is reasonable and its syntax highlighting is really good (because it's just a gtksourceview in a box)
04:21:30 <pikhq> Though the learning curve is hell, just like Emacs.
04:21:34 <elliott> I have weird mental spheres that I divide all my coding into and that determine editor and the like
04:21:35 <zid> I used gedit a bit
04:21:56 <zid> notepad++ isn't bad as a lay editor
04:22:46 <Gregor> For me the decision process goes something like this:
04:22:48 <Gregor> text -> vim
04:23:57 <elliott> People who only use emacs or vim are really boring. I think I'm going to start calling them monoeditorites.
04:24:05 <elliott> Us polyeditorites have a much more exciting life.
04:24:53 <oklopol> i only use wordpad, but i have multiple lives.
04:25:17 <elliott> oklopol is here and nobody told me? >:|
04:25:29 <oklopol> oh i am here. i am here so bad.
04:25:42 <elliott> so bad.
04:32:47 <elliott> > (9::Integer) `shiftL` 999
04:32:48 <lambdabot> 482178873233820294426791272077000814752632165267490123349687674766657973006...
04:37:14 <zid> http://www.youtube.com/watch?v=LjSXj4cb_Yo&feature=related
04:39:41 <elliott> Is that worth watching
04:39:45 <zid> meh
04:39:57 <elliott> I have no idea how starcraft works
04:40:04 <zid> oh right, probably not then
04:40:19 <elliott> Pssht, I'm totally gonna watch it now
04:40:33 <zid> you'll just appreciate it slightly less
04:40:35 <zid> like the muta micro
04:45:51 <zid> I think pro tip here, AI controlled muta are badass if you can get them
04:53:42 <oklopol> last time i checked, rape was illegal
04:54:06 <elliott> an accurate perception
04:54:39 <pikhq> Brassica napus seems entirely legal still.
04:56:27 <elliott> I wonder if diveclog is any good
04:56:37 <elliott> Not that I have any interest in it
04:58:07 -!- augur has joined.
04:59:53 -!- GreaseMonkey has joined.
05:06:30 -!- CakeProphet has joined.
05:07:57 <CakeProphet> I had to use windows to complete my online class.
05:07:59 <CakeProphet> it was very scary.
05:08:15 <CakeProphet> I don't want to go back don't let them take me.
05:10:58 <Deewiant> elliott: Bugmail? :-P
05:11:19 <elliott> Deewiant: What |Removed |Added
05:11:19 <elliott> ----------------------------------------------------------------------------
05:11:19 <elliott> CC| |dwelch@dwelch.com
05:11:19 <elliott> --- Comment #19 from Matti Niemenmaa <matti.niemenmaa+llvmbugs@iki.fi> 2011-09-04 13:51:49 CDT ---
05:11:19 <elliott> *** Bug 10858 has been marked as a duplicate of this bug. ***
05:11:36 <elliott> Deewiant: Because I got subscribed to "adce and loop-reduce (and possibly others?) incorrectly delete calls to readonly/readnone functions" two years ago because I reported a bug that reduced to it :P
05:11:51 <elliott> (The bug being it optimising out an infinite loop to a nop, lol)
05:13:40 <elliott> Deewiant: So basically STOP TWIDDLING THAT BUG
05:14:39 <Deewiant> elliott: Un-cc yourself?
05:15:05 <elliott> Deewiant: That's more work than complaining over IRC
05:15:28 <Deewiant> It's also the only working solution
05:16:14 <elliott> I could be just that annoying.
05:54:32 -!- ive has quit (Quit: leaving).
05:55:41 -!- augur has quit (Remote host closed the connection).
06:13:31 -!- GuestIceKovu has changed nick to Slereah.
06:15:17 -!- oerjan has quit (Quit: Good night).
06:24:06 -!- FireFly has joined.
06:51:08 <CakeProphet> hey what was the list of primes using nubBy and gcd?
06:52:42 <CakeProphet> > nubBy (((>1).).gcd) [1..]
06:52:43 -!- elliott has quit (Read error: Connection reset by peer).
06:52:44 <lambdabot> [1,2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97,1...
06:52:58 -!- elliott has joined.
06:58:17 <olsner> CakeProphet: ask CakeProphet, he just posted one of those in #esoteric
06:58:37 <CakeProphet> well technically 1 is not prime (for reasons I'm not entirely clear on)
06:59:12 <olsner> > nubBy (((>1).).gcd) [2..]
06:59:14 <lambdabot> [2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97,101...
06:59:30 <CakeProphet> good job. :P
06:59:34 <CakeProphet> > 2011 `elem` nubBy (((>1).).gcd) [2..]
06:59:36 <lambdabot> True
06:59:40 <CakeProphet> oh look we're in a prime year.
06:59:56 <fizzie> The prime of our lives.
07:00:14 <olsner> today's a prime day in a square month of a prime year
07:00:25 <CakeProphet> > dropWhile (/=2011) $ nubBy (((>1).).gcd) [2..]
07:00:27 <lambdabot> [2011,2017,2027,2029,2039,2053,2063,2069,2081,2083,2087,2089,2099,2111,2113...
07:00:35 <CakeProphet> fizzie: hopefully one of many primes.
07:00:45 <CakeProphet> unless you're going to die in 6 years.
07:00:49 <fizzie> Well, since 2012 is the last one...
07:00:58 <CakeProphet> ah yes of course.
07:01:10 <CakeProphet> slipped my mind.
07:01:46 <CakeProphet> > dropWhile (/=1991) $ nubBy (((>1).).gcd) [2..]
07:01:50 <lambdabot> mueval-core: Time limit exceeded
07:01:53 <fizzie> > nubBy (((>1).).gcd) [1983..2011]
07:01:54 <lambdabot> [1983,1984,1985,1987,1991,1993,1997,1999,2003,2009,2011]
07:02:01 <CakeProphet> > dropWhile (<1991) $ nubBy (((>1).).gcd) [2..]
07:02:03 <lambdabot> [1993,1997,1999,2003,2011,2017,2027,2029,2039,2053,2063,2069,2081,2083,2087...
07:02:12 <CakeProphet> these are the prime years I've experienced, up to the present.
07:02:40 <fizzie> How come 1984 is on that list?
07:02:41 <CakeProphet> fizzie: doesn't work like that I don't think.
07:02:46 <fizzie> Oh, right.
07:02:47 <CakeProphet> you need to start at 2.
07:02:48 <fizzie> Of: course.
07:02:56 <fizzie> I blame just waking up.
07:03:01 <olsner> > takeWhile (<2011) . dropWhile (<1986) . nubBy (((>1).).gcd) $ [2..]
07:03:02 <lambdabot> [1987,1993,1997,1999,2003]
07:03:14 <fizzie> Well, that's not very many.
07:03:16 <olsner> > takeWhile (<=2011) . dropWhile (<1986) . nubBy (((>1).).gcd) $ [2..]
07:03:18 <lambdabot> [1987,1993,1997,1999,2003,2011]
07:03:28 <CakeProphet> one more than I.
07:08:26 <CakeProphet> This is truly a prime time of our life.
07:08:38 <CakeProphet> (yes fizzie said something similar but now I am explicitly referencing a Daft Punk song. :P )
07:10:59 <CakeProphet> time to celebrate
07:11:01 <CakeProphet> http://www.youtube.com/watch?v=WIyEaRSvFQ4
07:11:28 <zzo38> Do you need videos for everything?
07:11:32 <CakeProphet> with what is totally not a shitty quality version of Alive 2007
07:11:37 <CakeProphet> which was NOT a prime year. shameful.
07:11:42 <CakeProphet> shame on you Daft Punk.
07:12:14 <CakeProphet> zzo38: ur mom
07:12:15 -!- Vorpal has quit (Read error: Connection reset by peer).
07:13:14 <CakeProphet> @define takeWithin f g = takeWhile g . dropWhile f
07:13:42 <CakeProphet> @let takeWithin f g = takeWhile g . dropWhile f
07:13:43 <lambdabot> Defined.
07:14:11 <CakeProphet> > takeWithin (<1991) (<=2011) [1..]
07:14:12 <lambdabot> [1991,1992,1993,1994,1995,1996,1997,1998,1999,2000,2001,2002,2003,2004,2005...
07:14:56 <CakeProphet> I guess the takeWhile could be not.g
07:15:10 <CakeProphet> so then it's more like specifying a range or something?
07:15:41 <CakeProphet> er on, not the dropWhile
07:15:52 <CakeProphet> @let takeWithin f g = takeWhile g . dropWhile (not.f)
07:15:53 <lambdabot> <local>:1:0:
07:15:53 <lambdabot> Warning: Pattern match(es) are overlapped
07:15:53 <lambdabot> In...
07:15:59 <CakeProphet> @let takeIn f g = takeWhile g . dropWhile (not.f)
07:16:00 <lambdabot> Defined.
07:16:21 <CakeProphet> > takeIn (>1991) (<2011) [1..]
07:16:22 <lambdabot> [1992,1993,1994,1995,1996,1997,1998,1999,2000,2001,2002,2003,2004,2005,2006...
07:16:47 <CakeProphet> > takeIn (==1991) (<2011) [1..]
07:16:49 <lambdabot> [1991,1992,1993,1994,1995,1996,1997,1998,1999,2000,2001,2002,2003,2004,2005...
07:17:06 <CakeProphet> yeah that makes sense.
07:19:21 <fizzie> It's a bit like the Perl scalar "..".
07:19:27 <CakeProphet> so maybe I could make a bot that re-lets lambdabot with a list of functions after being cleared.
07:20:07 <CakeProphet> and when you update the list it clears lambdabot and re-lets them all
07:20:15 -!- Vorpal has joined.
07:20:34 <fizzie> > let pointlessTakeIn = flip ((.) . takeWhile) . dropWhile . (not .) in pointlessTakeIn (>1991) (<2000) [1..]
07:20:36 <lambdabot> [1992,1993,1994,1995,1996,1997,1998,1999]
07:20:55 <fizzie> @pl -- it always improves things. No exceptions.
07:20:56 <lambdabot> (line 1, column 1):
07:20:56 <lambdabot> unexpected "-"
07:20:56 <lambdabot> expecting white space, "()", natural, identifier, lambda abstraction or expression
07:21:03 <fizzie> lambdabot: Stop being so literal.
07:21:36 <CakeProphet> and then if you delete a function in the list you can optionall delete all functions that reference it.
07:21:43 <CakeProphet> list functions that reference other functions, etc.
07:21:45 <CakeProphet> so you can manage the list.
07:22:16 <CakeProphet> written in Perl, of course. :P
07:22:35 <fizzie> How persistent is that persistence anyway?
07:24:10 <CakeProphet> lambdabots? I assume until you undefine everything.
07:24:38 <CakeProphet> I believe it literally just writes the function definitions to a file that it imports when evaluating code.
07:24:45 <CakeProphet> :t takeWithin
07:24:46 <lambdabot> forall a. (a -> Bool) -> (a -> Bool) -> [a] -> [a]
07:25:35 <CakeProphet> though maybe I'm wrong. Maybe it constructs a huge let expression or something. :P
07:25:58 <fizzie> I was just wondering if it collects years of cruft there in the definitions.
07:26:09 <CakeProphet> no because the only way to remove definitions is to remove them all.
07:26:20 <CakeProphet> so it gets cleared often as people redefine things.
07:26:50 <CakeProphet> Cakebot on the other hand...
07:27:04 <CakeProphet> will surely develop years of cruft.
07:27:12 <fizzie> Well, yes, fungot's command-list collects all kinds of nonsense too, and it's not even sorted.
07:27:14 <fizzie> ^show
07:27:15 <fungot> fizzie: mr president, along with other victims. in fact, true. as i announced during the debate but i fear that the expansion that has been tabled. in drafting programmes aimed at the promotion of renewable energy sources for the financing of such assistance from within these budget headings, are another component in achieving viability. a mechanism is constructed to deal with, and, in particular, which usually have neither the
07:27:15 <fungot> echo reverb rev rot13 rev2 fib wc ul cho choo pow2 source help hw srmlebac uenlsbcmra scramble unscramble asc ord prefixes tmp test celebrate
07:27:22 <fizzie> "in fact, true."
07:27:55 <CakeProphet> fungot fun
07:27:56 <fungot> CakeProphet: i rise to speak on culture for once.
07:28:17 <CakeProphet> fungot fun
07:28:18 <fungot> CakeProphet: i thank the president-in-office for his response. indeed, in law. we feel that there is a common goal to build an antiterrorist europe!
07:28:25 <fizzie> ^choo choo goes the train
07:28:25 <fungot> choo goes the train hoo goes the train oo goes the train o goes the train goes the train goes the train oes the train es the train s the train the train the train he train e train train train rain ain in ...
07:28:55 -!- Vorpal has quit (Ping timeout: 245 seconds).
07:28:56 <CakeProphet> > join . tails $ "choo choo goes the train "
07:28:58 <lambdabot> "choo choo goes the train hoo choo goes the train oo choo goes the train o ...
07:29:08 <fizzie> ^show choo
07:29:09 <fungot> >,[>,]+32[<]>[[.>]<[<]>[-]>]
07:29:11 <CakeProphet> > join . tails $ "choo goes the train "
07:29:12 <lambdabot> "choo goes the train hoo goes the train oo goes the train o goes the train ...
07:29:39 <fizzie> ^cho does the same without the space
07:29:39 <fungot> does the same without the spaceoes the same without the spacees the same without the spaces the same without the space the same without the spacethe same without the spacehe same without the spacee same with ...
07:30:01 <fizzie> ^cho fblofblo
07:30:01 <fungot> fblofbloblofblolofbloofblofblobloloo
07:31:11 <CakeProphet> > join . tails $ "Does the same without the space"
07:31:13 <lambdabot> "Does the same without the spaceoes the same without the spacees the same w...
07:31:50 <CakeProphet> > join . unwords . join . tails . words $ "Does the same without the space"
07:31:51 <lambdabot> Couldn't match expected type `[a]'
07:31:51 <lambdabot> against inferred type `GHC.Types...
07:31:59 <CakeProphet> > unwords . join . tails . words $ "Does the same without the space"
07:32:01 <lambdabot> "Does the same without the space the same without the space same without th...
07:32:24 <CakeProphet> > unwords . join . tails . words $ "Do you believe in magic?"
07:32:26 <lambdabot> "Do you believe in magic? you believe in magic? believe in magic? in magic?...
07:33:12 <elliott> > join . inits $ "Do you believe in magic?"
07:33:13 <lambdabot> "DDoDo Do yDo yoDo youDo you Do you bDo you beDo you belDo you beliDo you b...
07:33:34 <elliott> > let f x = join (interleave (inits x) (tails x))
07:33:35 <lambdabot> not an expression: `let f x = join (interleave (inits x) (tails x))'
07:33:39 <elliott> > let f x = join (interleave (inits x) (tails x)) in f "Do you believe in magic?"
07:33:40 <lambdabot> "Do you believe in magic?Do you believe in magic?Do you believe in magic?Do...
07:33:46 <elliott> > let f x = join (interleave (tails x) (inits x)) in f "Do you believe in magic?"
07:33:46 <lambdabot> "Do you believe in magic?o you believe in magic?D you believe in magic?Doyo...
07:33:56 <elliott> > let f x = join (interleave (tails x) (inits x)) in drop 99 (f "Do you believe in magic?")
07:33:57 <lambdabot> "believe in magic?Do yu believe in magic?Do yo believe in magic?Do youbelie...
07:33:59 <elliott> > let f x = join (interleave (tails x) (inits x)) in drop 999 (f "Do you believe in magic?")
07:34:00 <lambdabot> ""
07:34:02 <elliott> darn :P
07:34:05 <CakeProphet> lol
07:34:30 <CakeProphet> unfortunately Cakebot will not be useful for defining general purpose programs
07:34:35 <CakeProphet> due to lambdabots short character limit.
07:36:03 -!- Vorpal has joined.
07:36:03 <CakeProphet> elliott: that's not pointfree enough btw
07:36:05 <CakeProphet> I'm ashamed.
07:36:37 <elliott> ?pl \x -> f (g x) (h x)
07:36:37 <lambdabot> liftM2 f g h
07:37:09 <elliott> :t join . interleave <$> tails <*> inits
07:37:10 <lambdabot> Occurs check: cannot construct the infinite type: a = a -> b
07:37:10 <lambdabot> Probable cause: `interleave' is applied to too few arguments
07:37:10 <lambdabot> In the second argument of `(.)', namely `interleave'
07:37:14 <elliott> :t join . (interleave <$> tails <*> inits)
07:37:14 <lambdabot> forall a. [a] -> [a]
07:37:17 <elliott> CakeProphet: happy
07:37:19 <elliott> ????
07:37:30 <CakeProphet> no I will never be satisfied.
07:37:33 <CakeProphet> son I am disappoint.
07:37:36 <zzo38> This seems to work: unwords x = tail (x >>= (' ':))
07:38:15 <CakeProphet> sure does.
07:38:17 <zzo38> This also seems to work: unwords = tail . (>>= (' ':))
07:38:46 <elliott> tail is badde,
07:38:49 <elliott> unwords = intersperse " "
07:38:56 <elliott> > intersperse " " ["a","b"]
07:38:57 <lambdabot> ["a"," ","b"]
07:38:58 <monqy> intercalate you mean?
07:39:04 <elliott> no
07:39:05 <monqy> o
07:39:06 <monqy> h
07:39:06 <elliott> :t intercalate
07:39:07 <lambdabot> forall a. [a] -> [[a]] -> [a]
07:39:13 <elliott> oh hmm
07:39:16 <monqy> i was thinking of something else ,maybe?
07:39:17 <elliott> > intercalate " " ["a","b"]
07:39:17 <lambdabot> "a b"
07:39:19 <elliott> right
07:39:21 <elliott> intercalate
07:39:22 <elliott> ?src intercalate
07:39:23 <lambdabot> intercalate xs xss = concat (intersperse xs xss)
07:39:26 <elliott> ?src intersperse
07:39:26 <lambdabot> intersperse _ [] = []
07:39:27 <lambdabot> intersperse _ [x] = [x]
07:39:27 <lambdabot> intersperse sep (x:xs) = x : sep : intersperse sep xs
07:39:33 <CakeProphet> same as join . intersperse
07:39:39 <elliott> no
07:39:41 <elliott> .:
07:39:41 <monqy> no
07:39:45 <monqy> yes
07:39:51 <elliott> ?pl fix (\f sep (x:xs) -> x : sep : f sep xs)
07:39:51 <lambdabot> fix (flip flip tail . (ap .) . flip flip head . (((.) . flip ((.) . (:))) .) . liftM2 (.) (:))
07:39:54 <CakeProphet> join is concat for list yes?
07:40:02 <elliott> learn composition
07:40:05 <monqy> :t join . intersperse
07:40:05 <lambdabot> Couldn't match expected type `[a] -> a' against inferred type `[a]'
07:40:06 <lambdabot> Probable cause: `intersperse' is applied to too many arguments
07:40:06 <lambdabot> In the second argument of `(.)', namely `intersperse'
07:40:10 <monqy> - cakeprohpet
07:40:22 <elliott> ?pl fix (\f sep xs -> if null xs then [] else if null (tail xs) then xs else head x : sep : f sep (tail xs))
07:40:22 <lambdabot> fix (((ap (flip if' [] . null) . ap (if' =<< null . tail) . ((head x :) .)) .) . liftM2 (.) (:) . flip flip tail . ((.) .))
07:40:26 <elliott> beautiful :')
07:40:30 <CakeProphet> right. (join .).intersperse then?
07:40:44 <monqy> PUT SPACES AROUND YOUR OPERATORS
07:40:47 <monqy> especially .
07:40:59 <CakeProphet> nope
07:41:08 <CakeProphet> space fascism. I refuse.
07:41:34 <elliott> join .: intersperse
07:41:46 <CakeProphet> :t .:
07:41:46 <lambdabot> parse error on input `.:'
07:41:48 <CakeProphet> :t (.:)
07:41:49 <lambdabot> forall a b (f :: * -> *) (g :: * -> *). (Functor f, Functor g) => (a -> b) -> f (g a) -> f (g b)
07:42:04 <monqy> > :t (Control.Monad.join Prelude..)Prelude..Data.List.intersperse
07:42:05 <lambdabot> <no location info>: parse error on input `:'
07:42:06 <monqy> oops
07:42:09 <CakeProphet> ah yes
07:42:13 <monqy> :t (Control.Monad.join Prelude..)Prelude..Data.List.intersperse
07:42:14 <lambdabot> forall a. [a] -> [[a]] -> [a]
07:42:57 <CakeProphet> beautiful.
07:44:03 <monqy> > Just.unwords$["youre","a","bad"]
07:44:03 <lambdabot> Not in scope: `Just.unwords'
07:44:12 <monqy> take that, cake prophet
07:44:18 <CakeProphet> oh snap.
07:44:47 -!- FireFly has quit (Quit: FireFly).
07:44:48 <monqy> Just .unwords
07:44:50 <CakeProphet>
07:45:06 <CakeProphet> this is how much I care about that.
07:45:12 <CakeProphet> ^^^
07:45:14 <CakeProphet> do you see?
07:45:15 <monqy> > Just. unwords$["youre","a","bad"]
07:45:16 <lambdabot> Just "youre a bad"
07:45:36 <monqy> youre just a bad
07:46:18 <CakeProphet> hey you know what I would do if that happened?
07:46:27 <monqy> repent
07:46:30 <CakeProphet> put spaces somewhere.
07:46:32 <monqy> repent
07:46:32 <CakeProphet> and recompile.
07:46:34 <monqy> repent
07:46:35 * elliott punches CakeProphet
07:46:37 * elliott punches CakeProphet
07:46:38 * elliott punches CakeProphet
07:46:38 * elliott punches CakeProphet
07:47:01 <CakeProphet> it's not like I don't use spaces ever.
07:47:06 <CakeProphet> I don't know where you go this idea.
07:47:10 <CakeProphet> *got
07:47:13 <elliott> you are like zzo wanting thecompielr to disambiguate your types
07:47:16 <elliott> its not natural
07:47:27 <elliott> ur a SICK HASKEL FETISHIST
07:47:57 <monqy> > fix cakeprophet
07:47:57 <CakeProphet> I'm not sure this is the same thing, but okay.
07:47:58 <lambdabot> Not in scope: `cakeprophet'
07:48:03 <monqy> r.i.p.
07:48:13 <elliott> it wont fix
07:48:59 <CakeProphet> but I guess I could there be a module called Just and a function in it called unwords and it could have the exact same time and not do the same thing.
07:49:23 * elliott punches CakeProphet
07:49:24 <elliott> repent
07:49:29 <CakeProphet> so maybe I will put spaces in composition operations that begin with a titlecase word.
07:49:33 <CakeProphet> maybe this is a good idea.
07:49:38 <elliott> repent
07:49:42 <elliott> repent
07:49:42 <elliott> repent
07:49:44 <elliott> monqy: repent
07:49:46 <elliott> fix CakeProphet
07:49:46 <monqy> repent
07:50:18 * CakeProphet needs a prescription
07:50:24 <CakeProphet> are you guys prescriptivists?
07:50:30 * elliott punches CakeProphet
07:51:46 <CakeProphet> if(cond){code}
07:51:54 <CakeProphet> how does that lack of spaces make you feel?
07:52:04 <monqy> > fix$\x->"repent "++x
07:52:05 <lambdabot> <no location info>: parse error on input `->'
07:52:10 <monqy> THIS IS HOW IT MAKES ME FEEL
07:52:14 <CakeProphet> did you know that when I see if ( cond ) { code }
07:52:20 <CakeProphet> I want to kill people?
07:52:28 <elliott> repent
07:52:31 -!- Taneb has joined.
07:52:31 <CakeProphet> I am spacephobic.
07:52:35 <elliott> repent
07:52:37 <elliott> repent
07:52:38 <elliott> repent
07:52:42 <Taneb> Morning
07:52:44 <elliott> Taneb: repent him
07:52:46 <CakeProphet> the emptiness scares me.
07:52:47 <CakeProphet> it is a void.
07:52:58 <CakeProphet> wanting to be filled in by useful characters.
07:53:03 <monqy> repent
07:53:05 <Taneb> And yet without space there would be nothing
07:53:07 <elliott> repent
07:53:17 <monqy> repent the new help?????
07:53:25 <monqy> cakeprophet this is your fault
07:53:26 <CakeProphet> the new?
07:53:31 <Taneb> Space is potentia
07:53:37 <elliott> im potent
07:53:43 <Taneb> Space is oppurtunity
07:53:50 <Taneb> I'm totipotent
07:53:51 <monqy> im opportun
07:54:13 <Taneb> Space is full of the yet to be
07:54:14 <CakeProphet> I've got mad non-space skills
07:54:20 <monqy> cakeprophethowdoyoufeelaboutyourself
07:54:31 <monqy> remoreseful?????youmeanie
07:54:41 <monqy> isthiswhatyouwanted???
07:54:51 <monqy> this reminds me about earlier today
07:54:59 <monqy> or was it yesterday
07:55:14 <monqy> looks like it may have been yesterday
07:55:24 <monqy> depending on what a day is
07:55:27 <CakeProphet> still today for me.
07:55:30 <CakeProphet> in terms of sleeping.
07:55:33 <monqy> and how yesterday relates to that
07:56:07 <monqy> they're common in that cakeprophet is always wrong about spaces
07:56:15 <monqy> always
07:58:35 <CakeProphet> http://pastebin.com/mHxjQZiZ
07:58:39 <CakeProphet> but see this code?
07:58:41 <CakeProphet> it's beautiful.
07:58:48 <CakeProphet> actually I took out 2 spaces that were not necessary
07:58:51 <CakeProphet> just to spite you.
07:59:12 <monqy> too many newlines
07:59:27 <CakeProphet> no newlines can stay.
07:59:34 <CakeProphet> they are magic spaces.
07:59:36 <monqy> correct; no newlines can stay.
07:59:42 <olsner> > fix ("repent "++)
07:59:43 <lambdabot> "repent repent repent repent repent repent repent repent repent repent repe...
08:00:14 <olsner> monqy: easier to get right pointlessly
08:00:17 <CakeProphet> monqy: can you read that code?
08:00:38 <monqy> olsner: I know; the syntax error was the whole point
08:00:42 <monqy> CakeProphet: would you like me to bother?
08:00:47 <olsner> monqy: Right.
08:01:01 <CakeProphet> monqy: yes it would please me.
08:01:09 <CakeProphet> if you could read it and how beautiful it is.
08:01:37 <CakeProphet> but you are bad at Perl so I don't think you could.
08:05:33 <monqy> I think I was able to get the first seven lines? I tried the ninth but I don't know what / and <=> are so I couldn't do it
08:06:06 <CakeProphet> is division. <=> is numeric cmp
08:06:11 <CakeProphet> .. /
08:06:56 <Taneb> I'm making a Suffolk implementation
08:07:18 <Taneb> Because I can
08:07:42 <monqy> i dunno what $b and $a are I can't find their assignments :(
08:07:49 <CakeProphet> you are going to hate this...
08:07:57 <CakeProphet> they are magical variables used specifically in sort
08:08:02 <monqy> ewwwwwwww
08:08:03 <CakeProphet> they are found nowhere else in Perl's semantics.
08:08:37 <CakeProphet> well actually they're not magical you could implement sort yourself with prototypes and dynamic scoping.
08:09:42 <monqy> ok i think i might have figured it out
08:10:05 <monqy> it prints all the frequencies of all the nonalphabetic characters in the input, sorted by what character it is
08:10:14 <monqy> I dunno if $_ gets interpolated in "$_: "
08:10:19 <CakeProphet> yes it does.
08:10:27 <CakeProphet> $_ is the loop variable.
08:10:37 <CakeProphet> and any string with "" is interpolated.
08:10:54 <monqy> so the : doesn't get interpreted as part of it then
08:10:56 <monqy> ok
08:11:05 <CakeProphet> yes it's magical.
08:11:25 <CakeProphet> also I could do "$_: @{[$w($_)/$t]}"
08:11:31 <CakeProphet> if I were feeling especially cheeky.
08:12:19 <monqy> is there reason not to? it's perl after all; obfuscation's the point
08:12:37 <CakeProphet> well it's just more convenient to concat in this case.
08:12:57 <Taneb> Is obfuscated ORK code possible?
08:13:42 <CakeProphet> Perl is about doing as much in one line as possible, I guess. not necessarily obfuscating anything.
08:13:52 <monqy> it's obfuscation to me
08:14:10 <Taneb> It's being shiy and rond to me
08:14:15 <Taneb> Also whie
08:14:23 <monqy> one line isn't ambitious enough
08:15:16 <CakeProphet> monqy: what makes you think I would try to obfuscate. I even took the time to import sum. :P
08:15:34 <Taneb> I had an idea for an esolang, but it turned out to just be HQ9+ exaggerated extremely much
08:15:34 <CakeProphet> that could have been done in one line without that extra import line.
08:15:55 <monqy> Taneb: exaggerated in which direction
08:16:00 <Taneb> Upwards
08:16:04 <Taneb> And outwards
08:16:11 <CakeProphet> all around ways?
08:16:16 <Taneb> Entire unicode range
08:16:26 <CakeProphet> oh my.
08:16:45 <CakeProphet> who would write all of the programs
08:16:55 <CakeProphet> also it would be awesome for golfing if it actually did stuff that was TC.
08:17:02 <Taneb> People with lots of time and nothing to do
08:17:07 <monqy> CakeProphet: what
08:17:19 <CakeProphet> excuse me, if it was a turing complete language.
08:17:23 <CakeProphet> it would be good for golfing.
08:17:40 <monqy> sometime I should try golfing with J
08:17:44 <elliott> sg
08:17:44 <elliott> sg
08:17:44 <elliott> sg
08:17:44 <elliott> sgs
08:17:45 <elliott> gsgsgsgsgsg
08:17:47 <monqy> hi elliott
08:17:53 <elliott> hi
08:17:54 <elliott> hiii
08:17:56 <monqy> is flogscript good
08:17:59 <elliott> scapgegoats all along the ploo
08:18:07 <elliott> its golfscript but zzo
08:18:10 <monqy> one time I wanted to see if I could learn it but I didn't have enough dedication
08:18:16 <monqy> to look through the interpreter
08:18:22 <monqy> written in php was it
08:18:26 <elliott> zzo
08:18:27 <monqy> to figure out how it works
08:18:31 <monqy> because there's no documentation
08:18:41 <elliott> man i don't have darcs installed this is a tarvarvesvty
08:19:10 <CakeProphet> `run man man
08:19:15 <HackEgo> man: can't open the manpath configuration file /etc/manpath.config
08:19:19 <monqy> oh no
08:19:42 <elliott> friends
08:19:44 <elliott> friends always
08:19:46 <elliott> freidns oh my
08:19:46 <CakeProphet> `run man touch
08:19:48 <elliott> friends always
08:19:49 <HackEgo> man: can't open the manpath configuration file /etc/manpath.config
08:19:52 <elliott> friends
08:19:58 <elliott> F R I E ND S
08:20:01 <elliott> always
08:20:05 <zzo38> The only documentation of FlogScript is in Japanese and is incomplete.
08:20:17 <elliott> Trendsetting through cell phones is the most popular practice, especially among teenagers. As the iPhone 4 craze remains and grows, so does the demand for trendy and defensive cases for iPhones.iPhone 4 Cases
08:20:36 <CakeProphet> ..
08:20:41 <CakeProphet> elliott's lost his marbles.
08:20:51 <elliott> As the iPhone 4 craze remains and grows, so does the demand for trendy and defensive cases for iPhones.iPhone 4 Cases
08:21:00 <CakeProphet> `run find / -name marbles
08:21:20 <HackEgo> find: `/proc/tty/driver': Permission denied \ find: `/proc/1/task/1/fd': Permission denied \ find: `/proc/1/task/1/fdinfo': Permission denied \ find: `/proc/1/task/1/ns': Permission denied \ find: `/proc/1/fd': Permission denied \ find: `/proc/1/fdinfo': Permission denied \ find: `/proc/1/ns': Permission denied \ find: `/proc/2/task/2/fd':
08:21:21 <elliott> monqy: there is... a language... i want... to learn.....iPhone 4 Cases
08:21:28 <monqy> me too
08:21:34 <elliott> which language.iPhone 4 Case
08:21:35 <zid> 2>/dev/null
08:21:36 <elliott> s
08:21:40 <CakeProphet> elliott: learn Perl.
08:21:42 <CakeProphet> L3
08:21:46 <monqy> l3
08:21:57 <elliott> iPhone 4 Cases
08:22:05 <CakeProphet> elliott: actually learn uh... io
08:22:12 <monqy> which io
08:22:15 <elliott> I used Io but it's terrible
08:22:16 <CakeProphet> or maybe you already know it. is it dead yet?
08:22:18 <elliott> especially the docs
08:22:18 <monqy> there are multiple languages called io
08:22:23 <elliott> and also the guy behind it
08:22:26 <elliott> :P
08:22:52 <elliott> monqy: do you want to know what... ALGNAGNUAE i want to lerne
08:22:58 <Taneb> Does anyone have a sample Suffolk program to test my interpreter?
08:23:04 -!- Zuu has quit (Read error: Connection reset by peer).
08:23:16 <elliott> probably not unless there is be ones on the suffolk page on wiki
08:23:30 <CakeProphet> perhaps you want to learn about bugsophia which is my currently completely undocumented and unimplemented concurrent wire-based fungeoid thing that I never finished.
08:23:33 <CakeProphet> you should finish it.
08:23:39 <elliott> i read abotu that in the logs
08:23:40 <elliott> it probably sucks
08:23:41 <monqy> elliott: is it iphone four cases
08:23:48 <elliott> monqy: no thats my spirit animal
08:23:54 <monqy> oh
08:24:03 <CakeProphet> elliott: but it's awesome because every thread holds exactly one character.
08:24:26 <CakeProphet> so for example the hello world thread would spawn as many threads as there are characters to print... unless you just used one thread to print them all.
08:24:42 <monqy> i want to learn my name is johny what the f**k
08:25:04 <CakeProphet> the main problem is figuring out 1) order of execution, round robin or to just use OS threads 2) coordinating threads to compute multi-argument operations.
08:25:17 <CakeProphet> s/hello world thread/ hello world program
08:25:26 <elliott> sounds exactly like a CA
08:25:46 <CakeProphet> maybe.
08:25:55 <CakeProphet> I'm sure it could be modelled like that but the program surface stays the same.
08:26:04 <CakeProphet> only the bugs move around.
08:26:25 <elliott> monqy will never ask me what language i want to learn ... . . . . .c r y i n g
08:26:26 <CakeProphet> BUT FINE THAT'S BORING I GUESS GO MAKE YOUR OWN ESOLANG.
08:27:22 <monqy> elliott: what lagnauge..
08:27:25 -!- Zuu has joined.
08:28:05 <elliott> monqy: MERCURY it is like prolog but strongly typed and higher-order without "cut" or any impure operations?? and it has inspiration from haskell?? and it uses lienar types to do IO
08:28:18 <elliott> and it apparently has really good optimisation somehow.............
08:28:24 <monqy> one time i wanted to learn mercury but then i forgot to do that???
08:28:26 <elliott> im... gonna learn
08:28:28 <elliott> it
08:29:12 <CakeProphet> elliott: in fact I think I will finish bugsophia
08:29:14 <monqy> is maude any good one time i looked at it but the thing i used to try learn it was really boring so i gave up
08:29:15 <CakeProphet> and perhaps add onto it .
08:29:31 <elliott> monqy: ive never hear dof maud ehelp?
08:29:48 <elliott> CakeProphet: what was that TOTES STUPID os, sophia?
08:29:51 <elliott> im logread a lot
08:30:01 <CakeProphet> uh abrasax or something.
08:30:06 <CakeProphet> was the name we settled on.
08:30:18 <CakeProphet> I like to forget things I've done in the past. :P
08:30:34 <elliott> you were stupid in the past, also the present, but we all have our flaws,
08:30:34 <monqy> http://maude.cs.uiuc.edu/ maude has a good web site
08:30:42 <elliott> racing car
08:30:48 <elliott> japanese tmempemple
08:30:49 * CakeProphet is like Karkat in that he hates his past selves.
08:30:50 <elliott> maude
08:30:56 <elliott> maddeueue
08:30:58 <elliott> maeudihea
08:30:59 <elliott> maeuihfrgjdf
08:31:00 <elliott> mdskgnfj
08:31:29 <elliott> monqy: i think the maude time
08:31:31 <elliott> when designing their website
08:31:33 <elliott> drunk a bit too much
08:31:34 <elliott> ...
08:31:36 <elliott> urbana-champaign
08:31:40 <elliott> :DDDdjddpasodlk
08:31:47 <monqy> what help
08:32:31 <elliott> because
08:32:31 <elliott> its from
08:32:34 <elliott> the university of illinois
08:32:36 <elliott> at urbana-champaign
08:32:37 <elliott> and
08:32:38 <elliott> champaignej
08:32:40 <elliott> is a drunk
08:32:43 <monqy> champaign
08:32:59 <elliott> champaignej
08:33:04 <monqy> i did not see the ubana-chanmabitehge singe,
08:33:08 <monqy> but there itis
08:33:09 <monqy> wow
08:33:11 <CakeProphet> elliott: also the idea was to have a declarative language to specify properties of streams. so that they could be connected to network devices, files, etc.
08:33:30 <elliott> CakeProphet: for what
08:33:32 <elliott> sopgjophajai
08:33:51 <CakeProphet> for... good IO capabilities.
08:33:58 <CakeProphet> oh. bugsophia still.
08:34:10 <elliott> i thought it was abiotbarbaisotsax
08:34:14 <CakeProphet> ...no
08:34:19 <elliott> that sounded more , interesting,
08:34:25 <elliott> for that,
08:34:29 <elliott> declarerjiowejtiwtvie dreams
08:34:48 <CakeProphet> I believe I had specified a range of characters for each kind of stream.
08:34:54 <CakeProphet> most of them were runic scripts I believe.
08:35:15 <elliott> drundric skulptures
08:35:20 <elliott> shits dot come,
08:35:22 <elliott> dot com
08:35:24 <elliott> friends
08:35:24 <elliott> hi
08:35:59 <CakeProphet> stan, which is reserved for stdio, is in the Ogham alphabet, but I can't recall what it was reserved for.
08:36:12 <CakeProphet> things like stdio? I guess I could have multiple input streams instead of just the one .
08:36:30 <monqy> hi stan
08:36:56 <CakeProphet> er no not Ogham
08:36:59 <monqy> ogham
08:37:02 <elliott> im ogham
08:37:04 <elliott> stogham
08:38:01 <monqy> ok how to learn mercury...
08:38:22 <elliott> monqy: by, cmomomommbobulacompiling the compiler first?
08:38:22 <CakeProphet> ah it's anglo-saxon
08:38:24 <elliott> its, not in buntus
08:38:32 -!- cchackermirc has quit.
08:38:43 <elliott> melbourne mercury..... it is made by savages in uastortjiosoauraliala
08:38:52 <elliott> GCC version 3.4.x or later is required.
08:38:52 <elliott> GCC 4.0 will NOT work. It has bugs that cause internal compiler errors when compiling the C code generated by the Mercury compiler.
08:38:54 <elliott> monqy: help
08:38:58 <monqy> help
08:39:16 <elliott> help no gcc three in repos help
08:39:20 <elliott> he,pl
08:39:25 <elliott> monqy: we... must build gucck
08:39:30 <elliott> im find gcc
08:39:30 <CakeProphet> so the fuþorc alphabet could be reserved for... what is something I could lump into a category with stdio.
08:39:54 <elliott> monqy: ftp://ftp.mirrorservice.org/sites/sourceware.org/pub/gcc/releases/gcc-3.4.6/gcc-core-3.4.6.tar.bz2
08:39:55 <elliott> we download, together
08:40:22 -!- zzo38 has quit (Remote host closed the connection).
08:40:50 <elliott> monqy: ok now we unpack... (ar eyou downloadied)
08:40:53 <monqy> my gcc is 4.6.1?? maybe it will work..??
08:40:57 <elliott> no
08:41:13 <elliott> gcc four has a lot of bugs so I'm not surprised
08:41:24 <elliott> elliott@katia:~/gcc-3.4.6$ ./configure --program-suffix=3
08:41:27 <elliott> this will make everything beautiful........
08:41:31 <CakeProphet> gcc version 4.5.2 (Ubuntu/Linaro 4.5.2-8ubuntu4)
08:41:32 <CakeProphet> weeeee
08:41:36 <elliott> then you just must am make
08:41:40 <elliott> monqy: it will be, esy
08:41:47 <elliott> yay mit is compilingst
08:41:56 <elliott> compiling gcc three is actually pretty easy, it's quite small
08:42:51 <CakeProphet> perhaps I should not break runes into types and just allow any runes to be designated for any type of IO.
08:42:57 <elliott> monqy: is it, work
08:43:02 -!- jix has quit (Read error: Connection reset by peer).
08:43:09 <monqy> i'm tryign ad....ifferent way
08:43:13 <elliott> monqy: what way
08:43:15 <monqy> ad verture
08:43:33 <elliott> monqy: are you trying it with gcc four, because that's just stupid, they've said directly it won't work and you need an earlier version, and that text is from this year
08:43:44 <elliott> compiling gcc three only takes like ten minutes anyway
08:43:50 <elliott> and it installs cleanly over four with that suffix option
08:44:46 <CakeProphet>
08:44:48 <monqy> are you..s,..,,,ure
08:44:54 <elliott> monqy: sure about what
08:44:55 <monqy> because 0 is idffernet than 6
08:45:34 <CakeProphet> ᚛ ᚅ ᚜
08:45:44 <elliott> monqy: it's pretty obvious what they mean
08:45:52 <monqy> not to ,me
08:46:43 <CakeProphet> monqy: elliott is bad at explaining things in that he doesn't.
08:47:03 <CakeProphet> ᚘ picnic table
08:47:58 <elliott> hol yshit australian servers are slow
08:48:07 <monqy> oh no so much warnings
08:48:17 <CakeProphet> speed of light is slow
08:48:17 <elliott> monqy: what
08:49:04 <monqy> solutions.c:319:1: warning: ‘mercury__f_115_111_108_117_116_105_111_110_115_95_95_108_105_115_116_95_95_85_110_117_115_101_100_65_114_103_115_95_95_112_114_101_100_95_95_102_111_108_100_108_95_95_104_111_49_50_95_95_91_49_44_32_50_44_32_52_44_32_53_44_32_54_93_95_48_4_0’ used but never defined [enabled by default]
08:49:10 <monqy> that times a billion
08:49:17 <monqy> is my warnings
08:49:24 <elliott> are you using clang
08:49:27 <elliott> that looks like a clang warning
08:49:29 <monqy> should i using clang
08:49:42 <monqy> because i think this is gcC? maybE??
08:50:04 <monqy> oh wait i don;'t even know what this is
08:50:17 <monqy> it says it's ../scripts/mgnuc but wHAT SIt hat
08:52:48 <CakeProphet> elliott: I think bugsophia would be more like a bully automaton
08:53:08 <Taneb> Right, I am beginning the definition of my golf language
08:53:13 <Taneb> Called Uniquode
08:53:21 <CakeProphet> though it is kind of vapor at this point, so who's to say.
08:53:32 <monqy> Taneb: ok
08:53:39 <Taneb> It is going to have so many crazy features!
08:53:42 <monqy> ok
08:53:53 <CakeProphet> Taneb: sounds pretty tedious to write
08:53:56 <Taneb> Instead of first class anything, all values are in a caste
08:54:16 <Taneb> There's a macrostack and a function queue
08:54:17 <monqy> i misread caste as castle and got excited
08:54:47 <Taneb> I'll put the arabian characters in a castle
08:54:48 <Taneb> :)
08:55:35 <monqy> cakeprophet stemming from the previous discussion about spaces and fitting things into single lines, do you know J you might like it
08:56:00 <CakeProphet> I've heard of it but do not know much about it.
08:56:04 <CakeProphet> I'm pretty sure I would like it yes.
08:56:28 <monqy> it's nifty but I don't know it well enough to do anything fancy
08:56:52 <CakeProphet> I will have to learn it sometime.
08:57:44 <Taneb> dimensionality is so too a word!
08:57:56 <monqy> these warnings never stop
08:58:12 <elliott> monqy learns the value of listening to warning label
08:58:12 <elliott> s
08:58:19 <CakeProphet> I am thinking about multiprogramming
08:58:28 <CakeProphet> except not befunge.
08:58:37 <monqy> i hope this compiliations stops soon
08:58:49 -!- Zuu has quit (Ping timeout: 260 seconds).
08:58:53 <monqy> so i can see how badly it doesnt'w ork
08:58:55 <CakeProphet> so you have the same code being evaluated by possibly different interpreters. Like dupdog but not as a stupid.
08:59:50 <monqy> it's on t
09:00:00 <monqy> oh wait no new directory
09:00:01 <monqy> it's on m
09:00:05 <monqy> er
09:00:06 <monqy> d
09:00:07 <monqy> g
09:00:09 <monqy> o
09:00:10 <elliott> <elliott> monqy learns the value of listening to warning label
09:00:10 <elliott> <elliott> s
09:00:11 <monqy> p
09:00:21 <monqy> d
09:00:24 <monqy> i
09:00:25 <monqy> m
09:00:42 <monqy> when will it end
09:00:53 <elliott> when it breaks
09:01:15 <CakeProphet> so, hmmmm
09:01:32 <monqy> i think it finished compiling
09:01:35 <Taneb> Doubles will be stored in heaps, which are stored in arrays, which are stored in queues, which are stored in a stack
09:01:45 <elliott> monqy: enjoy broken
09:02:20 <monqy> so how's your compiell...
09:02:23 <Taneb> retro-active self-modification
09:02:46 <elliott> monqy: still downloading the tgz.
09:03:24 <monqy> wow is it really that slow
09:03:26 <monqy> did it stop
09:03:57 -!- Zuu has joined.
09:04:05 -!- Zuu has quit (Changing host).
09:04:05 -!- Zuu has joined.
09:04:20 <CakeProphet> hmmm I should perhaps update my user page on esowiki.
09:04:52 <monqy> my user page is good
09:05:22 <Taneb> Mine has a quote
09:05:51 <monqy> ugh what is it doing is it building the standard library orsomething
09:06:27 <elliott> configure: WARNING: Mercury compiler not yet installed -
09:06:27 <elliott> **** cannot use unboxed floats, bootstrapping using boxed floats
09:06:27 <elliott> **** after installation is complete you may want to reinstall
09:06:27 <elliott> **** from scratch so you can use unboxed floats, which are more
09:06:27 <elliott> **** efficient.
09:06:28 <elliott> **** NOTE: before reinstalling from scratch, ensure that the
09:06:29 <elliott> **** source tree is clean by running `make realclean'. Not doing
09:06:31 <elliott> **** this may result in a broken Mercury installation.
09:06:41 <CakeProphet> I wonder if I'll ever find my notes on stue.
09:06:52 <CakeProphet> I bet they are not good because it was my first attempt at an esolang.
09:07:08 <monqy> stue
09:07:20 <elliott> monqy: did you pay attention to the above
09:07:28 <monqy> i didnt; even see it
09:07:44 <monqy> maybe someone else pyade ayteention for me
09:08:09 <monqy> hnm , back to c compiling. and warnings. eveery wheere.
09:08:15 <monqy> whweeeeeeeeeeeee
09:09:55 * elliott is getting no warnings at all
09:10:22 <monqy> my install is going to be so broeken,.,,
09:10:22 <Taneb> What do you call the thing that runs about executing commands?
09:10:40 <monqy> waht sort of bugs could even CAUSE this>?
09:10:44 <elliott> Taneb: IP?
09:10:49 <CakeProphet> hmmm, it would seem that people have been reverting edits on my old wikipedia userpage
09:10:50 <elliott> monqy: using the wrong compiler?
09:10:54 <CakeProphet> under the mistaken pretense that it was vandalism.
09:11:01 <Taneb> elliott: yes, that's it. I generally call it the runner
09:11:21 <monqy> elliott: but what bugs make the compiler WROnge.
09:12:04 <elliott> monqy: none, you're going against established usage instructions
09:12:43 <monqy> i mean which buggs in gcc4 as noted in It has bugs that cause internal compiler errors
09:13:04 <elliott> gcc4 has tons of bugs
09:13:08 <monqy> :(
09:15:49 <zid> all gccs have tons of bugs :P
09:15:59 <zid> that's why you wait for a high second digit in the version
09:16:01 <monqy> how couldthis haPEn :_+;
09:16:23 <cheater> wat
09:16:29 <monqy> hi
09:17:30 <elliott> zid: or just switch compiler
09:18:08 <monqy> gcc "one true c compiler"
09:18:40 <zid> to one with a different set of bugs, presumably
09:18:53 <zid> not that it's even possible, most of the time
09:19:08 <elliott> I gather clang is significantly less buggy and it has great compatibility IME
09:19:15 <elliott> pcc probably has less bugs too apart from the C99 code which is rather immature
09:19:20 <zid> except it doesn't know half the gcc extensions
09:19:24 <elliott> Decades kinda do that
09:19:28 <zid> so you can't use it to compile hardly anything
09:19:28 <elliott> zid: It certainly knows half of htem
09:19:41 <zid> it doesn't know asm intrinsics, so you can't compile the kernel
09:19:44 <elliott> How outdated is your perception? clang compiles pretty much everything nowadays
09:19:52 <elliott> zid: clang has compiled a booting kernel months ago
09:19:57 <zid> yes, because they cheated
09:19:59 <zid> and took out all the asm
09:20:12 <elliott> Yes. They took out all the inline assembly from the kernel.
09:20:20 <elliott> This is a true thing and not delusional at all.
09:20:27 <zid> it's not exactly hard
09:20:34 <zid> there's like 20 things in arch/ that uses it
09:20:37 <zid> mostly locking
09:20:47 <elliott> clang doesn't support .code16gcc, but it supports inline assembly.
09:21:00 <elliott> I'm sceptical how much you know what you're talking about.
09:21:06 <zid> then this is fewer months than last time
09:21:11 <CakeProphet> I think the phrase 'ur dick smells like cheese' should be removed. I cannot do this, and user Fyrael has deleted my previous request. — Preceding unsigned comment added by ModusPwnd (talk • contribs) 18:30, 2 June 2011 (UTC)
09:21:16 <zid> a few different guys have posted to lkml that theyv'e done it
09:21:28 <zid> all said they removed a bunch of gnu extensions, and converted a lot of assembly
09:21:33 <elliott> Lessee, Wikipedia cites http://lists.cs.uiuc.edu/pipermail/cfe-dev/2010-October/011711.html, which just says
09:21:36 <elliott> * Boot - The very early kernel boot code breaks with clang, because of obscure
09:21:36 <elliott> inline assembly GNUtensions (.code16gcc stuff). I have no clue what needs to
09:21:36 <elliott> be done to fix this, but as I actually know where this problem is, it should
09:21:36 <elliott> be (relatively) easy to fix.
09:21:42 <elliott> .code16gcc is used, like, exactly once in the kernel.
09:21:59 <elliott> That was /a year ago/.
09:22:09 <zid> lemme try find one of the emails if I can
09:22:36 <elliott> Anyway, I don't know how much you've actually tried to build with clang, but it turns out that really obscure gcc extensions are not actually used very often.
09:22:37 <zid> gmail is suuper slow today, yay
09:23:21 <monqy> ugh will thjis compile ever finish or have bugs doomed it never to do so............
09:23:31 <elliott> monqy: Mine just finished compiling, with no warnings
09:23:41 <monqy> does it work
09:23:43 <elliott> Now installing
09:23:49 <monqy> oh ok
09:24:25 <monqy> I;m just afraid mine may have gotten sutck looping infintely
09:24:40 <monqy> i mean
09:24:42 <monqy> just a bit
09:24:43 <monqy> not just
09:24:48 <monqy> i am afarid of other thisngs too...
09:25:04 <CakeProphet> feels good man
09:25:08 <monqy> ghi
09:25:10 <zid> aha
09:25:13 <zid> http://llvm.org/bugs/show_bug.cgi?id=4068
09:25:28 <zid> 2522, 4072, 9248 etc are all still open
09:25:46 <elliott> I never said clang could build a totally unpatched kernel
09:25:54 <Taneb> Right, I've defined space, !, ", #, $, %, and &
09:26:08 <zid> oh, we stoped talking about this and we started being defensive instead? okay bye
09:26:13 <elliott> It's ludicrous to whine about .code16gcc not working which is a really obscure ridiculous thing used in one place in the kernel, and call it "removing all the assembly", when the ENTIRE REST of the kernel builds.
09:26:58 <zid> I'm the only person who has posted absolutely anything relevent other than "You don't seem to know a lot"
09:27:07 <zid> So either get off your high horse, or give me some documentation
09:27:17 <elliott> Documentation of what, exactly
09:27:27 <monqy> high horses
09:27:29 <elliott> I'm on no high horse, I just said your wording is hyperbolic
09:27:38 <zid> for example, the patch to the tree that gets it compiling under clang
09:27:49 <CakeProphet> my hair is like rainbow.
09:27:51 <zid> elliott: last time (several months ago, as you put it) someone posted saying they had compiled the kernel
09:27:55 <zid> they had said they had removed all the assembly
09:28:27 <zid> whether 'several' means 6+ or exactly 3, is probably your "omg it only doesn't support gcc16code u tard" hangup
09:28:30 <elliott> I take it that's just your memory and you don't have any actual link
09:28:38 <zid> I am the one actually posting links here
09:28:40 <elliott> You've provided a page with several patches that make the kernel build yourself, you're the one making claims
09:28:43 <zid> I made a good faith effort to check my emails
09:28:49 <zid> all you seem to want to do is troll me
09:29:07 <elliott> Yes, obviously I'm trolling
09:29:11 <monqy> obviously
09:29:11 <zid> agreed
09:29:18 <monqy> snickering
09:29:52 <elliott> The best kind of trolling is questioning people who call code16gcc and a few constraints "all the assembly"
09:29:55 <elliott> Gets them so mad, let me tell you
09:30:00 <zid> I can tell you again if you want
09:30:02 <zid> I never said that
09:30:04 <zid> you told me I said that
09:30:24 <zid> You *really* need to stop misrepresenting me, jsut because I told you what I remembered, then when to check my emails for you
09:30:47 <CakeProphet> monqy: hi
09:30:52 <monqy> CakeProphet: hi
09:31:01 <CakeProphet> what is it that makes me hueman?
09:31:09 <zid> CakeProphet: the colouring
09:31:32 <CakeProphet> so is it because I do not color that I have lost my humanity?
09:31:45 <CakeProphet> that I am a sh of a man.
09:31:48 <CakeProphet> man of a sh.
09:32:40 -!- CakeProphet has changed nick to Kallisti.
09:32:44 <monqy> hi
09:32:44 -!- Kallisti has changed nick to CakeProphet.
09:32:47 <monqy> hi
09:33:17 <CakeProphet> I will not rename yet.
09:34:32 <zid> CakeProphet: maybe you can be a LumMan if you can't handle being a Hueman?
09:34:48 <Taneb> What should / do...
09:34:51 <Taneb> HMMM
09:34:57 <CakeProphet> is the killer.
09:35:13 <CakeProphet> s'^'/'
09:35:54 <CakeProphet> it also makes trees. it is the creator and the destroyer.
09:36:22 <Taneb> Nah, the tree commands are in Latin Extended-2
09:36:54 <CakeProphet> trees are important for any flourishing ecosystem.
09:37:11 <elliott> /home/elliott/mercury-compiler-11.01/install_grade_dir.asm_fast.gc.debug/scripts/mgnuc --grade asm_fast.gc.debug -- -c tree_bitset.c -o tree_bitset.o
09:37:14 <elliott> these are good libraries to compile
09:37:38 <Taneb> Basic Latin is all IP commands
09:38:17 <CakeProphet> I think I will write an esolang soon.
09:38:20 <CakeProphet> I have much to do.
09:38:24 <monqy> will it be good
09:42:30 <monqy> elliott is mercury working for you...becuase mine is stuck in not finishing ever hell
09:42:41 <elliott> just compiling the stdlib
09:43:11 <monqy> just wait until you see things that already compiled...compile again
09:43:23 <monqy> you may be in hell too......
09:43:36 <elliott> monqy: yes, because this time it's PIC
09:43:49 <elliott> havingabasicunderstandingofthedifferentwaysthesamecodecanbecompiled.jpg
09:44:16 <monqy> descriptive file name there
09:44:32 <monqy> i wonder how many different ways they can compile this std lib
09:47:17 <monqy> and why
09:47:55 <Taneb> I think Uniquode may be turing-complete.
09:48:01 <Taneb> And I've only got up to 6
09:48:13 <monqy> hm?
09:48:15 <Taneb> And all the commands so far are about the IPs and nothing else
09:48:31 <Taneb> Uniquode is the esolang I'm working on atm
09:48:39 <monqy> yes i know but
09:48:41 <monqy> what's the 6
09:48:50 <monqy> the 6 comands or whatever it is
09:48:53 <Taneb> The 6 charactrer
09:49:00 <monqy> oh
09:49:12 <monqy> how many is that, then
09:49:24 <monqy> and do they have good definitions
09:49:29 <Taneb> 23, and ish
09:49:36 <Taneb> I need to elaborate some
09:49:48 <Taneb> There're two no-ops
09:49:58 <monqy> two?
09:50:06 <Taneb> three-tick and one-tick
09:50:11 <monqy> why
09:50:28 <Taneb> Because I've got milliions of characters to assign a function to
09:50:31 <monqy> :(
09:51:10 <Taneb> And it could come in handy
09:51:15 <Taneb> There are multiple IPs
09:51:24 <Taneb> Which can breed
09:53:15 <Taneb> In very specific circumstances
09:53:43 <monqy> good luck keeping your langauge anything near elegant
09:54:08 <Taneb> And all of the IPs have an internal register which may be irrational
09:54:59 <monqy> it sounds like it might be interesting as-is; adding all of unicode would rpobably ruin it a bunch :(
09:55:22 <monqy> a gimmick or a deathwish
09:55:34 <Taneb> I'll never get all of unicode done
09:55:49 <Taneb> I'll save the page now so you can look at it
09:56:14 <Taneb> http://esoteric.voxelperfect.net/wiki/Uniquode
09:56:32 <elliott> http://esolangs.org/wiki/UniCode
09:56:36 <elliott> waaaaay ahead of you
09:56:39 <CakeProphet> I love breeding internet protocols.
09:56:49 <elliott> im bread protocol
09:57:12 <monqy> 2008
09:57:37 <CakeProphet> so will the stan represent a stone?
09:57:44 <CakeProphet> since that is what the stan represents.
09:57:46 <monqy> poor stan
09:57:56 <CakeProphet> perhaps you could have a homespringesque subset
09:58:04 <elliott> honfeoiboiwbgiergjperojgpejgpjpsirng
09:58:09 <Taneb> elliott, I declare a friendly rivalry between Uniquode and UniCode
09:58:13 <CakeProphet> with the runic/japanese/chinese characters representing their representations.
09:59:02 <monqy> "Retroactive self-modification" feather?
09:59:14 <Taneb> feather?
09:59:18 <CakeProphet> the feather gives you the cape.
09:59:18 <monqy> feather?
09:59:21 <CakeProphet> which lets you fly.
09:59:38 <CakeProphet> unless you already have a super power and then it is stored in the blue box.
09:59:46 <CakeProphet> for when you get hit by monsters.
09:59:49 <CakeProphet> it will drop out.
10:00:03 -!- azaq23 has joined.
10:00:13 <elliott> Taneb: good luck implementing feather
10:00:51 <CakeProphet> in cakelang all values retroactively insert futures in the past which become the current value in the present.
10:01:28 <monqy> then you realise the error in your ways and make it insert pasts into the future
10:02:25 <CakeProphet> where is my meadow.
10:03:10 <monqy> Taneb: have you never heard of feather?
10:03:31 <Taneb> No
10:03:35 <CakeProphet> oh good
10:03:42 -!- jix has joined.
10:03:53 <monqy> http://esolangs.org/wiki/Feather
10:04:24 <Taneb> Interesting
10:04:43 <Taneb> But actually, the way I plan to do retroactive self-modification won't be too difficult
10:05:02 <monqy> oh?
10:05:57 <Taneb> Basically, every now and again the state is saved, and when self-modification happens, one of these states is edited and then replaces the main state
10:06:06 <Taneb> If that makes sense at all
10:08:11 <CakeProphet> whenever implementing time travel it is important to always have an alpha timeline.
10:12:19 <CakeProphet> consider a language in which, from any statement
10:12:27 <CakeProphet> you can determine the future path of control flow
10:12:38 -!- Taneb has quit (Remote host closed the connection).
10:12:57 <CakeProphet> then, you could traverse that path, and execute the statements that change the past when they have designated when they want to happen.
10:13:07 -!- Taneb has joined.
10:13:35 <CakeProphet> granted I'm pretty sure you must always halt.
10:13:39 <CakeProphet> to do that.
10:14:04 <CakeProphet> and have only compile-time branches and the like.
10:15:46 <CakeProphet> but then the act of changing a value in the state in the past is merely just reorganizing the order of statements at compile-time.
10:19:40 -!- Lymee has quit (Ping timeout: 252 seconds).
10:20:39 <Taneb> I will go walk dog now
10:20:41 -!- Taneb has quit (Quit: Goodbye).
10:21:55 <elliott> hi god
10:21:56 <elliott> dog
10:22:03 <elliott> legit typo
10:22:04 <CakeProphet> elliott: so perhaps I could pick my own equipment this time?
10:23:04 <elliott> chross-channel mageics...
10:26:38 -!- azaq23 has quit (Ping timeout: 252 seconds).
10:29:23 -!- azaq23 has joined.
10:39:10 <elliott> monqy: wow mercury is still going
10:39:33 <monqy> mine too
10:41:27 <elliott> # Step 3. Run `make install'.
10:41:28 <elliott> # This step will also take a long time.
10:41:34 <elliott> lgone,
10:41:56 <monqy> longest time
10:42:02 <elliott> Note that the Mercury compiler is GPL software and there doesn't seem
10:42:02 <elliott> to be a linking exception like the one found in GCC, so it is unclear
10:42:02 <elliott> whether it will be possible to distribute compiled Mercury code under
10:42:02 <elliott> the Apache License.
10:42:02 <elliott> eip
10:42:03 <elliott> rip
10:42:31 -!- GreaseMonkey has quit (Quit: The Other Game).
10:45:38 <monqy> -- Installation complete.
10:45:39 <monqy> :o
10:45:50 <monqy> -- Don't forget to add /usr/bin to your PATH,
10:45:52 <monqy> thanks
10:46:31 <elliott> you instaleld it into /usr/bin
10:46:32 <elliott> smart
10:46:43 <monqy> it was...automatic
10:46:55 <elliott> mmc --make-transitive-optimization-interface --grade asm_fast.gc.profdeep --mercury-linkage shared --flags LIB_FLAGS --flags INTER_FLAGS -R/usr/local/lib/mercury/lib/asm_fast.gc.profdeep -R/usr/local/lib/mercury/lib --no-warn-insts-without-matching-type array
10:46:59 <elliott> tarnstieitvejtvie operaitismtoamtion weienteracfse
10:47:08 <monqy> i did not want to think so i grabed an automatic...
10:47:18 <monqy> it will hurt me,, in the end,,
10:47:49 <elliott> dont do, drmugs
10:49:22 <elliott> monqy: mercury better be,... really godo... for this
10:49:52 <monqy> i;m reading a documentation?? its weird
10:52:17 -!- Taneb has joined.
10:52:32 <monqy> time to test
10:54:51 <elliott> It is slightly unfortunate that the “Hello, World!” program introduces no
10:54:51 <elliott> less than three advanced Mercury concepts, but since tradition dictates that
10:54:51 <elliott> tutorial texts start with “Hello, World!” we’ll just have to jump straight in
10:54:51 <elliott> with the knowledge that things will get easier thereafter.
10:54:54 <elliott> hepl monqy
10:55:26 <monqy> yep
10:55:41 <elliott> its hleleo world is diferent to wikpeds :(
10:56:05 <elliott> o
10:56:06 <monqy> i compiled hello world...and it works....
10:56:07 <elliott> then it becomes the same
10:56:13 <elliott> monqy: wtait for me :'(
10:56:21 <monqy> my broekn mercury...works...
10:56:34 <monqy> for now...atleast
10:56:39 <elliott> monqy: wtait for me :'(
10:56:41 <elliott> wtatiatie
10:58:37 <elliott> monqy: wtiatweit
10:58:42 <monqy> asdgaldgnh
10:59:13 <elliott> monqy: wtiatweit
11:00:15 <elliott> monqy: wairwirit
11:00:15 <monqy> this documentation doesn't quite match up with another documentation i read.;.
11:00:29 <elliott> monqy: waittiete
11:00:32 <elliott> for me,s :'(
11:00:33 -!- nooga has joined.
11:00:33 <elliott> what
11:00:35 <elliott> domucumationai?
11:00:38 <nooga> hehe
11:00:47 <monqy> this other one has a different sugar
11:00:49 <nooga> this whole mission control thingy is so annoying
11:00:55 <monqy> instead of !IO it is different
11:01:03 <elliott> monqy: it explains later
11:01:10 <monqy> no i mean
11:01:11 <elliott> how to do... n(!iO...
11:01:16 <monqy> write_total(Total) -->
11:01:16 <monqy> print("The total is "),
11:01:17 <monqy> print(Total),
11:01:17 <monqy> print('.'),
11:01:19 <monqy> nl.
11:01:27 <elliott> that looks like prolog
11:01:27 <elliott> but w/e
11:01:31 <elliott> this tutorial is new apparently so
11:01:44 <monqy> that doesn't look like prolog, to me?
11:01:57 <monqy> does prolog have --> ???
11:02:11 <elliott> i duneontknwo
11:02:17 <monqy> citatio:n http://www.mercury.csse.unimelb.edu.au/information/doc-release/mercury_trans_guide/IO.html
11:02:36 <elliott> oh DCG things
11:02:41 <elliott> that's probably usable too but as a different thing...
11:04:18 <monqy> the wierdest i have so far seen in mercury is probably the pred thing with ::in and ::out and the determinism declaration
11:04:26 <elliott> those are cool.......
11:04:32 <elliott> it lets... typechecking and... OPTIMZATION
11:04:54 <monqy> is multiple outs possible i have not checek,ed
11:05:05 <elliott> yes,prloggs
11:05:13 <elliott> monqy: omg yay my compile is on to the last bit
11:05:30 <monqy> which last bit
11:05:40 <elliott> dunno, ti did a last bit, and my computer cant be slower than yours so
11:05:41 <elliott> it must be
11:05:42 <elliott> the last bit
11:05:59 <monqy> my computer is very slow...
11:08:07 <elliott> yay i think it is really finishing now
11:08:15 <elliott> monqy: wtataitait, for mems,
11:09:39 <monqy> "rot13 has the cryptographic"
11:09:39 <monqy> strength of damp tissue paper,
11:09:41 <monqy> "
11:09:47 <monqy> - book.pdf
11:09:56 <elliott> australians
11:10:05 <elliott> mmc --make-transitive-optimization-interface --grade asm_fast.gc.trseg --mercury-linkage shared --flags LIB_FLAGS --flags INTER_FLAGS -R/usr/local/lib/mercury/lib/asm_fast.gc.trseg -R/usr/local/lib/mercury/lib mutvar
11:10:05 <elliott> NO NOT MORE
11:10:12 <elliott> help what was the last grade you did
11:10:13 <monqy> always, more
11:11:37 <elliott> help what was the last grade you did
11:11:38 <monqy> hlc.gc.trseg maybe??
11:11:44 <elliott> hlc??
11:11:45 <elliott> help
11:12:15 <monqy> high-level c i think...i should not have gone mindless...and have manualy disabled usefless grades,...like that one...
11:12:31 <elliott> so um
11:12:35 <elliott> all i've seen so far is asm_fast
11:12:38 <elliott> does that mean there's like
11:12:46 <elliott> three more iterations of this entire compile process to do
11:13:10 <monqy> you can never have enough iterations of the entire compile process
11:13:15 <elliott> thats not an answer
11:13:17 <elliott> is that a true thing because
11:13:19 <elliott> i might comit suicide
11:13:39 <monqy> i forget how many i went throgute anbd their names :(
11:13:53 <elliott> did you build in parallarlarllel
11:13:57 <monqy> it was: "a lot"
11:14:08 <monqy> i think i did -j2 because i have 2 cores...i think
11:14:19 <elliott> i did -j toobut i dont think it s working almso unelss you use bfs you should use one more than core to -j
11:14:56 <monqy> some day i may learn how to -j...proeprly
11:15:40 <elliott> help monqy hlep it doesnt sotp the building
11:15:42 <elliott> can i have your binries
11:16:17 <monqy> youve already built mmc,,,no?///and probabyl all the grades you need,,,you just have to insatll them,...
11:16:28 <elliott> they are installing , by doing mmc ---...
11:16:34 <elliott> thats the stdlib uilding
11:16:36 <monqy> mmc is the mercury compiler
11:16:36 <elliott> the grades,
11:16:39 <elliott> i know
11:16:42 <elliott> mmc --make-optimization-interface --grade asm_fast.gc.trseg --mercury-linkage shared --flags LIB_FLAGS --flags INTER_FLAGS -R/usr/local/lib/mercury/lib/asm_fast.gc.trseg -R/usr/local/lib/mercury/lib --no-local-thread-engine-base thread.semaphore
11:16:42 <elliott> mmc --make-transitive-optimization-interface --grade asm_fast.gc.trseg --mercury-linkage shared --flags LIB_FLAGS --flags INTER_FLAGS -R/usr/local/lib/mercury/lib/asm_fast.gc.trseg -R/usr/local/lib/mercury/lib --no-local-thread-engine-base thread.semaphore
11:16:43 <elliott> mmc --make-transitive-optimization-interface --grade asm_fast.gc.trseg --mercury-linkage shared --flags LIB_FLAGS --flags INTER_FLAGS -R/usr/local/lib/mercury/lib/asm_fast.gc.trseg -R/usr/local/lib/mercury/lib thread.mvar
11:16:45 <elliott> mmc --make-transitive-optimization-interface --grade asm_fast.gc.trseg --mercury-linkage shared --flags LIB_FLAGS --flags INTER_FLAGS -R/usr/local/lib/mercury/lib/asm_fast.gc.trseg -R/usr/local/lib/mercury/lib thread.channel
11:16:49 <monqy> :(
11:16:49 <elliott> mmc --compile-to-c --grade asm_fast.gc.trseg --mercury-linkage shared --flags LIB_FLAGS --flags INTER_FLAGS -R/usr/local/lib/mercury/lib/asm_fast.gc.trseg -R/usr/local/lib/mercury/lib thread.channel > thread.channel.err 2>&1
11:16:55 <elliott> if thats not compiling i dont believe you
11:17:25 <monqy> its forever
11:19:44 -!- Patashu has joined.
11:22:27 -!- oklopol|2 has joined.
11:25:22 -!- oklopol has quit (Ping timeout: 260 seconds).
11:27:28 -!- monqy has quit (Quit: hello).
11:31:05 -!- derdon has joined.
11:43:03 -!- pikhq has quit (Ping timeout: 246 seconds).
11:43:09 -!- pikhq has joined.
11:46:57 -!- lambdabot has quit (Ping timeout: 260 seconds).
11:47:06 <Taneb> Not lambdabot!
11:47:19 <nooga> mmc?
11:47:54 <elliott> melbourne mercury compiler
11:48:08 <Taneb> I used to live there
11:48:15 <Taneb> Compiler was a nice place
11:48:45 <nooga> i recently updated to OSX Lion
11:49:10 <nooga> and it's both cool and uncool
11:49:21 <Taneb> brb
11:50:19 -!- cheater has quit (Ping timeout: 260 seconds).
11:52:54 -!- cheater has joined.
12:11:22 -!- lambdabot has joined.
12:17:09 -!- Deewiant has quit (Ping timeout: 260 seconds).
12:22:33 -!- Deewiant has joined.
12:28:07 <elliott> Note! The Mercury compiler reorders code as little as possible. However, programmers should not write code that depends upon any particular order of evaluation — code can also be reordered by various optimizations! In particular, it3.5. INSTS AND SUBTYPES 51
12:28:08 <elliott> is a bad idea to write something like ( if X \= 0, Z = Y / X then ... else ... ),
12:28:08 <elliott> assuming that the test for X being non-zero will guarantee that this code
12:28:08 <elliott> cannot lead to a division-by-zero error at run-time. It is certainly possible
12:28:08 <elliott> that the test and the division may be compiled the other way around.
12:28:38 <Deewiant> Why is Mercury happening
12:29:38 <elliott> Deewiant: Decided to learn it
12:29:48 <Deewiant> Why
12:29:51 <Deewiant> Is it interesting?
12:30:04 <elliott> Deewiant: Very
12:30:52 <Deewiant> Oh right, pure Prolog
12:31:03 <elliott> Deewiant: Mercury but without anything non-declarative at all, not even cut, higher-order, "mode-checking" (so that inputs and outputs can be distinguished properly and the like), impurity provided via linear types, and a compiler that produces very efficient code.
12:31:06 <elliott> Erm
12:31:09 <elliott> s/Mercury/Prolog/
12:31:32 <elliott> It's basically Prolog if Prolog was defined by Haskell/Clean geeks who happened to be really good at writing compilers :P
12:31:39 <elliott> So nothing like Prolog.
12:32:11 <elliott> :- mode in == (ground >> ground).
12:32:11 <elliott> :- mode out == (free >> ground)
12:32:12 <elliott> SO COOL
12:33:42 <elliott> Its inst declaration system is pretty great too, it basically lets you define valid inputs for a function arbitrarily...
12:33:50 <elliott> And you can define functions as total for certain subsets of inputs and the like.
12:35:18 <elliott> Deewiant: The toolchain is almost as bad as D's though, it's compiled something like thirty copies of the standard library so far, for all the different variants
12:35:26 <elliott> And it does it during "make install" for no obvious reason
12:36:50 <Deewiant> Damn, Haskell does only three currently
12:36:54 <elliott> Uniqueness typing is really nice
12:36:56 <Deewiant> Lot of catching up to do
12:37:01 <elliott> Deewiant: Three? I just have profiling and normal
12:37:06 <Deewiant> And dynamic
12:37:11 <elliott> Useless
12:37:22 <elliott> But yeah, this is a really cool language
12:37:28 <elliott> Oh man, it even has typeclasses and existentials
12:37:35 <elliott> I FEEL SO AT HOME
12:37:43 <elliott> IT EVEN HAS FUNDEPS
12:37:53 <Taneb> Make a whatevercraft in it
12:38:07 <Patashu> does mercury have openGL bindings?
12:38:13 <Patashu> no??? well screw your craftmine
12:38:23 <elliott> asciicraft
12:38:34 <Patashu> roll your own OpenGL
12:38:43 <Patashu> and render using #s for white and .s for black
12:38:59 <Patashu> DOSCraft
12:39:07 <elliott> craftcraft
12:39:14 <elliott> enter language, display mechanism
12:39:16 <elliott> whatevercraft game comes out
12:39:20 <Patashu> nice
12:39:23 <elliott> but you have to mine the language and mechanism first
12:39:27 <Patashu> but you also need a craftcraftfactory
12:39:30 <elliott> help
12:39:47 <Patashu> and craftcraftfactorydecorators
12:40:15 <elliott> crattorydecorators
12:40:39 <Patashu> like say you want a read-only craftcraftfactory
12:41:26 <elliott> /home/elliott/mercury-compiler-11.01/install_grade_dir.hlc.par.gc/scripts/mgnuc --grade hlc.par.gc -- -c robdd.c -o robdd.o
12:41:29 <elliott> PLEASE LET THIS BE THE LAST ONE
12:41:35 <elliott> I WILL NEVER EVER WANT TO USE THE HIGH-LEVEL C BACKGROUND WITH PARALLEL AND ALSO GC
12:41:40 <elliott> WHY ARE YOU D;OING THIS TO ME
12:41:48 <elliott> Also is that STM I see coooool
12:41:52 <elliott> this language is a haskell away from haskell
12:42:05 <Taneb> So is haskell*2
12:42:13 <elliott> these things are true
12:44:17 <Deewiant> warning: ‘mercury__f_114_101_108_97_116_105_111_110_95_95_115_112_97_114_115_101_95_98_105_116_115_101_116_95_95_85_110_117_115_101_100_65_114_103_115_95_95_112_114_101_100_95_95_102_111_108_100_50_95_98_105_116_115_95_95_104_111_49_48_50_95_95_91_49_44_32_52_44_32_54_93_95_48_9_0’ used but never defined
12:44:31 <Deewiant> I'm getting a bad feeling about this
12:44:41 <elliott> Deewiant: monqy got that too; I blame you or whatever
12:44:46 <elliott> Apparently it works after the hours of compilations though
12:44:52 <elliott> So I guess it's nothing to worry about
12:44:59 <elliott> Seriously though, make install takes longer than building GHC
12:45:46 <Patashu> deewiant: what
12:45:48 <Deewiant> I probably blame your old cc
12:46:03 <elliott> My gcc is a bit old but producing extra warnings it weird? w/e/
12:46:03 <Deewiant> Patashu: Compiling mercury
12:46:38 <fizzie> Oh no, it's spreading; now Deewiant is infected too.
12:46:43 <elliott> Deewiant: did you see about the unboxed float thing in the configure
12:46:52 <elliott> I think you're meant to bootstrap it after compiling but I was just uh
12:46:55 <Deewiant> No
12:46:57 <elliott> fuck that I can deal with boxed floats to not go through this again
12:47:00 <Deewiant> I'm just installing from AUR
12:47:11 <elliott> Oh
12:47:12 <elliott> What version
12:47:19 <elliott> OMG mine finished
12:47:23 <Deewiant> 11.02 or something?
12:47:41 <Deewiant> 11.01
12:47:48 <elliott> Darn, can't mock you for being out of date
12:48:10 <elliott> -- Don't forget to add /usr/local/bin to your PATH,
12:48:10 <elliott> -- /usr/local/man to your MANPATH,
12:48:10 <elliott> -- and /usr/local/info to your INFOPATH,
12:48:10 <elliott> -- to copy deep_profiler/mdprof_cgi to /usr/lib/cgi-bin,
12:48:10 <elliott> -- and to add the following lines to the `.emacs' file
12:48:10 <elliott> -- in your home directory:
12:48:12 <elliott> Sure is demanding
12:48:32 <Deewiant> I wonder if it'll tell me that, I don't have emacs installed
12:49:03 <elliott> Deewiant: http://www.mercury.csse.unimelb.edu.au/information/papers/book.pdf is a good introduction BTW
12:49:12 -!- Lymee has joined.
12:49:39 <Deewiant> elliott: I don't really care right now, I'm just installing this because I like to have language implementations installed in case I need them
12:49:50 <elliott> Smooth
12:50:27 <nooga> this whole Mercury language looks sad
12:51:17 <elliott> nooga: For what value of sad
12:51:17 <Taneb> Aaargh pins and needles
12:52:55 <Taneb> They're almost gone
12:53:24 <elliott> Deewiant: BTW shiro got down from over one second to 0.76s on Mycology just by changing the Vector type from tuples to something strict and unboxed
12:53:40 <Deewiant> Yes, that would make sense
12:54:06 <elliott> Only point seven seconds to go until I'm par with CCBI and cfunge
12:54:26 <elliott> I guess redoing my stack might have a similarly beneficial effect
12:54:39 <elliott> I should probably profile at this point
12:56:06 -!- ais523 has joined.
12:56:14 <elliott> Hi ais523
12:56:26 <ais523> hi elliott
12:56:26 <Taneb> I made a Suffolk implementation
12:56:36 <ais523> that was fast, I had to wait for things to stop stealing focus before I could reply
12:56:46 <ais523> what's Suffolk, again? I know it's one of mine but I've forgotten the details
12:56:55 <ais523> I was just trying to fix TCness in someone else's language
12:57:00 * ais523 reads http://esolangs.org/wiki/Suffolk
12:57:00 <Taneb> The one for making minsky machines or something
12:57:21 <elliott> ais523: good news: Shiro is faster on Mycology (OBVIOUSLY EVERYONE CARES)
12:58:27 <ais523> I do care, but only very slightly
12:59:00 <Taneb> Let's see if I know what you're on about
12:59:17 <Taneb> Mycology is your Funge-98 implementation in Haskell
12:59:21 <elliott> Nope
12:59:29 <elliott> Deewiant: Correct this injustice
12:59:40 <Taneb> Have I got it backwards?
12:59:44 <ais523> indeed
12:59:46 <Deewiant> http://iki.fi/deewiant/befunge/mycology.html
12:59:51 <ais523> Shiro is elliott's Funge-98 implementation in Haskell
12:59:52 <elliott> Yes, Haskell is my Funge-98 implementation in Mycology
13:00:02 <ais523> and Mycology is the best-known Funge-98 testsuite, written by Deewiant
13:00:22 <Taneb> I knew what they were, just I had them backwards
13:00:28 <fizzie> Elliott is an implementation of "is" on Haskunge-Mycology.
13:00:33 <elliott> True
13:21:49 -!- Taneb has changed nick to TanebIsNotHere.
13:30:30 -!- copumpkin has quit (Ping timeout: 246 seconds).
13:30:55 -!- copumpkin has joined.
13:32:03 -!- TanebIsNotHere has changed nick to Taneb.
13:48:26 -!- derdon has quit (Remote host closed the connection).
13:50:37 <elliott> Deewiant: Woot, my new stacks work perfectly except now Mycology hangs
13:50:46 <Deewiant> That's... not perfect
13:50:56 <elliott> GOOD: { transfers cells correctly
13:50:56 <elliott> GOOD: { sets storage offset correctly, and p uses it
13:51:05 <elliott> And I just badly tried to rewrite the transfer parts of { and }, so woooo
13:51:17 <elliott> stackTake 0 _ = []
13:51:17 <elliott> stackTake n stk = stackHead stk : stackTake (n-1) (stackTail stk)
13:51:17 <elliott> Looks fine to me though
13:52:26 <elliott> Admittedly the function I'm replacing is kind of wack
13:52:48 <elliott> Deewiant: Oh, I can just run it for like ten seconds and it'll spike on the profiling report :-D
13:52:52 <elliott> BEST WAY TO GET A STACK TRACE EVER
13:56:27 -!- TeruFSX2 has quit (Ping timeout: 260 seconds).
13:59:36 -!- GuestIceKovu has joined.
14:00:02 <Taneb> About Uniquode, what should A do?
14:01:39 -!- Slereah has quit (Ping timeout: 264 seconds).
14:01:41 -!- GuestIceKovu has changed nick to Slereah.
14:03:04 <itidus20> "Sigmund Freud himself experienced fleeting derealization when visiting the Acropolis in person; having read about it for years and knowing it existed, seeing the real thing was overwhelming and proved difficult for him to perceive it as real."
14:03:32 <Taneb> Freud was weird
14:04:29 <elliott> also an idiot
14:04:58 <Taneb> He heard about someone dreaming about giraffes and thought he was dreaming about his parents
14:05:08 <elliott> was the person a giraffe
14:05:13 <elliott> because that might be quite reasonable if so
14:05:36 <Taneb> No, he wasn't
14:05:40 <elliott> ah
14:06:00 <itidus20> dreams do not deal in reason :D
14:06:07 <Taneb> I reckon Colonel Gadaffi would make a good theoretical psychologist
14:11:22 <elliott> Deewiant: So what situation is it when Mycology freezes after
14:11:24 <elliott> GOOD: { transfers cells correctly
14:11:24 <elliott> GOOD: { sets storage offset correctly, and p uses it
14:11:36 <elliott> I think my code freezes up trying to find an instruction but I may be wrong
14:11:40 <Deewiant> Run ccbi on it, I can't remember
14:11:43 <elliott> ISTR I had a problem like this before but all my code looks dandy
14:11:53 <elliott> Deewiant: How'd ccbi help, it's presumably doing jiggery with { and }
14:11:57 <elliott> Or do you mean the weirdo trader
14:11:59 <elliott> tracer
14:12:05 <Deewiant> It's not weirdo :-P
14:12:11 -!- Taneb has quit (Quit: Goodbye).
14:12:25 <elliott> Anything I don't know is weirdo
14:13:45 <elliott> GOOD: } resets storage offset
14:13:45 <elliott> GOOD: } transfers cells correctly
14:13:48 -!- FireFly has joined.
14:14:00 <elliott> Deewiant: Does it happen to test both before outputting? I can see that I might be transferring cells incorrectly MAYBE, but if it's definitely the storage offset...
14:14:30 <Deewiant> I'm pretty sure I never do that
14:14:37 <elliott> Never do what, test two at once?
14:14:38 <Deewiant> But it probably calls } only once there
14:14:42 <elliott> Well right
14:15:08 <elliott> Alright, working assumption is that stackAt is broken
14:15:17 <Deewiant> I'm pretty sure I never do "test a, test b, output a, output b", instead of "test a, output a, test b, output b"
14:15:31 <elliott> Oh, duhhh
14:15:33 <elliott> It should be + not -
14:16:39 <elliott> Deewiant: Good lord, how big a stack do you use in Mycology
14:16:49 <elliott> ***GROWING STACK***
14:16:49 <elliott> ***GROWING STACK***
14:16:49 <elliott> Testing fingerprint FPSP... not loaded.
14:16:49 <elliott> ***GROWING STACK***
14:16:49 <elliott> ***GROWING STACK***
14:16:50 <elliott> Testing fingerprint FPDP... not loaded.
14:16:54 <elliott> ***GROWING STACK***
14:16:56 <elliott> ***GROWING STACK***
14:16:58 <elliott> Testing fingerprint 3DSP... not loaded.
14:17:00 <elliott> ***GROWING STACK***
14:17:02 <elliott> ***GROWING STACK***
14:17:04 <elliott> Testing fingerprint FRTH... not loaded.
14:17:06 <elliott> ***GROWING STACK***
14:17:08 <elliott> ***GROWING STACK***
14:17:10 <elliott> Testing fingerprint IIPC... not loaded.
14:17:12 <elliott> ***GROWING STACK***
14:17:14 <elliott> That's EXPONENTIAL
14:17:33 <Deewiant> elliott: ccbi -s
14:17:39 <Deewiant> Stack contained: 6185 cells at maximum
14:17:49 <elliott> Hmm
14:17:53 <elliott> Well this is Wrong then
14:18:34 <Deewiant> Maybe you resize it to something smaller on occasion? E.g. on n
14:19:19 <elliott> Hmm, right, n just pushes an empty stack
14:19:21 <elliott> Which is stupid
14:19:42 * elliott adds a clearStack :P
14:20:15 <elliott> Actually wait, that just drop length
14:20:46 <elliott> Wow, why is this so slow??
14:21:03 <elliott> And why is it freezing up after testing NULL... SOMETHING is slowing stack pushes down to a glacial pace here
14:24:39 <elliott> stackCons Shiro.Stack 76.1 9.9
14:24:39 <elliott> mergeByteString Shiro.FungeSpace 5.9 26.8
14:24:40 <elliott> WOW :P
14:24:50 <Deewiant> What's your data structure? :-D
14:25:39 -!- nooga has quit (Ping timeout: 264 seconds).
14:25:51 <elliott> Deewiant: Just an exponentially growing vector... I have NO IDEA why it's so collosally slow :P
14:25:55 <elliott> stackCons :: Value -> Stack -> Stack
14:25:56 <elliott> stackCons x (Stack 0 v) = stackCons x (grow v)
14:25:56 <elliott> stackCons x (Stack p v) = Stack (p-1) $ v V.// [(p-1, x)]
14:25:56 <elliott> grow :: V.Vector Value -> Stack
14:25:58 <elliott> grow v = trace ("***GROWING STACK*** " ++ show sz) $ Stack sz $ V.replicate sz 0 V.++ v
14:26:00 <elliott> where sz = V.length v
14:26:02 <elliott> SO INEFFICIENT
14:26:20 <elliott> Even if I make the stack huge enoug that it never grows during Mycology, it STILL makes things absolutely glacial
14:26:23 -!- CakeProphet has quit (Ping timeout: 264 seconds).
14:26:25 <elliott> stackCons x (Stack p v) = Stack (p-1) $ v V.// [(p-1, x)]
14:26:28 <elliott> Literally the slowest operation.
14:26:38 <Deewiant> // seems O(n)
14:26:41 <Deewiant> Isn't it?
14:26:58 <elliott> Deewiant: In the elements of the list of updates, yes
14:27:00 <elliott> So n = one
14:27:08 <Deewiant> Oh
14:27:11 <elliott> Unless I greatly misunderstand.
14:27:30 <elliott> I can use unsafe indexing but I have NO idea how this could be so slow... I don't have built up thunks either
14:27:35 <elliott> data Stack = Stack !Int !(V.Vector Value) deriving (Show)
14:27:45 -!- CakeProphet has joined.
14:27:52 <elliott> Deewiant: Oh hmm
14:27:54 <elliott> (//)Source
14:27:54 <elliott> :: Unbox a
14:27:55 <elliott> => Vector a
14:27:57 <elliott> initial vector (of length m)
14:27:59 <elliott> -> [(Int, a)]
14:28:01 <elliott> list of index/value pairs (of length n)
14:28:03 <elliott> -> Vector a
14:28:05 <elliott> O(m+n) For each pair (i,a) from the list, replace the vector element at position i by a.
14:28:07 <elliott> Maybe it is slow
14:28:11 <elliott> But c'mon, it's eight thousand unboxed elements
14:28:15 <elliott> How slow can it possibly be
14:28:28 <elliott> I guess vectors aren't a panacea in the world of persistent data structures
14:31:17 <elliott> Deewiant: I suppose the fact is that it's copying like a hundred kilobytes per push and that just doesn't work
14:31:23 -!- MDude has joined.
14:31:32 <elliott> I probably want something tree-based, or else make it mutable (gross, can't store history)
14:32:24 <Deewiant> Yeah, it's O(n) because it has to copy the whole thing
14:32:34 <elliott> Not with UNIQUENESS TYPING
14:32:39 <Deewiant> Try a list of vectors?
14:32:40 <elliott> ...aka a mutable variable :P
14:32:43 <Deewiant> Yeah :-p
14:32:51 <elliott> Deewiant: You mean just divide it into vectors of constant size?
14:32:56 <Deewiant> Yeah
14:33:10 <elliott> That could work, but each vector would have to be super-tiny, or it'd _still_ be copying like a kilobyte each push which will be slower than a list any day
14:33:25 <elliott> I suppose I could have like, a list of the top sixteen elements, and stuff the rest into a vector... but that basically reduces to a vector.
14:33:27 <elliott> Erm
14:33:28 <Deewiant> True enough
14:33:28 <elliott> I suppose I could have like, a list of the top sixteen elements, and stuff the rest into a vector... but that basically reduces to a list.
14:33:37 <Deewiant> What you need is a JIT
14:33:47 <Deewiant> So that you can optimize pop-push to a modification
14:33:48 <elliott> Deewiant: What /might/ work is (Int,[Value]), where the list always ends with [0..] and the Int maintains the length
14:34:04 <elliott> That means O(1) length calculation, and no checks for TOS/SOS/etc.
14:34:13 <elliott> And the [] would be strict and unboxed etc. :P
14:34:26 <elliott> That's kind of not massively better than the current dumb list representation, but oh well
14:35:54 <Deewiant> Have you tried Data.Sequence?
14:36:12 <Deewiant> I forget what it's good at but maybe it's good at something relevant
14:36:23 <elliott> Well, it's a finger tree, they're good at everything
14:36:34 <elliott> I'll probably try it if this doesn't pay off well
14:36:49 <elliott> They support efficient accessing from the end though, which is quite thoroughly irrelevant to my case
14:36:58 <elliott> But they're basically functional Python-lists
14:37:00 <elliott> So maybe it'll work
14:40:54 <elliott> I do like this "being able to swap out an implementation without rewriting bits of all the rest of the code" thing
14:40:57 <elliott> ABSTRACTION, WHAT IS IT
14:42:14 <elliott> $ ext/mycology
14:42:14 <elliott> shiro: <<loop>>
14:42:17 <elliott> Deewiant: I'm clever
14:42:19 <Deewiant> Indeed
14:42:23 <elliott> data StackElems = !Value :- !StackElems deriving (Show)
14:42:30 <elliott> Deewiant: Behold my incredibly well-inhabited data type
14:42:35 <elliott> STRICTLY UNBOX EVERYTHING
14:43:50 <elliott> Oh come on, you can't tell me that didn't help performance even a little
14:43:52 <elliott> Not even a little bit?
14:49:19 <elliott> Yeah, I'm going to try Data.Sequence.
14:50:00 <elliott> Deewiant: How is CCBI so fast anyway, it doesn't do cfunge's ridiculousness and the fungespace doesn't exactly help for Mycology
14:50:46 <Deewiant> Maybe it does help :-P
14:51:14 <elliott> Deewiant: Not point eight seconds of help
14:51:35 <Deewiant> It's .8 faster than cfunge for you?
14:52:03 <elliott> Nope, but it's .eight faster than shiro
14:52:34 <Deewiant> Well, profile your slowness
14:52:45 <Deewiant> Its stack is a mutable array, that probably helps
14:52:48 <elliott> I did; it's my fungespace, but that's still only like thirty-five percent of it
14:53:07 <elliott> Yeah; I'm really reluctant to switch from persistent structures, though
14:53:14 <elliott> For obvious reasons of goodness
14:54:49 -!- TeruFSX2 has joined.
14:55:35 -!- nooga has joined.
14:58:35 <nooga> what mycology
14:59:09 <elliott> Question insufficiently coherent
14:59:28 <elliott> Deewiant: I swear to god the first Google suggestion for "mycology" is "mycology deewiant"
14:59:31 <elliott> Maybe that's just because of my search history :P
14:59:54 -!- Taneb has joined.
14:59:57 <Deewiant> Yeah it's "mycology supplies" for me :-P
15:00:06 <nooga> ah, the test suite
15:00:08 -!- cheater has quit (Ping timeout: 268 seconds).
15:00:12 <Taneb> Greetings! Hearty salutations!
15:01:30 <elliott> nooga: Did you ever expand on that nugget of wisdom wrt. Mercury being "sad"
15:01:52 <Taneb> It's not loved, despite its brilliance
15:02:04 <Taneb> Thousands of people love C++
15:02:10 <elliott> Thousands
15:02:16 <elliott> Bit low don't you think
15:03:27 <Taneb> But who loves Mercury?
15:03:36 <Taneb> Confused astronomers
15:04:51 <nooga> elliott: sad -> not amusing
15:05:02 <elliott> nooga: Which means what
15:05:05 <elliott> Not an esolang?
15:05:22 <Taneb> I just found myself watching the House of Commons live
15:05:39 <Taneb> And thought "I've been there! Those seats are comfy"
15:05:45 <nooga> elliott: which means that it looks like a mix of sad prolog with haskell
15:05:56 <elliott> How exactly do you define amusing
15:06:14 -!- TeruFSX2 has quit (Read error: Connection reset by peer).
15:06:37 <Taneb> I have to say, watching the house of commons live is a good cure for insomnia
15:07:22 <nooga> not amusing -> i don't think it's bad but somehow i don't find a use for it and it's not interesting enough to play with it
15:08:18 <elliott> Now that we've successfully unpacked your thought, I'll say it's sad
15:08:52 <nooga> what's sad?
15:09:12 <elliott> Your thought.
15:09:13 <Taneb> The Titanic
15:09:30 <nooga> elliott: okay
15:09:35 <nooga> brb, feeding time
15:10:14 <Taneb> I would learn Mercury if I wasn't currently procrastinating learning Haskell
15:12:06 -!- Phantom_Hoover has joined.
15:12:56 <Gregor> I would fly to Mercury if I wasn't currently procrastinating flying to Mars.
15:13:40 -!- nooga has quit (Ping timeout: 240 seconds).
15:18:52 <elliott> modifyIPList Shiro.Monad 18.4 31.5
15:18:58 <elliott> How the HELL can this take twenty percent of execution time.
15:19:12 <elliott> modifyIPList :: (([IP],[IP]) -> ([IP],[IP])) -> Shiro ()
15:19:12 <elliott> modifyIPList f = modify $ \st -> st{ ipList = f (ipList st) }
15:19:34 <elliott> Oh wait, stack modifications happen in there :P
15:22:03 <Gregor> <elliott> What is it with having to specify X = X.Next
15:22:26 <Gregor> elliott: Just because that's how it works with many operators doesn't mean you want that to be enforced.
15:22:40 <elliott> Fair enough
15:22:49 <elliott> It might want to be default though :P
15:23:35 <Gregor> Currently my grammar syntax has no way to delete, so default = forced X-P
15:29:35 -!- zid has left.
15:51:53 -!- Patashu has quit (Quit: MSN: Patashu@hotmail.com , Gmail: Patashu0@gmail.com , AIM: Patashu0 , YIM: patashu2 .).
15:59:48 -!- cheater has joined.
15:59:52 <elliott> Deewiant: What's with you having one fungespace per IO
15:59:53 <elliott> IP
16:00:15 <Deewiant> Eh?
16:00:27 <elliott> Oh, wait, never mind
16:00:28 <elliott> alias .FungeSpace!(dim, befunge93) FungeSpace;
16:00:29 <elliott> deceived me
16:01:05 <Taneb> I would like to see something self-modifying to the level of Befunge designed to be easy to compile
16:01:31 -!- cheater has quit (Client Quit).
16:01:49 -!- cheater has joined.
16:02:25 -!- cheater has quit (Client Quit).
16:03:16 -!- cheater has joined.
16:03:30 <elliott> Deewiant: Holy shit, slowdown stack overflows
16:03:42 <elliott> ...and then doesn't the next time
16:03:47 <elliott> And then does
16:04:16 -!- pikhq_ has joined.
16:06:40 <elliott> Deewiant: How random is slowdown exactly
16:06:55 <Deewiant> The location is random, nothing else
16:06:59 -!- pikhq has quit (Ping timeout: 260 seconds).
16:07:18 <elliott> Deewiant: Right, so it could be right next to it or on the other side of the world :)
16:07:23 <elliott> That stack overflow sure is worrying though
16:07:36 <elliott> Oh what the heck
16:07:41 <Deewiant> The odds are that it's on the other side of the world, of course
16:07:47 <elliott> hat the fuck just happened
16:07:56 <Deewiant> 2^32 possible values and "right next to it" is about 1000 of them
16:07:56 <Taneb> Not hat the fuck!
16:08:00 <elliott> GOOD: u reflects when stack stack has only one stack
16:08:00 <elliott> GOOD: u with zero count does nothing
16:08:00 <elliott> GOOD: u with a positive count transfers cells correctly
16:08:00 <elliott> GOOD: u with a negative count transfers cells correctlyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy
16:08:02 <elliott> yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy[...]
16:08:05 <Deewiant> yyyyyyyyyyyyyyyyyyyyyyyy
16:08:07 <elliott> Yes.
16:08:08 <tiffany> ._.
16:08:08 <elliott> yyyyyyyyyy.
16:08:12 <Deewiant> Noooooooooooooo
16:08:15 <elliott> CORRECTLYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY
16:08:23 <elliott> Then it just keeps spamming ys forever.
16:10:08 <elliott> Deewiant: Grmbl, fixing the stack overflow you caused slows down my Mycology performance
16:10:12 <elliott> Please only write one program, thnx
16:10:23 <Deewiant> Too late, sorry :-/
16:11:08 <elliott> V. disappointed in you.
16:11:16 <elliott> I'ma implement FING
16:11:18 <elliott> Seems easy enough
16:11:19 <Deewiant> What was the stack overflow
16:11:28 <elliott> stackDrop :: Int -> Stack -> Stack
16:11:29 <elliott> stackDrop _ s@(Stack 0 _) = s
16:11:29 <elliott> stackDrop 0 s = s
16:11:29 <elliott> stackDrop m (Stack n (_ :- xs)) = stackDrop (m-1) (Stack (n-1) xs)
16:11:38 <elliott> Where Stack is strict in all fields and I guess that did something? Fucked if I know
16:11:39 <elliott> Replaced with
16:11:42 <elliott> stackDrop :: Int -> Stack -> Stack
16:11:42 <elliott> stackDrop amount (Stack elems xss) = go amount elems xss
16:11:42 <elliott> where go _ 0 xs = Stack 0 xs
16:11:42 <elliott> go 0 n xs = Stack n xs
16:11:42 <elliott> go m n (_ :- xs) = go (m-1) (n-1) xs
16:11:52 <elliott> It might not actually be slower, I get quite a bit of variance
16:13:10 <ais523> what proportion of errors in Befunge-98 interps are actually anticipated by Mycology?
16:13:19 <ais523> half the deviations from expected output aren't BAD: at all but complete nonsense
16:13:29 <elliott> Surprisingly many
16:13:40 <elliott> Once I got Mycology actually running, it said BAD about almost every mistake I mdae
16:13:41 <elliott> made
16:13:48 <elliott> Apart from concurrent funge shit which just spewed crap
16:13:50 <Deewiant> ais523: You just hear more about the nonsense because the BADs are comparatively easy to fix
16:14:00 <elliott> The BADs were usually really unhelpful messages, though :P
16:14:08 <elliott> Deewiant: Also because the BADs aren't as entertaining
16:14:13 <elliott> Correctlyyyyyyyyyyyyyyyyyyy
16:14:19 <Deewiant> It's not supposed to tell you what the problem is, just that there is a problem
16:14:54 <elliott> "Mycology failed. Your interpreter is wrong. Fix it."
16:15:32 <Deewiant> Well, with (typically) instruction-level granularity
16:17:05 <elliott> Woot, I might be able to avoid my global/IP state table at all
16:17:09 <elliott> And with it all burdensome existentials
16:17:22 <Taneb> How are trefunge programs formatted?
16:17:37 <Deewiant> Form feeds
16:17:51 <Taneb> Okay
16:23:30 <elliott> BAD: after 'X'AZ, X reflected
16:23:30 <elliott> GOOD: after f7+0Z, A reflects
16:23:31 <elliott> Huuh
16:27:33 -!- Taneb has quit (Quit: Goodbye).
16:30:03 -!- copumpkin has quit (Ping timeout: 246 seconds).
16:30:28 -!- copumpkin has joined.
16:34:47 <elliott> Deewiant: Hmm, wrt FING
16:35:12 <elliott> Deewiant: If an invalid (i.e. out-of-range) sem is popped, should one reflect immediately, or pop all values and /then/ reflect?
16:35:19 <elliott> Mycology seems to want the latter
16:35:21 <elliott> Erm
16:35:23 <elliott> rm
16:35:24 <elliott> The former
16:35:27 <elliott> Which is counter-intuitive to me
16:36:06 <Deewiant> Shrug, it's what's done
16:36:14 <elliott> Source :P
16:36:21 <Deewiant> I implemented FING last, dude
16:36:25 <elliott> Fiiiiiiiine
16:36:30 <Deewiant> Blame Vorpal/Mike
16:36:42 <elliott> Vorpal did FING before you? Weird
16:37:01 <Deewiant> I was working on CCBI2, not adding fingerprints
16:43:15 <elliott> GOOD: 'yY reflected
16:43:16 <elliott> yROMA unloaded.
16:43:16 <elliott> GOOD: after bc+0Z'V'BZ"ROMA"4), A pushes 10 and B pushes 5
16:43:38 <elliott> Ugh
16:43:40 <elliott> That "y" isn't right
16:43:41 <elliott> :-(
16:43:46 <elliott> ls
16:43:47 <elliott> oops
16:44:23 <elliott> I wonder where the heck that is coming from?
16:44:59 <elliott> The rest of the output is spotless.
16:49:42 * elliott considers asking, realises Deewiant will tell him to CCBItrace it, considers doing so.
16:52:42 -!- derdon has joined.
17:01:40 <elliott> Deewiant: Oh, I see why you need to keep the fingerprint with FING
17:01:52 <elliott> Because if you swap it around, the top fingerprint on the stack could be the wrong one to unload, right?
17:01:57 <elliott> You want to unload lower down
17:04:16 <Deewiant> Err, that doesn't sound right at all
17:04:28 <Deewiant> Unloading a fingerprint just pops the semantics
17:04:36 <Deewiant> It doesn't care which semantics they are
17:05:08 <elliott> Uhh, really?
17:05:09 <elliott> Okay
17:05:13 <elliott> Why DO you need it then
17:05:58 <Deewiant> I'm not sure what you're talking about
17:06:18 <elliott> Oh hm
17:06:24 <elliott> struct Semantics {
17:06:24 <elliott> cell fingerprint;
17:06:24 <elliott> // Needed for FING/FNGR, since you can't just tell from the instruction
17:06:24 <elliott> // being executed: 'A' in QWFP might be mapped to 'B' in ARST
17:06:24 <elliott> char instruction;
17:06:25 <elliott> }
17:06:29 <elliott> Yeah, what's that instruction about :P
17:06:41 <Deewiant> The comment isn't helpful? :-P
17:06:45 <elliott> Nope
17:06:46 <Deewiant> I want to execute A
17:06:53 <elliott> Oh, I see
17:06:56 <Deewiant> So I check out what fingerprint it is
17:07:01 <elliott> Doesn't apply to me as I do everything as actions :P
17:07:02 <Deewiant> And then what instruction in that fingerprint it is
17:07:06 -!- calamari has joined.
17:07:06 <Deewiant> Yep
17:07:24 <elliott> Pretty distinct problem here though...
17:07:31 <Deewiant> If you just store a function pointer, that should be enough for FING
17:07:34 <Deewiant> Not sure about FNGR
17:07:42 <Deewiant> (Memories point to "no")
17:07:49 <elliott> I'm changing [(FPIns, Shiro ())] into Shiro [(FPIns, Shiro ())], so that it can create its own mutable variables and maps and the like so that state can stay local
17:08:04 <elliott> The problem is, how do I know which instructions to unload without needlessly making it create the mutable variables just to throw them away :P
17:08:13 <elliott> I guess I can assume that it's "free" to do
17:08:15 <elliott> But it's still kind of lame
17:08:18 <elliott> Not as lame as keeping two lists, though
17:11:46 -!- zzo38 has joined.
17:13:20 -!- Taneb has joined.
17:14:04 <elliott> Wow, this is making things so much better.
17:14:55 <Taneb> I may try to create a funge-98 interpreter
17:15:12 <elliott> Good luck, you'll need it
17:15:37 <Taneb> IN VISUAL BASIC 2005!
17:15:39 <elliott> Gah, that somehow slowed down my performance somehow
17:15:48 <elliott> Taneb: I suspect you of underestimating the task
17:16:14 <Taneb> VB2005 is my mother programming language
17:16:36 -!- SgeoISNOWHERE has changed nick to Sgeo.
17:16:44 <Taneb> Also I am mad
17:16:50 -!- pikhq has joined.
17:16:59 -!- pikhq_ has quit (Ping timeout: 260 seconds).
17:18:02 <Taneb> And I would never finish it whatever language I choose
17:18:16 <Taneb> Actually, I'm going to lower my aim a tad
17:18:20 <Taneb> Befunge-93
17:19:24 <elliott> "Tad"
17:19:27 <elliott> More like five miles
17:20:45 <elliott> Wow, that helped
17:21:13 <elliott> ^source
17:21:14 <fungot> http://git.zem.fi/fungot/blob/HEAD:/fungot.b98
17:21:36 <elliott> Got FING, ain't got STRN, SOCK, SCKE or REXP
17:21:38 <elliott> Let's roll
17:24:59 <elliott> ais523: thought: Funge-98 isn't so much an esolang as an eso interpretation model
17:25:18 <ais523> hmm
17:25:23 <elliott> I mean, it's kind of like running your program as a CA with a bunch of foreign API hooks, kind of like a gigantic event machine, and kind of like machine code except with a really ridiculous code structure
17:25:29 <elliott> And yet it's all communicating with the same APIs doing the same stuff
17:25:34 <ais523> I'd say it is an esolang, specifically
17:25:37 <elliott> Well, yes
17:25:41 <elliott> But it's more eso in the other aspect
17:25:43 <ais523> it's just one that happens to be good at linking to existing libraries
17:25:54 <ais523> I mean, imagine an esolang that's nothing but a set of /really good/ FFIs
17:26:06 <ais523> if you want to do flow control, you outsource to, say, C or Prolog or something to do your flow control
17:26:13 <elliott> ais523: well, for a second when thinking about SOCK I thought "oh, I'll have to spawn off threads and all sorts of stuff to avoid blocking the Funge code"
17:26:16 <ais523> likewise, if you want to do numerical calculations, you FFI to Fortran
17:26:21 <elliott> I had honestly mistaken Funge for some ridiculous asynchronous event-driven CA
17:26:29 <elliott> Rather than something being interpreted as an actual sequential language
17:26:34 <elliott> that's just how insane the model is
17:26:45 <ais523> Funge is nothing like a CA, anyway
17:26:51 <elliott> It isn't
17:26:55 <elliott> But I managed to think it was one for several seconds
17:27:28 <calamari> sounds like a fun variant
17:31:42 <zzo38> Make the FFI CA esolang.
17:35:18 <Vorpal> <Deewiant> Blame Vorpal/Mike <-- blame Mike. I asked him iirc.
17:36:36 <Vorpal> <Deewiant> So I check out what fingerprint it is <-- a possibly simpler solution is to push function pointers
17:36:49 <Vorpal> (as you said a bit further down)
17:37:58 <elliott> Less debuggable, one assumes
17:38:11 <Vorpal> <elliott> Got FING, ain't got STRN, SOCK, SCKE or REXP <-- iirc it also uses TOYS in the code to reload the bot.
17:38:35 <Vorpal> elliott: was that last line in reply to function pointers?
17:38:55 <elliott> Yes
17:39:19 <elliott> Let's see how much slower this persistent refstore is
17:39:20 <Vorpal> if so, not really, in gdb printing out a variable that contains a function pointer will print the nameoffunction+0 iirc
17:39:32 <elliott> Dude, I mean in his tracer
17:39:35 <Vorpal> oh
17:39:36 <Vorpal> right
17:39:38 <Vorpal> true
17:40:18 <Vorpal> elliott: anyway you can see TOYS is loaded only on reloading, and unloaded after. So yeah you need to include that to support the bot fully
17:40:22 -!- a93nadk2m has joined.
17:40:29 <elliott> Deewiant: Guess who just shaved something like 0.03s off his average runtime by switching from a hyper-optimised mutable hashtable library to a simple IORef containing a persistent IntMap
17:40:33 <Vorpal> (see like 178 in fungot)
17:40:34 <elliott> THIS GUY
17:40:34 <fungot> Vorpal: mr president, given the astonishing recent growth of india’s economy and its emerging global fnord status, our partnership must now deepen. therefore i can only agree to proposed amendments 4 and 7 is not correct, and if there is one question we disagree on. i am therefore of the utmost importance. hence, it is not a continental practice and by suddenly imposing it we would have been voluntary. this agreement was gree
17:40:52 <elliott> Still gonna be pretty hard to do global state rewind because it's decentralised, but I'll think of something.
17:41:01 <Vorpal> elliott: is that statistically significant?
17:41:03 <elliott> Aaand there goes a dependency
17:41:07 <elliott> Vorpal: Nope, which is why it's excellent
17:41:11 <Vorpal> XD
17:41:23 <elliott> It means I can be more functional at no cost
17:41:30 <Vorpal> elliott: so as far as you can tell "about the same" (averaged over several runs I hope?)
17:41:41 <elliott> Woot, I now depend on nothing that isn't in the Haskell Platform I think
17:41:44 <elliott> Vorpal: Yeah, about the same
17:41:46 <elliott> Maybe a little better
17:41:51 <elliott> My runtime fluctuates too much to tell
17:41:55 <Vorpal> right
17:42:32 -!- a93nadk2m has left.
17:42:44 <elliott> I also have no unsafeCoerce or anything now :)
17:42:46 <elliott> Or existential types
17:42:48 <elliott> Or anything freaky
17:43:00 <Vorpal> elliott: hm I should add support to use AVX somewhere in cfunge. I mean, doing static funge space filling with SSE instructions helped significantly, at least in the version of gcc that was around then, because it didn't auto-vectorise it.
17:43:30 <Vorpal> elliott: what integer size are you using?
17:43:51 <elliott> Vorpal: Thirty-two
17:43:55 <elliott> (Maximum integer)
17:44:07 <Vorpal> XD
17:44:31 <elliott> 1174 Shiro.pristine haskell=1174
17:44:31 <elliott> 1159 Shiro haskell=1159
17:44:32 <elliott> Feels good
17:44:39 <elliott> And it's quite a bit faster too :P
17:45:41 <Vorpal> elliott: 0.03?
17:45:50 <elliott> No :P
17:46:01 <Vorpal> ah
17:46:17 <elliott> Average Mycology runtime is now between 0.75s and 0.86s.
17:46:20 <elliott> And I implement FING.
17:46:45 <elliott> GOOD: put 'foo=bar' with P
17:46:46 <elliott> BAD: "foo"G failed
17:46:46 <elliott> Huuh
17:47:28 <Vorpal> elliott: FING was easy with the way I did fingerprints. Just had to make a few static functions available outside the fingerprint manager and use them from the FING code
17:47:42 <Vorpal> bbl food
17:47:55 <elliott> http://sprunge.us/eXAX
17:47:59 <elliott> No outside support required
17:48:12 <elliott> A bit ugly because my map structure for the FPInses kind of sucks
17:53:41 -!- kwertii has quit (Ping timeout: 276 seconds).
17:59:48 -!- nooga has joined.
18:03:43 -!- kwertii has joined.
18:15:35 -!- ais523 has quit (Ping timeout: 245 seconds).
18:25:00 <elliott> ?hoogle [a] -> (a,[a])
18:25:01 <lambdabot> Data.Char readLitChar :: ReadS Char
18:25:01 <lambdabot> Language.Haskell.TH.Ppr split :: Type -> (Type, [Type])
18:25:01 <lambdabot> Numeric readFloat :: RealFrac a => ReadS a
18:25:04 <elliott> hmph :P
18:25:23 <elliott> oh duh
18:26:41 <cheater> ?hoogle [herp] -> [derp]
18:26:42 <lambdabot> Prelude map :: (a -> b) -> [a] -> [b]
18:26:42 <lambdabot> Data.List map :: (a -> b) -> [a] -> [b]
18:26:42 <lambdabot> Prelude concatMap :: (a -> [b]) -> [a] -> [b]
18:45:13 -!- oklopol|2 has quit (Read error: Connection reset by peer).
18:51:55 -!- augur has joined.
18:53:11 <elliott> Deewiant: Do you have docs for NCRS anywhere
18:53:15 <elliott> Or is NCRS the terrible one, I forget
18:54:29 <Deewiant> NCRS is from Jesse van Herk
18:54:50 <Deewiant> elliott: http://sprunge.us/ViCQ
18:55:39 <elliott> Thanks
18:55:47 <elliott> NCRS is the non-awful one, right
18:56:46 <Deewiant> TERM is from RC/Funge-98
19:00:12 * elliott looks at STRN
19:00:13 <elliott> Oh boy
19:02:18 <elliott> Hmph, this FING seemingly-error is really worrying
19:07:36 -!- calamari has quit (Quit: Leaving).
19:13:10 <elliott> ?undo [(ins, reflect) | ins <- [A .. Z]]
19:13:11 <lambdabot> concatMap (\ ins -> [(ins, reflect)]) [A .. Z]
19:13:12 <elliott> ?. pl undo [(ins, reflect) | ins <- [A .. Z]]
19:13:12 <lambdabot> flip (,) reflect `fmap` [A..Z]
19:13:16 <elliott> Lame :P
19:13:24 <elliott> zip [A .. Z] (repeat reflect) is good though
19:13:43 <Deewiant> -XTupleSections
19:13:48 <Deewiant> map (,reflect) [A..Z]
19:14:09 <elliott> I don't like tuple sections
19:14:09 <elliott> Well
19:14:11 <elliott> I want them to exist
19:14:13 <elliott> But I don't like using them
19:14:46 <Deewiant> Why not :-P
19:15:07 <zzo38> I don't think it is bad. It is good in some cases.
19:15:17 <elliott> Deewiant: Kinda ugly
19:16:08 <zzo38> You have the series of tuple constructors: () id (,) (,,) (,,,) (,,,,) (,,,,,) (,,,,,,)
19:16:37 <zzo38> (Of course id is not a constructor but close enough)
19:16:40 <elliott> Deewiant: BTW, I completely eliminated the hs-boot :P
19:16:50 <elliott> And indeed all circular dependencies.
19:16:56 <Deewiant> How'd you do it
19:17:53 <elliott> Deewiant: Realised that my Shiro.Utils was actually four functions that should be in Shiro.Interpreter, some functions that should become Shiro.RefStore, and a few little helpers that are at home perfectly in Shiro.MOnad
19:17:53 <elliott> Monad
19:18:21 <elliott> So I divided it up, placed a piece of the map in each corner of the globe, and a few hundred years later hired Guybrush Threepwood to clean up my code.
19:18:30 <elliott> Or I just divided it up and suddenly the circular dependency went away, you decide.
19:18:42 <elliott> Somehow this has actually sped up runtime.
19:19:06 <Deewiant> Fair enough
19:20:34 <elliott> GOOD: 'yY reflected
19:20:34 <elliott> yROMA unloaded.
19:20:34 <elliott> WHYYYYYYYYYYY
19:20:37 <elliott> YYYYYYYYY
19:20:46 <Deewiant> yyyyyyyy
19:20:50 <Deewiant> You have a problem with y's
19:20:59 <elliott> Yeah
19:21:03 <elliott> But why the hell is it printing one :P
19:21:09 <elliott> I traced in CCBI, nothing weird at all.
19:21:50 <Deewiant> Time to write a tracer into Shiro? ;-)
19:22:01 <elliott> I had a tracer in Shiro, it just printed out every instruction
19:22:03 <elliott> Didn't work too well
19:22:18 <elliott> My BEAUTIFUL DESIGN would of course make a tracer easy, I'm just really lazy
19:22:29 <Deewiant> That kind of tracer might be enough for this
19:22:32 <elliott> It's literally a matter of changing doNextIns :P
19:22:41 <elliott> Deewiant: It just took way too long to print every instruction
19:22:57 -!- pikhq_ has joined.
19:23:07 <elliott> But anyway, that'd involve me looking at Mycology source
19:23:15 <elliott> I'd prefer to just stare at the code until I feel stupid and fix it
19:23:27 <elliott> I'm pretty sure FING works at least
19:23:36 <elliott> It's become the simplest possible implementation
19:24:38 <nooga> http://www.ai-class.com/
19:24:41 <nooga> ouch
19:24:52 <elliott> http://www.ai-class.com/media/img/artificial_intelligence_header.jpg how did they find my picture
19:26:42 <Deewiant> Your eyes are unhealthily red, you might want to get a doctor to check them out
19:26:51 -!- pikhq has quit (Ping timeout: 264 seconds).
19:31:54 <Taneb> Well, VBefunge-93 is going well
19:33:22 <elliott> Oh good, I was afraid SOCK was going to be well-documented
19:33:38 <Deewiant> :-)
19:34:12 <elliott> I have absolutely no idea how to implement WIND portably but dammit I'll find a way.
19:34:47 <elliott> I have this sneaking feeling I'm never going to actually bother with MVRS.
19:36:08 <elliott> I should really rename my strict-tuples-of-values to something better than Vector, considering the rather popular library named that.
19:36:21 <elliott> With the data type named that. That I use. In the same few lines as my Vector.
19:38:49 <elliott> Deewiant: What fingerprints actually have per-IP storage, I haven't found a single one yet
19:38:54 <elliott> My horizons are unbroadened
19:39:10 <Deewiant> MODE
19:39:15 <elliott> Oh
19:39:22 <elliott> All the terrible ones that will require reimplementing fucking everything
19:39:23 <Deewiant> Just the first that came to mind
19:39:33 <Deewiant> IIPC, maybe
19:39:42 <Deewiant> TRDS
19:39:44 <Deewiant> (Of course)
19:39:45 <elliott> Ha
19:39:59 <Deewiant> Nothing else comes to mind
19:39:59 <elliott> I can't express how intense my rage is at window-shopping CCBI code leading to me realising it's better-abstracted than Shiro
19:40:02 -!- sllide has joined.
19:40:05 <elliott> Please tell me the first version was awful
19:40:21 <Deewiant> Depends on what abstractions you're talking about :-P
19:40:29 <elliott> I like how the first version isn't even available any more apparently
19:40:34 <Deewiant> Yeah, I lost it
19:40:39 <elliott> Seriously? :P
19:40:44 <Deewiant> Yep
19:40:53 <Deewiant> * b609b65 Initial import - 1.0.4a.
19:41:01 <elliott> I'm sure Vorpal has a copy on DVD 999 out of 999999999999 of month 9
19:41:13 <Deewiant> Before that my version control system was "write detailed changelogs, you can reverse the changes based on that"
19:41:25 <Vorpal> <elliott> I'm sure Vorpal has a copy on DVD 999 out of 999999999999 of month 9 <-- of what?
19:41:26 <Deewiant> (I'm not kidding, I actually explicitly thought that at some point)
19:41:40 <elliott> Deewiant: That's what a patch is, so it's not an unreasonable thought
19:41:42 <Deewiant> This was before DVCS was used by ~anybody
19:41:51 <elliott> Deewiant: My VCS is obsessive cp -R Shiro Shiro.whataridiculousdescription
19:41:53 <Vorpal> elliott: backups? or what?
19:42:00 <Deewiant> And setting up my own SVN was something I knew to be a pain
19:42:09 <elliott> Shiro/ Shiro.fpstate/ Shiro.newbutfpclass/ Shiro.newbutoldfpins/ Shiro.newvectoroldstack/ Shiro.nofingerprints/ Shiro.pristine/
19:42:09 <elliott> Shiro.fpinsmap/ Shiro.lens/ Shiro.newbutnolens/ Shiro.newfungespace/ Shiro.noconcurrency/ Shiro.nomaybet/ Shiro.twodee/
19:42:09 <Deewiant> And I didn't grok monotone, which was the only one I had tried
19:42:23 <elliott> Also Shiro.nomkfingerprint/ when I introduced a whole new function and quickly refactored the fingerprint definitions to us eit
19:42:34 <elliott> "newbutoldfpins" Me, I...
19:42:41 <Vorpal> elliott: you haven't started using a proper vcs?
19:42:52 <elliott> Vorpal: I can't bring myself to commit FungeSpace.hs, it's too awful
19:42:58 <Vorpal> elliott: ...
19:43:03 <elliott> When I have some kind of new fungespace that isn't terrible it'll go into darcs or git
19:43:10 <elliott> (Even if it's not the Super Perfect one)
19:43:13 <elliott> But seriously, that file is so awful
19:43:16 <elliott> I don't want a permanent record of it
19:43:23 <Taneb> My twitter following to followers ratio is 4
19:43:33 <zzo38> Which things in Haskell should be defined using Kan extensions? Is there Kan extensions in Haskell?
19:43:33 <Vorpal> Deewiant: if you want I *may* have a copy of ccbi1 on my hdd somewhere still. Could try to dig it out for archival purposes
19:43:56 <elliott> Vorpal: I would enjoy that, for feeling-better-about-my-code purpose
19:43:56 <Vorpal> elliott: anyway I stopped backing up to DVD some time ago. I use an external HDD these days.
19:43:56 <elliott> s
19:44:24 <elliott> I'm so tempted to immediately drop the current codebase and write Shiro 2 in Mercury for no good reason at all
19:44:44 <elliott> I spent inordinate amounts of effort on giving love to neat languages
19:44:58 <Vorpal> elliott: Mercury? Is it a language?
19:45:08 <Vorpal> or the VCS, doesn't make much sense as that
19:45:08 <elliott> No, I'm just planning a suicide.
19:45:15 <elliott> The VCS is Mercurial.
19:45:29 <Vorpal> oh hey I found pikhq's ski in C
19:45:37 <Vorpal> no sign of CCBI1 yet
19:45:52 <elliott> Mercury is that pure Prolog you might have heard about (no cut or IO outside of uniqueness-type based IO system); it has higher-order predicates, type classes, blah blah blah. It's basically Prolog if it was designed by Haskell/Clean freaks.
19:45:59 <pikhq_> Vorpal: Oh, that thing.
19:46:03 <elliott> Also it has a compiler that produces really efficient code.
19:46:05 <elliott> Inexplicably.
19:46:06 <pikhq_> That was some fun strangeness.
19:46:16 <Vorpal> pikhq_: in case you lost it I have a copy that may or may not be the last version
19:46:18 <Deewiant> Vorpal: If you have pre-1.0.4a versions I'd be glad to have 'em
19:46:20 <elliott> And it does things like compile semidet finite predicates into hash tables if it thinks it'll help.
19:46:35 <pikhq_> Well, I seem to have a copy that doesn't work.
19:46:38 <elliott> Deewiant: You realise that by first version I just mean anything pre-two right :P
19:46:41 <Vorpal> Deewiant: hm. Let me look around. Was that before or after I started cfunge?
19:46:47 <Vorpal> if before I can say I definitely do not have it
19:46:54 <pikhq_> This was written before I actually used version control.
19:46:55 <elliott> Just realised you probably didn't realise that, so
19:47:04 <pikhq_> So, I'd definitely like a copy.
19:47:15 <Vorpal> pikhq_: hm sec, *navigates back*
19:47:37 <Vorpal> pikhq_: wait a second, that i isn't THAT old. It is the lambda in C stuff, with ski
19:47:39 <Deewiant> Vorpal: March 2008 and earlier
19:47:45 <Vorpal> Deewiant: not sure. Will look
19:48:01 <Vorpal> $ ls ski
19:48:01 <Vorpal> a.out calc.lazy closure.h lambda.h main.c primes.lazy rot13.lazy sort.lazy test.lazy testing.lazy thunk.h xgc.c xgc.h
19:48:07 <Vorpal> pikhq_: there is that. Anything interesting?
19:48:15 <Vorpal> I have a tarball for it still around
19:49:44 -!- pikhq has joined.
19:49:58 <Vorpal> Deewiant: which file of the source do you keep the version number in
19:50:02 <Vorpal> <Vorpal> pikhq_: hm sec, *navigates back*
19:50:02 <Vorpal> <Vorpal> pikhq_: wait a second, that i isn't THAT old. It is the lambda in C stuff, with ski
19:50:04 <Vorpal> pikhq_: ^
19:50:07 <Vorpal> <Vorpal> $ ls ski
19:50:07 <Vorpal> <Vorpal> a.out calc.lazy closure.h lambda.h main.c primes.lazy rot13.lazy sort.lazy test.lazy testing.lazy thunk.h xgc.c xgc.h
19:50:08 <Vorpal> that too
19:50:26 <Deewiant> Vorpal: changelog.txt
19:50:31 <Vorpal> Deewiant: it is 1.0.13 the one I found.
19:50:32 <pikhq> Vorpal: Yes, I still don't have a functioning version.
19:50:45 <Vorpal> pikhq: will upload it somewhere. Is filebin still gone?
19:50:56 <Deewiant> Vorpal: About 5 months too new, damn :-P
19:51:03 <Vorpal> Deewiant: ah
19:51:03 <pikhq> Seems to be.
19:51:16 <Vorpal> it was gone for a bit I think?
19:51:22 <pikhq> Could just hand me the .c and .h stuff.
19:51:25 <Vorpal> filebin.ca times out for me. Will scp it somewher
19:51:28 <elliott> Deewiant: But seriously, do you have any one point x version :P
19:51:38 <elliott> I thought you meant you lost literally all of them.
19:51:42 <Deewiant> elliott: 1.0.4a and up is in git
19:51:49 <elliott> Which git
19:51:58 <Vorpal> pikhq: http://whotookspaz.org/~anmaster/tmp/ski.tar.gz
19:52:02 <Deewiant> ~/programming/projects/ccbi/ccbi
19:52:06 <elliott> Pro
19:52:15 <Vorpal> Deewiant: I like the double ccbi there
19:52:38 -!- pikhq_ has quit (Ping timeout: 276 seconds).
19:52:47 <Vorpal> Deewiant: I might have had older versions around, but I remember replacing my copy with newer ones when you told me you updated.
19:53:12 <Deewiant> There's some vaguely funge-related stuff of mine in the single ccbi, haven't bothered to clean it up
19:53:14 <pikhq> Seems I did a lot of stupid micro-optimisation on the copy I have for god-knows-what-reason.
19:53:29 <Vorpal> pikhq: what about the one I uploaded?
19:53:42 <Vorpal> pikhq: anyway I can't believe you didn't use version control...
19:54:12 <Vorpal> pikhq: I mean I do bzr init even when writing a lab report in LaTeX. I'm paranoid about being able to go back to earlier versions like that.
19:54:30 <elliott> Paranoid internet nerd chastises other internet nerd about not using version control system for one-off hacks; internet literally explodes with not giving a shit.
19:54:30 <Vorpal> /etc is of course in bzr too
19:54:43 <pikhq> To be fair, I didn't grok version control at the time. I blame CVS.
19:54:56 <Vorpal> pikhq: wait what, this was less than a year ago. Come on.
19:55:03 <pikhq> Vorpal: I'm also a lazy bastard.
19:55:15 <olsner> pikhq used CVS less than a year ago?
19:55:21 <Vorpal> yes.... seems so
19:55:23 <pikhq> olsner: No.
19:55:34 <pikhq> olsner: But at the time, my only experience with versioning was CVS.
19:55:39 <pikhq> And I went "Fuck that shit".
19:55:53 <Vorpal> well yes. fuck cvs and fuck svn
19:56:06 <elliott> And fuck bzr and git and hg too
19:57:55 <olsner> everything sucks, but cvs and svn both suck way more
19:58:06 <Vorpal> darcs is kind of cool
19:58:08 <Deewiant> elliott: https://github.com/Deewiant/CCBI
19:58:12 <Vorpal> which is why no one uses it
19:58:23 <Vorpal> oh wait, ais does
19:58:27 <elliott> Deewiant: BAM ZAP POW
19:58:27 <Vorpal> and I do occasionally.
19:58:39 <elliott> I use darcs when i'm not collaborating and using VCS (never)
19:58:46 <Taneb> Uniquode has commands based on SKI combinatory logic... that operate on IPs
19:59:14 <Taneb> I replaces the IP with itself
19:59:19 <elliott> Deewiant: Man, when did CCBI two actually come out? I remember this shit happening
19:59:21 <Deewiant> Evidently it's 2% Perl
19:59:31 <Vorpal> anyone else here want to check if I have an old copy?
19:59:34 <Deewiant> elliott: April last year
19:59:49 <Vorpal> I actually found the copy in question on a disk image I made from my old hdd when it died
19:59:55 <Vorpal> so okay. That means over one year old.
20:00:05 <Vorpal> More like 1.8 years or slightly older
20:00:13 -!- derdon has quit (Remote host closed the connection).
20:00:36 <elliott> Deewiant: Jesus you commit a lot
20:00:39 <zzo38> Are there comma categories in Haskell?
20:00:51 <Deewiant> elliott: You should see mushspace
20:01:14 <elliott> Deewiant: May I interest you in sg, which was originally designed around an editor committing your every single action
20:01:22 <Deewiant> No, that's too much
20:01:30 -!- Taneb has quit (Quit: Goodbye).
20:01:33 <elliott> Deewiant: Nah, but it sorted them under larger commits
20:01:45 <elliott> You basically just build commits out of larger ones forever
20:01:48 <elliott> Smaller ones I mean
20:02:08 <elliott> I can't tell where CCBI two starts in this log
20:02:16 <Deewiant> It has tags
20:02:38 <Deewiant> Or wait, does the github-copy-pasted push not push tags
20:02:47 <Vorpal> <Deewiant> Evidently it's 2% Perl <-- hm?
20:02:52 <elliott> "Switch Tags (0)"
20:02:54 <Vorpal> where is that statistic from?
20:02:56 <Deewiant> Vorpal: https://github.com/Deewiant/CCBI/graphs/languages
20:03:02 <elliott> Well, there is PERL
20:03:06 <Vorpal> ah
20:04:13 <Deewiant> $ git push --all
20:04:13 <Vorpal> pikhq: did you do just closures or did you do continuations too? I don't remember
20:04:16 <Deewiant> I guess that should do it
20:04:33 <Deewiant> Oh right, PERL
20:04:36 <elliott> What is an archive/puttergetter
20:04:48 <Vorpal> elliott: a kind of small steam ship
20:04:49 <elliott> Deewiant: If it can detect a few lines of perl in a .d file I'm impressed
20:04:53 <Deewiant> Ditto
20:05:09 <Vorpal> Deewiant: maybe some helper script was in perl at some point?
20:05:15 <elliott> Thank god, CCBI 1 is almost as messy as shiro
20:05:23 <Vorpal> elliott: only almost?
20:05:29 <Deewiant> Vorpal: Nope
20:05:34 <elliott> Vorpal: shiro is pretty fucking messy
20:05:34 <Vorpal> elliott: anyway, you learn a lot from your design mistakes.
20:05:43 <elliott> Shiro isn't really badly designed
20:05:44 <elliott> It's just a mess
20:05:55 <elliott> Every individual hideous part fits together beautifully
20:06:25 <elliott> https://github.com/Deewiant/CCBI/blob/1.0.20/instructions.d
20:06:27 <pikhq> Vorpal: Continuations already exist in POSIX 2001.
20:06:29 <elliott> I like the alignment, Deewiant
20:06:34 <Vorpal> elliott: right. Well I did rewrite large parts of cfunge. I was too lazy to start again from the beginning. But certainly some code does need cleaning up. Mostly i and o code (eww the o code) and some of the stack-stack code
20:06:42 <Vorpal> pikhq: ah you used those?
20:06:48 <pikhq> No, I had no need.
20:07:07 <elliott> Vorpal: Shiro's cleanup needs to be: Fungespace fungespace fungespace; making everything abstract and separate; the end.
20:07:22 <Vorpal> pikhq: not really continuations in the sense of call/cc though. Not quite as versatile if you mean setcontext/getcontext. Or do you mean something else I'm not aware of?
20:07:33 <elliott> Deewiant: Oh my God, you did Minifunge?
20:07:42 <Deewiant> Yep
20:07:48 <elliott> Deewiant: How painful is it
20:07:50 <Vorpal> Deewiant: does ccbi2 have minifunge?
20:07:52 <elliott> No
20:07:53 <Deewiant> Nope
20:07:57 <Vorpal> Deewiant: why not?
20:08:07 <Deewiant> Conflicting standards, haven't got around to it
20:08:20 <Vorpal> ah
20:08:22 <pikhq> Vorpal: setcontext et al. is more flexible than you think.
20:08:43 <elliott> Deewiant: How painful :P
20:08:48 <elliott> I must implement EVERY FINGERPRINT TOTALLY PORTABLY
20:08:56 <Deewiant> I can't remember
20:09:09 <Deewiant> With my new system it should be easy, like MVRS
20:09:14 <Deewiant> But haven't got around to it so dunno
20:09:23 <elliott> You do MVRS?
20:09:31 <Deewiant> No, haven't got around to that either
20:09:34 <elliott> lol
20:09:35 <pikhq> Vorpal: Still: no, I didn't do anything further. If you really want lambda-based continuations, just do CPS.
20:09:38 <elliott> What's your new system
20:09:49 <Vorpal> pikhq: hm
20:10:32 <Vorpal> pikhq: sadly POSIX.1-2008 removed setcontext et al.
20:10:34 <Vorpal> very sad
20:10:54 <pikhq> Yup.
20:10:55 <Vorpal> "POSIX.1-2008 removes the specification of getcontext(), citing portability issues, and recommending that applications be rewritten to use POSIX threads instead."
20:11:13 <olsner> heh, cmake spells endif and else as endif() and else()
20:12:29 <Vorpal> olsner: yes cmake is quite terrible. Anyway those are there because originally you had to *repeat the condition from the if() in there*
20:12:35 <Deewiant> elliott: FungeMachine instead of globals, essentially
20:12:42 <olsner> Vorpal: lol
20:12:44 <Vorpal> olsner: not repeating it verbatim was a syntax error.
20:13:17 <elliott> Deewiant: Lol, people who use globals
20:14:13 <Vorpal> well cfunge isn't going to do anything but one funge space easily. It is globals. And I know you are going to laugh at the reason. It was faster on 32-bit x86 to not pass around the funge space pointer everywhere. Because 32-bit x86 sucks.
20:14:21 <Vorpal> as in statistically significant.
20:14:25 <Deewiant> Mycology's up
20:14:38 <elliott> Deewiant: Whu
20:14:42 <Vorpal> Deewiant: new version?
20:14:44 <elliott> Oh, github
20:14:46 <Deewiant> No, hub
20:14:46 <Vorpal> ah
20:14:59 <elliott> Deewiant: Your capitalisation disgusts me to an incomprehensible degree
20:15:07 <Deewiant> Tough
20:15:10 <elliott> It's worse than death
20:15:10 <Vorpal> elliott: ?
20:15:36 <Deewiant> Fungicide too ([F]ungicide)
20:15:41 <elliott> 2011-02-07 - Make the 1k[ error message not rely on stringmode having
20:15:42 <elliott> working spaces.
20:15:45 <elliott> Was that because of myoutput
20:15:50 <Deewiant> Maybe
20:16:32 <elliott> You should fix the bug where I have a weird extra y output :P
20:16:44 <Vorpal> elliott: uh, that is your bug
20:17:02 <elliott> GOOD: 'yY reflected
20:17:02 <elliott> yROMA unloaded.
20:17:08 <elliott> There's no possible way that y could be output; his bug.
20:18:25 <pikhq> /usr/include/x86_64-linux-gnu/sys/ucontext.h:139:5: error: unknown type name ‘stack_t’
20:18:27 <Deewiant> [f]ungify
20:18:28 <pikhq> Fuck you GNU.
20:19:04 <Deewiant> pikhq: ISTR you'd be the guy to ask: what's the smallest more or less fully functional libc in terms of LOC
20:19:20 <pikhq> Deewiant: Define "fully functional".
20:19:37 <Deewiant> The necessities of C99
20:19:41 <pikhq> musl
20:19:50 <elliott> musl
20:19:52 -!- KingOfKarlsruhe has joined.
20:20:02 <elliott> dietlibc is probably shorter but dietlibc is so shitty uou have no idea.
20:20:06 <Deewiant> Cool, thanks
20:20:11 <Vorpal> <pikhq> /usr/include/x86_64-linux-gnu/sys/ucontext.h:139:5: error: unknown type name ‘stack_t’ <-- eh?
20:20:27 <elliott> Deewiant: P.S. I pioneered miniature Linuxing 'round these parts >:|
20:20:59 <Deewiant> Whatever, the GNU complaint just reminded me that he'd been talking about libc's at some point
20:21:07 <Vorpal> pikhq: where is stack_t defined?
20:21:12 <Vorpal> not in that file certainly
20:21:35 <pikhq> Vorpal: ucontext.h should define stack_t.
20:21:49 <Vorpal> pikhq: yeah that file is quite useless
20:22:13 <Vorpal> pikhq: it can't possibly be used even.
20:22:31 <Vorpal> compiler can't know size of stack_t
20:22:36 <Vorpal> pikhq: anyway it is obvious: report the bug
20:22:39 <pikhq> *sigh*
20:22:45 <pikhq> It works with _GNU_SOURCE
20:22:49 <Vorpal> pikhq: what
20:23:06 <Vorpal> pikhq: why is that
20:23:34 <Vorpal> it should work with _POSIX_C_SOURCE=200112L
20:24:52 <pikhq> Yes.
20:25:15 <pikhq> Oh, wait, it needs XOPEN.
20:25:19 <Vorpal> ah
20:25:35 <Vorpal> well that is less annoying
20:42:57 -!- NihilistDandy has joined.
20:43:42 <elliott> hi
20:52:43 -!- impomatic has joined.
20:52:52 -!- monqy has joined.
20:59:12 -!- impomatic has quit (Quit: ChatZilla 0.9.87 [Firefox 5.0/20110615151330]).
20:59:57 -!- elliott has quit (Ping timeout: 258 seconds).
21:03:46 -!- Taneb has joined.
21:07:38 <Phantom_Hoover> Man, SMBC really hates people with humanities degrees.
21:09:03 -!- Taneb has quit (Quit: Goodbye).
21:10:24 -!- FireFly has quit (Quit: FireFly).
21:23:28 <Gregor> Who doesn't?
21:37:34 <CakeProphet> help how do I interrupt an uninterruptable process?
21:37:42 <zzo38> You turn off the computer.
21:37:43 <CakeProphet> kill kill kill kill kill
21:38:17 <CakeProphet> seems to be stuck on "encryptfs_init_persistent_file"
21:38:24 <CakeProphet> that's the waiting channel
21:39:17 <nooga> gaargh
21:39:26 <nooga> i want to code something interesting
21:39:55 <CakeProphet> code something will kill this process plz.
21:40:47 <KingOfKarlsruhe> nooga: you could write a nice tutorial, how to write oop code with plain C
21:41:02 <CakeProphet> s/oop/functional/
21:41:51 <KingOfKarlsruhe> no oop
21:42:09 <monqy> functional
21:42:16 <monqy> oop is boring
21:42:17 <CakeProphet> grrrrr!!!!
21:42:19 <CakeProphet> >_>
21:42:25 * CakeProphet mans the axes and pitchforks
21:46:03 -!- oerjan has joined.
21:55:11 -!- Lymee has quit (Ping timeout: 245 seconds).
21:58:39 * Phantom_Hoover → sleep
21:58:40 -!- Phantom_Hoover has quit (Quit: Leaving).
22:08:27 -!- sllide has quit (Ping timeout: 252 seconds).
22:21:56 -!- KingOfKarlsruhe has quit (Quit: ChatZilla 0.9.87 [Firefox 6.0.1/20110830092941]).
22:45:37 -!- augur has quit (Remote host closed the connection).
23:02:21 -!- Patashu has joined.
23:25:27 -!- nooga has quit (Ping timeout: 252 seconds).
23:30:59 -!- azaq23 has quit (Quit: Leaving.).
23:52:36 -!- kwertii has quit (Quit: bye).
2011-09-06
00:02:26 -!- quintopia has quit (Ping timeout: 240 seconds).
00:07:56 -!- quintopia has joined.
00:07:56 -!- quintopia has quit (Changing host).
00:07:56 -!- quintopia has joined.
00:18:19 -!- Lymee has joined.
00:18:19 -!- Lymee has quit (Changing host).
00:18:19 -!- Lymee has joined.
00:20:18 <zzo38> Why does :type (>>= either (const mzero) return) work but when I try to use the "let" command in GHCi it is error?
00:20:48 <monqy> what is the line producing the error, and the error itself
00:21:46 <zzo38> If I type that without the word ":type" before it, it results in "Ambiguous type variable" error. It does the same if I assign it using let, and even if I do specify the type on there it does the same thing
00:23:02 <oerjan> zzo38: that sounds like the monomorphism restriction
00:23:09 <zzo38> Ambiguous type variable `m0' in the constraints: (MonadPlus m0) arising from a use of `mzero' at <interactive>:1:33-37 (Monad m0) arising from a use of `return' at <interactive>:1:40-45 Probable fix: add a type signature that fixes these type variable(s) In the first argument of `const', namely `mzero'
00:23:19 <tiffany> .....
00:23:19 <tiffany> um
00:23:22 <monqy> hi
00:23:27 <oerjan> :t (>>= either (const mzero) return)
00:23:28 <lambdabot> forall (m :: * -> *) a a1. (MonadPlus m) => m (Either a1 a) -> m a
00:23:42 <tiffany> I just benchmarked lua
00:23:49 <tiffany> x^2 takes ~660 cycles
00:23:55 <tiffany> x*x takes ~1680
00:23:55 <zzo38> oerjan: But sometimes resulting from that restriction it says it is monomorphism restriction. But this time it does not say that. I will try it with turning off monomorphism and see if it work
00:23:56 <tiffany> wth
00:24:34 <zzo38> tiffany: Maybe it requires extra cycles retrieving variable "x" and it does not optimize that.
00:25:34 -!- augur has joined.
00:25:41 <zzo38> Yes; it does work if I turn off monomorphism restriction.
00:26:11 -!- ive has joined.
00:26:36 <CakeProphet> the only time I've had to turn off MR is when I had a configuration module with numbers in it.
00:26:46 <CakeProphet> as they are not monomorphic by default.
00:27:54 <oerjan> zzo38: i think the monomorphism restriction is particularly annoying when you are using pointfree definitions such as the above
00:28:14 <oerjan> let f x = x >>= either (const mzero) return would not be hit by it
00:29:10 <zzo38> Well, I am using GHCi; does that make a difference? When writing a code in a .lhs file I will always specify the type in a separate line.
00:29:23 <oerjan> zzo38: maybe the different error message is becaus m0 is a type constructor variable, not a simple type variable which can be defaulted.
00:29:29 <oerjan> *because
00:29:35 <oerjan> (just guessing on that)
00:30:13 <oerjan> zzo38: yes, the monomorphism restriction can be removed in most cases by adding a type signature, or by making a function have explicit arguments.
00:31:24 <zzo38> I always specify a type signature (although there might be some cases in which the definitions are made up by macros or other stuff so that I do not write a type signature), but in GHCi it cannot do that.
00:31:30 <oerjan> zzo38: you _can_ do that with ghci too i think, a let can take a type signature as well
00:31:41 <zzo38> OK
00:32:22 <oerjan> @let test1 = (>>= either (const mzero) return); test1 :: (MonadPlus m) => m (Either a1 a) -> m a
00:32:24 <lambdabot> Defined.
00:32:39 <oerjan> hm i guess that does not really prove anything
00:32:41 <oerjan> :t test1
00:32:42 <lambdabot> forall (m :: * -> *) a1 a. (MonadPlus m) => m (Either a1 a) -> m a
00:32:55 <oerjan> but that's the syntax anyway
00:32:57 <zzo38> I still like to turn off monomorphism restriction though, since it allows making declarations by macro or Template Haskell or whatever else it is
00:33:13 <coppro> \/win 4
00:33:32 <oerjan> zzo38: yes, many people think it is annoying and it is often debated. i think it may even be turned off by default in a future ghc.
00:33:58 <zzo38> oerjan: I don't care since it can still be turned off using -X or a LANGUAGE pragma
00:34:22 <zzo38> Some people might want monomorphism restriction.
00:34:47 <oerjan> yeah
00:41:11 -!- augur has quit (Remote host closed the connection).
00:48:15 -!- pikhq_ has joined.
00:51:23 -!- pikhq has quit (Ping timeout: 258 seconds).
00:57:39 -!- tiffany has changed nick to tiffany|away.
01:37:08 -!- sebbu2 has joined.
01:37:08 -!- sebbu2 has quit (Changing host).
01:37:09 -!- sebbu2 has joined.
01:40:23 -!- sebbu has quit (Ping timeout: 240 seconds).
01:59:30 -!- tswett has joined.
01:59:36 <tswett> And it's going to have 376 different commands.
01:59:45 <tswett> Won't that be awesome?
02:00:36 <Sgeo> What is it?
02:00:40 <oerjan> Yes, but is the bicycle included?
02:00:45 <zzo38> What will have 374 different commands?
02:01:02 <tswett> The bicycle won't be included; you'll have to build it yourself.
02:01:12 <oerjan> darn
02:01:19 <tswett> "It" is Smokefly, that game that's still utterly in the planning stage.
02:01:28 <tswett> It's, like.
02:01:35 * tswett draws the planning stage, and points at it.
02:01:36 <tswett> It's here.
02:01:55 <oerjan> even the planning stage is in the planning stage
02:02:12 <zzo38> Any other description than just those things?
02:02:18 <tswett> Precisely. I haven't figured out how I'm going to plan it yet.
02:03:28 <oerjan> > iterate ((`mod`1000).(^2)) 2
02:03:30 <lambdabot> [2,4,16,256,536,296,616,456,936,96,216,656,336,896,816,856,736,696,416,56,1...
02:03:45 <tswett> Okay, okay. Smokefly. It's a game where there's you, and there's the world. You can use materials, tools, and buildings to create other materials, tools, and buildings.
02:04:03 <oerjan> > iterate ((`mod`1000).(^2)) 8
02:04:05 <lambdabot> [8,64,96,216,656,336,896,816,856,736,696,416,56,136,496,16,256,536,296,616,...
02:04:19 <oerjan> > iterate ((`mod`1000).(^2)) 32
02:04:21 <lambdabot> [32,24,576,776,176,976,576,776,176,976,576,776,176,976,576,776,176,976,576,...
02:05:00 <oerjan> > iterate ((`mod`1000).(^2)) 376
02:05:02 <lambdabot> [376,376,376,376,376,376,376,376,376,376,376,376,376,376,376,376,376,376,37...
02:05:14 <tswett> Yay!
02:05:19 <oerjan> i knew there was something about that number
02:05:37 <tswett> That's not the thing about it, though. There's a good reason to have 376 commands.
02:05:50 <oerjan> _two_ good reasons
02:05:57 <tswett> Right, right.
02:06:07 <oerjan> > 376%4
02:06:09 <lambdabot> 94 % 1
02:06:17 <oerjan> > 94%2
02:06:19 <lambdabot> 47 % 1
02:06:42 <tswett> See?
02:07:16 <oerjan> 8 times a prime?
02:07:27 <tswett> That's a very important prime.
02:07:42 <oerjan> ...ok
02:08:10 <tswett> It is, you see, the number of printable character keys on a US keyboard.
02:08:35 <coppro> what.
02:09:20 <coppro> ~!@#$%^&*()_+`1234567890-=qwertyuiop[]\QWERTYUIOP{}|asdfghjkl;'ASDFGHJKL:"zxcvbnm,./ZXCVBNM<>? disagrees with you
02:09:21 <oerjan> ...it's a conspiracy!
02:09:37 <tswett> coppro: do you have separate keys for all those?
02:09:50 <coppro> tswett: keys or key combinations
02:09:57 <tswett> Keys.
02:10:00 <coppro> oh
02:10:05 <coppro> a US keyboard has just over 100
02:10:23 <tswett> Those are not all printable character keys.
02:10:32 <coppro> do you mean graphing characters?
02:10:33 <tswett> F6, for example, is not a printable character. Nor is tab.
02:10:41 <oerjan> > [n | n<-[0..999], n*n `mod` 1000 == n]
02:10:42 <lambdabot> [0,1,376,625]
02:10:49 <tswett> Granted, the number pad has some extras.
02:10:57 <Sgeo> I think F6 might not be a character while Tab is
02:11:26 <oerjan> > [n | n<-[0..9999], n*n `mod` 10000 == n]
02:11:27 <lambdabot> [0,1,625,9376]
02:12:38 <oerjan> i guess it's probably obvious if you do (mod 2^k) and (mod 5^k) separately
02:13:44 <oerjan> n*(n-1) === 0 (mod p^k)
02:14:16 <oerjan> => n === 0 or n===1 (mod p^k)
02:16:03 <oerjan> (using that gcd (n,n-1) == 1 and the modulus is a prime power)
02:18:06 <oerjan> so the 8 then, is for combinations of shift/ctrl/alt or the like?
02:18:53 <oerjan> tswett: ^
02:19:06 <tswett> Yep.
02:19:20 <tswett> Sgeo: tab is a character, but it's not printable.
02:19:23 <tswett> For some reason.
02:19:48 <oerjan> it doesn't have a fixed width
02:21:07 <oerjan> > [n | n<-[0..59], n*n `mod` 60 == n] -- i predict 8 elements
02:21:08 <lambdabot> [0,1,16,21,25,36,40,45]
02:28:18 -!- Guardric has joined.
02:51:15 <Sgeo> Hmm
02:51:22 <Sgeo> Isn't \n decimal 10?
02:51:41 * Sgeo figured out why Ctrl-Shift-u-A works
02:51:46 <Sgeo>
02:51:49 <Sgeo>
02:52:06 <Sgeo> <CTCP>
02:56:03 <oerjan> Sgeo: istr it may be OS-dependent
02:57:04 <oerjan> also, that it's always one char, even on OS'es that use CRLF
02:57:21 <oerjan> (being converted for text files)
02:59:11 <zzo38> I think \n is always one byte (in C), although it may be converted when reading/writing
03:01:33 <oerjan> !c print("%d\n", '\n'); /* 10 on linux, of course */
03:01:38 <EgoBot> Does not compile.
03:01:49 <oerjan> er
03:01:52 <oerjan> !c printf("%d\n", '\n'); /* 10 on linux, of course */
03:01:54 <EgoBot> 10
03:02:38 <copumpkin> \n is always 10
03:02:45 <copumpkin> > '\n
03:02:46 <lambdabot> <no location info>:
03:02:46 <lambdabot> unexpected end-of-file in string/character literal...
03:02:49 <copumpkin> > ord '\n'
03:02:49 <lambdabot> 10
03:03:10 <oerjan> copumpkin: i vaguely thought old MacOS used 13, or something
03:03:19 <copumpkin> > ord '\r'
03:03:19 <lambdabot> 13
03:04:32 <Guardric> Can a Turing machine's tape be bounded on one end instead of indefinitely extensible in both directions?
03:05:20 <pikhq_> Certainly.
03:05:25 <copumpkin> there's a 1 to 1 correspondence between the integers and the naturals
03:05:26 <copumpkin> so I'd assume so
03:05:40 <pikhq_> It can even be Universal with such a tape.
03:06:09 <Guardric> Can the tape also contain only 0s and 1s and still be universal?
03:06:14 <oerjan> yes.
03:06:22 <pikhq_> copumpkin: \n is not always 10.
03:06:40 <pikhq_> copumpkin: C makes no statement about the character set.
03:06:44 <pikhq_> copumpkin: Nor does POSIX.
03:07:18 <pikhq_> Of course, in *practice*, nobody uses anything but ASCII supersets.
03:08:13 <oerjan> http://en.wikipedia.org/wiki/Newline#In_programming_languages
03:08:33 <Guardric> The Turing machine Wiki article mentioned that "In some models the tape has a left end marked with a special symbol; the tape extends or is indefinitely extensible to the right" which made me wonder if a "special symbol" was truly necessary.
03:09:52 <pikhq_> It's actually perfectly permissible for stdio to do text translation on POSIX, I think.
03:10:21 -!- copumpkin has quit (Ping timeout: 240 seconds).
03:10:46 -!- copumpkin has joined.
03:11:45 <oerjan> Guardric: well brainfuck is essentially a weirdly encoded turing machine, and needs no special symbol, although it may crash if you go off the left end
03:12:38 <oerjan> see boolfuck, which is TC with just 0 and 1
03:12:45 <coppro> pikhq_: C makes a few statements, namely: 1) NUL is 0. 2) 0-9 are consecutive
03:13:25 <pikhq_> coppro: Ah, right.
03:13:28 <Guardric> Yeah, I know about both of those languages, and I actually wrote my own smallfuck interpreter in Java.
03:13:46 <oerjan> smallfuck is not tc though, iirc
03:13:51 <pikhq_> coppro: And that there exist certain characters.
03:13:59 <Guardric> The main reason why I'm asking is because I'm interested in how simple you can make a language or machine while still being Turing complete.
03:15:14 <Guardric> oerjan, I believe smallfuck is Turing-complete because I/O can be memory mapped.
03:15:54 <oerjan> Guardric: urk
03:16:27 <oerjan> smallfuck has a limited tape, that's why it's not tc
03:17:24 <Guardric> Ah, I see. Have you heard of BitChanger?
03:20:04 <oerjan> i must have
03:20:27 <oerjan> it did not leave much of an impression
03:21:36 <oerjan> for ultimate simplicity, see Bitwise Cyclic Tag
03:22:00 <Guardric> It combines the > and @ operators to form the } operator
03:22:10 <pikhq_> Guardric: I/O is not necessary for Turing completeness.
03:22:17 <pikhq_> Brainfuck is TC without . and ,
03:22:25 <oerjan> see also P''
03:27:19 <Guardric> BCT looks very interesting. The esolang article says 0 deletes the leftmost data-bit - is that equivalent to the act of shifting all symbols to the left, causing the leftmost data-bit to be overwritten?
03:29:10 <oerjan> well yes, assuming you delete the last one instead...
03:33:20 -!- MDude has changed nick to MSleep.
03:34:57 <Guardric> Oh, the output of a BCT program is the sequence of deleted bits?
03:34:59 <oerjan> other minimal stuff for which i'm particularly biased: /// (Slashes), Underload (just the :()^ commands), and brainfuck with 3 unbounded cells.
03:35:39 <oerjan> and then there's Iota and Jot
03:35:59 <oerjan> (and SKI calculus in general)
03:36:02 <Guardric> Awesome, what does 3 unbounded cells for brainfuck mean?
03:36:24 <oerjan> that the tape has just 3 cells, but the cell values are unbounded integers
03:36:44 <Guardric> I would really like to learn how Iota and Jot operate, but unfortunately I cannot comprehend the explanations.
03:36:55 <oerjan> i should also mention minsky machines with 2 registers, which inspired it
03:36:56 <Guardric> Is that Turing-complete?
03:37:10 <oerjan> all the things i mentioned now are tc
03:37:50 <oerjan> oh and of course fractran.
03:37:54 <Guardric> That's surprising to me
03:38:37 <oerjan> the 3-cell part? anyhow the proof is in the Collatz function wiki article
03:39:06 <oerjan> or Iota and Jot?
03:39:20 <Guardric> The 3-cell Turing-complete
03:39:31 <Guardric> What's the difference between Iota and Jot
03:39:43 <oerjan> those are just different encodings of SKI calculus
03:40:15 <Guardric> Do they operate on a tape of binary numbers?
03:40:39 <oerjan> no, they are functions from functions to functions.
03:41:05 <oerjan> or well, what you do is reduce them to minimal form
03:41:53 <oerjan> SKI calculus is again used by encoding lambda calculus in it
03:42:03 <Guardric> How do they compute things then? I thought you need a way to get the output of the calculation
03:42:15 <oerjan> david madore's unlambda page has a nice explanation of stuff
03:42:42 <oerjan> well there are many ways of encoding I/O. lazy-k has one such.
03:43:15 <oerjan> you encode input as a function, apply the program function to it, and get a function which encodes the output
03:44:12 <Guardric> Strange... I can't even begin to understand how it works
03:45:11 <oerjan> well for the input, it is encoded as a list of bytes terminated by 256 iirc. and then you need to know how to encode lists, and bytes.
03:45:45 <oerjan> bytes are encoded as "church numerals"
03:46:22 <oerjan> lists are encoded as pairs of first element, then rest of list. then you need to encode pairs...
03:46:29 <oerjan> but it all bottoms out in the end.
03:46:33 <Guardric> wow
03:50:11 <Guardric> What do you think is the most minimalistic of these languages? (brainfuck, BCT, Iota, Jot, Underload...)
03:50:23 <Patashu> Depends how you define minimalistic
03:50:34 <Patashu> But probably iota or jot
03:50:39 <Patashu> Since they have 1-2 instructions
03:53:15 <oerjan> /// also needs just 2 ;)
03:54:54 <Guardric> Is it possible to have a Turing-complete machine which operates on a left-bounded binary tape with memory mapped I/O and instructions?
03:55:39 <Guardric> Where output is merely the tape's contents after the machine has terminated
03:55:48 <oerjan> almost certainly. there might even be one already in our Category:Brainfuck derivatives
03:56:00 <oerjan> oh wait
03:56:20 <Guardric> I've been looking around for days and the closest I've come is BitChanger, and now perhaps BCT
03:56:30 <oerjan> Guardric: um, by memory mapped, you mean that input is just the initial tape, and output is just the final tape?
03:56:54 <oerjan> i think you have just described the usual turing machine model.
03:56:54 <Guardric> Yes, and the instructions are also on the tape initially
03:57:02 <Guardric> really?
03:57:05 <oerjan> oh instructions...
03:57:25 <oerjan> well, you can do that too, it's called a universal turing machine
03:58:02 <oerjan> (you have a turing machine which interprets the beginning of its tape as the instructions for any other turing machine)
03:58:54 <Guardric> That sounds right, sweet
03:59:13 <CakeProphet> > filterM (const [True, False]) "rain "
03:59:14 <lambdabot> ["rain ","rain","rai ","rai","ran ","ran","ra ","ra","rin ","rin","ri ","ri...
03:59:28 <CakeProphet> > filterM (const [True, False]) "rain"
03:59:28 <lambdabot> ["rain","rai","ran","ra","rin","ri","rn","r","ain","ai","an","a","in","i","...
03:59:48 <CakeProphet> I love that little trick.
04:00:35 <Guardric> oerjan, I have a hard time fully understanding how the Universal Turing machine works from Wikipedia's article
04:00:46 <Guardric> It's mainly the action table that trips me up
04:01:03 <Patashu> it's easy to understand that it CAN work - look at eval() in python for instance
04:02:42 <CakeProphet> !perl /(?{`perl -e "eval {print 2}"`})/ #wheeee
04:03:00 <CakeProphet> !sh perl -v
04:03:09 <CakeProphet> hmm
04:04:06 <oerjan> Guardric: it's a rather complicated thing, i'd not worry about not understanding it. but it's essentially an interpreter written in the language of turing machines
04:04:31 <CakeProphet> I'm guessing there's no perl in the egobot sandbox.
04:04:49 <oerjan> !perl print "oh?"
04:04:50 <EgoBot> oh?
04:05:00 <CakeProphet> I mean from bash.
04:05:09 <oerjan> !sh which perl
04:05:10 <EgoBot> ​/usr/bin/perl
04:05:16 <CakeProphet> ah nevermind I see.
04:05:17 <oerjan> tsk tsk
04:05:25 <CakeProphet> !perl /(?{print `perl -e "eval {print 2}"`})/ #wheeee
04:05:26 <EgoBot> 2
04:05:41 <Guardric> oerjan, what about a regular Turing machine? What's the difference between the two?
04:06:15 <CakeProphet> I believe they are the same thing, but the universal Turing machine is just a formalism to describe a particular kind of turing machine?
04:06:25 <oerjan> Guardric: a regular turing machine has an arbitrary instruction set, while a universal one has an instruction set that allows it to simulate any other turing machine
04:06:31 <Patashu> a univeral turing machine is just a specifically coded turing machine
04:07:02 <oerjan> by "instruction set", i mean the same thing as an "action table"
04:07:36 <Guardric> Hmm, I don't understand action tables, and what is meant by states
04:07:53 <Patashu> A state determines your current behaviour and which states you'll transistion into next based on what you see
04:07:55 <Guardric> I understand how languages like brainfuck work, but I guess they're a far cry from Turing machines
04:08:05 <CakeProphet> not really.
04:08:06 <oerjan> Guardric: a turing machine has a head, which is in a state, and at a position of the tape
04:08:52 <oerjan> for each possible state, and each possible symbol on the tape, the action table tells the TM what to do next
04:09:24 <oerjan> the action table + state is basically equivalent to bf program + position in program
04:09:43 <Guardric> so there are (# of states) * (# of possible symbols) entries in the action table?
04:09:51 <oerjan> yep
04:10:24 <CakeProphet> cartesian product, bitches.
04:10:31 <CakeProphet> represent.
04:10:54 <oerjan> the equivalence is not _entirely_ two-way, but you can convert a bf program with bounded cell size into a turing machine action table
04:11:44 <CakeProphet> except output is meaningless for a turing machine, I believe.
04:11:48 <oerjan> one state per program position, one symbol per cell possibility
04:11:56 <oerjan> ah yes. ignore . and ,
04:12:26 <Guardric> So the bf program pointer and cell pointer define the state?
04:13:21 <Patashu> and the state of every cell
04:13:30 <oerjan> no, the cell pointer is different, that corresponds to tape position
04:13:40 <Guardric> Wait, I mean: Does (current program command + current cell value) = state?
04:13:43 <oerjan> which is basically exactly the same thing for bf as for tm's
04:13:52 <oerjan> no, just current program command
04:14:41 <Guardric> Ugh, sorry I'm not getting this >.<
04:14:48 <oerjan> current program command, current cell value, current cell pointer vs. current state, current tape symbol, current tape position
04:15:48 <Guardric> Well, a bf interpreter knows what to do next if you give it the current command and current tape symbol, right?
04:16:06 <oerjan> yes
04:16:07 <Patashu> yup. it just looks at what the symbol is (and the contents under the tape pointer)
04:16:13 <Patashu> and it's a trivial decision
04:16:48 -!- oklopol has joined.
04:17:16 <Guardric> OK cool, let me guess what a smallfuck (binary tape) action table would look like...
04:18:03 -!- CakeProphet has quit (Ping timeout: 252 seconds).
04:18:39 <Guardric> (Command, current tape symbol) Action
04:18:53 <Guardric> (>, irrelevant) Move cell pointer right
04:19:00 <Guardric> (<, irrelevant) Move cell pointer left
04:19:10 <Guardric> (*, irrelevant) Flip bit
04:19:21 <oerjan> Guardric: note that for a turing machine the action includes what state to go to next
04:19:30 <oerjan> which you'll need for [ and ]
04:19:49 <Patashu> * does care about the cell's letter, it has to turn 0 to 1 and 1 to 0
04:19:53 <Guardric> ([, 0) Jump past matching ] if current cell is 0
04:20:20 <Guardric> ([, 1) Do nothing, meaning just move to the next instruction
04:20:30 <Guardric> (], 0) Do nothing
04:20:37 <Guardric> (], 1) Jump back to matching [
04:21:02 <oerjan> Guardric: also the action table needs to have different entries for identical commands at different points in the bf program
04:21:19 <Guardric> really? how would that work?
04:21:35 <Guardric> What do you mean by different points in the bf program
04:21:47 <Patashu> encode every byte of the brainfuck derivative program as a state from 1 to length
04:21:52 <Patashu> every state points towards the next
04:22:01 <Patashu> EXCEPT ]s which point towards the next OR their corresponding ['s number
04:23:40 <Guardric> I'm looking at the Universal Turing machine Wiki page, " If we denote by (m, n) the class of UTMs with m states and n symbols the following tuples have been found: (15, 2), (9, 3), (6, 4), (5, 5), (4, 6), (3, 9), and (2, 18)."
04:24:05 <Guardric> If I desire a binary tape, that means 15 states are needed?
04:24:35 <oerjan> Guardric: look at the Turing machine page instead, that universal page assumes you already know it
04:25:12 <oerjan> oh hm
04:25:47 -!- Taneb|Kindle has joined.
04:25:51 <oerjan> Guardric: probably
04:25:56 <Taneb|Kindle> Hello
04:26:13 <Taneb|Kindle> I am kindled again
04:26:22 <oerjan> hi i thought you'd finished your vacation
04:26:49 <Taneb|Kindle> Yeah but it is early and I don't wat to turn on th computer
04:27:09 <Taneb|Kindle> Because it is next to my parents' room
04:27:21 <Guardric> Hmm, so if you have @<>[] commands, you need 7 states? 1 for each @<> and 2 for [ and ]?
04:27:32 <Taneb|Kindle> And my laptop is out of action
04:27:44 <oerjan> Guardric: i told you, you need one state for each position in the program
04:28:05 <Guardric> So if the program is 300 commands long, you need 300 states?
04:28:11 <oerjan> yep
04:28:21 <oerjan> although you can probably compress it a bit
04:28:27 <Taneb|Kindle> What are we talking about?
04:28:41 <oerjan> since a tm can do things in 1 step that a bf program needs several for
04:28:43 <Guardric> what if the machine doesn't know how long the program is initially?
04:29:14 <oerjan> Guardric: oh the _universal_ tm does not have states dependent on the bf program
04:29:39 <oerjan> a tm encoded directly from the bf program would
04:29:42 <Patashu> think about how the java virtual machine runs a java program without being coded for it
04:31:43 <oerjan> the universal tm would need to encode the states of the tm it simulates in the tape instead
04:32:25 <Guardric> I'm so confused...
04:32:48 <oerjan> Guardric: a universal tm is essentially an interpreter for tm's
04:33:09 <Taneb|Kindle> Written as a Tm
04:33:15 <Guardric> Heh, I don't understand that at all =(
04:33:17 <oerjan> like a java interpreter in java would interpret java programs
04:33:31 <oerjan> Guardric: do you understand how interpreters work, in general?
04:33:50 <Guardric> I'd like to think I do, I've written a smallfuck interpreter in Java today
04:34:06 <oerjan> now let's say you were writing a java interpreter in java
04:36:04 <oerjan> let's say it had a class F, and that the program you wanted to run _also_ had a class F.
04:36:43 <oerjan> then you wouldn't want to confuse them. so you would implement the class F in the program you run as something completely different from your original class F.
04:37:22 <oerjan> in the same way, when a universal turing machine interprets a state in the tm it simulates, it would not want to confuse it with its own states.
04:37:49 <oerjan> it would represent it as something on the tape instead
04:38:20 <oerjan> (since, apart from its states which it needs to use for its own purposes, the tape is the only place it can store things)
04:40:04 <Guardric> I really appreciate you explaining so much for me, but I'm sorry to say that I just don't get it. Maybe if we start from a bf or sf perspective, and work from there?
04:40:09 <Guardric> I think the question I need to ask is: Is is possible to encode a bf or sf program on the tape?
04:40:18 <oerjan> certainly
04:40:33 <oerjan> in fact if you have 9 symbols, it's quite easy :P
04:40:39 <oerjan> (1 extra to mark the end)
04:41:25 <Guardric> OK, let's consider a bf machine like so: the first cell of the tape is initially set to n which is the length of the bf program to be executed
04:41:55 <oklopol> why not just encode the whole program in that first cell?
04:42:04 <oerjan> Guardric: er, for turing machines you only a _finite_ set of symbols
04:42:10 <oerjan> *you have
04:42:22 <oerjan> you cannot encode an arbitrary length in a single cell then
04:42:59 <oerjan> you could write the length in the initial cells in binary, though
04:43:00 <oklopol> my noob sense is tingling
04:43:00 <Guardric> Then cells 2 onward contain the program you wish to execute (cell #2 to 2 + n I think)
04:43:23 * oklopol runs away from angry swat
04:43:33 <oerjan> Guardric: i think it would be easier to have just an end marker, no need to store the length
04:44:24 <Guardric> OK then, say the commands +-<>[] are encoded as the numbers 1 through 6, and the end of the program is marked by a 0
04:44:39 <oerjan> yeah
04:44:59 <Taneb|Kindle> Fun fact: there is a countably infinite number of well-defined algorithms
04:44:59 -!- CakeProphet has joined.
04:44:59 -!- CakeProphet has quit (Changing host).
04:44:59 -!- CakeProphet has joined.
04:45:00 <Guardric> After that 0 comes input, the end of which is also marked by a 0
04:45:13 <oklopol> Taneb|Kindle: did you know 1+2=3?
04:45:26 <oerjan> Guardric: sounds good
04:45:53 <Taneb|Kindle> oklopol:I have added that one to my list
04:46:00 <oklopol> except what if input has 0's :O
04:46:03 <Guardric> so the value in an input cell can be in the range 1 to # of symbols
04:46:17 <oklopol> OH NO
04:46:23 <Taneb|Kindle> Where # is finite
04:46:33 <Guardric> Yes, # of symbols is finite
04:46:34 <oerjan> oklopol: well bf often does eof=0 anyway
04:46:41 <oklopol> oerjan: nooooooo
04:47:04 <Guardric> Now, after this second 0 is free-roam area for the machine to do its work
04:47:15 <Taneb|Kindle> oerjan, I think I am in need of a swat but I cannot remember why
04:47:22 <oklopol> if it's a ubf, i would'be thought there are a constant 256 symbols
04:48:29 <Taneb|Kindle> Not necassarily
04:48:50 <Guardric> What would the tape look like if I want the program to be "+>+" and the input to be null and the output to be "11"?
04:48:56 <oklopol> yes necessarily
04:49:35 <oerjan> 1 4 1 0 0
04:49:51 <Taneb|Kindle> There is a minimum of two oklpopol
04:49:57 <oklopol> why are you spoonfeeding him
04:50:13 <oerjan> oh hm
04:50:21 <Guardric> oerjan, precisely what I was thinking. Now, could you take me through the execution steps?
04:50:35 <oklopol> you can't execute yet
04:50:43 <zzo38> Do you know how to invent Golf-Haskell?
04:50:46 <Taneb|Kindle> Because spoonfeed is the longest word in the english language with all its letters in reverse alphabetical order
04:50:52 <oklopol> you don't know where the head is
04:50:54 <oerjan> Guardric: there needs to be some temporary storage as well
04:51:08 <Guardric> oerjan, what do you mean?
04:51:37 <oerjan> Guardric: or wait hm maybe not
04:51:52 <oklopol> Taneb|Kindle: are you sure
04:52:05 <zzo38> Taneb|Kindle: O, I didn't notice that. But now I can see it is in fact in reverse alphabetical order
04:52:08 <Taneb|Kindle> fairly confident
04:52:27 <zzo38> It is nine letter long but I do not know if there is longer word having that property.
04:52:32 <oerjan> Guardric: first i would shift every right so there is room to put markers on the tape for current bf program position and current bf tape position
04:52:37 <oerjan> *everything
04:52:50 <Taneb|Kindle> GWR said so
04:52:56 <Guardric> oerjan, I understand
04:53:17 <Guardric> oerjan, let's say the tape starts out that way, 0014100
04:54:05 <oklopol> you only need one zero
04:54:11 <oklopol> in the beginning
04:54:27 <oerjan> oklopol: probably
04:54:47 <oklopol> hmm well true, i'm not sure
04:55:08 <oklopol> better have some elbow room, since bf is insane
04:55:29 <oklopol> although you could also use the zeros after the tape...
04:55:58 <oklopol> fastest eva
04:56:35 <Taneb|Kindle> I wonder if Uniquode as-is is Turing complete
04:56:44 <Guardric> oerjan, if the number of symbols is finite, would that mean that the amount of accessible cells is finite?
04:56:54 <oerjan> Guardric: no.
04:56:58 <Patashu> [>] will eventually reach every cell
04:57:21 <oklopol> yeah right
04:57:31 <Taneb|Kindle> [>+]
04:57:35 <oklopol> no
04:57:41 <oklopol> noobs
04:57:44 <Patashu> :(
04:57:45 <oklopol> i'm gonna go
04:57:56 <oklopol> :DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD
04:58:26 <Guardric> but if you use the first cell to hold the value of the current cell pointer...?
04:58:33 <Taneb|Kindle> Patashu yours would stop on the first zero cell
04:58:35 <oerjan> Guardric: no you don't.
04:58:38 <Patashu> shh
04:58:42 <oklopol> Guardric: don't do that
04:58:55 <oerjan> you use a 0 _in_ the tape at the spot for the current cell pointer
04:58:56 <oklopol> not in bf
04:59:13 <oerjan> and then similarly as with input, add 1 to the actual cell values
04:59:58 <Guardric> wait what?
05:00:18 -!- Taneb|Kindle has quit (Quit: Kindle browser needs multiple tabs).
05:00:19 <oerjan> Guardric: you said input could be from 1 to max symbols
05:00:31 <oerjan> so it's reasonable to encode bf tape the same way
05:00:33 <Guardric> Insert a 0 after the current command cell?
05:01:40 <Guardric> oerjan, I think I'm getting what you're saying... Keep going with the execution
05:01:56 <Guardric> so first you'd shift everything over two cells?
05:02:06 <oerjan> Guardric: 01410000. the first 0 is the initial bf program pointer, the second is end of program, the third is end of input, the fourth is current bf tape spot, the fifth is end of bf tape so far
05:02:36 <oerjan> i think that should be enough room for things
05:02:44 -!- ive has quit (Quit: leaving).
05:03:25 <oerjan> so we start at the first 0. go right, look at the first command. it's a +.
05:04:13 <oerjan> turn it into 0. go left, turn that into 1 (+) instead.
05:05:09 <oerjan> 10410000 and we still need to actually _perform_ the +. go right to the fourth 0, which represents the bf tape pointer.
05:06:38 <oerjan> go right, note there is a 0 there too, representing end of tape. to prolong the tape: turn that into 2, go right beyond tape, make a 0.
05:06:51 <oerjan> 104100020
05:07:07 <oerjan> (the 2 represents a bf 1 cell)
05:07:32 <oerjan> go left again to the first 0. you are now ready to perform another command.
05:08:11 <oerjan> as you can see this is verbose, even though i've already summarized many steps of seeking to 0's
05:08:15 -!- darth has joined.
05:09:04 -!- darth has left.
05:09:25 <oerjan> for the 4 (>) instruction we again swap it with the previous 0, seek to the fourth 0, and now swap _that_ with the 2.
05:09:43 <oerjan> 140100200
05:10:31 <oerjan> then go back to the first 0 again. the final 1 (+) proceeds much like the first and we end up with 141002020.
05:10:52 <oerjan> at which point we detect that the first 0 has reached the second, so the program ends.
05:11:14 -!- Guardric has quit (*.net *.split).
05:11:14 -!- olsner has quit (*.net *.split).
05:11:23 <oerjan> gah
05:11:27 -!- Guardric has joined.
05:11:31 <oerjan> typical :P
05:11:34 <oerjan> oh
05:11:36 <Guardric> What just happened...
05:11:45 <oerjan> Guardric: what was the last line you saw?
05:11:46 <Guardric> I got disconnected for some reason
05:11:59 <Guardric> go left again to the first 0. you are now ready to perform another command.
05:12:04 <oerjan> argh
05:12:24 <Sgeo> <oerjan> as you can see this is verbose, even though i've already summarized many steps of seeking to 0's
05:12:24 <Sgeo> * darth (631fe5bc@gateway/web/freenode/ip.99.31.229.188) has joined #esoteric
05:12:24 <Sgeo> * darth (631fe5bc@gateway/web/freenode/ip.99.31.229.188) has left #esoteric
05:12:24 <Sgeo> <oerjan> for the 4 (>) instruction we again swap it with the previous 0, seek to the fourth 0, and now swap _that_ with the 2.
05:12:24 <Sgeo> <oerjan> 140100200
05:12:26 <Sgeo> <oerjan> then go back to the first 0 again. the final 1 (+) proceeds much like the first and we end up with 141002020.
05:12:29 <Sgeo> <oerjan> at which point we detect that the first 0 has reached the second, so the program ends.
05:12:31 <Sgeo> * Guardric has quit (*.net *.split)
05:12:33 <Sgeo> * olsner has quit (*.net *.split)
05:12:48 * Sgeo feels no guilt
05:12:56 -!- olsner has joined.
05:13:04 <oerjan> Guardric: on irc, netsplits happen, that's just life.
05:13:46 <Guardric> Ah ok, well thank you very much for stepping through that simple program
05:14:34 <oerjan> Guardric: this should work nicely for +-<>. i think it _may_ be possible to use it for [] as well, but it needs some thought for the [] matching seeking
05:14:51 <Guardric> Out of curiosity, how would this work with a binary tape? You would no longer be able to encode integers in a single cell
05:15:10 <oerjan> Guardric: well as i said a tm has finite number of symbols anyway
05:15:52 <oerjan> but in any case, if you want to simulate 256 symbols with a binary tm, just write them down in binary
05:16:37 <oerjan> tm's actually handle that easier than bf, since they can always remember which bit they're at
05:18:14 <oerjan> if you _do_ want unbounded cells, then you need to find some way to encode them. the simplest is unary, just do 0's separated by number of 1's. this does mean you may have to shift the entire tape to increment/decrement things, though
05:19:01 <Guardric> Whoa
05:20:24 <oerjan> but having to shift the entire tape to handle arbitrary data is a known problem for bf with bounded cells anyway
05:20:36 <oerjan> (when programming _in_ bf)
05:21:36 <Guardric> Gotcha
05:24:40 -!- Taneb has joined.
05:24:52 <Taneb> Hello
05:26:27 <Taneb> Would it be incorrect to understand a von Neumman machine as a combination of a quine and a self interpreter?
05:27:09 <oerjan> sounds about right
05:27:19 <oerjan> applies to life in general...
05:38:51 <Lymee> Life's programmer is horrible. I mean, it uses a cheating quine! And that's horrible!
05:39:25 <oerjan> what, cheating?
05:40:43 <zzo38> Why does Haskell sometimes change the type of a function I have defined and specified the type?
05:40:55 <CakeProphet> !userinterps
05:40:55 <EgoBot> ​Installed user interpreters: acro aol austro bc bct bfbignum brit brooklyn bypass_ignore bytes chaos chiqrsx9p choo ctcp dc decide drawl drome dubya echo ehird elmer fudd google graph gregor hello id insanetemp jethro kraut lperl lsh map num numberwang ook pansy pi pikhq pirate plot postmodern postmodern_aoler prefixes python redneck reverse rimshot rot13 rot47 sadbf sanetemp sfedeesh sffedeesh simplename slashes svedeesh swedish valspeak wacro warez wc yodawg
05:41:12 <CakeProphet> !svedeesh Wow today is a lovely day.
05:41:12 <EgoBot> Fuu toodey is a looffely dey. Bork Bork Bork! Bork Bork Bork! Bork Bork Bork!
05:41:25 <oerjan> zzo38: how so?
05:41:26 <Guardric> oerjan, thanks for all your help, I will be back tomorrow probably =)
05:41:51 <oerjan> you're welcome :)
05:41:55 -!- Guardric has quit (Quit: Leaving).
05:42:07 <zzo38> Something else is also wrong; perhaps I am doing something wrong.
05:42:39 <zzo38> I tried to define "instance Ord t => MonadX Set t" but it says it cannot deduce (Ord b)
05:43:06 <oerjan> hm, needs more context
05:44:00 <Taneb> Don't you need a ->?
05:44:08 <oerjan> i would guess you are somehow mixing MonadX Set t 's with MonadX Set b
05:44:14 <zzo38> I put: bindX :: (MonadX m b, MonadX m (m a), MonadX m a) => m b -> (b -> m a) -> m a; bindX x f = joinX (fmapX f x); but somehow it changed the type to Monad m => m b -> (b -> m a) -> m a but it seems it won't do that if there is more than one instance, so I guess it is OK
05:44:32 <oerjan> Taneb: not if MonadX is a multiparameter typeclass
05:44:51 <Taneb> I have much to learn
05:45:00 <zzo38> oerjan: The error is on this definition: fmapX = Data.Set.map; (it doesn't mention "b" at all.)
05:46:12 <oerjan> zzo38: does your MonadX have any functional dependency from Set to t? otherwise it might not know that you are using it at type t
05:46:34 <zzo38> O, that is what is wrong. How do you make functional dependency?
05:46:42 <zzo38> What does functional dependency mean?
05:46:51 <oerjan> class MonadX m t | m -> t where
05:48:05 <zzo38> No, I still get the same problem, even after I added the functional dependency and the LANGUAGE pragmas FunctionalDependencies and UndecidableInstances.
05:48:07 <oerjan> er, m might not be the best letter there, but anyhow.
05:48:25 <zzo38> What does functional dependencies means anyways?
05:48:49 <zzo38> oerjan: Whatever; as long as it is not the same as the other letter it should work
05:50:59 <oerjan> zzo38: normally you cannot deduce from an instance MonadX A B that there is not a different instance MonadX A C, which leads to problems selecting an instance if your function or similar only uses the A type
05:51:26 <zzo38> But the "B" in this example is a variable.
05:52:05 <oerjan> yes, but the point is that b could be _any_ type that happened to have such an instance
05:52:42 <oerjan> and without a functional dependency it cannot deduce that it's the same as you want
05:53:17 <zzo38> But the same error even with functional dependency
05:53:34 <oerjan> oh btw i see that you cannot use a f.d. on MonadX since you _do_ want to use it with more than one b per m
05:53:51 <zzo38> Yes
05:54:17 <oerjan> wait you said it changed the type to Monad m => m b -> (b -> m a) -> m a
05:54:29 <oerjan> that's weird, must be something different
05:54:38 <oerjan> hm...
05:54:49 <zzo38> I think the reason it doesn't work is that it ignores constraints on datatype declarations. I read somewhere that it does that.
05:55:03 <oerjan> zzo38: do you happen to have an instance Monad m => MonadX m b ? that would mess up things
05:55:27 <oerjan> and perhaps in that way
05:55:28 <Taneb> Going to learn some more Haskell
05:55:35 <Taneb> Cos I is Haskell newb
05:55:48 <zzo38> oerjan: Yes I do; but it only changes the type to that if that is the *only* instance. Deleting that instance does not get rid of the (Ord b) error though.
05:55:49 <monqy> how much do you know
05:56:13 <Taneb> I'mupt to guards in LYAH
05:57:12 <Taneb> Actually I am just past tha
05:57:25 <Taneb> I am up to where IIRC
05:57:30 <zzo38> I wrote the Constantinople implementation in Haskell; and you can print it out if you have TeX.
05:57:53 <zzo38> It isn't best because it is first Haskell program I wrote.
05:58:06 <oerjan> zzo38: you cannot use such an instance unless you have OverlappingInstances set, i believe.
05:59:04 <zzo38> Some things in there could been improved, and I think the "Pointer" type is really ungeneralization of lens; lens is more generalized and does more things.
05:59:55 <zzo38> (I didn't know about lenses at the time I wrote that program.)
06:00:08 <zzo38> OK, I will try OverlappingInstances
06:00:18 <oerjan> :t Data.Set.map
06:00:19 <lambdabot> forall a b. (Ord a, Ord b) => (a -> b) -> S.Set a -> S.Set b
06:00:27 <zzo38> No, it is still the same error.
06:00:42 <oerjan> zzo38: it's probably that b ^ it cannot deduce the Ord for
06:02:01 <zzo38> But I thought there is an instance for Ord x => Ord (Set x)
06:02:39 <oerjan> or wait hm, there's a b on your bindX too. i'm confused.
06:05:38 <Lymee> > S.map
06:05:39 <lambdabot> Overlapping instances for GHC.Show.Show
06:05:40 <lambdabot> ((a ->...
06:05:53 <oerjan> zzo38: oh and yes it ignores constraints on datatype declarations, although it does better in some ways if you use GADT syntax instead, iirc
06:06:03 <Lymee> > S.map (\x -> floor $ x / 2) (S.Set [1,2,3,4,5,6])
06:06:04 <lambdabot> Not in scope: data constructor `S.Set'
06:06:15 <oerjan> although that has its own subtleties
06:07:27 <oerjan> > S.map (\x -> floor $ x / 2) (S.fromList [1,2,3,4,5,6])
06:07:29 <lambdabot> fromList [0,1,2,3]
06:08:00 <Lymee> Woops!
06:08:06 <oerjan> :t div --also this
06:08:08 <lambdabot> forall a. (Integral a) => a -> a -> a
06:08:54 <Lymee> > S.map $ floor . div 2 $ S.fromList [0..6]
06:08:56 <lambdabot> No instance for (GHC.Real.RealFrac (Data.Set.Set t))
06:08:56 <lambdabot> arising from a use ...
06:09:03 <Lymee> > S.map $ floor . (flip div) 2 $ S.fromList [0..6]
06:09:04 <lambdabot> No instance for (GHC.Real.RealFrac (Data.Set.Set t))
06:09:04 <lambdabot> arising from a use ...
06:09:18 <Lymee> > S.map (floor . /2) $ S.fromList [0..6]
06:09:19 <lambdabot> <no location info>: parse error on input `/'
06:09:23 <Lymee> > S.map (floor . (/2)) $ S.fromList [0..6]
06:09:25 <oerjan> > S.map (`div` 2) $ S.fromList [0..6] -- cough
06:09:26 <lambdabot> fromList [0,1,2,3]
06:09:27 <lambdabot> fromList [0,1,2,3]
06:09:33 <Lymee> Oh right
06:09:36 * Lymee facepalm
06:09:40 <Lymee> > S.map (floor . (/2)) $ S.fromList [0..]
06:09:41 <Lymee> WEEEE
06:09:44 <lambdabot> mueval-core: Time limit exceeded
06:10:04 <oerjan> not overly lazy, that
06:10:22 <oerjan> i think it may be a tree structure, possibly
06:10:39 <monqy> it is iirc
06:10:45 <Taneb> On to recursion
06:11:03 <oerjan> Taneb: but first, recursion!
06:12:24 <zzo38> oerjan: bindX is not a class member though; the class members are unitX, joinX, and fmapX. bindX is outside.
06:12:35 <oerjan> aha
06:13:05 <zzo38> But that has nothing to do with the problem I have. I think the problem has to do with ignoring constraints on datatype declarations.
06:14:07 <zzo38> Maybe I cannot fix this program until they fix that problem in GHC.
06:14:57 <Lymee> @pl \x foldr (||) $ map (\y -> (x `mod` y) == 0) [2..x]
06:14:58 <lambdabot> (line 1, column 11):
06:14:58 <lambdabot> unexpected "|"
06:14:58 <lambdabot> expecting pattern
06:15:13 <Lymee> @pl \x foldr (---) $ map (\y -> (x `mod` y) == 0) [2..x]
06:15:14 <lambdabot> (line 1, column 53):
06:15:14 <lambdabot> unexpected end of input
06:15:15 <lambdabot> expecting pattern
06:15:18 <Lymee> @pl \x foldr (~) $ map (\y -> (x `mod` y) == 0) [2..x]
06:15:19 <lambdabot> (line 1, column 11):
06:15:19 <lambdabot> unexpected "~"
06:15:19 <lambdabot> expecting pattern
06:15:27 <Lymee> @pl \x -> foldr (||) $ map (\y -> (x `mod` y) == 0) [2..x]
06:15:28 <lambdabot> foldr (||) . ap (map . flip flip 0 . ((==) .) . mod) (enumFromTo 2)
06:15:43 -!- GreaseMonkey has joined.
06:16:29 <Lymee> > filter (foldr (||) . ap (map . flip flip 0 . ((==) .) . mod) (enumFromTo 2)) $ [0..500]
06:16:31 <lambdabot> Couldn't match expected type `GHC.Bool.Bool'
06:16:31 <lambdabot> against inferred type ...
06:16:34 <Lymee> :<
06:17:16 <zzo38> The definitions of unitX and joinX in the instance declaration do not cause the error. Only fmapX is error.
06:17:31 -!- Taneb has quit (Ping timeout: 252 seconds).
06:18:14 <Lymee> > filter (foldr (||) . ap (map . flip flip 0 . ((==) .) . mod) False (enumFromTo 2)) $ [0..500]
06:18:16 <lambdabot> Couldn't match expected type `GHC.Bool.Bool'
06:18:16 <lambdabot> against inferred type ...
06:18:33 <Lymee> @pl \x -> foldr (||) False $ map (\y -> (x `mod` y) == 0) [2..x]
06:18:34 <lambdabot> foldr (||) False . ap (map . flip flip 0 . ((==) .) . mod) (enumFromTo 2)
06:18:46 <Lymee> > filter (foldr (||) False . ap (map . flip flip 0 . ((==) .) . mod) (enumFromTo 2)) $ [0..500]
06:18:48 <lambdabot> [2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,2...
06:19:11 <zzo38> Do you think this problem has to do with ignoring constraints on datatype declarations, or is the problem having to do with something else?
06:19:39 <oerjan> zzo38: i am afraid that they have actually decided to remove constraints on datatype definitions altogether http://www.haskell.org/pipermail/haskell-cafe/2011-June/092922.html
06:19:54 <oerjan> because it works so badly
06:20:02 <zzo38> oerjan: I have read that they have decided to remove it.
06:20:36 <zzo38> Although I am actually unsure whether or not constraints on datatype declarations will fix this problem, I don't know for sure. Do you know?
06:21:33 <oerjan> :t or -- teehee
06:21:34 <lambdabot> [Bool] -> Bool
06:21:47 <oerjan> :t any
06:21:48 <lambdabot> forall a. (a -> Bool) -> [a] -> Bool
06:22:17 <oerjan> Lymee: ^
06:22:32 <Lymee> uuu
06:23:06 <oerjan> Lymee: you should maybe @hoogle more :)
06:23:27 <oerjan> @hoogle [Bool] -> Bool
06:23:29 <lambdabot> Prelude and :: [Bool] -> Bool
06:23:29 <lambdabot> Prelude or :: [Bool] -> Bool
06:23:29 <lambdabot> Data.List and :: [Bool] -> Bool
06:23:55 <oerjan> zzo38: what is you MonadX definition?
06:23:58 <oerjan> *your
06:24:24 <zzo38> class MonadX m a where { fmapX :: MonadX m b => (a -> b) -> m a -> m b; unitX :: a -> m a; joinX :: m (m a) -> m a; };
06:25:09 <oerjan> :t Data.Set.map
06:25:10 <lambdabot> forall a b. (Ord a, Ord b) => (a -> b) -> S.Set a -> S.Set b
06:26:35 <oerjan> zzo38: ah right, i think it cannot deduce that the MonadX m b instance is of the same type as you are defining, so therefore cannot deduce the Ord. i don't think it has anything to do with datatype contexts.
06:27:01 <zzo38> O, that is why.
06:27:11 <oerjan> it _does_ have to do with what i said about functional dependencies, but unfortunately you really need to not have those
06:27:20 <zzo38> Why can't it deduce that, though?
06:27:36 <zzo38> (I did remove the functional dependencies; but the error is same either way)
06:27:53 <oerjan> because there could be an instance MonadX Set b completely different from your usual one
06:28:10 <zzo38> If I explicit forall will it work?
06:28:12 <oerjan> one which doesn't require Ord
06:28:27 <zzo38> O, OK.
06:28:50 <zzo38> Now I understand why.
06:29:09 <zzo38> But if there was such an instance, then it would be overlapping.
06:29:21 <oerjan> yeah
06:31:38 <zzo38> Well, there is another instance but it doesn't overlap if Set is not instance of Monad.
06:33:17 <zzo38> Is there a way to specify that an instance is final with respect to certain variables?
06:34:56 <zzo38> If you could do that, then it might work, because instance Ord t => MonadX Set t is final with respect to t meaning there can be no other instances of form MonadX Set t
06:38:03 <oerjan> i don't know
06:44:06 <zzo38> It might work if Ord is the constraint of the class instead of the instance, but that beats the purpose. But you might be able to have that without beating the purpose if you have the & kind I proposed (note I changed my proposals from what it was before)
06:46:44 -!- Taneb has joined.
06:47:26 <zzo38> Then you could have class (c a, c (m a)) => MonadX (c :: * -> &) (m :: * -> *) (a :: *)
06:48:52 <zzo38> Do you expect this to work, if it were implemented?
06:49:29 <zzo38> (That is, c is a class of concrete types, m is a monadic (nonconcrete) type, and a is a concrete type.)
06:50:09 <coppro> what is &?
06:51:05 <zzo38> & means (x -> &) is the kind for classes of type of kind x
06:51:52 <coppro> what
06:51:54 <zzo38> (I used [x] at first in my proposal, but after reading some more stuff and other people told me some stuff, I realized [x] is no good and (x -> &) is good)
06:52:48 <zzo38> coppro: Well, if you put c a => ..... then what kind is c supposed to be? That is what I have tried to describe; it can be used in constraints.
06:53:18 <coppro> C is *->*
06:53:20 <coppro> err, c
06:53:26 <coppro> c a is *
06:53:44 <zzo38> No, c has to be a class, I think
06:54:20 <coppro> a 1-adic typeclass is * -> *
06:54:27 <coppro> a 2-adic typeclass is * -> * -> * and so on
06:55:30 <zzo38> I suppose you could have classes of kind & by itself which could be used if you are writing a module using functions from a nonexistent module (currently you use hs-boot but this might work too, although I am unsure)
06:55:42 <zzo38> coppro: O, is that how it works?
06:55:58 <coppro> zzo38: * means "a concrete type"
06:56:01 <zzo38> If I type in :kind Eq in GHCi it is error.
06:56:09 <coppro> so * -> * is a function taking a type, producing a type
06:56:21 <zzo38> coppro: I know that.
06:56:38 <coppro> oh wait...
06:56:40 <coppro> nvm I am dumb
06:56:41 <zzo38> But a class is not a type
06:56:43 <coppro> yeah
06:56:47 <coppro> it's 3 am
06:56:49 <coppro> I am le tired
06:58:58 -!- GreaseMonkey has quit (Quit: The Other Game).
07:00:11 <oerjan> zzo38: i am wondering if a GADT like data HasOrd :: * -> * where HasOrd :: Ord a => a -> HasOrd a might work a bit like your c above
07:00:13 <zzo38> If you allowed more-notation across modules, you could even have it import datatypes that are not defined yet, and use classes to import functions that are not defined yet. And then it would work even without hs-boot
07:00:55 <oerjan> (no guarantees though, there are some problems with combining GADT values i think)
07:01:22 <zzo38> oerjan: I think that only constraints the constructor though.
07:04:16 <oerjan> zzo38: maybe but GADT's _does_ give a little more out than just that
07:04:53 <oerjan> hm argh i guess it only works if you have a particular value to unwrap though
07:05:03 <oerjan> fmapX might be too much for it
07:06:37 <oerjan> huh i wonder if you could define an Ord instance for HasOrd a
07:07:38 <oerjan> instance Ord (HasOrd a) where compare (HasOrd x) (HasOrd y) = compare x y oh hm that won't work
07:08:02 <oerjan> it doesn't say which one to get the instance from
07:09:16 <zzo38> Yes; that is what I was thinking of, why I said it is wrong.
07:09:16 <oerjan> instance Ord (HasOrd a) where compare (HasOrd x) = let cx = compare x in \(HasOrd y) -> cx y
07:09:50 <oerjan> would that be enough
07:10:50 <oerjan> i vaguely recall ghc has trouble identifying types extracted from GADT's even when they should obviously be the same though
07:12:56 <zzo38> But constructors are not types.
07:13:52 <oerjan> !haskell {-# LANGUAGE GADT #-} data HasOrd a where { HasOrd :: Ord a => a -> HasOrd a }; instance Ord (HasOrd a) where { compare (HasOrd x) = let cx = compare x in \(HasOrd y) -> cx y }; main = print $ (HasOrd "hello" < HasOrd "world")
07:14:01 <EgoBot> ​/tmp/input.11423.hs:1:13: unsupported extension: GADT
07:14:07 <oerjan> :(
07:14:26 <zzo38> I think you need "GADTs"
07:14:31 <oerjan> !haskell {-# LANGUAGE GADTs #-} data HasOrd a where { HasOrd :: Ord a => a -> HasOrd a }; instance Ord (HasOrd a) where { compare (HasOrd x) = let cx = compare x in \(HasOrd y) -> cx y }; main = print $ (HasOrd "hello" < HasOrd "world")
07:14:33 -!- nooga has joined.
07:14:34 <zzo38> At least that is what works on my computer
07:16:30 <nooga> maf
07:16:59 <oerjan> !haskell {-# LANGUAGE GADTs #-} data HasOrd a where { HasOrd :: Ord a => a -> HasOrd a }; instance Ord (HasOrd a) where { compare (HasOrd x) = (let cx = compare x in \(HasOrd y) -> cx y) }; main = print $ (HasOrd "hello" < HasOrd "world")
07:17:21 <oerjan> 09:17 =EgoBot> syntax error at /tmp/input.23875 line 1, near "}}"
07:17:32 <oerjan> where the heck is the }} D:
07:17:50 <oerjan> obviously layout-inserted, but _where_?
07:19:01 <zzo38> Don't use layout mode if it confuses you!
07:19:24 <zzo38> Use the explicitly "module" command to turn off layout mode for the entire module
07:19:43 <oerjan> !haskell {-# LANGUAGE GADTs #-} module Main where { data HasOrd a where { HasOrd :: Ord a => a -> HasOrd a }; instance Ord (HasOrd a) where { compare (HasOrd x) = (let cx = compare x in \(HasOrd y) -> cx y) }; main = print $ (HasOrd "hello" < HasOrd "world") }
07:19:57 <oerjan> ok that helped
07:20:21 <oerjan> oh darn Ord has superclasses
07:20:30 <oerjan> @src Ord
07:20:31 <lambdabot> class (Eq a) => Ord a where
07:20:31 <lambdabot> compare :: a -> a -> Ordering
07:20:31 <lambdabot> (<), (<=), (>), (>=) :: a -> a -> Bool
07:20:31 <lambdabot> max, min :: a -> a -> a
07:20:35 <oerjan> @src Eq
07:20:36 <lambdabot> class Eq a where
07:20:36 <lambdabot> (==), (/=) :: a -> a -> Bool
07:20:44 <oerjan> wait definitely not Show
07:22:55 <oerjan> !haskell {-# LANGUAGE GADTs #-} module Main where { data HasEq a where { HasEq :: Eq a => a -> HasEq a }; instance Eq (HasEq a) where { (==) (HasEq x) = (let ex = (==) x in \(HasEq y) -> ex y) }; main = print $ (HasEq "hello" == HasEq "world") }
07:23:00 <EgoBot> False
07:23:03 <oerjan> yay
07:23:18 <oerjan> !haskell {-# LANGUAGE GADTs #-} module Main where { data HasEq a where { HasEq :: Eq a => a -> HasEq a }; instance Eq (HasEq a) where { (==) (HasEq x) = (let ex = (==) x in \(HasEq y) -> ex y) }; main = print $ (HasEq "hello" == HasEq "hello") }
07:23:23 <EgoBot> True
07:23:43 <oerjan> ok so that worked. at least in EgoBot's version.
07:25:41 <zzo38> On the wall, I have the picture of creature with one eye and uncountable tentacles. Not because there is too many to count; it is because the artist draw the picture to make it difficult.
07:25:52 <oerjan> heh
07:27:02 <zzo38> (Nobody has ever been able to count as far as I know. Different people try, and get various different answers, but not certain.)
07:32:16 -!- nooga has quit (Ping timeout: 245 seconds).
07:32:28 <Sgeo> elliott, Phantom_Hoover, CakeProphet, Homestuck update.
07:32:40 <Taneb> And Taneb
07:32:44 <Taneb> [S]?
07:33:19 -!- zzo38 has changed nick to Homestuck_update.
07:33:21 <Homestuck_update> You rang?
07:33:22 -!- Homestuck_update has quit (Quit: Homestuck_update).
07:34:54 <Taneb> So... Jail Break and by extension Problem Sleuth take place on LOLAF?
07:35:00 <Taneb> *LOFAF
07:35:56 <Sgeo> I don't remember if I read Jail Break
07:42:38 -!- oerjan has quit (Quit: Good night).
07:43:15 <Sgeo> elliott, Phantom_Hoover, CakeProphet, Taneb, Homestuck news update.
07:55:31 <Taneb> Just got my timetable for THE NEXT ACADEMIC YEAR
07:55:49 <Taneb> Monday: Further Ma, Further Ma, Latin, , Mathematics
07:56:46 <Taneb> Tuesday: Ancient Hi/ ,Mathematics/ , , Further Ma/Latin, Latin
07:57:08 <Taneb> Wednesday: Tutorial, Further Ma, Mathermatics, , Ancient Hi
07:57:24 <Taneb> I'm guessing Ancient Hi is Ave or something
07:57:47 <Taneb> Thursday: Mathematics, , Ancient Hi, ,
07:58:06 <Taneb> Friday: Latin, Ancient Hi, Further Ma, Mathematics,
08:17:46 -!- Taneb has changed nick to TanebAFK.
08:36:58 -!- TanebAFK has changed nick to Taneb.
08:37:07 <Taneb> Didn't actually go AFK at all
08:45:29 -!- sebbu2 has changed nick to sebbu.
08:55:15 -!- nooga has joined.
08:55:48 -!- azaq23 has joined.
09:26:36 <itidus20> whats ancient hi?
09:31:12 <Taneb> "ave"
09:34:17 <itidus20> whats ave?
09:34:31 <Taneb> A greeting in Latin
09:34:43 <itidus20> ahh... so its a latin class
09:34:53 <Taneb> No, ancient history
09:35:07 <itidus20> is that like ave maria?
09:35:19 <Taneb> Perhaps
09:35:24 <Taneb> But more like ave ceasar
09:35:29 <itidus20> maybe i saw ave in asterix comics
09:35:48 <itidus20> i knew it sounded familiar
09:35:54 <Taneb> It was in quite a lot
09:59:48 <Taneb> The Uniquode program +)......)M.()#)."(......)).... does nothing in an intersting way
10:00:28 -!- Taneb has quit (Quit: Goodbye).
10:02:43 -!- nooga has quit (Ping timeout: 252 seconds).
10:08:23 -!- CakeProphet has quit (Ping timeout: 268 seconds).
10:34:51 -!- CakeProphet has joined.
10:34:52 -!- CakeProphet has quit (Changing host).
10:34:52 -!- CakeProphet has joined.
10:43:26 -!- Taneb has joined.
10:48:07 -!- Patashu has quit (Quit: MSN: Patashu@hotmail.com , Gmail: Patashu0@gmail.com , AIM: Patashu0 , YIM: patashu2 .).
10:49:31 -!- monqy has quit (Quit: hello).
10:50:25 <Taneb> I think that someone should try to make an esolang contest again
11:13:12 <Taneb> Ah, Toshiba tech support hold music
11:23:07 -!- nooga has joined.
11:35:09 -!- nooga has quit (Ping timeout: 276 seconds).
11:40:14 -!- azaq23 has left ("Leaving.").
11:40:32 -!- azaq23 has joined.
11:43:49 -!- nooga has joined.
11:50:44 -!- Phantom_Hoover has joined.
11:58:48 <Taneb> VBefunge-93 is going well
11:59:50 <Deewiant> Déjà vu
12:00:08 -!- GuestIceKovu has joined.
12:00:18 <Taneb> Or it would be going well if I could actually open it
12:00:37 -!- Slereah has quit (Ping timeout: 268 seconds).
12:04:16 <nooga> huh
12:04:25 <nooga> Visual like Basic?
12:05:48 -!- GuestIceKovu has changed nick to Slereah.
12:08:13 -!- Taneb has quit (Ping timeout: 260 seconds).
12:12:37 -!- NihilistDandy has quit (Read error: Operation timed out).
12:44:02 -!- nooga has quit (Ping timeout: 264 seconds).
12:49:19 -!- boily has joined.
12:51:20 <Gregor> !delinterp Gregor
12:51:21 <EgoBot> ​That interpreter doesn't exist!
12:51:25 <Gregor> >_>
12:51:29 <Gregor> !userinterps
12:51:30 <EgoBot> ​Installed user interpreters: acro aol austro bc bct bfbignum brit brooklyn bypass_ignore bytes chaos chiqrsx9p choo ctcp dc decide drawl drome dubya echo ehird elmer fudd google graph gregor hello id insanetemp jethro kraut lperl lsh map num numberwang ook pansy pi pikhq pirate plot postmodern postmodern_aoler prefixes python redneck reverse rimshot rot13 rot47 sadbf sanetemp sfedeesh sffedeesh simplename slashes svedeesh swedish valspeak wacro warez wc yodawg
12:51:36 <Gregor> !delinterp gregor
12:51:36 <EgoBot> ​Interpreter gregor deleted.
12:51:52 <Gregor> I'm tired of getting poinged every time somebody types !userinterps :P
12:55:51 <fizzie> What did it do?
12:56:24 <Phantom_Hoover> <nooga> Visual like Basic?
12:56:33 <Phantom_Hoover> Yes, in the sense of not being visual at all.
13:01:53 <Gregor> fizzie: Injected ſ's and þ's.
13:03:35 <Phantom_Hoover> !pansy hello
13:03:36 <EgoBot> hello
13:03:46 <Phantom_Hoover> !pansy OK, what does this one do?
13:03:46 <EgoBot> OK, what doezth thith one do?
13:04:17 <Phantom_Hoover> !pansy Lisps? How many text transformers do we even have?
13:04:17 <EgoBot> Lithpth? How many tektht tranthformerth do we even have?
13:06:15 -!- derdon has joined.
13:15:15 -!- hiato has joined.
13:30:50 -!- azaq231 has joined.
13:32:06 -!- azaq23 has quit (Ping timeout: 260 seconds).
13:46:04 -!- IRCReaderBOT has joined.
13:46:06 -!- IRCReaderBOT has quit (Excess Flood).
13:52:07 -!- copumpkin has quit (Quit: Computer has gone to sleep.).
14:00:10 -!- sllide has joined.
14:01:38 -!- nooga has joined.
14:05:17 -!- derrik has joined.
14:08:21 -!- derrik has quit (Client Quit).
14:08:42 -!- derrik has joined.
14:13:32 -!- derrik has quit (Ping timeout: 245 seconds).
14:17:29 -!- nooga_ has joined.
14:20:06 -!- nooga has quit (Ping timeout: 246 seconds).
14:30:10 -!- copumpkin has joined.
14:31:02 -!- NihilistDandy has joined.
14:34:22 -!- augur has joined.
14:37:42 -!- NihilistDandy has quit (Ping timeout: 240 seconds).
14:41:29 -!- NihilistDandy has joined.
14:45:12 -!- pumpkin has joined.
14:46:01 -!- copumpkin has quit (Ping timeout: 258 seconds).
14:46:42 -!- azaq23 has joined.
14:48:22 -!- azaq231 has quit (Ping timeout: 268 seconds).
14:52:46 -!- NihilistDandy has quit (Ping timeout: 252 seconds).
14:57:23 -!- pumpkin has changed nick to copumpkin.
15:10:57 -!- NihilistDandy has joined.
15:14:39 -!- Guardric has joined.
15:26:27 -!- NihilistDandy has quit (Ping timeout: 245 seconds).
15:47:10 -!- elliott has joined.
15:49:17 <elliott> helo
15:49:17 <lambdabot> elliott: You have 3 new messages. '/msg lambdabot @messages' to read them.
15:49:46 <derdon> I asked David Morgan-Mar two questions about Chef, though he hasn't answered so far. Is there a possibility someone here could answer them?
15:50:24 <derdon> http://bpaste.net/show/yruvHzWwMQvfLeLH7XYx/
15:53:09 <elliott> I think there are implementations of Chef you could check against
15:53:14 <elliott> at least to see what everyone else thinks
15:53:37 <elliott> oh gawd, esolangs.org has that annoying everydns thing
15:55:43 <derdon> elliott: I don't think so.
15:56:20 <elliott> huh, really?
15:56:34 <elliott> looks like there's a perl one which is apparently buggy
15:57:09 <elliott> derdon: Well, the spec is ambiguous; you have two options: wait until DMM responds, or make up your own interpretation and assure everyone it's standard :)
15:57:52 <derdon> elliott: I could start with #2 and adopt it after I got the response from the holy David
15:58:31 <elliott> derdon: You could suggest your interpretations to him; there's a good chance he'll just say "that sounds good" :P
15:59:05 <elliott> derdon: If you write a test suite for Chef interpreters in Chef everyone will treat your interpretation as word of god, even the language creator. (Proof: Mycology.)
15:59:08 <derdon> elliott: you see the complete mail in the paste. I already shared my thoughts there
15:59:25 <elliott> I skimmed it :P
15:59:37 -!- augur has quit (Remote host closed the connection).
16:08:21 <elliott> "Please read Documentation/SubmittingPatches - you must write a proper commit message, add a Signed-Off-By line, and submit to the linux kernel mailing list, CCing the affected maintainers (ie, not Linus in most cases)."
16:08:22 <elliott> "can you please point me at some url where I can read that submitting patches documentation? thanks!"
16:08:36 <elliott> pikhq_: putting the kernel on github: mistake of the century
16:09:13 <derdon> you could have seen that coming
16:10:12 <elliott> Maybe Linus is doing it for cheap laughs?
16:10:20 <elliott> (Note: Probably not actually true.)
16:11:34 <elliott> https://github.com/torvalds/linux/pull/6
16:11:38 <elliott> This is literally the stupidest thing ever.
16:15:38 -!- MSleep has changed nick to MDude.
16:16:10 <elliott> fizzie: Does SCKE have specs?
16:16:14 <Vorpal> <elliott> pikhq_: putting the kernel on github: mistake of the century <-- they did what?
16:16:31 <elliott> Vorpal: http://github.com/torvalds/linux
16:16:37 <Vorpal> elliott: why
16:16:46 <elliott> kernel.org is down so Linus put it on GitHub. He likes it apart from the issues and pull requests, which he hates.
16:16:55 <elliott> (Because everyone is submitting crap.)
16:16:57 <Vorpal> ah
16:17:02 <pikhq_> So, basically he likes it as a nicer gitweb.
16:17:04 <Vorpal> can't you turn that off
16:17:25 <elliott> Vorpal: Issues yes, pull requests apparently not although I swear you used to be able to
16:17:31 <elliott> He's basically just ignoring them. :p
16:17:35 <pikhq_> Obviously, the issues and pull requests he's not going to use at all.
16:17:37 <elliott> pikhq_: Well, + host.
16:17:40 <pikhq_> lkml has that covered.
16:17:41 <elliott> More like a nicer repo.or.cz :P
16:19:52 -!- boily has quit (Ping timeout: 276 seconds).
16:20:57 -!- boily has joined.
16:21:16 -!- augur has joined.
16:21:26 -!- Guardric has quit (Quit: Leaving).
16:24:39 -!- Guardric has joined.
16:27:07 -!- ais523 has joined.
16:28:35 <Vorpal> back
16:28:49 <Vorpal> elliott: I guess to Torvalds the pull request is an issue then
16:29:15 <elliott> was that meant to be a joke
16:29:23 <Vorpal> elliott: no a pun.
16:29:31 <Vorpal> because oerjan wasn't here
16:29:36 <elliott> vorpal "puns arent jokes" vorpal
16:29:51 <Vorpal> elliott: yes, it was meant to be lame
16:30:11 * derdon chuckled
16:42:23 -!- nooga_ has quit (Ping timeout: 260 seconds).
16:44:09 <elliott> I like how I have exactly one function left in Shiro that feels like it belongs in a Utils module.
16:44:16 <elliott> And nowhere else.
16:44:33 <Gregor> elliott: YOU HAVE ABANDONED #plof
16:44:52 <elliott> Not any more
16:45:06 <ais523> elliott: what is that function?
16:45:09 <ais523> or at least, what does it do?
16:45:13 <elliott> ais523:
16:45:14 <elliott> -- doesn't really belong here, but oh well
16:45:15 <elliott> makeFingerprint :: String -> Shiro [(FPIns, Shiro ())] -> Fingerprint
16:45:15 <elliott> makeFingerprint = Fingerprint . packName
16:45:25 <elliott> It can't go in Types.hs as a "smart constructor" type thing because packName is in Shiro.Value.
16:45:34 <ais523> heh, Vorpal is still in #feather-lang
16:45:41 <ais523> if I make progress on Feather, it'll be announced there first!
16:45:50 <elliott> I can either move packName and packValues into Shiro.Types and put makeFingerprint in there too, or just deal with it being in Shiro.Value or Shiro.Monad.
16:46:37 <ais523> ah, hmm
16:46:45 <ais523> so it's Shiro-related utils, not general utils
16:46:58 <elliott> That's what Shiro.Utils is :P
16:47:00 <elliott> Or, was
16:47:06 <elliott> I eliminated it just minutes before adding makeFingerprint
16:47:16 <ais523> which I tend to have a bunch of in any nontrivial program
16:47:24 <elliott> I could make Fingerprint.hs like I used to have
16:47:24 <ais523> in a functional language
16:47:34 <elliott> But it'd contain exactly one function
16:47:43 <ais523> reimplementing things is often faster than looking up the standard library
16:47:44 <elliott> ais523: That's because you haven't heard of looking for things in the libraries
16:47:53 <ais523> elliott: I can reimplement them in a few seconds
16:47:58 <ais523> it takes longer than that to look for them
16:48:04 <elliott> ais523: So can I, but I have the arcane knowledge known as "knowing why that's idiotic"
16:48:09 <Phantom_Hoover> Am I a bad person for hating people who drone on about how beautiful Euler's identity is?
16:48:16 <Phantom_Hoover> (The answer is no.)
16:51:11 -!- NihilistDandy has joined.
16:52:39 -!- FireFly has joined.
16:53:21 <cheater> euler's identity is not as beautiful as euler's identity for TAU
16:54:49 -!- calamari has joined.
17:01:54 <elliott> Phantom_Hoover is torturing puppies help
17:06:09 <Phantom_Hoover> The third puppy just got shot in the head instantly.
17:06:45 <Gregor> Well, OK then.
17:06:48 <Gregor> That's clearly not torture.
17:07:07 <elliott> ais523: hmm, I think I'll just move packValues/packName/makeFingerprint into Types.hs
17:08:03 <Phantom_Hoover> This does it, I'm sending Gregor in instead.
17:08:14 <elliott> Gregor: enjoy
17:09:27 <elliott> I(0gnirts -- addr)Convert an ascii ip address to a 32 bit address
17:09:35 <elliott> Really? Just IP? No DNS?
17:09:47 <elliott> I guess that's why fungot uses an IP.
17:09:48 <fungot> elliott: mr president, commissioner, i fully accept that description when it comes to human rights. yes, with an average fat content of chocolate, and we are using double standards! we all know that under present legislation and also in relation to standardization bodies. if i do not want.
17:09:51 <elliott> But c'mon, surely everyone uses gethostbyname.
17:11:04 <elliott> Or, hmm
17:13:52 -!- calamari has quit (Quit: Leaving).
17:14:31 <Phantom_Hoover> OK, this does it, I'm sending him in.
17:14:57 <Gregor> getaddrinfo
17:15:35 <Phantom_Hoover> Three volleys of crossbow fire later, he's right next to the first marksman with no injuries.
17:15:37 <elliott> Gregor: w/e, "modern" mr.
17:16:00 <Gregor> Well, that's certainly a sentence.
17:16:21 <elliott> U/r like, with it's;;;; unbelievebveable....
17:16:30 <Phantom_Hoover> Gregor, OK, you're now lying with a spinal injury just outside crossbow range.
17:16:37 <elliott> me too
17:16:54 <elliott> AI_NUMERICSERV
17:16:54 <elliott> The ServiceName argument must be a port number in string form, and service name lookups will not be attempted.
17:16:54 <elliott> ah
17:17:14 <Vorpal> <ais523> if I make progress on Feather, it'll be announced there first! <-- yay!
17:17:31 <Vorpal> not likely to happen though
17:17:32 <ais523> note: a false statement implies anything
17:17:38 -!- augur has quit (Remote host closed the connection).
17:17:45 <elliott> Thank god, I'm in the best place possible for Feather information.
17:17:46 <Vorpal> ais523: indeed
17:17:47 <elliott> Vorpal is in the worst.
17:17:53 <Phantom_Hoover> Of course, rather than recovering Gregor, everyone just reloads the cages.
17:17:55 <elliott> Also, Vorpal will never hear about Feather because he'll die right before it's released.
17:18:19 <Vorpal> elliott: true, you are younger. Statistically you are likely to die after me.
17:18:46 <Phantom_Hoover> no
17:18:47 <Phantom_Hoover> gregor
17:18:48 <Phantom_Hoover> don't
17:18:53 <Phantom_Hoover> don't run back towards them
17:18:55 <Phantom_Hoover> please
17:19:15 <elliott> he,m
17:19:15 <elliott> revenge
17:19:16 <elliott> pupy
17:20:03 <Phantom_Hoover> On the bright side, the siege is down to two marksmen.
17:20:17 <Phantom_Hoover> ineiros died of thirst, though.
17:21:21 -!- NihilistDandy has quit (Ping timeout: 260 seconds).
17:21:49 <elliott> Phantom_Hoover: What, why?
17:21:53 <elliott> We have like a billion drank.
17:22:21 <Phantom_Hoover> elliott, because he was in a cage trap after being knocked unconscious.
17:22:30 <elliott> Oh.
17:22:46 <Phantom_Hoover> ....oh ffs
17:22:51 <Phantom_Hoover> I forgot to arm him with an axe.
17:22:59 -!- nooga has joined.
17:24:52 <Phantom_Hoover> Fortunately, he should live.
17:26:27 <elliott> Phantom_Hoover: Have you noticed that dorfs get thirsty as soon as they enter the danger room and you turn the lever.
17:26:37 <Phantom_Hoover> Gregor does, yes.
17:26:58 <Phantom_Hoover> I suspect this is because, as I discovered to my cost, he is quick to tire.
17:29:34 <Phantom_Hoover> GREGOR STANDS
17:31:52 <Phantom_Hoover> I have a distinct suspicion that even in this state he'll be able to break the siege.
17:34:01 <elliott> But then sleep a lot.
17:34:08 <Phantom_Hoover> I'm going to test this suspicion.
17:35:35 <Phantom_Hoover> Siege broken.
17:35:52 <elliott> Yaaaaaaaaaaaaaay enjoy your year.
17:38:41 <Vorpal> I have to say, ssh imposes quite an overhead. Compared rsync over ssh to plain rsync for sending an dvd iso over gbit ethernet. Neither maxes out the network link, but with SSH I get on average 36 MB/s and with just rsync I get on average 50 MB/s. I suspect in the latter case the HDD speed of the target computer limits the performance, quite slow laptop disk, and the file is way to large to fit into RAM
17:38:41 <Vorpal> . When just sending raw data with netcat I get much better than that. (110 MB/s)
17:40:34 <Vorpal> bbl, going to be offline for a bit
17:41:04 -!- Vorpal has quit (Read error: Connection reset by peer).
17:41:31 -!- augur has joined.
17:47:12 -!- cheater_ has joined.
17:47:17 -!- cheater has quit (Ping timeout: 245 seconds).
17:49:37 -!- Taneb has joined.
17:51:16 <Taneb> Hello!
17:51:46 <elliott> hi
17:51:53 <Taneb> How goes?
17:52:04 <elliott> goingly
17:52:28 <Taneb> Well, VBefung-93 is nearing completion!
17:52:41 <Taneb> By which I mean I'm about to uncover the hardest bit
17:55:31 <pikhq_> Hmm. That "Upgrade through every version of Windows" thing seems a bit lame. Should've started with DOS 1.0.
18:04:52 <Taneb> Visual Basic isn't that bad for an imperative language
18:05:32 <Gregor> pikhq_: ?
18:05:57 <pikhq_> Gregor: Someone started with Windows 1.0 and upgraded it to Windows 7.
18:06:12 <Gregor> In how many steps?
18:06:38 <Gregor> My guess would be that the minimum is 1.0 -> 3.11-or-whatever -> maybe XP? -> 7
18:06:52 <elliott> Gregor: In as many steps
18:07:00 <elliott> It's an entertaining video :P
18:07:04 <ais523> presumably it went through every consumer version
18:07:05 <elliott> He keeps chastising Microsoft for losing his settings.
18:07:09 <ais523> just because it could
18:07:14 <Gregor> lol
18:07:18 <Gregor> OK, I guess I want to see it :P
18:07:19 <elliott> But some settings actually went through.
18:07:22 <ais523> is there any hardware that all versions of Windows install on?
18:07:24 <elliott> Through like three point one to the latest.
18:07:29 <elliott> ais523: Yes, the VM used :P
18:07:39 <ais523> hmm
18:07:44 <elliott> Gregor: http://www.youtube.com/watch?v=vPnehDhGa14
18:07:48 <ais523> the VM had the same virtual hardware all the time, though?
18:07:55 <elliott> ais523: I believe so; it's not that hard
18:08:00 <elliott> Ninety-five won't boot with too much RAM
18:08:05 <elliott> But Vista will run on less
18:08:10 <elliott> Although maybe not well
18:09:21 <Sgeo> Maybe I should have @told elliott and Phantom_Hoover
18:09:33 <Sgeo> Although you two probably know by now anyway
18:09:37 <elliott> Told what?
18:09:46 <Sgeo> Homestuck update
18:10:00 <Taneb> What the hell does "dim" actually mean
18:10:09 <Taneb> I know what it does, but what does it mean?
18:10:18 <elliott> Dimensions?
18:10:21 <elliott> Yep
18:10:24 <elliott> Was used to define dimensions of an array
18:10:30 <elliott> "Dim originally (in BASIC) stood for Dimension, as it was used to define the dimensions of an array.
18:10:30 <elliott> (The original implementation of BASIC was Dartmouth BASIC, which descended from FORTRAN, where DIMENSION is spelled out.)
18:10:30 <elliott> Nowadays, Dim is used to define any variable, not just arrays, so its meaning in not intuitive anymore."
18:10:34 <elliott> Its meaning in not intuitive anymore.
18:10:42 <Taneb> Huh
18:10:48 <Taneb> It's like the word Domino
18:10:50 <elliott> Then types got added.
18:11:01 <Taneb> But not tuples
18:11:11 <Taneb> At least not in 2005
18:14:19 <Taneb> If I were doing Befunge-98 I would define them
18:15:26 <pikhq_> Gregor: 1.0 -> 2.0 -> 3.0 -> 3.1 -> 95 -> 98 -> 98 SE -> 2000 -> XP -> Vista -> 7
18:15:39 <Gregor> No 3.11 Windows for Workgroups???
18:15:45 <Gregor> No ME?
18:15:53 <Taneb> Nor NT?
18:16:03 <Gregor> Welll, NT was never a "consumer" OS.
18:16:06 <Gregor> Neither was 2000, really.
18:16:27 <pikhq_> There was a fork in upgrade paths: he could've done 98 SE -> ME -> XP or 98 SE -> 2000 -> XP.
18:16:30 <Gregor> Maybe he chose 98SE -> 2000 since that's the worst possible 9x->NT switchover :P
18:16:58 <elliott> Gregor: Me NEVER HAPPENED.
18:17:01 <Taneb> One day I may try to get my old 98 (dunno if SE or not) up working again
18:17:01 <pikhq_> 2000 was the most consumer of the NT line.
18:17:18 <pikhq_> Oh, yeah. He did this from physical media that he actually owned.
18:17:20 <Taneb> It works fine, but I can't use a mouse and it has no internet
18:17:43 <elliott> Does anyone know a valid IP address that does NOT have any host there?
18:18:02 <pikhq_> Define "valid".
18:18:19 <elliott> Valid.
18:18:27 <pikhq_> 240.0.0.1
18:18:57 <elliott> 'Sat reserved or something?
18:19:10 <pikhq_> Yeah, it's the first address in class E.
18:20:25 <elliott> Deewiant: In SOCK's I, one interprets the unsigned address as if it were signed, yes?
18:20:52 <pikhq_> Would've been pretty awesome if he used Win 3.2.
18:21:49 <pikhq_> Though. It may not have supported an upgrade: it *was* the first release in Mandarin with Simplified Chinese.
18:23:31 <pikhq_> Also a shame he didn't install Win32s.
18:28:12 <ais523> elliott: 192.168.whatever numbers aren't on your network
18:28:44 <ais523> 240/8 is only dubiously valid, most routers refuse to believe it exists (which is why the rules haven't been changed to make it allocatable)
18:29:11 <ais523> elliott: also, arguably, 1.2.3.4; there was a host there for a while, but it was taken down again after it was DDOSed to oblivion
18:29:12 <elliott> Well, routing is irrelevant
18:29:20 <elliott> I'm just converting string addresses to integers
18:31:19 <elliott> Shiro/Fingerprints/SOCK.hs:13:9:
18:31:20 <elliott> Ambiguous occurrence `accept'
18:31:20 <elliott> It could refer to either `Shiro.Fingerprints.SOCK.accept',
18:31:21 <elliott> defined at Shiro/Fingerprints/SOCK.hs:34:1
18:31:23 <elliott> or `Network.Socket.accept',
18:31:25 <elliott> imported from Network.Socket at Shiro/Fingerprints/SOCK.hs:7:1-21
18:31:27 <elliott> This could be problematic
18:33:05 <fizzie> I *just* (like, last week) saw a hotel use 1.1.1.1 for the login-to-our-network autoredirect thingamajikc.
18:33:17 <Taneb> Same, actually
18:34:28 <fizzie> 192.0.2.0/24 is sometimes-working "sort-of valid but doesn't have any hosts" network. ("Assigned as "TEST-NET" for use solely in documentation and example source code and should not be used publicly.")
18:35:42 <fizzie> (There are two other TEST-NETs too.)
18:38:20 <ais523> elliott: just qualify it?
18:39:19 <elliott> ais523: You should never have clashing names ever.
18:39:25 <elliott> It should be an error, really.
18:39:33 <elliott> fizzie: Oi, SCKE specs, where eb they.
18:39:36 <elliott> be
18:39:50 <fizzie> elliott: It doesn't really have any, I don't think. "Sowwy."
18:40:00 <elliott> fizzie: Does it have... a list of instructions?
18:40:02 <elliott> Anything?
18:40:53 <fizzie> Well, H and P. I don't really know how anyone even found out about SCKE.
18:41:00 <fizzie> Maybe I wrote something.
18:41:13 <elliott> fizzie: What does H does, what does P do
18:41:19 <fizzie> http://packages.python.org/PyFunge/fingerprint/SCKE.html <- good enough.
18:41:51 <elliott> s/does/do/
18:41:54 <elliott> Except only the second one
18:42:12 <elliott> fizzie: Doesn't P require me to keep my own buffer...
18:42:48 <fizzie> Well, I don't know. It's basically a poll()/select() for input.
18:43:11 <fizzie> http://p.zem.fi/54wi <-- here seems to be how I "documented" them.
18:43:18 <fizzie> (Awaysh-woosh.)
18:43:19 <elliott> Except select() and poll() block.
18:43:49 <fizzie> Not with a zero timeout.
18:43:54 <elliott> Oh.
18:43:57 <elliott> That could work.
18:44:06 <elliott> Now to find out how to get GHC to do that.
18:44:58 <itidus20> Salivili hippit tupput tappyt appyt tipput hilijalleen.
18:45:06 <fizzie> SCKE support - the most pointless thing ever? (I don't think anyone uses it, not even fungot's "configuration header".)
18:45:07 <fungot> fizzie: mr president, the austrian national library. we have a lot to say about the mass unemployed, the mass media, so that they are the only feasible way of helping the peace process.
18:46:33 <Gregor> ^modes
18:46:39 <fizzie> ^style
18:46:39 <Gregor> What is that fungot command ...
18:46:39 <fungot> Available: agora alice c64 ct darwin discworld europarl* ff7 fisher homestuck ic irc jargon lovecraft nethack pa sms speeches ss wp youtube
18:46:40 <fungot> Gregor: mr president, i voted for the katiforis report. then in fnord. the problem with the take-up of new technology and its link to growth and employment. those in sweden who find themselves without any rights and further swell the ranks of the trade unions for the european parliament on strengthening environmental integration within community energy policy.
18:46:42 <Gregor> Ah, style.
18:46:42 <elliott> fizzie: Um, fungot uses SCKE, no
18:46:43 <fungot> elliott: mr president, it is there and what took place between the executives on the one hand, the interests of economists converge with those of their own. as everyone knows, this is making it possible to bring the date of their approval and decided that account must be taken into account.
18:46:43 <elliott> ?
18:46:50 <fizzie> elliott: No, it just loads it. :p
18:46:57 <elliott> fizzie: I...
18:47:00 <Gregor> ^style wp
18:47:01 <fungot> Selected style: wp (1/256th of all Wikipedia "Talk:" namespace pages)
18:47:13 <Gregor> fungot: Tell me about neutral viewpoints.
18:47:14 <fungot> Gregor: " on the internet. i've listened to the radio interview and added some additional links. i can check if one of her parents was a fnord catholic fnord who, according to the fnord
18:47:18 <elliott> fizzie: I like how it requires you to use an IP while loading and not using a fingerprint that lets you use domains too.
18:47:47 <Gregor> "i can check if one of her parents was a fnord catholic fnord who, according to the fnord" [citation needed]
18:47:59 <fizzie> elliott: See, it didn't originally use SCKE at all, thus the IP requirement; then I added SCKE as a prelude for that HTTP support (for ^bf/^ul/^def) but that never happened.
18:48:04 <fizzie> (Okay, now really away.)
18:49:00 <Gregor> Are any of the Fungies Unicode-safe?
18:49:22 <elliott> Gregor: Define Unicode-safe
18:49:30 <elliott> A Funge program is raw binary data
18:49:34 <elliott> So is Fungespace
18:49:45 <elliott> What do you want, a file/console reader that decodes from an encoding?
18:50:04 <elliott> That would be doable, as a fingerprint, but I don't know of any.
18:50:09 <Gregor> No, I wanted code written in Unicode, so that it wouldn't hop left and right improperly if I happened to start my line with a goat.
18:50:31 <Gregor> I mean, I don't actually /want/ that, I was just curious if any existed.
18:51:21 <elliott> I think Vorpal's efunge or whatever might do that, but only he thinks the standard can be read in a torturous enough way to make that allowable.
18:51:26 <elliott> Gregor: If you store it in UTF-thirty-two, everything will work fine.
18:51:29 <elliott> Or, wait, no, it won't.
18:51:40 <elliott> But you /could/ provide an alternate fungespace loading that took it like that or any encoding.
18:51:43 <Gregor> Only if \x00 is no-op :P
18:51:46 <elliott> But it wouldn't be the standard's defined entry-point.
18:51:55 <elliott> Gregor: Invalid instructions reflect.
18:52:03 <elliott> There are no non-printable-ASCII instructions by default.
18:52:06 <elliott> Apart from space.
18:52:13 <Gregor> Right. Womp womp.
18:52:21 <elliott> <dcoutts> elliott: and why do you want to check if there's data without retrieving any?
18:52:26 <elliott> STOP TELLING ME IT'S A BAD IDEA OMG BLAME FIZZIE
18:58:20 <fizzie> Yeah, the P wasn't really that well thought of a thing.
18:59:46 <olsner> I've finally started on my write-assembly-in-haskell project, have gotten about as far as "instance MonadFix"
19:01:12 <elliott> olsner: Making it so that the type system catches e.g. mov in the wrong order?
19:01:17 <elliott> (Like "mov 0 eax" rather than "mov eax 0".)
19:01:43 <olsner> btw, all my trouble with my OS not working earlier were either due to nasm miscompiling it, or to some build script malfunction
19:01:55 <elliott> nasm /miscompiling/?
19:02:17 <elliott> fizzie: Ouch, SCKE will be hard.
19:02:34 <elliott> fizzie: Not only do I have to bind to select() with the FFI, but I need to read SOCK's state somehow...
19:02:53 <fizzie> elliott: Really, maybe you should just opt for proper NSCK support.
19:03:03 <elliott> Is NSCK even a thing?
19:03:11 <fizzie> Probably not.
19:03:23 <elliott> That's not an answer.
19:04:30 <fizzie> I did promise I'd upgrade fungot to use it if it made sense, but I don't think it really got finalized. Certainly not implemented anywhere.
19:04:31 <fungot> fizzie: duke university fnord bln fnord fnord fnord fnord supuser fnord 16:34, 9 may 2005 ( utc)
19:04:41 <elliott> Oh, is it another Vorpal non-fingerprint?
19:04:59 <elliott> Hmm, how the heck to name these functions to avoid clashes.
19:05:39 <olsner> I had the same code on both computers, but it compiled into something that worked and something that didn't ... but 'make' said it was up-to-date on both of them... so, obviously nasm miscompiled it on one of my computers :)
19:07:10 <olsner> nah, probably I switched branches and got the sources updated to an older timestamp, which made the binary newer, or something along those lines
19:07:31 <elliott> olsner: So are you porting your OS to Haskembly?
19:07:42 <olsner> not yet, haskembly is only half done
19:07:56 <elliott> olsner: When it is done.
19:08:06 <olsner> elliott: When it is done.
19:08:26 <elliott> cool, maybe I'll resurrect my far-superior project that did the same thing that I abandoned a while back
19:08:33 <elliott> and copy your entire OS and become Windows and rule the world
19:08:34 <olsner> do it
19:08:47 <elliott> olsner: but seriously, you are catching "mov 0 eax" right? otherwise lolling at you
19:09:59 <olsner> yes, mov (spelled $=) currently only accepts registers as targets
19:10:16 <olsner> and I don't think I'll add support for assigning to constants anytime soon :P
19:11:41 <elliott> mov :: (Read src, Write dst) => src -> dst -> ASM ()
19:11:42 <elliott> :p
19:11:53 <olsner> more or less, yes
19:12:22 <elliott> (!) :: RWAddr -> Int -> RWAddr... though I guess you want the more fancy addressing modes somehow too
19:14:23 <olsner> the actual type right now is ($=) :: Expr e => Reg -> e -> Asm ()
19:14:26 <fizzie> Something I've occasionally wondered: how does NASM decide whether to encode "mov eax, ebx" using the "mov reg32, reg/mem32" or the "mov reg/mem32, reg32" form of the instruction, and whether there's some way you can influence that.
19:14:40 <elliott> fizzie: -O influences that IIRC
19:14:44 <elliott> It just picks the shortest, I believe
19:14:52 <fizzie> But those are equally long.
19:14:55 <elliott> olsner: Gross + wrong :P
19:14:58 <elliott> fizzie: Flip a coin
19:15:53 <olsner> elliott: ok, how so?
19:16:24 <elliott> olsner: Dunno :P
19:16:26 <olsner> only because Read is called Expr?
19:16:32 <elliott> Definitely
19:16:35 <elliott> And ASM is called Asm
19:16:42 <olsner> yes, that is silly
19:16:50 <Gregor> What was that OMGMAGIC C compiler that was recently released (or announced as going-to-be-released) as F/OSS? SomethingPath ...
19:18:11 <fizzie> EKOPath?
19:18:20 <Gregor> That's the one!
19:18:21 <Gregor> Thanks
19:20:00 <elliott> fizzie: You're the SOCK expert; what the fuck is the pf argument to S
19:20:06 <elliott> Can I just ignore it or do I have to store it for later connects or whatever
19:20:22 <olsner> pf? protocol family? or something?
19:20:51 <elliott> yeah but
19:20:54 <elliott> they have values starting with PF_....
19:20:59 <elliott> i only know families starting with AF_.........
19:21:13 <fizzie> It's pretty much the same thing.
19:21:23 <fizzie> It's what my socket man page calls "domain".
19:21:51 <elliott> so I just use AF_ instead of PF_ ok........
19:22:30 <elliott> Then why does it also take
19:22:30 <elliott> pro:1=tcp
19:22:30 <elliott> 2=udp
19:22:36 <elliott> Oh, hmm
19:23:06 <elliott> Yeah, how come it takes both DGRAM/STREAM and tcp/udp
19:23:10 <elliott> I thought DGRAM/STREAM _was_ tcp vs udp
19:23:51 <fizzie> Not necessarily; the type and protocol are independent.
19:24:11 -!- augur has quit (Remote host closed the connection).
19:24:24 <fizzie> Of course SOCK only does tcp/udp, soo...
19:24:26 <olsner> iirc since inet only has one of each, you don't have to specify the third value to socket() and can just use 0, but other domains have more variants
19:24:41 <elliott> fizzie: So I should just barf out if the protocol doesn't match the socket type and otherwise ignore it?
19:24:55 <olsner> (I'll just assume this SOCK thing works *exactly* like socket())
19:25:36 <fizzie> elliott: Well, you could also pass the corresponding IPPROTO constants to the socket call, just to make sure.
19:26:07 <elliott> socket :: Family -> SocketType -> ProtocolNumber -> IO SocketSource
19:26:07 <elliott> Create a new socket using the given address family, socket type and protocol number. The address family is usually AF_INET, AF_INET6, or AF_UNIX. The socket type is usually Stream or Datagram. The protocol number is usually defaultProtocol.
19:26:19 <elliott> The only defined ProtocolNumber is defaultProtocol, it's literally just a CInt.
19:26:28 <fizzie> Well, defaultProtocol is probably just fine too.
19:26:32 -!- tiffany|away has changed nick to tiffany.
19:26:37 <fizzie> If they don't define the constants.
19:26:40 -!- impomatic has joined.
19:26:44 <impomatic> Hi :-)
19:26:46 <impomatic> Has anyone got a magnetic core memory board I could borrow?
19:27:15 <elliott> <bos> elliott: what is it you're actually trying to do?
19:27:27 <elliott> fizzie: God, can you join #haskell and apologise and tell them to direct all such questions to you?
19:27:36 <olsner> <elliott> bos: code haskell lol
19:29:03 <fizzie> I don't think I want to join a channel as scary as #haskell; plus typing on this phone is sorta too slow.
19:29:17 <elliott> olsner: So will your DSL let me say "eax $= (ebx*eax)/ecx" and have it expand out? :p
19:29:41 <olsner> elliott: I hope it will
19:29:43 -!- augur has joined.
19:30:18 <elliott> olsner: So will it provide register-allocated variables that spill over to the stack? :-P
19:30:21 <elliott> "x <- var"
19:30:33 <elliott> <bos> i see. i wonder why such an API.
19:30:33 <elliott> <elliott> bos: It's old and not very well thought-out; the designer admits as much :)
19:30:36 <elliott> <bos> elliott: so why implement it?
19:30:38 <elliott> fizzie: Help, I can't answer.
19:30:43 <elliott> <sbrg> bos: the world runs on legacy systems
19:30:45 <olsner> oh, that expression example was a bit more complicated than I bothered reading
19:30:45 <elliott> Thanks sbrg
19:31:18 <elliott> <bos> sbrg: but why would someone want to implement a legacy API in haskell?
19:31:20 <olsner> I don't think it will do anything that requires temporaries actually
19:31:20 <elliott> noooooooooo
19:31:36 <elliott> olsner: What if you told that arithmetic operation which variable to clobber :P
19:32:35 -!- zzo38 has joined.
19:32:44 <fizzie> elliott: Just tell them it's for this COBOL system at a bank, and the legacy API is needed for the older parts to talk to the new code. (On second thought, don't.)
19:32:49 <zzo38> I think I figured out how to make up type level natural numbers by type families.
19:33:19 <zzo38> data TypeZero; data TypeSucc t;
19:33:26 <elliott> that's not a type family
19:33:33 <olsner> elliott: sure, you could just build a haskell function that takes some number of registers it needs ... but I imagine it to be a bit hard to build that into any random expression?
19:33:52 <zzo38> data family X n :: *; data instance X TypeZero = Z Int; data instance X (TypeSucc n) = S (X n) (X n);
19:34:04 <zzo38> type family TypePred t :: *; type instance TypePred (TypeSucc t) = t;
19:34:15 <olsner> but simpler things like eax $= 5*ebx could be rewritten into something with lea
19:34:16 <elliott> olsner: I meant like (mul a b OhAndYouCanClobberEdx) X-D
19:34:28 <zzo38> See? It is a type family.
19:36:02 <elliott> zzo38: Well, yes...
19:36:16 <zzo38> And it appears to work; GHCi will know the type of something like S (S (Z 1) (Z 2)) (S (Z 3) (Z 4))
19:37:38 <elliott> <elliott> bos: No. Like I said, the function is wrapped around so that the program being run can use it; my program implements an interface that the program being run utilises.
19:37:38 <elliott> <bos> okay, i'll stop asking about it, since i can't follow your answers.
19:37:40 <elliott> fizzie: Success
19:37:48 -!- zzo38 has quit (Remote host closed the connection).
19:38:30 -!- Braber01 has joined.
19:39:28 <olsner> I like how your socket question sidetracked as far as to mentioning COBOL
19:39:32 <Braber01> quick queston what are the f**kf**k equilvents of BrainF**k?
19:40:20 <elliott> Dunno those languages, do you mean what the brainfuck instructions are in fuckfuck?
19:40:31 <elliott> http://esoteric.voxelperfect.net/wiki/Fuckfuck has the details.
19:41:53 <fizzie> Anyway, re the earlier protocol thing, I think it might be borderline legal for socket(AF_INET, SOCK_STREAM, 0) to give you a SCTP socket or something; you already create stream SCTP sockets with socket(AF_INET, SOCK_STREAM, IPPROTO_SCTP).
19:42:22 <elliott> Hmm
19:42:34 <elliott> Are the values for the IPPROTOs portable?
19:42:48 <fizzie> Of course not. :p
19:43:13 <fizzie> I would expect the "default" stream socket be TCP everywhere though.
19:43:54 -!- Braber01 has quit (Ping timeout: 252 seconds).
19:44:00 <fizzie> They're also somewhat portable in practice, but not guaranteedly.
19:44:25 <fizzie> I think I've seen a naked 6 (or whatever it was) to stand for TCP in some code.
19:44:31 <elliott> fizzie: It's OK if SCKE's can-read instruction says a closed socket can read, right?
19:45:57 <fizzie> Probably, since the "spec" (if you can call it that) doesn't really say anything about corner cases.
19:47:53 -!- KingOfKarlsruhe has joined.
19:48:00 <fizzie> getprotoent("tcp")->p_proto is a bit more portable than expecting the IPPROTO_TCP constant to be defined, but I don't think Network.Socket exports getprotoent.
19:49:50 <elliott> I suppose I could get that with the FFI.
19:52:18 <elliott> fizzie: It sure would be convenient if S took the protocol number directly.
19:53:42 -!- NihilistDandy has joined.
19:56:36 <fizzie> elliott: Perhaps, but since those are not so portable... (It could use the same scheme of "protocol number or 0" though.)
19:56:56 <elliott> fizzie: Well, I don't care how hard it is for the Funge coders, just for the implementors. There's more of the latter, after all.
19:57:11 <elliott> A hugely oversaturated market.
19:58:17 <fizzie> There's the whole "the address is on top of the address family on stack" mishap that makes the technically-supported AF_UNIX rather impossible too.
19:58:58 <elliott> fizzie: Oh, god.
19:59:07 <elliott> How does rcfunge do it? :P
19:59:37 <fizzie> I don't think it does; it just assumes all addresses are single-cell values.
20:00:34 <fizzie> Not sure what it does to the value in the AF_UNIX case though.
20:00:38 -!- impomatic has left.
20:01:04 <elliott> Such a meeeeeeeeess
20:01:50 <elliott> Holy wow, rcfunge's fingerprint mechanism is
20:01:52 <elliott> Interesting
20:02:03 -!- NihilistDandy has quit (Ping timeout: 246 seconds).
20:02:53 <elliott> fizzie: rcfunge's sock.c includes code literally byte-identical to scke.c.
20:03:15 <elliott> It... looks like SOCK includes SCKE, but SCKE exists totalyl separately too with no code reuse???
20:03:28 <tiffany> o.o
20:06:00 <elliott> fizzie: So shungot may be working soon :P
20:06:02 <fizzie> elliott: Also it packs the address into a sockaddr_in always, and then just sets the .sin_family field to AF_UNIX if requested. That doesn't really... work.
20:06:08 <elliott> Nice.
20:07:40 <elliott> olsner: hmm, I think you want some sort of symbolic expression framework even if you don't offer that fancy stuff
20:07:44 <elliott> like
20:08:01 <elliott> readByte :: (Read a) => a -> ASM Word8
20:08:09 <elliott> you want to be able to implement such a function
20:08:16 -!- oerjan has joined.
20:08:27 <elliott> so (ASM a) should actually look something like (Writer [AsmStmt] (Symbolic a))
20:08:44 <elliott> where Symbolic is an expression language over registers, integers, arithmetic, etc.
20:08:56 <elliott> and it then gets flattened out to statements
20:09:48 <elliott> olsner: I guess it could be done simpler but I'm not sure how, but if you can't write "Reg -> Asm Word8" then your monad is really semantically shallow
20:11:55 <oerjan> <elliott> derdon: Well, the spec is ambiguous; you have two options: wait until DMM responds, or make up your own interpretation and assure everyone it's standard :)
20:12:14 <oerjan> DMM is big on people making up their own interpretations. see: every iwc poll ever
20:12:35 <oerjan> (ok, _nearly_ ever)
20:12:57 <elliott> olsner: And indeed, "mov" then becomes a lot simpler.
20:13:17 <oerjan> sadly, he is not big on having plenty of time.
20:13:21 <elliott> olsner: class Read a where peek :: (Bits r) => a -> r (caller chooses size of read by instantiating r)
20:13:49 <elliott> erm
20:13:52 <elliott> olsner: class Read a where peek :: (Bits r) => a -> Asm r (caller chooses size of read by instantiating r)
20:13:55 <elliott> olsner: class (Bits b) => Write a b | a -> b where poke :: a -> b -> Asm ()
20:13:56 <elliott> Then
20:14:04 <elliott> mov dst src = peek src >>= poke dst
20:14:04 <oerjan> that's not ... very consistent with the usual definition of Read
20:14:10 <elliott> oerjan: It's a different Read
20:14:25 <elliott> olsner: I think you can actually do this without any sort of symbolic expression work creeping in, compiling down to exactly what you'd expect
20:14:33 <elliott> In fact, I think the symbolic thing may simply be a fragment of an ASM statement
20:16:28 <Taneb> I can think of three brainfuck derivatives that I believe are not bad
20:16:39 <elliott> olsner: Actually that's really cool, because you can implement macros properly
20:16:50 <Taneb> Boolfuck and Bub because they were useful in proving languages Turing-Complete
20:16:51 <elliott> Instead of needing "weird cpp style macros" and "statement macros"
20:16:59 <Taneb> and Ook! because it was original
20:21:40 <elliott> :t tell
20:21:41 <lambdabot> forall w (m :: * -> *). (MonadWriter w m) => w -> m ()
20:22:41 -!- kwertii has joined.
20:23:14 <oerjan> `addquote <fungot> elliott: mr president, commissioner, i fully accept that description when it comes to human rights. yes, with an average fat content of chocolate, and we are using double standards! we all know that under present legislation and also in relation to standardization bodies. if i do not want.
20:23:14 <fungot> oerjan: i have a proposal for moving israeli settlements so the name may redirect to this page... i agree with fnord. even using the lushootseed name as equivalent to the standard norm
20:23:19 <HackEgo> 640) <fungot> elliott: mr president, commissioner, i fully accept that description when it comes to human rights. yes, with an average fat content of chocolate, and we are using double standards! we all know that under present legislation and also in relation to standardization bodies. if i do not want.
20:23:23 <elliott> heh
20:24:05 <oerjan> and it responds with another tempting one.
20:31:13 -!- NihilistDandy has joined.
20:32:17 -!- boily has quit (Ping timeout: 245 seconds).
20:34:36 <oerjan> <Gregor> "i can check if one of her parents was a fnord catholic fnord who, according to the fnord" [citation needed]
20:34:55 <oerjan> i think that would be a very plausible use of fnord in the original sense
20:35:34 <Taneb> Goodnight
20:35:40 -!- Taneb has quit (Quit: THIRSTY).
20:37:13 -!- augur has quit (Remote host closed the connection).
20:40:36 <elliott> olsner: My scribblings: http://sprunge.us/ZGhh
20:41:51 <elliott> olsner: Actually, Expr shouldn't be a data family. It can just be a GADT.
20:42:07 <oerjan> <elliott> <bos> sbrg: but why would someone want to implement a legacy API in haskell? <-- i assume this _is_ a befunge fingerprint we are talking about, any particular reason for not admitting so? :P
20:42:26 <oerjan> *funge-98
20:42:27 <elliott> oerjan: THEY'D JUDGE ME
20:42:37 <elliott> oerjan: And I'd NEVER get a function into the network package because "befunge needs it" :P
20:42:45 <oerjan> elliott: YOU MEAN WE'D GET ANOTHER INVASION
20:42:52 <elliott> THAT TOO
20:43:04 -!- augur has joined.
20:43:05 <oerjan> oh i can see that might be a problem
20:44:10 <oerjan> i _do_ have this feeling #esoteric has become even more haskellish than usual recently
20:45:05 <elliott> define haskellish
20:45:11 <oerjan> fortunately there is zzo38 to take horrible revenge.
20:45:54 <oerjan> elliott: as in, we may be discussing haskell more often than esolangs
20:46:03 <elliott> well that's usual
20:46:14 -!- augur has quit (Remote host closed the connection).
20:46:17 <oerjan> ok, but even more than usual
20:51:46 -!- augur has joined.
20:52:20 <oerjan> !help
20:52:21 <EgoBot> ​help: General commands: !help, !info, !bf_txtgen. See also !help languages, !help userinterps. You can get help on some commands by typing !help <command>.
20:53:08 <oerjan> !bf_txtgen http://esolangs.org/wiki/
20:53:26 -!- Patashu has joined.
20:53:48 <oerjan> !echo Are you there?
20:53:48 <EgoBot> Are you there?
20:54:26 <oerjan> !bf_txtgen http://esolangs.org/wiki/
20:54:44 <EgoBot> ​Top %: 0.1
20:55:00 <oerjan> that's ... not encouraging.
20:55:28 <oerjan> Gregor: is it just horribly overworked?
20:55:49 <Gregor> Uhh, not sure what happened there :P
20:55:55 <oerjan> !bf_txtgen hello
20:55:57 <Gregor> !bf_txtgen Hewwo?
20:55:58 <EgoBot> ​57 +++++++++++++[>++++++++>+>><<<<-]>.---.+++++++..+++.>---. [197]
20:56:00 <EgoBot> ​89 ++++++++++[>+>+++++++>++++++++++><<<<-]>>++.>+.++++++++++++++++++..--------.<---------.<. [628]
20:56:13 <oerjan> heh
20:56:19 <Gregor> What that SHOULD have done is downloaded the page from http://esolangs.org/wiki/ (which may or may not actually work) and generated the text of it.
20:56:23 <Gregor> !bf_txtgen http://www.google.com/
20:56:26 <EgoBot> ​Top %: 0.1
20:56:32 <Gregor> Apparently that doesn't work :P
20:56:33 <oerjan> oh duh :P
20:56:40 <oerjan> ic
20:57:02 <oerjan> !bf_txtgen htsp://esolangs.org/wiki/
20:57:06 <EgoBot> ​207 +++++++++++++[>++++++++>+++++++++>+++++++++>++++<<<<-]>.>-.>--.---.>++++++.-----------..<<<---.>-.>-.---.<<----.>>++.<<++++++.>.>>-.<+.<-.<.>>>+.<<+++++.>------.++.--.>.-------------------------------------. [494]
20:58:09 <oerjan> ^def wiki +++++++++++++[>++++++++>+++++++++>+++++++++>++++<<<<-]>.>-.>-.----.>++++++.-----------..<<<---.>-.>-.---.<<----.>>++.<<++++++.>.>>-.<+.<-.<.>>>+.<<+++++.>------.++.--.>.-------------------------------------.,[.,]
20:58:09 <fungot> Usage: ^def <command> <lang> <code>
20:58:15 <oerjan> ^def wiki bf +++++++++++++[>++++++++>+++++++++>+++++++++>++++<<<<-]>.>-.>-.----.>++++++.-----------..<<<---.>-.>-.---.<<----.>>++.<<++++++.>.>>-.<+.<-.<.>>>+.<<+++++.>------.++.--.>.-------------------------------------.,[.,]
20:58:15 <fungot> Defined.
20:58:23 <oerjan> ^wiki Brainfuck
20:58:23 <fungot> http://esolangs.org/wiki/.Brainfuck
20:58:27 <oerjan> oops
20:58:38 <oerjan> ^def wiki bf +++++++++++++[>++++++++>+++++++++>+++++++++>++++<<<<-]>.>-.>-.----.>++++++.-----------..<<<---.>-.>-.---.<<----.>>++.<<++++++.>.>>-.<+.<-.<.>>>+.<<+++++.>------.++.--.>.,[.,]
20:58:38 <fungot> Defined.
20:58:42 <oerjan> ^wiki Brainfuck
20:58:42 <fungot> http://esolangs.org/wiki/Brainfuck
20:59:41 <oerjan> .>-. as the way of printing two t's is not immensely encouraging :P
21:00:17 <pikhq_> Well it *is* an evolutionary algorithm.
21:07:00 <Patashu> So it's an optimizing text gen? Interesting
21:08:33 <oerjan> except with EgoBot the optimization tends to get cut short
21:09:58 <CakeProphet> ^wiki ///
21:09:58 <fungot> http://esolangs.org/wiki////
21:10:00 <KingOfKarlsruhe> is esolangs.org down?
21:11:38 <KingOfKarlsruhe> "You are seeing this message due to the site you are trying to view having its DNS hosted by EveryDNS."
21:11:53 <KingOfKarlsruhe> EveryDNS services will be fully discontinued as of September 9th, 2011.
21:11:55 -!- augur has quit (Remote host closed the connection).
21:12:22 <Patashu> D:
21:12:29 <elliott> esoteric.voxelperfect.net
21:12:55 <ais523> the EVN address is fine
21:13:04 <ais523> so presumably it's a DNS issue, especially given the content of the page
21:13:20 <Patashu> rly
21:13:35 <pikhq_> That's a very dickish way of handling it.
21:13:36 <elliott> I guess I'll email the owner of the domain
21:13:52 <CakeProphet> elliott: pen a strongly-worded note.
21:13:54 <pikhq_> "Lawl we're going to MITM you"
21:14:30 <elliott> Sent an email
21:15:12 -!- tiffany has quit (Ping timeout: 252 seconds).
21:16:05 <oerjan> wat
21:16:14 <elliott> oerjan: ?
21:16:32 <oerjan> elliott: bad timing on my fungot definition :(
21:16:32 <fungot> oerjan: i'm not sure. fnord 18:22, 24 july 2005 ( utc)
21:16:51 <elliott> oerjan: ?
21:16:57 <elliott> Oh
21:16:59 <elliott> <CakeProphet> ^wiki ///
21:17:03 <elliott> http://esoteric.voxelperfect.net/wiki/Slashes
21:17:08 <elliott> oerjan: What was the wat though
21:17:09 -!- augur has joined.
21:17:15 <oerjan> elliott: that was the wat
21:17:26 <elliott> oh
21:18:37 <Gregor> If I put leaq -15(%rip), %rax in my assembly file, GCC (GAS) correctly puts the address 15 bytes before the current IP into %rax. EKOPath, because it's just better, puts leaq 0(%rip), %rax into the .o file, then at link time, finds the appropriate value x such that leaq x(%rip), %rax loads the VALUE -15 into %rax. Making leaq x(%rip), %rax be a fancy way of writing mov $x, %rax for EKOPath.
21:19:07 <oerjan> elliott: that doesn't look good - it means whoever owns the domain isn't answering mail...
21:19:13 <elliott> Gregor: rewrite it some other way? :P
21:19:15 <elliott> oerjan: um does it?
21:19:30 <elliott> oh hm
21:19:33 <Gregor> elliott: I could, but then it would be slower on compilers that aren't retarded ... plus who knows, maybe EKO will still crap all over the new way.
21:19:33 <elliott> probably spamfiltered
21:19:34 <elliott> ?
21:19:35 <elliott> I guess?
21:19:37 <oerjan> elliott: that page says they have sent _several_ notifications before doing this outage stuff
21:19:50 <elliott> well they could have just not got around to it yet.
21:19:57 <elliott> "Migrating will only cost a $4.95 migration fee which helps us cover the cost of this new infrastructure, upgraded in preparation for this migration (you will be able to apply this fee to any future purchase made in the next 6 months on DynDNS.com as well)."
21:19:59 <elliott> haha, what assholes
21:20:06 <elliott> PAY OR LOSE YOUR SERVICE
21:21:08 <Patashu> isn't 5 dollars cheaper than getting a new dns?
21:21:29 <Gregor> There are several free DNS services.
21:23:03 <oerjan> !bf_txtgen htsp://esoteric.voxelperfect.net/wiki/
21:23:06 <EgoBot> ​293 +++++++++++++[>+++++++++>+++++++++>++++++++>++++<<<<-]>>>.<<-.-.---.>>>++++++.-----------..<---.<--.<-.>+.>.<--.<------.>>--.>-.<<++++.>++++++++++++.<++.<----.>------------.>+.<-------.>++.<+.-.<--.>>++.>.<<+++++++++.<++.>>.>+.<+++.--------------.++.--.>.-------------------------------------. [567]
21:23:13 -!- tiffany has joined.
21:23:47 <oerjan> ^def wiki bf +++++++++++++[>+++++++++>+++++++++>++++++++>++++<<<<-]>>>.<<-..----.>>>++++++.-----------..<---.<--.<-.>+.>.<--.<------.>>--.>-.<<++++.>++++++++++++.<++.<----.>------------.>+.<-------.>++.<+.-.<--.>>++.>.<<+++++++++.<++.>>.>+.<+++.--------------.++.--.>.,[.,]
21:23:47 <fungot> Defined.
21:23:47 <ais523> Gregor: are they any /good/?
21:23:56 <oerjan> ^wiki Slashes
21:23:56 <fungot> http://esoteric.voxelperfect.net/wiki/Slashes
21:24:27 -!- azaq23 has quit (Quit: Leaving.).
21:24:56 -!- derdon has quit (Remote host closed the connection).
21:25:02 <Gregor> ais523: I've used the one at afraid.org, and never had any problems with it. I used Granite Canyon a long time ago, and it was fine, but I don't know if it still is.
21:28:01 <oerjan> ais523: changing to esoteric.voxelperfect.net, i see our wiki has some spams on it
21:28:25 <ais523> oh right, I should use EVN's RSS feed
21:30:04 <ais523> thanks, I've found them now, deleting...
21:30:47 <ais523> 'twould be great if I could delete spam in one click from my RSS feed reader
21:30:50 <olsner> elliott: I was gone for a while, but you seem to have been busy
21:31:14 <elliott> olsner: indeed, i said IMPORTANT THINGS
21:31:41 <elliott> Gregor: Granite Canyon?
21:32:18 <Gregor> elliott: Upon a quick googlin', looks like they're dead :P
21:32:30 <elliott> Gregor: RIP
21:32:44 <olsner> I think destinations should decide their size automatically... also, registers have a size which you can't change - can't for example move a byte into eax without using the explicit sign/zero expand opcode
21:33:08 <elliott> olsner: I said more important things than that :P
21:33:18 <elliott> Basically I suspect your current monad can't implement
21:33:30 <elliott> readByte :: Reg -> Asm Word8
21:33:38 <elliott> which restricts it a lot and makes the monad much less semantically useful
21:33:40 <olsner> I read some stuff about symbolic something and then a link to a paste
21:33:43 <elliott> Then I figured out how to do that and implement it
21:33:59 <olsner> what is readByte supposed to do?
21:34:08 <elliott> olsner: Read the byte, at runtime
21:34:17 <olsner> the byte? which byte?
21:34:20 <elliott> olsner: The byte in the register
21:34:31 <elliott> (Assume registers are byte-sized)
21:34:46 -!- monqy has joined.
21:35:09 <elliott> It has to be -> Asm Byte because you obviously can't implement (readByte >>= f) since the code doesn't "exist" at runtime, but you can do -> Asm Byte which implements all the same things
21:35:10 <elliott> As shown in my paste
21:35:15 <olsner> you mean like do { x <- readByte eax; do-stuff-with-x } , where x is magically the value the register had?
21:35:18 <elliott> You don't really have to do any semantic work at all, it maps directly to your asm structure
21:35:25 <elliott> olsner: Yes, but it's not magical :)
21:35:37 <elliott> Then if you have writeByte, a mov reduces to just that
21:35:45 <elliott> It means you can do a lot more with macros, and your monad is actually semantically meaningful
21:35:49 <elliott> Rather than just being used for do notation
21:35:56 <elliott> So then I implemented a scrap of it
21:36:37 -!- AndGregor has joined.
21:37:04 <elliott> AndGregor: OrGregor
21:38:32 <oerjan> MedianGregor
21:39:00 <CakeProphet> man this class sure is lame.
21:44:12 <olsner> elliott: so the general idea is that peek (and other stuff) returns a value describing the source operand, and then you have type families, classes and runtime checking to see if that's possible to combine with the destination operand?
21:46:00 <oerjan> i conclude from the feature list that Uniquode includes Feather as a subset.
21:46:10 <ais523> haha
21:46:38 <oerjan> also i assume the caste system uses the indian characters.
21:47:16 <monqy> I mentioned feather in reaction tot he "retroactive self-modification" feature a few days ago and taneb said his approach to it was actually pretty simple?? I forget/dunno how it will work though
21:47:18 <elliott> olsner: there were no typeclasses necessary
21:47:22 <elliott> I amended it
21:47:30 <elliott> and no runtime checking for the destination operation at all, it's handeld in the type system
21:47:43 <olsner> elliott: hmm, where did you amend it?
21:47:46 <elliott> the runtime checking was just proving that leaving out unimpelementable things (like (==)) does not cause errors
21:47:59 <elliott> olsner: next message that pinged you
21:48:11 <oerjan> monqy: feather _is_ pretty simple. it's just incompatible with human brain function, is all.
21:48:36 <olsner> http://sprunge.us/ZGhh is what I'm reading
21:48:41 <elliott> olsner: yes
21:48:43 <elliott> then I corrected it
21:48:45 <elliott> on IRC
21:48:50 <elliott> it can just be a simple GADT
21:49:28 <olsner> right, but it still has type *classes*
21:49:38 <oerjan> a simple GADT and a prehistomorphic prepromorphism, et voila!
21:49:43 <oerjan> wait
21:49:43 <elliott> olsner: so do you?
21:49:45 <oerjan> *zygo
21:49:56 <elliott> you'll need a write typeclass too, for when you can write to memory
21:49:59 <elliott> the typeclasses are really simple
21:50:09 <elliott> you could eliminate them and still keep the basic idea
21:50:11 <olsner> I think "<elliott> olsner: there were no typeclasses necessary" was just supposed to say type families instead of classes
21:50:17 <elliott> err, right
21:50:32 <elliott> point is, Expr can be one GADT, no need for families at all
21:50:36 <olsner> that was a bit confusing, because I saw the type families/GADT comment
21:53:03 <olsner> what's to prevent you from doing something like { x <- peek eax; mov byte eax ...; mov byte ebx x; } and store the wrong x in ebx?
21:53:07 <oerjan> ah, that tunes.org glitch i saw the other day seems to have been temporary.
21:53:22 <olsner> i.e. store eax which has now changed
21:53:47 <elliott> olsner: hmm, ah, that's quite easy to fix
21:53:57 <olsner> maybe peek should just be internal to your opcodes
21:54:05 <elliott> no, no
21:54:10 <elliott> the whole point is that peek is usable by the user
21:54:10 <oerjan> (11.09.04 for some reason does not show as text)
21:54:21 <olsner> what for?
21:54:23 <elliott> because it lets you write macros and the like far more expressively
21:54:38 <elliott> you can get a Byte result out of a macro, and then put it in any register, or memory location, or anything, you desire
21:54:43 <elliott> rather than having absolutely everythign return ASM ()
21:54:48 <elliott> and passing in the destination
21:54:53 <elliott> it's much more functional
21:55:47 -!- FireFly has quit (Quit: FireFly).
21:55:52 <elliott> olsner: anyway, it's easy to fix: registers actually read a type equivalent to (Byte,Ref Bool), one reference per register, that starts out True, and any modifications to a register writes False to the Ref, and you then replace the ref (Ref (Ref Bool) :P)
21:55:58 <elliott> you just need a Ref type in ASM, so just stick ST on the bottom
21:56:03 <elliott> the ref is basically just "is this reference still valid"
21:56:36 <elliott> olsner: but no, yeah, the whole point of this is that you can express peek, and in fact, it doesn't require any more infrastructure than you'll end up writing anyway
21:57:18 <olsner> why not... mix in parameterised monads and keep track of validity in the type system?
21:57:58 <olsner> probably not, at the very least I don't think I can successfully combine that with monadfix
21:58:09 <elliott> olsner: sure, that's more elegant, I'm just saying you can do it without anything extra
21:58:14 <elliott> I don't see why you need MonadFix
21:58:17 <elliott> that'd just lead to generating infinite code
21:59:31 <elliott> but yeah, this is the difference between an assembler that's way more useful than existing ones, and a bunch of glorified print statements :P
22:01:12 <olsner> well, I use monadfix and recursive do notation to allow forward and backward jumps to labels
22:01:41 <elliott> hmm, what does that look like?
22:02:10 <elliott> do you generate all the labels, and then say "here's the label yo"
22:02:17 <elliott> or do you somehow actually do a backwards reference to the haskell identifier
22:02:28 <olsner> you write do rec { jmp l; ...; l <- label; } and l gets its future value
22:02:33 <elliott> right
22:02:42 -!- nooga has quit (Ping timeout: 245 seconds).
22:02:55 <elliott> hmm, what if you made labels local macros instead...
22:03:02 <elliott> foo = label $ do { ...; jmp foo; ... }
22:03:07 <elliott> that might be hard to do purely :P
22:05:34 <olsner> doesn't need to be pure if it's fun :P
22:06:43 <elliott> hmm, that might work
22:06:56 <elliott> (label m) puts m in its internal database of labels, returns the label identifier fo it
22:06:57 <elliott> for it
22:07:01 <elliott> yep, that would work olsner
22:07:08 <elliott> it's just the same as monadfix though basically
22:07:11 <elliott> because foo would then be of an ASM type
22:07:17 <elliott> adn you'd need to unpack it at use time
22:07:25 <elliott> like putting foo somewhere would inline it
22:07:26 <elliott> yeah
22:07:26 <elliott> w/e
22:08:08 <elliott> olsner: i realise my explanation of the peek stuff is rather subpar
22:09:37 <olsner> is foo here supposed to be a function-like thing where other code would also jmp/call foo and expect it to be included in the program?
22:10:27 <elliott> It's kind of like a macro :P
22:10:32 <elliott> But yeah, it's less useful than your recursive do stuff.
22:10:40 <olsner> anyway, time to sleep
22:18:02 -!- KingOfKarlsruhe has quit (Quit: ChatZilla 0.9.87 [Firefox 6.0.1/20110830092941]).
22:22:40 -!- nooga has joined.
22:24:13 * nooga drunk
22:25:03 <elliott> how unusual.
22:26:26 <nooga> i just wanted to read elliott's comment
22:26:46 <elliott> yep
22:28:39 <nooga> when was the last time i was here drunk?
22:29:06 * Phantom_Hoover → sleep
22:29:08 -!- Phantom_Hoover has quit (Quit: Leaving).
22:29:56 <elliott> it's hard to tell
22:30:00 <elliott> you act like you always are
22:34:41 -!- nooga has quit (Ping timeout: 264 seconds).
23:26:06 -!- ive has joined.
23:35:20 -!- sllide has quit (Read error: Connection reset by peer).
23:41:13 * CakeProphet has been drunk once on #esoteric.
23:41:15 <CakeProphet> only once.
23:41:25 <CakeProphet> all of the other stupid shit I say is while completely sober.
23:42:36 -!- copumpkin has quit (Ping timeout: 252 seconds).
23:47:08 <EgoBot> ​291977 ++++++++[>+++++>+++++++>++++++>+++++++<<<<-]>>++++.>>-----------------------.+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++.<+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++.>-.<<<++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++.>+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++.---------.-----------.---------------------------------------------------------------------.+++++++++
23:47:20 <elliott> oerjan: congrats
23:48:58 <oerjan> ...wat
23:49:20 <oerjan> ^bf ++++++++[>+++++>+++++++>++++++>+++++++<<<<-]>>++++.>>-----------------------.+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++.<+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++.>-.<<<++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++.>+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++.---------.-----------.---------------------------------------------------------------------.
23:49:20 <fungot> <!doctype
23:49:28 <oerjan> XD
23:49:42 <elliott> I'm surprised the algorithm isn't exponential or whatever
23:50:21 <oerjan> Gregor: are you _sure_ EgoBot's timeout code is working right? :D
23:51:10 <oerjan> oh wait...
23:51:19 <pikhq_> http://sprunge.us/gNUi Perhaps the stupidest way of outputting the first 25 numbers in the Fibonacci sequence.
23:52:14 <elliott> pikhq_: meh, my continuation hack was better
23:52:14 <ais523> surely there /has/ to be a stupider way than that
23:52:17 <elliott> with manual stack copying
23:52:28 <pikhq_> elliott: Mine is POSIX compliant.
23:52:28 <oerjan> maybe esolangs.org just went up for a moment, and EgoBot has been waiting for all this time :P
23:52:30 <elliott> Continuations are really ridiculously inefficient for coroutines though :P
23:52:31 <ais523> OK, that one is pretty stupid
23:52:44 <oerjan> (it seems to down again, but without that dns message)
23:52:50 <ais523> is that pthreads it's using? or some other posix threading model?
23:53:00 -!- copumpkin has joined.
23:53:10 <pikhq_> ais523: POSIX ucontext. It's actually straight-up continuations.
23:53:19 -!- Vorpal has joined.
23:53:28 <ais523> ah, continuations disguised as threads
23:53:41 <ais523> (as opposed to continuations implemented using threads, like continuation.i does)
23:53:55 <pikhq_> It's not POSIX 2008, though.
23:53:59 <pikhq_> (they removed it)
23:54:01 <elliott> I'm still not sure how you do that, since threads are provably less powerful
23:54:05 <elliott> But, lol INTERCAL
23:54:12 <ais523> elliott: spawn a thread, then lock it in an infinite loop
23:54:27 <elliott> ais523: yes, but you can't rewind a thread
23:54:29 <ais523> they're more like forks than threads
23:54:31 <elliott> a continuation has to be callable multiple times
23:54:40 <oerjan> <elliott> I'm surprised the algorithm isn't exponential or whatever <-- well it doesn't look like it was much optimized
23:54:42 <ais523> elliott: I just spawn another one
23:54:50 <ais523> e.g. when it's called once, I make a second before calling the first
23:54:52 <elliott> hmm
23:54:56 <ais523> if it's called again, I make a third before calling the second
23:54:59 <elliott> OK, yeah, that works
23:55:02 <elliott> fork() is more powerful than threads, though
23:55:14 <ais523> well, INTERCAL threads are more like fork()
23:55:20 <elliott> right
23:55:29 <ais523> only communication's via abstention status
23:55:37 <ais523> also, you can rewind a thread in INTERCAL
23:55:44 <ais523> I just didn't
23:56:16 <ais523> MAYBE DO [...] ... DO GO BACK
23:57:09 <pikhq_> elliott: Incidentally, bsnes uses continuations as threads. I'm amazed that manages to work at anything even vaguely resembling a decent speed.
23:57:51 <elliott> Doesn't it use stack copying
23:58:18 <pikhq_> I think it actually just changes the stack pointer.
2011-09-07
00:00:03 <ais523> pikhq_: do you mean threads as continuations?
00:00:16 <ais523> either is theoretically possible, but the second seems more likely
00:00:32 <pikhq_> I said what I meant.
00:00:43 <elliott> It's not really threads.
00:00:44 <elliott> It's coroutines.
00:00:46 <ais523> wow
00:00:53 <ais523> where did it get the continuation library from?
00:00:58 <elliott> Please.
00:00:59 <pikhq_> He wrote it.
00:01:01 <elliott> "Continuations as threads" is a really stupid way to say
00:01:04 <elliott> "Coroutines with stack pointer".
00:01:11 <elliott> And misleading.
00:01:22 <ais523> (also, for an emulator, continuations sound like a really good way to do savestates)
00:01:36 <ais523> in Underlambda, you can serialise continuations to stdout if you want to
00:01:44 <ais523> and later read them in and just pick up off from there
00:01:53 <pikhq_> That's pretty close to what the savestate support is, IIRC.
00:02:03 <pikhq_> Well.
00:02:06 <pikhq_> High-level wise.
00:02:15 <pikhq_> It's in C++, so low-level, it's a fuckton of painful serialisation.
00:02:30 <pikhq_> And then deserialisation.
00:03:10 <ais523> how many languages have specified that all interps must be able to do an (interp-specific) serialisation/deserialisation of any subset of the entire program state, including a continuation?
00:04:04 <elliott> Interp-specific? Lame
00:04:10 <elliott> It should be the program format
00:04:20 <ais523> that's one possible option
00:04:32 <ais523> but that would ruin a lot of possible optimizations, I think
00:04:50 <ais523> program format with an extra pair of parens is what derla uses, IIRC
00:04:51 <ais523> but I'm not sure
00:05:28 <elliott> Fuck optimisations, platonically perfect language
00:06:17 <ais523> perhaps have two serialisation options
00:06:26 <ais523> an optimised one, and a portable one
00:06:35 <ais523> or just require all interps to be able to do it either way
00:06:47 <CakeProphet> :t forkIO
00:06:48 <lambdabot> Not in scope: `forkIO'
00:06:53 <ais523> and have an option where they just reformat serializations rather than load them
00:07:19 <CakeProphet> @hoogle fix
00:07:19 <lambdabot> Data.Function fix :: (a -> a) -> a
00:07:20 <lambdabot> Control.Monad.Fix fix :: (a -> a) -> a
00:07:20 <lambdabot> module Control.Monad.Fix
00:07:31 <elliott> ais523: Surely you can encapsulate a loading of a serialisation and then serialise that program?
00:07:32 <elliott> Subprograms.
00:07:46 <CakeProphet> I don't think fix is actually in Control.Monad because I have it imported in ghci and it was not in scope.
00:08:01 <ais523> CakeProphet: it's in Control.Monad.Fix, if you look more carefully
00:08:03 <elliott> It says Control.Monad.Fix.
00:08:13 <CakeProphet> oh hey look at that it does.
00:08:20 <ais523> elliott: hmm, you could write a small program to do it
00:08:25 <CakeProphet> :m + Control.Monad.Fix
00:08:27 <CakeProphet> ...
00:08:41 <ais523> especially as deserialization never immediately runs what it deserializes
00:08:44 <CakeProphet> obviously I am not mentally exhausted right now.
00:08:44 <elliott> ais523: how, if loading a serialisation ajumps into it?
00:08:45 <elliott> ah
00:09:02 <ais523> you can add an extra ^ to jump into it, as always
00:09:12 <elliott> Surely you want to clear the stack first
00:09:21 <elliott> (clear) dip call
00:09:24 <ais523> or provide it with an argument
00:09:34 <CakeProphet> @hoogle IO a -> IO ()
00:09:35 <lambdabot> Foreign.Marshal.Error void :: IO a -> IO ()
00:09:35 <lambdabot> Network withSocketsDo :: IO a -> IO a
00:09:35 <lambdabot> Control.Exception block :: IO a -> IO a
00:09:41 <ais523> actually, continuations clear the stack themselves
00:09:44 <ais523> it's a simple use of ultra
00:09:50 <ais523> ultra + pop clears the stack
00:09:51 <elliott> Oh, it's not just a function?
00:09:52 <elliott> Gross.
00:09:54 <CakeProphet> hmmm, I thought void was in Control.Monad as well.
00:10:06 <ais523> elliott: it's not a function, because continuations don't return
00:10:14 <elliott> ais523: Yes they do, when the program executes
00:10:16 <elliott> erm
00:10:17 <ais523> you can make function-like not-quite-continuations pretty easily, though
00:10:18 <elliott> ais523: Yes they do, when the program terminates
00:10:25 <elliott> They return to the OS
00:10:33 <ais523> what, really? continuations are like goto, not like gosub
00:10:34 <elliott> No reason why an underlambda program can't be the OS to another
00:10:38 <CakeProphet> all things must eventually return.
00:10:40 <ais523> oh, I see what you mean there
00:10:42 <CakeProphet> except for those that don't.
00:10:46 <elliott> ais523: When a program using continuations exits, does your computer explode?
00:10:50 <ais523> that's interesting and I should think about it
00:10:59 <ais523> elliott: no, the process quits
00:11:01 <elliott> ais523: Or, alternatively: How does a CPS program terminate?
00:11:04 <ais523> and that's a different sort of level from other things
00:11:08 <elliott> A CPS program /takes a continuation as an argument/.
00:11:19 <elliott> That's the OS.
00:11:21 <elliott> Or your shell, or whatever.
00:11:29 <ais523> the thing is, Underlambda isn't CPS, and doesn't assume things written in it are
00:11:30 <elliott> Not being able to pass your own is a needless limitation.
00:11:42 <elliott> ais523: No, but call/cc is equivalent with CPS.
00:12:16 <ais523> it'd be easy enough to make continuations that were return-to-argument-on-exit rather than quit-on-exit
00:12:21 <ais523> Underlambda is implemented mostly in itself
00:12:29 <oerjan> CakeProphet: it is, but it's a new addition
00:12:37 <ais523> if you have an Underlambda interp that doesn't do continuations, you can change it to one that does with a string replace
00:12:52 <elliott> ais523: Yeah, but it's gross to have continuations that you can't control the exit behaviour of in the core anyway.
00:13:15 <elliott> Being able to write an "Underlambda OS" in Underlambda would IMO be very much in line with its goals.
00:13:20 <ais523> it would
00:13:20 <elliott> (Without writing your own interpreter.)
00:13:25 <ais523> I'm reconsidering my design a bit at the moment
00:13:26 <CakeProphet> oerjan: apparently too new for my version of ghci
00:13:31 <elliott> ais523: But thankfully, they don't actually need to take a continuation.
00:13:34 <elliott> They just need to return.
00:13:35 <ais523> in particular, what exactly c should do
00:13:44 <elliott> Any program that used continuations like it did before should work, unless it has dead code at the end.
00:14:06 <ais523> I'm trying to work out what would happen if you just lopped off the Q at the end
00:14:23 <CakeProphet> hmmm okay so....
00:14:29 <elliott> ais523: well, you should maintain the stack
00:14:31 <CakeProphet> fix (void . forkIO) -- fork bomb yes?
00:14:32 <elliott> at least IMO
00:14:41 <ais523> so here's the basic operation: #XCx|=> X(X(x))x
00:14:43 <elliott> ais523: in fact, a continuation might want to push the stack at the end of execution
00:14:51 <elliott> hmm
00:14:52 <elliott> what's X?
00:14:54 <elliott> oh, hmm
00:14:57 <ais523> anything
00:15:02 <ais523> that's the rewrite rule that implements C
00:15:02 <elliott> can you use special notations for your variables?
00:15:09 <elliott> rather than mixing them with operations :P
00:15:26 <tiffany> elliott is probably my favourite boy name [/random]
00:15:27 <ais523> which doesn't form continuations, but which is the basic operation that lets you implement them in user code
00:15:35 <elliott> ok, umm, I have no idea how that rewrite rule works
00:15:35 <ais523> tiffany: spelt like that?
00:15:40 <tiffany> idk
00:15:46 <ais523> let me use square brackets
00:15:51 <oerjan> CakeProphet: the parent halts too quickly to call it that, i think
00:16:03 <ais523> (also, # and | should be interpreted as ^ and $ in regexen)
00:16:15 <ais523> #[X]C[x]|[X]([X]([x]))[x]
00:16:21 <ais523> it's probably clearer without the brackets
00:16:45 <elliott> START history 'C' rest END = history (history (rest)) rest
00:16:51 <ais523> no, not history
00:16:53 <ais523> stack
00:16:53 <elliott> ais523: Why does the history matter?
00:16:54 <elliott> Oh.
00:17:07 <elliott> START stack 'C' future END = stack (stack (future)) future
00:17:14 <elliott> ais523: Why not (stack future)?
00:17:15 <ais523> yep
00:17:19 <elliott> So you can determine the rest of program?
00:17:25 <ais523> because that would automatically run future if you tried to evaluate it
00:17:28 <elliott> Right.
00:17:48 <CakeProphet> fix (forever . forkIO) -- fork bomb yes?
00:17:59 <elliott> ais523: That seems correct to me, then. When future runs off the end of the program, the continuation returns, if you called it. IMPORTANT NOTE: Any "exit program" functions have to be careful not to specify that they exit the interpreter, just the current program.
00:18:00 <CakeProphet> not entirely sure how forever :: m a -> m b
00:18:05 <oerjan> CakeProphet: better
00:18:16 <ais523> "current program"? ouch
00:18:19 <CakeProphet> I guess b is just bottom?
00:18:24 <oerjan> CakeProphet: because it never returns anything, it can return any type :P
00:18:24 <elliott> Well, it's not as bad as it sounds.
00:18:28 <CakeProphet> ah right.
00:18:31 <elliott> ais523: The "future function" should be ((future)@), where @ basically means "in a new context".
00:18:31 <ais523> I mean, such a concept doesn't exist
00:18:36 <oerjan> @src forever
00:18:37 <lambdabot> Source not found. I've seen penguins that can type better than that.
00:18:37 <ais523> unless you can somehow work it out using rewrite rules
00:18:42 <CakeProphet> oerjan: so then the fix is completely unecessary here. :P
00:18:44 <oerjan> forever = fix (>>)
00:18:44 <ais523> there's no "in a new context", you manufacture the new context by hand
00:18:49 <ais523> using dip, etc
00:18:57 <elliott> ais523: I'm telling you to introduce one; all it does is run the program with a fresh, empty stack, then push the stack at the end as a single element.
00:19:06 <oerjan> CakeProphet: um no
00:19:07 <elliott> The only relevant effect being that any "exit" instructions are defined to only halt the current program.
00:19:15 <CakeProphet> oerjan: oh right nevermind. lol
00:19:16 <elliott> ais523: It's not the idea of a current program that's inelegant here, it's an exit instruction.
00:19:23 <ais523> if that's meant to be implemented in the interp directly, it'd increase the complexity of the language by about 1000%
00:19:24 <elliott> You can't just halt the program forever at any point in a more pure model.
00:19:36 <elliott> ais523: I'm hinting slightly that you should have no exit program instruction.
00:19:42 <ais523> yep, I get it
00:20:08 <elliott> because if you envision an underlambda program in a higher context, "exit program" turns out to look something like "halt computer"
00:20:12 <elliott> which is insane
00:20:26 <ais523> oh, I changed the definition of C, it seems
00:20:32 <ais523> it doesn't give you the whole stack, just the future
00:20:42 <elliott> ah, so you have to copy the stack yourself?
00:20:43 <elliott> makes sense
00:20:55 <elliott> Cx => (x)x is reasonable, after all
00:21:02 <elliott> as is
00:21:02 <ais523> as grabbing the whole stack can be done as (~aa(n:^)~*(*)*^)n:^
00:21:05 * oerjan notes that the e function was the only function that wasn't implemented in terms of itself in his unlambda self-interpreter
00:21:11 <elliott> sQx = s(s)x
00:21:12 <elliott> ais523: ouch :P
00:21:22 <elliott> oerjan: what does e do again?
00:21:23 <ais523> elliott: that's commonly abbreviated to A
00:21:25 <oerjan> so it could support what elliott said
00:21:33 <elliott> oh, I see
00:21:35 <ais523> elliott: exit
00:21:36 <oerjan> elliott: exit the program
00:21:36 <elliott> exit
00:21:43 <elliott> what does @ do again?
00:21:45 <elliott> in unlambda
00:21:47 <ais523> I don't expect people to type out (~aa(n:^)~*(*)*^)n:^ every time, that's precisely why you can write A instead
00:21:50 <oerjan> read character
00:21:56 <elliott> right
00:21:57 <ais523> especially as it's a useful and commonly used operation
00:22:14 <ais523> OTOH, the fact that it can be implemented in terms of more basic instructions is good as it means interps in BF or whatever don't need to implement A themselves
00:22:21 <oerjan> apply the argument to i or v, according to whether it was successful
00:22:27 <elliott> ais523: hmm, I'm wondering how an underlambda interpreter would do preemptive multitasking
00:22:37 <ais523> the opposite of A, in a sense, is ('A_~)_~('^_^A)_~'^_
00:22:56 <elliott> ais523: you can't just divide programs into the first N instructions and the rest and selectively evaluate them, because (a) IO (not a huge problem), but (b) those N instructions could loop forever, or whatever
00:23:00 <elliott> and lol, ~_~ '^_^
00:23:07 -!- AndGregor has quit (Ping timeout: 245 seconds).
00:23:10 <ais523> A grabs the stack into a single stack element; that operation, I, runs a program in a new context
00:23:32 <ais523> so really, you'd want to be able to infra a continuation and have things just work
00:23:54 <elliott> yep
00:24:18 <elliott> ais523: hmm, if you _do_ want exit, there's an obvious way
00:24:20 <ais523> so the problem with removing the quit from the end of a continuation, is that it'd go back to the last place you called a continuation, not the last I
00:24:35 <elliott> #@x| ==> (empty string)
00:24:41 <elliott> ais523: you just have to redefine |, somehow
00:24:58 <ais523> well, the | at the end is one of the most sacred parts of Underlambda
00:25:00 <ais523> as is the # at the start
00:25:08 <ais523> they are non-negotiable, and changing them will make m4 cry
00:25:42 <oerjan> ...underlambda is written in m4?
00:25:49 <ais523> oerjan: it's written in everything
00:25:59 <ais523> the only way m4 can do input is the equivalent of C's #include
00:26:14 <elliott> ais523: well, what I meant was basically
00:26:16 <ais523> so in order to read an Underlambda program, you change the quote marks to # and | and then include it
00:26:20 <elliott> you just have to redefine how much the exit instruction erases
00:26:24 <ais523> yep
00:26:32 <elliott> by having an operation (foo)L that runs foo "with the | after it"
00:26:37 <elliott> as in, (foo)L -> foo|
00:26:58 <ais523> so, my current definition of Q as a preprocessor rule is Q/(-)S(((!(a(:^)*):^)):)~^
00:27:05 <ais523> (the (-)S is there for debugging, I think)
00:27:16 <ais523> and it's actually obliterating the rest of the program
00:27:28 <ais523> /but/, all I need to do in order to make "new context" an instruction is to add an extra element in the moand
00:27:29 <ais523> *monad
00:27:40 <elliott> what is monadic about it
00:27:46 <ais523> (you know the "you could have invented monads" thing? I did, several times)
00:27:50 <elliott> we need to ban the word monad forever :(
00:28:00 <ais523> well, take a rule like a/(-)S((a(^!^)a*a(:(^!^)a~*a~(^~!^)a~*a*~^)*(^!^))((e%)S))~^
00:28:14 <ais523> basically, each command is translated into what amounts to a monad action
00:28:19 -!- AndGregor has joined.
00:28:23 <ais523> where the monad is similar to Cont
00:28:32 <ais523> but it allows two forms of execution: running the program, and grabbing a copy of the program
00:28:35 <elliott> fair enough
00:29:29 <elliott> ais523: maybe Underlambda is the language that will finally work to do an esoteric OS in... designed to be implementable anywhere, persistable state, defined in terms of a very simple core, and now perhaps with the ability to run subprograms?
00:29:33 <ais523> oh, and the ((e%)S) stuff happens when you try to run a command that needs arguments on an empty stack
00:29:41 <elliott> I dunno how easy it'd be to implement in assembly with no memory management, though
00:29:47 <ais523> elliott: yes, although I can't think of a way to do preemptive multitasking offhand
00:29:56 <elliott> ais523: yeah, that's what I was thinking about
00:30:03 <elliott> how easy do you think an implementation on the bare metal would be, out of interest?
00:30:07 <ais523> the problem with Underlambda is not implementing it, but implementing it efficiently
00:30:19 <ais523> an implementation that works but has exponential performance is pretty trivial
00:30:22 <elliott> heh
00:30:41 <elliott> ais523: hmm, preemptive multitasking seems like it must be a primitive, or else it requires Greenspunning the language _itself_
00:30:49 <ais523> Greenspunning?
00:30:58 <elliott> ...tenth rule?
00:31:03 <ais523> I think you can do it with preprocessor rules, anyway
00:31:06 <ais523> elliott: aha
00:31:15 <elliott> proof: you can't do "run N instructions", because of arbitrarily complicated loops within; so you need to split the loops
00:31:20 <elliott> but then you have to replicate the control structure used
00:31:22 <ais523> why don't you just implement Lisp /with/ Underlambda preprocessor rules?
00:31:30 <elliott> mumble mumble, it requires a self-interpreter, Q.E.D.
00:31:34 <elliott> ais523: I meant underlambda in underlambda
00:31:52 <ais523> elliott: oh, you do that all the time, that's what the rewrite rules /are/
00:31:57 <ais523> and the reason that the core is so simple
00:32:09 <ais523> so that you only have a relatively small number of commands to metacircularly redefine every time
00:32:36 <ais523> e.g. the language doesn't require interps to have error-checking like checking for an empty stack, but you can bolt it on after the fact if you like
00:33:07 <ais523> I fear Underlambda's a little too ambitious, I keep restarting it and trying to do it right this time
00:33:14 <ais523> I'm already on version 2.0 after abandoning version 1.0
00:33:50 <ais523> I have a naive implementation of core+preprocessor that I'm using to check if naive implementations of core+preprocessor are enough
00:34:15 <ais523> written in rather outdated Perl (as in, it's trying to work around the lack of a language feature that has since been added)
00:42:07 -!- elliott has quit (Ping timeout: 250 seconds).
00:42:58 -!- ais523 has quit (Remote host closed the connection).
00:44:41 -!- Zuu has quit (Ping timeout: 260 seconds).
00:48:37 -!- ive has quit (Ping timeout: 250 seconds).
00:49:26 -!- elliott has joined.
01:07:24 -!- AndGregor has quit (Ping timeout: 258 seconds).
01:14:27 -!- AndGregor has joined.
01:25:33 <elliott> Sigh
01:25:41 <elliott> fizzie: Can I blame you for SOCK?
01:25:45 <elliott> I need to blame someone
01:37:58 <elliott> What the hell is OOBINLINE, anyway
01:38:05 <elliott> Some weird protocol thing, looks like
01:47:24 -!- copumpkin has quit (Ping timeout: 240 seconds).
01:55:24 -!- monqy has quit (*.net *.split).
01:55:24 -!- sebbu has quit (*.net *.split).
01:55:24 -!- MDude has quit (*.net *.split).
01:55:25 -!- myndzi has quit (*.net *.split).
01:56:41 -!- augur has quit (Remote host closed the connection).
01:57:01 -!- yorick has quit (Ping timeout: 260 seconds).
01:57:08 -!- yorick has joined.
01:57:26 -!- monqy has joined.
01:57:26 -!- sebbu has joined.
01:57:26 -!- MDude has joined.
01:57:26 -!- myndzi has joined.
02:10:51 -!- copumpkin has joined.
02:15:46 -!- pikhq has joined.
02:16:02 -!- pikhq_ has quit (Ping timeout: 258 seconds).
02:23:13 <elliott> olsner: Hey, I just realised something
02:23:25 <elliott> olsner: There's already a type-safe Haskell assembler
02:23:25 -!- AndGregor has quit (Quit: Bye).
02:23:57 <elliott> Harpy
02:24:13 <elliott> I dunno if it can write the machine code to disk though
02:37:14 <elliott> Deewiant: Wrt SOCK, should I do input validation on popping or after everything?
02:37:19 <elliott> Please tell me it's the reasonable latter
02:40:21 -!- HackEgo has quit (Read error: Connection reset by peer).
02:40:59 -!- HackEgo has joined.
02:41:39 -!- derrik has joined.
02:42:09 -!- derrik has quit (Client Quit).
02:46:38 -!- augur has joined.
03:00:37 <CakeProphet> fork fork fork
03:00:40 <CakeProphet> forkity fork fork
03:01:16 <CakeProphet> do fork while forking forks forever true.
03:01:26 <elliott> what
03:02:26 <CakeProphet> I am flabbergasted that I cannot talk about forks and be appreciated for my intellectual contribution.
03:02:59 <elliott> me too
03:03:19 <monqy> hi
03:03:53 <CakeProphet> fork monqy while monqy
03:03:58 <monqy> hi
03:04:42 -!- BeholdMyGlory has quit (Ping timeout: 240 seconds).
03:07:19 -!- BeholdMyGlory has joined.
03:07:35 <quintopia> while (fork());
03:09:35 <Gregor> Nooooooooooooooooooo
03:10:05 <elliott> can someone say the digit one please
03:10:06 <elliott> thanks
03:11:47 <oerjan> elliott: look in the topic
03:11:54 <elliott> o thanks
03:12:00 <elliott> there is an extra space in the topic
03:12:04 <elliott> before two of the |s
03:12:05 <elliott> fix plz
03:12:07 <elliott> it upsets me
03:12:39 -!- Guardric has quit (Quit: Leaving).
03:12:42 -!- CakeProphet has quit (Ping timeout: 252 seconds).
03:13:24 <oerjan> sheesh
03:14:02 <oerjan> someone said there was a way to get irssi to put the topic in the command line for editing, but i've forgotten what it was
03:14:50 <elliott> Ctrl+T?
03:14:52 <elliott> just a guess
03:14:55 -!- oerjan has set topic: It is the 90s and there is time for the requirements of supervision and control of transmissible spongiform encephalopathies, also an Esolang event @ Hel/Finland on 3.10.2011: https://wiki.helsinki.fi/display/lambda/esoteeriset+ohjelmointikielet | I think pointers are considerably more useful than lambda calculus | 12345678 | http://codu.org/logs/_esoteric/.
03:15:07 <oerjan> now tab worked, i'm sure it didn't last time...
03:15:16 <elliott> as in /topic<tab>?
03:15:28 <elliott> Q: How do I easily edit existing topic?
03:15:28 <elliott> A: /TOPIC <tab>
03:15:28 <elliott> --http://irssi.org/documentation/faq
03:16:04 <oerjan> no, as in /topic<space><tab> ... and now it _stopped_ working again
03:16:08 -!- MDude has changed nick to MSleep.
03:16:56 <oerjan> hm, tab completing something else made /topic tab work again
03:18:23 <elliott> heh
03:18:38 <elliott> BAD: R received wrong data and/or misplaced it
03:18:38 <elliott> BAD: R didn't push 6
03:18:38 <elliott> BAD: trying to close socket with K reflected
03:18:39 <elliott> nooooo
03:20:20 <quintopia> well thatsbdumb
03:20:42 <quintopia> i didnt realize i couldnt do /top<tab><tab>
03:21:41 <oerjan> quintopia: yep, that's precisely what makes it _stop_ working :(
03:21:44 <elliott> Deewiant: Hey, Mycology lies
03:22:40 <oerjan> after i do that, typing /topic <tab> explicitly no longer works until i complete something else
03:22:48 <quintopia> oerjan: i know. lets hack it and fix it!
03:23:33 <elliott> <oerjan> ...
03:23:53 <oerjan> quintopia: /top<tab>e<tab>^W<tab> works XD
03:24:30 <oerjan> elliott: ?
03:24:31 <quintopia> so it does
03:24:47 <quintopia> i wonder if there is a patch for this already
03:24:54 <quintopia> have you asked in #irssi?
03:24:57 <oerjan> oh, so does /top<tab><space><tab>
03:25:01 <elliott> oerjan: re <quintopia> oerjan: i know. lets hack it and fix it!
03:25:31 <oerjan> elliott: yeah, quintopia is so naive
03:25:55 <elliott> argh this is such a bad crap
03:26:03 <quintopia> i know its hard to hack the pile of spaghetti called irssi
03:26:21 <quintopia> but i think if i had a day, i could figure it out
03:26:25 <oerjan> quintopia: that's not the naive part
03:26:39 <quintopia> what is?
03:26:48 <oerjan> i'm sure elliott can explain
03:26:57 <elliott> no, only zzo can
03:26:59 * oerjan whistles innocently
03:27:08 <elliott> ask zzo
03:27:09 <oerjan> i... doubt zzo38 could
03:27:19 <elliott> yes he could. quintopia just wouldn't get it.
03:27:45 <quintopia> well then, if i wouldnt get it, then i probably shouldnt care
03:30:00 <elliott> argh what the FUCk is wrong with this
03:30:02 <elliott> ogkfhlmkjhlkhpv;g
03:30:28 <elliott> ok maybe you're meant to... pad it ou?
03:30:29 <elliott> t
03:30:30 <elliott> no
03:30:34 <elliott> hmmm
03:30:47 <elliott> jasiodjdfoidjgoidsf
03:31:05 <monqy> hi
03:31:29 <elliott> GOOD: sent "Foobar" with W
03:31:29 <elliott> GOOD: W pushed 6
03:31:29 <elliott> GOOD: closed socket with K
03:31:29 <elliott> "9\"+55<"
03:31:30 <elliott> okay that's
03:31:32 <elliott> not right
03:31:58 <monqy> oh my cology
03:31:58 <elliott> OH GOD I' MSUCH AN IDIOT.... no wait no im not
03:32:08 <elliott> yeah no im not an idiot
03:32:09 <copumpkin> yeah you are
03:32:10 <elliott> but what
03:32:14 <elliott> copumpkin: :'(
03:32:15 <elliott> <--- crying
03:32:17 <copumpkin> okay no
03:32:26 <elliott> sorry the crying doesn't stop for anyone
03:33:12 <elliott> ok i'm reading wrong
03:33:44 <elliott> i want to bite this laptop for not working
03:33:55 <elliott> rational adult behaviour
03:35:01 <oerjan> i hear biting things is a common disease among horses
03:35:12 <elliott> maybe im a hors
03:37:07 <elliott> "< >:#,\n | goe\n#:<\"BA\n\">:#,_\nlects\"\n\"+_v#!\n0\"+<>:\n00#vp"
03:37:07 <elliott> ok th- OH WHAT IS
03:37:08 <elliott> WHAT IF
03:37:12 <elliott> FUCKIN'
03:37:12 <elliott> VECTOR
03:37:13 <elliott> SHIT
03:37:20 <elliott> popVecOffset
03:37:21 <elliott> BAMBLES
03:37:37 <elliott> that should really be a type error somehow.
03:38:26 <oerjan> also mööse. would MÖÖS be a good fingerprint name?
03:38:43 <elliott> not four bytes
03:38:53 <elliott> i think
03:38:56 <oerjan> i mean in latin-1, of course
03:39:02 <elliott> ah.
03:39:06 <elliott> nobody uses latin-1, oerjan
03:39:46 <oerjan> it's close to irssi's default CPsomething fallback. at least it contains those characters.
03:40:22 <pikhq> Windows-1252?
03:40:36 <oerjan> cp1252
03:40:38 <elliott> hmm, STRN doesn't look... so hard
03:40:49 <pikhq> "cp1252" is ambiguous.
03:41:02 <pikhq> Multiple vendors have used "code pages".
03:41:04 <oerjan> well it's what my irssi setting has.
03:41:20 <pikhq> And the registered name for the charset is Windows-1252.
03:41:24 <oerjan> in any case, it's latin-1 + some extras
03:41:35 <pikhq> It's not a strict superset of Latin-1.
03:42:08 <pikhq> It's a superset of the printable subset of Latin-1.
03:42:09 -!- ive has joined.
03:42:15 <oerjan> whatever. everyone recommended i set my irc fallback to it, anyway.
03:42:34 <oerjan> pikhq: well duh, it's not like there's extra room
03:43:15 <pikhq> Well, presumably you IRC primarily in English and Norwegian.
03:43:31 <oerjan> pikhq: i had it recommended in this channel.
03:44:05 <pikhq> Both of which, IIRC, have Windows-1252 as the primary legacy charset.
03:44:26 <oerjan> it allows me to see some messages from people not properly utf-8.
03:44:47 -!- CakeProphet has joined.
03:44:48 -!- CakeProphet has quit (Changing host).
03:44:48 -!- CakeProphet has joined.
03:45:02 <pikhq> Yeah.
03:45:18 <pikhq> Shame that that's still an issue.
03:46:12 <elliott> G(Va -- 0gnirts)Get string from specified position
03:46:14 <elliott> oh come on, wtf?
03:46:19 <elliott> fizzie: Deewiant: ?????
03:46:26 * elliott checks ccbi i guess
03:47:50 <elliott> oh duh it's 0-terminated
03:55:07 <elliott> > fromEnum (compare "a" "a")
03:55:09 <lambdabot> 1
03:55:12 <elliott> > fromEnum (compare "a" "b")
03:55:14 <lambdabot> 0
03:55:15 <elliott> > fromEnum (compare "b" "a")
03:55:16 <lambdabot> 2
03:55:20 <elliott> huh
03:56:05 <oerjan> > [minBound .. maxBound :: Ordering]
03:56:06 <lambdabot> [LT,EQ,GT]
03:56:46 <Lymee> :t compare
03:56:47 <lambdabot> forall a. (Ord a) => a -> a -> Ordering
03:56:49 <oerjan> it's just the default instance
03:57:03 <oerjan> *derived
03:57:17 <Lymee> :t fromEnum
03:57:18 <lambdabot> forall a. (Enum a) => a -> Int
03:57:19 <elliott> ?hoogle find
03:57:20 <lambdabot> Data.ByteString find :: (Word8 -> Bool) -> ByteString -> Maybe Word8
03:57:20 <lambdabot> Data.Foldable find :: Foldable t => (a -> Bool) -> t a -> Maybe a
03:57:20 <lambdabot> Data.List find :: (a -> Bool) -> [a] -> Maybe a
03:57:25 <Lymee> > compare 1 2
03:57:26 <elliott> ?hoogle come on, some substring finding shit
03:57:27 <lambdabot> LT
03:57:27 <lambdabot> Parse error:
03:57:27 <lambdabot> --count=20 "come on, some substring finding shit"
03:57:27 <lambdabot> ^
03:57:28 <elliott> ?hoogle sub
03:57:29 <lambdabot> Text.Html sub :: Html -> Html
03:57:30 <lambdabot> Text.XHtml.Frameset sub :: Html -> Html
03:57:31 <elliott> ?hoogle substr
03:57:31 <lambdabot> Text.XHtml.Strict sub :: Html -> Html
03:57:33 <lambdabot> Data.ByteString breakSubstring :: ByteString -> ByteString -> (ByteString, ByteString)
03:57:35 <lambdabot> Data.ByteString.Char8 breakSubstring :: ByteString -> ByteString -> (ByteString, ByteString)
03:57:37 <lambdabot> Data.ByteString findSubstring :: ByteString -> ByteString -> Maybe Int
03:57:37 <oerjan> :t isInfixOf
03:57:37 <elliott> :-|
03:57:39 <lambdabot> forall a. (Eq a) => [a] -> [a] -> Bool
03:57:39 <elliott> oerjan: oh duh
03:57:51 <elliott> except hmm what
03:58:02 <oerjan> :t isPrefixOf
03:58:04 <lambdabot> forall a. (Eq a) => [a] -> [a] -> Bool
03:58:15 <elliott> oerjan: yeah I need to find the location of it, alas
03:58:15 <oerjan> you might want to combine that with usual find
03:58:23 <oerjan> er, findIndex, then
03:58:26 <elliott> :t findIndex
03:58:27 <lambdabot> forall a. (a -> Bool) -> [a] -> Maybe Int
03:58:30 <elliott> of a _substring_.
03:58:39 <oerjan> :t findIndex . isPrefixOf
03:58:40 <lambdabot> forall a. (Eq a) => [a] -> [[a]] -> Maybe Int
03:58:41 <elliott> I guess I can hack my own with findIndex and isPrefixOf
03:58:42 <oerjan> oh wait
03:58:48 <elliott> by repeatedly findIndexing
03:58:52 <elliott> and then taking the rest
03:58:53 <Lymee> :t inits
03:58:54 <elliott> and then isPrefixOf
03:58:54 <lambdabot> forall a. [a] -> [[a]]
03:58:55 <oerjan> um no
03:58:56 <elliott> but that sounds horrible
03:58:57 <elliott> yeah inits is what I said
03:58:59 <elliott> erm
03:59:00 <elliott> yeah inits is what I want
03:59:08 <oerjan> no, tails
03:59:11 <elliott> er right
03:59:13 <elliott> :t \s -> map ((s `isPrefixOf`) . tails)
03:59:14 <lambdabot> forall a. (Eq a) => [[a]] -> [[a]] -> [Bool]
03:59:23 <elliott> :t \s -> filter (s `isPrefixOf`) . tails
03:59:25 <lambdabot> forall a. (Eq a) => [a] -> [a] -> [[a]]
03:59:29 <elliott> :t \s -> maybeHead . filter (s `isPrefixOf`) . tails
03:59:31 <lambdabot> Not in scope: `maybeHead'
03:59:33 <elliott> oh c'mon :)
03:59:37 <elliott> yeah that'll work
03:59:47 <oerjan> :t find (isPrefixOf ?s) . tails
03:59:48 <lambdabot> forall a. (?s::[a], Eq a) => [a] -> Maybe [a]
03:59:57 <elliott> aha
03:59:58 <elliott> thanks
04:01:40 <elliott> shiro: user error (Pattern match failure in do expression at Shiro/Monad.hs:206:3-8)
04:01:41 <elliott> whoa
04:01:59 <elliott> oh duh
04:02:29 -!- variable has quit (Read error: Connection reset by peer).
04:02:29 -!- augur_ has joined.
04:02:44 -!- augur has quit (Read error: Connection reset by peer).
04:02:57 -!- variable has joined.
04:04:06 <elliott> ofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofo
04:04:06 <elliott> ofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofo
04:04:07 <elliott> ofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofo
04:04:11 <monqy> elliott: hi
04:04:12 <elliott> ofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofo
04:04:19 <elliott> ofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoof
04:04:23 <elliott> Deewiant what the fuck did you do
04:04:23 <Patashu> this sword doesn't stop
04:04:55 <oerjan> wat
04:05:55 <elliott> Just
04:05:57 <elliott> What is Deewiant even
04:06:16 <elliott> Hmm
04:06:35 <elliott> Ah hm ah hm
04:06:36 <elliott> m
04:07:08 <elliott> Aha
04:16:02 <elliott> oerjan: exlcamation mark please
04:16:57 <oerjan> !
04:19:32 <elliott> thanks
04:19:34 <elliott> bit slow though
04:19:35 <elliott> work on that
04:23:18 -!- Nisstyre has quit (Ping timeout: 264 seconds).
04:28:54 -!- Sgeo has quit (Read error: Connection reset by peer).
04:29:45 -!- Sgeo has joined.
04:32:12 -!- oklopol has quit (Ping timeout: 260 seconds).
04:43:31 <Lymee> elliott, small hiragana i please.
04:44:02 <elliott> no
04:44:13 <Lymee> :(
04:44:34 <oerjan> HOW IMPOLITE
04:46:48 <pikhq> Lymee: ぃ
04:50:18 <Lymee> pikhq, you arn't elliott
04:50:28 <elliott> im arent elliott
04:50:58 <pikhq> Lymee: 勿論!
04:52:11 <Lymee> こわい漢字、消えれ!
04:52:56 <pikhq> 怖い?
04:53:12 * Lymee cries in a corner
04:53:23 <elliott> good
04:53:36 <pikhq> どうして泣いて居る?
04:53:54 <pikhq> 漢字がこんなに難しく無い!
04:54:38 <Lymee> ;.;
05:01:39 -!- augur_ has quit (Remote host closed the connection).
05:07:52 <elliott> > reads "0x" :: ReadS Int
05:07:53 <lambdabot> Couldn't match expected type `Text.ParserCombinators.ReadP.ReadS
05:07:53 <lambdabot> ...
05:13:15 <elliott> fizzie: Yo
05:13:20 <elliott> fizzie: What does it mean if fungot starts off with "State bad"
05:13:21 <fungot> elliott: i know i'm confused :) thank you small—preceding wikipedia:signaturesunsigned comment added by special:contributions/ 125.238.252.2125.238.252.2 ( user talk:125.238.252.2talk) 22:37, 14 december 2007 ( utc)
05:13:23 <elliott> Then outputs one bytes forever
05:13:47 <elliott> At least ccbi says unable to connect
05:13:57 -!- copumpkin has quit (Ping timeout: 245 seconds).
05:14:06 -!- copumpkin has joined.
05:14:52 * Sgeo mutters at B&N wanting him to pay money for a book that he assumes is in the public domain
05:15:23 <Sgeo> Unless Nellie Bly died less than 70 years ago?
05:15:24 <elliott> Digital goods: Not scarce? Value add: Something Sgeo has never heard of?
05:15:46 <elliott> Sgeo: Has no idea what it means to cover costs?
05:17:47 <Sgeo> Guess I'll download off.... Gutenberg has audobook of it but not ...
05:17:50 * Sgeo mindboggles
05:20:40 <Sgeo> I guess reading outloud is easier than scanning and OCR in some cases?
05:21:15 <Sgeo> And all typed editions could be under copyright
05:22:25 -!- iamcal has quit (K-Lined).
05:24:07 <elliott> iamcal
05:24:08 <elliott> rip
05:24:53 <oerjan> ewascal
05:25:45 <elliott> oerjan should i an slep
05:25:52 <elliott> or should i an continue to improve shiro to run fungot shungot
05:25:53 <fungot> elliott: hi, i have heard akatsuki to mean both red moon and dawn. i've read that sentence ( yes, by the way. it was part of croatia, i fnord, i see plenty of reason to challenge the inclusion of the image? where's the meta information for example? user:timeshift9timeshift ( user talk:timeshift9talk) 14:14, 17 may 2006 ( utc
05:26:05 <elliott> yes
05:26:07 <monqy> fungot shungot
05:26:08 <fungot> monqy: a couple of pandas in a zoo in rio de janeiro, a picture of one? i would have used but it certainly is the most dispassionate, and never heard it on the saggital article. i notice the image page specifies that the image is being used under wikipedia:fair usefair use but there is
05:26:41 <oerjan> slepathology
05:26:50 <elliott> what if i spent money instead
05:26:57 <elliott> is that a way to occupy time
05:27:15 <monqy> slep money
05:27:20 <elliott> sloney
05:27:28 <oerjan> etterslep
05:27:36 <elliott> waht
05:27:39 <monqy> hire slaves to do your slepeing
05:27:46 <Sgeo> elliott, read MSPA until you reach the point at which you can't keep clicking to go forward
05:27:47 <elliott> good
05:27:47 <elliott> idea
05:27:50 <elliott> to do
05:27:51 <elliott> what monqy
05:27:53 <elliott> said is an
05:27:55 <elliott> idea that is
05:27:56 <elliott> good also is
05:27:58 <elliott> continuing this
05:27:59 <elliott> sentence because
05:28:01 <elliott> it prevensts me
05:28:02 <elliott> from needing
05:28:05 <elliott> to do any more thinking
05:28:07 <elliott> which is good because
05:28:09 <elliott> thinking causes indecision
05:28:11 <elliott> and indecisiosn
05:28:12 <elliott> causes
05:28:14 <elliott> um
05:28:15 <elliott> um
05:28:16 <oerjan> DEATH
05:28:17 <elliott> its hapening again
05:28:44 <elliott> cxvfdkznjl
05:29:54 <elliott> fcg ,./
05:30:23 <elliott> oerjan i killed a
05:30:26 <elliott> slep
05:31:22 <elliott> oerjan there is three options
05:31:23 <elliott> no slep
05:31:24 <elliott> a slep
05:31:26 <elliott> or
05:31:27 <elliott> or
05:31:29 <oerjan> DEATH
05:31:30 <elliott> ...
05:31:31 <elliott> or
05:31:32 <elliott> um
05:31:34 <elliott> help
05:31:49 <oerjan> I THINK IT IS QUITE CLEAR
05:32:22 <elliott> HELP
05:32:23 <elliott> HELP
05:32:23 <elliott> HELPHEHL
05:32:24 <elliott> EHLPEHLEHP
05:32:24 <elliott> ELH
05:32:24 <elliott> EPHLEHL
05:32:25 <elliott> EHLE
05:32:27 <elliott> HLE
05:32:29 <elliott> LHE
05:32:31 <elliott> HLELH
05:32:33 <elliott> EHLE
05:32:35 <elliott> HLEH
05:32:37 <elliott> LEEH
05:32:39 <elliott> EHE
05:32:41 <elliott> HEPHE
05:32:45 <elliott> HPE
05:32:47 <elliott> HPE
05:32:49 <elliott> HPE
05:32:51 <elliott> HPEPHE
05:32:53 <elliott> HPEHE
05:32:55 <elliott> HE
05:32:57 <elliott> PHE
05:32:59 <elliott> HPEH
05:33:01 <elliott> PEPHE
05:33:03 <elliott> HPEHPEH
05:33:05 <elliott> PEH
05:33:07 <elliott> EHE
05:33:09 <elliott> HPEP
05:33:11 <elliott> EHPEH
05:33:15 <elliott> EHE
05:33:17 <elliott> H
05:33:19 <elliott> ok wait
05:33:21 <elliott> sleeping is niceb ecause in sleep there is rest and also i feel tired
05:33:23 <elliott> but also
05:33:25 <elliott> non slep is nice because um i dont know
05:33:27 <elliott> in life there is
05:33:29 <elliott> cheese?
05:34:03 <monqy> hi
05:34:13 <elliott> gkjnbml
05:35:23 <monqy> were i you....i would probably slep...but maybe not...how tyred are you...
05:35:46 <elliott> i spent ten seconds jsut staring at the keyboard because i forgot how to type
05:35:56 <oerjan> IF YOU DON'T SLEP YOU WILL DYE
05:36:02 <oerjan> well-known fact
05:36:22 <fizzie> This from another channel instantly reminded me of elliott:
05:36:24 <fizzie> <z3mon> hi i need to edit conf
05:36:24 <fizzie> <z3mon> my comans not wokkin
05:36:24 <fizzie> <z3mon> halp
05:36:28 <elliott> me
05:36:31 <elliott> fizzie: but fungot
05:36:31 <fungot> elliott: this article was automatically assessed because at least one wikiproject had rated the article as stub, and the rating on other projects was brought up to stub class. user:betacommandbotbetacommandbot 14:34, 10 november 2007 ( utc)
05:36:34 <elliott> fizzie: if it says bad state
05:36:37 <elliott> then prints one bytes forever
05:36:37 <elliott> ???
05:36:42 <elliott> and if i mkdir data; touch data/fungot.dat
05:36:42 <fungot> elliott: 2... ' ' who often end the night with a fnord deck.)
05:36:43 <elliott> and run it
05:36:44 <elliott> it just says bad state
05:36:47 <elliott> and doesnt print one bytes forever
05:36:48 <oerjan> fizzie: could you ^save i added a ^wiki command
05:36:48 <elliott> what do i do
05:36:49 <elliott> to start fungot
05:36:50 <fungot> elliott: in terminator 3: rise of the new zealand study:
05:36:56 <fizzie> ^save
05:36:56 <fungot> OK.
05:37:09 <oerjan> thank you
05:37:15 <fizzie> elliott: Make a state file that has ten empty lines. (Intuitive!)
05:37:26 <elliott> fizzie: im dont like you
05:37:28 <elliott> why the one byte
05:37:40 <elliott> also is like
05:37:41 <elliott> eleven lines ok
05:37:42 <fizzie> That I don't know.
05:37:52 <fizzie> I think eleven should be fine maybe.
05:37:53 <elliott> i made like eleven lines and now it is just frozen
05:37:55 <elliott> ok
05:37:57 <elliott> how do i make an it join
05:38:21 <fizzie> You should get the raw irc stuff on screen if it a work.
05:38:44 <elliott> what if it a freeze....
05:39:03 <fizzie> Then I suppose it not a work.
05:39:12 <elliott> :'(
05:39:14 <elliott> how it a work
05:39:32 <elliott> elliott@katia:~/Code/shiro/rsc/fungot$ ../../cabal-dev/bin/shiro fungot-load-freenode.b98
05:39:32 <fungot> elliott: if the intentions are on the fnord. if you have
05:39:32 <elliott> ^C
05:39:32 <elliott> elliott@katia:~/Code/shiro/rsc/fungot$ ~/ccbi-2.1/ccbi fungot-load-freenode.b98
05:39:32 <elliott> State bad.
05:39:33 <elliott> theym
05:39:34 <elliott> disagre
05:39:35 <elliott> fizzie: oh uh
05:39:40 <elliott> does my text mode i o stuff need to work
05:41:12 <elliott> fizzie: hepl
05:42:49 <elliott> oerjan: do i an fungot or an slep HELP
05:43:25 <monqy> can you an fungot...
05:43:25 <fungot> monqy: how do the chinese figure out their " western" board and the " aka" section are pretty shaky. i'm thinking about moving this article to that effect should be presented in a balanced way using encyclopedic language. user:wysswyss 16:38, 8 february 2007 ( utc)
05:43:55 <fizzie> You could try using http://p.zem.fi/fungot-dat as your statefile.
05:43:55 <fungot> fizzie: i have no particular stake in this silly argument. rickk 04:54, may 23, 2006.
05:44:08 <fizzie> That one at least shouldn't be the bad.
05:44:30 <elliott> cakporphet wuz hear
05:44:32 <fizzie> Also you'll get all the commands (all of them).
05:44:36 <fizzie> ^str 9 get
05:44:37 <fungot> cakporphet wuz hear
05:44:45 <elliott> $ ~/ccbi-2.1/ccbi fungot-load-freenode.b98
05:44:45 <elliott> Unable to connect.
05:44:46 <fungot> elliott: 20:04, december 1, 2006.
05:44:46 <elliott> thats
05:44:47 <elliott> not an good :(
05:44:56 <elliott> did i fuck up my load script
05:44:59 <elliott> v =' <
05:45:00 <elliott> im
05:45:02 <elliott> change command char and things
05:45:24 <elliott> but it look ok
05:45:29 <elliott> why it unable connect :(
05:45:38 <fizzie> Freenode has also changed them IPs since some time ago, if you didn't recheck that.
05:46:08 <elliott> cry
05:46:30 <elliott> ok now it connect with ccbi
05:46:37 <elliott> but
05:46:37 <elliott> with shiro
05:46:41 <elliott> just spinloop ??????????
05:46:47 <elliott> could it be slow
05:46:49 <elliott> or is it broken
05:46:51 <elliott> i can understand slow
05:47:08 <fizzie> I'unno. I don't think it does very much work before connectzing.
05:47:21 <elliott> crying
05:47:23 <elliott> maybe i need
05:47:24 <elliott> trace support
05:47:26 <fizzie> You could netstat that stuff or something to see if it made a sokket puppet or sumthing.
05:47:50 <elliott> netstat look... not pormising
05:49:04 <elliott> fizzie: : (
05:49:22 <elliott> fizzie: do you rely on any undefined behaviour for STRN, maybe?
05:49:28 <elliott> like
05:49:34 <elliott> UNDEF: 00L leaves 0 on stack
05:49:34 <elliott> UNDEF: "ooF"01-L leaves "" on stack
05:49:35 <elliott> UNDEF: "ooF"101-M eats the string
05:49:35 <elliott> UNDEF: "ooF"01-1M eats the string
05:49:35 <elliott> UNDEF: "ooF"42M eats the string
05:49:37 <elliott> that sort of thing
05:49:48 <elliott> mycology says my SCKE is ok
05:49:58 <elliott> my FING might be wrong, do you rely on it that early?
05:50:28 <fizzie> It does do some FING remapping pretty much immediately after loading, I think.
05:50:48 <elliott> hmmmmmmmmmmmmmmmmmmm
05:50:52 <elliott> I get all GOODs in mycology
05:50:57 <elliott> just a weird "y" output
05:51:11 <fizzie> I may still do UNDEF STRN stuff, though not consciously. I fixed all the cases of "L with an argument longer than the string" when switching from rc/funge to cfunge, because the latter reflected on that instead of returning the whole string.
05:52:01 <elliott> Hm-hm.
05:52:05 <fizzie> I don't think they are strictly speaking UNDEF any more, but at least Vorpal does not accept the genuinity of http://www.rcfunge98.com/rcsfingers.html IIRC.
05:52:30 <elliott> Vorpal doesn't care about the spec, just Mycology results with no BADs, even if they have dubious UNDEFs.
05:52:42 <elliott> Also compatibility with old CCBI versions because he nicked the code. :p
05:52:42 <Vorpal> wrt what?
05:52:48 <elliott> Shhhhhhhhh I said nothing
05:52:51 <elliott> Shiro superiority four eva
05:52:58 <Vorpal> fizzie: ?
05:52:58 <elliott> fizzie: Anyway gleh.
05:53:11 <fizzie> Vorpal: Wrt the added clarifications in e.g. STRN.
05:53:24 <Vorpal> fizzie: he clarified STRN? Wasn't aware.
05:53:35 <fizzie> I'm pretty sure we had a discussion.
05:53:41 <Vorpal> okay then I forgot it
05:53:58 <fizzie> It was sneakily modified without any change notices or version numbers or anything; you didn't like that.
05:54:10 <Vorpal> ah
05:54:17 <elliott> sneaky
05:54:17 <elliott> lol
05:54:34 <elliott> Personally I think the addition of a section titled clarification is an affront to genuinity.
05:54:52 <fizzie> It does still say "other interpreters may have done this and that" in the clarifications, so it's a bit... unclear.
05:54:59 <elliott> Done, past tense.
05:55:27 <elliott> fizzie: So will you fix fungot if I find bugs in fungot
05:55:28 <fungot> elliott: and i can't find a reliable etymology of this word is misused alot. should we say how he he came to give unless she provides him ' ' quid pro quo agreement with fnord and all, while the natural sciences generate theoretical knowledge about the
05:55:47 <fizzie> "Maybe."
05:56:01 <elliott> fizzie: That's racist
05:56:10 <fizzie> Interpreterist.
05:56:35 <Sgeo> Just True or Just False?
05:56:55 <elliott> What?
05:57:10 <Vorpal> Maybe Bool
05:57:31 <fizzie> "Just Nothing" sounds funny.
05:57:56 <Vorpal> heh
05:58:25 <Sgeo> So does "Just Right"
05:58:25 <fizzie> "What's that you have there? Oh, it's just... nothing."
05:58:26 * Sgeo runs
05:58:26 -!- CakeProphet has quit (Ping timeout: 246 seconds).
05:58:50 <elliott> Aha, pushString is finally a bottleneck
05:58:55 <elliott> I wonder why?
05:58:56 <Sgeo> Although Just Nothing actually would presumably be seen in some programs
05:59:00 <elliott> Probably STRN, but...
05:59:05 <Sgeo> Just Right is kind of... useless
05:59:35 <fizzie> The bot does quite a lot of STRNing, I believe.
05:59:58 <fizzie> It's not really OPTOMIZED.
06:00:04 <fizzie> Maybe I should've written fungot in TERSE.
06:00:04 <fungot> fizzie: from what i can see numerous different writing styles, from fnord. consensus on both this and the archived discussion page that if the teen is getting sexually excited ( evidenced by getting " stiffer") then it will pass.
06:00:32 <Vorpal> ...
06:00:35 <Vorpal> ^style
06:00:36 <fungot> Available: agora alice c64 ct darwin discworld europarl ff7 fisher homestuck ic irc jargon lovecraft nethack pa sms speeches ss wp* youtube
06:00:52 <Sgeo> Strip Nomic?
06:00:54 <fizzie> "consensus" and "discussion page" are good clues.
06:00:59 <monqy> strip nomic.
06:01:41 <elliott> strip nomic actually exists.
06:01:53 <elliott> like, it has actually been played.
06:01:59 <Vorpal> heh. bbl, university
06:02:02 <Vorpal> also wow
06:02:08 <Vorpal> elliott: got a link?
06:02:16 <fizzie> "Preferrably one with pictures."
06:02:22 <elliott> No.
06:02:35 <elliott> (Well, I could ostensibly get a link, but you wouldn't be able to see it.)
06:02:39 <Vorpal> fizzie: I would presume elliott had such a thing bookmarked
06:02:50 <Vorpal> it is his kind of thing
06:02:56 <elliott> Totally.
06:02:58 <elliott> (Not really.)
06:03:13 <Vorpal> well bbl
06:03:45 <fizzie> Isn't "strip nomic" just another word for all dating, though?
06:04:02 <elliott> `addquote <fizzie> Isn't "strip nomic" just another word for all dating, though?
06:04:04 <HackEgo> 641) <fizzie> Isn't "strip nomic" just another word for all dating, though?
06:04:33 <oerjan> fizzie: i suspect if you treat it that way, you will find a large fraction of players quitting the game
06:20:55 -!- CakeProphet has joined.
06:20:55 -!- CakeProphet has quit (Changing host).
06:20:55 -!- CakeProphet has joined.
06:25:05 -!- Jafet has joined.
06:27:11 <CakeProphet> http://en.wikipedia.org/wiki/Turing_test#Reverse_Turing_test_and_CAPTCHA
06:27:24 <CakeProphet> okay, but what if the other computer passes a normal Turing test
06:28:27 <CakeProphet> then the computer might fail but still be intelligent.
06:28:59 <CakeProphet> and what if it passes? is it super-intelligent?
06:31:06 <CakeProphet> if I were one of the choices in a Turing test.
06:31:14 <CakeProphet> I would just spout nonsense.
06:35:19 -!- aspect has joined.
06:36:13 <CakeProphet> I think the reason Cleverbot scores so high on these kinds of tests is because most of its conversations devolve into "I'm a bot!" "No you're a bot!" ...
06:36:48 <CakeProphet> "I just said I'm a bot!" "Right, so am I." ...
06:36:57 -!- Nisstyre has joined.
06:38:30 <Jafet> A Turing test is a procedure that takes a machine and returns a boolean. I've always found that a little shady.
06:39:19 <aspect> how much change to you expect from a machine?
06:39:45 <oerjan> aspect: about 3 nok
06:42:19 <CakeProphet> well I think usually it's done statistically. Thus a percentage.
06:46:36 <elliott> aspect: wat
06:46:58 <elliott> oh right we're meant to say hi to newbies
06:46:59 <elliott> hi aspect
06:49:08 <aspect> good afternoon
06:49:50 <aspect> I saw this place metioned in #haskell and got curious. I'll try not to say anything obnoxiously stupid before I figure out what goes on here
06:49:59 <elliott> oh right, people keep mentioning it in #haskell :P
06:50:05 <monqy> were famouse
06:50:06 <elliott> kmc: we're watching you
06:50:20 <elliott> aspect: if you're completely confused http://esolangs.org/ may be enlightening
06:50:32 <oerjan> is it up again?
06:50:34 <elliott> apparently
06:50:36 <elliott> aspect: although expecting topicality is naive
06:51:17 <oerjan> we are always topical. with all the topics!
06:51:34 <aspect> I see the bar for "programming language" is set quite low
06:51:57 <oerjan> yes...
06:52:16 * aspect wonders if "asynchronous javascript" belongs on the list in honour of being another turing tarpit
06:52:44 <oerjan> sounds far too serious
06:53:14 <elliott> ?unmtl StateT m a
06:53:15 <lambdabot> err: `StateT m a' is not applied to enough arguments, giving `/\A. m -> a (A, m)'
06:53:19 <Jafet> Only to its clerics
06:53:22 <elliott> ?unmtl StateT s m a
06:53:23 <lambdabot> s -> m (a, s)
07:10:46 -!- iamcal has joined.
07:42:20 -!- kwertii has quit (Quit: bye).
08:17:50 -!- ive has quit (Quit: leaving).
09:20:25 -!- nooga has joined.
09:42:25 -!- derdon has joined.
09:42:42 <nooga> I pinch the Lion to see the Launchpad
09:42:49 <nooga> how bizarre
10:00:43 -!- GuestIceKovu has joined.
10:02:25 -!- Slereah has quit (Ping timeout: 240 seconds).
10:17:17 -!- azaq23 has joined.
10:25:06 -!- monqy has quit (Quit: hello).
10:34:29 -!- pikhq_ has joined.
10:34:45 -!- pikhq has quit (Ping timeout: 258 seconds).
10:44:05 -!- itidus20 has quit (Ping timeout: 258 seconds).
10:54:06 -!- MSleep has changed nick to MDude.
11:08:17 -!- oerjan has quit (Quit: Good night).
11:08:36 -!- itidus20 has joined.
11:39:14 -!- GuestIceKovu has changed nick to Slereah.
11:40:37 -!- boily has joined.
11:58:43 -!- Sgeo has quit (Ping timeout: 264 seconds).
12:02:32 -!- Patashu has quit (Quit: MSN: Patashu@hotmail.com , Gmail: Patashu0@gmail.com , AIM: Patashu0 , YIM: patashu2 .).
12:08:25 -!- NihilistDandy has quit (Ping timeout: 252 seconds).
13:23:41 -!- Phantom_Hoover has joined.
13:54:47 -!- azaq231 has joined.
13:55:20 -!- azaq23 has quit (Ping timeout: 276 seconds).
13:57:32 -!- Sgeo has joined.
14:04:08 <Sgeo> Hello, "fuck you trying to force your a/v on me"
14:12:39 <cheater_> adult video?
14:16:30 <Sgeo> antivirus
14:17:41 -!- copumpkin has quit (Quit: Computer has gone to sleep.).
14:22:10 <fizzie> Audio/video.
14:23:41 <derdon> artificial virtuality
14:29:32 <fizzie> Aggravating verbosity.
14:32:16 -!- sebbu2 has joined.
14:32:16 -!- sebbu2 has quit (Changing host).
14:32:16 -!- sebbu2 has joined.
14:35:19 -!- sebbu has quit (Ping timeout: 264 seconds).
14:46:36 -!- copumpkin has joined.
14:47:59 <Phantom_Hoover> Sgeo, wait, who is trying to force alternate visualisations on you?
14:51:10 -!- Vorpal has quit (Quit: ZNC - http://znc.sourceforge.net).
14:51:47 -!- Taneb has joined.
14:52:13 <Phantom_Hoover> http://www.smbc-comics.com/index.php?db=comics&id=2361
14:52:14 <Phantom_Hoover> OK
14:52:18 <Phantom_Hoover> This is the best SMBC ever.
14:52:44 -!- Sgeo has quit (Ping timeout: 258 seconds).
14:53:52 <Taneb> Hello!
14:58:30 -!- sebbu3 has joined.
15:00:48 -!- NihilistDandy has joined.
15:01:28 -!- sebbu2 has quit (Ping timeout: 245 seconds).
15:09:02 -!- FireFly has joined.
15:09:09 -!- FireFly has quit (Changing host).
15:09:09 -!- FireFly has joined.
15:14:11 <cheater_> @tell ais523 i have made more progress in rescuing this file system that broke earlier on, i have written a file system checker. it can be found here: https://bitbucket.org/cheater/fscheck/
15:14:11 <lambdabot> Consider it noted.
15:26:17 <Taneb> Uniquode now has a part of its memory called the TEMPORAL WAYPOINT BUFFER
15:26:34 <Taneb> All-caps
15:26:35 <cheater_> what is uniquode?
15:26:43 <Taneb> Esolang I'm working on
15:26:45 <cheater_> ok
15:26:52 <Taneb> Uses the entire Unicode character set
15:26:56 <Taneb> See also UniCode
15:26:57 <cheater_> there should be a unicode based programming language
15:27:01 <cheater_> ah ok
15:27:11 <Taneb> I'm about to do S
15:27:12 <cheater_> it would make programming so much easier and so much more terse
15:27:24 <Taneb> It's very difficult to program in at the moment
15:27:26 <cheater_> especially with a special keyboard
15:27:32 <cheater_> i bet it would be popular in banks
15:28:07 <cheater_> Taneb, have you noticed that the c64 symbol set is not in unicode?
15:28:13 <cheater_> i find that is fairly atrocious
15:28:17 <Taneb> No I have not
15:28:44 <Taneb> Indeed, that is a tragedy
15:32:13 <Taneb> Each IP in UniQuode has a register that stores a surd
15:34:45 -!- azaq23 has joined.
15:35:20 -!- NihilistDandy has quit (Ping timeout: 264 seconds).
15:35:40 -!- azaq231 has quit (Ping timeout: 258 seconds).
15:36:57 <nooga> I curse Apple
15:38:14 -!- NihilistDandy has joined.
15:41:26 -!- sllide has joined.
15:42:35 <Taneb> Bye
15:44:03 <Gregor> nooga: Then give it to some dumb white bitch to eat?
15:44:11 <Gregor> *ba-dum tish*
15:50:49 <Taneb> Hello
15:54:42 -!- Zuu has joined.
15:54:42 -!- Zuu has quit (Changing host).
15:54:43 -!- Zuu has joined.
15:56:45 -!- ais523 has joined.
16:29:07 -!- Sgeo has joined.
16:33:20 -!- NihilistDandy has quit (Ping timeout: 260 seconds).
16:39:48 -!- NihilistDandy has joined.
16:45:38 -!- augur has joined.
16:46:53 <Sgeo> With Haskell's Num class, does a*b have to == b*a?
16:55:38 -!- Braber01 has joined.
16:56:51 <Braber01> What's a good way to memorize all the commands for Befunge?
16:57:01 <Taneb> With a song!
16:57:10 <Taneb> befunge-93 or -98?
16:57:23 <Braber01> -98.
16:57:35 <fizzie> Memorizing all fingerprints of 98 will require quite a long song.
16:58:13 <Braber01> all I can remember right now is ^ > < v p g and @
16:58:46 <fizzie> Well, + - * / % are pretty easily memorizable.
16:58:58 <Braber01> oh yeah i forgot about those ...
16:59:33 <Gregor> Damn it, now I have to make a Befunge song.
16:59:36 <Braber01> and 1 2 3 4 5 6 7 9 0 . ,
16:59:56 <fizzie> Most of them have some sort of internal logic, anyway. Like "?" is confused about where it'll go, and so on.
17:00:01 <Taneb> # looks like a trampoline
17:00:32 <Braber01> . is the integer output and , is the ascii output right?
17:01:59 <fizzie> Not sure what's the official logic of $ though.
17:04:10 <fizzie> Also 0-9a-f are quite easy. I'd just keep the "Instruction Quick Reference" cheat-sheet open until they become naturally memorized.
17:06:44 <fizzie> (During the process of writing something.)
17:12:32 -!- nooga has quit (Ping timeout: 246 seconds).
17:13:49 -!- ive has joined.
17:14:45 -!- Taneb has quit (Ping timeout: 260 seconds).
17:17:00 -!- nooga has joined.
17:22:58 <Gregor> "Apple decided to use an archaic object file format for Mac OS X, a variant of the old aout format. This format predates dynamic linking. Apparently without proper staffing, they have to reinvent lots of stuff for their obsolete object format. Had they chosen a current object formats, they could have taken more benefit of the the quality work already done within the GNU project."
17:22:59 <Gregor> -- http://gmplib.org/macos.html
17:23:01 <Gregor> :P
17:25:43 -!- nooga has quit (Ping timeout: 264 seconds).
17:31:04 -!- jcp|1 has joined.
17:31:53 -!- jcp has quit (Ping timeout: 245 seconds).
17:32:07 -!- Taneb has joined.
17:32:55 -!- jcp|other has quit (Ping timeout: 240 seconds).
17:33:48 <Taneb> Going to see Cowboys vs Aliens
17:34:15 <Taneb> Hopefully it won't be as dissapointing as Inception
17:34:40 <Gregor> It will be.
17:35:37 <fizzie> I saw a trailer of that thing. It looked slightly silly.
17:35:47 <fizzie> Not entirely unexpectedly.
17:36:19 -!- Taneb has quit (Remote host closed the connection).
17:36:37 <fizzie> (Isn't it "Cowboys & Aliens" instead of "vs"?)
17:37:42 -!- jcp has joined.
17:44:18 -!- Braber01 has quit (Remote host closed the connection).
17:46:10 -!- nooga has joined.
17:47:17 -!- NihilistDandy has quit (Ping timeout: 260 seconds).
17:48:51 -!- kmc has quit (Quit: Leaving).
17:54:17 -!- jcp has quit (Ping timeout: 260 seconds).
17:56:37 -!- jcp|1 has quit (Ping timeout: 260 seconds).
17:57:53 -!- Sgeo has quit (Ping timeout: 258 seconds).
17:59:05 -!- NihilistDandy has joined.
18:03:38 -!- NihilistDandy has quit (Ping timeout: 246 seconds).
18:06:18 -!- kmc has joined.
18:08:23 -!- jcp has joined.
18:13:12 -!- javawizard has joined.
18:16:37 -!- Braber01 has joined.
18:18:44 <Braber01> Hi I'm having a bit of trouble in String mode in Befunge, I've written "llaw eht no reeb fo selttob" v,>^_@ however my output is giving me btlso ero h al. either somebody didn't do their programming right , or I need to change these letters to something else.
18:20:00 <fizzie> The _ drops a character too.
18:20:08 <fizzie> The traditional print loop is >:#,_
18:20:25 <Braber01> oh, I'm embarssed...
18:27:34 <Braber01> that just gives me an Infante loop,oh wait I see what i'm doing.
18:39:56 -!- Braber01 has quit (Remote host closed the connection).
18:52:43 <Gregor> An infant loop.
18:53:38 <fizzie> Something that just keeps screaming and pooping everywhere, or so I hear.
18:55:03 -!- IROMLT00014 has joined.
18:55:27 <IROMLT00014> CIaooooooooooooo
18:55:43 <IROMLT00014> list
18:56:05 <Gregor> Hm.
18:56:11 <Gregor> Those are certainly words.
18:57:13 -!- IROMLT00014 has quit (Client Quit).
18:57:53 <Gregor> lol
18:58:39 <fizzie> So, is the Befunge song finished already?
18:59:07 <Gregor> I have a job! :(
19:01:28 <fizzie> 10pm is no time for jobs; it's time for singing and merry-making.
19:02:34 <Gregor> Your time zone is LAME.
19:02:41 <Gregor> My time zone is BETTER because we talk AMERICAN here.
19:05:07 <derdon> Gregor: oh, American is a language now?
19:05:21 <fizzie> Your time zone is LAME because this zone is in the FUTURE.
19:06:58 <Gregor> derdon: Hello Doctor Duznaut-Gedghoeks!
19:07:41 <derdon> Gregor: I don't understand you but I had to laugh anyway :D
19:08:05 <derdon> do you speak in your personal esolang to me?
19:08:08 <Gregor> I was making an attempt to spell "does not get jokes" like a name, but failed pretty spectacularly.
19:08:37 <derdon> ah, now I get it
19:09:11 <derdon> and well, there are really people on the internetz who think American is a language
19:09:26 <derdon> and there are Americans who think Europa has a capital city :P
19:09:30 <derdon> *Europe
19:10:12 <olsner> well, it does, in fact it has more than one
19:10:59 <fizzie> Europa, on the other hand, *should* have a capital city; why isn't it colonized yet? It's, like, 2011!
19:11:20 <derdon> olsner: ...
19:11:42 <olsner> europa's existing inhabitants might not take kindly to colonization
19:12:39 <derdon> olsner: I have the feeling that many people don't even know what that is
19:13:18 <fizzie> I was a bit disappointed "Europa (moon)" does not have an "in popular culture" section, but at least there's a whole separate "Jupiter's moons in fiction" article.
19:14:02 <fizzie> "All these worlds are yours except Europa. Attempt no landings there."
19:14:30 <ais523> fizzie: I think there was a dash in there
19:14:30 <lambdabot> ais523: You have 2 new messages. '/msg lambdabot @messages' to read them.
19:14:34 <ais523> @messages
19:14:34 <lambdabot> elliott said 1m 24d 19h 5m 48s ago: Request a copy of the wiki page "100_free_dutch_dating_sites_2008".
19:14:34 <lambdabot> cheater_ said 4h 23s ago: i have made more progress in rescuing this file system that broke earlier on, i have written a file system checker. it can be found here: https://bitbucket.org/cheater/
19:14:34 <lambdabot> fscheck/
19:14:52 <ais523> wow, I'm getting messaged with random stuff
19:14:57 <olsner> the monoliths missed their predicted arrival in 2001 though
19:15:10 <ais523> olsner: *predicted discovery
19:15:26 <ais523> wasn't the theory that they'd been there all the time, but the one on the moon was only discovered in 2001
19:15:35 <ais523> and several other monoliths discovered later?
19:16:19 <olsner> hmm, something like that yes...
19:16:42 <olsner> I am not sufficiently well-versed in the prophecies
19:19:18 -!- augur has quit (Remote host closed the connection).
19:36:37 <Phantom_Hoover> ais523, IIRC there were only like 2.
19:36:45 <Phantom_Hoover> The moon one, and the Jupiter one.
19:36:52 <ais523> Phantom_Hoover: in 3001 there were huge numbers of them
19:37:07 <olsner> Phantom_Hoover: what about the earth one?
19:37:11 <Phantom_Hoover> ais523, well sure, but that was cheating.
19:37:22 <Phantom_Hoover> Also 3001 is terrible so it doesn't count.
19:37:32 <ais523> and I think in one of the sequels, there were ones sending messages from the area around Jupiter
19:38:17 -!- derdon has quit (Remote host closed the connection).
19:38:18 -!- sebbu3 has changed nick to sebbu.
19:39:31 <Gregor> @messages
19:39:32 <lambdabot> You don't have any new messages.
19:39:35 <Gregor> :'(
19:40:16 <Phantom_Hoover> @messags
19:40:17 <lambdabot> You don't have any new messages.
19:40:26 <Phantom_Hoover> I'm surprised that worked.
19:41:21 <fizzie> @messitup
19:41:22 <lambdabot> Unknown command, try @list
19:41:24 <fizzie> Aw. :/
19:48:15 <Gregor> @messapotamia
19:48:16 <lambdabot> Unknown command, try @list
19:48:18 <Gregor> :(
19:48:34 <Gregor> @messagorkenbork
19:48:35 <lambdabot> Unknown command, try @list
19:48:38 <Gregor> Huh
19:48:44 <Gregor> Seems to be special-cased for @messags.
19:51:08 <CakeProphet> so is there any way Ord could be used to represent the entire partial order.
19:51:18 <CakeProphet> in particular that a > bottom
20:13:37 <Gregor> Ideas for the "legit" JIT for Fythe:
20:13:40 <Gregor> 1) LLVM
20:13:46 <Gregor> 2) Turn GCC into a friggin' library HEWW YEAH
20:14:03 <Gregor> 3) Write it myself, then complain when it's retardedly slow.
20:17:25 -!- kwertii has joined.
20:17:25 <Gregor> 4) ... GNU lightning?
20:17:37 <Gregor> There aren't really any good JIT libraries, are there :P
20:22:45 <Gregor> Is LLVM at all usable from C?
20:24:13 <fizzie> It does have some C bindings.
20:24:37 <fizzie> Some (most?) of the non-C++ LLVM bindings are built on top of that.
20:25:57 <fizzie> There's that AsmJit thing if you don't mind x86/x64-only; it's probably not good either, but it's a thing.
20:26:45 <fizzie> Oh, and it's a C++ thing too.
20:27:10 <Gregor> I do mind x86/GOD-FUCKING-DAMN-IT-IT'S-NOT-X64 though.
20:27:45 -!- augur has joined.
20:27:51 <Gregor> For the time being I'm too happy with my template JIT to bother though :P
20:27:55 <Gregor> LLVM does optimization, right?
20:28:26 <Gregor> s/does/can do/
20:28:45 <fizzie> Yes.
20:29:02 <Gregor> Yeah, seems like LLVM is probably the best choice *shrugs*
20:29:10 <Gregor> It shouldn't be /too/ difficult to LLVM it ...
20:29:38 <fizzie> http://npcontemplation.blogspot.com/2008/06/secret-of-llvm-c-bindings.html has a simple llvm-c snippet if you want a quick glance at the API.
20:30:11 <Gregor> Oh, that's not too bad.
20:30:35 <Gregor> It'd be nice if there was a LLVMDoFrigginEverythingPass() :P
20:31:05 <fizzie> I seem to recall they do have autogenerated API docs for the C bindings too somewhere.
20:31:17 <pikhq_> Problem is, LLVM is not exactly designed that way.
20:32:05 <olsner> cat the bitcode through opt -O3
20:32:15 <pikhq_> Its optimisation is done by a bunch of essentially independent libraries.
20:32:23 <Gregor> Mmm.
20:32:58 <Gregor> Since this will be the optimizing JIT and the fast JIT is separate, it can be almost arbitrarily slow so long as the optimizations are good stuff, so ... yeah, hm. OH WELL.
20:33:09 <pikhq_> And, yes, you could just go out to shell if you don't care about JITing.
20:33:42 <Gregor> You could go out to shell even if you do care about JIT *shrugs*
20:33:54 <Gregor> I could generate C, write it to a pipe, compile that with GCC, read in the .o file, and call it.
20:34:04 -!- sebbu has quit (Read error: Connection reset by peer).
20:34:44 <pikhq_> Or you could generate LLVM assembly, write it to a pipe, munge it as you feel like, read in the .o file, and call it.
20:36:40 <Gregor> PERFECTION
20:42:14 <Gregor> I wonder if there's a crazy mix of options that would cause GCC to compile a single function and output the machine code for it, not in any object file format.
20:43:01 <Gregor> Which would really be such an option to the assembler of course.
20:43:19 <Gregor> I guess you can compile then objcopy to binary ...
20:43:25 <fizzie> You can get binary files out of GCC; I had a small snippet that created a DOS .com file directly from a Linux non-cross GCC.
20:44:36 <fizzie> http://pastebin.com/eChGDKDy <- like that.
20:44:42 -!- sebbu has joined.
20:44:53 <fizzie> It links it with a defined-on-the-command-line .text segment location.
20:46:33 <fizzie> (The code in question doesn't actually work on real hardware, thanks to segment limit checks, but that's not exactly a point.)
20:46:34 <Gregor> --oformat, eh
20:46:49 <Gregor> Thanks
20:46:53 <Gregor> Yeah, I could use that as a JIT >: )
20:49:24 <fizzie> "gcc -c" + objcopy to binary would create machine code too, but it'd (I think) just drop off all relocation records of the object file.
20:50:49 <Gregor> I explicitly don't want relocation records.
20:50:58 <Gregor> (If I have any external dependencies I'm hosed anyway)
20:51:55 <fizzie> For non-PIC-code you might have relocation records that are related to where the code will live, though, that you'd like to have processed; linking like that will do it.
20:52:52 -!- hiato has quit (Quit: leaving).
20:53:33 <fizzie> "PIC code", eh. "PIN number" and so on.
20:54:35 <fizzie> You could possibly use something like -Wl,--defsym=foo=0x12345678 too, to define global symbols if you want to refer some data you have in memory from the C code. Though I suppose a generated cast-a-constant-to-pointer expression is just as good.
20:56:19 -!- Taneb_ has joined.
20:56:50 <Taneb_> Hello!
20:57:08 -!- oerjan has joined.
20:57:45 -!- Taneb_ has quit (Read error: Connection reset by peer).
20:57:50 <Gregor> fizzie: I have all the functions that JITted code could need to call in a bank, stored in a register.
20:57:58 <Gregor> So, no PIC problems: )
20:57:59 <Gregor> *:)
20:59:15 <fizzie> I think GCC is allowed to stick data into your .text segment and refer to it with absolute addresses, though.
20:59:27 -!- pikhq has joined.
20:59:28 <fizzie> If you're not doing -fpic/-fPIC, anyway.
20:59:34 -!- sebbu2 has joined.
21:00:13 -!- sebbu has quit (Ping timeout: 245 seconds).
21:00:44 <Gregor> There are many reasons why this technique is illegitimate, but right now I'm trying to figure out if it could even begin to work :P
21:02:18 -!- pikhq_ has quit (Ping timeout: 252 seconds).
21:03:28 <Gregor> For some reason it seems to generate a bit of bullshit after the binary itself (comments and such), but other than that, working :)
21:06:18 <fizzie> Right, I think --oformat=binary with GNU ld will just concatenate all the sections of the resulting executable, starting from .text.
21:06:30 <Gregor> Seems that way.
21:06:33 <Gregor> Lucky text was first :P
21:06:49 <fizzie> IIRC "gcc -s" doesn't strip those, which is a bit silly.
21:07:01 <Gregor> Oh well *shrugs*
21:07:45 <fizzie> When polishing your particular turd, you might use a real linker script to drop those out.
21:08:28 <Gregor> :P
21:08:35 <fizzie> "-Wl,--gc-sections" might drop it. Then again, it might not.
21:09:25 <Gregor> Nope
21:10:56 -!- FireFly has quit (Quit: FireFly).
21:12:50 <Gregor> Yeah, the technique is "sound" (read: terrible)
21:13:05 <Gregor> gcc -x c - -pipe -march=native -mtune=native -nostdlib -Wl,--oformat=binary -O3 -o /dev/stdout <-- clearly the best
21:14:25 <fizzie> Oh, it even writes to /dev/stdout? I was under the impression that binutils' libbfd just plain old refuses to do that. Well, maybe it's something specific to the "binary" output format.
21:14:43 <Gregor> Well, I had to force it :P
21:18:36 <Gregor> (That is, -o - actually made a file called -, so I had to use /dev/stdout)
21:20:08 <fizzie> Yes, I just recall getting some "oh no you don't, that's a pipe!" warnings when trying to get -o /dev/stdout from some related tool. But maybe it was 'as' or something.
21:23:34 -!- copumpkin has quit (Ping timeout: 245 seconds).
21:24:04 <tiffany> .-.
21:24:11 <Gregor> fizzie: Idonno, worked for me *shrugs*
21:24:23 <Gregor> fizzie: Even with a tty it still "worked" (i.e. printed garbage to my TTY)
21:24:45 <fizzie> Well, maybe gcc takes care of the plumbing or something.
21:25:23 <tiffany> well as long as it gives a valid file descriptor it should work right?
21:25:40 <fizzie> Not if some tool expects it to be seekable.
21:25:55 <tiffany> :s
21:26:06 <fizzie> Though since "gcc -pipe" is supported, I suppose all the parts should be pipe-friendly.
21:26:28 <fizzie> Maybe it was nasm that was pipe-unfriendly instead.
21:26:41 <Gregor> fizzie: That wouldn't surprise me enormously.
21:31:42 -!- monqy has joined.
21:44:50 -!- Sgeo has joined.
21:46:43 * Sgeo is thinking of auditioning for Grease at the college
21:48:09 <oerjan> <Gregor> Seems to be special-cased for @messags.
21:48:40 <oerjan> no, it just only supports two letters of difference, and it must be unambiguous which is closest
21:49:14 <oerjan> @massogis
21:49:14 <lambdabot> Unknown command, try @list
21:49:20 <oerjan> @massoges
21:49:20 <lambdabot> You don't have any new messages.
21:51:06 -!- Patashu has joined.
21:51:09 <fizzie> @passages
21:51:10 <lambdabot> You don't have any new messages.
21:51:15 <fizzie> Heh.
21:52:38 <oerjan> 19:51:08: <CakeProphet> so is there any way Ord could be used to represent the entire partial order.
21:52:41 <oerjan> 19:51:18: <CakeProphet> in particular that a > bottom
21:53:08 <oerjan> there is no reliable way to have a > bottom always return True, if it looks at the second argument at all
21:53:24 <oerjan> _some_ bottoms can be catched, but not all
21:53:35 <oerjan> and that is not pure code
21:53:48 <Phantom_Hoover> @piss
21:53:48 <lambdabot> Maybe you meant: list ping
21:53:52 <Phantom_Hoover> :(
21:54:31 <Sgeo> @pins
21:54:31 <lambdabot> pong
21:54:54 <oerjan> @info is one that confuses people
21:54:55 <lambdabot> is one that confuses people
21:55:10 <Sgeo> @echo hm
21:55:11 <lambdabot> echo; msg:IrcMessage {msgServer = "freenode", msgLBName = "lambdabot", msgPrefix = "Sgeo!~Sgeo@ool-ad034d00.dyn.optonline.net", msgCommand = "PRIVMSG", msgParams = ["#esoteric",":@echo hm"]} rest:"
21:55:11 <lambdabot> hm"
21:56:07 <oerjan> @achoo
21:56:08 <lambdabot> echo; msg:IrcMessage {msgServer = "freenode", msgLBName = "lambdabot", msgPrefix = "oerjan!oerjan@sprocket.nvg.ntnu.no", msgCommand = "PRIVMSG", msgParams = ["#esoteric",":@achoo"]} rest:""
21:56:34 <oerjan> i guess the first word gives that away
21:59:45 <Phantom_Hoover> @info
21:59:45 <lambdabot> ()
21:59:59 <Phantom_Hoover> What's that getting corrected to?
22:00:16 * oerjan cackles evilly
22:01:07 -!- Gregor-WebChatYA has joined.
22:02:05 <Phantom_Hoover> WebChat, ya?
22:03:17 <Gregor-WebChatYA> It was supposed to be WebChatYAY, but I ran out of characters :P
22:03:28 <oerjan> ya know
22:03:45 <Phantom_Hoover> GregorWebChatYAY?
22:03:59 <oerjan> also does this mean you did not see the above...
22:04:01 <oerjan> @passages
22:04:02 <lambdabot> You don't have any new messages.
22:04:26 <Gregor-WebChatYA> I could logread if it's THAT important.
22:04:52 <oerjan> well it _was_ a logreading response to you
22:04:59 <Phantom_Hoover> fizzie's crowning achievement.
22:05:16 <oerjan> important, is anything on irc important.
22:05:21 <Gregor-WebChatYA> Ah
22:05:28 <Gregor-WebChatYA> Yes, I'm glad to know all the @messwtfisms that work.
22:06:10 <oerjan> @fun 2+2
22:06:11 <lambdabot> 4
22:11:42 -!- azaq23 has quit (Quit: Leaving.).
22:13:09 -!- sllide has quit (Ping timeout: 245 seconds).
22:13:24 * Phantom_Hoover → sleep
22:13:26 -!- Phantom_Hoover has quit (Quit: Leaving).
22:16:56 <oerjan> @dead 42
22:16:57 <lambdabot> Plugin `dummy' failed with: Prelude.read: no parse
22:17:00 <oerjan> darn
22:17:20 <oerjan> @dead "you blew it up! you maniacs!"
22:17:21 <lambdabot> you blew it up! you maniacs!
22:21:45 -!- Gregor-WebChatYA has quit (Quit: Page closed).
22:22:53 <Sgeo> I officially hate myself
22:24:05 <Sgeo> http://pastie.org/private/woo2ngzmdcv9qpep4imjg
22:29:22 -!- nooga has quit (Ping timeout: 258 seconds).
22:31:07 -!- Slereah has quit (Ping timeout: 264 seconds).
22:31:35 <monqy> why did you do this
22:31:38 -!- GuestIceKovu has joined.
22:32:18 <oerjan> > let range = [0,1] in replicateM 9 range -- sorry :P
22:32:19 <lambdabot> [[0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,1],[0,0,0,0,0,0,0,1,0],[0,0,0,0,0,0,0...
22:33:10 <oerjan> i assume there's supposed to be something inside the inner one
22:33:54 <oerjan> :t Array.fromList
22:33:55 <lambdabot> Not in scope: `Array.fromList'
22:34:13 <oerjan> @hoogle [a] -> (i,i) -> Array i a
22:34:14 <lambdabot> Data.Array.IArray listArray :: (IArray a e, Ix i) => (i, i) -> [e] -> a i e
22:34:14 <lambdabot> Data.Array.MArray newListArray :: (MArray a e m, Ix i) => (i, i) -> [e] -> m (a i e)
22:34:14 <lambdabot> Data.Array.MArray newArray :: (MArray a e m, Ix i) => (i, i) -> e -> m (a i e)
22:34:16 -!- iamcal has quit (Remote host closed the connection).
22:35:27 <oerjan> > listArray ((1,1),(3,3)) <$> let range = [0,1] in replicateM 9 range
22:35:28 <lambdabot> [array ((1,1),(3,3)) [((1,1),0),((1,2),0),((1,3),0),((2,1),0),((2,2),0),((2...
22:43:25 -!- copumpkin has joined.
22:46:57 <Sgeo> Maybe calculating an equation 21^9 times isn't the way to go here
22:47:02 <Sgeo> > 21**9
22:47:03 <lambdabot> 7.94280046581e11
22:47:04 <monqy> perhaps
22:47:33 <Sgeo> (And I can't believe I was planning on 201^9 times)
22:47:35 <oerjan> _could_ be
22:47:36 <Sgeo> > 201**9
22:47:37 <lambdabot> 5.3550621652227346e20
22:47:58 <Sgeo> I should do it in C. It'll be faster.
22:48:02 <Sgeo> ^^joke
22:48:09 <monqy> ok
22:48:53 <oerjan> nah, everyone knows that for _really_ huge equation loops you need FORTRAN
22:49:21 <oerjan> also, a supercomputer, which might be a bigger problem.
22:50:11 * Sgeo looks again at that number and wonders why it's considered huge
22:51:04 <oerjan> i assume that depends on how complicated each equation is.
22:51:14 <Sgeo> determinant = a1 * b2 * c3 - a1 * b3 * c2 - a2 * b1 * c3 + a2 * b3 * c1 + a3 * b1 * c2 - a3 * b2 * c1
22:51:18 <Sgeo> Simple
22:51:31 <oerjan> aha
22:51:57 <oerjan> you can combine some terms there
22:53:22 <tiffany> http://www.wolframalpha.com/input/?i=a1+*+b2+*+c3+-+a1+*+b3+*+c2+-+a2+*+b1+*+c3+%2B+a2+*+b3+*+c1+%2B+a3+*+b1+*+c2+-+a3+*+b2+*+c1+
22:53:29 <tiffany> wolfram alpha didn't seem to find any to combine
22:53:29 * Sgeo decides he'd rather just do random trials
22:53:57 <oerjan> tiffany: um that's because wolfram alpha is not trying to optimize it for calculating
22:54:06 <tiffany> :d
22:54:17 <oerjan> a1 * (b2 * c3 - b3 * c2) etc.
22:54:19 <Sgeo> I think a million trials might be a bit more reasonable?
22:54:55 <tiffany> I ran 500 000 000 calculations of x*x with my lua interpreter and 500 000 000 of x^2 and x*x was 1600 cycles and x^2 was 600
22:54:57 <tiffany> :s
22:55:10 <monqy> I remember you saying this before
22:55:11 <oerjan> tiffany: i saw you mentioned
22:55:25 <tiffany> oh
22:55:27 <tiffany> sorry
22:56:23 <oerjan> Sgeo's may be harder though for the compiler to rearrange, because floating point issues means you don't get _exactly_ the same thing
22:56:41 <Sgeo> I'm only using integers in the loop
22:57:02 <oerjan> ah. well then it might be overflow issues.
22:57:17 <Gregor> OK, who's going to sing the Befunge song if I write it?
22:57:20 <Gregor> I see Sgeo volunteering.
22:57:41 -!- iamcal has joined.
22:57:54 <tiffany> 64bit signed ints overflow on the 97th number in the fibonacci set
22:58:01 <monqy> ok
22:59:19 <oerjan> > drop 95 $ fix(scanl(+)0.(1:)) :: [Int]
22:59:21 <lambdabot> [-4953053512429003327,-3659523366270331776,-8612576878699335103,61746438287...
22:59:33 <oerjan> ...that doesn't look 64 bit
22:59:41 <tiffany> o.o
22:59:54 <monqy> > maxBound :: Int
22:59:55 <lambdabot> 9223372036854775807
23:00:00 <oerjan> > drop 95 $ fix(scanl(+)0.(1:)) :: [Int64]
23:00:03 <lambdabot> [-4953053512429003327,-3659523366270331776,-8612576878699335103,61746438287...
23:00:06 <tiffany> hm
23:00:06 <oerjan> wat
23:00:15 -!- pikhq has quit (Read error: Operation timed out).
23:00:16 <tiffany> maybe it overflowed before then
23:00:31 <oerjan> > drop 50 $ fix(scanl(+)0.(1:)) :: [Int64]
23:00:33 <lambdabot> [12586269025,20365011074,32951280099,53316291173,86267571272,139583862445,2...
23:01:07 <oerjan> > dropWhile ((>0).snd) . zip [1..] $ fix(scanl(+)0.(1:)) :: [Int64]
23:01:08 <lambdabot> Couldn't match expected type `GHC.Int.Int64'
23:01:08 <lambdabot> against inferred type ...
23:01:55 <oerjan> > dropWhile ((>0).snd) . zip [1..] $ (fix(scanl(+)0.(1:)) :: [Int64])
23:01:56 -!- pikhq has joined.
23:01:57 <lambdabot> [(1,0),(2,1),(3,1),(4,2),(5,3),(6,5),(7,8),(8,13),(9,21),(10,34),(11,55),(1...
23:02:01 <oerjan> er
23:02:17 <oerjan> > dropWhile ((>0).snd) . drop 10 . zip [1..] $ (fix(scanl(+)0.(1:)) :: [Int64])
23:02:19 <lambdabot> [(94,-6246583658587674878),(95,1293530146158671551),(96,-495305351242900332...
23:02:29 <oerjan> aha
23:02:48 <tiffany> I had 97 and 94 mixed up
23:02:57 <tiffany> I wonder where the other thing it mixed up with is
23:02:59 <oerjan> > drop 92 . zip [1..] $ (fix(scanl(+)0.(1:)) :: [Int64])
23:03:01 <lambdabot> [(93,7540113804746346429),(94,-6246583658587674878),(95,1293530146158671551...
23:04:51 <Sgeo> Ugh
23:05:04 <monqy> hi
23:05:16 <Sgeo> I should have told my professor that I predict that it's very likely that three random planes will intersect a unique point
23:05:27 <Sgeo> Because that's what I was suspecting, and that's the result
23:07:05 -!- cheater_ has quit (Ping timeout: 260 seconds).
23:07:31 -!- pikhq_ has joined.
23:07:33 -!- pikhq has quit (Ping timeout: 260 seconds).
23:07:46 <Sgeo> Unless there's a mistake (and I don't mean code looking like crap as a mistake) in https://gist.github.com/f3a03b13c555aa5468cb
23:09:04 -!- cheater_ has joined.
23:09:19 <oerjan> well yes that sounds about right. in 3d, that is.
23:09:46 <oerjan> _two_ planes are likely to intersect in a line. that line is likely to intersect another plane in a unique point.
23:10:20 <oerjan> where "likely" is "with probability 1" for a reasonably random selection.
23:11:04 <Sgeo> Yeah, I was thinking something like that too
23:11:08 <oerjan> http://en.wikipedia.org/wiki/General_position
23:11:13 <Sgeo> And it's more obvious when you look at 2 lines
23:11:27 <Sgeo> What's the chance of two lines having the same slope? 0.
23:11:34 <tiffany> wouldn't the intersections of 3 planes be the intersection of the intersection of the 3 lines created from the intersections of each plane with each other one?
23:11:36 <tiffany> :s
23:11:53 <oerjan> tiffany: yes but those 3 lines are not independent of each other
23:12:24 <tiffany> I am amazingly bad at doing geometry after school
23:12:30 <oerjan> while the line you get from 2 independent planes is independent of the third one
23:13:24 <oerjan> tiffany: for example it's obvious that if _two_ of the lines intersect in a point, then the third one must too
23:13:37 <oerjan> because that means all three planes intersect there
23:13:48 <tiffany> mm
23:24:28 -!- cheater_ has quit (Ping timeout: 260 seconds).
23:32:19 <oerjan> see a drünk mööse http://www.dagbladet.no/2011/09/07/nyheter/dyrenes_nyheter/dyr/elg/jakt/18009987/
23:34:34 -!- ais523 has quit (Remote host closed the connection).
23:37:26 <Sgeo> I thought of another way of thinking about it, but since variables are being multiplied by variables, it might not be correct:
23:37:42 <Sgeo> The system would have to fall on a single 9-dimensional hyperplane in 10-dimensional space
23:38:40 -!- cheater has joined.
23:39:53 <oerjan> i'm not entirely convinced of that
23:39:56 * Sgeo plays with Wolfram Alpha for a bit
23:40:40 <oerjan> but as i don't actually really know algebraic geometry...
23:40:47 <Sgeo> Maybe not a hyperplane, but a 9-dimensional construct of some sort?
23:41:26 <oerjan> that sounds more likely.
23:42:33 <Sgeo> Given 8 variables in the 3x3 determinant equation, could you figure out what the 9th would have to be for the determinant to be 0?
23:42:50 <Sgeo> I think that would force it to be a 9-dimensional figure
23:42:56 <oerjan> actually there are at least two possibilities: the three planes don't intersect in a common point at all, and they intersect in an entire line or more (well "more" would mean they're all the same plane)
23:42:59 <Sgeo> Wait, no, 8-dimensional/
23:43:15 <oerjan> oh hm
23:43:26 <Sgeo> 8-dimensional figure in 9d space
23:43:49 <oerjan> oh and you are not getting _all_ planes from 3 variables that way.
23:44:10 <Sgeo> Hmm? Why not?
23:44:42 <Sgeo> Each existent system of 3 planes should be representable in 9d space, or am I mistaken?
23:45:01 <oerjan> degenerate case. a*x + b*y + c*z = d is a general plane iirc, and you can remove one of a,b,c,d but only if the one you remove is _non-zero_
23:45:19 <Sgeo> No, just planes embedded in 3d space, and it takes 6 numbers to specify each... argh I'm confused
23:46:14 <oerjan> 4 numbers is sufficient. and 3 would be except for the degenerate case, iirc
23:47:01 <oerjan> and also at least one of a,b,c must be non-zero, i think
23:47:06 <Sgeo> So, 12d space to represent all systems of 3 planes
23:47:42 <oerjan> no, it's 9d, but not given by 9 variables in linear equations
23:48:00 <Sgeo> Oh! The determinants equation doesn't specify... location of each plane
23:48:03 <Sgeo> I .. think
23:48:08 * Sgeo is confused
23:49:09 <oerjan> Sgeo: you can give each plane as either a*x+b*y+c*z = 1 or as a*x+b*y+c*z = 0
23:50:14 <Sgeo> So, 9 dimensions of continuous space and 1 discrete dimension of 2 possibilities?
23:50:27 <Sgeo> Why am I still thinking in terms of hyperspace
23:50:36 <Sgeo> 9+1D is not intuitive to me, believe it or not
23:50:42 <oerjan> "discrete dimension" is not really a concept in this subject afaik
23:51:12 <oerjan> it's a 9d space. it just doesn't happen to be a hyperplane.
23:51:58 <Sgeo> What does the entity on which all systems of 3 planes that don't intersect at a point look like when embedded in the 9d space?
23:52:21 <oerjan> well most of it is in the = 1 part, which _is_ a hyperplane.
23:52:28 <oerjan> i think.
23:52:29 <Sgeo> How can something be a hyperplane or not without being embedded in a higher space?
23:53:03 <oerjan> oh hm
23:53:17 <Sgeo> I don't get how you distinguish between =1 and =0 without an additional dimension
23:53:30 <Sgeo> Maybe my idea of dimensions is confused
23:53:56 <oerjan> Sgeo: yes. dimension is an intrinsic property of a topological space.
23:54:16 <oerjan> if you take the union of two n-dimensional subspaces, that is still n-dimensional.
23:55:09 <Sgeo> O.O
23:55:13 -!- Braber01 has joined.
23:55:53 <Braber01> um odd question, does anybody know the f**kf**k counterparts to brainf**k?
23:56:13 <oerjan> Braber01: you were answered last time, with a link. is it not on the wiki page?
23:56:14 <Sgeo> If I have two lines, and take their union, is the specification of which line somehow embeddable in the single value I'd normally need to specify my location on one line?
23:56:24 * oerjan checks
23:56:34 <Braber01> I can't get wiki for somereason,
23:56:54 <oerjan> Braber01: oh right hm. try esoteric.voxelperfect.net
23:57:10 <oerjan> esolangs.org is having dns issues
23:57:28 <oerjan> (the dns provider is actually closing :( )
23:58:04 <oerjan> http://esoteric.voxelperfect.net/wiki/Fuckfuck
23:58:53 * Braber01 wonders why wiki works now, but didn't earler, oh well.
2011-09-08
00:00:18 <monqy> what oerjan said
00:01:05 <oerjan> Braber01: it's working with the different name. our wiki itself is fine, but the name server provider for one of the names is closing down.
00:01:21 <oerjan> so you need to use the other address.
00:01:42 <Braber01> do you think my IP will get banned if I convert a 99 bottles bf program to what I like to call forkfork?
00:02:03 <Braber01> baned from 99-bottles-of-beer.net
00:02:14 -!- sebbu2 has changed nick to sebbu.
00:02:24 <oerjan> Sgeo: the concept of dimension as "number of variables you need to describe a shape" is not the same as topological dimension.
00:02:37 <Sgeo> Oh
00:02:41 <oerjan> Braber01: i dunno
00:03:33 <Braber01> neither do I but at least I'll have a fun project to do over the weekend.
00:04:30 <oerjan> Braber01: no one will mind if you put it on our wiki, at least. (well not for the swearing, anyhow. there are some who have a burning hate against brainfuck derivatives.)
00:05:13 <itidus20> but thats only for the reason that there are so many brainfuck derivatives that even a smee hee like me knows about them
00:06:06 <Braber01> I think I kind of liked i-hate-your-bf-deritive-i-really-do I thought that article was pretty funny.
00:06:21 <monqy> there are at least two reasons to hate brainfuck derivatives
00:06:21 <oerjan> Sgeo: but i think if you _really_ want to understand the concept of this as it relates to hyperplane stuff, then algebraic geometry is probably the field for it.
00:06:25 <monqy> 1) there are so many it's getting old
00:06:45 <Sgeo> monqy, do you hate me.
00:06:49 <monqy> 2) they're typically really uncreative, just renaming the commands or adding a new command or something like that
00:06:53 <monqy> Sgeo: what did you do
00:07:02 <Sgeo> monqy, made a brainfuck derivative.
00:07:05 <monqy> :'(
00:07:10 <monqy> some brainfuck derivatives are good
00:07:14 <monqy> but
00:07:15 <monqy> it's rare
00:07:19 <itidus20> By appending an exclamation mark ('!') a command can be repeated, without the need to write the word again. <-- that right there is very clever indeed
00:07:45 <oerjan> itidus20: yeah +!!!!! is _so_ much better than ++++++ :P
00:07:47 <Sgeo> I think zzo38 using my BF derivative is not necessarily an indicator of goodness
00:08:12 <oerjan> oh wait this is fuckfuck
00:08:24 <oerjan> so i guess it is a slight improvement
00:08:38 <itidus20> oerjan: but the idea is genius
00:08:43 <Braber01> no it's Trourettes. LOL
00:08:51 <monqy> ok
00:09:23 <oerjan> fucking tourettes, bitches
00:11:03 <oerjan> itidus20: wait are you actually making a euphemism for "smeg head" :P
00:11:50 <oerjan> oh it's canonical
00:12:04 <itidus20> i don't follow red dwarf much but i saw a youtube of it the other day with that euphemism
00:13:18 <oerjan> i haven't exactly seen every episode either.
00:14:06 <itidus20> i'm no lister.. even though i consider myself quite possibly the least nerdiest in here
00:14:14 <itidus20> that is not saying much
00:15:10 <oerjan> no. no it isn't.
00:15:10 <itidus20> i don't think this room really attracts lister types
00:15:32 <lifthrasiir> oerjan: or you can use a binary encoding so +!?! is really + followed by five copies of it
00:15:42 <oerjan> lifthrasiir: ooh, fancy!
00:15:58 <lifthrasiir> (boob!?! in fuckfuck, of course)
00:16:09 <itidus20> wow.....
00:16:14 <itidus20> ha ha hahahaha
00:16:27 <Braber01> I like tits.
00:16:27 <itidus20> i might never look at !?!?! the same
00:16:47 <Braber01> . . .
00:16:50 <itidus20> that .. is even more genius
00:17:21 <itidus20> now to translate hello world into binary encoded fuck fuck
00:18:18 <elliott> hello
00:19:00 <monqy> hi
00:19:02 <oerjan> eek, an elliott
00:19:08 <elliott> whats
00:19:09 <elliott> goin on
00:19:14 <monqy> bad thigns....
00:19:20 <elliott> what
00:19:30 <oerjan> elliott: fuckfuck
00:19:35 <elliott> oh
00:19:36 <elliott> why
00:19:38 <elliott> and how do i stop it
00:19:44 <Gregor> $ gcc
00:19:44 <Gregor> gcc: fatal error: no input files
00:19:44 <Gregor> compilation terminated.
00:19:46 -!- kwertii has quit (Quit: bye).
00:19:51 <Gregor> When did they change this error message???
00:20:00 <Gregor> It's been "gcc: no input files" for DECADES.
00:20:08 <elliott> Still is on this old version
00:20:32 <oerjan> Gregor: maybe they discovered it had actually killed someone.
00:20:35 <monqy> $ gcc
00:20:35 <monqy> gcc: fatal error: no input files
00:20:36 <monqy> compilation terminated.
00:20:37 <monqy> weeping
00:22:00 <lifthrasiir> boob!???!!! cock boob!!!?? cock boob!!? cock! boob!? cock tits!????!? cock tits!?!! cock boob!?!?!!? cock tits!!! cock boob!? cock tits!?! cock tits!!! cock tits!????!? cock tits!?!!? cock
00:22:04 <lifthrasiir> great.
00:22:14 <elliott> so beautiful.
00:22:20 <itidus20> wow.
00:22:33 <itidus20> so fast
00:22:53 * Braber01 is ashamed that I startted something...
00:23:29 <lifthrasiir> is Uniquode still being updated?
00:23:35 <elliott> ask taneb :P
00:24:50 <lifthrasiir> i recall one from the list of ideas that recommends the use of chinese characters for golfing
00:25:59 <oerjan> <meme>Scumbag Taneb makes Uniquode; never gets beyond 256 commands.</meme>
00:26:19 <elliott> 17:22:58: <Gregor> "Apple decided to use an archaic object file format for Mac OS X, a variant of the old aout format. This format predates dynamic linking. Apparently without proper staffing, they have to reinvent lots of stuff for their obsolete object format. Had they chosen a current object formats, they could have taken more benefit of the the quality work already done within the GNU project."
00:26:19 <elliott> 17:22:59: <Gregor> -- http://gmplib.org/macos.html
00:26:19 <elliott> 17:23:01: <Gregor> :P
00:26:19 <elliott> GNUUUUUUUUUUUUU
00:26:33 <lifthrasiir> oerjan: no, he can still combine Uniquode with Unispace
00:27:07 <oerjan> eek
00:27:16 <Gregor> elliott: I love how unbiased that is :P
00:27:49 <elliott> Gregor: You see, Apple failed to create GNU/Hurd.
00:27:54 <elliott> SO THEY HAVE FAILED TERRIBLY
00:27:55 <Gregor> BASTARDS
00:28:19 <Gregor> Well, to be fair, they got close, in that they used a microkernel infrastructure, but missed pretty terribly as they put a monolithic kernel on the microkernel.
00:28:38 -!- cheater has quit (Ping timeout: 246 seconds).
00:29:09 <elliott> 19:48:38: <Gregor> Huh
00:29:10 <elliott> 19:48:44: <Gregor> Seems to be special-cased for @messags.
00:29:12 <elliott> Gregor: It just spell-corrects.
00:29:17 <elliott> ?pul \f x -> f x
00:29:18 <lambdabot> id
00:29:18 <Gregor> We resolved that.
00:29:21 <pikhq_> Gregor: That's been the standard means of using Mach.
00:29:28 <elliott> I resolved it sooner, relativity-wise.
00:29:33 <pikhq_> Sadly.
00:29:34 <Gregor> pikhq_: IT'S NOT THE HURD WAY
00:29:39 <elliott> 20:17:25: <Gregor> 4) ... GNU lightning?
00:29:39 <elliott> 20:17:37: <Gregor> There aren't really any good JIT libraries, are there :P
00:29:45 <Gregor> HURD IS A HIRD OF UNIX-REPLACING DAEMONS
00:29:45 <elliott> Gregor: GNU lightning is pretty good, so is LLVM :P
00:29:52 <Gregor> GNU lightning is good???
00:29:54 <elliott> LLVM is better but probably harder to use.
00:29:54 <pikhq_> The Hurd way involves not hitting 1.0 for decades.
00:29:56 <elliott> Gregor: Well, it works?
00:30:19 <elliott> Racket, GNU Smalltalk and CLISP use it apparently, so it can't be so terrible.
00:30:26 <Gregor> Huh ...
00:30:28 <elliott> It's probably not very fast though.
00:30:35 <Gregor> That's probably almost fifteen end users.
00:30:36 <elliott> "It does not provide register allocation, data-flow, and control-flow analysis, or optimization."
00:30:41 <elliott> Har har har
00:30:43 <Gregor> :P
00:30:55 <elliott> Racket and CLISP are pretty big :P
00:31:05 <pikhq_> Also. I'm pretty sure all the work on Mach-O was done before Apple bought NeXT.
00:31:10 <Gregor> elliott: Yeah, I'm bein' a durp.
00:31:38 <Gregor> pikhq_: I was laughing at how stupid that whole paragraph was, not agreeing with it. Although it is a silly format.
00:31:54 <elliott> I like the implication that writing a binutils is the HARDEST THING EVR.
00:31:55 <elliott> EVER.
00:32:04 <elliott> Presumably because GNU aren't very good at it.
00:32:08 <Gregor> X-D
00:32:08 <pikhq_> elliott: Not writing a binutils.
00:32:11 <pikhq_> Porting one.
00:32:28 <pikhq_> Which *seems* to be one of the few things that's easy with GNU binutils.
00:32:48 <pikhq_> The whole thing is based around an object format abstraction library, after all.
00:33:04 <elliott> 20:42:14: <Gregor> I wonder if there's a crazy mix of options that would cause GCC to compile a single function and output the machine code for it, not in any object file format.
00:33:12 <Gregor> elliott: We found one.
00:33:14 <elliott> Gregor: with -S , filtering and gas options, I suspect so
00:33:23 <elliott> Gregor: But it'll be SO SLOW :P
00:33:25 <Gregor> No, I'm not going to implement gcc as a JIT, though I desperately want to.
00:33:40 <Gregor> (GNU lightning) "The available backends cover the x86, SPARC and PowerPC architectures." I hope this at least includes x86_64 ...
00:33:57 <pikhq_> Bit silly if it didn't.
00:34:08 <elliott> Gregor: Your template JIT is probably the best you'll get for Fythe without writing something better yourself, I think.
00:34:15 <Gregor> Noooooooooooooose
00:34:16 <pikhq_> x86_64 is easy to target from x86-land if you're not retarded.
00:34:19 <elliott> I mean, LLVM ain't exactly designed for compiling things tiny bits at a time
00:34:28 <elliott> Which Fythe practically mandates :P
00:34:43 <Gregor> Piffle.
00:34:55 <itidus20> im not sure if i made a mistake converting this in notepad but: fuck boob!??? arse shag boob!!! tits butt shag cock fuck boob!!? arse shag boob!! tits butt shag boob cock boob!!? cock! boob!? cock fuck!? boob!!! arse shag boob!! tits butt shag cock fuck!? boob!??! arse shag boob!??? tits butt shag tits!? cock shag!! cock boob!? cock tits!?! cock tits!!! cock fuck! boob cock
00:34:58 <elliott> Any optimisation pretty much kills that.
00:35:22 <pikhq_> Aside from trivial ones.
00:35:28 <Gregor> My goal was to have fastjit be the baseline, and use something else as the optimizing JIT for oft-called functions.
00:35:32 <Gregor> fastjit itself ain't goin' nowhere.
00:35:38 <elliott> Right.
00:35:44 <elliott> I'd just write my own :P
00:35:53 <Gregor> But Idonwanna :P
00:35:58 <elliott> Sucks to depend on two totally different JITs
00:36:02 <elliott> Especially interoperability
00:36:21 <Gregor> SpiderMonkey has two JITs and an interpreter :P
00:36:53 <elliott> Yeah, but I mean "you have to ensure LLVM works on your machine and links in and also that fastjit works on your machine" vs. "you have to check our two related JITs work on your machine"
00:37:13 -!- javawizard has quit (Read error: Operation timed out).
00:37:32 <Gregor> Mmmmm, fair enough, although the slow JIT ought to be optional.
00:37:40 <elliott> 21:53:08: <oerjan> there is no reliable way to have a > bottom always return True, if it looks at the second argument at all
00:37:40 <elliott> 21:53:24: <oerjan> _some_ bottoms can be catched, but not all
00:37:40 <elliott> 21:53:35: <oerjan> and that is not pure code
00:37:46 <elliott> oerjan: you can do a lot with unamb, mind you
00:38:07 <elliott> Gregor: Shrug, it's more like one JIT that has two compilers :P
00:38:09 -!- jcp|other has joined.
00:38:46 <Gregor> elliott: Are you referring to SpiderMonkey?
00:39:09 <elliott> Gregor: No, I'm talking about writing your own slow-JIT
00:39:17 <Gregor> Oh
00:39:35 <Gregor> Bleh :P
00:40:03 <Gregor> OK, time to implement my fork-to-GCC-JIT!
00:40:06 -!- jcp has quit (Ping timeout: 252 seconds).
00:40:32 <Gregor> AKA JWGCCGATI (Just-When-GCC-Gets-Around-To-It compilation)
00:41:02 <elliott> God, don't :P
00:41:06 -!- cheater has joined.
00:41:14 <elliott> Does gcc really not have a library after all these years
00:41:20 <Gregor> I know!
00:41:24 <Gregor> It's shocking!
00:41:47 <Gregor> Though either way it's still a traditional compiler in the sense that it writes assembly. So even with a library, it's be a slow piece of shit :P
00:41:49 -!- Patashu has quit (Quit: MSN: Patashu@hotmail.com , Gmail: Patashu0@gmail.com , AIM: Patashu0 , YIM: patashu2 .).
00:41:51 <Gregor> *it'd be
00:42:04 <elliott> I can't wait until gcc stops being a thing that anyone takes seriously.
00:42:09 <coppro> ^
00:42:20 <elliott> Also clang and every other piece of UNIX software.
00:42:27 <elliott> Wait, that arrow didn't point in both directions.
00:42:31 <elliott> Darn, I can't put wordsi nto your mouth.
00:46:43 -!- jcp has joined.
00:48:22 <Braber01> >v<^ make sense of that LOL.
00:48:53 <oerjan> <elliott> oerjan: you can do a lot with unamb, mind you <-- i don't think that will help make a > bottom work
00:49:01 <elliott> probably not :P
00:49:12 <elliott> depends how screwy your ordering is :)
00:50:30 <Braber01> do I really want to plug my laptop in?
00:51:11 <oerjan> assuming > is still antisymmetric, a > a and a > bottom need to be different for such an a
00:51:27 <CakeProphet> Also I was wondering if you including bottom in an Ord instance, or would that require solving the halting problem?
00:51:30 <oerjan> a >= bottom might work only for a the unique top element
00:51:32 <CakeProphet> *could include
00:51:38 <oerjan> CakeProphet: that
00:51:50 <oerjan> 's what i was saying you couldn't
00:52:10 <elliott> yeah, (inf >= bottom) is perfectly doable
00:52:15 <CakeProphet> oh we're talking about something I asked a while ago?
00:52:18 <CakeProphet> okay.
00:52:20 <oerjan> elliott: sup, not inf
00:52:28 <oerjan> or wait
00:52:34 <oerjan> you mean infinity
00:52:35 <elliott> infinite :P
00:52:37 <elliott> y
00:52:39 <elliott> yeah
00:52:42 <elliott> im alzy
00:52:54 <oerjan> elliott: inf has a rather different meaning once partial orders are involved
00:53:17 <oerjan> although it then does need an argument
00:53:27 <elliott> i know :P
00:53:30 <elliott> but im alzy
00:53:47 <Braber01> *lazy
00:54:12 <oerjan> CakeProphet: i logread you, then elliott logread my response to you
00:54:57 <Braber01> Damnit I want a cake but I'm on weight watchers >:(
00:55:19 <oerjan> Braber01: some people here have lately taken to misspell things a lot on purpose
00:55:41 <Braber01> *reverts tO lolcats
00:55:49 <Sgeo> *alot
00:55:56 * oerjan hugs alot
00:56:04 <Braber01> I has a bukkit
00:56:07 <monqy> hi
00:56:30 <Braber01> CAN I HAS STDIO?
00:56:34 <elliott> no Braber01 no
00:56:34 <monqy> no
00:56:38 <elliott> lolcode is banned
00:56:39 <CakeProphet> help too many #esoteric memes.
00:56:43 <monqy> im agre with elliott
00:56:44 <oerjan> which is strange because we also frequently correct our own spelling, and sometimes other's
00:56:55 <elliott> im so aggry with monqy
00:56:56 <elliott> is aggry a word
00:56:59 <elliott> i thought it was
00:57:07 <oerjan> CakeProphet: alot is not an #esoteric meme.
00:57:40 <CakeProphet> I see.
00:57:53 -!- Braber01 has quit (Quit: ZIRC 0.3 - 100% zsh, woot.).
00:57:58 <elliott> ah
00:58:04 <oerjan> elliott: aggry beads
00:58:08 <elliott> im uh
00:58:11 <elliott> so upset at our loss
00:58:24 <oerjan> there are three words in the english language: angry, hungry and aggry.
00:58:30 <elliott> me too
00:58:43 <oerjan> wellknownfact
00:59:11 <elliott> im an oldknown fact
00:59:27 <oerjan> i think the misspellings were too much for Braber01
00:59:52 <elliott> or the lolcode fascism
00:59:58 <oerjan> yes.
01:00:01 <elliott> its ok we're just too brilliant
01:00:07 <CakeProphet> debugging Python is so fun
01:00:11 <elliott> eventually we'll become so brilliant that _nobody_ will be able to stand being in this channel
01:00:15 <elliott> not even me
01:00:24 <oerjan> last elliott standing
01:00:36 <oerjan> btw is elliott alot? it's suspiciously close
01:00:57 <oerjan> bitching alot
01:01:19 <elliott> waht
01:01:26 <elliott> hepl
01:01:46 <elliott> heelp
01:01:55 <elliott> heelq
01:02:10 <elliott> monqy: quantum
01:02:11 <oerjan> funny, it's like someone is shouting, but it's being stopped by my spelling filter
01:02:22 <oerjan> quantum is good
01:02:23 <monqy> elliott: hi
01:02:42 <elliott> hi;m
01:03:23 <elliott> today, i write more shiro code for good mycology adventure aftershave cocaine racketeer
01:04:11 <elliott> monqy is phantom
01:04:16 <monqy> hi
01:04:31 <elliott> HI
01:04:39 <monqy> hows my cology
01:04:50 <monqy> can shiro run fungot
01:04:51 <fungot> monqy: deleting the lines " italy openly propagates irredentistic ideas even in the southern german leagues, which directs, fnord,
01:05:01 <elliott> monqy: no but soon
01:05:05 <elliott> i implement everything it wants just bugs???
01:05:13 <monqy> bugs...
01:06:21 <elliott> ugbs
01:10:17 <Sgeo> fungot needs a Homespring style
01:10:18 <fungot> Sgeo: ' ' he or she' is widespread. universal male is widespread ( though becoming less so). --user:cybbecybbe 21:10, apr 28, 2005 ( utc
01:10:28 <elliott> no
01:11:47 <CakeProphet> what exactly would the data set be?
01:11:57 <CakeProphet> are there large corpii of homespring programs?
01:13:53 <copumpkin> corpora
01:14:16 <copumpkin> </latin nazi>
01:17:12 <CakeProphet> I don't think a Roman would understand what that means.
01:17:21 <CakeProphet> </historical accuracy nazi>
01:17:24 <CakeProphet> s/Roman/ancient Roman/
01:17:34 * copumpkin is a modern roman
01:17:53 <CakeProphet> lies no such thing. If you go to Rome today it is a ghost town.
01:18:16 <monqy> are the friendly ghoss
01:18:59 <monqy> friend ghsot, ghost firend, friendhsip ghost, friendship town
01:22:59 <oerjan> the place they call rome today is just an amusement park built around the vatican city and based on asterix comics
01:23:16 <copumpkin> CakeProphet: :O
01:23:30 <copumpkin> oerjan: it's a pretty grungy amusement park :P
01:24:00 <oerjan> copumpkin: well how do you explain why they made a clown into "prime minister"?
01:24:38 <oerjan> it's just a bit of dark grey humor
01:24:40 <copumpkin> http://www.reddit.com/r/worldnews/comments/k1ndd/berlusconi_vows_to_leave_shitty_italy_in/c2gyesv
01:37:38 <elliott> god bless haskell america
01:39:25 -!- elliott has set topic: It is the 90s and there is time for the requirements of supervision and control of transmissible spongiform encephalopathies, also an Esolang event @ Hel/Finland on 3.10.2011: https://wiki.helsinki.fi/display/lambda/esoteeriset+ohjelmointikielet | god bless haskell america | 12345678 | http://codu.org/logs/_esoteric/.
01:41:26 <monqy> god bless haskell america
01:45:59 <Gregor> God bless curry.
01:46:28 <elliott> god bless haskell america
01:46:32 <CakeProphet> God bless
01:46:48 <CakeProphet> map (God bless) [haskell america, curry]
01:47:26 -!- GuestIceKovu has quit.
01:48:45 <CakeProphet> help xpath is dumb
01:49:15 <elliott> TANK LOSER
01:49:24 <elliott> tank loser friend ending
01:50:13 <elliott> friends everyone
01:51:56 <elliott> pork
01:52:59 <elliott> oerjan: brtia odsf ks
01:53:10 <CakeProphet> wow how do people get so bad at programming
01:53:13 <CakeProphet> I don't understand at all.
01:53:15 <elliott> practice
01:53:19 <elliott> learning from you
01:53:50 <CakeProphet> hey at least I know when to use for loops instead of while loops.
01:56:16 <monqy> whats a loop
01:56:16 <monqy> hlep
01:56:45 <elliott> a low-level concept used before people figured out abstraction
01:57:04 <CakeProphet> and then still used after people figured out abstraction.
01:57:53 <elliott> only by irresponsible people
01:58:28 <CakeProphet> heh
02:02:51 <elliott> Has anyone used Perl's XS to evaluate Perl code from C?
02:05:24 <CakeProphet> nope
02:06:43 <CakeProphet> http://search.cpan.org/dist/perl/pod/perlxstut.pod
02:06:49 <CakeProphet> http://search.cpan.org/dist/perl/pod/perlxstut.pod
02:06:53 <CakeProphet> er....
02:07:00 <CakeProphet> http://search.cpan.org/dist/perl/pod/perlxs.pod
02:07:21 <CakeProphet> have fun.
02:07:23 <elliott> It's not helpful; that's showing it the other way around.
02:07:25 <oerjan> what do you expect from the pod people
02:07:27 <elliott> IIRC The Camel book has something but I don't want to read it
02:07:40 <CakeProphet> I'm not entirely sure it would work the other way around.
02:07:44 <elliott> It does.
02:07:50 <elliott> You can initialise the perl interpreter from C and feed it code.
02:07:54 <elliott> I just don't remember how.
02:07:56 <CakeProphet> I mean you would just want to invoke the interpreter in C right?
02:08:14 <CakeProphet> instead of using the XS stuff directly.
02:08:30 <CakeProphet> you can always read the perl source code.
02:08:36 <elliott> Perl's C API is always called XS, to my knowledge.
02:08:42 <elliott> Whatever the controlling process is.
02:09:33 <CakeProphet> oh wait I know how to do it.
02:09:39 <CakeProphet> system("perl ...") :P
02:09:58 <elliott> Helpful
02:11:43 <CakeProphet> #perl
02:11:57 <elliott> No thanks
02:12:28 <elliott> Section 21.4. Embedding Perl (Using Perl from C)
02:12:33 <elliott> Now to get a hold of this
02:12:53 <CakeProphet> is that the camel book?
02:13:01 <elliott> Yes.
02:13:13 <elliott> OReilly - Programming Perl.pdf 4 Mb
02:13:13 <elliott> Seems a bit small...
02:13:28 <CakeProphet> trap
02:13:28 <CakeProphet> trap
02:13:30 <CakeProphet> trap
02:13:39 <elliott> Dude, I run a secure-ish operating system.
02:13:46 <CakeProphet> trap
02:13:54 <elliott> Are you trying to be annoying?
02:14:23 <elliott> Aha, here's some info.
02:16:57 <pikhq_> He's not using Adobe reader.
02:17:20 <elliott> http://search.cpan.org/~jesse/perl-5.14.1/pod/perlembed.pod oh this is useful
02:17:44 <elliott> oh, heh, this has more information than the camel book sample
02:17:47 <elliott> PERL_SYS_INIT3(&argc,&argv,&env);
02:17:47 <elliott> lol
02:19:08 <CakeProphet> http://perldoc.perl.org/perlembed.html same thing I believe
02:19:17 <elliott> /usr/lib/perl/5.10/CORE/perl.h oh dear god
02:19:22 <CakeProphet> ...yep
02:19:22 <elliott> look at that shit
02:19:25 <CakeProphet> I've seen it.
02:19:39 <elliott> oh my god it handles plan9
02:19:50 <CakeProphet> you should look at Configure
02:19:55 <elliott> jesus christ guys i just want to know the return type of perl_construct
02:20:09 <pikhq_> If it makes you feel better, Configure is autogenerated by something that inspired autoconf.
02:20:20 <CakeProphet> yes but it's still ridiculous
02:20:23 <elliott> ./proto.h:PERL_CALLCONV voidperl_construct(PerlInterpreter *my_perl)
02:20:23 <elliott> ok good
02:20:41 <pikhq_> "Inspired autoconf".
02:21:04 <oerjan> perl_construct has an inconstructible return type
02:22:01 <CakeProphet> elliott: are you being irresponsible and using loops right now?
02:22:23 <elliott> no
02:22:33 <elliott> Perl_sys_init3(&argc, &argv, &env);
02:22:34 <elliott> Perl_sys_term();
02:22:34 <elliott> ok good they're functions here
02:24:41 <CakeProphet> it looks pretty easy to call perl subroutines actually.
02:24:47 <CakeProphet> based on perlembed
02:26:03 <CakeProphet> but the example doesn't show you how to pass arguments to the subroutine.
02:26:08 <CakeProphet> just does the no argument case.
02:27:36 <CakeProphet> also http://perldoc.perl.org/perlguts.html may be of use here.
02:27:46 <CakeProphet> depending on what you're doing exactly.
02:28:01 <elliott> Evaluating Perl expressions as scalars and getting the result back.
02:28:24 <CakeProphet> then yeah perlguts will show you how to convert to-from C-Perl types.
02:28:24 <elliott> Preferably without maintaining any state between evaluations but it's understandable if that happens.
02:28:51 <CakeProphet> ...I would think the only way to do that would be to invoke a fresh interpreter each time.
02:28:58 <elliott> probably
02:29:01 <elliott> its ok
02:29:05 <elliott> if state gets maintained
02:36:30 -!- derrik has joined.
02:47:21 -!- sebbu2 has joined.
02:47:21 -!- sebbu2 has quit (Changing host).
02:47:21 -!- sebbu2 has joined.
02:49:49 -!- sebbu has quit (Ping timeout: 245 seconds).
02:51:35 <CakeProphet> I don't care what the pythonistas say
02:51:46 <CakeProphet> I'm going to use map when I just need to apply a single function to a list.
02:52:45 <Jafet> They don't speak, they hiss
02:52:59 -!- augur has quit (Remote host closed the connection).
02:53:17 <CakeProphet> Jafet: oh ho
02:54:07 <pikhq_> But functional programming is unPythonic!
02:54:23 <CakeProphet> apparently.
02:54:30 <CakeProphet> since there's such shitty support for it.
02:54:31 <pikhq_> (just like closures, garbage collection, and everything but C! :P)
02:55:12 <CakeProphet> man, why do people like Python again?
02:55:16 <Sgeo> You can do functional programming in Python! See? See? I mean, it's ugly, and not recommended, but why would you curse Python for something it can do?
02:55:17 <Sgeo> /s
02:55:18 <CakeProphet> is it just because it's easy to code?
02:55:26 <pikhq_> That's precisely why.
02:55:30 <monqy> what's easy
02:55:31 <monqy> help
02:55:35 <pikhq_> It's a bit like Perl but less awful.
02:55:40 * Sgeo might be becoming an ex-Pythonista
02:55:42 <monqy> snicker
02:55:54 * CakeProphet is an ex-pythonista
02:56:01 <Sgeo> Although not sure that Ruby is much better...
02:56:03 <monqy> I was never a python fanatic
02:56:11 <pikhq_> Ruby is like Python but more awful.
02:56:16 <monqy> yep
02:56:26 <Sgeo> more?
02:56:27 <CakeProphet> Perl is the best of the three. :)
02:56:48 <CakeProphet> though not perfect by any means.
02:56:58 <pikhq_> The implementation actually does hacks to prevent GCC from optimising their undefined behavior in undesirable ways.
02:57:07 <pikhq_> Definitely more awful.
02:58:02 <Sgeo> It's undefined behavior, why would it matter if it were optimized in some way? Or do you mean C's undefined behavior?
02:58:36 <Jafet> linux does it too; they're in good company
02:58:40 <elliott> wtf? /usr/lib/libperl.so.5.10 exists, but -lperl doesn't get it?
02:59:16 <pikhq_> Sgeo: C's.
02:59:22 <Sgeo> Oh
02:59:27 <pikhq_> elliott: -l only looks for .so
02:59:33 <Sgeo> Well, aren't there other implementations?
02:59:37 <elliott> pikhq_: what am I meant to do then
02:59:39 -!- derrik_ has joined.
02:59:47 <monqy> ln -s?
02:59:50 <monqy> hhehehe
02:59:52 -!- derrik_ has left.
02:59:59 <CakeProphet> elliott: you could rename the file. :P
03:00:04 <CakeProphet> or copy it.
03:00:09 <CakeProphet> copy is probably a better idea.
03:00:12 <pikhq_> Also, because Perl is *blithering stupid*, you're not supposed to link it with -lperl at all.
03:00:32 <monqy> personal insult to cake prohpet
03:00:49 <pikhq_> IIRC you're supposed to query the interpreter for the path to the libperl file, and make sure to set the rpath to include the path to the libperl file.
03:00:58 <oerjan> "Haskell is the only language I know of where you can't tell what wheel you just reinvented..." - alpha123
03:01:08 <monqy> what
03:01:11 <elliott> <pikhq_> Also, because Perl is *blithering stupid*, you're not supposed to link it with -lperl at all.
03:01:15 -!- derrik has quit (Ping timeout: 264 seconds).
03:01:15 <elliott> elliott@katia:~/Code/shiro$ perl -MExtUtils::Embed -e ldopts
03:01:16 <elliott> -Wl,-E -fstack-protector -L/usr/local/lib -L/usr/lib/perl/5.10/CORE -lperl -ldl -lm -lpthread -lc -lcrypt
03:01:17 <pikhq_> *By default libperl.so.foo does not go in the library search path*.
03:01:23 <oerjan> (first comment on http://stackoverflow.com/questions/7223901/haskell-what-monad-did-i-just-reinvent)
03:01:39 <elliott> Sgeo: http://timetobleed.com/the-broken-promises-of-mrireeyarv/ has information on Ruby's undefined behaviour
03:01:44 <pikhq_> *Perl. Fucking. Hates. You.*
03:01:55 <elliott> pikhq_: dude, stfu
03:02:00 <elliott> the above is the documented way to do it
03:02:05 <elliott> so clearly -lperl is meant to work
03:02:38 <pikhq_> elliott: Strange, that actually cannot work on out-of-the-box Perl.
03:02:50 <pikhq_> libperl does not install in the library search path at all.
03:03:16 <elliott> ok but seriously, i'm working with ghc here, what do i need to pass to ld to link with libperl in some VAGUELY portable awy
03:03:17 <elliott> way
03:03:41 <pikhq_> Cry.
03:03:46 <elliott> not helpful thx
03:04:09 <elliott> ld-options: /usr/lib/libperl.so.5.10
03:04:09 <elliott> this works
03:04:32 <oerjan> ghc + perl now that sounds like a match
03:04:40 <CakeProphet> I agree.
03:04:44 <elliott> oerjan: implementing the PERL fingerprint
03:04:48 <CakeProphet> in a not sarcastic way.
03:05:53 <oerjan> elliott: i sincerely hope that is not required for running fungot.
03:05:53 <fungot> oerjan: as i have, and it began in 57, as bryant still had his glory days ahead of him at that time.
03:06:21 <elliott> hmm, eval_pv
03:06:24 <CakeProphet> man JS regex is so bad.
03:06:24 <elliott> oerjan: nope
03:08:56 <CakeProphet> elliott: assuming eval_pv is how the eval operator is implemented, then you can maintain state between evals.
03:09:53 <CakeProphet> perlapi seems to seems to suggest that eval_pv is basically like eval.
03:10:05 <elliott> no shit
03:10:05 <CakeProphet> ...vaguely, granted.
03:11:32 <CakeProphet> also maybe perl_construct is not very expensive so that could be used to reset state.
03:13:05 <CakeProphet> nevermind that's a bad idea. :P
03:14:05 <CakeProphet> well, maybe not: http://perldoc.perl.org/perlembed.html#Maintaining-multiple-interpreter-instances
03:14:34 <CakeProphet> perl_destruct resets everything.
03:16:27 <CakeProphet> ...Python makes me hate exceptions.
03:17:51 <aspect> Python makes me hate lots of things. Usually myself, for forgetting how much I hate it in between uses
03:18:19 <Sgeo> I think I'm using some stupid Ruby IDE just for the editor
03:18:33 <Sgeo> Erm, editor component
03:18:57 <CakeProphet> I should probably get an IDE for Python as python-mode in emacs is especially not so great with indents.
03:19:29 <Sgeo> :/ how difficult could it be to do the right thing with indentation in Python?
03:19:46 <CakeProphet> well it's just dedenting takes more keystrokes than I would like, basically.
03:21:07 <CakeProphet> spamming tab a bunch basically cycles through all of the possible indent levels, starting with the highest level
03:21:32 <aspect> don't you just write some elisp to fix that?
03:21:47 <CakeProphet> ...well, if I had the time to learn how, sure.
03:21:54 <CakeProphet> not at the moment though.
03:21:56 <aspect> like in vim we might use a macro or a :noremap
03:22:15 <CakeProphet> usually a backspace does the right thing, but not always.
03:22:21 <aspect> see, as a vim user I long for the cleanliness of elisp
03:22:48 <Sgeo> Gah
03:23:02 <aspect> maybe Zimbu deserves a place in the esolang hall of fame
03:23:05 <Sgeo> I was hoping to just pass a bunch of numbers to some google API in a URL to get a nice pretty chart
03:24:01 <elliott> Do you have to free SVs after using them?
03:24:38 <CakeProphet> I would think so.
03:24:42 <elliott> Or will destroying a Perl interpreter do that?
03:24:49 <elliott> The example doesn't free the result of eval_pv.
03:25:02 <CakeProphet> hmmm... freeing the interpreter would probably do that, yes.
03:25:10 <CakeProphet> ....I base this on... nothing.
03:25:16 <CakeProphet> other than it makes sense.
03:25:46 <Sgeo> cur_value = rand
03:25:56 <Sgeo> I can't help but thinking how... nonsensical that looks
03:26:03 <CakeProphet> what is that?
03:26:17 <Sgeo> Giving cur_value a random value between 0 and 1
03:26:20 <Sgeo> in Ruby
03:26:23 <CakeProphet> no I mean what lang-- oh okay
03:26:43 <CakeProphet> well, that makes sense to me, but only because that's exactly what perl does. :P
03:27:08 <CakeProphet> except 1 is not included.
03:27:26 <CakeProphet> if you want 0 or 1 in Perl you'd write int(rand(2))
03:27:30 <Sgeo> Erm, didn't mean to imply it's included in Ruby
03:27:49 <Sgeo> Just that... my Python instincts are yelling at me that I'm just storing the rand function in cur_value
03:27:54 <CakeProphet> heh
03:28:16 <CakeProphet> higher-order functions? that's nonsense.
03:28:31 <CakeProphet> use references, or, uh, Ruby uses symbols or someting right?
03:28:34 <CakeProphet> or just blocks
03:30:28 <Sgeo> method(:rand) works, and I think there's syntax sugar for that
03:31:02 <CakeProphet> I think in most "higher-order functions" you'd pass a block that does the calling.
03:31:50 <CakeProphet> in Perl it would be \rand
03:32:45 <elliott> gah, eval_pv is too limited
03:32:54 <elliott> or hmm
03:33:00 <CakeProphet> you want arbitrary statements?
03:33:15 <elliott> I need to specify that I want a scalar result
03:33:20 <elliott> oh hmm
03:33:22 <elliott> that's default
03:33:22 <elliott> ok then
03:33:31 <CakeProphet> eval_sv maybe?
03:33:37 <elliott> nah, eval_pv is ok
03:35:26 <CakeProphet> so it always forces scalar? What if you wanted an AV or HV?
03:36:16 <elliott> (((x)->sv_flags & (0x00000400)) == 0x00000400 ? ((x)->sv_u.svu_pv) : Perl_sv_2pv_flags(my_perl, x,0,2))
03:36:17 <elliott> my god
03:36:22 <elliott> CakeProphet: then you need eval_sv i guess
03:36:53 <elliott> hmm, SvPVX is ((x)->sv_u.svu_pv)
03:36:54 <CakeProphet> er.... is there no constant for 0x00000400?
03:37:23 <elliott> that's cpp output dude
03:37:32 <CakeProphet> oh nevermind...
03:37:39 <elliott> sv_pvbyten_force
03:37:39 <elliott> The backend for the SvPVbytex_force macro. Always use the macro instead.
03:37:41 <CakeProphet> I thought that was your actual code. :P
03:37:41 <elliott> what if i didn't ;) ;) ;)
03:37:53 <elliott> (I should really write C glue for this but I DO WHAT I WANT)
03:38:06 <CakeProphet> how naughty.
03:39:47 <CakeProphet> http://perldoc.perl.org/perlcall.html
03:39:50 <CakeProphet> is this useful perhaps?
03:40:39 <CakeProphet> oh no.
03:40:40 -!- MDude has changed nick to MSleep.
03:40:51 <CakeProphet> that's the opposite of what you're doing.
03:41:49 <elliott> dist/build/shiro/shiro-tmp/Shiro/Fingerprints/PERL.o: In function `s2Lr_info':
03:41:49 <elliott> (.text+0xac): undefined reference to `eval_pv'
03:41:50 <elliott> dist/build/shiro/shiro-tmp/Shiro/Fingerprints/PERL.o: In function `s2MP_info':
03:41:50 <elliott> (.text+0x224): undefined reference to `sv_pv'
03:41:50 <elliott> ugh
03:42:26 <elliott> oh, it's Perl_eval_pv
03:42:27 <elliott> fucking macros
03:43:02 <CakeProphet> the api docs mention that perl_eval_pv is deperecated, btw.
03:43:06 <elliott> #define SvPV_nolen(sv) \
03:43:06 <elliott> ((SvFLAGS(sv) & (SVf_POK)) == SVf_POK \
03:43:06 <elliott> ? SvPVX(sv) : sv_2pv_flags(sv, 0, SV_GMAGIC))
03:43:08 <elliott> s i g h
03:43:10 <CakeProphet> spelled correctly.
03:43:10 <elliott> CakeProphet: capital letter
03:43:17 <elliott> Perl vs perl
03:43:27 <CakeProphet> ah okay.
03:43:44 <elliott> sv_nv
03:43:44 <elliott> A private implementation of the SvNVx macro for compilers which can't cope with complex macro expressions. Always use the macro instead.
03:43:45 <elliott> hmmm
03:44:17 <CakeProphet> so what are you doing with these fingerprints exactly?
03:44:33 <elliott> implementing them
03:44:49 <CakeProphet> right but for what purpose do they serve?
03:44:58 <elliott> to be implemented
03:45:00 <elliott> they are specifications
03:45:25 <CakeProphet> o_O? okay. not following. oh well
03:46:33 <elliott> http://catseye.tc/projects/funge98/library/PERL.html
03:46:40 <elliott> (might need to view source to read)
03:46:54 <elliott> it exists, CCBI implements it, cfunge implements it, Mycology tests it. so I implement it.
03:48:04 <elliott> CakeProphet: does this answer your question?
03:48:04 <CakeProphet> oh okay
03:48:07 <CakeProphet> yep.
03:48:15 <elliott> UNDEF: S claims that Perl is already loaded
03:48:15 <elliott> Segmentation fault
03:48:16 <elliott> oh good.
03:49:12 <CakeProphet> gdb?
03:50:08 <elliott> on a Haskell program? lol
03:50:15 <CakeProphet> ....oh
03:50:23 <CakeProphet> right.
03:51:12 <monqy> this perl.hmtl isn't quite workinge...
03:51:16 <CakeProphet> how does one debug FFI functions then?
03:51:23 <CakeProphet> yeah view source to see the whole thing.
03:52:11 <elliott> CakeProphet: badly
03:52:24 <CakeProphet> oh good.
03:52:27 <monqy> why does f98 have perl ffi
03:52:35 <elliott> monqy: because someone wrote it
03:53:08 <CakeProphet> like.. is it not possible to set a breakpoint in your C?
03:53:18 <CakeProphet> or see a stack trace?
03:53:21 <elliott> CakeProphet: I have no C.
03:53:38 <CakeProphet> >_>?
03:53:47 <elliott> That is not a question.
03:53:51 <elliott> At least, not a coherent one.
03:54:15 <CakeProphet> I thought you were using C to interface the perl interpreter to GHC/Haskell.
03:54:27 <elliott> No, I'm using the FFI.
03:54:33 <oerjan> > let (n!) = product [1..n] in (10!)
03:54:34 <lambdabot> <no location info>: Parse error in pattern
03:54:44 <oerjan> :(
03:54:48 <elliott> oerjan: that's obviously bunk syntax...
03:54:49 <CakeProphet> elliott: oh, so that doesn't involve writing actual C code?
03:54:52 <elliott> > let (!) n = product [1..n] in (10!)
03:54:54 <lambdabot> 3628800
03:54:54 <oerjan> > let (!) n = product [1..n] in (10!)
03:54:55 <lambdabot> 3628800
03:54:57 <elliott> :D
03:55:00 <elliott> CakeProphet: no
03:55:07 <elliott> foreign import ccall "perl.h perl_alloc" c_perl_alloc :: IO (Ptr CPerlInterpreter)
03:55:07 <elliott> foreign import ccall "perl.h perl_construct" c_perl_construct :: Ptr CPerlInterpreter -> IO ()
03:55:07 <elliott> foreign import ccall "perl.h &perl_destruct" p_perl_destruct :: FunPtr (Ptr CPerlInterpreter -> IO CInt)
03:55:07 <elliott> foreign import ccall "perl.h &perl_free" p_perl_free :: FunPtr (Ptr CPerlInterpreter -> IO ())
03:55:07 <elliott> ec.
03:55:08 <elliott> etc.
03:55:24 <CakeProphet> oh that's uh... fun looking.
03:55:24 <oerjan> elliott: i was checking if ghc supported it, though, i saw a question on stackoverflow
03:55:38 <CakeProphet> oerjan: neat.
03:56:05 <oerjan> i knew about the _using_ it like (10!) but i was not sure if the extension allowed defining it that way too
03:56:12 <oerjan> (apparently not)
03:56:23 <CakeProphet> I did not know that GHC supported postfix
03:56:34 <oerjan> it's a flag
03:56:39 <CakeProphet> unary postfix, that is.
03:56:58 <CakeProphet> or is it n-ary because that would be sweet...
03:57:04 <elliott> using it like that is obviously standard haskell.
03:57:06 <oerjan> it's a minor adjustment to section syntax
03:57:15 <CakeProphet> elliott: obviously
03:57:38 <oerjan> elliott: not quite, standard haskell wants (10!) to have a function type
03:57:50 <elliott> oerjan: huh, it does?
03:57:51 <oerjan> because it desugars to (\x -> 10 ! x)
03:57:56 <elliott> well that's just an overly draconian standard :P
03:58:11 <oerjan> well, so ghc relaxes it.
03:58:16 <elliott> right
03:58:21 <Sgeo> Binary Searches should not be going that far off the rails!
03:58:36 <CakeProphet> wat
03:59:09 <Sgeo> MY GOAL WITH THIS BINARY SEARCH IS NOT TO FIND THE AVERAGE BETWEEN MY INITIAL BOUNDARIES FOR THIS SEARCH
03:59:13 * Sgeo decides to bug hunt
03:59:23 <CakeProphet> I SEE.
03:59:44 <Jafet> You should re-evaluate your goals
03:59:52 <quintopia> (his goal is to find a life partner)
04:00:11 <quintopia> (it could be you jafet)
04:00:16 <oerjan> hm (!10) desugars to (\x -> x ! 10) which is the same as flip (!) 10
04:00:19 <oerjan> :t flip
04:00:20 <lambdabot> forall (f :: * -> *) a b. (Functor f) => f (a -> b) -> a -> f b
04:00:36 <oerjan> so what if it used caleskell flip...
04:01:04 <oerjan> this is not necessarily that much of an improvement.
04:01:07 <CakeProphet> for some reason my parser enters an infinite loop, but I am not sure what is causing it.
04:01:16 <CakeProphet> I thought it was binary operators but apparently not.
04:01:18 <oerjan> CakeProphet: left recursion
04:01:21 <Sgeo> The distribution looks skewed, as I expect
04:01:24 <oerjan> (always a good guess)
04:01:37 <Sgeo> Then again, I can't tell whether a distribution is skewed
04:02:22 <CakeProphet> oerjan: thats where the first alternative is recursive and descends infinitely before the simpler terms are ever checks, right?
04:02:25 <CakeProphet> yeah, it's not that.
04:02:29 <CakeProphet> *checked
04:03:16 <CakeProphet> well, it could be, since I didn't actually implement the binary operator code.
04:03:38 <Sgeo> !@#$
04:03:38 <CakeProphet> just calling a helper function, similar to the one Parsec has.
04:03:44 <Sgeo> Stupid auto-return
04:03:53 <oerjan> cakyep
04:03:55 <Sgeo> I auto-returned the result of resetting the simulation
04:03:57 <oerjan> er
04:04:03 <oerjan> CakeProphet: yep
04:04:04 <CakeProphet> lol
04:04:10 <elliott> cakyep
04:04:12 <CakeProphet> NO TAB COMPLETE FOR YOU
04:04:40 <oerjan> D:
04:04:52 <CakeProphet> Sgeo: what's wrong with that exactly?
04:05:11 <Sgeo> I wasn't getting the results of the simulation
04:05:24 <Sgeo> Instead getting the "result" of a freshly reset simulation
04:05:50 <CakeProphet> I don't really understand, if you anted the simulation you could just explicitly return...
04:05:52 <Sgeo> Maybe I shouldn't be resetting it in the same method that returns the result
04:05:54 <CakeProphet> +w
04:06:08 <Sgeo> Yes, but I didn't see that I messed it up
04:06:22 <oerjan> @hoogle expressionParser
04:06:23 <lambdabot> Text.Parsec.Expr buildExpressionParser :: Stream s m t => OperatorTable s u m a -> ParsecT s u m a -> ParsecT s u m a
04:06:23 <lambdabot> Text.ParserCombinators.Parsec.Expr buildExpressionParser :: OperatorTable tok st a -> GenParser tok st a -> GenParser tok st a
04:06:41 <CakeProphet> Sgeo: oh you're still thinking in Python where assignment doesn't result in anything or whatever, maybe?
04:06:57 <Sgeo> I don't... think so
04:07:28 <oerjan> CakeProphet: you're not doing the equivalent of expression = buildExpressionParser table expression, are you? because that i think would infinitely recurse iirc what that means
04:07:49 <CakeProphet> yes that's pretty much what I'm doing.
04:08:11 <CakeProphet> though it may be implemented differently.
04:08:38 <CakeProphet> well, no.
04:08:40 <CakeProphet> not quite
04:08:49 <CakeProphet> I am not recursively evaluating expression
04:08:53 <CakeProphet> I'll show you.
04:09:17 <oerjan> ok :P
04:09:34 <oerjan> because that would have been an error
04:17:00 <elliott> dear perl api an ultimatum
04:17:03 <elliott> work or i will an kills you
04:17:05 <elliott> oh hm
04:17:11 <elliott> maybe i fail to keep the reference around
04:20:05 <elliott> why ;m this no work
04:21:32 -!- Jafet has quit (Quit: Leaving.).
04:22:38 <elliott> oh well/ me scraps it for now
04:22:41 <elliott> oops i cant type :(
04:29:20 <monqy> oops
04:34:07 <elliott> oops
04:42:11 <CakeProphet> ...wat. operator.__and__ apparently cannot and Nones
04:42:17 <CakeProphet> but None and None works fine.
04:42:59 <CakeProphet> oh wait I think __and__ is bitwise.
04:43:09 <CakeProphet> except it's not doing bitwise and...
04:43:29 <CakeProphet> oh nevermind it is.
04:43:49 <oerjan> > Nothing .&. Nothing
04:43:50 <lambdabot> No instance for (Data.Bits.Bits (Data.Maybe.Maybe a))
04:43:50 <lambdabot> arising from a use...
04:44:27 <CakeProphet> boolean and is operator.and_
04:44:34 <CakeProphet> you sure are confusing operator lib.
04:46:50 <elliott> dammit theatress,f
04:47:34 <Sgeo> {0.0...0.1=>5, 0.1...0.2=>72, 0.2...0.3=>76, 0.3...0.4=>158, 0.4...0.5=>194, 0.5
04:47:34 <Sgeo> ...0.6=>187, 0.6...0.7=>148, 0.7...0.8=>89, 0.8...0.9=>64, 0.9...1.0=>7}
04:47:37 -!- augur has joined.
04:47:50 <Sgeo> There's no way to just paste those results into some Google thingy and see what it looks like, is there?
04:48:23 <elliott> maybe i should implement MODE, the most painful fingerprint EVR
04:48:24 <elliott> EVER
04:48:27 <Sgeo> Although I guess it looks very bell curve-y
04:48:43 <elliott> CakeProphet: view-source:http://catseye.tc/projects/funge98/library/MODE.html look at this shit
04:48:53 <elliott> The <tt>Q</tt> "Toggle Queuemode" instruction toggles an internal flag called
04:48:53 <elliott> <i>queuemode</i>. When queuemode is active, cells are <b>popped</b> off the
04:48:53 <elliott> stack from the <b>bottom</b> instead of the top.<p>
04:49:02 <elliott> YES GREAT I LOVE FINGERPRINTS THAT JUST CHANGE THE ENTIRE SEMANTICS OF THE LANGUAGE
04:49:11 <CakeProphet> lolwat
04:49:29 <elliott> ALMOST AS GREAT AS TRDS
04:50:00 <CakeProphet> use feature 'say switch';
04:50:11 <CakeProphet> except now befunge and more obfuscated!
04:50:18 <CakeProphet> or... whatever funge-98 is
04:50:28 <elliott> a family of languages
04:51:09 -!- Jafet has joined.
04:51:20 <CakeProphet> do you currently have a system that allows you to make huge changes to language semantics like that?
04:51:24 <elliott> nope
04:51:31 <elliott> i just need to abstract out push/pop but sodjfsdjfoi
04:51:32 <CakeProphet> I know in Haskell this requires a bit of forethought.
04:51:40 <elliott> nah, I can easily do it
04:51:44 <elliott> TRDS will be way harder
04:51:48 <elliott> MVRS probably even moreso
04:51:56 <elliott> FNGR will be annoying too
04:51:56 <CakeProphet> !wacro
04:51:59 <EgoBot> SAR
04:52:02 <CakeProphet> what about SAR?
04:52:04 <elliott> TRDS is time travel
04:52:06 <elliott> http://www.rcfunge98.com/rcsfingers.html#TRDS
04:52:21 <elliott> MVRS is multiverse, basically a bunch of fungespaces that shit runs in, http://www.rcfunge98.com/rcsfingers.html#MVRS
04:52:33 <elliott> and FNGR is just a "switch around loaded fingerprint instructions and shit" fingerprint
04:52:33 <elliott> BUT
04:52:39 <elliott> it assumes the wrong semantics for fingerprints
04:52:44 <elliott> fingerprints push each instruction, not the fingerprint as a whole
04:52:57 <elliott> so basically you have to change the entire fingerprint push/pop system when FNGR is loaded
04:52:57 <CakeProphet> maybe you just like
04:52:59 <CakeProphet> not implement those.
04:52:59 <elliott> and fix it on unload
04:53:11 <elliott> CakeProphet: there are programs using them, Mycology tests most of them
04:54:05 <CakeProphet> oh I see.
04:54:10 <elliott> what do you see
04:54:24 <CakeProphet> I see that you want your implementation to be complete, basically.
04:54:41 <elliott> it could be worse, I need to implement WIND portably
04:54:49 <elliott> hmm, actually that's not so hard
04:54:52 <CakeProphet> ....portably?
04:54:57 <CakeProphet> that sounds like an oxymoron.
04:55:00 <elliott> what will be harder to implement portably
04:55:01 <elliott> is
04:55:04 <Sgeo> Why is what I thought would be a weird distribution normal?
04:55:08 <CakeProphet> "portable windows extensions"
04:55:11 <Sgeo> Or at least, it looks normal at a glance
04:55:15 <elliott> "MSGQ"0x44d534751SysV IPC Message Queues(RCS)
04:55:15 <elliott> "SMEM"0x534d454dSysV IPC Shared Memory(RCS)
04:55:15 <elliott> "SMPH"0x534d5048SysV IPC Semaphores(RCS)
04:55:21 <elliott> those will be hard to do portably.
04:55:25 <elliott> "UNIX"0x554e4958Some Unix access functions(RCS)
04:55:26 <elliott> as will this.
04:55:29 <elliott> but i shall.
04:55:43 <elliott> I'm sure there's /some/ Windows API to switch user
04:56:16 <CakeProphet> you should use your perl interpreter for REXP
04:56:29 <elliott> nah, it's obviously meant to be posix regexps I think
04:56:32 <CakeProphet> instead of PCRE which is lame.
04:56:37 <CakeProphet> or posix regexps which is even more lame.
04:56:44 <CakeProphet> but okay.
04:56:49 <CakeProphet> STANDARDS COMPLIANCE IS GOOD
04:56:51 <elliott> rcfunge fingerprints may suck but I'm not going to misimplement them just to be better
04:57:06 <elliott> "FORK" 0x4464F524B
04:57:06 <elliott> T( -- pid flg)Fork new process
04:57:06 <elliott> can't wait to do this portably mmm
04:57:18 <elliott> it's not that bad since i can just like serialise state and spawn but still
04:57:24 <CakeProphet> well doesn't Haskell do forks portably?
04:57:32 <CakeProphet> *GHC
04:57:32 <elliott> not _that_ kind of fork.
04:57:39 <elliott> doing fork() on Windows is basically impossible
04:57:45 <elliott> but spawning a process works
04:59:13 <CakeProphet> do you already have SUBR?
04:59:35 <CakeProphet> ....ew FOBJ
04:59:44 -!- augur has quit (Remote host closed the connection).
04:59:47 <elliott> I don't have SUBR yet, no.
05:00:17 <elliott> http://www.rcfunge98.com/rcsfingers.html#MACR
05:00:18 <elliott> fuck my life
05:31:05 <shachaf> Hey, people of #esoteric, here's a language for you: http://timmaxwell.org/pages/monad-embed/index.html
05:31:28 <shachaf> People of #esoteric who are not elliott, feel free to give the author feedback.
05:31:36 <elliott> Gosh! I have never seen that page before in my life!
05:32:57 <monqy> a new way of using monads, eh?
05:38:46 <pikhq_> shachaf: I see you don't want right-by-definition feedback.
05:38:50 <pikhq_> :P
05:39:03 <shachaf> pikhq_: ?
05:39:21 <pikhq_> shachaf: All of elliott's opinions are right, by definition.
05:39:29 <shachaf> Oh.
05:39:53 <shachaf> pikhq_: I didn't say elliott shouldn't give feedback.
05:40:03 <shachaf> In fact, I already told him to do so, in another channel.
05:40:14 <elliott> I am the Keeper of the Right.
05:40:15 <shachaf> Asking twice seemed silly.
05:40:19 <elliott> Nobody else may have the Right.
05:40:47 <shachaf> > Right now
05:40:49 <lambdabot> Right now
05:41:03 <monqy> :t now
05:41:04 <lambdabot> Not in scope: `now'
05:41:09 <monqy> > now
05:41:10 -!- ive has quit (Quit: leaving).
05:41:10 <lambdabot> Not in scope: `now'
05:41:17 <monqy> :(
05:41:27 <Sgeo> "When C++ is your hammer, every problem looks like your thumb.
05:41:27 <Sgeo> "
05:41:44 <elliott> > now
05:41:45 <lambdabot> Not in scope: `now'
05:41:48 <elliott> > now
05:41:50 <lambdabot> Not in scope: `now'
05:41:54 <elliott> shachaf ruined everything
05:41:54 <oerjan> monqy: shachaf is a shameless cheater
05:42:22 <shachaf> oerjan: Excuse me?
05:42:25 <shachaf> I am now cheater.
05:42:29 <shachaf> ...Not.
05:42:32 <shachaf> I'm *not* cheater.
05:42:38 <oerjan> PROVE IT
05:42:38 <shachaf> Ugh, he's going to get highlighted now.
05:42:59 <oerjan> shachaf: that is... a problem?
05:43:06 <Sgeo> sha​chef
05:43:17 <elliott> Sounds like a problem to me.
05:43:46 <shachaf> This channel is actually for esoteric people, not esoteri languages, right?
05:43:51 <shachaf> That would explain the assortment you've got in ehre.
05:43:55 <oerjan> shachaf: fouwf avkugefreølevf abekh
05:44:07 <elliott> shachaf: That's an unfortunate result of the latter.
05:44:13 <elliott> Well, sometimes unfortunate.
05:44:37 <CakeProphet> can someone enlighten me as to the difference between /usr/lib and /usr/local/lib?
05:44:46 <elliott> CakeProphet: Former is OS, latter is system.
05:44:48 <oerjan> yes, there is a local in there
05:44:55 <elliott> OS manages former, system administrator latter.
05:45:05 <CakeProphet> ah okay.
05:45:05 <oerjan> also an extra /, although its position is ambiguous.
05:45:10 <CakeProphet> so then apt-get installs to /usr/lib?
05:45:16 <CakeProphet> or?
05:45:18 <CakeProphet> not?
05:45:18 <elliott> Yes.
05:45:21 <CakeProphet> okay.
05:45:31 <oerjan> hm strictly speaking it could be an extra ocal/l
05:45:35 <fizzie> The latter is for diet versions of libraries. (lo-cal, yo see.)
05:45:51 <CakeProphet> .....
05:45:58 <CakeProphet> these jokes are so bad.
05:46:18 <fizzie> CakeProphet: They're like the Power Glove.
05:46:26 <fizzie> (It is SO BAD.)
05:47:57 <oerjan> or perhaps the _second_ l is the original, making it an extra loca and /l
05:48:48 <quintopia> but there is no doubt as to who the original pedant-for-hire of #esoteric is
05:49:01 <oerjan> quintopia: wait, who?
05:49:25 <oerjan> and also, why haven't i been paid
05:49:41 <quintopia> oerjan: you, of course. you would never miss an opportunity to state the obvious for humor value, and then discourse about it for ten more minutes
05:49:50 <quintopia> and you are paid
05:49:52 <quintopia> in silent yuks
05:50:01 <quintopia> (and occasional real ones from gregor)
05:50:07 <elliott> puns =/= pedantry
05:50:21 <quintopia> stating the obvious =/= puns
05:50:32 <elliott> don't like it, leave
05:50:39 <aspect> that's a really weird smiley you guys use
05:50:44 <elliott> yeah
05:50:49 <elliott> we're frowning in both directions
05:50:50 <elliott> simultaneously
05:50:55 <elliott> it's due to our hyper-dimensional nature
05:50:59 <quintopia> thats no frown
05:51:05 <quintopia> thats how i smile
05:51:08 <quintopia> ever since the stroke
05:52:07 <oerjan> i did not know strokes could do that
05:53:05 <fizzie> oerjan: Maybe it was a... keystroke?
05:53:21 <oerjan> a key event, ok
05:53:52 <quintopia> no, i mean, ever since that awful billy squier song came out, i've been unable to truly smile
05:54:11 <elliott> fizzie: How's jitfunge :P
05:54:13 <oerjan> oh. good like i have no idea what song you are referring too, then.
05:54:25 <oerjan> ew, grammr
05:54:29 <oerjan> and spling
05:54:36 <elliott> grandma and spelunking
05:54:41 <elliott> a novel
05:54:53 <oerjan> that sounds like it could be readable
05:55:00 <cheater> <shachaf> I am now cheater. < NOOOOOOOOOOOOOoooooooooooooooooooooooooooooooooooooooooooooooo
05:55:01 <lambdabot> cheater: You have 1 new message. '/msg lambdabot @messages' to read it.
05:55:17 <elliott> shachaf would make a nicer cheater than the one we have now.
05:55:21 <elliott> Can we apply for a transfer?
05:55:33 <quintopia> surely someone here remembers that song...it was on the small soldiers soundtrack...surely someone remembers that movie...it was probably worse than the son
05:55:34 <elliott> Oh, there's a spider here. Hi spider.
05:55:36 <quintopia> g
05:55:37 <oerjan> but brain transfers are so complicated
05:55:50 <elliott> quintopia: wow i think i remember small soldiers........
05:55:51 <cheater> you cannot.
05:55:53 <elliott> yes i do
05:55:56 <shachaf> elliott: Sorry, I'm deeply embedded in #haskell-blah as my off-topic channel of choice.
05:55:59 <shachaf> Sadly cheater is in there too.
05:56:12 <oerjan> "sadly"
05:56:18 <elliott> shachaf: He's quieter in here. Just sayin', we have benefits.
05:56:25 <elliott> And a great retirement plan, too.
05:56:36 <shachaf> elliott: On the other hand you talk about esoteric languages all the time.
05:56:40 <quintopia> elliott: you remember it existing or you remember the movie itself? if the latter, my many condolences.
05:56:45 <shachaf> elliott: In #haskell-blah, C++ is considered an esolang.
05:56:45 <elliott> shachaf: That...
05:56:52 <elliott> shachaf: Where on earth did you get the perception that we tend to be on-topic?
05:56:58 <elliott> Apart from my Shiro babbling which is more about the Haskell.
05:57:10 <elliott> quintopia: A little bit of both.
05:58:24 <monqy> is haskell-blah good
05:58:50 <elliott> It lacks the Holder of the Rightness.
05:59:04 <monqy> worst chanel
06:02:04 * shachaf wonders if #esoteric-blah etnds to talk about esoteric languages.
06:02:18 <elliott> #esoteric-blah is usually used for botspam.
06:02:21 <elliott> Or at least it was, years ago.
06:02:37 <elliott> -ChanServ- 1 freenode-staff +voOtsriRfAF [modified 2 years, 12 weeks, 4 days, 20:53:47 ago]
06:02:40 <elliott> Also freenode stole it off me?
06:02:43 <elliott> Jerks.
06:03:20 <shachaf> Your nick has only been registered for <a year.
06:03:32 <elliott> shachaf: Yes, because I only got it back then.
06:03:58 <oerjan> elliott: i think #esoteric was changed to freenode-staff too
06:04:00 <quintopia> shachaf: he has been named "elliott" for like 16 some-odd years though. fun fact.
06:04:09 <elliott> shachaf: Previously I had it for ages, then someone managed to steal it off me (with some kind of bot, said the freenode staffer; I'm not sure I buy that).
06:04:22 <elliott> But now it is back to its rightful owner, me.
06:04:29 <elliott> All other elliotts can just suffer.
06:04:35 <monqy> cable
06:04:36 <quintopia> i miss alise
06:04:39 <monqy> elliottt
06:04:39 <shachaf> Not elliottt!
06:04:44 <elliott> Elliotttttttttttttttttttttttttttttttttttttttt.
06:04:47 <elliott> That's me.
06:04:50 <shachaf> elliottt is the best of all the elliots.
06:04:52 <monqy> elliotttcable
06:05:05 <elliott> I wonder whether I should try and sell this to elliotttcable again.
06:05:08 <monqy> are there any other elliottts
06:05:09 <elliott> He seemed quite willing to buy.
06:05:19 <elliott> He didn't seem to like the sound of five hundred dollars though.
06:05:48 <shachaf> Ask for bitcoins.
06:05:54 <shachaf> It's the way of the future.
06:06:08 <elliott> I'm not sure his political leanings are aligned with that.
06:06:09 <quintopia> 65 btc
06:06:32 <elliott> (Though I certainly don't claim to understand the American right-wing.)
06:08:06 <elliott> I wonder who the richest bitcoiner is, in terms of bitcoins.
06:08:15 <elliott> That should be calculable from the public data, I think.
06:10:04 <elliott> Also: Does nobody care about any actually interesting alternative currencies now that Bitcoin is so big? I haven't seen anyone mention Ripple in years.
06:11:44 <cheater> #haskell-blah is working on implementing one
06:12:06 <elliott> I'm sure it'll do wonderfully.
06:12:11 <cheater> Ŧ
06:13:28 <quintopia> so bitcoin is not actually interesting? i think "catching on enough to work" is damn interesting.
06:14:22 <elliott> FSVO work. Anyway, it's essentially a digital gold standard, which is incredibly boring.
06:14:55 <elliott> "Everyone agrees that this scarce but useless resource is incredibly valuable, feels smugly superior over fiat currencies for all eternity" is a yawn-inducing story.
06:17:15 <quintopia> the only reason i yawned is because you used the word yawn and seeing yawn in a sentence when you are in a yawny mood is automagically yawn-inducing despite the story actually being pretty cool and not boring at all yawn.
06:18:26 <elliott> So how do bitcoins fit into your post-apocalyptic libertarian paradise?
06:19:29 <quintopia> i'm going to collect a whole bunch of them and bury them on a private island where i will become benevolent dictator of Zombie-Free Land
06:19:55 <quintopia> so called because it will the be the only place free of zombies
06:26:55 -!- sllide has joined.
06:33:45 <elliott> ?hoogle [a] -> ([a], a)
06:33:46 <lambdabot> Numeric floatToDigits :: RealFloat a => Integer -> a -> ([Int], Int)
06:33:50 <elliott> hmph :P
06:33:57 <elliott> oerjan: what's a nice way of (init xs, last xs)
06:34:00 <elliott> (nice = fast)
06:34:32 <oerjan> i'm not convinced there is a faster one
06:34:42 <elliott> oerjan: um not scanning the list twice?
06:35:13 <oerjan> hm
06:35:17 <elliott> foo [x] = ([], x); foo (x:xs) = let (xs',y) = foo xs in (x:xs',y)
06:35:18 <elliott> that's ugly though
06:36:06 <elliott> actually it's (reverse (init xs), last xs) but I doubt that can be optimised more
06:36:19 <elliott> foo [x] = ([], x); foo (x:xs) = let (xs',y) = foo xs in (xs'++[x],y)
06:36:56 <oerjan> elliott: um of course that can duh
06:37:09 <elliott> how?
06:37:11 <oerjan> (reverse (init xs), last xs) is tail recursive
06:37:23 <elliott> um hmm
06:37:25 <elliott> it is?
06:37:32 <elliott> hmm
06:37:44 <elliott> oh right
06:37:46 -!- Patashu has joined.
06:38:11 <oerjan> foo l = foo' l []; foo' [x] r = (r, x); foo' (x:xs) r = foo' xs (x:r)
06:38:20 <elliott> right
06:38:58 <elliott> there we go
06:42:08 <elliott> oerjan: now design me a more efficient stack structure :)
06:42:11 <elliott> s/:)/>:)/
06:42:15 <elliott> typo :D
06:43:38 <oerjan> <elliott> oerjan: now design me a more efficient stack structure :) <-- there is an oxymoron in that sentence somewhere
06:44:25 <elliott> wat, howso
06:44:42 <monqy> implementing funge98 sounds painful, a thing i do not want to do
06:44:48 <olsner> oerjan and design maybe
06:45:05 <oerjan> olsner: also, efficient
06:45:08 <monqy> maybe i would be fine with implement an old befunge,,, one without pain,,
06:45:35 <elliott> oerjan: but my current one is so lame :(
06:45:44 <elliott> data StackElems = (:-) {-# UNPACK #-} !Value StackElems deriving (Show)
06:45:44 <elliott> it's literally just a micro-optimised stream type
06:45:53 <elliott> well plus a length field
06:46:01 <elliott> so i can know how many real values are present
06:46:06 <oerjan> elliott: NOT MY FIELD OF EXPERTISE
06:46:09 <elliott> oerjan: :'(
06:46:10 <elliott> :'(
06:46:17 <elliott> I should probably try Data.Sequence
06:46:23 <elliott> but I dunno
06:46:30 <elliott> it doesn't seem like it'd be a massive benefit
06:46:56 <fizzie> > let f = span (not . null . tail) . filter (not . null) . tails; g x = let (a,b) = f x in (head <$> a, head . head $ b) in g [1,2,3,4,5]
06:46:58 <lambdabot> ([1,2,3,4],5)
06:47:05 <fizzie> I'm sure that's the efficientest.
06:47:35 <elliott> fizzie's writing completely point-free functions; is he off the: deep end? Experts disagree.
06:47:45 <elliott> But the prevailing opinion is that he has no: hope now.
06:47:56 <elliott> And that his indoctrination is: complete.
06:47:59 <elliott> Am I doing the colont hing right?
06:48:02 <elliott> Colont hing.
06:48:07 <monqy> my name
06:52:31 -!- GreaseMonkey has joined.
06:59:36 -!- Patashu has quit (Ping timeout: 252 seconds).
07:07:13 <fizzie> Actually now that I look at it, maybe it could be a bit more pointless.
07:07:15 <fizzie> > let f = ((head <$>) *** head . head) . break (null . tail) . tails; in f [1,2,3,4,5]
07:07:17 <lambdabot> ([1,2,3,4],5)
07:07:36 <elliott> fizzie: Nnh, but, arrows.
07:14:45 <fizzie> @hoogle (a -> b) -> (c -> d) -> (a,c) -> (b,d)
07:14:46 <lambdabot> Data.Graph.Inductive.Query.Monad (><) :: (a -> b) -> (c -> d) -> (a, c) -> (b, d)
07:14:56 <fizzie> What an obvious place for it.
07:15:08 <fizzie> Also that's one angry-looking operator.
07:15:13 <elliott> :t (***)
07:15:14 <lambdabot> forall (a :: * -> * -> *) b c b' c'. (Arrow a) => a b c -> a b' c' -> a (b, b') (c, c')
07:15:26 <elliott> I mean, it's an okay operator, for functions.
07:16:46 <monqy> are (|||) or (+++) ever useful
07:16:51 <elliott> duno
07:17:01 <oerjan> :t (|||)
07:17:02 <lambdabot> forall (a :: * -> * -> *) b d c. (ArrowChoice a) => a b d -> a c d -> a (Either b c) d
07:17:08 <oerjan> :t (+++)
07:17:09 <lambdabot> forall (a :: * -> * -> *) b c b' c'. (ArrowChoice a) => a b c -> a b' c' -> a (Either b b') (Either c c')
07:17:57 -!- sllide has quit (Read error: Connection reset by peer).
07:18:05 <monqy> I can sort of imagine them being useful
07:18:11 <monqy> for functions of course
07:18:57 <oerjan> :t either
07:18:59 <lambdabot> forall a c b. (a -> c) -> (b -> c) -> Either a b -> c
07:19:19 <oerjan> for functions, ||| is either it seems
07:20:15 <monqy> oh right
07:20:24 <monqy> either is useful
07:20:37 <monqy> back to only imagining about +++
07:25:01 <elliott> hmm, this could surely be expressed more nicely...
07:25:38 <monqy> now im couriuos
07:25:43 <elliott> monqy: ?
07:25:48 <monqy> curiosyu
07:25:52 <monqy> about what is it
07:26:02 <elliott> oh
07:26:23 <elliott> I'm just trying to express a really simple game in FRP, and I have this really unsatisfying expression of gravity that depends on a game tick event
07:26:48 <elliott> player :: Vec -> Behavior Player
07:26:49 <elliott> player pos = accumB (Player pos (0,0)) (gravity <$ tick)
07:26:49 <elliott> where gravity (Test p v) = Test (p .+. v) (v .+. (0,1))
07:26:56 <elliott> and i'm just thinking......can this be done.......more elgelgantly.....
07:27:05 <elliott> s/Test/Player/
07:27:37 * oerjan learns something surprising about the andromeda galaxy http://spluch.blogspot.com/2007/01/size-comparison-of-andromeda-galaxy-and.html
07:28:12 <oerjan> monqy: +++ is sort of dual to ***
07:28:21 <monqy> yeah
07:28:38 <monqy> but I'v enever had to do anything like that to eithers
07:28:46 <monqy> so it is all up to imagineation
07:29:40 <olsner> oerjan: wow, that's cool
07:29:51 <monqy> i wish it was easily visible
07:30:01 <monqy> now i want to see it :(
07:31:36 <elliott> almost as cool as frogs
07:32:30 <monqy> i want frogs in my night sky
07:37:09 <elliott> frp is am hards
07:38:10 <monqy> i wish i knew frp ;_; i a,m try frp soonbut finishing other thigns first
07:40:48 <CakeProphet> wow, operator has no logical and.
07:40:54 <CakeProphet> both __and__ and and_ are bitwise.
07:41:19 <elliott> player :: Vec -> Discrete Player
07:41:19 <elliott> player initialPos = Player <$> pos <*> vel
07:41:20 <elliott> where pos = accumD initialPos ((.+.) <$> changes vel)
07:41:20 <elliott> vel = accumD (0,0) (collision $> (.+. (0,1)))
07:41:20 <elliott> collision = (/= (9,9)) <$> changes pos
07:41:20 <elliott> ok this is starting to get better...
07:41:29 <elliott> I guess it needs to take a list of things it can collide with...
07:42:37 <monqy> CakeProphet: hi what
07:42:51 <CakeProphet> monqy: just me trying to write functional code in Python.
07:42:57 <elliott> :t none
07:42:58 <CakeProphet> and finding that it is not well supported
07:42:58 <lambdabot> Not in scope: `none'
07:42:59 <elliott> :t any
07:43:01 <lambdabot> forall a. (a -> Bool) -> [a] -> Bool
07:43:13 <elliott> ?pl all . map not
07:43:14 <lambdabot> all . map not
07:43:16 <elliott> oh hm
07:46:35 <oerjan> :t all . (not .)
07:46:36 <monqy> would none be something like (fmap (fmap not) any)
07:46:36 <lambdabot> forall a. (a -> Bool) -> [a] -> Bool
07:47:27 <elliott> player :: Vec -> Discrete Vec -> Discrete Entity
07:47:27 <elliott> player initialPos collider = Entity <$> pos <*> vel
07:47:27 <elliott> where pos = accumD initialPos ((.+.) <$> changes vel)
07:47:27 <elliott> vel = accumD (0,0) (changes falling $> (.+. (0,1)))
07:47:28 <elliott> falling =
07:47:30 <elliott> (\p q -> p .-. (0,1) /= q)
07:47:32 <elliott> <$> pos
07:47:34 <elliott> <*> collider
07:47:36 <elliott> this looks right but is wrong :(
07:48:10 <CakeProphet> what is this code for?
07:48:20 <elliott> game
07:48:27 <monqy> "a really simple game" - elipt
07:48:41 <monqy> - a few minutes ago
07:48:43 <CakeProphet> similar to the one we were discussing before?
07:48:43 <monqy> - monqy
07:48:49 <elliott> no
07:48:57 <CakeProphet> oh okay.
07:49:09 <CakeProphet> THERE ARE ENTITIES SO I WAS SUSPICIOUS.
07:49:19 <monqy> whats entity
07:49:21 <CakeProphet> I am suspicious of things so vaguely named.
07:50:00 <oerjan> eek, an entity in the channel
07:50:06 <monqy> oh no
07:51:56 <CakeProphet> madnir
07:58:09 -!- oerjan has quit (Quit: Bye!).
07:58:26 <elliott> rip oerjan
07:58:28 <elliott> died as he lived
07:58:30 <elliott> fighting crime
08:14:03 -!- nooga has joined.
08:23:46 <CakeProphet> you know a library has bad code when I can rewrite it to be faster.
08:30:30 <CakeProphet> uh, is there even such a thing as a left-associative prefix unary operator?
08:30:55 <CakeProphet> !!x as right associative = !(!(x))
08:30:59 <CakeProphet> !!x as left associative = ???
08:31:16 <CakeProphet> (!(!x)) same thing.
08:31:41 <shachaf> !!x isn't necessarily equal to x.
08:31:47 <shachaf> C is intuitionistic!
08:31:56 <CakeProphet> ..I make no mention of what ! is
08:32:04 <CakeProphet> but yes, that's true.
08:32:13 <shachaf> No, just referring to a #haskell discussion.
08:32:24 <CakeProphet> oh yes of course.
08:32:38 <elliott> It's like a #haskell away from #haskell in here.
08:32:43 <elliott> God bless haskell america.
08:33:12 <shachaf> @localtime elliott
08:33:13 <lambdabot> Local time for elliott is Thu Sep 8 09:34:00
08:33:19 <elliott> What a silly command.
08:33:21 <shachaf> Is that your localtime?
08:33:30 <monqy> The class method [...] mentions none of the type variables of the class [...] When checking the class method: [...] In the class declaration for [...] ;________;
08:33:36 <elliott> I'm... not sure how much I trust this computer's clock.
08:33:41 <monqy> @localtime
08:33:45 <lambdabot> Local time for monqy is Thu Sep 8 01:35:07 2011
08:33:46 <elliott> @localtime lambdabot
08:33:47 <lambdabot> I live on the internet, do you expect me to have a local time?
08:33:53 <elliott> How rude.
08:34:18 <elliott> @localtime EgoBot
08:36:17 <elliott> Car Crush II is a thrilling high speed 2-D driving
08:36:17 <elliott> game. This game has got new concepts and ideas. Again made in QBASIC and DirectQB. You have to drive through an extremely challenging track and play well enough to achieve a high score. Enemy cars in the game are extremely dangerous. They will try to slam into your car and inflict serious damages, so be a bit careful.
08:36:31 <monqy> sounds extreme
08:36:38 <monqy> and u
08:36:38 <elliott> "be a bit careful" is definitely the best part.
08:36:38 <monqy> h
08:36:40 <monqy> thrilling
08:36:46 <elliott> Not too careful. Just a bit.
08:37:37 <monqy> so i'm considering using not using a typeclass for this thing but I'm afraid it would get messier
08:37:42 <elliott> what is the thing
08:37:55 <elliott> typeclasses are never the answer don't do it n;o
08:38:02 <elliott> (Typeclasses are sometimes the ansewr.)
08:38:22 <monqy> it would probably be better to use a normal record but...mess...
08:38:30 <elliott> what is it
08:39:14 <monqy> i want multiple ui ends for a thing and the signature is right now a typeclass
08:39:41 <elliott> today on esoteric: monqy attempts to be as vague as possible so that nobody can help him
08:39:48 <monqy> exactly
08:40:05 <elliott> would you have to create a new dummy type just so you can make an instance
08:40:06 <elliott> like
08:40:08 <elliott> data Gtk
08:40:10 <elliott> instance UI Gtk where ...
08:40:14 <monqy> yes that's what i'm doing right now
08:40:17 <elliott> yeah no
08:40:19 <elliott> make it a record
08:40:25 <monqy> is there any way to clean it up
08:40:29 <elliott> make it a record
08:40:32 <monqy> i mean
08:40:34 <monqy> clean record
08:40:39 <elliott> how is it not clean
08:42:08 <monqy> hard to describe :(
08:43:06 <elliott> monqy: show class
08:43:44 <monqy> its incomplete :( I'm just worried about having to pass the record around everywhere in the cases where the type system would do it if it's a class??
08:43:54 <monqy> like theres
08:43:59 <monqy> the first three lines
08:44:00 <monqy> class UI a where type Key a :: * getKey :: IO (Key a)
08:44:04 <monqy> oh no it got condensed
08:44:07 <monqy> into one line
08:44:10 <monqy> when i pasted it
08:44:26 <elliott> monqy: since you have to do
08:44:28 <elliott> data Gtk
08:44:33 <elliott> instance UI Gtk where ...
08:44:39 <elliott> monqy: you would have to pass around the dummy Gtk value _anyway_
08:45:01 <elliott> what's with the Key thing though, sounds like you could eliminate that
08:45:32 <monqy> the next line might explain it
08:45:33 <monqy> a bit
08:45:36 <monqy> keyToCommand :: Key a -> Command
08:46:02 <monqy> e.g. hscurses represents keys differently than gtk??
08:46:09 * elliott diagnoses you with overcomplicating it syndrome
08:46:12 <monqy> :(
08:46:16 <monqy> what should i do help
08:46:20 <elliott> since you can't examine values of (Key a) except via the other methods
08:46:23 <elliott> you don't need it at all
08:46:27 <elliott> for instance that class is equivalent to
08:46:33 <elliott> class UI a where getKey :: IO Command
08:46:38 <elliott> (note lack of "a" occurring because it's dummy)
08:46:39 <elliott> so
08:46:43 <elliott> data UI = UI { getKey :: IO Command }
08:46:47 <elliott> obviously a key can do somewhat more maybe
08:46:58 <elliott> but that's fine, just define an abstract key type that would be all the class methods taking (Key a)
08:47:05 <elliott> data Key = Key { keyName :: String, keyCommand :: Command }
08:47:09 <elliott> data UI = UI { getKey :: IO Key }
08:47:16 <elliott> suddenly clean
08:47:51 <monqy> the reason i had it that way was becuase i was afraid of the pattern (keyToCommand <$> getKey) because i am irrational fears
08:48:19 <elliott> how does that help you avoid that pattern?
08:48:23 <elliott> that gives you that pattern exactly
08:48:26 <elliott> that's the only way to use yours
08:48:52 <elliott> but yeah seriously, the point is that your library can never examine the (Key a) values, so it's identical, from your point of view, to a record that contains the results of every function you could apply to it, from the class
08:48:58 <monqy> i think i was thinking defining it generally for UI a?? i'll simplify it anyway
08:49:05 <elliott> and if you create that record, you'll realise that you never actually use the a in UI
08:49:09 <elliott> and it can be a trivial data type
08:50:05 <monqy> well there are other parts too...and i'm afraid if i simplify all of them i'll lose valauble things...or have to duplicate more code than with that example
08:50:35 <monqy> ending up making the sad empty type anyway and type families
08:50:50 <elliott> monqy: http://sprunge.us/gDXW
08:51:01 <elliott> monqy: "lose valuable things" <-- how can you? the translation is literally an isomorphism
08:51:19 <elliott> it is impossible to lose anything because everything you could do with the overcomplicated, awkward design is possible with the data type design
08:51:45 * elliott transformed a typeclass over a dummy empty type with type families into a two-element data type with no existentials in Shiro and it helped things massively
08:54:38 <elliott> monqy: basically if you use the version which requires: a dummy empty data type being passed around everywhere; pointless type families; more compliacted error messages; longer code to implement a UI
08:54:41 <CakeProphet> this debug output is getting pretty furious.
08:54:57 <elliott> monqy: over the identical-in-the-literally-identical-sense, simple record types that cannot possibly longer your code
08:54:58 <elliott> then the bear
08:55:00 <elliott> of hope
08:55:01 <elliott> will be sad
08:55:03 <monqy> :(
08:55:12 <monqy> i;m going to use the records one don;t worry
08:55:32 <monqy> right now i am just being sad about not thinking of useing more records than one; _;
08:55:33 <elliott> IM WORRYING
08:55:37 <elliott> THE WORRYING WILL NEVER STOP
08:55:41 <CakeProphet> typeclasses are still useful if you want other data types to interface with your code easily.
08:55:46 <elliott> monqy: IT IS OK I HAD TO UNLEARN IT TOO
08:55:57 <elliott> CakeProphet: That's... well, it's a sentence.
08:56:34 <elliott> monqy: I think the hardest part of Haskell is forcing yourself to not try anything fancy at all ever until you try functions and data types.
08:57:15 <CakeProphet> for example, Ord is nice to have because you can just pass your types into any Ord-accepting function, instead of wrapping it in some ord structure.
08:57:44 <elliott> typeclasses are not completely useless? WOW REALLY :P
08:57:57 <monqy> is cakeprohpet aware of the context i suspect not.....
08:57:58 <CakeProphet> ...yes I'm just discussing HOW they are useful. :P
08:58:20 <CakeProphet> not the specific problem no. Just that you guys are talking about typeclasses and data types being isomorphic.
08:58:41 <elliott> please...you have no idea what the context is at all stop... taking things we say out of context and trying to disprove them
08:58:56 <CakeProphet> .......I am not trying to disprove anything?
08:59:12 <CakeProphet> there's nothing to disprove.
08:59:29 <monqy> then why are you saying
08:59:29 <monqy> things
08:59:48 <CakeProphet> to like, I dunno, talk about it in detail?
09:00:01 <CakeProphet> I wasn't aware this was #esoteric-debate
09:00:03 <monqy> it's funny because that wasn't what we were talking about
09:00:22 <monqy> also: since when wasn't it???
09:01:33 <CakeProphet> since always?
09:02:26 * CakeProphet does not say things on this channel with the intent of always refuting or proving someone else wrong.
09:05:09 <CakeProphet> in any case, elliott mentioned that typeclasses can be translated to ADT and that in many cases it simplifies the design. I was providing an example of where the opposite is true. That's... pretty much all.
09:05:16 <elliott> i never mentioned that sorry
09:05:20 <elliott> i was talking about one specific case
09:05:26 <elliott> exists =/= forall
09:05:38 <CakeProphet> "in many cases" =/= forall
09:05:48 <elliott> never said that
09:06:56 <CakeProphet> okay fine.
09:07:29 <CakeProphet> I guess I shouldn't bother.
09:11:57 -!- CakeProphet has set topic: intelectrical property | It is the 90s and there is time for the requirements of supervision and control of transmissible spongiform encephalopathies, also an Esolang event @ Hel/Finland on 3.10.2011: https://wiki.helsinki.fi/display/lambda/esoteeriset+ohjelmointikielet | god bless haskell america | 12345678 | http://codu.org/logs/_esoteric/.
09:12:05 <CakeProphet> why is 9 and 0 excluded from the number list?
09:12:18 <monqy> unnecessary
09:12:48 <monqy> who needs them
09:13:05 <CakeProphet> I assume the reason they're up there is because elliott's number keys are broken.
09:13:25 <CakeProphet> but maybe 9 and 0 work fine.
09:13:35 <elliott> they do
09:13:43 <monqy> why doesn't 0 on the left of 1 anyway
09:13:46 <monqy> this has bugged me forever
09:14:11 -!- ais523 has joined.
09:14:14 -!- ais523 has quit (Changing host).
09:14:14 -!- ais523 has joined.
09:14:19 * CakeProphet never uses the numpad
09:14:22 <monqy> what
09:14:25 <monqy> neither do I
09:14:27 <monqy> how is it relevant
09:14:33 <CakeProphet> maybe if I were like an accountant or something
09:14:37 <CakeProphet> and punched in numbers all day.
09:14:39 <CakeProphet> to a spreadsheet
09:14:41 <CakeProphet> then I might adopt it.
09:15:08 <monqy> that sounds like hell
09:15:40 -!- Patashu has joined.
09:15:42 <CakeProphet> it's not too different from what programmers do...
09:15:54 <elliott> it's not too different from what programmers like you do, maybe
09:16:01 <CakeProphet> except we have to think about what we're typing.
09:16:22 <monqy> thinking a smaller difference than typing is a similarity
09:16:27 <monqy> the wonderful world of hell
09:17:42 <CakeProphet> elliott: I'm not really sure that makes any sense, but I don't really appreciate it either.
09:18:30 <elliott> Well, if you think programming is like that, you can't be doing very interesting programming.
09:18:51 <CakeProphet> it's similar in that you are confined to one place typing for hours
09:18:55 <CakeProphet> is basically what I was saying.
09:19:28 <monqy> but that's not the hellish part
09:19:30 <CakeProphet> programming is interesting. why else would I be here?
09:20:02 <monqy> programming is usually fairly awful, things not doing what I want them to do
09:20:12 <CakeProphet> monqy: programming can be its own special hell. :)
09:20:30 <monqy> that's when people make me do things I don't want to do
09:20:38 <CakeProphet> right.
09:20:59 <monqy> people intentionally vague, _perhaps not vague enough_
09:21:05 <CakeProphet> but if you have a degree of pain tolerance, then even that sort of programming can be enjoyable.
09:21:13 <monqy> ahahahah no
09:21:47 <CakeProphet> have fun making money then...
09:21:58 <monqy> I'm scared of that
09:22:11 <CakeProphet> it's really not so bad, you just can't be so stingy. :P
09:22:24 <monqy> I guess there might be a sort of joy in some cases, but it is a very bad joy
09:22:50 <CakeProphet> there's always academia I suppose.
09:23:11 <CakeProphet> if you have the money or the welfare state for that.
09:23:22 <monqy> academia scares me too
09:23:39 <CakeProphet> why's that?
09:23:43 <monqy> reasons
09:23:48 <CakeProphet> ah.
09:24:26 <CakeProphet> monqy: well, then there's always doing something amazing that makes you rich or at least somewhat well-off.
09:24:33 <CakeProphet> better start now.
09:24:44 <monqy> whats amazing
09:24:54 <CakeProphet> ...if I knew I would be working on it. :P
09:27:24 <CakeProphet> monqy: well if you go into academia you could always design a language or something.
09:27:35 <monqy> instant money
09:27:42 <CakeProphet> well, sure.
09:27:47 <CakeProphet> enough money to live off of.
09:27:50 <monqy> would it be a good language
09:27:58 <CakeProphet> I dunno, would it?
09:28:03 <monqy> would it be new and exciting and fresh
09:28:13 <CakeProphet> presumably
09:28:23 <monqy> would it solve problems
09:28:23 <CakeProphet> the idea with academia is that you produce original research.
09:28:35 <monqy> I'm afraid of not being cool enough for that
09:28:53 <monqy> I'm also afraid of parts of academia that aren't that
09:29:00 <Patashu> if you know of something that makes you think 'surely there's a better way!'
09:29:01 <CakeProphet> DON'T YOU SEE? YOUR FEAR IS WHAT SHACKLES YOU, SIR.
09:29:05 <Patashu> and you feel strongly about it
09:29:06 <Patashu> go into academia
09:29:16 <monqy> now i have to go into academia
09:29:40 <CakeProphet> well it's that develop practical software of some kind.
09:29:43 <CakeProphet> +or
09:29:58 <CakeProphet> or find a different source of income and program as a hobby.
09:30:24 <monqy> everything is terrible
09:30:30 <CakeProphet> nah
09:30:36 <monqy> maybe i will make a living off of being dead
09:30:48 <CakeProphet> .....
09:31:14 <CakeProphet> maybe this guy will allow me to use him as a reference, so that I can get a better paying job.
09:31:23 <CakeProphet> instead of my current zero work experience state.
09:31:41 <monqy> work experience terrifies me
09:32:01 <CakeProphet> you can use open source experience on a resume, if you're worried about how to get started.
09:32:17 <CakeProphet> or freelance work, which is the route I'm going.
09:38:37 <shachaf> Yo elliawtt, I heard u mad, so I put all the things in your things, so u can mad while u mad?
09:40:01 <elliott> shachaf: It's ok; now _you_ hate yourself.
09:40:23 <shachaf> elliott: No, as a matter of fact, I'm rather pleased with myself.
09:40:37 <elliott> For now, maybe.
09:40:45 <shachaf> ...I suppose that's not strictly disjoin from self-hatred.
09:40:51 <elliott> But eventually, you will feel the virus inside you. You will realise the horror you have caused.
09:40:52 <shachaf> Endohatred.
09:41:01 <elliott> And it will evaporate your sense of self-worth.
09:41:07 <shachaf> u mad?
09:41:11 <elliott> Or at least this is what _should_ happen to people who say u mad.
09:41:23 <shachaf> u mad!
09:41:29 <shachaf> Wow, you're right. It's happening already.
09:41:33 <Patashu> 'u mad' is possibly the worst internet meme
09:42:03 <Patashu> unless someone knows of a meme more engineered towards debate ending
09:42:07 <Patashu> /poisoning
09:42:21 <cheater> u mad?
09:42:38 <Patashu> a little
09:42:39 * shachaf realizes he's brought himself down to cheater's level.
09:42:41 * shachaf mad
09:42:48 <cheater> shachaf, u mad?
09:43:19 <elliott> shachaf: Enjoy your self-destruction.
09:43:25 <elliott> u mad?
09:43:31 <elliott> AARGH IT'S SPREAD
09:43:34 * shachaf will take elliott down with him.
09:43:42 * cheater burns corpses
09:43:45 <elliott> WE ALL MAD
09:43:47 <elliott> WE ALL MAD!!!
09:43:49 * shachaf mad, I tell you, mad!
09:43:50 <cheater> no u
09:43:55 <cheater> NO U
09:44:18 <cheater> < totally not mad. you sai i'm mad? u mad? aargghhgh
09:44:25 <shachaf> elliott: What's your localtime?
09:44:33 <elliott> shachaf: mad:mad
09:44:41 <elliott> Mad mad mad mad, u, mad u, mad mad.
09:44:41 <cheater> +MAD,))
09:44:45 <cheater> +MAD,00.
09:45:26 <elliott> Well, we're reaching new heights of discourse here.
09:45:35 <elliott> If height is measured by seeing how low something's sunk.
09:45:40 <cheater> thank you shachaf for this interesting experience.
09:46:07 <shachaf> Universal mutually assured destruction.
09:46:18 <shachaf> u mad?
09:46:34 * cheater fights the urge.
09:46:47 <monqy> hi
09:46:49 <monqy> i'm back from
09:46:51 <elliott> I wonder if there's a meme so bad that it literally does cause complete mental breakdown in anyone who uses it, but spreads so rapidly that they use it anyway.
09:46:52 <monqy> not paying attention
09:46:57 <cheater> @trollcoins shachaf +50
09:46:58 <lambdabot> Unknown command, try @list
09:46:59 <elliott> (Oblig. joke answer: religion)
09:47:08 <monqy> hyuk
09:47:19 -!- Jafet has quit (Ping timeout: 245 seconds).
09:47:24 <shachaf> elliott: That depends on what you call "mental breakdown".
09:47:26 <cheater> elliott, iphone
09:47:38 <shachaf> Religion is in many ways beneficial to its host.
09:47:49 <elliott> Note the "joke" part of "oblig. joke answer" :P
09:48:01 -!- Jafet has joined.
09:48:02 <ais523> religion does wonders in activating the placebo effect
09:48:20 <elliott> Hello ais523, u mad this fine day?
09:48:23 <CakeProphet> elliott: hey I disagree with your very serious answer.
09:48:23 <elliott> Oh god it's unstoppable.
09:48:32 <elliott> It's like a rash. I must rip off all my skin.
09:48:33 <cheater> as well as in unifying the masses by limiting their potential severely
09:48:37 <ais523> incidentally, there was an experiment recently in which people with irritable bowel syndrome were given placebos, and told they were placebos but would work anyway
09:48:40 <ais523> and they did indeed work anyway
09:48:49 <Patashu> haha
09:48:54 <monqy> elliott: maybe this...is your answer...
09:48:57 <Patashu> I love the placebo effect
09:49:12 <ais523> the scientists running the experiment were pretty surprised
09:49:18 <cheater> ais523, irritable bowel has a strong psychological element though
09:49:19 <ais523> perhaps the participants just didn't know what a placebo was
09:49:20 <shachaf> ais523: Did they test this by using a control group and giving them placebos?
09:49:21 <elliott> I wish the placebo effect worked for really useful things.
09:49:25 <elliott> shachaf: Hahaha
09:49:28 <ais523> cheater: it does, that's why they were testing on that
09:49:31 <cheater> it's not like it would cure a bacterial infection i think
09:49:35 <elliott> Like, curing cancer by placebo.
09:49:38 <elliott> That would be really useful.
09:49:40 <ais523> shachaf: tests /of/ the placebo effect typically are compared to not using anything at all
09:49:41 <CakeProphet> elliott: perhaps one could treat air as a placebo
09:49:53 <elliott> CakeProphet: One could do that, if one were trying to make no sense at all.
09:49:55 <CakeProphet> elliott: and then breathing automatically invokes a placebo effect of whatever desired.
09:50:02 <shachaf> ais523: Note the "joke" part of elliott's "oblig. joke answer" above.
09:50:05 <cheater> i'm sure you've you seen children in africa with stomachs full of air
09:50:14 <elliott> shachaf: Does that enable joke mode for the rest of eternity?
09:50:21 <shachaf> elliott: Just for this channel.
09:50:25 <shachaf> So no harm done.
09:50:25 <ais523> shachaf: I'm not discussing elliott's answer
09:50:28 <elliott> Well, that's been on since the start.
09:50:31 <shachaf> ais523: Nor am I.
09:50:43 <shachaf> Hey, you're ais523 from #nethack.
09:50:50 <elliott> No, really?
09:50:51 <cheater> i have a leftover slicehost VPS. can i use it to run DF?
09:50:53 <ais523> so the fact that elliott made a joke doesn't cause everything said after that in the channel to be humour value only
09:50:56 <elliott> There's so many ais523s going around.
09:51:02 <CakeProphet> elliott: it makes just as much sense as a sugar pill creating a placebo effect...
09:51:07 <monqy> I saw an ais523 over there too
09:51:09 <monqy> that way
09:51:14 <shachaf> Do you know toft?
09:51:16 * shachaf knows toft.
09:51:20 <ais523> shachaf: luckily both channels are on Freenode, so it's kind-of easy to verify I'm the same ais523 in each case
09:51:22 <cheater> german author
09:51:23 -!- derdon has joined.
09:51:27 <ais523> and I know of toft, but haven't interacted with him/her much
09:51:36 <shachaf> Oh.
09:52:25 <shachaf> At any rate, I, too, was making a joke.
09:52:33 <shachaf> preflex isn't in this channel. :-(
09:52:39 * shachaf mad
09:52:52 <elliott> Nor is mauke. Get him back.
09:52:53 <elliott> They used to be.
09:52:55 <ais523> elliott: hey, I think shachaf may be someone who can be placed in a channel with both you and Vorpal and all three of you won't get each other's jokes
09:52:57 <elliott> Does preflex follow mauke around everywhere?
09:52:59 <elliott> Like a pet.
09:53:06 <elliott> An IRC pet bot. That's adorable.
09:53:17 * ais523 pats fungot on the head
09:53:17 <fungot> ais523: 6. as seen above, any attempt to insert them. user:thatsothatso 01:29, 18 september 2006 ( utc
09:53:31 <monqy> I used to have a pet bot, but then it died, because i killed it
09:53:32 <ais523> hmm, looks like it's in wikipedia mode
09:53:33 <elliott> fungot's chained to a stick because of its volatile nature.
09:53:33 <fungot> elliott: it has come under criticism for it. --user:ghcoolghcool 06:15, 28 november 2007 ( utc)))
09:53:40 <elliott> That stick is #esoteric.
09:53:48 <monqy> isn't fungot in other channels too
09:53:49 <fungot> monqy: there seems to be about wilson, but there are many points worth mentioning that eisenhower was facing fnord that november and wanted everything looking smooth and fnord. i have created the universe. though buddhas are skillful in helping all fnord beings, their power is limited by the fnord and the fnord.
09:53:59 <CakeProphet> monqy: if only there were some way to check.
09:54:03 <ais523> haha, the sigs don't get fnorded?
09:54:11 <ais523> presumably because they're repeated so much
09:54:21 <CakeProphet> ^style europarl
09:54:21 <fungot> Selected style: europarl (European Parliament speeches during approx. 1996-2006)
09:54:25 <monqy> I think fungot is in #scheme? I remember I visited there and fungot was therE??
09:54:25 <fungot> monqy: unfair practice occurs when an airline that has made the european parliament around two years ago, the sequence of responses is correct.
09:54:26 <shachaf> ais523: Who's Vorpal?
09:54:37 <CakeProphet> channels : #esoteric
09:54:42 <elliott> shachaf: A monster... of boringness... and despair.
09:54:43 <CakeProphet> monqy: not currently
09:54:44 <monqy> whois doesn't work like that
09:54:44 <ais523> someone who typically idles in this channel
09:54:47 <ais523> although he isn't here atm
09:54:48 <elliott> Or that, yes.
09:54:56 <monqy> CakeProphet: whois doesn't work like that here
09:55:09 <CakeProphet> oh, hmmm...
09:55:11 <CakeProphet> indeed not.
09:55:12 <ais523> elliott and Vorpal are known for not understanding the other's brand of humour
09:55:21 <elliott> I _understand_ Vorpal's, it just isn't funny.
09:55:23 <CakeProphet> monqy: I recall previous times whois would show me all channels.
09:55:25 <elliott> Vorpal is the one who goes eh a lot. :p
09:55:28 <shachaf> elliott: Example?
09:55:35 <monqy> do I go eh a lot
09:55:40 <CakeProphet> eh.
09:55:47 <elliott> shachaf: I, um, do you know AnMaster? I am really having trouble explaining Vorpal, I mean, a priori.
09:55:53 <shachaf> elliott: It sounds to me like u just mad
09:56:00 <elliott> I just the maddest.
09:56:08 <monqy> dead
09:56:09 * shachaf is not familiar with AnMaster
09:56:14 * CakeProphet has the best humor of all.
09:56:16 <elliott> Darn, so you don't know him at all.
09:56:24 <elliott> You will just have to... imagine.
09:56:30 <monqy> i have the humour trohpy
09:56:32 <elliott> ais523: Explain Vorpal to shachaf or he might mad.
09:56:40 <ais523> elliott: I tried
09:56:42 <shachaf> elliott: You ought to go to sleep.
09:56:46 <monqy> "good at jkoe"
09:57:02 <elliott> "good at jkoe" is a good motto.
09:57:08 <elliott> Is it a motto? I'm not sure what it is.
09:57:08 <shachaf> Good at jkoe and doesn't afraid of anything?
09:57:18 <monqy> thats me
09:57:26 <monqy> it says so on my the humour trohpy
09:57:40 <CakeProphet> I think Vorpal is a pretty cool guy. eh tells jokes and doesn't afraid of anything.
09:58:08 * shachaf hates jokes.
09:58:11 <shachaf> Is that a good start>
09:58:14 <shachaf> s/.$/?/
09:58:33 <elliott> shachaf: Sounds like u might be a tad mad.
09:58:47 <elliott> This is really quite liberating, just being a horrible person.
09:58:53 <shachaf> elliott: Go to sleep.
09:59:01 * shachaf assumes elliott lives in EDT.
09:59:09 <monqy> I'm horrible in my own special way, or maybe someone else's way too, I haven't bothered to check
09:59:16 <elliott> Assumptions are great things.
09:59:27 * CakeProphet lives in EDT and NEEDS NO SLEEP
09:59:29 <CakeProphet> no such thing.
09:59:43 <CakeProphet> 6 AM is afternoon for me.
09:59:54 <elliott> What even _are_ timezones, anyway?
10:00:02 <CakeProphet> standards.
10:00:03 <elliott> I ask the questions on everyone's minds.
10:00:08 <shachaf> You know that yellow blob in the sky?
10:00:19 * shachaf worries that he's using words unfamiliar to elliott.
10:00:26 <elliott> You mean... eggs?
10:00:31 <shachaf> Right. Eggs.
10:00:38 <elliott> Okay, eggs.
10:00:57 <monqy> how do ehggs in the sky
10:01:03 <monqy> is that how where you live works
10:01:08 <shachaf> Just the yolks, yo.
10:01:30 <shachaf> So egg yolks float around in the sky, and sometimes they disappear.
10:01:37 <shachaf> When they disappear, we call that "breakfast" or "morning".
10:01:44 <elliott> Yes. I have, at times, been sufficiently sleep-deprived to imagine such things.
10:01:46 <shachaf> Then we're awake until they come back.
10:01:53 <elliott> Thank god for the great frying pan in the sky.
10:01:55 <shachaf> And that's what a time zone is.
10:01:58 <monqy> I tend not to hallucinate
10:02:11 * shachaf hallucinates lovely classical music when he's tired.
10:02:21 <monqy> maybe I just haven't deprived myself enough
10:02:37 <CakeProphet> yop\\\
10:02:39 <elliott> I suggest fasting.
10:02:43 <elliott> Also, slowing.
10:02:44 <monqy> good idea
10:03:10 <CakeProphet> !wacro 3 5
10:03:12 <EgoBot> MCW
10:03:15 <monqy> wacro
10:03:27 <monqy> miserable crummy wacro
10:03:45 <CakeProphet> MCW is a perfectly believable acronym.
10:03:45 <elliott> Now that I know how to use Perl's C API, maybe I'll make mcmap use it as its embedded language.
10:03:46 <elliott> Note: I won't.
10:04:04 <CakeProphet> elliott: you definitely should.
10:04:27 <CakeProphet> And because you won't what you should, you are unethical.
10:04:36 <elliott> I won't what I should
10:04:43 <CakeProphet> correct.
10:05:19 <shachaf> elliott: You should come to #haskell-blah, yo.
10:05:26 <shachaf> We make fun of people who aren't us.
10:05:37 <monqy> sounds like a cool place
10:05:45 <elliott> Hmm, the last time I did that cheater got banned.
10:05:48 <elliott> Sure, I'll give it a shot.
10:05:48 <Patashu> the only moral tribalism is my tribalism
10:06:03 <monqy> banned?????
10:06:13 <CakeProphet> :o
10:06:17 <monqy> were you naughty
10:06:22 <monqy> :'(
10:06:33 <elliott> monqy: Yes, I was so naughty that they banned someone who isn't me.
10:06:42 <elliott> Whereby they I mean oerjan.
10:06:52 <monqy> oh I misread
10:06:57 <monqy> maybe you can ban cheater again
10:07:05 <CakeProphet> elliott has been established to be naughty from his lack of regard for Perl's C API suggestions to use macros in place of direct function calls.
10:07:12 <CakeProphet> shameful and tasteless, honestly.
10:07:20 <shachaf> @quote monochrom
10:07:21 <lambdabot> monochrom says: The Three Laws of Types. (1) Must protect programmer. (2) Must obey programmer, when not in conflict with (1). (3) Must protect computer, when not in conflict with (1) or (2).
10:07:32 <shachaf> @quote monochrom
10:07:33 <lambdabot> monochrom says: "Monad is about computation." "Our company is about synergy." "iPod is about coolness." Godawful postmodernism nothingness.
10:07:56 <shachaf> elliott: Next step is to /part #esoteric.
10:07:58 <Patashu> @quote monochrom
10:07:59 <lambdabot> monochrom says: Don't wrap your head around haskell. Immerse! Wrap haskell around your head.
10:08:02 <Patashu> @quote monochrom
10:08:02 <monqy> wow my company is about synergy too
10:08:02 <lambdabot> monochrom says: premature generality is the root of OOP
10:08:08 <Patashu> @quote monochrom
10:08:08 <lambdabot> monochrom says: just add #! /usr/bin/runghc to your haskell file. then type errors occur at runtime only.
10:08:17 <shachaf> Hah.
10:08:21 <elliott> shachaf: But that's a bad step.
10:08:27 <elliott> @quote elliott
10:08:28 <lambdabot> elliott says: Top universities now employ people to watch infomercials all day to find the latest mysteries.
10:08:31 <elliott> @quote elliott
10:08:32 * shachaf guarantees less mad
10:08:32 <lambdabot> elliott says: i'm here to prove theorems and compile code and I'm all out of code
10:08:35 <elliott> @quote elliott
10:08:36 <lambdabot> elliott says: Only two things in the universe are certain: Death, and two of the libraries you've decided to use taking different types of ByteString.
10:08:37 <elliott> @quote elliott
10:08:38 <lambdabot> elliott says: Only two things in the universe are certain: Death, and two of the libraries you've decided to use taking different types of ByteString.
10:08:39 <elliott> Ahhh, ego.
10:08:50 <monqy> @quote monqy
10:08:51 <lambdabot> No quotes match. My pet ferret can type better than you!
10:08:53 * shachaf regularly @forgets his quotes from lambdabot.
10:09:04 <elliott> @quote shachaf
10:09:05 <lambdabot> shachaf says: boost::lambda: The ultimate error message.
10:09:10 <CakeProphet> `quote
10:09:14 <HackEgo> 555) <fungot> fizzie: i, myself, will bring an end to all.
10:09:15 <elliott> ?remember shachaf * shachaf regularly @forgets his quotes from lambdabot.
10:09:15 <lambdabot> Okay.
10:09:26 <shachaf> @forget shachaf * shachaf regularly @forgets his quotes from lambdabot.
10:09:26 <lambdabot> Done.
10:09:33 <CakeProphet> `quote gaping
10:09:35 <elliott> Neat. Orderly. Very well.
10:09:36 <HackEgo> 617) <elliott> Deewiant: How do you go through life without seeing at least one gaping anus, that's what I want to know
10:09:45 <elliott> CakeProphet: Hey, it's a legitimate query.
10:10:17 <monqy> is haskell-blah being a good place I'm tempted to join
10:10:37 <CakeProphet> elliott: of course it is.
10:10:46 <shachaf> monqy: Only if you like Haskell and simultaneously have no desire to talk about it.
10:11:02 <CakeProphet> wow that suits me perfectly.
10:11:13 <monqy> me too
10:12:17 <shachaf> Wow, I can't believe I missed an opportunity there.
10:12:24 <shachaf> Yo elliawtt, I hird u mad, so I put all the things in your things, so u can mad while u mad?
10:12:30 <monqy> :|
10:12:49 <Patashu> u not even mad serious jelly?
10:13:02 <elliott> I see your conditions only continue to deteriorate.
10:13:09 <elliott> Soon u will so mad that there will be nothing but the mad.
10:13:17 <CakeProphet> forever mad.
10:13:21 <elliott> Aargh.
10:13:25 <CakeProphet> :)
10:13:43 -!- itidus20 has quit (Ping timeout: 260 seconds).
10:13:44 <monqy> i'm furious
10:14:12 <CakeProphet> I am great sad that itidus20 as parted.
10:14:50 <Patashu> If 4chan never existed, would the internet be notably different?
10:15:13 <CakeProphet> there is no such thing as internet without 4chan.
10:15:20 <CakeProphet> if there were no 4chan then something else would have taken its place.
10:15:26 <Patashu> That's what I assumed
10:16:23 <CakeProphet> apparenty I can magically make things true by saying them.
10:16:24 <lambdabot> You think this is a botiecall??
10:16:33 <CakeProphet> .....
10:16:33 <lambdabot> When i get kinky, i have been known to engage in watersports... Does that turn you on as well?
10:16:50 <Patashu> Oh murr
10:16:51 <lambdabot> i hate it when i get stuck with chatting with a bot!
10:17:06 <elliott> i;m cant stop laughign
10:17:07 <lambdabot> stop what?
10:17:34 <Patashu> Hey elliott, me and lambdabot need some alone time together... Eyebrow waggle, eyebrow waggle
10:17:45 <elliott> Thank god for /query
10:18:07 <CakeProphet> @hoogle a -> a -> a -> a
10:18:08 <lambdabot> Network.BufferType buf_append :: BufferOp a -> a -> a -> a
10:18:08 <lambdabot> Language.Haskell.TH CondE :: Exp -> Exp -> Exp -> Exp
10:18:08 <lambdabot> Language.Haskell.TH.Syntax CondE :: Exp -> Exp -> Exp -> Exp
10:18:22 <CakeProphet> @hoogle a -> a -> a -> a -> a
10:18:23 <lambdabot> Text.Regex.Base.RegexLike MR :: a -> a -> a -> [a] -> Array Int a -> MatchResult a
10:18:23 <lambdabot> Text.Parsec.Error showErrorMessages :: String -> String -> String -> String -> String -> [Message] -> String
10:18:23 <lambdabot> Text.ParserCombinators.Parsec.Error showErrorMessages :: String -> String -> String -> String -> String -> [Message] -> String
10:18:41 <Patashu> never enough parameters!
10:20:43 <CakeProphet> @hoogle a -> a -> a -> a -> a -> a
10:20:44 <lambdabot> Text.Parsec.Error showErrorMessages :: String -> String -> String -> String -> String -> [Message] -> String
10:20:44 <lambdabot> Text.ParserCombinators.Parsec.Error showErrorMessages :: String -> String -> String -> String -> String -> [Message] -> String
10:20:44 <lambdabot> Control.Monad liftM5 :: Monad m => (a1 -> a2 -> a3 -> a4 -> a5 -> r) -> m a1 -> m a2 -> m a3 -> m a4 -> m a5 -> m r
10:20:57 <monqy> are you looking for something
10:21:05 <CakeProphet> I don't like these approximate types.
10:21:07 <CakeProphet> that hoogle gives.
10:21:22 <monqy> :t undefined :: a -> a -> a -> a -> a -> a
10:21:23 <lambdabot> forall a. a -> a -> a -> a -> a -> a
10:21:37 <elliott> CakeProphet: those are the whole point of hoogle
10:22:09 <CakeProphet> elliott: to give you answers that don't match what you're looking for?
10:22:24 <monqy> because you really wany a -> a -> a -> a -> a -> a
10:22:29 <monqy> where wany means want
10:22:50 <CakeProphet> yes, if I didn't I'd type a -> b -> c -> d -> e -> f
10:23:12 <monqy> no you don't
10:23:17 <monqy> nobody wants a -> a -> a -> a -> a -> a
10:23:28 <CakeProphet> that's not even the point though.
10:23:44 <monqy> who cares the point is bad
10:24:14 <monqy> the most matchy appear at the top
10:24:40 <monqy> there's really not much of a difference at all except now you can enter things that are like but not exactly the types you want?
10:24:48 <monqy> where now is hoogle
10:24:51 <CakeProphet> I suppose.
10:25:26 <elliott> ?hoogle (a -> b -> c) -> (a -> b) -> a -> c
10:25:27 <lambdabot> Data.Function on :: (b -> b -> c) -> (a -> b) -> a -> a -> c
10:25:27 <lambdabot> Data.Data gmapQl :: Data a => (r -> r' -> r) -> r -> (d -> r') -> a -> r
10:25:28 <lambdabot> Control.Parallel.Strategies parZipWith :: Strategy c -> (a -> b -> c) -> [a] -> [b] -> [c]
10:25:34 <elliott> Darn, it didn't find ap :P
10:26:13 <CakeProphet> I wouldn't expect it to.
10:26:52 <elliott> Why not
10:27:07 <CakeProphet> because that's not the type of ap.
10:27:17 <monqy> :t ap :: (a -> b -> c) -> (a -> b) -> a -> c
10:27:19 <lambdabot> forall a b c. (a -> b -> c) -> (a -> b) -> a -> c
10:27:22 <CakeProphet> :t ap
10:27:23 <lambdabot> forall (m :: * -> *) a b. (Monad m) => m (a -> b) -> m a -> m b
10:27:45 <elliott> CakeProphet: ap meets that type very well, thank you very much.
10:27:52 <monqy> :t ap (undefined :: a -> b -> c)
10:27:54 <lambdabot> forall a a1 b. (a -> a1) -> a -> b
10:29:00 <CakeProphet> @hoogle m (a -> b) -> m a -> m b
10:29:00 <lambdabot> Control.Applicative (<*>) :: Applicative f => f (a -> b) -> f a -> f b
10:29:00 <lambdabot> Control.Monad ap :: Monad m => m (a -> b) -> m a -> m b
10:29:00 <lambdabot> Control.Applicative (<**>) :: Applicative f => f a -> f (a -> b) -> f b
10:29:22 <CakeProphet> hmmm...
10:29:30 <CakeProphet> I suppose it /should/ show ap.
10:29:45 <CakeProphet> as you may not always know what you're looking for.
10:29:56 <CakeProphet> and be really specific when you want something general.
10:30:32 <CakeProphet> s/know/know the type of/
10:30:42 <CakeProphet> obviously you don't know what you're looking for because you're searching for it. :P
10:34:01 <CakeProphet> fungot
10:34:03 <fungot> CakeProphet: madam president, regarding the report by mr rosado fernandes, and in order to restore national control in europe of an industrial strategy for europe'. those who oppose it, when the system was greatly improved in 1999 when the revised system was adopted by the european commission' s proposal, a motion for resolution we now have between mr cox and mr david martin. it leaves parliament in a single market, the europea
10:35:07 <monqy> the europea
10:35:33 -!- Jafet has quit (Quit: Leaving.).
10:51:32 -!- CakeProphet has changed nick to dons.
10:51:42 -!- dons has changed nick to CakeProphet.
10:53:35 -!- elliott has changed nick to totallyNotAScam.
10:53:40 -!- totallyNotAScam has changed nick to elliott.
10:54:41 -!- CakeProphet has changed nick to BritneySpears14.
10:55:40 -!- BritneySpears14 has changed nick to CakeProphet.
10:57:10 -!- brisingr has joined.
10:57:14 <elliott> Nooooooo.
10:57:14 <monqy> hi
10:57:16 <elliott> Okay fine you can stay.
10:57:25 -!- itidus20 has joined.
10:57:28 <monqy> hi
10:57:31 <CakeProphet> itidus20: weeeee
10:57:44 <CakeProphet> fungot: hi
10:57:45 <fungot> CakeProphet: i voted against the lannoye report gives a generally favourable verdict on two commission communications, seeking to migrate from one country to another. in any event, we in this parliament is ensuring that work is taxed less and the more developed agricultural areas rather than face paralysis and stagnation at the hands of the council.
10:57:49 <monqy> hi
10:58:55 <CakeProphet> ^ ff7
10:58:58 <CakeProphet> ^style ff7
10:58:58 <fungot> Not found.
10:59:00 <CakeProphet> ^style ff7
10:59:00 <fungot> Selected style: ff7 (Full script of the game Final Fantasy VII)
10:59:01 <brisingr> I have a limited comprehension of the underlying context of the inception of this particular channel
10:59:13 <CakeProphet> fungot: that sword
10:59:13 <fungot> CakeProphet: you the truth, i did work for cheap! i've had a way to get tattoos. is that all?
10:59:30 <elliott> brisingr: http://esolangs.org/wiki/
10:59:34 <elliott> uggh wait
10:59:37 <elliott> http://esoteric.voxelperfect.net/wiki/Main_Page
10:59:41 <elliott> stupid dns
10:59:46 <monqy> is dns still happening
11:00:00 <monqy> poor esolangs.org
11:00:19 <brisingr> oh so #esoteric is language esoteric not general esoterism
11:00:30 <brisingr> cool
11:00:45 <elliott> brisingr: we get a lot of people looking for the latter
11:00:53 <elliott> they tend to get quite upset somehow
11:01:00 <monqy> except for some of them
11:02:13 <brisingr> anyone here played trainyard? it would make an awesome esoteric language
11:02:37 <brisingr> I know there are tons already with 2d movement
11:03:15 <monqy> never heard of trainyard. what's special about it?
11:03:50 <brisingr> it's a game involving 2d movement of the trains with tracks and all
11:04:15 <brisingr> the fun part is where you have max 2 tracks per unit square and they automatically change every time a train passes
11:04:25 <brisingr> you can make counter loops and stuff, theoretically
11:04:28 <monqy> mmm
11:04:48 <elliott> :t Data.Map.lookupWithDefault
11:04:50 <lambdabot> Not in scope: `Data.Map.lookupWithDefault'
11:04:56 <elliott> ?hoogle lookupWithDefault
11:04:56 <lambdabot> No results found
11:04:59 <elliott> Oh pleae.
11:05:01 <elliott> please.
11:05:03 <CakeProphet> elliott: I believe it's M?
11:05:07 <CakeProphet> or something like that.
11:05:10 <elliott> :t M.lookupWithDefault
11:05:11 <Deewiant> elliott: findWithDefault
11:05:12 <lambdabot> Couldn't find qualified module.
11:05:16 <elliott> :t Data.Map.findWithDefault
11:05:18 <lambdabot> forall a k. (Ord k) => a -> k -> M.Map k a -> a
11:05:18 <elliott> Deewiant: Thanks.
11:05:31 -!- GreaseMonkey has quit (Quit: The Other Game).
11:10:12 -!- derrik has joined.
11:10:25 -!- derrik has quit (Client Quit).
11:10:51 -!- derrik has joined.
11:14:37 <elliott> shachaf: Go to sleep.
11:14:43 <shachaf> elliott: goto sleep;
11:14:47 <elliott> COME FROM SLEEP
11:14:54 <shachaf> Digusting.
11:14:59 <elliott> Digusting indeed.
11:15:06 <shachaf> Of all the places to go to after SLEEP, this channel is one of the worst.
11:15:19 <elliott> Says the guy who hangs out in #haskell-blah of all places.
11:17:44 <brisingr> so #esoteric is like a secondary #haskell-blah
11:18:23 <monqy> from my perspective it's the other way around
11:18:38 <elliott> These statements are true as of approximately half an hour ago when we all invaded there.
11:18:50 <elliott> Also we keep getting people from #haskell.
11:19:04 <elliott> But #haskell doesn't have, uh, ais523. And oerjan. And oerjan wrote most of the Haskell report by himself!
11:19:12 <elliott> In fact, most refer to him as the TRUE father of Haskell.
11:19:24 <Deewiant> For small values of "most".
11:19:39 <elliott> Those typo fixes were crucial, Deewiant.
11:19:40 <elliott> Crucial.
11:19:42 <ais523> monqy: #haskell is like a secondary #esoteric-blah?
11:19:50 <monqy> ais523: sure
11:20:01 <ais523> I haven't actually been in #esoteric-blah for a while
11:20:05 <ais523> what's it like there nowadays?
11:20:12 <elliott> The best.
11:20:17 <ais523> it became mostly useless when pastebins were invented and bsmnt_bot disappeared
11:20:28 <elliott> "pastebins were invented" XD
11:20:37 <ais523> although I love the concept of a channel whose main purpose is for thousand-line pastes
11:20:50 <monqy> what was bsmnt bot
11:21:07 <ais523> a bot that ran arbitrary Python
11:21:12 <ais523> with some sort of complex sandboxing
11:22:08 <ais523> what happened to bsmntbombdood anyway?
11:22:31 <ais523> -NickServ- Last seen : Aug 06 23:37:08 2011 (4 weeks, 4 days, 11:45:55 ago)
11:22:41 <elliott> he comes here occasionally
11:22:46 <elliott> last time as subleq for a second or two
11:23:15 <ais523> ah, aha, different nick, I was wondering about that
11:23:30 <ais523> also, Slashdot just published a headline saying that Linux games run faster via an emulation layer on BSD
11:23:43 <ais523> I don't know, or really care, if it's true or not
11:23:45 <shachaf> Slashdot published articles?
11:23:49 <elliott> Has Netcraft confirmed it?
11:23:51 <ais523> but it seems like such a beautifully pointless thing to measure
11:23:56 <ais523> elliott: nope, Phoronix
11:24:02 <elliott> Not good enough.
11:24:19 <shachaf> In Soviet Russia, ...
11:24:20 <elliott> oh, the project gutenberg founder died
11:24:22 * shachaf can't go on.
11:24:26 * shachaf too mad
11:24:30 <elliott> shachaf: Netcraft confirms u mad?
11:24:38 <monqy> 04:25:41 < elliott> oh, the project gutenberg founder died
11:24:38 <monqy> 04:25:42 * shachaf can't go on.
11:24:40 <monqy> :'(
11:34:13 -!- monqy has quit (Quit: hello).
11:35:07 -!- brisingr has quit (Quit: haskell is asking me on a date).
11:42:51 <elliott> https://github.com/ivmai/bdwgc/commit/5abff1068fcfb3234295021a635ea5167404a10b
11:42:59 <elliott> Gregor: How long has Boehm GC been developed without -Wall...
11:45:00 -!- sebbu2 has changed nick to sebbu.
11:46:52 <Gregor> "Developed without -Wall" is not the same as "Having -Wall in configure.ac", which is just a bad option altogether.
11:47:18 <Gregor> (Rather, "developed without -Wall" is not the same as "NOT having -Wall in configure.ac")
11:48:37 <elliott> Yeah OK :P
11:48:41 <elliott> What's just a bad option altogether?
11:49:57 -!- derrik has quit (Ping timeout: 264 seconds).
11:50:55 <Gregor> Having -Wall in your configure.ac
11:51:16 <Gregor> Considering that they add new and usually-stupid warnings to every version of GCC, that's just a recipe for pointless bug reports.
11:51:22 <elliott> Right
11:57:49 -!- sllide has joined.
12:05:27 <Patashu> Warning: Code insufficiently discombobulated. Consult with your physician before compiling. Thank you.
12:08:03 -!- derrik has joined.
12:08:15 -!- derrik has left.
12:12:32 -!- nooga has quit (Ping timeout: 264 seconds).
12:16:20 -!- DH____ has joined.
12:19:16 <derdon> damn these noisy farmers!
12:19:38 <elliott> hi DH____, you sound new
12:19:55 <DH____> Hi
12:21:08 <DH____> I've been here quite a bit before, but I've just set up my phone to access this channel, so in this form I am new...
12:22:54 <elliott> oh, ok :)
12:23:06 <elliott> what nick did you use?
12:23:08 <ais523> why is your phone using Virgin Media's cable service?
12:23:08 <ais523> or is it a landline phone?
12:23:16 <elliott> ais523: wifi, man
12:23:39 <DH____> Yes, WiFi
12:23:41 <ais523> phones use wifi nowadays?
12:23:59 <DH____> HTC Desire S
12:24:03 <Deewiant> Where "nowadays" = "for several years"
12:24:04 <DH____> Android
12:24:05 <elliott> ais523, you're so ais523
12:24:20 <DH____> Anyway...
12:24:38 <ais523> elliott: the iPad was pretty much Apple realising "hey, our phones don't actually need to be phones to still do their job properly"
12:25:27 <DH____> I usually use a nick of some variation upon DH or DHeadshot...
12:27:11 <ais523> DH____ is the first nick you've been under from that exact hostname in here
12:27:14 <DH____> The iPad is Apple taking inspiration from The Onion's parody of their products...
12:27:19 <ais523> at least, while I've been in here simultaneously
12:27:52 <DH____> From my phone, yes..
12:28:11 <ais523> aha:
12:28:15 <ais523> logs/freenode_#esoteric.log:[Thursday, September 08, 2011] [01:17:04 pm] JoinDH____ has joined this channel (~DH____@cpc2-woki2-0-0-cust667.6-2.cable.virginmedia.com).
12:28:16 <ais523> logs/freenode_#irp.log:[Sunday, July 18, 2010] [02:58:08 pm] JoinDH____ has joined this channel (~DHeadshot@cpc2-woki2-0-0-cust667.glfd.cable.ntl.com).
12:28:51 <ais523> the first of those is you just joining
12:28:56 <ais523> and the second is you joining #irp last year
12:29:07 <ais523> amusingly, the only thing that's changed in the hostname is ntl.com to virginmedia.com
12:29:18 <ais523> it seems that hostnaming structure survived the company buyout
12:29:34 <DH____> Virgin bought Ntl
12:29:38 <ais523> indeed
12:30:07 <DH____> Sorry, ninjad
12:31:00 <ais523> why are you apologising for being ninja'd?
12:31:03 <ais523> most people rage instead
12:32:18 <DH____> Probably my Britishness kicking in... ;)
12:32:27 <ais523> heh, there are quite a few Brits here
12:32:34 <ais523> (as if being with virginmedia didn't give it away in your case)
12:32:50 <ais523> in fact, I suspect the channel is more than half Europeans, although I'm not certain in that
12:32:58 <ais523> there are certainly an unexpectedly high number of Scandinavians here
12:33:04 <DH____> I should really find a.way to mask that...
12:33:40 <DH____> The virginmedia I mean...
12:33:51 <ais523> go to #freenode, /nick to DHeadshot (or whatever your primary nick is) and identify, ask for an unaffilated cloak, wait half an hour to an hour for a staffer to notice
12:34:28 -!- FireFly has joined.
12:34:38 <DH____> That works?
12:34:55 <ais523> yep
12:35:03 <DH____> Thanks!
12:35:03 <ais523> that's what unaffilated cloaks are for, hiding your hostname
12:35:25 <ais523> they only work if you identify and take a few seconds to kick in, though (so if you're really paranoid, don't join any channels for a few seconds after logging on)
12:37:24 -!- DH____ has quit (Changing host).
12:37:24 -!- DH____ has joined.
12:38:34 <DH____> Any way to check if it worked?
12:38:51 <Deewiant> 2011-09-08 15:38:08 --> DH____ (~DH____@unaffiliated/dh----/x-6288474) has joined #esoteric
12:39:09 <DH____> :D
12:40:03 <ais523> that's quite the cloak
12:40:04 <ais523> I like it
12:40:19 <DH____> Heh
12:40:27 <ais523> presumably it's some encoding scheme for the underscores
12:40:41 <ais523> it reminds me a bit of utf-5, although it isn't exactly that
12:41:25 <ais523> DH____: /whoising yourself is a more direct way to make sure it worked
12:42:21 <DH____> Well, given the channel theme, it shouldn't be hard for someone here to reverse engineer it...
12:42:27 <DH____> Thanks
12:43:13 <ais523> well, translating 6288474 to hex would seem to be a good start
12:43:21 <ais523> !c printf("%x",6288474)
12:43:25 <EgoBot> 5ff45a
12:43:33 <ais523> hmm, that doesn't seem to help much
12:43:42 <ais523> (also, interesting that EgoBot doesn't seem to need a semicolon there)
12:44:02 <ais523> perhaps it's not an encoding scheme but just a random number there for uniquifying purposes
12:44:12 <DH____> Possibly
12:44:42 <elliott> probably
12:45:09 <DH____> Maybe I'm the nth person to have underscores in their nick...
12:45:43 <ais523> the 523 in my nick's a random number for uniquifying purposes too
12:47:21 <ais523> hmm, I still want to get round to that language some time where the source code is just a number
12:47:44 <ais523> and the interp looks on anagolf for the problem with that number, then takes majority opinion of the programs not marked as cheats
12:48:11 <ais523> giving extra weight to ones specifically marked as not-cheating, I suppose
12:48:35 <elliott> what about endless problems that don't reveal src?
12:48:40 <elliott> like most popular ones
12:48:44 <DH____> Doesn't unary only use a number?
12:48:53 <ais523> elliott: I, umm, don't know
12:48:54 -!- azaq23 has joined.
12:48:58 <ais523> DH____: yes, but it's a pretty /big/ number
12:49:17 <ais523> the idea here would be to have astonishingly small programs for a range of popular programs
12:49:30 <ais523> I suppose for the endless ones, we just hire elliott or someone to do reference impls
12:50:15 <elliott> heh
12:50:27 <ais523> you'd be good at them!
12:51:03 <DH____> You could use DMM's WebPEG encoding on the source...
12:52:09 <DH____> Leaving a 20 byte source file or so...
12:55:11 <ais523> that's a /different/ creative way to cheat
12:57:20 <elliott> ais523: we need sg soon; git is driving me insane
12:58:02 <ais523> what are you using to version sg itself while it's being written, incidentally?
12:58:32 <elliott> nothing? :) or darcs I guess
12:58:36 <ais523> presumably it's not yet complete enough to version itself
12:58:47 <ais523> darcs seems to be the least-bad VCS that isn't vaporware
12:58:57 <Deewiant> Write the sg repository by hand as you go until it can do it by itself
12:58:58 <elliott> or, /maybe/ git, in case we think we might want other people to interact with the repo via github, although you'd be a major stopper to that
12:59:25 <ais523> meh, I'd just maintain a mirror on gitorious and refuse to acknowledge the github repo existed except when I pulled from it
12:59:27 <elliott> the main problem with darcs is that the only decent places to put the repository involve hosting it yourself, and darcsweb is rather... uninspiring
12:59:27 <ais523> that's what I normally do
12:59:40 <ais523> elliott: I would mention patch-tag, but you said decent
12:59:49 <ais523> it's, umm, passable
12:59:51 <ais523> sometimes
12:59:55 <elliott> ais523: You could do that gitorious thing, but I would be far too lazy to pull your changes
13:00:12 <ais523> pulling isn't that hard...
13:00:19 <elliott> Harder than having someone else push for you
13:00:48 <ais523> you can't push into a repo with working changes anyway
13:00:55 <ais523> which is the usual state of a repo someone's directly working on
13:00:59 <ais523> so in practice, you have to pull anyway
13:01:32 <elliott> This is the thing where you're deliberately stupid to maintain your worldview and I ignore you, right?
13:01:47 <ais523> not this time
13:02:00 <elliott> You realise that the repositories you push to are not usually repositories with working directories?
13:02:01 <ais523> I can't think of any reasonable git workflow that doesn't involve pulling at all
13:02:08 <ais523> elliott: well, if you're too lazy to pull
13:02:14 <elliott> Well, sure, the person pushing has to pull
13:02:20 <ais523> then you wouldn't be pulling from any /other/ repo I push to
13:02:21 <elliott> Pull changes, merge in, push them off
13:02:27 <elliott> ais523: Har har
13:02:41 <ais523> so what you mean is, you're too lazy to pull from two repos at once
13:02:46 <ais523> despite the existence of git remote update
13:03:06 <elliott> What I really mean is, being awkward wrt the existence of a GitHub repository will cause me to try and be as awkward as possible in turn
13:04:08 <ais523> oh right, I didn't pick that up
13:04:39 <elliott> I'll probably end up versioning it in nothing for the longest time, anyway
13:05:02 <elliott> VCSes are too workflow-hostile for me to bother for a project still in its solo stage
13:05:17 <ais523> I find that what I do with a VCS is to use it more and more properly as time goes on
13:05:29 <ais523> starting off by just using it as a backup system rather than version control
13:05:40 <ais523> and gradually making the commits more and more the correct size
13:05:49 <elliott> I'm trying to do that for mcmap too, but mostly just because Deewiant complained
13:05:50 <ais523> (so the commits tend to get smaller and more numerous as time goes on)
13:06:01 <elliott> Being a good git citizen is really hard, because you have to do terrible things like modifying history
13:06:11 <elliott> nice global notice
13:06:35 <ais523> indeed
13:06:45 <ais523> I don't think it's possible to use git correctly
13:06:47 <elliott> ais523: Anyway, I honestly find cp -R src src.descriptivetag before embarking on a task more usable for solo, "linear" (as in generally one feature at a time) projects than any VCS
13:06:49 <ais523> even using it as intended causes problems
13:07:03 <ais523> elliott: heh, I've done that too, except I more usually use tarballs
13:07:17 <elliott> I have about ten of those for Shiro right now
13:07:23 <elliott> Holy crap, I somehow submitted a pull request... to my own repository.
13:07:24 <elliott> From itself.
13:07:35 <elliott> GitHub, I...
13:07:47 <ais523> accept it!
13:07:52 <elliott> "This pull request cannot be automatically merged."
13:07:54 <elliott> :'(
13:08:03 <elliott> I, umm, can't even delete it, I'll just have to close it
13:08:07 -!- yorick has quit (*.net *.split).
13:08:07 -!- mycroftiv has quit (*.net *.split).
13:08:07 -!- Zetro has quit (*.net *.split).
13:08:07 -!- twice11 has quit (*.net *.split).
13:08:08 -!- sebbu has quit (*.net *.split).
13:08:08 -!- CakeProphet has quit (*.net *.split).
13:08:08 -!- MSleep has quit (*.net *.split).
13:08:08 -!- myndzi has quit (*.net *.split).
13:08:08 -!- lambdabot has quit (*.net *.split).
13:08:08 -!- aloril has quit (*.net *.split).
13:08:09 <ais523> darcs would have noticed the option wasn't semantically correct!
13:08:12 -!- mycroftiv has joined.
13:08:13 <ais523> *the request
13:08:16 <elliott> ais523: it is semantically correct
13:08:18 <elliott> it's just insane
13:08:23 <elliott> It's a request from an older revision
13:08:25 <elliott> "ehird wants someone to merge 5 commits into 848d2b9 from master"
13:08:26 -!- CakeProphet has joined.
13:08:28 -!- CakeProphet has quit (Changing host).
13:08:28 -!- CakeProphet has joined.
13:08:31 -!- MDude has joined.
13:08:37 -!- aloril has joined.
13:08:41 -!- sebbu has joined.
13:08:41 <ais523> well, darcs would notice that the commits you were merging in were already in the repo, at least
13:08:43 -!- myndzi has joined.
13:08:54 <elliott> so? that's a nop
13:08:57 -!- yorick has joined.
13:09:38 <ais523> indeed
13:10:04 <ais523> I suppose you can say that a no-op pull request is technically semantically correct...
13:10:40 <elliott> The thing with VCSes is, I think, that almost everything they consider an error, I think should succeed
13:11:06 <elliott> Pushing when you don't have changes that have happened since? Sure, go ahead
13:11:21 <elliott> Basically errors are bad and make me sad. This is the way of elliott.
13:11:47 <ais523> indeed, I think pushing then should give a friendly reminder rather than an error
13:11:55 <elliott> But I like to think it's the VCS' job to sort out the tangle of noodles that is the development into something useful for me, not to force me into making sure they don't get into a tangle.
13:11:57 <ais523> (it's not an error in darcs, but has a tendency to cause exponential performance)
13:12:19 <ais523> actually, "friendly reminder" is pretty much exactly what darcs does
13:12:23 <elliott> ais523: in sg, I think it just creates a new, unnamed branch
13:12:28 <elliott> unless you did a lot of commits since
13:12:31 <elliott> in which case it'd probably become the new tip
13:12:34 <ais523> if you push before pulling, you get a "(By the way, the remote repository has 2 patches to pull.)", or whatever
13:12:53 <elliott> as in, either {it creates a new branch, tip stays the same} or {it becomes the tip, tip becomes a new branch} happens
13:12:54 -!- Zetro_ has joined.
13:12:58 <elliott> depending on which trail is longer
13:13:15 <elliott> well, that's assuming they conflict
13:13:28 <elliott> if they can be merged automatically, then they merge and become the new tip, just one with a split in the middle
13:13:32 <elliott> and that's the correct situation
13:13:35 <ais523> yep, and assuming that people haven't nicknamed a particular whitelist set as their own personal concept of the tip
13:13:50 <elliott> there's no personal concept of a tip; tip is an objective thing
13:13:53 <ais523> well, yes
13:13:54 <elliott> they can call something my-tip, though, I'm sure
13:14:00 <ais523> personal thing used instead of a tip?
13:14:03 <elliott> heh
13:14:06 <elliott> personal-thing-used-instead-of-a-tip
13:14:11 <elliott> good branch name
13:14:17 <ais523> ballpoint, perhaps
13:14:29 <elliott> I think the tip is literally just the longest self-consistent branch
13:14:47 <elliott> although, actually, that's not right
13:15:00 <elliott> because if you dump all the sg repos possible together into one massively infinite repository, it should have no tip
13:15:28 <elliott> what was your definition, again?
13:15:55 <ais523> I think it does have a tip, and it consists of the tips of each of the individual projects being worked on in the repos (identified by commits linking them to a common directory structure), in separate directory structures
13:16:10 <ais523> umm, commit is the wrong word there
13:16:14 <ais523> but you probably know what I mean
13:16:17 <elliott> ais523: a tip has to point to one directory structure, though
13:16:22 <elliott> the only way you can have multiple is by explicit nesting
13:16:37 <elliott> to me, you've pretty much described the situation of having no tip
13:16:40 <elliott> you have multiple viable tips
13:16:42 <elliott> so there is no tip
13:16:47 <elliott> you have to select one to work
13:17:00 <elliott> (and probably designate one quickly, likely moving them all into subdirectories of a new root)
13:17:01 <ais523> oh, you mean actually on your own personal filesystem?
13:17:05 <elliott> s/likely/likely by/
13:17:07 <ais523> that makes sense
13:17:10 <elliott> ais523: no, I'm talking about sg concepts
13:17:22 <ais523> well, a tip is just a set of patches
13:17:31 <ais523> and it's the maximal set of patches that combine without conflicts
13:17:36 <elliott> yep, but a set of patches can't result in having two directories without explicitly doing that
13:17:42 <ais523> why not?
13:17:49 <elliott> because there's no mechanism for that?
13:18:10 <ais523> I don't see why there's any mathematical reason that "two unrelated directories" is a concept that sg shouldn't be able to model, even if it's a little hard to place onto a filesystem
13:18:32 <elliott> because it doesn't fit into the existing model?
13:18:54 <ais523> and the mechanism is just having multiple new-directory «insert appropriate word that isn't turtle here»s that don't refer to each other and haven't been placed into a common directory structure by any other «same word»
13:19:03 <elliott> give me a patch that isn't self-conflicting and results in two directory trees, neither containing the other
13:19:19 <ais523> combination of {new directory} and {new directory}
13:19:36 <elliott> ais523: by combination of, you mean patchset, right?
13:19:39 <ais523> yep
13:19:52 <ais523> sorry, that should have been set of [{new directory}; {new directory}]
13:19:52 <elliott> ais523: there is no "new directory", there's "new directory in [HASH]"
13:19:59 <ais523> aha, that's possibly why I was confused
13:20:00 <elliott> (and a special root directory change)
13:20:03 <ais523> how do repos get started, then?
13:20:16 <elliott> ais523: repos initially contain one commit by the Ghost of Scapegoat
13:20:26 <ais523> that can be referred to to start off
13:20:27 <elliott> that commit is just the root directory change
13:20:35 <elliott> it has a single global hash worldwide
13:20:59 <ais523> ah, so if I combine {new directory in Ghost of Scapegoat} and {new directory in Ghost of Scapegoat} I get two parallel directories
13:21:08 <Gregor> And that hash is 0xDEFACED
13:21:09 <elliott> you need to specify a name for the directory :)
13:21:10 <ais523> that conflict if they have the same name, as you can't have multiple directories with the same name in one directory
13:21:20 <ais523> elliott: yes, I'm not writing out all the metadata
13:21:24 <elliott> changeset {new directory "foo" in root, new directory "bar" in root}
13:21:29 <ais523> yep
13:21:31 <elliott> that doesn't produce two unrelated filesystems
13:21:33 <elliott> that's just
13:21:38 <ais523> no, it produces two parallel filesystems
13:21:40 <elliott> no
13:21:42 <elliott> it's a directory
13:21:45 <elliott> with two empty directories in
13:21:48 <elliott> that's what you'd get if you cloned it
13:21:49 <ais523> well, right
13:21:52 <ais523> agreed
13:21:54 <elliott> s/cloned it/checked it out/
13:22:10 <elliott> ais523: the most you'd get is the directories of all the projects mushed together
13:22:14 <ais523> yep, I think so
13:22:17 <elliott> not in neatly separated unnamed hierarchies, that's not possible
13:22:34 <elliott> ais523: but really, the Infinite Repo should have no tip, not least because its commit changes go on literally forever
13:22:36 <ais523> hmm, it'd happen if we had a convention not to make sgbombs
13:22:48 <elliott> ais523: sgbombs are valuable
13:23:06 <elliott> hmm, wait, let me think
13:23:09 <ais523> in what way? I notice most existing VCSes don't allow them, but I'm prepared to be convinced that sg should
13:23:11 -!- twice11 has joined.
13:23:20 <elliott> all existing VCSes allow them
13:23:23 <elliott> they just clone into directories
13:23:29 <ais523> well, right
13:23:56 <elliott> ais523: I'm trying to think how you re-root a repository; as in, the old story of "two repositories, merge into one by copying objects, then move the root of one into a subdirectory of the other"
13:23:58 <ais523> so I suppose the question should be "can you commit files directly into the Ghost of Scapegoat"
13:24:09 <ais523> elliott: some sort of directory move patch, I guess
13:24:16 <ais523> reparent HASH from HASH to HASH
13:24:16 <elliott> it's a move change, but it's a move change on... the ghost of scapegoat?
13:24:18 <elliott> wait, no
13:24:22 <elliott> it's a move change on the.. hmm
13:24:25 <elliott> no, it's a move change on the ghost of scapegoat
13:24:27 <elliott> _that_ can't work
13:24:33 <elliott> because it's the root of the target repository, too
13:24:40 <ais523> oh, if you're trying to rotate the root under a new directory?
13:24:47 <ais523> yep, that's a good enough reason for it to have a unique hash
13:24:51 <elliott> ais523: basically, say you have repos foo and bar checked out
13:24:57 <elliott> you want to achieve the sg equivalent of
13:24:59 <elliott> mv foo bar/quux
13:25:02 <elliott> where bar/quux doesn't exist
13:25:23 <elliott> I, umm, don't think we can do that, right now, unless every new repo starts by creating a _new_ root directory
13:25:25 <Gregor> You cannot truly understand someone until you've walked a mile in their shoes. Since cats don't wear shoes, it is impossible to understand them.
13:25:30 <elliott> which just seems wrong for some reason
13:25:34 <ais523> pivot_root moves the root file system of the current process to the directory put_old and makes new_root the new root file system. Since pivot_root(8) simply calls pivot_root(2), we refer to the man page of the latter for further details.
13:25:37 <elliott> a repo shouldn't depend on when you create it
13:25:51 <elliott> ais523: I know what pivot_root is
13:25:53 <ais523> elliott: I assumed that repos would start by creating a new root directory, because it's the most obvious way to understand what a repo is
13:25:59 <ais523> elliott: I know, I just felt like quoting it
13:26:06 <elliott> ais523: I assumed they'd start by creating a file
13:26:10 <ais523> or, well, a related set of projects
13:26:19 <elliott> you can just move every file into a new subdirectory to pivot the root, but that makes merging hard
13:26:24 <elliott> because future files will end up in the root
13:26:25 <ais523> you can tell that two repos are working on the same project because they share an initial root dir commit
13:26:27 <elliott> rather than the pivoted root
13:26:40 <ais523> yep, I agree that that's semantically wrong
13:26:41 <elliott> I suppose the first commit you make can make a new directory called /
13:26:51 <elliott> but then what is the name of the directory made by the Ghost of Scapegoat?
13:27:00 <ais523> /../, obviously
13:27:02 <elliott> other pressing questions: does the Ghost of Scapegoat have a PGP key?
13:27:27 <elliott> ais523: I think it's actually just called the null string
13:27:35 <Gregor> Clearly the commit message associated with this root should be "Boo"
13:27:37 <elliott> obviously you can't create a file at foo.c (absolute path)
13:27:38 <ais523> but /../ is a much better name for the root dir's parent
13:27:39 <elliott> only /foo.c
13:27:41 <elliott> so you have to make / first
13:27:47 <elliott> the null string is behind it
13:27:50 <elliott> ais523: ugly
13:27:53 <ais523> well, OK
13:28:07 <ais523> I'm not entirely convinced it needs a name, maybe null-stringing it is the best option
13:28:08 <elliott> ais523: in fact, ideally the genesis commit (THIS IS THE WORST RELIGIOUS METAPHOR) should have no author field
13:28:13 <elliott> or date
13:28:24 <elliott> actually, it doesn't need any attributes at all
13:28:27 <ais523> (random fact: I once tried to get Wikipedia's Main Page renamed to the null string, but the developers refused to implement that even though it was getting some support)
13:28:34 -!- sebbu has quit (Ping timeout: 245 seconds).
13:28:40 <elliott> it's literally just the defined-by-construction object root-directory
13:28:41 -!- sebbu has joined.
13:28:45 <elliott> ais523: haha
13:29:17 <ais523> more commonly I tried to get it moved to the Portal namespace, and the opposition was mostly "it'll cause problems" without specifying how
13:29:40 <ais523> I suppose I'm one of the few people in the world who actually knows /how/ to rename Wikipedia's Main Page; it's not commonly-known knowledge
13:29:43 <Gregor> ais523: Clearly the main page should have "This is the main page of Wikipedia. For the notion of main pages in general, see Main Page (disambiguation)"
13:30:14 <ais523> (I know how to delete it too, but that requires overcoming well over ten separate safeguards, and the idea is that someone would likely notice you trying in time to stop you)
13:30:21 <elliott> I really want a famous band/author/whatever to release a work called Main Page
13:30:27 <elliott> Really, really, really
13:30:42 <ais523> Gregor: have you seen http://en.wikipedia.org/wiki/Talk:%25s
13:30:48 <ais523> (i.e. [[Talk:%s]])
13:30:58 <ais523> you might want to look at the history of [[%s]] itself, too
13:31:08 <ais523> hmm, bleh, they stopped arguing about it in 2009
13:31:24 <Gregor> ais523: ... WOW
13:31:44 <elliott> ais523: I can't believe people actually wanted to make it not redirect
13:31:45 <ais523> I knew it would blow your mind :)
13:31:49 <elliott> because %s is /such/ a popular topic to look up
13:31:55 <elliott> MUST PUNISH USERS OF OBSOLETE SHORTCUTS
13:32:19 <ais523> elliott: well, I wanted to make it not redirect on the basis that it was absurd that you'd /expect/ [[%s]] to redirect to the Main Page
13:32:40 <elliott> ais523: it's a page nobody will ever look up on their own, modulo rounding error
13:32:43 <ais523> and that it was only that way due to a bug in old versions of Firefox
13:33:09 <elliott> Yet "According to statistics, %s is the 993rd most visited page this month"
13:33:21 <elliott> It seems pretty clear-cut to me, the logic doesn't matter, usability does
13:33:40 <ais523> hmm, Firefox bug 298697 is still open
13:33:47 <ais523> https://bugzilla.mozilla.org/show_bug.cgi?id=298697
13:33:52 <ais523> despite being over 6 years old
13:34:24 <ais523> do any other popular search engines special-case searches for %s, I wonder?
13:34:26 <elliott> Is it just me, or do bugzilla bugs never get fixed, ever?
13:34:26 <ais523> say, Google?
13:34:31 <ais523> elliott: they do sometimes
13:34:37 <elliott> https://encrypted.google.com/search?hl=en&source=hp&biw=1058&bih=636&q=%25s&oq=%25s&aq=f&aqi=&aql=&gs_sm=e&gs_upl=485l485l0l599l1l0l0l0l0l0l0l0ll0l0
13:34:39 <ais523> I used to subscribe to the entire bugzilla of MediaWiki
13:34:43 <elliott> well, that worked, but it knows i came from the google.com page
13:34:49 <elliott> so it's not a very useful result
13:34:59 <ais523> and quite a lot of the bugs there got fixed
13:35:02 <ais523> although not all of them
13:35:10 <ais523> every now and then I get reports that one of the bugs I voted for got fixed
13:35:18 <ais523> which amuses me, as I stopped voting on them years ago
13:35:36 <elliott> ais523: Every time I've jumped over the insane hurdles required to get Bugzilla to accept a report, I've just received like three years of bugmail from it where tons of duplicates get marked forever and no progress ever happens
13:35:52 <elliott> I don't know whether to blame bugzilla or the developers, I think it's both
13:36:01 <ais523> random fact: Bugzilla is the only webform-login I've ever used that works without cookies
13:36:10 <ais523> /however/, without cookies you have to relogin every page
13:36:15 <elliott> Useful
13:36:17 <ais523> but it does work eventually, after something like 5 relogins
13:36:24 <elliott> Who even wrote Bugzilla?
13:36:27 <elliott> And why?
13:36:29 <elliott> And how can I make them hurt?
13:36:39 <elliott> Terry Weissman, apparently
13:36:49 <elliott> Stern glares in his direction, I tell you
13:37:07 <elliott> "One of Bugzilla's major attractions to developers is its lightweight implementation and speed, so calls into the database are minimized whenever possible, data fetching is kept as light as possible, and generation of heavy HTML is avoided."
13:37:10 <elliott> Why the hell's it so slow then
13:38:55 <ais523> heh, one of my favourite bits on that [[Talk:%s]] page is someone moving the rfd template below the redirect, so that the redirect would still work
13:39:11 <ais523> (and thus, so that nobody would see the rfd tag unless they thought of adding &redirect=no to the URL)
13:39:26 -!- nooga has joined.
13:40:14 <Gregor> Oh Wikipedia.
13:40:16 <Gregor> So screwy.
13:40:26 <ais523> I think the biggest irony in that page is that Firefox visits [[%s]] when you type "wp" in the search bar precisely /because/ of %s's meaning in programming
13:41:24 <ais523> <CraigF> Oh come on. %s clearly doesnt belong as a seperate article anyway. Are we going to list [[lparam]]? how about [[hwnd]]?
13:41:35 <ais523> (lparam is currently a redlink; hwnd a redirect to handle (computing))
13:42:14 -!- augur has joined.
13:44:06 <elliott> if (is_stop)
13:44:07 <elliott> {
13:44:07 <elliott> world_running = 0;
13:44:07 <elliott> g_thread_exit(0);
13:44:07 <elliott> /* never reached */
13:44:07 <elliott> }
13:44:09 <elliott> exit(1);
13:44:13 <elliott> wtf?
13:44:23 <elliott> anyone who knows pthreads: why would you exit the threadright before exiting?
13:44:25 <elliott> or, um, hmm
13:44:57 <ais523> wow, I just followed random interesting-looking links and ended up at http://en.wikipedia.org/wiki/Memory_leak which explained to me what the hell RAII actually /is/
13:45:01 <ais523> in terms I actually understood
13:45:11 <ais523> I hate C++ sometimes
13:45:17 <elliott> RAII is just equating scope with resources
13:45:17 <ais523> (as opposed to everyone else, who hates it continuously)
13:45:36 <ais523> it's like alloca, but objectorientized
13:45:48 <elliott> and handling more than memory
13:46:14 <ais523> yep
13:46:24 <fizzie> elliott: For is_stop it just quits the thread instead of exit(1)ing the whole process, so that the proxying bit is left alive. I guess the exit(1) could be in an else to make it more clear.
13:46:37 <ais523> whereas when I see a close() in the finalizer for a File in Java, it looks like a mistake, or at least a very dangerous thing to rely on
13:48:06 <elliott> fizzie: Right.
13:48:20 -!- Phantom_Hoover has joined.
13:48:43 <elliott> fizzie: So, it's OK to start working on my Guile branch? Someone right now is working on getting Guile working Windows-native, and I'll make the build system offer to download/build a local copy of Guile if the system doesn't have a new enough version.
13:48:55 <elliott> It's really the nicest language I could possibly bind to.
13:48:59 <elliott> As far as binding quality goes.
13:49:16 <elliott> (The download isn't big; just six megs or so, and the building only takes a few minutes.)
13:49:23 <ais523> there were a bunch of articles recently about how Guile was still better than the alternatives at its intended purpose
13:49:43 <ais523> GNU's NIH syndrome was mentioned as a positive for it ;)
13:50:02 <elliott> probably gnu propaganda, but guile has a really nice c api, is a decent scheme, and is well-maintained
13:50:31 <ais523> I suppose lua's the other language designed to bind nicely to things
13:50:34 <elliott> hmm, how can I tell GNU that this bit of code is definitely unreachable? It's complaining that my noreturn function returns because scm_cancel_thread isn't marked noreturn
13:50:40 <elliott> erm
13:50:42 <elliott> s/gnu/gcc/
13:50:45 <ais523> I noticed that the Guile fans were mostly ignoring it
13:50:47 <elliott> (void);? :P
13:50:49 <ais523> elliott: assert(0)
13:50:52 <elliott> ais523: Lua is an awful language, though
13:51:00 <elliott> any way that doesn't involve including assert.h?
13:51:03 <ais523> it has good points
13:51:17 <ais523> actually, I'm not convinced that assert(0) definitely works
13:51:20 <ais523> but it /ought/ to
13:51:35 <elliott> Also, "Because Guile threads are isomorphic with POSIX threads, thread will not receive its cancellation signal until it reaches a cancellation point. See your operating system's POSIX threading documentation for more information on cancellation points; note that in Guile, unlike native POSIX threads, a thread can receive a cancellation notification while attempting to lock a mutex."
13:51:37 <elliott> I don't even want to know.
13:51:39 <ais523> if I ever write a Splint replacement, it'll be a warning if it can't prove that all asserts are always going to succeed
13:51:55 <DH____> I've been meaning to learn List for years..
13:52:00 <elliott> ais523: ah, abort() makes it happy
13:52:04 <fizzie> Add an exit(0) or something actually marked as noreturn there. (What do you mean inelegant?)
13:52:16 <ais523> elliott: thread cancellation is a bad idea anyway
13:52:26 <elliott> ais523: it's cancelling the thread I'm in :P
13:52:35 <ais523> it's one of the few things that's marked "wow, we realised this is a really bad idea, don't use this" in Java (except in more enterprisey language)
13:52:36 <Phantom_Hoover> http://www.reddit.com/r/worldnews/comments/k8p8b/the_lifetime_ban_on_blood_donations_by_homosexual/
13:53:01 <Phantom_Hoover> I like the way it's framed as gays being banned from donation just because the blood donation people don't like them.
13:53:02 <elliott> aha, I can just declare
13:53:02 <elliott> SCM scm_cancel_thread(SCM thread) __attribute__((noreturn));
13:53:04 <elliott> at the top of the file
13:53:46 <fizzie> That's probably not any prettier.
13:53:59 <elliott> fizzie: It avoids generating needless extra code to call abort()
13:54:06 <elliott> fizzie: Anyway, give me official approval dammit :P
13:54:09 <fizzie> Since it's not really a noreturn function if you call it for some other thread.
13:54:20 <elliott> Well, true.
13:54:28 <ais523> why would a thread cancel itself, rather than just exit?
13:54:30 <elliott> But the declaration will be local to that file.
13:54:30 <fizzie> Doesn't it have some sort of exit-this-thread function?
13:54:38 <elliott> ais523: How can a thread "just exit"?
13:54:45 <elliott> If pthreads has a function for that I can use it, but I couldn't find anything
13:54:47 <ais523> elliott: there's typically an API call for that
13:54:52 <elliott> What's the pthreads for it
13:54:56 <ais523> I know Linux has a system call for exiting a thread
13:55:09 <ais523> (it's called exit(2), not to be confused with exit_group(2) which is called by exit(3))
13:55:12 <elliott> man pthread_<tab> doesn't show much interesting
13:55:21 <fizzie> pthread_exit.
13:55:27 <elliott> Why don't I have a manpage for pthread_exit
13:55:41 <fizzie> "pthread_exit - terminate calling thread"
13:55:46 <fizzie> I have one.
13:55:49 <elliott> o_O
13:55:50 <elliott> What package?
13:55:51 <ais523> I don't have a manpage for pthread_exit either
13:55:55 <ais523> maybe it's missing on my system
13:55:58 <elliott> And what arguments does it take?
13:56:13 <fizzie> A void * retval.
13:56:34 <elliott> NULL ok?
13:56:48 <ais523> http://linux.die.net/man/3/pthread_exit
13:56:57 <elliott> Thanks
13:56:58 <ais523> elliott: I can't believe /you/ didn't think of searching for "man pthread_exit"
13:57:03 <elliott> I'm lazy
13:57:04 <ais523> it seems we're in reversed roles today
13:57:22 <ais523> (also, I should have just gone to linux.die.net anyway as that's the site I always check for manpages)
13:58:20 <ais523> it seems that the return value is just a pointer that's returned literally to anything trying to join the thread
13:58:25 <ais523> so NULL is OK
13:59:20 <elliott> erm, hmm
13:59:26 <elliott> how can I get a specific file out of a git stash from another branch?
14:00:30 <elliott> never mind
14:00:39 <ais523> gah, trying to edit Wikipedia, my connection to the server's getting reset while the page is loading
14:00:42 <ais523> that hasn't happened for months
14:01:02 <ais523> there, that's better
14:01:06 <ais523> it started working again
14:01:25 <ais523> my only conclusion is that something on this network randomly bombards me with RST packets when I try to submit a form via POST, for no obvious reason
14:01:31 <fizzie> I've had some problems with missing some pthread function manpages but not all, too. There seems to be something screwy about them.
14:01:34 <fizzie> $ dpkg-query -S `locate pthread_exit|grep usr/share/man`
14:01:37 <fizzie> manpages-dev: /usr/share/man/man3/pthread_exit.3.gz
14:01:42 <fizzie> That one is right there, though.
14:01:50 <elliott> elliott@katia:~/Code/mcmap$ build/mcmap pyralspite.net
14:01:51 <elliott> build/mcmap: error while loading shared libraries: libguile-2.0.so.22: cannot open shared object file: No such file or directory
14:01:51 <elliott> umm, what
14:01:57 <elliott> I thought pkgconfig was meant to take care of those sorts of things
14:02:26 <ais523> fizzie: weird, I think I have manpages-dev installed
14:02:28 <ais523> let me try again
14:02:31 <fizzie> Just for finding them for linking and so on; not for actually using them.
14:02:34 <elliott> ais523: different os, version
14:02:43 <elliott> fizzie: but I thought LD_LIBRARY_PATH was a massive hack :'(
14:02:45 <ais523> yep, I'm wondering if it's missing from manpages-dev by mistake
14:02:54 <fizzie> ais523: This is the Ubuntu 11.04 thing.
14:02:58 <ais523> the version I have, that is
14:03:07 <ais523> it's bad enough having various syscalls not documented
14:03:14 <ais523> like set_robust_list
14:03:25 <elliott> GLib-ERROR **: The thread system is not yet initialized.
14:03:26 <elliott> aborting...
14:03:26 <elliott> Aborted
14:03:26 <elliott> yay
14:03:37 <elliott> oh, hmm
14:03:46 <elliott> fizzie: do you need to initialise glib threads to use mutexes and the like?
14:03:55 <fizzie> Probably, yes.
14:04:55 <fizzie> There was something slightly strange about when the explicit initialization was necessary, and when not; and in which order the glib/SDL initializations went.
14:05:05 <elliott> Indeed.
14:05:17 <elliott> 15:06:00 [DIED] select: Interrupted system call
14:05:19 <elliott> fizzie: Oh deary me
14:05:37 <elliott> fizzie: I'm pretty sure you're meant to handle those things
14:05:45 <elliott> I seem to be getting it deterministically, though
14:06:11 <fizzie> Possibly, though I don't recall where I select()'d anything.
14:06:30 <elliott> fizzie: I wrote that code. :p
14:06:35 <elliott> The proxy.
14:06:45 <fizzie> Well, then s/you/I/ to you.
14:07:02 <elliott> fizzie: Well, it's more that literally any syscall can do that and you have to handle it.
14:07:03 <fizzie> Yes, "I're".
14:07:17 <fizzie> No, *you* have to.
14:07:39 <elliott> NO YOU HAVE TO
14:07:54 <fizzie> Okay, there might well be some reads/writes that don't do the right thing either.
14:08:17 * ais523 reads about mark-and-don't-sweep GCs
14:10:15 <fizzie> A don't-mark-and-don't-sweep-either-in-fact-just-lounge-around-and-be-lazy GC.
14:11:37 <ais523> well, mark-and-don't-sweep GCs don't actually do any garbage collection at all until they're out of memory
14:12:01 <ais523> at which point, they effectively do a sweep but with different terminology so that they can claim it isn't a sweep
14:12:15 -!- Jafet has joined.
14:12:27 <elliott> do
14:12:27 <elliott> ret = select(nfds, &rfds, NULL, NULL, NULL);
14:12:27 <elliott> while (ret == EINTR);
14:12:32 <elliott> do...while looks so weird
14:12:56 <elliott> gah, EINTR doesn't do it, I need errno, duh
14:12:57 <ais523> without the braces?
14:13:08 <elliott> do
14:13:09 <elliott> ret = select(nfds, &rfds, NULL, NULL, NULL);
14:13:09 <elliott> while (ret == -1 && errno == EINTR);
14:13:09 <elliott> BEAUTIFUL
14:13:18 <elliott> ais523: We're retro coders at mcmap inc.
14:13:23 <ais523> elliott: do you prefer the standard C API (return -1 and set errno) or Linux API (return -errno)?
14:13:34 <elliott> ais523: Haskell
14:14:01 <elliott> All C error-handling conventions are intolerable :P
14:14:03 <ais523> well, I was asking which of two options you preferred, not if you thought either was good
14:14:23 <elliott> Setting errno is kind of iffy, because of calling other things in the interim, and thread-local storage
14:14:26 <elliott> So the latter, I guess
14:17:57 <ais523> I think I prefer the latter too, it's less boilerplate than errno-style
14:21:58 <fizzie> "Erno" is a Finnish male name; I haven't really ever been able to read "errno" as "error number" instead of just a silly-sounding variant of that name.
14:22:49 <ais523> anyway, anyone here have advice on a problem from work: I want to be able to benchmark a large number of OCaml programs, in as repeatable a set of circumstances as possible
14:23:03 <ais523> and the Secret Project cannot be used for benchmarking (have a free clue about it while you're at it)
14:23:21 <ais523> ideally, I'd like to count instructions rather than realtime
14:23:57 <ais523> suggested solutions are allowed to rely on or ignore the fact that the programs are in OCaml as required, and absolute speed doesn't matter (within reason), just relative speed of the programs
14:26:02 <Jafet> valgrind, then
14:26:16 <ais523> Jafet: hmm, interesting, explain more
14:26:32 <ais523> presumably it wouldn't be used in a memory-checking mode but some other mode
14:27:17 <Jafet> There's cachegrind and lackey
14:27:47 <elliott> ais523: gdb
14:27:52 <elliott> used exclusively with step
14:27:52 <Jafet> Since valgrind adds a huge amount of indirection to the code, the results should be repeatable
14:27:55 <ais523> cachegrind checks cache hits/misses, right?
14:27:57 <elliott> counting step until program termination
14:28:23 <ais523> elliott: I thought of that, and could implement it myself (it's a trivial modification to Secret Project to make it single-step), but it's monstrously slow
14:28:37 <elliott> ais523: I think you can do "step N" for some large N
14:28:42 <Jafet> Yes, but with a simulated cache.
14:28:58 <ais523> elliott: the API only allows one step at a time
14:29:07 <Phantom_Hoover> !sanetemp 66.9
14:29:08 <EgoBot> 292.5
14:29:14 <Phantom_Hoover> Wha
14:29:17 <Phantom_Hoover> !sanetemp 66
14:29:18 <EgoBot> 292.0
14:29:27 <Phantom_Hoover> !show sanetemp
14:29:28 <EgoBot> sh dc -e "1k?459.67+5*9/p"
14:29:41 <ais523> is that converting farenheit to kelvin?
14:29:52 <Phantom_Hoover> OK, who was it?
14:29:57 <ais523> !sanetemp 32
14:29:57 <EgoBot> 273.1
14:30:03 <ais523> !sanetemp 212
14:30:03 <EgoBot> 373.1
14:30:05 <ais523> looks like it
14:30:27 <Phantom_Hoover> !delinterp
14:30:27 <EgoBot> ​ is not a user interpreter.
14:30:29 <ais523> Phantom_Hoover: what did it used to do?
14:30:31 <Phantom_Hoover> !delinterp sanetemp
14:30:31 <EgoBot> ​Interpreter sanetemp deleted.
14:30:38 <Phantom_Hoover> ais523, Celsius.
14:30:42 <Jafet> deamericanize
14:30:47 <ais523> from farenheit?
14:30:54 <ais523> ah, and someone changed it to kelvin as a joke
14:30:55 <Phantom_Hoover> !addinterp sanetemp sh dc -e "1k?32-5*9/p"
14:30:55 <EgoBot> ​Interpreter sanetemp installed.
14:30:58 <fizzie> Well, Kelvin's eminently sane.
14:31:37 <Phantom_Hoover> !sanetemp 66.9
14:31:37 <EgoBot> 19.3
14:32:21 <fizzie> !insanetemp 19.3
14:32:22 <EgoBot> 66.7
14:32:37 <fizzie> Heh, that was just a guess.
14:34:13 <fizzie> Nice rounding there:
14:34:17 <fizzie> 17:34 <fizzie> !sanetemp 66.7
14:34:17 <fizzie> 17:34 <EgoBot> 19.2
14:34:17 <fizzie> 17:34 <fizzie> !insanetemp 19.2
14:34:17 <fizzie> 17:34 <EgoBot> 66.5
14:34:17 <fizzie> 17:34 <fizzie> !sanetemp 66.5
14:34:19 <fizzie> 17:34 <EgoBot> 19.1
14:34:22 <fizzie> 17:34 <fizzie> !insanetemp 19.1
14:34:24 <fizzie> 17:34 <EgoBot> 66.3
14:35:18 <Phantom_Hoover> fizzie, it's dc; can you blame me?
14:37:51 -!- copumpkin has quit (Quit: Computer has gone to sleep.).
14:45:37 -!- FireFly has quit (Quit: FireFly).
14:52:55 <Phantom_Hoover> > 9 + 55 + 43
14:53:16 -!- Patashu has quit (Ping timeout: 260 seconds).
14:55:22 -!- ive has joined.
14:59:44 -!- pikhq has joined.
14:59:51 -!- pikhq_ has quit (Ping timeout: 258 seconds).
15:01:20 <elliott> Is there a more impolite way of killing a thread than cancelling it?
15:01:43 <elliott> Like, that doesn't wait for a cancellation point?
15:02:54 <elliott> pthread_kill with SIGKILL?
15:03:35 -!- jcp|other has quit (Excess Flood).
15:03:37 -!- yorick has quit (Excess Flood).
15:03:54 -!- jcp|other has joined.
15:04:09 -!- yorick has joined.
15:04:55 <elliott> ais523? :p
15:05:35 <ais523> elliott: I imagine pthread_kill with SIGKILL might work, but might just screw up the threading model generally
15:05:43 <ais523> why would you want to do that anyway¿
15:05:44 <elliott> hmm, but pthread_kill with SIGTERM?
15:05:45 <ais523> *?
15:05:51 <elliott> ais523: because pthread_cancel does nothing
15:05:55 <elliott> the thread never hits a cancellation point
15:05:58 -!- yorick has quit (Excess Flood).
15:06:03 <ais523> why is the thread not hitting a cancellation point
15:06:13 <elliott> library code, don't tell me to change it, I can't
15:06:29 -!- yorick has joined.
15:06:36 -!- jcp|other has quit (Excess Flood).
15:06:53 <ais523> why is the library code in an infinite loop?
15:07:06 <elliott> because the user typed //eval (...infinite loop...)
15:07:13 <elliott> or, possibly, just //eval (computation they did not realise would blow up)
15:07:27 <elliott> stop trying to avoid answering the question, it's like #python :)
15:07:55 <ais523> ah, OK, I was trying to work out what you were doing so I could better formulate an answer
15:08:01 -!- jcp|other has joined.
15:08:11 <ais523> perhaps spinning off a process would make more sense than a thread in that situation
15:08:12 <elliott> I can control the thread enough to set up appropriate signal handlers
15:08:16 <elliott> Not an option, sorry
15:08:18 <ais523> you can kill those as impolitely as you like
15:08:22 <elliott> It must be a thread
15:08:28 <ais523> hmm, OK
15:08:42 <elliott> (it has to be able to call the shared-state-using functions I provide to the environment)
15:08:43 <ais523> I have a hunch that threads aren't really designed for that sort of thing
15:08:59 <elliott> What you're trying to say is, you don't know the answer, right?
15:09:14 <ais523> if arbitrary code can go in that eval, it may well be something that interferes with the threading model
15:09:19 <ais523> elliott: well, I'm not entirely sure I know the question
15:09:21 <elliott> Arbitrary Scheme code
15:09:25 <ais523> but I fear that if I did, I wouldn't know the answer
15:09:46 <elliott> <elliott> Hmm, it seems that scm_cancel_thread'ing a thread currently doing scm_c_eval_string("(while #t '())") doesn't ever kill it; is there a supported way to kill a thread evaluating Guile code less politely, or should I do my evaluation timeout in another manner?
15:09:48 <elliott> Oh well, worth a shot
15:10:28 <ais523> hmm, I wonder what happens if you use SIGALRM, and then put a cancellation point in your SIGALRM handler
15:10:36 <ais523> (/me believes in using semantically correct signals for this sort of thing)
15:11:12 <ais523> or better, a pthread_exit in your SIGALRM handler
15:11:25 -!- copumpkin has joined.
15:11:37 <elliott> the question is exiting the evaluation loop safely and putting all the interpreter state back as it should be, euurgh
15:12:09 <ais523> wait what? you're trying to do multiple evals on the same interp?
15:12:17 <ais523> can you set handlers from within Scheme?
15:12:25 <elliott> Multiple whats on the same what what?
15:12:34 <ais523> if you could put an exit in a SIGALRM handler /in the Scheme program/, I think it would work
15:12:37 <elliott> I'm saying that just killing a thread while it's modifying interpreter state might not be smart.
15:13:18 <ais523> I mean, I assumed you'd have one interpreter for each eval
15:13:29 -!- Gregor` has joined.
15:13:32 <elliott> no, that's absurd for my usecase
15:13:40 <elliott> this isn't just a toy //eval, it's an integrated language :P
15:14:47 -!- Gregor has quit (Disconnected by services).
15:14:56 -!- Gregor` has changed nick to Gregor.
15:15:06 <ais523> elliott: I'm not entirely convinced that what you're asking is possible
15:15:30 <ais523> you're asking to shut down an interpreter with all relevant cleanup, while simultaneously not modifying the code of the interpreter or letting it know it should shut down in any way
15:15:40 <elliott> I'm fine with letting it know
15:15:40 <ais523> the problem's not fundamentally about threading, but about the interpreter's API
15:15:44 <elliott> I just don't know how to let it know :)
15:15:48 <elliott> that's why I'm asking people who might know
15:17:29 -!- Phantom_Hoover has quit (*.net *.split).
15:17:30 -!- fizzie has quit (*.net *.split).
15:17:30 -!- EgoBot has quit (*.net *.split).
15:17:47 <elliott> rip fiz
15:18:07 -!- jcp|other has quit (Excess Flood).
15:18:08 -!- yorick has quit (Excess Flood).
15:18:08 -!- EgoBot has joined.
15:18:17 -!- fizzie has joined.
15:18:21 -!- jcp|other has joined.
15:18:36 <ais523> elliott: I'm seeing increased use of ~ to end a sentence (that is, ending with ~ rather than .~ which pretty universally means sarcasm), in a context where sarcasm wouldn't really seem to make sense
15:18:43 <ais523> do you know if it signifies anything else?
15:18:56 -!- yorick has joined.
15:19:04 <elliott> it signifies trying to be Lymia, also possibly succeeding
15:19:08 <elliott> (say, by being Lymia)
15:19:29 <elliott> I guess it's meant to denote a kind of light tone of voice or something but w/e I don't care
15:19:40 -!- yorick has quit (Client Quit).
15:19:42 <elliott> Unless it's a third use of the tilde
15:19:44 <elliott> In which case I have no idea
15:20:16 -!- jcp|other has quit (Excess Flood).
15:21:00 -!- pumpkin has joined.
15:21:16 -!- copumpkin has quit (Ping timeout: 260 seconds).
15:21:29 -!- pumpkin has changed nick to copumpkin.
15:21:30 -!- jcp|other has joined.
15:21:50 <ais523> light tone of voice but w/e would seem to fit
15:21:58 <elliott> "Immediately after receiving this notification, thread will call its cleanup handler (if one has been set) and then terminate, aborting any evaluation that is in progress."
15:22:08 <elliott> ais523: aha, I can do scm_thread_cleanup(thread), and then pthread_kill it
15:22:15 <ais523> sounds right
15:22:21 <ais523> it's an interp API problem, not a threading problem
15:22:28 <ais523> I'll be annoyed if you don't use SIGALRM, though
15:22:44 -!- Phantom_Hoover has joined.
15:22:51 <elliott> ais523: Does SIGALRM quit the thread by default?
15:23:14 -!- Zetro_ has changed nick to Zetro.
15:23:19 <ais523> elliott: yes
15:23:33 <elliott> OK
15:23:36 <ais523> SIGALRM 14 Term Timer signal from alarm(2)
15:23:41 <elliott> yeah, I know
15:23:48 <ais523> the nice thing about semantically correct signals is that they do the right thing by default
15:24:31 <elliott> ugh, minecraft.net, get back up, I'm testing mission-critical software here
15:24:58 <ais523> elliott: strangely, I had a dream about Minecraft a couple of nights ago
15:25:17 <elliott> Do I want to know
15:25:45 <ais523> probably not
15:25:53 <ais523> I can't remember many details anyway
15:25:54 <elliott> Go on then
15:26:23 <ais523> it looked rather more like Final Fantasy Tactics Advance (with a higher resolution), though, probably because I have played that game and I haven't played Minecraft and my brain needed something to attach to
15:26:44 <ais523> all I remember is flooding the area with lava and standing on high ground to avoid it, then it mostly cooled, and there were some map spots that were permanently water
15:26:51 <elliott> hmm, just scm_thread_cleanup(thread); does nothing
15:26:54 <ais523> then night came and I was killed by an infinite number of monsters, game over
15:26:57 <elliott> the CPU keeps getting used forever
15:27:03 <elliott> that makes me worry that the thread won't be in a safe staet to kill
15:27:10 <elliott> ais523: haha
15:27:15 <ais523> (dreams tend not to distinguish between character and player, although it was pretty clear that the death was just a game-death and not anything permanent)
15:27:18 <elliott> lava doesn't cool in minecraft, though
15:27:28 <elliott> it just lavas
15:27:28 <elliott> forever
15:27:29 <ais523> I was thinking that next time, I should probably build a wall or something
15:27:52 -!- jcp|other has quit (Read error: Connection reset by peer).
15:28:01 <elliott> yeah ok thread cleanup thing doesn't work
15:28:05 <ais523> (the permanently water map spots were yellow, and shown as permanently water when I cursor-hovered them, which is apparently an operation I can do mentally while inside a game world and have no cursor)
15:28:35 <elliott> And I can't use pthread_kill because the API doesn't expose it
15:28:40 <elliott> the pthread_t, that is
15:29:56 <elliott> aha, hmm, scm_sigaction_for_thread
15:31:52 <ais523> bleh, I want to go home but it's rush rather-more-than-an-hour
15:32:57 <ais523> hmm, RAII is misnamed, I think; it's not really about allocation or initialization at all, but about deallocation and finalization
15:33:37 <elliott> grr, the exact function I want is offered
15:33:41 <elliott> but only through scheme
15:33:46 <elliott> so I have to go through hoops to get at it through c
15:36:27 <elliott> scm_call_1(scm_c_public_variable("(srfi srfi-18)", "thread-terminate!"), thread);
15:36:29 <elliott> hopefully that works
15:36:43 <ais523> what's the exclamation mark doing there? quoting?
15:37:55 <elliott> ERROR: In procedure catch-closure:
15:37:55 <elliott> ERROR: In procedure public-lookup: Module named (#{\x28;srfi}# #{srfi-18\x29;}#) does not exist
15:37:55 <elliott> hmph
15:37:58 <elliott> ais523: no, scheme
15:38:13 <ais523> elliott: I mean, it's part of the name
15:38:19 <elliott> naming convention
15:38:29 <elliott> albeit a vaguely inconsistent one
15:38:30 <ais523> I was wondering why the name contained an exclamation mark; although you can do that in Scheme, you'd need a reason to do it
15:38:35 <ais523> I was wondering what the naming convention signified
15:38:48 <elliott> "destructive", it originally just applied to mutating versions of procedures
15:38:53 <elliott> but then it got applied tovariable assignment too
15:39:00 <elliott> so now it means something like "called for side-effects"
15:39:13 <ais523> ah, aha
15:39:17 <ais523> or "impure" more generally, I suppose
15:39:31 <elliott> nah
15:39:36 <elliott> it's not applied enough for that
15:39:41 <elliott> and it's not even really applied consistently
15:39:44 <elliott> IMO the original convention was best
15:40:04 <ais523> amusingly, in ICA you use ! to not assign to a variable
15:40:12 <ais523> it's the get-contents operator (basically a dereference)
15:40:24 <ais523> same idea as in ML, although not quite semanticaly identical IIRC
15:40:26 <elliott> ERROR: In procedure catch-closure:
15:40:27 <elliott> ERROR: Wrong type to apply: #<variable 340db90 value: #<procedure thread-terminate! (thread)>>
15:40:27 <elliott> huh
15:40:48 <ais523> does it say what the right type is?
15:40:58 <ais523> but it looks like you've passed it a variable holding a thread, rather than a thread
15:41:04 <ais523> unless Scheme doesn't distinguish between those cases
15:42:40 <elliott> yay, thread-terminate just doesn't work
15:43:01 <ais523> Gregor: heh, I just noticed that I was on that page, denying a change that I personally agreed with
15:43:09 <elliott> wat
15:43:19 <ais523> because the person in question had used a tag designed for uncontroversial edits only
15:43:26 <ais523> and anything done to that page has been controversial
15:43:27 <elliott> oh, I noticed you on that page
15:43:28 <elliott> Gracenotes, too
15:45:36 <ais523> (well, I did accept a change to the CSS of the page to make it user-stylable, at least; I doubt anyone would disagree that that was an improvement)
15:47:04 <ais523> <flamingspinach> That's besides the point. I mean, if we REALLY wanted to, we could just fork the whole encyclopedia over this issue. Why not transclude? Because, as I stated above in my redirect vote, a transcluded Main Page is nonetheless not the main page. Simple as that. Oops, forgot to sign this.
15:47:26 <elliott> wtf? not even setting an alarm signal works
15:48:06 <ais523> are you sure it's not messing with signal handlers?
15:48:26 <ais523> note that signals and threads interact weirdly, if you use a non-thread-aware function like alarm it'll go SIGALRM a random thread
15:48:40 <ais523> rather than, say, the thread it was given on
15:48:55 <elliott> wait, alarm isn't signal-aware?
15:49:02 <elliott> hmm, surely scm_aarm is
15:49:04 <elliott> alarm
15:49:24 <ais523> <h2g2bob> This is the same as a search for "s" - the "%" is ignored when searching (this is the case for both mediawiki search and google searches).
15:49:33 <ais523> elliott: it's signal-aware (obviously) but not thread-aware, IIRC
15:50:02 <elliott> return scm_from_uint (alarm (scm_to_uint (i)));
15:50:04 <elliott> gah
15:50:05 <ais523> yep, the man page just mentions that the alarm's delivered to the calling process
15:50:30 <elliott> hmmm
15:50:30 <ais523> if you block SIGLARM in all threads but one, it'll be bound to be delivered to the thread that doesn't have it blocked, though
15:50:45 <elliott> I'm trying to figure out how to set an alarm for the current thread
15:50:51 <elliott> is that even possible?
15:51:07 <elliott> ooh, ooh, or how about this: can you get the current thread from pthread?
15:51:09 <elliott> s
15:52:01 <ais523> elliott: pthread_self(3)
15:52:10 <elliott> no manual entry, wooo, /me googles
15:52:12 <ais523> which I don't have a manpage for, but it's mentioned in man pthreads
15:52:23 <elliott> right, returns the thread
15:52:49 <elliott> ok, so at the start of the thread, I spawn another one, passing the thread id; that thread then sleeps ten seconds, and sends SIGALRM
15:52:58 <ais523> heh, clever
15:53:18 <ais523> I hope that the sleep isn't implemented in terms of alarm (which is allowed), or the universe will explode
15:53:36 <ais523> you might want to explicitly sleep using select in order to avoid that (select is guaranteed to be independent of alarm)
15:53:53 <elliott> heh
15:54:12 <ais523> hmm, there's a function called ftw(3)
15:54:19 <ais523> it'll go nicely with Android's wtf()
15:55:13 <ais523> apparently it's for traversing directory structures
15:55:33 <elliott> mcmap has the wonderful (die|stop|wtf)f? family of functions.
15:55:41 <elliott> DIEF!
15:55:55 <ais523> I wouldn't normally bother with a formatted error message for a wtf
15:56:03 <ais523> unless it was happening a lot and I wanted to give debug info at the same time
15:57:27 <elliott> well, completeness :P
15:57:36 <elliott> it's good to know "invalid zlib id blah"
15:57:40 <elliott> as opposed to just "invalid zlib id"
15:58:43 <ais523> heh, I'm still amused I called a template {{REMOVE THIS TEMPLATE WHEN CLOSING THIS AfD}}
15:58:54 <ais523> it seems that the lowercase f is intrinsically part of the spelling of AfD to me
16:02:06 <elliott> AHA
16:02:12 <elliott> if I send SIGTERM rather than SIGALRM, everything quits
16:02:14 <elliott> so SOMETHING works :P
16:04:47 <elliott> fuck this, I'm committing a non-timeouting //eval and doing more important things
16:08:19 -!- pumpkin has joined.
16:09:44 <ais523> oh right, I invented http://en.wikipedia.org/wiki/CAT:AFD/I
16:09:48 <ais523> best category ever
16:09:52 <itidus20> elliott: at some stage, my lessons on FSMs led me to write: (wo|hu|)man
16:09:53 * ais523 nostalgias
16:09:59 -!- copumpkin has quit (Ping timeout: 260 seconds).
16:11:10 <ais523> elliott: I think that category would be a good place to look for language inspiration, especially as it gets completely replaced every 14 days
16:11:15 <ais523> (barring relists)
16:11:20 <ais523> every 7, actually, I think
16:11:35 <elliott> haha
16:11:40 <elliott> "UML fever"
16:11:41 <elliott> wow
16:11:55 <elliott> A potentially deadly illness, clinically referred to as UML (Unified Modeling Language) fever, is plaguing many software-engineering efforts today.
16:11:55 <elliott> damn
16:12:00 <elliott> i was hoping it was an unrelated UML
16:12:04 <elliott> that could be turned into a diagram hell language
16:12:06 <ais523> so was I
16:12:24 <ais523> CAT:AFD/? is a little larger, but a little lower-quality on average, because some people file everything in ? as a protest against the system
16:12:37 <elliott> haha
16:13:09 <ais523> and still more people file everything in U for the same reason (although for a while U was typically empty due to AFD categorizing gnomes)
16:14:09 <elliott> grrr, someone reverted my addition of a {{prod}} using Twinkle
16:14:19 <elliott> anon edit? BETTER REVERT IT!
16:14:47 -!- jcp|other has joined.
16:15:08 <ais523> this is what's wrong with Wikipedia, ofc
16:15:17 <ais523> you can follow up with an actual AfD, except you'd probably have to log in for taht
16:15:29 <elliott> I just reverted their reversion
16:15:35 <ais523> why don't you talk-message them and ask why they deprodded? if every anon did that, they'd stop doing it after a while, because talk edits stop twinkle
16:15:44 <elliott> I might
16:15:44 <ais523> you're not supposed to revert prod removals ever, though, that's what prods are for
16:15:54 <elliott> ais523: hmm, true
16:15:55 <elliott> too late, though
16:16:10 <elliott> but come on, it said "identified as vandalism" right there in the commit, there's clearly no cogent objection gone into that :P
16:16:14 -!- augur has quit (Remote host closed the connection).
16:16:15 <elliott> too late now, anyway
16:16:34 -!- Zuu has quit (Ping timeout: 260 seconds).
16:16:44 <ais523> hmm, seems that 'crats can remove admin rights nowadays, I wonder why that change was made?
16:17:48 <ais523> I should see if the WT:RFA discussion on adminship reform is still going, sometime
16:17:54 <ais523> it had been going for years with no sign of stopping back in 2007
16:18:20 <Phantom_Hoover> ais523, have you checked?
16:18:27 <ais523> not yet
16:18:31 <ais523> I almost certainly will at some point, though
16:19:07 -!- pumpkin has changed nick to copumpkin.
16:29:04 -!- augur has joined.
16:30:54 <ais523> yep, I'm reading WT:RFA, the same argument's still going
16:31:48 <ais523> and someone's created WP:RFA2001 in order to have /yet another/ attempt at changing the system
16:32:18 <ais523> <Sven Manguard> I've closed the below thread. With respect to Mr. Keeper, who is only the latest person to start one of these (I may have started one myself a while back), the monthly compliant threads generate a lot of heat, rehash the same arguments, and generally serve no purpose but to create tension and sour relations. That's not the intent, of course, but it's what happens every single time, and it's what has happened this time.
16:34:41 <ais523> now, I'm wondering whether WP:GRFA has a) become massively insane, or b) is exactly the same as it used to be
16:34:46 <ais523> I'm not sure which is the more predictable option
16:36:55 <ais523> hmm. looks like content is basically the same but was rewritten in managementspeak
16:37:02 <ais523> or maybe it's always been like that, and I just didn't notice
16:39:37 <ais523> aha, /now/ I've found the list of insane requirements I was looking for: http://en.wikipedia.org/wiki/Wikipedia:RfA_reform_2011/Sysop_on_request
16:41:48 -!- Taneb has joined.
16:42:04 <Taneb> Hello
16:42:04 -!- kmaker has joined.
16:44:02 <ais523> hi
16:44:15 <Gregor> k...eymaker?
16:44:24 <kmaker> hi
16:44:24 <kmaker> yeah
16:44:37 <kmaker> yeah=that's me
16:44:45 <Taneb> So how is everyone today?
16:45:06 <kmaker> i came to ask what's going with esowiki but i see it's still online, it's just esolangs.org that isn't working
16:45:19 <Gregor> kmaker: Yeah, whoever owns esolangs.org effed up.
16:45:49 <ais523> kmaker: the DNS service hosting esolangs.org got bought out
16:46:02 <ais523> and are asking for more money in order to keep hosting the DNS
16:47:51 <kmaker> too bad...
16:48:26 <ais523> the esoteric.voxelperfect.net address should probably be considered the canonical one from now on, because it still works
16:51:50 <kmaker> so ais523, what's this feather language all about? it's mentioned here and there but i still don't know anything about it
16:51:59 <cheater> ais523 why can't you transfer esolangs.org
16:52:10 <cheater> oh ok
16:52:13 <ais523> cheater: because I don't own it
16:52:16 <cheater> just reading scrollback now
16:52:29 <ais523> kmaker: it's a combination of two things: an esolang idea that hurts my head when I think about it, and an inside joke
16:52:41 <ais523> basically, because whenever I work on it I end up having to quit due to getting to confused
16:52:50 <ais523> and its vaporwareness has become a #esoteric meme
16:53:12 -!- Zuu has joined.
16:53:13 <ais523> the general concept is a prototype-based OO language that uses time travel rather than delegation
16:54:11 <ais523> where all variables are immutable once created (as in SSA), but you can retroactively change the values that they had when they were created
16:55:00 <Phantom_Hoover> SSA?
16:55:17 <ais523> single static assignment
16:55:30 <ais523> a programming technique in which variables can't have their values changed once they're assigned for the first time
16:55:46 <Phantom_Hoover> So basically the way variables work in Haskell?
16:55:54 <ais523> very common in functional languages, and many imperative language compilers compile via an intermediate SSA form
16:55:56 <ais523> yep
16:56:30 <Phantom_Hoover> And what's delegation?
16:56:37 <Phantom_Hoover> The WP page is kind of unhelpful.
16:56:56 <kmaker> it sounds interesting. can't imagine how programming is done heh
16:57:04 <ais523> kmaker: neither can I, that's part of the problem
16:57:08 <kmaker> :D
16:57:08 <ais523> or at least, I can, but only slightly
16:57:15 <Sgeo> Phantom_Hoover, elliott, Taneb, CakeProphet, Jailbreak update
16:57:40 <ais523> Phantom_Hoover: "inheriting" methods via asking the superclass to handle them when they aren't present in the class itself
16:57:46 <Phantom_Hoover> Ah.
16:57:56 <ais523> doing things Feather-style is one way to eliminate the distinction between classes and objects, which I like
16:57:59 <Phantom_Hoover> Wait, how does time travel replace it?
16:58:24 <ais523> with delegation: change superclass, subclass delegates to superclass and gets the new changed method
16:58:39 <ais523> with time travel: change superclass, subclass got a copy of the new version of the superclass when it was created
16:58:41 <elliott> ais523: I'm designing a makefile with user input and network connectivity; help
16:58:45 <elliott> ive gone bad
16:58:46 <elliott> mad
16:58:58 <ais523> that should have been "hlep", surely?
16:59:04 <ais523> wow, that word is hard to intentionally typo
16:59:17 <ais523> is this a makefile as in program run via make(1)/
16:59:24 <ais523> if so, I think it counts as alternative programming
16:59:34 <ais523> (that said, IIRC buildroot has user input and network connectivity)
16:59:43 <Gregor> This most recent system upgrade seems to have improved Terminal.app from being /almost/ completely unusable to being completely unusable.
16:59:44 <ais523> (it is also beautifully insane, and even actually works sometimes)
16:59:44 <Taneb> Sgeo: Jailbreak!?
16:59:53 <ais523> Gregor: what was the change?
17:00:02 <elliott> <ais523> is this a makefile as in program run via make(1)/
17:00:02 <elliott> yep
17:00:11 <Gregor> ais523: Before, Terminal was occasionally slow and horrible. Now, it's always slow and horrible.
17:00:27 <ais523> is this a subjective "horrible", or some specific horriblizer?
17:01:12 <Gregor> You type something, it goes through data buffer purgatory for a while, then shows up later. It's like they have a TCP connection to whatthefuckistan through which all data sent to/from the PTTY is routed.
17:01:16 <elliott> ais523: to clarify, it's for a completely non-esoteric purpose
17:01:20 <Taneb> Sgeo: LIES
17:01:49 <ais523> Gregor: ah, so it's just very laggy for no sane reason at all
17:01:54 <Gregor> Yup
17:01:54 <elliott> hmm, does anyone know how to trap sh so that it outputs the status code it's going to execute with to a file?
17:02:01 <ais523> elliott: * exit with?
17:02:43 <ais523> Vorpal almost certainly knows; I don't but think I know where in the man page to look it up, so I'm looking there now
17:02:45 <elliott> ais523: yes
17:03:58 <ais523> it's trap EXIT (something), I'm trying to work out what the something is atm
17:04:53 <elliott> thanks :P
17:05:15 <ais523> I think it's probably just trap EXIT (echo $? > filename.txt)
17:05:21 <ais523> but I'm not sure; it shouldn't be too hard to test
17:05:46 <elliott> sounds good :P
17:05:52 <ais523> oh, and if you want to keep the same exit status, you'd need to store $? in a temporary variable and exit with it afterwards
17:05:53 <elliott> it's '' though i think
17:05:53 <elliott> not ()
17:05:59 <ais523> ah, hmm
17:06:16 <ais523> it didn't say what format the args were meant to be in, so I assumed you put a command there rather than the string representation of a command there
17:06:19 <ais523> perhaps I'm wrong
17:07:11 <ais523> elliott: what should my reaction be to [[Talk:Binary lambda calculus]]?
17:07:31 <ais523> perhaps to mention that <math> is a nonstandard extension to MediaWiki, and just because it's used on Wikipedia doesn't mean every wiki in existence has it?
17:07:48 <ais523> <Nthern> BTW: until this problem is fixed, the way to read this article is to edit the page, copy all the text, paste it into the [http://en.wikipedia.org/wiki/Wikipedia:Sandbox wikipedia sandbox], and then preview.
17:07:53 <elliott> meh, it's a reaonable mistake to make; I thought <math> was standard fo rthe longest time
17:07:54 <elliott> but uh
17:08:03 <elliott> direct em to http://en.wikipedia.org/wiki/Binary_lambda_calculus
17:08:09 <elliott> which is the same article inexplicably not deleted for notability after years
17:08:19 <ais523> elliott: is that the article you just prodded?
17:08:37 <elliott> no :)
17:08:43 <ais523> apparently not
17:08:44 <elliott> aw, the guy apologised to me and now i feel bad
17:09:07 <ais523> it does have references, at least
17:09:34 <ais523> heh, I'll have no idea which article you prodded unless I can guess your IP
17:09:41 <ais523> or check for recent prods, I guess, but that's nontrivial to do
17:09:48 <elliott> MWAHAHAHAHHA
17:11:38 <kmaker> by the way, has anyone made any brainfuck programs lately?
17:12:01 <ais523> we were playing a bit of BF Joust recently, but I don't think so apart from that
17:12:25 <kmaker> ok
17:15:50 <kmaker> i have a few ideas but it remains to be seen if i actually get anything done this year
17:15:59 <kmaker> or the next
17:17:11 <elliott> trap: cd `dirname $0`; rm -rf support; echo $? >guile.built: bad trap
17:17:12 <elliott> :(
17:17:20 <ais523> elliott: FOSD Program Cubes
17:17:29 <ais523> might be difficult to find, but not completely impossible
17:18:00 <elliott> haha
17:18:05 <elliott> NOOO NOW YOU KNOW MY CONSTANTLY-CHANGING IP FOREVER
17:18:22 * elliott wonders if there's any contributions not by him logged on that ip
17:18:27 <ais523> that took a while, including a bunch of API searches
17:18:36 <elliott> yep, someone seven days ago
17:18:51 <elliott> ais523: what a waste of effort :P
17:19:07 <ais523> it was fun, and I wanted to see if I could still remember how to do it
17:24:04 <ais523> I just looked for a page in the prod category whose most recent recategorization was around the time of your revert
17:26:26 <ais523> and the problem is that there's no way to specify that in the interface, so I had to use the API
17:35:03 -!- kmaker has quit (Quit: Page closed).
17:37:04 -!- Braber01 has joined.
17:37:33 <Braber01> I'm having trouble trying to install BeQuinge on Ubuntu could somebody help me?
17:38:30 <Phantom_Hoover> BeQuinge?
17:39:03 <Braber01> yes apperently the ubuntu pacakge that's provided on the site, is looking or an older version of a package that doesn't exist anymore,
17:39:08 <Phantom_Hoover> It doesn't seem to exist.
17:39:26 <Braber01> *BeQunge
17:39:30 -!- ais523 has quit (Read error: Connection reset by peer).
17:40:11 <Braber01> i can't spell...
17:40:32 <Gregor> Build it yourself :P
17:40:50 -!- ais523 has joined.
17:41:11 <Braber01> i'm trying to figure out how to download the binary however the howto link seemms dead, i get a 404 error, when I click on the howto link
17:41:44 <Phantom_Hoover> https://github.com/hatstand/Bequnge
17:44:00 <elliott> :t atomicModifyIORef
17:44:04 <elliott> ?hoogle atomicModifyIORef
17:44:31 -!- Braber01 has quit (Remote host closed the connection).
17:44:36 <elliott> Braber01: BeQunge is incredibly non-standards-compliant and ...
17:44:43 -!- augur has quit (Remote host closed the connection).
17:52:41 <ais523> elliott: what's the second-most-... Befunge interp?
17:53:02 <ais523> hey, my compose key has … on it
17:53:02 <elliott> ais523: Definitely GLfunge.
17:53:08 <ais523> that's a fun discovery
17:54:21 -!- augur has joined.
17:57:20 <Phantom_Hoover> elliott, what's the least-... Befunge interpreter that is in a reasonably complete state?
17:57:47 <elliott> Shiro. Definitely Shiro.
17:58:38 <Phantom_Hoover> *Reasonably complete*.
17:59:19 <elliott> Phantom_Hoover: Shiro is reasonably complete.
17:59:26 <Phantom_Hoover> elliott, it is?
17:59:33 <Phantom_Hoover> OK, other than Shiro.
17:59:35 <elliott> It passes Mycology with one BAD and implements enough fingerprints for fungot, although there's a bug in probably the socket one that stops it running.
17:59:35 <fungot> elliott: i said i don't care about who they like or don't like this ain't gonna show up.
17:59:42 <elliott> It's just a churn of implementing more fingerprints now.
17:59:45 <Phantom_Hoover> ^style
17:59:45 <fungot> Available: agora alice c64 ct darwin discworld europarl ff7* fisher homestuck ic irc jargon lovecraft nethack pa sms speeches ss wp youtube
17:59:51 <elliott> Phantom_Hoover: Definitely BeQunge, then.
18:00:04 <Phantom_Hoover> I thought it was the most ....
18:01:29 -!- ais523 has quit (Read error: Connection reset by peer).
18:02:40 -!- ais523 has joined.
18:03:26 <elliott> Phantom_Hoover: I never said it was coherent.
18:08:03 -!- CakeProphet has quit (Ping timeout: 252 seconds).
18:14:01 <Taneb> Hello!
18:14:50 -!- cheater has quit (Ping timeout: 245 seconds).
18:16:35 <Taneb> elliott: May I ask, what is the BAD bit of Shiro>?
18:17:15 -!- jcp|other has quit (Read error: Connection reset by peer).
18:18:49 -!- jcp|other has joined.
18:19:08 <elliott> back
18:19:12 <elliott> Taneb: BAD bit?
18:19:26 <Taneb> <elliott> It passes Mycology with one BAD and implements enough fingerprints for fungot, although there's a bug in probably the socket one that stops it running.
18:19:26 <fungot> Taneb: it looks like the sky?
18:19:40 <Taneb> Thanks, fungie
18:19:42 <elliott> Oh. fungot got it, it fails because it looks like the sky.
18:19:42 <fungot> elliott: even employees can't walk around above the 60th floor. but, then it's easy to get our materia!
18:19:52 <elliott> Actually it's a bug with reading or writing in text mode I'm not sure which
18:20:13 <Taneb> I may learn Funge-98
18:20:20 <Taneb> AND DEVELOPE IN IT
18:20:48 <Taneb> Would I get a swat for a Monty Python quote?
18:21:04 <elliott> oerjan isn't here, so no
18:21:08 <Taneb> Okay
18:21:13 <Taneb> WITH THIS HERRING!
18:21:58 <ais523> elliott: look at the file it generates and see if it's correct?
18:22:07 <ais523> Taneb: wait, you're using /that/ quote?
18:22:09 <ais523> out of context?
18:22:13 <ais523> perhaps you'll get swatted anyway
18:22:46 <Taneb> I was going to say it directly after "AND DEVELOPE WITH IT" but I thought it would be risky so I asked for approval
18:23:04 <Taneb> But yeah, it's not the best quote
18:23:11 <Taneb> Not even the best from Holy Grail
18:23:27 <olsner> developee with it
18:23:50 -!- jcp|other has quit (Read error: Connection reset by peer).
18:24:19 <Taneb> Question:
18:24:26 <olsner> Answer:
18:24:46 <Taneb> In Befunge, if a line feed character is p'd into the program, does that reshape the program?
18:24:55 <elliott> no
18:25:03 <elliott> would be fun if it did but no
18:25:22 -!- jcp|other has joined.
18:27:38 <Taneb> I'm going to sign off with "TTFN" now
18:27:55 -!- Taneb has quit (Quit: TTFN).
18:28:19 -!- jcp|other has quit (Read error: Connection reset by peer).
18:30:47 -!- cheater has joined.
18:31:36 -!- jcp|other has joined.
18:33:34 -!- jcp|other has quit (Remote host closed the connection).
18:55:15 -!- ais523 has quit (Remote host closed the connection).
18:57:06 -!- pumpkin has joined.
18:59:09 -!- copumpkin has quit (Ping timeout: 260 seconds).
18:59:32 -!- Taneb has joined.
18:59:40 <Taneb> Hello!
19:00:11 <elliott> hi
19:00:17 <nooga> hi
19:04:22 <Taneb> Would Befunge-93 be Turing Complete if it used a queue rather than a stack
19:10:26 <nooga> - (BOOL)applicationShouldTerminateAfterLastWindowClosed:(NSApplication *)theApplication
19:10:37 <nooga> OH THANK YOU MIGHTY COCA
19:10:41 <nooga> COCOA*
19:10:53 <olsner> CACA
19:10:58 <nooga> aSTALWC
19:14:47 -!- ive has quit (Ping timeout: 252 seconds).
19:29:08 -!- pumpkin has changed nick to copumpkin.
19:37:49 -!- ais523 has joined.
19:41:21 <nooga> http://en.wikipedia.org/wiki/Hilbert_R-tree
19:41:34 <nooga> this + esolang
20:09:52 <Taneb> Once I've finished my Travelling Salesman problem esolang
20:16:17 -!- pumpkin has joined.
20:16:58 -!- pumpkin has changed nick to copumpkin_.
20:17:36 -!- copumpkin has quit (Ping timeout: 276 seconds).
20:22:06 <Taneb> Uniquode is a long term project; lingua abstrusa and Salesman are on hold, Binary Variety Pack is dead
20:23:35 <Taneb> Next project: NonE Minimilastic One inSTRuction sET computEr
20:23:43 <Taneb> Or NEMO-STRETE
20:23:53 <ais523> "Minimilastic"?
20:24:00 <Taneb> Yes
20:24:00 <ais523> please tell me that's not a typo
20:24:03 <ais523> because it's a great word
20:24:31 <Taneb> It's e combination of minimalistic and elastic
20:24:37 <Taneb> *a
20:24:50 <Taneb> It is neither Minimalistc nor Elastic
20:25:38 <Taneb> I'm going to try and make it as useful as possible while still fundamentally not Turing Complete and also hard to program in
20:25:55 <Taneb> The instruction will have FOURTEEN operands
20:27:01 <Taneb> Or possibly loads of registers
20:27:11 -!- copumpkin_ has changed nick to copumpkin.
20:28:30 -!- ive has joined.
20:31:57 <Taneb> Actually, more fun idea
20:32:12 <Taneb> An Iota interpreter... IN XSLT
20:32:57 -!- elliott has quit (Ping timeout: 240 seconds).
20:33:36 <Taneb> Wait a minute, wait a goddamn minute
20:34:00 <Taneb> Combinatory logic can be expressed as tree rearranging from within the tree, right?
20:34:08 <ais523> I think so
20:34:25 <Taneb> And trees can be expressed as XML, right?
20:34:39 <Taneb> Are you thinking what I'm thinking?
20:39:28 <Taneb> <S><x/><y/><z/></S> becomes <x><z/><y><z></y></x>
20:42:46 <Taneb> I saw a Microsoft advert that really sums the company up.
20:42:56 <Taneb> "I'm a PC and I'm finally up-to-date!"
20:43:28 <ais523> the whole "I'm a PC" campaign was ridiculous IMO
20:43:41 <ais523> also, I hate the conflation of "PC" and "Windows"
20:43:46 <ais523> although I'm pretty sure it's deliberate
20:44:08 <Taneb> It is delibrate on the part of Microsoft and IBM before it
20:49:01 <Taneb> Can someone who understands XPath better than me tell me what //s/*[3]/.. would match?
20:57:34 <Phantom_Hoover> XPath?
20:58:02 <ais523> Taneb: I'm trying to read it as a regex
20:58:04 <ais523> and failing
20:58:04 <Taneb> W3C reccomendation used to navigate an XML document with XSLT or XQuery
20:58:14 <fizzie> It just might match any <s> elements with at least three or four children of any type. If [n] was the index-thing, and depending on whether it was 0- or 1-indexed.
20:58:29 <Taneb> I'm hoping 1-indexed
20:58:43 <Taneb> And I'm hoping fizzie is right
20:59:53 <fizzie> It could be a shorthand for something like //s/*[position()=3]/..
21:00:26 <Taneb> Right, looked it up
21:00:48 <Taneb> IE is 0-indexed, everything else with XPath (including the reccomendation) is 1-indexed
21:10:45 -!- zzo38 has joined.
21:11:23 -!- Wamanuz has quit (Remote host closed the connection).
21:11:50 <zzo38> I have read about Curry-Howard stuff, and how it can be related to Haskell (they are even named after the same people, I think)
21:11:59 -!- Wamanuz has joined.
21:14:00 -!- GreaseMonkey has joined.
21:14:05 -!- GreaseMonkey has quit (Changing host).
21:14:05 -!- GreaseMonkey has joined.
21:14:33 <nooga> < > < > < >
21:14:37 <nooga> peg leg
21:15:21 -!- nooga has quit (Quit: Lost terminal).
21:16:23 -!- kmc has quit (Quit: Leaving).
21:17:50 -!- nooga has joined.
21:17:54 <Taneb> Does anyone know how to create a copy of an element with a copy of a different element as an additional child node in XSLT?
21:22:15 <zzo38> Why are type families not allowed in instance declarations in Haskell?
21:23:12 <zzo38> Actually I think I see there are overlapping instances with what I am doing
21:23:57 <zzo38> (There seems to be overlapping instances even though there is only a single instance declaration.)
21:24:30 -!- KingOfKarlsruhe has joined.
21:26:56 <nooga> preprocessing C to get decent OOP syntax
21:30:15 <Taneb> I leave you with http://esoteric.voxelperfect.net/wiki/User:Taneb/XSLT_S_and_K
21:30:19 -!- Taneb has quit (Quit: TTFN).
21:31:36 -!- derdon has quit (Remote host closed the connection).
21:48:43 <zzo38> Type families does not seem to do everything.
21:49:39 <zzo38> It seems to accept type families in a constraint although they seem to don't work even though it is acceptable.
21:52:07 -!- CakeProphet has joined.
21:53:45 -!- CakeProphet has quit (Client Quit).
21:53:59 -!- CakeProphet has joined.
21:54:05 -!- CakeProphet has quit (Changing host).
21:54:05 -!- CakeProphet has joined.
21:58:00 -!- augur has quit (Remote host closed the connection).
21:58:00 -!- sllide has quit (Read error: Connection reset by peer).
22:00:31 <olsner> no elliott, huh
22:02:44 <CakeProphet> is it bad that some of my dreams involve conversing in #esoteric?
22:02:57 <CakeProphet> am I dreaming right now? hello?
22:03:10 <ais523> CakeProphet: if I said no, would you believe me?
22:03:29 <CakeProphet> ais523: if I believe you, will that make it any more true?
22:03:57 <CakeProphet> if I mandate conditionals, will they be upheld rigorously?
22:03:59 <ais523> well, if you /are/ dreaming, and I convince you that you are
22:04:03 <ais523> then you'll probably wake up
22:04:06 <ais523> it's the most common result
22:04:10 <CakeProphet> ais523: oh I know I'm not dreaming.
22:04:15 <CakeProphet> :P
22:04:26 <ais523> if you're dreaming, then probably I am too
22:04:28 -!- monqy has joined.
22:04:38 <CakeProphet> I find it is much easier to realize you are not dreaming than it is to realize you are.
22:05:16 <CakeProphet> even the most vivd dreams aren't like being fully awake.
22:05:32 <CakeProphet> and you have the cognitive faculty while awake to determine such things.
22:05:39 <olsner> so how many of those times you've realized you were "not" dreaming were you actually wrong? can you even know?
22:05:46 <CakeProphet> so fucking you philosophy and your dream shit.
22:05:53 <ais523> olsner: that's only ever happened to me with recursive dreams
22:05:53 <monqy> I've been wrong about realizing I'm not dreaming
22:06:02 <ais523> where I assumed I wasn't dreaming because I just work up
22:06:07 <olsner> ais523: recursive dreams are awesome!
22:06:09 <ais523> which turns out not to be an entirely reliable check
22:06:12 <ais523> olsner: no they aren't
22:06:17 <ais523> you go through your boring morning routine
22:06:18 <olsner> I've just had one, it was hilarious
22:06:21 <ais523> then have to do it all /again/
22:06:25 <CakeProphet> olsner: sure can't
22:06:29 <ais523> well, it's funny the first time
22:06:32 <ais523> but gets old quickly
22:06:40 <monqy> my recursive dreams don't involve morning routines, interestingly enough
22:06:44 <CakeProphet> but I am /not/ dreaming now, for sure. it may be hard to determine these things when you're dreaming, but not when you're actually awake.
22:07:01 <CakeProphet> unless my entire life has been a dream, I guess.
22:07:02 <monqy> I usually wake up in a strange place but know what's going on
22:07:20 <ais523> monqy: do you realise it's a recursive dream that time?
22:07:24 <ais523> or only when you wake up a second time?
22:07:25 <monqy> no
22:07:46 <CakeProphet> I think "nested" is a better term.
22:08:01 <monqy> I don't think I'm not dreaming when I wake up
22:08:15 <monqy> maybe it just doesn't occur to dream me
22:08:20 * CakeProphet is very bad at dreaming, truthfully.
22:08:21 <olsner> the worst case would be some kind of fixpoint dream where you wake up in the dream you were waking up from
22:08:47 <olsner> ... and you keep doing it the rest of your life
22:08:59 <monqy> tonight I had a dream in which I had a series of dreams within that dream and I was describing them
22:09:00 <CakeProphet> most of my dreams are not very vivid. Sometimes they are. Sometimes they nest as well.
22:09:05 <CakeProphet> but most are very vaguely recalled.
22:09:25 <ais523> olsner: you just need each dream to go twice as quickly, in realtime, as the previous one
22:09:40 <CakeProphet> ...Inception anyone?
22:09:42 <ais523> once you go past the convergence point, you are now capable of thinking an infinite amount in finite time
22:10:02 <CakeProphet> I don't think the ratio was 2 though in Inception.
22:10:10 <ais523> this strikes me as probably better than a singularity, because you can't trust a random AI, but you can probably trust olsner
22:10:16 <olsner> CakeProphet: inception did not go deep enough ... into the subject of nested and recursive dreams
22:10:35 <CakeProphet> olsner: I was referring to the time stuff, as ais523 mentioned it.
22:10:41 * Phantom_Hoover → sleep
22:10:54 -!- Phantom_Hoover has quit (Quit: Leaving).
22:11:08 <monqy> never seen inception. probably shjould.
22:11:18 <CakeProphet> monqy: it is not bad.
22:11:30 <CakeProphet> it's one of the few movies that made my brain hurt a little bit.
22:12:28 <olsner> didn't make my brain hurt, but maybe I wasn't watching it thinkingly enough
22:13:06 <CakeProphet> occasionally I'd lost track of some detail and be slightly confused as to what was going on
22:13:16 <CakeProphet> until it returned to a previous dream. "oh right..."
22:14:02 <olsner> what was going on was always moving into, out of or around inside a dream
22:15:59 -!- GreaseMonkey has quit (Quit: The Other Game).
22:17:08 <CakeProphet> olsner: uh true statement
22:20:15 <CakeProphet> Entertainment Weekly gave the film a B+ rating and Lisa Schwarzbaum wrote, "It's a rolling explosion of images as hypnotizing and sharply angled as any in a drawing by M.C. Escher or a state-of-the-biz videogame; the backwards splicing of Nolan's own Memento looks rudimentary by comparison."[
22:20:30 <CakeProphet> I don't trust anyone from Entertainment Weekly to have actually followed what was going on in that moive.
22:20:39 <CakeProphet> thus the "rolling explosion of images"
22:21:24 <zzo38> Now, it cannot make type level programming in Haskell. Because, I try thing it failed
22:21:43 <CakeProphet> wat
22:22:19 <olsner> CakeProphet: it cannot make type level
22:22:31 <CakeProphet> I see.
22:22:40 <CakeProphet> I recall walking out of the theater feeling as though I were in a dream
22:22:44 <CakeProphet> after watching that movie.
22:23:02 <zzo38> I have watched Inception movie. And then I said they have read Godel, Escher, Bach. My brother said no they did not do so. But, I wanted to make sure I checked, in Wikipedia, in fact one of the people did read that book.
22:23:58 <CakeProphet> oh good.
22:24:20 <zzo38> Did you read the book Godel, Escher, Bach?
22:24:49 <CakeProphet> I haven't.
22:26:22 <CakeProphet> According to Hollywood Reporter, both Brad Pitt and Will Smith were offered the role.
22:26:36 <CakeProphet> I don't think Will Smith would have been as good in that role.
22:26:56 <CakeProphet> he would do his Will-Smith-sad-face thing and it would ruin everything. :P
22:27:27 <zzo38> How do you make it in Haskell, that if instance GreaterThan t u => DoesNotDivide (Succ t) (Succ u); doesn't work, then it will try instance DoesNotDivide t (Subt u t) => DoesNotDivide t u; instead?
22:28:04 <CakeProphet> you.... don't
22:28:09 <CakeProphet> you don't don't do that.
22:29:35 <zzo38> Is there any way to make an extension in Haskell to make it to work?
22:29:49 <CakeProphet> you have typeclasses, and instances of such. if the type matches the instance declaration then it has an implementation of the methods.
22:30:03 <CakeProphet> there isn't any sort of re-routing or conditional logic involved.
22:30:15 <CakeProphet> zzo38: feel free.
22:31:38 <zzo38> GHC does allow overlapping instances and incoherent instances and so on. Sometimes it does it by specificness. But sometimes it should instead assume they are equivalent if defined??
22:32:44 <CakeProphet> how would it go about resolving that?
22:41:40 <CakeProphet> zzo38: basically you can't make typeclass implications when the instance doesn't match.
22:41:50 <CakeProphet> it has to be true.
22:47:59 <CakeProphet> ...what, why did my date and time disappear
22:48:10 <CakeProphet> and why is there a large inaccessible hole on the panel where I cannot add things.
22:48:25 <monqy> @localtime CakeProphet
22:48:34 <monqy> lambdabot.......
22:48:42 <monqy> rip :'(
22:48:44 <CakeProphet> monqy: NO I MUST FIX MY PANEL
22:49:16 <monqy> 01:49:43
22:49:19 <monqy> when i checked
22:49:25 <monqy> a few minutes ago
22:49:26 <monqy> er
22:49:27 <monqy> seconds
22:49:33 <monqy> maybe a minute ago in a few more seconds
22:49:33 <CakeProphet> 6:50 PM here
22:49:37 <monqy> oh
22:49:39 <CakeProphet> but I CAN'T GET IT TO GO IN THE SAME PLACE
22:49:41 <CakeProphet> NOTHING WILL GO
22:49:44 <CakeProphet> THERE IS JUST A BIG UGLY HOLE
22:49:46 <monqy> i checked your time it must be broken
22:49:54 <monqy> my time is 1551
22:49:55 <CakeProphet> uh, no.
22:50:11 <CakeProphet> it is 6:50 PM aka 18:50
22:50:26 <monqy> yeah but when i checked it it said 01:49:43
22:50:32 <CakeProphet> I have 3 time sources that agree with me.
22:50:36 -!- copumpkin has quit (Quit: Computer has gone to sleep.).
22:50:36 <monqy> oh wait no that must have been the server
22:50:51 <monqy> oh I didn't use the right command
22:50:52 <monqy> haha
22:50:52 <monqy> :(
22:51:18 <monqy> 15:52:58 [freenode] CTCP TIME reply from CakeProphet: Thu Sep 8 18:51:57 2011
22:51:20 <monqy> that's better
22:51:20 <CakeProphet> bah
22:51:22 <CakeProphet> this is bad.
22:51:31 <monqy> just ctcp time yourself whenever you need it
22:51:40 <CakeProphet> you are missing the point completely.
22:51:45 <monqy> that's the joke
22:51:54 <CakeProphet> I have a clock on my panel now
22:52:00 <CakeProphet> BUT IT IS. IN. THE. WRONG. PLACE.
22:52:05 <monqy> how does that even happen
22:52:19 <CakeProphet> I don't know
22:52:28 <CakeProphet> my computer does this shit for some reason after restarts sometimes.
22:52:39 <CakeProphet> first my shutdown button disappeared... though I don't really need that one.
22:53:26 <CakeProphet> where is panel configuration stuff at?
22:54:08 <CakeProphet> it's not in gconf is it?
22:55:30 -!- KingOfKarlsruhe has quit (Quit: ChatZilla 0.9.87 [Firefox 6.0.1/20110830092941]).
23:00:44 <CakeProphet> bam fixed.
23:01:05 <CakeProphet> something weird happened to the original clock app so I just manually removed it in gconf.
23:07:33 <itidus20> random youtube comment: "and I thought Finland was bad for making the moomins..........  :P"
23:09:04 <zzo38> The instance for DoesNotDivide doesn't work. OK, I have been told why it doesn't work. Does it mean there is some things missing from Haskell type system? Or, does it mean other thing instead?
23:09:28 -!- kmc has joined.
23:14:01 <CakeProphet> if by "missing" you mean "doesn't do what you want it to do" then yes.
23:14:25 <CakeProphet> though there are probably things that are actually missing... ask elliott I bet he knows.
23:16:51 -!- copumpkin has joined.
23:16:52 <zzo38> As far as I know there could be a lot of improvement that could be made in Haskell, including new kinds and new pragmas and new macros and other stuff
23:20:40 <CakeProphet> my stance is that nothing could ever be improved about Haskell it is perfect in every way.
23:20:55 <shachaf> CakeProphet: Without more-notation?
23:21:44 <CakeProphet> nothing.
23:22:25 <CakeProphet> man this code is going to be a pain in the ass to debug
23:22:33 <CakeProphet> maybe if I just stare at it long enough I'll find all of the bugs.
23:22:40 <monqy> is this for your thing
23:22:46 <CakeProphet> no never.
23:22:57 <CakeProphet> I have no things.
23:23:00 <CakeProphet> no such thing
23:23:07 <zzo38> Is there some things in category theory that cannot be made in Haskell?
2011-09-09
00:01:12 -!- Patashu has joined.
00:17:56 <Gregor> In Catholicism, the halting problem is believed to be unsolvable for infants who die before baptism.
00:19:00 <ais523> well, it's unsolvable for most other TC systems...
00:22:06 <Gregor> Well, this is quite the opposite of atheinformatic common wisdom, which is that the halting problem is solvable for all humans. (doesHalt (x:human) -> true)
00:22:34 <ais523> ah, I see
00:22:44 <zzo38> I read about Curry-Howard and how you can use it to make intuitionistic logic with Haskell. But how can you make Typographical Number Theory with Curry-Howard?
00:24:22 <zzo38> But still, even if you write the program in Haskell using intuitionistic logic, you still need to ensure all outputs are defined if the input is defined. Sometimes is difficult due to halting problem but you can make a subset that halts. It is still not complete, they could make up a PROVE pragma to do it?
00:25:23 <zzo38> And if there is no proof, use the ASSUME pragma.
00:29:55 -!- copumpkin has quit (Ping timeout: 260 seconds).
00:30:19 -!- copumpkin has joined.
00:48:24 -!- ive has quit (Ping timeout: 252 seconds).
00:52:37 -!- kmc_ has joined.
00:52:48 -!- nooga has quit (Ping timeout: 252 seconds).
00:54:27 -!- kmc has quit (Ping timeout: 252 seconds).
00:55:53 -!- kmc__ has joined.
00:59:30 -!- kmc_ has quit (Ping timeout: 250 seconds).
00:59:55 -!- zzo38 has quit (Remote host closed the connection).
01:02:17 -!- kmc_ has joined.
01:05:19 -!- kmc__ has quit (Ping timeout: 252 seconds).
01:06:52 -!- kmc_ has changed nick to kmc.
01:13:49 <quintopia> sam hughes is a bastard :(
01:21:42 <Sgeo> quintopia, hmm?
01:25:57 <quintopia> the yawning tweet. elliott made me yawn over irc last night and i had to fight not to yawn reading that tweet
01:36:34 -!- cheater has quit (Ping timeout: 260 seconds).
01:41:40 -!- DH____ has quit (Remote host closed the connection).
02:15:32 -!- DH____ has joined.
02:22:22 <CakeProphet> honestly I've been using try almost as much as if
02:22:30 <CakeProphet> WHY PYTHON.
02:22:35 <ais523> try's a better control construct all round
02:23:03 <ais523> in fact, is try+recursion TC? my guess is yes
02:23:07 <CakeProphet> I guess it's just that exception hierarchies are annoying.
02:23:14 <CakeProphet> ais523: I believe we had a discussion about this once
02:23:15 <ais523> although that's a bit wooly as it doesn't define what sort of data's allowed
02:23:25 <CakeProphet> a language that uses only exception handling with the ability for recursion.
02:24:02 <CakeProphet> also with some new constructs. Like a "lower" keyword to return to a previous exception level. :D
02:24:41 <CakeProphet> and exceptions would essentially be like ADT
02:26:48 <CakeProphet> the difficult part would be fitting IO into this model.
02:27:12 <CakeProphet> without adding something that is not strictly exception handling.
02:27:58 <ais523> clearly we need an unthrow
02:28:06 <ais523> which is a bit like RESUME NEXT from BASIC
02:28:10 <ais523> only with exceptions instead
02:28:43 <CakeProphet> well I think that would similar to what lower does.
02:28:50 <CakeProphet> returns back to the original raise.
02:29:06 <CakeProphet> so you could have an implicit try around the entire program
02:29:23 <CakeProphet> that catches IO exceptions, and then lowers something back.
02:29:29 <CakeProphet> the lower would be the return value of the raise, perhaps?
02:32:33 <olsner> sounds like coroutines
02:32:33 <CakeProphet> it would be similar to functions but backwards. :P
02:32:52 <CakeProphet> up and back down instead of down and back up.
02:34:45 -!- kmc has quit (Quit: Leaving).
02:35:56 -!- azaq23 has quit (Quit: Leaving.).
02:37:16 * CakeProphet will implement this when has a moment.
02:40:52 <CakeProphet> I think having a pattern matching construct along with recursion would allow it to be Turing complete?
02:41:55 -!- oerjan has joined.
02:42:05 <CakeProphet> otherwise I don't think you can branch.
02:42:40 <CakeProphet> oh wait nevermind you could via recursion.
02:42:57 <CakeProphet> and just a regular catch without any kind of special pattern matching.
02:45:59 -!- pikhq_ has joined.
02:46:31 <oerjan> 00:17:56: <Gregor> In Catholicism, the halting problem is believed to be unsolvable for infants who die before baptism.
02:46:35 <oerjan> 00:19:00: <ais523> well, it's unsolvable for most other TC systems...
02:46:47 <oerjan> i am not entirely sure i want a TC system based on dying infants.
02:46:54 <ais523> I don't want one either
02:47:16 <ais523> well, it's a case of "I wouldn't buy such a system if I were offered one"
02:47:27 <ais523> rather than "if such a system already existed, I wouldn't want it to be TC", which seems kind-of irrelevant
02:47:49 <oerjan> important clarification, that.
02:49:20 -!- pikhq has quit (Ping timeout: 260 seconds).
02:49:58 <oerjan> <ais523> clearly we need an unthrow
02:50:14 <oerjan> i thought common lisp conditions were supposed to support that
02:50:19 -!- copumpkin has changed nick to pirateat41.
02:50:20 <ais523> probably they do
02:50:29 <ais523> the concept is a relatively obvious one, and not even particularly eso
02:53:23 <CakeProphet> :(
02:53:32 <CakeProphet> man you guys have such high standards.
02:55:11 <ais523> now I'm trying to work out if "uncatch" is a sane and useful concept (outside the concept of Feather, where everything's sane by comparison and I have no idea what would be useful)
02:56:07 <CakeProphet> I believe an uncatch would negate a catch below it?
02:56:10 <oerjan> um isn't uncatch just rethrowing? although if you also have unthrow you'd want a new catch to be able to unthrow all the way back
02:56:35 <ais523> I was thinking that it should work even after an unthrow
02:56:43 <ais523> as in, you do throw; uncatch;
02:56:46 <oerjan> eek
02:58:09 <oerjan> ais523: i assume that would go up the catch chain until you hit something which _doesn't_ unthrow
02:58:29 <CakeProphet> I'm so confused now.
02:58:39 <ais523> if you remembered a history of throws and catches it might not be so hard
02:58:50 <oerjan> and if there was no unthrow then it wouldn't get to run, so it would essentially be an ununthrow
02:58:54 <ais523> err, I'm confused now too, and this is much less confusing than Feather
02:59:13 <ais523> so we have rethrow = uncatch, and ununthrow which reverses an unthrow?
02:59:33 <ais523> I don't see why you couldn't keep stacking un- prefixes forever and getting meaningful operations
02:59:36 <oerjan> ais523: actually i think it's more subtle than that
02:59:40 <ais523> although whether they were /useful/ would be another matter
03:00:27 <oerjan> in a handler, when you have the option both to rethrow and to unthrow, there's the question of exactly _when_ you discard the unthrow possibility
03:00:48 <ais523> especially because you also have the option to throw an unrelated exception
03:01:06 <oerjan> oh and the option of just exiting at handler level, which probably must discard the unthrow to make sense
03:01:41 <ais523> I take it it doesn't make sense to throw one exception, throw an unrelated exception, then unthrow the first one?
03:01:48 <ais523> and if it does, can you subsequently unthrow the second?
03:01:58 <oerjan> ais523: i was just thinking about that
03:02:06 <oerjan> you'd need an unthrow stack :P
03:02:20 <ais523> so it's OK if you unthrow the second, then the first?
03:02:27 <ais523> I'm beginning to think this is a bit like setjmp in C, with all the restrictions that has
03:02:36 <ais523> and using continuations instead would be how you break the restrictions
03:02:47 <oerjan> heh
03:03:40 -!- pirateat41 has changed nick to copumpkin.
03:04:09 <CakeProphet> well
03:04:13 <CakeProphet> each exception would have its own unthrow stack
03:04:16 <CakeProphet> so, not a problem.
03:04:43 <oerjan> CakeProphet: er, it's when you mix exceptions you need an unthrow stack
03:05:14 <CakeProphet> oh, well then the exception would just have an unthrow pointer...
03:05:23 <CakeProphet> you unthrow the exception, control goes back to where it was thrown.
03:05:28 <CakeProphet> done.
03:06:01 -!- ive has joined.
03:06:12 <oerjan> CakeProphet: but we have the option of having an explicitly manipulatable unthrow stack which the other functions can be written in terms of...
03:06:28 <CakeProphet> wait, there are functions in this language?
03:06:29 <CakeProphet> :P
03:06:43 <oerjan> i didn't know we were discussing a particular language
03:06:45 <Jafet> This can probably be easily expressed with continuations.
03:07:07 <Jafet> Although, what continuation can be sensibly thrown is another question.
03:07:25 -!- Jafet has quit (Read error: Connection reset by peer).
03:08:03 -!- lambdabot has joined.
03:08:07 -!- Jafet has joined.
03:08:15 <oerjan> (1) perform a command while pushing current continuation to unthrow stack. the command may or may not do any throwing. (2) pop unthrow stack, discarding it. (3) pop unthrow stack, returning to continuation.
03:08:36 <oerjan> (4) throw an exception.
03:08:46 <Jafet> ...perhaps one that takes a replacement for whatever-value-caused-the-problem as its parameter.
03:08:54 <oerjan> then the _usual_ way to throw an exception would be combining (1) and (4)
03:09:03 <Jafet> Well, the stack is an implementation detail.
03:09:12 <oerjan> oh wait. this doesn't support uncatch.
03:09:14 <CakeProphet> not really sure it's necessary...
03:09:49 <oerjan> Jafet: actually i'm here mostly making the stack explicit in a vain hope of making the semantics understandable
03:10:15 <CakeProphet> throw/unthrow/catch is really really simple.. :P
03:10:36 <CakeProphet> uncatch I'm not too clear on.
03:10:37 <oerjan> but if there are enough options, you'd surely end up with enough power to explicitly manipulate the stack.
03:10:38 <Jafet> By "unthrow", I presume you mean "go back to where the exception occurred and continue".
03:10:43 <CakeProphet> yes.
03:10:43 <oerjan> Jafet: yeah
03:11:05 <Jafet> But how would you continue? An error just occurred.
03:11:13 <CakeProphet> ...they're not errors
03:11:22 <Jafet> Okay, which language is this
03:11:26 <CakeProphet> it isn't one.
03:11:28 <CakeProphet> not yet.
03:11:35 <oerjan> CakeProphet: IT'S NOT ENOUGH UNTIL YOU CAN DO PROLOG IN THE EXCEPTION SYSTEM
03:11:37 * CakeProphet is going to make basic implementation with throw/unthrow/catch
03:11:44 <oerjan> (including cut)
03:11:45 <CakeProphet> oerjan: UNECESSARY
03:11:49 <Jafet> But exceptions are usually used to signal errors, so you need some way to continue that doesn't cause the error again
03:11:54 <CakeProphet> I posit that the throw/unthrow/catch is easily
03:11:57 <CakeProphet> Turing complete.
03:12:16 <copumpkin> fuck turing completeness
03:12:17 <Jafet> I suggest returning a continuation that replaces the thing that caused the error, if applicable
03:12:25 <CakeProphet> provided that catch is a recursive control flow statement.
03:12:37 <CakeProphet> Jafet: that's the idea, except it's not really a continuation.
03:12:54 <CakeProphet> just a.. value. an exception
03:13:02 <CakeProphet> you replace the throw with an exception
03:13:04 <CakeProphet> everything is exceptions.
03:13:11 <CakeProphet> which are, in my implementation, essentially ADTs
03:13:24 <CakeProphet> *future implementation
03:13:28 <oerjan> Jafet: note that common lisp actually _does_ support something like unthrow, afair
03:14:18 <oerjan> Jafet: presumably however, each type of exception would contain enough information to tell whether it could be safely continued from
03:14:38 <Jafet> I'm confused by CakeProphet already. That's good, right?
03:14:39 <oerjan> so probably fatal errors wouldn't have the option
03:14:51 <CakeProphet> well, fatal errors could just be pre-defined
03:14:59 <oerjan> Jafet: i haven't got around to reading him yet :P
03:15:01 <CakeProphet> and then if you unthrow: undefined behavior.
03:15:36 <Jafet> Just make it impossible to name the type of a fatal error, so the programmer can't ever handle one.
03:15:45 <CakeProphet> well, that's an option.
03:16:21 <oerjan> CakeProphet: note that all of this tends to be complicated if you have asynchronous exceptions and need to worry about exactly when to reinstall exception handlers
03:16:33 <oerjan> (and that's even without unthrow, i take)
03:16:42 <CakeProphet> ...asynchronous exceptions?
03:16:55 <oerjan> CakeProphet: ghc allows throwing exceptions into other threads :P
03:17:06 <CakeProphet> ah
03:17:08 <oerjan> (i don't think it allows unthrow though)
03:17:21 <CakeProphet> well, hmmm.. I'm sure something could be workd out. :P
03:17:28 <CakeProphet> that can be worried about later.
03:17:29 <Jafet> To unthrow, you'd have to wrap everything in the Cont type or something
03:17:41 <Jafet> Perhaps static typing should be left out of your project
03:17:43 <CakeProphet> ...I really don't see a need for explicit continuations.
03:17:52 <oerjan> CakeProphet: oh and the worry of when to reinstall handlers applies regardless
03:18:10 <oerjan> (what happens if your handler has an error)
03:18:35 <CakeProphet> same thing that happens in any other code
03:18:40 <CakeProphet> >_>?
03:18:45 <CakeProphet> I am not seeing the problem.
03:19:11 <oerjan> CakeProphet: um it's a common problem when actually _using_ exceptions handlers.
03:21:31 <CakeProphet> ...well when you throw an exception in a handler it would just rise up to the next handler.
03:21:47 <oerjan> <Jafet> Just make it impossible to name the type of a fatal error, so the programmer can't ever handle one. <-- erm i didn't mean fatal in the sense you couldn't handle them further up, just fatal in the sense you cannot reasonably continue from them. actually i'm not sure there is a real difference.
03:23:30 <oerjan> CakeProphet: yes but you might want to install a temporary handler for your handler. and then _still_ be able to unthrow the original. but i guess that can be worked out with ordinary control flow.
03:23:34 <Jafet> Every exception should be revertable! Design the language to enforce this.
03:23:53 <Jafet> Except, maybe, really really fatal errors.
03:24:14 <CakeProphet> ProgramWasStabbedToDeathException
03:24:24 <oerjan> CPUOnFireException
03:24:54 <CakeProphet> prepareWaterBalloonCatapult
03:25:06 <CakeProphet> see, you can recover from that.
03:25:10 <oerjan> O KAY
03:27:38 <ais523> SIGKILL is really, really fatal in most Unices, as there's no way to block or handle it
03:27:57 <ais523> oerjan: Java allows throwing exceptions at other threads too
03:28:03 <ais523> but decided that was a bad idea after a while
03:28:15 <oerjan> heh
03:28:37 <CakeProphet> threads are for ninnies
03:41:28 <pikhq_> Yeah, you should only use ucontext.
03:48:01 <oerjan> APPLICATION USAGE None.
03:48:20 <oerjan> pikhq_: man page disagrees with you
03:48:21 <Patashu> forget throwing exceptions at other threads, I want to throw exceptions across the network
03:49:30 <oerjan> posix/botnet.h bn_throw_exception
03:49:45 <Patashu> \o/
03:49:45 <myndzi> |
03:49:46 <myndzi> |\
03:51:27 <ais523> hmm, sounds like another feature for my hypothetical INTERCAL IRC client
03:51:33 <ais523> along with CTCP SWAPNICK
03:51:46 <ais523> that basically just swaps the I/O handles so each client is now controlling the other's connection
03:53:46 <Patashu> haha
03:54:00 <CakeProphet> The "else" here seems idiotic to me. If I have statements A and B in my "try" block, and C in my "else" block, how does that differ from having A, B and C in the "try" block? —Preceding unsigned comment added by 192.91.171.42 (talk) 20:06, 16 March 2010 (UTC)
03:54:09 <CakeProphet> ...lol
03:54:25 <Patashu> how indeed
03:54:27 <CakeProphet> 192.91.171.42 is perhaps not that smart.
03:54:53 <Patashu> else is like finally except it only runs on an exception? or?
03:54:58 <ais523> does the else block, in whatever language was on that page, run if an exception isn't caught?
03:55:02 <CakeProphet> yes.
03:55:05 <ais523> also, IP addresses starting 192 confuse me
03:55:06 <CakeProphet> Ruby and Python have it.
03:55:23 <ais523> are there general-purpose 192 addresses as well as all the special-cased ones?
03:55:32 <CakeProphet> I have no idea.
03:55:50 <CakeProphet> but anyways, the difference is that the else clause does not trigger any of the exception handlers.
03:55:59 <CakeProphet> so that you don't catch anything you don't want to catch.
03:56:48 <oerjan> ah so it is run _only_ if no exception is raised
03:56:54 <CakeProphet> correct.
03:57:29 <CakeProphet> I'm actually surprised that very few languages have that.
03:57:32 <oerjan> or wait, what if there is one but no handler matches
03:57:37 <CakeProphet> though I suppose putting everything in the try block is mostly equivalent.
03:57:52 <CakeProphet> I don't believe Python allows try-else
03:58:21 <CakeProphet> the two forms are try-finally and try-except[-else-[finally]]
03:58:53 <Patashu> http://en.wikipedia.org/wiki/Exception_handling_syntax#Python
03:59:06 <CakeProphet> ...yes that's the article whose talk page I just read.
03:59:11 <Patashu> yup
04:01:34 <CakeProphet> you'll note that Perl
04:01:47 <CakeProphet> 's exception handling system is absolutely silly.
04:02:02 <oerjan> also that ' is ridiculously close to return
04:02:15 <Patashu> wow, you have to eval {} for perl exceptions
04:02:27 <CakeProphet> well eval {} is a special case.
04:02:31 <CakeProphet> it's not quite the same as eval "code"
04:02:54 <Patashu> aah
04:03:05 <CakeProphet> eval { } is basically "run this and ignore errors"
04:03:22 <CakeProphet> but everything is parsed at compiletime
04:03:26 <CakeProphet> unlike eval "code"
04:03:51 <CakeProphet> $fail = not eval {
04:03:51 <CakeProphet> lol
04:04:03 <pikhq_> So it's a syntactic oddity, not a semantic one?
04:04:13 <CakeProphet> I suppose.
04:04:26 <CakeProphet> the semantic oddity is weird scoping rules. as the article mentions.
04:04:31 <CakeProphet> you have to dynamically scope $@
04:05:21 <CakeProphet> er... well, you don't always have to.
04:05:51 <CakeProphet> in any case I never use that. :P I've used eval once to import something that was entirely optional
04:06:22 <CakeProphet> in Perl most "error handling" is to ignore the error and return undef
04:06:53 <CakeProphet> close(FILE) || die "Could not close $file"
04:07:25 <Patashu> when would you not be allowed to close a file?
04:07:32 <CakeProphet> also the Haskell example looks a little bit ugly
04:07:43 <CakeProphet> Patashu: if it had already been closed I believe.
04:07:59 <CakeProphet> I don't understand the explicit type signatures...
04:08:08 <Patashu> that's silly though, it's not like a double free, it's not dangerous
04:08:41 <CakeProphet> >>> x = open ("test", "w")
04:08:41 <CakeProphet> >>> x.close()
04:08:42 <CakeProphet> >>> x.close()
04:08:44 <pikhq_> Still an error condition.
04:08:45 <CakeProphet> Python apparently agrees.
04:08:57 <CakeProphet> and Python thinks everything is dangerous and should raise exceptions. :P
04:10:15 <CakeProphet> I have honestly never tried to close a file twice
04:10:19 <CakeProphet> so I have no idea what happens in most languages.
04:10:41 <Patashu> Double_file_closing_syntax
04:10:44 <Patashu> Gogogo
04:11:25 <CakeProphet> dClose = (>>) `on` hClose
04:11:56 <monqy> not quite
04:11:57 <Patashu> Is there a language where you can type file.close().close()
04:12:38 <CakeProphet> :t on
04:12:39 <lambdabot> forall b c a. (b -> b -> c) -> (a -> b) -> a -> a -> c
04:13:04 <CakeProphet> dClose = join . (>>) `on` hClose
04:13:07 <CakeProphet> :P
04:13:45 <monqy> I'm not so sure about that either
04:13:52 <monqy> :t join . (>>) `on` hClose
04:13:54 <lambdabot> Not in scope: `hClose'
04:13:56 <monqy> oops
04:14:25 <monqy> :t join . (>>) `on` (undefined :: String -> Maybe ())
04:14:27 <lambdabot> Occurs check: cannot construct the infinite type: b = b -> a
04:14:27 <lambdabot> Probable cause: `>>' is applied to too few arguments
04:14:27 <lambdabot> In the second argument of `(.)', namely `(>>)'
04:14:36 <monqy> what I suspected
04:14:44 <monqy> also, two issues
04:15:15 <monqy> but I'm guessing you meant
04:15:18 <CakeProphet> :t join . ((>>) `on` (undefined :: String -> Maybe ()))
04:15:19 <lambdabot> Couldn't match expected type `Maybe (Maybe ())'
04:15:19 <lambdabot> against inferred type `String -> Maybe ()'
04:15:19 <lambdabot> Probable cause: `on' is applied to too few arguments
04:15:25 <monqy> you don't want composition
04:15:29 <monqy> you want application
04:15:30 <monqy> ???
04:15:30 <CakeProphet> :t join ((>>) `on` (undefined :: String -> Maybe ()))
04:15:30 <lambdabot> String -> Maybe ()
04:15:35 <CakeProphet> ...right
04:16:35 <CakeProphet> ...well that was productive.
04:16:53 <CakeProphet> @pl test
04:16:53 <lambdabot> test
04:17:17 <CakeProphet> @pl \x -> hClose x >> hClose x
04:17:17 <lambdabot> liftM2 (>>) hClose hClose
04:17:28 <oerjan> <CakeProphet> also the Haskell example looks a little bit ugly <-- the nested catch'es because it is catching two different exception types. there's a function catches which takes a list of handlers but it requires them to be wrapped with Handler.
04:17:43 <oerjan> *is because
04:18:11 <oerjan> and also it's making Int and Double into exception types on the fly.
04:22:39 <oerjan> <CakeProphet> I don't understand the explicit type signatures... <-- oh right haskell uses type hackery to allow _any_ type to be used as an exception if it has an Exception instance. but this requires type signatures for catch to know which exceptions you are intending to catch.
04:23:23 <oerjan> @hoogle Control.Exception.catch
04:23:24 <lambdabot> Control.Exception catch :: Exception e => IO a -> (e -> IO a) -> IO a
04:23:24 <lambdabot> Control.Exception.Base catch :: Exception e => IO a -> (e -> IO a) -> IO a
04:23:24 <lambdabot> Control.Exception catches :: IO a -> [Handler a] -> IO a
04:26:08 <oerjan> the Exception class is quite clever, it essentially allows you to make a new type a subtype of another for exception purposes.
04:26:47 <oerjan> (http://www.haskell.org/ghc/docs/latest/html/libraries/base-4.4.0.0/Control-Exception.html)
04:28:56 <oerjan> <monqy> oops <-- a tip when using :t with variables it doesn't know is to put ? in front of them to make them implicit parameters.
04:29:03 <oerjan> :t ?s + ?t
04:29:05 <lambdabot> forall a. (?s::a, ?t::a, Num a) => a
04:30:01 * oerjan feels monologuing
04:30:36 <oerjan> this is just about the point when there would be a netsplit
04:48:13 <CakeProphet> !perl split net
04:49:21 -!- zzo38 has joined.
04:50:07 <zzo38> They said in live theatre that still picture photography is permitted, but video camera and tape recorder is not allowed. But, is shorthand allowed?
04:51:15 <oerjan> zzo38: it probably is not a big enough problem for them to care about it
04:52:51 <zzo38> If you learn shorthand, are you going to record a live show or a movie by shorthand?
04:53:18 <zzo38> And then, you can transcribe it into the computer when you go home.
04:53:45 -!- CakeProphet has quit (Ping timeout: 252 seconds).
05:27:25 -!- tiffany has quit (Ping timeout: 246 seconds).
05:40:35 -!- DH____ has quit (Read error: Connection reset by peer).
05:40:39 -!- DHeadshot has joined.
05:41:55 -!- CakeProphet has joined.
05:41:56 -!- CakeProphet has quit (Changing host).
05:41:56 -!- CakeProphet has joined.
05:46:28 <Sgeo> http://www.barnesandnoble.com/s/Capital%20in%20Disequilibrium?store=ebook
05:46:28 -!- DHeadshot has quit (Read error: Connection reset by peer).
05:46:35 <Sgeo> Just... the price disparity
05:46:40 <Sgeo> For the same book
05:46:46 -!- DH____ has joined.
05:47:21 <Sgeo> (Warning: mises stuff)
05:48:46 -!- MDude has quit (Ping timeout: 246 seconds).
05:50:03 <CakeProphet> !wacro
05:50:04 <EgoBot> TCCDP
05:50:40 <CakeProphet> Turing-Complete Consensual Double Penetration
05:55:30 -!- Vorpal has joined.
05:59:49 <CakeProphet> > (+) <$> [1..10] <*> [1..10]
05:59:51 <lambdabot> [2,3,4,5,6,7,8,9,10,11,3,4,5,6,7,8,9,10,11,12,4,5,6,7,8,9,10,11,12,13,5,6,7...
06:00:06 <CakeProphet> > (+) <$> [1..3] <*> [1..3]
06:00:07 <lambdabot> [2,3,4,3,4,5,4,5,6]
06:00:46 <CakeProphet> > sort $ (+) <$> [1..3] <*> [1..3]
06:00:48 <lambdabot> [2,3,3,4,4,4,5,5,6]
06:00:56 <CakeProphet> > sort $ (+) <$> [1..5] <*> [1..5]
06:00:58 <lambdabot> [2,3,3,4,4,4,5,5,5,5,6,6,6,6,6,7,7,7,7,8,8,8,9,9,10]
06:01:35 <CakeProphet> oerjan: is there some sort of theoretical mathematics behind this?
06:02:45 <CakeProphet> > map length . group . sort $ (+) <$> [1..5] <*> [1..5]
06:02:47 <lambdabot> [1,2,3,4,5,4,3,2,1]
06:02:55 <oerjan> CakeProphet: it's far too simple to be considered theoretical.
06:03:09 <CakeProphet> I mean is there some kind of property of abstract algebra.
06:03:14 <oerjan> also, anyone who has ever played a dice game with two dice should understand this...
06:03:34 <pikhq_> :t (<*>)
06:03:35 <lambdabot> forall (f :: * -> *) a b. (Applicative f) => f (a -> b) -> f a -> f b
06:03:39 <pikhq_> ^ Hint
06:03:54 <CakeProphet> pikhq_: huh?
06:04:16 <oerjan> CakeProphet: look at a 5*5 square. consider the lengths of the diagonals.
06:04:36 <pikhq_> "That's just what the Applicative [a] instance means, silly."
06:04:57 <oerjan> (chessboard style)
06:05:06 <zzo38> If you wanted to make a Haskell program as a HTML document (although I prefer TeX instead), you could use the <XMP> command in HTML for that purpose, I think.
06:05:22 <CakeProphet> it's not [a] that's applicative here.
06:05:31 <CakeProphet> oerjan: well, right, it makes intuitive sense.
06:05:37 -!- kmc has joined.
06:05:51 <pikhq_> :t (+) <$> [1..10]
06:05:51 <lambdabot> forall a. (Num a, Enum a) => [a -> a]
06:05:53 <CakeProphet> I was hoping maybe I could learn some general abstract nonsense. I guess not. :P
06:05:54 <zzo38> oerjan: Some game with two dice, is, backgammon. But I also played a chess variant using two dice to decide which kind of pieces you are allowed to move on your turn.
06:06:00 <pikhq_> I'm saying "it is".
06:06:13 <oerjan> CakeProphet: now if you were to sum _many_ such lists, each of form [0,1] - then you would have reinvented binomial distribution.
06:06:44 <Lymee> :t <$>
06:06:46 <lambdabot> parse error on input `<$>'
06:06:56 <Lymee> :t (<$>)
06:06:56 <oerjan> > map length . group . sort $ sum <$> replicateM 6 [0,1]
06:06:57 <lambdabot> forall a b (f :: * -> *). (Functor f) => (a -> b) -> f a -> f b
06:06:58 <lambdabot> [1,6,15,20,15,6,1]
06:07:01 <CakeProphet> pikhq_: oh right..
06:07:14 <Lymee> > (+) <$> (+)
06:07:16 <lambdabot> Overlapping instances for GHC.Show.Show (a -> (a -> a) -> a -> a)
06:07:16 <lambdabot> arisin...
06:07:33 <CakeProphet> Lymee: composition
06:08:00 <pikhq_> Lymee: fmap on a->b is just (.)
06:08:07 <pikhq_> (and <$> is a synonym for fmap)
06:08:13 <Lymee> Ah =p
06:08:19 <pikhq_> (and in Caleskell, (.) is a synonym for fmap)
06:09:06 <CakeProphet> > (*) <$> [1..10] <*> [1..10]
06:09:08 <lambdabot> [1,2,3,4,5,6,7,8,9,10,2,4,6,8,10,12,14,16,18,20,3,6,9,12,15,18,21,24,27,30,...
06:09:27 <CakeProphet> oerjan: I was thinking of it as being similar to a cartesian product as that is what you would get if you substituted (+) for (,)
06:09:48 <CakeProphet> > (*) <$> [1..4] <*> [1..4]
06:09:50 <lambdabot> [1,2,3,4,2,4,6,8,3,6,9,12,4,8,12,16]
06:09:55 <oerjan> CakeProphet: oh, you are confused about what <*> means for lists?
06:10:04 <oerjan> i thought you were asking something beyond that.
06:10:05 <CakeProphet> no I know what it means.
06:10:07 <CakeProphet> ...I was.
06:10:12 <Patashu> once upon a time, I did a study on this pattern
06:10:17 <Patashu> it has an interesting self-similarity property
06:10:38 <oerjan> CakeProphet: well yes it is similar to a cartesian product. applying (+) to each element in it.
06:10:42 <Patashu> each extra time you're repeating the operation, it shifts an initial curve to higher derivatives
06:10:46 <CakeProphet> oerjan: something to do with properties of addition that are distinct from say, (,) or other binary operations.
06:10:48 <ais523> isn't that just a multiplication table?
06:10:54 <oerjan> (uncurry (+), technically)
06:12:24 <CakeProphet> oerjan: that give duplicate results in that way when you apply it to a cartesian product.
06:12:28 <oerjan> CakeProphet: oh, well that, (n+1) + (n-1) == n+n so the sum stays constant on each diagonal
06:12:45 <zzo38> Once I did try on paper trying to figure out (x ->) monad and it seem fmap = (.)
06:13:17 <oerjan> and so simply when you do length . group . sort you are simply calculating the length of each diagonal in a complicated way
06:13:34 <CakeProphet> oerjan: are there other operators that have this characteristic?
06:13:56 <CakeProphet> > (-) <$> [1..4] <*> [1..4]
06:13:58 <lambdabot> [0,-1,-2,-3,1,0,-1,-2,2,1,0,-1,3,2,1,0]
06:14:15 <CakeProphet> > sort $ (-) <$> [1..4] <*> [1..4]
06:14:16 <lambdabot> [-3,-2,-2,-1,-1,-1,0,0,0,0,1,1,1,2,2,3]
06:14:27 <CakeProphet> that one does. :P
06:14:34 <oerjan> CakeProphet: f(n+k, n-k) == f(n,n) means f(m,n) == f(m+n,0). so only things that are themselves functions of m+n
06:14:54 <CakeProphet> ah, okay.
06:15:00 <oerjan> CakeProphet: oh right, (-) gives the diagonals the _other_ way
06:15:27 <oerjan> (n+k)-(m+k) == n-m
06:15:29 <CakeProphet> oerjan: also it's a function of m+n
06:15:30 <CakeProphet> right
06:15:43 <oerjan> CakeProphet: um -
06:15:59 <oerjan> *um m-n isn't a function of m+n
06:16:34 <CakeProphet> m - n = m + (-n) ? or does that not count?
06:18:17 <Patashu> @oerjan: http://pastebin.com/D5JHEyeM
06:18:18 <lambdabot> Unknown command, try @list
06:18:23 <Patashu> thanks for helping me understand it
06:18:56 <oerjan> CakeProphet: no, that does not count. you are essentially doing a mirror reflection of the n direction, which as i said makes the diagonals go the other direction.
06:19:11 <CakeProphet> oh okay.
06:19:15 <oerjan> there is no function f such that m-n = f(m+n).
06:19:55 <CakeProphet> > (.&.) <$> [1..4] <*> [1..4]
06:19:57 <lambdabot> Ambiguous type variable `a' in the constraints:
06:19:57 <lambdabot> `Data.Bits.Bits a'
06:19:57 <lambdabot> ...
06:20:15 <CakeProphet> > (.&.) <$> ['a'..'d'] <*> ['a'..'d']
06:20:16 <lambdabot> No instance for (Data.Bits.Bits GHC.Types.Char)
06:20:17 <lambdabot> arising from a use of `D...
06:20:25 <CakeProphet> er.
06:20:35 <CakeProphet> Haskell isn't C?
06:20:48 <CakeProphet> what do?
06:21:12 <oerjan> add a type signature
06:21:21 <oerjan> > (.&.) <$> [1..4] <*> [1..4] :: [Int]
06:21:53 <oerjan> er
06:21:57 <oerjan> > (.&.) <$> [1..4] <*> [1..4] :: [Int]
06:21:58 <lambdabot> [1,0,1,0,0,2,2,0,1,2,3,0,0,0,0,4]
06:23:23 <CakeProphet> > (.|.) <$> [1..4] <*> [1..4]
06:23:25 <lambdabot> Ambiguous type variable `a' in the constraints:
06:23:25 <lambdabot> `Data.Bits.Bits a'
06:23:25 <lambdabot> ...
06:23:27 <oerjan> CakeProphet: lambdabot apparently doesn't use extended defaulting, so if you include a class it doesn't know, it refuses to try.
06:23:27 <CakeProphet> oh rite
06:23:35 <CakeProphet> > (.|.) <$> [1..4] <*> [1..4] :: [Int]
06:23:36 <lambdabot> [1,3,3,5,3,2,3,6,3,3,3,7,5,6,7,4]
06:23:53 <CakeProphet> 3 seems to be the favorite. :P
06:24:25 <oerjan> erm s/know/know from the haskell report, where for some stupid reason the Random class seems to have been excluded in ghc, i think that's a bug/
06:24:42 <fizzie> > xor <$> [1..4] <*> [1..4] :: [Int]
06:24:43 <lambdabot> [0,3,2,5,3,0,1,6,2,1,0,7,5,6,7,0]
06:24:46 <fizzie> (Just for completeness.)
06:24:54 <zzo38> Is there a such thing as (x ->) monad?
06:25:06 <oerjan> zzo38: yes, import Control.Monad.Reader
06:25:37 <oerjan> it's isomorphic to the Reader Monad, so defined there
06:25:58 <oerjan> > join (+) 2 -- lambdabot has it automatically imported
06:25:59 <lambdabot> 4
06:26:07 <zzo38> OK.
06:26:16 <oerjan> zzo38: also lambdabot's @pl command uses it heavily
06:26:39 <zzo38> I found what I figured out the definition of unit/join/fmap that I made up are in fact the correct ones and the same ones they use.
06:27:39 <zzo38> And in fact it does make sense.
06:28:14 <oerjan> zzo38: also yes fmap = (.) for that monad/functor, lambdabot even defines (.) = fmap as one of its "caleskell" modifications
06:28:16 <zzo38> But "join" really should be a member of the "Monad" class. It is stupid that they don't do it that way!!
06:28:39 <zzo38> oerjan: Yes, that is what I came up with.
06:29:51 <oerjan> zzo38: it's probably because Functor is younger than Monad and no one has implemented the needed subclass defaulting extensions to make that combine without being annoying
06:29:54 <Patashu> Hmmm. Since doing this over and over by the central limit theorem gets you a normal distribution, the normal distribution must be infinitely differentiable
06:30:27 <oerjan> Patashu: pretty sure it is
06:31:15 <zzo38> oerjan: Yes; if they did implement the subclass extensions, it would in fact work much better because you can define a monad in terms of unit/join/fmap or return/bind.
06:31:17 <Patashu> Basically, what I wanted to come up with about a year ago were equations for step 1 towards normal distribution, step 2, step 3, step 4... with step infinity being the normal distribution
06:31:24 <Patashu> So all continuous equations
06:32:11 <zzo38> So that you can have the classes required by constraints have implementations mentioned in both class declarations and in instance declarations for a class.
06:34:25 <CakeProphet> normal distributions are hungry.
06:34:28 -!- cheater has joined.
06:34:52 <CakeProphet> they want to assimilate everything into their normalcy.
06:35:48 <oerjan> Patashu: of course that it's infinitely differentiable is rather obvious from the explicit formula for its density function
06:35:57 <pikhq_> CakeProphet: ASSIMILATE!
06:36:08 <oerjan> even analytic
06:36:27 <Patashu> oerjan: yes, but I figured it out without needing to know that \o/
06:36:31 <Patashu> math is beautiful and all that
06:36:51 <oerjan> yeah
06:39:22 <zzo38> One of my idea about Haskell, is to make ASSUME and PROVE pragma, which can be used with proofs using Curry-Howard but can have other uses, too, such as optimization or checking some properties of the program.
06:41:04 -!- clog has quit (Ping timeout: 260 seconds).
06:41:20 <CakeProphet> zzo38: such as monad laws?
06:41:58 <copumpkin> monad laws: https://github.com/copumpkin/categories/blob/master/Categories/Monad.agda
06:42:47 <zzo38> CakeProphet: Not what I meant, but it might be usable for such things possibly; I don't know. What I mean is that ASSUME means assume the property that for all defined inputs, there is a defined output, while the PROVE pragma checks this property if possible.
06:43:26 <zzo38> I don't know whether this allows checking monad laws, though.
06:44:03 <copumpkin> zzo38: checking things automatically is generally either not possible or in very restricted cases, computationally intractable
06:44:19 <copumpkin> automated theorem proving fields tend to be happy when they find "just" doubly exponential algorithms
06:44:22 <zzo38> (The other idea would be that ASSUME is completely ignored when optimization is turned off except that ASSUME is still used in checking with PROVE)
06:44:23 <CakeProphet> I'd imagine there's some kind of way to apply function definitions until you get from one end of the equality to the other, so to speak.
06:44:48 <CakeProphet> by syntax transformations, rather than explicit input checking.
06:44:49 <zzo38> copumpkin: Yes I know it is not always possible to check. But it is sometimes possible.
06:44:59 <copumpkin> how do you determine when it's possible?! :P
06:45:19 <copumpkin> but yeah, I support automated theorem proving for some things
06:45:21 <CakeProphet> copumpkin: you have a program impatiently press a button when he gets tired of waiting for the answer.
06:45:25 <copumpkin> I just don't think haskell is the place for it
06:45:28 <CakeProphet> s/program/programmer/
06:45:33 <zzo38> For example, it uses no "undefined", it uses no loops, and all functions it calls have that property.
06:45:41 <zzo38> And it has no inexhaustive patterns.
06:45:56 <Patashu> if it doesn't have any of those it's not an interesting case
06:46:15 <copumpkin> you can restrict something to only do structural recursion
06:46:21 <copumpkin> except in haskell things are a lot trickier
06:46:23 <zzo38> It it *does* have those things, then you can have something for doing metatheorems.
06:46:27 <copumpkin> because you frequently deal with infinite data
06:46:46 <zzo38> Or just ASSUME it if you have proved it yourself and do not want to put it in the program.
06:46:58 <CakeProphet> so is syntax transformations not a viable option?
06:47:05 <copumpkin> zzo38: assume = unsafeCoerce
06:47:09 <copumpkin> or undefined :)
06:47:27 <copumpkin> according to the curry-howard correspondence
06:47:30 <zzo38> But ASSUME and PROVE only apply to the functions you tell it to do, not everything.
06:47:56 <copumpkin> how are they different from undefined? and I don't get the point of prove
06:48:13 <zzo38> copumpkin: Yes I have thought of that, too. It allows you to construct proofs in that way. But it won't do with what I proposed having ASSUME and PROVE pragmas.
06:49:02 <zzo38> So that {-# PROVE f #-} checks the property of the function f, and {-# ASSUME f #-} tells it to assume that f has that property for optimization purpose and for PROVE pragmas.
06:49:28 <copumpkin> {-# PROVE f 5 == 6 #-} ?
06:49:50 <copumpkin> you might be interested in http://pauillac.inria.fr/~naxu/research/escH-hw.pdf
06:49:59 <CakeProphet> {-# ASSUME funky #-}
06:50:02 <copumpkin> which does as much checking of haskell as I think is possible
06:50:27 <zzo38> copumpkin: No, I mean check the property, if possible, that the output will always be defined for all defined inputs of the function.
06:50:54 <copumpkin> PROVE doesn't sound like the right name for it, then
06:50:56 <copumpkin> TOTAL
06:51:07 <zzo38> (If it checks successfully, it can also do the same as ASSUME for purpose of optimization.)
06:51:25 <copumpkin> I'm not sure what you mean there
06:51:34 <copumpkin> can you give an example of a case where you'd use them?
06:51:45 <copumpkin> what would the properties look like?
06:51:50 <copumpkin> according to C-H, they're just types
06:53:37 <zzo38> But for the proof to be valid, all functions must have defined outputs for all defined inputs. Otherwise you can write undefined or whatever else like that. You also need to ensure no unsafe functions being used, too.
06:53:45 <copumpkin> oh sure
06:53:48 <copumpkin> that's what TOTAL means
06:54:01 -!- augur has joined.
06:54:06 <zzo38> You could have PROVE pragma can have local assumptions in parentheses, perhaps, if you want to make those assumptions locally.
06:54:18 <copumpkin> I think you should learn agda :)
06:54:30 <copumpkin> just to see what proofs and statements in a total language look like
06:54:35 <copumpkin> if nothing else
06:55:02 <CakeProphet> @src concatMap
06:55:03 <lambdabot> concatMap f = foldr ((++) . f) []
06:55:12 <CakeProphet> @src foldr
06:55:13 <lambdabot> foldr f z [] = z
06:55:13 <lambdabot> foldr f z (x:xs) = f x (foldr f z xs)
06:56:32 <zzo38> Call it TOTAL if you do not like the name PROVE, but what name would you give ASSUME then? Would you keep it same or do differently?
06:56:51 <CakeProphet> :t ((++) . f)
06:56:52 <lambdabot> forall a (f :: * -> *). (Monoid a, SimpleReflect.FromExpr (f a), Functor f) => f (a -> a)
06:57:08 <CakeProphet> @unpl ((++) . f)
06:57:09 <lambdabot> (\ c -> (++) (f c))
06:58:01 <copumpkin> zzo38: I still don't understand the point of ASSUME. You mentioned curry-howard, and the language of propositions in curry-howard is that of types. So I don't see why you need a separate construct for ASSUME instead of just a type. Can you explain what kind of propositions you'd put in it?
06:59:26 -!- ais523 has quit (Remote host closed the connection).
06:59:58 <CakeProphet> 2src (++)
07:00:01 <CakeProphet> @src (++)
07:00:02 <lambdabot> [] ++ ys = ys
07:00:02 <lambdabot> (x:xs) ++ ys = x : (xs ++ ys)
07:00:02 <lambdabot> -- OR
07:00:02 <lambdabot> xs ++ ys = foldr (:) ys xs
07:06:17 <CakeProphet> Monad axioms:
07:06:18 <CakeProphet> Kleisli composition forms
07:06:19 <CakeProphet> a category
07:06:26 <CakeProphet> a beautiful haiku from HaskellWiki
07:06:39 <zzo38> CakeProphet: Yes, I like that.
07:08:55 -!- augur has quit (Ping timeout: 260 seconds).
07:09:12 -!- ive has quit (Quit: leaving).
07:14:07 <zzo38> copumpkin: For example, you write a function you know has the properties required but the computer cannot check. Another use is optimization. And one more use is if you write functions but you are trying to check using assumptions; although in this case you might want local assumptions.
07:15:31 <copumpkin> I keep asking, what is the language of these properties? how do you check them, and how do you incorporate knowledge about things? So far you seem to be waving your hands and saying effectively "automated theorem proving" which is a large and complicated area
07:16:40 <copumpkin> is it just something you know to be true, that can be used as a rewrite rule?
07:16:41 <zzo38> You still have to write most of it yourself, but for example, it checks that you have no inexhaustive patterns, no unsafe functions, no undefined stuff, and that all functions it calls also have that property.
07:16:47 <copumpkin> because GHC already has those
07:16:50 <copumpkin> I thought that was PROVE
07:16:52 <oerjan> copumpkin: it is a required exercise in this channel to invent your own perfect system which looks entirely plausible as long as you keep it only in your head
07:16:53 <copumpkin> or TOTAL
07:17:00 <copumpkin> oerjan: I see
07:17:08 <zzo38> If you need more complicated then you could make up a metatheorems system
07:17:28 <copumpkin> anyway, I still think that before embarking on this journey you should learn a tiny bit of what's already out there
07:17:42 <copumpkin> you mentioned C-H but I'm not getting the impression it has anything to do with it, from what you've said so far
07:17:54 <zzo38> ASSUME just causes it to *assume* these things are true without checking, both for optimization and for proof.
07:18:01 <copumpkin> zzo38: RULE
07:18:23 <copumpkin> http://www.haskell.org/ghc/docs/latest/html/users_guide/rewrite-rules.html
07:18:30 <zzo38> I know about rewrite rules pragma.
07:18:37 <copumpkin> I'm asking, how is it different?
07:20:23 <zzo38> How is it the same?
07:20:46 <copumpkin> you haven't given me any examples of what an actual ASSUME pragma would even look like, so I don't know
07:21:25 <copumpkin> you're hand-waving and saying optimization :P I'm saying it sounds like you can provide equations that your definition satisfies and ask the compiler to optimize based on them, using rules pragmas
07:21:28 <zzo38> It would look like: {-# ASSUME f #-} just like that, to assume it for function f.
07:21:34 <copumpkin> assume WHAT?
07:21:43 <copumpkin> that it terminates?
07:22:06 <zzo38> copumpkin: Yes, that it terminates, has no undefined or unsafe, has no inexhaustive patterns.
07:22:30 <copumpkin> does fix (1:) terminate?
07:24:04 <zzo38> That is difficult. Is fix (1:) a valid proof for Curry-Howard?
07:24:19 <copumpkin> it's a proof of [Integer] :)
07:24:29 <Patashu> how could it not terminate?
07:24:40 <copumpkin> also, how do you deal with the paradoxes in Haskell that don't arise from recursion?
07:24:46 <copumpkin> Patashu: it produces an infinite list
07:25:05 <copumpkin> fix is basically the fundamental building block for non-termination
07:25:21 <zzo38> copumpkin: Paradoxes that arise from anything have those kind of things disallowed in a PROVE and assumed that they don't have them in an ASSUME.
07:25:29 <zzo38> Probably "fix" would be disallowed in a PROVE.
07:25:36 <copumpkin> sure
07:25:37 <zzo38> But I don't know a lot about it for sure.
07:25:41 <copumpkin> but x = 1:x
07:25:45 <copumpkin> which is the same as fix (1:)
07:25:59 <copumpkin> that is allowed in agda, for example, but only if your list is codata
07:26:05 <copumpkin> it's productive corecursion
07:26:08 -!- nooga has joined.
07:26:11 <zzo38> copumpkin: That is also recursion because it refers to itself, which I think would also be disallowed
07:26:32 <copumpkin> almost all interesting programs will have some form of recursion in them
07:26:43 <copumpkin> theorem provers force you to write structural recursion usually
07:26:53 <copumpkin> because it's clear that they terminate
07:26:57 <zzo38> That is, "fix" is disallowed unless you specifically allow it with {-# ASSUME fix #-} or with a local assumption.
07:27:55 <zzo38> copumpkin: Yes, you could have some that are clear to terminate; you might also be able to have a metatheorems system to write your own proofs of termination and nonparadoxes
07:28:10 <copumpkin> why even bother doing this in haskell though?
07:28:21 <copumpkin> the language of those proofs is going to be a completely different language
07:28:27 <copumpkin> in agda, you get it as your basic language
07:28:34 <copumpkin> in haskell, also
07:28:38 <zzo38> (You cannot do this more than one level though; I think Godel's Theorem or whatever prevents it)
07:28:42 <copumpkin> what is the benefit of guaranteed terminating functions?
07:29:26 <CakeProphet> copumpkin: what makes it clear? Are they explicitly typed so that it can be determined that they terminate at compiletime?
07:29:29 <zzo38> Of course not all functions have to be; your program can contain such functions just fine. But to check them with these kind of pragmas it would not work if you have things the computer won't check
07:29:54 <copumpkin> CakeProphet: yes, but what makes it clear is that there's a (t least one) data constructor being consumed for every recursive call
07:29:56 <zzo38> That is, you only use the pragmas on some functions, not all of them.
07:30:12 <copumpkin> CakeProphet: for example f (x : xs) = blah (f xs) is fine
07:30:15 <CakeProphet> copumpkin: ah so no laziness here.
07:30:20 <copumpkin> f (x : xs) = blah (f (x : xs)) is not
07:30:25 <copumpkin> CakeProphet: no, there can be laziness
07:30:37 <copumpkin> whether it's lazy or not is an implementation detail
07:30:51 <copumpkin> zzo38: I mean, what kind of benefit does annotating functions this way give you?
07:31:38 <CakeProphet> copumpkin: ...but that wouldn't terminate for a lazy infinite list.
07:32:02 <copumpkin> CakeProphet: yes, there's an explicit separation between data (finite things) and codata (potentially infinite things)
07:32:09 <zzo38> copumpkin: In a proof program, to make the compiler check your proof. In other programs, to use with local assumptions to check certain properties locally.
07:32:15 <copumpkin> CakeProphet: and the safeness conditions are different for them
07:32:20 <CakeProphet> ah
07:32:28 <copumpkin> zzo38: but your language for writing proofs is horrible, in haskell
07:32:42 <copumpkin> I've written proofs about basic natural arithmetic in haskell and it's really painful
07:32:58 <copumpkin> proving anything remotely useful is completely out of the question
07:33:04 <copumpkin> especially since we don't have dependent types
07:33:05 <zzo38> copumpkin: Really? It seem, if you have the (x ->) monad then you can use do-notation.
07:33:21 <copumpkin> I don't follow :)
07:34:27 <CakeProphet> I do believe you could prove the monad laws through a combination of step-by-step syntactic transformations and pattern matching.
07:34:35 <CakeProphet> for an individual instance
07:34:52 <zzo38> And it automatically gives you the fantasy rule if you do that too, I think.
07:35:19 <CakeProphet> return a >>= f = concatMap f [a] = foldr ((++).f) [] [a] = ...
07:35:42 <copumpkin> zzo38: for example
07:35:44 <oerjan> do-notation in the (x ->) monad as a replacement for the decision theorem, check.
07:35:45 <copumpkin> say you just wrote addition
07:35:52 <copumpkin> oerjan??
07:36:15 <copumpkin> zzo38: so you just defined (+). Now you want to prove that it's commutative. But first you must state that it's commutative. How do you do that?
07:36:45 <oerjan> copumpkin: the (x ->) monad could sort of work as a way to hide assumptions in your proof terms...
07:36:55 <oerjan> i think.
07:36:59 <copumpkin> except your proof terms are all trivial
07:37:05 <zzo38> oerjan: What is decision theorem? Sorry I don't know what that is?
07:37:51 <oerjan> zzo38: it's a metatheorem of logic with says that if you prove B from assumptions A1,A2,... then you can prove A1 -> A2 -> ... -> B
07:38:13 <copumpkin> anyway
07:38:19 <zzo38> copumpkin: I don't know, but I do know how to write it in TNT. But how can you make TNT with Curry-Howard? I don't know that either. That is why I want to learn.
07:38:21 <copumpkin> you'd state your commutative theorem
07:38:22 <oerjan> and i think you could sort of extract one of the A's into an (x ->) monad
07:38:31 <copumpkin> forall x y. x + y == y + x
07:38:45 <copumpkin> that would be your proposition to prove
07:39:14 <CakeProphet> zzo38: I believe you need toluene, sulfuric acid, and nitric acid
07:39:20 <copumpkin> that kind of type can only be awkwardly translated to haskell
07:39:23 <copumpkin> because it's dependent
07:39:29 <CakeProphet> zzo38: I'm not sure if Curry-Howard will help you with acquiring those things though.
07:39:43 <copumpkin> and the only place you can depend on parameters in haskell is for type-level parameters
07:39:50 <copumpkin> which means your addition needs to be over type-level naturals
07:39:51 <zzo38> TNT here is short for Typographical Number Theory, though.
07:39:58 <copumpkin> and that needs to be type-level equality
07:40:02 <zzo38> copumpkin: I have done type-level natural numbers.
07:40:21 <copumpkin> zzo38: that's fine. Do you know what a proof of that would look like?
07:40:37 <copumpkin> you'd proceed by induction over one or both of the arguments
07:40:42 <copumpkin> except you can't do that in haskell
07:40:46 <copumpkin> because they're types
07:40:54 <copumpkin> so you need to hack it in with a typeclass
07:41:05 <zzo38> I do know what a proof of it looks like in TNT.
07:41:12 <copumpkin> forall x y. (Nat x, Nat y) => x :+ y :== y :+ x
07:41:21 <copumpkin> that's what the actual statement would look like
07:41:36 <copumpkin> proofs of simple things like commutativity in haskell can be done
07:41:42 <copumpkin> but they're proofs over things people don't typically work with
07:41:47 <copumpkin> type-level naturals
07:41:48 <zzo38> And I have tried using classes too. But, it seems some things it will ignore anyways
07:42:02 <copumpkin> when I write a program I'm not writing a list of type-level numbers
07:42:07 <copumpkin> I'm writing a value-level list
07:42:13 <copumpkin> and haskell gives me no way to say anything about that list
07:42:22 <copumpkin> (except very slightly with GADTs)
07:42:53 <copumpkin> the reason anyone who cares about writing proofs uses dependent types is that they let you state and prove most things you care about in your program
07:43:00 <copumpkin> since you _can_ actually make statements about values
07:43:06 <copumpkin> that's why I keep pushing you towards agda :P
07:43:17 <copumpkin> that also checks for you that all your functions terminate
07:43:21 <copumpkin> and warns you if it can't see that they do
07:43:30 <copumpkin> so you can still write functions that don't obviously terminate
07:43:45 <copumpkin> but by default it checks
07:44:29 <CakeProphet> does a brainfuck interpreter obviously terminate? :P
07:44:33 <copumpkin> no
07:44:34 <CakeProphet> that would be pretty amazing if it did.
07:44:54 <copumpkin> there's no (obvious) succinct way to state a checkable termination condition
07:45:01 <CakeProphet> copumpkin: so wait, adga /can't/ solve the halting problem?
07:45:04 <CakeProphet> why do I want it then?
07:45:10 <copumpkin> ?
07:45:14 <monqy> ?
07:45:17 <CakeProphet> :?
07:45:19 <zzo38> I did make type-level natural numbers using type families.
07:45:19 <copumpkin> terminating agda isn't turing-complete
07:45:29 <copumpkin> it's conservative
07:45:45 <copumpkin> it might warn you that a terminating function doesn't terminate because its simple condition isn't accurate
07:45:56 <copumpkin> but it won't ever decide that a non-terminating function does terminate
07:46:32 <copumpkin> but because of that, you can trust proofs in it
07:46:48 <copumpkin> it also makes you realize how overrated turing-completeness is
07:47:40 <zzo38> That is why you don't want Agda. But you might want to use some of their features in Haskell, but not always. However there are things neither of these have but then there can be other extensions, including type families and other stuff too.
07:47:56 <copumpkin> what is why you don't want it?
07:48:18 <copumpkin> I actually think agda's default is the better one
07:48:23 <zzo38> There could be some way converting between type-level programming and value-level programming, probably with some restrictions.
07:48:45 <zzo38> copumpkin: Are you sure? I don't agree but that is just my opinion.
07:49:03 -!- Vorpal has quit (Quit: ZNC - http://znc.sourceforge.net).
07:49:06 <copumpkin> why do you disagree?
07:49:16 <copumpkin> I'm not even sure what you dislike about it? :P
07:49:30 <zzo38> In most cases you do not want such restrictions.
07:49:37 <copumpkin> as I said
07:49:44 <copumpkin> all it does is warn you if you don't meet them
07:49:51 <copumpkin> it doesn't stop you from writing such functions
07:50:31 <copumpkin> and regardless of whether you think it's practical
07:50:37 <copumpkin> if you want to talk to people about proofs
07:50:46 <copumpkin> they're not going to take you seriously if you don't understand how proofs work :)
07:50:50 <copumpkin> and what is needed to construct them
07:50:58 <zzo38> But if you have a PROVE pragma like I described, it would check other functions it calls, too, not necessarily all cases of those other functions. (And it would be error rather than warning, allowing you to speed up the compiler, as well as a few other things.)
07:51:19 <copumpkin> yes, but _what_ can you prove in haskell?
07:52:02 <zzo38> I do have a proof in a book on the table in front of me, of commutative addition, in TNT.
07:52:06 -!- oerjan has quit (Quit: Later).
07:52:10 <copumpkin> its type system isn't expressive enough to even state, let alone prove anything that might be useful to an optimizer
07:52:16 <copumpkin> TNT is not haskell
07:52:32 <zzo38> One thing I want to learn is to be able to make TNT with Curry-Howard if there is some way.
07:52:53 <copumpkin> I think you're missing a key part of this
07:53:12 <copumpkin> you can't write forall or exists in haskell
07:53:24 <copumpkin> its type system doesn't allow it
07:53:39 <copumpkin> that's in fact the main distinguishing characteristic between its type system and agda's
07:53:51 <zzo38> O, I thought you could make up some things with it somehow
07:54:14 <copumpkin> you can, but by hacking at the type level, and doing so is extremely painful and indirect
07:54:27 <copumpkin> but most things people care about aren't at the type level
07:54:38 <copumpkin> if I want to say a list is sorted
07:54:44 <copumpkin> or addition is commutative
07:54:52 <copumpkin> or anything more interesting than that
07:54:54 <copumpkin> I need to say forall
07:55:06 <copumpkin> forall numbers x and y, x + y == y + x
07:56:02 <copumpkin> that forall gives you basically boundless power to state theorems
07:56:16 <copumpkin> and makes the type system simpler in many ways
07:56:23 <copumpkin> and more complicated in many others
07:56:35 <copumpkin> anyway, gotta sleep now
07:56:47 <copumpkin> but if you want something like haskell but with more type-level goodness
07:56:59 <copumpkin> check out http://lambda-the-ultimate.org/node/4088
07:57:31 <zzo38> OK I will look
08:05:17 <zzo38> GHC has GADTs, type families, and other stuff, too. I was making preprocessor for Haskell, which does things including anonymous macros and other features, maybe I can put some of these kind of type-level stuff too. However, note this program does not accept layout mode and I do not plan to add it (although you can add it in yourself if you want to, or do whatever else you want to it)
08:06:58 <zzo38> Such as, if you write 3 in a type context it will replace it with (Succ (Succ (Succ Zero)))
08:15:42 -!- zzo38 has quit (Remote host closed the connection).
08:50:04 <CakeProphet> Python topic line says "NO LOL"
08:50:09 <CakeProphet> I wonder if they enforce that.
08:50:13 <CakeProphet> s/Python/#python/
08:51:18 <Jafet> Yes.
08:51:38 <Jafet> It raises the channel mean IQ, if only by a little.
08:52:09 <fizzie> "NO LOL | NO PROJECT EULER | ..." it said when I /list'd few weeks ago to pick some new channels.
08:52:29 -!- clog has joined.
08:52:34 <CakeProphet> Jafet: lol
08:52:44 <fizzie> Strange things to prohibit, lol.
08:53:32 <Jafet> Not really; python is full of lol.
08:53:37 <CakeProphet> More proof that pythonistas are actually jerks, lol.
08:56:19 <cheater> yes they do
08:56:33 <cheater> if you go in there and say LOL you get banned after 1 warning
08:56:43 <fizzie> http://pound-python.org/ "Our tireless moderators ensure that disruptive conversations and people are removed from the channel quickly and with a minimum of fuss. -- Most notably, we don't tolerate use of "LOL" or other forms of 'chatspeak'."
08:56:50 <Jafet> Ah, cheater would be the one to know the details.
08:57:10 <cheater> i've been around
08:57:20 <CakeProphet> wow that's hilarious
08:57:23 <cheater> yes
08:57:24 <CakeProphet> I might actually have to lol.
08:57:24 <cheater> it is
08:57:30 <CakeProphet> perhaps I will rofl
08:57:36 <cheater> and they are like very fucking adamant about it
08:57:42 <cheater> it's like LOL killed someone's parent
08:57:43 <cheater> s
08:57:44 <Patashu> oh god. not even lol?
08:57:45 * Patashu cries
08:57:47 <cheater> yes
08:58:06 <Patashu> goon project: let's all go in and say 'lol' simultaneously
08:58:12 <monqy> do they permit hehe or haha or snickers or chuckles
08:58:52 <fizzie> No forms of hilarity at all. Python is serious business.
08:59:38 <CakeProphet> I am in Python right
09:00:14 <CakeProphet> but I'd rather not get band as I have a vhost which would make it permanent on this nick.
09:00:14 <monqy> I don't think I;ve ever heard anything good about #python
09:00:27 <CakeProphet> monqy: probably because I've been bashing it nonstop for the past few days.
09:00:35 <CakeProphet> and probably because you're in #esoteric a lot
09:00:45 <fizzie> But the website says you get personalized service and everything.
09:01:05 <monqy> of course they'd praise themselves
09:01:12 <monqy> it doesn't help
09:05:19 <CakeProphet> help what help
09:05:40 <monqy> help
09:05:46 <monqy> .
09:06:42 <CakeProphet> bash: .: filename argument required
09:06:43 <CakeProphet> .: usage: . filename [arguments]
09:07:29 <monqy> .
09:07:54 <CakeProphet> irp: fatal give a shit exception
09:08:12 <monqy> oops
09:17:04 <nooga> https://gist.github.com/1205816 looks bad
09:29:41 -!- derrik has joined.
09:31:17 -!- derdon has joined.
09:40:55 -!- derrik has quit (Ping timeout: 252 seconds).
10:37:37 -!- monqy has quit (Quit: hello).
10:39:50 -!- Phantom_Hoover has joined.
11:02:51 -!- derdon has quit (Remote host closed the connection).
11:25:11 -!- sllide has joined.
11:51:59 -!- derrik has joined.
11:52:59 -!- derrik has quit (Client Quit).
11:53:10 <CakeProphet> which is what I'm currently doing.
11:53:55 -!- derrik has joined.
11:59:32 -!- derrik has quit (Ping timeout: 252 seconds).
12:01:39 -!- pikhq has joined.
12:01:59 -!- pikhq_ has quit (Ping timeout: 260 seconds).
12:16:45 <nooga> which is
12:41:01 -!- monqy has joined.
12:41:55 <nooga> aaaaaaaaaaaaaaa
12:42:39 <monqy> hi
12:53:31 -!- Patashu has quit (Quit: MSN: Patashu@hotmail.com , Gmail: Patashu0@gmail.com , AIM: Patashu0 , YIM: patashu2 .).
13:33:28 <copumpkin> wow :)
13:38:02 <monqy> hhehe that paste thing
13:42:31 -!- DH____ has quit (Remote host closed the connection).
13:43:04 <nooga> it's not hehehe, it's AAAAAAAAAAAA
13:44:13 <nooga> the worst thing is T before the Point and xx->method(xx,...
13:44:21 <nooga> otherwise it would be quite nice
13:44:59 <monqy> it almost looks like something I would do were I trying to do awful things in C to make boring things more amusing maybe
13:45:21 <monqy> almost
13:45:41 <monqy> by looks I mean "is in the style of"
13:45:48 <nooga> uhum
13:46:04 <monqy> as I would most likely go about it a bit differently
13:46:55 <nooga> then check this out: http://stackoverflow.com/questions/351733/can-you-write-object-oriented-code-in-c
13:46:58 <nooga> :D
13:48:08 <nooga> i'm coding for bare metal now and i would like to use some basic OO style
13:48:19 <monqy> naturally I'm more interested in functional c
13:48:19 <nooga> porting Objective-C runtime is not worth it
13:48:25 <nooga> and I hate C++
13:48:34 <nooga> monqy: oh, that too
13:48:41 <nooga> clang has blocks!
13:48:49 <nooga> but they need a runtime ;/
13:56:37 <fizzie> That sort of thing also hangs one function pointer/method to each object of a "class", bloating them by quite a lot, since they're going to be identical for all objects. The syntax with a separate vtbl is even uglier, though, something like "xx->vtbl->method(xx, ...)".
13:56:56 <nooga> yeah
13:57:01 <nooga> there should be vtable
13:57:17 <nooga> but then again call syntax gets uglier
13:58:22 <fizzie> You can do some sort of an equally ugly macro to rewrite CALL(obj, method, arg1, arg2, ...) into obj->vtbl->method(obj, arg1, arg2, ...). (Or just write C.)
13:58:48 <nooga> that's right
14:03:52 <nooga> another option is to take C's yacc definition and code every goddamn semantic rule + add your own few
14:04:02 <nooga> then use this as a preprocessor
14:16:42 -!- copumpkin has quit (Quit: Computer has gone to sleep.).
14:17:31 <nooga> or develop new language that compiles to C
14:26:24 -!- azaq23 has joined.
14:41:09 <nooga> sounds like fun
14:42:12 -!- copumpkin has joined.
14:42:17 <Gregor> You don't reaaaaally need to code every semantic rule, just the AST, and make them all compile down into themselves by default.
14:43:26 <Gregor> You could use Fythe :P
14:46:05 <nooga> i target bare metal since i'm writing an experimental kernel
14:47:35 <Gregor> I just meant you could use Fythe as the engine for a C+whatever->C translator
14:50:45 <nooga> I've just read the documentation
14:50:54 <nooga> but i think it's not enough ;f
14:51:03 <monqy> what documentation
14:51:51 <Gregor> Yeah, what documentation? :P
14:52:20 <nooga> the pdf file You provided on the plof.org :D
14:52:49 <Gregor> *fythe.org
14:53:05 <Gregor> Yeah, I'm not so great with documentation X-P
14:53:39 <Gregor> Anyway, one of these days I'm going to write GGGGCCCC (GGGGC-C-to-C-Compiler) in Fythe ... but until then, take my "recommendations" as mostly the blathering of a madman.
14:54:52 <nooga> GGGGC ?
14:55:17 <Gregor> Gregor's General-purpose Generational Garbage Collector
14:56:07 <Gregor> It's a precise GC for C (and because it's precise, it requires the user to do a bunch of boilerplate to make sure things never overlap improperly)
14:56:38 <Gregor> Erm, s/overlap improperly/aren't visible to the GC/, or something like that :P
14:56:42 <Gregor> Weird attempt at phrasing :P
14:57:02 <Gregor> Point is, it requires boilerplate, so I was thinking of making a C->C compiler that just injects the boilerplate for you.
15:06:31 <nooga> oh
15:06:52 <nooga> sounds really nice
15:08:02 <nooga> but I still got this : https://gist.github.com/1206470 :D
15:09:01 <monqy> yikes
15:09:05 <nooga> it parses C. The thing is i don't know yacc tricks enough to make it output the input without writing much
15:11:21 <olsner> Gregor: haha, GGGGCCCC is a very good name
15:12:07 -!- MDude has joined.
15:18:29 -!- FireFly has joined.
15:40:36 -!- tiffany has joined.
15:50:27 <Gregor> olsner: I'm pretty proud of it :P
16:27:03 -!- elliott has joined.
16:27:11 <Phantom_Hoover> http://powdertoy.co.uk/
16:27:17 <Phantom_Hoover> help where is my life going
16:27:26 <Phantom_Hoover> i'm sure there are things that aren't this
16:27:31 <Phantom_Hoover> but i don't know what they are
16:27:43 <elliott> hi
16:27:48 <elliott> oh falling sand
16:27:52 <Phantom_Hoover> yes
16:27:55 <Phantom_Hoover> except
16:27:58 <Phantom_Hoover> with nukes
16:30:48 <Phantom_Hoover> And CAs which can be used for heat.
16:37:03 <Gregor> nooga: Incidentally, if you read the in-progress Fythe spec, can you tell me where it was most ridiculously confusing? :)
16:40:16 <elliott> 21:30:15: <Taneb> I leave you with http://esoteric.voxelperfect.net/wiki/User:Taneb/XSLT_S_and_K
16:40:23 <elliott> <s><k/><k/></s> ain't right
16:40:40 <elliott> <<s><k/></s>><k/></<s><k/></s>>
16:40:43 <elliott> MUCH BETTER
16:41:31 <elliott> `addquote <ais523> this strikes me as probably better than a singularity, because you can't trust a random AI, but you can probably trust olsner
16:41:36 <HackEgo> 642) <ais523> this strikes me as probably better than a singularity, because you can't trust a random AI, but you can probably trust olsner
16:41:44 * elliott decides to briefly worry that ais was serious.
16:46:16 <elliott> 22:29:49: <CakeProphet> you have typeclasses, and instances of such. if the type matches the instance declaration then it has an implementation of the methods.
16:46:16 <elliott> 22:30:03: <CakeProphet> there isn't any sort of re-routing or conditional logic involved.
16:46:19 <elliott> CakeProphet: You are wrong.
16:52:50 <elliott> 00:17:56: <Gregor> In Catholicism, the halting problem is believed to be unsolvable for infants who die before baptism.
16:52:50 <elliott> 00:19:00: <ais523> well, it's unsolvable for most other TC systems...
16:52:54 <elliott> ais considers humans tc?
16:53:08 <Gregor> elliott: Ridiculous, I no.
16:53:13 <Gregor> >_<
16:53:14 <elliott> I no too.
16:53:15 <Gregor> elliott: Ridiculous, I know.
16:53:17 <elliott> [asterisk]two
16:53:31 <Gregor> Since when am I so terrible at English :'(
16:54:00 <elliott> Saints wind ham eye sow terrible add English?
16:54:06 <elliott> Couldn't think of anything for terrible or English :(
16:54:28 <Deewiant> tearable
16:54:43 <elliott> Thanks
16:54:46 <Gregor> Tearable at ink-lash
16:54:48 <elliott> X-D
16:54:52 <elliott> That's not even a word.
16:55:01 <elliott> Saints wind ham eye sow tearable add ink lash?
16:55:03 <elliott> BEAUTIFUL
16:55:06 <Gregor> I will give you two lashings every time you claim that "lash" isn't a word.
16:55:16 <elliott> Lash is a word, ink is a word, I'm sceptical of ink-lash
16:55:33 <Gregor> It's hyphenated, it's referring to a lashing with ink :P
16:55:49 <Gregor> If I take a whip and dip it in ink, then lash you with it, that's an ink-lash.
16:55:59 <elliott> The worst kind of lash.
16:55:59 <pikhq> elliott: Well, the combination of humans and data storage definitely is. Without data storage, the system is comically restricted.
16:56:04 <pikhq> I mean, jeeze, human memory *sucks*.
16:56:12 <elliott> pikhq: you have infinite data storage? ok
16:56:19 <pikhq> elliott: Of course.
16:56:35 <Gregor> pikhq: We were referring to individual humans, not groups.
16:56:42 <Gregor> Individual humans are plainly not TC.
16:56:43 <elliott> 03:10:38: <Jafet> By "unthrow", I presume you mean "go back to where the exception occurred and continue".
16:56:51 <elliott> you guys realise languages already have this?
16:57:04 <Gregor> For instance, C+POSIX :P
16:57:07 <elliott> IIRC Ruby lets you "continue" from an exception handling clause, but I may be wrong
16:57:10 <pikhq> Gregor: Sure they are. They can simulate certain simple UTMs just fine if you give them an infinite paper spool and an infinite pen.
16:57:14 <elliott> Common Lisp obviously has it
16:57:24 <Gregor> pikhq: halts (x:human) -> true
16:57:25 <pikhq> elliott: What, don't you shop at the Frictionless Pully Store, fine purveyor of physical impossibilities?
16:57:33 <pikhq> Gregor: Oh, fine, *and immortality*.
16:57:39 <Gregor> pikhq: So, not human :P
16:58:14 <pikhq> Gregor: I didn't realise "mortal" was part of the definition of "human".
16:58:33 <elliott> An immortal human with infinite storage capability
16:58:41 <elliott> Find me a transhumanist who'd say "oh, well that's just a bloody HUMAN".
16:59:26 <pikhq> The infinite storage capability here is clearly external.
16:59:38 <pikhq> I'm specifying an infinite paper spool and an infinite pen.
17:00:21 <elliott> <pikhq> I have no idea what the Chinese Room argument is.
17:00:29 <elliott> <pikhq> And/or, am stupid enough to buy it.
17:01:02 <pikhq> Okay, fine, I'm just being completely and utterly silly.
17:01:24 <pikhq> And no, I don't buy the Chinese Room argument. It's a bunch of stupid wanking.
17:03:10 <nooga> Gregor: first of all I would add really simple, but complete, example of small language
17:04:13 <elliott> Specifications should not include examples.
17:04:43 <Gregor> Well, the Fythe spec is wildly incomplete anyway, I was more concerned about whether what little is already there makes any sense :P
17:05:05 <Gregor> nooga: That being said, BOOM: https://bitbucket.org/GregorR/fythe/src/tip/fythecore/fml.fythe
17:05:46 <Gregor> (Down to line 283 is the language, beyond that is a small standard library written in it)
17:06:12 <nooga> great
17:06:15 <pikhq> elliott: RFCs often do.
17:06:24 <elliott> RFCs are just requests for comment :P
17:06:32 <pikhq> Admittedly, RFCs aren't so much "formal specs" as they are "brief descriptions".
17:06:50 <Gregor> The Fythe spec is certainly not a formal spec.
17:11:50 <elliott> It certainly should be.
17:12:02 <Gregor> Hahaha no.
17:12:21 <Gregor> Eventually, it would be nice to have a formal spec.
17:12:47 <Gregor> Especially seeing as that a formal spec for Fythe plus an implementation of any language in Fythe = a formal spec for that language.
17:12:52 <Gregor> In the interim, hahaha no :P
17:13:41 <nooga> well
17:13:42 <nooga> uh
17:14:04 <elliott> Gregor: Formal specs are easy :P
17:14:52 <Gregor> nooga: Please note that for all my evangelism of Fythe (because it's awesome), at this point it's basically at the proof-of-concept phase :P
17:15:06 <nooga> i noticed ;)
17:19:41 <elliott> 04:07:32: <CakeProphet> also the Haskell example looks a little bit ugly
17:19:45 <elliott> CakeProphet: that's because it's a stupid example
17:20:20 <elliott> throw (42 :: Int)
17:20:20 <elliott> `catches` [ \(e::Double) -> print (0,e)
17:20:20 <elliott> , \(e::Int) -> print (1,e) ]
17:20:25 <elliott> is a nicer way of formatting the same thing, though
17:21:19 <elliott> 04:17:28: <oerjan> <CakeProphet> also the Haskell example looks a little bit ugly <-- the nested catch'es because it is catching two different exception types. there's a function catches which takes a list of handlers but it requires them to be wrapped with Handler.
17:21:21 <elliott> oh um right
17:21:25 <elliott> need Handler <dollar sign> before those
17:21:26 <elliott> but w/e
17:22:58 <elliott> 05:47:21: <Sgeo> (Warning: mises stuff)
17:23:06 <elliott> Sgeo: too late i had a heart attack n/ died bcuz of ur ignorance fucker
17:23:11 <monqy> ;_;
17:23:21 <monqy> rip
17:23:30 <elliott> 06:00:56: <CakeProphet> > sort $ (+) <$> [1..5] <*> [1..5]
17:23:30 <elliott> 06:00:58: <lambdabot> [2,3,3,4,4,4,5,5,5,5,6,6,6,6,6,7,7,7,7,8,8,8,9,9,10]
17:23:30 <elliott> 06:01:35: <CakeProphet> oerjan: is there some sort of theoretical mathematics behind this?
17:23:31 <elliott> i...
17:23:52 <Phantom_Hoover> XD
17:23:56 <Phantom_Hoover> :t <*>
17:23:57 <lambdabot> parse error on input `<*>'
17:24:03 <Phantom_Hoover> :t (<*>)
17:24:04 <lambdabot> forall (f :: * -> *) a b. (Applicative f) => f (a -> b) -> f a -> f b
17:24:06 <elliott> rip Phantom_Hoover killed by ()
17:26:51 <elliott> 06:24:25: <oerjan> erm s/know/know from the haskell report, where for some stupid reason the Random class seems to have been excluded in ghc, i think that's a bug/
17:26:52 <elliott> huh
17:27:09 <elliott> 06:24:25: <oerjan> erm s/know/know from the haskell report, where for some stupid reason the Random class seems to have been excluded in ghc, i think that's a bug/
17:27:11 <elliott> erm
17:27:12 <elliott> 06:24:54: <zzo38> Is there a such thing as (x ->) monad?
17:27:12 <elliott> 06:25:06: <oerjan> zzo38: yes, import Control.Monad.Reader
17:27:12 <elliott> 06:25:37: <oerjan> it's isomorphic to the Reader Monad, so defined there
17:27:14 <elliott> or Control.Monad.Instances
17:28:50 -!- brisingr has joined.
17:34:03 <elliott> 07:45:19: <copumpkin> terminating agda isn't turing-complete
17:34:03 <elliott> 07:45:29: <copumpkin> it's conservative
17:34:04 <elliott> 07:45:45: <copumpkin> it might warn you that a terminating function doesn't terminate because its simple condition isn't accurate
17:34:04 <elliott> 07:45:56: <copumpkin> but it won't ever decide that a non-terminating function does terminate
17:34:04 <elliott> 07:46:32: <copumpkin> but because of that, you can trust proofs in it
17:34:11 <elliott> copumpkin: So they fixed that bug where _|_ is provable?
17:35:53 -!- sllide has quit (Ping timeout: 276 seconds).
17:38:41 <elliott> 08:50:04: <CakeProphet> Python topic line says "NO LOL"
17:38:41 <elliott> 08:50:09: <CakeProphet> I wonder if they enforce that.
17:38:41 <elliott> 08:50:13: <CakeProphet> s/Python/#python/
17:38:41 <elliott> 08:51:18: <Jafet> Yes.
17:38:41 <elliott> 08:51:38: <Jafet> It raises the channel mean IQ, if only by a little.
17:38:48 <elliott> Jafet: Nah, it just raises the channel mean pedantry level.
17:38:55 -!- brisingr has quit (Ping timeout: 260 seconds).
17:40:48 -!- brisingr has joined.
17:42:50 <copumpkin> elliott?
17:43:20 -!- brisingr has changed nick to eliottt.
17:43:26 <elliott> <elliott> copumpkin: So they fixed that bug where _|_ is provable?
17:43:26 <copumpkin> oh, you're brisingr?
17:43:27 <eliottt> copumpkin: yes?
17:43:30 <elliott> No, I'm not :P
17:43:33 <copumpkin> elliott: just now
17:43:38 -!- eliottt has changed nick to brising.
17:43:40 <elliott> copumpkin: Convenient
17:43:41 -!- brising has changed nick to brisingr.
17:43:53 <brisingr> :)
17:44:38 <elliott> 15:08:02: <nooga> but I still got this : https://gist.github.com/1206470 :D
17:44:44 <elliott> nooga: I don't believe that works
17:44:49 <elliott> There's the typedef issue
17:46:14 <pikhq> Yeah, it doesn't seem to be handling the disambiguation.
17:56:05 -!- zzo38 has joined.
18:15:29 -!- Taneb has joined.
18:15:40 <Taneb> Hello!
18:19:21 <elliott> hi
18:19:34 <Taneb> I was thinkinh
18:19:44 <Taneb> With a g and no h on the end
18:20:04 <Taneb> Functional languages should ideally have no side effects, right?
18:20:23 <zzo38> Yes, I would think so
18:20:27 <Taneb> And an imperative language is little but side effects, right?
18:21:11 <zzo38> An imperative language is side effect per command, but you could still have things that the side effects are limited to certain areas
18:21:12 <elliott> Taneb: Not true
18:21:20 <nooga> elliott: compile and see for yourself
18:21:33 <elliott> Good code in imperative languages essentially mimics functional code :)
18:21:59 <elliott> nooga: Compiling won't tell me if it's a correct parser, but I know that C isn't context-free, and can only be parsed with yacc by using the embedded C code to sort things out
18:22:08 <Taneb> How about, a pair of a functional language and an imperative language, with the functional language in the back and an imperative language in the front
18:22:13 <elliott> I don't need to compile it to know this
18:22:22 <nooga> elliott: ah, the yacc file
18:22:37 <Taneb> So the imperative language can use functions defined in the functional language
18:22:42 <nooga> yeah guys
18:22:49 <nooga> since GHC compiles to C, AFAIR
18:22:52 <zzo38> Taneb: That is one thing that can be done, I suppose. Even, with Haskell, you can have a C program and Haskell program using FFI, where the main function is in C.
18:23:45 <elliott> nooga: No, it does not
18:23:52 <elliott> -fvia-C is deprecated and hasn't been the default ever
18:23:55 <elliott> Hmm, well
18:23:59 <elliott> I don't remember if/when itw as last the default
18:24:49 <Taneb> In some ways this is ideal; the functional language can be as pure as it likes, and the imperative language can do what it does best: filling in the bits that can't be done by a pure functional language (eg, IO)
18:25:12 <Taneb> Also, XSLT S and K is going well
18:25:28 <elliott> Taneb: That's basically what Haskell does, except that the language is one.
18:25:39 <elliott> You can model impure things in a pure language.
18:26:12 <elliott> That's more convenient than having a separate imperative language, because in a pure language you can use the pure language's functional strengths in the model of the impurity.
18:26:48 <elliott> And modelling an impure thing of course doesn't violate the purity of the rest of the language, since it's just a model.
18:29:30 <Taneb> Just a though
18:29:31 <Taneb> t
18:30:19 <elliott> Not saying it's a bad thought, I'm just saying that this is essentially what Haskell does
18:30:31 <elliott> Except that it models the imperative language inside the functional one, which is more convenient
18:31:21 <itidus20> so if monads don't have side effects
18:31:47 <itidus20> what would be the opposite thing which is crammed with side effects
18:32:02 <elliott> What
18:32:15 <itidus20> if you wanted side effects, as many side effects as possible
18:32:25 <elliott> What does "monads don't have side effects" mean
18:32:43 <itidus20> i don't know.
18:32:59 <Taneb> I think he may be referring speciffically to the IO monad, but I'm not good at Haskell enough to be sure
18:33:11 <elliott> That still doesn't make any sense
18:33:36 <itidus20> i hope i am not interrupting something valuable
18:33:41 <elliott> Probably not
18:34:24 <monqy> hi
18:34:25 <itidus20> anyway, as a self-styled game developer, every bit of code i write will necessarily trigger multimedia events
18:34:47 <elliott> It's perfectly possible to write games in a purely functional style without littering code with side-effects.
18:34:50 <itidus20> well maybe not every single bit
18:34:56 <Taneb> There are very few esolangs speciffically designed for game-making
18:35:02 <elliott> Taneb: specifically
18:35:07 <Taneb> Thank you
18:35:14 <Taneb> I knew I was getting that word wrong
18:35:22 <Taneb> Single f, double l
18:35:26 <elliott> itidus20: You probably want to read http://prog21.dadgum.com/23.html
18:35:30 <elliott> And its linked followups
18:35:53 <elliott> That's just one example, but it's very untrue to say that games are inherently side-effectful
18:36:57 <itidus20> elliott: aha.. very interesting
18:37:36 <itidus20> so one might say the game code really exists inside that "process one frame"
18:37:57 <itidus20> now... this idea sits well with me actually
18:38:05 <elliott> itidus20: Hey, I said include the follow-ups too :P
18:38:14 <itidus20> but i wanna talk about that first
18:38:36 <elliott> Have fun with that, then
18:38:38 <zzo38> Yes you could have game in no side-effect, where the code is a function taking inputs having to do with frame and outputs for their result, is one possible way to do so.
18:38:53 <itidus20> a while ago i was playing with the idea of a language where you write code which will be called once every frame
18:38:59 <zzo38> Or to process events is another way
18:39:16 <nooga> so again
18:39:30 <nooga> elliott: what's wrong with that C syntax
18:39:40 <itidus20> afk
18:39:44 <elliott> nooga: <elliott> nooga: Compiling won't tell me if it's a correct parser, but I know that C isn't context-free, and can only be parsed with yacc by using the embedded C code to sort things out
18:39:57 <elliott> By definition, it cannot parse C correctly
18:40:46 <elliott> http://calculist.blogspot.com/2009/02/c-typedef-parsing-problem.html has information on it, I can't find the better blog post I read a while ago about it
18:41:04 <elliott> aha
18:41:06 <elliott> nooga: Read these two:
18:41:09 <elliott> http://eli.thegreenplace.net/2007/11/24/the-context-sensitivity-of-cs-grammar/
18:41:10 <elliott> http://eli.thegreenplace.net/2011/05/02/the-context-sensitivity-of-c%E2%80%99s-grammar-revisited/
18:41:46 <Taneb> I may make a Feather derivative
18:41:49 <Taneb> Called McGraw
18:42:47 <monqy> what will it do
18:43:13 <Taneb> Access to alternate universes, time travelling to the future
18:44:54 <Taneb> Time police
18:46:54 <zzo38> I know about typedef parsing in C. CWEB has the same problem but it is capable to parse typedefs correctly; it doesn't parse #include files but you can use the @s and @f command to affect formatting of anything and make them parse differently.
18:48:09 <Taneb> I think I may have finished XSLT S and K
18:48:15 <Taneb> I have no idea if it would work or not
18:48:45 -!- ais523 has joined.
18:49:28 <elliott> hi ais523
18:50:43 <ais523> hi elliott
18:51:05 <elliott> hi ais523
18:51:08 <zzo38> Enhanced CWEB is completely impossible to parse unless you can read all include files and definitions of metamacros.
18:54:58 <Taneb> Just spotted a huge flaw in XSLT S and K
18:55:12 <Taneb> But I can't quite describe it
18:55:43 <elliott> "There can only be at most 256 different smob types in the system. Instead of registering a huge number of smob types (for example, one for each relevant C struct in your application), it is sometimes better to register just one and implement a second layer of type dispatching on top of it. This second layer might use the 16 extra bits to extend its type, for example."
18:55:43 <elliott> augh
18:55:51 <elliott> ais523: feel my pain k thx
18:55:55 <Taneb> It doesn't realise that <a/><b/> is equivalent to <a><b/></a> when <a> is at the start of a document
18:56:10 <ais523> hmm, wouldn't k thx mean I was thanked no matter what I did?
18:56:31 <Taneb> k thx 4 !smoking
18:56:34 <ais523> elliott: that API seems usable but far from ideal
18:57:27 <ais523> perhaps it should work along the lines of <apply><apply><s/><k/></apply><k/></apply>
18:57:52 <elliott> yeah apply is a separate node type
18:57:55 <elliott> s and k are leaves
18:58:00 <elliott> apply is a branch
18:58:13 <elliott> ais523: yeah but i guess it's designed because of the internals of the scheme implementation
18:58:15 <elliott> speeeeeeed and all that
19:01:07 <elliott> http://alan.dipert.org/ Who wants to bet on the probability that this is the Alan Dipert who owns esolangs.org?
19:01:41 <elliott> "Lisp to PHP Compiler" --https://github.com/alandipert
19:01:43 <elliott> I'm gonna say p=one
19:01:55 <elliott> (Trying to find a newer email address than that aol one.)
19:02:06 <Taneb> I'll say p=0.94
19:02:20 <Deewiant> elliott: "email" at the top of his site
19:02:26 <Taneb> Bye
19:02:27 <ais523> I always assumed Graue owned esolangs.org (the name itself, not the website there)
19:02:27 <elliott> Deewiant: Yep
19:02:29 -!- Taneb has quit (Quit: Goodbye).
19:02:34 <elliott> Deewiant: But I don't know it's the same Alan Dipert
19:02:36 <elliott> Worth an email, though
19:02:42 <ais523> elliott: just ask if it's the same Alan Dipert
19:02:52 <elliott> ais523: I'll do that, and include what I said last time :P
19:02:59 <Deewiant> Did you email the AOL address?
19:03:03 <elliott> Yeah
19:03:13 <elliott> Turns out nobody uses AOL anymore, who'da thunk it
19:03:57 <Deewiant> elliott: whois dipert.org has the same address
19:04:20 <Deewiant> (You might want to tell him to update that while you're at it)
19:04:52 <elliott> Deewiant: Too late, sent out an unsure message
19:05:02 <elliott> But thanks for the confirmation
19:05:26 <ais523> I think it's always best to be unsure even when it's obvious
19:05:54 <elliott> "Sorry, I killed + ate the old Alan Dipert two years ago to the day. I inherited his name, email address, and all property but esolangs.org. So unfortunately you have the wrong person."
19:06:09 <Deewiant> Darn
19:06:09 <elliott> It COULD happen.
19:07:04 <zzo38> I made a webpage for TeX to PNG; you could use that (source codes is available if you want to make your own copy) and cache the results by uploading files to the wiki that are named by their text and use those images in wiki
19:07:26 <elliott> Google does that too
19:07:32 <elliott> Well, probably LaTeX
19:07:35 -!- brisingr has quit (Ping timeout: 260 seconds).
19:07:38 <elliott> But only you use TeX, so :P
19:07:54 <zzo38> elliott: Why didn't they inherit esolangs.org? Did someone else take over?
19:08:08 <elliott> zzo38: No, the ghost of Alan Dipert started running it
19:08:14 <elliott> Unfortunately ghosts can have no effect on the material world whatsoever
19:09:08 -!- brisingr has joined.
19:09:25 <elliott> ais523: gah, how do you use {{unsigned}} if the comment was edited to add a bunch of stuff over numerous hours?
19:09:46 <ais523> by the same person?
19:09:52 <ais523> just give the last timestamp, I think
19:10:26 <zzo38> What seem to me, many programs try to call TeX externally from webpages and whatever are dealing with security wrongly. I use it by making the new format file this one http://zzo38computer.cjb.net/texify/texify.php?source=3 and then adding a time limit and memory limit to the program.
19:10:31 <elliott> --(this comment by 18:35, 9 September 2011 at 121.45.148.1 UTC; please sign your comments with ~~~~)
19:10:31 <elliott> argh
19:10:35 <elliott> I hate the ordering of unsigned's arguments
19:11:04 <ais523> elliott: well, I did call it unsigned2 originally
19:11:11 <ais523> but someone went and renamed it to unsigned
19:11:18 <elliott> ais523: haha, on wikipedia or the esolang wiki?
19:11:26 <elliott> former, looks like
19:11:36 <ais523> the reversed arguments are convenient when copying time/username from the history
19:11:41 <ais523> no, it's Esolang I'm talking about
19:11:47 <ais523> I didn't invent either template on Wikipedia
19:11:52 <elliott> http://esoteric.voxelperfect.net/w/index.php?title=Template:Unsigned&action=history
19:11:54 <elliott> doesn't look renamed
19:12:04 <elliott> (cur) (last) 22:17, 20 September 2006 Ihope127 (Talk | contribs) (Template:Unsigned2 moved to Template:Unsigned)
19:12:07 <elliott> ihope ¬_¬
19:12:08 <shachaf> elliott: So you're ehird.
19:12:16 <zzo38> Some systems try to stop you from using various disallowed TeX commands in the front-end by stopping ^^ and other things, which can cause various kind of problems but I did it differently, stopping disallowed things in the format file.
19:12:21 <elliott> that's not the right way to move pages, person who isn't tswett
19:12:25 <elliott> shachaf: No, I'm shachaf.
19:12:32 -!- JuliaSH has joined.
19:12:46 <shachaf> elliott: So that would probably mean you're in BST instead of EDT.
19:13:01 <elliott> That's so geographist.
19:13:08 <elliott> Why do our timezones need to be correlated with our location?
19:13:20 <elliott> ais523: What timezone are you on these days?
19:13:22 <tswett> elliott: huh. What did that Ihope127 guy do, and what was wrong with it?
19:13:33 <elliott> tswett: Moved something by copying, I think... I'm not atcually sure
19:13:40 <tswett> Wait, did he... move something by copying?
19:13:43 <elliott> I might be wrong though.
19:13:50 <elliott> The history doesn't make sense.
19:13:51 <tswett> Yeah, that is indeed the wrong way to do it.
19:13:55 <ais523> elliott: mostly UTC+1, but I was in something more like UTC+8 yesterday/today
19:13:56 <elliott> Maybe it was moved properly, then unsigned[two] got deleted.
19:13:58 <elliott> Then you recreated it.
19:14:07 <tswett> Then again, the wiki *is* public domain, so at least it's a *legal* way to do things...
19:14:47 <zzo38> If you copy my program for safe TeX entered remotely, please *do not* use e-TeX, pdfTeX, XeTeX, LaTeX, LuaTeX, etc, because that will result in security holes. Use it only with the One True TeX.
19:15:15 <elliott> The One True TeX doesn't have more-notation, though.
19:15:20 <elliott> Can I use it with moreTeX?
19:16:11 -!- JuliaSH has left.
19:16:16 <zzo38> elliott: I don't know moreTeX. Anyways, TeX isn't supposed to be any other programming language such as Haskell, C, or Lua (except for LuaTeX).
19:17:33 <itidus20> i think the problem with functional programming languages is that they haven't found their edsger dijkstra yet
19:17:40 <zzo38> If you write your own TeX variant, it is your job to deal with the security issues yourself if you want to use it with that.
19:17:54 <monqy> itidus20: how is this a problem with functional programming languages
19:17:55 <itidus20> howard curry is more like the charles babbage of functional programming
19:18:06 <itidus20> whatever his name is
19:18:33 <elliott> have you used any functional languages
19:19:39 <itidus20> i can't help thinking functional languages care more about being consistent than being useful
19:19:39 <zzo38> I disabled the following commands for security purpose: \special \font \errorstopmode \input \openout \openin \closeout \closein \write \read \immediate \errmessage \jobname \fontname \mag \magnification \dump
19:20:31 <zzo38> Which things related to category theory cannot be made in Haskell?
19:20:32 <itidus20> the fact is not everything can be neatly expressed as a function
19:20:53 <monqy> itidus20 once again philosophises without knowing what he's talking about
19:21:07 <itidus20> like, could you make gimp in haskell?
19:21:18 <itidus20> when i say haskell i mean any functional programming language
19:21:29 <ais523> itidus20: well, TCness...
19:21:40 <ais523> so the only issue would be trying to get a good API to GTK or whatever
19:22:09 <zzo38> Yes, if you have a good enough event system you could probably do it.
19:22:38 <cheater> itidus20, could you make gimp in asm?
19:22:51 <itidus20> i dunno ^_^;;;
19:23:11 <cheater> i've seen GUI interactive programs of similar complexity written in asm
19:23:18 <cheater> so yes you probably could
19:23:42 <cheater> the question is whether it would be a good idea to do that
19:23:59 <cheater> no, it would not be the besti dea because of haskell's stdlib still not being the best
19:24:04 <itidus20> im just being cruel
19:24:18 <itidus20> cruel is the fitting word
19:24:25 <ais523> cheater: you could just /compile/ it into asm
19:24:36 <zzo38> It is probably not best idea writing all programs in asm because them it work only on the computers it is designed on work on.
19:24:41 <elliott> the problem, itidus20, is that you're assuming you can make judgements on what is or is not possiblew tih functional languages given only a cursory reading of functional programming materials, and never actually trying to program in one
19:24:52 <elliott> and ignoring the fact that thousands of people write useful programs in purely functional languages
19:25:26 <zzo38> But of course if you write a program that is meant only a DOS program, or only a program meant to run on NES/Famicom emulator, you can write it fine using asm
19:26:01 <ais523> elliott: quick opinion: is "common subset of OCaml and F#" a sane language? As in, only using language elements with identical syntax in the two languages?
19:26:04 <itidus20> ok ok uh.. what about game of life?
19:26:09 <zzo38> (If the emulator is accurate enough, you could even put it in a cartridge and run in real NES/Famicom hardware on television)
19:26:29 <elliott> itidus20: Are you seriously implying nobody has ever created a game of life program in haskell before?
19:26:39 <elliott> It's practically a mainstream languages. Intel uses it, for chrissakes.
19:26:40 <itidus20> well im wondering how painful it is
19:26:51 <elliott> http://hackage.haskell.org/packages/archive/pkg-list.html
19:26:52 <elliott> life program: Conway's Life cellular automaton
19:26:57 <elliott> brians-brain program: A Haskell implementation of the Brian's Brain cellular automaton
19:27:09 <elliott> And Hackage is only a small subset of all the Haskell programs written.
19:29:25 <itidus20> i could say that it may be difficult to write an OS in a functional language.. but that is probably because machine code is geared towards imperative, and that computers are not really ready yet for such things
19:29:45 <elliott> http://programatica.cs.pdx.edu/House/
19:29:59 <elliott> http://www.ninj4.net/kinetic/ (seems to be a dead link though)
19:30:07 <elliott> http://lambda-the-ultimate.org/node/299
19:30:16 <elliott> There's another Haskell OS that I don't recall the name of.
19:30:21 <itidus20> :"> ok ......... well then. i submit
19:34:27 <Phantom_Hoover> THERE WAS A VISIBLE SUPERNOVA AND NOBODY FUCKING TOLD ME??????????????????????????/
19:34:48 <itidus20> it was years ago
19:35:04 <itidus20> you're just too far away because you're on earth
19:35:25 -!- silence1 has joined.
19:35:50 <silence1> l
19:35:57 <itidus20> a race of humanoids is really scrambling to escape imminent doom after the supernova
19:36:00 -!- silence1 has left.
19:37:51 <monqy> bye
19:39:38 <Phantom_Hoover> Aw, dammit, it's brightest tonight and you need binoculars.
19:40:32 <elliott> `addquote <Phantom_Hoover> THERE WAS A VISIBLE SUPERNOVA AND NOBODY FUCKING TOLD ME??????????????????????????/
19:40:34 <HackEgo> 643) <Phantom_Hoover> THERE WAS A VISIBLE SUPERNOVA AND NOBODY FUCKING TOLD ME??????????????????????????/
19:40:43 <elliott> Phantom_Hoover: Finally we know what would warrant cursing from you.
19:40:44 <monqy> /
19:41:24 <itidus20> looking into space just makes me feel very dizzy
19:41:34 <itidus20> makes my visual field feel too "big"
19:41:55 <Phantom_Hoover> elliott, bastard smug uncle in France with binoculars dammit.
19:42:18 <elliott> thats me
19:42:36 <itidus20> headache caused by such thoughts
19:43:01 <zzo38> I do have ideas related to operating system in Haskell. A program is simply any pure value (even a function), no specific type is required. Although type is exported so that you can put programs together with correct type. There is no IO monad, but there is the operating system monad, which is exposed so that you can call a program with overriding system calls (a bit like ptrace, I suppose).
19:43:49 <zzo38> And you can make up an IO monad that can then be run in the operating system monad, to work programs written for other (imperative) operating systems.
19:43:53 <itidus20> elliott has shown me that it's been done..
19:45:37 -!- Taneb has joined.
19:45:45 <Taneb> hlep
19:45:50 <zzo38> And devices, files, etc, can also be Haskell functions accessible by querying the operating system monad.
19:45:55 <Taneb> Getting a 412 error trying to edit the wiki
19:46:08 <Taneb> That's my first 412 error
19:46:10 <Taneb> :)
19:46:20 <Taneb> But still, I kinda want to edit the wiki
19:46:33 <Taneb> It also doesn't let me preview
19:48:00 <Taneb> Any suggestions?
19:48:10 <elliott> You put a span or div in there
19:48:12 <elliott> Use the span or div templates
19:49:00 <zzo38> There are other things that can cause such errors too
19:49:00 <Taneb> No "<"s or ">"s
19:49:24 <Taneb> Lots of &lt;s and &gt;s though, could that be it?
19:49:43 <zzo38> The signature hack is another way
19:49:50 -!- tswett has quit (Changing host).
19:49:50 -!- tswett has joined.
19:50:09 <Taneb> Signature hack?
19:50:10 <elliott> Taneb: Dunno, pastebin what you were trying to save?
19:50:46 <Taneb> http://pastebin.com/P78hqgx2
19:52:14 -!- yorick has joined.
19:52:30 <zzo38> Something that has not been corrected. It should be permitted for selected confirmed users not to be blocked by this program
19:55:44 <Taneb> So, any suggestions?
19:56:09 <itidus20> is it true that functional means nothing is so-called hard-coded?
19:56:55 <Taneb> I would have thought the very opposite
19:57:14 <elliott> itidus20: what does functional have to do with hard-coded
19:57:49 <elliott> Taneb: hmm, dunno what could be triggering it, ask ais523
19:58:06 <Taneb> ais523, any ideas?
19:58:22 <ais523> what's a 412 error anyway?
19:58:32 <Taneb> Precondition Failed
19:58:36 <Taneb> The precondition on the request for the URL /w/index.php evaluated to false.
19:58:36 <ais523> Taneb: are you trying to edit via esolangs.org, or esoteric.voxelperfect.net?
19:58:38 <ais523> aha
19:58:43 <ais523> you're probably triggering the spam filter
19:58:52 <ais523> it's famous for triggering on, among other things, div and span
19:59:00 <Taneb> No divs or spans
19:59:11 <elliott> ais523: http://pastebin.com/P78hqgx2
19:59:19 <elliott> stop repeating the two seconds of conversation i had with Taneb about this :P
19:59:36 <ais523> hmm, &lt; or &gt; could well be it
19:59:46 <Taneb> They were in before
19:59:47 <elliott> he saved it with &lt;s and gts before, I believe
19:59:50 <ais523> Taneb: do you know of the <nowiki> tag?
19:59:55 <Taneb> I do not
19:59:56 <ais523> it'd make that rather easier to read
19:59:59 <elliott> but yeah nowiki would help
20:00:07 <Taneb> How does it work?
20:00:09 <itidus20> nevermind.. disregard my last post.. was a mistakle
20:00:14 <ais523> it basically means "interpret everything up to the next </nowiki> literally"
20:00:24 <Taneb> Ooh
20:00:27 <Taneb> As in, plaintext?
20:00:30 <ais523> yep
20:00:42 <elliott> <pre><nowiki>....</nowiki></pre> is useful
20:00:42 <ais523> <pre><nowiki> is a common pairing
20:00:46 <ais523> although I'm not sure if the wiki allows <pre>
20:01:04 <ais523> anyway, binary search on preview may help you work out what's offending
20:01:36 <elliott> it does allow pre
20:01:59 <ais523> I know a spambot once made a page which was incredibly hard to delete because its name tripped the spam filter
20:02:12 <ais523> and trying to follow any links from it caused the spam filter to be tripped on the /referrer/
20:02:20 <Taneb> Using nowiki and <s and >s doesn't help
20:02:31 <ais523> in the end, #esoteric figured out what was going on and I spoofed the referrer to delete it
20:02:39 <ais523> Taneb: well, it makes it more readable, at least
20:03:07 <ais523> the thing is, I have no access to the spam filter
20:03:23 <ais523> and know nothing about how it behaves, but for what we've deduced by experiment
20:03:27 <ais523> banning div and span is really obvious
20:03:36 <ais523> but there are probably other things in there that are much less obvious
20:04:26 <ais523> binary search seems to be the way to go
20:04:34 <ais523> try previewing the first half, then the first quarter, etc, until it works
20:07:18 <Taneb> The line <xsl:copy-of select="../*[3]"/> seems to trip it
20:07:37 <ais523> ouch, I wonder what's wrong with that line?
20:07:46 <ais523> you could try binary-searching even within the line
20:07:51 <ais523> that definitely doesn't trip any spam filters I know of
20:07:56 <ais523> but I didn't think I knew them all
20:08:33 <Taneb> It doesn't like "../*[3]"
20:08:40 <Taneb> With or without quotes
20:08:59 <Taneb> ../
20:09:24 <Taneb> That's the smallest it will go and still trip the filter
20:12:11 <ais523> a/ha/
20:12:19 <elliott> haha
20:12:20 <ais523> .</nowiki>.<nowiki>/
20:12:23 <elliott> what a terrible spam filter
20:12:24 <ais523> should avoid tripping it
20:12:38 <Taneb> I've saved it in a way that works
20:12:59 <ais523> elliott: I well know Esolang's spam filter is terrible
20:13:27 <Taneb> My way of fixing it was the slightly less readable .&#46;/
20:13:28 <elliott> I know you know
20:13:39 <ais523> &#46; works even inside nowiki?
20:13:43 <Taneb> Yeah
20:13:51 <Taneb> So does <s>...</s>
20:13:54 <Taneb> Which is annoying
20:14:02 <Taneb> As I am using <s> for something else
20:14:14 <Taneb> HTML isn't wiki
20:15:42 <Taneb> HTML character entities still work
20:19:02 -!- Taneb_ has joined.
20:20:32 <itidus20> this prog21.dadgum is quite cool
20:20:38 -!- Taneb has quit (Ping timeout: 276 seconds).
20:21:07 <itidus20> now i am very impressed to see a section beginning "I want to talk about performance coding. Not coding for speed, but coding as performance, a la live coding."
20:21:20 <itidus20> because i have actually wondered about that very same thing before
20:30:21 <itidus20> http://en.wikipedia.org/wiki/Interactive_computation
20:30:57 <itidus20> "the Turing machine model only provides an answer to the question of what computability of functions means and, with interactive tasks not always being reducible to functions, it fails to capture our broader intuition of computation and computability." -- no doubt this is controversial statement to make
20:31:04 -!- MDude has quit (Quit: later chat).
20:33:36 <elliott> looks like an advertisement article.
20:33:49 <elliott> note references being basically all the same few people.
20:34:01 <itidus20> ahhhhhhhh
20:34:26 <elliott> Can't say for sure, but...
20:34:33 <itidus20> no thats quite true
20:35:11 <itidus20> at least 3 references to the one author
20:35:15 <itidus20> and no actual references
20:35:32 <itidus20> "References and external web sources" you're right... thats not wiki style
20:35:43 <elliott> My bias against the idea is probably showing (in that I wouldn't complain much about an under-referenced article about a concept I liked).
20:36:08 <zzo38> Is there a point-free case command in Haskell?
20:36:15 <elliott> No.
20:37:54 <zzo38> Why?
20:42:09 <itidus20> elliott: i dont even know what it means. and i am sure it has nothing to do with how to code an x86
20:42:55 <zzo38> You should make the esolang wiki spam filter to be bypassed for the specified users if they are logged in. You could have it a field manually set in the user profile by administrators.
20:46:26 <nooga> elliott: isn't gcc's C parser also made in YACC?
20:47:06 <elliott> No, gcc's C parser is hand-written. I think they used to use a yacc parser. But yacc is turing-complete.
20:47:23 <elliott> The point is that you have to keep track of the typedefs by using yacc's blocks after the production
20:47:25 <elliott> i.e. foo { ... }
20:47:34 <elliott> That parser doesn't do so, so it can't possibly parse correctly.
20:48:01 <zzo38> I wrote more stuff relating to proposal of more-notation, including some possible circumstances in which it could be used. http://www.haskell.org/haskellwiki/User:Zzo38/Proposal_for_more-notation
20:49:11 <nooga> elliott: clang's parser as well as tcc's one is also hand written
20:49:13 <nooga> this sucks
20:49:34 <zzo38> nooga: Is there anything wrong with that?
20:49:45 <elliott> ais523: there you go, http://www.haskell.org/haskellwiki/User:Zzo38/Proposal_for_more-notation
20:50:28 <ais523> oh, right
20:50:55 <ais523> wow, zzo38's writing style is instantly recognisable anywhere
20:51:36 <zzo38> ais523: That is because you have a lot of practice, because of we are all in this IRC together.
20:52:27 <ais523> perhaps
20:52:33 <zzo38> Does this document interest to you at all? Do you have any opinion/comment? You could write it on the IRC, or on the talk page of the wiki.
20:52:58 <ais523> I'll have to think about it
20:55:02 <nooga> zzo38: hard to hack in
20:56:21 -!- atrapado has joined.
20:56:34 <zzo38> nooga: Yes, that is what I thought. But I did be careful when writing that document, to make it not harder than it should be.
21:01:54 * Phantom_Hoover → looking in vain for the supernova.
21:03:55 -!- augur has joined.
21:06:36 -!- augur has quit (Remote host closed the connection).
21:07:24 <Phantom_Hoover> Hmm, I think I saw it very faintly.
21:07:41 <Phantom_Hoover> Aha, binoculars
21:07:43 <Phantom_Hoover> *!
21:08:27 <Sgeo> https://lh3.googleusercontent.com/-WLhqP3Po6hI/Tmp-VbpyS6I/AAAAAAAAAS8/UZq_G1bYfd8/s640/IMG_20110909_163314.jpg warning: dead animal
21:08:58 -!- jcp has quit (Ping timeout: 240 seconds).
21:09:03 -!- Patashu has joined.
21:10:43 <zzo38> I have no binoculars. There is also stuff in the way such as grapes and so on.
21:10:52 <elliott> Sgeo: I am unable to discern your reasons for linking to this.
21:11:35 <Sgeo> I guess I'm hoping someone could identify it
21:11:41 <monqy> oh
21:11:52 <monqy> dead
21:12:08 <elliott> its a dead animal hope this helps
21:12:10 <monqy> help i can't stop laughing
21:12:17 <Phantom_Hoover> Awww, the supernova is just a type 1a.
21:12:17 <elliott> its name was barry
21:13:04 <elliott> Phantom_Hoover: hi im dead animal
21:13:06 <monqy> it's not that dead animals are funny, it's that sgeo linking a picture of a dead animal out of nowhere is funny
21:13:24 <monqy> and then in post saying he hoped someone could identify it
21:13:38 <elliott> we will find who did this...............
21:13:43 <elliott> we will ARREST THEM FOR JUSTICE..............
21:15:11 <monqy> is there any context sgeo
21:15:17 <monqy> any at all
21:15:45 <Sgeo> I was walking to the school today, and stepped on it thinking it was a tree stump. When I walked back home, I noticed the bone
21:15:47 <Sgeo> bones
21:15:58 <monqy> poor bones
21:16:37 <zzo38> Oops you made a mistake.
21:16:42 <monqy> oops
21:16:48 <monqy> and then you took a picture of it
21:17:08 <monqy> this makes it even better
21:17:33 -!- jcp has joined.
21:19:03 -!- brisingr has quit (Read error: Connection reset by peer).
21:20:17 <Phantom_Hoover> You'd think Sgeo was 13.
21:20:45 <Phantom_Hoover> Silly Seth and the Mystery of the Dead Animal.
21:23:41 -!- Taneb_ has quit (Ping timeout: 276 seconds).
21:26:22 <elliott> `addquote <Phantom_Hoover> It is like the Holocaust but with Nazis.
21:26:25 <HackEgo> 644) <Phantom_Hoover> It is like the Holocaust but with Nazis.
21:32:08 -!- Taneb has joined.
21:46:08 <Patashu> as in the nazis are dying?
21:58:14 -!- boily has quit (Ping timeout: 252 seconds).
22:01:14 -!- augur has joined.
22:13:46 <Taneb> Goodnight
22:21:08 <elliott> ais523: the esolangs.org owner replied
22:21:17 -!- DH____ has joined.
22:21:18 <elliott> offering to point it at any dns server
22:21:31 <elliott> I doubt pointing it at voxelperfect's would work, since it doesn't know about esolangs.org
22:21:37 <ais523> ah, interesting
22:21:52 <ais523> I don't have a handy DNS server for the purpose
22:22:11 <elliott> yep, I think I'll tell him to go with the other option (investigate yi.org which I mentioned since I'd seen it used a lot)
22:22:17 <elliott> Gregor: any non-canyonthing suggestions for good free dns servers?
22:38:18 <itidus20> ok guys.. i have a new idea to drop
22:38:24 <Gregor> elliott: afraid.org
22:39:00 <itidus20> someone said "linked lists are inherently superior to arrays/arraylists when it comes to removing items from them"
22:39:18 <elliott> Gregor: Better than yi.org? :-P
22:39:44 <Gregor> elliott: Well, having not heard of yi.org, my response is "blerfmleh"
22:39:44 <Sgeo> arraylists?
22:39:45 <elliott> "Why is it free? It's quite simple. We wanted a challenge... that's it." ;; heh, such reassuring words.
22:39:45 <itidus20> so i started thinking, and i said "there could be an array traversing protocol. 2 kinds of items. 1) a number indicating how many data items follow 2) a number of which array index to jump to"
22:39:57 <itidus20> 0:[3] 1:[a] 2:[b] 3:[c] 4:[6] 5:[?] 6:[2] 7:[d] 8:[e]
22:40:06 <itidus20> 0: read 3 values. 4: jump to cell 6. 6: read 2 values.
22:40:25 <Gregor> elliott: That being said, it looks like yi.org is more focused on "dynamic DNS", whereas afraid.org is more focused on being a conventional interface with all the BINDing bells and whistles.
22:40:35 <elliott> Right.
22:40:55 <Sgeo> It's not a matter of how to do it within a language that makes linked lists better, it's the underlying structure that makes certiain operations more efficient
22:40:58 <itidus20> this idea of mine probably isn't all that wonderful.. but welll... yeah thats my latest thought
22:41:09 <Sgeo> *better for tasks which linked lists are better at
22:41:41 <Sgeo> Or I'm misunderstanding you. That's likely
22:42:01 <elliott> Aight, sent off another email to the 'pert.
22:42:07 <elliott> Also he might end up in here, I mentioned that I asked the channel.
22:43:56 <zzo38> Linked lists can be done in C, and in Haskell.
22:44:15 <itidus20> Sgeo: i'll code up my idea,, to make it more concrete
22:51:16 -!- alandipert has joined.
22:52:08 <itidus20> http://codepad.org/xWNBCwng
22:52:15 <elliott> hi alandipert
22:52:25 <alandipert> hi!
22:52:33 <ais523> hi!
22:52:38 <Gregor> lo!
22:52:38 <alandipert> it's been a few years, thought to pop in :-)
22:52:47 <itidus20> its not tested.. but it is supposed to do what i said
22:52:48 * alandipert formerly wooby, if anyone recalls
22:52:53 <Gregor> Ahhhhhhhhhhhhhhhhhhh
22:52:53 <zzo38> Can you switch text/binary I/O mode in Haskell?
22:53:10 <Gregor> alandipert: So presumably you're from a society that only gives you a non-ridiculous name when you reach a certain age? ;)
22:53:37 <elliott> I probably shouldn't have expected the domain to be owned by a completely random stranger :P
22:53:38 <itidus20> ok i can see an optimization already
22:53:51 <alandipert> lol
22:54:38 <itidus20> http://codepad.org/Yhjjp7nk
22:54:40 -!- copumpkin has quit (Quit: Computer has gone to sleep.).
22:55:02 <Sgeo> Oh, sorry, wasn't paying any attention
22:55:12 <Gregor> <elliott> I probably shouldn't have expected the domain to be owned by a completely random stranger :P // um ... so who does own it?
22:55:23 <elliott> Gregor: alandipert :P
22:55:23 <itidus20> Sgeo: ok have a look and if you're an expert code reader it might make some sense..
22:55:30 <itidus20> it wouldn't make sense to me though
22:55:40 <Gregor> alandipert: Oh! FIX FIX FIX IT NOW YOU EVIL EVIL BEING
22:55:43 <alandipert> back in a few, will toggle DNS bits shortly
22:55:58 <elliott> Forgive Gregor, he isn't accustomed to humans.
22:55:58 * alandipert writing esolang for dns manipulation
22:56:03 <elliott> oh dear
22:56:15 <elliott> Gregor: What have you _done_????
22:56:22 <ais523> I suppose esolangs.org was a great social manipulation thing
22:56:23 <Gregor> SOLVED ALL PROBLEMS?
22:56:30 <ais523> everyone just sort-of assumed that Graue owned it
22:56:31 <alandipert> Gregor: i remember from like 5 years ago a c->bf design, scanned from a napkin
22:56:32 <Sgeo> So it's an array that contains indexes into the array?
22:56:44 <Gregor> alandipert: It wasn't scanned from a napkin X-D
22:56:45 <itidus20> Sgeo: it contains 2 things
22:56:51 <Gregor> It was scanned from scribbling on normal paper :P
22:56:52 <itidus20> run lengths and indexes
22:56:59 <alandipert> oh ok :-)
22:57:03 <elliott> ais523: I found who owned it ages ago, I think
22:57:04 <elliott> I forget why
22:57:06 * alandipert thinks it would have been cooler if it was on a napkin
22:57:08 <elliott> Well, did a whois
22:57:09 <ais523> !bfjoust does_this_work_yet (>)*8(>[-])*21
22:57:17 <EgoBot> ​Score for ais523_does_this_work_yet: 18.3
22:57:17 <elliott> fungot: say hi to alandipert
22:57:18 <fungot> elliott: wait for cloud to return.
22:57:26 <elliott> ^style irc
22:57:27 <fungot> Selected style: irc (IRC logs of freenode/#esoteric, freenode/#scheme and ircnet/#douglasadams)
22:57:29 <elliott> fungot: say hi, more verbosely
22:57:30 <fungot> elliott: basically you want your function to return for the cell processor? this one is older. see http://okmij.org/ ftp/ papers/ lagarias/ paper/ html/ fnord
22:57:39 <itidus20> i will try it out :-s
22:57:55 <Sgeo> itidus20, to be clear, your structure has no random-access, which is the main benefit of arrays over linked-lists.
22:57:59 <ais523> who wrote fungot's Underload interp? fizzie?
22:57:59 <fungot> ais523: so does noone do mysql with scheme? i am sure it can be
22:58:00 <Sgeo> (iiuc)
22:58:01 <elliott> fizzie: Where'd that okmij come from? :P
22:58:09 <elliott> ais523: it's written in befunge, so yes
22:58:13 <itidus20> Sgeo: oh.... hmmm good point
22:58:14 <ais523> wow, fungot sounded surprisingly zzo38y there
22:58:15 <fungot> ais523: error in string-set!: expected type pair, got ' 65'. it was confusing since the only common language they have used until then. what were you expecting perhaps fnord discussions?
22:58:35 <Sgeo> ^style
22:58:36 <fungot> Available: agora alice c64 ct darwin discworld europarl ff7 fisher homestuck ic irc* jargon lovecraft nethack pa sms speeches ss wp youtube
22:58:36 <ais523> elliott: well, various people have written Befunge programs
22:58:39 <itidus20> Sgeo: i expect it's not every day that some fool manages to make an array not have random access
22:58:42 <ais523> I wrote a Deadfish interp in it, just because
22:58:55 <elliott> ais523: befunge isn't known for its modularity...
22:59:11 <Sgeo> itidus20, well, I think what you did is more of a linked-list, or linked-list like thing, implemented inside of an array
22:59:24 <ais523> elliott: really? it modularises pretty well
22:59:34 <itidus20> Sgeo: its sort of clever, right?
22:59:40 <elliott> ais523: I guess storage offsets are useful
23:00:08 <ais523> yep, that's all you really need to do subroutine calls
23:00:09 <Sgeo> itidus20, your code still only shows a portion of your idea
23:00:23 <ais523> together with some way to implement a return address stack
23:00:31 <ais523> (and I suppose you could use SUBR for that if you didn't want to hand-roll one)
23:00:53 <itidus20> Sgeo: well the idea is to make deletion less expensive in an array
23:02:32 <Sgeo> Store it in an array. Keep a separate record of "deleted" items, which does not require actually altering the storage array. ... actually, scrap that. What is the purpose of deleting from a random access array?
23:03:09 <itidus20> well i was responding to something someone in another channel typed
23:03:09 <Sgeo> And if you don't care about random-access, why are you using an array?
23:03:10 <itidus20> namely
23:03:22 <itidus20> "linked lists are inherently superior to arrays/arraylists when it comes to removing items from them"
23:03:58 <Sgeo> I don't know what they mean by arraylists, but... define "removing"
23:04:15 <Sgeo> Do they mean just shiftig everything else so that there's no gap in the indexing?
23:04:17 <itidus20> removing means deleting
23:04:38 <Gregor> Sgeo: An arraylist is generally a list of arrays, presenting the illusion elements of the inner arrays being a single, cohesive array. It's great for concatenating, and usually fast for indexing.
23:05:11 <Gregor> And yes, removing an element from a list is an O(1) operation, whereas removing an element from an array is an O(n) operation with n being the size.
23:05:21 <elliott> I don't really like arraylists.
23:05:33 <Gregor> elliott: And they don't like you.
23:05:45 <elliott> Gregor: It's not my fault they're not ropes.
23:06:07 <Sgeo> Gregor, why would someone want to "remove" an element from an array in that fashion?
23:06:28 <Gregor> Sgeo: Don't ask me.
23:06:49 <Sgeo> But I can think of ways using a secondary record to deal with it. Would make accessing a bit slower though
23:07:18 <Sgeo> Um, and inserting... um, ok, this is going into bad idea land
23:07:18 <itidus20> my idea might not be as hot as i expected
23:07:26 <itidus20> i didnt think it through
23:07:36 <Sgeo> Land of Bad and Ideas
23:07:55 -!- nooga has quit (Ping timeout: 252 seconds).
23:08:16 <itidus20> shit
23:08:23 <Sgeo> itidus20, I didn't mean your idea
23:08:36 <Sgeo> (which you still have not entirely expressed in code)
23:08:55 <Sgeo> Just... unneeded
23:09:17 <itidus20> i will have another crack at this
23:10:00 -!- FireFly has quit (Quit: FireFly).
23:10:41 <Sgeo> Keep in mind that memory can be described as an array. So implementing a data structure in an array does not give benefits over implementing it using pointers
23:11:31 <Sgeo> (I'm sure at some level "memory is an array" is inaccurate. Finegaling by the OS or something)
23:15:25 <CakeProphet> paging makes it less of an array.
23:16:46 -!- copumpkin has joined.
23:19:30 -!- atrapado has quit (Quit: FIN).
23:23:45 <itidus20> ok this is the actual working code: http://codepad.org/H8oSpLVR
23:23:59 <itidus20> i can't believe how difficult that proved for me
23:25:37 <itidus20> but it is occuring to me this system might not actually 'work' how its supposed to
23:25:48 <itidus20> if one actually tries to delete from the array
23:32:19 <itidus20> basically i think it will work as long as you delete more than 1 cell at a time
23:33:19 <Lymee> itidus20, what is that supposed to do?
23:33:39 <itidus20> it needs further devving >:)
23:34:26 <elliott> ais523: hey, the Java committee decided on the lambda syntax, and it features 0 octothorpes
23:34:43 <ais523> oh, what is it?
23:34:50 <elliott> http://mail.openjdk.java.net/pipermail/lambda-dev/2011-September/003936.html
23:34:51 <elliott> they stole C#'s :)
23:35:04 <Patashu> mmm, committees
23:35:53 <ais523> hmm, if that allowed a return type to be specified, as in (int x, int y) -> int {x + y;}
23:36:00 <Lymee> elliott, C++ uses that syntax too?
23:36:08 <ais523> then it would be pretty similar to C++'s in that case
23:36:14 <ais523> which is [](int x, int y) -> int {x + y;}
23:36:15 <Sgeo> itidus20, is the structure supposed to be such that the 0th slot has 0 items, 1st has 1, etc.?
23:36:26 <ais523> umm, {return x + y;} I think
23:36:30 <itidus20> ill get back to you
23:36:53 <Patashu> wait, C++ has lambda syntax?
23:36:53 <Patashu> O_O
23:37:01 <ais523> and rvalue references!
23:38:47 <Sgeo> C++ or C++0x?
23:39:09 <ais523> C++0x is C++
23:39:32 <elliott> yep, it was ratified, was it not?
23:39:57 <ais523> elliott: yes, and thus retroactively became correct
23:40:05 <elliott> haha
23:40:07 <elliott> feather-std
23:40:23 <ais523> oh no, I think we've managed to mix three metaphors in a way that actually makes sense
23:41:21 <ais523> anyway, that Java syntax seems fine to me
23:41:30 <elliott> indeed
23:41:34 <elliott> `addquote <ais523> oh no, I think we've managed to mix three metaphors in a way that actually makes sense
23:41:36 <HackEgo> 645) <ais523> oh no, I think we've managed to mix three metaphors in a way that actually makes sense
23:42:37 -!- DH____ has quit (Remote host closed the connection).
23:46:46 <Sgeo> I only see two metaphores in "feather-std"
23:46:59 <Sgeo> Or, um, is metphore the right wword?
23:47:10 -!- oerjan has joined.
23:47:41 <ais523> Sgeo: you possibly missed the Agora reference
23:48:23 <Sgeo> Oh, in retroactive correctness?
23:48:28 <ais523> yes
23:50:04 <Sgeo> I understand the eso-std reference but not entirely why it fits in
23:50:12 * Phantom_Hoover → sleep
23:50:13 -!- Phantom_Hoover has quit (Quit: Leaving).
23:56:57 -!- MSleep has joined.
23:57:03 -!- MSleep has changed nick to MDude.
23:59:53 -!- ais523 has quit (Remote host closed the connection).
2011-09-10
00:03:53 -!- DH____ has joined.
00:04:38 <DH____> Anyone alive?
00:05:12 <tiffany> nope, we're all zombies
00:05:14 <tiffany> brainnnssss
00:05:30 <DH____> Ah well
00:05:54 <oerjan> lots of brainsss here
00:06:04 <DH____> I had an idea...
00:06:07 <elliott> oerjan: I got esolangs.org fixed, say hi to alandipert :P
00:06:07 <CakeProphet> mmmmmmmrgh
00:06:28 <oerjan> alandipert: hi :)
00:06:34 <alandipert> hi
00:06:39 <alandipert> success!
00:07:37 <DH____> You know how they've started modulating network traffic into power currents to send the.internet through power lines?
00:07:57 <CakeProphet> no..
00:08:56 <DH____> And you know how POSe during the war communicated by tapping morse-code over the pipework?
00:09:19 <DH____> *POWs
00:09:29 <CakeProphet> Sure.
00:10:23 <DH____> Why not combine the two and send network traffic through the central heating systems of buildings?!
00:11:13 <CakeProphet> I'd imagine HTTP requests would get a little noisy, if I'm imagining this correctly.
00:12:01 <DH____> Use a frequency above 22kHz and no-one will hear...
00:12:48 <CakeProphet> ah, yes I was following the analogy a bit strictly. :P
00:13:15 <CakeProphet> still modulating high voltage currents seems... unecessary.
00:13:47 <DH____> You could still use Morse if you wanted, it would just have to be fast...
00:14:22 <Jafet> Especially when using it to transmit XML.
00:14:24 <oerjan> alandipert: i was reminded of something - is the email address in the esolangs.org whois correct?
00:14:39 <alandipert> it is not, will update
00:14:52 <alandipert> well, it's a valid e-mail address :-)
00:15:02 <CakeProphet> DH____: ah BPL isn't as common in the US, so that's why I've never heard of it.
00:16:31 <CakeProphet> because we uses smaller transformers, which act as low-pass filters on the signal. Whereas European power systems typically have a smaller number of large transformers.
00:16:51 <CakeProphet> thus to fix the low-pass filtering you have to install repeaters at every transformer, which is more costly in the US.
00:20:39 <oerjan> <itidus20> what would be the opposite thing which is crammed with side effects
00:20:59 <oerjan> a language in which calculating 2+2 wrote to stdout, and stuff
00:21:31 <Patashu> and you have to read the result from stdout
00:22:04 <oerjan> good idea
00:23:35 <CakeProphet> hmmm.... sounds like an interesting challenge.
00:23:45 <CakeProphet> to have every computation as a side effect.
00:24:00 <monqy> a language in which to calculate 2+2 you must mutate state
00:24:05 <CakeProphet> yep.
00:24:06 <monqy> p.s. that's the joke
00:24:20 <CakeProphet> hmmm, do stack-based languages count?
00:24:21 <oerjan> hm technically that was my idea for arithmetic in my Reaper vaporlang
00:24:55 <CakeProphet> ah, no I wouldn't count a stack based lang. Nothing can return anything.
00:24:59 <Gregor> Even by the standard of weebls-stuff, http://www.weebls-stuff.com/songs/Babies/ is really friggin' wtf.
00:25:12 <oerjan> CakeProphet: not necessarily, e.g. you can think of Underload as pure
00:25:40 <oerjan> at least without S, possibly even with
00:26:20 <oerjan> it's just taking a stack and returning a stack
00:26:51 <CakeProphet> well the idea with bugsophia was that each thread only stored a single byte and to transmit data around you'd have to use streams.
00:27:09 <CakeProphet> that's pretty side-effect-ful.
00:27:19 <oerjan> yeah
00:27:34 <elliott> <oerjan> it's just taking a stack and returning a stack
00:27:38 <elliott> well everything is just taking a world and returning a world.
00:27:47 <CakeProphet> elliott: Haskell mind virus.
00:27:52 <CakeProphet> :P
00:27:55 <elliott> CakeProphet: um I was _pointing out_ a mind virus
00:28:03 <elliott> that considers everything pure
00:28:04 <CakeProphet> with another mind virus, yes.
00:28:08 <elliott> no, I was not
00:28:27 <monqy> it was a reference to the mind virus not practice of it
00:28:46 <monqy> _or whatever the terms are_
00:28:48 * oerjan mentions the mind virus without using it
00:28:48 <CakeProphet> that's, perfectly acceptable in relation to what was said.
00:29:10 <oerjan> monqy: ^
00:29:27 <monqy> mind virus
00:30:05 <oerjan> actually use/mention might be at a different level than reference/practice
00:30:08 <CakeProphet> programing is a mind virus.
00:30:21 <oerjan> with use ~ reference being closest
00:30:30 <CakeProphet> #esoteric is a mind virus.
00:30:51 <oerjan> CakeProphet: no it is not and please report for termination
00:31:02 <CakeProphet> so one thing I never figured out was how binary operators were to work in bugsophia
00:31:16 <CakeProphet> basically they would occur by two threads colliding on top of the operator symbol
00:31:21 -!- MDude has quit (Ping timeout: 260 seconds).
00:31:23 <CakeProphet> but... I'm not sure where the result goes.
00:31:49 <oerjan> to the nursery
00:31:56 <CakeProphet> ha.
00:32:00 <CakeProphet> that's a possibility.
00:32:17 <CakeProphet> they could also spawn a new thread at the operator which then travel down whichever path was not originally taken.
00:32:31 <CakeProphet> or overwrite one or both of the threads ASM style.
00:32:44 <CakeProphet> (well, one is asm style, both is so I don't have to write rules for how that works. :P )
00:33:52 <itidus20> ok for anyone including sgeo who was wondering about that array thing, this is sort of the idea.. but its not a complete finished thing: http://codepad.org/AbkVLHKR
00:34:14 <monqy> bug enters operator, operator partially applies to bug, this bug does something with the partially applied operator such that another bug can hit it and it can apply to the bug and so on??????
00:34:22 <monqy> or would this not work at all due to how bS works
00:34:50 <monqy> (because this page is not really a complete enoguh spec for me to get the langauge)
00:35:06 <monqy> this page being http://esoteric.voxelperfect.net/wiki/BugSophia
00:36:54 <Patashu> it doesn't explain what the symbols do
00:36:55 <Patashu> I am disappoint
00:38:37 <elliott> "EU Officially Seizes The Public Domain, Retroactively Extends Copyright"
00:38:45 <elliott> nice.
00:39:16 <DH____> When did that happen?
00:39:30 <Patashu> wat
00:39:32 <Patashu> you can't do that
00:39:55 <elliott> http://www.techdirt.com/articles/20110908/15491315851/eu-officially-seizes-public-domain-retroactively-extends-copyright.shtml
00:39:57 <elliott> Patashu: they just did
00:40:03 <elliott> DH____: just now
00:40:09 <elliott> for good values of just now
00:40:26 <itidus20> does this include the bible?
00:40:43 <elliott> I think the bible has been public domain for longer than twenty years.
00:40:53 <itidus20> ah its only for 20 years?
00:41:18 <Patashu> 'only'
00:41:19 <Patashu> :|
00:41:24 <CakeProphet> monqy: the page is all that remains of the spec, which was never complete.
00:41:29 <CakeProphet> so really it's up for reinterpretation.
00:41:32 <monqy> ;_;
00:41:39 <CakeProphet> partial application is interesting though.
00:41:54 <monqy> partial application Always the Right Way
00:42:11 <CakeProphet> not necessarily for an esolang though.
00:42:36 <pikhq> Patashu: It's been done in the US.
00:42:50 <CakeProphet> I had an operator that essentially caused a bug to sit and wait on the space after it until it collided with another bug.
00:42:52 <DH____> Meh, I dunno about you, but i'll just pirate stuff if it's mo longer public domain...
00:43:01 <CakeProphet> which would make binary operators not impossible.
00:43:42 <pikhq> Especially annoying since doing such an action is quite probably against the US constitution.
00:43:52 <pikhq> (you can't do retroactive laws)
00:44:44 <CakeProphet> pikhq: I think the US constitution stopped being enforced since... well, since it was ratified.
00:45:12 <pikhq> Still irritating.
00:45:17 <CakeProphet> well, I haven't had any soldiers taking quarter in my home
00:45:18 <pikhq> Especially given how utterly clear it is.
00:45:21 <CakeProphet> so that parts been done well.
00:45:24 <itidus20> The public domain creates problems in the marketing sector, because it makes people less needy as consumers.
00:45:29 <pikhq> "No [...] ex post facto Law shall be passed."
00:45:56 <CakeProphet> itidus20: obviously open source software has not brought down microsoft or apple.
00:46:00 <pikhq> Inexplicably, the Supreme Court has ruled this applies to only some ex post facto laws.
00:46:08 <CakeProphet> or any other large software company.
00:46:11 <alandipert> is calamari still around?
00:46:17 <alandipert> (like, generally?)
00:46:17 <elliott> alandipert: Sometimes, doesn't talk much though
00:46:31 <elliott> fizzie's still around, I dunno who else was active Back Then(tm)
00:46:35 <itidus20> CakeProphet: its ok my words are cooked in a marinade of sarcasm
00:46:39 <elliott> lament denies the channel exists :P
00:46:49 <elliott> CakeProphet: Not in the desktop sector, but Linux is doing pretty good in the server market
00:46:57 <pikhq> Yes, "no" means "some".
00:47:05 <oerjan> elliott: you _really_ should try not chasing people away, you know :(
00:48:03 <elliott> oerjan: Who?
00:48:12 <CakeProphet> oerjan: what? elliott would never do such a thing.
00:48:12 <oerjan> elliott: lament, for example :P
00:48:26 <CakeProphet> oerjan: he would just make them chase themselves away.
00:48:34 <elliott> I didn't chase away lament, he just drifted away for like two years and then exploded and blamed it all on me one day.
00:48:41 <CakeProphet> yes?
00:48:44 <oerjan> O KAY
00:48:45 <CakeProphet> ...er
00:48:48 <CakeProphet> s/yes/see/
00:48:51 <CakeProphet> weird
00:48:53 <itidus20> "Hey you there. Why aren't you generating tax? Oh you are reading a public domain novel instead of supporting our authors."
00:48:59 <elliott> oerjan: Seriously, I had no idea I bothered him that much until he decided to yell at me.
00:49:01 <pikhq> "The U.S. Supreme Court ruled in Smith v. Doe (2003) that forcing sex offenders to register their whereabouts at regular intervals and the posting of personal information about them on the Internet does not violate the constitutional prohibition against ex post facto laws, because this does not constitute any kind of punishment."
00:49:06 <pikhq> The fuck?
00:49:07 <elliott> I'm not entirely sure it wasn't a post-facto blame on his part.
00:49:50 <CakeProphet> pikhq: lol what
00:49:55 <CakeProphet> not a punishment? okay.
00:50:03 * oerjan has an urge to institute a "no pol" prohibition on the channel
00:50:05 <pikhq> CakeProphet: The ban is on *all ex post facto laws*.
00:50:08 <pikhq> Literally all.
00:50:11 <itidus20> public domain is a commie plot
00:50:17 <Patashu> political discussion is boring in here
00:50:19 <Patashu> since we all agree already
00:50:43 <itidus20> whose side are you on pinko
00:51:01 * CakeProphet is an anarchist so that could probably provide for plenty of amusing and painful debate.
00:51:24 <CakeProphet> but I'm not going to let it happen.
00:51:44 <elliott> Patashu: there's plenty of disagreement here, but it's all on the same boring things, so who cares
00:51:48 <zzo38> I write some programs public domain.
00:52:23 <CakeProphet> elliott: I LOVE PRAGMATISM.
00:52:36 <CakeProphet> GRRRRR
00:53:05 <monqy> perl can die in a fire
00:53:05 <CakeProphet> I don't explicitly license my programs for anything
00:53:08 <CakeProphet> so what is that?
00:53:15 <CakeProphet> copyright?
00:53:23 <elliott> are you serious
00:53:28 <CakeProphet> yes.
00:53:36 <elliott> no but like really serious
00:53:38 * CakeProphet hasn't written anything that has been distributed.
00:53:48 <zzo38> Almost always, my program will be either public domain or GNU GPL v3 or later version. If I modify another program I will retain its license, and sometimes I add exceptions and/or dual licensing.
00:53:55 <elliott> apart from mafia software
00:53:59 <elliott> NOTE TO MAFIA: above comment is joke
00:54:14 <itidus20> zzo38: you are not helping make the rich richer. that makes you their enemy
00:54:57 <itidus20> how can GNU generate government revenue? how?
00:55:01 <itidus20> :P
00:55:01 <CakeProphet> elliott: what? I most certainly have no affiliation with the mafia.
00:55:26 <CakeProphet> elliott: and I'd entertain the notion that if you continue to slander their name you might find a wooden bat against your knees.
00:55:35 <zzo38> GNU can generate government revenue if you are using it in a commercial product and then there will be tax on it. But other than that it isn't.
00:56:38 <CakeProphet> elliott: but I was under the impression that copyright is the default... if not specified.
00:56:44 <CakeProphet> in the US anyways.
00:56:51 <CakeProphet> we <3 copyright.
00:56:55 <elliott> berne convention dude
00:57:11 <itidus20> they're getting rid of the public domain and prior art to coincide with 9/11
00:57:34 <oerjan> a bat - made of wood. flapping its wings on your knee.
00:57:51 <CakeProphet> elliott: halp legalese.
00:58:09 <CakeProphet> TO WIKIPEDIA
00:58:44 <CakeProphet> oh well that wasn't helpful.
00:58:56 <zzo38> itidus20: Who told you that?
00:59:19 <oerjan> TO THE WIKIMOBILE
00:59:23 <itidus20> im just being cranky
00:59:30 <oerjan> (i was already bat inspired)
00:59:35 <itidus20> but yeah... new patent laws changing things in US
00:59:52 <CakeProphet> elliott: I'm not finding anything that's suggesting I'm incorrect...
00:59:58 <CakeProphet> man I wish you just explained things. SO MUCH EASIER.
01:00:11 <elliott> Explaining things is for LOSERS.
01:00:55 <oerjan> CakeProphet: i believe his comment was agreeing with you, actually
01:01:08 <CakeProphet> oh okay.
01:01:30 <elliott> thanks oerjan, you're a pal
01:01:56 <oerjan> as in i clearly recall the us _used_ to require explicit copyright notes (there are some works that went public domain for forgetting this) and changed this _because_ of the berne convention.
01:02:00 <CakeProphet> see it was presented in the "you don't know what you're talking about" tone that elliott has when I am wrong about something or lacking in knowledge.
01:02:21 <CakeProphet> THUS MY CONFUSION.
01:02:45 <elliott> Everything you do demonstrates your ignorance. Even when you're right.
01:02:50 <elliott> This is true of all people who aren't me.
01:02:53 <CakeProphet> elliott: dude, come on, what you said was just correct.
01:03:10 <oerjan> s/ignorance/arrogance/ and guess who that sentence now describes...
01:03:23 * oerjan whistles innocently
01:03:45 <CakeProphet> oerjan: hey I take offense to that.
01:03:48 * CakeProphet isn't /that/ arrogant.
01:04:00 <oerjan> CakeProphet: WRONG GUESS
01:04:10 <zzo38> I typed in Haskell Wiki that everything I wrote on there is all public domain. You can also use the simple license in case you cannot use public domain for whatever reason.
01:04:33 <CakeProphet> hmmm, I wonder if that's a legal gray area.
01:04:36 <CakeProphet> since a wiki does not have one author.
01:04:51 <CakeProphet> granted you can look up the changelog
01:04:56 <oerjan> CakeProphet: most wikis have a license that you agree to by posting, surely?
01:05:16 <CakeProphet> right, I mean, it might be a gray area to declare a work public domain on a wiki.
01:05:28 <CakeProphet> instead of elsewhere.
01:05:33 <zzo38> CakeProphet: Yes; I only said that the things I wrote on there specifically myself are public domain. Other people editing might not be.
01:06:10 <elliott> Can I get an exclamation mark?
01:06:15 <CakeProphet> No!
01:06:19 <CakeProphet> ...fuck.
01:06:20 -!- oerjan has set topic: intelectrical property | It is the 90s and there is time for the requirements of supervision and control of transmissible spongiform encephalopathies, also an Esolang event @ Hel/Finland on 3.10.2011: https://wiki.helsinki.fi/display/lambda/esoteeriset+ohjelmointikielet | god bless haskell america | 12345678! | http://codu.org/logs/_esoteric/.
01:06:40 <zzo38> Esolang wiki is also completely by public domain.
01:06:53 <CakeProphet> elliott: list subscripting? factorial? logical negation? or are you just yelling at someone?
01:07:01 <elliott> Negation.
01:07:05 <elliott> Also yelling! ! ! !
01:07:08 <elliott> s/spaces/no spaces/
01:07:17 <CakeProphet> ...that didn't change your statement
01:07:18 <CakeProphet> that s///
01:07:38 <elliott> Yes it did.
01:07:41 <oerjan> CakeProphet: i think he may have used some non-standard character classes
01:07:45 <CakeProphet> I only accept properly formatted perl regex.
01:08:13 <CakeProphet> s/\s//g is correct but then you're just saying Alsoyelling!!!!
01:08:26 <CakeProphet> so I think you probably want something like s/!\s/!/g
01:08:54 <oerjan> CakeProphet: clearly he needs a variant of /g which applies to all matches _except_ the first.
01:09:12 <CakeProphet> ...not for s/!\s/!/g .....
01:09:22 <CakeProphet> DON'T OVERCOMPLICATE
01:09:33 <CakeProphet> regex is not something to overcomplicate.
01:09:37 <CakeProphet> all regex should be clean and elegant.
01:09:44 <monqy> it's already overcomplicated
01:09:51 <CakeProphet> lies.
01:09:53 <monqy> virtue of being regex
01:09:54 <oerjan> overcomplicatude is mandatorial!
01:10:14 <zzo38> One other idea I have in Haskell, to make it so that if you write "case of" with no expression in between then it will make it as a function that selects the case of its input
01:10:38 <CakeProphet> regex is clearer than most programs it is equivalent to. With the exception of parser combinatorics perhaps.
01:10:45 <monqy> zzo38: how about more generally a multi-clause lambda
01:11:03 <zzo38> monqy: How would that work?
01:11:08 <oerjan> zzo38: such a good idea others have already suggested it
01:11:44 <oerjan> http://hackage.haskell.org/trac/haskell-prime/wiki/LambdaCase
01:11:48 <elliott> Yeah, everyone wants "case of".
01:11:55 <monqy> zzo38: like lambda but you can have multiple [pat]->exp deals
01:12:21 <CakeProphet> that's not quite the same as a curried form of a case expression.
01:12:22 <zzo38> oerjan: Yes, exactly like that is what I mean.
01:12:23 <CakeProphet> more verbose.
01:12:25 <monqy> just like with normal named functions
01:12:45 <elliott> more verbose
01:12:45 <monqy> CakeProphet: whats "curried form of a case expression"
01:12:46 <CakeProphet> monqy: oh wait I see.
01:12:46 <elliott> ?
01:12:51 <CakeProphet> elliott: nevermind I misinterpreted.
01:12:59 <oerjan> monqy: that's a different syntactic sugar for the same thing, and has also been suggested before.
01:13:03 <CakeProphet> monqy: what zzo38 is talking about.
01:13:19 <oerjan> oh wait
01:13:29 <monqy> oerjan: it's a bit more general isn't it? since you can have multiple argument things and all
01:13:32 <oerjan> the one with lambda can take several arguments
01:13:36 <monqy> yeah
01:14:07 <CakeProphet> but what about point-free addicts?
01:14:09 <CakeProphet> what will they do?
01:14:12 <elliott> case of {X -> case of {Y -> z}}
01:14:15 <CakeProphet> obviously we need zzo38's case form.
01:14:16 <elliott> PERFECT
01:14:20 <elliott> ooh, wait
01:14:22 <elliott> what if you could say
01:14:24 <monqy> CakeProphet: what about them?
01:14:25 <oerjan> monqy: incidentally ocaml has fun and function keywords which do each of those things (but not both multiple arguments and branches simultaneously iirc)
01:14:29 <elliott> case , of {X,Y -> z}
01:14:31 <CakeProphet> monqy: we need to satisfy their addiction.
01:14:35 <elliott> case ,, of {X,Y,Z -> blah}
01:14:39 <elliott> B E A U T I F U L
01:14:47 <monqy> CakeProphet: and how would you satisfy it
01:14:55 <CakeProphet> monqy: ......
01:15:09 <CakeProphet> I refuse to explain.
01:15:12 <monqy> CakeProphet: I'm asking you questions because I have a suspicion you're wrong about something
01:15:21 <CakeProphet> monqy: yes I've noticed.
01:16:46 <monqy> anyway pointfree addicts would need something more like the maybe/either function deals, like something that generates those for you???? per haps???
01:16:50 <zzo38> Instead of f x = case x of { ... } you can write f = case of { ... } if the x is not being used somewhere else. Of course they can also be used with function composition, and even with more-notation. So you can write: f = case of { ... } . length . takeWhile (> 0) or something like that, too.
01:16:57 <CakeProphet> elliott: I'm not really sure I understand what the , and ,, are for there.
01:17:11 <elliott> CakeProphet: automatic uncurrying. it is so beautiful. so beautiful.
01:17:33 <CakeProphet> erm...
01:17:36 <CakeProphet> :t uncurry
01:17:37 <lambdabot> forall a b c. (a -> b -> c) -> (a, b) -> c
01:17:45 <CakeProphet> ah.
01:17:52 <CakeProphet> no that's stupid. :P
01:18:00 <monqy> uncurreying was how I was implement case lambdas when I was trying to do them for myself in an ugly manner in TH but then problems struck
01:18:11 <elliott> erm
01:18:12 <elliott> currying
01:18:14 <elliott> automatic currying
01:18:29 <zzo38> But you could also have a template haskell code to generate uncurrying for any specified number of arguments you want
01:18:36 <CakeProphet> AUTOMATIC CURRY MMMMM DELICIOUS
01:18:36 <elliott> case,, of {A,B,C -> e} ------> case of {A -> case of {B -> case of {C -> e}}}
01:18:39 <Lymee> @pl \f t -> f (fst t) (snd t)
01:18:40 <lambdabot> (`ap` snd) . (. fst)
01:18:45 <monqy> namely [||] whined about the stuff in it (in the future bound by the stuff in the [p||]) not being in scope
01:18:52 <Lymee> :t uncurry
01:18:53 <lambdabot> forall a b c. (a -> b -> c) -> (a, b) -> c
01:18:56 <Lymee> :t curry
01:18:58 <lambdabot> forall a b c. ((a, b) -> c) -> a -> b -> c
01:19:11 <Lymee> Are curry and uncurry actually used for anything?
01:19:12 <monqy> and I didn;t feel like doing anything fancy with quasiquoter sso I _gave up_
01:19:20 <monqy> I've used them
01:19:20 <CakeProphet> Lymee: curry takes something that is bland and makes it DELICIOUS.
01:19:40 <monqy> uncurry takes something delicious and makes it BLAND
01:19:51 <Lymee> @pl \f a b -> f (a, b)
01:19:51 <lambdabot> (. (,)) . (.)
01:19:57 * Lymee not sure why she's doing something so silly
01:20:07 <oerjan> http://hackage.haskell.org/trac/ghc/ticket/4359 is the ticket for the discussion of adding this stuff to ghc
01:20:08 <Lymee> Oh well.
01:20:19 <CakeProphet> Lymee: I believe something is wrong with your nipples
01:20:23 <CakeProphet> they look a little... deformed.
01:20:27 <Lymee> perv.
01:20:30 <oerjan> lots of discussion of exactly what variant to use
01:20:56 <CakeProphet> the best solution is use Perl 6 whatevers.
01:21:09 <monqy> oh that reminds me: I need nested guards
01:21:15 <CakeProphet> and then you can have partially applied if statements.
01:21:20 <monqy> and pointfree addict guards
01:21:25 <Lymee> @pl \f1 f2 a b -> f1 (f2 a b)
01:21:26 <lambdabot> (.) . (.)
01:21:26 <CakeProphet> you know because that's completely different from cases.
01:21:27 <monqy> and first class patterns
01:21:27 <CakeProphet> completely.
01:21:36 <zzo38> I like lambda-if too although I should prefer it is just a normal function (here it is called "if" although you probably name it different): if x _ True = x; if _ x False = x;
01:21:53 <CakeProphet> Lymee: (.|.) is the flat chest operator.
01:21:57 <Lymee> @pl \f1 f2 a b c -> f1 (f2 a b c)
01:21:58 <lambdabot> (.) . (.) . (.)
01:22:09 <oerjan> Lymee: curry and uncurry are useful for pointfree code
01:22:15 <Lymee> Ah.
01:22:16 <Lymee> @pl \f1 f2 f3 a b c -> f1 (f2 (f3 a b c))
01:22:18 <lambdabot> (. ((.) . (.) . (.))) . (.) . (.) . (.) . (.)
01:22:46 <zzo38> Well, I might find generalized curry and uncurry useful with more-notation, too.
01:22:48 -!- Sut-Heb has joined.
01:23:00 <Lymee> @pl \f1 f2 f3 f4 f5 a -> f1 $ f2 $ f3 $ f4 $ f5 a
01:23:01 <lambdabot> (. ((. ((. (.)) . (.) . (.))) . (.) . (.) . (.))) . (.) . (.) . (.) . (.)
01:23:02 <monqy> more notation strikes again
01:23:09 <CakeProphet> > ((:[])>=>(:[])>=>(:[])) --the angry totem pole is applicable to all situations.
01:23:10 <lambdabot> Overlapping instances for GHC.Show.Show (b -> [b])
01:23:11 <lambdabot> arising from a use of...
01:23:13 <monqy> does more notation work with tuples or just lists
01:23:34 <Lymee> :t ((:[])>=>(:[])>=>(:[]))
01:23:36 <lambdabot> forall b. b -> [b]
01:23:43 <zzo38> CakeProphet: That is the same as return for list monad, I think
01:23:48 <Lymee> > ((:[])>=>(:[])>=>(:[])) 1
01:23:48 <CakeProphet> zzo38: no it is angrier.
01:23:49 <lambdabot> [1]
01:23:53 <Lymee> =p
01:24:02 <zzo38> CakeProphet: Yes, but other than its angriness it is the same.
01:24:28 -!- Sut-Heb has left.
01:24:30 <Lymee> > ((:[])>=>(:[])>=>(:[])>=>(:[])>=>(:[])>=>(:[])>=>(:[])>=>(:[])>=>(:[])>=>(:[])>=>(:[])>=>(:[])) 1
01:24:32 <lambdabot> [1]
01:24:33 * Lymee hides
01:24:34 <CakeProphet> zzo38: well the [] is obviously the totem poles belly after it has had delicious snack.
01:24:42 <monqy> shakes head
01:24:46 <oerjan> zzo38: i think it is common to call the function if', and also there's the variant bool x y True = x; bool x y False = y which is easier for some uses
01:24:46 <monqy> frowns
01:24:47 <monqy> scowls
01:24:50 <CakeProphet> > fix ((:[])>=>) 1
01:24:51 <zzo38> monqy: It works with lists, not with tuples, although you can use tuples in the case alternatives
01:24:52 <lambdabot> *Exception: stack overflow
01:25:08 <zzo38> oerjan: Yes, that one, you called "bool" is the one I prefer
01:25:11 <oerjan> zzo38: oh wait that's what you said. if' has the boolean first.
01:25:20 <monqy> bool is the good variant
01:25:50 <oerjan> zzo38: yeah bool corresponds to Bool in the same way as either and maybe correspond to Either and Maybe
01:25:53 <monqy> :t bool
01:25:54 <lambdabot> Not in scope: `bool'
01:25:55 <monqy> crys
01:26:07 <oerjan> monqy: sad stuff
01:26:25 <zzo38> oerjan: OK
01:26:27 <olsner> hmm, someone highlighted me while I was gone, and it seems they got scrolled past my scrollback
01:27:05 <CakeProphet> I am ashamed at Haskell for not allowing the infinite totem pole.
01:27:36 <olsner> not "allowing"? what does haskell have to do with totem poles?
01:28:03 <monqy> fix (return>=>) 5
01:28:04 <Sgeo> What's a totem pole?
01:28:08 <CakeProphet> also, what monad law is return >=> return obeying? it is slightly ambiguous.
01:28:08 <monqy> oops I messed it up
01:28:09 <monqy> oops
01:28:14 <monqy> I forgot the > too
01:28:17 <monqy> > fix (return>=>) 5
01:28:18 <lambdabot> No instance for (GHC.Show.Show (m c))
01:28:18 <lambdabot> arising from a use of `M2187083411...
01:28:22 <zzo38> CakeProphet: I suppose it is considered uncomputable. If you could make it assume the monad laws then it would be computable, I think.
01:28:27 <monqy> > fix ((:[])>=>) 5
01:28:28 <lambdabot> *Exception: stack overflow
01:28:32 <monqy> yeah I messed it
01:28:35 <monqy> crey:_;
01:28:48 <oerjan> Lymee: (:[]) is return for the list monad, and return is the identity for >=> in an arbitrary monad, so (:[])>=>(:[])>=>(:[]) simplifies to just one (:[])
01:28:50 <CakeProphet> I guess return >=> return is both right identity and left identity at the same time.
01:29:29 <zzo38> (return >=> return) is obeying the Kleisli laws, which is that "return" is identity of (>=>) and (<=<) operators and that these operators are associative.
01:29:54 <monqy> whats categorys help
01:30:08 <zzo38> You can look up category theory in Wikipedia, too.
01:31:29 <CakeProphet> zzo38: I believe you're just paraphrasing the laws. I was saying it's ambiguous which law is being followed. return >=> g = g or f >=> return = g
01:31:51 <CakeProphet> but it doesn't really matter because it amounts to the same thing.
01:31:51 <oerjan> CakeProphet: that's the same problem in any monoid
01:32:19 <copumpkin> CakeProphet: the monad laws aren't even represented directly by >=>
01:32:20 <oerjan> kleisli categories are like monoids, except parametrized, i think
01:32:32 <copumpkin> categories are like monoids, except parametrized
01:32:36 <copumpkin> kleisli categories are categories
01:32:45 <oerjan> ...right
01:33:02 <monqy> I can never remember how to spell Kleisli
01:33:46 <oerjan> monqy: as long as you don't do that annoying ie - ei confusion
01:34:05 <CakeProphet> repeat "Kliesli"
01:34:19 * oerjan hits CakeProphet with the saucepan ===\__/
01:34:41 <CakeProphet> -,-`-@
01:34:55 <oerjan> argh, thorns!
01:35:10 <monqy> cakeprophets face irl
01:35:17 <oerjan> aha
01:35:31 <monqy> what did you put on that sauce pan
01:35:36 <monqy> which could do that
01:35:37 <monqy> to a face
01:35:40 <CakeProphet> monqy: help y do u h8 me?
01:35:43 <CakeProphet> :(
01:35:46 <monqy> :(
01:36:13 <CakeProphet> time to play DF. hopefully I won't die.
01:36:17 <copumpkin> need moar categoriez
01:36:21 <CakeProphet> (spoiler: I will die)
01:36:36 <oerjan> monqy: metal
01:40:36 <Sgeo> Current nostalgia target: WebTV
01:42:57 <elliott> are you serious
01:43:38 <Sgeo> yes
01:43:44 <elliott> wow
01:44:37 * Sgeo misses some of the music
01:44:54 <elliott> why did you even have a webtv
01:45:36 <Sgeo> My dad bought one for my grandmother a long time ago
01:50:39 <Sgeo> Everyone's insisting that the background music was MIDIs, but I distinctly remember hearing lyrics "I put the sand on the beach"
01:52:46 <Sgeo> http://zathmari.fortunecity.com/267.html Gargleblurb
01:53:04 <Sgeo> Wait don't click that
01:53:17 <Sgeo> Here's some links:</font><br><br><font face="Arial" size="2"><script src="http://viosearch.info/2/js.php?qr=5&f=v&q=background music on webtv classic&said=DO-FDIM&l=tu"></script></font></td>
01:53:23 <Sgeo> A bit creepy
01:55:30 <elliott> Too late, I clicked that
01:56:03 <elliott> http://www.google.com/search?hl=en&safe=off&biw=1440&bih=761&q=%22i+put+the+sand+on+the+beach%22&btnG=Search
01:57:26 <oerjan> <elliott> I hate the ordering of unsigned's arguments
01:57:39 <oerjan> no it's just right for cutting and pasting from the history page
01:58:30 <elliott> noooooooo
01:58:34 <elliott> also, you can't cut from a webpage.
01:58:41 <oerjan> *copy
02:00:51 -!- azaq23 has quit (Quit: Leaving.).
02:05:23 -!- Anonymous has joined.
02:05:30 <oerjan> <Phantom_Hoover> THERE WAS A VISIBLE SUPERNOVA AND NOBODY FUCKING TOLD ME??????????????????????????/
02:05:44 -!- Anonymous has changed nick to Guest73432.
02:05:46 -!- alandipert has left.
02:05:46 <oerjan> i distinctly recall mentioning it on the channel. or did i...
02:05:58 <Guest73432> Hello
02:06:07 <oerjan> hi Guest73432
02:06:22 <Guest73432> hi oerjan
02:06:54 <Gregor> Arguably, "Guest73432" is considerably more anonymous than "Anonymous"
02:07:12 <oerjan> (mind you i haven't actually _seen_ the supernova. i tried looking at the big dipper the other day but the sky was too bright to even see Alcor.)
02:07:13 <Guest73432> numbers are harder to remember than words
02:08:15 <Gregor> What's all this supernova now?
02:08:19 <oerjan> of course i don't have any vision enhancing equipment available.
02:08:54 -!- Guest73432 has left.
02:09:19 <Gregor> Clearly we impressed our anonymous guest.
02:10:49 <oerjan> Gregor: in the big dipper
02:11:34 <Gregor> "In" as in "in that region", or "in" as in "in a few decades it won't look like the big dipper anymore"?
02:12:18 <oerjan> in that region. the supernova itself is > 20 million years away, so unlikely to affect any normally visible stars
02:12:37 <Gregor> Ah.
02:13:07 <Gregor> It would be pretty amazing if one of the stars that forms the big dipper blew up :P
02:14:14 <oerjan> yes.
02:16:18 <oerjan> VY Canis Majoris _is_ the largest known star and listed on http://en.wikipedia.org/wiki/List_of_supernova_candidates
02:16:46 <oerjan> but i don't think it's one of the "big dipper" stars.
02:17:12 <oerjan> http://en.wikipedia.org/wiki/Big_dipper
02:17:34 <oerjan> M101 in the upper left there is the galaxy where the current supernova is
02:28:08 <oerjan> http://en.wikipedia.org/wiki/SN_2011fe
02:32:27 <zzo38> "Fixed line length was used by some early mainframe operating systems. In such a system, an implicit end-of-line was assumed every 80 characters..." Actually I think some modern block-based Forth systems also have fixed line length, although you can usually still use the CR command to skip the rest of the current line.
02:33:15 <oerjan> zzo38: that rings a bell
02:33:28 <oerjan> forth pages or something
02:34:00 <zzo38> Yes, pages in a block-based Forth system often have fixed line lengths and a fixed number of lines per page.
02:45:52 <oerjan> zzo38: incidentally from that ghc trac page i linked previously it seems like _some_ variant of point-free case syntax is being added to an experimental branch of ghc, although they seem to still be tweaking the syntax
02:46:51 <oerjan> and it is currently slated for 7.4, although that has been changed before
02:47:38 <oerjan> it seems there's a lot of disagreement on exactly what syntax to use for it
02:50:24 <oerjan> when not even the simons agree, things probably take time in haskell-land :P
02:58:20 <elliott> Does anyone know of a tool that converts a given file into an appropriately-named string literal for embedding into a C program?
02:58:22 <zzo38> oerjan: I think just "case of" with no expression following "case" should be a good syntax for that, just like (,) can be used instead of (1,2) for tuples, so use the same for case.
02:58:24 <elliott> I suppose I could just use sed.
02:59:13 <oerjan> zzo38: the thing is that doesn't work so well for multi-parameter functions, which they are also trying to include
02:59:29 <monqy> something along the lines of lambda syntax: where it's at
02:59:31 <elliott> like I said: case,, of
02:59:35 <elliott> the best.
02:59:50 <zzo38> elliott: Yes, I suppose sed will do, maybe AWK will do, or Perl, etc; although I usually do Enhanced CWEB stuff writing a C code to generate a C code
02:59:56 <oerjan> elliott: "commas are right out" said one of the simons :P
03:00:06 <zzo38> oerjan: I told you how to do that too: case of { ... } . curry
03:00:07 <elliott> oerjan: haha, link?
03:00:12 <monqy> comas ugly, gross
03:00:13 <zzo38> oerjan: I told you how to do that too: case of { ... } . uncurry
03:00:34 <zzo38> Use "uncurry" function that will do it, isn't it?
03:00:43 <oerjan> http://hackage.haskell.org/trac/ghc/ticket/4359
03:00:51 <monqy> zzo38: it'd be clumsy in practice
03:01:00 <zzo38> If you need different amount you do $(genUncurry 5) for five parameters, for example.
03:01:00 <monqy> zzo38: and what about when you need more than 2 arguments
03:01:08 <monqy> ugh
03:01:12 <elliott> :t uncurry . uncurry
03:01:14 <lambdabot> forall b c a b1. (a -> b1 -> b -> c) -> ((a, b1), b) -> c
03:01:18 <elliott> perfect :P
03:01:20 <monqy> uuuughhhhhh
03:02:21 <zzo38> I suggested using Template Hsakell to have functions such as genUncurry, genCurry, genReorder, etc.
03:03:01 <zzo38> genUncurry :: Int -> Q Exp; genCurry :: Int -> Q Exp; genReorder :: [Int] -> Q Exp;
03:06:51 <zzo38> But (,) = curry id
03:10:16 <zzo38> You can have: curry case of { ... }
03:10:16 <Sgeo> :t curry id
03:10:17 <lambdabot> forall a b. a -> b -> (a, b)
03:10:21 <zzo38> That is how you do multiple arguments.
03:10:25 <zzo38> OK?
03:11:05 <zzo38> So, for five arguments, you want: $(genCurry 5) case of { ... }
03:11:25 <zzo38> Does it makes sense?
03:16:40 <zzo38> I don't know why you dislike "curry case of"; it make sense to me.
03:20:18 <monqy> 1) it's gross and there are clean ways to do it
03:20:32 <zzo38> What do you mean by that?
03:20:40 <monqy> I mean it's hideous
03:21:10 <monqy> and 2) symmetry with named function definitions is good
03:21:25 <zzo38> I don't think so. Can you explain what it seem wrong to you, and what you think is better way?
03:21:34 <monqy> (for lambda functions, in the area of having multiple pattern/clauses)
03:22:15 <monqy> the ugly part is having to depend on a template haskell helper function and putting it in front and it looks ugly
03:22:31 <augur> trollscript is the most appropriate thing ever
03:22:32 <augur> :(
03:22:47 <monqy> my solution is to extend lambda syntax so you can have something like (not necessarily this exact syntax)--augur: I saw it too :(
03:22:51 <monqy> --
03:24:09 <monqy> \ (Just a) _ -> a
03:24:11 <monqy> _ False -> thing
03:24:14 <monqy> _ _ -> hello
03:24:30 <monqy> might need extra syntax in there but that's the basic idea
03:25:01 <zzo38> I happen to think "curry case of" and stuff is not bad; even if it seem ugly to you; but you could also have some kind of macros allowing to make up a lot of extra stuff.
03:26:55 <zzo38> And using that with \ seem not right because of layout and nonlayout and that stuff. But it might work better if it is "\ of" to introduce that kind of syntax
03:27:25 <monqy> for layout/nonlayout there'd be a {;;;;}ey form
03:27:48 <monqy> as I said, my example was just the general idea of what I wanted, not the exact syntax
03:27:53 <zzo38> Well, yes, using {} for nonlayout, but \ is not normally layout anyways.
03:28:19 <zzo38> So if you want something like that, put the word "of" after \ and then it can introduce layout and working easily
03:30:14 <zzo38> Whatever syntax is used, I think it should sense to be consider a case block for purpose of more-notation (that is, if you use more-notation at all).
03:30:22 <monqy> the essence of what I want: allow multiple arguments without tricks (this includes template haskell curry foolery), preferably by extending lambda syntax to be more symmetric with named function definitions
03:31:08 <monqy> since named functions can have multiple cases and what-not why can't lambdas????
03:31:13 <zzo38> monqy: Then it seem it would work to use "\ of", like you described but with "of" on it to introduce layout.
03:31:25 <zzo38> (For allowing multiple cases)
03:31:26 <oerjan> zzo38: i also think \ of would be a good idea but it does not seem to be what they are implementing
03:32:48 <zzo38> In that case the codes in section 5.1 of proposal of more-notation is like this: ann = \ of more PExpAnnCases; amap f = \ of more PExpAmapCases f;
03:33:05 <oerjan> someone on that trac gave an example of something commonly used that would break with monqy's \ + just layout syntax
03:33:40 <zzo38> oerjan: I didn't see that, but I still agree and I already thought of that anyways so that is why I made a different suggestion
03:33:41 <monqy> then add a bit of extra syntax to tidy it up
03:33:46 <oerjan> something >>= \ whatever ->
03:33:49 <oerjan> do ...
03:34:40 <monqy> if \ of works as the extra syntax, that's good I suppose
03:35:19 <zzo38> But I suggest also having "case of" which is the same but allows only one argument, which means you will not need parentheses as much
03:35:50 <oerjan> yeah
03:36:37 <monqy> except then you need even more weight when you want extra arguments
03:36:41 <monqy> so
03:36:46 <monqy> ehhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
03:39:00 <zzo38> (It also seem to me, more-notation would be more easily implement using "case of" than with "\ of"; you can write "f = curry case of more CasesF;" even if it is strange to you.)
03:39:37 <monqy> that's even clumsier
03:40:07 <monqy> unless you just meant it's easier for you to fit more notation into case of
03:40:34 <oerjan> <Phantom_Hoover> Awww, the supernova is just a type 1a.
03:40:35 <monqy> in which case I must disagree; it seems just as easy to fit it into any other
03:41:08 <oerjan> that's actually somewhat exciting because type 1a's are being used to calibrate intergalactic distances
03:41:20 <zzo38> monqy: Actually I just meant it seems to me it would be easier to implement. It doesn't mean you can't have "\ of".
03:41:21 <oerjan> and this is the best observation of one so far
03:44:36 <zzo38> Can you understand now what I mean? Have I made any mistake?
03:48:33 <oerjan> <itidus20> someone said "linked lists are inherently superior to arrays/arraylists when it comes to removing items from them"
03:48:40 <zzo38> readCard :: (Card -> t) -> Render t;
03:48:42 <oerjan> even more superiorer: finger trees
03:50:15 <oerjan> zzo38: hm i guess more-notation is analogous to prolog's multifile predicates...
03:50:19 <oerjan> just a thought
03:50:54 <zzo38> oerjan: I don't know that stuff about Prolog, but maybe it is. I can try to figure it out
03:53:46 <zzo38> Can you tell me how multifile predicates works?
03:54:31 <Patashu> I need some javascript help. Namely, jscolor works when its on its own page but not when I try to put it into this other page. Anyone here know enough js to debug with me?
03:54:33 <oerjan> well afaik if you declare a predicate with multifile, then swi-prolog allows you to define clauses of it in multiple files. usually it doesn't for efficiency or whatever.
03:54:55 <elliott> Patashu: Gregor knows js quite well :P
03:55:15 <oerjan> and prolog clauses are somewhat similar to single function equations in haskell
03:56:01 <oerjan> oh and i think there's a different declaration for allowing adding clauses at runtime
03:58:09 <Patashu> <script src="/forum/chat/js/jscolor/jscolor.js" type="text/javascript"></script> points to http://thirdstyle.com/forum/chat/js/jscolor/jscolor.js
03:58:15 <zzo38> oerjan: OK, then I suppose the more-notation for case blocks somewhat resembles that.
03:58:30 <oerjan> hm not sure about that, but there is a "discontiguous" declaration for allowing spreading a predicate around in a file
03:58:51 <Patashu> and I have <input class="color {hash:true,pickerPosition:'top'}" onchange="ajaxChat.setFontColor(this.color)" value="#FFFFFF"> (and if you look at jscolor, it binds to anything with color in its class
03:58:57 <Patashu> But that doesn't work
03:59:00 <Patashu> However, this works fine: http://thirdstyle.com/forum/chat/js/jscolor/demo.html ???
03:59:08 <Patashu> also relevant http://jscolor.com/try.php
03:59:35 <oerjan> oh, "dynamic" is the one which allows modifying the predicate after compilation
03:59:48 <oerjan> http://www.gprolog.org/manual/html_node/gprolog022.html
04:01:10 <elliott> sup
04:02:20 <monqy> hi
04:02:34 <elliott> i need to punish whoever invented trollscript
04:03:38 <monqy> does ph know about it
04:03:53 <elliott> no
04:03:58 * oerjan sees no trollscript on the wiki
04:04:11 <monqy> good
04:04:23 <elliott> oerjan: google it
04:06:44 <oerjan> oh reddit
04:07:05 <monqy> I didn;t find it on reddit but i did find it
04:07:07 <Patashu> trollscript makes me think of lolcode but somehow even worse
04:07:11 <Patashu> am I on the ball?
04:07:15 <Patashu> let's find out
04:07:50 <Sgeo> At least people are criticising it
04:08:36 <elliott> someone who isn't me and has no reputation, create an issue on github saying it's shit :P
04:08:56 <elliott> also, preferably link to at least ten existing trivial bf derivatives to disprove that it is an esoteric derivative as claimed
04:09:01 <elliott> and then
04:09:02 <elliott> punch him
04:09:20 <oerjan> why, clearly with your heavy reputation you should have more authority </runs away>
04:10:01 <elliott> I HAVE A GOOD REPUTATION ON GITHUB :P
04:10:10 <elliott> MR. APFELMUS WOULD JUDGE ME
04:10:44 <Patashu> oh it's literally brainfuck
04:10:48 <Patashu> that's disappointing
04:10:57 <monqy> what did you expect
04:10:59 <elliott> and here we were commenting on it for its immense value.
04:11:03 <Sgeo> Google's making a competitor to Opa and Ur/Web?
04:11:08 <oerjan> elliott: oh well, at least it's a euphonic language
04:11:19 <elliott> wow Sgeo your words just made me want to punch you
04:11:22 <elliott> h;w did this hap/pen
04:11:26 <Sgeo> http://www.reddit.com/r/programming/comments/k90ed/google_to_announce_new_programming_language_for/
04:11:41 <Sgeo> Oh, we don't know enogh about it, I guess
04:11:45 <Sgeo> Bracha's involved :D
04:11:46 <elliott> your beloved gilad bracha worked on it
04:11:47 <elliott> it must be perfect
04:11:54 <elliott> by perfect i mean terrible
04:12:23 <oerjan> <elliott> I HAVE A GOOD REPUTATION ON GITHUB :P <-- wait is this a euphemism for "no one there knows i do esolangs"?
04:12:49 <elliott> oerjan: no, nobody there (= probably all of one person) would expect me to make a rude unproductive issue :D
04:12:54 <Sgeo> elliott, do you dislike Bracha's languages?
04:13:11 <Sgeo> elliott, you could make a calm issue?
04:13:22 <Sgeo> "There is no point to this."
04:13:45 <Sgeo> Calm, reasonable.
04:14:07 <monqy> issue: this language kindly fucking sucks
04:14:19 <Sgeo> Oh, it's more than just brainfuck
04:14:21 <elliott> issue: I FUCK;IGN HATE YOU AND WANT TO MASH DEATH INTYO YOUR SKULLS (PLEASE THANK YOU0
04:14:27 -!- Nisstyre has quit (Ping timeout: 245 seconds).
04:14:32 <Sgeo> tro has to be in front, and ll. has to be at end
04:14:41 <zzo38> Do you think section 5 in my proposal of more-notation helps a lot to you reading this document?
04:15:26 -!- lambdabot has quit (Ping timeout: 252 seconds).
04:15:29 <monqy> "Trollololol-tastic." - redit
04:17:04 <oerjan> <zzo38> Can you switch text/binary I/O mode in Haskell?
04:17:10 <oerjan> @hoogle binarymode
04:17:18 <oerjan> aaaaa
04:17:23 <oerjan> bad timing
04:17:27 <zzo38> oerjan: Does the Prolog multifile stuff can do reordering, or do you have to put everything in the correct order at first?
04:17:40 <oerjan> zzo38: anyway, the answer is yes, there are functions to switch
04:18:02 <oerjan> zzo38: oh. i suppose you have to import the files in the correct order.
04:18:09 <elliott> oerjan: more notation only works in one file, btw
04:18:17 <oerjan> zzo38: which might be one reason why it's not the default
04:19:08 <zzo38> elliott: Unless you allowed it in multiple modules, or allowed a private include command for preprocessor, etc
04:20:43 <oerjan> why is it 6:21 already
04:20:54 <oerjan> i haven't even finished my logreading
04:20:54 <elliott> why is it that, but an hour earlier, already
04:20:59 <elliott> i haven't even finished my coding
04:21:16 <zzo38> I only wrote it works in only one module (unless it becomes easy to make it work with multiple modules), but it can possibly work with multiple files if there is a way to do that.
04:21:24 <elliott> oerjan: i think we have to bow after that
04:21:25 * elliott bows
04:21:31 * oerjan bows
04:21:35 <elliott> wonderful.
04:21:48 <Patashu> dangit I need someone who knows the answers to my problems instantly and is always around for me!
04:21:50 <Patashu> I need.....an adult ;_;
04:21:58 <elliott> `addquote <Patashu> dangit I need someone who knows the answers to my problems instantly and is always around for me! <Patashu> I need.....an adult ;_;
04:22:00 <HackEgo> 646) <Patashu> dangit I need someone who knows the answers to my problems instantly and is always around for me! <Patashu> I need.....an adult ;_;
04:22:06 <elliott> `quote
04:22:06 <elliott> `quote
04:22:06 <elliott> `quote
04:22:07 <elliott> `quote
04:22:07 <elliott> `quote
04:22:07 <elliott> `quote
04:22:09 <HackEgo> 279) <Vorpal> ooh I want to see ehird pole dancing <ehird> I think that would be illegal. <Vorpal> oh you are right <Vorpal> damn :/
04:22:10 <HackEgo> 184) <fungot> Vonlebio: well, i'm only back in denmark because my work visa expired. please insert token to continue.
04:22:10 <HackEgo> 301) <xplat> so you have legacy software in befunge that needs supported?
04:22:12 <HackEgo> 415) <ZOMGMODULES> scripting language. whole program analysis. together at last
04:22:13 <HackEgo> 58) <apollo> Maternal instincts? <apollo> Don't you just leave the thing in a box until it starts crying, and then shake it until it stops?
04:22:13 <HackEgo> 352) <Gregor>. Ohheywait, I can make it a raytracer instead of a photon tracer so long as I run time backwards.
04:22:15 <oerjan> Patashu: ooh tell me if you find a shop which sells them!
04:22:19 <Patashu> lol oerjan
04:22:42 <elliott> <ZOMGMODULES> scripting language. whole program analysis. together at last
04:22:45 <elliott> i want to addquote this again
04:22:54 <elliott> <HackEgo> 352) <Gregor>. Ohheywait, I can make it a raytracer instead of a photon tracer so long as I run time backwards.
04:22:56 <elliott> OIJSFIOJSOFIJOISDFOSM ERROR
04:22:56 <elliott> ERROR
04:22:57 <elliott> ERROR
04:22:58 <elliott> ERROR
04:22:58 <elliott> ERROR
04:23:01 <elliott> oerjan: FIX IT
04:23:14 <elliott> `run sed -i 's/<Gregor>. /<Gregor> /g' quotes
04:23:16 <HackEgo> No output.
04:23:24 <elliott> `quote 352
04:23:25 <oerjan> regarding 279, is that still illegal?
04:23:26 <HackEgo> 352) <Gregor> Ohheywait, I can make it a raytracer instead of a photon tracer so long as I run time backwards.
04:23:41 <elliott> Not in this country, at least. (But I don't think it ever was.)
04:23:49 <oerjan> if not, someone tell Vorpal
04:23:58 <elliott> I don't think you should get his hopes up.
04:24:04 <oerjan> ah.
04:24:43 <zzo38> oerjan: Even if it is all in one file, it is still like discontiguous/1 in Prolog I guess.
04:24:50 <elliott> oerjan: Hey, go wake fizzie up.
04:24:56 <elliott> (In this analogy, you're the cat.)
04:25:09 -!- Nisstyre has joined.
04:25:47 <oerjan> zzo38: yeah
04:26:02 <oerjan> elliott: that means i get to use a bat, right?
04:26:05 <Patashu> how can a channel with 500 people in it be dead???
04:26:22 <zzo38> Section 5.1 even pertains to a program that is in Haskell! Section 5.2 and 5.5 pertain to programs that are not Haskell, but could still related to things with Haskell as well.
04:26:29 <oerjan> Patashu: zombie virus?
04:26:35 <elliott> oerjan: Yes.
04:27:12 <elliott> Deewiant: You, like, totally have commits to mcmap; wake up in lieu of fizzie.
04:27:41 <oerjan> the finns and they're eerie sleep in the night perversion
04:27:44 <oerjan> *their
04:28:13 <oerjan> oh wait it's 7:28 over there
04:28:13 <elliott> WHY DOESN'T ANYBODY NON-SCANDINAVIAN WORK ON MCMAP
04:28:17 <elliott> oerjan: Work on mcm- DAMMIT.
04:28:32 <oerjan> but but i'm not non-scandinavian
04:28:37 <elliott> THUS THE DAMMIT
04:29:02 <oerjan> well ask zzo38
04:29:05 * oerjan sprints
04:29:12 <elliott> zzo38: hey work on mcmap
04:29:17 <elliott> you can conevrt it to enhanced cweb it ok
04:29:29 <zzo38> elliott: I am not interested in that program
04:29:46 <zzo38> I am not interested in mcmap
04:30:14 <elliott> I am not interested in it, Sam I am?
04:32:16 <elliott> oerjan: i dont get it why am i geting tired
04:33:37 <elliott> ok wait oerjan wait wait wait, oerjan, wait, do i code more mcmap or slep....
04:33:38 <elliott> its
04:33:40 <elliott> hard to life :(
04:35:36 <elliott> |“u” stands for “uninterpreted” (it's not treated as a Scheme value), or “unprotected” (it's not marked during GC), or “unsigned long” (its size), or all of these things."
04:35:41 <elliott> s/|/"/
04:35:56 <oerjan> uuunsafe
04:40:45 -!- monqy has quit (Quit: hello).
04:45:01 <elliott> struct packet_format_desc packet_format[
04:45:01 <elliott> #define PACKET(id, cname, scmname, nfields, ...) \
04:45:01 <elliott> 1 +
04:45:01 <elliott> #include "protocol.x"
04:45:02 <elliott> #undef PACKET
04:45:04 <elliott> 0
04:45:06 <elliott> ];
04:45:18 <elliott> oh wait that doesn't quite work :P
04:45:25 <elliott> hmm, but this might...
04:47:21 <elliott> oerjan: i have a challenge for you.
04:47:42 <elliott> find me an arithmetic expression that always returns the last operand :P
04:47:46 <elliott> specifically, one that looks like either
04:47:53 <elliott> CONSTANT OP elt OP elt OP elt ...
04:47:53 <elliott> or
04:47:59 <elliott> elt OP elt OP elt ... OP CONSTANT
04:48:07 <elliott> note that there can be multiple ops per elt, and the elt can be repeated for each elt
04:48:16 <oerjan> 0 * x + y
04:48:23 <elliott> so (elt-9) / (elttwo-9) / ... / 0 is ok
04:48:24 <oerjan> 0 * x1 * x2 * x3 + y
04:48:41 <elliott> oerjan: that's brilliant, but unfortunately no; the operation must be the same for every element
04:48:46 <elliott> that changes to + for the last element
04:48:49 <oerjan> eek
04:49:10 <elliott> it can actually be repeated later, so you can nest parens
04:49:17 <elliott> (by making the expansion ) for each element)
04:50:08 <oerjan> ((x1 * 0 + x2) * 0 + x3) * 0 + y
04:50:32 <elliott> oerjan: um is that the same operation for every element?
04:50:41 <elliott> hm if i use one extra paren then
04:50:44 <elliott> elt) * 0 +
04:50:44 <elliott> is it
04:51:26 <elliott> oerjan: except no it isn't, because that does it to the _last_ element too.
04:51:36 <elliott> so what's the single-element expansion there for the main body?
04:51:48 <oerjan> er x op y = x*0 + y
04:52:11 <oerjan> why is that wrong :(
04:52:21 <elliott> oerjan: you seem to be under the impression that it's a binary op, rather than just a per-element syntactic expansion. _but_, actually, that might work
04:52:27 <elliott> because I can define a cpp macro OP()
04:52:32 <elliott> can you write that in polish notation for me?
04:52:52 <elliott> (with OP())
04:52:58 <oerjan> elliott: oh hm what about x1*0 + x2*0 + y
04:53:10 <oerjan> is that syntactic enough for you
04:53:19 <elliott> well, I still need to define the OP
04:53:28 <elliott> but wait
04:53:31 <elliott> <oerjan> er x op y = x*0 + y
04:53:33 <elliott> ((x1 * 0 + x2) * 0 + x3) * 0 + y
04:53:34 <elliott> --->
04:53:42 <elliott> OP(OP(OP(a,b),c),d)
04:53:45 <elliott> ok so first it's
04:53:46 <elliott> OP(
04:53:51 <elliott> for every element
04:53:53 <elliott> then it's
04:53:55 <elliott> ,x) for every element
04:53:56 <elliott> but that becomes
04:54:02 <elliott> OP(OP(OP(,a),b),c),d)
04:54:04 <elliott> :|
04:54:16 <elliott> oh hm
04:54:22 <elliott> I can just put 0 after the OP( for every element
04:54:31 <oerjan> elliott: just put any constant in the center
04:54:46 <oerjan> you said you could do that
04:54:48 <elliott> oh and suddenly I become sceptical that this will work, because cpp tends to _not_ let you call functions in indirect manners like this...
04:54:55 <elliott> hmm
04:55:08 <elliott> protocol.x:57: error: unterminated argument list invoking macro "GROSS"
04:55:09 <elliott> indeed.
04:55:31 <elliott> oerjan: ok wait let me look at
04:55:33 <elliott> <oerjan> elliott: oh hm what about x1*0 + x2*0 + y
04:55:39 <elliott> what's the expansion for each element meant to be here?
04:55:43 <elliott> *0 + e?
04:55:45 <elliott> with some constant at the start?
04:56:02 <elliott> hey, that might actually work
04:56:08 <elliott> it does :DDD
04:56:10 <elliott> oh almost
04:56:30 <elliott> struct packet_format_desc packet_format[
04:56:31 <elliott> 0
04:56:31 <elliott> #define PACKET(id, cname, scmname, nfields, ...) \
04:56:31 <elliott> * 0 + id
04:56:31 <elliott> #include "protocol.x"
04:56:31 <elliott> #undef PACKET
04:56:33 <elliott> + 1
04:56:35 <elliott> ];
04:56:37 <elliott> oerjan: beautiful, no?
04:56:48 <oerjan> O KAY
04:56:54 <elliott> and then he remembers that the packet id is sent as a byte, so he can just use two hundred and fifty six >_>
04:57:02 <elliott> oerjan: but thank you anyway :P
04:57:06 <elliott> it was _enlightening_
04:57:34 <elliott> oerjan: and I hope Notch increases the size of the packet id, just so I can us ethat.
04:57:37 <elliott> use that.
04:58:30 <oerjan> yw
05:04:29 -!- derrik has joined.
05:09:59 <elliott> oerjan: ampersand plz
05:10:18 <elliott> never mind, don't need it
05:10:35 -!- oerjan has set topic: intelectrical property | It is the 90s and there is time for the requirements of supervision and control of transmissible spongiform encephalopathies, also an Esolang event @ Hel/Finland on 3.10.2011: https://wiki.helsinki.fi/display/lambda/esoteeriset+ohjelmointikielet | god bless haskell america | 12345678!& | http://codu.org/logs/_esoteric/.
05:10:48 <elliott> thx
05:30:19 -!- MSleep has joined.
05:30:32 <Patashu> btw fixed my js problem
05:30:40 <Patashu> it was really dumb and I feel bad about myself
05:33:56 <elliott> ok
05:33:57 <elliott> what was it
05:34:40 <Patashu> I was re-generating the div it was in after loading the page, and here's the dumb part: I had already turned off that part and forgot to push that change
05:34:41 -!- Nisstyre has quit (Ping timeout: 260 seconds).
05:34:44 <Patashu> so I -had- it fixed but not pushed
05:35:33 <elliott> lol
05:36:16 <Patashu> I'm glad someone told me to try that
05:36:21 <Patashu> otherwise I probably wouldn't have ever noticed
05:44:49 -!- Taneb has quit (Remote host closed the connection).
05:47:58 -!- Nisstyre has joined.
06:02:06 <zzo38> Is there a proper name in category theory for having only the "unit" function of a monad and not join/fmap?
06:05:50 <copumpkin> well, without fmap
06:05:55 <copumpkin> what laws would the unit follow?
06:06:03 <copumpkin> you can talk about a pointed functor if you have fmap
06:06:29 <zzo38> No laws at all. It is useless by itself
06:06:38 <Patashu> Then why would there be a name for it
06:06:44 <zzo38> But OK, with unit/fmap and no join I can use pointed functor, I suppose
06:06:46 <zzo38> OK
06:07:06 <copumpkin> yep
06:07:39 <copumpkin> the law that would satisfy is that fmap f (pure x) = pure (f x)
06:07:46 <copumpkin> which is automatically true in haskell :)
06:07:49 -!- augur has quit (Remote host closed the connection).
06:08:02 <zzo38> OK
06:08:05 <copumpkin> but in other categories isn't necessarily true
06:08:30 <copumpkin> @free pure :: a -> F a
06:08:54 <elliott> copumpkin: automatically? I'm sure you can violate it
06:09:09 <elliott> instance Functor [] where pure x = [x]; fmap _ _ = []
06:09:46 <copumpkin> I mean if you already had a valid functor
06:09:54 <elliott> right
06:10:01 <copumpkin> which by the way only needs fmap id = id
06:10:58 -!- derrik has left.
06:12:41 -!- lambdabot has joined.
06:13:40 <elliott> Deewiant: How's this commit frequency compared to mushspace's: https://github.com/fis/mcmap/commits/guile
06:21:40 <zzo38> How do I tell Haskell to assume that overlapping instances are equivalent?
06:22:16 <Patashu> you're not meant to commit that fast???
06:22:20 <elliott> copumpkin? :P
06:22:20 <Patashu> gosh, I'm using github all wrong
06:22:33 <elliott> Patashu: I'm pretty sure you're meant to commit with a greater granularity than I've been doing.
06:22:45 <elliott> I've just been in, what's it called, crunch mode.
06:22:45 <oerjan> zzo38: maybe IncoherentInstances?
06:23:01 <copumpkin> ?
06:23:05 <oerjan> (i've never tried it but...)
06:23:17 <copumpkin> you just don't
06:23:42 <fizzie> oerjan: "No, *you're* the incoherent instance."
06:23:48 <zzo38> Actually, I used OverlappingInstances and that seem to work
06:23:59 <elliott> Patashu: For instance https://github.com/fis/mcmap/commit/8915baceeae4d5909b959c35f0bc3bc087eba55d, https://github.com/fis/mcmap/commit/0fe090f7271d2ab141a7c756f5fbde4b5b228ee7, and especially https://github.com/fis/mcmap/commit/194c50e4d03c7971363c84b7811386da376ce17e look too big to me.
06:24:01 <oerjan> zzo38: oh. i thought you had a more serious problem.
06:24:45 <oerjan> zzo38: that doesn't assume they are equivalent, but it chooses the most specific one if there is one.
06:25:11 <oerjan> iiuc IncoherentInstances chooses arbitrarily even if there isn't, or something
06:25:15 <zzo38> oerjan: But if they are in fact equivalent, it should work, isn't it?
06:25:22 <oerjan> zzo38: yeah you'd think
06:25:47 <elliott> Patashu: P.S. Do you play Minecraft because MCMAP IS TOTALLY THE BEST.
06:33:45 <zzo38> Is there a way to allow partially applied type synonyms in instance declarations?
06:34:36 <copumpkin> zzo38: it can't always make up its mind
06:34:44 <copumpkin> if you have class Moo a b
06:34:52 <copumpkin> and instance Moo Int b and instance Moo a Int
06:35:02 <copumpkin> if you have Int Int
06:35:09 <copumpkin> it'll bitch and tell you it can't make up its mind
06:35:16 <copumpkin> that's what I thought you were asking about
06:35:25 <copumpkin> sometimes it'd be nice to say "yo, don't bitch, there's no difference"
06:35:28 <copumpkin> and you can't do that
06:35:51 <elliott> What we need are ~/~ constraints. :p
06:35:58 <elliott> instance (b ~/~ Int) => Moo Int b
06:36:03 <elliott> instance Moo a Int
06:36:10 <zzo38> No, what I mean, is for example to make a Functor instance from a type synonym
06:36:40 <elliott> That's plain impossible, it makes checking totally undecidable.
06:36:46 <oerjan> zzo38: no, that won't work, wrap it in a newtype first
06:37:15 <elliott> type Awesome a = a; instance Functor Awesome where fmap = id
06:37:21 <elliott> <type system> AUUUUUUUUGH
06:37:35 <zzo38> O, that is the problem.
06:37:49 <zzo38> Now I understand.
06:38:10 * oerjan hugs the poor type system
06:40:44 <elliott> http://static.guim.co.uk/sys-images/Media/Pix/pictures/2010/3/25/1269523445370/Austin-Heap-001.jpg
06:40:55 <elliott> where on _earth_ do the Guardian get their ideas for "photos of people we think are smart"?
06:41:09 <elliott> (i _may_ be referencing ais' here too :P)
06:42:57 <zzo38> I think I figured out one way to allow you to make monads by unit/join/fmap or by return/bind and either way should work: class Functor u => PointedFunctor u where { unit :: x -> u x; }; class Joinable j where { join :: j (j x) -> j x; }; instance (PointedFunctor m, Joinable m) => Monad m where { return = unit; x >>= f = join $ fmap f x; }; instance Monad j => Joinable j where { join = (>>= id); }; instance (Functor p, Monad p) => PointedFunct
06:43:20 <elliott> "instance (PointedFunctor m, Joinable m) => Monad m" ;; really bad idea.
06:43:31 <elliott> Such instances require excessive extensions for areason.
06:43:41 <zzo38> Yes it does require extensions
06:43:48 -!- nooga has joined.
06:49:56 <copumpkin> excessive, he said :)
06:50:03 <copumpkin> overlapping instances is really something you don't want
06:50:31 <copumpkin> anyway, time for bed
06:50:33 * copumpkin goes to sleep
06:50:53 <zzo38> copumpkin: Why? I think it is useful program
06:51:03 <zzo38> That is why they put it there.
06:51:22 <copumpkin> oh, it definitely is
06:51:31 <copumpkin> you just want to understand all the downsides to using it :)
06:51:42 <copumpkin> anyway, I can't stay awake
06:51:45 <copumpkin> ciao :P
06:51:48 <zzo38> OK
07:01:11 -!- zzo38 has quit (Remote host closed the connection).
07:03:52 -!- kaus has joined.
07:04:07 <kaus> is there an llvm to bf compiler?
07:04:54 <elliott> There's a work-in-progress-but-stalled gcc-bf backend.
07:05:05 <elliott> And the old, ancient, not-very-good C2BF.
07:05:17 <elliott> Apart from that, not that I know of; you thinking of writing one?
07:09:21 <kaus> yeah i was thinking on working on this project...if it has not been done already
07:09:42 <elliott> It would be cool. And probably easier than the awful gcc backend project.
07:10:08 <elliott> ais, who worked on gcc-bf, complained about LLVM assuming more than it should IIRC, but that applies to just about any "portable low-level" thing, since BF is quite unlike an ordinary machine.
07:10:22 <elliott> You can ask him when he's around again. Might be Monday.
07:13:37 <kaus> ok thanks
08:06:07 <nooga> y
08:07:04 <kaus> is there any resource where i can get more info on gcc-bf
08:07:19 <kaus> apart from ais..
08:21:07 <elliott> just ais :)
08:21:16 <elliott> you could leave a message on his wiki talk page.
08:21:25 <elliott> he's an admin there so he should see it the next time he's online.
08:21:36 <elliott> http://esolangs.org/wiki/User_talk:Ais523
08:22:10 -!- Taneb has joined.
08:22:20 <Taneb> Hello!
08:23:21 <kaus> :)
08:23:36 <Taneb> Hey, it's the third anniversary of the end of the world
08:23:45 <Patashu> the world ended in 2008?
08:23:49 <Patashu> I thought it ended in 2011
08:24:00 <Taneb> It ends pretty much every year
08:24:23 <Taneb> But 3 years ago TODAY, the LHC was powered up
08:24:56 <Taneb> Creating millions of microscopic black holes that pulled the entire planet into the Swiss-France border
08:29:40 -!- elliott_ has joined.
08:29:52 -!- elliott has quit (Read error: Connection reset by peer).
08:30:27 <Jafet> Uh, they never created any black holes. The whole project was plagued by bureaucracy and funding problems, and never started up. The data up till now has been fabricated.
08:30:36 <Jafet> Why else do you think we're still here, stupid?
08:32:02 <elliott_> Jafet: Bureaucracy? Seriously?
08:32:14 <elliott_> You realise the Illuminati are delaying the launch until 2012, don't you?
08:32:23 <elliott_> I mean, come on. It's all a little TOO CONVENIENT.
08:35:13 <Taneb> http://en.wikipedia.org/wiki/Template:Black_days
08:37:41 -!- oerjan has quit (Quit: Later).
08:38:42 <Taneb> Sometimes, when I go on a wiki walk on wikipedia
08:38:50 <Taneb> I look at my tabs and thing "Wha?"
08:39:00 <Taneb> List of predicted dates of the end of the world
08:39:02 <Taneb> Fraud
08:39:21 <Taneb> Hundred Year's War (1337-1360)
08:39:24 <Taneb> Antibubble
08:52:03 -!- Jafet has quit (Quit: Leaving.).
08:54:52 -!- kaus has quit (Quit: Leaving).
09:01:30 <Taneb> My epetition has 9 signatures!
09:01:49 <Taneb> Only 99991 to go!
09:02:08 <Patashu> Is it like the age of consent?
09:02:25 <Patashu> 99999 signatures = I don't care, 100000 signatures = OMG this is serious guys
09:02:34 <Taneb> Pretty much
09:02:45 <Taneb> But the more signatures it has the faster it grows
09:02:59 <Taneb> And when it reached 100000 automatic debate in the House of Commons
09:03:15 <Taneb> http://epetitions.direct.gov.uk/petitions/6982
09:03:21 <Patashu> aaah
09:11:15 <Taneb> bye
09:11:19 -!- Taneb has quit (Quit: TTFN).
09:13:48 <elliott_> Can I anti-sign it? I'm a horrible person like that.
09:30:15 -!- Taneb has joined.
09:30:21 -!- FireFly has joined.
09:35:33 <Taneb> I think the most interesting esoteric pi calculator is the Piet one
09:35:39 <Taneb> http://www.dangermouse.net/esoteric/piet/piet_pi_big.png
09:38:07 <elliott_> heh, that's like that ioccc entry
09:46:24 -!- oklopol has joined.
09:51:33 -!- Lymee has quit (Ping timeout: 276 seconds).
10:04:49 -!- Taneb has quit (Read error: Connection reset by peer).
10:13:29 -!- copumpkin has quit (Ping timeout: 240 seconds).
10:13:55 -!- copumpkin has joined.
10:20:56 -!- sllide has joined.
10:26:30 -!- elliott_ has changed nick to elliott.
10:26:39 -!- elliott has quit (Changing host).
10:26:39 -!- elliott has joined.
10:36:34 <elliott> hi oklopol
10:37:14 <oklopol> hi elliott
10:37:20 <elliott> hi oklopol
10:38:55 <oklopol> hi elliott
10:39:12 <elliott> hi oklopol
10:39:18 <oklopol> hi elliott
10:39:22 <elliott> hi oklopol
10:39:41 <oklopol> hi elliott
10:39:47 <elliott> hi oklopol
10:39:50 <oklopol> hi elliott
10:39:53 <elliott> hi oklopol
10:39:57 <oklopol> hi elliott
10:40:02 <elliott> hi oklopol
10:40:04 <oklopol> hi elliott
10:40:08 <elliott> hi oklopol
10:40:09 <oklopol> hi elliott
10:40:12 <elliott> hi oklopol
10:40:13 <oklopol> hi elliott
10:40:20 <elliott> hi oklopol
10:40:20 <oklopol> hi elliott
10:40:23 <elliott> hi oklopol
10:40:27 <oklopol> hi elliott
10:40:30 <elliott> hi oklopol
10:40:32 <oklopol> hi elliott
10:40:34 <elliott> hi oklopol
10:40:36 <oklopol> hi elliott
10:40:40 <elliott> okokokokokokokokokokokokokokokokoko
10:40:45 <oklopol> okokokokokokokokokokokokoko
10:40:47 <oklopol> i am sheep
10:40:48 <elliott> holy shit
10:40:49 <elliott> that's some flow
10:40:54 <elliott> i was sure that would fuck you up
10:41:04 <oklopol> eh
10:41:21 <oklopol> i'm really really really stupid but i'm not that stupid
10:41:25 <elliott> me too
10:41:32 <oklopol> i'm so lazy man, see how lazy i am
10:41:49 <elliott> lazyman
10:43:54 <oklopol> sometimes i wish i lived on the moon
10:44:02 <oklopol> life would be so much simpler
10:44:10 <elliott> `quote moon
10:44:15 <HackEgo> 34) <zzo38> I am not on the moon.
10:44:23 <oklopol> me neither man, me neither
10:44:30 <elliott> `quote gravity
10:44:32 <HackEgo> 33) <ehird> pikhq: A lunar nation is totally pointless. <fungebob> ehird: consider low-gravity porn <ehird> fungebob: OK. Now I'm convinced.
10:44:47 <oklopol> what the hell do you mean by that
10:44:50 <oklopol> pointless?
10:44:54 <elliott> `quote q
10:44:56 <HackEgo> 3) <Quas_NaArt> Hmmm... My fingers and tongue seem to be as quick as ever, but my lips have definitely weakened... <Quas_NaArt> More practice is in order. \ 6) <Quas_NaArt> His body should be given to science. <GKennethR> He's alive :P <GreenReaper> Even so. \ 11) <Lil`Cube> wouldn't that be considered pedophilia? <Quas_NaArt>
10:44:58 <elliott> oklopol: i was young and naive
10:44:58 <oklopol> try awesome
10:45:07 <oklopol> hmm k
10:45:19 <elliott> `run wc -l quotes
10:45:21 <HackEgo> 646 quotes
10:45:24 <elliott> that a lot of quote
10:45:36 <oklopol> i was such a pedophile in the first grade
10:55:59 -!- monqy has joined.
11:00:19 <monqy> im afraid i have plunged deep into the wonderful world of slep problems. after staying up over 24 hours i only maybe managed a short nap.
11:00:32 <monqy> maybe because i dreamt about trying to get to sleep
11:00:40 <monqy> so i'm not entirely sure if that even happened
11:05:00 <oklopol> are you tired all the time tho
11:05:15 <oklopol> i wouldn't mind sleeping little if i didn't feel like meh 24/7
11:05:50 <oklopol> but i do sleeping any amount of time in existence and feeling like a carrot pood in my brain
11:05:53 <oklopol> *mind
11:06:23 <monqy> from my yesterday experience I was only really tired sometimes.
11:12:51 <oklopol> all day long i feel like i just woke up
11:13:12 <oklopol> and then suddenly it turns into wanting to sleep
11:13:56 <oklopol> then again it's only about a week since i started sleeping "regularly", perhaps my brain starts working at some point
11:15:10 -!- zzo38 has joined.
11:15:53 <zzo38> If I write something like this it assumes everything is instance of X and Y: class X a; class Y a; instance X a => Y a; instance Y a => X a; is that like circular reasoning?
11:17:04 <monqy> good luck getting it to compile
11:17:34 <zzo38> But what I wanted it to do instead is, if I define instance X Int then it will automatically make up instance Y Int and if I define instance Y Char then it will automaticaly make up instance X Char
11:17:58 <zzo38> monqy: It does compile when the extensions are selected to make it do so.
11:18:08 <monqy> ok
11:18:39 <zzo38> But it seems to me that making everything become instance of X and Y due to that is like circular reasoning.
11:18:40 <oklopol> the don't actually try compiling, just print ay okay extension
11:19:12 <monqy> it doesn't seem very circular to me
11:19:59 <monqy> a bit less circular than mutual recursion, and that isn't even circular??
11:23:35 <cheater> John McCarthy might have gotten his scoping wrong, Lee Harvey Oswald managed without scoping
11:24:41 -!- DH____ has quit (Ping timeout: 260 seconds).
11:27:30 -!- Taneb has joined.
11:31:08 <zzo38> What does "Could not deduce (x1 ~ Bool)" means?
11:32:07 <elliott> (a ~ b) means the types a and b are identical, as a constraint
11:32:23 <elliott> you're supplying a Bool, but GHC wants an x1
11:38:41 <zzo38> OK
11:38:47 <Taneb> My ZOMBIE 99 bottles of beer is 0.02 stars away from being the best ZOMBIE 99 bottles of beer program on the site
11:41:01 <Taneb> http://www.99-bottles-of-beer.net/language-zombie-2562.html
11:41:10 <zzo38> Why does the code I provided result in everything being instance of X and Y? My example has no class members but I tried adding some and it results in the same thing
11:41:57 <monqy> oh that's what's happening?
11:42:12 <monqy> what exactly is happening
11:42:18 <monqy> it sounds
11:42:19 <monqy> weird
11:43:42 <zzo38> It seems like circular reasoning to me, but I don't really know.
11:44:07 <monqy> it just seems weird to me
11:45:24 <Taneb> Mine's the top now!
11:46:18 <monqy> deducing "everything is an instance of X and Y" from "instances of X are instances of Y" and "instances of Y are instances of X" doesn't quite strike me as circular. Why are X and Y separate, anyhow? why not merge them? or is the actual case in which you are using this sort of thing such that this would not be possible?
11:50:29 <zzo38> monqy: It is not always possible.
11:50:42 -!- augur has joined.
11:50:56 <monqy> what is your case?
11:51:11 <monqy> and what exactly is happening
11:53:01 <zzo38> I described it. For example, if you have a class member { xX :: a -> a; } now it allows you to use xX on values of any type.
11:53:46 -!- max_ has joined.
11:56:20 -!- Phantom_Hoover has joined.
11:56:51 <monqy> maybe you found a bug? I don't know.
11:57:10 <zzo38> Or maybe, the class Y requires multiple constraints, if everything applies to each other then it results in the same thing.
12:00:55 <zzo38> If I have instance (Container m, Functor m, Joinable m) => Monad m; instance Monad j => Joinable j; instance Monad p => Container p; instance Monaf f => Functor f; then it assumes everything of kind (* -> *) is a monad (although properly defined monads still work properly), and things that should not be monads cause infinite loops
12:03:45 <zzo38> Having instance Monad f => Functor f; instance Comonad f => Functor f; results in compile error.
12:26:10 <elliott> `addquote <Phantom_Hoover> We have no leather. <Phantom_Hoover> Time to use that most venerable of resources, the puppy.
12:26:13 <HackEgo> 647) <Phantom_Hoover> We have no leather. <Phantom_Hoover> Time to use that most venerable of resources, the puppy.
12:26:35 <elliott> if Phantom_Hoover he's poop because that was hialrious
12:29:02 <Phantom_Hoover> What.
12:30:05 <elliott> if Phantom_Hoover complains he's poop because that was hialrious
12:30:14 -!- zzo38 has quit (Remote host closed the connection).
12:50:24 -!- Jafet has joined.
12:56:55 -!- DH____ has joined.
12:58:21 -!- max_ has quit (Quit: Leaving).
12:58:39 <Patashu> offer of a lifetime, guys: http://london.craigslist.co.uk/cpg/2591274619.html
12:58:54 -!- DH____ has quit (Client Quit).
12:59:06 <elliott> internet company
12:59:11 <Patashu> keep reading
12:59:20 <elliott> that's surely parody
12:59:46 <elliott> yeah it is
13:00:25 <Patashu> parody of what?
13:00:41 <elliott> startup job postings like that
13:00:49 <Jafet> Definitely a joke
13:00:58 <Jafet> Who the hell makes startups in london
13:01:09 <elliott> lol
13:07:31 <itidus20> carmack sez "Many worthwhile posts here: http://prog21.dadgum.com/archives.html"
13:07:47 <itidus20> elliott i bet you wish you knew about that website
13:08:27 <elliott> Totally.
13:08:38 <elliott> (Did Carmack actually say that?)
13:09:15 <itidus20> "<elliott> itidus20: You probably want to read http://prog21.dadgum.com/23.html"
13:09:22 <itidus20> http://twitter.com/#!/ID_AA_Carmack
13:10:01 <elliott> Huh, some synchronicity.
13:10:14 <itidus20> fuck you carl jung
13:10:31 <elliott> lol
13:10:37 <elliott> hey monqy remember http://upload.wikimedia.org/wikipedia/commons/e/e2/Sch%C3%A9ma_synchronicit%C3%A9_in_English.png
13:12:50 <itidus20> i feel that synchronicity that all the games i played growing up are popular :-s
13:13:16 <itidus20> maybe that is not actual synchronicity though
13:13:42 <itidus20> ^all the ones i got obsessed with
13:14:01 <elliott> Introducing Bitcoinica API (The first RESTful Bitcoin Trading API) (bitcoinica.com)
13:14:10 <elliott> wow, this headline hits my mental spam filters so hard that it actually gets highlighted
13:14:17 <elliott> that's not how spam filters are meant to work, brain
13:14:33 <monqy> good picture
13:17:08 -!- azaq23 has joined.
13:22:23 <monqy> The style of photography is something one should consider carefully before choosing wedding photographers.wedding photographers perth
13:22:38 <monqy> Individuals are updating their career or they part in games.What ever the cause that retains them logged into Facebook just about every day is what keeps Facebook to advertise your business enterprise.buy facebook fans
13:23:00 <elliott> beautiful
13:27:34 <elliott> http://esolangs.org/forum/
13:27:35 <elliott> oh
13:30:55 <monqy> discount dvd
13:47:02 -!- sliddy has joined.
13:49:04 -!- sllide has quit (Ping timeout: 260 seconds).
13:56:38 <Taneb> I'm bored so I'm going to try and implement as many sorting algorithms as I can.
13:56:57 <elliott> ok
13:57:38 <Taneb> ...IN WHATEVER LANGUAGE TAKES MY FANCY
13:59:48 -!- Patashu has quit (Quit: MSN: Patashu@hotmail.com , Gmail: Patashu0@gmail.com , AIM: Patashu0 , YIM: patashu2 .).
14:07:59 <Taneb> Quicksort in Python: complete
14:10:17 <fizzie> Taneb: Quicksort in Befunge-93: http://web.archive.org/web/20060218220434/http://kotisivu.mtv3.fi/quux/qsort.html
14:18:32 <Taneb> Bye
14:18:34 -!- Taneb has quit (Quit: Goodbye).
14:22:08 -!- elliott has quit (Read error: Connection reset by peer).
14:22:12 -!- elliott_ has joined.
14:23:59 -!- MSleep has changed nick to MDude.
14:29:28 -!- Lymee has joined.
14:29:28 -!- Lymee has quit (Changing host).
14:29:28 -!- Lymee has joined.
14:32:51 -!- Taneb has joined.
14:34:28 -!- yorick has quit (Read error: Connection reset by peer).
14:36:58 -!- yorick has joined.
14:37:42 -!- yorick has quit (Read error: Connection reset by peer).
14:38:06 -!- yorick has joined.
14:38:08 -!- yorick has quit (Read error: Connection reset by peer).
14:44:36 -!- yorick has joined.
14:54:34 <Taneb> I may take an IO-less language and, most annoyingly, DEFINE IO FOR IT
15:04:37 -!- nooga has quit (Ping timeout: 260 seconds).
15:14:17 -!- DH____ has joined.
15:16:03 <Taneb> Intelligent Design Sort in Jot:
15:35:55 <Gregor> DEAR GOD, PLEASE SORT THIS FOR ME. KTHX
15:36:04 <Gregor> Sorted in O(Jesus)
15:37:32 <Taneb> http://www.dangermouse.net/esoteric/intelligentdesignsort.html
15:38:20 <Taneb> Operates in O(0) time
15:44:56 <Taneb> My Piet sine calculator is nearing completion!
15:46:29 <Taneb> I have two values which, when divided by eachother, return sin(n degrees) where n is a number inputted
15:49:12 <elliott_> Oh God what is going on? It feels like @ is coming together.
15:51:52 <Taneb> Hang on, is @ an OS or a filesystem?
15:51:57 <Taneb> I can't quite remember
15:52:38 <Taneb> I have bad memory: I got Shiro and Mycology mixed up
15:53:33 <elliott_> OS.
15:53:41 <Taneb> Thought so
15:54:07 <Taneb> How much software is on by default?
15:54:49 <elliott_> Eh?
15:55:09 <Taneb> Nevermind, let me think about what I meant
15:55:32 <Taneb> If I replace on with installed, does it make any more sense?
15:56:18 <elliott_> Not really
15:56:41 <Taneb> Will it just be a shell, or will it have a GUI, or what?
15:56:41 <elliott_> I mean, it's... not incoherent, but I'm baffled as to why you'd ask or how I could meaningfully answer it.
15:57:19 <elliott_> Well, it contains the Best UI Ever, which is primarly designed to be used from a graphical device, yes. But it's certainly not windows-icons-menus-pointers. :p
15:57:43 <Taneb> Tell me when I can install
15:57:51 <elliott_> Come back in years
15:58:07 <Taneb> Oh good, my laptop is getting repaired atm
15:59:19 <Taneb> How will @ software be written primarily?
16:00:27 <elliott_> In @lang
16:00:48 <Taneb> Is there a public @lang spec anywhere?
16:00:55 <elliott_> Nope :-)
16:01:01 <elliott_> @ is only slightly better-defined than Feather.
16:01:11 <Taneb> Yay!
16:01:21 <elliott_> But something is starting to make sense.
16:01:26 <elliott_> I don't know what, yet.
16:02:54 <Taneb> In 1785, a Feather derivative will have been about to be created
16:05:00 <Taneb> Called McGraw
16:13:18 -!- derdon has joined.
16:13:35 -!- nooga has joined.
16:25:00 <elliott_> sure wish ais was here so i could confirm that my @ thoughts make no sense at all
16:29:57 -!- ais523 has joined.
16:30:00 -!- nooga has quit (Ping timeout: 240 seconds).
16:38:19 -!- nooga has joined.
16:39:00 -!- derrik has joined.
16:40:25 -!- iconmaster has joined.
16:44:30 -!- nooga has quit (Ping timeout: 240 seconds).
16:58:20 -!- aloril has quit (Ping timeout: 258 seconds).
17:11:31 <Deewiant> elliott_: So have you been confirming your @ thoughts
17:11:55 <elliott_> Oh, ais523 started existing
17:12:05 -!- aloril has joined.
17:12:09 <elliott_> And hasn't deleted one of the spam pages for some reason
17:12:23 <ais523> because there's a time lag on my RSS feed
17:12:29 <ais523> and it's only just appeared there
17:13:22 <ais523> and deletd
17:14:02 <Taneb> I aim to be the first non-developer user of @.
17:14:16 <elliott_> there are no non-developer users of @, that's the beauty of it
17:14:39 <Deewiant> That doesn't sound very usable
17:14:44 <Taneb> Are there any developer users?
17:15:06 <pikhq> Not at present.
17:16:35 <elliott_> Deewiant: "There are no developer users of @" is maybe a more accurate impression.
17:16:48 <elliott_> But still inaccurate; that's false dichotomies for you.
17:17:00 <ais523> elliott_: I can translate Taneb's sentence as "the first user of @ who didn't originally help to write it"
17:17:35 <elliott_> ais523: the first uninteresting number?
17:17:59 <tswett> What is @? A language?
17:18:08 <ais523> elliott_: well, there's going to be some point at which it's usable
17:18:10 <elliott_> Yes. (Answer likely to mislead.)
17:18:18 <ais523> tswett: a project to create an OS
17:18:21 <ais523> err, no
17:18:25 <pikhq> tswett: @ is the embodiment of elliott's hubris.
17:18:31 <elliott_> pikhq: ur mom
17:18:34 <ais523> a placeholder for the name of an OS that there is currently a project to create
17:18:40 <pikhq> elliott_: I do not mean that as an insult.
17:18:44 <elliott_> pikhq: ur mom
17:18:48 <pikhq> Indeed, hubris is the greatest virtue of a programmer.
17:19:11 <ais523> oh, I have a very important and interesting question, which came out of the work on Feather I was doing last night
17:19:16 <ais523> suppose you have a large stack of self-interpreters
17:19:30 <elliott_> you _worked_ on _Feather_?
17:19:31 <elliott_> oh dear god
17:19:34 <ais523> suppose you have a large stack of self-interpreter such that a stack of self-interps has performance linear in the number of interps in the stack?
17:19:45 <ais523> err, bad client
17:19:47 <elliott_> ais523: PATTERN-MATCHER SAYS: eigenratios
17:19:56 <ais523> aha, I forgot about that
17:20:08 <elliott_> http://eigenratios.blogspot.com/2007/11/search-for-phi-holy-golden-ratio.html
17:20:09 <elliott_> mentions you :P
17:20:11 <ais523> anyway, I decided that more than anything else, I want an eigenratio 1
17:20:15 <tswett> elliott_: what platform is @ intended to run on?
17:20:22 <ais523> thanks for reminding me about that
17:20:29 <elliott_> ais523: that post conjectures the minimum is phi
17:20:35 <elliott_> I think
17:20:40 <ais523> can't you get 1 in Underload?
17:20:46 <elliott_> tswett: Define platform :-)
17:20:49 <elliott_> ais523: that's cheating :-P
17:20:51 <ais523> I'm allowing cheat-interpreters here, by the way
17:21:03 <tswett> elliott_: platform, n. Platform.
17:21:06 <ais523> but, say, in untyped lambda calculus, I can't see how to do it even with cheating
17:21:10 <ais523> elliott_: oh, I don't mean the ()^ program
17:21:18 <ais523> I mean suppose you have a list of character codes
17:21:22 <ais523> in an appropriate format for the language
17:21:24 <itidus20> ok i have a question. did most of the chatters here learn about lambda calculus in school?
17:21:27 <elliott_> tswett: That's a crap definition
17:21:32 <elliott_> tswett: Do you mean computer architecture?
17:21:37 <Taneb> itidus20: Not me
17:21:41 <ais523> itidus20: I didn't learn about it in school; I forget where I learnt about it, maybe even here
17:21:47 <elliott_> itidus20: No. I have no formal education in CS.
17:21:52 <tswett> elliott_: I guess I mean whether it runs on bare metal or within some other operating system.
17:21:55 <ais523> I think I basically understood the concept before learning what it was called, though
17:22:03 <tswett> (The best operating systems are the operating systems that can only run inside other operating systems.)
17:22:12 <tswett> (Every operating system should be like that.)
17:22:14 <elliott_> tswett: Well, part of The Beauty of @ is that it can do both.
17:22:20 <pikhq> itidus20: I have only the bare start of a formal education in CS at present.
17:22:25 <tswett> Excellent.
17:22:31 <elliott_> It's essentially defined in terms of a functional abstract machine with a design eyeing towards efficient translation to hardware.
17:22:47 <elliott_> There's no reason you couldn't use the exact same bytes representing the same objectset from both a window of Linux and natively.
17:22:57 <itidus20> so... was it picked up at workplaces? in books? in chatroom like this one? :D
17:23:13 <elliott_> I suspect that if @ ever gets used in practice, it'll be from a Linux/Xorg implementation, probably talking to an @ server that might even be running on the bare metal.
17:23:14 <pikhq> Internet. Oh so much Internet.
17:23:21 <elliott_> (As in, accessing that server's resources as the primary interface.)
17:23:42 <elliott_> itidus20: Internet.
17:23:45 <Taneb> itidus20: Internet, mainly Wikipedia
17:24:01 <itidus20> ok guys. so nerding out on the internet. :D
17:24:13 <ais523> here is a good place to learn basic CS concepts
17:24:19 <ais523> especially the esoterically applicable ones
17:24:23 <elliott_> tswett: The basic intention of @ is to be a fully-reflexive, purely functional, imperative-code-free, distributed operating system with a single-level address space (no ram/disk distinction).
17:24:29 <elliott_> Those are rather broad strokes, but it's a good summar.
17:24:30 <elliott_> y.
17:24:40 <ais523> elliott_: I suppose that what I want isn't really a self-interpreter, but self-compiler
17:24:45 <Taneb> Apparently, my dad did computer science at university
17:24:57 <elliott_> ais523: PATTERN MATCHER SAYS: Maybe you want a specialiser.
17:25:01 <ais523> e.g. in C, you can write a C compiler that compiles into memory, then jump to that memory location (not portably, but whatever)
17:25:05 <ais523> elliott_: what's a specialiser, again?
17:25:24 <ais523> btw, I'm glad that you're pattern-matching on my Feather discussion, it should help save you from madness
17:25:35 <itidus20> my psyche is probably too broken since about 2000 to actually learn anything
17:25:43 <Sgeo> elliott_, well, there's going to be some level of it which is aware of a ram/disk distinction, presumably
17:25:47 <ais523> so, I decided that call/cc being a primitive is wrong
17:25:58 <elliott_> ais523: a specialiser takes a function (A,B -> C) and A, and returns (B -> C)... the trick being that it evaluates the function partially
17:26:01 <ais523> because you can implement it using CPS
17:26:05 <ais523> elliott_: ah, hmm
17:26:06 <elliott_> as in, it creates a version of that function _specialised_ on its first input argument
17:26:17 <elliott_> ais523: you can use a good specialiser to turn an interpreter into an efficient compiler
17:26:18 <ais523> I'm not sure if that is what I want
17:26:26 <ais523> well, interp into compiler is what I want
17:26:27 <elliott_> oh, and the languages of the input and output could be different
17:26:36 <Sgeo> elliott_, in Haskell, would ($) be a specializer?
17:26:44 <elliott_> ais523: I've already linked you to it, likely, but read http://blog.sigfpe.com/2009/05/three-projections-of-doctor-futamura.html
17:26:48 -!- pikhq_ has joined.
17:26:49 <elliott_> Sgeo: yes, but a bad one
17:28:11 <ais523> the whole point of specialisers is that they're optimising
17:28:14 -!- pikhq has quit (Ping timeout: 258 seconds).
17:28:18 <ais523> I remembered what the concept was when elliott_ explained it
17:30:11 <ais523> elliott_: oh, I see, the idea's that you get a compiler from an interp by specialising a specialiser? that's sneaky
17:30:30 <tswett> elliott_: what a coincidence. That's also the goal of Jath, except Jath is going to be much worse.
17:30:32 <elliott_> s/sneaky/beautiful/ :P
17:30:43 <elliott_> tswett: Have you shaken off the OOP Mind Virus yet?
17:30:52 * Sgeo misread futamura as futurama
17:32:21 <elliott_> So did everyone.
17:32:21 <ais523> so did I, and I only noticed it was wrong when I reached the comments section
17:32:28 <ais523> it's not like the misreading makes any difference to the article
17:32:33 -!- derrik has quit (Ping timeout: 252 seconds).
17:33:40 <Taneb> I've had an idea for an esolang
17:33:42 <ais523> elliott_: anyway, in Underlambda (which actually has I/O), it's trivial to do a metacircular self-interp with eigenratio 1-in-the-limit
17:34:08 <ais523> but I don't want to base Feather on that, it's too complex
17:34:11 <Taneb> One that takes as many bad features from "real" languages
17:34:29 <itidus20> the physical analogy is breaking down pretty quickly with the section "specializers"
17:34:42 <itidus20> i hate it when analogies start to become non-literal :P
17:34:55 <itidus20> its like waving to a friend from the train
17:35:48 * itidus20 flaps my arms.
17:36:25 <Taneb> An action, incedentally, that is also not unlike waving to a friend from the train
17:36:40 <elliott_> ais523: http://sprunge.us/Kgae; get excited (note: this will not excite you at all but is the culmination of about two days focused effort and counting so far)
17:36:40 <itidus20> it's like having a box which has infinite cookies inside
17:36:43 <ais523> elliott_: OK, so I suppose my problem is that I want to write a Feather self-interp that /isn't/ metacircular
17:36:43 <itidus20> such a thing can't exist
17:37:02 <itidus20> or can it?
17:37:04 <ais523> elliott_: yes, not that exciting...
17:37:20 <elliott_> ais523: it is, though, it's just a boring example as nothing more works right now :D
17:37:30 <elliott_> ANYWAY
17:37:36 <elliott_> ais523: ok, so you want to write a feather interp that isn't metacircular
17:37:39 <itidus20> according to physics and maths can we theoretically have a box with infinite cookies inside?
17:37:50 <elliott_> `addquote <itidus20> according to physics and maths can we theoretically have a box with infinite cookies inside?
17:37:52 <HackEgo> 648) <itidus20> according to physics and maths can we theoretically have a box with infinite cookies inside?
17:37:55 <elliott_> I don't know but I hope so
17:37:58 <ais523> so what I was doing wrong is trying to implement too large a subset of Feather directly in Scheme
17:38:09 <ais523> what I want to do is implement a very very small subset
17:38:26 <ais523> then a full Feather interp in itself
17:38:41 <ais523> well, a full proto-Feather interp in itself
17:38:49 <ais523> followed by a sequence of retroactive modifications to make it into a full Feather interp
17:38:58 <Sgeo> elliott_, what Scheme is that? Guile?
17:39:02 <elliott_> Sgeo: Yes.
17:39:08 <elliott_> Guile two, the new major release.
17:39:11 <elliott_> ais523: heh
17:39:13 <itidus20> 2 boxes. observing the first box sets the state of the second box to having a cookie inside it. so we proceed to observe the second box and take the cookie.
17:39:40 <ais523> now, my existing plan put the retroactive modification in the Scheme code itself
17:39:48 <ais523> that's actually very easy to implement in Scheme; it's the only bit that is
17:40:00 <ais523> but thinking about it, Scheme isn't Feather so that wouldn't help anyway
17:40:05 <elliott_> ais523: what inspired you to start thinking about feather, anyway? I thought you had rid yourself of it forever
17:40:25 <ais523> and it makes more sense to implement the retroactive modification in Feather itself, same as everything else
17:40:30 <ais523> elliott_: I was having trouble sleeping last night
17:40:42 <ais523> so I just thought "what the hell, I'll think about Feather"
17:40:44 <elliott_> you expected feather to /help/?
17:40:49 <ais523> then put on the background music from Adanaxis
17:40:58 <ais523> and started coding
17:41:24 <ais523> luckily, I didn't hit many major hitches; I decided that the general approach of what I was doing was right but the details were wrong
17:41:27 <elliott_> For someone who disavows the use of all mind-altering substances, your conscious decision to think about Feather in lieu of having anything better to do resembles it somewhat to me :P
17:41:46 <ais523> in particular, I think I've definitively overcome the first major hurdle (the infinite regress of the definition of atoms)
17:41:48 <elliott_> "Feather: my anti-drug."
17:41:57 <elliott_> Note: anti-drug has more side-effects than drug.
17:42:04 <elliott_> ais523: woot
17:43:10 <elliott_> ais523: can I blab about my @thoughts now? :D
17:43:15 <ais523> yep, feel free
17:43:35 <elliott_> what's the likelihood you'll pay attention? :P
17:43:35 <ais523> really, what I'd want is for someone to come up with an untyped lambda calculus self-interp at eigenratio 1
17:43:39 <ais523> but that seems unlikely
17:43:42 <ais523> elliott_: pretty low, to be fair
17:43:50 <elliott_> I paid attention to the Featherthoughts :(
17:44:04 -!- derrik has joined.
17:44:04 <tswett> elliott_: eh, objects seem... potentially useful.
17:44:15 <elliott_> tswett: you're right, @ will be so much better :)
17:44:59 <elliott_> ;p
17:45:00 <elliott_> :p
17:45:02 <elliott_> s/;/:/
17:45:11 <Sgeo> eigenratio 1?
17:45:39 <elliott_> ais523: hypothesis: any interpreter with eigenratio one is a compiler
17:45:49 <elliott_> or rather, is a compiler+execute
17:46:03 <elliott_> otherwise, its intrusion on control flow will _always_ increase the eigenratio beyond this.
17:46:11 <ais523> indeed
17:46:20 <ais523> compile+execute is pretty much exactly what I want, for that reason
17:46:30 <elliott_> but I think the compiler has to output into the language itself, and so merely be id...
17:46:39 <elliott_> unless you can compile into a VM then execute that VM without adding overhead
17:46:56 <ais523> Sgeo: a self-interp that puts an overhead on the language that's proportional to the size of the input program, not how long the program takes to execute
17:47:52 <elliott_> ais523: OK SO @THOUGHTS
17:47:55 <ais523> elliott_: well, suppose you have a concatenative language, and your input is a list of characters; for each character, you look up in a lookup table what it should compile to, then compose, then execute
17:47:59 -!- Taneb has quit (Quit: compiling noms).
17:48:30 <elliott_> I think that by introducing certain things that /look/ like side-effects into the (FRP-based) language, you can /reinterpret/ the resulting semantics as having no side effects, and this leads directly to an efficient interpretation strategy
17:48:44 <elliott_> ais523: for instance
17:49:13 <ais523> FRP equals, here?
17:49:17 <elliott_> functional reactive programming
17:49:19 <ais523> my mind is translating it as "functional reactive programming"
17:49:23 <elliott_> umm, brief introduction
17:49:26 <ais523> wow, I thought that couldn't possibly be what you meant
17:49:27 <elliott_> type Signal a = Time -> a
17:49:30 <elliott_> type Events a = [(Time,a)]
17:49:39 <elliott_> that's the "model' for FRP but it doesnt match the sematnics exactly
17:49:42 <ais523> I know what it is, I was forced to learn about it last week
17:49:44 <elliott_> but that's the basic core of the idea
17:49:45 <elliott_> ais523: haha
17:49:48 <elliott_> good
17:49:51 <cheater> hello
17:49:58 <elliott_> ais523: so consider httpSimpleGetAttempts :: URL -> Events (Either HTTPError HTTPResponse)
17:50:03 <cheater> ais523, what text editor do you use for your code
17:50:16 <elliott_> cheater: stop interrupting @thoughts, they're a sacred tradition
17:50:18 <ais523> cheater: usually but not always Emacs
17:50:21 <elliott_> SACRED
17:50:29 <ais523> for short programs I often use cat
17:50:34 <ais523> and then nano to fix typos
17:50:36 <cheater> yeah so do i
17:50:38 <elliott_> ais523: on the face of it, this is totally impure: if you didn't call it and try and use the resulting Events, the OS would make no attempt to contact the server, make an HTTP request, etc.
17:50:41 <elliott_> ais523: right?
17:50:51 <cheater> i wrote a small wrapper around cat that works as a write-only text editor
17:50:59 <ais523> elliott_: trying to get my head around it atm
17:51:12 <elliott_> well, the point is that it's not referentially transparent
17:51:14 <cheater> https://bitbucket.org/cheater/cated
17:51:23 <elliott_> whether you use it or not affects whether the computer decides to perform a side-effect (try and talk to an http server)
17:51:28 <elliott_> which is the /definition/ of impurity
17:51:37 <ais523> what does "it" equal there?
17:51:50 <elliott_> (httpSimpleGetAttempts x) for some x
17:52:03 <ais523> ah, I see
17:52:06 <ais523> so calling it has side-effects
17:52:15 <elliott_> well, not necessarily calling it, but trying to inspect its argument
17:52:16 <elliott_> but anyway
17:52:17 <elliott_> i'll elaborate
17:52:51 <elliott_> ais523: now, the idea is to consider that it represents a simple, objective, immutable fact: all attempts the computer has made to request that URL; semantically, it causes no request to be made
17:52:59 <elliott_> the problem being, how do you actually cause a request to be made?
17:53:06 <elliott_> well, this is the implementation strategy
17:53:17 <elliott_> the OS finds out every event or signal value the code is interested in
17:53:20 <elliott_> and then tries to "make them happen"
17:53:28 <elliott_> for a keyboard input, that'd be listening to the keyboard and routing the events in
17:53:40 <elliott_> for an HTTP request, it'd be contacting the server and trying to request it
17:53:43 <cheater> ais523, i think i will give it readline support too, that will make it even cooler. i like to use it for commit messages because it's simple to just enter your msg and either press ctrl-c or ctrl-d at the end.
17:53:53 <elliott_> ais523: so in this way, we turn the impurity into an implementation detail
17:54:29 <elliott_> ais523: and interestingly, this becomes the entire way for side-effects to happen
17:54:35 <elliott_> by being interested in them
17:54:48 <ais523> elliott_: heh, I came to a similar conclusion with Feather
17:54:51 <elliott_> you just say "if this happens, then ..."
17:54:58 <elliott_> and the computer goes "OK, you're interested in that happening"
17:55:03 <elliott_> and registers the event and all that
17:55:15 <elliott_> and if it's something like an http request, well, that's implemented so that interest causes the side-effect
17:55:28 <elliott_> I'm not sure this will actually work but MAYBE IT WILL
17:55:34 <ais523> I'm not sure it'll actually work either
17:55:45 <elliott_> I think the same about Feather
17:55:50 <ais523> heh
17:56:23 <elliott_> but anyway, I think I've managed to reduce my idea of this section of Feather so that I can implement a simple demo OS with a minimal amount of platform code (posix/sdl, or raw pc hardware, etc.) + a small amount of portable code
17:56:29 <ais523> you mean @, right?
17:56:32 <elliott_> so... that's the plan
17:56:33 <elliott_> err
17:56:33 <elliott_> yes
17:56:34 <elliott_> (oops)
17:56:35 <elliott_> (oh dear)
17:56:42 <ais523> that's a very oh dear mistake
18:01:30 <Gregor> Feather AKA @ AKA Secret Project
18:01:53 <elliott_> The other two are offended by the comparison to the secret project
18:01:59 <elliott_> So is the secret project, it doesn't wish to be associated with such lunatics
18:06:53 <ais523> the secret project is much saner than Feather
18:06:59 -!- Taneb has joined.
18:07:05 <ais523> its main distinguishing feature is being secret
18:07:31 <elliott_> ais523: Can I see your WIP Feather interp? Just curious
18:07:45 <ais523> elliott_: I don't see why not, although disclaimer that I'm going to rewrite it
18:08:03 <ais523> possibly in a different langauge, because call/cc support isn't needed if I'm not going to metacircular that
18:08:04 <elliott_> it's modified from previously, right?
18:08:14 <elliott_> haskellashekaslehkleklelahkselellashekll
18:08:27 <Taneb> visualbasic2005
18:08:55 <ais523> http://sprunge.us/TPWh?scheme
18:08:58 <ais523> elliott_: it is, slightly at least
18:09:14 <ais523> pretty much all I've done since is just to add a few more Church encodings
18:09:25 <Taneb> I don't think Visual Basic is actually Turing-complete
18:09:58 <ais523> then when trying to work out whether integers should share I realised "it doesn't matter", and realised that I was trying to do too much of the interpreting in Scheme
18:10:07 <ais523> I suppose having the Scheme interp will still help for when I translate it into Feather
18:10:49 <ais523> also, I know I'm really bad at Scheme, don't laugh at it
18:11:09 <elliott_> bet: Feather will end up having a beautifully simple, elegant implementation, and then end up equivalent to some really everyday concept like lazy evaluation or mutual recursion
18:11:11 <elliott_> rather than anything retroactive
18:11:38 <Taneb> QUESTION
18:11:55 <Taneb> In feather, when you change the past, does the present continue?
18:12:06 <Taneb> With the old past
18:15:11 -!- Taneb has quit (Quit: Goodbye).
18:19:18 <ais523> er, hmm, how can I answer that if Taneb isn't here?
18:19:47 <ais523> but it goes back to that point in the past and recalculates in there
18:19:56 <ais523> whether the present ever rehappens depends on what you changed
18:21:25 <elliott_> <ais523> er, hmm, how can I answer that if Taneb isn't here?
18:21:26 <elliott_> retroactively
18:21:52 <ais523> Feather's time-travel model is certainly sane and self-consistent, at least
18:25:45 <coppro> how boring
18:26:50 <elliott_> coppro: you have clearly not thought even the slighest bit about Feather :)
18:33:26 <ais523> coppro: and you probably want to stay that way :)
18:48:05 <itidus20> hmm
18:48:58 <itidus20> i must say i regret not being schooled at a school where they can cane your fingers
18:49:13 <elliott_> i don't
18:49:14 <itidus20> it sounds more exciting
18:49:24 <itidus20> more character building
18:49:56 <itidus20> students still hate teachers these days... and it makes no difference it seems whether caning is involved
18:50:10 -!- elliott_ has quit (Read error: Connection reset by peer).
18:50:14 <itidus20> now thugs abound
18:50:14 -!- elliott has joined.
18:50:32 <itidus20> 10 year olds with shopping trolley poles roam the streets
18:50:51 <elliott> is this avant garde poetry
18:51:02 <itidus20> no its what i actually heard
18:51:49 <itidus20> the shopping trolleys you see.. you can remove the part which you hold onto when pushing it.. and it becomes a small lightweight baton
18:52:21 <itidus20> so all you have to do is take a shopping trolley away from the store and get the baton part off it
18:52:38 <itidus20> and you have some 10 year olds armed and dangerous
18:53:19 <itidus20> i don't know the full story of course
18:56:14 -!- DH____ has quit (Ping timeout: 260 seconds).
19:05:49 -!- Taneb has joined.
19:06:25 <Taneb> ais523: what would have been the answer to the question I asked before I left?
19:10:11 <ais523> Taneb: a retroactive change goes back to when the thing you retroactively changed was set
19:10:15 <ais523> changes it, then reruns from there
19:10:20 <ais523> whether the present happens again depends on what the change was
19:13:30 <itidus20> i think i am ready to give up on this ridiculous piece of code, so i will post what it is: http://codepad.org/AvNFIw0g
19:14:06 -!- Taneb has quit (Ping timeout: 276 seconds).
19:20:30 -!- quintopia has quit (Ping timeout: 252 seconds).
19:29:40 -!- quintopia has joined.
19:29:41 -!- quintopia has quit (Changing host).
19:29:41 -!- quintopia has joined.
19:33:03 -!- ive has joined.
19:47:42 -!- derrik has quit (Quit: gone).
19:48:22 -!- variable has quit (Quit: I found 1 in /dev/zero).
19:50:00 <Sgeo> itidus20, so, just looking at init and insert, the array_size is stored right at the end of all the actual data
19:50:15 <Sgeo> And array[0] stores the next available index
19:50:17 <itidus20> Sgeo: ive been hacking it up a bit more since last post
19:50:30 -!- Taneb has joined.
19:50:48 <itidus20> its a terrible mess here: http://codepad.org/meXjY5Eo
19:50:50 <Sgeo> Maybe a clear, readable diagram of what's what would be clearer
19:51:20 <itidus20> i just started working on this getindex function but i dont think i remembered exactly what its supposed to do
19:51:33 <Sgeo> I note you're still not doing bounds checking. Not that that's bad, but I'm wondering what the point of storing array_size is
19:52:09 <itidus20> i updated it to use allocation at least
19:52:33 <itidus20> its such a ridiculous piece of code
19:52:49 -!- sliddy has quit (Ping timeout: 276 seconds).
19:57:58 <itidus20> Sgeo: basically my poor methodologies as a coder are being revealed
19:58:11 <Sgeo> >.>
19:58:13 <Sgeo> <,<
19:58:31 <Sgeo> Wow, I can barely type <.<
19:58:49 <Sgeo> Becuase I'm so used to >.>, that my finger wants to stay on the same key when typing <,<
19:59:28 <itidus20> the variable names a and b soon become kaleidoscopic
20:00:02 <itidus20> because i possibly didn't design the code properly ^_^;;
20:00:08 <itidus20> or at all ^^;;
20:13:08 -!- variable has joined.
20:13:42 -!- augur has quit (Remote host closed the connection).
20:17:08 <Taneb> Is there a way to map a bit string to a BF Joust program with matching loops?
20:18:47 <elliott> BF Joust programs are a countable set, so yes.
20:18:52 -!- KingOfKarlsruhe has joined.
20:19:11 <Taneb> I mean, is there a way that someone can tell me?
20:20:48 <elliott> Well, it's a trivially derivable procedure. You could modify bifro, which is a silly, stupid program I wrote to do it a year ago.
20:21:15 <fizzie> It was a rather long discussion, that brainfuck-to-naturals bijection.
20:21:27 <elliott> Didn't produce much useful, either.
20:21:43 <Taneb> Link on bf page doesn't work
20:21:57 <elliott> Probably lost forever then
20:22:05 <elliott> You could reconstruct from logs :)
20:26:25 <fizzie> All the pastie.org links on the corresponding log are dead. :/ :\
20:26:40 <fizzie> It was in 2010-05-03 anyhow.
20:27:35 <fizzie> elliott: <alise> [bifro] has rekindled my love affair with Haskell.
20:27:59 <elliott> pastie.org died ages ago.
20:28:03 <elliott> Or rather, all the pastes.
20:28:08 <elliott> They probably aren't coming back.
20:28:11 <elliott> It's annoying but OH
20:28:12 <elliott> WELL
20:28:28 <Taneb> Wayback machine is down
20:28:40 <elliott> Taneb: Really though, it's not hard to write a bijection. 0-n for all the non-arg instructions, then add on n to the loop case... blah blah.
20:28:52 <elliott> the only hard part is reducing n of them to one of them in a way that doesn't lead to massive blowup
20:28:53 <elliott> but uhhh
20:28:55 <elliott> as for that
20:28:57 <elliott> you're on your own :P
20:29:03 <elliott> we didn't find anything satisfactory
20:29:03 <elliott> afaik
20:29:07 <elliott> good luck anyway
20:31:03 <fizzie> Especially for nested loops; one version of your bifro produced 63 for [], 590295810358705651711 for [[]], and broke down and cried for [[[]]].
20:31:24 <elliott> heh
20:32:59 <itidus20> ok, especially for sgeo, this is another update: http://codepad.org/XPWd2WBX
20:33:39 <fizzie> If you just want to enumerate them all, though, it is probably relatively speaking easier to write a piece of code that generates all legal brainfuck programs e.g. sorted by program length, as long as you don't need the "can be given an arbitrary number/program and must efficiently return the matching program/number without enumerating the whole set" function.
20:35:15 -!- augur has joined.
20:36:33 <itidus20> this one is perhaps even more clear: http://codepad.org/aXHMoksZ
20:43:49 -!- elliott has quit (Ping timeout: 260 seconds).
20:52:03 <ais523> BF Joust evolutionary programming is probably better done via assembling strategy fragments
20:52:21 <Taneb> Yes, but I'm mad
20:52:21 <ais523> as in, deciding on the decoy pattern and setup sequence, deciding on the clear loop, deciding whether it defends first or rushes first, etc
20:53:06 * itidus20 ponders.
20:53:46 <itidus20> in a game like rock paper scissors or coin tossing or penny matching there is no perfect play.
20:54:08 <itidus20> unless it is to be truely random
20:54:41 * itidus20 shrugs.
20:55:10 <itidus20> but anyway, with a programming battle game i imagine that what constitutes a perfect play depends entirely on what strategy the opponent chooses
21:01:23 <ais523> hey, channel, want something to rage at? http://www.reddit.com/r/programming/comments/k9cbj/trollscript_an_esoteric_dialect_of_brainfuck/
21:03:20 <Taneb> If we raged at every brainfuck derivative out there we would have no time for Dwarf Fortress succession games
21:05:09 <monqy> saw that language yesterday; died
21:30:21 <Sgeo> Is my BF derivative at least a little not idiotic?
21:34:34 <itidus20> Sgeo: i have added some even more ideas to my structure... but it still doesn't have the essence yet of a real data structure.. still missing the vast majority of it's functionality: http://codepad.org/ZWaHYvHz
21:42:41 <Phantom_Hoover> Taneb, on that subject are you competent to pull levers and move troops.
21:43:20 <Sgeo> Insert is O(1). In del_cell(), don't call getindex() twice, this isn't Haskell.
21:43:22 <Phantom_Hoover> ais523, my faith in /r/programming is vastly increased by the fact that they hated it too.
21:43:23 * Sgeo has more to say
21:43:31 -!- augur has quit (Remote host closed the connection).
21:43:32 <Taneb> Phantom_Hoover: The former but I have a bit to go for the latter
21:43:48 <Sgeo> Although that might be a premature optimization *shrug*
21:43:54 <Taneb> Goodnight
21:43:57 -!- Taneb has quit (Quit: Goodbye).
21:43:57 <itidus20> Sgeo: well insert is not really done yeah...
21:44:16 <Sgeo> I'm a bit concerned about all the calling of getindex2 in getindex, but I need to see what getindex does before commenting further
21:44:29 <itidus20> heres a cleaner version: http://codepad.org/p4r3O9Ep
21:44:44 <itidus20> not much cleaner though.. just cleaned up main
21:45:07 * Sgeo isn't going to switch right now
21:45:27 <itidus20> sgeo yes i have already asked for too much attention over this
21:45:56 <Sgeo> So, getindex2() finds something, and says how many filled-in spots are before it?
21:46:18 * Sgeo is a bit confused
21:46:42 -!- derdon has quit (Remote host closed the connection).
21:47:19 <itidus20> i only figured out what it did by looking at what it did in testing... and forcing myself to use it
21:48:06 <itidus20> basically there is 2 sets of indices... the indices which i calloc'd .. and the indices of the actual data items
21:48:32 * Sgeo gets bored and wanders away
21:49:49 -!- iconmaster has quit (Ping timeout: 276 seconds).
21:50:32 <itidus20> thanks for your input. i started counting how many codepad pastes i was making lately and realized i am starting to subtly become an asshole over it
21:51:23 <Sgeo> itidus20, switch to gist.github.com ?
21:51:37 <Sgeo> Although that won't run code for you
21:52:08 <itidus20> well i mean i have singled you out for this topic and that is not cool.. its as bad as private messaging
21:52:35 <itidus20> i may as well be sending sms about it >:-)
21:52:39 <Sgeo> Well, I probably should have said something
21:53:02 -!- copumpkin has changed nick to gurbles.
21:53:06 <itidus20> nope.
21:53:19 <itidus20> i shouldn't have addressed it all at you though.
21:53:34 -!- gurbles has changed nick to grubIes.
21:53:45 <itidus20> i shouldnt really be updating a room with codepad every 5 mins either
21:54:07 -!- grubIes has changed nick to copumpkin.
21:55:47 <itidus20> i see what you mean about del_cell now
22:02:24 <oklopol> "<fizzie> It was a rather long discussion, that brainfuck-to-naturals bijection." <<< yeah, there are many steps, first you have to list brainfuck programs in lexicographical order, then you have to do nothing else, then you have to be done.
22:04:21 <oklopol> this is even a logspace computation, if i'm not mistaken, so you can do it in O(n) time
22:04:44 <itidus20> my code is absolutely a monstrosity... its even worse than a linked list
22:04:48 <oklopol> hmm wait, that may be complete
22:04:52 <oklopol> bullshit
22:07:48 <oklopol> yeah i dunno how fast it is, except that since the set of bf programs is context-free, there's prolly a polynomial time bijection between numbers (in binary) and bfs
22:10:07 <oklopol> i'll ask someone at the uni on monday, dunno what to search for really
22:12:43 <oklopol> if lengths of n and the length of the nth string are related polynomially, maybe there's a general algo for the bijections, then again on second thought there prolly isn't
22:12:52 <oklopol> nth string in the grammar i mean
22:13:26 <oklopol> obviously if they aren't polynomially related you can't do it, since just printing the out is superpolynomial
22:14:23 -!- DH____ has joined.
22:17:22 <oklopol> would certainly be interesting to research this, but it's prolly known to death
22:19:14 <itidus20> i finally realized that my whole idea is pointless since arrays have never been difficult to delete from, only difficult to insert into
22:19:53 -!- Sgeo has quit (Ping timeout: 245 seconds).
22:20:03 -!- zzo38 has joined.
22:20:04 <oklopol> how do you delete from an array? well i guess i know what you mean
22:20:16 <itidus20> theres 2 ways
22:20:37 <itidus20> 1 way is to have a deleted state for each cell of the array which can be toggled
22:20:38 <oklopol> store the index of next valid and previous valid is one i suppose
22:21:04 <oklopol> but you can't index anymore so it's a bit stupid
22:21:15 <oklopol> with your way, you can't even iterate
22:21:24 <oklopol> with my way, you at least have a linked list
22:21:46 <oklopol> what's the other one
22:22:50 <oklopol> i mean you can't iterate in amortized constant time w.r.t. current size of array
22:23:15 <itidus20> the other one is just some ridiculous thing like next valid yeah
22:23:43 <oklopol> next valid and last valid, yeah, that lets you iterate
22:23:55 <itidus20> but i didn't do next valid and last valid
22:24:03 <oklopol> next valid also lets you iterate, but then deletion is not constant time
22:24:07 <oklopol> it's linear
22:24:09 <itidus20> i am going to abandon this code altogether....
22:24:14 <itidus20> but i will show you it
22:24:22 <itidus20> http://codepad.org/mre22niv
22:24:27 <oklopol> so you might as well just move all the elements
22:24:49 <oklopol> in which case you have indexing again
22:25:14 -!- KingOfKarlsruhe has quit (Quit: ChatZilla 0.9.87 [Firefox 6.0.2/20110902133214]).
22:25:18 <itidus20> its really a hopeless mess... and it was nowhere near complete
22:25:46 <itidus20> and finally i came to my senses and realized its not even going to help the insert problem
22:26:19 <oklopol> i don't get del_range
22:26:31 <itidus20> it deletes from 2 to 3 :))
22:26:37 <itidus20> in the example
22:27:42 <itidus20> its very absurd code.. one might almost say obfuscated
22:27:46 <oklopol> well i dunno what array actually contains
22:28:00 <oklopol> values + blanks?
22:28:07 <oklopol> and 0 is length
22:28:32 <itidus20> it contains run lengths and next valids
22:28:46 <itidus20> but the insert and delete code wasn't finished either
22:29:26 <oklopol> how do you make sure deletion doesn't make next valid pointers invalid
22:29:43 <itidus20> its not done :P
22:29:49 <oklopol> oh okay
22:29:55 <oklopol> you can't do it in constant time
22:29:58 <itidus20> hummmmmm
22:30:06 <oklopol> with just next valid pointers
22:30:30 <oklopol> it's linear
22:30:48 <oklopol> same complexity as the usual deletion where you shift everything
22:30:50 <itidus20> its very incomplete.. im just glad i finally realized how useless it is
22:31:55 <itidus20> someone in another chat said linked list is better than arrays for deletion.. so i was tempted to challenge the idea by working on it
22:32:16 <oklopol> everyone does that at one point or another i suppose
22:32:24 <oklopol> it's a dead end
22:33:05 <oklopol> well, not quite, but i think the only solutions have a logarithic stack of arrays simulating a tree
22:33:24 <oklopol> don't ask for details, my data structure days are long gone
22:33:35 <itidus20> ok
22:33:58 <oklopol> trees are really the only way to get indexing, deletion and insertion fast at the same time
22:34:17 -!- Sgeo has joined.
22:34:59 <oklopol> you get log n for everything
22:35:28 <oklopol> prolly amortized, since you need to balance the tree a bit every now and then
22:37:37 <oklopol> arrays have constant indexing, linear deletion and insertion, lists have those swapped (if the latter two operations are done with pointers), and trees get log n for all, it's and interesting trade-off, really
22:40:29 <oklopol> and as for how to actually do the tree stuff, i suppose you could store, at every child, how big the tree is under it, let's call it "size info". then, balancing only requires a logarithmic change (each flip needs only local size info changes), insertion and deletion only change size info on the path from node to root, and indexing is obviously logtime if the tree is balanced
22:41:13 <oklopol> assuming you know, say, roughly how red-black trees work
22:41:15 <itidus20> well i certainly don't "need" rapid deletion or insertion for anything. it was just the naive exploration of the array :D
22:41:55 <oklopol> naive exploration is fun but there's a rich theory you should look into first, your ideas will become richer as wekk.
22:41:58 <oklopol> *well
22:42:25 <itidus20> another idea which occured to me is a series of hops between deleted cells
22:42:37 <oklopol> wuzzat
22:42:51 <itidus20> cell 0 would contain an index of the first deleted cell
22:43:11 <itidus20> and the first would contain an index of the second and so forth
22:43:27 <oklopol> again, linear deletion
22:43:31 <itidus20> yup
22:43:40 <itidus20> and it would kill off the indexing
22:44:00 <oklopol> yes. there's no known solution, you should give up :P
23:05:38 -!- FireFly has quit (Quit: FireFly).
23:15:32 -!- jix has quit (Ping timeout: 258 seconds).
23:18:54 -!- jix has joined.
23:24:29 -!- Vorpal has joined.
23:45:02 -!- DH____ has quit (Remote host closed the connection).
23:56:07 -!- Patashu has joined.
2011-09-11
00:03:54 -!- copumpkin has quit (Ping timeout: 260 seconds).
00:04:19 -!- copumpkin has joined.
00:10:56 -!- DH____ has joined.
00:19:40 * Phantom_Hoover → sleep
00:19:41 -!- Phantom_Hoover has quit (Quit: Leaving).
00:24:52 -!- variable has quit (Quit: I found 1 in /dev/zero).
00:25:00 <Patashu> wow. if javascript throws an exception and nothing catches it, it silently dies?
00:29:44 <zzo38> I think something must catch it, although it might be the system that does so
00:30:53 <zzo38> If I have: class Which w l r t | w t -> l r where { which :: l -> r -> w -> t; }; then how can I make up the "makeL" and "makeR" such that: which makeL makeR = id
00:31:21 <oklopol> so your question is, if javascript throws and exception and no one catches it, does it make a sound?
00:31:25 <oklopol> *an
00:32:26 <oklopol> i've only heard this question for certain simple data structures, but i think it's unresolved even for those
00:32:29 <CakeProphet> Patashu: yes javascript is the best thing to debug ever.
00:34:33 <Patashu> last night I had to debug a javascript error
00:35:08 <Patashu> a for loop was ending before the first cycle even finished
00:35:13 <Patashu> and I had no idea what was causing it to stop
00:35:54 <oklopol> that would make an awesome movie
00:36:08 <Patashu> debugging javascript?
00:36:27 <oklopol> i dunno, everything sounds so grandiose atm
00:36:36 <Patashu> a movie about debugging javascript...
00:36:43 <Patashu> 2 hours of staring at stacks and variables
00:36:52 <Patashu> and setting breakpoints
00:36:53 <oklopol> i keep imagining stuff in a trailer voice with explosions in the background
00:37:05 <Patashu> IN A WORLD...
00:37:09 <Patashu> WITH NO EXCEPTION HANDLIGN
00:37:35 <Patashu> A WORLD...
00:37:38 * Sgeo wonders how one would go about debugging assembly
00:37:40 <Patashu> WHERE PROGRAMS DON'T DO WHAT YOU WANT THEM TO
00:38:15 <Patashu> ONE MAN...
00:38:17 <Patashu> MUST FIX HIS CODE
00:38:18 <Patashu> ONCE AND FOR ALL
00:38:38 <oklopol> james matrix is just as simple programmer... unaware that one uncaught exception... would change his life forever
00:39:31 <Patashu> 'what if the program could, you know, speak up when something goes wrong...' 'that's crazy talk james! out of my office!'
00:39:37 <Patashu> *THOOM*
00:40:57 <CakeProphet> oklopol: grandiose? are you perhaps on acid?
00:41:58 <oklopol> "there is no choice, we have to set a breakpoint here" "but james matrix, it's too dangerous, the stack might overflow, recursion, pointers, monads!" "god help us all" *sets breakpoint*
00:42:15 <oklopol> CakeProphet: i'm on acid on life
00:44:48 <oklopol> "this bug is impossi"
00:44:51 <oklopol> fuck
00:45:31 <Patashu> 'monads'
00:45:41 <oklopol> "this bug is impossible to fix, we have to call james matrix!" *arrives* "no ordinary programming is going to do us any good here... i have to use... dvorak"
00:45:46 <Patashu> LOL
00:46:47 <oklopol> james matrix might just be the coolest character i ever invented just now
00:48:26 <oklopol> see also sequel where james matrix uses induction to prove a theorem with no simple combinatorial proof
00:55:15 <ais523> and the sad thing is, is that even if you made this into a movie, there'd be other movies even /worse/
00:55:41 <ais523> hmm, you should mix in the "stand back! I know regular expressions" from xkcd too
00:55:43 <oklopol> yes, because there are other movies
00:56:17 -!- Vorpal has quit (Ping timeout: 260 seconds).
00:56:19 <oklopol> at one point they use a global variable
01:05:32 <oklopol> tv series are not very realistic i find
01:07:27 <DH____> I would pay to watch that film!
01:09:13 <oklopol> of course you would, it would be awesome
01:18:04 <zzo38> Do *you* understand my question relating to Haskell? I can copy more explanation in here in case you did not read it
01:18:26 <zzo38> (I put in #haskell channel but they don't know, and they are supposed to know!)
01:19:32 <monqy> oops
01:25:35 <zzo38> It seem, everyone doesn't know the question
01:25:56 -!- variable has joined.
01:26:55 -!- CakeProphet has quit (Ping timeout: 276 seconds).
01:27:02 <zzo38> I want to make it which makeL makeR = id for example one instance can be which = maybe; makeL = Nothing; makeR = Just; but that doesn't work it works "which" but the "makeL" and "makeR" doesn't work.
01:28:05 <monqy> what are they supposed to do other than which makeL makeR = id
01:29:23 <zzo38> monqy: It is supposed to do what it says it does. The "which" does in fact works. But the "makeL" and "makeR" doesn't work even though I tried to make it work in a few different ways, but it doesn't work whether it is same class or other class
01:29:45 <zzo38> This part works: class Which w l r t | w t -> l r where { which :: l -> r -> w -> t; };
01:29:47 <monqy> what does it say
01:30:18 <zzo38> monqy: Other than their instance definitions it is only supposed to do following the which makeL makeR = id laws.
01:30:26 <monqy> oh
01:30:42 <monqy> which = const; makeL = id; makeR = undefined
01:30:48 <monqy> which = id; makeL = id; makeR = id
01:31:02 <monqy> which = flip const; makeL = undefined; makeR = id
01:31:08 <zzo38> Even though I typed in the definition of makeL and makeR it still doesn't works
01:31:40 <zzo38> monqy: No that is wrong, for a few reasons. One is, it has undefined, which doesn't count. Other is, they do not correspond to specific types.
01:32:26 <zzo38> That is why I have instance corresponding to specific types, such as Bool, Maybe, Either, and so on. These types have functions or values corresponding to the laws of which/makeL/makeR.
01:32:53 <monqy> why do you even want this
01:32:58 <monqy> it looks overcomplicated and useless
01:34:15 <zzo38> What is this things called in category theory?
01:35:04 <monqy> also: isn't t always going to be something like a -> a since it can be the identity function
01:36:03 <zzo38> No, it isn't going to always be. Notice types of "maybe" function; the "t" isn't that type.
01:36:59 <monqy> oh i didn't notice the w there
01:37:09 <monqy> oops
01:37:14 <monqy> so uh
01:37:17 <monqy> how would you use this
01:38:54 <zzo38> Some examples of such things would be: { which l r w = if w then r else l; makeL = False; makeR = True; } { which = maybe; makeL = Nothing; makeR = Just; } { which = either; makeL = Left; makeR = Right; } Is there a name for such things in mathematics and in category theory?
01:41:29 <zzo38> How many things do you know about category theory, though?
01:42:06 <monqy> not much
01:42:26 <monqy> I wish I knew more but
01:45:27 <zzo38> Actually there may be other laws of the kind of things I try to mentioned, but that I might have missed. But which makeL makeR = id is only one I could think of.
01:47:57 <zzo38> With the Maybe monad, the (which makeL) which is (maybe Nothing) is same as (=<<)
01:52:17 <monqy> instance? Which (a, b) (a -> a') (b -> b') (a', b') where makeL = id; makeR = id; which = (Control.Arrow.***)
01:52:26 <zzo38> That follows with the Either monad as well
01:53:11 <monqy> oh I forgot the t in there
01:53:18 <zzo38> monqy: I don't know about arrow
01:53:24 <monqy> instance? Which (a, b) (a -> a') (b -> b') (a', b') (a', b') where makeL = id; makeR = id; which = (Control.Arrow.***)
01:53:27 <monqy> there
01:53:58 <monqy> what arrow
01:54:00 <zzo38> The Which class only has four parameters, not five?
01:54:06 <monqy> oops
01:54:09 <monqy> I didn't forget about it
01:54:12 <monqy> I forgot I remembered it
01:54:20 <monqy> instance? Which (a, b) (a -> a') (b -> b') (a', b') where makeL = id; makeR = id; which = (Control.Arrow.***)
01:54:23 <monqy> there
01:54:32 <monqy> and what's this about arrow?
01:55:00 <zzo38> That I don't know about Control.Arrow very well
01:55:14 <zzo38> But I can try to see if it can work
01:55:17 <monqy> it uses (***) for the function instance: f *** g = \ (a, b) -> (f a, g b)
01:58:11 <zzo38> monqy: Yes, that does in fact work. On pair types, it seems that is correct.
02:04:08 <monqy> so what doesn't work about makeL and makeR and how are you trying to make them work, or do they work now?
02:05:27 <zzo38> They don't work. What doesn't work is that it won't accept my definition of makeL and makeR either in that class or in a separate class that depends on the first one. Even if it compiles, it still won't understand the instance when using makeL or makeR. But which still works whether or not I try to define makeL and makeR.
02:06:22 -!- Rugxulo has joined.
02:06:27 <monqy> what are the errors?
02:06:44 <Rugxulo> moo
02:06:45 <zzo38> Ambiguity errors
02:06:59 <monqy> like what
02:07:06 <monqy> and corresponding to which implementation attempt
02:07:48 <zzo38> All implementation attempts, but the errors are still different
02:08:17 <monqy> I mean specifically what is the code you tried and what was the error printout
02:08:33 <zzo38> Implementing in the same class, it work makeL :: l; makeR :: r; it will accept, but then I wrote makeL = False; makeR = True; and it is error "Couldn't match type `t' with `Bool'"
02:09:49 <Rugxulo> C++ ??
02:10:02 <zzo38> Rugxulo: What about C++?
02:10:30 <monqy> Rugxulo: haskell.
02:10:39 -!- azaq23 has quit (Quit: Leaving.).
02:10:51 <monqy> with multiparameter typeclasses and functional dependencies and friends
02:11:53 -!- Rugxulo has quit (Quit: Rugxulo).
02:12:16 <monqy> what were the class, instance, and error, in full?
02:12:33 <zzo38> This doesn't work either. It is not compile error but still ambiguity when trying to use it in GHCi: class Which w l r w => WhichMake w l r where { makeL :: l; makeR :: r; } instance WhichMake Bool Bool Bool where { makeL = False; makeR = True; };
02:13:23 <zzo38> Ambiguous type variables `t0', `w0', `r0' in the constraint: (WhichMake w0 t0 r0) arising from a use of `makeL'
02:14:31 <zzo38> How to make not ambiguous?
02:15:20 <monqy> in that case? I don't really know. l and r should depend on w but w is never used so that's a mess
02:15:28 <monqy> really they should be in the same class??
02:15:49 * Sgeo looks for a WebTV simulator
02:16:29 <zzo38> monqy: In the same class results in ambiguity error in the instance declaration, but I agree it would make sense to be the same class, it make more sense mathematically it seem to me, at least.
02:16:55 <monqy> what were the class, instance, and ambiguity error, in full?
02:17:50 <zzo38> Couldn't match type `t' with `Bool' `t' is a rigid type variable bound by the instance declaration at Which.hs:10:23 In the expression: False In an equation for `makeL': makeL = False In the instance declaration for `Which Bool t t t'
02:21:04 <monqy> ok that makes sense
02:21:21 <monqy> makeL is of type l and in the instance l is t
02:21:53 <monqy> the instance should be Which Bool Bool Bool Bool if you want that definition for makeL
02:22:43 -!- augur has joined.
02:23:25 <monqy> if you want anything fancier I'm afraid you;ll have to using crazy generic programming tricks?? like syb and friends??
02:25:44 <zzo38> How do you do that?
02:26:14 <zzo38> The reason I know about "t" rigid variable that is why I made it a separate class, but that way still doesn't work
02:26:31 <monqy> well you won't be able to get around it
02:26:37 -!- itidus20 has quit (Ping timeout: 246 seconds).
02:27:10 <monqy> I mean
02:27:43 <monqy> so I guess your trick with the extra class was that you wanted to make it so makeL and makeR only worked in the case that it was indeed all Bool?
02:28:41 <monqy> the problem with that is when you say makeL or makeR you don't know the instance because there's not enough information in the types to tell in e.g. makeL's case, w and r
02:29:22 <monqy> unless you made it so there could only be one instance for any w, l, or r, I think?
02:29:49 <monqy> I don't know enough about fundep syntax to construct that though, if it's even possible
02:49:38 <zzo38> Is it mathematically possible in category theory, though?
02:53:25 -!- hagb4rd has joined.
02:58:07 <Patashu> re: bitcoins, would it be possible to create a block mining algorithm that doesn't achieve speedups on gpus relative to cpus?
02:58:48 <Sgeo> gpus' main advantage is that they are largely parallel, or am I mistaken?
02:59:16 <Sgeo> I'd imagine any algorithm reliant on brute-forcing would benefit from parallelization
02:59:28 -!- itidus20 has joined.
03:04:40 <zzo38> I managed to make "makeL" and "makeR" work with Bool so far, but only if you specify ":: Bool" afterward, and the other instances do not work at all.
03:09:46 <zzo38> Actually it works if I use "which makeL makeR ::" instead of putting :: at the end. Why does it require that?
03:13:52 <copumpkin> zzo38
03:14:44 -!- augur_ has joined.
03:15:05 -!- augur has quit (Read error: Connection reset by peer).
03:15:51 <copumpkin> zzo38: http://hpaste.org/51221
03:16:48 <copumpkin> hmm, not quite ideal though
03:16:56 <copumpkin> phone
03:20:23 -!- ive has quit (Quit: leaving).
03:21:00 -!- augur_ has quit (Remote host closed the connection).
03:21:22 <zzo38> OK, I suppose type instances can work too. I didn't think of that. I suppose it does make some sense since you apply types corresponding to types and the class now only has one parameter.
03:21:34 <zzo38> I will try loading that program into my computer
03:22:43 <copumpkin> it doesn't quite work because which left right doesn't work out nicely
03:23:29 <zzo38> Yes you are correct, it doesn't work
03:24:04 <copumpkin> it does work for other things though
03:24:16 <copumpkin> λ> which 5 (+1) Nothing
03:24:16 <copumpkin> 5
03:24:17 -!- hagb4rd has quit (Ping timeout: 260 seconds).
03:24:50 <zzo38> Yes that works. Even my program it also worked that way too.
03:28:33 <zzo38> I put False on the left but the idea is still the same. Putting False on the left allows you to generalize the "when" command for both Bool and Maybe as "which $ return ()"
03:29:20 <copumpkin> the issue is telling it about type functions
03:29:56 <zzo38> So, why doesn't "which left right" work with your program? I don't completely understand
03:30:12 <copumpkin> ask for the type of which left right in mine
03:30:36 <copumpkin> note how it has a bunch of type variables in the constraints that don't show up in the type itself
03:30:40 <copumpkin> I bet I could do this in 7.4
03:32:15 <zzo38> OK I asked for the type, it displays (Left a b ~ Left a1 a1, Right a b ~ Right a2 a2, Choose a1, Choose a2, Choose a) => a -> b
03:32:21 <copumpkin> yep
03:32:52 <copumpkin> those a1 and a2 variables don't show up in the actual type
03:33:43 -!- augur has joined.
03:35:34 <copumpkin> anyway, I think the general thing you're looking for
03:35:37 <copumpkin> is an eliminator
03:35:43 <copumpkin> it's not a CT term
03:35:51 <copumpkin> but it's a representation of ADTs
03:36:17 <zzo38> Would functional dependencies help? It doesn't seem there is anything to make functional dependencies with on the Choose class, and as far as I know there is no functional dependencies for type families
03:36:25 <copumpkin> they might
03:36:33 <copumpkin> not sure
03:54:03 <zzo38> OK. Can you tell me more about what "eliminator" is?
03:56:00 <copumpkin> http://www.quora.com/In-type-theory-what-is-an-eliminator-and-what-is-its-opposite
04:02:44 -!- hagb4rd has joined.
04:09:05 <zzo38> OK, yes that make sense
04:09:41 <copumpkin> you typically won't get a typeclass for it
04:09:51 <copumpkin> just because it depends on how many constructors you have
04:09:59 <copumpkin> all your examples have two constructors so it works
04:10:40 <zzo38> So I suppose the Choose or Which class would be used to indicate a type that you have two constructors, and one eliminator that can choose between them (in the case of pairs, it will choose both).
04:10:59 <copumpkin> hmm, not sure pairs even work
04:11:13 <copumpkin> but yeah, it could be a statement that your type has two constructors
04:11:50 <zzo38> Yes it is not a real eliminator with pairs (and it has only one constructor), but the Choose or Which class could still exist following the laws related to those classes
04:12:32 <zzo38> But someone has mentioned a way to do it: which = (Control.Arrow.***); left = id; right = id; not a real eliminator though.
04:13:03 <copumpkin> hm, yeah, probably not
04:13:13 <copumpkin> :t uncurry
04:13:13 <lambdabot> forall a b c. (a -> b -> c) -> (a, b) -> c
04:13:24 <copumpkin> that's the real (non-dependent) eliminator for pairs
04:13:42 <zzo38> But I suppose it violate the law if you also assume the return type must be allowed to be anything.
04:13:58 <zzo38> So if you add that law, then the Choose (or Which) class cannot properly use pairs.
04:14:04 -!- MDude has changed nick to MSleep.
04:16:02 -!- derrik has joined.
04:20:28 <zzo38> I suppose it also has to do with when it is swappable or not. For example, Bool is swappable, Either is swappable, but Maybe is not swappable.
04:20:39 <Sgeo> Swappable?
04:20:56 <Sgeo> Hmm, as in, all constructors have the same type?
04:21:09 <Sgeo> ^^easy way to describe my intuition about that
04:21:20 <Sgeo> Although it was more "They all look the same"
04:22:20 <zzo38> Which means it can be swapped by "which right left", like how "which left right" is identity.
04:22:54 <Sgeo> I have no idea what which is
04:23:01 <Sgeo> Wait
04:23:19 <Sgeo> My definition of "swappable" doesn't fit what my intuition says about Either
04:24:57 <zzo38> So the "Bool" type can be swapped to "Bool" itself, and "Either a b" is swapped to "Either b a"
04:37:01 <Sgeo> Does this capture what you're trying to say: All constructors for the type require the same number of arguments [ignoring bleh about all functions taking 0 or 1 arguments]
04:37:03 <Sgeo> ?
04:37:31 <zzo38> I suppose that does it.
04:37:40 <zzo38> Yes it seem so
04:38:52 -!- CakeProphet has joined.
04:38:53 -!- CakeProphet has quit (Changing host).
04:38:53 -!- CakeProphet has joined.
04:43:52 -!- CakeProphet has quit (Ping timeout: 260 seconds).
04:45:26 <zzo38> Couldn't match type `Right a1 a1' with `a2 -> Left a0 a0' if it is "Maybe t" then type a2 is "t" and a0 is "Maybe t", a1 is also "Maybe t". It does match but it says it doesn't match
04:49:23 <zzo38> How to make it recognize it match?
04:50:39 <Lymee> > ()
04:50:39 <lambdabot> ()
04:59:50 <zzo38> Is Choose.hs wrong or is GHC wrong?
04:59:59 <zzo38> Or am I wrong?
05:00:14 <derrik> the answer is yes
05:00:50 <quintopia> (d) all of the above
05:06:21 -!- zzo38 has quit (Remote host closed the connection).
05:29:30 <shachaf> GHC is never wrong.
05:31:44 -!- augur has quit (Remote host closed the connection).
06:51:38 -!- derrik_ has joined.
06:52:58 -!- derrik has quit (Ping timeout: 252 seconds).
06:53:05 -!- derrik_ has changed nick to derrik.
06:54:51 -!- Taneb has joined.
06:54:55 <Taneb> Hello!
06:55:20 <Taneb> I'm on my brother's laptop
06:55:37 <Taneb> McAfee SiteAdvisor doesn't seem to like esoteric.voxelperfect.net
06:56:18 <quintopia> ah! our archnemesis mcafee is at it again!
06:56:39 <ais523> Taneb: what in particular does it dislike?
06:56:45 <ais523> and does it have the same issue with esolangs.org?
06:58:19 <Taneb> Doesn't say and no
06:58:29 <ais523> how bizarre
06:58:59 <Taneb> "McAfee TrustedSource web reputation analysis found potential security risks with this site. Use with extreme caution."
06:59:56 <fizzie> "In particular, the programming languages promoted on this page are kinda weird, and you'd better not get involved in that sorta thing."
07:00:02 <ais523> I continue to maintain that it's bizarre
07:00:06 <Taneb> I think it's a problem with Voxelperfect
07:01:04 <Taneb> No, wait, it isn't
07:04:37 <Taneb> MYSTERIOUS
07:05:39 <quintopia> maybe it has something to do with what other websites say about the site
07:05:58 <quintopia> thats what i would expect "web reputation analysis" to do
07:07:59 <Taneb> It is a shame that Carnage Heart didn't do very well
07:08:25 <Taneb> It's essentially befunge as a turn based strategy
07:08:27 <Taneb> For PS1
07:08:34 <Taneb> Bye
07:08:35 -!- Taneb has quit.
07:08:39 <hagb4rd> http://www.youtube.com/watch?v=8QL9CbikWNw
07:34:18 -!- derrik has quit (Quit: ChatZilla 0.9.87-rdmsoft [XULRunner 1.9.0.17/2009122204]).
07:34:34 -!- derrik has joined.
07:35:49 -!- derrik has quit (Client Quit).
07:36:01 -!- Taneb has joined.
07:40:23 -!- oerjan has joined.
07:44:12 <Taneb> You know what I've never understood
07:44:22 <oerjan> no.
07:44:23 <Taneb> In HQ9+, does + cause any output?
07:44:46 <Taneb> The first of those questions was rhetorical
07:44:58 <oerjan> i think usually it has no visible effect. perhaps it might overflow and give an error message that way.
07:45:31 <oerjan> (this is of course the joke)
07:48:42 <ais523> it changes write-only memory in an irreversible way
07:48:58 <ais523> this operation isn't expected to do anything user-visible, as far as I know, nor be distinguishable from a NOP
07:49:16 <ais523> however, all my HQ9+ impls do have an accumulator that's incremented upon calling +
07:50:49 <ais523> I don't have any HQ9++ impls because I haven't quite figured out what ++ does
07:51:28 <Taneb> It creates a new instance of the generic superclass
07:51:44 <ais523> oh, as in new Object() in Java?
07:51:48 <ais523> (can you even do that in Java?)
07:51:59 <Taneb> Yeah, and dunno, never used Java
07:55:12 <fizzie> I believe you can create instances of Object in Java, though they're perhaps not terribly useful.
07:56:22 <ais523> they have monitors, at least, so you could use them as mutexes
07:56:29 <ais523> although making a separate mutex isn't very javaish
08:01:05 <fizzie> Or condition variables in the pthread_cond sense, with wait/notify, due to those same monitors. Or just as arbitrary unique objects, since you can equality-compare them.
08:11:49 <Taneb> Is there a better way in Haskell to get the nth element of a list than "last (take n list)"
08:12:34 <ais523> getting the nth element of a list isn't particularly efficient, although last+take seems even less so
08:12:40 <oerjan> > "yeah there is" !! 5
08:12:41 <lambdabot> 't'
08:13:00 <Taneb> Ooh
08:14:04 <oerjan> Taneb: it is sort of deprecated to use it, since it traverses the list, and also it may error
08:14:32 <ais523> I don't think it's possible to get the nth element /without/ traversing the list
08:15:00 <oerjan> well true, but it is recommended you don't use it when iterating over a list otherwise
08:15:27 <shachaf> oerjan: I don't think it's "deprecated".
08:15:38 <oerjan> shachaf: well not technically...
08:15:55 <ais523> oerjan: definitely, an indexwise list traversal is a bad idea in any language
08:16:01 <shachaf> It's just not recommended, like most partial functions and most functions that index into a list.
08:16:03 <ais523> (whereas an indexwise array traversal is fine)
08:17:32 <oerjan> another idiom when you _don't_ want it to fail is to say take 1 (drop n list)
08:17:46 <oerjan> that gives either an empty list, or a list with just one element
08:18:04 <oerjan> or you can pattern match on drop n list directly
08:18:25 <shachaf> Or some sort of safeIndex function.
08:18:34 <oerjan> i also hear there's a "safeprelude" package which includes lots of such things
08:18:46 <oerjan> (name may or may not be right)
08:18:54 <shachaf> @hackage safe
08:18:54 <lambdabot> http://hackage.haskell.org/package/safe
08:19:14 <shachaf> It's still not recommende to index into a list if you can avoid it. :-)
08:19:25 <shachaf> Do you people like bugs?
08:19:27 <shachaf> http://www.youtube.com/watch?v=M1nsOKBgmOs
08:20:34 <fizzie> > let myMap f l = let myMap' [] = []; myMap' ((i,_):is) = f (l !! i) : myMap' is in myMap' $ zip [0..] l in myMap (^2) [1,2,3,4,5] -- best map?
08:20:35 <lambdabot> [1,4,9,16,25]
08:21:04 <shachaf> @slap fizzie
08:21:05 * lambdabot clobbers fizzie with an untyped language
08:21:48 -!- DH____ has quit (Ping timeout: 260 seconds).
08:30:13 -!- jakki has joined.
08:49:02 <Taneb> I now have a pretty shoddy but working program in Haskell with a function that takes a number and returns that number of valid BFJoust programs
08:50:17 <oerjan> NO FUN NOT PASTING SO WE CAN TEAR IT TO PIECES, I MEAN SUGGEST IMPROVEMENTS
08:51:29 <Taneb> http://pastebin.com/LwaXg4UK
08:53:02 <oerjan> eek
08:53:12 <Taneb> I told you it was shoddy
08:53:56 <fizzie> "(==) a b" is a rather strange way of saying "a == b".
08:54:07 <Taneb> Oddly, I prefer it that way
08:54:21 <fizzie> That's odd.
08:54:25 <Taneb> But not consistently
08:56:45 <oerjan> > flip replicateM "+-<>.[]" =<< [0..]
08:56:47 <lambdabot> ["","+","-","<",">",".","[","]","++","+-","+<","+>","+.","+[","+]","-+","--...
08:56:55 * oerjan cackles evilly
08:57:28 <oerjan> BEHOLD THE POWER OF THE LIST MONAD
08:58:08 <fizzie> One monad to rule them all, and in the darkness bind them.
08:59:41 <oerjan> Taneb: i see you did not heed our warning not to index lists rampantly in is_valid :P
09:00:04 <oerjan> but of course avoiding it needs a different algorithm
09:00:11 <Taneb> I disheeded most vigorously
09:00:46 <Taneb> Also in to_string in gen_bfj
09:00:56 <oerjan> what i would have done is to make is_valid take two arguments, the rest of the list and the current [] nesting level
09:01:16 <Taneb> I can do that
09:01:28 <fizzie> As far as algorithms go, that's not very different.
09:01:57 <fizzie> Also makes for a nicer stopping than the guard-agaist-length thing.
09:02:07 <oerjan> oh wait i _is_ that.
09:02:14 <oerjan> no wait
09:02:24 <oerjan> j is that
09:02:33 <Taneb> I think i is that
09:02:56 <oerjan> yep. so instead of p and i, let the argument be equivalent to drop i p
09:03:18 <oerjan> then all you need to do is test the start of the list passed
09:03:45 <oerjan> *drop (i-1) p
09:03:55 <oerjan> haskell is usually 0-indexed
09:04:40 <monqy> last (take ...) is an interesting way of indexing
09:04:51 <Taneb> It was intuitive to me
09:04:57 <oerjan> Taneb: you see how all your recursions are of the form is_valid p (i+1) and you only look at the i'th element of the list
09:05:16 <Taneb> I'm working in your suggestions as we speak
09:05:24 -!- Phantom_Hoover has joined.
09:05:43 <oerjan> and once that is done, it should be possible to convert a lot of guards to pattern matches
09:06:17 <oerjan> all except the j < 0 one, i think
09:06:57 <monqy> this all is a bit weird to me actually
09:07:33 <oerjan> monqy: it looks like a rather numeric/array inspired algorithm, so it needs some tweaking to be idiomatic haskell (understatement :P)
09:07:41 <monqy> heheheh
09:08:17 <Phantom_Hoover> When I saw 'j' I thought you were talking about maths and then I noticed the stuff about guards and pattern matches and was disappointed and now I'm having a crisis.
09:08:31 <Taneb> It's largely based on an incomplete version in Python, which may go siome way to explain the stupidity
09:08:39 <oerjan> ah.
09:09:15 <fizzie> > let isValid [] d = d == 0; isValid ('[':cs) d = isValid cs (d+1); isValid (']':cs) d = d > 0 && isValid cs (d-1); isValid (_:cs) d = isValid cs d in map (\p -> isValid p 0) ["+[-]", "+[-", "]["]
09:09:15 <lambdabot> [True,False,False]
09:10:13 <Taneb> Couldn't you replace "\p -> isValid p 0" with "flip isValid 0"?
09:10:38 <oerjan> Taneb: (`isValid` 0) >:)
09:11:04 <Taneb> Or even that
09:11:07 <oerjan> (also yes, those are equivalent)
09:11:13 <fizzie> Sure, sure; though I think you'd rather have isValid take just a string, and use an isValid' internally or something.
09:11:36 <Taneb> brb, sponsoring someone
09:11:45 <oerjan> that is also a common idiom yes
09:12:43 <oerjan> Taneb: also as fizzie implies CamelCase is standard for haskell
09:13:45 <oerjan> since before the word was invented, afaik
09:14:40 <monqy> > let valid_things = (pure <$> "+-><") `interleave` ((('[' :) . (++ "]")) <$> valid_things) `interleave` ((++) <$> valid_things <*> valid_things) in valid_things
09:14:41 <lambdabot> ["+","++","[+]","+++","-","+[+]","[++]","++++",">","+-","[[+]]","++[+]","<"...
09:15:56 <oerjan> Taneb: incidentally although converting from number to string is a bit weird, haskell has a function corresponding nearly to your to_string in its Numeric module
09:16:02 <Taneb> Back
09:16:19 <monqy> is my method any good
09:16:26 <monqy> I'm probably missing something
09:16:47 <oerjan> > map (flip (showIntAtBase 7 ("+-<>.[]" !!)) "") [0..]
09:16:49 <lambdabot> ["+","-","<",">",".","[","]","-+","--","-<","->","-.","-[","-]","<+","<-","...
09:17:01 <monqy> seeing as how I started from nothing, not bothering to interpret taneb's thing
09:18:06 <oerjan> monqy: you seem not to have empty loops or strings
09:18:13 <monqy> ah right
09:18:14 <monqy> easily fixed
09:18:35 <monqy> > let valid_things = "" `interleave` (pure <$> "+-><") `interleave` ((('[' :) . (++ "]")) <$> valid_things) `interleave` ((++) <$> valid_things <*> valid_things) in valid_things
09:18:35 <lambdabot> Couldn't match expected type `GHC.Types.Char'
09:18:36 <lambdabot> against inferred type...
09:18:37 <oerjan> otherwise, i'm not sure i can read that code :P
09:18:38 <monqy> oops
09:18:47 <monqy> > let valid_things = [""] `interleave` (pure <$> "+-><") `interleave` ((('[' :) . (++ "]")) <$> valid_things) `interleave` ((++) <$> valid_things <*> valid_things) in valid_things
09:18:48 <lambdabot> ["","","[]","","+","[]","[]","","-","+","[[]]","[]",">","[]","[]","","<","-...
09:18:51 <oerjan> (YOU GO TOO FAR)
09:18:53 <monqy> oops oops oops
09:19:06 <monqy> I'm concatenating empty things :(
09:19:27 <monqy> it's not too far at all
09:20:02 <monqy> the worst part is `interleave` instead of ++ because I wanted to mix things up
09:20:44 <oerjan> hm
09:21:00 <oerjan> :t interleave
09:21:01 <lambdabot> forall (m :: * -> *) a. (MonadLogic m) => m a -> m a -> m a
09:21:03 <monqy> > let valid_things = [""] `interleave` (pure <$> "+-><") `interleave` ((('[' :) . (++ "]")) <$> valid_things) `interleave` (filter (not . null) $ (++) <$> valid_things <*> valid_things) in valid_things
09:21:06 <lambdabot> mueval-core: Time limit exceeded
09:21:08 <oerjan> ah that one again
09:21:08 <monqy> oops
09:22:12 <monqy> > let valid_things = [""] `interleave` (pure <$> "+-><") `interleave` ((('[' :) . (++ "]")) <$> valid_things) `interleave` (filter (not . null) . ((++) <$> valid_things <*> valid_things)) in valid_things
09:22:13 <lambdabot> Couldn't match expected type `GHC.Types.Char'
09:22:13 <lambdabot> against inferred type...
09:22:17 <monqy> :(
09:22:21 <oerjan> ah right now i understand the gist
09:22:24 <monqy> oh right
09:22:26 <monqy> uhghh
09:22:30 -!- jakki has left.
09:22:33 <monqy> how do I do this nicely
09:23:03 <Taneb> http://pastebin.com/rX9yqkLY
09:23:42 <Taneb> Okay, in my text editor the =s in is_valid' were all lined up nicely
09:23:44 <monqy> > let valid_things = [""] `interleave` (pure <$> "+-><") `interleave` ((('[' :) . (++ "]")) <$> valid_things) `interleave` ((++) <$> valid_things <*> valid_things $ filter (not . null)) in valid_things
09:23:44 <lambdabot> Couldn't match expected type `a -> a1'
09:23:44 <lambdabot> against inferred type `[[GHC...
09:23:46 <oerjan> monqy: what about (++) <$> "+-><" <*> valid_things ?
09:23:48 <monqy> oops oops
09:24:02 -!- ais523 has quit (Remote host closed the connection).
09:24:11 <monqy> oerjan: then [things] won't end on the left hand side of a concatenated valid thing?
09:24:17 <oerjan> monqy: i mean, don't try to have valid_things combined with itself
09:24:29 <monqy> ah, so duplicate that part too?
09:24:58 <oerjan> (++) <$> ("+-><" `interleave` thatLoopPart) <*> valid_things
09:25:06 <oerjan> will that work
09:25:49 <monqy> if you do fmap pure on the "+-><", I'd imagine so
09:26:17 <Taneb> How does one do comments in Haskell?
09:26:22 <monqy> --
09:26:29 <monqy> {-...-} for multiline
09:26:55 <oerjan> monqy: oh right.
09:27:33 <monqy> > let safe_things = (pure <$> "+-><") `interleave` ((('[' :) . (++ "]")) <$> valid_things); valid_things = safe_things `interleave` ((++) <$> safe_things <*> safe_things) in valid_things
09:27:34 <lambdabot> ["+","++","[+]","+[+]","-","+-","[++]","+[++]",">","+>","[[+]]","+[[+]]","<...
09:27:44 <monqy> oops I forgot the [""]
09:27:52 <Taneb> http://pastebin.com/DdV53DSb
09:27:59 <monqy> > let safe_things = (pure <$> "+-><") `interleave` ((('[' :) . (++ "]")) <$> valid_things); valid_things = safe_things `interleave` [""] `interleave` ((++) <$> safe_things <*> safe_things) in valid_things
09:28:01 <lambdabot> ["+","++","","+[+]","[+]","+-","-","+[++]","[++]","+>",">","+[]","[]","+<",...
09:28:05 <monqy> there
09:28:50 <Taneb> Hang on a minute!
09:28:59 <oerjan> Taneb: hm i think your to_string will fail to produce not just "+", but any string starting with +
09:29:09 -!- nooga has joined.
09:29:15 <Taneb> It actually doesn't
09:30:05 <Taneb> You can try it and see
09:30:18 <monqy> > let safe_things = (pure <$> "+-><") ++ ((('[' :) . (++ "]")) <$> valid_things); valid_things = [""] ++ safe_things ++ ((++) <$> safe_things <*> safe_things) in valid_things
09:30:19 <lambdabot> ["","+","-",">","<","[]","[+]","[-]","[>]","[<]","[[]]","[[+]]","[[-]]","[[...
09:30:41 <monqy> yeah it never gets to the concatenation that way :( interleave is much better
09:30:46 <oerjan> monqy: erm i think you want (++) <$> safe_things <*> valid_things
09:31:08 <monqy> hmm
09:31:20 <monqy> but then it will concatenate things with the empty string :(
09:31:35 <monqy> is there any way to fix it
09:32:18 <oerjan> monqy: um that is not a problem
09:32:35 <monqy> duplicates?
09:32:42 <oerjan> just drop safe_things ++ itself
09:32:49 <monqy> ah right
09:33:06 <oerjan> > let to_string n = if n == 0 then "" else ("+-<>.[]" !! (mod n 7)) : to_string (div n 7) in map to_string [0..]
09:33:07 <lambdabot> ["","-","<",">",".","[","]","+-","--","<-",">-",".-","[-","]-","+<","-<","<...
09:33:31 <monqy> > let safe_things = (pure <$> "+-><") `interleave` ((('[' :) . (++ "]")) <$> valid_things); valid_things = [""] `interleave` ((++) <$> safe_things <*> valid_things) in valid_things
09:33:32 <lambdabot> ["","+","++","+++","++++","+++++","++++++","+++++++","++++++++","+++++++++"...
09:33:37 <monqy> oops I messed up
09:33:44 <Taneb> I think there is an entirely different way of doing this
09:33:45 <monqy> or did i
09:34:15 <oerjan> > let to_string n = if n == 0 then "" else ("+-<>.[]" !! (mod n 7)) : to_string (div n 7) in elem "++" . takeWhile ((<= 2) . length) $ map to_string [0..]
09:34:17 <lambdabot> False
09:34:24 <oerjan> Taneb: it never produces "++"
09:34:42 <monqy> > let safe_things = (pure <$> "+-><") `interleave` ((('[' :) . (++ "]")) <$> valid_things); valid_things = [""] `interleave` ((++) <$> valid_things <*> safe_things) in valid_things
09:34:44 <lambdabot> ["","+","[]","-","[+]",">","[[]]","<","[-]","[[+]]","[>]","[[[]]]","[<]","[...
09:34:47 <Taneb> It doesn't like + at the end
09:34:48 <monqy> that's better
09:35:17 <monqy> > let safe_things = (pure <$> "+-><") `interleave` ((('[' :) . (++ "]")) <$> valid_things); valid_things = ((++) <$> valid_things <*> safe_things) `interleave` [""] in valid_things
09:35:20 <lambdabot> mueval-core: Time limit exceeded
09:35:31 <oerjan> Taneb: you are essentially printing a number in base 7 and + corresponds to 0 so it can never be the most significant digit
09:35:33 <Taneb> Considert that any valid, non-null BFJoust program must be of one of the three following formats:
09:35:59 <Taneb> One of "+", "-", "<", ">", and "."
09:36:07 <monqy> Taneb: generating them based on those formats is what I've been doing
09:36:22 <Taneb> A valid BFJoust program surrounded by "[" and "]"
09:36:36 <Taneb> And a concatenation of two valid BFJoust programs
09:36:38 <monqy> > let safe_things = (pure <$> "+-><") `interleave` ((('[' :) . (++ "]")) <$> valid_things); valid_things = ((++) <$> valid_things <*> safe_things) `interleave` [""] in valid_things -- take a look at this
09:36:42 <lambdabot> mueval-core: Time limit exceeded
09:36:46 <monqy> oh wait oops
09:36:48 <monqy> wrong one
09:37:02 <Taneb> oerjan: Any idea how to get the missing programs into it?
09:37:04 <monqy> > let safe_things = (pure <$> "+-><") `interleave` ((('[' :) . (++ "]")) <$> valid_things); valid_things = [""] `interleave` ((++) <$> valid_things <*> safe_things) in valid_things -- take a look at this
09:37:05 <lambdabot> ["","+","[]","-","[+]",">","[[]]","<","[-]","[[+]]","[>]","[[[]]]","[<]","[...
09:37:25 <oerjan> Taneb: well generate it some other way than converting from a number...
09:37:56 <Taneb> monqy, how is your thing going?
09:38:06 <monqy> Taneb: that basically says one of +->< or [program] or program++program but it's a bit trickier because it deals with empty programs too and empty loops
09:38:15 <monqy> I'll dissect it:
09:38:29 <monqy> `interleave` is basically ++ but it mixes things up so you get some stuff from both sides mixed in
09:38:33 <HackEgo> ​/home/hackbot/hackbot.hg/multibot_cmds/lib/limits: line 5: exec: interleave`: not found
09:39:04 <monqy> safe_things is the list of all things that don't need concatenation
09:39:20 <monqy> (pure <$> "+-><") is ["+", "-", ">", "<"]
09:39:48 <monqy> ((('[' :) . (++ "]")) puts [ on left and ] on right
09:40:13 <monqy> and the <$> valid things makes it map onto all valid programs
09:40:17 <Taneb> I don't think you'll ever get, for instance, [+][-]
09:40:22 <monqy> you'll get that
09:41:09 <oerjan> monqy: program = empty | command program, where command is your safe_things
09:41:17 <monqy> valid_things is the null program or a valid program concatenated with a non-null non-concatenated program
09:42:14 <oerjan> monqy: so, valid_things = empty | safe_things valid_things
09:42:43 <monqy> Taneb: to get [+][-] first you'd look at the concat case in valid_things, on the left you'd go to safe_things, take the [] case, then safe things again, and the + case. now we're on the other side of the concat case. take safe_things, [], -
09:43:35 <monqy> Taneb: oh right <$> is an alias for fmap, if you didn't already know
09:44:11 <oerjan> monqy: oh hm i think (++) <$> valid_things <*> safe_things might not actually produce all possibilities when safe_things is an infinite list
09:44:16 <monqy> and <*> in this case takes a list of functions on the left, and a list of arguments on the right, and applies each function to each argument
09:44:21 <oerjan> s/might/does/
09:44:25 <monqy> oh no
09:44:41 <oerjan> you need an interleaving variant of it.
09:45:11 <oerjan> i vaguely recall there was an interleaving bind variant last that MonadLogic module came up here
09:45:12 <monqy> as in use a version of liftM2 derived from >>- rather than <$> and <*> ?
09:45:16 <oerjan> :t (>>-)
09:45:18 <lambdabot> forall (m :: * -> *) a b. (MonadLogic m) => m a -> (a -> m b) -> m b
09:45:20 <oerjan> that one
09:45:25 <oerjan> yeah
09:45:48 <oerjan> MonadLogic is of course way overkill for this :P
09:46:36 <oerjan> Taneb: even my replicateM one-liner above may be overkill for a beginner. a list comprehension might be the thing...
09:47:16 <oerjan> although it _is_ sort of equivalent...
09:47:57 <monqy> > let lm2 f m n = m >>- return . f >>- (n >>- flip ($)); safe_things = (pure <$> "+-><") `interleave` ((('[' :) . (++ "]")) <$> valid_things); valid_things = [""] `interleave` lm2 (++) valid_things safe_things in valid_things
09:47:58 <lambdabot> Precedence parsing error
09:47:58 <lambdabot> cannot mix `Control.Monad.Logic.Class.>>-' [i...
09:48:02 <monqy> oops
09:48:41 <monqy> double oops
09:49:06 <oerjan> Taneb: also i _have_ seen on wikipedia a way to do base conversion that works for your purpose, even if i think converting from a number is a digression
09:49:34 <monqy> > let lm2 f m n = m >>- (return . f) >>- \ f' -> n >>- (return . f'); safe_things = (pure <$> "+-><") `interleave` ((('[' :) . (++ "]")) <$> valid_things); valid_things = [""] `interleave` lm2 (++) valid_things safe_things in valid_things
09:49:34 <Taneb> I've just thought of something that fits my psychology for fixing my program
09:49:35 <lambdabot> ["","+","++","[]","+++","-","+[]","[+]","[]+",">","+-","[++]","++[]","<","+...
09:49:41 <monqy> oerjan: all better?
09:49:45 <oerjan> the trick iirc is to use digits 1..7 instead of 0..6
09:50:10 <oerjan> monqy: hopefully :P
09:51:49 -!- nooga has quit (Ping timeout: 260 seconds).
09:52:03 <oerjan> Taneb: your is_valid' looks pretty idiomatic now, anyhow
09:52:26 <Taneb> Now to work on gen_bfj
09:52:38 <oerjan> Taneb: oh wait no it doesn't quite
09:52:56 <Taneb> What's wrong!
09:53:03 <monqy> > let lm2 f m n = m >>- (return . f) >>- \ f' -> n >>- (return . f'); safe_things = (pure <$> "+-><") `interleave` ((('[' :) . (++ "]")) <$> valid_things); valid_things = [""] `interleave` lm2 (++) valid_things safe_things; from_nat = (valid_things !!) in from_nat 10
09:53:03 <oerjan> is_valid' p@('[':_) i = is_valid' (tail p) (i+1)
09:53:04 <lambdabot> "+-"
09:53:06 <oerjan> should be
09:53:26 <oerjan> is_valid' ('[':r) i = is_valid' r (i+1)
09:53:40 <Taneb> Ooh, that's clever
09:53:50 <oerjan> never use tail if you can just match :)
09:54:16 <monqy> clever/idiomatic
09:54:23 <monqy> also a lot more intuitive to me?? idk
09:54:43 <Taneb> Intuitivity is relative
09:55:03 <Taneb> I thought last (take n xs) was intuitive to get the nth element of xs
09:55:16 <monqy> there's a function for that it's called (!!)
09:55:40 <Taneb> oerjan: Is this base thing... bijective notation?
09:55:43 <monqy> also if I was doing it in your style I'd probably do head (drop ...)
09:55:48 <oerjan> Taneb: last (take n xs) will do strange things if your list is neither empty nor length >= n
09:56:10 <oerjan> Taneb: well bijective to strings of digits, afair
09:56:35 <Taneb> http://en.wikipedia.org/wiki/Bijective_numeration
09:56:53 <oerjan> ah yes that was it
09:59:06 <oerjan> Taneb: i think all you need is to subtract 1 from n before the rest if it's non-zero
10:03:53 <Taneb> http://pastebin.com/1HvF9w2s
10:05:00 -!- Vorpal has joined.
10:05:04 <monqy> for to_string, instead of checking if n == 0 you could do pattern matching
10:05:15 <monqy> to_string 0 = ""; to_string n = ...
10:10:50 <monqy> also I think is_valid could be written as (== 0) . foldl (\ c -> case c of '[' -> (+ 1); ']' -> subtract 1; _ -> id) 0 or some such
10:11:18 <monqy> oh wait no I messed it up
10:11:20 <monqy> oops
10:12:51 <monqy> foldr not foldl. I forgot about the argument order in the provided function. alternatively, use foldl but do flip on the lambda.
10:13:49 <monqy> it's pretty much exactly the same as what you wrote, just shorter.
10:16:05 -!- nooga has joined.
10:17:21 <Taneb> No instance for (Num (a0 -> b0)) /n arising from the literal `0' /n Possible fix: add an instance declaration for (Num (a0 -> b0)) /n In the second argument of `foldr', namely `0' /n In the second argument of `(.)', namely /n `foldr /n (\ c /n -> case c of { /n '[' -> (+ 1) /n ']' -> subtract 1 /n _ -> id }) /n 0 /n "[]"' /n In the expression: /n (== 0) /n . foldr /n (\ c /n -> case c of { /n '[' -> (+ 1)
10:17:21 <Taneb> ']' -> subtract 1 /n _ -> id }) /n 0 /n "[]"
10:17:44 <monqy> oops
10:17:53 <monqy> should have type checked what I wrote....
10:17:54 <oerjan> monqy: you have to do a check that the level never goes negative
10:18:06 <monqy> oh I forgot about that
10:18:24 <monqy> easy enough to fix
10:18:29 <monqy> will do
10:18:47 <Taneb> In my program, "[[[]]]" is number 31129
10:19:04 <oerjan> Taneb: when you see "No instance for (Num (... -> ...))" it usually means you have given a function too few arguments
10:19:26 <oerjan> so ghc is trying to find out how to treat a function as a number
10:20:34 <oerjan> that applies to other classes than Num as well
10:23:52 <monqy> maybe False (== 0) . (foldrM (\ c -> case c of '[' -> return . (+ 1); ']' -> \ n -> if n == 0 then Nothing else return (n - 1); _ -> return) 0)
10:24:01 <monqy> it got a bit ugly
10:24:13 <Taneb> > maybe False (== 0) . (foldrM (\ c -> case c of '[' -> return . (+ 1); ']' -> \ n -> if n == 0 then Nothing else return (n - 1); _ -> return) 0) "[]"
10:24:13 <lambdabot> Not in scope: `foldrM'
10:24:22 <monqy> it's in Data.Foldable
10:24:35 <monqy> :: (Foldable t, Monad m) => (a -> b -> m b) -> b -> t a -> m b
10:24:47 <Taneb> I am trying to avoid monads, mainly because I haven't learnt them yet
10:24:51 <monqy> oh
10:25:58 <monqy> it's just the maybe monad it's simple
10:26:10 <oerjan> famous last words
10:26:14 <monqy> hehehe
10:27:23 <oerjan> maybe False (== 0) = (== Just 0), methinks :P
10:27:50 <monqy> that works too
10:28:37 <monqy> in my line, Nothing is failure, return (which is Just) is success. basically I'm doing the same old fold but if I'm going to go under 0 I fail, and at the end, use maybe (or (== Just 0) that works too and may even be more clear) to make sure it's didn't fail and the result was 0
10:28:55 <oerjan> btw it is possible to construct a parenthesis matching Monoid :)
10:29:36 <monqy> but having to make a monoid instance means no 1liners!!!
10:29:44 <oerjan> sadly so
10:33:13 -!- nooga has quit (Ping timeout: 259 seconds).
10:46:28 <oklopol> "<Rugxulo> moo" <<< moo
10:46:38 <monqy> moo
10:49:39 -!- zzo38 has joined.
10:50:49 -!- FireFly has joined.
10:53:29 <oklopol> "<fizzie> I believe you can create instances of Object in Java, though they're perhaps not terribly useful." <<< well you create one every time you create an object don't you
10:54:29 <Patashu> you can create instances of object to synchronize on
10:54:31 <Patashu> that's useful
10:59:32 <oklopol> oerjan: do you know how fast you can make that numbers in binary vs bf programs bijection?
11:00:19 <oerjan> no
11:00:22 <oklopol> enumerating is kind of trivial
11:01:19 <oerjan> well, you'd think it would be approximately proportional to the size of the final number
11:01:48 <oklopol> final number?
11:01:57 <oerjan> ...the result
11:02:38 <oerjan> but as i recall a naive encoding tended to give very large numbers for some bf programs
11:03:19 <oerjan> (because one direction of deep nesting got exponential overhead)
11:03:27 <oklopol> err right, all my thinking goes into typing since i switched to dvorak just now
11:04:08 <oerjan> you'd want an encoding where the size of the number was not too far from the size of the bf program.
11:04:44 <oklopol> yeah that was my initial observation too
11:05:02 <Patashu> why to dvorak, and not to colemak?
11:05:06 <Patashu> I think you made a poor decision
11:05:49 <oklopol> typematrix doesn't sell it yet
11:06:02 <Patashu> you don't need a special kb to type in dvorak or colemak
11:06:11 <Patashu> there are programs to change automatically for windows, mac and linux
11:06:31 <Taneb> And you can get a packet of stickers to put on the keyboard itself
11:06:35 <Patashu> if you want
11:06:38 <Patashu> or you can have it on scren
11:06:57 <oklopol> i mean a skin for it. so i figured i'll learn this first
11:08:16 <oklopol> because i do have a skin for dvorak
11:08:23 <monqy> http://upload.wikimedia.org/wikipedia/commons/5/56/KB_Maltron_3D_US.svg "United-States Maltron 3D Keyboard-Layout" what's a 3d keyboard-layout
11:08:34 -!- oerjan has quit (Quit: Later).
11:08:49 <oklopol> the keyboard itself is blank
11:09:12 <monqy> http://upload.wikimedia.org/wikipedia/commons/9/9e/Kinesis-Contoured_Keyboard_Classic-2.jpg is it something like this
11:10:37 <oklopol> l is the only obvious mistake in dvorak imo
11:13:45 <oklopol> ahaha, http://www.flickr.com/photos/sermoa/5421634445/
11:14:22 <oklopol> so i have a hunch they'll make a skin soon
11:15:28 <oklopol> seems to work
11:15:55 <oklopol> typity typity is fun to colemak
11:17:59 <oklopol> anyway i'm gonna learn all of them anyway, order is prolly irrelevant
11:31:27 <monqy> so i set my layolt to colemak for some fun
11:32:26 <monqy> (that took a long time to type)
11:34:21 -!- nooga has joined.
11:34:27 <oklopol> which one do you normally use
11:35:42 <monqy> qwerty; haven't bothered changeng
11:37:03 <oklopol> i have always wanted to swich to a more sensible layout, but it seemed pointless before i'd gotten rid of the horrible slanted rows
11:37:53 <oklopol> because that was the main problem anyway
11:38:30 <monqy> slanted rows? ah, yes, those.
11:38:45 <oklopol> or columns
11:40:39 <oklopol> i never really got used to it
11:41:00 <oklopol> because it made no sense
11:43:03 <monqy> a bit weird how s moved over a space to make room for r, rather than r taking d's spot, conredering it's supposed to be qwerty-familiar
11:43:32 <zzo38> I invented D&D spells "Cure No Wounds" and "Inflict No Wounds", which are 0-level swift action spells curing or inflicting zero points of damage.
11:43:32 <monqy> (that took forever)
11:44:33 <oklopol> colemak is qwerty familiar? what a horrible idea
11:45:00 <monqy> yeah
11:45:46 <monqy> zzo38: what's the point?
11:45:48 <zzo38> QWERTY was invented to prevent type from jamming, but that isn't important for computers.
11:45:49 <oklopol> why not just make a perfect layout :/
11:46:28 <zzo38> monqy: Although they cure/inflict zero damage, they still count as healing damage or inflicting damage for any other effects that would depend on that. For example Cure No Wounds still makes dying creatures stable.
11:47:02 -!- DH____ has joined.
11:47:15 <oklopol> is it just a common misconception that that's just a common misconception
11:48:04 <oklopol> that took me over a minute to type :P
11:48:38 <monqy> zzo38: apparently also made such that "typewriter" is on the top row, according to the colemak site
11:48:45 <zzo38> Some people say QWERTY is designed to make faster typing, and some say it is designed to make slowing typing. But I don't think either of these is true. Good typist can type fast
11:49:01 <zzo38> monqy: I did know "typewriter" is on the top row, but as far as I know that is coincidence
11:49:12 <oklopol> what
11:50:03 <zzo38> For effective use of computer, you should learn to type fast, too. But more so than typewriter because the computer has more keys.
11:50:03 <oklopol> i've never heard anyone refute that it was a design goal
11:50:25 <itidus20> the misconception is so common that a correct conception would be nothing short of treason
11:51:22 <oklopol> but everyone nowadays says qwerty never had other goals
11:51:43 -!- Taneb has quit (Quit: Goodbye).
11:51:49 <oklopol> that that jamming thing is bs
11:52:11 <itidus20> it's related to illuminati
11:52:17 <oklopol> let's ask wp
11:52:40 <oklopol> home of the current truth
11:54:20 <itidus20> if you replace abcdefghijklmnopqrstuvwxyz as q=a,w=b,e=c,r=d,t=e,y=f,u=g,i=h,o=i,p=j,a=k,s=l,d=m,f=n,g=o,h=p,j=q,k=r,l=s,z=t,x=u,c=v,v=w,b=x,n=y,m=z
11:54:54 <itidus20> then the bible will contain instructions to build a nuclear powered ufo
11:55:24 <zzo38> itidus20: I doubt it. But even if it is true, which version of the Bible do you mean, anyways?
11:55:27 <oklopol> wp refutes it :D
11:55:35 <itidus20> zzo38: all of them >:-)
11:55:47 <monqy> if i switch to this colemak thing or dvorak i'll need to do some rebinding and make a key toggle/qwerty for when it is more convenient
11:55:56 <zzo38> All of them in English, or all of them that use the same alphabet as English?
11:56:18 <oklopol> how can facts be this hard to keep consistent
11:57:01 <oklopol> monqy: i have all three integrated in my kb
11:57:27 <monqy> oh?
11:57:55 <oklopol> i have a dvorak mode light even
11:57:57 <itidus20> zzo38: its just the ideas other people have conditioned me with.
11:58:53 <oklopol> colemak i didn't know about, i just found http://www.flickr.com/photos/sermoa/5421634445/
11:59:58 <monqy> (rebinding in things like xmonad and vim (unless i switch to emacs or something as well))
12:00:17 <Sgeo> itidus20, that the Bible, if you swap letters like that, literally cotains everything there is to know?
12:01:11 <oklopol> We've finally received the long awaited shipment of skins, so we are now ready to place an order for the Colemak (and several other) versions. We're working on getting the layouts designed now and will post as soon as we know more.
12:01:16 <oklopol> well well well
12:02:24 <monqy> also i should figure out how to get back to qwerty
12:02:57 * oklopol presses fn and dvorak key
12:03:30 <oklopol> and finds he already forgot how qwerty works
12:04:11 <monqy> setxkbmap us -variant qwerty did not work so i have to find the real name
12:04:16 <oklopol> i don't really care about speed, all i care about is annoying my brain by making it learn new stuff
12:04:58 <monqy> my reasoning as well
12:08:47 <monqy> i should have found my previous settings before switching :(
12:09:12 <oklopol> i bet you wish you had a dvorak button
12:09:22 <monqy> yes
12:09:32 <oklopol> did i mention i have a dvorak button
12:09:38 <monqy> yes
12:09:41 <oklopol> okay
12:09:43 <oklopol> just making sure
12:09:48 <oklopol> see i have a dvorak button
12:10:27 <monqy> also nicely aligned keys :(
12:10:40 <zzo38> I also modified my variant of Illithid Savant prestige class by nerfing a few things and replacing the Double Savant feat with the Permanent Knowledge feat. I also want to invent doppelgangers prestige class, if I have ideas; even in case if these people are not interested to select this class
12:10:42 <oklopol> yes, i love this thingie
12:10:52 <oklopol> everything makes sense now
12:10:55 <monqy> ah, leaving out the -variant thing seemed to work
12:11:09 <monqy> time to set up the switchy button
12:11:14 <zzo38> Maybe I should also make an improvement of the Metamind class; the one in the book is too weak.
12:11:16 <monqy> I will make a dvorak button too
12:11:26 <monqy> that way I will have a dvorak button
12:11:27 -!- Taneb has joined.
12:12:11 <oklopol> the only problem is i have to switch between english and finnish layouts since i can't type finnish with the english one and i can't write certain programming symbols with the finnish one as this is not a finnish keyboard and lacks the keys they are usually at
12:12:19 <oklopol> finnish has more symbols
12:12:36 <oklopol> but i don't type that much finnish
12:12:41 <zzo38> Then I can understand why you need the multi layouts
12:13:00 <oklopol> multi layouts are just for fun
12:13:05 <oklopol> i mean
12:13:10 <oklopol> qwerty and dvorak
12:13:22 <oklopol> but i have to change the language of the kb occasionally
12:13:35 <oklopol> ofc there's a button on it in the taskbar so it's not that hard
12:13:36 <zzo38> I hardly type any Japanese stuff; when I do, the Character Map is good enough
12:13:50 <monqy> maybe I will make my own keyboard layout
12:14:04 <oklopol> optimize it with a GENETIC ALGORITHM
12:14:08 <monqy> my keyboard layout will have 0 where 1 is
12:14:10 <monqy> and 1 where 2 is
12:14:17 <monqy> and 2 where 3 is etc
12:14:28 <zzo38> Which can also be done in case of accented letters
12:14:30 <oklopol> and you write in hexadecimal
12:14:32 <Taneb> And 9 where 0 is or - is?
12:14:49 <monqy> Taneb: the idea is to get 0 on the left of 1 rather than the right of 9
12:15:05 <Taneb> You described it backwards then
12:15:12 <zzo38> I think the Linux console allows you to type hexadecimal on the numeric pad
12:15:17 <Taneb> No wait, I confused myself
12:15:27 <monqy> Taneb: I could also move 0 to ` if relearning the numbers is too much but I doubt it will be
12:16:01 <oklopol> i still haven't learned the numbers...
12:16:46 <monqy> my keyboard layout will use capslock for something perhaps backspace like colemak
12:16:49 <monqy> I liked that
12:17:15 <zzo38> Can you put function keys on the left? Can you still have the numeric pad or not? Can you make clunky IBM PC keyboard? Even though it is loud it is very good in my opinion
12:17:24 <oklopol> where do you have capslock tho
12:17:31 <oklopol> it's very important
12:17:35 <monqy> capslock is on the left of a
12:17:41 <oklopol> yeah
12:17:46 <oklopol> but where do you put it
12:17:51 <monqy> oh
12:17:55 <monqy> I can live without capslock
12:17:59 <oklopol> wow
12:18:04 <Taneb> The button does both?
12:18:11 <monqy> hhehe
12:18:18 <monqy> I can also switch to qwerty then capslock then switch back
12:18:19 <oklopol> can you live without oxygen?
12:18:32 <Taneb> I can turn into an elf
12:18:51 <zzo38> I do know of a few keyboards that have the "rubout" key to left of "A"
12:18:53 <oklopol> yes, but you still can't live without capslock, so
12:19:20 <oklopol> the perfect place for backspace is see typematrix.com
12:20:21 <monqy> ah, yes
12:20:34 <monqy> I should get one of those
12:21:09 <monqy> a few of these keys are weird but this is okay because I can rebind them
12:21:19 <oklopol> i just love it, can't see myself ever buying a slanted one
12:21:21 <zzo38> Does anyone still make the loud IBM PC keyboard, but using modern scancodes?
12:21:40 <oklopol> again i mean
12:21:41 <monqy> loud keyboards are cute
12:21:58 <oklopol> yeah i should prolly rebing some, like the calculator key, wtf :D
12:22:33 <monqy> I have a calculator key too
12:22:52 <oklopol> do you also have a tetris key
12:22:53 <monqy> it's lonely and circular
12:22:55 <monqy> my keyboard is awful
12:22:58 <monqy> no tetris
12:23:20 <monqy> weirdest shaped key is capslock
12:23:24 <monqy> I wonder what they were thinking
12:24:24 <monqy> there's a normal key bit that is the same width as tab but shorter, and then there's cliff, and then there's the rest of its space
12:24:56 <monqy> so there's this part sticking up to normal key elevation and the rest is in stupidland
12:24:57 <zzo38> I have only the standard keys in my computer, I don't like the one having those extras. I would put different extras, such as F13 to F16 (or possibly up to F24), and keys to enter direct scancodes and protocol commands in both directions. I would also have seven LEDs.
12:24:58 <oklopol> it's taller than other keys?
12:25:11 <monqy> same height but part of it is shorter than the other keys
12:25:21 <monqy> it's like an island
12:25:38 <zzo38> The only thing I dislike about the loud IBM PC keyboard is the lack of keyboard indicator LEDs.
12:25:40 <oklopol> the point is you can find it fast when you need to rage
12:25:56 <monqy> I just hold shift
12:26:19 <monqy> capslock is for when things think it's acceptable to invert case
12:26:21 <oklopol> i can't type as fast when holding shift
12:26:35 <monqy> I'M PRETTY GOOD AT TYPING WITH SHIFT HELD DOWN, BUT MAYBE IT IS BECAUSE I TYPE WEIRDLY
12:26:52 <oklopol> I DO PRETTY STANDARD TOUCH TYPING NOW THAT IT MAKES SENSE
12:27:03 <oklopol> IT DIDN'T MAKE ANY SENSE WITH THE SLANTED COLUMNS, BUT NOW IT TOTALLY DOES
12:27:09 <zzo38> I use Caps Lock more than most people probably, but generally not for rage. I just sometimes type things using all uppercase letters
12:27:31 <oklopol> well it looks nicer
12:27:38 <oklopol> this is for sissies
12:28:15 <zzo38> (Such as, I usually type in Forth programs in all uppercase.)
12:38:24 -!- Vorpal has quit (Read error: Operation timed out).
12:38:47 -!- Vorpal has joined.
12:40:10 <Taneb> 8 working days time
12:40:23 <Taneb> Wednesday week
12:40:34 <monqy> 05:39:58 < monqy> trying out my dvorak and colemak keys
12:40:34 <monqy> 05:40:35 < monqy> they work
12:40:40 <monqy> accidentally in the wrong chanel originalyl
12:40:47 <monqy> (sorry -minecraft)
12:40:56 <Taneb> (It's okay)
12:41:11 <monqy> now I can forget I have these keys
12:43:26 <oklopol> yes
12:44:12 <oklopol> i love my typematrix
12:44:53 -!- Vorpal has quit (Ping timeout: 260 seconds).
12:45:03 -!- Vorpal_ has joined.
13:09:57 -!- monqy has quit (Quit: hello).
13:10:30 -!- sebbu2 has joined.
13:11:34 -!- sebbu has quit (Ping timeout: 245 seconds).
13:16:29 <oklopol> when i was in kindergarten, i made a wanted poster when we were drawing shit, now wanted kind of sounds like the finnish "vanteet" which means the rim of a bicycle wheel. so the smartasses running the kindergarten told me wanted actually doesn't mean what i thought it did, but rim instead. and laughed. i was confused, and i still go through a brief am i making a mistake here when reading a
13:16:33 <oklopol> wanted poster
13:16:58 <oklopol> luckily they are not that common
13:17:17 <oklopol> children are such retards
13:17:28 <oklopol> at least i was
13:21:15 <oklopol> i tried to explain to them that it's from the verb "to want", and makes perfect sense, but they left the issue open. i realized what the joke was a few years later, and was not amused.
13:22:01 <Phantom_Hoover> Are you just talking to yourself oko.
13:22:11 <Taneb> ...You leant a foreign language in kindergarten?
13:22:22 <Phantom_Hoover> Silly Taneb.
13:22:23 <oklopol> english is not a foreign language
13:22:28 <Phantom_Hoover> English isn't a foreign language.
13:22:35 <Taneb> Finnish is
13:22:40 <oklopol> no it's not
13:22:42 <oklopol> in here
13:22:53 <Phantom_Hoover> oklopol, yes it is, it's foreign.
13:23:00 <Taneb> I'll change what I said
13:23:08 <Phantom_Hoover> The basic classification is that everything that isn't English is foreign.
13:23:08 <Taneb> You knew two languages in Kindergarten?
13:24:15 <oklopol> well i knew some english and some swedish, i doubt i was at a conversation level
13:25:29 <Taneb> When I was in kindergarten (yes, I know they aren't called that in Britain, but I wasn't in Britain at the time), there was a girl who may have been Australian/Mandarin bilingual
13:25:36 <Taneb> But I don't remember too well
13:26:05 <oklopol> i'm not bilingual in that sense, as you could easily tell if you heard me speak
13:26:06 -!- sebbu2 has changed nick to sebbu.
13:27:58 <oklopol> but that's different, i was learning english as a foreign language (i certainly considered it foreign back then)
13:29:07 <Taneb> Man, I wish I learnt Finnish or something when I was that young
13:30:02 <oklopol> i spent most of my time programming or playing games, i suppose the latter was my main source of english
13:30:16 <Taneb> Hang on... how old were you then
13:30:36 <oklopol> i'm talking about my kindergarten days so about 6
13:30:46 <Taneb> 6...
13:30:51 <Taneb> I was thinking about 4
13:30:58 <Taneb> Which was when I was in Kindergarten
13:31:25 <oklopol> i was in a less official daycare thing back then
13:32:15 <Taneb> My house from back then has since been demolished
13:32:45 <oklopol> all i remember from those days was playing sex with dolls, arguing about religion with the woman who kept it, and playing this racing game
13:33:15 <oklopol> and that i wanted to bring my teddy bear there but apparently 4yo is too old for that shit
13:33:17 <Taneb> I can't actually remember being six
13:33:37 <Taneb> ...That's odd
13:33:39 <oklopol> i can because i was only one year in what i'd call kindergarten
13:33:51 <oklopol> and that was my sixth
13:34:05 <Taneb> Hang on, I think I can remember titbits
13:34:13 <oklopol> boobits
13:34:13 <Taneb> Not very interesting ones
13:34:21 <Taneb> Mainly me being an idiot
13:35:07 <oklopol> oh and then i drew these cartoons where girls from the kindergarten would... wait let's not go into that
13:36:11 <oklopol> and then i convinced a guy there was this place where time would slow down the further you walked into this tunnel, and that i'd visited it by going through a door near the daycare. he later turned out to have epilepsy, coincidence?
13:36:54 <oklopol> damn i was awesome back then, what went wrong i wonder
13:39:00 <oklopol> then there were these rubber bands on the knobs of cupboards so us kids couldn't get in. i thought they were decorations, and would put the rubber bands back on if they had forgotten to put them there
13:39:30 <oklopol> the adults found this slightly hilarious
13:41:16 <oklopol> then in kindergarten, kids were playing power rangers, and i thought that was just childish. so this one time, i joined their little game and beat everyone up.
13:42:40 <oklopol> and in the first grade, kids were playing football (the one involving feet), and i picked the ball up. one of them came and asked me if they could have it back so they could keep playing. i kicked the guy in the nuts as hard as i could and kicked the ball out of the school yard
13:42:54 <oklopol> i was not playing myself ofc
13:43:20 <Taneb> First grade you was a dick
13:43:28 <oklopol> i was such a psychopath, they almost put me in this "special school"
13:44:53 <oklopol> and they almost transferred me straight to second grade since i was acting out because school was ridiculously easy. probably wouldn't have helped since if i found the slightest trouble solving a problem they gave us i would start crying and never stop.
13:45:14 <oklopol> i don't get how i wasn't put to sleep or something :D
13:46:38 <oklopol> and how the fuck did i have like 10 friends
13:46:51 <oklopol> kids are retarded
13:48:04 <Sgeo> I once saw a confidential letter (wait, now that I think of it, how does that make sense) by my dad complaining about one of the students almost killing another
13:48:37 -!- variable has quit (Quit: I found 1 in /dev/zero).
13:48:46 <oklopol> kids can't die
13:49:20 -!- nooga has quit (Ping timeout: 260 seconds).
13:52:02 <Taneb> Someone I know got run over by a car.
13:52:18 <oklopol> you mean just now, or a kid
13:52:30 <Taneb> 2 ish years ago
13:52:37 <Taneb> He experienced quantum immortality
13:52:40 <oklopol> but you mean a kid
13:52:52 <Taneb> He would have been 14
13:52:57 <Taneb> Maybe 15
13:53:02 <oklopol> that's not a kid
13:53:05 <oklopol> that's an adult
13:53:16 <Taneb> It's a transitionary phase
13:53:23 <oklopol> well true
13:53:41 <oklopol> by kid i mean sub-12 usually
13:54:06 <Taneb> God, do I remember sub-12?
13:54:19 <oklopol> i read my first c++ book when i was 11
13:54:33 <oklopol> and i still remember c++ so
13:54:33 <Taneb> 13
13:54:43 <Taneb> And I have no clue about C++
13:54:47 <Sgeo> I remember the nasty things I did when I was 13
13:54:57 <Taneb> Other than output is cout >> "string"
13:55:01 <oklopol> it was also prolly the first book over 600 pages i read
13:55:07 <oklopol> no it's not
13:55:08 <Sgeo> Taneb, it's <<
13:55:14 <Taneb> See!
13:55:14 <oklopol> but close enough
13:55:28 <Taneb> I don't have that great memory, at all
13:55:35 <oklopol> i don't think i was a dick anymore at 13
13:56:11 <Taneb> I did French for 6 years and all I can remember is "Bonjour. Ou est le W/C? Je voudrais une baguette!"
13:56:21 -!- variable has joined.
13:56:29 -!- nooga has joined.
13:56:49 <oklopol> that's not where you buy bread man
14:01:15 <oklopol> oh and i beat one guy up when i was 10 i think, but after that, i've only received beatings
14:01:44 -!- azaq23 has joined.
14:01:55 <Taneb> When I was little, I was a nice, if niave idiot
14:02:25 <Taneb> Now I'm a cruel but pacifistic idiot who knows some stuff
14:02:39 <oklopol> i was a devout preacher of atheism from the age of 5 till it became cool
14:04:22 <oklopol> yeah i find pacifism has little to do with how nice you actually are, i'm sure i'd love killing people, but i wouldn't really feel right say going to the army
14:05:03 <Taneb> I despise violence, but I'm practically a sociopath
14:05:31 <oklopol> that's how i feel as well
14:05:54 <oklopol> well i certainly have all kinds of feelings, but i can just shut them up if i like
14:06:40 <oklopol> my ex found this a bit weird, we would just be crying and talking about how we should prolly split up, and then after a while i'm like okay let's take a break and watch a tv show k?
14:13:40 <oklopol> or went to do math
14:14:11 <Taneb> math is the one Americanism that really bugs me
14:14:13 <oklopol> actually that doesn't sound weird at all, i guess you'd have to be there
14:14:15 <Taneb> I don't know why
14:14:59 <oklopol> the only americanisms that bug me are the units
14:15:16 <oklopol> and numbers ofc
14:15:52 <oklopol> thousand, 1-llion, 2-llion, 3-llion, 4-llion, ... vs 1-llion, 2-llion, 3-llion, 4-llion, ...
14:16:05 <oklopol> maybe illion would'be
14:16:11 <oklopol> ve been better
14:17:27 -!- nooga has quit (Ping timeout: 252 seconds).
14:20:25 -!- sllide has joined.
14:48:41 -!- augur has joined.
14:58:51 <zzo38> I once made a computer game, there is a journal you can read describing someone trying to use their telephone, but every number they pushed fell off upon being pushed.
15:00:51 <itidus20> was that just a part of the game?
15:00:55 <itidus20> sounds very cool
15:01:23 <zzo38> They were unable to complete the call due to duplicate digits (and did not think to call the operator), but if you go to the telephone repair shop you can find the broken telephone.
15:01:44 <itidus20> wow... sounds like a vast game
15:01:55 <zzo38> Together with the rules for telephone numbers in the area, you can deduce eight possible telephone numbers that they might have been trying to call.
15:02:18 <zzo38> And then you just have to try them until one works.
15:05:48 <zzo38> I forget the other details and how to find this game now, however.
15:09:09 <Taneb> I just made combinartory logic in BYOB
15:09:29 <Taneb> A modification of a graphical language aimed at children
15:09:39 <Taneb> That is, the graphical language is aimed at children
15:09:56 <Taneb> The modification is aimed at children who want more advanced features
15:10:18 <Taneb> Such as first-class functions
15:10:23 <Taneb> Procedures
15:10:29 <Taneb> Lists-of-lists
15:20:47 <zzo38> I have idea make up a reversible programming language used for compression. Input and output commands are reverse of each other if you "flip" in between their use. The compiled program can be a Huffman coded bitcode file.
15:25:43 <zzo38> It would also include one kind of user-definable pure function which does not reverse.
15:35:19 <zzo38> Flow control in I/O blocks could be restricted to something like Revaver2pi's TELEPORT command, although there might be others. Other kinds of blocks can have different kind of flow control possible.
15:35:44 <zzo38> It could do encryption too rather than only compression.
15:36:38 <cheater> hi zzo38 how are you doing?
15:36:40 <zzo38> How many kinds of reversible flow control do you know?
15:36:47 <zzo38> cheater: OK
15:36:53 <cheater> that's fine
15:37:00 <cheater> what is new with you?
15:39:03 <zzo38> I suppose not a lot, although I have done some experimentation with programming and proposal and stuff in Haskell, and I have updated some stuff I wrote about Dungeons & Dragons, and I have think about and write about some stuff about OMEGACOM-1.
15:41:06 -!- Patashu has quit (Quit: MSN: Patashu@hotmail.com , Gmail: Patashu0@gmail.com , AIM: Patashu0 , YIM: patashu2 .).
15:41:17 <itidus20> A game developer can derive a great deal of benefit from a custom made virtual machine.
15:42:17 <itidus20> I wish I could really say why...
15:43:53 <itidus20> if there is any global state to the game... that global state is to be embodied in the virtual machine
15:44:33 -!- Vorpal_ has changed nick to Vorpal.
15:44:37 <itidus20> for example.. (here he goes)
15:44:58 <zzo38> OMEGACOM-1 is designed to be an old-style computer that does not exist but can be emulated anyways. Its processor uses bytes that are sixteen bits long. Addresses are also sixteen bits long.
15:45:06 <itidus20> an arcade game virtual machine could contain coin and credit counters
15:45:25 <itidus20> oops ^embody
15:45:34 <zzo38> Game controllers similar to NES/Famicom could be connected to the extension ports.
15:45:35 <itidus20> "contain" is such peasant speak
15:46:31 <zzo38> Text adventure games are often written for Z-machine, which is also a virtual machine, which is designed for text adventure games.
15:47:09 <itidus20> is omegacom-1 your own invention?
15:47:36 <zzo38> (Usually using the Inform programming language, although some use Forth, Lisp, C, or assembly language.)
15:47:39 <zzo38> itidus20: Yes.
15:47:49 <itidus20> that explains it not being on google
15:48:43 <itidus20> yup i have heard of z machine for zork. and scumm(script something utility for maniac mansion) for maniac mansion, zac mccracken, monkey island, etc
15:49:43 <itidus20> and "another world" had some kind of vm which was talked about in a gdc (game develop conference) post mortem
15:51:16 <itidus20> zzo38: so i like to think my statement shows how much insight i am gathering about these things :D
15:51:35 <itidus20> <itidus20> if there is any global state to the game... that global state is to be embodied in the virtual machine <itidus20> an arcade game virtual machine could contain coin and credit counters
15:52:13 <itidus20> and hence a text game vm would contain/embody text i/o
15:52:47 <itidus20> i am quite proud of this minor insight, perhaps it is obvious
15:52:49 <zzo38> Inform can also target Glulx. I don't know if there are C compilers for Glulx, and I would like to be able to compile both LLVM and Haskell into Glulx.
15:53:01 <zzo38> itidus20: Well, it is good thanks you write these things anyways
15:53:30 <itidus20> zzo38: i have tried dreaming up some ultra simple systems
15:54:04 <itidus20> there was one which consisted of i think just 2 line segments
15:54:11 <itidus20> or may have been 4.. i forget
15:54:47 <itidus20> and thats all it can do.. display 2 line segments
15:55:08 -!- MSleep has changed nick to MDude.
15:55:27 <itidus20> not actually implemented
15:55:49 <itidus20> another i thought about is using a 32bit integer as a 4x8x1 display
15:56:15 <itidus20> i liked the idea that a screenshot of such a display is just a single number
15:56:42 <itidus20> i think i prefered the 6x5 resolution instead
15:56:53 <Gregor> Screenshots of any display are just a single number. Just bigger numbers.
15:58:14 <itidus20> heheh
15:58:25 <itidus20> bravo
15:59:11 <zzo38> Once I had idea, although I never implemented or even had many details figured out, but it is a 8 buttons, none of which can be pushed simultaneously, and a 8x8 monochrome ASCII display (no reverse video). But I realized to make the version of Pokemon Red/Blue games that could work on such a system.
16:00:00 <itidus20> hmm
16:00:04 <zzo38> It even requires less ROM and RAM than the actual Pokemon Red/Blue game; nicknames can be only two letters long, and there are no full Pokemon names, they only have numbers.
16:00:06 <itidus20> 8x8x8?
16:00:32 <itidus20> maybe you only need a subset of ascii
16:00:46 <itidus20> but i guess its no big deal
16:00:50 <zzo38> itidus20: It is using the printable subset.
16:00:59 <itidus20> :P
16:01:00 <zzo38> (Codes 0x20 to 0x7E)
16:01:25 <itidus20> in order to make more games with your system its probably best to use 8bits them
16:01:57 <itidus20> well, i look at a chessboard and i imagine scrolling
16:02:07 <zzo38> itidus20: Yes; but this was 7-bit codes.
16:02:35 <itidus20> i have imagined the poor humans who have to shift the pieces one row this way or that way
16:02:54 <zzo38> itidus20: You can make a chessboard on 8x8 display with printable ASCII, but no extra information would be displayed. You could use flashing for cursor.
16:03:43 <itidus20> uh.. im not sure if i am making sense..
16:03:52 <itidus20> suppose there is a 9x9 virtual chessboard
16:04:03 <zzo38> You could use uppercase for white pieces and lowercase for black pieces; this is common in ASCII chess diagrams.
16:04:06 <itidus20> you could lay out the pieces on the board according to the camera
16:05:40 <itidus20> "RkBQKBkR" >> "kBQKBkR "
16:05:51 <itidus20> "RkBQKBkR" << " RkBQKBk"
16:06:00 <itidus20> well that would be 10x10
16:06:19 <itidus20> 2 extra imaginary columns
16:06:22 <itidus20> empty
16:07:04 <zzo38> FIDE chess uses 8x8 though. You could have RNBQKBNR PPPPPPPP .:.:.:.: :.:.:.:. .:.:.:.: :.:.:.:. pppppppp rnbqkbnr
16:07:12 <itidus20> its a ridiculous idea of mine as you need to store the actual state of the board somewhere
16:08:23 <itidus20> but at least in a sparsely populated board a DM could use a chessboard to show hte player where he is
16:08:47 <itidus20> in a boring chesslike landscape
16:11:20 <itidus20> ah im going on a boring tangent
16:11:26 <zzo38> When playing D&D we always use graph paper if necessary to show positions. But you could have one 40x40 room involving chess.
16:11:28 <itidus20> your pokemon thing is much better
16:12:03 <zzo38> Yes. The pokemon thing. Attack names and item names are up to five letters long (they can have digits too).
16:13:14 <zzo38> I could fit all relevant information in battle on the 8x8 ASCII display. You used the direction buttons, up for one attack, down for another attack, left for another attack, right for an attack; other buttons means shift, item, or surrender.
16:13:18 -!- ive has joined.
16:13:30 <zzo38> Actually I think I could use only seven buttons, not eight.
16:13:35 <zzo38> For everything.
16:14:15 <itidus20> so yeah, for me the VM would do as much as possible natively as a kind of bios really
16:14:25 <zzo38> That means A is SHIFT, B is ITEM, and C is SURRENDER.
16:15:01 <itidus20> i can see how this would be a problem in the long run.. coders would want direct access to objects to do better effects
16:15:37 <zzo38> (SURRENDER is like "RUN" for wild battles, and "immediately get blacked out automatically" for trainer battles.)
16:15:43 <itidus20> like i could say "you can only put graphics in the game by loading bitmaps" they would then want the ability to access pixel memory
16:19:18 -!- Taneb has quit (Quit: Goodbye).
16:19:46 <zzo38> For battle screen, the first line tells you opponent's active pokemon number and level; second line opponent's active pokemon % of HP remaining, status, and how many opponent's inactive nonfainted pokemon remain (leave blank for wild pokemon); third line your active pokemon number, level, and nickname; fourth line your current/max HP and status; fifth, sixth, seven, and eighth lines for attacks.
16:20:06 <zzo38> Attacks indicate at first ^v<> for which direction to push, next five for attack name, and last two for remaining PP.
16:22:26 <itidus20> basically considering that any interpreted instructions are likely slower, you don't want people implementing anything technical in vm code
16:25:39 <itidus20> hmm
16:27:04 -!- derdon has joined.
16:32:01 -!- elliott has joined.
16:33:50 <elliott> 21:01:23: <ais523> hey, channel, want something to rage at? http://www.reddit.com/r/programming/comments/k9cbj/trollscript_an_esoteric_dialect_of_brainfuck/
16:33:54 <elliott> we saw ages ago :P
16:34:13 <zzo38> I had everything written. On the map where you can move and stuff, you activate objects by walking into them, not by pushing the "A" button. A is MONSTER, B is INVENTORY, and C is STATUS. The status menu had two pages, and was also the menu you used if you want to use HM moves.
16:34:28 <elliott> 21:43:22: <Phantom_Hoover> ais523, my faith in /r/programming is vastly increased by the fact that they hated it too.
16:34:37 <elliott> Phantom_Hoover: they probably aren't too fond of esolangs in general :P
16:35:21 <twice11> the how many'th brainfuck dialect is that?
16:35:29 <elliott> twice11: 9 billionth
16:35:44 <twice11> Still not aleph-0? fine then...
16:36:35 <zzo38> Make aleph-0 dialects if you want to.
16:36:41 <elliott> no please don't
16:36:57 <elliott> "Bitcoin Forum: Password hashes may have been leaked"
16:37:05 <elliott> l o l
16:37:13 <elliott> bitcoin PRO CRYPTOGRAPHERS
16:37:47 <twice11> how is cryptography related to IT security? The hashes *have* to be stored somewhere.
16:38:03 <Phantom_Hoover> elliott, well true, but their reasons for hating it were exactly the right ones.
16:38:03 <Phantom_Hoover> `quote
16:38:05 <HackEgo> 70) <Oranjer> oohhh <Oranjer> ha <Oranjer> heh <madbrain> and what are your other characteristics? <Oranjer> oh, many, madbrain <Oranjer> but it's hardly worth it to go on with listing that list here
16:38:26 <elliott> twice11: In my fanfiction, they were using crypt() to store their Unix passwords, and that's how the attacker got in.
16:38:47 <Phantom_Hoover> `quote
16:38:49 <HackEgo> 642) <ais523> this strikes me as probably better than a singularity, because you can't trust a random AI, but you can probably trust olsner
16:38:50 -!- Phantom_Hoover has quit (Quit: Leaving).
16:38:57 <elliott> wat
16:39:00 -!- Phantom_Hoover has joined.
16:39:02 <elliott> wat
16:39:13 <Phantom_Hoover> elliott, so wait, you knew and you didn't tell me?
16:39:31 <elliott> Phantom_Hoover: Knew what?
16:39:34 <elliott> Trollscript?
16:39:37 <elliott> It was talked about in here
16:39:42 <elliott> It's not my fault you don't logread
16:39:46 <Phantom_Hoover> I'm the premier world expert on hating BF derivatives and substitutions!
16:39:54 <twice11> bad web forums typically use MD5 hashes, albeit sometimes unhashed. Better forum products use salted SHA1...
16:40:23 <zzo38> I think I remember I once invented a chess variant with a googolplex kinds of pieces, or was it a chess variant schema defining a googolplex chess variants, etc, I don't quite remember. But I had proven that the number was exactly one googolplex.
16:40:47 <elliott> twice11: It's SMF, which I think is "meant" to be decent, but... well, PHP coders.
16:41:12 <twice11> I guess their server was compromised somehow...
16:52:32 -!- ive has quit (Ping timeout: 276 seconds).
16:52:40 -!- ive has joined.
16:55:13 -!- Taneb has joined.
16:55:44 <Taneb> Hello!
16:55:52 <zzo38> I updated proposal of more-notation; I added a note to tell you that you can use _ as names of parameters of a more-notation in a record syntax.
16:56:02 <Taneb> I'm going to try my hand at BytePusher
16:56:21 <zzo38> Taneb: Try doing what with it, specifically?
16:56:32 <Taneb> I really don't know
16:56:34 <elliott> handing it
16:56:46 <zzo38> Learn about it? Write an implementation? Write a program to run in BytePusher?
16:56:54 <Taneb> All three
16:56:58 <Taneb> Simultaneously
16:57:50 <itidus20> im reading DM's piet samples page. its truely amazing what has been accomplished with it i think
16:57:53 <zzo38> If you make an implementation which programming language and libraries would you use? For writing programs running in BytePusher, which programming languages would you use to make tat?
16:58:08 <zzo38> s/make tat/make that/
16:58:13 <Taneb> Former, I have no idea
16:58:21 <Taneb> Latter, probably gedit
16:58:41 <Taneb> Not actually sure what format BytePusher likes
16:58:53 <zzo38> No, I mean which programming language. Such as C, Python, PUSHEM, hex editor, ...
16:58:53 <elliott> it's binary
16:59:19 <Taneb> zzo38: hex editor
16:59:23 <zzo38> Or you could also write your own assembler or programming language to compile into it
17:00:05 <Taneb> I could write a tool to translate ASCII representation of Hex into Hex... in BRAINFUCK
17:00:22 <Vorpal> elliott, hi there. Played any Magicka? Quite a fun game.
17:01:00 <Taneb> What is the program counter initially?
17:01:05 <elliott> nope
17:01:33 <Taneb> Oh wait, I've figured it out
17:01:34 <elliott> maybe i should but BLAH DWARF FORTRESS AND MCMAP CODING ARE THE ONLY GAMES
17:01:38 -!- Lymee has quit (Read error: Connection reset by peer).
17:01:41 <Taneb> That's tricky
17:01:49 <Taneb> But surprisingly logical
17:02:21 <zzo38> I wrote this BytePusher program: http://zzo38computer.cjb.net/prog/BytePusher/Munching_Squares.pushem
17:03:23 <Phantom_Hoover> elliott, have you seen the Yogscast Magicka videos
17:03:26 <zzo38> The binary of the program is: http://zzo38computer.cjb.net/prog/BytePusher/Munching_Squares.BytePusher
17:03:27 <Phantom_Hoover> They are the best.
17:03:57 -!- Lymee has joined.
17:04:36 <zzo38> I also wrote a BytePusher implementation (the first one available public, but not the first one written) in CWEB.
17:04:54 <elliott> Phantom_Hoover: No I am so behind on my yagsoccost.
17:05:02 <elliott> Yoghurt.
17:07:03 <zzo38> There are now three implementations of BytePusher. If you write one, add that one too!
17:07:27 -!- kmc has quit (Quit: Leaving).
17:07:41 <zzo38> All three of them are C programs, two using Allegro and one using SDL.
17:08:45 <zzo38> If you make a hardware implementation, you can post that too.
17:12:00 <elliott> enhanced cweb is c?
17:14:05 <zzo38> Enhanced CWEB is a format that has C codes, so the C codes can be compiled by a C compiler once tangled.
17:14:38 <elliott> lots of things compile to c
17:15:19 <elliott> 10:24:47: <Taneb> I am trying to avoid monads, mainly because I haven't learnt them yet
17:15:44 <Taneb> I think I'm getting closer to monads
17:15:47 <elliott> Taneb: monads aren't A Thing to avoid, they're just two functions that a lot of types happen to implement
17:16:02 <elliott> please, stop thinking like that, WAY too much importance is put on monads by people who don't know Haskel
17:16:16 <elliott> it's like "I'm avoiding <specific library function> because I don't know it yet"
17:16:20 <twice11> Taneb: You should read the guide "You could have invented monads yourself, and you most likely already have", in my oppinion.
17:16:23 <elliott> you just learn things whenever they become convenient to use
17:16:41 <elliott> twice11: do we really need a monad tutorial war? :p
17:16:50 <Taneb> I'm working through lyah
17:17:42 <twice11> I'm not entering a war. I'm not fighting other monad tutorials.
17:18:43 <zzo38> What I mean is, the codes in @c blocks and named chunks are C codes, although they can also reference other named chunks, and can include formatting codes. In standard CWEB that is basically all of it. In Enhanced CWEB, you can do that too (and BytePusher.w uses no extensions other than @r and @s !), but you can also have @{ ... @} (interpreted blocks), @m (metamacros), and more.
17:18:50 <elliott> twice11: I am!
17:18:54 <elliott> Nuclear waste or DIE.
17:19:12 <zzo38> Neither @r nor @s ! are needed for tangling though. You might get error message but it will compile correctly anyways.
17:19:42 <twice11> Ask the japanese guys: Nuclear waste *and* die!
17:20:08 <zzo38> "@s TeX !" means to not index anything defined using @s before this point
17:21:56 <zzo38> These things are what I meant when I said it is a C code.
17:21:58 <elliott> 12:19:20: <oklopol> the perfect place for backspace is see typematrix.com
17:21:59 <elliott> 12:20:21: <monqy> ah, yes
17:21:59 <elliott> 12:20:34: <monqy> I should get one of those
17:22:08 <elliott> unfortunately they're scissor-switch.
17:22:13 <elliott> you can buy non-slanted keyboards with decent switches, though.
17:29:04 <oklopol> what's scissor switch
17:30:04 <oklopol> or what's the problem with it
17:30:23 <twice11> It's not buckling spring, I guess.
17:31:04 <oklopol> so the touch is bad? i've only used laptops in the last many years so i don't really notice anything wrong
17:31:19 <elliott> oklopol: scissor switch = laptop-style keys
17:31:24 <elliott> better than rubber dome but
17:31:29 <elliott> twice11: buckling spring is overrated
17:31:36 <oklopol> yes, i know
17:31:38 <elliott> i mean, unless you have pneumatic fingers it's not very comfortable
17:31:51 <elliott> oklopol: get one of these http://upload.wikimedia.org/wikipedia/en/8/8c/Kinesis-keyboard.jpg :P
17:32:00 <elliott> i think they have dvorak switches too but who cares you can do that in software
17:32:31 <oklopol> much nicer if it's in the kb tho
17:32:39 <oklopol> but umm that's a bit ugly
17:32:47 <elliott> they come in black :D
17:32:49 <twice11> So if rubber dots are out, buckling spring is overrated, and scissor switch is also "unfortunately", what would you recommend? Microswitch?
17:32:55 <oklopol> let's see
17:33:08 <elliott> twice11: standard mechanical switch?
17:33:40 <oklopol> this is certainly nicer than the usual type of keyboard in touch
17:33:41 <elliott> oklopol: http://kinesis-ergo.com/images/kb_adv-blk720x471.jpg http://kinesis-ergo.com/images/kb_adv-pro_met720x471.jpg ok those are still pretty ugly
17:33:45 <twice11> That's mostly is what you call microswitch, if the keyboard is smaller than your desk, isn't it?
17:33:49 <elliott> no slanted rows though :P
17:33:57 <elliott> twice11: Who the hell buys a keyboard smaller than their desk?
17:34:04 <elliott> I just kind of roll from one key to another.
17:34:07 <elliott> It's like a bouncy castle.
17:34:10 <oklopol> well i wouldn't call that pretty nor ugly
17:34:18 <oklopol> whereas my typematrix is just plain fucking sexy
17:34:29 <elliott> Get a Datahand, Datahands are awesome.
17:34:40 <elliott> http://desktopped.s3.amazonaws.com/wp-content/uploads/2009/09/datahand-keyboard.jpg
17:34:56 <oklopol> oh that thing, i have certainly considered that
17:34:57 <elliott> you just flick your fingers around... it also has a pointing device built in, i don't remember how it works though
17:35:04 <oklopol> but it costs like a million right
17:35:22 <elliott> they stopped producing them... maybe they started again
17:35:25 <elliott> "We are currently out of stock and awaiting delivery of DataHand Pro II units ... our supplier has had difficulty moving to a new facility which has delayed our production...we will post the schedule as soon as it is known, in the interim, please contact DataHand sales at sales@datahand.com."
17:35:33 <elliott> i think its like a thousand bucks though
17:35:39 <elliott> Professional II-USB Mouse
17:35:39 <elliott> $995.00
17:35:39 <elliott> Buy Now
17:35:42 <elliott> less :D
17:35:52 <oklopol> yeah not really feeling like spending another thousand right away
17:36:03 <elliott> another? :p
17:36:16 <oklopol> well a third one within 30 days
17:36:40 <elliott> twice11: Topres are kind of cool but that's really just a combination of switches.
17:36:50 <twice11> come on, is there anything more important than keyboards?
17:37:05 <elliott> I forget the exact construction... it's something like a rubber dome with a buckling spring underneath it and a mechanical switch above it.
17:37:06 <oklopol> no
17:37:15 <Vorpal> elliott, what? $995 for a MOUSE?
17:37:15 <elliott> I think velvet is involved somewhere, but that might just be my imagination.
17:37:15 <Vorpal> what
17:37:22 <elliott> twice11: This isn't exactly the channel for important things.
17:37:28 <elliott> Vorpal: No, a typing and pointing device.
17:37:34 <elliott> http://desktopped.s3.amazonaws.com/wp-content/uploads/2009/09/datahand-keyboard.jpg
17:37:41 <elliott> It uses MAGNETS.
17:37:51 <Vorpal> how does it, erm, work?
17:37:59 <oklopol> there was a 3d mouse that was 400
17:38:02 <Vorpal> it certainly looks futuristic though
17:38:06 <elliott> You put your hands in those little dimple things, and push up/down/left/right/downwards to type.
17:38:12 <elliott> They use really light magnets or something.
17:38:14 <twice11> As keyboard are as important as I expect, the problem was spending $1k on two other things, but not for the keyboard...
17:38:23 <elliott> There's also a pointing thing, I think that's where the thumbs go, but I dunno how it works.
17:38:36 <oklopol> twice11: those two other things were my first real computer in years
17:38:37 <elliott> twice11: Oh, I misread the line.
17:38:38 <Vorpal> elliott, wow. Is it any good?
17:38:44 <oklopol> including a keyboard
17:38:46 <elliott> I thought you were complaining about all this unimportant keyboard talk. :p
17:39:23 <Vorpal> I wouldn't spend 1k on a keyboard.
17:39:26 <elliott> Vorpal: Well, I gather it's as ergonomic as they come. I can't imagine it'd be any less efficient than a keyboard with practice, although maybe if you type a bunch of punctuation and modifier keys it might be inconvenient? Dunno.
17:39:36 <elliott> I think some users use foot pedals for ctrl and alt.
17:39:41 <Vorpal> elliott, so not for C coding?
17:39:43 <Vorpal> or gaming
17:39:43 <oklopol> if i had an extra thousand, i would buy all the keyboards.
17:39:56 <elliott> Vorpal: I meant a _lot_ of punctuation.
17:40:05 <Vorpal> elliott, oh, mkry?
17:40:07 <elliott> Like if your job was to write comic expletives all day.
17:40:25 <elliott> But I haven't really hard anything bad about them apart from, you know, the price. :p
17:40:35 <elliott> http://elitekeyboards.com/images/topre_keysw.png
17:40:37 <elliott> This is how topres work.
17:40:51 <elliott> The springs look cool: http://scalable.com/conversation/wp-content/uploads/2010/02/topre.jpg
17:40:54 <Vorpal> elliott, with work I meant more like, how do you use them
17:41:03 <Vorpal> yes kind of
17:41:10 <elliott> Vorpal: <elliott> You put your hands in those little dimple things, and push up/down/left/right/downwards to type.
17:41:10 <elliott> <elliott> They use really light magnets or something.
17:41:19 <elliott> DataHand =/= Topre, I'm talking about two things at once.
17:41:24 <Vorpal> elliott, yeah, right, but shift? and so on
17:41:33 <Vorpal> emacs might be painful with it too
17:41:42 <elliott> Not with foot pedals it wouldn't.
17:41:50 <elliott> http://www.atpm.com/7.05/images/dh-right-wells.jpg
17:41:55 <elliott> This bigger image of a datahand might answer your questions.
17:42:11 <Vorpal> hm yeah
17:42:15 <Vorpal> what does NAS stand for?
17:42:20 <elliott> nfc
17:43:19 <oklopol> separately moving my fingers in all four directions sounds a bit strainy, but maybe it's actually nice enough
17:43:30 <fizzie> Vorpal: It's related to the numeric mode, or something.
17:43:35 <Vorpal> ah
17:43:37 <elliott> I gather the switches are very light.
17:43:43 <elliott> Hey, fizzie probably knows more about them than me. :p
17:43:46 <fizzie> (I was taking a peek at the http://www.datahand.com/pdfs/ProIIUserGuide.pdf )
17:43:47 <Vorpal> I can imagine it would have to be
17:43:49 <elliott> At least he answered that ONE QU- oh.
17:44:00 <Vorpal> fizzie the human search engine
17:44:23 <Vorpal> elliott, anyway, have you played Magicka?
17:44:23 <fizzie> Numbers And Symbols, maybe?
17:45:08 <elliott> Vorpal: I answered that.
17:45:13 <elliott> (The answer is no.)
17:45:16 <elliott> Should I?
17:45:25 <Vorpal> elliott, well maybe. It is quite fun.
17:46:08 <Vorpal> elliott, it is however yet another indie game from Sweden
17:46:25 <elliott> God I hate Swedes.
17:47:03 <elliott> The DataHand® System plugs into all personal computers (ATs and newer)
17:47:03 <elliott> and compatibles, without the need for additional hardware or software. The
17:47:03 <elliott> following computers are also supported:
17:47:03 <elliott> · Apple Macintosh, with an adapter for the Apple Desktop Bus (ADB) or
17:47:03 <elliott> Universal Serial Bus (USB)
17:47:04 <elliott> · Hewlett Packard X-Terminal
17:47:06 <elliott> · IBM PS/2
17:47:06 <Vorpal> elliott, why? The voice acting is funny, it is in some invented language with English and Swedish phrases mixed in.
17:47:08 <elliott> · IBM RS6000
17:47:10 <elliott> · IBM 3270 mainframes
17:47:12 <elliott> · NCD 101 X-Terminal
17:47:14 <elliott> · Silicon Graphics’ Indy and Indigo II (currently being tested)
17:47:16 <elliott> · SUN (usable type-5 keyboard using SUN’s interface converter)
17:47:18 <elliott> Heh.
17:47:20 <elliott> Vorpal: FUUUUUCK SWEEEEEEEEEEDES
17:47:28 <elliott> "Utilyzing" -- this manual's spelling sure is OPTOMIZED.
17:47:44 <Vorpal> elliott, that is quite a list of weird and obsolete connectors
17:48:11 <Vorpal> I mean no one really cares about anything but USB these days.l
17:49:03 <elliott> it's an old product
17:49:08 <elliott> thus the amusingness
17:49:11 <Vorpal> ah
17:49:40 <itidus20> i found a nice(but fairly long) quote
17:50:09 <itidus20> 'There is a vitality, a life force, an energy, a quickening that is translated through you into action, and because there is only one of you in all of time, this expression is unique. And if you block it, it will never exist through any other medium and it will be lost. The world will not have it. It is not your business to determine how good it is nor how valuable nor how it compares with other expre
17:50:09 <itidus20> ssions.
17:50:14 <itidus20> It is your business to keep it yours clearly and directly, to keep the channel open. You do not even have to believe in yourself or your work. You have to keep yourself open and aware to the urges that motivate you. Keep the channel open. ... No artist is pleased. [There is] no satisfaction whatever at any time. There is only a queer divine dissatisfaction, a blessed unrest that keeps us marching and
17:50:14 <itidus20> makes us more alive than the others.'"
18:06:48 -!- Taneb has quit (Read error: Connection reset by peer).
18:07:32 <twice11> elliott: Do you have any specific reason to prefer the atomic waste tutorial?
18:08:16 <elliott> twice11: I don't believe there is a real atomic waste tutorial, just a gag.
18:08:28 <twice11> There is.
18:08:35 <elliott> Wow.
18:08:44 <twice11> It even is one of the "classical" tutorials.
18:08:59 <twice11> http://en.wikibooks.org/w/index.php?title=Haskell/Understanding_monads&oldid=933545
18:09:06 <elliott> I'm kind of glad I know less about monad tutorials than I thought.
18:09:31 <twice11> http://www.haskell.org/haskellwiki/Monad_tutorials_timeline is more than you ever wanted to know
18:09:37 <elliott> Yeah, I just found that.
18:10:02 <elliott> "The most recommended Haskell tutorial ever." I wonder if LYAH has overtaken that yet.
18:10:45 <twice11> I didn't read monad tutorials since years.
18:11:05 <twice11> Maybe I should read the lyah one to know what's currently "in".
18:12:20 <elliott> I think it's just a chapter on them in the context of a larger tutorial.
18:12:25 <elliott> Certainly it comes after applicative functors, which is nice.
18:12:34 <twice11> Yes. Also linked from that timeline.
18:12:41 * Sgeo vaguely remembers the atomic waste tutorial
18:13:13 <twice11> And maybe I should read the "applicative functors" tutorial more urgently than the monad tutorial.
18:13:19 <Phantom_Hoover> I like the monadsplosion in 2006.
18:13:34 <elliott> Suddenly EVERYONE was asking what a monad was.
18:13:44 -!- nooga has joined.
18:13:51 <elliott> ("was"; we revised the definition in two thousand and twelve to include Applicative as a superclass.)
18:14:26 <Phantom_Hoover> "This delightful "tutorial" presents monads as monsters which devour values, use them to feed other monsters and regurgitate them when slain."
18:14:49 <twice11> "There's a monster in my Haskell"?
18:14:59 <twice11> (OK, admit, read that title some hours ago)
18:15:30 <elliott> When the moon hits your eye like a big pizza pie, that's a monad.
18:15:55 <elliott> OK that was brilliant I need recognition for tat.
18:15:56 <elliott> that.
18:16:02 * Sgeo clap
18:16:30 <Sgeo> Sound of one hand clapping
18:22:40 -!- Zuu has quit (Read error: Connection reset by peer).
18:23:57 -!- oerjan has joined.
18:27:07 <oklopol> voice acting in a game? grow up
18:27:43 -!- Zuu has joined.
18:34:01 -!- cheater has quit (Ping timeout: 240 seconds).
18:36:53 <Gregor> Phantom_Hoover: Sort of a monadic human centipede.
18:41:21 <itidus20> why are happy languages like c# and c++11 veering towards lambda :-?
18:41:38 <elliott> "Happy" languages?
18:41:47 <elliott> C# has had lambdas for years.
18:41:51 <itidus20> yeah
18:41:56 <elliott> What does happy language mean
18:41:58 <itidus20> but why
18:42:11 <elliott> What does happy language mean
18:42:26 <Gregor> I can only assume that "happy" is a euphemism for "terrible" here
18:42:32 <itidus20> haha.
18:42:34 <oerjan> `addquote <Gregor> Phantom_Hoover: Sort of a monadic human centipede.
18:42:36 <HackEgo> 649) <Gregor> Phantom_Hoover: Sort of a monadic human centipede.
18:43:27 <itidus20> oh nevermind wiki answered
18:43:30 <oerjan> itidus20: because every language which doesn't have lambda feels arbitrarily restricted.
18:43:42 <itidus20> big post here sadly
18:43:46 <itidus20> "In C++03, particularly when used with C++ standard library algorithm functions such as std::sort and std::find, users will often wish to define predicate functions near the place where they make the algorithm function call. The language has only one mechanism for this: the ability to define a class inside of a function. This is often cumbersome and verbose, and it interrupts the flow of the code. Add
18:43:46 <itidus20> itionally, C++03's rules for classes defined in functions do not permit them to be used in templates, so using them is simply not possible."
18:45:37 <itidus20> "The return type can be omitted only if the lambda function is of the form return expression (or if the lambda returns nothing)." -- when does it not. haha.
18:46:10 <oerjan> 16:36:35: <zzo38> Make aleph-0 dialects if you want to.
18:46:11 <oerjan> 16:36:41: <elliott> no please don't
18:46:20 <oerjan> shouldn't be too hard.
18:47:00 <itidus20> maybe 5 is not an expression
18:47:11 <elliott> itidus20: What does happy language mean
18:47:11 <oerjan> brainfuck-n: like brainfuck, except > means go right n steps instead of 1. q.e.d.
18:47:25 <elliott> oerjan: nooooooooo
18:47:26 <itidus20> <Gregor> I can only assume that "happy" is a euphemism for "terrible" here
18:48:30 <itidus20> happy basically means 'mostly' imperative
18:48:30 -!- sebbu2 has joined.
18:48:39 <elliott> How's that related to happiness
18:48:45 <elliott> Those two languages are mostly OOP
18:48:50 <elliott> Not procedural
18:48:52 <elliott> Though they are imperative
18:49:15 -!- sebbu has quit (Ping timeout: 252 seconds).
18:49:51 <itidus20> maybe if i actually understood any of this stuff i might change my mind
18:51:12 <oklopol> i understand only one thing
18:51:13 <zzo38> I was going to make a computer, I will if I have the stuff to do so, I plan it include BASIC and Forth built-in. For commands OPEN LOAD SAVE COPY DISPLAY should support these URI schemes I think (I might expand or reduce the list later): h o s x tape ftp http gopher telnet sprunge
18:51:33 <oerjan> is itidus20 the anthropomorphic personification of the dunning-kruger effect? watch the next episode of # e s o t e r i c
18:51:49 <zzo38> Where h means hard drive, o means optical drive, s means saver directory, and x means external devices and Plan 9 protocol.
18:52:21 <itidus20> i considered making a cpu which implements haskell_without_monads machine
18:53:05 -!- cheater has joined.
18:53:14 <elliott> So it's Haskell, but without one arbitrary typeclass that can be defined identically by any user?
18:53:25 <itidus20> it doesn't actually have any instuctions i think
18:53:48 <zzo38> itidus20: It doesn't need monads, as long as there is something representing system access
18:53:50 <itidus20> its like a blank dictionary entry
18:54:27 <zzo38> Probably in a CPU, you would not represent system access by monads anyways; you should implement the monads to access them as a Haskell program.
18:54:54 <zzo38> (Or even something else; monads are not required.)
18:55:40 <itidus20> the cpu only exists if there is something for it to do
18:55:59 <itidus20> shrugs
18:57:30 -!- ais523 has joined.
18:58:15 <oerjan> Phantom_Hoover: you can now hate me infinitely much, yay
18:58:45 <Phantom_Hoover> Yay?
18:58:59 <oerjan> IT IS AN OPPORTUNITY
18:59:20 <Phantom_Hoover> oerjan, YOU ARE SCUM DIE DIE DIE
18:59:33 <oerjan> waaaaaaaah
19:00:27 <itidus20> is it best to understand any lambda expression as a machine?
19:00:52 <Phantom_Hoover> no
19:00:54 <Phantom_Hoover> as a bird
19:00:59 <itidus20> by machine i mean (input|process|output)
19:01:11 <itidus20> oops no thats not what i mean
19:02:08 <itidus20> sorry the regular expression is too tough to figure out
19:02:34 <zzo38> It doesn't have to be a regular expression
19:03:08 <itidus20> by machine i mean, a combination of inputs, processes and outputs which have at least one input, process or output
19:03:26 <oerjan> expression = /\ variable expression | ( expression expression ) | variable
19:03:53 <itidus20> eg. "input" is a machine, "process" is a machine, "output" is a machine", "input process" is a machine, "input process output" is a machine
19:04:08 <itidus20> i dont know how to say this as a regex
19:04:11 -!- azaq231 has joined.
19:04:13 <zzo38> OK
19:04:34 <itidus20> just an arbitrary definition..
19:04:41 <itidus20> for the scope of what i am trying to say
19:05:16 <oerjan> itidus20: i don't think lambda expressions really distinguish process from output
19:05:43 <itidus20> in that, if a lambda expression is not reciving input, or processing something, or outputting something, then it is waiting to input or process or output something
19:06:21 <zzo38> Is my proposal of more-notation in Haskell good now? I can improve it if you tell me anything wrong with it
19:06:23 -!- azaq23 has quit (Ping timeout: 260 seconds).
19:07:00 <itidus20> ok like for example.. can i construct a lambda expression which represents an adding machine?
19:07:25 <elliott> itidus20: lambda expressions have no notion of "time".
19:07:29 <itidus20> then plug in 2 inputs and an output
19:08:43 <zzo38> I suppose it could also be a state machine, where the outputs represent the output value, how it expects next input, and next state.
19:09:56 <itidus20> a function might be of the type: output (input1, input2)
19:11:26 <itidus20> z = f(x,y)
19:12:10 <itidus20> z = f(x,y) = x + y
19:12:15 <itidus20> that trips me right out
19:13:34 <itidus20> you would have to graph it in 3 dimensions
19:14:51 -!- Taneb has joined.
19:14:57 <Taneb> Hello!
19:16:52 <itidus20> (0,0,0) (0,1,1) (1,0,1) (1,1,2)
19:17:34 <zzo38> f = uncurry (+)
19:17:39 <oerjan> itidus20: addition in lambda calculus using church numerals is (haskell syntax): \m -> \n -> \f -> \x -> m f (n f x)
19:17:49 <itidus20> im confusing myself
19:17:56 <itidus20> is addition a curve in 3d space?
19:18:00 <oerjan> or \m n f x -> m f (n f x) even short
19:18:07 <oerjan> itidus20: a surface
19:18:36 <itidus20> is it flat?
19:18:46 <oerjan> z = x + y is a plane, so flat yes
19:19:17 <oerjan> *+er
19:19:47 <itidus20> and what if you warp that plane in 4d? haha
19:20:04 <zzo38> Is there a function existing in Haskell having that definition already?
19:20:16 <oerjan> itidus20: i find it mind-boggling that this boggles your mind
19:20:17 <zzo38> (I mean the addition of church numerals)
19:20:40 <elliott> oerjan: everything boggles your mind when you try to invent everything from scratch rather than learning
19:20:49 <oerjan> @pl \m n f x -> m f (n f x)
19:20:49 <lambdabot> liftM2 (.)
19:21:03 <zzo38> OK
19:21:12 <oerjan> zzo38: well that's pretty short if not a named function
19:21:46 <zzo38> Of course you can name it if you want to, and make a library using that
19:22:27 <zzo38> Possibly with a symbol name so that you can use it as an operator
19:22:37 <itidus20> nevermind... i am only lost in confusion
19:22:39 <oerjan> itidus20: that 3d/4d stuff is afaict pretty basic calculus + analytic geometry
19:23:04 <oerjan> or linear algebra, take your pick, they both give perspective
19:23:49 <elliott> 22:41:55: <oklopol> naive exploration is fun but there's a rich theory you should look into first, your ideas will become richer as wekk.
19:23:49 <elliott> 22:41:58: <oklopol> *well
19:23:49 <elliott> i find this pertinent
19:24:09 <itidus20> im only confusing myself :P
19:24:31 <elliott> yes, that is indeed how you learn things
19:24:45 <zzo38> I think multiplication would then be (.) and power is (flip id)
19:24:51 <oerjan> well reinventing stuff yourself is fun, but you need enough skill at the underlying level
19:24:52 <elliott> as opposed to someone who gave up whenever they went outside the boundaries of their existing knowledge. they would never learn anything, but I cannot for the _life_ of me think of an example of such a person.
19:25:27 <itidus20> i wonder what Also is like as a thinker
19:25:35 <oerjan> zzo38: yes.
19:28:06 <oerjan> @pl \m f x -> m f (f x)
19:28:07 <lambdabot> ((.) =<<)
19:28:15 <oerjan> @pl \m f x -> f (m f x)
19:28:16 <lambdabot> ap (.)
19:28:26 <oerjan> increment.
19:29:25 <oerjan> decrement is left as an exercise for the reader *runs away*
19:30:04 <elliott> ap :(
19:30:09 <elliott> ((.) <asterisk>) is not nicer though :P
19:30:31 <itidus20> well i stopped worrying and started trying to deal with anxiety that abstract ideas gives me
19:30:47 <elliott> ?pl \m n f x -> m (n f) x
19:30:47 <lambdabot> (.)
19:30:52 <elliott> oerjan: whoaaaaaaaaaaaaaahhhhhhhhhhh
19:30:58 <elliott> it's just like underload :DDDDDDDDDddddddddddd
19:31:10 <oerjan> elliott: zzo38 already mentioned that
19:31:24 <oerjan> and i nearly mentioned underload as response, so yeah
19:31:37 <elliott> ?pl \m n -> n (\n f x -> m (n f) x) 1
19:31:37 <lambdabot> flip flip 1 . flip id . const . (. join id)
19:31:40 <elliott> NO
19:31:42 <elliott> EXPONENTIATION SHOULD BE PRETTY
19:31:45 <elliott> WHY WONLT; YOU PBE PRETTY
19:31:56 <elliott> now we just need to find how that relates to underload function calls :P
19:32:17 <elliott> ?pl \n f x -> n (\g h -> h (g f)) (\u -> x) (\u -> u)
19:32:17 <lambdabot> flip flip id . (flip .) . flip flip const . ((.) .) . (. ((flip id .) . flip id))
19:32:21 <elliott> ?pl \n f x -> n (\g h -> h (g f)) (const x) id
19:32:22 <lambdabot> flip flip id . (flip .) . flip flip const . ((.) .) . (. ((flip id .) . flip id))
19:32:24 <elliott> :(
19:32:31 <elliott> oh wait that's just predecessor
19:32:34 <elliott> time for SUBTRACT
19:32:44 <elliott> ?p\m n -> (n (\n f x -> n (\g h -> h (g f)) (const x) id)) m
19:32:44 <lambdabot> (line 1, column 3):
19:32:44 <lambdabot> unexpected ">" or "-"
19:32:44 <lambdabot> expecting variable, "(", operator or end of input
19:32:52 <elliott> ?p\m n -> (n (\n f x -> n (\g h -> h (g f)) (const x) id) m
19:32:52 <lambdabot> (line 1, column 3):
19:32:52 <lambdabot> unexpected ">" or "-"
19:32:52 <lambdabot> expecting variable, "(", operator or end of input
19:32:56 <elliott> ?p\m n -> n (\n f x -> n (\g h -> h (g f)) (const x) id) m
19:32:57 <lambdabot> (line 1, column 3):
19:32:57 <lambdabot> unexpected ">" or "-"
19:32:57 <lambdabot> expecting variable, "(", operator or end of input
19:33:00 <elliott> ?pl \m n -> n (\n f x -> n (\g h -> h (g f)) (const x) id) m
19:33:01 <lambdabot> flip ($ const (flip flip id . (. const) . ap id ((flip id .) . flip id)))
19:33:04 <elliott> oerjan:SO BEAUTIFUL
19:33:22 <elliott> ?pl \n -> n (const const) (flip const)
19:33:22 <lambdabot> flip ($ const const) (const id)
19:33:24 <elliott> heh
19:37:07 <oerjan> <elliott> WHY WONLT; YOU PBE PRETTY
19:37:22 -!- kmc has joined.
19:38:42 <oerjan> @pl \m n f x -> n m f x
19:38:42 <lambdabot> flip id
19:38:46 <oerjan> as zzo38 said
19:39:39 <oerjan> also i suspect most of this is mentioned on madore's unlambda page
19:39:40 <elliott> oh is that exponentiation?
19:39:45 <elliott> someone fix the wikipedia article to have the nicer :(
19:40:42 <oerjan> :t \n f x -> n (\g h -> h (g f)) (\u -> x) (\u -> u)
19:40:43 <lambdabot> forall t t1 t2 t3 t4 t5 t6. (((t -> t2) -> (t2 -> t3) -> t3) -> (t4 -> t1) -> (t5 -> t5) -> t6) -> t -> t1 -> t6
19:41:25 -!- saptarshi7sinha has joined.
19:41:27 <zzo38> Yes, (flip id) is exponentiation; which is I already describe it. And (.) is multiplication
19:41:46 <oerjan> elliott: is that decrement from wikipedia too?
19:41:50 <elliott> oerjan: yes
19:42:15 <saptarshi7sinha> anyone there/
19:42:18 <saptarshi7sinha> ?
19:42:22 <elliott> no
19:42:30 <elliott> what's your favourite esolang?
19:42:35 <elliott> brainfuck? intercal? underload?
19:42:41 <elliott> saptarshi7sinha? :)
19:42:49 <saptarshi7sinha> fuck!
19:42:52 <saptarshi7sinha> i guess!
19:43:04 <ais523> is that like brainfuck without the brains?
19:43:23 <saptarshi7sinha> :)
19:43:25 <oerjan> ais523: hm, sounds like another derivative in the making
19:43:43 <elliott> fuck is brainfuck but without the []
19:43:56 <ais523> oerjan: there's already fuckfuck, which is just a swap of commands for swearwords
19:43:57 <oerjan> elliott: hey stop precisely reading my mind
19:43:59 <saptarshi7sinha> yeh..slangs do have a lot of derivatives!
19:44:00 <ais523> elliott: a bit like deadfish, then?
19:44:13 -!- saptarshi7sinha has left.
19:44:18 <elliott> there we go
19:44:30 <elliott> my new method for driving away the mislead works perfectly
19:44:49 <elliott> and /probably/ wouldn't drive away anyone who was in the right place
19:44:51 <oerjan> ais523: bf without [] still would require many memory cells
19:45:22 <oerjan> elliott: let me guess, the indian-sounding name made you suspicious too?
19:45:32 <ais523> oh right
19:46:09 <zzo38> ais523: Well, not necessarily swearwords; swearwords just happen to fit the required template. The template only requires a four-letter word with the specific first and last letter; the second and third letter can be whatever you want it to be.
19:46:16 <elliott> oerjan: well maybe. but that's horrible :P
19:46:24 <oerjan> except the 7 might indicate a chinese tone. but mandaring has only 4. cantonese has more, and also more final consonants
19:46:25 <elliott> "anyone there/" was what made me decide to try it
19:46:32 <oerjan> *mandarin
19:46:38 <elliott> s/horrible/awful/
19:47:02 <twice11> The upper bound of the required tape length in "fuck" seems to be much easier to determine than in brainfuck.
19:47:38 <elliott> constant-time, even :P
19:47:42 <oerjan> does anyone here know if saptarshi7sinha means something in cantonese?
19:47:49 <zzo38> twice11: Well, yes. Brainfuck without [] you can easily determine of course
19:48:07 <twice11> elliott: Only if you have a constant time length operation.
19:48:20 <twice11> So yes for files. No for programs received from a TCP stream.
19:48:31 <oerjan> hm is on twitter
19:49:01 <elliott> twice11: oh hm right
19:49:13 <oerjan> ...twitter claims i don't have javascript enabled and refuses to load :(
19:50:00 <Vorpal> twice11, that isn't true for files. Consider /dev/ttyS0 for example
19:50:14 <twice11> Vorpal: That's a *device*.
19:50:19 <ais523> "yes for regular files", I think is what twice11 meant
19:50:28 <elliott> oerjan: what IE are you on nowadays? :P
19:50:29 <Vorpal> twice11, it is a file. You meant a "regular file or block device" I presume
19:50:36 <Vorpal> ais523, you forgot block devices there
19:50:48 <Vorpal> pretty sure there is an ioctl for them
19:50:49 <ais523> actually, I'd call the device 4,6 and say that /dev/ttyS0 is just a pointer to it
19:51:06 <oerjan> elliott: 8, the highest which works on XP afaik
19:51:14 <twice11> /dev/ttyS0 is a name for the device.
19:51:23 <Vorpal> ais523, you actually do call it "device 4,6" normally?...
19:51:25 <twice11> just as two hard links are two names for the same file.
19:51:44 <Vorpal> twice11, point is, it is a file. which happen to be a name for a device.
19:52:00 <ais523> Vorpal: well, I don't call it /dev/ttyS0 normally either, I don't normally have a reason to name it at all
19:52:08 <ais523> I'd more likely call it "the serial console"
19:52:12 <Vorpal> right
19:52:27 <twice11> define: file
19:52:42 <Vorpal> oerjan, XP is pretty much dead.
19:52:46 <Vorpal> sure it is still used.
19:52:47 <elliott> no it isn't
19:52:48 <Vorpal> just dead
19:52:51 <elliott> XP has a massive userbase
19:53:12 <Taneb> Including, at current, me
19:53:22 <elliott> Microsoft can't kill something by deciding they don't care about it any more
19:53:38 <elliott> According to web analytics data generated by W3Schools, from September 2003 to July 2011, Windows XP was the most widely used operating system for accessing the internet. As of August 2011, Windows XP market share is 38% after having peaked at 76.1% in January 2007.[3]
19:53:39 <elliott> AHAHAHA
19:53:43 <Vorpal> elliott, well they are not supporting IE 9 on it. Nor any directx after version 9c iirc.
19:53:47 <elliott> Wikipedia citing W3Schools for OS census information
19:54:00 <elliott> someone remove that who isn't a faceless anon :P
19:54:30 <Vorpal> elliott, yeah, wouldn't alexa be a better source for this...
19:54:51 <elliott> not really
19:54:56 <elliott> but W3Schools is the worst possible source
19:54:59 <Vorpal> elliott, though tell me, what is so bad about W3Schools? I mean, I never much looked at the site, I know it exists, that is about it.
19:55:01 <ais523> elliott: what overtook it? 7?
19:55:06 <ais523> or Vista?
19:55:33 <Taneb> Vorpal: skewed data: most visitors are interested in web developement
19:55:39 <twice11> I am quite confident that the relation is 7 > XP > Vista
19:55:39 <elliott> not only is it targeted at web developers and so will have a /completely/ inaccurate userbase, but W3Schools is a site which makes money selling worthless "certifications" and reeling people in with terrible tutorials that don't care at all about security in the slightest (SQL injections ahoy)
19:55:40 <Vorpal> ah yeah
19:55:47 <elliott> and deluding people into thinking that W3C supports it
19:55:54 <elliott> (W3C have asked them to change their name several times)
19:55:56 <Vorpal> elliott, ah
19:56:38 <Vorpal> elliott, so what is a good source for OS census info?
19:56:40 <ais523> elliott: the theory is that only Microsoft have accurate statistics of Linux adoption
19:56:44 <elliott> Vorpal: I don't know
19:56:53 <Vorpal> google I guess, not sure if they make anything public about that
19:57:01 <ais523> because the number of PCs running Mac OS X is basically insignificant, ditto the number of PCs running something other than Windows/Linux
19:57:16 <ais523> and they have the most accurate details on Windows adoption (including pirated Windows)
19:57:38 <ais523> Vorpal: Google would be weighted in favour of lower stats for IE users, so lower stats for Windows users
19:57:44 <oerjan> saptarshi sinha is definitely indian, anyway
19:57:45 <Vorpal> hm true
19:57:47 <ais523> as it's the default search engine in most major browsers, but not in IE
19:57:57 <Taneb> Facebook, maybe?
19:57:59 <Vorpal> ais523, what about average of several sites? Google, MSN and so on
19:58:18 <Vorpal> Taneb, I don't use facebook for example. I know many people who dont
19:58:19 <ais523> Taneb: or perhaps DoubleClick
19:58:20 <Vorpal> don't*
19:58:33 <ais523> Vorpal: Facebook's a good example because its Like buttons are all over the place
19:58:35 <elliott> does anyone know how to uncommit the latest commit on git?
19:58:39 <ais523> so it has accuratish statistics for half the web
19:58:43 <elliott> I haven't pushed it anywhere
19:58:45 -!- sebbu2 has changed nick to sebbu.
19:58:46 <elliott> so I'd like to just obliterate it
19:58:57 <twice11> elliott: also clear working tree?
19:59:00 <ais523> elliott: you can obliterate via git rebase -i HEAD~2
19:59:09 <elliott> twice11: indeed, I've copied out the relevant file
19:59:13 <ais523> and deleting the line describing the commit from the resulting list
19:59:20 <elliott> ais523: thanks
19:59:25 <twice11> to reset everything to the state before the last commit:
19:59:26 <elliott> protocol.pl: needs merge
19:59:26 <elliott> Working tree is dirty
19:59:27 <elliott> oh come on
19:59:31 <twice11> git reset --hard HEAD
19:59:32 <elliott> do I have to commit my merge and then obliterate that too? :P
19:59:33 <twice11> git reset --hard HEAD^
19:59:34 <twice11> sorry
19:59:35 <elliott> twice11: right
19:59:39 <Vorpal> ais523, hm, does facebook provide OS census info though?
19:59:47 <elliott> there we go
19:59:48 <Vorpal> only a site which actually provides it would be interesting
19:59:51 <ais523> Vorpal: I don't know; I'm talking about who has the info, rather than who provides it
20:00:30 <twice11> to just clear the commit and the "index" (what you have added), but keep your working dir, use "--mixed" instead of "--hard"
20:01:01 <elliott> thanks
20:01:03 <ais523> I rather like git rebase -i because it lets you do all the edit-history options without having to worry about the individual syntax for each
20:01:08 <twice11> OTOH, I never use "git reset --mixed", I just use "git commit --amend -a" to replace a bad commit by a good one.
20:01:25 <twice11> Yes, "git rebase -i" is quite cool.
20:01:32 <elliott> ais523: incidentally, I think modifying history is perfectly possible in sg
20:01:34 <ais523> heh, git commit --amend? I'll have to remember that
20:01:45 <elliott> git commit --amend is useful for changing the commit message :P
20:01:49 <ais523> elliott: so do I, but isn't it best done via history modification patches?
20:01:51 <fizzie> Vorpal: http://en.wikipedia.org/wiki/Usage_share_of_operating_systems lists a couple of different sources and the median of them.
20:01:59 <elliott> ais523: haha
20:02:06 <elliott> ais523: that's perverse
20:02:31 <ais523> elliott: that way, it'd avoid the problems that modifying history normally causes to a VCS
20:02:42 <ais523> (in particular, you'd get conflicts between the old and new version otherwise, I think, in sg)
20:02:42 <elliott> ais523: and also remove the point
20:02:57 <elliott> modifying history obviously doesn't work post-push
20:03:00 <ais523> well, the point isn't to conceal the history, but to make it look neater, right?
20:03:08 <ais523> if modifying history should work at all, it should be done post-push
20:03:13 <ais523> *it should work post-push too
20:03:28 <ais523> what if someone pulls from you just after you accidentally commit half a patch?
20:03:33 <elliott> personally, I think it should simply be another layer
20:03:54 <Vorpal> fizzie, so more windows xp than windows 7... heh
20:04:35 <fizzie> Vorpal: Yes, though on some of those sources it goes the other way around; and most of them are themselves from multiple sites.
20:05:09 <Vorpal> I see
20:05:58 <ais523> is vista behind both or beating both?
20:06:26 <fizzie> Behind both in all the lines of the table, unless I missaw.
20:06:47 <fizzie> (~11% vs. 30+% in the median numbers.)
20:06:54 <ais523> ouch
20:07:13 <twice11> Why would you want to use Windows 7 beta, when there is Windows 7 final?
20:07:18 <ais523> I wonder if the final end of XP support will actually drive down Windows adoption
20:07:38 <ais523> my guess is no, because it'll correspond to a time where all the viable alternatives to Windows have screwed up their UIs
20:07:58 <ais523> (unless Apple get their act together again; I doubt Gnome will in time, perhaps KDE will)
20:07:59 <Vorpal> http://en.wikipedia.org/wiki/File:Smartphone_share_current.png <-- now that is interesting. I was under the impression that apple had a larger share than android
20:08:10 <ais523> nah, Android is the Windows of smartphones
20:08:16 <twice11> ais523: xfce?
20:08:19 <ais523> lowest-common-denominator, and often programmed quite badly
20:08:27 <Vorpal> ais523, so android is bad?
20:08:37 <fizzie> ais523: While Apple is the Apple of smartphones.
20:08:38 <ais523> twice11: Linux is pretty small market-share-wise as it is, and xfce is a pretty small fraction of /that/
20:08:45 <ais523> so I'd say xfce use is statistically insignificant
20:08:48 <ais523> fizzie: yes, I'll agree with that
20:08:50 <ais523> Vorpal: I'm wary of it
20:09:03 <Vorpal> ais523, oh?
20:09:05 <ais523> I don't hear "Linux-based" and immediately think "good" like Slashdot or Groklaw seem to
20:09:16 <ais523> Android is basically a race to the bottom
20:09:22 <Vorpal> hm
20:09:30 <Vorpal> ais523, surely there are some good android products?
20:09:34 <ais523> lots of applications available, most of which are really bad
20:09:36 <ais523> some of which are good
20:09:38 <ais523> just like Windows
20:09:58 <ais523> and heavily varying in how locked-down it is, which isn't identical to Windows but a similar situation when you consider corporate installs
20:10:19 <twice11> lots of bad and some good apps: Isn't that typical for any high-market-share system with open application development?
20:10:29 <Vorpal> oh and linux have a massive dominance for servers it seems.
20:10:31 <elliott> ais523: most iPhone apps are terrible too, mind you
20:10:33 <ais523> twice11: I think so
20:10:53 <Sgeo> Oh, twice11 isn't tswett
20:10:57 <ais523> I'm just saying that Android is the standard high-market-share system with open application development, and so corresponds quite strongly to Windows
20:11:16 <elliott> though I think the proportion of good iPhone apps that are great is higher than the proportion of good Android apps that are great
20:11:18 <Vorpal> hm
20:11:23 <Vorpal> ais523, but the OS itself?
20:11:27 <ais523> whereas Linux corresponds to Moblin or something
20:11:41 <ais523> the OS itself, in Android, is mostly a reimplemented language very close to Java
20:11:52 <twice11> But also for Linux, there are a lot of bad application in the interwebs and some good ones...
20:11:54 <ais523> so close that Oracle sued them over it
20:12:22 <Sgeo> It isn't Java? I know it's not the standard Java VM, but
20:12:24 <ais523> twice11: bad Linux programs rarely reach the depths of badness that bad Windows programs reach
20:12:33 <ais523> bad Linux programs tend to merely not work
20:12:40 <ais523> bad Windows programs can do all sorts of absurd things
20:13:01 <ais523> presumably because the really bad programmers typically haven't heard of Linux and couldn't get Visual Studio running on it
20:13:07 <twice11> Don't get me started on trying to work with LibreOffice (which OTOH is x-platfrom, not linux only)
20:13:13 <Vorpal> so linux have a huge dominance on publicly accessible servers, and a near total dominance on HPC. hm
20:13:29 <ais523> Sgeo: it's Java as in the language Java (syntax/semantics), but the standard libraries are reimplemented and not the same as standard Java
20:13:37 <Vorpal> and heh, mainframes are mostly IBM system z
20:13:43 <Vorpal> (who the hell still uses mainframes?)
20:13:51 * Sgeo now wants an IBM System Z emulator
20:14:01 <oerjan> `addquote <elliott> When the moon hits your eye like a big pizza pie, that's a monad.
20:14:03 * Sgeo feels nostalgia for mainframes
20:14:03 <ais523> companies doing what mainframes are good at: very very large quantities of easy work
20:14:03 <HackEgo> 650) <elliott> When the moon hits your eye like a big pizza pie, that's a monad.
20:14:05 <Sgeo> ^^not true
20:14:25 <ais523> I think a mainframe is what you want if you have ten billion additions that need doing
20:14:59 <Vorpal> heh
20:15:09 <Vorpal> ais523, wouldn't a cluster of cheap PCs work better?
20:15:37 <zzo38> If there is something mathematically correct in category theory and is also computable, is it supposed to be representable in Haskell?
20:17:27 <ais523> the standard mainframe applications are things like processing payrolls for an entire company or taxes for an entire country
20:18:59 <zzo38> awk 'gsub(/./,"&\n")' | awk '/>/&&++p>r{r++}/</&&--p<l{l--}END{print r+1-l}'
20:19:09 <Vorpal> ais523, ah
20:19:26 -!- azaq231 has left ("Leaving.").
20:19:31 <ais523> there's probably some way to do that with a cluster and distributed database
20:19:33 <Vorpal> ais523, payrolls for a company doesn't sound like a hard problem.
20:19:40 <ais523> but doing it on a mainframe is probably simpler
20:19:43 <ais523> Vorpal: I mean a really really big company
20:19:48 -!- azaq23 has joined.
20:19:48 <Vorpal> taxes for an entire country perhaps
20:19:55 <Vorpal> ais523, such as IBM or Microsoft? yeah
20:19:59 <Vorpal> not really hard still
20:20:29 <ais523> that's the point, what mainframes are best at isn't /hard/
20:20:29 <Vorpal> I realised I have no clue about the size of companies outside IT
20:20:35 <ais523> it's just really large in scale
20:21:10 <Vorpal> ais523, again, cheap cluster sounds saner. Well, maybe not for reliability
20:21:14 <elliott> can someone fire every OS developer?
20:21:15 <Vorpal> that could be a reason
20:21:17 <elliott> thanks
20:21:24 <Vorpal> elliott, what for
20:21:41 <elliott> Vorpal: making IO ridiculously slow for no benefit
20:21:53 <Vorpal> elliott, thinking of Synthesis?
20:21:56 <ais523> elliott: what sort of IO specifically?
20:22:25 <ais523> (note: you are not using @ so you are allowed to use traditional OS concepts in your answer)
20:22:43 <elliott> Vorpal: Synthesis solves the problem, but in a much too difficult manner
20:22:48 <elliott> it's not very maintainable
20:22:50 <Vorpal> elliott, right
20:22:54 <elliott> ais523: mostly network, but file IO too
20:22:56 <Vorpal> that is true
20:23:01 <elliott> the overhead of kernel<->userspace transition is the cause
20:23:03 <Vorpal> elliott, what about pipes?
20:23:10 <elliott> Vorpal: probably those too
20:23:11 <elliott> all IO, really
20:23:21 <Vorpal> vmsplice()?
20:23:24 <elliott> heh
20:23:34 <ais523> elliott: aha, I see, the problem's that reading from a network socket requires too many context switches
20:23:37 <Vorpal> okay that is kind of cheating
20:23:46 <elliott> but anyway, Synthesis takes the route of heavily optimising user<->kernelspace communication/switches
20:23:50 <ais523> and Linux does have a syscall to connect two pipes, I've forgotten what it's called (it may well be vmsplice)
20:23:52 <elliott> it's much simpler just to run everything in kernelspace
20:23:54 <Vorpal> elliott, I guess Inferno wouldn't have this problem?
20:23:56 <elliott> (cough @ cough)
20:24:10 <elliott> I don't know how Inferno works, but it presumably inherits the host OS' underlying IO
20:24:25 <Vorpal> elliott, well it can run natively iirc
20:24:28 <Vorpal> not just hosted
20:24:38 <elliott> ais523: anyway, if you eliminate the distinction, then all the fancy hacks Linux has for fast IO are completely unnecessary
20:24:55 <elliott> you don't need syscalls that do a lot, because you can just compose the operations in the obvious way
20:24:56 <Vorpal> elliott, so lisp machine and DOS do it right?
20:25:05 <ais523> I actually don't get why a call to kernelspace needs a context switch
20:25:09 <ais523> a switch between processes does
20:25:13 <elliott> I don't know much about Lisp machine's security... DOS is way too different to a modern system to compare
20:25:21 <elliott> ais523: hardware ring bullshit, I believe
20:25:24 <ais523> but to the kernel and back, I don't see why it would
20:25:37 <elliott> whoever invented rings: I hope you feel bad
20:25:47 <Vorpal> elliott, multics
20:25:48 <ais523> elliott: oh, I was assuming that most of the overhead of a context switch was in doing things like copying registers
20:25:51 <Vorpal> that is where rings come from
20:25:54 <elliott> Vorpal: oh, really?
20:25:57 <elliott> scratch that, don't feel bad
20:25:59 <elliott> I like Multics
20:26:06 <elliott> Vorpal: wait, Multics invented /hardware/ rings?
20:26:11 <Vorpal> elliott, pretty sure that is where rings first showed up. At least Multics had 7 rings
20:26:11 <elliott> they used existing computers, dude
20:26:17 <elliott> I'm talking about hardware ring
20:26:17 <elliott> s
20:26:20 <Vorpal> hm
20:26:50 <Vorpal> elliott, not sure then, but multics made heavy use of them I know. Would need checking for where they were invented.
20:27:18 <zzo38> I wrote the text of section 5.4 of proposal of more-notation. At least, some texts. Probably many sections still incomplete
20:28:08 <elliott> ais523: in fact, even select/epoll are obsolete
20:28:27 <ais523> in favour of what?
20:28:36 <ais523> (don't say pselect/ppoll)
20:28:47 <elliott> ais523: in a ring-0 system, given cheap threads, you can just spawn off a bunch and blocking-read -- note that "coroutines" count as cheap threads here
20:29:11 <elliott> blocking-read just translates to "call/cc (\k -> install k as handler for 'when data comes in'); yield"
20:29:22 <elliott> well
20:29:36 <elliott> blocking-read just translates to "r = call/cc (\k -> install (k 'hi) as handler for 'when data comes in'; 'bye); if r == 'bye {yield}"
20:29:42 <elliott> you get the idea
20:29:52 <elliott> because you can literally just hook into the kernel's IO multiplexing
20:29:54 <ais523> yep
20:29:58 <Vorpal> ais523, wait, wtf is "ppoll"?
20:30:11 <Taneb> I still don't get how Red Hot Chilli Peppers rhyme "wall" and "bra"
20:30:15 <ais523> the /concept/ of select, etc., is a useful one for programming, it just doesn't have to be a primitive
20:30:28 <ais523> Vorpal: a syscall that does much the same as pselect but with a different interface
20:30:33 <elliott> ais523: (note that node.js has become popular by deluding people into thinking that if you do this, but use a /manual/ CPS transform rather than call/cc, and _keep_ all the existing kernel overhead, somehow your servers will magically be fast)
20:30:38 <Vorpal> ais523, ... why
20:30:45 <elliott> I'm not sure select is that useful; threads are much nicer
20:30:48 <ais523> because select is limited in how many FDs it can handle
20:30:50 <elliott> (threads aren't nice, but they're nicer than select)
20:30:57 <Vorpal> ais523, okay why select at all then
20:31:01 <Vorpal> or pselect
20:31:05 <ais523> elliott: select is perfect for writing an event loop
20:31:29 <ais523> doing that with threads can be messy
20:31:33 <elliott> ais523: yep, but event loops are performance hacks
20:31:59 <Vorpal> eh
20:32:02 <elliott> ais523: the right level of abstraction is: callbacks, and then a continuation-based blocking interface on top of that
20:32:03 <pikhq_> Yeah, you basically can't even think about DOS in modern terms. It's not so much an OS as it is a lightweight library and a program loader.
20:32:13 <Vorpal> pikhq_, true
20:32:22 <ais523> elliott: well, the two are obviously equivalent
20:32:22 <elliott> the beauty of continuations rather than just e.g. for (;;); until the callback trips a variable saying "it's done",
20:32:25 <pikhq_> (though, given that, you can easily do optimal IO if you feel like it)
20:32:30 <elliott> is that the thread can die in-between
20:32:34 <elliott> so it's 0-cost to block
20:32:41 <elliott> and as efficient as possible
20:35:07 <Vorpal> at least windows 7 seems to have no traces of 16 bit support left, though that could be just the 64-bit edition (since 16-bit obviously won't work there)
20:35:25 <ais523> bleh, what's up with Windows' famous backward compatibility?
20:35:35 <elliott> ais523: in conclusion, all the work gone into efficient IO has been obsolete from the start, and writing efficient network and file (imagine processing gigabytes of data) programs is now needlessly awkward and FUD abounds
20:35:39 <ais523> how will I run my old 16-bit applications now?
20:35:47 <Vorpal> ais523, well 16- bit won't work in long mode. Blame AMD for that.
20:35:48 <elliott> it's ridiculous!
20:35:59 <Vorpal> it is specified in the ISA.
20:36:09 <elliott> ais523: large IO buffers are another thing that is completely useless, btw
20:36:11 <Vorpal> s/- /-/
20:36:22 <elliott> I forget what buffer size Synthesis was using to completely outperform everything else, but it was something like sixteen bytes
20:36:25 <Vorpal> elliott, not really, what about DMA?
20:36:33 <elliott> as opposed to the kilobytes we use nowadays because of the kernelspace overhead
20:36:50 <elliott> Vorpal: well, that's a lower-level kind of buffering
20:36:51 <Vorpal> elliott, writing an entire sector to disk might be a better idea
20:37:00 <Vorpal> especially for SSD
20:37:08 <Vorpal> elliott, still it needs to be done
20:37:12 <elliott> sure, that's abstracted in @ though
20:37:16 <ais523> elliott: mmap() doesn't seem to run into the problems you talk about, unless the page faults cause timeconsuming context switches
20:37:40 <elliott> ais523: I have a feeling they might; but yes, mmap is nice, but it only works on files; in @, of course, all disk access works like mmap
20:37:46 <elliott> and is basically as efficient as possible
20:37:54 <Vorpal> ais523, mmap is limited in that it won't work on char devices
20:38:06 <Vorpal> and it performs implicit buffering on the page level
20:38:18 <elliott> I wonder how the CPU talks to the soundcard these days?
20:38:27 <Vorpal> elliott, DMA probably
20:38:33 <ais523> elliott: it's going to be either in/out or DMA at the lowest level
20:38:44 <elliott> It'd be fun if @ had a demo doing a bunch of fancy animation + real-time "play audio from file applying expensive effects" thing with a tiny buffer.
20:39:06 <elliott> (Probably buffered underneath because of DMA, but eh, that's not the kind of buffers we see in stdio these days.)
20:39:12 <elliott> (Or in the kernel.)
20:39:17 <Vorpal> elliott, likely DMA considering how much data must be passed for, for example, 5.1 48 kHz sound
20:39:23 <Vorpal> in/out just wouldn't cut it
20:39:50 <ais523> elliott: what about things like buffering done by curses, which is for the purpose of ignoring screen writes that overwrite each other?
20:40:06 <ais523> a curses-alike would be useful if, say, streaming textish data across a network
20:40:09 <Vorpal> elliott, anyway, video: DMA too.
20:40:21 <Vorpal> well kind of
20:40:45 <elliott> ais523: streaming textish data across a network?
20:40:51 <elliott> why not just send a description of the widgets?
20:40:55 <ais523> I mean screen-oriented textish
20:41:05 <elliott> ais523: "curses-alike is useful if you have a VT"?
20:41:06 <elliott> no shit
20:41:14 <Vorpal> elliott, what about when logging into remote systems
20:41:21 <elliott> Vorpal: with what method?
20:41:24 <ais523> say I want to play NetHack on @
20:41:26 <Vorpal> ssh for example
20:41:46 <Vorpal> elliott, anyway it is more efficient to send larger TCP packages than small ones. Best is matching MTU of course
20:41:59 <elliott> ais523: if you want to play NetHack with the original UI, of course you need a VT
20:42:06 <Vorpal> elliott, so there buffering is good when transferring bulk data
20:42:11 <elliott> ais523: otherwise, look at nethack-el
20:42:18 <elliott> you just send the same kind of data structures across the network
20:42:27 <elliott> (note: I don't know exactly how nethack-el sends things)
20:42:31 <ais523> well, I'm saying that that updating sort of data sensibly requires buffering
20:42:33 <ais523> elliott: in lisp, obviously
20:42:39 <ais523> or well, as a sequence of sexps
20:42:39 -!- Taneb has quit (Read error: Connection reset by peer).
20:42:39 <elliott> ais523: no?
20:42:41 <elliott> it sends sexps
20:42:45 <elliott> but I don't know how it sends the _map_
20:42:49 <elliott> which is what's important
20:42:56 <ais523> it doesn't send the map
20:43:00 <ais523> it sends map update instructions
20:43:00 <fizzie> Vorpal: Didn't 7 have some sort of a VM-based (built on Virtual PC) backwards schmombatility "XP mode" thingie?
20:43:02 <ais523> also as sexps
20:43:05 <elliott> ais523: anyway, I don't see why it requires buffering at all; nethack screens don't change much each frame
20:43:09 <elliott> you can just send a diff
20:43:15 <Vorpal> fizzie, think so.
20:43:15 <ais523> elliott: it needs buffering to calculate the diff
20:43:19 <elliott> aka map update structures
20:43:19 <ais523> that's what I was trying to get at all along
20:43:20 <elliott> ais523: what?
20:43:40 <ais523> elliott: because you're often overwriting a square with itself in NetHack
20:43:43 <ais523> and that shouldn't show up in the diff
20:43:47 <Vorpal> fizzie, not around on my windows 7 system I have here. Which is windows 7 pro from MSDNAA. Might need to take it from add/remove programs or such
20:43:51 -!- azaq23 has quit (Quit: Leaving.).
20:44:29 <Vorpal> elliott, what about network buffering as I mentioned above?
20:44:46 <Vorpal> elliott, you want to buffer up to MTU if the data isn't time critical.
20:45:15 <elliott> Vorpal: I don't think you've been listening the first, second, or tenth times I clarified I was only talking about one kind of buffering
20:45:28 <elliott> so I stopped trying to clarify and started ignoring your examples of buffering instead
20:45:29 <Vorpal> elliott, well this one is relevant to the application layer
20:45:39 <ais523> network buffering is an implementation detail of the network driver
20:45:47 <elliott> <ais523> elliott: because you're often overwriting a square with itself in NetHack ;; how is this relevant to buffering?
20:45:56 <fizzie> Vorpal: Yes, I think it's a separate download. I'm not sure my Ultimate Seven here has it installed either.
20:46:01 <ais523> Vorpal: yes, but only in the sense that the application layer says "I want to optimise for throughput" or "I want to optimise for latency"
20:46:15 <ais523> elliott: because you need to remember what was there before
20:46:20 <Vorpal> ais523, indeed, and that might change over a session too, for different parts of the data.
20:46:23 <ais523> to know whether to send the diff or not
20:46:24 <elliott> ais523: that's not buffering...
20:46:31 <elliott> ais523: that's caching
20:46:40 <ais523> hmm, OK, perhaps you have different definitions to me
20:46:41 <elliott> that has nothing to do with stdio buffering or anything
20:46:48 <ais523> I'd say it's the opposite of caching
20:46:52 <elliott> it might be buffering in the technical sense, but it's not the kind of IO buffering I'm talking about at all
20:46:56 <elliott> <fizzie> Vorpal: Yes, I think it's a separate download. I'm not sure my Ultimate Seven here has it installed either.
20:46:58 <elliott> fizzie: it's Ultimate-only
20:46:59 <Vorpal> fizzie, you have ultimate? heh
20:47:00 <ais523> fair enough
20:47:03 <zzo38> Why does Haskell not allow infixr 10?
20:47:10 <elliott> zzo38: because that's function application
20:47:11 <fizzie> elliott: "Windows XP Mode is available free of charge to users of Windows 7 Professional, Enterprise, and Ultimate.[30]"
20:47:16 <elliott> fizzie: Oh, hunh.
20:47:22 <zzo38> O, that's why.
20:47:49 <fizzie> Vorpal: It's a "for the university staff" license, I think it cost 7.50 EUR or so, and the price was identical for Professional and Ultimate, so I went with the more grandiose name.
20:47:58 <Vorpal> heh
20:48:19 <fizzie> Actually I picked the "N" variant.
20:48:21 <Vorpal> fizzie, ultimate isn't available here. Only pro, no other version.
20:48:26 <Vorpal> fizzie, N?
20:48:42 <fizzie> It's the "no media player" thingie they were obligamated to make for some reason or another.
20:48:47 <Vorpal> heh
20:48:55 <fizzie> Then turned out something quite essential needed the "media functionality package", so I had to install it after all.
20:49:06 <Vorpal> fizzie, anyway, I went for ultimate with visual studio. Not that I use visual studio much. But hey why not
20:49:15 <fizzie> (Turns out it wasn't just the media player application, it was other components too.)
20:50:07 <fizzie> "The features in the N and KN Editions are the same as their equivalent full versions, but do not include Windows Media Player or other Windows Media-related technologies, such as Windows Media Center and Windows DVD Maker.[12]"
20:50:16 <Vorpal> the only reason to use visual studio would be windows C# development. For everything else there are better solutions.
20:50:17 <fizzie> The description made it sound like it'd just lack a bit of bloat.
20:50:27 <fizzie> I've already forgotten what it exactly was that it was lacking.
20:50:39 <Vorpal> well okay, .NET in general for the supported languages, but I would never touch VB.NET
20:50:52 * Sgeo was just about to ask about F#
20:51:09 <ais523> one of the courses I'm teaching this year is in common-subset-of-OCaml-and-F#
20:51:10 <Vorpal> Sgeo, I have never used F# nor do I have any opinion on it.
20:51:16 <ais523> that is, polyglot levels of common subset
20:51:19 <ais523> I'm not sure how large it i
20:51:21 <ais523> *is
20:51:26 <Vorpal> ais523, heh...
20:51:31 <ais523> probably unusably small
20:51:40 <Vorpal> ais523, so why that subset then...
20:51:42 <Sgeo> 0? I mean, OCaml has ;; to end things and iirc, F# doesn't?
20:52:06 <ais523> you don't actually need any ;;s in a program, it's a separator
20:52:19 <Vorpal> ais523, why, is this some sort of eso-course?
20:52:22 <ais523> programs are typically definition ;; main
20:52:27 <ais523> Vorpal: no, it's a basic CS concepts course
20:52:41 <ais523> and the lecturer thinks it doesn't need anything beyond function calls and pattern matching
20:52:44 <Vorpal> ais523, still, a stupid subset
20:53:07 <ais523> hmm, I'd prefer elliott's opinion here before concluding it's definitely stupid
20:53:22 <ais523> I don't actually know F#, and apparently it's deliberately similar to OCaml, so the subset might be larger than I think
20:54:08 <Vorpal> ais523, how viable would an INTERCAL/C polyglot be?
20:54:16 <elliott> ais523: ?
20:54:38 <ais523> elliott: opinions on whether "common subset of OCaml and F# that has the same syntax" is a completely useless language or not
20:54:54 <elliott> ais523: you asked me that before
20:55:03 <ais523> ah right; but I can't remember the answer
20:55:12 <elliott> <ais523> one of the courses I'm teaching this year is in common-subset-of-OCaml-and-F#
20:55:14 <elliott> augh
20:55:19 <elliott> ais523: well I was asking for context
20:55:29 <elliott> I thought it was about your weird ultra-portability thing
20:55:33 <ais523> Vorpal: hmm; I think the only way to avoid a syntax error in one or other of the langauges would be to start with DONOT;
20:55:35 <elliott> but teaching it to innocent children????
20:55:42 <ais523> elliott: it's not up to me what I teach
20:55:56 <ais523> the "GNU C99 and assembler and one lecture on C++" was not a good idea either
20:56:30 <elliott> haha
20:56:38 <elliott> hey, does anyone know if you can merge just /one/ commit into another branch on git?
20:56:48 <elliott> I accidentally committed something to a quite-diverged development branch rather than master
20:56:53 <elliott> and I'd like to avoid just applying the diff again, that's gross
20:56:56 <ais523> elliott: that operation isn't meaningful in git
20:57:07 <elliott> ais523: no, but I thought there might be some porcelain for it
20:57:09 <ais523> you can do git cherrypick, but that just automates applying the diff again
20:57:14 <elliott> sigh
20:57:38 <elliott> elliott@katia:~/Code/mcmap$ git diff 8f6f820~ 8f6f820 | git apply
20:57:40 <elliott> that should do it, right?
20:57:44 <ais523> IIRC, this was my example of the simplest thing you couldn't do in git
20:57:48 <elliott> heh
20:57:48 <ais523> I don't know what git apply does
20:57:56 <elliott> NAME
20:57:56 <elliott> git-apply - Apply a patch to files and/or to the index
20:57:59 <elliott> applies a git-diff :P
20:58:06 <fizzie> The cherry-pick interface isn't so bad either.
20:58:07 <ais523> seems about right
20:58:07 <elliott> error: patch failed: world.c:941
20:58:08 <elliott> error: world.c: patch does not apply
20:58:08 <elliott> ah good
20:58:11 <Vorpal> <elliott> I thought it was about your weird ultra-portability thing <-- hm, what thing?
20:58:17 <elliott> it, um, what
20:58:19 <Vorpal> secret project?
20:58:27 <ais523> secret project is not ultra-portable
20:58:29 <Vorpal> ah
20:58:34 <elliott> oh, it's already on that branch
20:58:35 <ais523> as you might have guessed from my questions about Linux kernel internals
20:58:36 <elliott> how did that happen?
20:58:37 <elliott> oh, hmm
20:58:38 <Vorpal> so different project then
20:58:44 <elliott> never mind, I know what happened
20:58:53 <elliott> it says I pushed that to the wrong branch because I was pushing the merge of it
20:58:56 <elliott> as well as some other stuff
20:59:00 <elliott> I got it right after all :)
21:03:13 -!- oerjan has quit (Quit: Good night).
21:05:16 -!- kmc has quit (Quit: Leaving).
21:05:55 <Vorpal> ais523, so what is that ultra-portability thing
21:06:09 <ais523> I don't know
21:06:16 <ais523> ask elliott, it's him who claimed it existed
21:06:25 <Vorpal> right
21:06:28 <Vorpal> elliott, what is it?
21:06:34 <elliott> Vorpal: mu
21:11:04 <Vorpal> elliott, what was/is that ultra portable thing you mentioned
21:11:49 <elliott> Vorpal: you misread
21:13:04 -!- nooga has quit (Ping timeout: 258 seconds).
21:22:44 <zzo38> Have the "which left right" like has been described before, but False is on the left. You can generalize (&&) and (||) for the Choose class and if it is swappable you can also generalize not.
21:23:23 <zzo38> (||) = flip $ flip which $ right
21:23:28 -!- DHeadshot has joined.
21:23:58 <zzo38> (&&) = flip $ which left
21:24:02 <zzo38> not = which right left
21:26:23 -!- DH____ has quit (Ping timeout: 260 seconds).
21:26:47 <elliott> you should use (f . g $ x) rather than (f $ g $ x)
21:27:09 <zzo38> OK
21:27:25 <elliott> (indeed many Haskellers would like to see $ become infixl)
21:27:34 <zzo38> OK
21:27:38 <elliott> (so that you can say (f $ really long argument $ really long argument) to apply a function with two arguments)
21:27:40 <zzo38> I understand you
21:27:53 <ais523> elliott: I like $'s current associativity
21:28:01 <ais523> perhaps because of the way I think about Haskell
21:28:05 <ais523> it basically becomes a pipeline
21:28:10 <elliott> ais523: no, you use . for that
21:28:13 <zzo38> I can understand why you want $ to be infixl
21:28:23 <Lymee> :t ($)
21:28:24 <lambdabot> forall a b. (a -> b) -> a -> b
21:28:25 <Lymee> :t (.)
21:28:25 <elliott> unix | is (.) not ($)
21:28:26 <lambdabot> forall a b (f :: * -> *). (Functor f) => (a -> b) -> f a -> f b
21:28:32 <elliott> (well, it's >>=, but it's definitely not ($))
21:28:37 <Lymee> Is there really a big difference?
21:29:06 <zzo38> I think the UNIX | is (>=>), not ($) or (.) or (>>=)
21:29:36 <zzo38> The argument to the pipeline is then the stdin handle.
21:30:32 <zzo38> Result is stdout handle.
21:30:52 <zzo38> Or something like that.
21:31:12 <elliott> actually, | is like >>= in a way: http://okmij.org/ftp/Computation/monadic-shell.html
21:32:50 <zzo38> I read that and I disagree, because >>= requires a monad value and a function to monad value, while >=> is both the same like the command on both side of | is both the same.
21:33:31 <elliott> fair enough
21:36:01 <oklopol> i just measured my english speed wpm and got 206
21:36:09 <oklopol> how about you guys=
21:36:10 <oklopol> ?
21:36:20 <oklopol> erm
21:36:22 <oklopol> speech, not speed
21:37:42 <elliott> lol i was thinking you meant typing
21:37:51 <elliott> i just felt inferior, wasn't even the slightest bit sceptical
21:38:02 -!- quintopia has quit (Ping timeout: 250 seconds).
21:39:57 <oklopol> i'm not a very fast typist
21:40:12 <oklopol> i'm way slower than you for instance
21:40:19 <oklopol> mainly i'm just a very slow thinker though
21:41:21 <oklopol> 200 wpm is not *that* slow for speech
21:42:27 <oklopol> i should prolly measure in finnish though, english is hard to speak fast since it flows so nicely
21:42:35 <oklopol> because that means it also blurs nicely
21:45:30 <oklopol> 252, but there were some weird names in the text i read
21:45:41 -!- quintopia has joined.
21:45:52 <oklopol> that's less than a half of the world record :DD
21:46:03 <oklopol> interestingly it seems speaju
21:46:14 <oklopol> king is something women are better at than men
21:46:27 * oklopol keeps pressing the return button that's perfectly located
21:53:49 <oklopol> 150 with a longer sample :(
21:53:58 <oklopol> but finnish words are really long!
21:55:00 <oklopol> that was still 30 letters a second (including spaces :D)
21:56:14 <oklopol> http://www.youtube.com/watch?v=MzbnwASIFKU she's my idol
21:56:44 <oklopol> i wish i had books that weren't full of formulas i don't know how to read
21:58:39 <elliott> <oklopol> king is something women are better at than men
21:58:40 <elliott> king?
21:58:56 <oklopol> you have to read the next sentence
21:59:15 <oklopol> return button? aka enter
21:59:26 <elliott> speajuking
21:59:49 <oklopol> yes
22:00:10 <oklopol> did you measure yet
22:02:10 * Phantom_Hoover → sleep
22:02:36 -!- Phantom_Hoover has quit (Quit: Leaving).
22:02:55 -!- DHeadshot has quit (Quit: Bye).
22:03:13 -!- DH____ has joined.
22:07:31 -!- pikhq has joined.
22:07:46 -!- pikhq_ has quit (Ping timeout: 260 seconds).
22:12:29 <itidus20> back
22:13:27 -!- jix_ has joined.
22:13:49 -!- jix has quit (Read error: No route to host).
22:13:58 <itidus20> so the addition plane i was asking about, if x is 5 and y is 4 then z will be 9
22:14:30 <itidus20> and if x is 4 and y is 5 then z wll be 9
22:15:06 <oklopol> so the plain generated by (1, 0, 1) and (0, 1, 1), common example in linear algebra
22:16:00 <oklopol> what about it?
22:16:28 <oklopol> erm
22:16:29 <oklopol> plane
22:16:44 -!- Milo_ has joined.
22:16:47 <itidus20> i am curious what it looks like
22:17:34 <oklopol> it's just a slanted version of the xy plane
22:17:49 <itidus20> a 45 degree slant?
22:18:02 <oklopol> i don't think so
22:18:07 <itidus20> heheh ok ok
22:18:14 <oklopol> lemme see
22:19:26 -!- Milo_ has left.
22:20:45 <oklopol> the vector (1, 1) is lifted the most and it is lifted by 54 degrees
22:21:31 <itidus20> ok :P
22:21:37 <itidus20> fascinating
22:21:42 <itidus20> it sounds so arbitrary
22:22:13 <oklopol> well if you just look at the x axis, you see 45, and same with y axis
22:22:46 <oklopol> when you go along both, you get something similar to the "arbitrary" fact that the length of (1, 1) is sqrt 2
22:24:10 <itidus20> ahh
22:24:13 <itidus20> i see now
22:24:41 <itidus20> i think :P .. enough to let it go
22:25:42 -!- monqy has joined.
22:25:51 <itidus20> so if you view it by rotating x plane 45 degrees towards y plane, it will be 54 degrees
22:26:14 <itidus20> no that doesnt make sense.. ah i should just drop it
22:26:34 <itidus20> letting it go... ,,,
22:27:35 -!- FireFly has quit (Quit: FireFly).
22:27:55 <oklopol> another way to think about it is you take the unit circle and lift it with the addition plane. now the height at which points of the circle end up roughly tell you the change in angle, points of the x axis turn 45 degrees, but the point (1, 1)/sqrt2 is lifted more
22:28:06 <itidus20> http://www.wolframalpha.com/input/?i=z+%3D+x+%2B+y
22:28:27 <itidus20> this site tries its best
22:28:47 <oklopol> alpha is good for this sorta stuff
22:29:15 <itidus20> i might not have asked if i had this much faith in alpha
22:31:17 <itidus20> so binary mathematical operations can be defined as planes
22:31:31 <itidus20> or in the case of multiplication a hyperplane
22:31:44 <oklopol> continuous ones produce 2d manifolds yes
22:31:45 <itidus20> oops no i mean
22:31:49 <oklopol> not planes though
22:31:51 <itidus20> hyperbolid paraboloid
22:31:58 <itidus20> ^bolic
22:32:02 <oklopol> manifold means it doesn't have to grow linearly
22:32:09 <oklopol> it can have hills too
22:33:39 <itidus20> so division operation is funny looking.. would it be better in 4d?
22:36:07 <itidus20> ok sorry for 20 questions
22:37:30 -!- ive has quit (Remote host closed the connection).
22:37:36 -!- ive has joined.
22:40:21 -!- Jafet has quit (Quit: Leaving.).
22:42:32 -!- derdon has quit (Remote host closed the connection).
22:42:44 <oklopol> how would you do it in 4d?
22:44:03 <oklopol> the division operator is not continuous at y = 0
22:44:15 <oklopol> so you get a cut there
22:45:28 <zzo38> Are church numerals the only function of type forall a. (a -> a) -> a -> a ?
22:45:45 <elliott> yes
22:45:48 <elliott> modulo _|_s
22:45:51 <elliott> (i think)
22:46:23 <oklopol> i think so too, all you can do is apply the function to the a instance n times
22:46:28 <Sgeo> Dear Facebook: I consider myself to be more secure without a "security question", so don't conisider me to be at a medium level of security
22:46:42 <oklopol> heh
22:46:44 -!- CakeProphet has joined.
22:46:44 -!- CakeProphet has quit (Changing host).
22:46:44 -!- CakeProphet has joined.
22:46:56 <oklopol> well depends on the definition of security i guess
22:47:18 <elliott> Dear Sgeo: We give so many shits about what you think, and in our daily #esoteric logread, saw this, and immediately corrected the problem. Keep up the good work! Love, Facebook.
22:47:21 <oklopol> by a definition like that, i suppose a complicated password is very very insecure
22:47:47 <Vorpal> Sgeo, so fill in some random junk? Or the password itself?
22:47:49 <oklopol> choose something easy to remember like poop instead
22:48:08 <elliott> Vorpal: the response is probably stored with less security than the password
22:48:17 <Vorpal> oh true
22:48:20 <Sgeo> Vorpal, fortunately, I don't have to fill it in, unless I want Facebook to show me as more secure
22:48:28 <Vorpal> ah
22:48:30 <elliott> Can you _sleep_ without that being shown?
22:48:51 <Vorpal> depends on who he sleeps with I would guess.
22:49:04 <oklopol> true
22:49:09 <Vorpal> I mean, probably not with the facebook security manager.
22:49:17 <Vorpal> (or whatever)
22:50:45 <Vorpal> night →
22:50:51 -!- Vorpal has quit (Quit: ZNC - http://znc.sourceforge.net).
22:52:28 <elliott> vorpal quits on nights now?
22:53:42 <oklopol> weiiiiiiird
22:53:55 <elliott> I know, right?
22:54:16 <oklopol> you do know right.
22:59:28 <elliott> I know rong.
22:59:35 <elliott> [asterisk]wrong
22:59:43 <elliott> hi im elliott and i have no number keys
22:59:48 -!- elliott has quit (Remote host closed the connection).
23:00:17 -!- elliott has joined.
23:00:27 <elliott> ais523: why on earth does git only push the current branch by default?
23:00:29 <elliott> it's infuriating
23:01:34 <elliott> ais523: also, admin question: can I move [[User:Javamannen]] to [[User talk:Javamannen]] on the wiki? it's ridiculous
23:01:45 <ais523> is there actually a discussion there?
23:01:57 <elliott> _three_
23:02:03 <elliott> with _replies_
23:02:05 <elliott> no wait, four
23:02:06 <ais523> heh
23:02:11 <elliott> one of them started by himself and the only reply being himself
23:02:16 <elliott> actually, that last section should be part of his user page
23:02:19 <elliott> but the rest is talk content
23:02:40 -!- augur has quit (Remote host closed the connection).
23:02:41 <ais523> elliott: restore the userpage section as it should be, copy/paste move the rest to talk (with a pointer to the history if you really care)
23:02:45 <ais523> and put a comment explaining
23:02:58 <elliott> it's probably best to move to talk, then copy-paste-move the section from talk to main
23:03:00 <ais523> (as it'll you-have-new-messages him, so there should at least actually /be/ a new message)
23:03:02 <elliott> as talk has had more activity
23:03:11 <ais523> perhaps, but that'll leave confusing redirects in the history
23:03:26 <elliott> that's just a merge commit :D
23:03:32 <elliott> actually, can't you move a page without redirecting?
23:03:34 <elliott> at least on wikipedia
23:04:06 <ais523> I can, you can't
23:04:08 <ais523> you have to be an admin
23:04:18 <elliott> ah
23:04:20 <elliott> you wanna do it, then? :P
23:04:24 <elliott> or make me admin ;D
23:04:25 <ais523> (well, I'm not an admin there either, technically, but it's unlikely that I wouldn't get admin rights by just asking for them)
23:04:33 <ais523> I can't on Esolang, the software's too old
23:04:38 <elliott> oh
23:04:42 <ais523> nor can I make you an admin either, I don't have the perms
23:04:48 <elliott> MY PLANS KEEP FAILING
23:15:36 <elliott> ais523: Is it a character flaw if I try and eliminate any linear search of a list?
23:16:08 <elliott> I just realised that this structure means I'll have to traverse UP TO LIKE SIX ELEMENTS sometimes, so I'm replacing it with a hash table
23:16:10 <elliott> [asterisk]table.
23:16:31 <ais523> elliott: heh
23:16:46 <ais523> I've been known to do lsearches deliberately and not lose sleep about it
23:17:24 <elliott> ais523: The comparison would even be a pointer equality, so it's not even six string comparisons. :(
23:17:45 <elliott> And it's a C array, so it's literally just for (unsigned i = 0; i < nfields; i++) if (array[i] == blah) return i;
23:17:58 <elliott> Where nfields is like seven at most
23:19:02 -!- Jafet has joined.
23:19:19 <elliott> Yeah, I think it's time to admit that I Have A Problem.
23:19:34 <elliott> Linearsearchophobes Anonymous.
23:21:33 <elliott> You know what, fuck it, I'm doing the linear search.
23:21:52 <oklopol> you can't do that by yourself
23:22:36 <elliott> I need whatshisname matrix.
23:23:06 <oklopol> james
23:23:15 <elliott> Yes.
23:23:24 <oklopol> jack might be better actually
23:23:32 <oklopol> maybe he's jack james matric
23:23:35 <oklopol> *x
23:24:32 <olsner> oh noes, too late for coding
23:25:05 <elliott> it's never too late for coding
23:25:27 <oklopol> -- jack james matrix
23:26:11 <oklopol> hey that's actually a great idea
23:26:15 <oklopol> elliott: say something really smart
23:27:18 <oklopol> elliott: please, this is the important
23:27:42 <elliott> oklopol: yes
23:28:03 <elliott> oklopol: you should do some coding, just to be really out of character
23:28:33 <oklopol> please say a general philosophical wisdomness
23:28:36 <elliott> ok
23:28:38 <elliott> an friend is a house
23:28:39 <oklopol> so i can try this
23:28:40 <elliott> but when a house disappears
23:28:43 <elliott> is the friend a friend?
23:28:53 <oklopol> -- oklopol ominovorol, when he was like 5
23:28:59 <elliott> yes
23:29:06 <elliott> <elliott> it's never too late for coding
23:29:06 <elliott> <oklopol> -- jack james matrix
23:29:09 <elliott> oh i thought that was a correction
23:29:12 <elliott> but you already corrected it
23:29:14 <elliott> i do that
23:29:15 <elliott> a lot :(
23:29:18 <oklopol> yes, that's why i needed to do this
23:29:18 <elliott> (attributing thigns)
23:29:20 <elliott> (to poeople)
23:29:21 <elliott> yes
23:30:07 <oklopol> actually i did some coding yesterday
23:30:16 <oklopol> and i've gotten sooooo slow :DDSDSD
23:30:19 <quintopia> is anyone here good at electronics? >.>
23:30:56 <itidus20> oklopol: so you could construct a calculator by modelling z = x + y as a solid object .. using two rods to position a variable height rod over a plane
23:31:12 <elliott> oklopol: what coding was it
23:31:24 <oklopol> elliott: making this game just to see if i still can....
23:31:36 <itidus20> oklopol: does that make sense easy enough?
23:31:48 <oklopol> sure, i get it
23:31:54 <itidus20> nice idea huh
23:32:00 <oklopol> yes, totally awesome
23:32:05 <oklopol> i would so buy that
23:32:07 <itidus20> lol
23:32:14 <elliott> oklopol: what game
23:32:37 <oklopol> elliott: it's called claustrophobia, you are in this infinite matrix of blocks and all of them want to kill you
23:33:25 <elliott> oklopol: it's your mc-alike right
23:33:45 <oklopol> not really, but it's a subset of it i suppose, what isn't
23:34:18 <oklopol> well, okay it's not even a subset
23:34:47 -!- cheater has quit (Quit: Ex-Chat).
23:36:00 -!- cheater has joined.
23:36:17 <itidus20> i dunno how trivial those rods are that i described.. but a generalized version of the machine would involve loading in prebuilt formulas as phsyical manifolds
23:36:27 <oklopol> i have four grandiose projects i hope to create if i ever relearn programming, one if the total mc ripoff, one is the 2d space exploration game, two are secretish
23:36:53 <elliott> ph got gravity working btw
23:36:58 <oklopol> yeah right
23:37:03 <elliott> and then we found this javascript simulation of two-dimensional gravity that was way better
23:37:05 <elliott> and actually had controls :P
23:37:07 <oklopol> can i see it
23:37:11 <elliott> if I can find it
23:37:14 <oklopol> the better one
23:37:23 <elliott> I know
23:37:52 -!- cheater has quit (Client Quit).
23:38:21 <elliott> Well, the stuff I have in /msg is just babbling about Star Trek gravity, so no.
23:38:25 <elliott> It might be in the channel logs.
23:38:57 <elliott> oklopol: It did work in a stable manner, though.
23:39:54 <oklopol> so it didn't work, that was the whole issue
23:40:00 <elliott> oklopol: Eh?
23:40:16 <oklopol> well obviously you can implement newtonian gravity in 5 minutes
23:40:23 <elliott> oklopol: I said _did_ work, not didn't.
23:40:33 <oklopol> :D
23:40:37 <oklopol> ooooooops
23:40:43 <elliott> oklopol - an stupids.
23:40:54 <oklopol> -- everyone, all the time
23:41:23 -!- augur has joined.
23:41:23 <elliott> -- oklopol
23:41:30 <elliott> "* augur (~augur@129.2.129.32) has joined #esoteric" --oklopol
23:41:43 <oklopol> i'm a profound dude.
23:42:30 -!- sllide has quit (Read error: Connection reset by peer).
23:43:07 <quintopia> halp
23:43:15 <oklopol> that's not english
23:43:24 <monqy> hlep
23:43:30 * augur bits oklopol
23:43:43 <quintopia> monqy: hepl
23:44:00 <quintopia> tell me you know
23:44:04 <quintopia> things that i dont
23:44:59 <augur> bites even! D:
23:44:59 <quintopia> about voltage regulators
23:45:40 <oklopol> ah that's better.
23:46:02 <oklopol> voltage regulators? you mean those things that keep the voltage at a constant
23:46:32 <quintopia> i take it you cant help
23:46:44 <quintopia> where do i find some electronics makers
23:46:45 <Sgeo> I don't think this monitor is meant to be detatchable
23:46:52 <oklopol> i'm pretty sure i can't, now answer mine
23:47:04 -!- Patashu has joined.
23:47:46 <oklopol> or just some thingie that removes spikes and shit and is of no theoretical interest
23:48:04 <oklopol> augur: i still have a scar from this guy biting me in the fifth grade
23:48:33 <augur> oklopol: oh my
23:48:43 <augur> that fun huh
23:49:05 <oklopol> hmm?
23:49:23 <oklopol> i only had straight sex in the fifth grade, and it was just finger sex
23:49:44 <Gregor> ...
23:50:13 <copumpkin> that's a good quote to remember
23:50:19 <copumpkin> what's the quote bot around here?
23:50:37 <itidus20> ^style ff7
23:50:37 <fungot> Selected style: ff7 (Full script of the game Final Fantasy VII)
23:50:41 <Gregor> Use `addquote <whatever>
23:50:44 <quintopia> yes oklopol. it maintains a voltage near a constant
23:50:46 <itidus20> thank you sir fungot
23:50:47 <fungot> itidus20: now's our chance. we must search for him too! it's attacking!? talk!
23:51:10 <itidus20> fungot do you like haskell?
23:51:10 <fungot> itidus20: corel was burned down by the gold saucer... think his name was close ever since that time. never know what time it wasn't a mistake bringing you here before you catch the chocobo race, please leave. so almost everything here can compare with the shinra up to shinra, inc.
23:51:19 <oklopol> i dated the school slut for a while but she dumped me for a 15yo, wanted me back later but i guess i was still mad at her, such great drama
23:51:43 <oklopol> quintopia: ah we play with those all day in circuit theory
23:52:07 <itidus20> ^style
23:52:07 <fungot> Available: agora alice c64 ct darwin discworld europarl ff7* fisher homestuck ic irc jargon lovecraft nethack pa sms speeches ss wp youtube
23:52:15 <quintopia> who should i ask questions about them
23:52:30 <oklopol> is there something to know about them?
23:52:30 <itidus20> ^style nethack
23:52:30 <fungot> Selected style: nethack (NetHack 3.4.3 data.base, rumors.tru, rumors.fal)
23:52:34 <quintopia> who knows the emag equations and shit
23:52:37 <oklopol> quintopia: ais might know
23:52:47 <oklopol> ais523 to be precise
23:52:56 <quintopia> ais523 is a smart gu6
23:53:07 <oklopol> he's an electronics guy
23:53:30 <ais523> "emag equations"?
23:53:44 <ais523> I might be an electronics person, but I'm bad at remembering nontrivial equations
23:53:52 <oklopol> emag?
23:54:04 <oklopol> with just voltage regulators and resistors, the equations are trivial
23:55:11 <elliott> ais523 is definitely an electronics guy
23:55:13 <elliott> SORRY MAN
23:55:23 <quintopia> yes they should be trivial
23:55:28 <quintopia> but i dont remember them
23:55:35 <quintopia> so they are nontrivial to me
23:55:40 <oklopol> remember them?
23:55:40 <ais523> someone tell me what emag stands for!
23:55:53 <oklopol> oh emag was mentioned by quintopia
23:56:07 <quintopia> ais523: can pm you a question?
23:56:24 <ais523> quintopia: unless I have you on ignore, yes, that's how IRC works
23:56:27 <ais523> and I don' think I have you on ignore
23:56:36 <quintopia> im being polite
23:56:38 <ais523> or I wouldn't have been able to notice you'd asked me in-channel
23:56:42 <ais523> well, fair enough
23:56:53 <ais523> it just seems like a bit of a redundant question
23:58:00 <elliott> everyone ask ais523 private questions
23:58:09 <elliott> we must destroy the forces of politeness :(
23:58:10 <oklopol> http://www.utdallas.edu/~cantrell/ee4302/memorize.pdf i certainly have never heard most of these
23:58:28 <elliott> memorize.pdf good name
23:59:10 <oklopol> i just know abstract circuits with voltage regulators and resistors, you don't need to remember anything to solve those
23:59:37 -!- ubuntu__ has joined.
23:59:42 <oklopol> well, except U = RI
2011-09-12
00:01:15 -!- ubuntu__ has changed nick to cheater.
00:04:46 <elliott> ais523: git is the only VCS which gets worse the better you use it
00:04:49 <elliott> except for maybe CVS and SVN
00:05:15 <ais523> heh
00:05:19 <ais523> SourceSafe?
00:07:28 <elliott> ais523: does that even classify as a VCS?
00:08:06 <ais523> it's an, umm, attempt at a VCS
00:10:15 <elliott> sg. we really need sg. sg.
00:10:38 <monqy> sg
00:10:54 <elliott> sg.
00:11:06 <elliott> ais523: did you like my idea to avoid the clash with the Unix sg?
00:11:12 <elliott> (see if our argument is a group, and if so, behave like sg)
00:11:25 <elliott> just don't have a group named commit
00:11:47 <ais523> haha, that's ridiculous
00:12:01 <Gregor> Alternative: Name Scapegoat's command s🐐
00:12:38 <ais523> Gregor: a little hard to type
00:12:43 <Gregor> Pff
00:12:52 <elliott> ais523: btw, you know how you proposed hashing minichanges as hash/0, hash/1, etc.?
00:13:12 <elliott> where hash is the hash of the containing changeset
00:13:28 <ais523> yep
00:13:54 <elliott> ais523: I figured out why that wouldn't work, which is a better objection than me just not liking it
00:14:03 <elliott> ais523: the hash of the changeset /depends on the hashes of the contents/
00:14:21 <elliott> so hash_of(changeset {hash/0, hash/1}) must == hash
00:14:30 <ais523> ah, hmm
00:14:33 <ais523> it's possible to work around that
00:14:34 <elliott> which is (a) ridiculous, (b) hopefully impossible, or the hash function picked is really weak :P
00:14:37 <ais523> but I see why you might not want to
00:14:43 <elliott> ais523: probably; what were you thinking? hash /without/ the contents?
00:14:52 <elliott> in that case, a change with identical metadata hashes identically, despite being non-equal
00:14:56 <ais523> name the contents as self/0, self/1, etc
00:14:59 <elliott> rare, yes, but it means you know the guarantees are broken from the start
00:15:02 <elliott> ais523: ah, ew
00:15:17 <ais523> the whole point of the plan was to make the things smaller
00:15:23 <elliott> well, yes
00:15:24 <elliott> but still, ew
00:15:43 <elliott> I think you can still avoid making them bigger
00:15:53 <elliott> but I also think that we should get something that works before worrying about that
00:16:26 <ais523> fair enough
00:18:34 <elliott> ais523: btw, one of the most important parts of sg that we haven't figured out yet --
00:18:37 <elliott> ais523: the diff algorithm
00:18:55 <elliott> as in, going from filetree A and B, and producing a scapegoat change that turns A into B, and is preferably quite intelligent, using move changes and the like
00:18:58 <ais523> just using diff(1) should be enough to get something working, I think
00:19:03 <elliott> it's not
00:19:11 <elliott> because it doesn't handle things that are very important for sg, like moving
00:19:33 <elliott> ais523: also, if there /is/ an underlying diff algorithm, I'd prefer patience diff
00:19:41 <elliott> (advantages and example of betterness at http://bramcohen.livejournal.com/73318.html)
00:19:45 <ais523> what's patience diff?
00:19:48 <elliott> see link :P
00:19:58 <elliott> it's supposedly a bit slower than traditional diff, but who cares
00:20:11 <ais523> ah, hmm
00:20:16 <elliott> it also links to examples
00:20:20 <elliott> like http://kerneltrap.org/mailarchive/git/2009/1/2/4574424
00:23:04 <elliott> does anyone know how to go to a previous verison of a moinmoin page?
00:23:07 <elliott> recent changes doesn't help much
00:25:05 -!- DH____ has quit (Read error: Connection reset by peer).
00:25:14 -!- DH____ has joined.
00:25:16 <elliott> ais523: so incidentally, I'd be interested in seeing how sg's merge compares to precise codeville merge
00:25:30 <elliott> and whether that merge might be useful as the first thing sg tries if the standard application fails
00:25:54 <elliott> (description at http://revctrl.org/PreciseCodevilleMerge, but it's partially spambotted)
00:26:04 <ais523> sg's merge is very conservative; if the merge works at all, it's pretty much 100% going to be correct (anything short of 100% is an error)
00:26:21 <elliott> aha
00:26:22 <elliott> http://revctrl.org/PreciseCodevilleMerge?action=recall&rev=19
00:26:25 <elliott> there's a non-spambot version
00:26:34 <elliott> ais523: it's easy to prove it's less than 100%
00:26:45 <ais523> hmm, how?
00:26:54 <elliott> the only definition of "correct" is "what would be written if the changes were written by developers acting sequentially"
00:27:02 <elliott> consider if someone adds A(); somewhere in file a.c
00:27:08 <elliott> and someone else adds B(); somewhere in b.c
00:27:16 <elliott> and it turns out that you can't call B() after A() ever, it causes a complete segfault
00:27:21 <ais523> ah, I see
00:27:25 <elliott> that obviously applies cleanly, but it's an incorrect merge
00:27:50 <ais523> I think my definition is "the obvious combination of the two pieces of code without looking at context"
00:28:14 <ais523> a program where A() and B() had that sort of dependency would be pretty unmaintainable, unless the two functions were designed to do basically the same thing and yet added in different locations for some reason
00:28:28 <elliott> that's a pathological example, there are obviously others
00:28:30 <ais523> hmm, in fact, suppose someone adds a call to free() at the start of a list of deallocations
00:28:36 <ais523> and someone else adds a call to free() at the end
00:28:43 <elliott> yep
00:28:45 <elliott> i was just about to say something similar
00:28:50 <elliott> I typed "for instance, two people printing the same debug info in a different manner"
00:28:52 <elliott> and was going to add
00:28:55 <elliott> but separated by whitespace a bit
00:28:59 <ais523> I can't think of any plausible way for a VCS, not even sg, to automatically realise it should take one version not both
00:29:00 <elliott> so it's not in the "same" place but it effectively is
00:29:07 <ais523> without knowing the semantics of free
00:29:10 <elliott> ais523: indeed; a merge algorithm is necessarily imperfect
00:29:15 <ais523> TODO: tell sg the semantics of free
00:29:19 <elliott> haha
00:29:32 <elliott> ais523: thankfully, static analysis can catch that one
00:29:39 <elliott> I bet clang warns for a double-free like that
00:30:20 <elliott> ais523: but yeah, it's about minimising false positives
00:30:40 * elliott reads more about precise codeville merge
00:31:04 <ais523> I think clang's overrated
00:31:09 <elliott> really?
00:31:15 <elliott> the kind of warnings they do are very impressive
00:31:19 <ais523> I thought it was amazing based on what I heard about it, but after comparing it to gcc, gcc just looked like the better system all round
00:31:25 <elliott> howso?
00:31:41 <ais523> clang makes it easier to add new analyzers, so it's better for writing new sorts of warnings in
00:31:49 <ais523> but gcc's internals are more flexible
00:31:51 <elliott> the only place where it's inferior to gcc that I know are: some gcc extensions not implemented, and it produces slightly less speed-efficient code at gcc's best
00:31:55 <ais523> clang just makes so many assumptions, it makes my head hurt
00:32:03 <ais523> even if the assumptions are all correct in practice
00:32:12 -!- DHeadshot has joined.
00:32:14 -!- DH____ has quit (Read error: Connection reset by peer).
00:32:20 <elliott> ais523: with all due politeness (<-- this is how I say I'm about to be rude), comparing two C compilers based on how suitable for gcc-bf they are is bullshit
00:32:30 <ais523> haha
00:32:55 <ais523> platonically, gcc is the only suitable compiler for gcc-bf
00:33:01 <ais523> or it wouldn't be gcc-bf, but clang-bf or whatever
00:33:05 <elliott> yes yes
00:33:11 <elliott> "Convergence is the behavior where an identical change is made in two different branches, like this:"
00:33:17 <elliott> wow, people have actually /thought/ about this?
00:33:28 <ais523> elliott: git doesn't work at all unless that's implemented
00:33:49 <elliott> "Currently hardly any version control system properly supports convergence."
00:33:50 <elliott> heh
00:33:50 <ais523> because its view of the world is broken and it needs to count changes made twice as made once to avoid breaking whenever three-way merges are done at all
00:33:57 <elliott> "Convergence is sometimes referred to as 'implicit cherry-picking' because it allows cherry-picking to be done offline using diff and patch, and the system figures out what happened. This is in contrast to explicit cherry-picking, which requires the user give semantic input describing the cherry-pick to the system, which is the style supported by Darcs."
00:33:58 <elliott> hmm
00:34:13 <elliott> I think sg can do convergence just fine, in its "first-try" merge algorithm
00:34:20 <elliott> (it's not a merge if it cleanly applies :P)
00:34:22 <ais523> yep, it's just not necessary
00:34:31 <elliott> well,
00:34:32 <elliott> "Convergence is sometimes referred to as 'implicit cherry-picking' because it allows cherry-picking to be done offline using diff and patch, and the system figures out what happened. This is in contrast to explicit cherry-picking, which requires the user give semantic input describing the cherry-pick to the system, which is the style supported by Darcs."
00:34:33 <elliott> is quiet nice
00:34:34 <elliott> quite
00:34:35 <ais523> as in, sg works fine without convergence being implemented
00:34:38 <elliott> right
00:34:40 <ais523> but convergence just makes it better
00:34:44 <elliott> ais523: btw, what I was going to say but then forgot to:
00:35:11 <elliott> ais523: the whole "two filetrees into a change" thing is Yet Another Example of Reifying Intent, Which Has Plagued Computing For A Long Time
00:35:31 <ais523> oh dear, a Kelly misquote
00:35:50 <elliott> the idea is to reconstruct the changes the user intended from the "before" and "after"; the more accurately you reify that intent, the higher-quality the result (because it merges better, etc.)
00:36:10 <elliott> you can even ask the user to help it by telling the system some of the intent explicitly, e.g. "sg mv a.c b.c"
00:36:18 <elliott> or "sg split bigfile.c smallfilea.c smallfileb.c"
00:36:38 <elliott> (which basically means "I removed this file, created two new ones; and inside both of those new ones, there's a move change from bigfile.c"
00:36:39 <elliott> )
00:36:47 <ais523> indeed
00:36:58 <ais523> in fact, all Unix shell commands should be prefixable by sg
00:37:05 <ais523> to tell it what you're doing
00:37:11 <elliott> haha
00:37:12 <ais523> imagine if you could do sg cut
00:37:14 <elliott> that's probably not a good idea :P
00:37:21 <ais523> and it knew that you were separating the files into columns
00:37:45 <ais523> at least sg tr is a semantically sensible operation
00:42:44 <elliott> ais523: incidentally, instrumenting an editor to use sg, not to commit every single change done, but to, when the time to commit comes, use its information on what editing commands were run to provide a more accurate change than a system that had to reify more intent, would work well
00:42:50 <elliott> ais523: the problem is, psychology
00:43:07 <ais523> what do you mean by psychology, there?
00:43:14 <elliott> ais523: if I knew my editor was watching my every move to try and figure out what I'm doing, I'd be utterly paranoid not to run editing commands that "don't match my intent"
00:43:23 <elliott> so I'd be slowed down immensely trying to Do The Right Thing
00:43:25 <ais523> oh, I see
00:43:30 <elliott> maybe it's just me, but IMO that kills the idea :)
00:43:41 <elliott> which is annoying; why can't we all be robots, it'd work great then
00:45:25 <elliott> incidentally, who the hell designed cpp?
00:46:10 <ais523> C++, or the preprocessor?
00:46:19 <elliott> preprocessor
00:46:34 <ais523> I don't know, but it seems to already have been in common use by the time of K&R1
00:46:54 <elliott> it's awful :(
00:46:57 <ais523> the preprocessor's a hack around a lot of deficiencies of languages at the time (specifically C, but others too I think)
00:47:01 -!- MDude has quit (Read error: Connection reset by peer).
00:47:11 <elliott> here, you need to suffer a bit; incoming flood
00:47:11 <elliott> #define PACKET(id, cname, scmname, nfields, ...) \
00:47:12 <elliott> /* terminate the last field_num++ of the previous packet */ \
00:47:12 <elliott> ; \
00:47:12 <elliott> packet_id = id; \
00:47:12 <elliott> field_num = 0; \
00:47:13 <elliott> __VA_ARGS__
00:47:15 <elliott> #define FIELD(type, cname, scmname) \
00:47:17 -!- MSleep has joined.
00:47:17 <elliott> packet_field_symbol_names[packet_id][field_num] = scm_from_utf8_symbol(scmname); \
00:47:20 <elliott> field_num++ /* a comma appears next */
00:47:21 <elliott> #include "protocol.def"
00:47:23 <elliott> /* terminate the very last field_num++ */
00:47:25 <elliott> ;
00:47:27 <elliott> #undef FIELD
00:47:29 <elliott> #undef PACKET
00:47:47 <Jafet> You can't read that?
00:47:50 <ais523> haha; did you write that?
00:47:51 <Jafet> What's wrong with you?
00:47:55 <ais523> Jafet: it's an inside-out function call, I think
00:48:10 <ais523> elliott: the Secret Project has a #define / #include / #undef sequence
00:48:14 <ais523> but that's to avoid name clashes in header files
00:48:36 <elliott> <ais523> Jafet: it's an inside-out function call, I think
00:48:45 <elliott> umm, that part's a standard technique
00:48:46 <Jafet> Actually, the last part is quite funny
00:48:51 <elliott> it's just X-Macros
00:48:54 <Jafet> I don't suppose protocol.def is C, is it.
00:48:57 <ais523> I had to include both the kernelspace and userspace versions of a particular struct (I forget which), and they had the same name
00:49:03 <elliott> Sure it is, Jafet
00:49:03 <elliott> PACKET(0x00, KEEPALIVE, "keepalive", 0, 0)
00:49:03 <elliott> PACKET(0x01, LOGIN, "login", 4, FIELD(FIELD_INT, ID, "id"), FIELD(FIELD_STRING, NAME, "name"), FIELD(FIELD_LONG, SEED, "seed"), FIELD(FIELD_BYTE, WORLD, "world"))
00:49:06 <elliott> PACKET(0x02, HANDSHAKE, "handshake", 1, FIELD(FIELD_STRING, DATA, "data"))
00:49:07 <elliott> PACKET(0x03, CHAT, "chat", 1, FIELD(FIELD_STRING, MESSAGE, "message"))
00:49:09 <ais523> elliott: it may be a standard technique, but that doesn't prevent it being an inside-out function call
00:49:10 <elliott> PACKET(0x04, TIME, "time", 1, FIELD(FIELD_LONG, MINUTES, "minutes"))
00:49:11 <elliott> [...]
00:49:13 <elliott> Like I said, X-Macros
00:49:21 <elliott> ais523: true, but that's not the terrifying part
00:49:26 <elliott> and yes, I wrote it
00:49:34 <elliott> it was the only thing that would work :(
00:49:55 <ais523> after doing that for a bit, people normally end up inventing DSLs
00:49:58 <ais523> at least, I do
00:49:59 <elliott> here's another great one
00:50:00 <elliott> switch (p->type)
00:50:00 <elliott> {
00:50:00 <elliott> #define PACKET(id, cname, scmname, nfields, ...) \
00:50:00 <elliott> case id: \
00:50:00 <elliott> return sym_packet_##cname;
00:50:03 <elliott> #include "protocol.def"
00:50:06 <elliott> #undef PACKET
00:50:08 <elliott> default:
00:50:10 <elliott> wtff("Invalid packet type %u", p->type);
00:50:11 <elliott> }
00:50:12 <ais523> OIL improved the maintainability of C-INTERCAL's optimiser by orders of magnitude
00:50:13 <elliott> ais523: a DSL that did what? compile to C?
00:50:18 <ais523> yep
00:50:19 <elliott> this is embedded in a bunch of other C code
00:50:27 <elliott> ais523: well, protocol.def /is/ compiled
00:50:37 <elliott> from protocol.txt, which just looks like
00:50:37 <elliott> entity_equipment: 0x05
00:50:37 <elliott> - int entity: entity ID
00:50:37 <elliott> - short slot: slot (0 = held, 1..4 = armor)
00:50:37 <elliott> - short item: item ID
00:50:37 <elliott> - short damage: damage
00:50:38 <ais523> yep, you've basically written a DSL in cpp
00:50:43 <elliott> no
00:50:47 <elliott> protocol.def is compiled
00:50:49 <elliott> from the above
00:50:52 <elliott> (well, a bunch of the above)
00:51:00 <ais523> oh, I see, you're compiling from a text description to some code that cpp compiles into some other code
00:51:00 <elliott> the thing is, the protocol.pl script that processed it was creating a C file and a header
00:51:10 <elliott> and I needed to use the same information in a bunch of places
00:51:20 <elliott> it'd suck to make it even more complicated and spit out a bunch of files
00:51:26 <elliott> which would then have to be pasted slapdash with cpp into other files
00:51:32 <elliott> even though the usage was strictly localised
00:51:37 <elliott> so I made it spit out an X-Macro file instead
00:51:50 <elliott> it's simplified everything a lot, but occasionally it gets ugly like that :P
00:51:58 <ais523> OIL generates a bunch of files as its output purely to stop gcc running out of memory trying to compile it
00:52:09 <elliott> incidentally, all that comma termination stuff would be unnecessary if you could turn
00:52:10 <elliott> a, b, c
00:52:10 <elliott> into
00:52:11 <elliott> a; b; c
00:52:12 <elliott> with cpp
00:52:14 <elliott> I think you _can_
00:52:16 <elliott> but it'd be really ugly
00:52:43 <Jafet> elliott: how does a C file have "field_num++" at the end
00:52:58 <ais523> elliott: you can for any finite number of fields, I think; I'm not sure about infinite numbers of fields
00:53:06 <ais523> as in, unbounded
00:53:41 <elliott> Jafet: the field_num++ is in that FIELD() declaration
00:53:52 <elliott> read the macros more carefully, then look at my pasted snippet of protocol.def
00:53:54 <elliott> (it's all like that)
00:54:00 <elliott> ais523: chaos-pp does that kind of stuff
00:54:21 <elliott> and various other seemingly impossible cpp things
00:54:31 <elliott> "The documentation for CHAOS_PP_IS_EMPTY_NON_FUNCTION says: [quote] If __VA_ARGS__ is empty, this macro expands to 1. Otherwise, it expands to 0."
00:54:35 <elliott> combined with iteration, that should make it pretty easy
00:54:56 -!- CakeProphet has quit (Ping timeout: 260 seconds).
00:55:08 <elliott> hmm, that shouldn't even be possible
00:55:17 <elliott> you have to specify at least one variable argument, according to C
00:55:27 <elliott> oh, wait
00:55:29 <elliott> you can pass an empty argument
00:55:32 <elliott> which isn't the same thing as passing nothing
00:55:36 <elliott> cpp has /really/ weird semantics
00:55:49 -!- DHeadshot has quit (Ping timeout: 260 seconds).
00:56:25 <elliott> ais523: yikes, take a look at the macro at the bottom of http://bytes.com/topic/c/answers/541521-behavior-variadic-macro#post2113119
00:56:27 -!- CakeProphet has joined.
00:56:27 -!- CakeProphet has quit (Changing host).
00:56:27 -!- CakeProphet has joined.
00:56:30 <elliott> s/macro/macros/
00:57:43 <ais523> how does it manage that without any additions?
00:58:09 <ais523> oh, it seems to have dependencies on macros not mentioned, like FPP_IF
00:59:44 <elliott> yep, but still, yikes
01:06:01 <elliott> I'm terrible at cpp programming :(
01:06:06 -!- Jafet1 has joined.
01:06:53 <monqy> one time I tried cpp programming
01:06:57 <monqy> it was hellish
01:07:11 -!- Jafet has quit (Ping timeout: 276 seconds).
01:07:18 <monqy> maybe I should try again
01:08:30 -!- Jafet1 has changed nick to Jafet.
01:12:07 -!- MSleep has changed nick to MDude.
01:17:22 <ais523> `addquote <monqy> one time I tried cpp programming ​ <monqy> it was hellish ​ <monqy> maybe I should try again
01:17:24 <HackEgo> 651) <monqy> one time I tried cpp programming ​ <monqy> it was hellish ​ <monqy> maybe I should try again
01:17:55 <ais523> such a great description of this channel in three lines of IRC
01:18:54 <elliott> it bothers me that cpp is the one programming language ican't learn
01:19:15 <elliott> s/ican't/i can't/
01:27:31 <Sgeo> cpp as in C preprocessor?
01:27:49 <monqy> hi
01:27:54 <elliott> Yes.
01:28:22 <ais523> elliott: can you learn INTERCAL?
01:29:00 <elliott> ais523: wow, what a zzoesque phrasing
01:29:12 <elliott> but, admittedly, probably not
01:29:21 <elliott> I might be able to, but it'd be a slow process
01:29:23 <ais523> elliott: I know, but it wouldn't have been a correct statement if I'd phrased it more normally
01:29:30 <ais523> well, correct reference in the question
01:29:38 <ais523> I should teach INTERCAL
01:29:48 <ais523> it really isn't as bad as it looks, although it's still quite bad
01:30:33 -!- CakeProphet has quit (Quit: Reconnecting).
01:30:52 -!- CakeProphet has joined.
01:31:14 <CakeProphet> cpp is the best language of all.
01:31:18 <elliott> ais523: I'd attend
01:31:22 <ais523> anyone here confident about Windows 8, btw?
01:31:28 <elliott> confident howso
01:32:09 <ais523> that it's going to sell well (relative to other Windows versions)? that it's going to be usable without driving you mad? that it's going to have features you'd want in an OS (or Windows version specifically)?
01:32:29 <elliott> I can say that the latter is false, mostly because it's false for every OS in existence
01:32:43 <elliott> (it's probably false for @ too; by no means will @ be good)
01:33:04 <ais523> well, hmm, a greater proportion of the features you want than Windows typically has atm?
01:33:13 <elliott> ais523: really though, the tablet-focused stuff looks nice fo a tablet, but not for a mouse
01:33:14 <ais523> as in, you can think an OS is very bad but still admit it's an improvement
01:33:16 <elliott> or tocuhpad
01:33:19 <monqy> regarding < ais523> elliott: can you learn INTERCAL? i thought zzo too
01:33:26 <ais523> I think so too
01:33:40 <elliott> I have a feeling Windows 7 is somewhat of a local maxima
01:33:48 <elliott> as in, the best you can make Windows without Doing Something Different
01:33:52 <elliott> so I'm not surprised they're trying something radical
01:34:21 <elliott> personally, I wish everyone would stop Doing Something Different, it's driving me away from Linux DEs
01:34:36 <elliott> at least my Something Different is something entirely new, not an upgrade :)
01:34:47 <ais523> Windows 7 was pretty Something Differenty in several ways
01:35:00 <elliott> it was?
01:35:01 <ais523> I was so glad when I discovered I could change the taskbar back to a reasonably XP-like style
01:35:05 <elliott> it was pretty similar to Vista
01:35:14 <elliott> haha, that's insane
01:35:25 <elliott> the taskbar is the best taskbar in any OS, as long as Aero is on
01:35:30 <elliott> (otherwise the window switch is useless)
01:35:31 <ais523> although doing that causes it to break muscle memory on the quick launch area
01:35:51 <ais523> elliott: it becomes unusable as soon as you open two windows of one program
01:36:11 <ais523> as it then requires two clicks in order to open either of them via the taskbar, and you don't know where the second click should be until you've already made the first one
01:36:30 <ais523> which is pretty much unforgivable design
01:36:35 <elliott> that's acceptable for me, because the alternative is a taskbar with a hundred windows
01:36:41 <elliott> so I don't know where to click... full stop
01:36:47 <ais523> doing this for tabs within IE is even worse, why can I not open IE then use its normal tab-change method?
01:36:59 <elliott> every browser does that now, not IE
01:37:03 <elliott> but that's also incredibly useful for me
01:37:07 <ais523> even worse
01:37:16 <ais523> I typically have 4-6 windows open per desktop
01:37:24 <elliott> I don't use desktops
01:37:25 <ais523> and arrange them in a standard order on the taskbar so that muscle memory works
01:37:31 <ais523> neither to I, normally
01:37:34 <ais523> *do
01:37:43 <ais523> but I'll use a second one to do an entirely unrelated bunch of work
01:37:45 <elliott> your computer has fooled you being a manual window manager :)
01:38:00 <ais523> elliott: I'm not sure if it's "fooled"
01:38:05 <ais523> rather, my computer allows me to be a manual window manager
01:38:19 <elliott> well, it's making you waste your time
01:38:28 <elliott> that's fooling whether you think you want it or not
01:38:34 <ais523> nah, I can rearrange the windows while waiting for them to load
01:38:44 <ais523> loading KDE takes a while
01:38:50 <ais523> umm, Qr
01:38:52 <ais523> *Qt
01:39:01 <ais523> together with whatever KDE stuff's needed to run KDE stuff outside its shell
01:39:13 <elliott> your only windows are KDE?
01:40:03 <ais523> no, but Konversation loads first
01:40:08 <ais523> Evolution and Firefox take longer
01:40:24 <ais523> (actually, Epiphany consistently loads first, but I don't use it until after everything else is loaded, and don't always use it anyway)
01:40:42 <ais523> my windows are Konversation/Evolution/Firefox/Epiphany atm
01:40:48 <ais523> sometimes there'll be a terminal window too; there was earlier
01:40:53 <elliott> Have you considered using ratpoison? :p
01:41:13 <ais523> I might need to change DE if Gnome have screwed up as badly as I've heard
01:41:23 <ais523> but what I'm doing atm works, and doesn't take anything away from my workflow
01:41:31 <ais523> also, I use Compiz features on a regular basis
01:41:33 <elliott> I wsa referring to the fact that you have a constant set of windows
01:41:36 <elliott> was
01:41:39 <ais523> so I'm not sure I'd be happy with any other compositor
01:41:42 <ais523> elliott: oh, that's only when online
01:41:48 <elliott> ratpoison doesn't even composit
01:41:48 <ais523> I have a completly different constant set of windows when offline
01:42:00 <ais523> normally terminal/emacs/sometimes epiphany
01:42:09 <ais523> and five or more, which is the game I use to pass time while compiling
01:42:18 <elliott> well, with ratpoison basically just lets you have a constant set of windows full-screened... you can even create a new fullscreened window
01:42:24 <elliott> and if you're /really/ daring, manually tile them
01:42:47 <ais523> also, although I normally keep windows constantly fullscreened (with the exception of five or more), I rely on the ability to unfullscreen them on occasion
01:43:00 <ais523> really, I suppose my case is that there are many things I do as standard
01:43:03 <elliott> for what purpose, out of curiosity?
01:43:04 <ais523> but I like to be able to deviate from them too
01:43:19 <ais523> elliott: say I have two terminal windows, and want to turn one always-on-top and semitransparent, then line them up
01:43:22 <ais523> so I can visual-diff them
01:43:31 <elliott> that's awful
01:43:44 <ais523> I use always-on-top a lot for watching people play NetHack in a corner of the screen while doing other things, too
01:43:49 <ais523> why are you calling that awful?
01:43:57 <elliott> diff via compositing
01:43:58 <ais523> it's a useful operation and one that couldn't be achieved easily by other means at all
01:44:04 <pikhq> man diff
01:44:13 <ais523> elliott: well, how else are you supposed to diff two telnet sessions?
01:44:21 <ais523> or, well, more commonly ssh sessions
01:44:25 <ais523> but it's the same principle
01:44:34 <ais523> a compositor is clearly the right program for that
01:44:36 <pikhq> man expect
01:44:37 <elliott> ;__________-;
01:44:40 <ais523> likewise, how do you diff GUI images
01:44:41 <elliott> s/-;/;/
01:44:42 <ais523> pikhq: screen-oriented
01:44:58 <ais523> I could probably write an expect program combined with a VT100 parser, and spend a week or so to get something around half as useful
01:45:02 <ais523> or I could just use Compix
01:45:04 <ais523> *Compiz
01:46:06 <pikhq> So... You're having to automate screen-oriented UIs?
01:46:22 <pikhq> Have you considered grabbing a bludgeoning weapon and hunting down the author?
01:46:35 <elliott> what?
01:46:41 <elliott> ais523 never said he was automating anything
01:46:48 <pikhq> Oh, right.
01:47:05 <pikhq> Have you considered just grabbing a bludgeoning weapon regardless?
01:47:07 <pikhq> :P
01:47:41 <ais523> pikhq: the actual use-case is that I have a NetHack game, and a map that I'd like to change that NetHack level to look like
01:47:53 <ais523> so I can see a shadow of the map and can try to alter the level itself to look the same
01:48:58 <ais523> can you suggest a simpler way to do that than using a compositor feature that's just perfect for the purpose?
01:49:12 <ais523> (admittedly, one that leads me to occasionally invisibilise windows by mistake)
01:49:17 <elliott> btw, I can't think of a better way either, and I'm going to blame it on Unix
01:49:25 <elliott> because I blame almost everything on Unix
01:49:42 <ais523> you /will/ shout at me for my second-most-common use of the feature, which is seeing a compile happen behind my editor
01:49:50 <elliott> augh
01:49:51 <ais523> giving me two full-screen programs running at once
01:49:53 <elliott> it's going to be worse than shouting
01:49:58 <elliott> you're in Birmingham, right?
01:50:05 <ais523> yes
01:50:18 <elliott> expect me
01:50:20 -!- elliott has quit (Quit: Leaving).
01:50:24 <ais523> but you can't shout loud enough to reach Birmingham from Hexham
01:50:55 <ais523> what would be awesome: if elliott just wanted to go to bed and thought that was a perfect moment to make an amusing exit
01:51:08 <ais523> it'll take him a while to get here unless he can afford a taxi over that distance
01:51:23 <ais523> most public transport doesn't work at night, and elliott doesn't have a driving license
01:51:32 -!- elliott has joined.
01:51:34 <elliott> turns out there aren't trains at this time
01:51:39 <pikhq> No shit. :P
01:51:47 <ais523> [02:51] <ais523> it'll take him a while to get here unless he can afford a taxi over that distance
01:51:48 <ais523> [02:52] <ais523> most public transport doesn't work at night, and elliott doesn't have a driving license
01:52:00 <elliott> hmm, I wonder what a taxi to Birmingham would cost?
01:52:04 <pikhq> It's, what, 01:00 there?
01:52:09 <ais523> almost 3am
01:52:15 <pikhq> Blah.
01:52:19 * Sgeo mutters at planes costing a lot more than busses
01:52:19 <elliott> all I know about taxi costs is, I gawp when I see the little indicator inside going up
01:52:23 <elliott> at an alarming rate
01:52:26 <elliott> at least it's not exponential
01:52:32 <elliott> Sgeo: No... shit?
01:52:52 <Sgeo> It would be fun to roam the world on a few dollars
01:52:57 * Gregor mutters at people pluralizing "buses" in weird ways.
01:53:12 <elliott> Sgeo: people do it
01:53:12 <Sgeo> busi
01:53:18 <elliott> I don't think they use planes much
01:53:21 <ais523> elliott: the thing that always amuses me is the £300 or so surcharge there is from most companies for calling a taxi on Christmas Day
01:53:32 <elliott> haha
01:53:33 <ais523> also, I got a taxi from Wales to England once
01:53:37 <ais523> admittedly, it was just across the border
01:53:37 <elliott> but seriously, how much would a taxi to Birmingham cost?
01:53:50 <ais523> but even so, the taxi driver had to ring his boss and ask for permission to go that far out of usual territory
01:53:50 <pikhq> elliott: People who can get to a different country in less than 1,000 miles travel do. :P
01:54:02 <ais523> elliott: my guess is on the order of £1000
01:54:08 <pikhq> Well. Sgeo's in New York. He could get to the Canadian border with much less effort.
01:54:15 <elliott> ais523: wow
01:54:25 <Sgeo> I was stung by a wasp in Canada once
01:54:35 <elliott> And then I NEVER RETURNED TO THE WRETCHED PLACE
01:54:38 <Gregor> I like trains.
01:54:43 <Gregor> *smack*
01:54:45 <elliott> I like trains too.
01:54:53 <pikhq> I wish we had some.
01:54:54 <Sgeo> elliott, turns out to be true that I never returned to Canada
01:55:12 <elliott> Sgeo: You're calling Canada a wretched place, I see.
01:55:28 <ais523> elliott: interestingly, Google Maps suggests two entirely different routes from Hexham to Birmingham
01:55:41 <ais523> one via the A1, the other via the M6
01:55:58 <elliott> I wonder how easy it is to walk the A1
01:56:04 <ais523> the A1 goes east of Leeds, whilst the M6 goes west of Manchester
01:56:12 <elliott> it has a little space at the side, right
01:56:13 <elliott> ?
01:56:14 <ais523> also, I didn't really appreciate that Hexham was that far North
01:56:26 <elliott> we're practically Scottish, with the distinct advantage that we're not Scottish
01:56:28 <ais523> well, much of it's a motorway, so yes but you technically aren't allowed to walk there
01:56:38 <elliott> I wonder how technical that is
01:56:50 <ais523> you're at a similar latitude to Newcastle!
01:56:55 <elliott> if I ever get stranded on the A1, it would be useful to know that a police car would be happy to export me to somewhere warm
01:57:00 <elliott> ais523: umm, yes, we're right next to Newcastle
01:57:06 <elliott> geoip says I'm in newcastle IIRC
01:57:16 <ais523> that'd make sense, who'd put Hexham in a geoIP?
01:57:21 <elliott> :'(
01:57:54 <ais523> also, evidence that AJAX is stupid and I hate it: there's an actual "link" button that you need to click on Google Maps to get a link to what you're viewing
01:58:00 <ais523> because the URL doesn't change according to what you've entered
01:58:04 <elliott> ais523: that's in htmlfive
01:58:08 <elliott> and current browsers implement it
01:58:09 -!- kmc has joined.
01:58:13 <elliott> (changing the url appropriately and adding to history)
01:58:14 <ais523> elliott: but does Google use it?
01:58:21 <elliott> nope, that's evidence that google is stupid and you hate it
01:58:31 <elliott> "We could not calculate directions between Hexham, UK and Birmingham, AL."
01:58:32 <elliott> google...
01:58:33 <ais523> fair enough, I knew that already
01:58:47 <elliott> neat, I can walk to birmingham in two days and... I...
01:58:50 <elliott> ais523, you have to see this
01:58:55 <ais523> http://maps.google.com/maps?saddr=hexham+uk&daddr=birmingham+uk&hl=en&sll=37.0625,-95.677068&sspn=34.122306,85.869141&geocode=FWjHRgMdAf3f_ykVmDENYpB9SDEEwA0heCs6qA%3BFZHTIAMdKBvj_ylzcUEbLZRwSDGYee6u8P6Byg&vpsrc=0&mra=ls&t=m&z=7
01:59:04 <pikhq> elliott: Give it a couple decades and that will be SOlved.
01:59:07 <pikhq> SOLVED, even.
01:59:08 <ais523> really, if you want to walk that distance, you should be using the NCN
01:59:14 <elliott> ais523: http://ompldr.org/vYWI5aQ
01:59:19 <elliott> ONE OF THOSE ROUTES IS VERY PRACTICAL INDEED
01:59:21 <ais523> it's the /other/ Year 2000 project, the one that isn't the Millenium Dome
01:59:42 <ais523> and it got only a fraction of the funding and is way more useful
01:59:50 <elliott> CLICK THAT LINK
01:59:54 -!- kmc has quit (Remote host closed the connection).
01:59:58 <ais523> it basically made a network of cyclepaths (that can also be walked along) connecting all the major cities in the UK
02:00:01 <elliott> CLICK THAT LINK
02:00:03 <ais523> and many of the minor ones
02:00:06 <elliott> >:(
02:00:41 <Sgeo> elliott, better yet: Go west to get to Asia
02:01:38 <elliott> ais523: huh, I was unaware that there were cycle roads separate from car ones
02:01:58 <ais523> so is everyone else, more or less
02:02:03 <ais523> they have to go along car roads sometimes
02:02:07 <ais523> especially in the countryside
02:02:10 <ais523> but they try to make them minor ones
02:02:14 <elliott> http://upload.wikimedia.org/wikipedia/commons/a/ab/Openstreetmap-ncn-20101217.jpg neat, you can cross the island with them
02:02:20 <ais523> in Birmingham, they mostly go along floodplains
02:02:26 <elliott> as in, placewhosenameiforgetinscotland to lands end
02:02:40 <ais523> places that they can't build anything but cycle paths because they get flooded every now and then
02:02:46 <elliott> haha
02:03:11 <ais523> route 5 goes along Birmingham, and is mostly along the banks of the River Rea; I use it to walk to the city centre occasionally
02:04:16 <ais523> wow, this Sustrans website is doing Flash-like things without Flash, it looks like it's a proper HTML thing
02:04:21 <elliott> I've been to remarkably few places in the UK now that I think about it
02:04:34 <elliott> ais523: flash-like things?
02:04:57 <ais523> things that people normally use Flash for, like scrollable zoomable maps that react to things like the mouse wheel
02:05:28 <elliott> those are almost universally google-maps based, which is js
02:05:39 <elliott> or, well, yahoo maps or whatever
02:05:41 <elliott> but that's js, too
02:05:52 <elliott> http://www.sustrans.org.uk/map?searchKey=hexham&searchType=search&Search=Find this is not very pleasant to use
02:05:54 <ais523> anyway, route 72 seems to go through hexham
02:06:08 <ais523> I agree, it seems pretty awkward to use
02:06:17 <elliott> hmm, I wonder if that path is part of it
02:06:23 <ais523> sufficiently so that I can't figure out where else route 72 goes, or where it connects to
02:06:38 <elliott> (there's a pretty wide, very long path next to the Tyne that seems to have no actual purpose; when I've been on it cyclers have passed every now and then IIRC)
02:06:45 <ais523> the NCN is reasonably noticeable if you look: it has blue signs with a white bicycle symbol, and a patch of red background with a white number on
02:06:53 <elliott> it doesn't seem to go anywhere, though; after hours of walking, it just ended up in some nowhere village
02:06:58 <ais523> and they're relatively frequent
02:07:04 <elliott> oh, I don't recall any signs though
02:07:06 <ais523> heh, that sounds like an adequate description of the NCN
02:07:20 <elliott> hmm, there /was/ that fork
02:07:25 <elliott> maybe the interesting places was down that
02:07:27 <elliott> s/was/were/
02:07:29 <elliott> s/were/are/
02:07:53 <ais523> the route seems to be mostly along the north of Hexham, and makes a small detour to visit the railway station
02:08:15 <elliott> heh
02:08:22 <elliott> I don't recall any cycle path at the railway station
02:08:57 <ais523> elliott: 72/68/54/5
02:09:03 <elliott> hi
02:09:03 <ais523> that should be your walking route from Hexham to Birmingham
02:09:06 <elliott> haha
02:09:11 <elliott> will that take less than two days?
02:09:28 <ais523> depends on how fast you walk, I guess
02:09:34 <ais523> but Hexham's so far north of Birmingham that I doubt it
02:09:42 <ais523> can you walk over 200 miles in two days?
02:09:59 <ais523> at 4mph, a fast walking speed, that's 25 hours of walking, so I think it's doable
02:10:03 <ais523> umm, 50 hours of walking
02:10:06 <ais523> so probably not doable
02:10:11 <ais523> three days seems possible
02:10:19 <elliott> I ran five miles once when I was a kid... I think it took an hour?
02:10:24 <elliott> felt like running to me, not walking
02:10:35 <elliott> also I forgot to eat anything, which made the aftermath fun
02:10:39 <ais523> 5mph is plausible for jogging
02:10:49 <elliott> I was like ... uh ... young :P
02:10:59 <ais523> running's more like 15mph, but you need to be a top athlete to keep that up for even a mile
02:11:04 <ais523> and sprinting faster still
02:11:38 <ais523> (the difference between normal people and Olympic athletes is more in how long they can keep a speed up than maximum speed, except for sprints)
02:11:48 <elliott> I have rather terrible stamina, so I expect it'd take me quite many days to get to Birmingham
02:13:36 <ais523> I'm just amused that we're even discussing this
02:13:45 <ais523> and that I'm giving advice, given your stated purpose for walking to Birmingham
02:13:49 <elliott> if you start teaching INTERCAL, I'll make a good-faith effort to walk the distance
02:14:16 <ais523> I doubt I could get it added to the syllabus
02:14:18 <elliott> I don't think it's worth it just to try and stop you using translucency for that, though
02:14:26 <elliott> ais523: underground INTERCAL classes
02:14:43 <elliott> the classes will be held in building whatever, at midnight. please note that the door will be locked, so you may have to break the window.
02:15:15 <elliott> wow, XSLT is a functional programming language
02:15:34 <ais523> we could hold it in the secret underground maintenance tunnels, I suppose
02:15:38 <ais523> except I have no idea where the entrance is
02:15:39 <elliott> that sounds fun
02:15:42 <ais523> and they're very cramped and dangerous
02:15:48 <elliott> why dangerous?
02:16:01 <ais523> their existence became obvious to absolutely everyone a while back as they spent several months replacing the roofs
02:16:05 <ais523> and because they mostly carry hot water
02:16:10 <elliott> heh
02:16:12 -!- DH____ has joined.
02:16:14 <ais523> hot enough that steam came up from them constantly while the roof was removed
02:16:23 <elliott> I suspect there's a good few people there anyway
02:16:28 <elliott> urban exploration, and all that
02:16:39 <ais523> also, they're incredibly narrow in places
02:16:49 <elliott> don't worry, I'm incredibly narrow in all places
02:18:00 <elliott> "Some steam tunnels have dirt floors, no efficient lighting and have temperatures upwards of 45 °C (113 °F)."
02:18:01 -!- kmc has joined.
02:18:02 <elliott> Sounds like Australia.
02:18:05 <elliott> [rimshot]
02:18:14 <elliott> Okay that was bad.
02:18:17 <elliott> I apologise.
02:19:19 <Gregor> I must inform you on behalf of Australia that your apology has not been accepted, and you should probably not be surprised if a large and oddly poisonous animal shows up in your bed tonight.
02:19:38 <elliott> So they're punishing me by giving the honorary Australian treatment?
02:21:20 <zzo38> Once I was in the school one teacher was teaching computer programming. I suggested that he learn INTERCAL.
02:21:31 <elliott> oh dear
02:21:46 <ais523> elliott: bear in mind that zzo38's teachers probably have met zzo38
02:22:05 <elliott> heh
02:22:12 <elliott> "probably"
02:23:26 <elliott> hmm
02:24:08 <CakeProphet> homespring is the best language
02:24:10 <zzo38> I don't know whether he tried to even figure out what INTERCAL is, though.
02:24:24 <CakeProphet> any other programming metaphor is obsolete.
02:26:01 -!- calamari has joined.
02:30:52 <zzo38> The ADOM wish program does strange things. If you type "blind" it assumes you mean "goblin", type "weapon mastery" it assumes you meant "dwarven weaponmaster", typing "sheep" it assumes you mean "banshee"; all of them summon hostile creatures of that type. "human corpses" just results in random corpses.
02:31:44 <zzo38> Typing "sickness" gives you a temporary speed boost (I don't know why). "kobold corpses" results in kobold corpses, but "blink dog corpse" results in live (and hostile) blink dogs.
02:32:14 <CakeProphet> probably to make cheating more exciting.
02:32:50 <zzo38> Maybe.
02:33:30 <CakeProphet> http://df.magmawiki.com/index.php/Fun
02:33:57 <ais523> I think it's trying to match the maximum number of consecutive letters
02:34:01 <zzo38> Typing "visibility" does *not* result in visibility, it results in rings of invisibility. "cold" results in gold (probably in many cases it tries an approximate match, this is one such case).
02:34:18 <ais523> e.g. "/blin/d" -> "go/blin/"
02:34:30 <ais523> that would explain the vast majority of zzo38's cases, except the sickness one
02:34:32 <CakeProphet> ah
02:34:37 <zzo38> ais523: I did notice those kind of things.
02:34:39 <CakeProphet> quickness
02:34:40 <CakeProphet> ?
02:34:45 <ais523> CakeProphet: aha, that must be it
02:34:50 <elliott> haha
02:35:42 <zzo38> Some things I read elsewhere. "Thomas Biskup" results in a message saying that you should not mock the creator of this game.
02:35:44 <CakeProphet> if I made some kind of wish system or cheating tool I would make it to completely random things for typed phrases.
02:36:03 <CakeProphet> just to make life interesting.
02:36:31 <zzo38> While "death" apparently results in a lot of aging (not necessarily death).
02:36:44 <Patashu> http://www.youtube.com/watch?v=_4JTlR_ltRo LOL
02:37:21 <elliott> I'd buy it
02:38:36 <CakeProphet> that's pretty exciting
02:39:23 * CakeProphet is working on an esolang that uses a completely made up particle physics oriented programming model.
02:39:27 <zzo38> There are also various sets of restrictions you can try. One is to win the game, but select the highest number of kills of any individual kind of creature; the lower the highest such number is, the better your score. One is again win the game but your score is the number of different kind of creatures you have killed and the high number is best.
02:39:29 <CakeProphet> best metaphor of all
02:39:37 <CakeProphet> better than homespring
02:39:58 <zzo38> Another is you must enter the small cave at first (no exceptions), and stay there. Do not go up or down stairs. Goal is to reach 50th experience level.
02:40:18 <CakeProphet> that's pretty exciting.
02:40:59 <zzo38> Another is to win with the lowest experience total. (Someone has completed the special ending with only 1 experience point.)
02:42:12 <CakeProphet> they must be really good, or the game isn't very difficult.
02:43:01 <ais523> CakeProphet: it's more that it's one of those games that is difficult but gets easier with spoilers
02:43:01 <zzo38> Here is another: Win the game but a restriction is that you can never carry more than 100 stones worth of inventory (this counts both equipped and nonequipped equipment). If you start with more than 100 then drop some on the road before you continue. (To win the game, you need five orbs, each of which weighs 100s. This means you must place each orb individually and then get the next one; and while doing so, no other items are permitted)
02:43:59 -!- Patashu has quit (Ping timeout: 250 seconds).
02:44:21 <monqy> so yesterday or so I had a good nap dream
02:44:35 <zzo38> Another restriction is no use of the downstairs command. Goal is reaching 50th experience level. This means the only places you can enter are wilderness encounters.
02:45:00 <monqy> it's the future or something and my family and I are in outer space and one of my teeth falls out mysteriously and this troubles me so I decide I need to see a space dentist
02:45:33 <monqy> but my dad drags me to space church instead and it's boring and he makes me talk to the space priest so I get up but then this child bumps into me and spills wafers everywhere
02:45:47 <ais523> wow, I failed to follow the line wrap there
02:45:59 <ais523> and ended up reading "This means the only places you can enter are wilderness space dentist"
02:46:09 <monqy> good reading
02:46:31 <coppro> the completion of eternium man is awesome
02:46:34 <monqy> I help him pick up the wafers but then the priest sits down and I guess he had to be standing for me to talk to him or something? I stand up and he asks me what the matter is and I say I was just a bit late standing up. everyone finds this hilarious and laughs a lot.
02:47:05 <ais523> monqy: I found that hilarious too
02:47:28 <monqy> But then it gets weird: gashes open up everywhere and there are tentacles everywhere and some of the tentacles burst and my father comes to the conclusion that the place is evil and we flee
02:48:05 <monqy> we don't have enough fuel to get anywhere but my dad remembers there's this woman who goes to space church who lives nearby and is a space dentist so we go to her place
02:48:34 <monqy> there's a really long staircase leading up to a spall 1-room house with a glass door and an old lady inside cleaning up instead of noticing us
02:48:59 <monqy> I ring the doorbell and explain I was at space church and require dental assistance so she gets her tooth inspection kit
02:50:00 <monqy> while inspecting my teeth she rambles about how wonderful they are and explains how I'm her only patient with good enough teeth to see the full majesty and she shows me this chart relating teeth to flavours
02:50:15 <monqy> and points out the different tooth flavour relations
02:50:26 <monqy> like one tooth is for milk and another one is for strength (these are flavours)
02:50:41 <monqy> then she plunges a knife into my stomach and I wake up
02:50:42 <monqy> the end
02:51:18 <ais523> that was a bizarre thing for her to do
02:51:25 <monqy> I didn't understand it either
02:52:41 <monqy> maybe it's part of space dentistry. maybe she was evil too.
02:53:25 <ais523> perhaps stabbing someone is how you cure space tooth problems
02:54:54 <elliott> oh is this
02:54:55 <elliott> dream talk
02:54:55 <elliott> me read
02:56:56 <elliott> monqy: good dream
02:57:10 <monqy> i liked it too
02:57:40 <monqy> last night I had a really complicated dream with a huge backstory but I can't remember any of the interesting parts
02:58:02 <coppro> they were about frogs
02:58:40 -!- azaq23 has joined.
03:01:41 <Sgeo> Great, Wolfram Alpha, alternate forums
03:01:43 <Sgeo> forms
03:01:50 <Sgeo> Now how about giving me the answer already
03:02:25 <Sgeo> Unless it refuses to for inconsistent systems?
03:03:59 <Sgeo> Seems to be happy enough to give solutions to systems with unique solution
03:05:40 <monqy> what are you doing
03:06:56 <Sgeo> Linear algebra homework, wanted to check my result that the system of equations is inconsistent
03:14:17 <pikhq> Have you considered just implementing the algorithms and omitting the manual computation that is, of course, devoid of value?
03:15:19 <zzo38> Sometimes in Haskell, it is unable to deduce a type even though there is a match. Maybe there should be a type deduction command to specify more precisely how types should be derived in certain situations
03:15:29 <Sgeo> This is the last problem in this homework. If I get more homework of this style, I'll consider it
03:15:46 <pikhq> Hint: you will.
03:16:17 <Sgeo> Well, currently this involves shuffling around equations and doing what seems like will be easiest
03:16:40 <Sgeo> Not going to try to automate that in a believable way
03:16:45 <elliott> how do you abort a commit of a merge in git?
03:16:47 <Sgeo> Although actually that might not be that heard
03:16:48 <elliott> git normally aborts with no message
03:16:49 <Sgeo> hard
03:16:54 <elliott> will just deleting the automatic message work
03:16:54 <elliott> ?
03:17:04 <pikhq> Sgeo: Um, what the fuck are you doing, precisely?
03:17:04 <elliott> yep, it does
03:17:06 <elliott> thanks :P
03:17:14 <Sgeo> pikhq, the class pretty much just started
03:17:43 <pikhq> The question still stands.
03:19:04 <Sgeo> Solving systems of linear equations by using elementary row operations to get an identity matrix for ... one part? and the constants on the other
03:19:46 <pikhq> Yeah, you're doing that for the next few months.
03:19:56 <pikhq> And there is a very simple algorithm for it.
03:20:25 * Sgeo hopes pikhq is joking about the "next few months" thing
03:20:46 <pikhq> No.
03:21:02 <pikhq> Computing O(n^3) algorithms by hand makes pikhq sad.
03:21:03 * Sgeo hopes that maybe his school will actually, somehow, prove to be better?
03:21:17 <pikhq> Though O(n!) algorithms are worse.
03:21:28 <pikhq> Both will happen.
03:21:56 <monqy> sgeo your school is the worst you have no hope of it being better
03:22:34 * Sgeo hopes his other homework assignment won't be more of the same. Hmm, it shouldn't be. Although there will be overlap with that class and the linear algebra class near the beginning :/
03:22:43 <azaq23> Sgeo: Regarding wolframalpha, you could write the system as a matrix and test if it is singular (det x = 0)
03:24:25 <pikhq> azaq23: He's not even learned the row reduction algorithm yet.
03:24:26 <elliott> pikhq: Look at this awful crock: https://github.com/fis/mcmap/blob/guile/scheme.c#L318
03:24:32 <elliott> Warning: cpp hackery.
03:24:35 <elliott> It's even worse than before.
03:24:57 <pikhq> (void)__VA_ARGS__?
03:25:00 <pikhq> Gag.
03:25:05 <ais523> hahaha
03:25:27 <elliott> ais523: did you lok at it, or do you not even visit GitHub pages? :P
03:25:34 <coppro> Sgeo: wait, do you actually now know how to row-reduce?
03:25:36 <pikhq> That's a lot of hackery.
03:25:37 <elliott> I had to add a (void) cast and some parentheses to stop clang complaining about an unused 0 expression result
03:25:41 <elliott> because -Werror
03:25:44 <pikhq> coppro: He just started a linear algebra class.
03:25:45 <ais523> elliott: I was laughing at pikhq's line
03:25:55 <elliott> hmm, actually -pedantic might be the one doing it but whatever
03:26:00 <ais523> I have been known to visit github pages when there's no other option, but they often don't work anyway
03:26:12 <elliott> #define PACKET(id, cname, scmname, nfields, ...) \
03:26:12 <elliott> /* terminate the last field_num++ of the previous packet */ \
03:26:13 <elliott> ; \
03:26:13 <elliott> packet_id = id; \
03:26:13 <elliott> field_num = 0; \
03:26:13 <elliott> /* packets with no fields have a dummy "0" variable argument for strict
03:26:15 <elliott> C99 compliance. we use (void) here so that clang doesn't generate
03:26:17 <elliott> a warning about an unused expression as it's expanded here */ \
03:26:19 <elliott> (void) __VA_ARGS__
03:26:21 <elliott> #define FIELD(type, cname, scmname) \
03:26:23 <elliott> /* parentheses around this assignment so that the previous (void) cast
03:26:25 <elliott> doesn't mess it up */
03:26:27 <elliott> (packet_field_symbol_names[packet_id][field_num] = scm_from_utf8_symbol(scmname)); \
03:26:29 <elliott> field_num++ /* a comma appears next */
03:26:31 <elliott> #include "protocol.def"
03:26:35 <elliott> /* terminate the very last field_num++ */
03:26:37 <elliott> ;
03:26:39 <elliott> #undef FIELD
03:26:41 <coppro> pikhq: haha
03:26:41 <elliott> #undef PACKET
03:26:43 <elliott> now you can enjoy, too
03:26:54 -!- hagb4rd has quit (Ping timeout: 260 seconds).
03:27:02 <coppro> pikhq: actually, you know what the worst part is?
03:27:07 <coppro> I bet he doesn't know what a vector space is
03:27:12 <coppro> and they claim it's linear algebra
03:27:23 <pikhq> coppro: Well, that would be in the course.
03:27:32 <pikhq> coppro: I hope, at least.
03:27:35 <coppro> Sgeo: you better know what a vector space is
03:27:53 <pikhq> This is like expecting someone who just started calculus to know what an integral is. :P
03:28:01 <coppro> uh what
03:28:06 <coppro> dude you start with vector spaces
03:28:36 <pikhq> In a sane course perhaps. But more generally, you start with 0 knowledge at all.
03:28:38 <Jafet> No, this is like expecting someone who just started "calculus" to know what a real number is
03:28:42 <pikhq> And he is at the 0 knowledge point.
03:28:53 <Jafet> Most people graduate from calculus courses without knowing what a real number is
03:29:37 <Sgeo> I know what vectors are
03:29:44 <monqy> (thumbs up)
03:29:49 * Sgeo wikis vector space
03:29:50 <pikhq> Sgeo: Quite different from a vector space.
03:29:58 <pikhq> Though it is a related concept.
03:30:29 <Sgeo> Although my other class expected me to know what sets are. I did, but I don't remember ever learning them in school
03:30:52 <elliott> proxy.c:226: error: overflow in implicit constant conversion
03:30:53 <elliott> proxy.c:226: error: overflow in implicit constant conversion
03:30:53 <elliott> uh oh
03:30:57 <coppro> Again, I disagree
03:31:01 <coppro> (with Jafet, this time)
03:31:04 <zzo38> target :: Entity e => Predicate e -> Target e; opponent :: Predicate Player; artifact :: Predicate Object; -- I think it won't work if "Predicate" is simply function resulting to boolean; more complicated kind of selection would be used if you are making a card game
03:31:28 <coppro> Linear algebra should start by defining vector spaces, and introduce matrices as convenient representations of linear operators
03:31:34 <elliott> static const char prefix[4] = { 0xc2, 0xa7, 'b', 0 };
03:31:36 <elliott> umm... what?
03:31:42 <elliott> how can there be any overflow there?
03:31:46 <pikhq> coppro: Mathematical pedagogy is pretty dang terrible, though.
03:31:59 <elliott> ais523: he;pl
03:32:01 <pikhq> So it introduces matrices and their operations, and then moves on to vector spaces later.
03:32:01 <elliott> he;lp
03:32:29 <ais523> elliott: wow, I've looked at your ping at me about 3 times trying to figure out why I had he;pl as a stalkword
03:32:36 <elliott> hahahahahaha
03:32:48 <zzo38> I have represented a transaction in accounting as a matrix (possibly with extra information attached, such as comments)
03:33:02 <ais523> elliott: 0xc2 may well overflow a signed char
03:33:14 <elliott> ais523: really?
03:33:19 <ais523> and thus, a plain char, if it happens to be signed
03:33:23 <elliott> hmm...
03:33:26 <elliott> would
03:33:28 <ais523> signed char only goes up to 0x7f on an 8-bit system
03:33:35 <zzo38> Specify typedef unsigned char byte; and then you can use the shortcut to ensure unsigned when wanted
03:33:38 <elliott> static const unsigned char prefix[4] = { 0xc2, 0xa7, 'b', 0 };
03:33:39 <elliott> work?
03:33:40 <ais523> try '\xc2'
03:33:44 <elliott> that'll work too, yes
03:33:52 <ais523> or use unsigned chars, depending on what you want the sequence for
03:34:15 <elliott> oh well, thanks clang's scan-build, although I doubt that would ever do the wrong thing :P
03:34:20 <elliott> ais523: it's just
03:34:21 <elliott> static const char prefix[4] = { '\xc2', '\xa7', 'b', 0 };
03:34:21 <elliott> char *cmsg = g_strjoin("", prefix, msg, NULL);
03:34:26 <elliott> s/just /just/
03:34:31 <elliott> ais523: those two bytes are the UTF-eight section sign
03:34:36 <elliott> which Minecraft uses for colour codes
03:34:43 <ais523> how bizarre
03:34:43 <elliott> (previously, it used the latin-one byte for that...)
03:34:48 <elliott> but then it changed to utf
03:34:55 <elliott> so I guess it automatically started doing that :DD
03:35:00 <ais523> somehow I think it's doing it wrong
03:35:10 <elliott> you have no idea
03:35:14 <ais523> is that embedded into arbitrary text?
03:35:25 <elliott> not arbitrary; the server boots you off if you use bad characters
03:35:27 <elliott> like the section sign, say
03:35:34 <ais523> text that should be arbitrary but isn't?
03:35:36 <coppro> pikhq: not at my school!
03:35:37 <elliott> also, the font only covers that one DOS codepage
03:35:43 <elliott> so the Unicode is quite useless
03:35:52 <elliott> also, some parts of the protocol use utf-sixteen, and others utf-eight
03:37:03 <Gregor> "Section sign"?
03:37:05 <zzo38> Why don't they use control characters for the colors and so on? And why do they use sometimes UTF-16 and UTF-8 even though Unicode is not used anyways?
03:37:23 <Gregor> Oh, that symbol. Didn't know what it was called ...
03:37:25 <elliott> Gregor: Google it.
03:37:26 <elliott> :p
03:37:27 <zzo38> In case of CP437 (probably others too), the section sign is one of its characters.
03:37:28 <ais523> Gregor: it doesn't seem to be in my compose, but it looks like two overlapping S characters
03:37:41 <ais523> compose s s is taken for ß, obviously
03:37:42 <elliott> Lawyers who play Minecraft must not be amused.
03:38:14 <zzo38> ais523: What happen if you use uppercase "S" instead?
03:38:29 <Gregor>
03:38:33 <Gregor> ais523: It's s-o
03:39:16 <zzo38> Gregor: Are you using some encoding other than UTF-8? (I currently have terminal emulator set to UTF-8)
03:39:27 <Gregor> I'm using UTF-8
03:39:39 <zzo38> Well, that is not a section sign in UTF-8.
03:39:43 <elliott> Gregor: XChat?
03:39:48 <elliott> Gregor: No yer note.
03:39:49 <elliott> not.
03:39:50 <zzo38> It seem not valid UTF-8 code at all
03:39:55 <elliott> Gregor: Go into network list, find freenode, Edit
03:40:01 <elliott> Observe character set being set to "IRC"
03:40:02 <Gregor> I thought I configured X-Chat to be UTF-8 on Freenode >_<
03:40:05 <elliott> Which is latin-one "if it would fit"
03:40:06 <elliott> Otherwise utf
03:40:09 <elliott> Which is THE STUPIDEST ENCODING
03:40:14 <Gregor> Oh, I only configured that on my desktop I guess.
03:40:34 <Gregor>
03:40:44 <zzo38> Still wrong
03:40:46 <Gregor> Bleh
03:40:57 <elliott> Try reconnecting.
03:41:07 <ais523> elliott: what about UTF-8 if it'd fit and otherwise Latin-1 to save on bytes?
03:41:17 <elliott> ais523: it would always fit into UTF
03:41:26 <ais523> elliott: different meaning of "fit"
03:41:31 <ais523> there's a 510-byte limit
03:41:32 <zzo38> PuTTY does not have such encoding anyways
03:41:42 <Gregor>
03:41:47 <elliott> ais523: oh, heh
03:41:47 <zzo38> Still wrong
03:41:51 <elliott> Gregor: Try quitting :P
03:41:54 <Gregor> Feh
03:42:02 <elliott> hmm, I'm going to compile putty on linux
03:42:03 <elliott> JUST BECAUSE I CAN
03:42:10 <elliott> also, because most people don't realise you can
03:42:27 <zzo38> And probably some people use PuTTY
03:42:33 <Gregor> BE UTF-8 YOU STUPID §
03:42:33 <elliott> Lots of people do
03:42:43 <zzo38> Gregor: It is OK now.
03:42:47 <elliott> Yaaaaaaaaaay
03:42:53 <Gregor> I just had to yell at it.
03:43:08 <pikhq> Yeah, PuTTY is really convenient if you want to SSH from Windows.
03:43:29 <elliott> # Persuade automake to give us a copy of its install-sh. This is a
03:43:29 <elliott> # pain because I don't actually want to have to _use_ automake.
03:43:29 <elliott> # Instead, I construct a trivial unrelated automake project in a
03:43:29 <elliott> # temporary subdirectory, run automake so that it'll copy
03:43:29 <elliott> # install-sh into that directory, then copy it back out again.
03:43:30 <elliott> # Hideous, but it should work.
03:43:34 <elliott> ais523: PuTTY's build system sure is fun
03:43:37 <zzo38> elliott: OK, do so. Sometimes that is the kind of terminal emulation you need, even though it try to emulate xterm
03:43:40 <elliott> echo Some news > automake-grievous-hack/NEWS
03:43:40 <elliott> echo Some text > automake-grievous-hack/README
03:43:40 <elliott> echo Some people > automake-grievous-hack/AUTHORS
03:43:42 <elliott> echo Some changes > automake-grievous-hack/ChangeLog
03:43:46 <zzo38> As well as other features of PuTTY
03:44:03 <ais523> elliott: why not just include a copy of install-sh?
03:44:03 <Gregor> elliott: You are not allowed to complain about bad build systems until you build WebKit.
03:44:23 <ais523> what PuTTY's doing is equivalent to downloading it from a package manager
03:44:28 <ais523> Gregor: have you built gcc?
03:44:29 <elliott> Gregor: I probably will, once musl, clang and libc++ work harmoniously
03:44:34 <elliott> ais523: building gcc is easy
03:44:35 -!- azaq23 has quit (Read error: Operation timed out).
03:44:37 <ais523> elliott: well, OK
03:44:42 <ais523> but have you looked at the build system?
03:44:48 <elliott> admittedly, no :)
03:44:50 <Gregor> ais523: Not only have I built GCC, I've built cross-compilers with arbitrarily-screwy requirements.
03:45:08 <elliott> Gregor has such an interesting life.
03:45:13 <ais523> gcc's build system is basically what you get by repeatedly editing compiler output, for many years
03:45:31 <elliott> haha
03:45:33 <ais523> such that there's no corresponding original source, and much of it is inline <s>asm</s> m4
03:45:45 <Gregor> Not only have I built arbitrarily-screwy cross compilers, I've implemented new platforms (only OS, not arch or bin format)
03:45:54 <pikhq> It also predates automake.
03:46:00 <elliott> Gregor: JSMIPS? :P
03:46:03 <Gregor> Ayup :P
03:46:09 <pikhq> Gregor: Jesus you are a glutton for punishment.
03:46:18 <elliott> "Users could see what was happening on another's terminal (using a command called OS for "output spy"). A target of OS could detect and kill it using another command called JEDGAR, named for FBI Director J. Edgar Hoover). This facility was later disabled in an interesting way: it looked like the session was killed, but was not.[1]"
03:46:39 <elliott> (/me is looking into ITS to find that open ITS telnet server to try putty on)
03:48:32 <elliott> "SV is running ITS. Please be very careful."
03:48:41 <Gregor> My point to that whole diatribe was this: GCC's build system screwiness ain't got nothin' on WebKit.
03:48:57 <Gregor> At least GCC has /one build system/.
03:49:00 <elliott> Gregor: I suspect WebKit is easy to build as long as you don't want to change anything
03:49:05 <zzo38> Are there any terminal emulators that causes ASCII DLE control code to make next character forced treated as a normal character?
03:49:11 <Gregor> elliott: True.
03:49:46 <elliott> I don't know how people even develop gcc, or WebKit, or anything. I can't work unless I can build in less than ten seconds.
03:50:12 <elliott> How can you deal waiting a minute for your build system to figure out what it has to do?
03:50:23 <Gregor> elliott: With WebKit, it's "change on .h file -> wait 40 minutes -> find you made the wrong change"
03:50:26 <elliott> pikhq: BTW, how's musl C++ support?
03:50:30 <elliott> Gregor: How many minutes is it really? :P
03:50:31 <Sgeo> You get it right on the first try?
03:50:33 <Sgeo> >.>
03:50:34 <Gregor> elliott: 40.
03:50:38 <elliott> Gregor: No but really.
03:50:41 <Gregor> elliott: I am not exaggerating.
03:50:47 <elliott> Forty?
03:50:50 <elliott> Please tell me you're exaggerating.
03:50:52 <Gregor> Four times ten.
03:51:03 <Gregor> WebKit will steal four times ten minutes.
03:51:06 <Gregor> And that's terrible.
03:51:08 <elliott> How receptive are they to patches ripping the build systems out and replacing them all with a single tup?
03:51:09 <elliott> :p
03:51:34 <Gregor> To be fair, I suspect that's mostly not the build system, but just the fact that it's an enormous bloated C++ mess.
03:51:34 <elliott> Or is that time actually spent linking things and shit?
03:51:48 <elliott> It's probably at least PARTIALLY the build system, though :P
03:51:51 <elliott> How many files are there in that thing?
03:52:02 <Gregor> If you do the Qt build, which links everything into a single library, and you have the conventional (non-gold) linker, it can take 10 minutes or so to link.
03:52:09 <elliott> Wow.
03:52:18 <Gregor> Even with gold it takes a few minutes.
03:52:26 <coppro> win 15
03:52:35 <elliott> So... NetSurf, anyone?
03:52:40 <Gregor> As per how many files, roughly a metric fuckton.
03:52:43 <elliott> Hey, it renders Wikipedia and the BBC properly.
03:52:43 <zzo38> How many modules do those programs have?
03:52:49 <elliott> http://www.netsurf-browser.org/about/screenshots/images/gtk-bbc.png
03:52:50 <elliott> Anyone? No?
03:53:29 <zzo38> elliott: Which skins of Wikipedia does it work with?
03:53:36 <Gregor> "Web standards: HTML 4.01 and CSS 2.1"
03:53:40 <elliott> Probably all of them, if it does Vector.
03:53:41 <zzo38> Does it work with Nostalgia skin?
03:53:51 <elliott> Gregor: They're RISC OS people, man, they talk weird.
03:53:58 <elliott> Gregor: But that rendering ain't bad :P
03:54:03 <zzo38> Of course Nostalgia skin is very simple it ought to work
03:54:04 <elliott> I don't think it does JS though.
03:54:16 <elliott> Yeah, no JS.
03:54:27 <CakeProphet> what a shame.
03:54:44 <zzo38> Other programs such as Lynx also does no JS
03:55:08 <CakeProphet> JS should be replaced by HaskellScript
03:55:16 <Gregor> JS should be replaced by Fythe
03:55:31 <elliott> JS should be @ @ @ @ @ @ @
03:55:44 <elliott> Really though, how hard is it to add JS to browsers nowadays?
03:55:48 <elliott> Step one: Grab an existing JS implementation.
03:55:51 <zzo38> Perhaps don't use webpages and don't have to worry about it unless using other JS programs.
03:55:53 <elliott> Step two: Implement the DOM API.
03:55:54 <Gregor> JS itself is boringly simple.
03:55:54 <elliott> Step three: Uh.
03:55:55 <elliott> Lots.
03:55:58 <elliott> Lots of other APIs.
03:55:59 <Gregor> The DOM is stupidly complex.
03:56:12 <elliott> OK but the BASICS could be integrated into a browser in, like, a few weeks?
03:56:17 <Gregor> Mostly because it's a mish-mash of incompatible APIs.
03:56:20 <elliott> Not enough for gmail, but enough for simple shit :P
03:56:26 <Gregor> Sure, probably.
03:56:33 <zzo38> JavaScript (just as itself, not having specific to do with webpages or anything) is not bad, though.
03:56:39 <elliott> I'm just sayin' that the language part has been beaten to death, so you can just reuse that.
03:57:22 <CakeProphet> zzo38: I disagree completely.
03:57:29 <elliott> Gregor: Looks like NetSurf uses an HTML5 parser, so their main page is out of date :P
03:57:32 <elliott> (Hubbub)
03:57:45 <Gregor> One of the major problems w.r.t. implementing JS in text browsers is that the whole DOM API assumes there are pixels.
03:57:56 <elliott> NetSurf isn't a text browser, dude :P
03:58:04 <Gregor> No, but somebody mentioned lynx :P
03:58:10 <elliott> zzo38 did :P
03:58:20 <elliott> Well, w[three]m does images. :p
03:58:32 <Gregor> Not well
03:58:33 <elliott> Heh, Hubbub is part of the NetSurf thing
04:00:25 <CakeProphet> elliott: duplicate characters in regex character class.
04:00:36 <CakeProphet> bad.
04:00:41 <elliott> Shaddap
04:01:03 <elliott> Gregor: Holy crap NetSurf renders quickly.
04:01:12 <CakeProphet> ^....\s...!$
04:01:19 <zzo38> Is why, I will make the computer, it will have both Forth and BASIC built-in, but no web browser program (although you can still use HTTP (as well as Gopher, and possibly also FTP and Plan 9 protocol) to download programs).
04:01:20 <elliott> Although it doesn't quite do the rendering of Google I'd expect :P
04:01:41 -!- azaq23 has joined.
04:01:42 <Gregor> It's easy to be fast when you're wrong ...
04:01:58 <elliott> Gregor: It's trivial wrongness, I think mostly CSS3 stuff
04:02:09 <Gregor> lynx's rendering is fast ;)
04:02:14 <elliott> Indeed :P
04:02:29 <Gregor> Unless you're running it in Terminal.app.
04:02:32 <CakeProphet> my brain renders images near instantaneously.
04:02:50 <CakeProphet> not quite so good at HTML parsing though.
04:03:06 <CakeProphet> er, "executing". displaying? what is the verb?
04:03:26 <Gregor> CakeProphet: Rendering :P
04:03:27 <zzo38> But telnet is likely to be supported, as well as gopher menus (but not all gopher types; the minimum requirements are types 0, 1, and 7; and that should be good enough)
04:03:38 -!- Jafet has quit (Ping timeout: 276 seconds).
04:03:58 <CakeProphet> so uh, what has become of Rezzo? we need more warriors. I need more time.
04:04:44 <zzo38> The operating system will be stored in ROM BIOS and is not readable unless you trigger NMI.
04:04:54 <Gregor> CakeProphet: Nothing has become of it, it's stagnating.
04:05:06 <elliott> RIP Rezzo?
04:05:06 <zzo38> Hard drive and optical drive are also completely inaccessible unless you trigger NMI.
04:05:08 <Gregor> I got tired writing my warrior, because as it turns out it's an enormous pain X-D
04:05:19 <Gregor> elliott: It's not dead, it's stagnant! :P
04:05:47 <CakeProphet> Gregor: perhaps it could be redesigned?
04:06:03 <Gregor> CakeProphet: It probably could, but I'm yet to think of how.
04:06:09 <Gregor> (Or put any effort into thinking of how :P )
04:06:11 <zzo38> Actually, network access shall also be inaccessible unless NMI.
04:06:17 <CakeProphet> probably being no 2D would make it less of a pain I think.
04:06:33 <CakeProphet> so, basically, complete redo everything. :P
04:08:06 <Gregor> "Being no 2D"
04:08:49 -!- Jafet has joined.
04:09:56 <zzo38> (And it will not be too large or too heavy to defenestrate; in case you care. But I don't recommend it unless you intend to test its physical properties)
04:10:00 <CakeProphet> Gregor: s/no/not (and Gregor is a silly dong) /
04:10:31 <Gregor> CakeProphet: Are you suggesting that it become 1D, which is terrible, or 3D, which is even more terrible?
04:10:44 <CakeProphet> well it could be neither.
04:10:58 <CakeProphet> as in like, redesign the objective and the environment entirely.
04:11:07 <Gregor> Ah :P
04:11:12 <CakeProphet> so that dimensions no longer make sense.
04:12:20 <CakeProphet> there are other possibilities, I suppose.
04:12:56 <Gregor> Instead, have some electromusic: http://codu.org/tmp/drell2-2011-09-11-2.ogg
04:12:57 <elliott> SCM_C_HOOK_NORMAL
04:12:57 <CakeProphet> but I think adding or removing complexity from the original design will not make it more fun to write programs for.
04:12:57 <elliott> Type of hook for which all the registered functions will always be called.
04:12:57 <elliott> SCM_C_HOOK_OR
04:12:57 <elliott> Type of hook for which the sequence of registered functions will be called only until one of them returns C true (a non-NULL pointer).
04:12:57 <elliott> SCM_C_HOOK_AND
04:12:59 <elliott> Type of hook for which the sequence of registered functions will be called only until one of them returns C false (a NULL pointer).
04:13:03 <elliott> this isn't offered for the scheme functions wtf
04:13:42 <elliott> Gregor: ten seconds in, i like this
04:13:55 <Gregor> "20 seconds in, it's garbage"
04:14:14 <elliott> :P
04:14:55 <aspect> elliott: what are you working on?
04:14:58 <CakeProphet> what tools are you using to produce this
04:15:08 <Gregor> CakeProphet: Rosegarden and VSTi's.
04:15:18 <elliott> aspect: mcmap... it's a thing. If you don't play Minecraft, you probably don't care.
04:15:33 <CakeProphet> Gregor: have you ever tried using csound? I'm not masochistic enough...
04:15:43 <Gregor> CakeProphet: I have not :P
04:16:00 <Gregor> CakeProphet: Although I like the wonderful possibilities w.r.t. repeatability.
04:16:05 <elliott> Gregor: this is nice
04:16:16 <aspect> I've managed to resist minecraft since my first 16-hour exposure to it, but I'm curious about most things that involve Scheme
04:16:23 <zzo38> From what I have read about Csound, I like it. But there could be a preprocessor to work with MML and other kind of macros stuff too
04:16:31 <elliott> Gregor: Two and a half minutes in or so, the little pulse in the background sounds remarkable like an electric guitar :P
04:16:44 <Gregor> Hah
04:16:57 <Gregor> I'm super-proud of the low-fi piano.
04:17:01 <Gregor> I basically munged that myself.
04:17:44 <zzo38> I once wrote a music synthesis program in QBASIC that make WAV file output.
04:17:56 <Gregor> zzo38: That ... is terrifying.
04:17:57 <elliott> aspect: mcmap is basically a proxy that sits between a badly-coded Minecraft client and a badly-coded Minecraft server. (The badly-codedness is irrelevant to everything except the fact that we have to deal with it on our end). It provides a fancy map with isometricness and all sorts of deep cross-section poking. It also used to provide its most commonly-used feature, an arbitrary teleportation command, but the server code got /slightly/ better an
04:17:57 <elliott> d that stopped working. I'm working on binding Guile to it, so that you'll be able to script all sorts of fun commands and automation and custom proxying.
04:18:10 <elliott> There ya go :P
04:18:34 <aspect> nice! thanks for the summary :)
04:18:57 <zzo38> The input is a text file describing instrument sound and notes to play, volume of notes, and so on; it is more limited than most programs, but does allow some things that most other program do not have, including to define any temperament.
04:19:04 <CakeProphet> Gregor: Faust is interesting in that it's a functional audio processing language.
04:19:05 <Gregor> So, does aspect have a highlight on "SCM" or what :P
04:19:11 <CakeProphet> I believe it has like 4 basic combinators.
04:19:19 <elliott> aspect: The Scheme bit isn't really relevant to being Scheme, but all the other good-to-embed languages are terrible :P
04:19:20 <aspect> I haven't actually used scheme in anger for about four years, but the recent press around guile has got me itching to build something in it and see just how good the FFI and freedesktop-y stuff actually is
04:19:30 <elliott> freedesktop-y stuff is terrible, as a rule.
04:19:55 <Gregor> xdg-open wtf://kill/elliott
04:19:55 <elliott> Guile isn't really what I'd pick for a standalone implementation, to be perfectly honest. But it has a very nice C interface.
04:20:58 <elliott> Well, you know, I say nice.
04:20:59 <elliott> https://github.com/fis/mcmap/blob/guile/scheme.c
04:21:01 <elliott> It's not all that nice. :p
04:21:02 <aspect> as a user, that much is obvious. I've a nagging hope staying with me that I can replace some of the most annoying freedesktop and dbus monstrosities with some of my own code without too much pain -- originally this was to be done in Tcl but I'm wondering if Guile will make it a bit easier
04:21:06 <elliott> But it isn't hideously surprising.
04:21:08 <zzo38> The computer design I was discussing, it is also the idea, in Forth and BASIC, if a URL is completely omitted it assumes you meant "tape:"
04:21:18 <elliott> aspect: Most of the time, you don't have to replace it.
04:21:25 <elliott> It's like PulseAudio; you can just drop it and absolutely nothing gets worse.
04:22:18 <elliott> Gregor: So is that electric-guitary sound meant to be piano? :P
04:22:18 <aspect> without PA I don't sem to have a convenient way to default output to bluetooth iff it is present
04:22:42 <elliott> aspect: I'm sure you could script that by just triggering on bluetooth state changing.
04:22:47 <Gregor> elliott: Nono, it /started/ as a piano.
04:22:52 <elliott> Gregor: lol
04:23:07 -!- sebbu2 has joined.
04:23:26 <aspect> elliott: true. But the blessed way to receive bluetooth events seems to be via dbus
04:24:52 <Gregor> I HAS KITTY
04:25:16 <elliott> aspect: Well, dbus is relatively unavoidable, but thankfully dbus is not all that bad.
04:25:21 <elliott> The rest of the xorg stuff...
04:25:50 <CakeProphet> the only things that are blessed are the objects of Perl.
04:26:01 * CakeProphet sings a Gregor-ian chant.
04:26:02 -!- sebbu has quit (Ping timeout: 252 seconds).
04:35:45 <CakeProphet> ^style europarl
04:35:45 <fungot> Selected style: europarl (European Parliament speeches during approx. 1996-2006)
04:35:51 <CakeProphet> fungot: make me into flour
04:35:51 <fungot> CakeProphet: mr president, commissioner, ladies and gentlemen, the alavanos, mendiluce and titley reports submitted to us on social rights and the principles which i have tried it out on other innocent parties.
04:36:45 <CakeProphet> fungot: tognuf
04:36:45 <fungot> CakeProphet: madam president, i think that we must hope that a compromise will be given the opportunity to discuss the problem of farmers' quotas, would lead to legislation whereby programs used to run equipment became patentable. it would be in trouble. the applicant countries to continue giving their support.
04:37:10 <CakeProphet> fungot: tognu F.
04:37:10 <fungot> CakeProphet: mr president, in the best egyptian judicial traditions has now been put off to friday. but i want my money back'. we know it generally deals with major infrastructure projects which could form part of the emergency package for korea, on christmas eve, in the interests of consumers and the environment of gmos.
04:40:39 <elliott> `addquote <fungot> CakeProphet: mr president, in the best egyptian judicial traditions has now been put off to friday. but i want my money back'. we know it generally deals with major infrastructure projects which could form part of the emergency package for korea, on christmas eve, in the interests of consumers and the environment of gmos.
04:40:40 <fungot> elliott: mr president, i wish to raise, namely that it is able, to assume responsibilities and commitments in the context of an anti-smoking policy, reduce and even ban tobacco imports. it should not be done away with. it is quite definitely a greenhouse effect. recently a small movement has emerged in record time. this is the case with italy. on the proposal, not only politically responsible, but also on the question of portfo
04:40:41 <HackEgo> 652) <fungot> CakeProphet: mr president, in the best egyptian judicial traditions has now been put off to friday. but i want my money back'. we know it generally deals with major infrastructure projects which could form part of the emergency package for korea, on christmas eve, in the interests of consumers and the environment of gmos.
04:41:11 <elliott> ais523: hmm, can sg merge implicitly?
04:41:14 <CakeProphet> > nub . permutations $ "elliott"
04:41:16 <lambdabot> ["elliott","leliott","lleiott","illeott","lileott","llieott","iellott","eil...
04:41:16 <elliott> or are merges only caused by a changeset?
04:41:18 <elliott> I think the latter
04:41:21 <elliott> but I'm not sure
04:41:26 <elliott> the talk of whitelisting things seems to imply not
04:41:33 <elliott> as changes would merge into a branch without a changeset commit
04:41:43 <ais523> elliott: a merge is itself a patch, so it doesn't come into being spontaneously
04:42:05 <ais523> whitelisting things and merging them might be bundled together into a command as it'd be a useful thing to combine
04:42:15 <ais523> but the two concepts make sense on their own
04:42:15 <elliott> ais523: right, but the point is that a major advantage is lost
04:42:21 <ais523> which major advantage?
04:42:24 <elliott> in that you can commit a bug fix to master and have it automatically merge into branches
04:42:28 <elliott> without doing anything
04:42:30 <elliott> because it's compatible
04:42:37 <ais523> oh, that isn't even a merge
04:42:45 <ais523> you only need an explicit merge if there's a conflict
04:42:51 <elliott> I'm talking about merges at the lower sense
04:42:57 <ais523> ah, fair enough
04:42:59 <ais523> yes, those are implicit
04:43:01 <elliott> how?
04:43:04 <ais523> except when conflicts are involved
04:43:06 <elliott> merges only happen in a changeset, you can see it in the apply function I defined
04:43:07 <ais523> by having both patches involved
04:43:17 <ais523> the changeset itself changes according to an algo
04:43:25 <elliott> that's not an answer, there is no changeset
04:43:30 <ais523> whether whitelist or take-all-from-master or etc
04:43:37 <ais523> elliott: well, with no changeset, there is no repo
04:43:41 <ais523> a repo /is/ a changeset, right?
04:43:47 <elliott> ais523: no
04:43:53 <elliott> ais523: that's not what a changeset is
04:44:00 <elliott> changeset :: Set Change -> Change
04:44:06 <CakeProphet> needs moar changesetsets
04:44:11 <elliott> it's how you do something more than just inserting one line in a commit
04:45:31 <elliott> ais523: there's definitely a model inconsistency here
04:45:31 <aspect> wait, so the set of all changes *is* a change?
04:45:47 <elliott> aspect: if you don't understand scapegoat, you won't understand talk about scapegoat :)
04:45:47 <ais523> elliott: well, a repo is one of those too
04:45:57 <elliott> ais523: no it's not; at least if it is, it's just started being one
04:46:00 <elliott> because it's never been one before
04:46:07 <ais523> elliott: what was the definition before?
04:46:13 <ais523> one of us is confused, and I'm willing to admit it's me
04:46:18 <ais523> but I'd like evidence
04:46:30 <elliott> of what?
04:46:37 <ais523> me being confused rather than you
04:46:42 <ais523> as in, what was the definition?
04:46:50 <elliott> of what?
04:47:00 <ais523> a repo
04:47:16 <elliott> just an object database
04:47:24 <ais523> aha, I'm thinking of a branch
04:47:31 <ais523> a branch is a subset of all changes developed according to an algo
04:47:37 <elliott> you are mistaking the fact that a repository contains a set of changes for the fact that there is a changetype that consists of a set of other changes
04:47:48 <ais523> and the difference between a branch and a changeset is that changesets are explicit changes made by listing other changes
04:47:54 <ais523> and branches are implicit and generated according to an algo
04:48:02 <ais523> agreed?
04:48:30 <elliott> ais523: well, yes, but this seems like "and the difference between an apple and an orange is that an orange is orange rather than green and also totally different"
04:49:31 <ais523> so your "merges only happen in a changeset" is misleading, the whole point is that you can calculate the result of any set of changes
04:49:34 <ais523> whether it's a changeset or not
04:49:40 <ais523> so low-level merges should happen in branches too
04:50:37 <elliott> ais523: well, OK
04:50:57 <elliott> ais523: the problem with that is that merges might not even /appear/ in the history of a branch
04:51:07 <elliott> which causes problems for (a) viewing the history, and (b) things like bisect
04:51:08 <ais523> they shouldn't
04:51:25 <ais523> I agree that bisect is a bit of a problem, as you're trying to bisect an unordered history
04:51:46 <ais523> for proper bisection, though, instead of having merges, you should have a history of which patches were considered part of the branch
04:51:48 <ais523> then bisect that history
04:51:56 <elliott> why isn't that the real history?
04:52:09 <ais523> in a sense, it is
04:52:12 <elliott> actually, implicit merges are scary for various reasons, which is why typical branches shouldn't get them; I'm wondering if they're a good idea at /all/
04:52:32 <ais523> elliott: well, they only happen if the branch is set up to automatically include patches
04:52:41 <ais523> which is something you were in favour of and I was against, IIRC
04:53:00 <ais523> if you're explicitly whitelisting, you only get an implicit merge as a result of a whitelist operation
04:53:21 <ais523> anyway, the problem with explicit merges is that in git, you're supposed to edit them out, and you have huge numbers of them in a normal workflow
04:53:53 <elliott> you're meant to edit out branch merges in git? really?
04:53:59 * Sgeo decides not to say something stupid
04:53:59 <elliott> I have like fifty of them in the Guile branch
04:54:06 <elliott> Sgeo: too late, go on
04:54:38 <Sgeo> Near impossible to use a trackpad with wet fingers, even if you tried to dry them off
04:54:41 <ais523> elliott: this is part of the reason I dislike git fans
04:54:52 <elliott> what is?
04:54:54 <ais523> it's to "make the history neater" or something, and so that various tools will work properly
04:55:08 <elliott> I agree that merge commits are ugly, but that's a tool problem, IMO
04:55:20 <Sgeo> Tools won't work properly if you don't prettify history?
04:55:25 <Sgeo> That's.... disturbing
04:55:31 <ais523> aha, I think I know what we should do
04:55:45 <ais523> a whitelist should be represented as a changeset, as they're the same concept
04:56:01 <ais523> then, the dependency chains of that changeset is how you do bisection and visualise merges for the history
04:56:18 <elliott> hmm, maybe a branch is just a changeset, then; or rather, a computation of a changeset
04:56:24 <elliott> hmm, but wait
04:56:26 <elliott> shouldn't it just be a _change_
04:56:31 <elliott> the tip is a branch; the tip is also a change
04:56:37 <elliott> the dependency of that changes is the rest of the tip branch
04:56:39 <elliott> and a branch can only have one head
04:56:44 <elliott> that's what makes it a branch, after all
04:56:48 <elliott> so a branch is a computation producing a change
04:56:53 <elliott> (that change could be a changeset, though)
04:56:58 <elliott> (but usually, it's just the latest commit in the branch)
04:57:03 <ais523> right, that's more general and makes sense
04:57:30 <elliott> hmm... a changeset is isomorphic to that changeset, plus all its dependencies
04:57:34 <elliott> or indeed plus any of its dependencies
04:57:42 <elliott> omg, maybe changes are groups??
04:57:47 <elliott> they're obviously monoids
04:58:03 <elliott> quick, we have to make this mathematical!
04:58:19 <elliott> hmm, the identity element is obviously just the null change
04:58:20 <elliott> changeset {}, say
04:58:36 <elliott> ais523: does every change have an inverse, such that changeset {c, c'} ~ changeset {}?
04:58:42 <elliott> I think yes, and I think if the answer is no, that's a bug
04:59:18 <ais523> I can't think of one that doesn't
04:59:31 <elliott> ais523: what about those reassign-hash things?
04:59:50 <ais523> just reassign it again
05:00:05 <elliott> hmm, right
05:00:32 -!- augur has quit (Remote host closed the connection).
05:00:35 <elliott> (delete C)' = C
05:00:37 <elliott> heh
05:00:39 <elliott> that's lovely
05:01:12 <elliott> ais523: well, changes are at least an abelian group
05:01:17 <elliott> that's a pretty good sign
05:01:24 <elliott> I doubt they're a ring, at least I can't think of a sane +
05:01:24 <ais523> yay
05:01:33 <elliott> but abelian groups are still pretty good :P
05:02:00 <elliott> ais523: incidentally, how does one reify an intent for a hash-reassign commit?
05:02:01 <elliott> it sounds really hard
05:02:22 <elliott> I think you can't produce good merge commits in sg just by giving it the final product
05:02:23 <ais523> now I'm trying to remember what hash-reassign commits were for
05:02:29 <elliott> ais523: solving conflicts
05:02:52 <ais523> ah, right, "changes to version A should be edited into this version from version B"
05:03:12 <elliott> I've always been kind of uneasy about them
05:03:27 <ais523> what do you mean by "reify intent", again?
05:03:29 <elliott> I wonder if they're needed at all? Changes have inverses; you could just do changeset {A, B, invert of part of A, invert of part of B, additional stufF}
05:03:53 <elliott> ais523: well, it's a general term; in the context of sg, it's going from before + after to a change that tries to represent the user's intent in editing
05:04:04 <elliott> but to resolve a commit, you need to produce hash-reassign commits; or at least that's the status quo
05:04:08 <ais523> elliott: that was my original plan; the idea's that say we both make the same change
05:04:12 <elliott> and it seems very difficult to reify that intent
05:04:19 <ais523> and the merge resolves the change in favour of my version
05:04:23 <elliott> at least, without an additional merge tool that takes additional info
05:04:27 <ais523> elliott: aha, I know how you reify it
05:04:35 <ais523> the before is two conflicting versions
05:04:38 <ais523> and the after, one version
05:04:41 <elliott> indeed
05:04:58 <ais523> it's reified by diffing the after to each of the befores, and finding lines that are conflicting in the befores but the same in the before and the after
05:05:16 <ais523> i.e. lines that were in conflict, but not changed by the conflict resolution
05:05:21 <elliott> what if there are none?
05:05:37 <ais523> then hash-reassign commits probably aren't needed
05:05:41 <ais523> for the purpose of conflict solution
05:05:43 <elliott> ah, you mean it'll apply cleanly
05:06:01 <ais523> well, say we're using line-based diff
05:06:04 <elliott> ais523: I've always been a bit uneasy about them, though... is there a case when they help more than just including a partial inverse?
05:06:05 <ais523> and the original line is a = x;
05:06:10 <ais523> and you write a = x + i;
05:06:14 <ais523> and I write a = x + j;
05:06:22 <ais523> and the conflict fix is a = x + i + j;
05:06:39 <ais523> then there are no hash-reassign commits, because any edit to the x+i or x+j line can't easily be translated in terms of the x+i+j line
05:06:56 <ais523> the obvious case when they help more is if we both make the exact same change
05:07:06 <ais523> the obvious conflict fix there is to include that fix once
05:07:06 <elliott> hmm
05:07:07 <elliott> wait a second
05:07:09 <elliott> let me diagram this out
05:07:14 <elliott> --
05:07:17 <elliott> ABC: a = x;
05:07:17 <elliott> --
05:07:21 <elliott> DEF: a = x + i;
05:07:23 <elliott> --
05:07:30 <elliott> AEC: a = x + i + j;
05:07:31 <elliott> --
05:07:40 -!- ive has quit (Quit: leaving).
05:07:42 <elliott> changeset {ABC, DEF, replace ??? with "a = x + i + j;"}
05:07:46 <elliott> is ??? ABC or DEF?
05:07:55 <elliott> hmm
05:08:01 <elliott> changeset {ABC, DEF, delete ABC, replace DEF with "a = x + i + j;"}
05:08:06 <elliott> changeset {ABC, DEF, delete DEF, replace ABC with "a = x + i + j;"}
05:08:11 <elliott> ais523: the problem here, is that we want to /unify/ ABC and DEF
05:08:21 <elliott> OH
05:08:22 <elliott> ais523: wait
05:08:22 <elliott> wait
05:08:24 <ais523> changeset {ABC, DEF, delete ABC, delete DEF, insert between X1 and X2 "a = x + i + j;"}
05:08:26 <elliott> bit of a eureka
05:08:29 <elliott> bit of a eureka
05:08:32 <elliott> ais523: yes, but that merges terribly
05:08:33 <elliott> here's what we need
05:08:40 <ais523> elliott: the point is it's meant to merge terribly
05:08:44 <elliott> ais523: no, wait, _listen_
05:09:11 <ais523> I am
05:09:13 <elliott> a change "unify A and B as C"; what it means is, A and B are deleted, _but_, whenever they are mentioned, consider it a mention to C instead
05:09:14 <ais523> that's why I stopped talking
05:09:24 <elliott> erm
05:09:30 <elliott> a change "unify A and B as STRING"; what it means is, A and B are deleted, _but_, whenever they are mentioned, consider it a mention to this change instead
05:09:31 <ais523> elliott: that's basically a special case of a hash-reassign
05:09:36 <elliott> ais523: it isn't
05:09:42 <elliott> because it does it to /all/ changes
05:10:00 <elliott> wait, here's what it looks like:
05:10:03 <ais523> so does a hash-reassign, that's the point
05:10:17 <elliott> changeset {ABC, DEF, unify ABC and DEF as DEF, (DEF) insert "a = x + i + j;" between X0 and Xone}
05:10:35 <elliott> ais523: how can you express that with a hash-reassign without deleting ABC or DEF?
05:10:36 <ais523> err, why have you given two different commits the same hash?
05:10:41 <elliott> erm
05:10:44 <ais523> elliott: well, the example there shouldn't have a hash-reassign
05:10:48 <elliott> changeset {ABC, DEF, unify ABC and DEF as QQQ, (QQQ) insert "a = x + i + j;" between X0 and Xone}
05:10:50 <elliott> ais523: it should
05:10:52 <ais523> now, say ABC and DEF are identical but for metadata
05:10:58 <ais523> /then/ you should have a hash-reassign
05:11:00 <elliott> because otherwise the history is broken
05:11:14 <ais523> but say, someone decides to replace "a = x + i;" with "a = x + i*2;" in my version
05:11:23 <elliott> sorry, but you are essentially arguing "they shouldn't merge" on no grounds other than maybe "it should break so the developer can look at it beacuse there's been a merge there"
05:11:23 <ais523> should that automatically replace the whole, merged line with "a = x + i*2;"
05:11:25 <ais523> obviously, no
05:11:27 <elliott> that's not a good reason to tarnish the history forever
05:11:30 <elliott> ABC and DEf weren't deleted
05:11:33 <elliott> they were merged
05:11:56 <elliott> ais523: I think, obviously yes
05:12:03 <elliott> it's "wrong", but that's for the merger to fix
05:12:06 <ais523> no, that's not how programming works at all
05:12:08 <ais523> it overwrote your change
05:12:11 -!- MDude has changed nick to MSleep.
05:12:29 <elliott> sg will inevitably overwrite changes
05:12:37 <ais523> no, it won't
05:12:44 <elliott> yes it will, per the Merging Full Employment Theorem
05:13:01 <ais523> it shouldn't disregard a change from a file just because a different line that was merged with it was changed
05:13:03 <elliott> s/Merging/Merger/
05:13:11 <elliott> ais523: I think the problem is that this example is far too small
05:13:12 <ais523> if the merge of A+B produces something that's neither A nor B
05:13:23 <elliott> we need an example C function to do examples on :)
05:13:26 <ais523> then in general, you don't know what A'+B is
05:13:35 <ais523> elliott: let me go write one in a pastebin
05:13:40 <elliott> ais523: noo, I was going to
05:13:48 <ais523> two, in fact
05:13:51 <ais523> so you'll see what I'm getting at
05:14:01 <elliott> I just meant a generic one, for all merge talks
05:15:21 <elliott> I'm waiting, though
05:16:33 <CakeProphet> ...are you guys trying to make merges completely unsupervised?
05:16:46 <elliott> CakeProphet: what
05:17:11 <CakeProphet> as in. you don't have to manually merge ever.
05:17:17 <elliott> no.
05:19:38 <ais523> http://sprunge.us/TICU?c
05:20:11 <elliott> are A and B equal?
05:21:07 <elliott> ais523: ?
05:21:09 <ais523> yes, except for metadata
05:21:54 <elliott> hmm, OK, you've defeated me :)
05:22:00 <elliott> I still think we need more interesting examples of conflicts
05:22:02 <elliott> over multiple lines
05:22:32 <CakeProphet> make changes to the same file in an existing repo at the same time.
05:22:33 <CakeProphet> fun and profit.
05:24:08 <zzo38> Why does [d| type T = $(return $ TupleT 3) |] results in error about cycle in type synonym declaration?
05:25:13 <CakeProphet> because there's a cycle in the type synonym declaration.
05:25:32 <elliott> ais523: so anyway, do you still think we need hash changes?
05:25:40 <elliott> I'm honestly wondering whether partial reverts are ever worse
05:26:17 <zzo38> CakeProphet: But there isn't. It does that regardless of type name and regardless of the expression in $() even if it is not a Q Type expression.
05:26:19 <monqy> zzo38: what is the error in full?
05:26:52 <ais523> elliott: how do you get the A'+B+conflict resolution 1 case without them?
05:26:54 <zzo38> I tried 0 instead of 3 it is same error regardless.
05:27:00 <monqy> zzo38: also, is your use of return/TupleT intentional for stylistic purposes or do you not know of tupleT (Int -> Q Type)?
05:27:02 <ais523> the other reason I wanted them was for move-within-file changes
05:27:12 <ais523> which is an entirely different use for the same thing
05:27:17 <ais523> and seeing two uses for one thing left me convinced
05:27:22 <ais523> they weren't part of the original sg concept, though
05:27:24 <monqy> most if not all TH constructors have versions that work something like that
05:27:52 <zzo38> Cycle in type synonym declarations: <interactive>:1:5-33: type T = $(return $ TupleT 0) In the Template Haskell quotation [d| type T = $(return $ TupleT 0) |] In the expression: [d| type T = $(return $ TupleT 0) |] In an equation for `it': it = [d| type T = $(return $ TupleT 0) |]
05:28:02 <elliott> ais523: I'm not sure, the differences are subtle enough that I find this hard to read, but I'll give it a try
05:28:10 -!- augur has joined.
05:28:29 <elliott> ais523: well, let's see
05:28:37 <ais523> elliott: doing it with argv is a little silly; the intended use there would be for an AIish program where you're adding more factors into an evaluation algorithm
05:28:46 <elliott> ??? argv??
05:28:55 <elliott> oh
05:28:57 <elliott> I see
05:29:06 <elliott> I just meant that they're like switching numbers and stuff
05:29:08 <elliott> so it's hard to keep track :)
05:29:08 <elliott> anyway
05:29:40 <elliott> changeset {A, B, delete MAINLINE_A, delete MAINLINE_B, insert "return atoi(argv[1])+atoi(argv[2]);" between ORIGINAL_PROTOTYPE and ORIGINAL_CLOSEBRACE}
05:29:45 <elliott> that's a+b+conflict resolution patch one
05:29:50 <elliott> A' is
05:30:02 <elliott> replace MAINLINE_A with "return atoi(argv[1])+atoi(argv[2])*2;"
05:30:15 <elliott> ais523: hey, now _your_ algo silently wipes out that change
05:30:37 <ais523> what change is it silently wiping out?
05:30:40 <elliott> A'
05:31:00 <ais523> A'+B+conflict res 1 is identical to A'
05:31:04 <ais523> and should be, because A was identical to B
05:31:45 <elliott> <elliott> changeset {A, B, delete MAINLINE_A, delete MAINLINE_B, insert "return atoi(argv[1])+atoi(argv[2]);" between ORIGINAL_PROTOTYPE and ORIGINAL_CLOSEBRACE}
05:31:45 <elliott> <elliott> that's a+b+conflict resolution patch one
05:31:46 <elliott> <elliott> A' is
05:31:46 <elliott> <elliott> replace MAINLINE_A with "return atoi(argv[1])+atoi(argv[2])*2;"
05:31:58 <elliott> changeset {A',B,conflict res 1} now... oh, conflicts
05:32:01 <elliott> because MAINLINE_A doesn't exist
05:32:03 <elliott> no wait, yes it does
05:32:05 <elliott> it was just replace
05:32:06 <elliott> d
05:32:08 <elliott> so it gets deleted
05:32:15 <elliott> and "return atoi(argv[1])+atoi(argv[2]);" inserted in its place
05:32:21 <elliott> so yes, your algorithm _can_ wipe out changes
05:32:29 <ais523> what change is being wiped out?
05:32:33 <elliott> <elliott> <elliott> replace MAINLINE_A with "return atoi(argv[1])+atoi(argv[2])*2;"
05:32:45 <ais523> that change is still in the result
05:32:51 <elliott> no it isn't
05:33:02 <ais523> oh, I made a typo
05:33:02 <elliott> changeset {A, replace MAINLINE_A with "return atoi(argv[1])+atoi(argv[2])*2;", B, delete MAINLINE_A, delete MAINLINE_B, insert "return atoi(argv[1])+atoi(argv[2]);" between ORIGINAL_PROTOTYPE and ORIGINAL_CLOSEBRACE}
05:33:07 <ais523> no wonder you're confused
05:33:11 <ais523> it's shown as wiped out in that example
05:33:11 <elliott> how is that replacement still in the result?
05:33:13 <ais523> but it shouldn't be
05:33:15 <elliott> >_<
05:33:21 <ais523> let me repaste
05:33:53 <elliott> "Suppose you are a former INTERCAL hacker and you truly miss the
05:33:54 <elliott> language."
05:33:54 <monqy> zzo38: in case there's no way to fix it, have you tried $(tySynD (mkName "T") [] (tupleT 0)) ?
05:33:57 <elliott> didn't expect to see that
05:33:57 <ais523> http://sprunge.us/iidQ?c (better?)
05:34:36 <elliott> ais523: it looks OK... but I still think this one-line example is completely impossible to follow, cognitively
05:34:42 <monqy> oh wait I think I did that wrong
05:35:04 <monqy> I've never worked with Dec splices before.
05:35:05 <elliott> gah, is anyone any good at debugging Scheme macros?
05:35:08 <ais523> elliott: change that line to ten copies of itself, if you like
05:35:13 <elliott> ais523: that doesn't help :)
05:35:30 <elliott> ais523: but yes, OK
05:35:31 <zzo38> monqy: OK, but is it a bug in GHC? Even if it is supposed to be error, the error message is wrong.
05:35:32 <elliott> I think it's right
05:35:33 <monqy> what's the macro? I don't have much experience with debugging them but maybe I can notice something
05:35:47 <elliott> monqy:
05:35:48 <elliott> (define-syntax on-packet
05:35:48 <elliott> (syntax-rules ()
05:35:48 <elliott> ((on-packet origin (type binding) ...)
05:35:48 <elliott> (add-hook!
05:35:48 <elliott> (packet-hook 'type)
05:35:49 <elliott> (lambda (from binding)
05:35:51 <elliott> (if (or (eq? 'origin 'any) (eq? from 'origin))
05:35:53 <elliott> (begin ...)))))))
05:35:54 <monqy> zzo38: I'm guessing it's a problem with [d||] quotes
05:35:55 <elliott> I ge
05:35:57 <elliott> t
05:35:59 <elliott> build/../scheme/init.scm:8:2: syntax: missing ellipsis in form (syntax (add-hook! (packet-hook (quote type)) (lambda (from binding) (if (or (eq? (quote origin) (quote any)) (eq? from (quote origin))) (begin ...)))))
05:36:09 <elliott> ais523: but yes, OK, I think you're right
05:36:26 <elliott> ais523: I still wish we could do without hash-changing commits though... I don't know, I realise they cause no _problems_, but they feel like a wedge in the language
05:36:32 <ais523> sorry about that typo
05:36:38 <elliott> because they /change the interpretation/ of commits they're not "directly" linked to, e.g. just adjacent in the same changeset
05:36:46 <elliott> which means you have to keep some sort of state
05:36:48 <ais523> elliott: I'd be glad to consider other solutions to the same problem
05:36:52 <elliott> which does just Does Not Gel With Me
05:36:56 <elliott> s/does just/just does/
05:37:00 <elliott> s/just does/just/
05:37:16 <ais523> I think I know the reason you're uneasy
05:37:18 <copumpkin> zzo38
05:37:19 <copumpkin> [01:36:33 AM] <dankna> a shame zzo38 didn't stick around
05:37:19 <copumpkin> [01:36:37 AM] <dankna> I see what his problem was :)
05:37:21 <ais523> imagine a search-and-replace commit
05:37:35 <ais523> that replaces all instances of "foo" with "bar"
05:37:56 <ais523> changes made in other repos that add "foo" should change to adding "bar" when merged with it
05:38:09 <ais523> /but/, changes made with knowledge of the foo->bar commit that add "foo" should still add "foo"
05:38:15 <ais523> and "with knowledge" isn't recorded anywhere
05:38:20 <elliott> heh
05:38:30 <elliott> (I don't think search-and-replace changes should exist, you probably agree but I'm just noting this)
05:38:31 <monqy> elliott: I can see where the problem is, but I cannot deduce the fix because I do not know what you are trying to do. If I knew the intended syntax and result of the macro I may be able to fix it
05:38:33 <ais523> so this is a general problem with change-interpretation patches
05:38:44 <elliott> monqy: what's the problem, out of curiosity?
05:38:47 <elliott> but the intent is:
05:38:55 <monqy> bad usage of ...
05:39:00 <elliott> monqy: http://sprunge.us/GPJA
05:39:06 <elliott> above is syntax, below is desire
05:39:10 <ais523> in the case of commits-not-directly-linked-to, the same problem doesn't occur as if you're referring to the old hash, it can only be because you don't know it's been superseded
05:39:29 <elliott> ais523: But really, my main problem with it, beyond general uneasiness about ugliness and ... sheer brute-force-ness, is that it means the "apply" function must take state.
05:39:31 <ais523> as you'd refer to the new one instead if you had knowledge of the hash-replacement
05:39:31 <elliott> i.e. the hash remapping.
05:39:35 <ais523> but you're right in that it's a bit ugly
05:39:46 <elliott> Which is horrible, because source + patch should → target or failure.
05:39:49 <ais523> I'm willing to consider other solutions to the same problem
05:39:53 <elliott> so you said
05:39:55 <elliott> I can't think of any, though
05:40:01 <elliott> hmm...
05:40:09 <elliott> what about "delete X with heir Y"?
05:40:11 -!- azaq23 has quit (Ping timeout: 260 seconds).
05:40:22 <elliott> it deletes X, but any changes that reference X /indirectly/ use Y instead
05:40:22 <ais523> actually, I'm not against search-and-replace patches if they can be made to work, but I'm not sure they can be
05:40:23 <elliott> by indirectly
05:40:24 <elliott> I mean
05:40:28 <elliott> they don't change Y
05:40:34 <elliott> so, e.g., a before or after-hash is an indirect reference
05:40:42 <elliott> as is the start/end (source and destination) of a move hash
05:40:44 <elliott> but not a replace, insert, delete, etc.
05:40:56 <ais523> elliott: well, the operation isn't just "for X use Y" but "delete X and refer to Y instead"
05:41:22 <aspect> elliot: the ... in the body of your macro doesn't correspond to any useful pattern to repeat. (begin begin begin) obviously isn't what you mean
05:41:31 <elliott> ais523: indeed
05:41:35 <elliott> aspect: ah
05:41:41 <elliott> aspect: I'm obviously confused about how ... works...
05:41:50 <ais523> I don't think that resolves the fundamental problems, though
05:41:53 -!- azaq23 has joined.
05:42:02 <ais523> why not use … instead?
05:42:05 <elliott> ais523: yes, it feels ugly to me too
05:42:06 <aspect> ITYM (syntax-rules () ((on-packet origin (type binding) body ...) and then (begin body ...)
05:42:10 <monqy> ok i have what i think is the fix: replace both instances of "..." with ". action"
05:42:13 <elliott> aspect: oh, thanks
05:42:22 <elliott> monqy: that seems less nice than aspect's
05:42:25 <monqy> aspect's fix would work too
05:42:26 <aspect> (foo body ...) is similar to (foo . tail)
05:42:47 <elliott> thanks
05:42:49 <aspect> but ... gives you some more flexibility on the rewrite form
05:42:50 <elliott> to both of you
05:42:59 <elliott> let's see if it works :P
05:43:44 <elliott> hmm, not quite... but it's a weird bug so it's probably mine
05:43:54 <aspect> you might run into some hygeine issues with what you're trying here
05:43:57 <elliott> oh, there we go
05:44:08 * aspect strokes chin and thinks
05:44:10 <elliott> aspect: Really? The only thing I bind is named in the macro usage.
05:44:12 <elliott> And it works.
05:44:28 <aspect> hm true, that should be ok
05:45:02 <aspect> (eq? 'origin 'any) is an odd condition
05:45:18 <elliott> yeah, it's so that you can say
05:45:19 <aspect> and you're quoting 'type ...
05:45:22 <elliott> (on-packet any (chat ...) ...)
05:45:27 <elliott> quoting type is correct
05:45:46 <elliott> because you say (packet-hook 'chat)
05:46:23 <aspect> I probably need to put a full-brian to understanding this
05:46:30 <aspect> which I can't atm with work on :/
05:46:37 <elliott> wel,l it works now, so you can just ignore it ;-)
05:46:44 <aspect> but that quoting strikes me as wrong
05:46:48 <aspect> oh even better :)
05:47:03 <elliott> I'm pretty sure the quoting is right -- I want to check whether the passed "origin" is any
05:47:05 <monqy> there is a better way
05:47:15 <monqy> i can write it out
05:47:30 <CakeProphet> monqy has the power
05:49:13 <elliott> monqy: im wait,
05:49:15 <monqy> hm maybe it's not so better because it gets a bit messy? but the idea is to --i don't know how to describe this-- make any a keyword for the macro by putting it in the () after syntax-rules and then pattern matching against it at some point
05:49:22 <monqy> but I forget how to do this cleanly
05:49:33 <elliott> yeah, the problem is that I'd have to duplicate all the code, I think?
05:49:35 <elliott> maybe I'm wrong
05:49:39 <elliott> oh hmm I can think of a way
05:50:25 <monqy> would syntax-case work?
05:50:28 <monqy> that's a thing right
05:50:40 <monqy> I've never used it :(
05:50:46 <elliott> (define-syntax on-packet
05:50:47 <elliott> (syntax-rules (any)
05:50:47 <elliott> ((on-packet (any from) (type binding) body ...)
05:50:47 <elliott> (add-hook!
05:50:47 <elliott> (packet-hook 'type)
05:50:47 <elliott> (lambda (from binding)
05:50:49 <elliott> (begin body ...))))
05:50:51 <elliott> ((on-packet origin (type binding) body ...)
05:50:53 <elliott> (on-packet (any from) (type binding)
05:50:56 <elliott> (if (eq? from 'origin)
05:50:57 <elliott> (begin body ...))))
05:50:59 <elliott> that would work
05:51:01 <monqy> yuck
05:51:03 <elliott> I think
05:51:06 <monqy> there must be a better way
05:52:09 -!- Jafet has quit (Quit: Leaving.).
05:52:33 <fizzie> syntax-case can do everything, but nobodt knows how to use it, except some #scheme weirdoes.
05:52:41 <monqy> :(
05:52:59 <elliott> :D
05:53:02 <elliott> and oleg
05:53:38 <monqy> making a local macro or whatever it's called with let-syntax or something like that might be able to make it a tiny bit nicer...
05:54:17 <aspect> can oleg write a program so obscure that he cannot understand it?
05:54:40 <CakeProphet> fizzie: http://www.cs.indiana.edu/~dyb/pubs/tr356.pdf
05:54:51 <CakeProphet> google sure is neat.
05:55:05 <elliott> CakeProphet: lol @ being a jackass at someone clearly joking
05:55:22 <elliott> monqy: what I really want is a nicer way to dereference fields... :(
05:55:27 <elliott> (packet-field packet 'message) is not the most concise thing
05:56:09 <monqy> hm
05:56:22 <fizzie> (define p-f packet-field), of course.
05:56:59 <fizzie> Whoop, 9 characters of conciseness for free!
05:57:22 <elliott> Oh hey, the fizzie is here too.
05:57:27 <elliott> I was... I was going to ask the fizzie a question.
05:57:49 <fizzie> Not for long; I should be bicycling to wurk right about now.
06:01:38 <fizzie> Oh ho, Guile manual actually has a human-readable syntax-case description, with datum->syntax "this is how you introduce a binding" examples: http://www.gnu.org/software/guile/manual/html_node/Syntax-Case.html
06:02:04 <elliott> Indeedy.
06:04:42 <aspect> (set! packet (lambda (arg) (packet-field packet arg)))
06:04:58 <elliott> aspect: Groooooooooooooooooooss.
06:05:36 <aspect> arguably prettier than record types
06:05:56 <aspect> which stomp all over le hygiene
06:06:07 <CakeProphet> > let ba_ha = 2 in 2
06:06:08 <lambdabot> 2
06:06:18 <monqy> if all packets come from a common source you could wrap them there, rather than mutating them like that??
06:06:20 <CakeProphet> I_am_going_to_write_all_Haskell_identifiers_like_this_from_now_on
06:06:59 <CakeProphet> I don't think I ever see that style used.
06:07:17 <monqy> best-haskell-identifier-style
06:07:27 <elliott> monqy: eh?
06:07:35 <elliott> Oh, I see what aspect was getting at.
06:07:48 <CakeProphet> > let what-is-this-help = 2 in what-is-this-help
06:07:48 <lambdabot> <no location info>: Parse error in pattern
06:08:04 <monqy> and my line was suggesting a clean alternative
06:08:22 <CakeProphet> oh, nevermind. I was going to disagree and say that syntax errors are wonderful.
06:08:30 <CakeProphet> s/dis//
06:08:42 <CakeProphet> but now I disagree completely.
06:08:49 <monqy> hm?
06:09:22 <monqy> did you miss the joke? or do you disagree with the serious part?
06:11:00 <CakeProphet> what joke? I am serious business right now.
06:11:22 <monqy> it not being valid haskell identifier syntax was the joke
06:11:43 <monqy> and the serious part is that having identifiers like that is how I'd prefer things
06:12:34 <aspect> best—haskell—identifier—style
06:12:54 <CakeProphet> best haskell identifier style
06:13:08 <monqy> gross
06:13:32 <CakeProphet> yeah spaces sure are a bad delimiter for words.
06:14:33 <ais523> you can use spaces in variable names in Algol 68
06:15:08 <aspect> (string->symbol "The best identifier of all!")
06:15:34 <aspect> the best part is you can bind a name like T to that in your code, so if you want to translate your identifier names it's a one-place operation
06:16:20 <monqy> I forget what languages do this but in some you can have identifiers of the form |spaces are permitted here|
06:17:35 <elliott> lisp
06:18:19 <monqy> probably was
06:18:52 <Lymee> > let some variable=1 in some variable
06:18:52 <aspect> it rings bells from scheme but apparently not in gambit, which is the only impl I seem to have installed on this laptop
06:18:53 <lambdabot> Not in scope: `variable'
06:18:55 <Lymee> :<
06:19:18 <Lymee> > let あ=1 in あ
06:19:19 <lambdabot> 1
06:19:40 <monqy> I might have encountered it in reading draft 1 of the r7rs spec? maybe?
06:19:59 <aspect> would have been r6rs surely if it were scheme
06:20:08 <monqy> heheh
06:20:21 * aspect got disgusted with scheme by the time r6rs was a few months old
06:20:33 <Sgeo> So, Dash will be Google's replacement for Javascript?
06:20:40 * Sgeo hopes they don't fuck it up
06:20:41 <monqy> I never payed much attention to r6rs
06:20:57 <aspect> Sgeo, I hope they allow - in variable names
06:21:15 <aspect> r6 made me cry
06:21:33 <aspect> but then I discovered tcl and was enlightened
06:23:00 <monqy> is tcl good
06:23:47 <aspect> perhaps surprisingly, it's quite wonderful
06:24:11 <elliott> no lambdas
06:24:16 <monqy> ;_;
06:24:21 <aspect> there are problems of course, but a refreshingsimplicity which gives rise to a lot of nice things
06:24:22 <elliott> also, use of the worst data structure as code
06:24:32 <monqy> ;_;
06:24:38 <aspect> EIS
06:24:43 <aspect> true homoiconicity
06:24:52 <aspect> also: http://wiki.tcl.tk/22049
06:25:22 <aspect> and there are lambdas of a sort, they're just not much like you expect
06:25:33 <elliott> no, nothing is a string; the widespread use of strings is an artefact of our current inadequate OS ecosystems
06:25:40 <elliott> and no, Jim had proper lambdas, but nobody uses lambdas
06:25:45 <aspect> err
06:25:50 <elliott> pikhq used to use Tcl, so he can probably make arguments better than me :)
06:25:55 <aspect> Jim was fucked
06:26:07 <monqy> ew strings really? ahahahahahahahahaha
06:26:08 <elliott> it also had lambdas
06:26:29 <aspect> there's a page on the wiki called "Jim closures", which goes on for about 500 words before pointing out they're not actually closures
06:26:33 <CakeProphet> elliott: wait weren't you trying to convince me that tcl is awesome?
06:26:38 <aspect> but cam emulate them if you add references, which are actually boxes
06:26:49 <elliott> CakeProphet: no, I was trying to convince you you disliked Tcl for stupid reasons
06:26:51 -!- Vorpal has joined.
06:27:01 <elliott> I would argue vigorously against anyone saying that Microsoft was a baby-killing machine, too
06:27:12 <aspect> you say "ew strings", but the result is a much friendlier language for metaprogramming than Scheme
06:27:25 <CakeProphet> ...I don't see how.
06:27:35 <CakeProphet> strings = flat lists = structured programs = structured
06:27:38 <aspect> dealing with hygiene is a little messy .... but see syntax-case
06:27:41 <Sgeo> <insert standard joke about atheists here>
06:27:54 <monqy> hi Sgeo
06:28:00 <Sgeo> hi
06:28:18 <monqy> aspect: for once CakeProphet is right
06:28:32 <aspect> strings + quoting = structured
06:28:43 <CakeProphet> yes you cannot deny my amazing equational reasoning
06:28:50 -!- sebbu3 has joined.
06:29:29 * Sgeo hasn't been following the discussion, but what about Picolisp?
06:29:36 <aspect> see http://wiki.tcl.tk/10259 for an explication of string structure
06:30:25 <aspect> also, see the first link I pasted. Less than a few hundred lines of code to turn Tcl into Scheme. Now try the reverse
06:30:28 * Sgeo wrote some ... module thingy for Picolisp
06:30:34 <Sgeo> Never put it anyplace accessible :/
06:30:44 <elliott> doesn't look like scheme to me; anyway I never compared tcl to scheme
06:31:03 <elliott> yes, I have read the Dodekalogue. please don't assume I know nothing about Tcl
06:31:06 <aspect> (okay, I lack call/cc .. but with uplevel and a bit of cleverness, one could write call/cc as a procedure that re-writes its caller)
06:31:42 <aspect> the dodekalogue link was more for CakeProphet
06:31:53 <Sgeo> elliott is to blame for me getting interested in Picolisp
06:31:55 <aspect> and you don't think playing-scheme looks like scheme?
06:32:24 -!- sebbu2 has quit (Ping timeout: 260 seconds).
06:32:31 <elliott> since when is gensym scheme
06:33:28 * Sgeo finds his rename code
06:34:06 <aspect> gensym is a scheme for generating symbols, duh
06:34:41 <Sgeo> I... uh... what?
06:35:13 <Sgeo> Then again, I'm easily confused
06:35:42 * aspect hopes elliott was trolling me; if not, [Number] is the example you should be looking at -- [gensym] belongs behind the curtain
06:36:08 <elliott> I'm a very trolly troll.
06:38:04 <aspect> your name is practically an anagram for it
06:38:56 <ais523> toll tie
06:46:41 <CakeProphet> http://nyan.cat/ :3
06:47:52 <ais523> please tell me that's not a real URL
06:47:57 <CakeProphet> it is.
06:48:35 <monqy> :|
06:49:02 <CakeProphet> though it's buttered toast and not a pop-tart
06:49:53 <CakeProphet> oh god I just opened the youtube video and this site
06:49:56 <CakeProphet> nyanning at the same time.
06:50:02 <CakeProphet> oh god I'm going to have a seizure.
06:50:13 * CakeProphet closes one.
06:50:22 <monqy> ok
06:51:43 -!- nooga has joined.
06:55:47 <CakeProphet> my goal in life: get rich off of a meme.
06:56:20 <monqy> :(
06:56:48 <monqy> I hope you hate people like that and are secretly mocking them
06:58:05 <CakeProphet> monqy: I'm actually not a complete idiot.
06:58:08 <CakeProphet> by the way.
06:58:43 <monqy> it's hard to tell with you sorry :(
06:59:11 <CakeProphet> my sarcasm stealth is obscene.
06:59:27 <CakeProphet> or, well, stealthfully obscene.
06:59:34 <CakeProphet> though I'm pretty sure that's not possible.
07:00:02 -!- sebbu2 has joined.
07:00:02 -!- sebbu2 has quit (Changing host).
07:00:02 -!- sebbu2 has joined.
07:00:44 <CakeProphet> can something be offensive and also hidden?
07:00:47 <CakeProphet> I guess so.
07:01:28 <monqy> enpvfg wbxr urer
07:01:56 <CakeProphet> !rot13 enpvfg wbxr urer
07:02:01 <EgoBot> racist joke here
07:02:25 <aspect> that would be better hidden in a dark font
07:02:36 <monqy> +c :(
07:02:52 <monqy> also hhehe ehehh
07:03:05 <CakeProphet> I crack the codes. I end the war.
07:03:25 -!- sebbu3 has quit (Ping timeout: 258 seconds).
07:04:08 <CakeProphet> are there any other "encryption" algorithms that are self-decrypted, besides the rot* family?
07:05:37 <ais523> xor with onetime pad
07:05:54 <ais523> or with multipletime pad, come to think of it, but that's not a very good encryption algo
07:05:55 <monqy> anything with the property forall letters a, b; if a maps to b, b maps to a
07:06:00 <ais523> (that said, nor is rot13)
07:06:27 <CakeProphet> monqy: woah, you just blew my mind.
07:06:52 <CakeProphet> ais523: what are you xoring in that algorithm?
07:06:59 <ais523> the plaintext with the onetime pad
07:07:07 <CakeProphet> right what is a onetime pad...
07:07:22 <ais523> basically, a key the same length as the message, that you only use once
07:07:22 * CakeProphet does not know a lot about crytography.
07:07:26 <CakeProphet> ah okay.
07:07:31 <CakeProphet> short for padlock?
07:07:37 <ais523> it's theoretically perfect encryption, the issue is in distributing the keys in the first place
07:07:37 <CakeProphet> perhaps?
07:07:43 <ais523> I'm not sure if it's short for anything
07:07:43 <zzo38> XOR with one time pad is as secure as the one time pad is.
07:08:04 <zzo38> There are no weaknesses.
07:08:35 <zzo38> A one time pad also has no inherent weaknesses; only weakness in the way the key is generated or transferred or whatever are weakness.
07:08:35 <CakeProphet> :t (.^.)
07:08:35 <lambdabot> Not in scope: `.^.'
07:08:42 <CakeProphet> :t xor
07:08:43 <lambdabot> forall a. (Bits a) => a -> a -> a
07:08:44 <fizzie> "The "pad" part of the name comes from early implementations where the key material was distributed as a pad of paper, so the top sheet could be easily torn off and destroyed after use."
07:08:55 <ais523> quantum cryptography is mostly focused on ingenious ways to calculate a one-time pad in such a way that you can detect whether it's known by anyone else
07:09:01 <ais523> (and not use it if it is)
07:09:05 <fizzie> The pad is short for pad, then.
07:09:12 <zzo38> fizzie: That isn't very good; you will get impressions on the next page from the writing.
07:09:27 <ais523> zzo38: I think it was meant to be read rather than written on
07:09:36 <CakeProphet> > zipWith "The cats out of the bag" "oskdjfuai ofjekrisoxkzlektiqoeirskdfhwerhiuhdfiuhweiuhd"
07:09:36 <lambdabot> Couldn't match expected type `a -> b -> c'
07:09:37 <lambdabot> against inferred type `[...
07:09:46 <CakeProphet> > zipWith xor "The cats out of the bag" "oskdjfuai ofjekrisoxkzlektiqoeirskdfhwerhiuhdfiuhweiuhd"
07:09:46 <lambdabot> No instance for (Data.Bits.Bits GHC.Types.Char)
07:09:46 <lambdabot> arising from a use of `D...
07:09:48 <zzo38> But how can you read it if there is nothing written on there?
07:09:49 <fizzie> Yes; you can write first and then stample the sheets into a pad.
07:09:49 <CakeProphet> ...wat
07:09:57 <CakeProphet> I don't really understand this Bits typeclass.
07:10:01 <zzo38> fizzie: That would work better.
07:10:02 <ais523> zzo38: the information would be printed on there in advance
07:10:16 <CakeProphet> @hoogle Char -> Word8
07:10:16 <lambdabot> Data.ByteString.Internal c2w :: Char -> Word8
07:10:17 <lambdabot> Unsafe.Coerce unsafeCoerce :: a -> b
07:10:17 <lambdabot> Prelude error :: [Char] -> a
07:10:33 <CakeProphet> er, is there a better way to do that?
07:10:48 <monqy> :t (chr . xor . ord)
07:10:49 <zzo38> What? The @hoogle does not always match types properly
07:10:49 <lambdabot> Couldn't match expected type `Int' against inferred type `a -> a'
07:10:49 <lambdabot> In the first argument of `(.)', namely `xor'
07:10:49 <lambdabot> In the second argument of `(.)', namely `xor . ord'
07:10:52 <monqy> oops
07:10:53 <monqy> I uh
07:10:57 <monqy> messed that one up
07:11:19 <zzo38> toEnum . fromEnum
07:11:52 <fizzie> > zipWith xor (ord <$> "abc") (ord <$> "efg")
07:11:53 <lambdabot> [4,4,4]
07:12:10 <fizzie> ISTR 'ord' is just fromEnum type-restricted to Char.
07:12:30 <monqy> ?src ord
07:12:30 <lambdabot> Source not found.
07:12:34 <monqy> oops
07:12:35 <CakeProphet> > zipwith (chr . (xor `on` ord)) "abc" "efg"
07:12:36 <lambdabot> Not in scope: `zipwith'
07:12:41 <CakeProphet> > zipWith (chr . (xor `on` ord)) "abc" "efg"
07:12:42 <lambdabot> Couldn't match expected type `b -> c'
07:12:42 <lambdabot> against inferred type `GHC.Ty...
07:12:50 <CakeProphet> oh rite
07:13:53 <CakeProphet> uh, I'm bad at pointfree. :P
07:13:55 <fizzie> > chr <$> zipWith (xor `on` ord) "abcdef" "foobar"
07:13:56 <lambdabot> "\a\r\f\ACK\EOT\DC4"
07:13:58 <fizzie> Ooh, nice escapes.
07:14:09 <ais523> wait, which one is \a? alert?
07:14:14 <CakeProphet> I believe so.
07:14:19 <CakeProphet> if it's the same as C.
07:14:31 <ais523> the \ACK\EOT\DC4 stuff is pretty unusual as escapes go, at least
07:14:56 <CakeProphet> isn't there a .: or something?
07:15:00 <fizzie> Apparently \BEL also works, but it seems to default to the one-character escapes which exist.
07:15:03 <CakeProphet> :t (.:)
07:15:04 <lambdabot> forall a b (f :: * -> *) (g :: * -> *). (Functor f, Functor g) => (a -> b) -> f (g a) -> f (g b)
07:15:45 <CakeProphet> > zipWith ( chr .: (xor `on` ord)) "hello" "GOODBYE"
07:15:47 <lambdabot> "/*#(-"
07:16:02 <CakeProphet> > zipWith ( chr .: (xor `on` ord)) "/*#(-" "GOODBYE"
07:16:03 <lambdabot> "hello"
07:16:07 <CakeProphet> cool.
07:16:31 <CakeProphet> @hoogle (.:)
07:16:31 <lambdabot> No results found
07:16:35 <CakeProphet> ..what is that.
07:16:54 <CakeProphet> what is this magical nonexistant operator I just used. where is it.
07:16:55 -!- Taneb has joined.
07:17:04 <Taneb> Hello
07:17:08 <CakeProphet> *nonexistent
07:17:09 <monqy> hi
07:17:10 <CakeProphet> hello.
07:18:18 <CakeProphet> man I wish my teacher didn't give me a participation grade for listening to a recording of the class, when the recording is partially missing.
07:19:00 -!- Taneb has quit (Client Quit).
07:19:13 -!- ais523 has quit (Remote host closed the connection).
07:20:04 <CakeProphet> help what is .: help
07:21:21 <monqy> :t fmap . fmap
07:21:22 <lambdabot> forall (f :: * -> *) a b (f1 :: * -> *). (Functor f, Functor f1) => (a -> b) -> f (f1 a) -> f (f1 b)
07:21:34 -!- oerjan has joined.
07:22:42 <CakeProphet> :t (fmap . fmap) id id
07:22:43 <lambdabot> forall a (f :: * -> *). (Functor f) => f a -> f a
07:22:55 <CakeProphet> :t (id.).id
07:22:55 <lambdabot> forall a (f :: * -> *). (Functor f) => f a -> f a
07:23:05 <CakeProphet> man I'm so bad at composition.
07:23:20 <CakeProphet> :t (id.)
07:23:20 <lambdabot> forall a (f :: * -> *). (Functor f) => f a -> f a
07:23:35 <oerjan> caleskell strikes again
07:23:48 <CakeProphet> :t ((id$).)
07:23:48 <lambdabot> forall a (f :: * -> *). (Functor f) => f a -> f a
07:23:58 <oerjan> :t (id P..)
07:23:59 <lambdabot> Couldn't find qualified module.
07:24:03 <oerjan> :t (id Prelude..)
07:24:04 <lambdabot> forall b a. (a -> b) -> a -> b
07:24:17 <CakeProphet> er
07:24:25 <CakeProphet> oh okay.
07:24:37 <oerjan> heaps of shortened moduled names, but the one you actually need most often...
07:25:12 <CakeProphet> :t ((1>) Prelude..)
07:25:12 <oerjan> :t ($)
07:25:12 <lambdabot> forall t a. (Num t, Ord t) => (a -> t) -> a -> Bool
07:25:13 <lambdabot> forall a b. (a -> b) -> a -> b
07:25:22 <CakeProphet> yeah I noticed that.
07:25:36 <CakeProphet> hmmm, okay.
07:25:53 <oerjan> :t (id <<<)
07:25:54 <CakeProphet> that's still a little confusing, but I know the idiom (f.).g
07:25:54 <lambdabot> forall b a. (a -> b) -> a -> b
07:26:48 <monqy> :t id
07:26:49 <lambdabot> forall a. a -> a
07:27:01 <CakeProphet> ...oh wait I've got it.
07:27:03 <oerjan> > id "entical"
07:27:04 <lambdabot> "entical"
07:27:09 <monqy> I find it a bit strange that caleskell id and (.) aren't the Category id and (.)
07:27:29 <oerjan> monqy: i think caleskell is slightly older
07:27:32 <CakeProphet> (f.).g 1 == (f.g 1)
07:27:33 <monqy> ah
07:27:34 <CakeProphet> right?
07:27:36 <monqy> (.) being fmap is kind of weird
07:28:00 <oerjan> CakeProphet: er no?
07:28:10 <CakeProphet> ...oh okay.
07:28:14 <CakeProphet> then I don't understand. :P
07:28:36 <monqy> CakeProphet: sometimes it's easier to think in terms of fmap and the Functor instance for (a ->) when constructing those sorts of things
07:28:53 <oerjan> @unpl ((f.).g) x y
07:28:54 <lambdabot> (f (g x y))
07:28:54 <CakeProphet> er, actually I mean ((f.).g) 1 == (f.g 1)
07:29:10 <CakeProphet> @unpl (f.g 1)
07:29:10 <lambdabot> (\ c -> f (g 1 c))
07:29:23 <CakeProphet> yeah
07:29:25 <CakeProphet> same thing.
07:29:49 <CakeProphet> okay I've got it. I just had to work out the equational substitutions.
07:29:59 <monqy> ok
07:30:17 <CakeProphet> now let's see if I can to it with three arguments.
07:30:45 <monqy> anything beyond two arguments and I start using fmap instead of . in a few places or just doing it pointfully. two arguments is pushing it, too.
07:31:24 <CakeProphet> > (((f.).).g) 1 2 3
07:31:25 <lambdabot> Ambiguous type variable `a' in the constraints:
07:31:26 <lambdabot> `SimpleReflect.FromExpr ...
07:31:31 <CakeProphet> @unpl (((f.).).g) 1 2 3
07:31:31 <lambdabot> (f (g 1 2 3))
07:31:36 <CakeProphet> alright.
07:32:15 <monqy> I guess it's okay when all arguments are in the right order and there aren't any other arguments or anything
07:32:45 <CakeProphet> and that's... fmap (fmap (fmap f)) g ?
07:32:55 <oerjan> `addquote <oklopol> king is something women are better at than men
07:33:00 <HackEgo> 653) <oklopol> king is something women are better at than men
07:33:37 <CakeProphet> monqy: how would you go about flipping arguments correctly?
07:33:44 <monqy> I dunno
07:33:45 * CakeProphet wants to write Haskell like pl does. For fun.
07:33:51 <monqy> I forget how I'd do it :(
07:34:10 <CakeProphet> well flip g would flip the first two obviously.
07:34:36 <CakeProphet> @pl (\f g x y z -> f ( g z y x))
07:34:36 <lambdabot> (. (flip . (flip .) . flip)) . (.) . (.) . (.)
07:34:37 <oerjan> CakeProphet: hey @pl doesn't know how to use Arrow functions
07:34:51 <CakeProphet> that's fine neither do I. :P
07:34:55 <CakeProphet> well I can kind of use &&& I think.
07:34:59 <monqy> actually I think the point at which I switch to fmap is when composing compositions because that's weird
07:35:05 <zzo38> I managed to make a program in Haskell for type-level natural numbers that allows you to do this: valcon (undefined :: Add $(3) $(4))
07:35:09 <zzo38> The result will then be 7
07:35:12 <aspect> @unpl (f . g) 1 2 3
07:35:12 <lambdabot> f (g 1) 2 3
07:35:16 <CakeProphet> @pl (\f g x y z -> f ( g y x z))
07:35:16 <lambdabot> (. flip) . (.) . (.) . (.)
07:35:18 <aspect> ok, cool
07:35:39 <CakeProphet> man that is so bad..
07:35:49 <CakeProphet> @pl (\x y z -> f ( g y x z))
07:35:49 <lambdabot> ((f .) .) . flip g
07:35:53 <CakeProphet> okay that is better.
07:35:58 <zzo38> (It uses an instance Num (Q Type), although it is not really the proper way to make a Num instance, of course!!)
07:36:01 <CakeProphet> @pl (\x y z -> f ( g z y x))
07:36:01 <lambdabot> ((f .) .) . flip (flip . flip g)
07:36:10 <monqy> flip
07:36:17 <CakeProphet> monqy: well right I knew I'd want flip
07:36:35 <CakeProphet> ah okay so flip . flip g
07:37:01 <CakeProphet> @pl (\x y z -> f ( g x z y))
07:37:01 <lambdabot> ((f .) .) . flip . g
07:37:17 <CakeProphet> yeah those make sense now.
07:37:41 <zzo38> Is it good, what I made with type-level natural number? Or, is strange? Or, something else?
07:38:21 <oerjan> zzo38: i don't recall seeing type-level programming and template haskell combined before
07:38:25 <CakeProphet> :t flip flip
07:38:26 <lambdabot> forall (f :: * -> *) a b. (Functor f) => a -> f (a -> b) -> f b
07:38:35 <oerjan> but i haven't seen everything, either
07:38:40 <CakeProphet> wat
07:38:41 <CakeProphet> :t flip
07:38:41 <lambdabot> forall (f :: * -> *) a b. (Functor f) => f (a -> b) -> a -> f b
07:38:44 <monqy> what is $(3)
07:38:59 <CakeProphet> TH for a type-level natural I'd imagine.
07:39:02 <zzo38> oerjan: Are you sure? I have never seen it either, but it would be possible.
07:39:24 <zzo38> And in fact I have been able to do so.
07:39:24 <oerjan> zzo38: well you've just proved it is possible, it seems :P
07:39:44 <CakeProphet> I'm guessing caleskell also makes flip work on functors?
07:39:47 <monqy> maybe $(3) was just zzo shorthand
07:39:50 <monqy> which is why I asked
07:40:22 <CakeProphet> > flip [(+3), (+4), (+5)] 6
07:40:24 <lambdabot> [9,10,11]
07:40:28 <zzo38> monqy: Actually I made it so that $(3) is valid where a type is expected.
07:40:31 <oerjan> monqy: there would be no reason to parenthesize 3 if it were shorthand, i think
07:40:51 <CakeProphet> :t (<*>)
07:40:51 <lambdabot> forall (f :: * -> *) a b. (Applicative f) => f (a -> b) -> f a -> f b
07:40:52 <zzo38> It is not normally allowed for a TH splice to have only a number
07:40:58 <CakeProphet> so basically flip is <*> for functors.
07:41:12 <CakeProphet> @src flip
07:41:12 <lambdabot> flip f x y = f y x
07:41:30 <zzo38> oerjan: Yes, I believe you.
07:42:47 <monqy> CakeProphet: didn't you see the type signatures?
07:43:01 <oerjan> :t flip
07:43:02 <lambdabot> forall (f :: * -> *) a b. (Functor f) => f (a -> b) -> a -> f b
07:43:11 <zzo38> Although the program uses Template Haskell only for the purpose of writing things such as $(3) and does everything else with classes and type families.
07:43:12 <CakeProphet> monqy: right but I don't believe that is the standard type signature for flip.
07:43:21 <monqy> CakeProphet: also it can't be <*> for functors, for fundamental reasons
07:43:26 <oerjan> :t flip (fmap (flip id))
07:43:27 <lambdabot> forall a b a1. a1 -> (a1 -> a) -> (a -> b) -> b
07:43:27 <monqy> behind <*>'s nature
07:43:30 <oerjan> eek
07:43:53 <oerjan> :t flip (fmap . flip id)
07:43:54 <lambdabot> forall b (f :: * -> *) a. (Functor f) => f (a -> b) -> a -> f b
07:44:32 <monqy> CakeProphet: the fundamental reason is that there'd be no reason to have to declare <*> in Applicative if you could write it for any old Functor
07:44:33 <CakeProphet> wait, how do you flip id.
07:44:42 <oerjan> @unpl flip id
07:44:43 <lambdabot> (\ b c -> c b)
07:44:50 <CakeProphet> oh right.
07:44:54 <azaq23> <*> for function is the S combinator
07:45:00 <zzo38> (flip id) is Church exponentiation.
07:45:14 <monqy> CakeProphet: the type signature difference is that the second argument of flip is of type a, whereas in (<*>) it is of f a
07:45:32 <oerjan> :t Prelude.flip
07:45:33 <lambdabot> forall a b c. (a -> b -> c) -> b -> a -> c
07:45:47 <CakeProphet> okay so then what is the source for this new flip?
07:45:50 -!- GreaseMonkey has joined.
07:46:02 <oerjan> CakeProphet: i just showed above
07:46:08 <CakeProphet> it's recursive?
07:46:09 <oerjan> :t flip (fmap (flip id))
07:46:10 <lambdabot> forall a b a1. a1 -> (a1 -> a) -> (a -> b) -> b
07:46:31 <oerjan> CakeProphet: well that flip used is supposed to be the standard one, of course
07:46:32 <azaq23> :t ((<*>) :: (t -> t1 -> t2) -> (t -> t1) -> t -> t2)
07:46:32 <lambdabot> forall t t1 t2. (t -> t1 -> t2) -> (t -> t1) -> t -> t2
07:46:36 <CakeProphet> oerjan: oh okay.
07:46:41 <aspect> is this like sudoku for haskellers?
07:46:49 <oerjan> aspect: heh
07:46:59 <azaq23> @djinn (t -> t1 -> t2) -> (t -> t1) -> t -> t2
07:46:59 <lambdabot> f a b c = a c (b c)
07:47:53 <monqy> flip (fmap (flip id))? wasn't your definition flip (fmap . flip id)?
07:48:08 <monqy> or were you doing something else there
07:48:20 <oerjan> monqy: gah i miscopy/pasted
07:48:26 <oerjan> :t flip (fmap . flip id)
07:48:27 <lambdabot> forall b (f :: * -> *) a. (Functor f) => f (a -> b) -> a -> f b
07:48:51 -!- calamari has quit (Quit: Leaving).
07:49:04 <oerjan> :t (<*>.($))
07:49:05 <lambdabot> Not in scope: `<*>.'
07:49:08 <oerjan> eek
07:49:14 <oerjan> :t ((<*>).($))
07:49:15 <lambdabot> forall a b a1. (a1 -> a -> b) -> (a1 -> a) -> a1 -> b
07:49:46 <CakeProphet> :t ((<*>).(<*>))
07:49:47 <lambdabot> forall a b a1. (a -> a1 -> b) -> ((a -> a1) -> a) -> (a -> a1) -> b
07:50:06 <CakeProphet> @djinn ((<*>).(<*>))
07:50:06 <lambdabot> Cannot parse command
07:50:09 <monqy> :t ((<*>)<$>(<*>))
07:50:09 <lambdabot> forall a b a1. (a -> a1 -> b) -> ((a -> a1) -> a) -> (a -> a1) -> b
07:50:19 <CakeProphet> @djinn forall a b a1. (a -> a1 -> b) -> ((a -> a1) -> a) -> (a -> a1) -> b
07:50:19 <lambdabot> f a b c = a (b c) (c (b c))
07:50:36 <CakeProphet> exciting.
07:50:38 <monqy> ?unpl ap.ap
07:50:38 <lambdabot> (\ c h -> (\ n -> c >>= \ k -> n >>= \ j -> return (k j)) >>= \ e -> h >>= \ d -> return (e d))
07:50:45 <monqy> exciting
07:51:46 <CakeProphet> :t (<*>).(<*>).(<*>)
07:51:47 <lambdabot> forall b a a1. (a -> a1 -> b) -> (((a -> a1) -> a) -> a -> a1) -> ((a -> a1) -> a) -> b
07:51:49 <CakeProphet> weeeee
07:52:12 <azaq23> @@ @do @unpl ap . ap
07:52:12 <lambdabot> (\ c h -> do { e <- (\ n -> do { k <- c; j <- n; return (k j)}); d <- h; return (e d)})
07:52:35 <oerjan> i suppose @unpl doesn't work too well with ap
07:53:15 <monqy> ?. ?do ?unpl ap
07:53:15 <lambdabot> Plugin `compose' failed with: Unknown command: "?do"
07:53:17 <monqy> oops
07:53:20 <monqy> ?. do unpl ap
07:53:20 <lambdabot> (\ d e -> do { b <- d; a <- e; return (b a)})
07:53:36 <oerjan> @list do
07:53:37 <lambdabot> undo provides: undo do
07:54:09 <monqy> ?unpl ap
07:54:09 <lambdabot> (\ d e -> d >>= \ b -> e >>= \ a -> return (b a))
07:57:38 <CakeProphet> @pl (\a b c -> a (b c) (c (b c)))
07:57:38 <lambdabot> (`ap` ap id) . liftM2
07:58:04 <CakeProphet> you've lost my trust, @pl
07:58:32 <monqy> ?unpl (`ap` ap id) . liftM2
07:58:32 <lambdabot> (\ j -> (\ f g -> f >>= \ d -> g >>= \ c -> return (j d c)) >>= \ r -> (\ o -> (\ a -> a) >>= \ l -> o >>= \ k -> return (l k)) >>= \ q -> return (r q))
07:58:38 <monqy> thanks
07:59:10 <CakeProphet> I wonder which provides obfuscated code more often.
07:59:14 <oerjan> that second c probably complicates the plumbing a lot
07:59:38 <oerjan> @unpl ap id b c
07:59:39 <lambdabot> ((\ a -> a) >>= \ e -> b >>= \ d -> return (e d)) c
08:00:07 <CakeProphet> oerjan: pl should just magically know that it's (<*>).(<*>) because it's an awesome cat eye operator thing.
08:00:27 <monqy> pl uses ap instead of (<*>)
08:00:27 <oerjan> you don't say
08:00:29 <zzo38> I did something might be a bit strange, which is accessing a field which is incapable of ever having a value in the circumstances where the field is being accessed. (There might be possibility of the field having values, but not in the program I wrote.)
08:00:43 <oerjan> :t ap.ap
08:00:44 <lambdabot> forall a b a1. (a -> a1 -> b) -> ((a -> a1) -> a) -> (a -> a1) -> b
08:01:01 <oerjan> @@ @djinn @type ap.ap
08:01:02 <lambdabot> f a b c = a (b c) (c (b c))
08:01:20 <oerjan> oh you already did that
08:01:23 <CakeProphet> yep.
08:02:51 <oerjan> :t ap.ap.ap
08:02:52 <lambdabot> forall b a a1. (a -> a1 -> b) -> (((a -> a1) -> a) -> a -> a1) -> ((a -> a1) -> a) -> b
08:02:55 <oerjan> :t ap.ap.ap.ap
08:02:56 <lambdabot> forall b a a1. (a -> a1 -> b) -> ((((a -> a1) -> a) -> a -> a1) -> (a -> a1) -> a) -> (((a -> a1) -> a) -> a -> a1) -> b
08:03:02 <oerjan> :t ap.ap.ap.ap.ap
08:03:03 <lambdabot> forall b a a1. (a -> a1 -> b) -> (((((a -> a1) -> a) -> a -> a1) -> (a -> a1) -> a) -> ((a -> a1) -> a) -> a -> a1) -> ((((a -> a1) -> a) -> a -> a1) -> (a -> a1) -> a) -> b
08:03:09 <monqy> how much ap is too much ap
08:03:19 <oerjan> :t ap.ap.ap.ap.ap.ap.ap.ap
08:03:20 <lambdabot> forall b a a1. (a -> a1 -> b) -> ((((((((a -> a1) -> a) -> a -> a1) -> (a -> a1) -> a) -> ((a -> a1) -> a) -> a -> a1) -> (((a -> a1) -> a) -> a -> a1) -> (a -> a1) -> a) -> ((((a -> a1) -> a) -> a -
08:03:20 <lambdabot> > a1) -> (a -> a1) -> a) -> ((a -> a1) -> a) -> a -> a1) -> (((((a -> a1) -> a) -> a -> a1) -> (a -> a1) -> a) -> ((a -> a1) -> a) -> a -> a1) -> (((a -> a1) -> a) -> a -> a1) -> (a -> a1) -> a) -> (
08:03:20 <lambdabot> ((((((a -> a1) -> a) -> a -> a1) -> (a -> a1) -> a) -> ((a -> a1) -> a) -> a -> a1) -> (((a -> a1) -> a) -> a -> a1) -> (a -> a1) -> a) -> ((((a -> a1) -> a) -> a -> a1) -> (a -> a1) -> a) -> ((a ->
08:03:20 <lambdabot> a1) -> a) -> a -> a1) -> b
08:03:36 <oklopol> "<elliott> ais523: well, changes are at least an abelian group" <<< please elaborate
08:03:37 <oerjan> monqy: a lot
08:04:05 <oerjan> :t fix (ap.)
08:04:06 <lambdabot> Occurs check: cannot construct the infinite type: m = (->) (m a)
08:04:06 <lambdabot> Expected type: f (m (a -> b))
08:04:06 <lambdabot> Inferred type: f (m a -> m b)
08:04:57 <monqy> (ap ap ap ap ap ap ap) gives a really long infinite type error
08:04:58 <elliott> oklopol: how would you like me to elaborate?
08:05:00 <zzo38> This is program I made: http://sprunge.us/PKiW
08:05:05 <oerjan> :t ap ap
08:05:05 <lambdabot> forall (m :: * -> *) a b. (Monad m) => (m (a -> b) -> m a) -> m (a -> b) -> m b
08:05:08 <oerjan> :t ap ap ap
08:05:09 <lambdabot> Occurs check: cannot construct the infinite type: m = (->) (m a)
08:05:09 <lambdabot> Probable cause: `ap' is applied to too few arguments
08:05:09 <lambdabot> In the second argument of `ap', namely `ap'
08:05:57 <oklopol> elliott: what are the elements and what's the operation i guess
08:06:48 <CakeProphet> :t ((<*>).(<*>)) (const ((:[])>=>(:[])>=>(:[]))) (const ((:[])>=>(:[])>=>(:[]))) ((:[])>=>(:[])>=>(:[]))
08:06:48 <lambdabot> forall b. [[b -> [b]]]
08:06:52 <elliott> oklopol: well changes look roughly like change := start-of-file | end-of-file | insert <string> between <change> and <change> | replace <change> with <change> | delete <change> | move (<change>,<change>) to (<change>,<change>) | changeset <set of change>
08:07:00 <CakeProphet> okay I definitely need to obfuscate something with that line...
08:07:02 <elliott> the operation is a . b = changeset {a,b}
08:07:22 <elliott> the inverse is
08:07:34 <oklopol> where do you get that that's a group lolol
08:07:40 <oklopol> hmm
08:07:46 <elliott> inverse(insert x between a and b) = delete (insert x between a and b)
08:07:50 <elliott> inverse(delete x) = x
08:07:57 <elliott> inverse(replace x with y) = delete (replace x with y)
08:08:00 <elliott> inverse(move) = cba to write
08:08:05 <elliott> inverse(changeset) = blah blah recurse
08:08:07 <CakeProphet> ((<*>).(<*>)) (const ((:[])>=>(:[])>=>(:[]))) (const ((:[])>=>(:[])>=>(:[]))) ((:[])>=>(:[])>=>(:[])) <$> (<*> 3)
08:08:10 <CakeProphet> > ((<*>).(<*>)) (const ((:[])>=>(:[])>=>(:[]))) (const ((:[])>=>(:[])>=>(:[]))) ((:[])>=>(:[])>=>(:[])) <$> (<*> 3)
08:08:10 <lambdabot> Couldn't match expected type `a -> b' against inferred type `[b1]'
08:08:23 <elliott> inverse(start-of-file) = probably changeset {}, sof and eof act as nops in practice
08:08:36 <elliott> but yeah, changes are an abelian group.
08:08:43 <elliott> if they're not it's a bug :P
08:09:15 <CakeProphet> one day I will be a great Haskell programmer, telling hieroglyphic stories with my programs
08:09:20 <CakeProphet> epic tales of cats and totem poles.
08:09:20 <oklopol> and it doesn't matter in which order you say insert two strings?
08:09:29 <oklopol> i suppose i have no idea what we're talking about
08:09:32 <elliott> oklopol: changeset takes a set, not anything ordered, so yes.
08:09:36 <elliott> the context is scapegoat
08:09:51 <elliott> ais' vcs design that I'm working on him with, based around recursive changes
08:10:17 <oklopol> but umm do you have x * x = x when x is a value
08:10:23 <oklopol> or is it added twice
08:11:06 <elliott> x * x = changeset {x, x}
08:11:13 <elliott> = changeset {x} that's how sets fucking work :P
08:11:30 <oklopol> so x * x = x?
08:11:38 <oerjan> zzo38: couldn't you avoid the getPred field by using valcon _ = 1 + valcon (undefined :: x) ?
08:11:45 <elliott> oklopol: yes.
08:11:46 <oklopol> then it's not a group
08:11:57 <elliott> er hm oh :P
08:12:08 <elliott> hmmmm
08:12:11 * oklopol saves the day and goes to work
08:12:15 <elliott> x * x might actually want to conflict
08:12:25 <elliott> hey oerjan help us fix scapegoat
08:12:27 <CakeProphet> > (<*> [3]) <$> ((<*>).(<*>)) (const ((:[])>=>(:[])>=>(:[]))) (const ((:[])>=>(:[])>=>(:[]))) ((:[])>=>(:[])>=>(:[]))
08:12:29 <lambdabot> [[[3]]]
08:12:46 <aspect> does x*x -> x imply idempotent changesets?
08:12:52 <zzo38> oerjan: That doesn't seem to work when I tried
08:12:58 <aspect> because I don't understand what you're doing, but that sounds like it would be bad
08:13:05 <elliott> that's correct.
08:13:08 <elliott> and right
08:13:15 <elliott> but it actually just implies that {x,x} = x
08:13:18 <elliott> but yes :P
08:15:37 <oklopol> actually it implies that x = nop for all x
08:15:39 -!- nooga has quit (Ping timeout: 260 seconds).
08:15:45 <oerjan> zzo38: huh. maybe the type x isn't actually in scope. i vaguely recall something about that.
08:15:51 <zzo38> What it seems to do is x in (undefined :: x) is a new variable
08:16:12 <zzo38> That is why I put getPred instead.
08:16:12 <oerjan> zzo38: perhaps if you add the ScopedTypeVariables extension?
08:16:26 <oerjan> (iirc the name)
08:16:44 <CakeProphet> @hoogle a -> [a]
08:16:44 <lambdabot> Prelude repeat :: a -> [a]
08:16:44 <lambdabot> Data.List repeat :: a -> [a]
08:16:44 <lambdabot> Prelude iterate :: (a -> a) -> a -> [a]
08:16:47 <zzo38> Maybe it will, but it also works the way I have it.
08:16:59 <monqy> :t return :: a -> [a]
08:16:59 <lambdabot> forall a. a -> [a]
08:17:02 <monqy> :t pure :: a -> [a]
08:17:02 <lambdabot> forall a. a -> [a]
08:17:10 <CakeProphet> > repeat >=> repeat $ 3
08:17:11 <lambdabot> [3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,...
08:17:17 <oerjan> zzo38: ok. anyone i think that's the kind of thing that extension allows.
08:17:21 <oerjan> *anyhow
08:17:30 <aspect> :t >=>
08:17:30 <lambdabot> parse error on input `>=>'
08:17:34 <CakeProphet> > repeat >=> (+1) $ 3
08:17:34 <lambdabot> No instance for (GHC.Num.Num [c])
08:17:34 <lambdabot> arising from a use of `e_113' at <inte...
08:17:37 <aspect> :t (>=>)
08:17:37 <lambdabot> forall a (m :: * -> *) b c. (Monad m) => (a -> m b) -> (b -> m c) -> a -> m c
08:17:52 <CakeProphet> > (+3) >=> repeat $ 3
08:17:52 <lambdabot> No instance for (GHC.Num.Num [b])
08:17:52 <lambdabot> arising from a use of `e_133' at <inte...
08:17:57 * aspect eyes glaze over
08:18:08 <CakeProphet> repeat is not an acceptable return. :(
08:18:18 <zzo38> oerjan: OK.
08:18:19 <elliott> <oklopol> actually it implies that x = nop for all x
08:18:24 <elliott> that's certainly not true.
08:18:27 <elliott> i accept it isn't a group though.
08:18:45 <CakeProphet> > repeat >=> (return.(+1)) $ 3
08:18:46 <lambdabot> [4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,...
08:19:09 <zzo38> Would you ever have some use of this "TypeNatural" program?
08:19:21 <CakeProphet> not I/.
08:19:55 <oerjan> CakeProphet: actually repeat is essentially the pure of the ZipList Applicative, which _may_ be extensible to a monad.
08:20:10 <CakeProphet> > repeat >=> (repeat.(+1)) $ 3
08:20:11 <lambdabot> [4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,...
08:20:26 <oerjan> but not with the same monad bind
08:20:34 <CakeProphet> ah
08:20:50 <oerjan> basically join for it is taking the diagonal of a matrix
08:21:13 <monqy> and that satisfies the monad laws?
08:21:25 <oerjan> but the monad laws may subtly fail because of bottoms if you do that naively
08:21:33 <monqy> ah
08:21:49 <CakeProphet> aspect: learn you a haskell for great good.
08:22:40 <CakeProphet> release the shackles of OOP, er... AOP I guess, based on your name. :P
08:22:43 <oerjan> monqy: i _think_ it works if you require the entire square above and to the left of a diagonal element to be filled in order for that element to be put in the join
08:22:49 <elliott> i think aspect knows haskell, CakeProphet.
08:22:55 <aspect> CakeProphet: cutesy-styled tutorials don't turn me on
08:22:59 <oerjan> during my previous experimentations
08:23:03 <CakeProphet> it's not obnoxiously cute.
08:23:03 <elliott> oerjan: iirc ZipList is well known to not be a monad, but...
08:23:08 <elliott> aspect: disable images
08:23:18 <zzo38> Is it a comonad?
08:23:22 <CakeProphet> aspect: it's not as bad as this one Ruby tutorial I read.
08:23:31 <oerjan> elliott: i have never seen it written up...
08:23:32 <monqy> elliott: is the writing not cutsey as well?
08:23:43 <elliott> CakeProphet: note: insulting why's poignant guide will cause me to travel to your house and kill you.
08:23:43 <CakeProphet> not really. it's mostly informative.
08:23:57 <oerjan> elliott: so i am still suspicious they just haven't defined join properly...
08:24:03 <elliott> oerjan: heh
08:24:15 <CakeProphet> elliott: it was an interesting read. but... I mean
08:24:21 <CakeProphet> the huge monologues were kind of not needed.
08:24:27 <aspect> no, I don't really know haskell -- certainly not OOP shackled though ... but watching @pl games in here doesn't do a lot to attract me
08:24:49 <elliott> #esoteric is not really about a marketable face.
08:24:53 <oerjan> elliott: oh. the thing that makes me almost sure it's a monad is because it is nearly isomorphic to (Integer ->)
08:24:59 <aspect> the Squiggol paper was more obvious
08:25:01 <elliott> everything here is pointless, no matter what the medium.
08:25:02 <oerjan> well, (Nat ->)
08:25:13 <elliott> oerjan: except that ZipLists can be finite.
08:25:35 <monqy> aspect: just like how ioccc makes me hate c
08:26:22 <monqy> oerjan: nearly isomorphic?
08:26:22 <oerjan> elliott: yes. so it's subtle but i haven't seen a proof that it _must_ break
08:26:29 <elliott> oerjan: heh
08:26:47 <oerjan> monqy: if all lists involved are infinite, then it is isomorphic
08:26:56 <monqy> ah
08:27:02 <aspect> well, I like to see the dark corners of new things early. I gets the hate out of the way
08:27:10 <oerjan> l <-> (l !!)
08:27:16 <CakeProphet> aspect: pl is a very good obfuscatory / code concisor
08:27:32 <CakeProphet> *obfuscator
08:28:05 <CakeProphet> it serves both purposes well.
08:28:57 <zzo38> Send my program of type-level natural numbers to the Cabal or whatever, if you want to do so. It is public domain it is OK to do anything with it, modified or not, etc
08:29:30 <CakeProphet> can I modify it into a cat program?
08:30:01 <zzo38> CakeProphet: You probably can but it would be better to write your own cat program, since this is a completely different program
08:30:44 <elliott> oerjan: so anyway, help us make scapegoat changes some itneresting structure :P
08:33:20 <CakeProphet> aspect: http://pastebin.com/yXJAs7ft here is a program I made in Haskell that outputs an infinite list of palindromes in an alphabet.
08:33:30 <oerjan> tetraphilomorphic streptocobordisms
08:33:32 <CakeProphet> this will either make you interested or scare you away more perhaps.
08:34:01 <aspect> no, scares me away more
08:34:10 <aspect> what's wrong with simple recursive equations
08:34:21 <monqy> they suck
08:34:23 <monqy> that's what
08:34:32 <CakeProphet> they can be rewritten as re-usable combinators.
08:34:32 <aspect> or let .. in .. rather than where
08:34:40 <CakeProphet> just syntactic preference.
08:34:46 <monqy> what's so bad about where
08:34:49 <CakeProphet> there's let .. in .. as well
08:34:57 <CakeProphet> it can be used.
08:35:06 <elliott> monqy: hey, antezepto is still a thing that exists
08:35:07 <aspect> it reverses the order I'm used to seeing things in
08:35:16 <monqy> elliott: I forgot about antezepto
08:35:20 <oerjan> where has the nice property of not suggesting the definitions are evaluated first
08:35:22 <monqy> elliott: how existing is it
08:35:38 <elliott> monqy: i have almost three hundred lines of haskell purporting to be it here...
08:35:48 <monqy> does it work
08:35:53 <elliott> dunno, let's find out
08:36:05 <elliott> apparently
08:36:08 <aspect> oerjan: wow, implications about evluation order are considered a risk in haskell? :
08:37:27 <elliott> monqy: i am thinking... maybe i do not need the mutability that is in this code...
08:37:29 <elliott> (I probably do)
08:37:34 <elliott> (I think you can't define variables without it)
08:37:35 <CakeProphet> expressions are lazily evaluated, so there isn't really a definite order of evaluation
08:37:48 <elliott> CakeProphet: s/lazily/non-strictly/.
08:38:04 <monqy> aspect: sometimes it's more natural/readable to have the defintions first...sometimes it isn't
08:38:24 <monqy> aspect: a lot of the time I want the high-level picture first with the implementation details and helper functions after it
08:38:34 <elliott> let...in is never idiomatic in haskell imo
08:38:57 <monqy> I use let...in for pattern-matching chains
08:39:03 <aspect> monqy: there are idioms. I never read academic papers top to bottom, for example, often the same is true of programs
08:39:10 <aspect> perhaps the ones I'm used to don't work here though
08:39:28 <aspect> like having operators that resemble what people might have seen elsewhere in the world and are less than three symbols long :)
08:39:32 <CakeProphet> > let y = undefined; x = f x in x
08:39:32 <lambdabot> Ambiguous type variable `a' in the constraints:
08:39:33 <lambdabot> `GHC.Show.Show a'
08:39:33 <lambdabot> a...
08:39:39 <CakeProphet> > let y = undefined; x = f x in x :: Expr
08:39:40 <lambdabot> f (f (f (f (f (f (f (f (f (f (f (f (f (f (f (f (f (f (f (f (f (f (f (f (f (...
08:40:00 <monqy> aspect: "people can skip around" is not reason to say you shouldn't strive to make things natural/sensible/easy to read and understand
08:40:31 <monqy> it'd be awful to have a bunch of helper functions before the real stuff
08:40:47 <CakeProphet> I could probably rewrite palindromes to be more readable but I prefer the concise code.
08:40:57 <CakeProphet> monqy: see: Python
08:41:03 <CakeProphet> well, sometimes.
08:41:10 <monqy> CakeProphet: a pity it's not very concise :(
08:41:17 <CakeProphet> monqy: could it be more concise?
08:41:21 <monqy> perhaps!
08:42:09 <CakeProphet> @pl joinMirrors x y = (x++y) : map ((x++).(:y)) alphabet
08:42:09 <lambdabot> joinMirrors = ap (ap . ((:) .) . (++)) (flip flip alphabet . (map .) . (. flip (:)) . (.) . (++))
08:42:14 <CakeProphet> we're not friends anymore pl
08:42:18 <monqy> ;_;
08:42:55 <CakeProphet> I think that's the best mixture of concise/readable that I can think of.
08:43:03 <CakeProphet> I had joinMirrors as a lambda originally
08:43:57 <monqy> > let palindromes alphabet = fmap (join $ (++) . reverse) ([0..] >>= (`replicateM` alphabet)) in palindromes "abc"
08:43:59 <lambdabot> ["","aa","bb","cc","aaaa","baab","caac","abba","bbbb","cbbc","acca","bccb",...
08:44:05 -!- zzo38 has left.
08:44:07 <monqy> oops
08:44:16 <monqy> that's only evens
08:44:24 <CakeProphet> yep.
08:45:03 <CakeProphet> that's close to what I had originally though.
08:45:11 <CakeProphet> and then I realized I also needed the odd ones.
08:45:18 <CakeProphet> which is what joinMirrors does.
08:47:44 <CakeProphet> @unpl (++) . reverse
08:47:44 <lambdabot> (\ c -> (++) (reverse c))
08:48:01 <CakeProphet> hmmm, I could use . instead of ap
08:48:07 <CakeProphet> I think.
08:48:39 <CakeProphet> @unpl flip ap (++) reverse
08:48:40 <lambdabot> (reverse >>= \ e -> (++) >>= \ d -> return (e d))
08:48:50 <CakeProphet> @unpl flip <*> (++) reverse
08:48:51 <lambdabot> ((\ a b c -> a c b) <*> ((++) reverse))
08:48:55 <CakeProphet> ..
08:51:35 <monqy> hm?
08:52:46 <CakeProphet> nothing.
08:55:18 <CakeProphet> monqy: bahahaha you cannot make my code better.
08:55:32 <monqy> hm????
08:55:40 <CakeProphet> I challenge you.
08:55:42 <CakeProphet> to do it.
08:56:43 <elliott> ?pl join (f `fmap` x `ap` y)
08:56:43 <lambdabot> join (liftM2 f x y)
08:56:47 <elliott> oerjan: he;lp
08:57:07 <elliott> ?pl join (f `fmap` x `ap` return y)
08:57:07 <lambdabot> join (liftM2 f x (return y))
08:57:27 <monqy> idiom brackest time???
08:58:40 <CakeProphet> elliott: also, a delayed reply to your s/// above: is there a difference between lazy and non-strict
08:58:46 <CakeProphet> +?
08:58:47 <elliott> yes.
08:58:55 <elliott> call by name is non-strict, for instance.
08:59:18 <CakeProphet> so Haskell is not call-by-need?
08:59:30 <elliott> no. GHC is.
08:59:42 <elliott> GHC is specifically call-by-need with sharing.
08:59:49 <elliott> oerjan: (with sharing isn't implicit there, right?)
09:00:10 <CakeProphet> so the Haskell Report only specifies non-strict?
09:00:13 <oerjan> call-by-need implies sharing, i think
09:00:26 <oerjan> otherwise it's just call-by-name
09:00:28 <CakeProphet> call-by-need = lazy evaluation
09:00:32 <elliott> monqy: so i sketched up... what i think might be a very zepto... thing...
09:00:37 <CakeProphet> which implies sharing.
09:00:41 <monqy> ooh?
09:01:11 <elliott> monqy: it... may SHOCK you...
09:01:23 <elliott> http://sprunge.us/WheA
09:02:17 <monqy> zepto
09:02:29 <elliott> monqy: oh good... i thought... you would reject it...
09:02:32 <elliott> for its SYNTAX...
09:02:38 -!- BeholdMyGlory has quit (Ping timeout: 258 seconds).
09:02:41 <elliott> but the rules... are simple... (I think...)
09:02:52 <oerjan> > forM [tail, id] (join . (++) . reverse .) =<< (`replicateM` alphabet) =<< [1..]
09:02:53 <lambdabot> The operator `L..' [infixr 9] of a section
09:02:53 <lambdabot> must have lower precedence ...
09:02:56 <elliott> although a weird thing there is that => isn't actually done as abinary operator...
09:03:03 <elliott> while + and times are
09:03:05 <monqy> the only part of the syntax I'm iffy about is the special syntax for cons
09:03:05 <oerjan> argh wrong way
09:03:13 <oerjan> > forM [tail, id] ((join . (++) . reverse) .) =<< (`replicateM` alphabet) =<< [1..]
09:03:14 <lambdabot> Not in scope: `alphabet'
09:03:21 <elliott> monqy: it's actually special syntax for (list ...)
09:03:24 <oerjan> > forM [tail, id] ((join . (++) . reverse) .) =<< (`replicateM` "abcd") =<< [1..]
09:03:26 <lambdabot> Occurs check: cannot construct the infinite type: m = (->) (m a)
09:03:26 <monqy> or are all constructors in []
09:03:31 <oerjan> gah!
09:03:33 <CakeProphet> so basically what I'm learning from this class is that software engineering is a neat way to waste a lot of time not writing code.
09:03:33 <elliott> monqy: http://arcanesentiment.blogspot.com/2011/08/why-use-keywords-as-symbols.html inspired me a bit
09:03:37 <elliott> monqy: basically quote isn't very usable
09:03:46 <elliott> you just want a constructor, and all _sub_expression arguments to be evaluated, usually
09:03:55 <elliott> so [(+ 9 9)] is (list (+ 9 9))
09:04:11 <elliott> [a b c . xs] is (lolreplacenilwith xs (list a b c))
09:04:59 -!- BeholdMyGlory has joined.
09:05:04 <oerjan> :t forM [tail, id] ((join . (++) . reverse) .)
09:05:05 <lambdabot> Occurs check: cannot construct the infinite type: m = (->) (m a)
09:05:05 <lambdabot> Probable cause: `++' is applied to too few arguments
09:05:05 <lambdabot> In the first argument of `(.)', namely `(++)'
09:05:08 <monqy> oh so lists aren't constructed normally?
09:05:59 <elliott> monqy: eh?
09:06:07 <elliott> the point is that [...] isn't '(...)
09:06:09 <monqy> i tried describing what i meant but that didn't work
09:06:11 <elliott> it's more like (list ...)
09:06:15 <elliott> all sub-expressions are evaluated
09:06:25 <monqy> my gripe was a bit different...
09:06:27 <monqy> than that
09:06:28 <elliott> go on then
09:06:43 <oerjan> :t forM [tail, id] ((ap . (++) . reverse) .)
09:06:44 <lambdabot> Couldn't match expected type `a -> b' against inferred type `[a1]'
09:06:44 <lambdabot> In the second argument of `(.)', namely `reverse'
09:06:44 <lambdabot> In the second argument of `(.)', namely `(++) . reverse'
09:07:30 <monqy> well i guess it depends on how zepto handles its analogue to haskell data types, which I assumed it has, from the pattern matching
09:07:52 <oerjan> :t forM [tail, id] (ap . (++) . reverse)
09:07:53 <lambdabot> Couldn't match expected type `[a] -> [a]'
09:07:53 <lambdabot> against inferred type `[a1]'
09:07:53 <lambdabot> In the second argument of `(.)', namely `reverse'
09:08:11 <elliott> monqy: i'm not really decided on data types
09:08:15 <monqy> ah
09:08:21 <elliott> monqy: but yes, pattern matching on constructors will work "haskell-style"
09:08:26 <oerjan> :t ((ap . (++) . reverse) .)
09:08:27 <lambdabot> Couldn't match expected type `a -> b' against inferred type `[a1]'
09:08:27 <lambdabot> In the second argument of `(.)', namely `reverse'
09:08:27 <lambdabot> In the second argument of `(.)', namely `(++) . reverse'
09:08:41 <oerjan> :t (((++) . reverse) .)
09:08:42 <lambdabot> forall a (f :: * -> *). (Functor f) => f [a] -> f ([a] -> [a])
09:08:52 <elliott> monqy: also everything is immutable
09:08:57 <monqy> then I don't see why (Cons x xs) must be written specially as [x . xs] unless ther'es something really special important about lists
09:09:00 <monqy> immutability is good
09:09:01 <elliott> and maybe even typed???
09:09:09 <elliott> monqy: look further down
09:09:09 <elliott> [c '=> e] . rest =>
09:09:11 <elliott> that's list syntax
09:09:14 <elliott> you can write
09:09:15 <elliott> def foo
09:09:19 <elliott> [a b c] => a + b + c
09:09:22 <elliott> or
09:09:23 <elliott> def foo
09:09:31 <elliott> [a b c . rest] => a + b + c + sum rest
09:09:41 <elliott> [x . xs] is just a special case of one element before the dot
09:10:56 <monqy> ok...special cases sort of make me sad though...also how is [x . xs] different from a single-element list with a list inside of it, where x is the first element and xs is the rest of the elements
09:11:14 <monqy> or did i misinterpret 'special case'
09:11:17 <elliott> you misinterpreted
09:11:18 <elliott> i meant that
09:11:19 <elliott> [x . xs]
09:11:20 <oerjan> :t (ap ((++) . reverse))
09:11:20 <lambdabot> forall a. ([a] -> [a]) -> [a] -> [a]
09:11:22 <elliott> is NOT SPECIAL SYNTAX
09:11:25 <elliott> it is just a special case of list syntax
09:11:37 <elliott> "also how is [x . xs] different from a single-element list with a list inside of it, where x is the first element and xs is the rest of the elements"
09:11:40 <elliott> because that's not how you write it at all?
09:11:43 <elliott> show me a scheme where
09:11:44 <elliott> 0 . 9
09:11:47 <elliott> produces the pair (0 . 9)
09:11:54 <oerjan> :t forM [tail, id] (ap ((++) . reverse))
09:11:55 <lambdabot> forall a. [a] -> [[a]]
09:12:14 <oerjan> > forM [tail, id] (ap ((++) . reverse))) =<< (`replicateM` "abc") =<< [1..]
09:12:15 <lambdabot> <no location info>: parse error on input `)'
09:12:25 <oerjan> > forM [tail, id] (ap ((++) . reverse)) =<< (`replicateM` "abc") =<< [1..]
09:12:27 <lambdabot> ["a","aa","b","bb","c","cc","aaa","aaaa","bab","baab","cac","caac","aba","a...
09:12:29 <monqy> elliott: ???
09:12:35 <elliott> monqy: ugh
09:12:42 <monqy> ugh???
09:12:46 <elliott> monqy: what is your complaint? you haven't said anything that makes sense
09:12:47 <oerjan> CakeProphet: \o/
09:12:48 <myndzi> |
09:12:48 <myndzi> /|
09:13:17 <CakeProphet> oerjan: I'm not even sure I understand how that works...
09:13:37 <monqy> what oerjan did looks like what I was working on
09:13:47 <monqy> but a bit different
09:15:15 <elliott> monqy: seriously, it sounds to me like you incredibly misunderstand list syntax
09:15:21 <elliott> do you understand how this might work:
09:15:25 <elliott> (list 'a 'b 'c)
09:15:25 <elliott> ?
09:16:22 <oerjan> CakeProphet: lots of -> Monad
09:16:24 <monqy> oh i see what you were saying. 'special' threw me off.
09:16:35 <elliott> and then see how this might work
09:16:37 <elliott> (list 'a 'b 'c . 'd)
09:16:38 <CakeProphet> oerjan: I'm just bad at composition still :P
09:16:39 <elliott> then contract
09:16:42 <elliott> (list 'a . 'd)
09:16:44 <elliott> ['a . 'd]
09:16:47 <elliott> but pattern match
09:16:48 <elliott> [x . xs]
09:17:01 <oerjan> CakeProphet: well you may have noted all the errors i had underway >_<
09:17:25 <CakeProphet> oerjan: why tail?
09:17:34 <elliott> monqy: does it make sense now?
09:17:40 <monqy> (as i usually use "special case" to mean a case that's handled specially, and just "case" when it's a single normally-handled case)
09:17:44 <monqy> i think so?
09:17:47 <elliott> good :P
09:17:59 <oerjan> CakeProphet: to get the odd ones by removing the first element of what's appended
09:18:22 <CakeProphet> ....huh. okay.
09:18:28 <CakeProphet> I noticed yours has a different ordering so I guess that's why.
09:18:59 <monqy> actually there is one thing that's throwing me off
09:19:12 <monqy> about lists
09:19:30 <elliott> monqy: go on
09:19:45 <monqy> in map you have [f x . map f xs] but elsewhere you seem to use spaces to separate list elements?
09:20:07 <CakeProphet> I believe . is like : in Haskell and space is like , sort of
09:20:09 <elliott> hm yes. that's an error
09:20:14 <elliott> should be [(f x) . map f xs]
09:20:17 <monqy> CakeProphet: you're wrong
09:20:20 <elliott> (the spaces don't matter after a . for obvious reasons)
09:20:49 <elliott> monqy: incidentally I think pairs are isomorphic to size-two vectors; [a . b . c . d] making a size-four vector
09:20:53 <elliott> not decided on that though
09:22:29 <oerjan> CakeProphet: space is only like , if there are no .'s. if there is a . then both it and the spaces are like :
09:22:59 <elliott> oerjan: wat
09:23:01 <oerjan> oh and also the bracketing changes
09:23:19 <oerjan> (a b c) -- [a,b,c] but (a b . c) -- a : b : c
09:23:39 <CakeProphet> (a b c) in a pattern is like (a:b:c:_) I think?
09:23:51 <CakeProphet> maybe I'm not really paying attention. :P
09:23:53 <monqy> in when, is | alternative syntax for putting the pattern on the next line? And in cond, is nothing as a pattern the same as []?
09:24:05 <oerjan> i don't know lisp/scheme patterns, if they even have any
09:24:19 <oerjan> standard that is.
09:25:06 <elliott> monqy: | is just like dollar sign in haskell
09:25:07 <elliott> basically
09:25:07 -!- GreaseMonkey has quit (Quit: The Other Game).
09:25:08 <elliott> f | x
09:25:09 <elliott> is
09:25:10 <elliott> f
09:25:10 <elliott> x
09:25:15 <elliott> except that
09:25:16 <elliott> f | x
09:25:17 <elliott> y
09:25:18 <elliott> is
09:25:19 <elliott> f
09:25:21 <elliott> x
09:25:22 <elliott> y
09:25:24 <elliott> you get the idea
09:25:33 <elliott> it fakes an additional layer of nesting/indentation
09:25:36 <elliott> and no, nothing is not the same as []
09:25:40 <elliott> nothing handles the 0-argument case
09:26:07 <monqy> oh the other case isn't matching on lists then I guess
09:26:24 <monqy> that was part of what threw me off about list syntax and then I forgot about it
09:27:20 <elliott> it's matching on a list, followed by other arguments
09:27:27 <CakeProphet> help make dupdog TC
09:28:01 <CakeProphet> my professor just said that object code is a living thing you can date.
09:28:50 <monqy> elliott: I meant the matching on arguments. So I guess it's like list syntax but without brackets?
09:28:56 <monqy> elliott: the syntax, I mean
09:28:58 <monqy> CakeProphet: what
09:29:01 <oerjan> CakeProphet: tell your professor not to bring his ...preferences... into the class.
09:29:06 <elliott> monqy: in that all pattern matching is like list pattern matching, yse.
09:29:08 <elliott> yes.
09:29:22 <monqy> ah, that's nice and good
09:29:44 <CakeProphet> she was talking about "artifacts" in software engineering. an artifact being something that's produced as the result of an "activity". she said object code is a tangible, living thing
09:29:51 <CakeProphet> and then said you can date, as in.... put a date on it.
09:29:56 <CakeProphet> but out of context it is quite hilarious.
09:30:17 <CakeProphet> I'm not sure why she said living though.
09:30:58 <oerjan> she's just preferring you for your robot overlords
09:31:01 <monqy> elliott: what does eval do?
09:31:07 <CakeProphet> basically this is a terrible class and I'm probably going to fail it.
09:31:53 <monqy> I do not understand this class
09:32:34 <monqy> and I do not understand what she was trying to say
09:32:38 <CakeProphet> it's basically a class about all of the boring job-related planning stuff that isn't programming.
09:32:56 <CakeProphet> most of it is meaningless to me, as well.
09:32:57 <monqy> yucke
09:32:58 <elliott> monqy: what do you think it does
09:33:08 <monqy> elliott: evals??? who knmows.....
09:33:14 <CakeProphet> I bet it evals somethingt.
09:34:29 <monqy> my guess as to what it does doesn't jive with it being in cond
09:36:02 <CakeProphet> here are some questions I have to answer: 1. What is a RFP? 2. Explain a WBS 3. Explain a forever client 4. Name two informational data shown in a PERT 5. Name two informational data shown in a GANT 6. What do you understand about planning activities?
09:36:07 <CakeProphet> meaningless. acronym. meltdown.
09:36:10 <elliott> monqy: note how cond is defined with fexpr
09:36:14 <elliott> well defexpr but
09:36:37 <monqy> oh fexprs
09:36:49 <monqy> I don't know much about those :(
09:37:03 <elliott> monqy: exactly like a function, but gets called by name
09:37:09 <CakeProphet> why can't I just vomit code and not worry about this stuff? :(
09:37:09 <fizzie> I went through one of those "software development" courses too; it was mandatory for the telecommunications minor I accidentally got.
09:37:10 <elliott> as in, all parameters are the AST, not their evaluated form
09:37:21 <CakeProphet> fizzie: mandatory for my CS major.
09:37:27 <elliott> things you get: non-confusing macro declarations, hygiene for free, no abstraction leak of compile vs. runtime
09:38:38 <monqy> so why is e the only thing that gets evaled? im confue
09:38:59 <elliott> why not?
09:39:09 <elliott> do you _know_ what cond does?
09:39:13 <fizzie> CakeProphet: It was notable for asking several questions of the form "[a question], according to Mr X?" in the exam; where Mr X was one of the half a dozen visiting lecturers (mostly) from the Industry.
09:39:14 <monqy> maybe not
09:39:29 <monqy> I thought I knew what it did though.....
09:39:51 <fizzie> So that you couldn't give a justified answer; you just had to know what $some_random_dude thinks of it.
09:40:33 <monqy> :(
09:40:51 -!- kmc has quit (Quit: Leaving).
09:44:58 <fizzie> "Documentation and evaluation of software architectures according to Mr. Juha Savolainen."
09:45:07 <fizzie> I see that latter exams on that course have been slightly more sensible.
09:45:53 <elliott> monqy: (cond (a => b) (c => d)) === (if a b (if c d))
09:45:57 <CakeProphet> ....she never explains what a request for proposal is... how am I suppose to answer this question.
09:46:10 <CakeProphet> TO WIKIPEDIA
09:46:14 -!- DH____ has quit (Read error: Connection reset by peer).
09:46:20 <monqy> elliott: that's what I thought. recently I realized I might have been thinking of eval incorrectly though
09:46:24 -!- DH____ has joined.
09:46:27 <elliott> eval is just eval
09:46:29 <elliott> (eval 'x) === x
09:46:34 <elliott> (eval '(print 99)) prints 99
09:46:37 <fizzie> It's when you request that someone makes a proposal.
09:46:48 <monqy> elliott: where by realized I mean I always had the suspicion but I realized another thing it could be--oh I had the right idea about it originalkly????
09:46:54 <monqy> now im confused again
09:47:32 <monqy> CakeProphet: is it not when you request that someone makes a proposal?
09:47:45 <elliott> monqy: do you understand fexprs?
09:47:50 <elliott> monqy: ok let me put it this way
09:47:52 <CakeProphet> well, I assumed she would want something more specific.
09:47:53 <monqy> 02:37:58 < monqy> oh fexprs
09:47:53 <monqy> 02:38:10 < monqy> I don't know much about those :(
09:47:57 <elliott> monqy: if we used "e" directly
09:47:58 <elliott> rather than eval e
09:47:59 <elliott> then
09:48:06 <elliott> (cond (truething => (print 99))
09:48:07 <elliott> would return the list
09:48:08 <elliott> (print 99)
09:48:10 <elliott> rather than printing 99
09:48:18 <elliott> because
09:48:22 <elliott> (cond (truething => (print 99))
09:48:25 <elliott> passes the LIST
09:48:28 <elliott> (truething => (print 99))
09:48:29 <elliott> to cond
09:48:34 <elliott> _no_ evaluation of arguments is done
09:48:40 <monqy> right i knew that much
09:49:16 <elliott> so why do you think eval should not be called?
09:49:23 <elliott> i mean
09:49:27 <elliott> why do you not understand why eval is called?
09:49:30 <CakeProphet> A work breakdown structure (WBS) in project management and systems engineering, is a deliverable oriented decomposition of a project into smaller components.
09:49:33 <CakeProphet> uuuuuuugh
09:49:38 <elliott> note that _everything_ is runtime, there is no need to recourse to any macro-related thinking
09:49:43 <CakeProphet> can I please just write a bunch of code instead of doing this stuff?
09:49:43 <monqy> right right
09:49:47 <elliott> and indeed lambdas are totally implementable on top of fexprs, you just evaluate every arg and pass it on
09:51:10 <monqy> elliott: I'm confused because eval is not used in any other instance in which values are introduced
09:51:22 <elliott> monqy: cond is the only fexpr in that file.
09:51:25 <elliott> the rest are all functions.
09:51:33 <monqy> except for when?
09:51:48 <CakeProphet> you only need to eval things that are quoted.
09:51:49 <monqy> also, is c not a value?
09:51:58 <CakeProphet> otherwise it is already evaluated.
09:52:03 <elliott> <monqy> except for when?
09:52:04 <elliott> erm right
09:52:05 <monqy> CakeProphet: are you paying attention
09:52:07 <CakeProphet> no
09:52:10 <elliott> oh hm i may have fucked up when
09:52:26 <elliott> monqy: ok yeah i apologise deeply
09:52:28 <elliott> defexpr when | cond . body =>
09:52:29 <elliott> if cond
09:52:29 <elliott> body
09:52:29 <elliott> #void
09:52:29 <elliott> should be
09:52:31 <elliott> defexpr when | cond . body =>
09:52:33 <elliott> if cond
09:52:35 <elliott> eval body
09:52:37 <elliott> #void
09:52:45 <monqy> ah ok
09:53:14 <monqy> and if handles eval on cond? or am I going the wrong way here
09:53:30 <elliott> oh oops
09:53:36 <elliott> defexpr when | cond . body =>
09:53:36 <elliott> if (eval cond)
09:53:37 <elliott> eval body
09:53:37 <elliott> #void
09:53:38 <elliott> i'm not very awake :)
09:53:43 <monqy> ok it all makes sense now
09:53:52 <elliott> yeah this is all my fault :( sorry for being impatient
09:54:09 <elliott> even cond is broken
09:54:11 <elliott> missing eval on the c
09:54:12 <elliott> eugh
09:54:29 -!- Jafet has joined.
09:56:23 <CakeProphet> Haskell > Scheme
09:56:36 <monqy> except when it isn't
09:56:39 <Jafet> If ordered by size.
09:56:50 <monqy> hehehe
09:56:56 <CakeProphet> eh eh eh
09:57:00 <CakeProphet> bleigh!
09:57:10 * CakeProphet covers his face with a cape.
09:57:16 * CakeProphet turns into a bat and disappears.
09:57:28 <monqy> bye
09:58:15 <CakeProphet> my professor just said depictiated.
09:59:34 <fizzie> > "Haskell" > "Scheme"
09:59:34 <lambdabot> False
09:59:35 <monqy> training for the work environment
09:59:44 <fizzie> Even the Haskell-bot agrees.
10:00:04 <fizzie> (That it's not.)
10:00:15 <CakeProphet> don't forget to dequote those.
10:00:24 <CakeProphet> otherwise you're just comparing strings.
10:01:12 <CakeProphet> http://www.ratemyprofessors.com/ShowRatings.jsp?tid=406506 "I can depictiate her obiquous senergy." bahahahahaha
10:01:50 <monqy> !haskell data Language=Haskell|Scheme deriving(Eq,Ord);main=print$Haskell>Scheme
10:01:57 <EgoBot> False
10:02:37 <Jafet> "I'm not a schemer. I try to show the schemers how pathetic their attempts to control things really are."
10:03:48 <monqy> CakeProphet: good reviews
10:03:55 <monqy> CakeProphet: especially that one
10:04:56 <monqy> CakeProphet: she doesn't sound like such a good professor
10:05:02 <CakeProphet> I am receiving reverse education.
10:05:20 <CakeProphet> I've only had maybe 3 good professors so far.
10:05:55 <fizzie> I don't think there's any ratings for our school anywhere. :/
10:06:03 <CakeProphet> my discrete math teacher was fuckign amazing. I will be taking him again for advanced mathematics and topology
10:06:14 <elliott> Aha, the fizzie RETURNS.
10:06:17 <elliott> <fizzie> oh no,
10:06:24 <fizzie> Oh no.
10:06:40 <CakeProphet> thanks to Dr. Griffiths I can now count things like mad.
10:06:42 <elliott> <fiz,oh,NO >
10:06:44 <fizzie> Oh, look at the time, I think I need to be going, bye.
10:06:54 <fizzie> Going, uh, somewhere.
10:06:56 <fizzie> Over there.
10:06:57 <fizzie> Bye.
10:07:55 <elliott> fizzie: Hi.
10:08:02 <fizzie> http://www.math.upenn.edu/~wilf/DownldGF.html <- that's a nice book if you want to pretend you're counting things.
10:08:08 <CakeProphet> @let subset x s = filterM (const [True, False]) s `elem` x
10:08:09 <lambdabot> Defined.
10:08:24 <CakeProphet> :t subset
10:08:24 <lambdabot> forall a. (Eq a) => [[[a]]] -> [a] -> Bool
10:08:28 <CakeProphet> ....no
10:08:34 <CakeProphet> @undefine
10:08:44 <elliott> fizzie: SO ABOUT DEM MCMAPS
10:08:54 <fizzie> (Also "generatingfunctionology" is an awesome name.)
10:08:58 <monqy> generatingfunctionology
10:09:01 <monqy> yes
10:09:05 <CakeProphet> @let subset x s = x `elem` filterM (const [True, False]) s
10:09:05 <lambdabot> Defined.
10:09:07 <CakeProphet> :t subset
10:09:08 <lambdabot> forall a. (Eq a) => [a] -> [a] -> Bool
10:09:18 <CakeProphet> > subset [2,3] [1,2,3]
10:09:19 <lambdabot> True
10:09:57 <oerjan> > subset [2,1] [1,2,3] -- *whistles innocently*
10:09:58 <lambdabot> False
10:10:08 <CakeProphet> OH WHAT NOW?
10:10:10 <monqy> hehehehehe
10:10:19 <elliott> what does it mean to be frend
10:10:26 <CakeProphet> help list is not set?
10:10:58 <monqy> > let subset x s = all (`elem` s) x in subset [2,1] [1,2,3]
10:10:58 <lambdabot> True
10:11:12 <CakeProphet> not as elegunt
10:11:17 <monqy> more elegant
10:11:20 <CakeProphet> noep
10:11:27 <monqy> oyurs is disgusteing
10:11:43 <CakeProphet> better mathemathecally
10:11:44 <elliott> ?pl \x s -> all (`elem` s) x
10:11:44 <lambdabot> flip (all . flip elem)
10:11:44 <monqy> mine even reads naturally......
10:12:45 <CakeProphet> power sets are more powerful
10:13:53 <CakeProphet> > let subset x s = x `elem` (filterM (const [True, False]) . nub . permutations s) in subset [2,1] [1,2,3]
10:13:54 <lambdabot> No instance for (GHC.Num.Num [a])
10:13:54 <lambdabot> arising from the literal `2' at <inter...
10:13:57 <CakeProphet> :(
10:14:24 <CakeProphet> > let subset x s = x `elem` (filterM (const [True, False]) . nub . permutations $ s) in subset [2,1] [1,2,3]
10:14:25 <lambdabot> No instance for (GHC.Num.Num [a])
10:14:25 <lambdabot> arising from the literal `2' at <inter...
10:14:28 <CakeProphet> :(
10:14:59 <CakeProphet> man that sure is a bad idea. :P
10:15:06 <monqy> instead of nubbing permuations......what if you did......conversitons to sets.......and maybe even back to lists again (but this time nubbed and sorted).......what then.........
10:15:11 <CakeProphet> :(nope
10:15:15 <monqy> ;_;
10:15:33 <CakeProphet> > let subset x s = x `elem` (filterM (const [True, False]) s =<< nub . permutations) in subset [2,1] [1,2,3]
10:15:34 <lambdabot> Couldn't match expected type `a -> GHC.Bool.Bool'
10:15:34 <lambdabot> against inferred ...
10:15:37 <CakeProphet> baaaah
10:15:40 <monqy> if you want it for Eq not Ord just go with my definition it's the best (thumbs up)
10:15:44 <CakeProphet> > let subset x s = x `elem` (filterM (const [True, False]) s >>= nub . permutations) in subset [2,1] [1,2,3]
10:15:46 <lambdabot> True
10:15:48 <CakeProphet> weeee
10:16:08 <CakeProphet> mine is more efficient though.
10:16:24 <monqy> good one
10:16:41 <monqy> nub . permutations: efficient function for efficient people
10:16:59 <CakeProphet> filterM (const [True, False]) and >>= for lists are all very efficient.
10:17:05 <CakeProphet> > let subset x s = x `elem` (filterM (const [True, False]) s >>= nub . permutations) in subset [2,1] [1,2,3..1000]
10:17:06 <lambdabot> <no location info>: parse error on input `..'
10:17:11 <CakeProphet> > let subset x s = x `elem` (filterM (const [True, False]) s >>= nub . permutations) in subset [2,1] [1..1000]
10:17:15 <lambdabot> mueval-core: Time limit exceeded
10:17:21 <monqy> but beyond that it's a mess of inefficiency
10:17:24 <CakeProphet> what? nonbelievable!?
10:17:45 <monqy> > let subset x s = all (`elem` s) x in subset [2,1] [1..1000]
10:17:45 <lambdabot> True
10:17:48 <monqy> 8)
10:18:28 <CakeProphet> > 2 ^ 1000
10:18:28 <lambdabot> 107150860718626732094842504906000181056140481170553360744375038837035105112...
10:18:39 <CakeProphet> ...and that's not counting the permutations.
10:19:40 <CakeProphet> that's just the elements of the power set of [1..1000]
10:21:25 <elliott> Does anyone know the intricacies of exec?
10:21:55 <fizzie> Does any man really know that. A question for the ages.
10:22:07 <monqy> A generating function is a clothesline on which we hang up a sequence
10:22:07 <monqy> of numbers for display.
10:22:17 <elliott> fizzie: Good question.
10:22:27 <elliott> Really I'm just trying to figure out how easy it is to implement an //upgrade in mcmap.
10:22:28 <monqy> i am laughing too much
10:22:29 <oerjan> > product [1..1000]
10:22:30 <lambdabot> 402387260077093773543702433923003985719374864210714632543799910429938512398...
10:23:24 <fizzie> The "exec without closing sockets" is a nifty trick, but are you absolutely sure people's mcmap sessions are really that long-running?
10:23:34 <CakeProphet> > 2 ^ (product [1..1000])
10:23:52 <lambdabot> thread killed
10:24:19 <elliott> fizzie: Well, no. But let's face it, it'll require a couple dozen lines of code at most, and it is _so_ _cool_.
10:24:35 <elliott> fizzie: I mean, as an mcmap developer, I would very much like to be able to test my changes without restarting and reconnecting. :p
10:24:46 <elliott> I suspect people might want to test their ~/.mcmap/init.scm changes just as easily.
10:24:49 <elliott> 'Slike emacs.
10:25:14 <fizzie> Yesssss.... but I don't think reloading the Scheme config necessitates a real restart, does it?
10:25:39 <CakeProphet> surely I must have some kind of talent for writing non-trivially inefficient code.
10:25:52 <monqy> CakeProphet: what
10:26:01 <elliott> fizzie: Well, no, but (a) having removed variables and the like staying around, and things like it re-registering hooks, is totally annoying. And re-initialising the Scheme interpreter from scratch is not really a thing that's possible, to my knowledge. Plus, (b), mcmap "starts" so quickly that an exec + jump into the main code is both cleaner and perfectly fast.
10:26:27 <elliott> I know Windows doesn't have fork, but does it have the right kind of exec?
10:26:28 <CakeProphet> monqy: O(2^n!) for list subset.
10:26:45 <CakeProphet> well, worst case.
10:27:07 <fizzie> elliott: It'll forget all the stored world-tiles until someone does the regionfile persistence right; then you don't actually see the map until you move real far, since the server won't resend the tiles.
10:27:18 <monqy> CakeProphet: by non-trivially inefficient do you mean "inefficient by a nontrivial amount" or "inefficient in a manner that is not trivial in some way (please specify way)"
10:27:24 <fizzie> Our university logo is a randomly selected from the three alternatives A! A? A" (and randomly of three alternative colors for the punctuation) -- some people have posed the question that since A! (factorial of A) equals A" (the second derivative of A), what is A?
10:27:39 <fizzie> http://users.ics.tkk.fi/htkallas/aalto.jpg -- this is unfortunately only in Finnish.
10:27:41 <elliott> fizzie: Well, the regionfile persistence is at least half-done, isn't it?
10:27:43 <CakeProphet> monqy: second, as in I'm not just adding stupid computation steps that are not directly related to the goal.
10:28:02 <elliott> And it's not like mcmap has much other state that you wouldn't _want_ to be reset.
10:28:25 <fizzie> elliott: Current map mode!
10:28:45 <elliott> fizzie: So that's one command-line argument. :p
10:28:51 <fizzie> Current Y-level for the non-following cross-section map.
10:28:58 <fizzie> Current lights-on/off/night mode.
10:29:04 <fizzie> These are all Important Things.
10:29:09 <elliott> fizzie: That's all "map shit"; it can be packed up into like three arguments.
10:29:29 -!- oerjan has quit (Quit: Later).
10:29:41 <fizzie> Also the current window size and position.
10:29:51 <fizzie> (Assuming you've dragged it somewhere.)
10:29:59 <elliott> That... is not really problematic to lose. :p
10:30:05 <elliott> fizzie: Obviously a "proper" state-sending mechanism would be nicer, but I don't see you writing that. :P
10:30:14 <fizzie> It makes the reload non-seamless, that's all it is.
10:30:32 <fizzie> Current "it's been moved to the floating layer from the tiled layer" state that you can't actually persist in any way from within the program.
10:30:59 <fizzie> (Well, except by keeping the window open, but that doesn't sound doable.)
10:31:51 <elliott> Well, if windows were sockets...
10:32:38 <fizzie> The X connection is a socket; it's just that I don't think SDL makes keeping it alive a possibility.
10:33:10 <elliott> We could try and hide the fact that we're "quitting" from SDL.
10:33:14 <elliott> Then memory-write-in the fd.
10:34:48 <elliott> I like how you can't actually get at the sockets from outside of the proxy.
10:34:50 <CakeProphet> the sun never sets on the haskell british empire.
10:34:55 <CakeProphet> ":?>
10:34:55 <CakeProphet> 1
10:35:31 <monqy> doesn't have the same ring to it
10:37:38 <elliott> Wow, that crap compiled cleanly /first time/?
10:37:48 <elliott> fizzie: Inca-dentistry (god I love that), irssi does this same hacky stuff.
10:37:50 <CakeProphet> don't be deceived.
10:38:00 <elliott> fizzie: Try /upgrade.
10:38:02 <fizzie> elliott: I know, I know.
10:38:03 <elliott> "Upgrade irssi to new version on-the-fly without disconnecting from server, so other people won't even notice you quit from IRC. This ONLY executes the new binary, it does NOT download/compile/whatever irssi."
10:38:18 <fizzie> elliott: It loses the scrollback buffer state too. :p
10:38:23 <fizzie> (There's a perl script to fix that.)
10:38:27 <elliott> hahaha.
10:38:34 <elliott> Maybe we need a Scheme script to persist window crap.
10:38:42 <elliott> Have I mentioned how easy this would be with @?
10:38:45 <CakeProphet> no perl is the only tool for hacks.
10:39:30 -!- derdon has joined.
10:40:10 <CakeProphet> elliott: just use your Haskell perl interpreter thing? or wait, this is all scheme right?
10:40:28 <monqy> wh
10:40:51 <CakeProphet> write a perl interpreter macro.
10:41:03 <elliott> yuore uppsetting my CakeProphet
10:41:11 <elliott> int err = execl(argv0, argv0, "--upgrade", g_strdup_printf("%d", sock_cli), g_strdup_printf("%d", sock_srv), NULL);
10:41:13 <monqy> CakeProphet: mcmap is in c
10:41:13 <fizzie> elliott: As for Windows, no, I don't think it has the proper sort of exec; it's all by CreateProcess there. But at least for files you can specify SECURITY_ATTRIBUTES that let the handle be inherited by child processes; presumably that could be possible for sockets *somehow*.
10:41:14 <elliott> fizzie: Look at my production-quality code.
10:41:28 <monqy> CakeProphet: its scriptextended with guile scheme
10:41:40 <elliott> 11:42:14 [DIED] Failed to set video mode: Invalid width or height
10:41:42 <elliott> Well, it's a start.
10:41:53 <fizzie> elliott: At least do (char *)NULL for the final value. (The absolutely most important problem!)
10:42:37 <fizzie> (Unless vararg function argument promotion thing made void * the right thing; not absolutely sure here.)
10:42:45 <elliott> fizzie: I, um, eh?
10:42:56 <elliott> 11:43:31 [DIED] Unknown packet id: 0x5a
10:43:00 <elliott> fizzie: Haha, we have desync issues.
10:43:18 <elliott> OK, so the proxies need to be told "finish a packet, then hang".
10:43:27 <elliott> VOLATILE BOOL TIME
10:43:38 <elliott> volatile bool wanna_hang;
10:43:40 <elliott> im matuer
10:45:10 <CakeProphet> a cleverly named variable is a wonderful thing.
10:45:21 <elliott> fizzie: Holy crap, it actually kind of works.
10:45:28 <elliott> Scratch that: entirely.
10:45:29 <fizzie> Oh, it is even explicitly defined that you can pass a void * and read it with va_arg(char *); but do cast the NULL to (char*) anyway, because "#define NULL 0" is legal, and then it'd get passed as an integer.
10:45:44 <CakeProphet> booleans, the best concurrency construct.
10:45:47 <elliott> fizzie: Dude. Dude, it works.
10:45:54 <elliott> WANNA TRY?
10:46:03 <elliott> SO THE BEST
10:46:14 <elliott> Oh, it quite thoroughly messes up the console though.
10:46:47 <fizzie> elliott: Not at work. Anyway, I'm pretty sure there are cases where it may fail. In particular, there are those buffers in packet_state_t; you'd really need to handle those for propriety.
10:47:00 <elliott> Clearly mcmap is mission critical to your work, you know.
10:47:11 <elliott> And yes, there are... a great many issues as it currently stands. :p
10:47:17 <elliott> But, like, it works.
10:47:40 <CakeProphet> why scheme out of curiosity?
10:47:42 <fizzie> The console hack is such a hack I'm not surprised it breaks.
10:47:48 <elliott> CakeProphet: As opposed to?
10:47:57 <CakeProphet> -shrug- nothing in particular.
10:48:05 <elliott> fizzie: When mcmap was failing before, it dumped me to my terminal with all the raw stuff still on. That was fun. :p
10:48:34 <elliott> CakeProphet: I evaluated Lua, Ruby, Python, Perl, Haskell, MiniScheme, rep, nasal, and god there must have been others.
10:48:41 <elliott> Even various JavaScripts.
10:49:16 <elliott> Problems with Lua: The C API is certainly convenient, but also it's quite ugly; manual stack machine munging. Also, I have this quite strong but yet somehow apathetic dislike of the language, and seemingly so does fizzie too.
10:49:20 <elliott> Ruby: No. Just no.
10:49:27 <elliott> Python: I don't like it, and IIRC Vorpal said the C API wasn't that nice.
10:49:29 <elliott> Perl: No.
10:49:35 <CakeProphet> lol
10:49:44 <elliott> (C API is unbelievably horrid, language also.)
10:49:45 <fizzie> Perl doesn't even qualify for a "just no", I see.
10:49:53 <elliott> fizzie: Have you _seen_ XS?
10:49:54 <elliott> Haskell: Just doesn't embed. At least not GHC. At all.
10:50:07 <CakeProphet> if I recall, XS is better than the cpython API
10:50:12 <elliott> MiniScheme: Really exposes less than I'd like. Dunno about the portability. Not so really modern or maintained etc. Probably not a very good Scheme.
10:50:19 <fizzie> elliott: Yes, I have. I've also done a bit of Inline::C, which has to use some of the same stuff.
10:50:21 <elliott> rep: It was okay. But quite Unix-only.
10:50:30 <elliott> nasal: Practically abandoned, bad, didn't like it, nobody knows it, beh.
10:50:31 <fizzie> CakeProphet: If that's true, the cpython api must be something quite horrible.
10:50:40 <elliott> JavaScripts: Don't like the language; C API was either awkward, or non-existent (Veight is C++ only)
10:51:07 <fizzie> Inline_Stack_Push(sv_2mortal(retval)); <- "what."
10:51:14 <elliott> CakeProphet: Whereas Guile has a nice C API, is a pretty good, well-maintained, performant Scheme with a large collection of libraries, which constitutes a nice language, and yeah, it's a nice API.
10:51:18 <CakeProphet> you have to maintain reference counts manually for pythons api I believe. Though you may need to do this for perl as well, but I don't recall seeing anything about it.
10:51:34 <CakeProphet> Wikipedia: Operations on volatile variables are not atomic, nor do they establish a proper happens-before relationship for threading. This is according to the relevant standards (C, C++, POSIX, WIN32), and this is the matter of fact for the vast majority of current implementations. The volatile keyword is basically worthless as a portable threading construct.
10:51:35 <elliott> Plus being the "official" extension language of GNU, despite its not high use for that, it's really quite thoroughly focused on making things nice on the C coders.
10:51:41 <elliott> Also it supposedly even builds on Windows.
10:51:55 <elliott> Uses pthreads for threads though; but there's pthreads for Windows; but who knows if that'll interoperate; but we'll see.
10:52:09 <fizzie> CakeProphet: You don't necessarily have to "maintain" them manually, but you certainly have to think about them all the time unless you want to leak like a sieve, or have values disappear on you. There's quite a lot of values you need to explicitly make "mortal".
10:52:22 <fizzie> The autogenerated XS glue does do *some* of that stuff automatically though.
10:53:02 <elliott> ...whereas Guile uses Boehm GC, so all you have to do is add scm_remember_upto_here_1(smob) if you extract the data from a smob but don't later reference it. :)
10:54:53 <elliott> fizzie: You know, it kind of would be nice if mcmap could keep a connection for you...
10:54:58 <elliott> (re: long-runningness.)
10:55:05 <fizzie> What, a minecraft bouncer?
10:55:06 <elliott> Minecraft is quite crashy, after all.
10:55:16 <elliott> fizzie: I'm just sayin'... it wouldn't be much cod e:P
10:55:17 <elliott> code :P
10:55:19 <CakeProphet> did you consider Erlang? :D
10:55:27 <elliott> CakeProphet: To /embed/?
10:55:31 <elliott> It's as unembeddable as GHC.
10:55:31 <fizzie> That would mean actually handling the login stuff. Okay, it's not *that* much code.
10:55:38 <elliott> fizzie: Not really?
10:55:41 <elliott> Just drop it from the client.
10:55:48 <elliott> On the server, you just need to keepalive, keepalive, pong, blah.
10:55:55 <fizzie> elliott: You can't just "drop it", you have to respond to the client so that it continues.
10:56:00 <elliott> Well, OK.
10:56:34 <fizzie> Though I guess it's mostly just replaying the packets the server sent.
10:58:00 <elliott> fizzie: In case you're wondering, yes, my goal is to make the name "mcmap" as inaccurate as I possibly can.
10:58:18 <fizzie> Also the client will then do a spurious http://www.minecraft.net/game/joinserver.jsp GET (for which the server won't ever do the corresponding http://www.minecraft.net/game/checkserver.jsp GET), but I guess that probably won't hurt.
10:58:32 <elliott> lol, DRM
10:59:16 <CakeProphet> I often find myself wanting emacs key combinations when in other editors/IDEs
10:59:44 <elliott> OSX has global Ctrl+A/Ctrl+E, IIRC you can make Gtk have htem too
10:59:49 <fizzie> CakeProphet: Re the volatile quote, emphasis on "portable". mcmap's approach to portability is a bit peculiar; on one hand there's these huge unportable hacks, while on the other there's code to manually parse IEEE-754 floats/doubles in case you're on a non-IEEE-float system.
11:00:13 <elliott> fizzie: Basically it's literally designed for the 90s.
11:00:38 <elliott> Everyone has weirdo IRIX boxes and "oh, my sun /usr/ucb/cc is broken" but nobody bats an eye at ... interesting approaches to concurrency.
11:00:45 <CakeProphet> elliott: that's interesting. I can just use home and end for C-a and C-e though. But things like c-k and c-space are quite convenient.
11:00:53 <elliott> IIRC you can get those too.
11:00:57 <elliott> Well, C-k at least.
11:01:21 <CakeProphet> gotos are a little awkward though...
11:01:38 <CakeProphet> (goto line number that is)
11:02:27 <CakeProphet> [numeric arg] M-g M-g
11:02:40 <fizzie> I think I told MonoDevelop (when trying it out) to use Emacs-style keybindings. That made it do all kinds of "C-x (C-)s" stuff for saving, but on the other hand obviously it wasn't a "real" Emacs, so it felt like some sort of misshapen hybrid.
11:03:26 <fizzie> I use "M-g M-g [enter the number in the prompt]" always.
11:03:35 <CakeProphet> oh.... I didn't know that was an option.
11:03:41 <CakeProphet> that makes way more sense. :P
11:04:00 <CakeProphet> are there any other M-g commands?
11:04:26 <fizzie> As for the double-g, I just keep mentally saying "go! go! go!" for that. I don't recall any of the other uses of M-g, but I'm sure there are some.
11:04:43 <elliott> fizzie: At least admire my diff: http://sprunge.us/bRGT
11:05:13 <CakeProphet> it took me about a week before I knew what select-all was. :P
11:06:39 <CakeProphet> I thought I might regret learning Emacs but it's been quite helpful because a lot of unix tools use similar commands.
11:06:57 <fizzie> elliott: usleep(500000) ooh the prettiest. Anyway, I think it would be polite to tell SDL to shut things down right before the execl; it's not going to run any of its atexit handlers and such. (Also shouldn't those common.h things have extern + definitions somewhere?)
11:07:11 <elliott> fizzie: You realise this was a proof-of-concept? :-P
11:07:22 <CakeProphet> :PPPPPPPPPPPPPPPPPPPPP
11:07:26 <fizzie> Yes, but that's no reason not to point things out.
11:07:38 <elliott> Well, yes.
11:07:49 <monqy> CakeProphet: hi
11:07:56 <fizzie> That bouncing around in main is the funny.
11:08:00 <monqy> CakeProphet: what is wrong with your face
11:08:10 <CakeProphet> too many tongues.
11:08:17 <monqy> oh no
11:08:35 <fizzie> It's a hop and a skip and what is that a for (;;) there why doesn't it just "return;"?
11:09:09 <elliott> fizzie: Um because that isn't hanging?
11:09:16 <elliott> :p
11:09:46 <fizzie> Well, uh, I guess it's technically not, but... why would it need to busyloop in a circle instead of just stopping?
11:09:55 <elliott> Because I wasn't thinking?
11:10:00 <fizzie> I guess the variable name makes more sense that way, that much is true.
11:10:18 <elliott> fizzie: I think I might include all the original command-line arguments so that it can parse window size and all.
11:10:22 <elliott> That would also avoid a goto.
11:10:43 <itidus20> goto label5;
11:10:53 * CakeProphet is downloading all of the text logs so that he can count the occurences of :P and :-P
11:11:03 <elliott> Using rsync?
11:11:05 <CakeProphet> ...no.
11:11:09 <CakeProphet> using wget and grep.
11:11:14 <elliott> Wget of where?
11:11:18 <CakeProphet> the... logs.
11:11:20 <elliott> If codu, don't.
11:11:24 <CakeProphet> why?
11:11:26 <elliott> You're meant to use rsync instead.
11:11:29 <elliott> Gregor will get mad.
11:11:30 <CakeProphet> why?
11:11:34 <CakeProphet> why?
11:11:37 <elliott> Type !logs and get the command.
11:11:41 <CakeProphet> !logs
11:11:51 <CakeProphet> >_>
11:11:56 <elliott> What?
11:11:59 <CakeProphet> perhaps I am stealing all the bandwidth.
11:12:04 <CakeProphet> with my massive wget.
11:12:10 <CakeProphet> yes that must be it.
11:12:10 <elliott> It's like fifty megs, so yeah.
11:12:16 <elliott> CakeProphet: It comes in as a notice, you moron.
11:13:47 <CakeProphet> uh that didn't download anything.
11:13:53 <monqy> you did it wrong
11:14:14 <CakeProphet> ah there we go.
11:14:21 <CakeProphet> ah but this includes the raws I didn't want those.
11:14:25 <CakeProphet> but I guess it'll be faster due to compression.
11:15:28 <CakeProphet> I am a tool and just copypaste commands, I didn't realize the source directory was left out. :P
11:16:57 -!- sebbu2 has changed nick to sebbu.
11:19:10 <CakeProphet> oh hey look rsync has an --include
11:19:12 <CakeProphet> too late.
11:19:43 <Gregor> FEE FI FO FUM, I SMELL THE BLOOD OF SOMEBODY WHO TRIED TO USE WGET TO DOWNLOAD ALL THE LOGS INSTEAD OF RSYNC
11:20:11 <CakeProphet> Gregor: like I was just supposed to know.
11:20:18 <CakeProphet> you could like, I dunno, put it on the page?
11:20:26 <Gregor> Nope
11:20:31 <Gregor> It's a sekrit™.
11:20:39 <monqy> "dont wget please" - logs page
11:20:45 <monqy> "theres a better way" - logs page
11:20:55 <monqy> "but its a sekrit™" - logs page
11:20:56 <Gregor> "But I won't tell you what that is" - logs page
11:20:58 <Gregor> :P
11:21:08 <elliott> Wget-spidering an entire fifty meg website: NOT CONSIDERED A GOOD THING TO DO EVEN IF NOT WARNED AGAINST?
11:21:17 <monqy>
11:21:21 <elliott> Gregor: You might wanna use robots.txt to block wget by default.
11:21:37 -!- elliott has left ("Leaving").
11:21:40 -!- elliott has joined.
11:22:02 <CakeProphet> ~/logs$ grep -P ":P|:-P" * | wc -l
11:22:03 <CakeProphet> 44217
11:22:06 <Gregor> But anyway, I actually only care about the rsync issue for the /sync/ part. If you're just doing a one-time download, it's basically no different (assuming that wget supports Content-encoding: gzip)
11:22:16 <fizzie> CakeProphet: Here's the numbers from my own incomplete set of logs:
11:22:17 <fizzie> > select sum(case when body ilike '%:p%' then 1 else 0 end) as noseless, sum(case when body ilike '%:-p%' then 1 else 0 end) as noseful from event where target = (select id from target where name = '#esoteric');
11:22:17 <fizzie> noseless | noseful
11:22:17 <fizzie> ----------+---------
11:22:17 <fizzie> 39989 | 5665
11:22:18 <lambdabot> <no location info>:
11:22:18 <lambdabot> lexical error in string/character literal at chara...
11:22:29 <fizzie> lambdabot: What, you don't do SQL?
11:22:44 <Gregor> SQL, Haskell, it's all the same.
11:22:50 <elliott> Received string length longer than the maximum allowed ([thirty-nine]
11:22:53 <elliott> java ioexception
11:22:53 <CakeProphet> grep -P ":[)]|:-[)]" * | wc -l
11:22:54 <elliott> wtf is that?
11:22:55 <CakeProphet> 27804
11:22:56 <elliott> fizzie?
11:23:20 <elliott> ugh
11:23:21 <CakeProphet> a very wordy grep.
11:23:23 <elliott> something is wrong
11:23:47 <CakeProphet> grep -P ":[(]|:-[(]" * | wc -l
11:23:48 <CakeProphet> 8639
11:24:08 <monqy> what's the name-distribution of :P sayers? This may be the only line in which I have said :P, but now I have said it twice.
11:24:35 <fizzie> elliott: Sounds like most of those are about >16-character player names, but I guess it could be some other strings.
11:25:12 <elliott> fizzie: I literally just made the proxy deset the variable then return, and then changed the usleep to a while (var);
11:25:13 <elliott> Then that started.
11:27:19 <fizzie> This logbase doesn't have name-coalescing, so the top 5 of ":P"-sayers isn't very useful:
11:27:24 <fizzie> > select n.name, count(*) as peeings from event e join nick n on e.nick = n.id where e.target = 2 and e.type = 'msg' and e.body ilike '%:p%' group by n.name order by peeings desc limit 5;
11:27:24 <fizzie> name | peeings
11:27:24 <fizzie> ---------+---------
11:27:24 <fizzie> elliott | 7591
11:27:24 <fizzie> Gregor | 4370
11:27:24 <lambdabot> <no location info>: parse error on input `,'
11:27:26 <fizzie> ehird | 4229
11:27:28 <fizzie> GregorR | 2772
11:27:29 <fizzie> alise | 2162
11:27:32 <fizzie> lambdabot: Stop *doing* that.
11:27:35 <elliott> fizzie: You need :-p too.
11:27:46 <fizzie> Yes, but the question was about ":P sayers".
11:27:56 <elliott> Pah.
11:28:19 <Gregor> I ... I am not the most severe offender!
11:28:50 <fizzie> Gregor: You do have one more thousand from GregorR-L, but still.
11:29:05 <fizzie> Possibly the pee-fraction is more important than absolute pee amounts, anyway.
11:29:41 <monqy> :urine:
11:30:46 <itidus20> this is a related drawing i made: http://oi54.tinypic.com/ndr48y.jpg
11:31:05 <itidus20> (not just now)
11:31:14 <monqy> D:
11:31:26 <monqy> I do not understand this drawing
11:32:02 <itidus20> the blue blobs are necessarily edible looking..
11:32:18 <elliott> cmd.c: In function ‘cmd_upgrade’:
11:32:19 <elliott> cmd.c:267: error: initialization makes pointer from integer without a cast
11:32:19 <elliott> cmd.c:270: error: assignment makes pointer from integer without a cast
11:32:19 <elliott> cmd.c:272: error: passing argument 1 of ‘execv’ makes pointer from integer without a cast
11:32:19 <elliott> /usr/include/unistd.h:560: note: expected ‘const char *’ but argument is of type ‘char’
11:32:19 <elliott> I what...
11:32:31 <elliott> char *argv[999] = { main_argv[0], "--upgrade", g_strdup_printf("%d", sock_cli), g_strdup_printf("%d", sock_srv) };
11:32:31 <elliott> for (int i = 1; i <= main_argc; i++)
11:32:31 <elliott> {
11:32:31 <elliott> argv[3+i] = main_argv[i];
11:32:31 <elliott> }
11:32:34 <elliott> int err = execv(main_argv[0], argv);
11:32:38 <elliott> It looks right to me. Well... rightish.
11:32:45 <CakeProphet> uh apparently ^[\s\d:]+ is not matching the timestamp?
11:33:52 <fizzie> What's the type of main_argv then?
11:34:38 <fizzie> Also I think there's some glib helpers you can use to build the new argv without that 999 in there.
11:34:43 <fizzie> > select n.name, sum(case when e.body ilike '%:p%' then 1.0 else 0 end)/count(*) as peefrac from event e join nick n on e.nick = n.id where e.target = 2 and e.type = 'msg' group by n.name order by peefrac desc limit 5;
11:34:44 <fizzie> name | peefrac
11:34:44 <fizzie> ----------------+------------------------
11:34:44 <fizzie> GregorLOL | 1.00000000000000000000
11:34:44 <fizzie> GregorR-L__ | 1.00000000000000000000
11:34:44 <lambdabot> <no location info>: parse error on input `,'
11:34:45 <fizzie> AMD | 1.00000000000000000000
11:34:47 <fizzie> whoami | 1.00000000000000000000
11:34:49 <fizzie> bsmntbombdood2 | 0.50000000000000000000
11:34:53 <elliott> char *main_argv;
11:34:55 <elliott> Oh, durrr.
11:35:00 <fizzie> Well, there's your there.
11:35:08 <monqy> pee winners
11:35:14 <fizzie> The good old "include also people with no real comments" thing.
11:35:23 <elliott> > XIO: fatal IO error 11 (Resource temporarily unavailable) on X server ":0.0"
11:35:23 <elliott> after 113 requests (112 known processed) with 0 events remaining.
11:35:24 <lambdabot> Not in scope: data constructor `XIO'Not in scope: `fatal'Not in scope: data...
11:35:25 <elliott> Hmmmm.
11:35:42 <itidus20> monqy: simply put, it's arial 12 bold "D:" rotated 90 degrees counter-clockwise, and arial 12 bold ":P" rotated 90 degrees clockwise, with the bounded spaces coloured in
11:36:02 <monqy> it all makes sense now
11:36:12 <monqy> thanks
11:36:28 -!- Patashu has joined.
11:36:51 <itidus20> it was difficult though to get the anti aliasing right
11:37:07 <elliott> > Segmentation fault
11:37:07 <lambdabot> Not in scope: data constructor `Segmentation'Not in scope: `fault'
11:37:09 <elliott> Well that ain't good.
11:37:15 <fizzie> monqy: One more for the road; here's the real pee-winners:
11:37:17 <fizzie> > select n.name, sum(case when e.body ilike '%:p%' then 1.0 else 0 end)/count(*) as peefrac from event e join nick n on e.nick = n.id where e.target = 2 and e.type = 'msg' group by n.name having count(*) > 1000 order by peefrac desc limit 5;
11:37:17 <fizzie> name | peefrac
11:37:17 <fizzie> -----------+------------------------
11:37:17 <fizzie> Gregor-W | 0.16866359447004608295
11:37:17 <lambdabot> <no location info>: parse error on input `,'
11:37:18 <fizzie> Gregor | 0.15765359500703488582
11:37:20 <fizzie> GregorR-L | 0.14097390368576809255
11:37:21 <itidus20> so each string character was rendered twice against two different background colours
11:37:21 <fizzie> GregorR | 0.12288323432928451104
11:37:24 <fizzie> GregorR-W | 0.11541244573082489146
11:37:26 <fizzie> It's a very Gregorish list.
11:37:32 <elliott> > 12:38:04 [DIED] Unknown option --upgrade
11:37:32 <elliott> Oh come on.
11:37:33 <lambdabot> Not in scope: data constructor `DIED'Not in scope: data constructor `Unknow...
11:39:54 <elliott> fizzie: Just to calm your nerves, I haven't actually committed any of this horrible stuff yet.
11:41:23 <fizzie> Yes, I've been keeping a watch on the... other channel.
11:42:08 <elliott> X-D
11:42:25 <elliott> Ready to revoke my commit rights?
11:43:05 <elliott> What, more desync issues?
11:44:35 <fizzie> Well, there *are* those buffers there. If you restart in the middle of something busy, it's rather likely there's pieces of another packet stuck in there. (Plus it can also silently drop packets when there are complete packets there.)
11:45:26 <elliott> Oh, right, the buffers.
11:45:55 <fizzie> Speaking of which, you'll also have to replay the initial spawning and somehow force the server to resend the tiles to make the "minecraft bouncer" mode work; otherwise the client won't have the world data the server thinks it already has.
11:46:04 <elliott> Is there a way to tell SDL "hey, don't try to focus the window you open"?
11:46:37 <CakeProphet> perl -n -e 'BEGIN {%c=()} /^.+? <(.*?)>.*?:(P|-P|p).*$/; $c{$1}++ if $1; END {print "$_: $c{$_}\n" for keys%c}' *.txt
11:46:45 <CakeProphet> elliott: 4
11:46:48 <CakeProphet> ....wat?
11:46:57 <monqy> the magic of perl
11:47:12 <CakeProphet> surely perl integers are bignums.
11:47:25 <fizzie> All the numbers are double-precision floats.
11:47:31 <fizzie> Unless you "use integer".
11:47:57 <fizzie> (Or "use bigint".)
11:48:19 -!- boily has joined.
11:48:23 <CakeProphet> nope still 4. must be regex then
11:48:30 <elliott> fizzie: wait, perl integers are floats by default?
11:48:38 <fizzie> Also: $c{$1}++ if /.../.
11:48:40 <monqy> I can't see how that regex could possibly have gone wrong
11:48:49 <fizzie> elliott: All Perl numbers, I believe.
11:48:52 <elliott> Huh.
11:49:05 <monqy> yet enother reason for hate
11:49:05 <fizzie> But doubles work as integers up to 2^52 or so.
11:49:29 <elliott> Sigh, does anyone know a portable SDL way to not focus the window created?
11:49:40 <elliott> Whether I have to just say "hey, show some other window" or whatever; I don't acre.
11:49:41 <elliott> care.
11:49:41 -!- elliott has left ("Leaving").
11:49:43 -!- elliott has joined.
11:49:44 <elliott> care.
11:49:49 <monqy> care.
11:49:56 <elliott> care.
11:50:05 <fizzie> Care bear stare.
11:51:10 <fizzie> The .*$ suffix of the regex is spurious, but shouldn't hurt.
11:51:35 <fizzie> Well, assuming no newline problems.
11:51:50 <CakeProphet> I'm just trying to avoid matching things in < >
11:51:54 <CakeProphet> that aren't at the start.
11:52:12 <fizzie> Whether . matches newlines, and whether $ matches newline or real end-of-string only depends on the flags.
11:52:25 <fizzie> Try to drop the .*$ anyway, since it serves no purpose.
11:53:26 <elliott> fizzie: How would one detect whether the buffer has a full packet in it?
11:53:56 <elliott> Or can one not do one one that one.
11:54:54 <fizzie> I don't think you really can very well, and I'm not sure it'd really help. If you have a partial packet in the buffer, you can't (well, I guess you *can*, but it's ugly) just keep reading and hope you'll end up at a packet boundary during your half-a-second sleep.
11:55:30 <elliott> Well, I can prolong that sleep indefinitely, theoretically.
11:55:42 <elliott> fizzie: I guess the best thing is just to send the buffers?
11:56:01 <elliott> Is there any... guarantee that argv won't clobber binary data? Oh wait, can the protocol include nul bytes?
11:56:04 <CakeProphet> http://pastebin.com/FFF9nQc4
11:56:06 <CakeProphet> here is the whole list
11:56:23 <CakeProphet> for :P | :-P | :p
11:56:34 <CakeProphet> ....though I'm not sure that matches fizzie's
11:56:37 <monqy> sometimes if I am too tired I fall asleep involuntarily
11:57:06 <fizzie> elliott: The protocol does include lots of 0s, and those probably won't go through argv as-is.
11:57:21 <elliott> fizzie: Any two-five-fives? :p
11:57:36 <fizzie> elliott: Any bytes, in general. Though you can of course escape.
11:57:39 <monqy> I see I have only used it once in that list, presumably from refrencing it, possibly from quoting or mimicking someone else, as :P is not something I would say to emote
11:57:49 <elliott> fizzie: I could Mork-encode it.
11:58:05 <fizzie> elliott: Or just g_base64_{en,de}code, that's in glib and it's a single function.
11:58:10 <elliott> Or that, yes.
11:58:15 <fizzie> It's a bit over-cautious, but still.
11:58:18 <elliott> (This is so perverse, I: love it.)
11:58:24 <CakeProphet> there are also countless other nicks. elliottbuntu, gregorzilla, cakeprop1et, ...
11:58:40 <elliott> fizzie: Is there any guarantee you can pass like 262144 times a lot in a single argument?
11:58:42 <CakeProphet> oklofod
11:58:46 <elliott> That seems... unlikely.
11:58:51 <elliott> (Times a lot for basesixtyfour.)
11:59:00 <CakeProphet> EgoBot: 19
11:59:16 <fizzie> elliott: No; POSIX does define some minimums, but they're quite low. (Base64 only is times 1.25 though.)
11:59:17 -!- DH____ has quit (Read error: Connection reset by peer).
11:59:31 -!- DH____ has joined.
11:59:53 <fizzie> elliott: The alternative solution would be to serialize all relevant state into a single binary blob, and then throw that to the new process with some binary-safe mechanism, like a POSIX shm block.
12:00:24 <elliott> fizzie: Well, I mean, guarantee on Linux.
12:00:46 <elliott> fizzie: What if I opened a pipe, wrote a bunch of data to the write end, then passed the read end to the new process?
12:01:16 <fizzie> elliott: On Linux that's good for 64 kilobytes, IIRC.
12:01:39 <fizzie> (Size of the pipe buffer.)
12:02:03 <elliott> fizzie: Hmm, what happens if you go past that? Writes just fail?
12:02:13 <fizzie> Writes will probably block.
12:02:30 <fizzie> (Waiting for the read end to empty.)
12:02:32 <elliott> Well, if we fork'ed and started the new process ... :p
12:02:47 <elliott> I don't suppose posix guarantees any buffer sizes there.
12:02:55 <fizzie> 4k or something, if that.
12:03:15 <elliott> Mrf.
12:03:40 <CakeProphet> http://pastebin.com/Re2Eznr4
12:03:46 <CakeProphet> total number of lines
12:04:26 <CakeProphet> well, not counting /mes and stuff.
12:04:31 <CakeProphet> just lines with <name>
12:04:35 <elliott> CakeProphet: You need to use the industry-standard merging table, dude.
12:04:44 <CakeProphet> uh, what?
12:04:53 <elliott> The nick merging.
12:04:55 <elliott> Vorpal has a copy.
12:05:17 <CakeProphet> o_o
12:05:21 <CakeProphet> do I have to?
12:05:25 <elliott> Yes.
12:05:30 <elliott> Otherwise my count is way too low.
12:05:31 <fizzie> If you want anyone to take you seriously, yes.
12:05:54 <elliott> fizzie: I like how the net effect of this is turning EVERYTHING into a global.
12:06:09 <monqy> :(
12:06:22 <monqy> is there no way around this hackery
12:06:40 <CakeProphet> elliott: actually your count will be equivalent
12:06:43 <CakeProphet> as in this list you have multiple nicks.
12:06:45 <CakeProphet> :P
12:06:45 <fizzie> elliott: You could have blah_serialize_state/blah_deserialize_state functions for each blah.c, then just call those in sequence, concatenate the blobs, and do something for it.
12:06:48 <CakeProphet> :P
12:06:48 <CakeProphet> :p
12:06:50 <CakeProphet> :P
12:06:55 <CakeProphet> just building up my score.
12:07:01 <elliott> fizzie: It... would be nice, yes.
12:07:11 <elliott> fizzie: I might even do that.
12:07:17 <monqy> CakeProphet: what and what
12:07:39 <CakeProphet> I don't really see how any of that is confusing.
12:08:16 <monqy> it is confusing
12:08:16 <monqy> to me
12:08:17 <elliott> fizzie: Oh god, I'm building a fancy Generic System here, aren't I.
12:08:23 <elliott> fizzie: The main problem is that we /want/ a lot of state to be dropped.
12:08:31 <elliott> e.g., the whole Scheme state.
12:09:07 <CakeProphet> my goal is to beat Phantom_Hoover and Sgeo
12:09:11 <CakeProphet> in the lines race.
12:09:30 <fizzie> elliott: If you don't want a POSIX shm block, you could just use a g_file_open_tmp; on a sensible system it'll end up in a tmpfs anyway.
12:09:32 <monqy> a good goal for good people
12:09:37 <CakeProphet> also who is tusho and why have I never seen him.
12:09:46 <Sgeo> tusho == elliott
12:09:47 <elliott> tusho is me.
12:09:56 <fizzie> (The file handle will stay open, and then you can seek to 0 and slurb the data back in.)
12:09:57 <elliott> fizzie: It... would be nice to be _vaguely_ portable.
12:10:03 <elliott> As in, might someday run on Windows.
12:10:06 <monqy> "im eliot" - toshu
12:10:09 <elliott> So g_file_open_tmp sounds nice.
12:10:31 <elliott> fizzie: Would it be bad if I reused the jint_read/jint_write functions for this? :p
12:10:44 <elliott> (Also, those should _totally_ work on buffers.)
12:10:53 <elliott> Hmm, actually.
12:10:57 <elliott> I can depend on endianness just fine.
12:10:58 <CakeProphet> elliott: I mean for a one-liner it does its job. No need for fancy tables.
12:11:14 <elliott> CakeProphet: No it doesn't, it fails to merge the various nicks a lot of us have.
12:11:21 <elliott> So its results are completely wrong.
12:11:27 <CakeProphet> wrong how?
12:11:30 -!- sllide has joined.
12:11:40 <monqy> it doesn't merge the various nicks a lot of them have
12:11:44 <CakeProphet> it reports how many times a nick said a line. it is correct in that report.
12:12:09 <elliott> fizzie: Are buf_start/buf_pos/buf_end all important to keep?
12:12:10 <monqy> but nicks aren't very meaningufl
12:12:14 <monqy> people are meanignutuflk....
12:12:25 <CakeProphet> sure.
12:12:43 <CakeProphet> but it was a one-liner, is my defense.
12:12:49 <CakeProphet> well, a one liner with a BEGIN and END line :P
12:12:53 <monqy> a Bad Perl one liner
12:13:22 <CakeProphet> took less time than the equivalent Haskell code..
12:13:34 <fizzie> elliott: Outside of packet_read, I think buf_start == buf_pos or some such equivalence exists. But of course if you don't want to understand how it works, you can dump all.
12:13:44 <fizzie> (There'll be some useless bytes there, though.)
12:14:12 <monqy> failed to kill less babies than the equivalent haskell code
12:14:20 <fizzie> In particular, I think it should be enough to just dump the bytes from buf_start to buf_end, and the size of that; then on reloading set buf_start = buf_pos = 0, buf_end = size, and load those bytes at the start of the buffer.
12:14:34 <CakeProphet> I'm curious as to what method you would use in Haskell. you would recursively update a Map (of strings! gah) I'd imagine
12:14:37 <fizzie> Incidentally, a file is also what irssi uses for /UPGRADE. (It's a hidden option called "session", defaults to ~/.irssi/session)
12:14:50 <elliott> fizzie: What about that "offset" thing?
12:15:10 <CakeProphet> is a Haskell programmer more likely to use Parsec than regex for this kind of thing?
12:15:11 <monqy> CakeProphet: presumably a fold for that
12:15:31 -!- azaq23 has quit (Quit: Leaving.).
12:15:37 <monqy> I mean the updating the table
12:15:39 <monqy> you'd use a fold
12:15:44 <CakeProphet> right
12:15:46 <monqy> rather than explicit recursion
12:15:49 <elliott> struct buffer result = { sizeof(struct packet_state)*2, g_malloc(sizeof(struct packet_state)*2) };
12:15:49 <elliott> memcpy(result.data, (unsigned char *) &cfg->state_cli, sizeof(struct packet_state));
12:15:50 <elliott> memcpy(result.data + sizeof(struct packet_state), (unsigned char *) &cfg->state_srv, sizeof(struct packet_state));
12:15:51 <elliott> fizzie: Pro, or pro?
12:15:53 <CakeProphet> but should you use Map String a?
12:15:59 <monqy> that is one way
12:16:00 <CakeProphet> because apparently that is a sin.
12:16:16 <monqy> what is that a anyway
12:16:28 <fizzie> elliott: You don't need to save offset[] or the internal struct packet, assuming you don't stop the proxy between the packet_read and the packet_write.
12:16:29 <CakeProphet> (Num a) => a I'm just lazy.
12:16:39 <elliott> fizzie: TOO LAZY TO BOTHER LA LA LA
12:17:02 <fizzie> Well, I think your wanna_hang may have stopped it in the right place already.
12:17:11 <monqy> wanna hang
12:17:49 <elliott> struct buffer proxy_serialize_state()
12:17:49 <elliott> {
12:17:49 <elliott> struct buffer result = { sizeof(struct packet_state)*2, g_malloc(sizeof(struct packet_state)*2) };
12:17:49 <elliott> memcpy(result.data, (unsigned char *) &cfg->state_cli, sizeof(struct packet_state));
12:17:49 <elliott> memcpy(result.data + sizeof(struct packet_state), (unsigned char *) &cfg->state_srv, sizeof(struct packet_state));
12:17:51 <elliott> return result;
12:17:53 <elliott> }
12:17:55 <elliott> void proxy_deserialize_state(unsigned char *state)
12:17:57 <elliott> {
12:17:59 <elliott> memcpy(&cfg->state_cli, (struct packet_state *) state, sizeof(struct packet_state));
12:18:01 <elliott> memcpy(&cfg->state_srv, (struct packet_state *) (state + sizeof(struct packet_state)), sizeof(struct packet_state));
12:18:06 <elliott> }
12:18:08 <elliott> fizzie: Et voilbeautifula.
12:18:21 <fizzie> I'm not so sure about that, but I guess it should work.
12:18:37 <elliott> fizzie: The problem is skipping the init in the proxy thread creation stuff.
12:18:45 <elliott> I suppose I can just pass a bool restarting.
12:19:07 <elliott> Or separate out the state initialisation.
12:19:27 -!- monqy has quit (Quit: hello).
12:20:03 <fizzie> elliott: Yes. Though you do need to set the state_cli.sock = sock_cli; state_srv.sock = sock_srv; even when restarting.
12:20:33 <fizzie> (Otherwise it'll end up being copied from that state blob.)
12:20:35 <elliott> fizzie: Well, actually, sockets are part of struct packet_state now...
12:20:43 <elliott> And those will have the right fd.
12:20:43 <elliott> So?
12:20:52 <fizzie> Oh, right.
12:21:01 <fizzie> It actually is the right fd.
12:21:22 <fizzie> You might not need to pass it on the command line at all, then.
12:21:52 <fizzie> Though I suppose duplication won't hurt.
12:22:21 <elliott> fizzie: Yeah, I'm trying to make the only data be original command line args (perhaps not even those) + serialised.
12:22:33 <elliott> http://sprunge.us/AVRj
12:22:38 <elliott> It's starting to look suspiciously like a good design.
12:23:41 <CakeProphet> !perl print (("all nighter", "sleep")[int(rand(2))])
12:23:43 <EgoBot> all nighter
12:23:48 <CakeProphet> and so it shall be.
12:23:53 <fizzie> CakeProphet: Right now from #perl: http://p.zem.fi/t6uz -- see how you don't have to care about refcounts. (Lie.)
12:24:26 <CakeProphet> ah
12:24:44 <CakeProphet> yes I don't really know much about XS.
12:25:18 <fizzie> The glue between return types and parameters is mostly autoXS'd, but the process of building non-scalar Perl values from inside C code is quite messy.
12:25:24 <elliott> g_file_open_tmp("mcmap.XXXXXX", NULL, NULL) -- yay
12:25:27 <elliott> (Yes, I'll handle errors later.)
12:25:57 <CakeProphet> hmmm, I will perhaps need to stock up on caffeine for the adventure ahead.
12:26:52 <Patashu> so is mcmap an #esoteric project
12:27:26 <elliott> Yes.
12:27:26 <CakeProphet> it's an #esoteric-minecraft project, I'd say.
12:27:28 <CakeProphet> >_>
12:27:33 <elliott> fizzie: Can you even seek an fd?
12:27:45 <fizzie> elliott: Certainly; just lseek it.
12:27:47 <elliott> Oh, lseek.
12:28:38 <elliott> cmd.c:270: error: ignoring return value of ‘write’, declared with attribute warn_unused_result
12:28:41 <elliott> fizzie: Harshing my vibe here.
12:28:44 <CakeProphet> haha, there's an energy shot called "10 hour power"
12:28:57 <fizzie> elliott: That's the thing that even a (void) cast won't cure.
12:29:02 <elliott> fizzie: Yeah, I just tried that.
12:29:07 <elliott> WTF do I have to do to make it happy?
12:29:09 <elliott> (void) (void)?
12:29:23 <fizzie> "if (...) ;" is I think enough.
12:29:27 <elliott> Hah.
12:29:38 <elliott> Indeed.
12:30:04 <fizzie> console.c had a write like that, until people complained too noisily about how bad it was.
12:31:02 <elliott> proxy.c: In function ‘proxy_initialize_socket_state’:
12:31:02 <elliott> proxy.c:57: error: expected expression before ‘{’ token
12:31:02 <elliott> proxy.c:58: error: expected expression before ‘{’ token
12:31:02 <elliott> What.
12:31:10 -!- Sgeo has quit (Ping timeout: 260 seconds).
12:31:11 <elliott> void proxy_initialize_socket_state(socket_t sock_cli, socket_t sock_srv)
12:31:11 <elliott> {
12:31:11 <elliott> cfg->state_cli = PACKET_STATE_INIT(sock_cli);
12:31:11 <elliott> cfg->state_srv = PACKET_STATE_INIT(sock_srv);
12:31:12 <elliott> }
12:31:14 <elliott> I am a confuse.d
12:31:21 <elliott> Oh god, don't tell me I need a (struct blah) inf ront fo that.
12:31:32 <fizzie> Yes, it's a struct initializer.
12:31:58 <fizzie> Or expands into one, anyway.
12:32:31 <fizzie> "Inf ront fo", sounds like a Ultima spell.
12:32:37 <fizzie> KAL VAS FLAM and so on.
12:33:29 <elliott> Heh.
12:36:58 <elliott> GLib-ERROR **: The thread system is not yet initialized.
12:36:58 <elliott> aborting...
12:36:58 <elliott> Aborted
12:36:59 <elliott> fizzie: Good start.
12:37:14 <elliott> Oh, duh.
12:38:56 <elliott> 13:39:18
12:38:56 <elliott> > XIO: fatal IO error 9 (Bad file descriptor) on X server ":0.0"
12:38:56 <elliott> after 122 requests (122 known processed) with 0 events remaining.
12:38:56 <elliott> elliott@katia:~/Code/mcmap$
12:38:57 <lambdabot> Not in scope: data constructor `XIO'Not in scope: `fatal'Not in scope: data...
12:38:57 <elliott> Well, 'tis a start.
12:39:16 <elliott> XIO: fatal IO error 11 (Resource temporarily unavailable) on X server " o<CTCP>"
12:39:16 <elliott> after 121 requests (121 known processed) with 0 events remaining.
12:39:19 <elliott> That's no X server I ever heard of.
12:39:32 <elliott> They speak X server in what?
12:39:49 <elliott> > XIO: fatal IO error 11 (Resource temporarily unavailable) on X server ":0.0"
12:39:50 <elliott> after 120 requests (120 known processed) with 0 events remaining.
12:39:50 <elliott> X Error of failed request: BadWindow (invalid Window parameter)
12:39:50 <elliott> Major opcode of failed request: 4 (X_DestroyWindow)
12:39:50 <elliott> Resource id in failed request: 0x5e0000d
12:39:50 <elliott> Serial number of failed request: 120
12:39:50 <lambdabot> Not in scope: data constructor `XIO'Not in scope: `fatal'Not in scope: data...
12:39:52 <elliott> Current serial number in output stream: 120
12:39:54 <elliott> WHAT DO YOU WANT FROM ME
12:40:06 <Jafet> C-M-^H
12:40:21 <elliott> -rw------- 1 elliott elliott 513K 2011-09-12 13:39 /tmp/mcmap.UZ850V
12:40:27 <elliott> fizzie: They're not meant to be that big are they?
12:40:45 <fizzie> Well, a single packet_state_t is around 256K.
12:40:51 <elliott> Fair enough.
12:41:00 <fizzie> It's a bit overdone, but it needs to hold any single packet.
12:41:25 <elliott> Is that using the zlib worst-case guarantees? :p
12:41:48 <fizzie> It's probably well over that.
12:41:52 <elliott> OK, without SDL_Quit(), //upgrade just seems to freeze the whole thing.
12:42:21 <elliott> This ... is not so simple.
12:42:23 <fizzie> But of course that's assuming 16x16x256 is the largest chunk-update ever sent; we do (did?) support cross-chunk updates.
12:42:53 <elliott> So the largest packet is... infinitely big?
12:43:03 <fizzie> Technically-maybe.
12:43:07 <elliott> FIX IT
12:43:21 <fizzie> It's borderline possible that you can only "officially" do SDL_Quit from the SDL UI thread.
12:43:50 <elliott> Yes but even if I don't quit it's completely broken, so. :p
12:44:09 <elliott> I should may-possibly gdb it, but would that even /work/?
12:44:55 <fizzie> I'd guesstimate that gdb can at least optionally follow through exec's.
12:46:24 <fizzie> Do we actually even SDL_Quit in the "clean" shutdown?
12:46:35 <fizzie> (It's not atexit-registered by default.)
12:46:39 <elliott> #0 0x00007ffff6beb36d in nanosleep () at ../sysdeps/unix/syscall-template.S:82
12:46:39 <elliott> #1 0x00007ffff74ad984 in SDL_Delay () from /usr/lib/libSDL-1.2.so.0
12:46:39 <elliott> #2 0x00007ffff746538e in SDL_WaitEvent () from /usr/lib/libSDL-1.2.so.0
12:46:39 <elliott> #3 0x000000000040b73e in start_ui (map=true, scale=1, resizable=true,
12:46:39 <elliott> wnd_w=512, wnd_h=512) at ui.c:112
12:46:40 <elliott> Hmm.
12:46:44 <elliott> fizzie: I don't know.
12:47:29 <Patashu> how did you segfault in there
12:47:41 <elliott> Who said it was a segfault?
12:47:48 <Patashu> I made an ass of u and me
12:47:54 -!- cheater has quit (Remote host closed the connection).
12:50:52 <elliott> fizzie: This is quite the confuzzling code; at least the proxy just stops dead.
12:55:57 * elliott plans how to get fizzie to debug it for him with tricksy thinking.
12:58:47 <CakeProphet> student: "oh, so it's the combination" professor: "no it's the composite. the summing."
12:58:59 <CakeProphet> ...even though that's exactly what he meant in that context.
12:59:22 * CakeProphet hates this class with each passing minute.
12:59:36 <elliott> Hey fizzie... what if... you looked at this diff.
12:59:45 <CakeProphet> !wacro
12:59:46 <EgoBot> CSSHLESS
12:59:50 <elliott> Csshless.
13:00:01 <Patashu> wow
13:00:04 <Patashu> that one is really good
13:00:10 <CakeProphet> yes it is.
13:00:12 <elliott> fizzie... fizzie... http://sprunge.us/XaIC
13:00:13 <Patashu> now what on earth do we use it for
13:01:07 <Patashu> csh blahblah | less
13:02:34 <CakeProphet> !wacro
13:02:35 <EgoBot> HMFHC
13:02:36 <CakeProphet> !wacro
13:02:37 <EgoBot> TEEEIM
13:02:38 <CakeProphet> !wacro
13:02:39 <EgoBot> MZH
13:02:39 <CakeProphet> !wacro
13:02:40 <EgoBot> SBP
13:02:41 <CakeProphet> !wacro
13:02:42 <EgoBot> UDLMSCP
13:02:49 <CakeProphet> TEEEEIM
13:03:51 -!- chickenzilla has quit (Ping timeout: 246 seconds).
13:04:41 -!- chickenzilla has joined.
13:04:49 <fizzie> How did it not work again?
13:05:56 <elliott> fizzie: It just sits there.
13:06:01 <elliott> Minecraft times out, nothing printed on the console.
13:06:09 <elliott> Ctrl+C in gdb shows it's in sdl event loop.
13:06:12 <elliott> But it definitely does cross over.
13:06:21 <CakeProphet> Surprised, since he thought he declared
13:06:21 <CakeProphet> this identifier, JD searches through the source code and discovers that the
13:06:21 <CakeProphet> identifier he declared had and ‘-‘ in it and this one didn’t. He fixes the
13:06:24 <CakeProphet> error then quickly scans the rest of the source code and finds two more places
13:06:27 <CakeProphet> where he left out the ‘-‘
13:06:31 <CakeProphet> I wonder if my professor is a Lisp programmer.
13:06:34 <fizzie> SDL event loop is the reasonable place, but humm.
13:06:56 <elliott> fizzie: Maybe the proxy got hung by deserialising the wrong stuff and interpreting that?
13:07:16 <CakeProphet> !wacro 5000
13:07:16 <EgoBot> ACDIGDBCUPTDRCWYEAATDFPBB
13:07:30 <CakeProphet> GDBCUP
13:08:48 -!- Patashu has quit (Quit: MSN: Patashu@hotmail.com , Gmail: Patashu0@gmail.com , AIM: Patashu0 , YIM: patashu2 .).
13:09:43 <fizzie> You could at least do if (read(upgrade_fd, data, len) != len) die("OH NO!") or something.
13:10:05 <elliott> fizzie: I doubt that's failing. But okay. :p
13:10:19 <fizzie> So far I haven't seen anything obviously wrong, no.
13:11:25 <elliott> Yeah, no errors.
13:11:28 <CakeProphet> wow I wonder if my professor realizes that most people don't charge by lines of code.
13:11:32 <CakeProphet> most sane people.
13:11:48 <CakeProphet> all Haskell programmers would be homeless.
13:11:56 <fizzie> Aren't they?
13:12:11 <fizzie> My mental image of a Haskell programmer is this hairy homeless person.
13:12:13 <CakeProphet> well, I guess they would be.
13:16:51 <fizzie> Reached the end of the diff, still didn't see anything obviously wrong. Possibly struct proxy_config should hold either both the iq and worldq, or neither, but that's not a real problem.
13:18:11 <fizzie> I suppose you could just add some log_prints in various places of proxy.c to see what happens there, or figure out how to target that particular thread with gdb. I can take a closer peek at home, but that's likely to be at least three hours or so from now.
13:18:25 <elliott> I'll procrasti-think on it.
13:19:18 <CakeProphet> procrasti-thinking could be probably be listed as most of my billable hours.
13:19:21 <CakeProphet> if I were paid by hour.
13:20:37 <fizzie> Are you instead paid by line?
13:20:53 <CakeProphet> billable hours -- 10:00-11:45 compiled code; 11:00 - 12:00 : took hookah break to procrasti-think
13:21:04 <CakeProphet> fizzie: no I'm paid in piecework currently.
13:21:13 <CakeProphet> so, I set a price for something, finish it, get paid.
13:30:50 -!- Sgeo has joined.
13:33:33 -!- cheater has joined.
13:38:58 <Sgeo> *sigh*
13:40:09 <Sgeo> My OS professor is making sure people understand what classes are. Not because of OS theory presumably, but to be able to write plugins for his simulator
13:42:21 <Jafet> Classes are abstract things which appear in your program, and are not meant to be executed.
13:43:22 <Jafet> Perhaps it's better to say "attended"
13:44:40 <elliott> back
13:45:12 <Sgeo> wb
13:46:41 <elliott> Sgeo: I forget, have you ever used mcmap at all?
13:46:50 <Sgeo> No
13:48:32 <elliott> Lame.
13:49:43 <cheater> what does his simulator simulate
13:49:54 -!- copumpkin has quit (Ping timeout: 260 seconds).
13:50:19 -!- copumpkin has joined.
13:52:03 <Sgeo> A CPU and an OS
13:52:03 <elliott> ?src minimum
13:52:04 <lambdabot> minimum [] = undefined
13:52:04 <lambdabot> minimum xs = foldl1 min xs
13:52:30 <Sgeo> ?src min
13:52:30 <lambdabot> min x y = if x <= y then x else y
13:58:15 <elliott> Sgeo: You realise mcmap works on Windows, btw?
13:58:33 <Sgeo> Now I do. But until now, I've been lazy
13:58:42 * Sgeo is in class right now
14:00:09 <elliott> fizzie: Seek state of an fd would be transferred across exec,r ight?
14:02:03 <fizzie> Yes, it's logically speaking part of the fd.
14:04:25 <elliott> Hmm, wait.
14:04:29 <elliott> Does address space carry over exec()?
14:04:38 <elliott> Oh, hmm, shouldn't matter
14:04:42 <elliott> packet_state doesn't contain any pointers
14:04:47 <elliott> Except maybe in the packet p, but that should be ignored at this point
14:04:48 <elliott> I think.
14:05:30 <fizzie> Hmmmmmmmm.
14:05:41 <fizzie> Let me check that thing.
14:06:27 <fizzie> Yes, it should be hokay.
14:06:45 <fizzie> The 'offset' field is used as the packet's field_offset array, but it's reset by packet_read.
14:06:56 <fizzie> (state->p.field_offset = state->offset;)
14:07:49 <elliott> Hokay.
14:09:06 <fizzie> (Same applies for the 'bytes' field of the packet, which is pointed to &state->buf[state->buf_start] in packet_read.)
14:09:39 <fizzie> Aways, moving home.
14:10:00 <elliott> Moove.
14:10:01 <elliott> Mouuuve.
14:14:16 <Sgeo> Half the time when I raise my hand to answer a question: "Someone else"
14:18:29 <oklopol> nerd
14:20:43 -!- copumpkin has quit (Quit: Computer has gone to sleep.).
14:20:57 <oklopol> half the time when i raise my hand to answer a question, pigs fly
14:22:16 <CakeProphet> :o
14:23:05 <oklopol> or wait, is it because you just say something random that makes no sense?
14:23:12 <oklopol> because that'd be cool
14:28:02 <Sgeo> Sadly, no
14:36:27 <CakeProphet> [W]hile there are many aspects to software quality, your first quality concern must necessarily be with its defects. ... [E]ven experienced programmers typically make a mistake for every seven to ten lines of code they develop.
14:36:31 <CakeProphet> o rly?
14:36:38 <CakeProphet> but my code always runs correctly the first time.
14:37:15 <cheater> BUT DOES IT HALT
14:37:36 <CakeProphet> Some people mistakenly refer to software defects as bugs. When called bugs, they seem like pesky things that should be swathed or even ignored. This trivializes a criticial problem and fosters the wrong attitude. ... Defects are more like time bombs than bugs.
14:37:44 * CakeProphet submits a time bomb report to gedit.
14:38:07 <cheater> are defects like burritos
14:41:35 <CakeProphet> ...sure.
14:42:54 <Sgeo> burritos encased in nuclear waste
14:43:17 <CakeProphet> help data form hell
14:45:36 <CakeProphet> JD again recompiles the program and gets an error message at the end of the
14:45:37 <CakeProphet> program, unmatched begin
14:45:45 <CakeProphet> ah, she's a pascal programmer.
14:46:12 -!- copumpkin has joined.
14:47:29 <CakeProphet> or perhaps Algol...
14:49:17 <CakeProphet> based on age I would guess Pascal
14:50:05 <fizzie> Does she write in the third person?
14:50:17 <fizzie> Or is this "JD" some sort of a persona?
14:50:19 -!- Sgeo has quit (Ping timeout: 258 seconds).
14:50:33 <CakeProphet> it is a hypothetical character in an example.
14:51:05 <elliott> oh i thought it was the java decompiler
14:51:09 <elliott> fizzie: do you want an diffs
14:51:13 <elliott> with rrchecking
14:51:56 <CakeProphet> Looking at the compiler output, JD sees where the missing semicolon belongs and
14:51:59 <CakeProphet> fixes the source code
14:52:02 <CakeProphet> this is how I know it's a mad example.
14:52:13 <CakeProphet> because the compiler was helpful for finding a missing semicolon.
14:52:19 <CakeProphet> s/mad/made up/
14:52:31 <CakeProphet> I guess typos get more interesting when you're skipping a night of sleep.
14:55:14 <itidus20> hmm
14:56:34 <itidus20> CakeProphet: once laying in a hospital bed with asthma or something i started stareing at the fabric patterns. i thought i was just tired or whatever but i did start to see some bizzare visual grammar speaking to me
14:56:59 <itidus20> as if i was reading the meaning of the fabric pattern
14:58:04 -!- sebbu2 has joined.
15:00:49 <CakeProphet> I often read the meaning of fabrics.
15:00:56 <CakeProphet> they speak to me in a secret script.
15:01:04 -!- sebbu has quit (Ping timeout: 260 seconds).
15:01:36 <itidus20> some bugs don't matter
15:01:45 <CakeProphet> saying sooth about baked dessert.
15:01:54 <CakeProphet> this is where I get all of my secrets.
15:02:18 <itidus20> CakeProphet: well i keep seeing the word grammar used in strange places lately
15:02:26 <CakeProphet> some bugs are actually just stupid intended features.
15:02:27 <itidus20> "design grammar" for example
15:02:43 <itidus20> like.. uhhh
15:03:11 <CakeProphet> or should I say some stupid intended features are actually just bugs.
15:05:04 <CakeProphet> being a cannibalistic doctor would be fun because you get to cure people in two senses.
15:05:32 <elliott> fizzie did done run away.
15:06:05 <CakeProphet> "done did" is an acceptable idiom of some dialects of southern american english.
15:06:06 <itidus20> now im not sure
15:07:02 <itidus20> ok here we go
15:07:04 <CakeProphet> here "done" is essentially being used like "already"
15:07:15 <itidus20> "Axonometry, and the pictorial grammar that goes with it, has taken on a new significance with the advent of visual computing."
15:07:26 <itidus20> pictorial grammar :P
15:07:53 -!- Phantom_Hoover has joined.
15:08:18 <CakeProphet> yeah that doesn't make sense.
15:09:36 <CakeProphet> like... the... terminology?
15:10:03 <itidus20> im not sure that its supposed to make sense
15:11:01 <itidus20> CakeProphet: hmm.. i would say it's a liberal arts thing except mathematics and science are apparently liberal arts
15:11:02 <Phantom_Hoover> elliott, hello I have a lab coat now.
15:11:10 <Phantom_Hoover> itidus20, science isn't.
15:11:18 <Phantom_Hoover> Mathematics is classed as one by weird people.
15:11:42 <itidus20> yeah i struggle with this wiki sentence too "The contemporary liberal arts comprise studying literature, languages, philosophy, history, mathematics, and science."
15:11:59 <itidus20> i was gonna say "cake, it is because you're not liberal arts type that it doesn't make sense"
15:12:09 <itidus20> but i wanted to check up what liberal arts means... and now i'm in a fix
15:12:16 <CakeProphet> I actually am something of a "literal arts type" though.
15:12:25 <CakeProphet> also by science it might be referring to soft sciences.
15:12:39 <elliott> Phantom_Hoover: noooooooooooooooooooooooooooooooo
15:12:56 <itidus20> i just assumed because of the nature of this room
15:13:13 <Phantom_Hoover> elliott, if it's any consolation, the label says 'laundry coat' because ones that say 'lab coat' cost twice as much.
15:13:25 <itidus20> i don't think i understand the term at all
15:13:29 <CakeProphet> actually I think my interest in programming was kind of a fluke.
15:14:27 <CakeProphet> I was probably going to be an English or Anthropology major had I not learned how to program.
15:14:35 <elliott> Phantom_Hoover: Inferior.
15:14:49 <CakeProphet> I was terrible at math through about half of high school.
15:14:56 <CakeProphet> only class I failed was algebra 2.
15:15:09 <itidus20> CakeProphet: ok then lets say drawing has structure. it isn't just a chaotic set of lines
15:15:11 <Phantom_Hoover> elliott, they are indistinguishable from real lab coats.
15:15:29 <elliott> Phantom_Hoover: except by label.
15:15:31 <itidus20> i think that is part of the meaning :D
15:15:50 <Phantom_Hoover> CakeProphet, so are all too many other programmers.
15:16:05 <Phantom_Hoover> elliott, nah, it was the removable label held on by a bit of plastic.
15:16:22 <CakeProphet> Phantom_Hoover: still terrible at math you mean
15:16:23 <CakeProphet> ?
15:16:31 <CakeProphet> also,
15:16:35 <Phantom_Hoover> Yes.
15:16:38 -!- maniac has joined.
15:16:41 <itidus20> CakeProphet: taking things even further.. analogy appears between art style and constructed language
15:16:44 <CakeProphet> since you are the person above me in lines said on IRC
15:16:50 <maniac> how do you represent numbrs greater then 8 bit in bf
15:16:50 <CakeProphet> I will be competing with you
15:16:51 <CakeProphet> while you are online
15:16:53 <CakeProphet> to say more lines
15:17:01 <elliott> Phantom_Hoover: DO YOU WISH TO HEAR ABOUT ALL THE WONDERFUL MCMAP IMPROVEMENTS COMING
15:17:14 <CakeProphet> maniac: difficultly
15:17:21 <Phantom_Hoover> maniac, same way you do it in everything else with fixed-size words.
15:17:51 <maniac> so i will have to respresent numbers in different bytes?
15:17:57 <elliott> yep
15:18:04 <elliott> nobody ever said it was easy
15:18:15 <itidus20> CakeProphet: well.. if you draw something in an (checks the word) axonometric projection, it means you start following some rules
15:18:35 <itidus20> maybe thats where the grammar part comes in
15:19:17 <CakeProphet> I'm pretty sure he's saying the terminology of axonometric projection has gained a new significance in the advent of visual computing blah blah blah
15:19:56 <CakeProphet> like, if it's a liberal arts dude, he's not thinking about formal grammars.
15:20:14 <CakeProphet> he's just thinking of nice words to say.
15:20:20 <itidus20> i dunno, i might be wrong here
15:20:40 <itidus20> i think that i have missed the point by a wide margin :D
15:21:07 <CakeProphet> itidus20: how many pixels would that margin be?
15:21:36 <itidus20> 20
15:21:46 <CakeProphet> well, if you used em or inches, then it would depend on your display.
15:22:08 <CakeProphet> fucking CSS.
15:28:30 <itidus20> and, slightly related:
15:28:38 <CakeProphet> !wacro
15:28:38 <EgoBot> TEETLP
15:28:50 <itidus20> It is a form in its own right. This work is unprecedented because it is constructed of purely abstract units of Mondrians new system.
15:29:09 <itidus20> As Paul Wood says: They constituted, so to speak, the first elements in a new pictorial grammar, from which subsequent compositions would be built up. The new abstractions were now built up from combinations of the simplest, completely abstract, pictorial units (geometrical forms: lines, rectangles, bars, later coloured planes)."
15:29:49 <CakeProphet> oh okay.
15:30:05 <itidus20> im quoting disparate sources about unrelated things
15:30:15 <CakeProphet> oh... okay. asshole.
15:30:21 <itidus20> i think.
15:30:24 <itidus20> so yeah
15:30:29 <itidus20> what can i say..
15:33:11 <CakeProphet> !wacro
15:33:12 <EgoBot> RSCBDKK
15:33:14 <CakeProphet> oh... okay. asshole.
15:33:15 <CakeProphet> oh... okay. asshole.
15:33:15 <CakeProphet> oh... okay. asshole.
15:33:15 <CakeProphet> oh... okay. asshole.
15:33:15 <CakeProphet> oh... okay. asshole.
15:33:18 <CakeProphet> ...lol
15:33:22 <CakeProphet> wrong line.
15:33:27 <CakeProphet> !wacro
15:33:27 <EgoBot> SKSMSPFB
15:33:28 <CakeProphet> !wacro
15:33:29 <EgoBot> MCPI
15:33:30 <CakeProphet> !wacro
15:33:31 <EgoBot> MTHNTSIM
15:33:32 <CakeProphet> !wacro
15:33:32 <CakeProphet> !wacro
15:33:33 <EgoBot> BTPL
15:33:33 <EgoBot> TQKOBJSG
15:33:35 <CakeProphet> !wacro
15:33:35 <EgoBot> SSAHTT
15:33:56 <CakeProphet> !wacro 3 5
15:33:57 <EgoBot> RPPGD
15:34:17 <CakeProphet> I think most of the shorter ones are pretty believable acronyms
15:34:26 <CakeProphet> !simpleacro 3 5
15:34:42 <CakeProphet> !acro 3 5
15:34:47 <EgoBot> BMSHEXMJSL
15:35:53 <CakeProphet> professor: "but in Vista, it gets kind of HTML... horrible."
15:36:30 <CakeProphet> distinguished scholar of our age.
15:39:29 <itidus20> what gets kind of HTML?
15:40:18 <CakeProphet> the... HTML gets HTML horrible, I guess.
15:43:34 <itidus20> CakeProphet: http://www.theparisreview.org/blog/tag/line-drawings/
15:44:38 <itidus20> this link mind you is wordy article full of over-analysis and theoretical flibber flabber just to warn
15:49:56 <elliott> I must capture the fizzie and use him as a debugging tool.
15:57:51 <fizzie> I was a dinner.
15:57:57 <fizzie> But now I'm at least momentarily here.
15:59:36 <elliott> http://sprunge.us/ORTV
15:59:37 <elliott> HAVE FUN
16:01:33 <fizzie> I shall: take a look.
16:02:43 <elliott> fizzie: Do it on pyralspite, so I can watch the hilarious mishaps. :p
16:02:49 <elliott> (Advice may not be: good.)
16:03:00 <fizzie> It's better than doing it on c.nerd.nu, at least.
16:03:05 <elliott> Well, there's that.
16:03:21 <elliott> Have you even connected to the 'spite without getting disconnected immediately yet?
16:03:22 <fizzie> Well, on the first attempt it did exactly what you said it would do, which was to hang.
16:03:32 <fizzie> Yes. Well, this was the first time.
16:04:20 <elliott> If only I was running the Scheme branch, so that you could get every chat message annoyingly repeated back to you.
16:05:16 <fizzie> Whoops, I just misclicked disconnect.
16:05:45 <elliott> hahaha
16:06:15 <elliott> More like DOWNGRADE HAHAHAHAHA
16:06:16 <elliott> L O L
16:13:40 <fizzie> Oh, I may see.
16:13:48 <elliott> What doth thou see'st?
16:14:28 <fizzie> No, it's not because of that; never mind.
16:15:00 <fizzie> I'll try a thing anyhow.
16:15:13 <elliott> What was it, out of curcuorourousrousrosity?
16:15:15 <elliott> Cucumberosity.
16:16:01 <fizzie> Well, commands are picked out in proxy.c; I was temporarily worried it might call the command processor there, which of course would make the proxy-stopping not work; but they're not, they're handled in the world-updating thread like I thought they were.
16:16:59 <elliott> Don't we have a thing for, you know, specifically safely killing the world thread? Mayhaps that would be good.
16:17:23 <elliott> i killed you
16:21:48 <fizzie> Well, it's not especially safe; it's just the stop() call, which g_thread_exit(0)s instead of exit(1)ing; it only kills the world thread by virtue of being called from the world thread. The execl will kill all the threads anyway.
16:21:50 <elliott> I think I may have killed fizzie in real life.
16:21:53 <elliott> Oh, there we go.
16:24:16 <elliott> 17:24:41 <ehird> also
16:24:16 <elliott> 17:24:42 fizzief left the game.
16:24:16 <elliott> 17:24:42 [INFO] Player disappeared: fizzief
16:24:16 <elliott> 17:24:44 <ehird> have you moved from that block
16:25:20 <fizzie> No. :p
16:25:32 -!- FireFly has joined.
16:33:42 <elliott> I like to think fizzie is just continually trying the same thing.
16:33:43 <elliott> You know, insanity.
16:33:56 <fizzie> It's not always been quite the same thing.
16:38:46 <elliott> fizzie: EGG SPAWNED BEAUTIFUL CHICKEN
16:38:50 <elliott> PET
16:38:51 <elliott> FRIEND
16:38:53 <elliott> FOREVER
16:40:46 <fizzie> Okay, yes.
16:40:53 <elliott> Oh?
16:41:42 <fizzie> Your execl() fails. You don't get the tell() out of it, because by that time the proxy thread (which does packet injection) will have already failed. The execl fails because (a) the "fd" argument is an int, not a char* to a stringized version of the fd, and (b) there's no (char *)NULL at the end of the execl.
16:41:55 <fizzie> The end result is that just the proxy thread dies.
16:42:02 -!- DH____ has quit (Remote host closed the connection).
16:42:04 -!- jix_ has quit (Quit: leaving).
16:42:06 <elliott> haha oops
16:42:09 <elliott> i can fix that
16:42:27 <elliott> sorry for being a dumbo
16:42:57 <fizzie> I stared at the code for quite a while but didn't see it; took a bit of stepping in gdb to notice.
16:43:25 <elliott> log_print should work even after console_cleanup right?
16:43:43 <fizzie> Well, uh. In theory, yes. In practice it depends on how clean console_cleanup is.
16:43:50 <elliott> Right.
16:44:17 <fizzie> It does seem to set console_outfd = 1, so after that log_print should go directly to stdout.
16:44:24 <elliott> >
16:44:24 <elliott> Usage:
16:44:24 <elliott> mcmap [OPTION…] host[:port]
16:44:28 <elliott> Well, here's a new problem.
16:44:36 <elliott> At least it doesn't fuck up the console now.
16:44:44 <elliott> if (argv[1] && !strcmp(argv[1], "--upgrade"))
16:44:44 <elliott> {
16:44:44 <elliott> upgrading = true;
16:44:44 <elliott> upgrade_fd = atoi(argv[2]);
16:44:44 <elliott> argv[2] = argv[0];
16:44:44 <elliott> argv += 2;
16:44:46 <elliott> argc -= 2;
16:44:48 <elliott> }
16:44:49 <maniac> !wacro
16:44:50 <EgoBot> BVBMTS
16:44:51 <elliott> Have I got an off-by-one here ir something?
16:44:58 <maniac> !acro
16:45:02 <EgoBot> XYQTSWQM
16:45:12 <maniac> !fuck
16:45:18 <elliott> `fuck
16:45:22 <HackEgo> ​/hackenv/bin/fuck: line 9: sqlite3: command not found \ /hackenv/bin/fuck: line 17: sqlite3: command not found \ Congratulations! 's action has brought a beautiful new baby into the world. Isn't it adorable?
16:45:32 <maniac> lol
16:45:58 <fizzie> elliott: I don't think you're passing the old argv[1]..argv[N] into the exec at the moment.
16:45:59 <elliott> Oh hm.
16:46:08 <elliott> fizzie: Yes, that's intentional, since I should just persist map state instead. But hmm.
16:46:14 <elliott> Right, there's the problem, I don't skip the parsing.
16:46:21 <fizzie> In that case you'll want to skip that, right.
16:47:17 -!- jix has joined.
16:47:20 <elliott> What the heck? Now the new parts of the map load, but all black.
16:47:23 <elliott> So they load from grey into black.
16:47:52 <elliott> But they still hover correctly.
16:47:59 <elliott> Oh.
16:48:02 <elliott> I skipped loading colours.
16:48:03 <elliott> :p
16:48:12 <elliott> Actually, I don't want to skip parsing.
16:48:17 <elliott> Because I want to re-run the Scheme config.
16:49:11 <Gregor> OMG, ZOMBIES
16:49:18 <elliott> Now what was that convenience function in glib you said to concatenate two null-terminated lists of strings eh fizzie? :P
16:50:25 <fizzie> I'm not entirely sure the real argv is legal to modify everywhere, incidentally. So it might be that you just want to build a new one in the "--upgrade" flag-check.
16:50:55 <elliott> I'm pretty sure you are allowed to modify argv?
16:50:58 <elliott> At least that's my perception.
16:51:02 <fizzie> Well, it's widely done.
16:51:11 <elliott> It's hardly the biggest wart. :p
16:51:14 <Gregor> argv is canonically, pedantically const.
16:51:29 <Gregor> I don't know of a single system in existence that implements it as such though.
16:51:58 <fizzie> As for the other question, g_strjoinv + g_strconcat + g_strsplit, but that depends on there being a real separator that's never in any of the component strings. I thought it had more of the null-terminated-lists-of-strings functions than it had.
16:53:06 <Deewiant> ISO/IEC 9899:TC2 §5.1.2.2.1 ¶2:
16:53:07 <Deewiant> The parameters argc and argv and the strings pointed to by the argv array shall
16:53:10 <Deewiant> be modifiable by the program, and retain their last-stored values between program
16:53:13 <Deewiant> startup and program termination.
16:53:46 <fizzie> Well, TC2, that's like not even C99.
16:53:48 <elliott> Yay.
16:54:00 <Gregor> I seem to recall from somewhere that POSIX and C disagree on the matter :P
16:54:11 <Gregor> The ELF spec makes them writable too.
16:54:18 <Deewiant> I can't afford ISO/IEC 9899:1999 itself.
16:55:16 <elliott> There's no unlink() for fds, is there? :p
16:55:40 <Gregor> elliott: Dear server: Please unlink your listening TCP socket. kthx.
16:55:47 <elliott> Yes. Quite.
16:55:50 <elliott> Well, you can't ioctl many things, too.
16:56:07 <fizzie> No; in any case, it's a bit debatable what it should do when the link count is more than one, too.
16:57:00 <fizzie> I was sort-of assuming that the glib temporary files would've come pre-unlinked when you don't ask for the name (NULL as one of those params), but the documentation didn't really say.
16:57:18 <fizzie> Based on all those /tmp/mcmap.FOOs, maybe not.
16:57:35 <elliott> Oh, hmm, can you really unlink a file and keep using the fd properly?
16:57:54 <elliott> 17:58:27 [DIED] Unknown option --upgrade
16:57:59 <elliott> mcmap, dude, you upgraded two times without complaint.
16:57:59 <fizzie> Yes, on most systems.
16:57:59 <elliott> Hmm.
16:58:01 <elliott> Oh, duh.
16:58:08 <fizzie> Not on Windows, though. :p
16:58:11 <elliott> I need to set main_argc/main_argv after mutating it in my if (upgrade) code. :p
16:58:17 <elliott> fizzie: Well, none of this works on Windows right now :P
16:58:20 <fizzie> (At least I think not on Windows.)
16:59:01 <elliott> fizzie: So, um. http://sprunge.us/LMaZ
16:59:11 <Deewiant> If you just fopen'd the file, I think the unlink would fail.
16:59:12 <elliott> If I make this unlink the temporary file properly, would this be something vaguely committable?
16:59:19 <elliott> There's no major ugliness in it, after all.
16:59:30 <fizzie> "When the file's link count becomes 0 and no process has the file open, the space occupied by the file shall be freed and the file shall no longer be accessible. If one or more processes have the file open when the last link is removed, the link shall be removed before unlink() returns, but the removal of the file contents shall be postponed until all references to the file are closed."
16:59:33 <fizzie> That's from POSIX.
16:59:35 <elliott> And obviously it still has the "major sections of the map are black", "steals focus", ... bugs ... but it's basic upgrade.
16:59:42 <elliott> fizzie: Ah, neat.
16:59:55 <fizzie> So the unlink-and-still-use should be POSIXly mostly-good.
17:00:16 -!- CakeProphet has quit (Ping timeout: 252 seconds).
17:00:43 <fizzie> On Windows you have to specifically say FILE_SHARE_DELETE in the dwShareMode of CreateFile to make that happen.
17:01:27 <elliott> Also the options don't seem to be heeded yet. Hm.
17:01:46 <Gregor> Oh, you thought you had to close before unlinking?
17:01:52 <Gregor> That's Windows bullshit.
17:02:25 <elliott> Gregor: I don't assume anything any more, dude; we're creating a temporary file, writing binary, machine-specific data to it, unlinking it, then execing ourselves and passing the decimal representation of the fd,
17:02:37 <elliott> so that we can convert it back to a number, read the data from it, restore, then jump into our main code path.
17:02:39 <elliott> I don't assume anything any more, dude.
17:02:54 <Gregor> ... none of that is particularly controversial.
17:03:05 <elliott> Gregor: It's new to me :P
17:03:09 <Gregor> The arguments you pass are irrelevant so long as you don't close the FD.
17:03:39 <elliott> Gregor: But, but, the serialised data /includes socket fds/ that we depend on being kept over the exec, which we then immediately start proxying on.
17:03:44 -!- maniac has changed nick to Warrior`.
17:04:02 <Gregor> If it just includes the FD numbers, then that's just dandy, you still haven't closed them.
17:04:14 <elliott> I know it WORKS, but it still feels INSANE :P
17:04:51 <elliott> fizzie: So, um, yes, about that... committing... can I...
17:04:52 <Gregor> I remember SMAUG (a MUD server) had a hack that you could upgrade the server without disconnecting anyone.
17:04:59 <elliott> Gregor: irssi has it too :P
17:05:13 <elliott> Gregor: And now finally your long-running mcmap sessions can survive a rebuild with a simple //upgrade.
17:05:18 <elliott> Assuming we didn't change the upgrade format. At all.
17:05:23 <Gregor> Hooray
17:06:33 <elliott> Gregor: But mostly it means that you can e.g. reload your Scheme configuration without it being in a weirdly inconsistent state :P
17:06:38 <elliott> And without dropping your connection.
17:07:00 <fizzie> The file thing should work on Windows too, it just needs the proper CreateFile calls. (In particular the SECURITY_ATTRIBUTES needs bInheritHandle of true, and dwShareMode that FILE_SHARE_DELETE for the delete-before-close... and I'm not entirely sure how you pass an inherited handle. Oh, and then of course you'd have to make the sockets inheritable somehow, that might be more complicated.)
17:07:10 <elliott> elliott@katia:~/Code/mcmap$ LD_LIBRARY_PATH=/usr/local/lib build/mcmap --upgrade 0 x
17:07:10 <elliott> 18:07:42 [INFO] Starting up...
17:07:10 <elliott> 99a
17:07:10 <elliott> svdsf
17:07:10 <elliott> 18:07:44 [DIED] read_buffer failed to read data
17:07:11 <elliott> "Hm."
17:07:38 <elliott> For the last time, does anyone know how to tell SDL to steal the goddamn focus? X-D
17:07:47 <elliott> It's kind of ruined if WHOOPS MINECRAFT IS ON THE MENU AND NOW YOU'RE FOCUSED ON THIS MAP WINDOW
17:08:54 <fizzie> SDL's approach to window management is somewhat minimalistic.
17:09:01 -!- nooga has joined.
17:10:11 <elliott> I don't even care if I need to fuck with the X socket :P
17:10:11 <elliott> Actually
17:10:12 <elliott> Really
17:10:17 <elliott> What I want is to not SDL_Quit at all
17:10:21 <elliott> I really, really want to maintain the surface
17:10:22 <elliott> Hmm
17:10:30 <elliott> fizzie: What if I just serialised the surface structure along with everything else
17:10:32 <elliott> Didn't SDL_Quit
17:10:34 <fizzie> That's so not supported it's not even funny.
17:10:35 <elliott> And used it as the surface value post
17:10:38 <elliott> Yes of course it isn't
17:10:47 <elliott> But the only thing it'll be maintaining is state, and an fd that'll survive, right?
17:10:50 <elliott> So it should work.
17:11:05 <elliott> fizzie is now removing my commit rights.
17:11:15 <elliott> Gregor: Are you scared yet? :P
17:11:15 <fizzie> Well, no. It's probably got all kinds of pointers into SDL's internal surface lists and whatevers.
17:11:31 <elliott> fizzie: Weeeell, let's look, shall we?
17:11:41 <elliott> 2 Uint32 flags; /* Read-only */
17:11:41 <elliott> 3 SDL_PixelFormat *format; /* Read-only */
17:11:41 <elliott> 4 int w, h; /* Read-only */
17:11:41 <elliott> 5 Uint16 pitch; /* Read-only */
17:11:41 <elliott> 6 void *pixels; /* Read-write */
17:11:42 <elliott> 7 SDL_Rect clip_rect; /* Read-only */
17:11:44 <elliott> 8 int refcount; /* Read-mostly */
17:11:47 <elliott> pixels will be repopulated by map_repaint.
17:11:51 <elliott> So all that needs to be copied is the format.
17:11:59 <fizzie> That's just the officially accessible parts.
17:12:02 <elliott> Which is just integers plus a pointer to a palette.
17:12:04 <fizzie> /** Hardware-specific surface info */
17:12:04 <fizzie> struct private_hwdata *hwdata;
17:12:08 <elliott> fizzie: Oh BUH.
17:12:17 <fizzie> That in particular is not going to survive well.
17:12:20 <Gregor> Dood, you can totally serialize a private_hwdata *
17:12:46 <elliott> fizzie: OK, so what if I used SDL's setvideomode type stuff, but then actually just ripped the fd from underneath it?
17:13:04 <elliott> Maybe I'll ask hash-sdl or something. _That_ would be fun.
17:13:05 <elliott> t/opic
17:14:01 <elliott> fizzie: I asked. Ha ha ha.
17:14:13 <elliott> Oh God they think I'm mad don't they.
17:14:16 <fizzie> There's also the double-buffering back-buffer which will get blown to pieces by the exec. As for using SDL_SetVideoMode, it will make a new window before you have a chance to mung around with it.
17:14:26 <elliott> Yes, well, that's why I'ma sking. :p
17:14:27 <elliott> asking
17:14:37 <elliott> It seems easier/nicer than making a new window and doing hacks to defocus it by finding the Minecraft window.
17:14:48 <fizzie> They will probably be all "why do you want to do this?"
17:14:54 <elliott> <prophile> isbric: mod rewrite is evil?
17:14:58 <elliott> Stop chatting guys.
17:15:02 <elliott> <prophile> mod rewrite is irrelevant
17:15:04 <elliott> This has NOTHING to do with sdl.
17:15:15 <elliott> fizzie: I've learnt that that's secret code for "I don't know".
17:15:16 <fizzie> Oh no, they're... non-topical?!
17:15:24 <elliott> NON-TOPICAL CHNANELS ARE BANNED
17:15:26 <Gregor> YOU GUYS
17:15:26 <elliott> FRENODE POLICY
17:15:28 <Gregor> SHUT THE FUCK UP
17:15:33 <Gregor> WE'RE SUPPOSED TO BE TALKING ABOUT ESOTERICA
17:15:37 <elliott> <prophile> its behaviour is perfectly valid
17:15:37 <elliott> <prophile> what you should take away from it is never to trust file extensions
17:15:39 <elliott> NEVER TRUST FILE EXTENSIONS
17:15:42 <elliott> THEY CREATE THE VOODOO MAGICKA
17:15:43 <elliott> OF THE UH
17:15:44 <elliott> GOAT SACRIFICE
17:15:47 <elliott> Gregor am i doing it right
17:15:47 <Gregor> IF YOU DON'T SHUT UP I'LL K-LINE YOU TO THE AETHEREAL PLANE
17:15:54 <elliott> "Aethereal" X-D
17:16:05 <elliott> `addquote <Gregor> IF YOU DON'T SHUT UP I'LL K-LINE YOU TO THE AETHEREAL PLANE
17:16:07 <HackEgo> 654) <Gregor> IF YOU DON'T SHUT UP I'LL K-LINE YOU TO THE AETHEREAL PLANE
17:16:48 <elliott> <isbric> prophile: true that, i feel that your a BSD or rather *NIX user :P
17:16:55 <elliott> Man, my a BSD or rather nix user is aching nowadays.
17:17:15 <Gregor> I feel that.
17:17:19 <elliott> "Is there a way to tell if a list in Haskell is infinite? The reason is that I don't want to apply functions such as length to infinite lists."
17:17:31 <Gregor> HahahaFAIL.
17:17:59 <elliott> God, I don't think hash-SDL are even /interested/ in my question.
17:18:10 <fizzie> I think it's CRYSTAL ALIGNMENT okay to be off-topic GEOMANTIC VIBRATIONS as long as we CHANNELING THETANS add suitable on-topic DOWSING BREATHARIAN words in-between.
17:19:08 <Gregor> elliott: That's because your question is terrible :P
17:19:18 <elliott> <elliott> Say I wanted to maintain an SDL surface corresponding to an X window across an exec(). I understand that serialising the SDL_Surface is not really possible since it contains a bunch of pointers to internal SDL things.
17:19:18 <elliott> <elliott> Is there any way (hacky or not) to make SDL create a surface on an existing X windows fd?
17:19:22 <elliott> IT IS A PERFECTLY OK QUESTION
17:19:31 <elliott> ("or not" -- yeah right)
17:19:46 <elliott> fizzie: So... what does a private_hwdata look like?
17:20:49 <fizzie> It depends on the display driver.
17:21:25 <elliott> X. :p
17:23:02 <nooga> esoteric? aleister crowley!
17:23:03 <fizzie> For X11, it's a struct with Display *s, Visual *s, three Windows, XIM and XIC handles, a XShmSegmentInfo handle to the corresponding X shared-memory segment if that exists, a backing XImage*, a GC on that, mouse warping settings, an SDL_Rect** list of modes, few more Visual*s, Xinerama/XRandR/XVidMode pointers, and the colormaps.
17:23:07 <fizzie> And quite a few other things.
17:23:15 <elliott> I'm crying.
17:23:23 <Gregor> GOOD
17:23:28 <elliott> OK, how about that de-focus thing? X-D
17:24:07 <fizzie> How about you just make your xmonad.hs or whatever not let mcmap ever steal the focus?-)
17:24:12 -!- Warrior` has left ("Leaving").
17:24:29 <elliott> Heh.
17:25:57 <elliott> fizzie: So, ehhh, can I commit this thing? I even abstracted out the serialisation buffer reading/writing stuff, so the ugly level is really low outside the two bits of main.c and cmd.c.
17:26:52 <fizzie> Sure, if you want. It's not so distracting, and even if it breaks, it's the user's own fault for typing //upgrade.
17:27:10 <elliott> Yesss
17:27:27 <elliott> fizzie: Oh god, I have to merge it into the Guile branch
17:27:42 <fizzie> Yes, please; I don't want to. :p
17:27:47 <elliott> HAHAHAHAHAHAHAHAHAHA SO MANY CONFLICTS
17:27:50 -!- elliott has left ("Leaving").
17:27:53 -!- elliott has joined.
17:32:13 -!- oerjan has joined.
17:35:15 <elliott> fizzie: Holy crap, I merged and //upgrade worked _first time_.
17:35:53 <elliott> fizzie: You should try it, it's truly a wonder to behold. :p
17:38:28 -!- Taneb has joined.
17:39:33 <Taneb> Hello!
17:39:46 <elliott> fizzie: Guess who just connected to c.nerd.nu with my "automatically repeat all chat" hook.
17:39:51 <elliott> "Oops."
17:39:58 <elliott> Phantom_Hoover:
17:40:19 <Phantom_Hoover> elliott, are you turning into Lymee.
17:40:29 <elliott> Phantom_Hoover: wat.
17:40:47 <fizzie> elliott: Guess who just tried to connect to [REDACTED] with the old that hook: http://p.zem.fi/m2yc
17:41:15 <elliott> fizzie: You don't have to redact it; it's whitelisted. Though I guess I don't really want the domain publicly logged.
17:41:28 <elliott> But yes, packet-fields now does alist, not vectors.
17:41:33 <elliott> (use-modules (ice-9 regex))
17:41:33 <elliott> (define (scrub str)
17:41:34 <elliott> (regexp-substitute/global #f "§." str 'pre 'post))
17:41:34 <elliott> (on-packet server (chat packet)
17:41:34 <elliott> (let ((scrubbed (scrub (packet-field packet 'message))))
17:41:35 <elliott> (if (not (string-match "^<ehird>" scrubbed))
17:41:37 <elliott> (chat (string-append "You said: " scrubbed)))))
17:41:39 <elliott> That's the new code.
17:41:39 <Phantom_Hoover> elliott, you're replicating Lymee's carefully honed annoying ping technique.
17:41:51 <elliott> Phantom_Hoover: Ah. WEll. You know. breaking news, and all that.
17:41:57 <elliott> Puncuation, who neds it.
17:42:16 <fizzie> elliott: That's funny, the newly created window wasn't auto-floating, unlike the old one which (with -s NxM) is.
17:42:29 <elliott> fizzie: It also doesn't seem to respect the sizes, for some reason.
17:42:35 <elliott> I think I'll fix the "black map parts" bug first, though.
17:42:44 <elliott> Which...
17:42:45 <elliott> Might be hard.
17:42:48 <fizzie> Other than that and the black map parts, it workeded.
17:42:50 <elliott> I cna't just esrialise regions, pointers and whatnot.
17:43:02 <elliott> Do you want to write map_serialize/map_deserialize? :p
17:43:05 <elliott> I promise to plug it in nicely if you do.
17:43:13 <elliott> There's even nice functions for it exclamation mark
17:44:31 <fizzie> It might be reasonably doable, except it would make one honking huge temporary file.
17:45:19 <elliott> fizzie: Come to think of it, you could just finish the regionfile code, or at least make it slightly /less/ broken, and then it'd just be a few ints or whatever and no duplicated work.
17:45:31 <elliott> It isn't /that/ broken, is it?
17:46:18 <Taneb> Fifty new exoplanets discovered!
17:46:28 <elliott> Yay
17:46:32 <elliott> How's Rosyarrow?
17:46:43 <Taneb> Still the same
17:46:46 <Taneb> Barely been on
17:47:58 <elliott> fizzie: I mean, I don't see why the regionfile code shouldn't always be on, even if "on" means "/tmp/mcmap.region.sodijasjdois".
17:48:02 -!- sebbu2 has changed nick to sebbu.
17:48:39 <fizzie> Well... the existing functions could be used for the "write out everything" / "read in everything" functions, that much is true. Though again that takes very much disk space, takes quite an annoyingly long time (all that compression) and would actually require a whole temporary directory tree that'd then get cleaned up in all cases.
17:49:06 <elliott> fizzie: Um, what I meant is, have regionfile code on from the start.
17:49:13 <elliott> Pointed at a tmp directory if the user doesn't elect to specifically use it.
17:49:13 <fizzie> It's completely missing the logic of when to write chunks to disk.
17:49:19 <elliott> Then it's literally just the standard restore process.
17:49:31 <elliott> As in, nothing has to be done, other than telling it to use /tmp/blah.
17:49:35 <fizzie> Also have I already mentioned it's quite a lot of disk space?
17:49:44 <elliott> I thought it was gzipped
17:49:48 <elliott> It should really not be that much disk space.
17:49:57 <elliott> I mean, it should not use more disk than mcmap uses ram.
17:50:08 <fizzie> How large is your world?
17:50:16 <elliott> Infinite.
17:50:22 <elliott> But I explore only finite areas.
17:50:33 <fizzie> Yes, I mean, "your world folder on that server".
17:50:46 <elliott> Fact is, mcmap never unloads chunks, and people have about a hundred times more disk than RAM, so it should not matter at all.
17:50:57 <elliott> fizzie: It's, what, twenty four, thirty megs? It's a small server.
17:50:58 <nooga> minecraft again
17:50:59 <elliott> But it's not very relevant.
17:51:07 <fizzie> /tmp is often not very large either.
17:51:08 <nooga> is 1/8 out?
17:51:12 <nooga> 1.8*
17:51:17 <elliott> fizzie: Well, ~/.mcmap/tmp then. :p
17:51:35 <elliott> Really, there is no way you can have enough RAM for mcmap but not the same amount of disk.
17:51:46 <elliott> You can't say two gigs is acceptable RAM usage but a ~huge~ file; it's incoherent.
17:53:10 <elliott> fizzie: Also, have I mentioned, it'd make //upgrade better. :p
17:53:23 <elliott> But yeah, seriously, there's no good reason not to use the regionfile stuff all the time.
17:53:46 <fizzie> It's not about having the disk space, it's about wasting it for something like this. Also doing the the disk IO for no benefit, if it's not going to be persisted between sessions.
17:54:05 <fizzie> In any case, have I mentioned there's currently no logic to decide when chunks need to be flushed to disk?
17:54:18 <elliott> You have; I'm arguing under the assumption that it starts existing.
17:54:22 <elliott> fizzie: Well, OK then; default to /tmp.
17:54:29 <elliott> Then it's quite literally identical to in-RAM storage.
17:54:38 <elliott> Yes, maybe it'll get too big; this is called tradeoff time. :p
17:55:00 <elliott> But on a completely different tack,
17:55:06 <elliott> Would shm or something allow the sharing of the existing addresses?
17:55:08 <elliott> Without copying.
17:55:18 <elliott> Or at least, only copying shm → new structures.
17:55:25 <elliott> Rather than old structures → something → new structures.
17:55:38 <fizzie> It'll also leave all those in-/tmp world saves around, since the cleanup will never work; the standard way for mcmap to shut down is probably to crash. :p
17:55:50 <elliott> Maybe for you. :p
17:55:57 <elliott> But you can hook into segfaults at least.
17:55:58 <elliott> SDL does.
17:56:38 <fizzie> It's probably not safe to do filesystem operations from a signal handler. (It's pretty much not safe to do anything from one.)
17:56:41 <fizzie> Aaaanyway.
17:58:23 <fizzie> You can have a shared memory segment that you attach to a defined address, but it of course might not work due to ASLR and such.
17:59:09 <fizzie> Using offsets as opposed to pointers can of course mitigate that to some extent, and probably the indirection in many cases doesn't cost all that much.
17:59:17 -!- augur has quit (Remote host closed the connection).
17:59:21 <fizzie> Though you can't malloc() new storage out of a shared memory segment.
17:59:44 <elliott> I still think the only person who will ever have problems with regionfile-always in practice will be Vorpal, and that's because he tries to make any change to the architecture as awkward as possible. Actually maybe he should just stay on whatever revision he's on, forever.
18:00:16 <Taneb> I may write a lambda calculus tutorial
18:00:36 <fizzie> You can't turn a private memory segment into a shared one later on, though.
18:00:38 <Gregor> Taneb: http://codu.org/lambda/lambda.html
18:01:12 <Taneb> That's not a tutorial
18:01:13 <Taneb> At all
18:01:30 <Taneb> That's a calculator
18:01:37 <Gregor> Taneb: It would help a tutorial.
18:01:53 <Taneb> Oh, okay
18:01:55 <Taneb> Thanks!
18:01:55 <elliott> fizzie: But yes, honestly, it would be nice if we could avoid copying/serialisation.
18:02:12 <elliott> fizzie: What if we used MAP_ANONYMOUS and somehow made it a shared segment?
18:02:19 <elliott> And then just passed the address over.
18:02:45 <elliott> mcmap's permanent memory allocations come from like three places, so it's not that awkward to use a pool, or several.
18:02:56 <itidus20> was that lambda page created from yesterday's chat?
18:03:31 <itidus20> .... im guessing not
18:03:36 <itidus20> :P
18:04:27 <itidus20> then i clicked start
18:04:43 <itidus20> and i realized this ain't no "was that lambda page created from yesterday's chat"
18:05:25 <elliott> Gregor: Your evaluation of (Yc Yc) grows indefinitely. :(
18:05:31 <elliott> I think you can get it constant with some speculative evaluation.
18:05:35 <fizzie> I don't think you can have a MAP_ANONYMOUS mapping survive exec in any way. If you're willing to put all your stuff into a specifically allocated memory area, you can use shm_open and then mmap that into both the original process and the post-//upgrade process, but there's no real guarantee you're going to be able to do that to the same address.
18:06:00 <elliott> fizzie: So there's literally no way to share memory between two processes without some kind of copying?
18:06:06 <elliott> Post process-mortem.
18:06:10 <Gregor> elliott: It supports several evaluation strategies, although it doesn't currently present them as options :P
18:06:36 <elliott> Gregor: It does sharing right? ...I THINK the untyped LC can do sharing...
18:06:37 <fizzie> elliott: The shm_open + mmap doesn't involve any copying; it just might be in a different location afterwards.
18:06:38 <elliott> oerjan: :P
18:06:47 <elliott> fizzie: Well, that's not a big deal, is it?
18:06:52 <elliott> As long as there's a predictable way to get that location.
18:07:04 <itidus20> agh.. friggen lambda..
18:07:05 <fizzie> It depends on what you put there.
18:07:14 <elliott> I suppose it invalidates pointers, but you can avoid storing those. :p
18:07:23 <elliott> I mean, you can just subtract the base address from any pointer.
18:07:26 <Taneb> What should I call this tutorial?
18:07:37 <fizzie> Yes: <fizzie> Using offsets as opposed to pointers can of course mitigate that to some extent, and probably the indirection in many cases doesn't cost all that much.
18:07:39 <Taneb> λWTF?
18:07:49 <itidus20> so, 1 = successor to zero eh
18:08:01 <elliott> itidus20 discovers... THE PEANO POSTULATES
18:08:16 <itidus20> no i just saw a picture of it :-s
18:08:26 <itidus20> 1 = (succ)(zero) :P
18:08:32 <elliott> Gregor: You do explicit alpha renaming. :( at your evaluation strategy, :(.
18:09:24 <itidus20> and so.. 2 = successor to the successor of zero.. ahh what a curious thing
18:09:32 <Taneb> All about lambda?
18:09:33 <Gregor> elliott: The alpha renaming is explicit so as to maintain some vague semblence of readability.
18:09:43 <elliott> Gregor: De Bruijn, man :P
18:09:52 <elliott> You can convert that to explicitly-bound form at display time.
18:09:54 <Taneb> This tutorial isn't going to get very far without a name
18:10:07 <elliott> (You can even associate names with indices in contexts so that the display is consistent wrt transforms.)
18:11:27 <oerjan> <elliott> oerjan: :P <-- wat
18:11:52 <elliott> oerjan: can pure untyped LC with no frills do sharing?
18:12:45 <oerjan> elliott: sure, it can do lazy evaluation which means each argument to a function is only evaluated once
18:13:39 <oerjan> you need frills if you want to share things defined in terms of themselves, though.
18:14:06 <elliott> right
18:14:35 <oerjan> (i.e. when you translate let x = whatever x in x to LC using self-application, sharing disappears)
18:14:47 <elliott> I take it there's a way to recover that
18:14:59 <elliott> oerjan: all that's needed to reduce (Y Y) to (Y Y) rather than growing infinitely is speculative evaluation, right?
18:15:14 <oerjan> erm
18:15:29 <oerjan> i discovered this when thinking about lazy-k
18:15:41 <oerjan> and my idea was simply to cache self-applications
18:15:54 <elliott> the Y comment was separate, btw
18:16:05 <Taneb> It is bad that there are two mathmeticians with places in history called Alonzo Church
18:16:11 <oerjan> elliott: oh and i'm not talking about infinite growth, you don't need sharing to avoid that
18:16:17 <elliott> oerjan: I know that
18:16:22 <elliott> like I said, it was a separate comment
18:16:34 <Taneb> They are related
18:16:35 <Taneb> Huh
18:16:49 <itidus20> taneb a persons date of birth is intentionally a private matter. or else it could be encoded within his name :P
18:17:10 <oerjan> elliott: i've thought about S I I (S I I) in that vein, and avoiding growth for that requires sometimes evaluating I x in non-head position
18:17:20 <itidus20> ok the word intentionally is too strong
18:17:21 <oerjan> i assume Y Y would be similar
18:17:44 <elliott> oerjan: right, so basically speculative evaluation, no?
18:17:52 <elliott> evaluating things you're not required to because you think they'll help :P
18:18:08 <oerjan> elliott: yeah. but you can also detect certain functions which always cheap to apply, such as I
18:18:16 <oerjan> *which are
18:18:21 <elliott> right
18:18:44 <elliott> so, general, space-and-time-efficient, non-strict LC small-step reducers
18:18:47 <elliott> GOGOGOGOGO EVERYONE
18:18:59 <elliott> my goal is to reduce every topic in here to research problems
18:19:06 <itidus20> i'll bring the coffee
18:19:43 <itidus20> cos, i'm not shy with the number of teaspoons of coffee
18:20:08 <elliott> oerjan: he ain't shy
18:20:32 <itidus20> with any luck you can have panic attacks at 5am just like me
18:21:02 <Vorpal> <elliott> I still think the only person who will ever have problems with regionfile-always in practice will be Vorpal, and that's because he tries to make any change to the architecture as awkward as possible. Actually maybe he should just stay on whatever revision he's on, forever. <-- what does that change do?
18:21:21 <elliott> Vorpal: It's the mcregion-bsaed caching-and-persistence system.
18:21:29 <elliott> Should use less disk than mcmap uses in RAM.
18:21:31 <itidus20> elliott: in other words i put as much as 2 heaped teaspoons of coffee in my mug
18:21:56 <Vorpal> elliott: fair enough. Would be a problem on a thin client, but I doubt anyone would use that for running mcmap
18:22:05 <Taneb> itidus20: Only 2?
18:22:14 <elliott> fizzie: See, even Vorpal is 0kay with it.
18:22:21 <itidus20> yeah, only 2
18:22:34 <Taneb> Of course, I have no need for coffee, but I have a friend who takes two and a half, black, no sugar
18:22:42 <Vorpal> elliott: in worst case I guess I could put it on tmpfs. The disk in the laptop I use for mcmap is quite slow, 5400 RPM
18:22:50 <Vorpal> at least not an SSD
18:22:56 <itidus20> wow
18:22:58 <Vorpal> I might have had a problem with it if it used ssd
18:23:05 <Vorpal> if I used*
18:23:06 <itidus20> Taneb: he sounds like a badass
18:23:08 <Vorpal> gah, tired
18:23:19 <elliott> Vorpal: SSD write-cycles are not really anything to worry about any more.
18:23:26 <Taneb> itidus20: Nah, she just likes her coffee like that
18:23:27 <elliott> But yes, /tmp would certainly work.
18:23:32 <itidus20> :o
18:23:36 <elliott> Vorpal: The nice thing about doing it by default is that it'll make the new //upgrade work seamlessly. :p
18:23:36 <itidus20> dear god its a female
18:23:39 <elliott> Right now it loses your map data.
18:23:40 <Vorpal> 8-19 at university today. Quite tired.
18:23:55 <Vorpal> elliott: wait what, upgrade without reconnecting?
18:23:59 <Vorpal> elliott: if so: why the fuck
18:24:11 <fizzie> My /tmp is only 512M. :/
18:24:13 <Vorpal> I mean, mcmap doesn't need that
18:24:22 <itidus20> sorry taneb, im just kidding for dramatic effect
18:24:27 <elliott> Vorpal: It's already written.
18:24:34 <fizzie> Vorpal: I asked the very same question; apparently simply because it can be done.
18:24:39 <Vorpal> ah
18:24:44 <elliott> Vorpal: Anyway, you'll want to reload your Scheme configuration when that stuff is done.
18:24:51 <Vorpal> elliott: is this the HA edition of mcmap
18:24:58 <elliott> Might as well be a _proper_ reload that also works for upgrades, not just a deinitialise-Scheme-somehow-and-argh-I-don't-even-know hack.
18:25:04 <Vorpal> elliott: oh right, I'm not on a scheme branch at all
18:25:15 <elliott> Right, well, I don't recommend anyone be on that branch right now.
18:25:17 <elliott> Or use //upgrade.
18:25:19 <Vorpal> elliott: I haven't played mc for quite a while now, like 3 weeks
18:25:22 <elliott> It's in both branches but lacks... polish.
18:25:59 <Vorpal> elliott: anyway you need to pass on the FDs I guess. Would that even work on the windows build?
18:26:00 <elliott> <JeZ-l-Lee> wow, 89 people in this room now - think that is a new record
18:26:04 <elliott> AND NOBODY ANSWERING MY QUESTION
18:26:07 <Vorpal> I mean, sure, with exec()
18:26:16 <elliott> Vorpal: Apparently Windows has something for it. But no, currently the built is so broken on Windows, you have no idea.
18:26:21 <elliott> (It would just be a simple ifdef to fix it again.)
18:26:25 <fizzie> Vorpal:
18:26:26 <fizzie> <fizzie> The file thing should work on Windows too, it just needs the proper CreateFile calls. (In particular the SECURITY_ATTRIBUTES needs bInheritHandle of true, and dwShareMode that FILE_SHARE_DELETE for the delete-before-close... and I'm not entirely sure how you pass an inherited handle. Oh, and then of course you'd have to make the sockets inheritable somehow, that might be more complicated.)
18:26:28 <elliott> (But that's dignifying the Hack with such things.)
18:26:41 <elliott> Vorpal: https://github.com/fis/mcmap/commit/4edb5be2f9c6625151707294ece06b2374d98ce9
18:26:45 <Vorpal> hm
18:26:47 <elliott> Vorpal: Please enjoy this terrifying yet short diff.
18:27:18 <Vorpal> elliott: I'm kind of tired. Too tired to read C code certainly.
18:27:36 <elliott> Vorpal: Sleep won't help you understand it.
18:27:45 <Vorpal> elliott: 6 hours of lectures in one go is kind of... eugh
18:27:57 <elliott> Vorpal: At least gawp at the cmd.c part at the very top.
18:28:03 <elliott> It's short and the most maximally terrifying part.
18:28:09 <fizzie> elliott: char fd_str[256]; snprintf(fd_str, sizeof(fd_str), "%d", fd); => char *fd_str = g_strdup_printf("%d", fd);
18:28:14 <Vorpal> first bison & lex and other things about compiler design for 2 hour, then linear algebra for 4 hours.
18:28:20 <elliott> fizzie: That allocates, and I'd have to free it post-execv, which is never.
18:28:30 <elliott> Memory leaks, don'tchaknow.
18:28:56 <fizzie> You already just throw away the proxy_serialize_state buffer, which is far larger.
18:29:10 -!- augur has joined.
18:29:12 <elliott> Hmm, right, I'll fix that.
18:29:17 <Vorpal> elliott: well cmd.c seems straightforward. I seen this trick done in IRCds before. I assume the id for the network fd is fixed?
18:29:26 <Vorpal> oh wait there it is
18:29:26 <elliott> Vorpal: No?
18:29:27 <Vorpal> in the argument
18:29:30 <elliott> Yeah.
18:29:31 <Vorpal> yeah tired
18:29:36 <elliott> Vorpal: But it's not the network fd.
18:29:42 <elliott> It's an fd created from a temporary file just to pass serialised state around.
18:29:43 <Vorpal> elliott: well that has to go somewhere.
18:29:46 <elliott> The actual fds are hidden inside that byte stream.
18:29:56 <itidus20> Vorpal: are you a grad student?
18:29:59 <Vorpal> elliott: ah yes, same thing as that ircd did, except it used pipes iirc.
18:30:10 <fizzie> elliott: The process is going to exit in a few lines, you're going to be "leaking" all the world data and everything if you insist on freeing everything for the exec.
18:30:17 <Vorpal> itidus20: I don't remember the US system. Please convert to Swedish system or clarify yourself
18:30:21 <elliott> fizzie: BUT THEY'RE NOT LOCAL LEAKS
18:30:22 <itidus20> oh hmm
18:30:30 <itidus20> do you have a degree yet?
18:30:39 <Vorpal> itidus20: I'm a compsci student, bachelor level, third (and last) year for that.
18:30:46 <fizzie> elliott: WELL WHAT ABOUT WHEN THE FD IS LARGER THAN 10^256 HUH?
18:31:02 <elliott> fizzie: THEN YOU'RE IN FUTURE SPACE!!!!!!!!!!!!!!!!!!!
18:31:03 <itidus20> vorpal, well i mean, it sounds like they have some tough classes :D
18:31:06 <elliott> WHY ARE YOU PLAYING MINECRAFT GO FUTURE VR
18:31:16 <Vorpal> itidus20: eh, isn't it just that the US education system sucks?
18:31:25 <itidus20> i am in AUS system which is probably like the US
18:31:29 <Vorpal> ah
18:31:31 <itidus20> just look at the name
18:31:32 <itidus20> aUS
18:31:36 <itidus20> :P
18:31:37 <Vorpal> XD
18:31:46 <elliott> Vorpal: Anyway, the main issues with //upgrade right now are (a) loses your map data, (b) pops up a new map window which steals focus. :/
18:31:56 <itidus20> aUS, USa .. its an anagram
18:32:11 <elliott> Vorpal: Also (c) makes me connect to c.nerd.nu with my chat-repeating spamscript.
18:32:15 <Vorpal> bbl food
18:32:21 <elliott> I'm sure I'll be on the ban list within a day.
18:32:40 <Taneb> itidus20: Maybe a is short for the Scots auld
18:32:48 <Taneb> itidus20: Which means senior
18:32:56 <Taneb> itidus20: Which can be shortend to sr.
18:33:05 <Taneb> itidus20: SO YOU LIVE IN THE USSR
18:33:29 <itidus20> terra australis or something
18:34:15 -!- augur has quit (Remote host closed the connection).
18:34:36 <itidus20> **r** *us**a*is or something
18:35:20 <itidus20> **r** *us*****s
18:36:28 <Vorpal> <elliott> I'm sure I'll be on the ban list within a day. <-- so remove that script?
18:36:35 <elliott> Vorpal: it was a one-time thing
18:36:40 <elliott> I got kicked automatically within four messages
18:36:42 <itidus20> austr**ia
18:36:46 <oerjan> terror mustards
18:36:52 <Vorpal> elliott: ah well, say sorry then or such
18:36:56 <itidus20> aus******
18:37:09 <elliott> Vorpal: I doubt they even noticed; have you _seen_ that thing's chat?
18:37:18 <itidus20> ^russia, ussr, austria, usa
18:37:20 <Vorpal> elliott: no, never been there
18:37:24 <elliott> You're missing out.
18:37:35 <Vorpal> elliott: probably would kill my mc since I'm using improvedchat, which has scrollback
18:37:49 <Vorpal> also it has line editing and input history
18:37:52 <Vorpal> quite a nice mod
18:37:54 <oerjan> just 9 strips left until iwc 3160 aieee (and someone in the forum apparently thought it was 3150)
18:38:02 <Vorpal> especially when working with lots of server commands
18:38:09 <Taneb> There's new posts in the forum?
18:38:14 <Taneb> Why didn't you tell me?
18:38:29 <elliott> oerjan: is that the CH number?
18:38:36 <oerjan> elliott: yes
18:38:42 <Vorpal> oerjan: if it ends there, we don't know. He might go for one more, to say he did *more* than that
18:38:48 <oerjan> Taneb: erm because i'm reading the forum only twice a week
18:38:54 <elliott> oerjan: latest strip looks _somewhat_ like edging towards a conclusion
18:39:01 <elliott> not that I have a good handle on IWC plotlines
18:39:19 <Vorpal> elliott: I read IWC and I'm not sure I understand the current plot either.
18:39:22 <Vorpal> It is rather confusing
18:39:27 <Vorpal> but yes
18:40:09 <elliott> oerjan: it's ok, you still have all those mezzacotta archives to go through...
18:40:16 <oerjan> elliott: ah yes.
18:40:22 <elliott> and it's still updated! daily!
18:40:58 <Vorpal> elliott: your upgrade command seems to have an issue. No version number on the data that I can spot
18:41:07 <Vorpal> elliott: if you upgrade, the new version might have more state
18:41:16 <elliott> Vorpal: The version number is, if it crashes, you need to restart it manually.
18:41:24 <Vorpal> you need to be able to handle the old state format for true HA.
18:41:36 <elliott> Erlang patches welcome
18:41:45 <Vorpal> XD
18:42:08 <Vorpal> elliott: actually that would be easy in erlang, there are ready made modules with code to help you do that.
18:42:29 <elliott> It wouldn't be hard in mcmap either, but really it's for reloading, not particularly "major" upgrading. :p
18:42:51 <Vorpal> elliott: anyway, worse than instant crash might be a situation where it silently corruptions the data in some subtle way.
18:43:08 <elliott> But hopefully there should soon be an easy-ish way to get mcmap to prompt you to say yes to automatic pull/make if there's new changes before you even connect, bypassing the need entirely in 90 percent of upgrade cases. :p
18:43:18 <Vorpal> elliott: anyway, reloading, as in reloading config? Or what?
18:43:19 <elliott> I'm good at obsoleting my oen work.
18:43:26 <elliott> Vorpal: Well, reloading "scheme shit".
18:43:29 <Vorpal> because uh, for reloading config that sounds overkill
18:43:35 <Vorpal> elliott: this sounds overkill for that
18:43:42 <elliott> There's no way to de-initialise Guile that i know of.
18:43:46 <elliott> It's hardly overkill, the diff isn't that big.
18:43:54 <elliott> And it's certainly cleaner than something hacked specifically for the Scheme support.
18:43:56 <Vorpal> elliott: nor unload specific scheme scripts?
18:44:10 <Vorpal> elliott: besides, what if the scripts in question have state, won't that be lost?
18:44:14 <elliott> That's not a thing anybody does. I don't like the Emacs model where you just run it over, and all your old variable bindings, hooks, etc. stick around.
18:44:31 <elliott> Vorpal: Yes, but they'd be lost if you restarted mcmap normally anyway; nothing's going to be storing anything massively persistent without, you know, persisting it.
18:44:37 <Vorpal> true
18:45:15 <Vorpal> elliott: guess you need an on-reload event or such
18:45:23 <Vorpal> or well, on-shutdown maybe
18:45:28 <elliott> That's just called "your script is executing". :p
18:45:30 <Vorpal> to allow persisting state
18:45:41 <Vorpal> elliott: hm? There is no way to add a hook for specific events?
18:45:43 <elliott> I don't see much use for persistent state in scripts but maybe that's my Lack Of Imagination.
18:45:50 <elliott> Vorpal: Never said that.
18:46:04 <elliott> I said that on-reload is easily detectable: if you're not loading, your script's statements aren't executing.
18:46:08 <Vorpal> elliott: example: persistent chat history, not a good example I admit
18:46:11 <elliott> Script:
18:46:14 <elliott> (display "foo") (newline)
18:46:18 <elliott> That displays "foo" iff we're reloading.
18:46:35 <Vorpal> elliott: I meant before the reload
18:46:37 <Vorpal> not after
18:46:47 <Vorpal> elliott: as in, a hook that allows you to save your state
18:46:56 <Vorpal> before mcmap exits or reloads or whatever
18:46:57 <elliott> Well, that's a bit harder. But anyway, this is not a priority, compared to all the other things that need doing.
18:47:04 <Vorpal> fair enough
18:47:11 <elliott> Like: working regionfile code, working mostly-autoupdate code, making the Scheme stuff actually usable.
18:47:22 <elliott> Making upgrade not create a new window with lost map data and stealing focus.
18:47:30 <elliott> Quite higher priority. :p
18:47:56 <Vorpal> elliott: hm what about a scheme script that did aim assist, for the bow that is. Corrected your arrow for moving mobs or such.
18:47:56 <Vorpal> XD
18:48:08 <elliott> Yes, there's all sorts of fun cheats you can do.
18:48:16 <elliott> I'm personally looking forward to writing a //quarry.
18:48:19 <Vorpal> elliott: the one I mentioned would be rather hard to write though
18:48:24 <Vorpal> elliott: what would that one do
18:48:39 <elliott> Vorpal: Dig a quarry for you at an inhuman pace. Preferably automatically handling putting things in chests, etc.
18:48:43 <Vorpal> just dig out a hole? That is not cheat, that is automation.
18:48:49 <elliott> That's cheat.
18:48:53 <Vorpal> elliott: oh the server doesn't limit speed of digging?
18:48:57 <elliott> Well, it does.
18:49:09 <elliott> But there's no way a human can operate at ABSOLUTLEY optimal speed :P
18:49:13 <elliott> re: automation: Not all of us are WorldEdit-creative-MinecraftCAD .
18:49:15 <elliott> players.
18:49:16 <Vorpal> elliott: not much of a cheat.
18:49:22 <elliott> It is totally a cheat.
18:49:33 <elliott> You get tons of resources by sitting back and doing nothing with Minecraft minimised
18:49:36 <Vorpal> elliott: aim assist is totally a more cheaty cheat
18:49:53 <elliott> Why have aim assist when mcmap could just automatically find, target, and shoot at every enemy in range? It doesn't even have to send that to the client.
18:50:00 <elliott> So you just see arrows sprouting out of you and killing every enemy in sight.
18:50:01 <Vorpal> elliott: heh
18:50:10 <Vorpal> elliott: that would be kind of cool.
18:50:59 <elliott> Or how about THIS for a hack: You type a command, and it jumps off the nearest cliff.
18:51:05 <elliott> EVERYTHING IS POSSIBLE WITH MCMAP/GUILE
18:51:07 <Vorpal> elliott: btw I tried out that water shader mod. Kind of cool, but quite buggy for me. Like random terrain around me flickering and so on.
18:51:22 -!- Wamanuz has quit (Remote host closed the connection).
18:51:38 <Vorpal> elliott: did you enable flying on your server? I don't remember
18:51:45 <Taneb> brb
18:51:51 -!- Wamanuz has joined.
18:51:52 <elliott> Vorpal: No.
18:51:55 <Vorpal> ah
18:52:00 <elliott> And the setting of the fly thing is irrelevant to whether fly hacks are approved of.
18:52:05 <elliott> (It triggers for fences and shit sometimes.)
18:52:09 <elliott> But yes, it's meant to be "legit".
18:52:34 <elliott> I don't even like people using mcmap to scout out ore really, though it's not something I'd ban. Personally I've found that precision mining is incredibly boring.
18:53:42 <Vorpal> <elliott> (It triggers for fences and shit sometimes.) <-- yes, and going down a ladder while removing the backing stone blocks
18:53:51 <Vorpal> I had that happen once
18:53:57 <Vorpal> no clue how, couldn't reproduce it
18:54:19 <Vorpal> elliott: anyway I found that mining in general is quite boring.
18:54:27 <elliott> It is, but oh well.
18:54:31 <elliott> mcmap is more fun than Minecraft.
18:54:31 <itidus20> i found a fascinating article and trying to apply what i saw there.. so what if anything is wrong with this? λx.λy.x+y
18:54:42 <nooga> i tried to write a mod called 'extractor'
18:54:54 <Vorpal> elliott: making a mine might be fun. As in, with lifts and winches and so on. So it looks like a real mine
18:55:32 <elliott> Clearly we need dfmap.
18:55:35 <elliott> Oh wait, that's DF.
18:55:37 <nooga> generally it was a chest that was digging a shaft to the bedrock collecting ores
18:55:44 <itidus20> λm.λx.λc.m * x + c
18:55:48 <elliott> nooga: I thought you hated Minecraft.
18:55:54 <Vorpal> I have been in a mine once. A high tech one. Mostly a wide road going down inside a mountain. And lots of advanced machines. As far as I understood, that mine operates mostly automatically, AI-controlled trucks, using position markers on the walls and what not.
18:55:55 <elliott> Gregor: You gonna tell itidus20 that LC has no built-in arithmetic?
18:56:07 <itidus20> hmm
18:56:08 <elliott> Vorpal: I thought you meant in Minecraft X-D
18:56:09 <Vorpal> <elliott> Clearly we need dfmap. <-- stonesense
18:56:09 <Gregor> elliott: Nope.
18:56:14 <nooga> and this chest would spawn other chests that did the same but horizontally
18:56:15 <itidus20> thanks gregor :D
18:56:16 <elliott> Vorpal: No, dfmap is DF itself. :p
18:56:20 <nooga> on different levels
18:56:22 * itidus20 wipes brow.
18:56:26 <elliott> stonesense is more like the game that DF is the mapper for.
18:56:40 <Vorpal> elliott: hm? Yes I meant building a mine replica in minecraft. Not a minecraft style mine, but do it creative to look like a real mine
18:56:44 <Vorpal> that is what I'm suggesting
18:57:00 <elliott> I meant
18:57:01 <elliott> <Vorpal> I have been in a mine once. A high tech one. Mostly a wide road going down inside a mountain. And lots of advanced machines. As far as I understood, that mine operates mostly automatically, AI-controlled trucks, using position markers on the walls and what not.
18:57:02 <elliott> <elliott> Vorpal: I thought you meant in Minecraft X-D
18:57:09 <elliott> the first time i read it
18:57:12 <Vorpal> ah
18:57:13 <Vorpal> XD
18:57:13 <elliott> I was like what, without any mods?
18:57:19 <elliott> That must be some piston/minecart setup.
18:57:25 <Vorpal> elliott: yes. I don't think LKAB used any mods XD
18:57:33 <Vorpal> it was a guided tour.
18:57:44 <Vorpal> of some no-longer-active parts of the mine
18:57:45 <oklopol> guided tours are for wusses
18:58:01 <Vorpal> oklopol: they wouldn't let people run around freely in an operating mine
18:58:12 <elliott> "let"
18:58:17 <Vorpal> ...
18:58:21 <elliott> Only applies if you ask permission :P
18:58:23 <oklopol> no one asked them
18:58:24 <oklopol> yeah
18:58:47 <Vorpal> elliott: btw they had a kind of paternoster like thingy for moving up the iron ore to the surface.
18:59:33 <oklopol> did you get to see any redstone
18:59:37 <itidus20> ahh heres the justification in next section "Predefined constants, which act as values and operations are allowed in an impure or applied lambda calculus."
18:59:46 <elliott> Gregor: Uh.
18:59:49 <elliott> oerjan: :P
19:00:05 <Vorpal> elliott: fyi, it was magnetite ore. They didn't find a sedimentary layer I guess.
19:00:34 <Vorpal> oklopol: XD
19:00:34 <elliott> Did you kill any elves.
19:01:00 <Vorpal> elliott: didn't get the chance, it was summer, not sprint
19:01:01 <Vorpal> spring*
19:01:47 <Phantom_Hoover> elliott, as if Vorpal would kill elves.
19:02:09 <elliott> Phantom_Hoover: he has a self-loathing streak.
19:02:18 <Vorpal> elliott: oh and, they transport the ore on some huge trains, iirc about 1 km in length. With two or four huge locomotives pulling.
19:02:27 <oklopol> :O
19:03:15 <Vorpal> http://en.wikipedia.org/wiki/File:IORE_beim_Tornetr%C3%A4sk.jpg <-- there is one, saw that from my hotel window when I was up there, it was right next to the railway.
19:03:16 <elliott> i've never been in a paternoster i should try it
19:03:19 <elliott> it sounds cool
19:03:30 <Vorpal> seems a bit shorter than what I saw
19:03:32 <Phantom_Hoover> elliott, go to that university that has one.
19:03:42 <elliott> also, 1km trains cooooooooooooooooooooooool
19:03:45 <elliott> Phantom_Hoover: thx
19:04:03 <Vorpal> elliott: that one was for ore, it had like huge buckets, not somewhere you could stand it
19:04:05 <Vorpal> in*
19:04:24 <Phantom_Hoover> elliott, Sheffield!
19:04:42 <Phantom_Hoover> Leinster!
19:04:49 <elliott> Vorpal: also nice landscapey thinsg in that picture
19:04:55 <Phantom_Hoover> (By which I mean Leicester.)
19:05:01 <elliott> Phantom_Hoover: I have been to Sheffield it is a place ofbadness and steel... orw a sit coal...
19:05:04 <oerjan> `addquote <Taneb> Just goes to show, the Beatles are more interesting than green vegetables.
19:05:06 <HackEgo> 655) <Taneb> Just goes to show, the Beatles are more interesting than green vegetables.
19:05:14 <Vorpal> elliott: yes certainly. It is up in north Sweden. Far between inhabited areas there.
19:06:04 <Vorpal> elliott: hours between each road crossing with the railway. Just forest and myrmark (not sure what that is, not quite "bog" but something similar I think)
19:06:10 <itidus20> ok in my next few posts which follow, i ask to allow for: impure or applied lambda calculus
19:06:24 <Vorpal> oh, it is exactly bog it seems
19:06:26 <Taneb> Well, I've just translated a predecessor function into a BCKISW tree
19:06:30 <elliott> Vorpal: so theoretically a good place to plan the demise of civilisation?
19:06:38 <itidus20> so i have the + operator.. "just because".. because im playing magic
19:06:39 <Vorpal> elliott: uh?
19:06:46 <elliott> just asking
19:07:13 <Vorpal> elliott: oh btw, in some areas up there, the water is still pure enough that you can drink fresh water out of rivers without purifying it first. Though that probably won't be so for long.
19:07:26 <Vorpal> what with all pollution.
19:07:45 <itidus20> so.. given, λx.λy.x+y .. is this.. λx.(λy.(x+y))?
19:07:58 <elliott> itidus20: well yes.
19:08:01 <elliott> Vorpal: ok that's good so if i destroyed the water supply i could still drink
19:08:06 <itidus20> elliott: i know it kills you :P
19:08:08 <Vorpal> heh
19:08:13 <Vorpal> elliott: what are you planning!?
19:08:35 <elliott> Vorpal: Shhhhhhhhhhhhhhhh
19:08:48 <Vorpal> elliott: anyway, it is cool, so different from the more densely inhabited south Sweden. Which of course would be counted as sparse by English measures.
19:09:39 <Vorpal> elliott: also it is mostly birches up there. Few other trees can survive.
19:09:42 <elliott> in england we just took about ten countries and miniaturised them
19:10:01 <Taneb> *compacted
19:10:05 <elliott> but yes http://upload.wikimedia.org/wikipedia/commons/f/fe/IORE_beim_Tornetr%C3%A4sk.jpg is pretty I will have to find the gprs coordinates so I can walk there from here
19:10:12 <elliott> just start swimmin' when I get to water
19:10:16 <elliott> It's the minecraft f-three way to travel
19:10:24 <Vorpal> elliott: /tppos
19:10:33 <elliott> is that lake thing frozen or not, i can't tell
19:10:46 <elliott> oh it even has the coordinates there
19:10:57 <Vorpal> elliott: well it seems to be winter. I would assume it was frozen
19:11:10 <Vorpal> I was up there in early summer, June or so.
19:11:29 <elliott> http://maps.google.com/maps?f=d&source=s_d&saddr=hexham&daddr=68.269125,19.376158&hl=en&geocode=&sll=68.269125,19.376158&sspn=0.017033,0.058107&vpsrc=0&g=68.269125,19.376158&dirflg=w&mra=ltm&ie=UTF8&t=m&z=4
19:11:32 <elliott> hey only fifteen days walking
19:11:36 <elliott> oh my sweet jesus
19:11:37 <elliott> Vorpal
19:11:39 <elliott> look at that route
19:11:42 <elliott> it goes from hexham to the netherlands
19:11:44 <elliott> TO THE UK
19:11:45 <elliott> to denmark
19:11:53 <elliott> its a fucking loop de loop
19:12:01 <elliott> WHY DOES IT GO TO LATVIA
19:12:12 <itidus20> anyway this is the thing i found: http://www.cs.uiowa.edu/~slonnegr/plf/Book/Chapter5.pdf
19:12:13 <oklopol> i love the 200km walk back and forth
19:12:23 <Taneb> And the visit to Latvia
19:12:27 <elliott> oklopol: which point is that
19:12:28 <Vorpal> elliott: you don't want to go up there in late June or the rest of the summer. All those bogs. You get too many mosquitoes up there then.
19:12:30 <elliott> i mean the non-ferry part
19:12:33 <elliott> oh
19:12:34 <elliott> lmao
19:12:47 <Vorpal> elliott: nice route too
19:12:48 <elliott> ok this is the best route
19:12:49 <elliott> i'm doing this
19:12:51 <elliott> cya suckas
19:13:20 <Vorpal> elliott: anyway that is further north than what I went. If you look on your route you will spot "Kiruna", that is how far I went
19:13:35 <oklopol> elliott: the visit to latvia
19:13:38 <Taneb> Also, I think Hexham has a disproportionately large amount of esoteric programming enthusiasts
19:13:40 <Vorpal> well I actually went out sideways from Kiruna too
19:13:56 <Vorpal> Taneb: elliott is from there, who else?
19:14:00 <elliott> Taneb
19:14:04 <Taneb> Me
19:14:05 <elliott> oklopol: it's my european trip practically fucking planned out already
19:14:22 <Taneb> And as far as I am aware, we've NEVER MET
19:14:25 <oklopol> we were planning to walk 100km in the near future, but i guess we could extend it abit
19:14:27 <oklopol> *a bit
19:14:38 <elliott> yeah to 2,948 miles say
19:14:43 <Vorpal> elliott: I went here too: http://maps.google.com/maps?hl=en&ll=67.851697,19.019244&spn=0.004846,0.027058&sll=67.851697,19.019244&sspn=0.004846,0.027058&vpsrc=0&dirflg=w&t=h&z=16
19:14:54 <elliott> Taneb: we have to make sure we never ever meet
19:14:58 <oerjan> Vorpal: in norway this year there are warnings against drinking river water because of all the lemmings
19:14:59 <Taneb> Agreed
19:15:00 <Vorpal> elliott: that counts as a village btw. Like 4 hours or so.
19:15:01 <elliott> it would violate the specialness
19:15:07 <Vorpal> oerjan: really? XD
19:15:24 <oerjan> yep, greatest lemming infestation for decades
19:15:27 <elliott> Vorpal: that's the shittiest village i've ever seen
19:15:32 <Vorpal> <Taneb> And as far as I am aware, we've NEVER MET <-- how large is Hexham?
19:15:39 <Vorpal> elliott: really?
19:15:42 <Taneb> 12000ish people
19:15:42 <elliott> Vorpal: pop. twelve thousand or so
19:15:46 <Vorpal> ah
19:15:47 <elliott> erm
19:15:49 <elliott> not twelve thousand
19:15:50 <elliott> what Taneb said
19:15:55 <elliott> it's small
19:16:01 <Taneb> Which is twelve thousand
19:16:05 <Vorpal> elliott: anyway that village is like how close you can get by car to Sweden's highest mountain
19:16:07 <elliott> oh isi t
19:16:07 <Taneb> What we said were equivalent
19:16:13 <elliott> i'm not so smart with the numbers
19:16:18 <elliott> Vorpal: who needs cars when you can walk to latvia
19:16:33 <Vorpal> XD
19:16:51 <elliott> Mehamn looks like cool palce
19:17:01 <Vorpal> elliott: is it swim or ferry?
19:17:05 <elliott> ferry
19:17:07 <elliott> http://en.wikipedia.org/wiki/Mehamn
19:17:10 <elliott> look at that fucking location mark
19:17:33 <Vorpal> size: 709
19:17:34 <Vorpal> heh
19:17:43 <elliott> nothing at the very tip :(
19:17:53 <Vorpal> elliott: anyway Longyearbyen is more remote I would say
19:17:59 <Vorpal> not sure which one is furthest north
19:18:01 <Taneb> `addquote <elliott> Vorpal: who needs cars when you can walk to latvia
19:18:03 <HackEgo> 656) <elliott> Vorpal: who needs cars when you can walk to latvia
19:18:12 <elliott> Vorpal: oh i wanna visit svalbard sometime
19:18:18 <elliott> doesn't really count as part of norway or anything though :P
19:18:33 <Vorpal> elliott: it has a rather unique status, that is true
19:19:04 <itidus20> i used svalbard to test a weatherbot the other day
19:19:16 <elliott> http://maps.google.com/maps?hl=en&sll=67.851697,19.019244&sspn=0.004846,0.027058&vpsrc=6&dirflg=w&t=h&ie=UTF8&ll=73.677264,59.677734&spn=6.659198,29.750977&z=5 wow what the fuck is this thing
19:19:25 <elliott> my attitude to geography is like icp's to magnets
19:19:25 <itidus20> i was looking on googlemaps for a place
19:19:25 <Vorpal> itidus20: did it work?
19:19:34 <itidus20> yup
19:19:40 <itidus20> not my weatherbot tho but someones
19:19:45 <elliott> but seriously what is that thing
19:19:50 <Vorpal> elliott: and that is Nova Zemblya (no clue about spelling)
19:19:59 <Vorpal> elliott: used for nuclear testing by Soviet
19:20:08 <elliott> is it actually that huge or is that the broken map projection google maps use
19:20:09 <elliott> s
19:20:12 <Vorpal> the Tsar Bomba was detonated there.
19:20:24 <elliott> Nova Zembla Island ("New Land") is an uninhabited island in the Qikiqtaaluk Region of Nunavut, Canada. It is located in Baffin Bay off the northeastern coast of Baffin Island. Round Island is 7.4 km (4.6 mi) to the southeast.[1]
19:20:26 <nooga> Nowa Ziemia
19:20:29 <elliott> so exciting
19:20:30 <nooga> (New Land)
19:20:32 <elliott> Round Island is an uninhabited island in the Qikiqtaaluk Region of Nunavut, Canada. It is located in Baffin Bay off the northeastern coast of Baffin Island. Nova Zembla Island is 7.4 km (4.6 mi) to the northwest.[1]
19:20:37 <elliott> I guess I'll visit there
19:20:41 <elliott> gotta be fun, right?
19:20:46 <elliott> http://upload.wikimedia.org/wikipedia/commons/c/c9/Sirmilik_Glacier_2_1997-08-06.jpg
19:20:48 <elliott> oh that's cool
19:20:50 <Vorpal> elliott: doubtful. Radiation hazard
19:20:52 <elliott> I'll go there after Latvia
19:20:56 <oerjan> <elliott> http://en.wikipedia.org/wiki/Mehamn <-- i recall mehamn from the weather forecasts during whatever summer it was when the whole of norway had a heatwave - except mehamn, which stayed stable at 9 celsius.
19:21:01 <elliott> Vorpal: meh, I can deal
19:21:01 <nooga> in russian: Nowya Zee-em-lya
19:21:08 <elliott> oerjan: 9 seems a bit high for that place :P
19:21:14 <elliott> http://en.wikipedia.org/wiki/Sirmilik_National_Park
19:21:15 <elliott> dudes, let's go here
19:21:24 <elliott> no radiation to my knowledge!!!
19:21:34 <Vorpal> yeah
19:21:45 <elliott> pretty good location for a meetup, nobody will _ever_ find Vorpal's body
19:22:17 <Vorpal> http://en.wikipedia.org/wiki/Nova_Zembla_Island <-- err, wtf, a stub?
19:22:38 <Vorpal> wait different one
19:22:45 <elliott> oh it's a different one?
19:22:49 <elliott> http://en.wikipedia.org/wiki/Tsar_Bomba
19:22:55 <elliott> aha
19:22:56 <elliott> http://en.wikipedia.org/wiki/Novaya_Zemlya
19:22:57 <elliott> there we go
19:23:02 <elliott> i'll visit the other one too though
19:23:07 <Vorpal> elliott: confusingly similar names
19:23:12 <nooga> http://pl.wikipedia.org/wiki/Nowa_Ziemia
19:23:20 <oklopol> elliott: will you visit me on your trip, that goes through turku
19:23:33 <elliott> oklopol: hmmhmm yeah ok, but you have to promise to join in on the rest of the trip
19:23:38 <oerjan> elliott: well yeah it _is_ right next to the arctic ocean
19:23:40 <elliott> i'll basically thread through the countries picking up esolangers
19:23:45 -!- Zetro has quit (*.net *.split).
19:23:46 -!- aspect has quit (*.net *.split).
19:23:46 -!- rodgort has quit (*.net *.split).
19:23:46 -!- variable has quit (*.net *.split).
19:23:46 -!- tswett has quit (*.net *.split).
19:23:47 -!- ineiros has quit (*.net *.split).
19:23:47 -!- Zwaarddi1k has quit (*.net *.split).
19:23:47 -!- myndzi has quit (*.net *.split).
19:23:51 <elliott> and we'll all have adventures
19:23:52 -!- aspect has joined.
19:23:58 -!- tswett has joined.
19:24:01 -!- Zetro has joined.
19:24:01 <elliott> you think i am being wacky but that would actually be a perfect life.
19:24:04 -!- ineiros has joined.
19:24:04 <oklopol> actually i took a bus from where the route makes a sharp turn left
19:24:08 <elliott> <elliott> you think i am being wacky but that would actually be a perfect life.
19:24:11 -!- iamcal has quit (Remote host closed the connection).
19:24:13 <elliott> stupid netsplits
19:24:23 -!- myndzi has joined.
19:24:23 <elliott> i love how fucked satellite greenland is on google maps
19:24:25 -!- Zwaarddijk has joined.
19:24:31 <elliott> it's some white with harsh square corners where they pasted over the aliens
19:24:48 <oklopol> if you walk here, i will certainly join you for the rest of the trip
19:24:56 <oklopol> because there would be no limits to the awesomeness
19:24:59 -!- variable has joined.
19:25:09 <elliott> i wonder how much it costs to like
19:25:15 <elliott> manage to get to one of those fucking nowhere islands
19:25:28 <elliott> i guess you need to like hire your own plane and get clearance and shit
19:25:32 <elliott> SO COMPLICTAED OMG
19:25:36 <elliott> why can't the world be like minecraft
19:25:46 <Taneb> With zombies and creepers?
19:25:57 <elliott> on peaceful.
19:26:02 <Taneb> Okay
19:26:05 <elliott> although i guess those would be fun too
19:26:07 <itidus20> Taneb: it is
19:26:09 <oklopol> perhaps on creative too
19:26:27 <oerjan> <elliott> stupid netsplits <-- i assume this was connected to christel's global notices
19:26:29 <elliott> oklopol: there is some part of my sleep-deprived brain that is seriously considering going on wacky sweden adventures with as many esolangers as i can pick up
19:26:34 <elliott> I will let you know when sanity sets back in
19:26:39 <elliott> oerjan: will you join
19:26:44 <elliott> i'll walk to trondheim specially
19:26:54 <elliott> hmm
19:26:55 <Phantom_Hoover> elliott, will you punch Vorpal.
19:26:59 <elliott> I should just do it without letting you know I'm actually really going to do it
19:27:03 <Phantom_Hoover> You have often indicated your desire to do this.
19:27:03 <elliott> and you'll be too shocked to say no
19:27:15 <elliott> Phantom_Hoover: I don't know, are there laws against that in Sweden? Vorpal?
19:27:17 <oklopol> "no one cares what asia looks like" --- google
19:27:44 <Phantom_Hoover> oklopol, we all know that Asia looks the same however you display it.
19:27:48 <Vorpal> elliott: yes.
19:27:53 <elliott> Vorpal: will you invoke them?
19:27:56 <elliott> it'll just be a mild punch
19:28:03 <Vorpal> elliott: yes I certainly would.
19:28:10 <Phantom_Hoover> Vorpal, baby.
19:28:14 <elliott> Phantom_Hoover: I'll get oklopol to punch Vorpal
19:28:15 <oklopol> i think you could punch Vorpal as hard as you wanted to
19:28:22 <elliott> http://upload.wikimedia.org/wikipedia/commons/4/45/View_from_B%C3%A1rr%C3%A1s.jpg
19:28:28 <elliott> oh man, we're going there
19:28:30 <oklopol> and he'd ba all like
19:28:32 <oklopol> *be
19:28:38 <Vorpal> elliott: where is that?
19:28:41 <elliott> finnmark
19:28:43 <elliott> norway
19:28:44 <oklopol> oh i thought mosquito season was long gone lolololol
19:28:45 <oerjan> elliott: in sweden you can be arrested for punching someone even if they give you permission, if they change their mind later.
19:28:47 <elliott> can my life just be hdr nature photography forever
19:28:52 <Phantom_Hoover> elliott, so wait will you go and get Taneb before me?
19:28:59 -!- rodgort has joined.
19:28:59 <elliott> Phantom_Hoover: I and Taneb can never meet.
19:29:03 <elliott> I'll get you though sure,
19:29:07 <elliott> oerjan: ah.
19:29:11 <Vorpal> oerjan: eh?
19:29:14 <elliott> oerjan: so will you come along for the ride
19:29:24 <Phantom_Hoover> elliott, for the truth is....... you are the same person.
19:29:29 <Vorpal> oerjan: so why are there still martial arts clubs?
19:29:30 <elliott> Phantom_Hoover: yeah true
19:29:40 <oklopol> but you don't know it
19:29:42 <Phantom_Hoover> oerjan, is this some kind of subtle commentary on Assange?
19:29:58 <oklopol> oh i guess you're suspecting it already
19:30:00 <Vorpal> Phantom_Hoover: I was wondering about that, but eh, quite different situation.
19:30:15 <oerjan> Phantom_Hoover: you got me :P
19:30:16 <elliott> oklopol: hey ask oerjan whether he's coming along or not he's not answering me.
19:30:17 <Phantom_Hoover> Vorpal, no, punching is technically a form of rape.
19:30:18 <nooga> oerjan: in sweden you can be arrested for publicly reprimanding your own, misbehaving child
19:30:37 <Vorpal> Phantom_Hoover: pretty sure that is not the case.
19:30:53 <Vorpal> nooga: that is true.
19:31:02 <Vorpal> well, it was with physical attack
19:31:03 <oklopol> if you punch someone and they orgasm, is that rape
19:31:14 <oerjan> elliott: sorry, but my feet are incapable of walking much longer than to the shop
19:31:16 <elliott> level of discourse is high tonight
19:31:25 <oklopol> penis penis penis
19:31:27 <Phantom_Hoover> elliott, that's also a form of rape.
19:31:43 <Vorpal> nooga: doing it verbally would be legal. Giving the child a hard slap would not.
19:31:50 <oerjan> <elliott> Phantom_Hoover: I and Taneb can never meet. <-- wait, wouldn't it be ok as long as it is nowhere near hexham?
19:31:52 <nooga> how about soft slap? :P
19:31:53 <elliott> oerjan: there'll be ferries
19:31:58 <Gregor> oklopol: MUSHROOM MUSHROOM
19:32:16 <Phantom_Hoover> Shall I kill some badgers in DF?
19:32:17 <nooga> haxham
19:32:18 <Taneb> I'll take a separate root and end up in a different country
19:32:19 <Vorpal> oerjan: what would the issue with them meeting each other be?
19:32:30 <Taneb> IT WOULD RUIN THE MAGIC
19:32:31 <Vorpal> Phantom_Hoover: yes.
19:32:32 <elliott> Taneb: oh my god
19:32:34 <elliott> Taneb: go aroudn the world
19:32:35 <elliott> the other way
19:32:37 <Gregor> PS everyone is required by Law™ to watch this: http://www.weebls-stuff.com/songs/Babies/
19:32:37 <elliott> and end up
19:32:38 <Phantom_Hoover> Oh wait I already killed all the badgers.
19:32:39 <elliott> at the same desitnation
19:32:45 <oklopol> Taneb: maybe a square root?
19:32:45 <nooga> hexagonal ham
19:32:47 <elliott> at the saeme time
19:32:49 <elliott> Taneb: y/n (Y)
19:32:53 <Taneb> Q!
19:32:57 <elliott> yyyyyyyyyyyyy
19:32:59 <Phantom_Hoover> nooga, fun fact: Hexham is Borders slang for hell.
19:32:59 <Vorpal> Phantom_Hoover: new ones can move in from outside the map I *think*, but don't quote me on that
19:33:06 <Phantom_Hoover> Make of this what you will.
19:33:13 <Phantom_Hoover> Vorpal, man you're really pro at DF.
19:33:18 <Phantom_Hoover> Jesus have you even played it.
19:33:38 <Taneb> Hang on, which way around the world are you all going?
19:33:44 <elliott> Taneb: --->
19:33:45 <Vorpal> Phantom_Hoover: yes. But well, I been too busy with goblins and what not to care about what the wild animals did.
19:33:51 <elliott> to sweden or some nowhere island
19:33:52 <elliott> or somewhere
19:33:55 -!- Vorpal has quit (*.net *.split).
19:34:07 <Phantom_Hoover> Taneb, you'll basically just have to stay at the antipodeal point from the rest of us at all times.
19:34:26 -!- Vorpal has joined.
19:34:30 <Vorpal> well, that was unexpected:
19:34:33 <Vorpal> ! Server Terminating. Received SIGTERM
19:34:33 <Taneb> To... Australian Antarctic Territory?
19:34:40 <nooga> okay
19:34:50 <elliott> maybe i should just do my antarctic tour now with you guys
19:34:52 <nooga> what are you guys doing? playing Google Earth?
19:34:54 <elliott> i mean we're close enough
19:34:57 <elliott> nooga: planning our trip
19:35:12 <elliott> Taneb: Phantom_Hoover: oklopol: up for an antarctic trip?
19:35:21 <Phantom_Hoover> Yes.
19:35:25 <elliott> it's kinda cold
19:35:26 <elliott> just so you know
19:35:28 <Taneb> As long as someone else is paying.
19:35:30 <elliott> but there's penguins
19:35:31 <Vorpal> elliott: not Arctic?
19:35:32 <elliott> that you can be friends with
19:35:38 <elliott> Taneb: well oklopol has lots of money right?
19:35:38 <oklopol> sure
19:35:42 <elliott> oklopol: you'll pay right
19:35:43 <oklopol> yes i'm rich
19:35:44 <oklopol> yes
19:35:45 <elliott> great
19:35:45 <oklopol> totally
19:35:49 <elliott> Vorpal: hmm well
19:35:55 <elliott> we can fly over the arctic to get to antarctica
19:35:56 <elliott> um
19:35:58 <elliott> spheres work like that
19:35:59 <elliott> right
19:36:01 <oerjan> <Vorpal> nooga: doing it verbally would be legal. Giving the child a hard slap would not. <-- same as in norway then i take. in fact i think they just made the law here stricter. (because the courts had decided they allowed light slaps or something.)
19:36:06 <elliott> but seriously arctic is boring
19:36:07 <elliott> no real land
19:36:09 <elliott> just a bunch of glaciers
19:36:15 <elliott> antarctica's big fuckin' heap o' ice
19:36:23 <Taneb> We could go to Phillip Island!
19:36:30 <elliott> oklopol: no but seriously would you pay for this shit
19:36:33 -!- ais523 has joined.
19:36:35 <elliott> it wouldn't be more than like ten thousand
19:36:37 <elliott> moneys
19:36:42 <elliott> and with that ais523 got terrified
19:36:42 <Taneb> Has the advantage of being warmer than Antarctica
19:36:46 <nooga> be sure to visit Poznań
19:36:48 <Phantom_Hoover> elliott, yes but what about Finnland^Wwhatever.
19:36:50 <Taneb> With cuter penguins
19:36:52 <oklopol> depends on the amount of moneys i guess
19:37:30 <elliott> ais523: if I walk to Birmingham, will you join us on our tour of the world?
19:37:46 <elliott> Phantom_Hoover, me, and oklopol are going to go to a bunch of cool places
19:37:58 <ais523> elliott: probably not, I hate travel
19:38:06 <elliott> ais523: ok but wait
19:38:09 <elliott> ais523: http://maps.google.com/maps?f=d&source=s_d&saddr=hexham&daddr=68.269125,19.376158&hl=en&geocode=&sll=68.269125,19.376158&sspn=0.017033,0.058107&vpsrc=0&g=68.269125,19.376158&dirflg=w&mra=ltm&ie=UTF8&t=m&z=4
19:38:12 <elliott> look at this route
19:38:13 <Phantom_Hoover> ais523, OK, we can go to Manchester.
19:38:13 <Vorpal> hm they need to do google street view in more places. Like off road.
19:38:15 <elliott> tell me this route isn't geographic perfection
19:38:20 <elliott> it has a fucking loop-de-loop
19:38:21 <Vorpal> every few meters, over all the world
19:38:24 <elliott> a value-add trip to latvia
19:38:30 <elliott> it's the best walk ever
19:38:48 <nooga> oerjan: i remember a story told by our media that norwegian social care took people's children because someone stated that he seen the parents dringing beer while their kids were at home
19:38:59 <elliott> oklopol: I love how it skirts over to Finland for a bit just because it's slightly less bendy than Sweden
19:39:03 <Phantom_Hoover> elliott, so wait I need to know.
19:39:17 <Phantom_Hoover> Who will we eat first if it goes wrong?
19:39:21 <elliott> Phantom_Hoover: you.
19:39:25 <ais523> "Use caution – This route may be missing sidewalks or pedestrian paths."
19:39:26 <Vorpal> nooga: sounds implausible...
19:39:30 <elliott> ais523: :D
19:39:37 <elliott> well yeah that location is just the location of um
19:39:39 <elliott> where's the pic
19:39:39 <elliott> Vorpal: link pic
19:39:44 <Phantom_Hoover> elliott, but oko's bigger!
19:39:47 <Vorpal> elliott: to what?
19:39:52 <nooga> they had several stories like that, Vorpal
19:39:55 <oklopol> i met this woman who's kids were taken because she had been a problem child herself. she then wrote a book on this and got an official apology
19:39:57 <elliott> http://upload.wikimedia.org/wikipedia/commons/f/fe/IORE_beim_Tornetr%C3%A4sk.jpg sorry ais523 for not having info link
19:40:01 <elliott> http://en.wikipedia.org/wiki/File:IORE_beim_Tornetr%C3%A4sk.jpg
19:40:01 <elliott> there
19:40:02 <oklopol> *whose
19:40:05 <ais523> recommending 2.5 miles down an A road looks wrong
19:40:07 <Vorpal> ah
19:40:08 <elliott> that's where we're going, http://en.wikipedia.org/wiki/File:IORE_beim_Tornetr%C3%A4sk.jpg
19:40:09 <Phantom_Hoover> elliott, also dude why didn't you include Edinburgh in the route.
19:40:11 <ais523> for a walking route
19:40:17 <oklopol> in norway
19:40:18 <elliott> Phantom_Hoover: um excuse me that is just the base route
19:40:25 <Vorpal> elliott: they move really slowly those trains. Like 30 km/h or so iirc
19:40:32 <Vorpal> lots and lots of power though
19:40:54 <Phantom_Hoover> http://maps.google.com/maps?f=d&source=s_d&saddr=hexham&daddr=68.269125,19.376158&hl=en&geocode=&sll=68.269125,19.376158&sspn=0.017033,0.058107&vpsrc=0&g=68.269125,19.376158&dirflg=w&mra=ltm&ie=UTF8&t=m&z=4
19:40:57 <ais523> yep, that route makes absolutely no sense
19:40:58 <Phantom_Hoover> OMG best route.
19:41:02 <elliott> oklopol: so i figure after we reach that sweden destination we'll just like go down to helsinki, then kinda play it by ear?
19:41:06 <elliott> ais523: we're still following it
19:41:11 <Phantom_Hoover> I like the part where it crosses the channel six times.
19:41:14 <elliott> oklopol: could visit iceland next maybe?
19:41:19 <Vorpal> elliott: anyway, look at the size of the door on that locomotive. That thing is huge
19:41:22 <oklopol> oooh iceland
19:41:25 <elliott> Phantom_Hoover: yes i linked it
19:41:26 <elliott> it's
19:41:27 <elliott> just the best
19:41:30 <elliott> or um
19:41:33 <elliott> are you seeing a different one
19:41:35 <oklopol> i hear there's a lot of crazy going on up there
19:41:36 <elliott> because you need to click the link icon
19:41:38 <elliott> at the top-right
19:41:40 <elliott> to get the link
19:41:43 -!- derdon has quit (Remote host closed the connection).
19:41:49 <Vorpal> elliott: don't go to iceland. You will get stuck there while waiting for the ash to clear.
19:41:56 <ais523> the instructions in Sweden will be basically impossible to follow
19:41:58 <Phantom_Hoover> elliott, sorry, http://maps.google.com/maps?q=from:+hexham+to:+edinburgh+to:+68.269125,19.376158&saddr=hexham&daddr=edinburgh+to:68.269125,19.376158&hl=en&ll=48.224673,1.318359&spn=31.503035,57.65625&sll=53.917281,-1.801758&sspn=6.951905,14.414062&geocode=FWjHRgMdAf3f_ykVmDENYpB9SDEEwA0heCs6qA%3BFWC7VQMdsFzP_ykjJpilALiHSDEnF-d8exTyZA%3BFUW0EQQdHqgnAQ&vpsrc=6&dirflg=w&t=m&z=4
19:41:59 <elliott> Vorpal: capitalist propaganda
19:42:09 <ais523> they're just a bunch of "turn left, turn right" with distances but no road names
19:42:14 <elliott> Phantom_Hoover: ahahahahahaha
19:42:18 <elliott> ais523: look at that one Phantom_Hoover linked
19:42:20 <Vorpal> <ais523> the instructions in Sweden will be basically impossible to follow <-- how so? I didn't see any issue
19:42:21 <elliott> you will not regret the decision
19:42:34 <Vorpal> ais523: ah
19:42:36 <ais523> Vorpal: look at 450, etc
19:42:44 <Deewiant> Stop posting maps.google.com links containing the string "deew"
19:42:54 <elliott> Deewiant: X-D
19:42:59 <Deewiant> That's the second time in 18 hours
19:43:05 <oklopol> Deewiant: why? this applies to you too
19:43:06 <oerjan> nooga: the norwegian child protection services are well-known for interfering too much in people's private lives and for not having enough resources to help all the children who need it. er, wait...
19:43:06 <elliott> Phantom_Hoover: It looks like the map thing tried to draw a star.
19:43:08 <elliott> But then it failed.
19:43:12 <elliott> Deewiant: yeah wanna come on our trip?
19:43:12 <ais523> Deewiant: it's not even capitalised properly
19:43:34 <Deewiant> I can't trust people to capitalize properly if they want to highlight me
19:43:36 <Vorpal> ais523: anyway I'm not sure those road have numbers
19:43:43 <Vorpal> ais523: they look too small
19:43:48 <elliott> Phantom_Hoover: oh my god you can just draw your own path and it mangles it
19:43:56 <elliott> Vorpal: we could just walk alnogside it with a gps thing no?
19:44:10 <ais523> Vorpal: roads like that in the UK normally at least have signposts
19:44:11 <Vorpal> elliott: maybe. But do you realise the distances in Sweden?
19:44:26 <elliott> Vorpal: yeah, so we'll need some food and shit
19:44:29 <elliott> sleeping bags too i get
19:44:31 <ais523> giving the distance in miles to various nearby insignificant villages
19:44:34 <Vorpal> ais523: sure, if they are in urban areas.
19:44:41 <Vorpal> but not out in the wilderness
19:44:45 <Phantom_Hoover> 15 days, 17 hours.
19:44:55 <Phantom_Hoover> Good way to spend a fortnight.
19:44:57 <oklopol> the trip??
19:45:03 <oklopol> that's nothing :O
19:45:05 <Vorpal> ais523: anyway for 450, the sat image resolution is too low to be sure
19:45:19 <elliott> Phantom_Hoover: oklopol: http://maps.google.com/maps?f=d&source=s_d&saddr=hexham&daddr=edinburgh+to:helsinki+to:Kiruna,+Sweden&geocode=FWjHRgMdAf3f_ykVmDENYpB9SDEEwA0heCs6qA%3BFWC7VQMdsFzP_ykjJpilALiHSDEnF-d8exTyZA%3B%3B&sll=67.554754,18.797607&sspn=2.773689,11.634521&vpsrc=0&hl=en&dirflg=w&mra=ls&ie=UTF8&t=m&z=4
19:45:19 <oklopol> i can take two weeks off like that
19:45:19 <ais523> Vorpal: out in the wilderness, too
19:45:22 <elliott> it's really not trying to be helpful here
19:45:27 <ais523> that's why the things they point to are so insignificant
19:45:28 <Vorpal> Phantom_Hoover: ~16 days sounds unrealistic
19:45:34 <Vorpal> oh wait, ferries, okay maybe not
19:45:38 <elliott> oh my god
19:45:39 <ais523> because there's nothing else to point to
19:45:42 <elliott> Phantom_Hoover: oklopol: zoom in on the finland bit
19:45:42 <elliott> it just
19:45:45 <elliott> i can't even explain what it does
19:46:05 <Deewiant> http://maps.google.com/maps?saddr=hexham&daddr=edinburgh+to:Helsinki,+Finland+to:68.269125,19.376158&hl=en&ll=59.800634,10.634766&spn=31.091097,70.136719&sll=59.800634,10.195313&sspn=31.091097,70.136719
19:46:19 <Deewiant> Just walk along that path
19:46:21 <Vorpal> elliott: what is the issue with that bit?
19:46:26 <elliott> Vorpal: it loops in on itself
19:46:34 <elliott> Deewiant: fuck that bullshit
19:46:36 <Vorpal> Deewiant: that one seems sane
19:46:39 <elliott> Deewiant: wehre's my fucking latvia tour
19:46:44 <elliott> where's my fucking loop de loop
19:46:46 -!- zzo38 has joined.
19:46:49 <Vorpal> elliott: oh the ferries you mean?
19:46:52 <Vorpal> well not strange
19:46:56 <Taneb> http://maps.google.com/maps?saddr=hexham&daddr=edinburgh+to:Helsinki,+Finland+to:68.269125,19.376158&hl=en&ll=59.800634,10.634766&spn=31.091097,70.136719&sll=59.800634,10.195313&sspn=31.091097,70.136719
19:46:58 <elliott> oklopol: ...we might want to do a slightly saner route though :P
19:47:00 <Taneb> I want to come too
19:47:17 <elliott> Taneb: yeah ok
19:47:25 <elliott> http://maps.google.com/maps?f=d&source=s_d&saddr=hexham&daddr=edinburgh+to:Riga,+Latvia+to:Helsinki,+Finland+to:68.269125,19.376158&geocode=FWjHRgMdAf3f_ykVmDENYpB9SDEEwA0heCs6qA%3BFWC7VQMdsFzP_ykjJpilALiHSDEnF-d8exTyZA%3B%3BFVQelgMdAId8ASmRBiGWxwuSRjFj9-I7hL1OzQ%3BFUW0EQQdHqgnAQ&sll=59.592995,11.21014&sspn=29.97045,93.076172&vpsrc=0&hl=en&mra=ls&ie=UTF8&t=m&z=4
19:47:27 <Deewiant> Vorpal: Mine was giving driving directions, not the beta walking directions
19:47:29 <elliott> w ecould add a loop-de-loop to this i guess
19:47:31 <oklopol> if it's just 2 weeks, i'm in no problem
19:47:33 <Vorpal> Deewiant: ah
19:47:40 <ais523> you lot are all mad
19:47:50 <Vorpal> XD
19:47:53 <elliott> ais523: yeah but YOU'RE not going to have any of the fun
19:47:57 <ais523> what about accommodation?
19:48:04 <Vorpal> Deewiant: probably included highways with no walking access
19:48:12 <elliott> ais523: meh, not that hard; for the long trip up sweden we can just sleep in the wilderness
19:48:19 <Vorpal> yes it does
19:48:25 <oklopol> i could even fly to hexham but i guess that'd defeat the purpose
19:48:27 <Vorpal> Deewiant: no way to walk along E4 for example
19:48:31 <ais523> elliott: in /Sweden/? in /September/?
19:48:37 <elliott> ais523: who said september
19:48:38 <Deewiant> Vorpal: You can walk pretty close to those typically
19:48:45 <ais523> elliott: oh, this is planned for the future?
19:48:48 <Deewiant> Just not on the road itself
19:48:50 <Deewiant> Of course
19:49:00 <oklopol> ais523: i was thinking tomorrow
19:49:02 <Vorpal> Deewiant: hm. Not on E20 near where I live. More like several km away
19:49:05 <elliott> ais523: dunno, i'm cool whenever
19:49:08 <Phantom_Hoover> ais523, of course not September, we'd have to do it over Christmas.
19:49:20 <Vorpal> sure if you wanted to walk in a ditch, yes then you could
19:49:22 <ais523> well, especially as several people are likely to have work/school
19:49:32 <ais523> I know walking near a motorway is nearly always a really bad idea in the UK
19:49:36 <oklopol> i'm going to run a marathon on new year's eve so have to be back by then
19:49:38 <ais523> as you'll have problems at every junction
19:49:50 <elliott> Phantom_Hoover: can you take two weeks off for this fun trip
19:49:52 <elliott> oklopol can
19:49:54 <elliott> Taneb: you?
19:49:58 <Deewiant> Vorpal: What prevents one from walking nearer
19:50:01 <Phantom_Hoover> elliott, WHO KNOWS
19:50:02 <Vorpal> ais523: anyway it might be possible in south Sweden in early September
19:50:03 <ais523> there was a fun TV series where someone tried to walk between two points in as straight a line as possible
19:50:08 <olsner> elliott: are you planning on hiking through sweden?
19:50:10 <elliott> Phantom_Hoover: I don't think you're taking this seriously enough
19:50:11 <Vorpal> Deewiant: fields.
19:50:19 <Vorpal> Deewiant: it is just fields. Not easy to walk on
19:50:20 <elliott> olsner: not hiking, just... walking
19:50:22 <ais523> which involved doing things like getting permission to walk through military bases and getting boats across lakes
19:50:24 <Vorpal> sure, possible, but not a good idea
19:50:31 <elliott> olsner: latvia too
19:50:33 <Deewiant> So, possible :-P
19:50:34 <elliott> because google maps said so
19:50:39 <elliott> also denmark at one point
19:50:44 <elliott> and one turku bit
19:50:48 <elliott> it'll be great
19:50:48 <olsner> hmm, latvia and sweden are not exactly adjacent
19:50:50 <Taneb> I can take two weeks off for a camping trip in country that speaks a language I don't with people I've never met
19:50:54 <elliott> olsner: where do you live?
19:50:58 <olsner> elliott: in sweden
19:51:00 <elliott> olsner: this is our base route: http://maps.google.com/maps?f=d&source=s_d&saddr=hexham&daddr=edinburgh+to:Riga,+Latvia+to:Helsinki,+Finland+to:68.269125,19.376158&geocode=FWjHRgMdAf3f_ykVmDENYpB9SDEEwA0heCs6qA%3BFWC7VQMdsFzP_ykjJpilALiHSDEnF-d8exTyZA%3BFWjvZAMdks9vASntPQflsM_uRjEw_vJozc8ABA%3BFVQelgMdAId8ASmRBiGWxwuSRjFj9-I7hL1OzQ%3BFUW0EQQdHqgnAQ&sll=59.592995,11.21014&sspn=29.97045,93.076172&vpsrc=6&hl=en&dirflg=w&mra=ltm&ie=UTF8&ll=59.888937,
19:51:01 <elliott> 12.041016&spn=29.706005,93.076172&t=m&z=4
19:51:03 <elliott> yeah but where ins weden
19:51:06 <elliott> ugh merge that url yourself
19:51:09 <Vorpal> olsner: no but it did the ferry loop thingy
19:51:10 <elliott> like can we pick you up to join in
19:51:16 <elliott> Taneb: I get the feeling you are also subserious
19:51:21 <elliott> it is ok, we will just adventure without you
19:51:30 <elliott> oklopol: btw shape up that Phantom_Hoover into taking this seriously, i'm not just gonna do a two-person trip
19:51:42 <Vorpal> elliott: eh that is even more fucked up than before
19:51:49 <oklopol> especially if you're walking most of it alone :D
19:51:51 <elliott> Vorpal: Yeah, it doesn't like Edinburgh.
19:51:53 <Taneb> I'm completely serious
19:51:56 <Phantom_Hoover> elliott, why Latvia.
19:51:56 <ais523> elliott: I /hope/ you aren't serious
19:52:01 <elliott> Phantom_Hoover: Google Maps wanted us to.
19:52:22 <Vorpal> ais523: doubtful, but he is pretending to be. You won't get him to admit anything else for now.
19:52:23 <elliott> ais523: you're laughing now, but who will be laughing when you hear "band of teenagers and also irresponsible adult found dead in swedish wilderness"?
19:52:40 <oklopol> :D
19:52:43 <olsner> *found*?
19:52:44 <Vorpal> elliott: which adult?
19:52:48 <elliott> Vorpal: no no i really am perfectly sincere. well maybe the sweden trek will have to be amended to include acommodation places
19:52:53 <ais523> elliott: well, trying to dissuade you from this would reduce the change of that ending
19:52:54 <Vorpal> olsner: yeah would be tricky
19:52:54 <oklopol> aren't me and Taneb rougly the same age
19:52:56 <elliott> i don't really like the idea of just lying down and sleeping
19:53:04 <elliott> but no, trip, sounds great
19:53:04 <Vorpal> elliott: that would be way out of the way on that trip
19:53:14 <elliott> Vorpal: meh, more funtime
19:53:17 <elliott> s
19:53:25 <olsner> I can believe "... lost in swedish wilderness" :)
19:53:26 <Vorpal> elliott: not that I will give you my coords
19:53:28 <elliott> oklopol: Taneb's sixteen i think
19:53:32 <oklopol> oh.
19:53:35 <Vorpal> olsner: yeah, found is unlikely
19:53:44 <elliott> ais523: btw I think that you can call emergency services even in Swedish wilderness
19:53:45 <elliott> i mean
19:53:46 <zzo38> I changed "data Succ" to "newtype Succ" since it is a single field
19:53:49 <elliott> i'm assuming they have phone signal
19:53:49 <Vorpal> oklopol: ever been in Norrland btw?
19:53:49 <elliott> do they
19:53:50 <oklopol> well anyway i've done a lot of walking in the wilderness, it's not that dangerous
19:53:54 <Vorpal> err
19:53:55 <oklopol> what's norrland
19:53:55 <zzo38> And a single constructor
19:53:56 <Vorpal> olsner: ^
19:53:58 <Vorpal> not oklopol
19:54:02 <Vorpal> oklopol: mistab, sorry
19:54:18 <Vorpal> oklopol: anyway it is a region in Sweden
19:54:23 <oklopol> i've certainly been to norrland
19:54:28 <ais523> oklopol: I've done a bit, but even the wilderness in England is pretty tame
19:54:37 <elliott> Phantom_Hoover: Taneb: btw failure to misrepresent your correct level of sincerity will result in me banging on your door with a bunch of equipment expecting you to be ready to go
19:54:39 <oklopol> maybe like 5 times
19:54:43 <olsner> norrland is right next to finland, so that should be familiar to oklopol
19:54:43 <elliott> consider this carefully
19:54:45 <Phantom_Hoover> elliott, yes OK.
19:54:49 <Vorpal> ais523: well yes. UK is basically one huge urban area as far as I can tell
19:54:53 <Vorpal> more or less
19:54:56 <elliott> oklopol: they don't believe me, ha ha
19:55:04 <elliott> ok but seriously i think we're all neglecting a vital elements of this trip
19:55:10 <ais523> Vorpal: it isn't, except near large cities
19:55:11 <Taneb> elliott: You can't do that, we'd meet if you do that
19:55:19 <elliott> Brugge, Den Haag, and Esbjerg
19:55:23 <elliott> also Kiel and Lübeck
19:55:27 <elliott> are these not the height of the trip
19:55:30 <elliott> Taneb: worth ti
19:55:33 <elliott> it
19:55:38 <ais523> England, at least, is mostly farmland (so is Wales but it's a different sort of farmland; Scotland is mostly mountains, but people generally live in the other parts of Scotland)
19:55:53 <oklopol> are you sure you want to ruin a perfect strangership
19:55:55 <Vorpal> ais523: well, it looks urban from a Swedish perspective. You won't be able to go for hours on a train in UK without seeing anything but forest and bogs. Unless you go in a circle.
19:56:01 <elliott> oklopol: hmm well you know
19:56:03 <elliott> trip to sweden
19:56:16 <elliott> btw i don't care massively about the actual end destination, i just wanna go somewhere upwards swedenwise
19:56:20 <ais523> Vorpal: that's partly because the train lines deliberately aim for cities
19:56:26 <Taneb> We've got to get to Northern Sweden from Hexham via Scotland, Belgium, England, Netherlands, England, Denmark, Germany, Latvia, Sweden, Estonia and Finland together without meeting
19:56:26 <ais523> because that's where people like going on a train
19:56:27 <elliott> although i would like to keep that loop-de-loop and the latvia part, those are the bits i have real attachments to
19:56:44 <Vorpal> ais523: yes indeed, but you don't need to go for that to reach a city by the shortest path
19:56:49 <Vorpal> or any path
19:56:51 <elliott> oklopol: how nice is turku btw
19:56:56 -!- iamcal has joined.
19:57:10 <oklopol> it's the CULTURE CAPITAL of europe so......
19:57:12 <ais523> Vorpal: but you don't get straight-line trainlines
19:57:15 <elliott> so crappy?
19:57:28 <Vorpal> ais523: even with non-straight you will get that in north Sweden
19:57:33 <oklopol> yes, that crappy
19:57:36 <Vorpal> ais523: that is how sparse it is up there
19:57:37 <oklopol> well dunno, i like it here
19:57:55 <Vorpal> ais523: it isn't quite the outback, not that large. But that is what you should have in mind. Only wetter.
19:58:07 <elliott> the outback, only wetter: description of anywhere big on earth
19:58:25 <Vorpal> elliott: not really, it implies sparely populated too
19:58:29 <Vorpal> and that is not true for everywhere
19:58:46 <Vorpal> elliott: it is forest and bogs up there. Nothing much else.
19:59:25 <elliott> Vorpal: so do you want to join, i forsee significant attrition
19:59:43 <elliott> wrt Phantom_Hoover and/or Taneb not actually wanting to go on a fun adventure with esolangers
19:59:45 <elliott> so we kinda need
19:59:47 <elliott> boring but reliable backup
19:59:58 <Taneb> I am entirely serious!
20:00:15 <elliott> yes but that's also what a non-serious person would say.
20:00:30 <Taneb> God, this is worse than Mafia
20:00:45 <elliott> :D
20:00:57 <Vorpal> elliott: no
20:01:05 -!- augur has joined.
20:01:22 <elliott> Vorpal: rwhy not
20:01:34 <fizzie> elliott: They (Turku) have a sucky castle.
20:01:39 <Vorpal> elliott: busy until 15:00
20:01:42 <oklopol> how is it sucky
20:01:56 <fizzie> oklopol: It doesn't even look like a castle, it's just this big thing.
20:02:09 <elliott> fizzie: oh hey, do you want to join
20:02:15 <fizzie> http://en.wikipedia.org/wiki/File:Hohenschwangau_-_Schloss_Neuschwanstein1.jpg <-- see, that's a castle.
20:02:25 <elliott> we need a responsible op to keep us good
20:02:28 <oklopol> true, but museologists like it because it hasn't sold out
20:02:48 <Phantom_Hoover> My left ear is really hot for some reason.
20:03:10 <elliott> Phantom_Hoover: trip anticipation, well known condition
20:03:13 <fizzie> Compare to this: http://zem.fi/g2/d/13817-2/20110402_023.jpg
20:03:25 <fizzie> No surprise it hasn't sold out.
20:03:27 <elliott> fizzie: i take it that's a no
20:03:32 <elliott> also, that sure is a nice small house
20:03:33 <Phantom_Hoover> fizzie, nah, that's just kind of a big house.
20:03:41 <Taneb> This is what a castle should look like --> http://upload.wikimedia.org/wikipedia/commons/9/92/Prudhoe_Castle_2.jpg
20:03:43 <fizzie> Or http://zem.fi/g2/d/13820-2/20110402_024-028.jpg from the side.
20:04:02 <fizzie> Taneb: That's a has-been castle.
20:04:03 <Phantom_Hoover> Now, THIS is a castle: http://en.wikipedia.org/wiki/File:EdinburghCastle.jpg
20:04:19 <fizzie> elliott: It's probably a "no", yes. Even though I haven't really been following.
20:04:31 <Taneb> Phantom_Hoover: I dislike that castle. Intensly.
20:04:36 <elliott> fizzie: We're going to northern Sweden via Denmark and Latvia and Finland.
20:04:38 <Taneb> It's not ruined enough
20:04:50 <Phantom_Hoover> Taneb, yes, this is because as established earlier you are stupid and bad.
20:04:54 <elliott> fizzie: Phantom_Hoover, me, oklopol, Taneb. Well, at least two of those.
20:04:56 <fizzie> I'd show a photo of a "Helsinki Castle", but we don't even have a sucky one, like Turku.
20:05:14 <Taneb> That's a bit like Hexham, then
20:05:25 <fizzie> Well, we have that Suomenlinna thing.
20:05:31 <fizzie> But that's officially a fortress, not a castle.
20:05:43 <Taneb> We have a church
20:05:43 <fizzie> Even though the Finnish name says "Castle of Finland" basically.
20:06:10 <fizzie> http://www.suomenlinna.fi/files/5/469/Talvi_ilmakuva.jpg
20:06:15 <elliott> fizzie: So that's a no then?
20:06:21 <fizzie> elliott: Yeah, no.
20:06:37 <Gregor> http://www.smbc-comics.com/index.php?id=2366 Oh SMBC. Why ya gotta be so true.
20:06:51 <elliott> Taneb: we should totally attempt to arrive independently in turku without meeting each other
20:06:58 <elliott> and just simultaneously meet oklopol
20:07:02 <oklopol> fizzie: what's fortress in finnish?
20:07:06 <fizzie> Taneb: We also have a church. It looks like a missile silo, and for some strange reason it's famous for that. http://en.wikipedia.org/wiki/Temppeliaukion_kirkko
20:07:18 <oklopol> linnoitus?
20:07:22 <Deewiant> fizzie: What about a "castle-like structure"? http://upload.wikimedia.org/wikipedia/commons/f/fd/Kulosaari_Wihuri.jpg
20:07:39 <Phantom_Hoover> UCO
20:07:45 <fizzie> Deewiant: Well, it's not worse than what they have at Turku.
20:07:47 <Phantom_Hoover> Unidentified Castly Object.
20:08:08 <Deewiant> It is quite a bit smaller, though.
20:08:20 <Phantom_Hoover> But this is all irrelevant because Edinburgh Castle is so much better.
20:08:29 <elliott> Deewiant: I forget, did we ask you
20:08:55 <Deewiant> Yes; I didn't deign to answer
20:08:59 <fizzie> We also have that "Hotel Linna", http://www.palacekamp.fi/@Bin/6889232/Hotel%20Linna%205%20053.jpeg -- but that's even smaller.
20:09:01 <elliott> I find that offensive
20:09:14 <fizzie> Deewiant: Did you notice and/or have you seen before: http://users.ics.tkk.fi/htkallas/aalto.jpg
20:09:23 <fizzie> (From the door of A339.)
20:09:25 <elliott> What even is that thing
20:09:37 <Deewiant> Yeah, I've seen that
20:10:02 <fizzie> elliott: <fizzie> Our university logo is a randomly selected from the three alternatives A! A? A" (and randomly of three alternative colors for the punctuation) -- some people have posed the question that since A! (factorial of A) equals A" (the second derivative of A), what is A?
20:10:11 <fizzie> Unfortunately the meat of it is only in Finnish.
20:10:20 <elliott> haha
20:10:43 <Taneb> Goodnight
20:10:44 -!- Taneb has quit (Quit: Goodbye).
20:12:03 <fizzie> Basically they start with A(2010) = 3 (because there were three separate universities that were combined to form the WaveU in 2010) and A(2011) = 6 (because at the start of 2011 the former HUT was split into four schools), and from that go on to deduce that we will pretty much hit absurdly large numbers on Jan 14, 2010.
20:12:37 <elliott> Thank god.
20:12:48 <fizzie> s/2010.$/2011./
20:13:13 <elliott> Still in the past. :p
20:13:18 <elliott> Also s/\./\\./
20:13:40 <fizzie> It's anchored at the end, it doesn't really need to be escaped. But the "201" part was extra.
20:13:58 <fizzie> And yes, still in the past, though I think the paper appeared at some point in 2010.
20:14:09 <fizzie> It says "we know in advance that A(2011) = 6" on one line.
20:14:39 -!- pikhq_ has joined.
20:14:51 -!- pikhq has quit (Ping timeout: 250 seconds).
20:31:25 -!- zzo38 has quit (Remote host closed the connection).
20:37:45 <elliott> 20:35:16: <ais523> hoversegway!
20:37:50 <elliott> ais523: Hoverse gway indeed.
20:38:06 <ais523> when did I say that?
20:38:12 <ais523> other than 20:35:16?
20:38:13 <elliott> Two years ago or so.
20:38:54 <oerjan> what a hoverse thing to say
20:39:16 <elliott> ais523 is now frantically trying to deduce the correct parsing.
20:40:40 -!- kmc has joined.
20:40:54 -!- augur has quit (Remote host closed the connection).
20:41:18 <elliott> ais523: data on youtube comments being self-parodies: "thumbs up if you want to see a crap comment get lotsa thumbs up"
20:41:31 <ais523> brilliant
20:41:33 <ais523> is it a top comment?
20:41:53 <elliott> unfortunately, no
20:41:56 <elliott> hmm... I wonder if I can thumbs it up
20:42:04 <elliott> there we go
20:42:06 <elliott> I've done my bit
20:44:36 <elliott> 20:57:07: <fizzie> So if you live at point P on the infinite plane, and kick off the Roomba, it'll eventually come back to you. (That might be a rather long "eventually" here.)
20:48:10 <fizzie> The mournful tune is very mournful.
20:48:29 <oklopol> o
20:48:29 <oklopol> o
20:48:29 <oklopol> o
20:48:30 <oklopol> o
20:48:45 <elliott> o
20:48:46 <oklopol> i just did nothing for 1.5 houts
20:48:47 <oklopol> *hours
20:49:00 <oklopol> i guess that's better than nothing
20:49:00 <elliott> fizzie: Please tell me you remembered saying mournful tune from back then.
20:49:11 <elliott> Also is there a video of it.
20:49:13 <elliott> I want to hear th e mourn.
20:49:43 <elliott> http://www.youtube.com/watch?v=a99O5xKFMDw Guh, I feel so sorry for it. It's not even clever enough to make a noise.
20:50:31 <elliott> SET IT FREE YUOU HORIEBLE PERSONS
20:50:45 <elliott> torture,
20:50:54 <elliott> yaaaaaaaaaay
20:50:58 <elliott> oh no
20:51:00 <elliott> then it bash again
20:51:00 <elliott> oh no
20:51:02 <elliott> it is so stupid
20:51:02 <elliott> oh no
20:51:08 <elliott> i could not deal with one of these things
20:51:08 <elliott> NO
20:51:09 <elliott> NOT PACK THERE
20:51:11 <elliott> NOOOOOOOOO
20:51:15 <elliott> NOOOO ROOMBA
20:51:17 <elliott> NOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOooooooooooooooo
20:51:56 <elliott> fizzie: http://www.youtube.com/watch?v=DOwjnGPSzeg Well that's not very mournful.
20:53:27 <fizzie> That's not the sad tune.
20:54:01 <fizzie> I'll try to see if one of them youtubes has it.
20:55:20 <nooga> ide po otwieracz
20:55:22 <nooga> oops
20:55:45 <oerjan> polish conspiracy revealed
20:57:09 <fizzie> Meh, I just find all these Roombas with problems, but not the thing it plays sometimes.
20:57:25 <nooga> wrong terminal!
20:58:12 <fizzie> elliott: I think it's a variant of http://www.youtube.com/watch?v=VH9ImgLSyio though I vaguely recall it being longer.
20:58:46 <elliott> `addquote [from 2009] <fizzie> That's confusing. I have been indoctrinated to believe W|A, but on the other hand it's hard to unbelieve a book with such a ridiculously impressive name as "Handbook of physical testing of paper, Volume 2".
20:58:48 <HackEgo> 657) [from 2009] <fizzie> That's confusing. I have been indoctrinated to believe W|A, but on the other hand it's hard to unbelieve a book with such a ridiculously impressive name as "Handbook of physical testing of paper, Volume 2".
20:59:14 <elliott> fizzie: :(
20:59:20 <elliott> fizzie: I need to adopt one. Not to make it work or anything.
20:59:23 <elliott> Just to make it happy.
20:59:38 <Deewiant> Why "[from 2009]"
20:59:47 <elliott> Deewiant: Qdb is roughly chronological
21:00:17 <Deewiant> May I suggest "2009-11-26T13:35:38Z"
21:02:58 <elliott> Deewiant: No
21:03:03 <elliott> Logs provide exact precision
21:03:13 <oerjan> `run shuf bin/quotes >qs; mv qs bin/quotes
21:03:15 <HackEgo> No output.
21:03:21 * oerjan sprints
21:03:35 <elliott> i
21:03:36 <elliott> hate
21:03:37 <elliott> you
21:03:38 <elliott> `help
21:03:38 <HackEgo> Runs arbitrary code in GNU/Linux. Type "`<command>", or "`run <command>" for full shell commands. "`fetch <URL>" downloads files. Files saved to $PWD are persistent, and $PWD/bin is in $PATH. $PWD is a mercurial repository, "`revert <rev>" can be used to revert to a revision. See http://codu.org/projects/hackbot/fshg/
21:03:39 <Deewiant> Why require a full-text search when you can just annotate it
21:03:46 <elliott> Deewiant: aesthetics
21:03:50 <elliott> `revert 81
21:03:51 <HackEgo> Done.
21:03:54 <elliott> `paper
21:03:56 <HackEgo> ​/home/hackbot/hackbot.hg/multibot_cmds/lib/limits: line 5: exec: paper: not found
21:03:56 <elliott> `quote paper
21:03:58 <HackEgo> 657) [from 2009] <fizzie> That's confusing. I have been indoctrinated to believe W|A, but on the other hand it's hard to unbelieve a book with such a ridiculously impressive name as "Handbook of physical testing of paper, Volume 2".
21:04:02 <elliott> there we go
21:05:28 <oerjan> cdo wins - this time
21:05:51 <elliott> cdo?
21:06:03 <elliott> ais523: oh, btw, oklopol proved sg changes aren't a group oops
21:06:06 <elliott> because x . x = x
21:06:17 <elliott> because x . x = changeset {x,x} = changeset {x} = x
21:06:20 <oerjan> "like ocd, but with the letters in the proper alphabetical order as they _should_ be"
21:06:22 <elliott> :'(
21:06:30 <ais523> they're still going to be some sort of category
21:06:35 <ais523> just a different one from a group
21:06:48 <elliott> ais523: thank god, they're a category
21:06:53 <elliott> what a difficult standard to meet
21:06:58 <ais523> heh
21:07:01 <ais523> they're probably a useful sort of category
21:07:07 <ais523> just because more or less everything is
21:07:37 <nooga> MORP
21:08:24 <Vorpal> <oerjan> `run shuf bin/quotes >qs; mv qs bin/quotes <-- nice
21:08:51 <fizzie> Yes, I give that around 8.9 oerjan-points out of ten.
21:09:20 <oerjan> yay
21:12:40 <olsner> is that equivalent to 89% oerjan?
21:18:17 -!- Patashu has joined.
21:23:33 -!- elliott has quit (Ping timeout: 252 seconds).
21:34:42 -!- nooga has quit (Quit: Lost terminal).
21:44:53 <Gregor> `cat bin/quotes
21:44:55 <HackEgo> ​#!/bin/sh \ allquotes | if [ "$1" ]; then \ if expr "$1" + 0 >/dev/null 2>&1; then \ sed "$1q;d" \ else \ egrep -i -- "$1" \ fi \ else shuf -n 1; fi
21:45:11 <Gregor> Why did he think shuffling /that/ was a good idea :P
21:47:42 <oerjan> oops
21:47:56 * oerjan hides under a rock
21:48:04 <ais523> that's hilarious
21:48:20 <ais523> what's that esolang which was invariant if you shuffled the lines?
21:48:38 <ais523> (VHDL's a bit like that inside an architecture, except when processes or generates are involved)
21:48:44 -!- nooga has joined.
21:48:45 <oerjan> ais523: SORTED?
21:48:49 <nooga> ah
21:48:56 <nooga> time for Dr. Strangelove
21:48:56 <ais523> oerjan: that sounds about right
21:49:14 <ais523> wait, no
21:49:18 <ais523> Sorted! is something else
21:49:45 <ais523> (where you define all the statements you're going to use, and then say "use the fifth statement and the third statement and the sixth statement and...", except for everything)
21:50:10 <oerjan> ais523: also, spam
21:51:39 <ais523> bleh, elliott isn't here
21:51:44 <ais523> I think he'll probably want to see the content of User:QGermaineWalli
21:51:57 <ais523> oh well, I'll delete it, then retrieve the deleted copy for him when he's here
21:52:49 <ais523> oerjan: did I catch it all? the feed was being awkward
21:54:52 <oerjan> seems so
21:55:56 <oerjan> sortle looks promising
21:56:07 -!- ais523 has quit (Remote host closed the connection).
21:59:25 -!- FireFly has quit (Quit: FireFly).
22:01:09 <fizzie> There was something where the program was just a list of (guarded?) statements, of which it would always execute a random possible one.
22:01:43 <fizzie> Strelnokoff?
22:02:05 <fizzie> Also DMM's Whenever.
22:05:00 * Phantom_Hoover → sleep
22:05:01 -!- Phantom_Hoover has quit (Quit: Leaving).
22:06:55 -!- sllide has quit (Ping timeout: 260 seconds).
22:12:28 -!- monqy has joined.
22:14:44 -!- Sgeo has joined.
22:21:47 -!- aloril has quit (Ping timeout: 260 seconds).
22:31:38 -!- MSleep has changed nick to MDude.
22:38:05 -!- aloril has joined.
22:56:00 <Patashu> brrrrrrrrrt http://www.dream-pro.info/~lavalse/LR2IR/search.cgi?mode=ranking&bmsid=83968
23:02:30 -!- augur has joined.
23:04:35 -!- augur has quit (Remote host closed the connection).
23:05:25 -!- augur has joined.
23:22:52 -!- copumpkin has quit (Quit: Computer has gone to sleep.).
23:24:01 -!- augur has quit (Remote host closed the connection).
23:28:17 -!- nooga has quit (Ping timeout: 260 seconds).
23:45:23 -!- Jafet has quit (Quit: Leaving.).
23:48:31 -!- oerjan has quit (Quit: Good night).
23:51:59 -!- DH____ has joined.
23:54:49 -!- DH____ has quit (Read error: Connection reset by peer).
23:54:52 -!- DHeadshot has joined.
23:57:43 -!- fizzie has quit (Ping timeout: 276 seconds).
23:57:55 -!- fungot has quit (Ping timeout: 260 seconds).
2011-09-13
00:00:13 -!- copumpkin has joined.
00:11:35 -!- CakeProphet has joined.
00:12:06 <CakeProphet> is there a tool I can use to auto-generate C++ header files?
00:13:13 -!- variable has quit (Quit: I found 1 in /dev/zero).
00:19:17 -!- Jafet has joined.
00:21:25 -!- pikhq has joined.
00:24:14 -!- pikhq_ has quit (Ping timeout: 260 seconds).
00:24:24 <monqy> CakeProphet: perl
00:24:33 <CakeProphet> ...no.
00:24:40 <CakeProphet> I'll just, uh, write the header file.
00:24:45 <CakeProphet> less effort.
00:24:51 <CakeProphet> but not as re-usable I guess.
00:25:37 -!- fizzie has joined.
00:51:58 -!- Jafet has quit (Quit: Leaving.).
00:54:42 -!- Jafet has joined.
01:11:03 -!- azaq23 has joined.
01:21:24 -!- CakeProphet has quit (Ping timeout: 259 seconds).
01:21:56 -!- MSleep has joined.
01:23:14 -!- augur has joined.
01:23:21 -!- sebbu2 has joined.
01:23:21 -!- sebbu2 has quit (Changing host).
01:23:21 -!- sebbu2 has joined.
01:23:33 -!- variable has joined.
01:24:47 -!- augur has quit (Remote host closed the connection).
01:25:07 -!- DHeadshot has quit (Read error: Connection reset by peer).
01:25:13 -!- DH____ has joined.
01:25:15 -!- sebbu has quit (Ping timeout: 260 seconds).
01:25:15 -!- MDude has quit (Ping timeout: 260 seconds).
01:39:48 -!- CakeProphet has joined.
01:39:48 -!- CakeProphet has quit (Changing host).
01:39:48 -!- CakeProphet has joined.
01:55:31 -!- Jafet has quit (Quit: Leaving.).
02:05:33 -!- evincar has joined.
02:07:07 -!- evincar has quit (Client Quit).
02:14:26 <itidus20> Yo.
02:14:42 <monqy> hi
02:15:25 <itidus20> so im applying my unique genius in strange directions as usual
02:19:15 <monqy> as usual
02:19:45 -!- pikhq_ has joined.
02:19:48 -!- pikhq has quit (Ping timeout: 260 seconds).
02:21:41 -!- zzo38 has joined.
02:37:40 -!- augur has joined.
02:39:59 <itidus20> back
02:40:17 <itidus20> monqy: if you're still about
02:40:23 <monqy> hi
02:40:53 <itidus20> (well you are ok. hi) or if not.. its all the same.. multicast message is always the best
02:41:28 <monqy> ok
02:41:28 <itidus20> so
02:41:41 <itidus20> is lambda calculus like a blueprint to build a computer?
02:42:23 <monqy> what
02:42:40 <itidus20> yeah.. nevermind :D. disregard that last post
02:42:57 <monqy> ok
02:43:02 <itidus20> if i have..
02:43:12 <itidus20> 6 pebbles
02:43:20 <itidus20> and i am at the beach
02:43:48 <itidus20> can i use lambda calculus to add 1 pebble to 2 pebbles?
02:44:01 <monqy> what
02:44:04 <itidus20> uhmm
02:44:10 <itidus20> lol you poor guy
02:44:10 <zzo38> I have read a while ago, and look at it again today, with no new information however, about the game called Quintuple Arcana.
02:45:12 <zzo38> Apparently it took thirty years and the rules are still incomplete.
02:45:29 <itidus20> if i have 5 pebbles and 6 apples... and i am sitting at the beach, can I perform the calculation 2 pebbles x 3 pebbles = 6 apples by applying lambda calculus
02:45:52 <monqy> do you know what lambda calculus is
02:46:34 <monqy> your questions are nonsensical
02:47:26 <itidus20> there seems to be a signifigant difference between pure and impure lambda calc
02:47:33 <monqy> what
02:47:56 <itidus20> apparently lambda calculus on it's own is good for nothing
02:48:03 <monqy> no
02:48:43 <monqy> & what
02:48:48 <zzo38> Play is on the intersections like Go and Xiangqi; there is a river in the middle like Xiangqi; you make scoring patterns like in Mahjong; and you can capture as in Nine Men's Morris. One of the positions on the board is labeled the "state of being" and has certain immunities, some of which are transferred from the card standing there to the rest of the board.
02:49:05 <itidus20> as a human... it is in my interests you see, to make sure all knowledge i have is in some way relevant to things
02:49:06 <zzo38> There are two yellow stations which modify the rules of the game.
02:49:22 <itidus20> i understand that lambda calculus can describe functions at the least
02:49:28 <monqy> lambda calculus is very relevant to things
02:49:41 <monqy> unless you have a bizarre definition of relevant
02:49:51 <itidus20> so that is a connection to functions so i am safe in that aspect
02:51:07 <itidus20> like.. if i say int a = sqrt(25); here float sqrt(float) or whatever types it might have is a function :D
02:52:16 <monqy> what
03:06:00 -!- augur has quit (Remote host closed the connection).
03:07:37 <itidus20> sorry i got distracted by some stuff
03:08:08 <Lymee> > sqrt 25 :: Int
03:08:08 <lambdabot> No instance for (GHC.Float.Floating GHC.Types.Int)
03:08:09 <lambdabot> arising from a use of...
03:08:21 <Lymee> > fromFractional $ sqrt 25
03:08:21 <lambdabot> Not in scope: `fromFractional'
03:08:30 <Lymee> > toIntergral $ sqrt 25
03:08:30 <lambdabot> Not in scope: `toIntergral'
03:08:47 <itidus20> so, sqrt has an input parameter of type float, and if it is 25, it is re-written into whatever equation it is found in as 5
03:10:56 -!- pikhq_ has quit (Ping timeout: 258 seconds).
03:14:58 -!- pikhq has joined.
03:15:34 <pikhq> TIL that Debian masks the magic sysrq key by default.
03:16:22 <Lymee> It does?
03:16:33 <Lymee> That explains why every time I try to unbreak my system via sysrq nothing happens
03:17:02 <pikhq> echo 1 > /proc/sys/kernel/sysrq
03:17:28 <Lymee> Usually the system is crashed by then, so...
03:19:33 <pikhq> Stick it in /etc/rc.local
03:20:49 <pikhq> Note: Technically has security ramifications. Though if an attacker has physical access, he can just as easily go ahead and remove your hard drive, install a key logger, or do whatever else he damned well feels like.
03:26:17 -!- augur has joined.
03:44:16 -!- azaq231 has joined.
03:44:18 -!- azaq231 has quit (Changing host).
03:44:18 -!- azaq231 has joined.
03:44:41 -!- azaq23 has quit (Ping timeout: 260 seconds).
03:45:42 -!- azaq231 has changed nick to azaq23.
04:10:12 <zzo38> I got Steve Smith's autograph in Thursday. But it is messy writing and I cannot read it.
04:12:55 -!- Jafet has joined.
04:15:51 <zzo38> I think abuse of notation is as useful in Haskell as it is in mathematics. I made it to work abuse of notation so that something like $(9) in a type context represents the natural number type for number nine.
04:16:37 <zzo38> (The stuff in $(...) is expected to be Q Type but it is a number instead. But it can still work.)
04:22:35 -!- DH____ has quit (Read error: Connection reset by peer).
04:25:41 <monqy> zzo38: instance Num (Q Type)?
04:26:08 <Gregor> http://codu.org/tmp/drell6-2011-09-13.ogg ACK I'M STILL DOING THESE
04:27:55 <zzo38> monqy: Yes.
04:28:03 <zzo38> That is what I did.
04:28:25 <zzo38> I did write on there, also that it is abuse and not really a proper number and that stuff, but that it is convenient and works anyways.
04:35:09 <tswett> Hey guys! I'm going to make a MOO!
04:35:35 <Gregor> `apt-get moo
04:35:37 <HackEgo> ​(__) \ (oo) \ /------\/ \ / | || \ * /\---/\ \ ~~ ~~ \ ...."Have you mooed today?"...
04:35:55 <tswett> It's going to be better than Normish and the NMR combined.
04:35:59 <tswett> Which is still pretty bad.
04:36:20 <Lymee> `aptitude moo
04:36:22 <HackEgo> There are no Easter Eggs in this program.
04:36:43 <tswett> But I have a plan, you see. The MOO's programming language will be Lua, implemented in Smalltalk.
04:36:53 <Sgeo> `aptitude moo moo
04:36:55 <HackEgo> Unknown command "moo moo" \ aptitude 0.4.11.11 \ Usage: aptitude [-S fname] [-u|-i] \. aptitude [options] <action> ... \. Actions (if none is specified, aptitude will enter interactive mode): \ \ install. - Install/upgrade packages \.remove. - Remove packages \ purge - Remove packages and their
04:37:07 <Sgeo> tswett, wait, what happened to the old MOO?
04:37:09 <tswett> Which I've said before. But it'll be better this time.
04:37:32 <tswett> Sgeo: the couple-of-weeks-old one? It still exists and, in theory, can be played.
04:41:49 <Sgeo> Hmm..
04:41:52 <tswett> I've discovered a Smalltalk package that makes compiling new code much, much nicer than I thought it would be.
04:41:54 <Sgeo> WebTV is apparently a weapon
04:41:59 <Sgeo> tswett, hmm?
04:42:42 <tswett> I thought I'd have to generate Smalltalk source code, or an AST, or raw bytecode. It turns out that there's this nice "intermediate representation" thingy that's easy to generate.
04:43:08 <tswett> So, you guys will all be allowed to write Smalltalk code. But you'll have to write it in Lua.
04:43:40 <Sgeo> Smalltalk isn't exactly known for security, I think
04:43:52 <Sgeo> So unless only voted-on Smalltalk code is allowed...
04:44:25 <Sgeo> (I don't mean they could affect the underlying OS. I mean it's trivial for a snippet of code to modify anything in the Smalltalk system)
04:47:33 <tswett> Lua is known for security, though. The Lua functions that actually access Smalltalk can be locked away.
04:54:43 <pikhq> `aptitude moo -vvvvv
04:54:45 <HackEgo> Unknown command "moo -vvvvv" \ aptitude 0.4.11.11 \ Usage: aptitude [-S fname] [-u|-i] \.aptitude [options] <action> ... \ Actions (if none is specified, aptitude will enter interactive mode): \ \.install - Install/upgrade packages \ remove.- Remove packages \ purge. - Remove packages and their
04:54:53 <pikhq> Lame.
04:54:58 <pikhq> `run aptitude moo -vvvvv
04:55:01 <HackEgo> All right, you win. \ \ /----\ \ -------/ \ \ / \ \ / | \ -----------------/ --------\ \ ----------------------------------------------
05:01:29 -!- Jafet has quit (Quit: Leaving.).
05:19:21 <fizzie> `run aptitude moo -vvvvvv
05:19:23 <HackEgo> What is it? It's an elephant being eaten by a snake, of course.
05:19:41 <fizzie> Not quite so clear, onelined like that.
05:19:51 <Sgeo> VVVVVV with cows?
05:26:37 -!- aloril has quit (Ping timeout: 276 seconds).
05:39:36 -!- CakeProphet has quit (Ping timeout: 260 seconds).
05:39:42 -!- Jafet has joined.
05:39:48 -!- aloril has joined.
05:57:39 -!- Patashu has quit (Remote host closed the connection).
05:57:58 -!- cheater has quit (Ping timeout: 260 seconds).
05:59:18 -!- pikhq_ has joined.
05:59:46 -!- pikhq has quit (Ping timeout: 276 seconds).
06:21:29 -!- cheater has joined.
06:23:57 -!- myndzi has quit (Remote host closed the connection).
06:35:16 -!- myndzi has joined.
06:43:04 -!- CakeProphet has joined.
06:43:04 -!- CakeProphet has quit (Changing host).
06:43:04 -!- CakeProphet has joined.
06:52:31 -!- nooga has joined.
06:58:51 -!- nooga has quit (Ping timeout: 252 seconds).
07:10:12 -!- nooga has joined.
07:11:28 -!- cheater has quit (Ping timeout: 260 seconds).
07:17:25 <CakeProphet> Sour Patch Kids are a soft candy with a coating of sour sugar created by Frank Galatolie. When sour confectionery was first introduced it was not considered a serious product category, more of a children's fad. Success, however, rocketed it into the mainstream. One of the driving forces behind the brand's growth was its success in cinemas, and even now it is a staple for moviegoers. Today Sour Patch Kids is a top selling
07:17:34 <CakeProphet> most NPOV intro paragraph award.
07:20:03 <fizzie> Possibly also a "most copied from PR literature" award.
07:21:16 -!- Patashu has joined.
07:22:44 <CakeProphet> ...but then we're no longer being sarcastic
07:22:52 <CakeProphet> no mixing!
07:23:00 <fizzie> s/most/least/, then.
07:23:30 <CakeProphet> okay that maintains sarcasm axiom standards.
07:24:57 <CakeProphet> but dude they are really good
07:25:04 <CakeProphet> like, I don't think they're being biased.
07:25:14 <CakeProphet> it's just universally accepted that sour patch kids are delicious
07:25:41 <CakeProphet> though sour punch straws could use some similar modifications to be made equally POV
07:25:50 <CakeProphet> they are arguably more delicious
07:28:44 -!- cheater has joined.
07:29:44 <CakeProphet> dude... I wonder
07:29:57 <CakeProphet> if source cereal would be good. I bet it would be delicious. I bet people would buy that shit.
07:30:19 <monqy> source?
07:30:57 <CakeProphet> oh...
07:30:58 <CakeProphet> sour
07:30:59 <CakeProphet> sour cereal
07:31:04 <CakeProphet> it's my idea you can't take.
07:31:42 <CakeProphet> I'll give you help back.
07:32:21 <monqy> ok
07:33:44 <CakeProphet> A breakfast cereal (or just cereal) is a food made more or less from processed grains often, but not always, eaten with the first meal of the day or sometimes as a snack later in the day. It is often eaten cold, usually mixed with milk (e.g. cow's milk, soy milk, rice milk, almond milk), water, or yogurt, and sometimes fruit but sometimes eaten dry.
07:33:54 <CakeProphet> I love things like this on Wikipedia
07:34:40 -!- nooga has quit (Ping timeout: 276 seconds).
07:35:07 <monqy> sometimes I use orange juice instead of milk/yogurt
07:35:13 <monqy> other times I use milk/yogurt
07:35:31 <CakeProphet> "Chairs are a type of furniture often made from wood, and are frequently, but not always, used for sitting."
07:35:38 <CakeProphet> monqy: weird
07:35:46 <CakeProphet> I didn't know people put yogurt in cereal but I guess that makes sense.
07:35:58 <monqy> orange juice cereal is good, for some cereals
07:36:57 <CakeProphet> Cerealicious is a fast-food restaurant chain based in the Philippines. There are currently 12 branches: 10 are located in Manila, 1 in Cebu, and 1 in Davao. Cerealicious offers Post, Nestle, and Kellogg's cereals with milk and a wide range of additional toppings. It incorporates local flavors to serve Filipino taste.
07:37:12 <CakeProphet> I love that Filipino taste.
07:39:02 <monqy> CakeProphet: http://sourcereal.com/
07:47:56 -!- cheater has quit (Ping timeout: 260 seconds).
07:51:48 <CakeProphet> lol wat
07:53:53 <monqy> good website
07:57:02 <CakeProphet> one of the best quality and education sites I've ever read.
08:03:58 <Patashu> I found a robot built to play ddr http://www.youtube.com/watch?v=TlXV8VlDA7Y&feature=feedu
08:05:39 <Patashu> Haha, on his other new video: 'I'm pretty sure this is a 19. Today was the second time I've ever vomited from dance games.'
08:05:40 <Patashu> Nice
08:13:15 -!- cheater has joined.
08:14:11 -!- nooga has joined.
08:23:57 -!- pikhq has joined.
08:24:23 -!- pikhq_ has quit (Ping timeout: 260 seconds).
08:31:36 -!- DH____ has joined.
08:35:26 -!- oerjan has joined.
08:40:32 -!- zzo38 has quit (Remote host closed the connection).
08:43:33 -!- pikhq_ has joined.
08:44:13 -!- pikhq has quit (Ping timeout: 276 seconds).
08:51:32 -!- cheater_ has joined.
08:51:43 -!- cheater_ has quit (Remote host closed the connection).
08:58:27 -!- sebbu has joined.
08:58:27 -!- sebbu has quit (Changing host).
08:58:27 -!- sebbu has joined.
09:00:51 -!- sebbu2 has quit (Ping timeout: 260 seconds).
09:11:32 -!- itidus21 has joined.
09:12:49 -!- yorick has quit (Ping timeout: 276 seconds).
09:13:33 -!- itidus20 has quit (Ping timeout: 240 seconds).
09:30:43 -!- itidus21 has quit (Read error: Connection timed out).
09:31:17 -!- itidus21 has joined.
09:33:51 <oerjan> itidus21: lambda calculus can do any computation that a computer can do, but you have to encode the data as lambda expressions first, and define your functions...
09:34:23 <oerjan> that's no different from how an ordinary computer works with bits and machine code
09:35:07 <fizzie> But can lambda calculus... FEEL... does it have a... SOUL...
09:35:27 <oerjan> tricky.
09:36:16 <fizzie> A soul weighs 21 grams, or so I've heard.
09:36:36 <oerjan> IF YOU SAY SO
09:36:59 -!- shachaf has quit (*.net *.split).
09:37:10 <oerjan> although i am a teeeny bit doubtful
09:38:10 <fizzie> There was this dude in the 1910s who tried to measure the weight of people immediately before and after death, and came to the conclusion that, on average, there was a weight loss of about 21 grams.
09:38:21 -!- shachaf has joined.
09:38:45 <fizzie> With a sample size of N=6, of which two had to be discarded, and the others weren't very consistent either.
09:38:48 <fizzie> But it's still SCIENCE.
09:39:20 <fizzie> Later he went on to take photographs of souls, too.
09:39:52 <fizzie> Snopes documents this thing at http://www.snopes.com/religion/soulweight.asp -- and see, it says "Status: True" there.
09:40:19 <oerjan> cannot doubt snopes, that's for sure
09:40:46 <fizzie> (Admittedly the only thing in the "claim" part is "A physician once placed dying patients upon a scale in order to measure the weight of the human soul", but still.)
09:42:09 <oerjan> fizzie: you don't _have_ to ruin your jokes by explaining them, you know.
09:42:25 <fizzie> It's a sort of a compulsion.
09:44:16 <fizzie> Or do you mean it came pre-ruined and did not require additional ruining by explanation in order to be ruined? (That much is also true.)
09:45:30 <oerjan> no, i mean it works better if the listener has to do work to find out what's screwy
09:46:12 <oerjan> of course i did suspect it, since i know what kind of format snopes uses
09:52:07 -!- itidus21 has quit (Read error: Connection timed out).
09:53:07 -!- itidus21 has joined.
09:54:01 -!- Jafet1 has joined.
09:56:31 -!- Jafet has quit (Ping timeout: 258 seconds).
10:11:52 -!- itidus21 has quit (Read error: Connection timed out).
10:12:37 -!- itidus21 has joined.
10:25:07 -!- derdon has joined.
10:31:18 -!- itidus21 has quit (Read error: Connection timed out).
10:31:45 -!- itidus21 has joined.
10:33:12 -!- itidus21 has quit (Client Quit).
10:33:43 -!- Jafet1 has changed nick to Jafet.
10:33:45 -!- itidus21 has joined.
10:35:16 -!- itidus21 has quit (Client Quit).
10:35:31 -!- itidus21 has joined.
10:38:11 -!- oerjan has quit (Remote host closed the connection).
10:40:00 -!- itidus21 has changed nick to itidus20.
10:58:41 -!- derdon has quit (Ping timeout: 260 seconds).
10:58:42 -!- azaq23 has quit (Ping timeout: 260 seconds).
10:59:41 -!- derdon has joined.
11:02:17 -!- azaq23 has joined.
11:10:31 -!- rodgort has quit (Quit: ERC Version 5.3 (IRC client for Emacs)).
11:11:41 -!- rodgort has joined.
11:20:39 -!- ais523 has joined.
11:38:31 <ais523> OK, I have decided that single * for toggle italics, that works embedded inside words, is a ridiculously bad syntax idea
11:38:42 <ais523> using space-* ... *-space isn't so bad, although less flexible
11:38:49 <ais523> but embedded asterisks happen far too often
11:46:44 <Deewiant> In Markdown, * inside `` doesn't result in emphasis
11:46:51 <Deewiant> And asterisks outside code are rare
11:49:35 <ais523> I was reading an article about LR(*) grammars
11:50:21 <Deewiant> Right, that's rare
11:50:58 -!- yorick has joined.
11:51:37 <ais523> well, I'd say although each individual context where you tend to have embedded asterisks is rare
11:51:41 <ais523> there are a large number of htem
11:51:43 <ais523> *them
11:52:01 <ais523> Wikipedia was having enough trouble with a language which contained words with double single-quotes
12:07:54 <itidus20> you guys should cook up your own wiki encoding
12:08:24 <itidus20> oh. that is what you're doing isn't it :P
12:13:28 -!- ais523 has quit.
12:14:10 -!- ais523 has joined.
12:14:18 -!- ais523 has quit (Changing host).
12:14:18 -!- ais523 has joined.
12:14:24 <ais523> itidus20: I consider MediaWiki's to be tolerable
12:14:57 <ais523> it pretty rarely false-positives on markup, and it allows you to express really complex things if you want to
12:15:06 <ais523> I consider looking simple to be secondary
12:16:51 -!- kmc has quit (Ping timeout: 260 seconds).
12:17:36 -!- kmc has joined.
12:38:05 -!- monqy has quit (Quit: hello).
12:46:01 -!- augur has quit (Remote host closed the connection).
12:51:20 -!- Phantom_Hoover has joined.
12:55:10 -!- sllide has joined.
13:06:05 -!- rodgort has quit (Quit: ERC Version 5.3 (IRC client for Emacs)).
13:07:01 -!- rodgort has joined.
13:12:09 -!- augur has joined.
13:13:02 -!- itidus20 has changed nick to itidus21.
13:13:24 -!- itidus21 has changed nick to itidus20.
13:21:09 -!- MSleep has changed nick to MDude.
13:34:37 -!- monqy has joined.
13:42:03 <ais523> elliott (from the logs): if you want to confuse Esolang admins, do what Tekknolagi has been doing, he's been making productive and very useful posts with metadata that makes me think they're spam until I read them
13:45:45 <monqy> speaking of spam, I really like the bots that delete large chunks of text and replace them with praise in broken english
13:49:34 <ais523> why?
13:49:52 <ais523> (the broken english is to stop them being filtered out by keyword matching, I think)
13:50:12 -!- Taneb has joined.
13:50:26 <Taneb> Hello!
13:50:31 <monqy> I don't really know why I like them so much
13:51:12 <Taneb> I was talking to one of my friends today about how it is a very small world
13:51:33 <Taneb> During that conversation, it emerged that it is even smaller than either of us realised
13:52:13 <monqy> oh?
13:52:35 <Taneb> Extremely small
13:52:53 <monqy> and how did this emerge
13:53:06 <Taneb> Turns out, she once got kicked in the face by elliott
13:53:26 <monqy> this made me laugh
13:56:52 <Taneb> Brb, walking dog
13:56:53 -!- Taneb has quit (Quit: Goodbye).
14:03:36 -!- nooga_ has joined.
14:03:36 -!- nooga has quit (Read error: Connection reset by peer).
14:05:42 -!- Taneb has joined.
14:06:57 <Taneb> Ooh I've got mail!
14:08:29 <Taneb> I think email has the huge advantage that it is easier to open
14:11:53 <Phantom_Hoover> Unless you have a letter opener.
14:12:02 <Taneb> Or dialup
14:13:18 <Taneb> Todays Darths and Droids is good
14:16:43 -!- copumpkin has quit (Quit: Computer has gone to sleep.).
14:20:20 <Taneb> What was the evil computermabob in the Terminator films called?
14:20:23 <Taneb> Because http://www.bbc.co.uk/news/technology-14896330
14:21:03 <ais523> why are ADTs not used more?
14:21:06 <ais523> they're a really useful concept
14:21:20 <Taneb> Which ADT?
14:21:22 <ais523> the only reason I don't design them into my esolangs is that those are typically untyped
14:21:28 <ais523> algebraic data types
14:21:47 <Taneb> Not Average Daily Traffic?
14:21:48 <Taneb> Shame
14:23:42 <Taneb> Hey, ReactOS is picking up speed
14:29:23 <DH____> I could never get ReactOS to install...
14:29:52 <Taneb> I couldn't get Haiku to
14:31:30 <DH____> Haiku installed fine but didn't recognise my mouse..
14:32:43 <cheater> hahahahaiku
14:32:43 <DH____> An OS designed for image processing with no mouse is rather pointless.
14:33:03 <cheater> sounds like you have a laughing fit which ends with a sneeze
14:33:42 <monqy> os designed for image processing? I don't know much about haiku other than I probably wouldn't like it
14:34:18 <Taneb> I didn't realise it was designed for image processing
14:35:47 <Taneb> I just thought I ought to have as many OSs as I could, just in case
14:37:21 <monqy> just in case
14:37:36 <Taneb> I got confused after two
14:37:44 <Taneb> And now my laptop is having repairs
14:37:46 <monqy> two?
14:37:50 <monqy> confused?
14:37:59 <Taneb> Yeah, I'm easily confused
14:38:15 <Taneb> And they were two of the easiest to use
14:38:46 <monqy> oh?
14:38:55 <Taneb> Windows and Ubuntu
14:39:00 <monqy> oh.
14:39:49 <monqy> at least for my uses, windows was anything but easy
14:40:02 <Taneb> Oh?
14:40:54 <monqy> it was often a pain to get things working, the ui was annoying, other things I've forgotten by now
14:41:45 -!- copumpkin has joined.
14:41:48 <Taneb> It's easiest to get help with, I find it a lot easier to install software for
14:42:23 <monqy> amusing, as when I had to deal with it, installing things was hell
14:42:45 <monqy> also I haven't used ubuntu enough to have a reasonable opinion of it from usage, but from what I know, I wouldn't like it
14:42:45 <Taneb> We must install different sorts of things
14:44:50 <Taneb> Different people, different opinions
14:44:54 <Taneb> Happens all the time
14:44:56 <monqy> as a disclaimer, what is friendly to me personally is far from "user friendly", so my opinions are probably a good deal off
14:48:40 -!- cheater has changed nick to nauke.
14:49:25 -!- nauke has changed nick to rnauke.
15:01:38 -!- Taneb has quit (Ping timeout: 260 seconds).
15:02:04 -!- augur has quit (Remote host closed the connection).
15:02:10 <DH____> I tend to collect installed OSes...
15:05:18 -!- augur has joined.
15:06:28 -!- rnauke has changed nick to cheater.
15:16:16 <Phantom_Hoover> <Taneb> It's easiest to get help with, I find it a lot easier to install software for
15:16:27 <Phantom_Hoover> sudo aptitude install half the things you want
15:17:21 <Phantom_Hoover> Admittedly, Linux is a much bigger target than Windows, but not to the extent of making me want to wade through Windows' UI and system.
15:19:17 <ais523> even incorrectly packaged things, I find easier to install on Linux than Windows
15:19:36 <ais523> things I have to compile myself, I can understand why people don't like installing those, though
15:19:44 -!- cheater has quit (Ping timeout: 252 seconds).
15:20:08 <Phantom_Hoover> ais523, worse still are binary packages.
15:20:21 <ais523> Phantom_Hoover: they're not a problem if they're packaged correctly
15:20:42 <Phantom_Hoover> For some reason, people don't seem to realise that there is no such thing as a Linux binary that will just work on all Linux systems.
15:21:01 -!- Taneb has joined.
15:21:11 <Phantom_Hoover> You can assume that someone running the same distro on the same arch that you compiled it will be able to run it easily.
15:27:10 <pikhq_> There is no such thing as a Windows binary that will just work on all Windows systems.
15:27:16 <pikhq_> This is a much more esoteric fact, though.
15:29:42 <Taneb> I think I'll work some more on XSLT S and K
15:30:05 <Taneb> Thinking about it differently, though
15:30:25 <Taneb> Consider the identity function in S and K, SKK
15:30:47 <Taneb> This can be written, if you are so inclined, as "(((S)(K))(K))
15:31:22 <monqy> so much parentheses
15:31:23 <Taneb> Which makes it clearer what it looks like as a tree
15:32:00 -!- cheater has joined.
15:32:18 <Phantom_Hoover> http://theantifacebookleague.com/
15:32:26 <Phantom_Hoover> Well this won't be horrifically snotty or anything.
15:32:38 <Phantom_Hoover> Oh, goodness, it is.
15:32:53 <monqy> Intelligentsia
15:33:39 <Taneb> Now, XML encodes data trees
15:33:56 <Taneb> Which is good, because XLST works on XML
15:34:02 -!- lambdabot has quit (Read error: Connection reset by peer).
15:34:11 <Taneb> And combinatory logic can be expressed as a tree
15:34:54 <Taneb> The slightly less... bracket overcrowded, ((SK)K)
15:34:59 <Taneb> Can be expressed as follows:
15:35:16 <Taneb> <node><node><s/><k/></node><k/></node>
15:35:26 <Phantom_Hoover> Taneb, are you going to get to a point that almost all of us don't already know in less than ten minutes?
15:35:34 <Taneb> Not likely
15:35:44 <Phantom_Hoover> Make it <app>, at least.
15:35:53 <Taneb> Probably better
15:36:16 <Phantom_Hoover> I thought XSLT wasn't TC, anyway.
15:36:23 <Taneb> Has been proven
15:36:40 <monqy> has been proven which way??
15:36:46 <Taneb> This way: http://www.unidex.com/turing/utm.htm
15:37:26 <Phantom_Hoover> Oh, OK.
15:37:56 -!- lambdabot has joined.
15:39:00 <Taneb> A K can only be completely evaluated if it is at the begininning of its pair thing and its pair thing is at the beginning of /its/ pair thing
15:39:11 <Taneb> I'm not good at the actual words
15:39:28 <Taneb> An S needs to be even more firsty
15:39:31 <Taneb> By 1
15:40:28 <Phantom_Hoover> It's pattern matching, basically.
15:40:46 -!- Patashu has quit (Quit: MSN: Patashu@hotmail.com , Gmail: Patashu0@gmail.com , AIM: Patashu0 , YIM: patashu2 .).
15:40:58 <Phantom_Hoover> Reduce any instances of ```sxyz or ``kxy from the top of the tree.
15:41:17 <monqy> is xslt a rewritey system or am i thinking of something else
15:41:23 <Phantom_Hoover> Yep.
15:41:49 <Phantom_Hoover> So it should be ideal for SK implementation, although I thought the same about Eodermdrome.
15:48:05 -!- elliott has joined.
15:55:55 -!- iamcal has quit (Remote host closed the connection).
15:58:26 -!- augur has quit (Remote host closed the connection).
15:58:31 -!- iamcal has joined.
15:58:54 -!- iamcal has quit (Remote host closed the connection).
16:04:21 -!- DH____ has quit (Ping timeout: 260 seconds).
16:15:26 -!- kmc has quit (Ping timeout: 260 seconds).
16:16:27 -!- kmc has joined.
16:21:52 -!- iamcal has joined.
16:23:21 <elliott> 21:44:53: <Gregor> `cat bin/quotes
16:23:21 <elliott> 21:44:55: <HackEgo> ​#!/bin/sh \ allquotes | if [ "$1" ]; then \ if expr "$1" + 0 >/dev/null 2>&1; then \ sed "$1q;d" \ else \ egrep -i -- "$1" \ fi \ else shuf -n 1; fi
16:23:21 <elliott> 21:45:11: <Gregor> Why did he think shuffling /that/ was a good idea :P
16:23:21 <elliott> 21:47:42: <oerjan> oops
16:23:21 <elliott> ahahaha
16:23:40 <elliott> ais523: i'mready for qgermainewalli
16:24:09 <elliott> http://esolangs.org/wiki/Gecho
16:24:11 <elliott> r u srs
16:24:20 <elliott> http://tekknolagi.lighthouseapp.com/projects/81045-gecho/tickets oh good it has a bug tracker
16:24:24 <elliott> Calculations are Imprecise
16:24:24 <elliott> Reported by tekknolagi (at gmail) | September 13th, 2011 @ 02:44 PM
16:24:24 <elliott> The computations use float, which is very imprecise. Must move to bignum.
16:24:48 <elliott> oh nice, e wants people to build it as root for no apparent reason
16:24:58 <ais523> elliott: OK, undeleted
16:25:01 <elliott> "That's stack theory." good lord this is bad
16:25:11 <ais523> grab a copy, I'm going to delete it again soon
16:25:17 <elliott> ais523: amazing; thank you kindly, saved
16:25:17 <ais523> unless you aren't interested after all
16:25:41 <elliott> hmm, I should read my email spam
16:25:45 <elliott> I wonder if it's as amazing?
16:25:50 <ais523> the worrying thing is, I think the spam might have copied from a web page that thought it was legitimate
16:25:58 <ais523> email spam is generally less amazing than that, but not alwayds
16:26:01 <ais523> *always
16:26:07 <elliott> BILLING SUMMARY
16:26:07 <elliott> ---------------
16:26:08 <elliott> PRIOR BALANCE: $-10.67
16:26:08 <elliott> ---------------
16:26:08 <elliott> NEW BALANCE: $-10.67
16:26:09 <elliott> thanks slicehost!
16:26:15 <elliott> they're going to send me these emails forever, aren't they
16:26:25 <ais523> do you owe them $10.67?
16:26:30 <ais523> or do they owe you that amount?
16:26:33 <elliott> they owe me that
16:26:35 <elliott> or, well
16:26:38 <elliott> I doubt I can turn it into cash
16:26:42 <elliott> but it'd pay for any slicehost crap i bought
16:26:48 <ais523> ah, it's store credit, effectively
16:27:02 <elliott> they keep emailing me to let me know that nothing happened, which is expected as I cancelled my VPS :P
16:27:56 <elliott> http://esolangs.org/w/index.php?title=Hello_world_program_in_esoteric_languages&curid=1322&diff=24511&oldid=24398
16:28:00 <elliott> ais523: I'm really upset you reverted this
16:28:06 <elliott> Phantom_Hoover:
16:28:19 <Phantom_Hoover> Yes?
16:28:23 <elliott> it's the twin of [[Talk:Gregor Richards]]!
16:28:27 <elliott> click the link
16:28:44 <ais523> elliott: it was overwriting content
16:28:48 <ais523> on a talk page, it wouldn't have been so bad
16:28:56 <ais523> but it actually overwrote the example
16:29:00 <elliott> :'(
16:29:01 <Gregor> elliott: That's not just logic. That's rellay sensible.
16:29:08 <elliott> it was better than the example
16:29:11 <elliott> Gregor: That's not just the best answer. It's the beestst answer!
16:29:21 <ais523> what if people want to know how to write a hello world in Tri?
16:29:34 <elliott> ais523: they should stop wanting to know that, and start wanting to admire some beautiful spam instead
16:29:58 <elliott> fromDon't get scammed, free report. norwaypilgrim@vignette.com
16:29:58 <elliott> subjectCNN USA breaking news
16:29:58 <elliott> CNN USA breaking news
16:29:58 <elliott> http://seventeenforty.net/
16:30:03 <elliott> it doesn't even load :(
16:30:04 -!- Jafet has quit (Quit: Leaving.).
16:30:19 <elliott> but then chrome suggested http://seventeenforty.com/ "1740 is a private, members-only,18 and over BDSM dungeon and social club located in Wichita, Kansas."
16:30:27 <elliott> cnn usa breaking news
16:31:10 <Taneb> The BBC News Technology page sounds like we're heading into a dystopia
16:31:12 -!- Jafet has joined.
16:31:19 <Taneb> SKYNET SEEKS IDLE COMPUTER POWER
16:31:25 <elliott> hahahaha
16:31:31 <Taneb> 1 MILLION EUROS TO FUND WINDOWS CLONE
16:31:32 <elliott> why would you name anything Skynet?
16:31:38 <elliott> like, ever
16:31:43 <ais523> elliott: because it's a cloud computing project related to astronomy
16:31:48 <ais523> so they must have thought it was a good pun
16:32:33 <Taneb> LEGAL ACTION ON COLLEGE BOOK PLAN
16:32:37 <elliott> Blagging firms 'get away with it'
16:32:38 <elliott> Blagging of personal data goes far beyond the media but debt collectors and other firms are getting away with it, warns the information commissioner.
16:32:48 <elliott> I can't interpret this as anything other than "blagging" as in blogging
16:32:52 <Taneb> Same
16:33:14 <ais523> elliott: I thought that term was xkcd-specific
16:33:29 <Taneb> According to BBC, it means something else
16:33:33 <Taneb> Equally despicable
16:33:37 <elliott> ais523: is there anything xkcd-specific that hasn't blended into "nerd culture" a bit?
16:33:48 <elliott> 'Beggars belief'
16:33:49 <elliott> blaggars belief
16:34:02 -!- FireFly has joined.
16:34:03 <ais523> elliott: well, normally it's as an xkcd reference
16:34:04 <elliott> Blaggers could be jailed - Clegg 14 JULY 2011, POLITICS
16:34:04 <elliott> What is blagging? 12 JULY 2011, UK
16:34:04 <elliott> teeheehee
16:34:25 <ais523> the original meaning of "blagging" was persuading people to give you things for free
16:34:38 <ais523> basically, just walking into a shop and asking if you could have some of their stuff for free, and actually getting it
16:34:51 <ais523> some people got really good at it, mostly celebrities
16:34:52 <Taneb> I actually did that
16:34:53 <elliott> ais523: good term, good activity
16:34:56 <Taneb> With a book
16:35:01 <Taneb> Never read it
16:35:08 <elliott> "The system's developers say it runs all Windows programs, but is much faster than its Microsoft equivalent."
16:35:08 <elliott> ReactOS runs all Windows programs now?
16:35:09 -!- calamari has joined.
16:35:20 <elliott> "The venture's project coordinator, Moscow-based Aleksey Bragin, said that the system was almost ready to go from the experimental to the available-to-all stage."
16:35:21 <elliott> seriously?
16:35:22 <Taneb> The Portrait of Dorian Grary
16:35:29 <elliott> did ReactOS stop being a buggy piece of crap in the last four years? :P
16:35:42 <Taneb> The president of Russia is interested in it
16:35:45 <Taneb> So probably not
16:35:55 <ais523> elliott: I thought ReactOS was typically more or less level with Wine in compatibility
16:36:04 <ais523> as Wine is ReactOS's userland libraries, effectively
16:36:13 <elliott> Taneb: In Soviet Russia, the government says that is assassinated by YOU!
16:36:20 <elliott> s/that is/that and is/
16:36:41 <elliott> Anyone? No?
16:37:49 <elliott> fromBBC USA: Exclusively for Stay at home Mother cahootdavies@sofitel.com
16:37:54 <elliott> BBC USA is exclusively for stay at home mother onw?
16:37:55 <elliott> now?
16:38:18 <Phantom_Hoover> elliott, yes.
16:38:27 <elliott> Ah.
16:38:49 <elliott> "How can you program if you're blind? - Stack Overflow"
16:38:51 <elliott> seriously, SO?
16:40:08 <ais523> screen readers are quite capable of handling punctuation
16:40:16 <ais523> although I imagine a punctuation-light language would be faster to read
16:40:27 <ais523> there are blind people who play NetHack using a screen reader and a virtual cursor
16:40:32 <elliott> apparently braille displays are sometimes used for deeply-nested punctuation
16:40:37 <elliott> ais523: oh, there are? I think I had an argument about that in here once
16:40:47 <elliott> ais523: blind from birth, or previously sighted?
16:40:48 <ais523> elliott: well, according to the devteam
16:40:53 <ais523> I don't know
16:40:56 <elliott> alright
16:40:57 <Jafet> RL zen conduct
16:41:18 <ais523> I've heard that braille displays are a pain to use for long periods of time
16:41:19 <elliott> it's obviously possible for the latter... I dunno how good blind from birth people are at grid-based reasoning
16:41:24 <ais523> not having tried, I wouldn't know
16:42:08 <ais523> elliott: they're going to need spatial awareness whether they can see or not
16:42:13 <elliott> "20-20 vision is required for fighter pilots. I have no qualms about requiring color vision for programmers. Everyone does not need to be a programmer." --Chuck Moore, 2001, who now has terrible eyesight, and still (to my knowledge) codes
16:42:24 <elliott> ais523: yes, what i'm saying is that if you were previously sighted, you'll have spatial intuition
16:42:36 <elliott> so it's obviously possible to play nethack
16:42:48 <elliott> I don't know if blind-from-birth people have spatial intuition like that
16:42:55 <ais523> spatial intuition doesn't have that much to do with sightedness
16:43:03 <ais523> I'd say blind people need more of it, to figure out what's around them without sight
16:43:06 <elliott> [–]sourabhdeveloper -1 points 43 minutes ago
16:43:07 <elliott> How can anyone read your article if he/she is blind? Think about it
16:43:07 <elliott> permalinkreportreply
16:43:13 <elliott> ais523: hmm, indeed
16:44:09 <elliott> ais523: hey, you're doing the secret project, mind if I ask you a question about low-level Linux memory management? :-P
16:44:19 <ais523> I don't mind, although I might not know the answer
16:44:54 <ais523> I went and reimplemented mmap-at-variable-location in terms of mmap-at-fixed-location, and also turned off ASLR so that the heap, stack etc have consistent locations
16:44:59 <elliott> ais523: Is there a way to preserve some of the address space across an exec() of yourself? I know I can use POSIX shm and the like and map it back to avoid copies, but since there's no guarantee you can map it to the same address, all pointers could be invalidated
16:45:03 <elliott> which sucks
16:45:20 <elliott> so I'm wondering if there's a way to just "keep this memory"
16:45:29 <elliott> and pass the addresses on to the new process (with argv)
16:45:36 <ais523> if it's mapped to a file, there'd be no issue
16:45:49 <ais523> as you could just use the same file
16:45:50 <elliott> yes there would be
16:45:58 <elliott> because there's no guarantee you can map it to the same address
16:46:02 <ais523> umm, shared-mapped to a file
16:46:04 <elliott> so all pointers inside would be invalidated
16:46:07 <ais523> oh, you want the same address too?
16:46:17 <elliott> ais523: yes, which obviously is not possible if you make a /new/ mapping
16:46:17 <Jafet> Keep respawning until it works
16:46:23 <elliott> so I'm wondering if there's a way to just preserve the old one
16:46:24 <ais523> if you turn off ASLR, that's not an issue
16:46:31 <elliott> that's not an option
16:46:35 <ais523> with it on, I don't think you can preserve the old one
16:46:45 <ais523> (also, you can turn it off for one process using personality(2))
16:46:50 <monqy> oh no i missed elliott noticing gecho
16:46:55 <elliott> ais523: hmm
16:47:03 <elliott> ais523: I suppose it might work, but I'm reluctant to do that
16:47:09 <ais523> agreed
16:47:15 <ais523> I'm not sure if there's a non-hacky way, unfortunately
16:47:19 <elliott> ais523: the usecase here is a seamless upgrade command that self-execs to preserve socket fds
16:47:23 <elliott> (mcmap)
16:47:37 <elliott> but the problem is, there could be from like five megs to a gig of map data
16:47:43 <elliott> and that has to be preserved across the update
16:47:46 <Jafet> What's wrong with my solution
16:48:00 <ais523> elliott: and contains pointers, presumably
16:48:01 <elliott> Jafet: it's terrible and might not even work at all :P
16:48:14 <Jafet> Sure, it might not work in 32-bit address spaces, but those are like deprecated.
16:48:23 <elliott> ais523: yes; it uses a glib hash table, and has SDL surfaces inside -- and sdl surfaces contain pointers you can't fiddle with
16:48:47 <elliott> ais523: it /could/ be rewritten under the assumption that non-relative pointers won't work
16:48:49 <elliott> but bleh
16:49:14 <ais523> elliott: instead of execing, what about remapping the executable?
16:49:20 <elliott> ais523: the currently planned solution is that, there's some regionfile code that was being worked on before, that swapped out regions of the map to disk (in Minecraft's native formats), etc., to avoid being a massive RAM hog
16:49:29 <elliott> so, we can just turn that on always, and it'll work
16:49:34 <elliott> and it could be pointed at /tmp
16:49:37 <elliott> but that uses up disk
16:49:46 <elliott> or, might just not work at all, if /tmp isn't big enough and you don't want to use up disk
16:49:50 <elliott> ais523: hmm, howso?
16:50:32 <ais523> well, an executable gets mapped three times (as readonly, readwrite, readexecute)
16:50:56 <ais523> and if you replaced just those mappings, together with the stuff you didn't want to keep, things might work
16:51:09 <ais523> I'm not convinced they would, though; or at least, it might be really difficult to work out
16:52:25 <elliott> ais523: heh
16:52:40 <elliott> ais523: the problem is that I want library state to be reset
16:53:18 <Taneb> Tetosterone poisining typing
16:53:26 <Taneb> Like strong typing but stonger
16:53:52 <elliott> Taneb: Ada :P
16:54:12 <ais523> or VHDL, because it's designed to be as like Ada as possible
16:54:41 <elliott> ais523: I guess the regionfile code is the best path, then
16:54:49 <elliott> especially as I'd like to write the equivalent for Windows, too
16:54:56 <elliott> and also be relatively portable for POSIX systems
16:55:00 -!- augur has joined.
16:55:12 <ais523> I'm trying to remember if windows even has an exec
16:55:18 <ais523> I know Windows 3.1 did
16:55:25 <ais523> but I'm not sure if it's been updated for later versions
16:55:26 <elliott> ais523: no, but it has a createprocess thing that lets you keep fds, theoretically
16:55:31 <elliott> hmm, well it might have exec
16:55:33 <elliott> but i doubt it keeps fds
16:55:49 <ais523> FDs are a bit of a weird concept as Windows goes
16:55:49 <elliott> ais523: 10:41:13: <fizzie> elliott: As for Windows, no, I don't think it has the proper sort of exec; it's all by CreateProcess there. But at least for files you can specify SECURITY_ATTRIBUTES that let the handle be inherited by child processes; presumably that could be possible for sockets *somehow*.
16:55:56 <elliott> 17:07:00: <fizzie> The file thing should work on Windows too, it just needs the proper CreateFile calls. (In particular the SECURITY_ATTRIBUTES needs bInheritHandle of true, and dwShareMode that FILE_SHARE_DELETE for the delete-before-close... and I'm not entirely sure how you pass an inherited handle. Oh, and then of course you'd have to make the sockets inheritable somehow, that might be more complicated.)
16:55:57 <ais523> it likes using all sorts of bizarre lockable handles instead
16:55:59 <ais523> internally
16:56:32 <elliott> (The "file thing" is another part of the hack.)
16:56:45 <elliott> (We create a temporary file, unlink it, write data to it, seek to position 0, then pass the fd on to the new process.)
16:56:52 <elliott> (It reads all the serialised data from it.)
16:57:04 <ais523> where locking something doesn't just prevent other things accessing it, but causes it to have an actual memory location
16:57:08 <ais523> and prevents it being swapped out
16:57:17 <ais523> Windows' API was invented before virtual memory was
16:57:19 <elliott> heh
16:57:48 <ais523> (Windows 3.1 was capable of using virtual memory if it was present, but that was in an "enhanced mode", and it had another mode where it wouldn't)
16:58:16 <ais523> memory leaks were pretty easy in 3.1, as memory wasn't cleaned up on program exit
16:58:23 <ais523> it is nowadays, I think/hope
16:58:32 <Phantom_Hoover> XD
16:58:52 <ais523> 3.1 is the only version of Windows that I actually have a reasonable understanding of
16:58:55 <ais523> I used to program for it
16:58:55 <Taneb> An incredibly weakly typed esolang
16:59:01 <ais523> back before I knew UNIX existed
16:59:09 <elliott> you actually have to free() all memory before exit on old windows? wow
16:59:21 <elliott> I thought that was just programming superstition
16:59:36 <ais523> on DOS, too, but it's more obvious there
17:00:24 <elliott> wow, SDL 1.3 is introducing multiple windows
17:00:35 <ais523> you were also supposed to close files while not using them
17:00:42 <elliott> <JeZ-l-Lee> droidevr - Hi! - check out a new screenshot of development!: http://16bitsoft.com/files/CT/images/Desktop_09-13-2011.png
17:00:43 <elliott> oh my god
17:00:44 <ais523> as files couldn't be opened by more than one process at a time
17:00:46 <itidus20> holy poop on a stick
17:00:47 <elliott> everyone click on that and look at the code header
17:00:49 <elliott> just
17:00:50 <elliott> look at it
17:01:10 <monqy> wow what
17:01:17 <ais523> I did, it doesn't seem too out of place
17:01:18 <itidus20> my holy poop on a stick was for sdl 1.3
17:01:37 <elliott> ais523: it's ridiculous!
17:01:49 <elliott> http://16bitsoft.com/T-Crisis3AI--HTML5/advertising/T-C3AI-HTML5-Title.png oh my god
17:01:58 <ais523> have you not seen ASCII art code headers before?
17:02:04 <Phantom_Hoover> Pimp my code header.
17:02:05 <elliott> ais523: not ones /that/ gratuitous
17:02:10 <Jafet> elliott has never opened nfo files
17:02:15 <elliott> ais523: and I tend to avoid them, because I tend to try and not read awful code
17:02:21 <calamari> lol that's tame compared to most
17:02:22 <elliott> Jafet: nfo files don't go through cc!
17:02:54 <elliott> :'(
17:03:10 <elliott> This company was created in 2010 by Autistic Savant game programmer JeZ+Lee.
17:03:10 <elliott>
17:03:10 <elliott> JeZ+Lee is most widely recognized for his game "T-Crisis 100%" for Palm® OS PDAs/SmartPhones.
17:03:10 <elliott> Originally offered to E.A.Games® for $4,000, E.A. did not publish it.
17:03:10 <elliott> E.A. then proceeded to sue JeZ+Lee and force him not to distribute the game for a profit.
17:03:10 <elliott> JeZ+Lee thought a while and then published the game as freeware on cnet®'s Download.com site.
17:03:11 <Jafet> Neither do comments
17:03:12 <elliott> The game became a #1 smash hit, with a total of 500,000+ downloads before E.A. sued cnet®.
17:03:14 <elliott> cnet® was unfortunately forced to stop distributing "T-Crisis 100%".
17:03:16 <elliott>
17:03:18 <elliott> JeZ+Lee was devastated.
17:03:21 <elliott> But he continued forward, making more games...
17:03:22 <elliott> what an inspiring story
17:03:37 <elliott> Jafet: they should do
17:03:40 <ais523> "JeZ+Lee" is one person? it sounds like the name that two people would have
17:03:43 <elliott> everyone should have to make their comments valid C
17:03:55 <ais523> or invalid INTERCAL
17:03:56 <calamari> I liked the multiple page scrolling ansi bbs ads back in the day
17:03:58 <elliott> /* FIXME("total hack"); */
17:04:01 <elliott> in a header file somewhere:
17:04:07 <elliott> /* void FIXME(char *s) {} */
17:04:24 <Jafet> No, comments are for profanity
17:04:42 <itidus20> calamari: i like those extra files included with video games.
17:04:47 <Taneb> In this esolang, the epoch of the date type is the Assassination of Julius Ceasar
17:05:02 <Jafet> I guess you could do #define the \ #define fucking
17:05:13 <itidus20> for instance, the original advert of quake was included with commander keen
17:05:50 <elliott> maybe you can enable comment execution
17:05:59 <elliott> /* void FIXME(char *s) { puts("Fixed it yet?"); } */
17:06:09 <elliott> then the generated code is even included at runtime :P
17:06:15 <ais523> DO REINSTATE COMMENTS
17:06:23 <Jafet> PLEASE
17:06:27 <ais523> stop suggesting standard INTERCAL features
17:06:33 <itidus20> elliott: jez+lee includes a souped up car engine with their code
17:06:43 <elliott> ais523: haha
17:06:55 <ais523> (well, CLC- and C-)
17:06:56 <elliott> ais523: maybe I need to start using intercal
17:07:51 <ais523> it's not normally a very /useful/ command, but it's there
17:07:53 <itidus20> i did a search, this is what jez+lee gives you: http://farm4.static.flickr.com/3525/3203910088_031a3b9a7a_z.jpg
17:08:24 <elliott> 02:43:02: <itidus20> if i have..
17:08:24 <elliott> 02:43:12: <itidus20> 6 pebbles
17:08:25 <elliott> 02:43:20: <itidus20> and i am at the beach
17:08:25 <elliott> 02:43:48: <itidus20> can i use lambda calculus to add 1 pebble to 2 pebbles?
17:08:25 <elliott> no. this is a famously unsolvable problem. ask oerjan
17:08:38 <ais523> it's up there with DO ABSTAIN FROM REINSTATING as methods to break your program very quickly
17:09:03 <elliott> 02:45:29: <itidus20> if i have 5 pebbles and 6 apples... and i am sitting at the beach, can I perform the calculation 2 pebbles x 3 pebbles = 6 apples by applying lambda calculus
17:09:04 <elliott> it is illegal to use lambda calculus at the beach, at least from the 90s onwards in most european countries and the USA
17:09:33 <itidus20> you crazy log reading bastards i infer that you have literally no life outside of irc
17:09:33 <Taneb> This program language I'm making is weakly typed but doesn't convert types at all
17:09:48 <elliott> itidus20: it only takes like half an hour a day
17:10:11 <itidus20> :P
17:10:16 <Taneb> '9' + 8 equals 'A' or 65, depending on context
17:10:24 <Jafet> Normal people do other things during that time, like go to the beach to perform lambda calculus.
17:10:28 <itidus20> elliott: ok suppose i asked... did i describe applied calculus there?
17:10:30 <elliott> Jafet: Yes.
17:10:40 <elliott> itidus20: calculus does indeed mean pebble
17:10:52 * itidus20 pulls my hair out
17:11:06 <itidus20> :D
17:11:06 <ais523> elliott: I think the etymology is in the individual stones on abaci, isn't it?
17:11:40 <elliott> 04:26:08: <Gregor> http://codu.org/tmp/drell6-2011-09-13.ogg ACK I'M STILL DOING THESE
17:11:40 <elliott> this is nice
17:11:42 <elliott> ais523: dunno, might be
17:12:12 <oklopol> jkjlhn
17:12:21 <ais523> what's a drell?
17:12:23 <ais523> o
17:12:38 <monqy> http://16bitsoft.com/T-Crisis3AI--HTML5/T-Crisis3AI.html this is great
17:12:41 <elliott> 07:39:02: <monqy> CakeProphet: http://sourcereal.com/
17:12:41 <elliott> help
17:12:55 <monqy> sourcereal.com is also great
17:12:57 <Taneb> itidus20: Lambda calculus is like making a box out of pebbles, and when you put n apples in, it gives you 3n apples
17:13:19 <elliott> monqy: lame, that's not a compilation from SDL/C
17:13:21 <elliott> to js
17:13:27 <Taneb> That would be  λn.3n
17:13:33 <monqy> elliott: the about button is good
17:13:39 <elliott> Taneb: unlikely
17:13:51 <elliott> λn. mult 3 n, given appropriate definitions of mult and 3, yes
17:13:52 <itidus20> Taneb: a black box with stylized input chutes and dispensors?
17:13:54 <oklopol> so this weird rant of itidus20 that's been going on for days, is it about lc only being tc but not quite bf complete?
17:13:55 <ais523> Taneb: now you just need some rot and some string, and it's TC
17:14:01 <oklopol> or what
17:14:03 <elliott> oklopol: no, it's about him not having any idea what LC is
17:14:07 <oklopol> i see
17:14:20 <elliott> oklopol: and mumbling something about how it must only be useful in its "impure" form, which means with primitive functions not defined in LC, because he doesn't understand it
17:14:23 <oklopol> it seems he was of the opinion you need addition or it's just pointless
17:14:31 <oklopol> right
17:14:33 <ais523> if you know what a higher-order function is, lambda calculus is pretty easy to understand
17:14:40 <ais523> although it's a little harder to see why it's useful
17:14:45 <elliott> this is because he's reading random snippets of wikipedia articles, or something, in lieu of actually trying to read something about the lambda calculus
17:14:52 <elliott> hope this helps
17:14:59 <oklopol> kind of how all you want to do is rape parrots, bf is only useful in its impure form where you have the rape a parrot command
17:15:06 <oklopol> *how if
17:15:11 <elliott> (why does this one have its title shown twice, and why does it say "edit conflict" on blank summaries and ask for another captcha?)
17:15:12 <elliott> is this one of us
17:15:30 <Taneb> But the beuaty of lambda calculus is when you've got a pepplebox that when you put a pepplebox in it...
17:15:38 <ais523> it's probably the editfilter extension
17:15:38 <Taneb> GIVES YOU A DIFFERENT PEBBLEBOX
17:15:46 <elliott> ais523: I mean, that editor
17:15:50 <ais523> which can be set to do all sorts of nasty things to what it thinks might be spambots
17:15:50 <Taneb> Or the same pepplebox
17:16:28 <ais523> last I checked, the "instantly ban and desysop" setting was disabled in the configuration, but it's fun to know it exists
17:16:47 <elliott> 11:46:44: <Deewiant> In Markdown, * inside `` doesn't result in emphasis
17:16:47 <elliott> 11:46:51: <Deewiant> And asterisks outside code are rare
17:16:49 <elliott> Deewiant: The problem is more underscores
17:16:53 <itidus20> umm... i have some more LC info to ruminate anyway so it should be ok
17:16:56 <elliott> foo_bar_baz DTWrongT in markdown by default
17:17:01 <elliott> github's markdown derivative fixes that, though
17:17:04 <elliott> ais523: haha
17:17:16 <monqy> i'm tempted to make a language about pebble boxes but it;d probably be so bad
17:17:22 <ais523> (as in, you need server access to undisable it)
17:17:30 <itidus20> well LC is about functions right?
17:17:42 <ais523> so how did Markdown end up as *italics* _bold_ anyway?
17:17:48 <Deewiant> elliott: Underscores outside code are rare
17:17:51 <elliott> 13:42:03: <ais523> elliott (from the logs): if you want to confuse Esolang admins, do what Tekknolagi has been doing, he's been making productive and very useful posts with metadata that makes me think they're spam until I read them
17:17:52 <monqy> itidus20: no it's about beaches and apples and pebbles and boxes
17:17:54 <ais523> more usual is *bold* /italic/ _underlined_
17:17:54 <oklopol> itidus20: yes
17:17:55 <elliott> ais523: gecho is productive and very useful?
17:18:00 <elliott> <ais523> so how did Markdown end up as *italics* _bold_ anyway?
17:18:01 <elliott> _italic_
17:18:09 <Deewiant> _emphasis_
17:18:12 <ais523> oh, the page I was looking at was italicising on **
17:18:13 <elliott> bold is **bold**
17:18:15 <Deewiant> How it's rendered is up to the CSS
17:18:17 <Deewiant> **strong**
17:18:19 <elliott> or __bold__, even, I dunno
17:18:22 <ais523> as in, *italic*
17:18:26 <itidus20> and i think I understand functions in general. y = f(m,x,c) .. int main(void) ... int add(int a, int b).. etc
17:18:26 <ais523> so it must have been some weird CSS involved
17:18:29 <Deewiant> And yes, *_ are interchangable
17:18:34 <elliott> Deewiant: Nobody has ever bought em vs. strong and nobody ever will :P
17:18:35 <ais523> Deewiant: ouch
17:18:41 <monqy> itidus20: _you're doing it wrong_
17:18:45 <elliott> Even the html5 guys admit it's bullshit, I think b and i are now the recommended tags for that
17:18:46 <Deewiant> Well, not interchangeable, they have to match
17:18:49 <oklopol> itidus20: sure sure
17:18:50 <ais523> elliott: I use them if I remember and I'm writing a website rather than commenting on one
17:18:52 <Deewiant> *_x*_ won't work
17:19:03 <oklopol> those are functiony things
17:19:13 <elliott> monqy: let's let oklopol teach
17:19:18 <Deewiant> elliott: Aren't they just renaming em and strong
17:19:19 <monqy> ok
17:19:26 <oklopol> i teach for a living so.
17:19:33 <ais523> having two different syntaxes for one thing that aren't part of two different sets is awful and abhorrent
17:19:36 <itidus20> as far as i know, a function is a set of zero or more parameters which is rewritten into the invoking/calling expression in some way
17:19:36 <elliott> Deewiant: Maybe :P
17:19:43 <ais523> as in, I can understand, say, ''italic'' versus <i>italic</i>
17:19:50 <ais523> but not *italic* versus _italic_
17:19:56 <oklopol> itidus20: for various meanings of what you just said, yes
17:20:05 <Taneb> In lambda calculus, function have to have EXACTLY ONE, unless you do currying
17:20:05 <ais523> elliott: underscores are pretty common in usernames, that isn't programming
17:20:19 <elliott> ais523: I never said foo_bar_baz dtrt
17:20:21 <elliott> I said it dtwrongt
17:20:26 <ais523> well, yes
17:20:32 <itidus20> hmm i see
17:20:42 <Taneb> Currying is a sneaky way of making a 1-input function act like a multi-input function
17:20:45 <oklopol> that's irrelevant
17:20:47 <ais523> Taneb: try not to take that too literally
17:20:51 <oklopol> the currying i mean
17:21:00 <ais523> ICA didn't have any way to take elements from tuples for ages, because they existed
17:21:05 <ais523> *although they existed
17:21:16 <elliott> 14:33:42: <monqy> os designed for image processing? I don't know much about haiku other than I probably wouldn't like it
17:21:21 <oklopol> you can add multivaria
17:21:23 <ais523> in the end, I relented and added the "\(x,y) -> x" syntax that everyone assumed was obvious
17:21:26 <oklopol> ble funcs to lc
17:21:28 <elliott> monqy: I've never heard that before; it's just BeOS' open-source successor
17:21:34 <itidus20> so currying basically means nesting functions without any kind of processing between the nestings
17:21:37 <oklopol> without changing it
17:21:37 <ais523> oklopol: indeed, there's just not much of a point
17:21:46 <oklopol> ais523: nicer to write
17:21:56 <ais523> when currying always works, and if you have tuples they work too
17:22:01 <Taneb> itidus20: Yes
17:22:04 <itidus20> the whole λm.(λx.(λc.( ... )))
17:22:10 <monqy> elliott: If I remembered who said image processing I'd be eyeing him/her suspiciously
17:22:13 <Taneb> That's the ticket, itidus20
17:22:24 <elliott> monqy: DHridiculousamountsofunderscores
17:22:31 <oklopol> well certainly no point in adding functions that can't be curried, i just mean the syntax
17:23:11 <ais523> `greplogs image processing
17:23:12 <HackEgo> ​/home/hackbot/hackbot.hg/multibot_cmds/lib/limits: line 5: exec: greplogs: not found
17:23:13 <itidus20> if you couldn't curry then i can imagine you would run into a great deal of trouble
17:23:22 <Taneb> A GREAT DEAL
17:23:28 <monqy> a great deal
17:23:32 -!- zzo38 has joined.
17:23:34 <Taneb> Currying is practically the whole point of λcalculus
17:23:44 <zzo38> I think the real-time-clock in my computer is slow
17:23:45 <elliott> 15:17:21: <Phantom_Hoover> Admittedly, Linux is a much bigger target than Windows, but not to the extent of making me want to wade through Windows' UI and system.
17:23:48 <elliott> Phantom_Hoover: A much bigger target than eh?
17:23:57 <elliott> ais523: ooh, greplogs sounds useful
17:24:03 <elliott> ais523: I'll have to ask Gregor to install an appropriate symlink to the logs
17:24:03 <oklopol> i don't know what it would mean not to have currying in lc
17:24:14 <monqy> oklopol: a great deal of trouble
17:24:20 <ais523> elliott: I was pretending it existed in the hope someone would implement it
17:24:26 <ais523> (also, I'm used to !grepsrc in #nethack)
17:24:30 <elliott> Gregor: Ping
17:24:37 <zzo38> I do want to grep logs as well
17:24:51 <Gregor> D'aww piffle.
17:25:03 <elliott> Gregor: Can you just install a symlink into HackEgo? :P
17:25:19 <elliott> Just add a symlink from the glogbot esoteric logs directory into /usr/share/logs.
17:25:22 <Gregor> HackEgo is in a chroot.
17:25:22 <elliott> Thx
17:25:25 <oklopol> i mean i don't know what that means, unless you have that \x y -> something shorthand
17:25:29 <elliott> Can't chroots have symlinks to outside them?
17:25:31 <elliott> Pretty sure they can.
17:25:38 <elliott> `url bin/quote
17:25:40 <HackEgo> http://codu.org/projects/hackbot/fshg/index.cgi/raw-file/tip/bin/quote
17:25:59 <oklopol> meant to say i literally don't know what that means, now i just repeated what i said earlier
17:26:28 <Gregor> `ls /var/irclogs
17:26:30 <Taneb> λ calculus without currying would be like SKI combinatory logic without S
17:26:31 <HackEgo> ls: cannot access /var/irclogs: No such file or directory
17:26:33 <Gregor> Hm
17:26:35 <itidus20> perhaps currying is just a nice application of LC
17:26:38 <Gregor> Oh, derr
17:26:39 <elliott> Gregor: Grossest dirname possible :P
17:27:03 <zzo38> Is read-only mirror possible through a device driver or something like that?
17:27:07 <oklopol> what do you mean by currying?
17:27:14 <ais523> elliott: worse than /bin/irclogs?
17:27:20 <ais523> or /lost+found/irclogs?
17:27:21 <elliott> ais523: heh
17:27:24 <Gregor> `ls /var/irclogs
17:27:26 <HackEgo> ​_ai \ _corewars \ _esoteric \ _esoteric-minecraft \ _glogbot \ _matrixofsolidity \ _plof \ _scapegoat \ index.php \ log \ log.css \ log.js \ raw \ stalker.php
17:27:28 <Taneb> I think I may have to go now
17:27:31 <elliott> Gregor: Thanks
17:27:34 -!- Taneb has quit (Quit: TTFN).
17:27:34 <elliott> I'm working on the script now
17:27:51 <zzo38> `ls /var/irclogs/_esoteric
17:27:53 <HackEgo> 2003-01-18-raw.txt \ 2003-01-18.txt \ 2003-01-19-raw.txt \ 2003-01-19.txt \ 2003-01-20-raw.txt \ 2003-01-20.txt \ 2003-01-21-raw.txt \ 2003-01-21.txt \ 2003-01-22-raw.txt \ 2003-01-22.txt \ 2003-01-23-raw.txt \ 2003-01-23.txt \ 2003-01-24-raw.txt \ 2003-01-24.txt \ 2003-01-25-raw.txt \ 2003-01-25.txt \ 2003-01-26-raw.txt
17:27:59 <itidus20> lets forget it for now... i can do some study on it and return again with more ridiculous analgoies
17:28:21 <elliott> `run echo '#!/bin/sh' >bin/log
17:28:22 <HackEgo> No output.
17:28:33 <elliott> `run echo 'egrep -i -- "$1" /var/irclogs/_esoteric/????-??-??.txt | shuf -n 1' >>bin/log
17:28:35 <HackEgo> No output.
17:28:36 <elliott> `run chmod +x bin/log
17:28:38 <HackEgo> No output.
17:28:40 <elliott> `url bin/log
17:28:42 <HackEgo> http://codu.org/projects/hackbot/fshg/index.cgi/raw-file/tip/bin/log
17:28:49 <elliott> `log hello
17:28:53 <zzo38> Gregor: Another thing about the IRC logs: It doesn't log QUIT messages. I think I understand the reason why it doesn't do that in individual channel logs, but it still ought to be cvorrected.
17:28:56 <elliott> That'll probably not terminate :P
17:29:09 <HackEgo> ​/var/irclogs/_esoteric/2009-07-07.txt:04:06:48: <EgoBot> Installed user interpreters: aol austro b1ff bc bct bfbignum brit brooklyn chef chiqrsx9p choo cockney ctcp dc drawl dubya echo ehird fudd google graph gregor hello jethro kraut num ook pansy pirate plot postmodern postmodern_aoler redneck reverse rot13 sadbf sfedeesh
17:29:16 <elliott> ais523: Tada, except ugly filename
17:29:18 <elliott> I'll fix that
17:29:21 <elliott> `run echo '#!/bin/sh' >bin/log
17:29:23 <HackEgo> No output.
17:29:29 <elliott> `run echo 'cd /var/irclogs/_esoteric' >>bin/log
17:29:30 <oklopol> i really don't know what it means in lc context since in the usual syntax, functions just have one arg, currying is just a name for the definition that \x y -> z means \x -> \y -> z. but what else could it mean in lc
17:29:30 <HackEgo> No output.
17:29:39 <elliott> `run echo 'egrep -i -- "$1" ????-??-??.txt | shuf -n 1' >>bin/log
17:29:41 <HackEgo> No output.
17:29:42 <elliott> `run chmod +x log
17:29:44 <HackEgo> chmod: cannot access `log': No such file or directory
17:29:49 <elliott> `run chmod +x bin/log
17:29:50 <HackEgo> No output.
17:29:56 <elliott> `log fuck
17:30:05 <HackEgo> 2010-11-15.txt:22:57:22: <ais523> Brainfuck would be a great asteroid name
17:30:09 <ais523> oklopol: if you have tuples, currying is a function of type ((a, b) -> c) -> (a -> b -> c)
17:30:21 <elliott> `run cat /var/irclogs/_esoteric/????-??-??.txt | shuf -n 1
17:30:30 <HackEgo> shuf: memory exhausted
17:30:30 <oklopol> that means even less in lc context
17:30:32 <elliott> Thought so
17:30:35 <ais523> @t curry
17:30:35 <lambdabot> Maybe you meant: tell thank you thanks thx ticker time todo todo-add todo-delete topic-cons topic-init topic-null topic-snoc topic-tail topic-tell type . ? @ ft v
17:30:40 <elliott> ais523: :t
17:30:42 <ais523> @type curry
17:30:43 <lambdabot> forall a b c. ((a, b) -> c) -> a -> b -> c
17:30:43 <elliott> or @ty
17:30:46 <elliott> but :t is better
17:30:47 <zzo38> Gregor: Are you capable of correcting the problem I ask you about, please?
17:31:23 <oklopol> yeah it certainly means that in haskell, but people also say functions are curried in haskell
17:31:28 <elliott> ais523: Do you know a good data structure for regexp-grepping like a hundred megs of text? :P
17:31:38 <ais523> `run cat `echo /var/irclogs/_esoteric/????-??-??.txt | shuf -n 1` | shuf -n 1
17:31:40 <Jafet> Suffix tree
17:31:47 <HackEgo> shuf: memory exhausted
17:31:50 <elliott> ais523: um, what?
17:31:54 <elliott> oh, I see
17:32:00 <elliott> there's an easier way to do that
17:32:08 <elliott> `run shuf -en 1 /var/irclogs/_esoteric/????-??-??.txt
17:32:10 <Jafet> Well, that depends on whether you're making a data structure for the text or the regexp
17:32:10 <HackEgo> ​/var/irclogs/_esoteric/2006-09-11.txt
17:32:18 <elliott> `run shuf -n 1 `shuf -en 1 /var/irclogs/_esoteric/????-??-??.txt`
17:32:20 <HackEgo> 22:16:42: <oklopol> counterpart number...
17:32:22 <ais523> elliott: oh right, spaces versus newlines
17:32:23 <elliott> `run shuf -n 1 `shuf -en 1 /var/irclogs/_esoteric/????-??-??.txt`
17:32:25 <HackEgo> 19:14:57: <AnMaster> ais523, anyway what is worse in this case (which is horrible php code), is that while pdo is supposed to be an abstraction layer, it is kind of useless when it returns mysql blobs as strings and postgresql bytea as streams
17:32:30 <elliott> ais523: it's not a very accurate shuffler though
17:32:31 <elliott> but ok
17:32:33 <elliott> I'll write it in
17:32:35 <elliott> `url bin/log
17:32:37 <HackEgo> http://codu.org/projects/hackbot/fshg/index.cgi/raw-file/tip/bin/log
17:32:44 <ais523> it's not massively inaccurate
17:32:53 <ais523> probably about as good as Wikipedia's random page thing
17:33:05 <elliott> `log test
17:33:09 <HackEgo> 2011-02-07.txt:19:17:34: <Vorpal> !bfjoust test (>[-].)*20
17:33:45 <elliott> `fetch http://sprunge.us/fdRJ
17:33:46 <HackEgo> 2011-09-13 17:33:46 URL:http://sprunge.us/fdRJ [185] -> "fdRJ" [1]
17:33:51 <elliott> `run mv fdRJ bin/log; chmod +x bin/log
17:33:53 <ais523> elliott: oh, miscellaneous thing that annoys me about darcs: it interprets SIGPIPE as an error
17:33:53 <HackEgo> No output.
17:33:55 <elliott> `log
17:33:57 <HackEgo> 2008-03-29.txt:11:52:14: <AnMaster> heh
17:34:01 <elliott> `log
17:34:02 <HackEgo> 2011-07-14.txt:05:52:36: <elliott> coppro: This is Haskell, we expect multipage blog posts :)
17:34:08 <elliott> `log This is Haskell, we
17:34:11 <HackEgo> 2011-07-14.txt:05:52:36: <elliott> coppro: This is Haskell, we expect multipage blog posts :)
17:34:40 <elliott> `run seq 99
17:34:41 <HackEgo> 1 \ 2 \ 3 \ 4 \ 5 \ 6 \ 7 \ 8 \ 9 \ 10 \ 11 \ 12 \ 13 \ 14 \ 15 \ 16 \ 17 \ 18 \ 19 \ 20 \ 21 \ 22 \ 23 \ 24 \ 25 \ 26 \ 27 \ 28 \ 29 \ 30 \ 31 \ 32 \ 33 \ 34 \ 35 \ 36 \ 37 \ 38 \ 39 \ 40 \ 41 \ 42 \ 43 \ 44 \ 45 \ 46 \ 47 \ 48 \ 49 \ 50 \ 51 \ 52 \ 53 \ 54 \ 55 \ 56 \ 57 \ 58 \ 59 \ 60 \ 61 \ 62 \ 63 \ 64 \ 65 \ 66 \ 67
17:34:46 <elliott> `run seq 99 | paste
17:34:47 <ais523> `log denotational semantics
17:34:48 <HackEgo> http://codu.org/projects/hackbot/fshg/index.cgi/raw-file/tip/paste/paste.27534
17:34:51 <HackEgo> 2010-12-29.txt:23:25:33: <elliott> someone did some denotational semantics thing
17:35:05 <Gregor> <zzo38> Gregor: Are you capable of correcting the problem I ask you about, please? // I am aware of the problem. I am not aware of why it happens, and so not easily able to fix it.
17:35:14 <ais523> `log biscuit
17:35:17 <HackEgo> 2007-05-28.txt:00:52:00: <oerjan> no arms, no biscuit
17:35:26 <monqy> `log `log
17:35:29 <HackEgo> 2011-09-13.txt:17:28:49: <elliott> `log hello
17:35:29 <elliott> `fetch http://sprunge.us/QHHG
17:35:30 <HackEgo> 2011-09-13 17:35:30 URL:http://sprunge.us/QHHG [231] -> "QHHG" [1]
17:35:35 <elliott> monqy: lmao
17:35:37 <monqy> `log `log `log
17:35:40 <HackEgo> 2011-09-13.txt:17:35:26: <monqy> `log `log
17:35:42 <elliott> `run mv QHHG bin/pastelog; chmod +x bin/pastelog
17:35:43 <HackEgo> No output.
17:35:45 <ais523> `log the
17:35:50 <elliott> `run mv bin/pastelog bin/pastelogs
17:35:51 <HackEgo> No output.
17:35:52 <HackEgo> 2010-02-19.txt:18:58:26: <Deewiant> If it weren't then it wouldn't be harder than the short, which wouldn't make much sense. :-P
17:35:56 <elliott> `pastelogs death
17:35:58 <monqy> I wonder if...
17:35:58 <HackEgo> ​/hackenv/bin/pastelogs: line 9: syntax error near unexpected token `fi' \ /hackenv/bin/pastelogs: line 9: ` fi | paste'
17:36:01 <elliott> noooo
17:36:03 <elliott> ok wait
17:36:03 <Gregor> PHAIL
17:36:03 <elliott> everyone stop
17:36:05 <elliott> doing things
17:36:06 <elliott> so i can fix this
17:36:22 <elliott> `fetch http://sprunge.us/AiQB
17:36:23 <HackEgo> 2011-09-13 17:36:23 URL:http://sprunge.us/AiQB [233] -> "AiQB" [1]
17:36:28 <elliott> `run mv AiQB bin/pastelogs; chmod +x bin/pastelogs
17:36:30 <HackEgo> No output.
17:36:32 <elliott> `pastelogs death
17:36:33 <HackEgo> ​/hackenv/bin/pastelogs: line 9: syntax error near unexpected token `fi' \ /hackenv/bin/pastelogs: line 9: ` fi) | paste'
17:36:36 <elliott> dfsd[]lsdf
17:37:08 <elliott> `fetch http://sprunge.us/gRjb
17:37:09 <HackEgo> 2011-09-13 17:37:09 URL:http://sprunge.us/gRjb [236] -> "gRjb" [1]
17:37:14 <elliott> `run mv gRjb bin/pastelogs; chmod +x bin/pastelogs
17:37:16 <HackEgo> No output.
17:37:16 <elliott> `pastelogs death
17:37:18 <HackEgo> ​/hackenv/bin/pastelogs: line 9: syntax error near unexpected token `fi' \ /hackenv/bin/pastelogs: line 9: ` fi) | paste'
17:37:21 <elliott> what
17:37:22 <elliott> i fixed that
17:37:23 <elliott> ???
17:37:31 <elliott> `run mv gRjb bin/pastelogs; chmod +x bin/pastelogs
17:37:33 <HackEgo> mv: cannot stat `gRjb': No such file or directory
17:37:35 <elliott> `pastelogs death
17:37:36 <HackEgo> ​/hackenv/bin/pastelogs: line 9: syntax error near unexpected token `fi' \ /hackenv/bin/pastelogs: line 9: ` fi; } | paste'
17:37:40 <elliott> ;_;
17:37:45 <elliott> oh wait
17:37:49 <elliott> ais523: what terminates a for loop in bash?
17:37:50 <elliott> hint: not fi
17:37:59 <monqy> is it rof
17:38:03 <elliott> it's done
17:38:06 <Gregor> IS IT ELIHW?
17:38:08 <elliott> `fetch http://sprunge.us/cOYQ
17:38:09 <HackEgo> 2011-09-13 17:38:09 URL:http://sprunge.us/cOYQ [233] -> "cOYQ" [1]
17:38:14 <elliott> `run mv cOYQ bin/pastelogs; chmod +x bin/pastelogs
17:38:16 <HackEgo> No output.
17:38:17 <elliott> `pastelogs death
17:38:21 <HackEgo> http://codu.org/projects/hackbot/fshg/index.cgi/raw-file/tip/paste/paste.8704
17:38:27 <elliott> `pastelogs
17:38:36 -!- zzo38 has quit (Remote host closed the connection).
17:38:36 <HackEgo> http://codu.org/projects/hackbot/fshg/index.cgi/raw-file/tip/paste/paste.13247
17:38:51 <elliott> Oh, hmm, it should take a count
17:38:57 <monqy> `log `log `log `log `log `log
17:38:59 <elliott> `url bin/paste
17:39:00 <HackEgo> 2011-09-13.txt:17:38:57: <monqy> `log `log `log `log `log `log
17:39:01 <HackEgo> http://codu.org/projects/hackbot/fshg/index.cgi/raw-file/tip/bin/paste
17:39:15 <elliott> `url bin/quote
17:39:16 <HackEgo> http://codu.org/projects/hackbot/fshg/index.cgi/raw-file/tip/bin/quote
17:39:45 <monqy> `pastelogs looking ghostly
17:39:49 <HackEgo> http://codu.org/projects/hackbot/fshg/index.cgi/raw-file/tip/paste/paste.15915
17:39:51 <elliott> monqy: how many random logs by default?
17:39:53 <elliott> as in
17:39:54 <elliott> random log lines
17:39:56 <elliott> http://codu.org/projects/hackbot/fshg/index.cgi/raw-file/tip/paste/paste.13247 this is twenty
17:40:01 <elliott> i think forty or so
17:40:05 <monqy> ok
17:40:20 <monqy> i like how at the end of your `pastelogs death
17:40:25 <monqy> 2011-09-13.txt:17:35:56: <elliott> `pastelogs death
17:40:25 <monqy> 2011-09-13.txt:17:36:32: <elliott> `pastelogs death
17:40:25 <monqy> 2011-09-13.txt:17:37:16: <elliott> `pastelogs death
17:40:25 <monqy> 2011-09-13.txt:17:37:35: <elliott> `pastelogs death
17:40:27 <monqy> 2011-09-13.txt:17:38:17: <elliott> `pastelogs death
17:40:40 <monqy> it is a nice touch
17:40:42 <elliott> yes
17:40:45 <elliott> `fetch http://sprunge.us/PGWL
17:40:46 <HackEgo> 2011-09-13 17:40:46 URL:http://sprunge.us/PGWL [362] -> "PGWL" [1]
17:40:54 <elliott> `run mv PGWL bin/pastelogs; chmod +x bin/pastelogs
17:40:56 <HackEgo> No output.
17:40:57 <elliott> `pastelogs
17:41:06 <HackEgo> http://codu.org/projects/hackbot/fshg/index.cgi/raw-file/tip/paste/paste.15857
17:41:06 <elliott> Sure is slow :P
17:41:12 <elliott> wtf?
17:41:13 <elliott> that's not forty
17:41:20 <elliott> `run mv PGWL bin/pastelogs; chmod +x bin/pastelogs
17:41:22 <HackEgo> mv: cannot stat `PGWL': No such file or directory
17:41:26 <elliott> `pastelogs
17:41:42 <HackEgo> http://codu.org/projects/hackbot/fshg/index.cgi/raw-file/tip/paste/paste.12648
17:41:43 <elliott> I like how absurd http://codu.org/projects/hackbot/fshg/index.cgi/raw-file/tip/paste/paste.15857 is
17:41:52 <elliott> ais523: there you go
17:42:03 <elliott> although its paste-forty mode is quite thoroughly slow
17:42:05 <elliott> `pastelogs 9
17:42:10 <HackEgo> http://codu.org/projects/hackbot/fshg/index.cgi/raw-file/tip/paste/paste.30821
17:42:12 <ais523> thanks
17:42:16 <elliott> `pastelogs (9)
17:42:18 -!- augur has quit (Remote host closed the connection).
17:42:20 <HackEgo> http://codu.org/projects/hackbot/fshg/index.cgi/raw-file/tip/paste/paste.3504 \ /hackenv/bin/paste: line 14: 281 File size limit exceededcat "$PASTE" > $HACKENV/paste/paste."$PASTENUM"
17:42:28 <elliott> Gregor: Wow :P
17:42:43 <elliott> http://codu.org/projects/hackbot/fshg/index.cgi/raw-file/tip/paste/paste.3504 This is a big file :P
17:42:50 -!- augur has joined.
17:43:00 -!- augur has quit (Read error: Connection reset by peer).
17:43:00 <elliott> `url bin/paste
17:43:02 <HackEgo> http://codu.org/projects/hackbot/fshg/index.cgi/raw-file/tip/bin/paste
17:43:10 <ais523> `logs [aeiou]{20}
17:43:12 <HackEgo> ​/home/hackbot/hackbot.hg/multibot_cmds/lib/limits: line 5: exec: logs: not found
17:43:16 <elliott> `rm $HACKENV/paste/paste.3504
17:43:17 <ais523> `log [aeiou]{20}
17:43:18 <elliott> ais523: log/pastelogs
17:43:18 <HackEgo> rm: cannot remove `$HACKENV/paste/paste.3504': No such file or directory
17:43:22 <HackEgo> 2009-10-19.txt:22:43:23: <oklopol> yeeeeeeeeeeeeeeeeeeeees
17:43:26 <elliott> `run rm $HACKENV/paste/paste.3504
17:43:28 <HackEgo> No output.
17:43:30 <ais523> `log [aeiou]{30}
17:43:32 <Gregor> $HACKENV is pwd, y'know :P
17:43:34 <HackEgo> 2009-04-05.txt:23:14:25: <oklopol> ooooooooooooooooooooooooooooooooooooooo
17:43:41 <ais523> `log [aeiou]{40}
17:43:45 <HackEgo> 2011-02-13.txt:18:25:19: <elliott> AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRGHHHHHHHHHHHHHHHH
17:43:47 <elliott> X-D
17:43:58 <ais523> that's 40? seriously?
17:44:03 <elliott> 2006-11-04.txt:20:01:23: <SevenInchBread> which isn't that terrible... list comprehensions can pretty much do anything lambda could do...
17:44:04 <Gregor> `log [f]{40}
17:44:07 <elliott> CakeProphet: You're stupid in the past
17:44:09 <HackEgo> 2009-02-13.txt:20:38:05: <Slereah2> ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
17:44:16 <Gregor> `log [f]{50}
17:44:20 <HackEgo> 2009-07-06.txt:09:17:31: <EgoBot> fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
17:44:21 <elliott> `log f{7}u{12}
17:44:23 <elliott> I hope that produces 0 results
17:44:25 <HackEgo> 2009-06-04.txt:21:29:04: <nooga> FFFFFFFFFFFFFUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU
17:44:27 <Gregor> EgoBot was so mad.
17:44:29 <elliott> nooga_ is horrible
17:44:33 <elliott> `pastelogs f{7}u{12}
17:44:37 <HackEgo> http://codu.org/projects/hackbot/fshg/index.cgi/raw-file/tip/paste/paste.16592
17:44:38 <elliott> List of horrible people being generated as we speak
17:44:38 <ais523> `log [^f]f{7}u{12}[^u]
17:44:42 <HackEgo> 2011-05-12.txt:20:36:33: <EgoBot> ​http://reddit.com/r/fffffffuuuuuuuuuuuu/
17:44:44 <elliott> haha
17:44:48 <ais523> brilliant
17:44:50 <elliott> http://codu.org/projects/hackbot/fshg/index.cgi/raw-file/tip/paste/paste.16592 is amazing
17:44:55 <elliott> `pastelogs [^f]f{7}u{12}[^u]
17:44:59 <HackEgo> http://codu.org/projects/hackbot/fshg/index.cgi/raw-file/tip/paste/paste.9749
17:45:09 -!- derrik has joined.
17:45:15 <ais523> wow, all the correctly spelt ones have been in reddit URLs
17:45:37 <elliott> Hmm, pastelogs should probably cut it off after a certain limit
17:45:44 <elliott> A limit much smaller than HackEgo's :P
17:45:55 <elliott> Say, three hundred and fifty lines?
17:47:23 <elliott> hmm, what's a decent way to say "head, but append this line if you cut anything off"?
17:47:26 <elliott> I guess the only way is to read one more
17:47:28 <elliott> and see if it's there
17:47:34 <ais523> I wonder if you did all the matches for [^f]f+u+[^u] over the entire internet
17:47:43 <ais523> what the distribution of f-count and u-count would be
17:47:48 <elliott> heh
17:47:52 <ais523> actually, probably you should insist on \bf+u+\b
17:48:53 <Gregor> `log x{12}
17:48:57 <HackEgo> 2011-02-10.txt:19:37:22: <elliott> XXXXXXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXXXXXXX
17:49:10 <monqy> x
17:49:16 <Gregor> `run ls bin/*log*
17:49:18 <HackEgo> bin/etymology \ bin/log \ bin/pastelogs
17:49:25 <Gregor> Etymo-log-y
17:49:45 <Gregor> I wonder if that still works (or ever worked)
17:49:46 <elliott> `fetch http://sprunge.us/DOKJ
17:49:47 <HackEgo> 2011-09-13 17:49:46 URL:http://sprunge.us/DOKJ [600] -> "DOKJ" [1]
17:49:48 <Gregor> `etymology etymology
17:49:50 <HackEgo> ​/hackenv/bin/etymology: line 10: lynx: command not found
17:49:53 <elliott> `run mv DOKJ bin/pastelogs; chmod +x bin/pastelogs
17:49:53 <Gregor> Phail
17:49:54 <HackEgo> No output.
17:49:56 <elliott> `pastelogs 999
17:49:58 <HackEgo> No.
17:50:00 <elliott> `pastelogs .
17:50:03 <HackEgo> http://codu.org/projects/hackbot/fshg/index.cgi/raw-file/tip/paste/paste.2673
17:50:10 <ais523> `log FURscript
17:50:10 <elliott> Excellent.
17:50:14 <HackEgo> 2011-06-21.txt:16:36:32: <elliott_> died of furscript
17:50:14 <ais523> `log Esme
17:50:18 <HackEgo> 2011-06-21.txt:16:35:35: <Sgeo> "The VeeBeeWiki wiki software needs Esme and Perl to run. The software also needs EsmeCSS: and EsoShell: namespaces."
17:50:19 <ais523> what was the other one?
17:50:27 <elliott> ais523: snack?
17:50:30 <Gregor> `url
17:50:31 <HackEgo> http://codu.org/projects/hackbot/fshg/
17:50:36 <elliott> ugh, I just realised something, grepping numbers includes the time
17:50:37 <elliott> but it's ok
17:50:40 <elliott> you can fix it in the regexp itself
17:50:40 <ais523> I don't remember having heard of that
17:50:45 <elliott> and who knows, maybe someone wants to grep for a certain time?
17:50:48 <ais523> but it might be that
17:50:54 <ais523> `log shameful
17:50:58 <HackEgo> 2010-12-15.txt:15:21:27: <elliott> Used the menus to cut/paste that, how shameful.
17:51:02 <Gregor> `log
17:51:04 <HackEgo> 2010-02-05.txt:19:41:28: <oklopol> arbitrarily big, sure, but finite things are usually closed under operations
17:51:07 <elliott> `log '^(\d)\1:\1\1:\1\1:'
17:51:10 <Gregor> So `log just gives a random line :P
17:51:10 <HackEgo> No output.
17:51:12 <ais523> we've basically recreated optbot here
17:51:15 <elliott> Gregor: Yep
17:51:17 <elliott> ais523: heh
17:51:18 <elliott> ais523: but with more context
17:51:21 <Vorpal> `log 19:41
17:51:22 <elliott> oh, there's one more thing to add
17:51:25 <HackEgo> 2011-04-16.txt:19:41:00: <Gregor> elliott: That's not much of a ransom demand since it's my repo :P
17:51:29 <Vorpal> I guess that might be useful
17:51:34 <Vorpal> well if it reported all lines
17:51:36 <Vorpal> it might be
17:51:40 <Vorpal> (with date too)
17:52:11 <ais523> oh, if it's Esolang that's doing edit conflicts on blank summaries, it's almost certainly a Graueism
17:52:12 <elliott> Vorpal: patselogs
17:52:14 <elliott> pastelogs
17:52:20 <ais523> he has some entertaining hand-rolled spam solutions
17:52:26 <Vorpal> elliott: lets get every line said this time of day then
17:52:29 <elliott> `run echo '#!/bin/sh' >bin/logurl
17:52:31 <HackEgo> No output.
17:52:34 <elliott> `run echo 'url "/var/irclogs/_esoteric/$(basename "$1" .txt).txt"' >>bin/logurl
17:52:35 <HackEgo> No output.
17:52:37 <monqy> `log patse
17:52:37 <Vorpal> `log 19:53:..
17:52:37 <elliott> `run chmod +x bin/logurl
17:52:39 <Vorpal> does that work
17:52:41 <HackEgo> 2007-12-08.txt:01:05:35: <iEhird> the patset function willtoo be unique and wspecisl
17:52:42 <HackEgo> No output.
17:52:42 <HackEgo> 2010-12-04.txt:19:53:48: <elliott> Gregor: I think "HELP COMPUTER" was an unfortunate choice of topic.
17:52:45 <elliott> plz stop
17:52:45 <Vorpal> hm
17:52:48 <elliott> im developing
17:52:49 <Vorpal> what sort of regexp?
17:52:52 <elliott> `logurl 2010-12-04.txt
17:52:54 <elliott> Vorpal: egrep
17:52:54 <HackEgo> http://codu.org/projects/hackbot/fshg/index.cgi/raw-file/tip//var/irclogs/_esoteric/2010-12-04.txt
17:52:59 <elliott> Hmm, wait
17:53:06 <elliott> It should just link to the codu.org link :P
17:53:06 <Vorpal> elliott: from all files or just recent logs?
17:53:11 <Vorpal> `pastelog 19:53:..
17:53:12 <elliott> Vorpal: All
17:53:12 <monqy> `log help
17:53:13 <HackEgo> ​/home/hackbot/hackbot.hg/multibot_cmds/lib/limits: line 5: exec: pastelog: not found
17:53:16 <HackEgo> 2009-12-05.txt:21:18:37: <ehird> uorygl: I don't think there's a Unicode character that would help.
17:53:16 <Vorpal> err
17:53:20 <Vorpal> elliott: pastelog?
17:53:29 <Vorpal> `pastelogs 19:53:..
17:53:31 <elliott> Vorpal: Pastelogs.
17:53:33 <HackEgo> http://codu.org/projects/hackbot/fshg/index.cgi/raw-file/tip/paste/paste.32542
17:53:34 <Vorpal> okay
17:53:51 <Vorpal> elliott: not a very active minute this one
17:53:58 <Vorpal> well, last one
17:54:02 <elliott> `fetch http://sprunge.us/QWaF
17:54:03 <HackEgo> 2011-09-13 17:54:03 URL:http://sprunge.us/QWaF [91] -> "QWaF" [1]
17:54:10 <Vorpal> 2005-07-17.txt:23:19:53: <-- also eh
17:54:11 <elliott> `run mv QGaF bin/logurl; chmod +x bin/logurl
17:54:12 <HackEgo> mv: cannot stat `QGaF': No such file or directory
17:54:17 <elliott> Vorpal: What of it
17:54:19 <Vorpal> `pastelogs 19:53:[0-9][0-9]:
17:54:20 <elliott> `run mv QWaF bin/logurl; chmod +x bin/logurl
17:54:22 <HackEgo> No output.
17:54:23 <elliott> Vorpal: FFS
17:54:23 <HackEgo> http://codu.org/projects/hackbot/fshg/index.cgi/raw-file/tip/paste/paste.22489
17:54:29 <elliott> You'll cause merge bullshit
17:54:31 <elliott> `logurl 2009-12-05.txt:21:18:37:
17:54:33 <HackEgo> http://codu.org/logs/log/_esoteric/2009-12-05.txt
17:54:36 -!- derrik has quit (Ping timeout: 252 seconds).
17:54:37 <Vorpal> elliott: trying to perfect my perfect regexp
17:54:39 <elliott> Argh
17:54:47 <elliott> Vorpal: Yes, but don't while I'm busy adding new things, or it'll be a pain
17:54:52 <Vorpal> elliott: how so?
17:54:57 <itidus20> PRINT "Hello world" is a function application ((λf.(λs.(f s))) PRINT) "Hello world")
17:54:58 <Vorpal> elliott: your thing didn't paste did it?
17:55:11 <elliott> It still has to hg merge
17:55:18 <itidus20> hehehe :-s
17:55:18 <elliott> `fetch http://sprunge.us/Sffh
17:55:19 <Vorpal> elliott: no conflict, not an issue
17:55:19 <HackEgo> 2011-09-13 17:55:19 URL:http://sprunge.us/Sffh [101] -> "Sffh" [1]
17:55:23 <elliott> Vorpal: Slows it down
17:55:27 <elliott> `run mv Sffh bin/logurl; chmod +x bin/logurl
17:55:28 <Vorpal> elliott: not much.
17:55:29 <HackEgo> No output.
17:55:31 <elliott> And makes my tests use an old version
17:55:35 <elliott> `logurl 2009-12-05.txt:21:18:37:
17:55:37 <monqy> itidus20: what
17:55:37 <HackEgo> http://codu.org/logs/log/_esoteric/2009-12-05
17:55:41 <Vorpal> elliott: old version? I didn't change the file ffs
17:55:46 <itidus20> monqy: it doesn't make sense?
17:55:50 <elliott> Vorpal: You don't understand how HackEgo works, then
17:55:58 <Vorpal> elliott: tell me.
17:56:01 <elliott> Vorpal: No
17:56:02 <elliott> I'm busy
17:56:06 <elliott> Gregor: Is there a predictable way to go from date to anchor in codu log page?
17:56:09 <Vorpal> elliott: well then I see no reason to not use it
17:56:15 <elliott> What about these "020024" thins
17:56:16 <elliott> things
17:56:17 <elliott> Second-precision?
17:56:19 <elliott> Looks like it
17:56:29 <elliott> Gregor: BTW you violate standards horribly if there's two things said at the same second
17:56:30 <itidus20> monqy: nevermind :D
17:56:39 <monqy> itidus20: ok
17:57:02 <Gregor> elliott: Only if there are two things said by the same person in the same second.
17:57:02 <Vorpal> a counter starting at 0 would be better
17:57:16 <Gregor> elliott: The <a> is timestampname.
17:57:17 <elliott> Gregor: Not quite
17:57:18 <monqy> abc
17:57:22 <elliott> <a name="014900"></a><span class="date">01:49:00:</span><span id="014900" class="name"> -!- </span><span class="message">lifthrasiir has joined #esoteric.</span><br />
17:57:22 <monqy> oops i messed that up
17:57:26 <monqy> ;_;
17:57:26 <monqy> ;_;
17:57:27 <elliott> Gregor: Two /joins in the same second
17:57:30 <monqy> oh no more mess
17:57:40 <monqy> I'll never be cool
17:57:48 <Gregor> elliott: Oh, didn't realize that joins didn't have the name in the <a> >_>
17:57:57 <elliott> Oh well, CBA to do anchor shit right now
17:58:15 <elliott> Does anyone know if egrep does backrefs?
17:58:24 <Vorpal> elliott: pretty sure it doesn't.
17:58:33 <elliott> `url bin/pastelogs
17:58:34 <HackEgo> http://codu.org/projects/hackbot/fshg/index.cgi/raw-file/tip/bin/pastelogs
17:58:36 <Gregor> JUST HAVE TO USE PERL THEN
17:58:43 <Vorpal> pcregrep would
17:58:51 <elliott> pcregrep would also be incredibly slow.
17:58:52 <Vorpal> elliott: anyway "pretty sure" is not definitive
17:59:17 <elliott> `quote [aeiou]{90}
17:59:19 <HackEgo> No output.
17:59:20 <elliott> `log [aeiou]{90}
17:59:23 <HackEgo> 2010-07-04.txt:16:05:45: <oerjan> <oklopol> you're my new idol, oerjan is out <-- WAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH
17:59:29 <Vorpal> elliott: it might do backref
17:59:33 <elliott> `logurl 2010-07-04.txt:16:05:45:
17:59:35 <HackEgo> http://codu.org/logs/log/_esoteric/2010-07-04
17:59:38 <Vorpal> elliott: based on what regex(3) indicates
17:59:40 -!- derrik has joined.
17:59:44 <Vorpal> REG_ESUBREG
17:59:44 <Vorpal> Invalid back reference to a subexpression.
17:59:48 -!- augur has joined.
17:59:52 <Gregor> `log [aieouy]{140}
17:59:55 <Vorpal> pretty sure egrep is same as posix extended regexp
17:59:57 <HackEgo> 2009-09-12.txt:17:51:06: <ehird> eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeet
18:00:00 -!- derrik has left.
18:00:14 <Gregor> elliott: You heard yourself! Now eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeet!
18:00:17 <elliott> ok
18:00:21 <elliott> `logurl 2009-09-12.txt:17:51:06:
18:00:23 <HackEgo> http://codu.org/logs/log/_esoteric/2009-09-12
18:00:39 <elliott> 17:50:35: <Azstal> ehird: The WinForms GUI designer uses absolute positioning for most placement of controls
18:00:39 <elliott> 17:50:42: <Azstal> rheeeeeeeeet!
18:00:40 <elliott> 17:50:53: <Deewiant> Azstal: A program which should run quite quickly infinite-loops; it makes a diagonal line of z pointing upward in negative space and starts moving on it with 101-x
18:00:40 <elliott> 17:51:04: <ehird> rheeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee
18:00:43 <elliott> 17:51:06: <ehird> eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeet
18:00:46 <elliott> 17:51:08: <ehird> aw
18:00:48 <elliott> 17:51:10: <ehird> no multiline support
18:01:18 <ais523> `log (.)\1{100}
18:01:19 <Gregor> `log (fuck\s*){3}
18:01:22 <HackEgo> 2011-01-12.txt:16:14:13: <oklopol> fuckfuckfuckfuckfuckfuckfuck
18:01:28 <Gregor> `log (fuck\S*){3}
18:01:32 <HackEgo> 2011-04-08.txt:19:04:11: <Gregor> elliott: FUCKFUCKFUCKNO
18:01:34 <Gregor> I forget whether \s or \S is whitespace ... :P
18:01:36 <Gregor> Or neither
18:01:42 <elliott> `log (fuck\S*){9}
18:01:45 <HackEgo> 2010-06-01.txt:03:11:20: <alise> fuckfuckfuckfuckfuckfuckfuckfuckfuckfuckfuckfuckfuckfuckfuckfucikfuckfuckfuckfuckfuck
18:01:47 <ais523> \\s is whitespace, \S is not whitespace
18:01:49 <Gregor> `log (fuck\w*){3}
18:01:49 <HackEgo> No output.
18:01:51 <Phantom_Hoover> Just overheard: John Snow pronounces 'trolling' to rhyme with 'lolling'.
18:01:53 <elliott> `pastelogs (fuck\S*){9}
18:01:53 <HackEgo> 2008-02-13.txt:22:56:21: <ehird_> Fuckfuckfuckfuck.
18:01:56 <Gregor> `log (fuck\s*){3}
18:01:56 <HackEgo> http://codu.org/projects/hackbot/fshg/index.cgi/raw-file/tip/paste/paste.32136
18:01:59 <HackEgo> 2010-06-27.txt:22:17:32: <Gregor> OH FUCKFUCKFUCK
18:02:01 <elliott> 2010-06-01.txt:03:11:20: <alise> fuckfuckfuckfuckfuckfuckfuckfuckfuckfuckfuckfuckfuckfuckfuckfucikfuckfuckfuckfuckfuck
18:02:01 <elliott> 2011-09-13.txt:18:01:45: <HackEgo> 2010-06-01.txt:03:11:20: <alise> fuckfuckfuckfuckfuckfuckfuckfuckfuckfuckfuckfuckfuckfuckfuckfucikfuckfuckfuckfuckfuck
18:02:04 <elliott> Good collection.
18:02:07 <elliott> I like how the logs are updated in realtime :P
18:02:08 <ais523> Phantom_Hoover: so do I
18:02:15 <elliott> Phantom_Hoover: I do that?
18:02:16 <ais523> although long o is definitely a valid pronunciation
18:02:22 <elliott> Oh wait.
18:02:22 <Gregor> `log (fuck\s+){3}
18:02:24 <Phantom_Hoover> ais523, with an o as in 'cot'.
18:02:24 <elliott> I use short o.
18:02:26 <HackEgo> No output.
18:02:33 <ais523> I use short o too
18:02:34 <Gregor> `log (fuck *){3}
18:02:35 <elliott> Phantom_Hoover: I say trolling lik ethat
18:02:38 <HackEgo> 2010-08-30.txt:16:15:24: <alise> I can fix that! Fuck fuck fuck fuck fuck fuck fuck fuck fuck
18:02:43 <Gregor> `log (fuck *){25}
18:02:44 <elliott> `pastelosg 2010-08-30.txt:16:15:24:
18:02:46 <HackEgo> ​/home/hackbot/hackbot.hg/multibot_cmds/lib/limits: line 5: exec: pastelosg: not found
18:02:47 <HackEgo> No output.
18:02:47 <elliott> `pastelogs 2010-08-30.txt:16:15:24:
18:02:47 <ais523> the same one as in 'cot', but that's the same as the o in 'lolling' in my accent
18:02:51 <Gregor> `log (fuck *){15}
18:02:51 <HackEgo> http://codu.org/projects/hackbot/fshg/index.cgi/raw-file/tip/paste/paste.23901
18:02:55 <HackEgo> 2011-09-13.txt:18:02:01: <elliott> 2011-09-13.txt:18:01:45: <HackEgo> 2010-06-01.txt:03:11:20: <alise> fuckfuckfuckfuckfuckfuckfuckfuckfuckfuckfuckfuckfuckfuckfuckfucikfuckfuckfuckfuckfuck
18:03:01 <elliott> `url /lib/limits
18:03:02 <HackEgo> http://codu.org/projects/hackbot/fshg/index.cgi/raw-file/tip//lib/limits
18:03:08 <elliott> ;_;
18:03:09 <Gregor> Yeah, probably should grep out HackEgo :P
18:03:09 <elliott> Gregor: What's lib/limits
18:03:15 <elliott> Gregor: Nooooo
18:03:17 <Gregor> elliott: It sets some limits.
18:03:17 <elliott> The recursiveness is the BEST
18:03:33 <elliott> `log I'm a blah de blah always been the blah which haven't you always said which blah is
18:03:37 <HackEgo> 2011-09-13.txt:18:03:33: <elliott> `log I'm a blah de blah always been the blah which haven't you always said which blah is
18:03:45 <elliott> It's the best "not found" message possible.
18:04:16 <monqy> `log
18:04:18 <HackEgo> 2006-06-05.txt:02:10:06: <GregorR> He hates you, eh?
18:04:26 <monqy> good log
18:04:34 <elliott> `log
18:04:36 <HackEgo> 2003-03-25.txt:19:31:11: -!- Aardappel has joined #esoteric.
18:04:44 <elliott> `log
18:04:46 <HackEgo> 2008-03-08.txt:17:49:49: <ehird> http://reddit.com
18:04:49 <Gregor> `log I think I'll just use `log as the world's worst `echo from now on.
18:04:53 <HackEgo> 2011-09-13.txt:18:04:49: <Gregor> `log I think I'll just use `log as the world's worst `echo from now on.
18:04:58 <elliott> `logurl 2008-03-08.txt:17:49:49:
18:04:59 <ais523> elliott: why would you link to Reddit's homepage?
18:05:00 <HackEgo> http://codu.org/logs/log/_esoteric/2008-03-08
18:05:05 <elliott> ais523: let's find out
18:05:07 <Phantom_Hoover> elliott, so wait, you say 'troll' that way too?
18:05:18 <ais523> `log pong
18:05:20 <elliott> 17:45:41: <faxathisia> not seen reddits code
18:05:20 <elliott> 17:46:09: <faxathisia> looks pretty trivial if you know dhtml or whatever they do that stuff with
18:05:21 <elliott> Me.
18:05:22 <HackEgo> 2007-08-13.txt:21:21:37: <ehird`> 3d pong
18:05:23 <elliott> Phantom_Hoover: apparently
18:05:31 <elliott> `log `log
18:05:35 <HackEgo> 2011-09-13.txt:18:04:16: <monqy> `log
18:05:46 <elliott> `log 00:00:00:
18:05:49 <HackEgo> 2008-12-11.txt:00:00:00: <GregorR> I WANT A REPRAP
18:05:56 <elliott> I WANT A REPRAP, he shouted at midnight.
18:06:13 <ais523> `log slightly as his ears,
18:06:16 <HackEgo> 2010-12-13.txt:21:08:15: <elliott> David Slowed, slightly as his ears, entered the room.
18:06:42 <elliott> `log slight as his ears,
18:06:45 <HackEgo> 2011-09-13.txt:18:06:42: <elliott> `log slight as his ears,
18:06:45 <elliott> `log slightly as his ears,
18:06:48 <HackEgo> 2009-06-17.txt:01:09:09: <ehird> David slowed his pace slightly as his ears, washed away in the sea as they were, bobbed along. He was unaware of this event.
18:06:58 <monqy> i love david slowed
18:07:25 <elliott> `log Bjorn
18:07:29 <HackEgo> 2010-07-25.txt:22:08:11: <aliseiphone> Bjorn was deathly afraid of beetles. DEATHLY afraid.
18:07:34 <elliott> me too
18:07:38 <elliott> (not really)
18:07:47 <ais523> oh, I forgot all about the Bjorn thing
18:07:49 <elliott> `log Bjorn
18:07:53 <HackEgo> 2010-07-30.txt:19:36:21: <alise> Frightened, Bjorn said! Aah! Aah! This is what he said
18:07:56 <elliott> me too
18:07:59 <ais523> arguably deservedly, but it was fun
18:08:07 <elliott> `log Bjorn
18:08:10 <HackEgo> 2010-07-25.txt:22:08:11: <aliseiphone> Bjorn was deathly afraid of beetles. DEATHLY afraid.
18:08:14 <elliott> :'(
18:08:16 <elliott> uncreative HackEgo
18:08:27 <monqy> soon enough you'll get `log Bjorn in your `log Bjorn
18:08:34 <monqy> what then????
18:08:38 <ais523> does this go over glogbot's logs? or clog's? or both?
18:08:46 -!- boily has quit (Ping timeout: 252 seconds).
18:08:50 <elliott> ais523: glogbot's
18:08:55 <monqy> `log Bjorn
18:08:55 <elliott> but it's a symlink, so they're updated instantly
18:08:58 <HackEgo> 2011-05-05.txt:00:58:39: <oerjan> (bjorn is not norwegian. or maybe i should check that.)
18:09:04 <elliott> ais523: which is why the "not found" message shows your own line
18:09:07 <elliott> it gets logged before grep gets to it
18:09:15 <elliott> `log Bjorn
18:09:19 <HackEgo> 2010-08-03.txt:00:53:43: <alise> Bjorn would never use a computer he couldn't eat.
18:10:36 <monqy> `log Bjorn
18:10:40 <HackEgo> 2010-07-23.txt:23:56:32: <alise> Often Bjorn would stop and gaze up at the immense trees; or down at the bugs on the floor. Sometimes he squished the bugs while looking at the trees, or the trees while looking at the bugs. He felt considerably more sorrow for the trees. Eventually, a bird flew overhead and the strain of trying
18:11:14 <monqy> I do not understand. I thought this might help, but it did not.
18:11:30 <elliott> yes
18:11:32 <elliott> `log Bjorn
18:11:36 <HackEgo> 2010-07-24.txt:03:53:35: <alise> "Well," said Bjorn, "I'd like to buy the sun back."
18:12:19 <monqy> why are you the only bjorn. that is you, right?
18:12:24 <monqy> `log Bjorn
18:12:27 <HackEgo> 2011-09-13.txt:18:12:24: <monqy> `log Bjorn
18:12:28 <elliott> because im, auhtor, of bjorn,
18:12:31 <monqy> oh no
18:12:32 <elliott> :DDD
18:12:35 <elliott> `log Bjorn
18:12:38 <HackEgo> 2010-07-26.txt:02:36:09: <alise> to bjorn's reply, the young man devised
18:12:44 <elliott> `log Bjorn
18:12:47 <HackEgo> 2010-07-24.txt:03:52:04: <alise> As Bjorn woke the next morning, he was, much to his chagrin, reminded of his exploits-to-be by his least favourite region of the brain, which was whatever part stored memories; Bjorn wasn't really sure how the brain operated, apart from that he wished it wouldn't do so in such an efficient and
18:12:50 <ais523> alise was better at bjorning than anyone else
18:13:06 <Phantom_Hoover> Ah, Bjorn.
18:13:18 <elliott> `pastelogs Bjorn
18:13:22 <HackEgo> http://codu.org/projects/hackbot/fshg/index.cgi/raw-file/tip/paste/paste.32040
18:13:39 <elliott> "—"
18:13:46 <elliott> Gregor: send correct headers with paste files plz
18:13:47 <monqy> 2007-07-02.txt:09:30:40: <toBogE> cout << "C++ is a programming language created by Bjorn Stroustroup which extends C. See C."
18:13:48 <elliott> (assume utf :P)
18:14:03 <elliott> 2010-07-22.txt:23:14:05: <aliseiphone> He walked towards the Boothy Booth, the premiere showcase for all fans of boothes, and in a fit of naïvety attempted to descend into the miniature copy of the Boothy Booth contained inside it. Alas, he tripped over it and flattened its containing tent just as a gigantic Bjorn flattened Boothy Booth.
18:14:03 <elliott> this would be a good dream to have
18:14:53 <elliott> I like how
18:14:55 <elliott> half of those pasted logs
18:14:57 <elliott> are us today
18:15:06 <monqy> bjorn
18:15:20 <ais523> Stroustroup's first name isn't Bjorn
18:15:27 <monqy> ais523: that's part of why it's funny
18:15:39 <monqy> maybe I'm just really tired and everything is funny
18:16:05 <monqy> in the past few minutes I tried remembering what my dream last night was, but instead remembered I didn't sleep
18:16:18 <ais523> why is there no way to specify encoding as utf-8-or-maybe-latin-1?
18:16:20 <elliott> `addquote <monqy> in the past few minutes I tried remembering what my dream last night was, but instead remembered I didn't sleep
18:16:22 <HackEgo> 658) <monqy> in the past few minutes I tried remembering what my dream last night was, but instead remembered I didn't sleep
18:16:26 <ais523> given that's the encoding that most of the world is in nowadays
18:16:31 <elliott> `log `quote
18:16:34 <HackEgo> 2011-08-13.txt:01:41:11: <Lymee> `quotes open sores
18:16:56 <ais523> `log outercal
18:16:59 <HackEgo> 2011-09-13.txt:18:16:56: <ais523> `log outercal
18:17:15 <monqy> outercal
18:17:17 <elliott> I like how you can't be sure there's no results
18:17:20 <elliott> because it can pick that one randomly anyway
18:17:29 <elliott> "By the same logic, the color white was chosen because it represents a hex number with the largest value in a 24-bit red green blue (RGB) color space: 0xFFFFFF, so programmers worldwide wear white in celebration.[citation needed]"
18:19:02 <elliott> `log esolangs\.org/
18:19:05 <HackEgo> 2011-04-18.txt:04:52:56: <elliott> oerjan: i invite you to take a look at http://esolangs.org/w/index.php?title=User:Ehird&action=edit and imagine how much I yearned for the ability to use div and span during its creation
18:19:20 <elliott> `log esolangs\.org/
18:19:24 <HackEgo> 2009-03-03.txt:18:37:54: * ais523 looks at http://esolangs.org/wiki/Talk:Esme for old time's sake
18:19:44 * elliott listens to Talk Esme Baby again... an art
18:21:34 <Phantom_Hoover> What's that?
18:21:43 <monqy> hwo could you not know
18:21:59 <Phantom_Hoover> Is it another of elliott's dramatic readings.
18:22:11 <elliott> Phantom_Hoover: It was the final one.
18:22:17 <elliott> Everything about its production was pure accidental perfection.
18:22:28 <Phantom_Hoover> I must see.
18:22:31 <elliott> I'll have to upload it, yeah.
18:22:33 <Phantom_Hoover> Or hear, as the case may be.
18:22:34 <elliott> You can't really go through life without hearing this.
18:22:51 <elliott> Uploading.
18:23:29 <ais523> it's a dramatic reading of Talk:Esme?
18:24:02 <elliott> ais523: Well, that was the _idea_.
18:24:20 -!- boily has joined.
18:24:27 <elliott> I decided to throw caution to the wind and do it to one of GarageBand's awful precreated backing track things, where you basically select one instrument and play it over the aforementioned terrible backing track.
18:24:35 <elliott> Specifically, the funk one.
18:24:45 <elliott> But the funk... was too much.
18:25:01 <elliott> So I ended up not getting to the actual text until there was about thirty seconds to go, so it became a trainwreck.
18:25:05 <elliott> Then I realised that it thought I was recording a guitar.
18:25:11 <elliott> And applied bad effects appropriately.
18:25:15 <elliott> So you can't hear a damn thing.
18:25:25 <elliott> It's about as much of a disaster as Esme is.
18:25:26 <ais523> to be fair, this is Esme we're talking about
18:26:15 <Gregor> Oh GarageBand.
18:26:18 <Gregor> Why do people use it?
18:26:23 <Gregor> Worse yet, why does it exist?
18:26:29 <monqy> I remember being reminded of songsmith
18:26:31 <Gregor> And why hasn't its creator been raped to death?
18:26:32 <elliott> Gregor: Dude, it produced ART that day.
18:26:54 <monqy> songsmith commercial is an art. I imagine songsmith has made other art as well.
18:27:11 <monqy> or is it not considered a commercial
18:27:21 <elliott> Really GarageBand is not that bad in typical use... it's just a really ridiculously stripped-down Logic.
18:27:29 <elliott> But that Magic GarageBand thing is amazing :P
18:28:00 <Phantom_Hoover> elliott, this is nearly as good as Sgeo's karaoke.
18:28:53 <elliott> Phantom_Hoover: I'm just glad Kurt Gödel agreed to collaborate.
18:29:13 <monqy> I remember Sgeo's karaoke.
18:29:35 <monqy> `log sgeo
18:29:39 <HackEgo> 2011-06-21.txt:04:06:40: <Sgeo> I think 1/100 is higher than surviving antimatter in a degenerate way
18:29:50 <monqy> `log itidus20
18:29:54 <HackEgo> 2011-08-10.txt:21:33:40: <itidus20> they're FAST
18:30:12 <monqy> `log zzo
18:30:14 <itidus20> hehehe
18:30:16 <HackEgo> 2011-07-24.txt:07:22:30: <zzo38> I hope someone can understand my register optimization algorithm problem that I have had. And if there is other channel that they know this kinds of things better.
18:30:31 <elliott> `log verily|betwixt
18:30:36 <HackEgo> 2009-02-21.txt:00:51:32: <ehird> verily
18:30:41 <monqy> verily
18:30:43 <elliott> `log betwixt
18:30:47 <HackEgo> 2010-06-24.txt:23:01:53: <ais523> `define betwixt
18:31:06 <elliott> heh
18:31:07 <elliott> `log betwixt
18:31:10 <HackEgo> 2010-06-24.txt:23:01:53: <ais523> `define betwixt
18:31:14 <itidus20> `log channel
18:31:16 <monqy> betwixt
18:31:16 <elliott> ais523...
18:31:17 <elliott> `log betwixt
18:31:18 <HackEgo> 2010-01-10.txt:18:04:04: <ehird> This channel is now: The official poop channel 2010
18:31:21 <HackEgo> 2011-09-13.txt:18:31:10: <HackEgo> 2010-06-24.txt:23:01:53: <ais523> `define betwixt
18:31:28 <elliott> `pastelogs betwixt
18:31:32 <HackEgo> http://codu.org/projects/hackbot/fshg/index.cgi/raw-file/tip/paste/paste.2946
18:33:30 <itidus20> `log log
18:33:35 <HackEgo> 2010-08-15.txt:05:22:03: <ais523> coppro: BlogNomic inspired you?
18:33:43 <elliott> `log nomic
18:33:43 -!- derrik has joined.
18:33:46 <HackEgo> 2007-11-26.txt:02:45:17: <bsmntbombdood> life is a nomic!
18:33:48 <elliott> ais523: this is so much fun what have you done
18:33:51 <Vorpal> elliott: does it pick first match or random one?
18:33:55 <elliott> Vorpal: random
18:33:56 <elliott> `log nomic
18:34:00 <HackEgo> 2011-03-06.txt:23:04:18: <elliott> copumpkin: "Basically this asshat pulled that number out of his butt. I used to work in at a library and books easily last way more than 26 borrowings (e.g., bestellers get borrowed over 20 times in just their first year). A library couldn't economically survive if books didn't last more than
18:34:15 <Vorpal> night
18:34:47 -!- Taneb has joined.
18:34:55 <elliott> `log hexham
18:34:58 <HackEgo> 2010-12-18.txt:20:50:50: <Phantom_Hoover> elliott, I DETEST YOU AND I AM ALREADY ON A TRAIN TO HEXHAM TO BEAT YOU TO DEATH WITH A LAMP POST.
18:35:07 <Taneb> Hello
18:35:10 -!- derrik has left.
18:35:16 <olsner> `log olsner
18:35:19 <Phantom_Hoover> Taneb has 'Hexham' on ping.
18:35:20 <HackEgo> 2009-02-23.txt:19:15:07: <ehird> hi olsner
18:35:26 <itidus20> `log book
18:35:30 <HackEgo> 2008-12-22.txt:15:50:34: <ehird> I like how it takes 8 books to get to recursion
18:35:31 <Phantom_Hoover> `log itidus
18:35:31 <elliott> `log hexham
18:35:34 <HackEgo> 2011-08-10.txt:16:05:19: <itidus20> but it doesn't have to be that way
18:35:35 <HackEgo> 2011-09-12.txt:19:48:25: <oklopol> i could even fly to hexham but i guess that'd defeat the purpose
18:35:45 <Phantom_Hoover> itidus20, inspirational words.
18:35:50 <elliott> `log hexham
18:35:54 <HackEgo> 2011-07-16.txt:22:00:56: <oklofok> well i kind of live in hexham too
18:35:54 <itidus20> thanks
18:36:09 <Phantom_Hoover> `log inspirational
18:36:13 <HackEgo> 2009-03-10.txt:14:18:38: <fizzie> If you want to see an inspirational piece of Befunge, our local irc-bot, fungot, is written in it: http://zem.fi/~fis/fungot.b98.txt
18:36:18 <Phantom_Hoover> `log fungot
18:36:22 <HackEgo> 2011-02-25.txt:09:30:57: <fungot> (:(()~(^)~(:)~(:)~(^)~()~^S^(^)~^^^)(^())~(^(~))~^^()~^^S)# ...out of stack!
18:36:27 <Taneb> Are oklofok and oklopol the same person?
18:36:31 <Phantom_Hoover> Taneb, no.
18:36:40 <Phantom_Hoover> oklofok is oklopol's evil twin.
18:37:03 <itidus20> `log twin
18:37:07 <HackEgo> 2010-03-04.txt:05:30:20: <augur> the only case where the twin paradox can "vanish" is in a case where it cant even happen!
18:37:10 <elliott> `logurl 2009-03-10.txt:14:18:38:
18:37:12 <HackEgo> http://codu.org/logs/log/_esoteric/2009-03-10
18:37:13 <elliott> `logurl 2011-07-16.txt:22:00:56:
18:37:15 <HackEgo> http://codu.org/logs/log/_esoteric/2011-07-16
18:37:44 <Phantom_Hoover> `log elliott
18:37:49 <HackEgo> 2011-05-13.txt:20:26:04: <elliott> No it isn't.
18:37:54 <Phantom_Hoover> Yes it is.
18:37:56 <ais523> heh, my reaction to that `log fungot was "who put Underload in fungot's markoviser?"
18:38:09 <Phantom_Hoover> `log ais523
18:38:14 <HackEgo> 2011-02-09.txt:21:20:35: -!- ais523 has quit (Read error: Connection reset by peer).
18:38:28 <Phantom_Hoover> There's something terribly amusing about that.
18:38:29 <Phantom_Hoover> `log ais523
18:38:34 <HackEgo> 2010-10-07.txt:20:32:34: <ais523> NOP
18:38:36 <Phantom_Hoover> `log kittens
18:38:40 <HackEgo> 2009-05-14.txt:00:04:24: <ehird> A kindle of kittens.
18:38:41 <elliott> omg kittens
18:38:44 <elliott> me kittens
18:38:46 <Phantom_Hoover> `log rabbits
18:38:49 <HackEgo> 2010-11-08.txt:19:46:10: <fizzie> "Domestic cats are similar in size to the other members of the genus Felis, typically weighing between 4 kilograms (8 lb 13 oz) and 5 kilograms (11 lb 0 oz). -- The smallest adult cat ever officially recorded weighed around 1.36 kilograms (3 lb)." -- "[Rabbits'] size can range anywhere from 20 cm
18:38:53 <ais523> `log zruty
18:38:57 <HackEgo> 2011-09-13.txt:18:38:53: <ais523> `log zruty
18:39:11 <Phantom_Hoover> Perfect.
18:39:12 <elliott> zruty
18:39:23 <Phantom_Hoover> `log is now unnecessary; remove it.
18:39:23 <elliott> Phantom_Hoover: that was from "is cat or rabbit bigger"
18:39:26 <HackEgo> 2011-09-13.txt:18:39:23: <Phantom_Hoover> `log is now unnecessary; remove it.
18:39:35 <Phantom_Hoover> Ah.
18:39:37 <elliott> Phantom_Hoover: after what, fizzie's cat/rabbit line?
18:39:38 <elliott> or the recursion
18:39:43 <elliott> because the recursion happens all the time :P
18:39:47 <elliott> `logurl 2010-11-08.txt:19:46:10:
18:39:48 <HackEgo> http://codu.org/logs/log/_esoteric/2010-11-08
18:39:55 <elliott> so many logs to read, so little time
18:39:56 <Phantom_Hoover> `log rabbit
18:40:00 <HackEgo> 2010-11-08.txt:19:44:11: <ais523> Gregor: cats are larger than rabbits?
18:40:10 <ais523> oh dear, I started it?
18:40:11 <ais523> `log meme
18:40:15 <HackEgo> 2004-10-22.txt:15:51:07: -!- cmeme has quit (Broken pipe).
18:40:18 <Phantom_Hoover> `log PSOX
18:40:20 <monqy> who started what
18:40:22 <HackEgo> 2008-01-02.txt:19:36:17: * Sgeo is working on PSOX
18:40:24 <ais523> `log feather
18:40:28 <HackEgo> 2010-06-21.txt:21:50:31: <AnMaster> coppro, heh I realised why ais is holding back feather. So he can be the world's leading expert on it
18:40:45 <ais523> I was wondering whether I'd get description of feather the language or reference to feather the injoke
18:40:54 <itidus20> `log feather
18:40:57 <HackEgo> 2008-06-30.txt:23:32:44: <ais523> tusho: heh, you could do that in Feather
18:41:11 <elliott> `log feather
18:41:14 <HackEgo> 2011-09-06.txt:21:47:16: <monqy> I mentioned feather in reaction tot he "retroactive self-modification" feature a few days ago and taneb said his approach to it was actually pretty simple?? I forget/dunno how it will work though
18:41:31 -!- fungot has joined.
18:41:32 <elliott> 19:43:12: <ais523> trying to remember elephant > camel > horse > dog > cat > rabbit is the hardest part of the game
18:41:32 <elliott> 19:43:41: <Gregor> ais523: Really? "Bigger-than" over mammals is too hard for you?
18:41:33 <elliott> 19:44:11: <ais523> Gregor: cats are larger than rabbits?
18:41:40 <Taneb> Simple but memory-usey-up-a-lot-of
18:41:45 <elliott> hi fungot
18:41:46 <fungot> elliott: what do you mean by " taxonomic"? :) i'm learning scheme and hopefully soon re-establishing some cs cred so that i hypothesize that the oss world will have a server-side for sharing feather images, though
18:41:47 <Taneb> Intensive
18:41:57 <monqy> feather
18:42:05 <Taneb> Intensive feather
18:42:28 <ais523> `log international hub for
18:42:32 <HackEgo> 2009-05-07.txt:21:57:58: <GregorR> 05.10.10:19:09:35 --- topic: set to '#esoteric, the international hub for esoteric programming language design and deployment - #esoteric is not associated with the joke language Perl, please visit www.perl.org - logs: http://tunes.org/~nef/logs/esoteric/ or http://meme.b9.com/cdates.html?channel=esoteric'
18:42:55 <elliott> 19:54:29: <elliott> I said |{x : x in rabbits, size(x) > (sum x in cats : size(x)) / |cats|}| > |{x : x in cats, size(x) > (sum x in dogs : size(x)) / |dogs|}|.
18:42:55 <monqy> `log perl
18:42:56 <elliott> help
18:42:59 <HackEgo> 2009-12-05.txt:14:35:51: <ehird> wat, perl's foreach doesn't let you get the indices too?
18:42:59 <ais523> we haven't had the design and deployment topic for ages
18:43:16 <itidus20> `log hlep
18:43:20 <HackEgo> 2011-08-13.txt:01:27:13: <monqy> hlep
18:43:22 <ais523> it alternates keys and values if you foreach a hash
18:43:29 <ais523> normally, you foreach the keys or values of the hash specifically
18:43:40 <elliott> ais523: thanks, my script was blocked on that
18:43:48 * elliott dusts off the three-year-old emacs process
18:43:55 <elliott> TIME TO FINISH THIS THING
18:44:01 <ais523> hey, I've answered really old questions before now
18:44:12 <ais523> I've posted in multiple-year-old threads on a.l.i before, IIRC
18:44:13 <elliott> 20:00:08: <fizzie> Also if I write ungrammatically "volume of cat", it goes "Input interpretation: Caterpillar | volume" and the result is "2.981 million shares".
18:44:14 <elliott> :D
18:44:17 <ais523> `log alt.lang.intercal
18:44:20 <HackEgo> 2006-07-26.txt:21:39:04: <Razor-X> alt.lang.intercal.
18:44:27 <ais523> `log alt.lang.intercal
18:44:31 <HackEgo> 2009-11-17.txt:17:15:17: <AnMaster> ais523, your recent post on alt.lang.intercal looks messed up to me
18:44:40 <ais523> `log alt.lang.intercal
18:44:43 <HackEgo> 2008-02-27.txt:20:55:19: <ais523> and don't you mean alt.lang.intercal
18:44:51 <ais523> `log alt.lang.intercal
18:44:54 <HackEgo> 2008-04-01.txt:18:48:29: <ehird> ais523: ... http://groups.google.com/group/alt.lang.intercal/browse_thread/thread/5a0696843eeeb5b6/65b0d4a066a4c544#65b0d4a066a4c544
18:44:57 <Taneb> `log numberwang
18:45:01 <HackEgo> 2011-07-14.txt:09:23:27: <Taneb> Okay, now there's three esolangs called Numberwang
18:45:02 <elliott> `log alt[^.]lang[^.]intercal
18:45:06 <HackEgo> No output.
18:45:10 <elliott> aww
18:45:12 -!- CakeProphet has quit (Ping timeout: 240 seconds).
18:45:19 <elliott> Gregor: How much CPU is HackEgo using :P
18:45:26 <monqy> `log perl
18:45:31 <HackEgo> 2010-06-26.txt:00:26:26: <alise> cpressey: Just use perl -n.
18:45:34 <monqy> `log perl
18:45:38 <HackEgo> 2007-07-09.txt:03:19:16: <suifur> Sukoshi: though done properly, I think the bytecode compiler could work well
18:45:39 <itidus20> `log alt.lang.
18:45:43 <calamari> can it find the earliest mention rather than a random mention?
18:45:43 <HackEgo> 2007-04-01.txt:16:17:35: <Pikhq> How's about posting it in alt.lang.intercal?
18:45:59 <Taneb> `log hyperbolic
18:46:03 <HackEgo> 2009-04-28.txt:17:44:24: <Deewiant> In hyperbolic they're less than 180
18:46:05 <elliott> calamari: with pastequotes
18:46:08 <elliott> `pastequotes rare
18:46:10 <HackEgo> http://codu.org/projects/hackbot/fshg/index.cgi/raw-file/tip/paste/paste.6794
18:46:13 <ais523> calamari: it wouldn't be a hard modification to the script to do that
18:46:21 <ais523> and I think pastequotes goes in chronological order as it is
18:46:27 <elliott> hmm, does that paste load for anyone?
18:46:32 <elliott> `pastequotes rare
18:46:34 <HackEgo> http://codu.org/projects/hackbot/fshg/index.cgi/raw-file/tip/paste/paste.17697
18:46:40 <calamari> didn't seem to work for me
18:46:43 <monqy> its broke help
18:46:46 <Taneb> Nothing
18:46:46 <elliott> hmm
18:46:52 <Gregor> elliott: At present, none.
18:46:59 <elliott> Gregor: What did you do :P
18:47:01 <elliott> `pastequote not
18:47:02 <Gregor> Nothing
18:47:03 <HackEgo> ​/home/hackbot/hackbot.hg/multibot_cmds/lib/limits: line 5: exec: pastequote: not found
18:47:03 <elliott> oh
18:47:04 <elliott> guys
18:47:05 <elliott> pastequotes
18:47:07 <elliott> not pastelogs :P
18:47:09 <elliott> `pastelogs rare
18:47:13 <HackEgo> http://codu.org/projects/hackbot/fshg/index.cgi/raw-file/tip/paste/paste.20848
18:47:14 <itidus20> lol
18:47:23 <itidus20> why isn't the pastequotes implemented?
18:47:30 <monqy> pastequotes has a nicer ring to it
18:47:32 <elliott> it is
18:47:36 <elliott> but nobody's addquoted rare
18:47:38 <Taneb> It is something else
18:47:42 <itidus20> ok fine
18:47:50 <Taneb> `pastequotes
18:47:52 <HackEgo> http://codu.org/projects/hackbot/fshg/index.cgi/raw-file/tip/paste/paste.20365
18:48:04 <calamari> `pastelogs calamari
18:48:07 <HackEgo> http://codu.org/projects/hackbot/fshg/index.cgi/raw-file/tip/paste/paste.12613
18:48:42 <itidus20> `pastelogs ork
18:48:45 <HackEgo> http://codu.org/projects/hackbot/fshg/index.cgi/raw-file/tip/paste/paste.29876
18:49:20 <monqy> ork
18:49:30 <Taneb> I'm interested in the context for quote 645
18:49:32 <itidus20> i didnt think that pastelog out very well
18:49:37 <monqy> `quote 645
18:49:39 <HackEgo> 645) <ais523> oh no, I think we've managed to mix three metaphors in a way that actually makes sense
18:50:08 -!- nooga_ has quit (Ping timeout: 260 seconds).
18:50:13 <elliott> `pastelogs \bork\b
18:50:16 <HackEgo> http://codu.org/projects/hackbot/fshg/index.cgi/raw-file/tip/paste/paste.22066
18:50:40 <ais523> Taneb: elliott used "ratify" meaning "adopt a standard", I deliberately misinterpreted it in the Agoran meaning of "retroactively change", and then obviously, someone mentioned Feather
18:50:49 <itidus20> thanks elliott, thats a bit closer
18:51:03 <Taneb> That's dissapointing
18:51:04 <elliott> itidus20: it's exactly close :P assuming you wanted "ork" as a word
18:51:53 <itidus20> `pastelogs feather
18:51:57 <HackEgo> http://codu.org/projects/hackbot/fshg/index.cgi/raw-file/tip/paste/paste.18799
18:52:11 <calamari> are the old mailing list archives still available?
18:53:58 <elliott> i think so
18:54:08 <elliott> http://esolangs.org/wiki/Esolang:Community_Portal#Mailing_lists
18:54:48 <elliott> hehehe my message is in http://esoteric.sange.fi/archive/current
18:55:16 <Taneb> How does Feather avert stable time loops
18:55:22 <elliott> Taneb: ask ais523 :P
18:55:32 <Taneb> I was asking ais523
18:55:35 -!- augur has quit (Remote host closed the connection).
18:55:39 <Taneb> I just didn't say his name
18:55:52 <ais523> Taneb: it doesn't, you get an infinite loop if you try
18:55:58 <Taneb> Hmm...
18:56:05 <Taneb> More use for my Feather derivative
18:56:07 <ais523> the standard library is expected to contain a bunch of functions designed specifically to avoid stable time loops
18:56:08 <Taneb> McGraw
18:56:25 <Taneb> Maybe McGraw's a library
18:56:36 <elliott> Taneb: I was pinging ais523 for you
18:57:18 <Taneb> elliott: With a Feather IRC server, that doesn't have to be true
18:57:30 <elliott> 2003-09-08.txt:13:17:45: <Doppelganger> The Resin Feathered is by for the largesse country of the world in are by spinning 11 tone zoans in but Erebia and As. Rise swoors brother what they flummoxed country (starting in to north and in contrescene order: Near, Finlandia, Extend, Latvia, Bowler's, Letdown (via Killmaimthem Obligation, Plenty (idem), Ukraine, Grace, Acorpolous, Kissykissy, Come, Monosyllables and Nerthe Krow.
18:57:30 <elliott> 2003-09-08.txt:13:27:41: <Doppelganger> Be the lied 1980s, Spit leader Michael Gravys invalid reverend such as gilligan's and proceding, but though messrs were unbluffingly the propennies the collapsed of to Spat Unium after a flat mielodorous cup i'm 1991. Two Rossum Soft Federals' Repopulate declared its independent on Acquiester 24 of that your as to Reign Feathered. Reach, as the Soft Unionist's primewer successor stood, his snack sazd the mo
18:57:30 <elliott> untunmighty it's globelet
18:57:32 <elliott> what
18:57:49 <elliott> 2008-05-09.txt:13:53:37: <ais523> I'm thinking of calling it Feather, because it's so lightweight compared to most Smalltalks
18:57:53 <elliott> ais523: the day of reckoning
18:58:04 <Taneb> It's a smallsmalltalk
18:58:07 <elliott> every day since has been a dream
18:58:13 <elliott> the AI that secretly run things is simulating this universe
18:58:17 <elliott> to find out if ais523's creation of feather
18:58:21 <elliott> will lead to an apocalypse
18:58:34 <elliott> if it does, the idea will be erased from his mind
18:58:45 <ais523> retroactively!
18:58:47 <elliott> :D
18:58:53 <ais523> being lightweight isn't just a good idea, but turns out to be inherently required for Feather to work properly
18:59:07 <elliott> ais523: it causes the apocalypse by retroactively creating the AI that runs everything
18:59:17 <elliott> which then destroys the universe by ending the simulation that it turns out to have been retroactively running
18:59:30 <elliott> thus constituting an apocalypse
18:59:34 <elliott> so the idea is then removed from your brain
18:59:36 <Taneb> Will retoractivity be to the start of the program or a point defined within the program?
18:59:38 <elliott> and the AI stops existing
18:59:39 <elliott> retroactively
18:59:47 <ais523> elliott: I think it's probably even possible to retroactively modify the infinite universe such that it becomes finite
18:59:52 <elliott> Taneb: start of time, or so I gather
18:59:53 <ais523> as in, so that it had a start
19:00:04 -!- augur has joined.
19:00:06 <ais523> Taneb: you retroactively change objects at the moment they were created
19:00:19 <ais523> this includes the interpreter that interprets your program, and the interpreter that interprets /that/, etc
19:00:23 <elliott> does anyone remember when rodgerthegreat got really angry demanding that feather couldn't possibly work?
19:00:24 <elliott> i do :Dddd
19:00:26 <ais523> also, the program itself that's fed to the interp
19:00:29 <ais523> I don't
19:01:45 <itidus20> `log rodgerthegreat
19:01:49 <HackEgo> 2008-01-23.txt:05:38:27: <RodgerTheGreat> or, as I like to say, memetic viruses
19:01:49 <monqy> i remember logreading it
19:03:44 <Taneb> I don't remember saying 598
19:03:50 <monqy> `quote 598
19:03:51 <Taneb> Well, I do, but I wish I didn't
19:03:52 <HackEgo> 598) <Taneb> I think it's fizzie against everyone atm <Taneb> AND EVERYONE IS WINNING <Taneb> EXCEPT FIZZIE
19:07:32 * Sgeo celebrates Programmers' Day
19:07:40 <monqy> hi
19:07:43 <Sgeo> `log Sgeo
19:07:47 <Sgeo> hi
19:07:47 <HackEgo> 2011-07-31.txt:06:24:55: <Sgeo> Usually
19:07:52 <monqy> usually
19:07:59 <Sgeo> ..........that's it, I'm officially boring.
19:08:01 <ais523> elliott: oh, Oracle v. Google is getting amusing
19:08:19 <ais523> Oracle decided that they thought that the Google person in charge of Android wasn't senior enough to be involved in mediation
19:08:26 <ais523> even though he'd been involved in all the settlements so far
19:08:40 <ais523> and the judge's reaction was to require the CEOs of both companies to be there
19:08:46 <elliott> haha
19:08:57 <ais523> I'm not sure if they'll try to wriggle out of it or attend
19:09:06 <elliott> court is literally just two parties whinging and a judge trying to upset them both, right?
19:09:10 <elliott> i see no evidence against this
19:09:14 <ais523> somehow, I doubt that mediation's going to go too well if it is Larry v. Larry
19:09:16 <ais523> elliott: quite possibly
19:09:23 <Sgeo> Even in context, it was boring
19:09:24 <ais523> this judge seems to me to have decided that both sides are playing dirty
19:09:36 <elliott> I would pay to attend Larry v. Larry
19:10:11 <Sgeo> Who's the Larry at Oracle?
19:10:13 <elliott> incidentally, /me thinks he might have designed the Platonically Perfect Lisp Macro Solution
19:10:16 <elliott> Sgeo: ellison...
19:10:18 <ais523> Sgeo: Larry Ellison
19:10:29 <Sgeo> ty
19:10:30 <Taneb> I know someone called Ellison
19:11:20 <ais523> I online-know someone called Elliott
19:11:22 <ais523> is that close enough?
19:11:29 <elliott> Totally.
19:13:25 <elliott> http://sprunge.us/TbCe
19:13:31 <elliott> I _think_ I have the semantics to make this work.
19:13:56 <elliott> (note that although they look similar to traditional defmacro quasiquoting, the "tmp" in the second let1 is _not_ exposed to body)
19:14:44 <elliott> monqy: BE INTERESTED
19:14:52 <ais523> elliott: oh dear, one of my friends in another channel, when faced with doing "does the xth character of the yth line of a file contain a particular character" in Python, decided that the easiest method was to call out to vim
19:14:54 <elliott> ais523: be vaguely interested, since it's call-by-name and you dislike traditional lisp macro systems
19:14:55 <monqy> zepto? it doesn't have kernels $s at least
19:14:58 <elliott> and augh
19:15:00 <monqy> so I figure it's not kernel
19:15:01 <ais523> I'm trying to persuade him that some other method is going to be better
19:15:02 <elliott> stop being their friend :'(
19:15:11 <monqy> and I've never heard of anything else with vau
19:15:14 <ais523> elliott: let me look at it, then
19:15:16 <elliott> monqy: it's... zepto I guess, I just stole the vau name
19:15:24 <elliott> it's merely an idea at this point
19:15:31 <elliott> but I think it's perfectly hygienic fexprs
19:15:32 <monqy> it looks a lot different from nights agos ante
19:15:35 <elliott> with quasiquotation
19:16:11 <monqy> interestinG???
19:16:23 <elliott> very interestinG
19:16:33 <elliott> I think it's syntax-case's basic system, ported over to fexprs
19:17:53 <monqy> comparing the first and the second is cond not having #, a mistake or is there reason for eval not to translate to that there
19:18:11 <Sgeo> Picolisp ... why do picolisp macros exist?
19:18:18 <monqy> hi
19:18:37 <elliott> http://trydyingtolive.com/ worst website ever
19:18:39 <elliott> (enable js)
19:18:46 <elliott> (seriously, do it)
19:19:01 <monqy> wow what
19:19:12 <elliott> ais523: you will enjoy that website
19:19:19 * elliott specialises in true statements
19:19:26 <Sgeo> I can't figure out how to edit text on that site
19:19:36 <elliott> you can't
19:20:05 <elliott> ais523: isn't it beautiful :')
19:20:23 <elliott> it reminds me of like
19:20:26 <elliott> dhtml examples
19:20:27 <elliott> of the 90s
19:20:36 <Sgeo> Why does the Resume read like a real thing
19:20:45 <elliott> Sgeo: because it's a real person's site
19:21:00 <elliott> they actually think this is the best way to make their website
19:21:12 * Sgeo refuses to believe that
19:21:15 <Sgeo> It's just a fun toy
19:21:16 <elliott> http://www.reddit.com/r/programming/comments/keepq/since_designers_use_fancy_looking_websites_to/
19:21:18 <Sgeo> Lalala
19:21:19 <elliott> Since designers use fancy looking websites to show off their skills, I wondered what a developer's website would look like. This is my result. (trydyingtolive.com)
19:21:19 <elliott> submitted 1 hour ago by trydyingtolive
19:21:22 * Sgeo plugs ears
19:21:28 <Sgeo> lalalalalala
19:21:59 -!- augur has quit (Remote host closed the connection).
19:23:06 <monqy> bachelor of science in youth and family ministry? is that a thing?
19:24:11 <elliott> i bet Sgeo is trying to correct all the vandalism
19:24:16 <elliott> god
19:24:17 <monqy> he's just making it worse
19:24:18 <elliott> red on blue
19:24:19 <elliott> this is beautiful
19:24:23 <elliott> my eyes
19:24:44 <elliott> wait
19:24:48 <elliott> and a catten
19:24:51 <elliott> (half cat half kitten)
19:24:52 <elliott> i
19:24:55 <Sgeo> I don't think I'm doing this
19:24:58 <monqy> oh
19:25:02 <monqy> well I'm not doing it!
19:25:03 <Sgeo> scroll down
19:25:14 <monqy> oh dear
19:25:35 <elliott> im
19:25:36 <elliott> dragging
19:25:37 <elliott> the resume down
19:25:43 <elliott> kidnap
19:25:55 -!- boily has quit (Ping timeout: 252 seconds).
19:26:18 <elliott> its so beautiful
19:26:19 <elliott> ok i am done
19:26:20 <Sgeo> Are you fiddling with the javascript for the kidnap?
19:26:37 <elliott> no
19:26:57 <Sgeo> Um, it snapped back
19:26:58 <Sgeo> Who did that
19:27:11 <elliott> an unfriendly person
19:27:18 <Phantom_Hoover> OMG this is amazing.
19:27:24 <Phantom_Hoover> So how does this work, then?
19:27:57 <elliott> Phantom_Hoover: you drag
19:27:58 <elliott> or resize
19:28:00 <elliott> or
19:28:01 <elliott> usethe options
19:28:02 <elliott> to change
19:28:03 <elliott> things
19:28:06 <Phantom_Hoover> Ah.
19:28:19 <calamari> I wonder if any attacks can be made to break out of the css
19:28:26 -!- oerjan has joined.
19:28:28 <elliott> trydyingtolive is the worst possible name for anything ever
19:28:35 <elliott> calamari: let's find out
19:28:39 <Sgeo> Sounds Christian
19:28:44 <monqy> 503 Service Unavailable
19:28:45 <monqy> No server is available to handle this request.
19:28:45 * elliott sets background colour to #f00;}
19:28:46 <monqy> oh no
19:28:46 <Sgeo> Some Christian stuff sounds creepy to me
19:28:53 <elliott> did i brake it oops
19:29:44 <Sgeo> change everything to #666666 ?
19:29:59 <elliott> rude
19:30:02 <elliott> :'(
19:30:03 <elliott> im just
19:30:04 <elliott> moving boxes
19:30:05 <elliott> not
19:30:06 <elliott> being rude
19:30:11 <monqy> kidnape
19:30:42 <Sgeo> Why does it just say #000
19:30:44 <Sgeo> What's #000
19:30:50 <elliott> black
19:30:51 <monqy> #000
19:30:51 <elliott> duh
19:31:00 <Sgeo> But, why isn't there 6 digits
19:31:08 <elliott> #rgb = #rrggbb
19:31:19 <elliott> its an eight-bit colour
19:31:21 <elliott> er hm no
19:31:23 <Taneb> #000 isn't an IRC channel
19:31:24 <elliott> eight bit would be two hex digits
19:31:31 <elliott> * Now talking on #000
19:31:31 <elliott> * adams.freenode.net sets mode +n #000
19:31:33 <elliott> * adams.freenode.net sets mode +s #000
19:31:37 <elliott> * [freenode-info] channel flooding and no channel staff around to help? Please check with freenode support: http://freenode.net/faq.shtml#gettinghelp
19:31:40 <elliott> * services. removes channel operator status from elliott
19:31:42 <elliott> yes it is
19:31:51 <Taneb> So it is
19:31:55 <ais523> hmm, according to discussion in Slashdot, Windows 8 has no Start menu, even if you put it into old-fashioned desktop mode
19:31:55 <Taneb> weird
19:32:07 <ais523> now, that's going to confuse people who can't adapt to UI change
19:32:12 <Taneb> Neither do the majority of modern OSs
19:32:20 <Sgeo> Hmm, I wonder if this is a mean color
19:32:34 <ais523> well, Gnome 2, KDE 3 and KDE 4 all have pretty close equivalents
19:32:38 * Sgeo changes to a lighter shade of gray
19:32:41 <ais523> I'm not sure about OS X
19:33:04 <elliott> os x ships with the applications folder on the dock by default
19:33:09 <elliott> which pops up a list of every application, so...
19:33:12 <elliott> didn't before leopard though
19:33:14 <ais523> yep, same concept
19:33:30 <Taneb> But are any of them labelled "start"?
19:33:33 <elliott> before leopard, I guess you could only use spotlight
19:33:36 <elliott> before tiger
19:33:36 <elliott> I
19:33:38 <elliott> guess you just opened Finder
19:33:40 <elliott> and went to Applications
19:33:43 <Taneb> Vista doesn't have a start button
19:33:43 <ais523> Taneb: the /name/ is pretty irrelevant
19:33:47 <Taneb> It has a flag button
19:33:54 <elliott> it has start if you put it into Classic
19:34:06 <Taneb> By default, Vista doesn't have a start button
19:34:18 <Sgeo> It has a button with similar functionality
19:34:26 <Taneb> THAT IS NOT THE SAME
19:34:28 <ais523> I'm trying to have a serious discussion about inferior-OSes-that-exist here
19:34:41 <ais523> (as opposed to @ which is a superior-OS-that-doesn't-exist)
19:34:46 <Taneb> I'm trying to explain what a start button is
19:34:49 <elliott> @ is not that good
19:34:53 <Taneb> That is, a button labelled "Start"
19:35:03 <elliott> Taneb: I reject that definition, I suspect most people do too
19:35:07 * Sgeo paints a button labelled Start on Taneb
19:36:14 * calamari can't adapt to UI change :(
19:36:22 * oerjan pushes Taneb's Start button
19:36:23 * Sgeo may be addicted to UI change
19:36:31 <calamari> still running kde 3.5
19:36:47 <elliott> ais523: i'm enjoying this five-minute thing where you accidentally explain the entire uk political system to vorpal
19:36:54 <Taneb> I like what's in that new ubuntu thing that I forget the name of
19:36:55 <Taneb> Unity
19:36:57 <Sgeo> See a new UI, want it
19:36:59 <oerjan> elliott: accidentally?
19:37:07 <Taneb> And I'm probably the only one who does
19:37:09 <elliott> 01:10:17: <AnMaster> ais523, is that even allowed by the constitution?
19:37:09 <elliott> [...]
19:37:10 <elliott> 01:16:27: <AnMaster> ais523, how did he managed to become elected then
19:37:10 <calamari> I think tht webpage automatically reverts changes after a while
19:37:11 <elliott> [...]
19:37:14 <elliott> 01:17:05: <ais523> he was appointed to the house of Lords
19:37:14 <elliott> 01:17:21: <AnMaster> ais523, what does that mean. I forgot how UK politics work
19:37:17 <elliott> etc.
19:37:40 <ais523> elliott: I have to explain the UK itself to a lot of people
19:37:45 <ais523> a lot of IRCers seem to think UK = England
19:37:53 <ais523> which offends me just as much as it offends most non-English Brits
19:37:53 <elliott> 01:18:18: <ais523> there was a huge scandal recently where Lords memberships were allegedly paid for
19:37:54 <elliott> 01:18:30: <AnMaster> that's no democracy...
19:38:00 <elliott> this is hilarious
19:38:04 <Taneb> But us know that UK ACTUALLY = Southern Spain
19:38:13 * Sgeo is vaguely aware that there's a difference. England is a strict subset of UK?
19:38:19 <elliott> 01:19:14: <AnMaster> ais523, I mean the house of lords in general is undemocratic
19:38:19 <elliott> 01:19:39: <AnMaster> having such a thing should disqualify UK as being counted as a democracy
19:38:21 <ais523> Sgeo: yes
19:38:26 <oerjan> ais523: yeah wouldn't want to get confused with those filthy scots
19:38:31 <elliott> Sgeo: what do you think scotland is?
19:38:36 <elliott> apart from filthy
19:38:43 <Sgeo> elliott, a country of some sort?
19:38:52 <Taneb> Technically right
19:38:57 <elliott> Sgeo: entirely separate from england?
19:39:05 <ais523> Taneb: also technically wrong
19:39:08 <elliott> 01:25:40: <ais523> hmm... ehird would probably be highly amused to know that Lord Mandelson was the Baron of Hartlepool
19:39:09 <elliott> 01:25:45: <ais523> I mean, Hartlepool!
19:39:09 <elliott> hartlepool!!!
19:39:15 <elliott> ais523: Scotland is a country, just not a state
19:39:22 <elliott> or, hmm
19:39:25 <Sgeo> elliott, no idea. I'd have thought so. Then again, I would not be able to point out Scotland on a map
19:39:26 <elliott> yeah, it's not a state
19:39:27 <Taneb> We're like Canada, but inside out
19:39:29 <ais523> the word "country" isn't well-defined enough for it to really work
19:39:34 <elliott> Sgeo: you're kidding me, right?
19:39:34 <ais523> it's a dependency of the UK, technically speaking
19:39:37 <ais523> it may be other things too
19:39:44 <elliott> I can accept ignorance on what the UK exactly constitutes
19:39:50 <elliott> but not knowing where Scotland is, even vaguely?
19:39:57 <elliott> thinking it's completely unrelated to England?
19:40:06 <Sgeo> Based on the context, I guess that it's near or in the UK
19:40:10 <ais523> elliott: I doubt I'd get all the dependencies of the UK from memory, or that you would
19:40:14 <Taneb> Very in
19:40:24 <elliott> Sgeo: wow
19:40:27 <Phantom_Hoover> Sgeo, wat
19:40:27 <Taneb> It's one of the Kingdoms that United ot form the United Kingdom
19:40:34 <elliott> Phantom_Hoover needs to get really offended now, this is unbelievable
19:40:39 <Phantom_Hoover> Sgeo, have you, like, seen a picture of the UK/
19:40:41 <Phantom_Hoover> Ever?
19:40:43 <Phantom_Hoover> Did
19:40:44 <Phantom_Hoover> did you
19:40:44 <elliott> are all US citizens this insanely ignorant??? like
19:40:46 <elliott> i thought the whole
19:40:50 <elliott> USers are dum at geography lol thing
19:40:51 <elliott> was
19:40:54 <elliott> way exaggerated
19:40:57 <Phantom_Hoover> did you think scotland was part of england
19:41:07 <Gregor> ...
19:41:09 <elliott> Phantom_Hoover: i think he thought scotland was unrelated to england...
19:41:10 <elliott> and just...
19:41:12 <elliott> a country somewhere
19:41:13 <Phantom_Hoover> elliott, yes but
19:41:21 <elliott> im crying
19:41:23 <Phantom_Hoover> I assume he's seen what the British Isles look like.
19:41:25 <Phantom_Hoover> At some point.
19:41:27 <elliott> Sgeo: what do you think wales is
19:41:29 <elliott> no wait
19:41:31 <elliott> Sgeo: what do you think ireland is
19:41:38 <Taneb> Ooh, that's a good one
19:41:41 <Gregor> I would like to say, on behalf of all Americans, that Scotland is on Great Britain, and also Sweden and Switzerland are the same country.
19:41:41 <Phantom_Hoover> Thus, he must have thought Scotland was just part of England.
19:41:52 <elliott> On Great Britain.
19:41:54 <elliott> Like, Scotland is layer two.
19:41:57 <Sgeo> Isn't Ireland some... island thing, or otherwise related to islands.
19:41:58 <elliott> Our sky is just Scotland's underside.
19:42:04 <Phantom_Hoover> Sgeo, .....
19:42:06 <elliott> Sgeo: What's Wales
19:42:09 <elliott> No googlin
19:42:10 <elliott> g
19:42:18 <Sgeo> elliott, related to this whole UK thing somehow.
19:42:24 <Phantom_Hoover> Sgeo, http://qntm.org/uk
19:42:27 <elliott> Sgeo: That's cheating based on context
19:42:29 <elliott> What did you think before now
19:42:31 <Phantom_Hoover> Learn you a UK geography.
19:42:34 <Sgeo> Ireland is north of England, isn't it?
19:42:43 <elliott> I
19:42:47 <Gregor> elliott: Would you rather I'd said "on the island of Great Britain"? No preposition works particularly well there.
19:42:56 <Taneb> In
19:42:59 <elliott> Sgeo: So
19:43:01 <elliott> About Wales
19:43:04 <elliott> What did you think it was before now
19:43:11 <Taneb> Great Britian isn't actually an island
19:43:12 <oerjan> Gregor: austria and australia too
19:43:17 <Sgeo> A country perhaps vaguely in the area
19:43:19 <Taneb> The island is Britain
19:43:21 <Gregor> oerjan: Yes.
19:43:24 <elliott> im going to draw Sgeo's idea of uk
19:43:45 <Phantom_Hoover> <elliott> I
19:43:50 <Gregor> Taneb: Faaaaaaairly sure that the island of Britain is the island of Great Britain, and furthermore one of the British isles.
19:43:54 <Phantom_Hoover> I guess it's true in some ways??????
19:44:07 <Taneb> Great Britain is a geopolitical region
19:44:10 <Phantom_Hoover> I mean, I can see Kintyre on a good day in Nowhere, Ireland.
19:44:30 <Gregor> TO WIKIPEDIA!
19:44:38 <Sgeo> Wait, is the island that England is on divided such that part of it isn't England?
19:44:51 <Taneb> Yup
19:45:03 <Taneb> And some of England is on other islands
19:45:06 <Taneb> For instance, Wight
19:45:09 <ais523> Gregor: you're correct there
19:45:11 <Phantom_Hoover> "Some people living in Northern Ireland (which is part of the UK) would even like Northern Ireland itself classified as part of the ROI instead of the UK. This is a contentious point."
19:45:18 <Gregor> ais523: Yeah, just concluded that :P
19:45:19 <ais523> Taneb: the Isle of Wight is not part of England
19:45:22 <ais523> it's a dependency of its own
19:45:29 <Phantom_Hoover> Contentious point links to the WP article on the Troubles.
19:45:33 <Taneb> That's the Isle of Man, ais523
19:45:38 <ais523> Taneb: I think they both aren't
19:45:42 <ais523> not sure about the Isle of Wight
19:45:47 <Taneb> The Isle of Wight is definitely part of England
19:45:47 <ais523> I'm definitely sure about the Isle of Man
19:45:50 <elliott> Phantom_Hoover: Sgeo: Taneb: Sgeo's United Kingdom: http://ompldr.org/vYWM2NA
19:46:04 <ais523> what about the Channel Islands? part of the UK, but are they part of England?
19:46:15 <Taneb> Neither
19:46:15 <elliott> Phantom_Hoover: I love WP's jokes-via-links
19:46:25 <Taneb> They're like the Island of Man
19:46:32 <Phantom_Hoover> elliott, that was from qntm, actually.
19:46:36 <oerjan> http://tvtropes.org/pmwiki/pmwiki.php/Main/Scotireland
19:46:36 <elliott> Sgeo: So did you seriously think Scotland was just some place.
19:46:37 <elliott> Phantom_Hoover: Oh.
19:46:38 <Taneb> There's Guernsey, Jersey, Alderney, and Sark
19:46:48 * oerjan cackles veilly
19:46:51 <Gregor> <elliott> Phantom_Hoover: Sgeo: Taneb: Sgeo's United Kingdom: http://ompldr.org/vYWM2NA // the best UK
19:46:54 <Sgeo> Why wouldn't it be just some place? Aren't all places just some place?
19:46:55 <Phantom_Hoover> Sgeo, but didn't you know that we hate the English.
19:46:57 <Taneb> I think Alderney was the last place to abandon the feudal system
19:46:58 <Phantom_Hoover> I mean
19:47:03 <elliott> Sgeo: Yes, but you didn't think it was related to England in any way.
19:47:04 <Phantom_Hoover> They weren't invading in boats
19:47:16 <elliott> Sgeo: I mean, did you just think it was some random European country??
19:47:30 <Sgeo> I think I was envisioning Scotland to the east of England
19:47:31 <elliott> Phantom_Hoover: They totally should have.
19:47:43 <elliott> Phantom_Hoover: Imagine them just... hating a country on the other side of the globe to them.
19:47:46 <Taneb> Sgeo: Where do you think Herzogovinia is?
19:47:48 <Gregor> I'm pretty sure that Scotland is just another name for Sweden and Switzerland.
19:47:49 <elliott> Wait, that's what America does.
19:48:01 <Phantom_Hoover> Taneb, isn't that Switzerland?
19:48:05 <elliott> Taneb: Sweden
19:48:07 <Gregor> Just that Switzerland is the Swiss name, Sweden is the Swedish name, and Scotland is the Scotch name.
19:48:07 <Sgeo> Taneb, can't tell if you just made that up
19:48:35 <elliott> Gregor: Confoederatio Helvetica!
19:48:44 <Gregor> They must speak like twenty languages in Swedotzerland, though all begin with an 'S' and most begin with 'sw'.
19:48:47 <elliott> Switzerland: named by font nerds.
19:48:47 <Phantom_Hoover> Sgeo, Herzegovina?
19:48:51 <Phantom_Hoover> Taneb, see correction.
19:49:04 <Taneb> I can never spell it
19:49:10 <Taneb> I can barely spell Britain
19:49:14 <ais523> Sgeo: Scotland's to the north of England
19:49:20 <Phantom_Hoover> Sgeo, obviously you weren't there for every Eurovison contest ever.
19:49:33 <Taneb> 2006 was a good year for Eurovision
19:49:42 <Taneb> Lithuania and Finland especially
19:49:42 <elliott> Eurovision is like, the most European thing ever.
19:49:43 * Sgeo still holds the Mornington Crescent hypothesis
19:49:47 <Phantom_Hoover> Taneb, was that The One Where Finland Won.
19:49:58 <elliott> Name something more European than Eurovision.
19:49:59 <ais523> Mornington Crescent is in London
19:49:59 <Taneb> I voted for them!
19:49:59 <elliott> I dare you.
19:50:02 <ais523> quite near Euston
19:50:02 <Gregor> Sgeo: Also, where's Brittany in relation to Britain? </troll>
19:50:21 <elliott> See? You can't.
19:50:29 <Sgeo> The European Union?
19:50:35 <Taneb> Not really
19:50:43 <Taneb> That doesn't even have Norway
19:50:47 <elliott> Sgeo: but seriously, go look at a globe, please.
19:50:58 <elliott> Look at the UK, it's the thing that looks like a pound sign.
19:51:01 <elliott> Except flipped.
19:51:06 <elliott> This is where the pound sign comes from.
19:51:15 <Phantom_Hoover> Sgeo, the EU doesn't even have Switzerland in it!
19:51:21 <Gregor> Taneb: Forget Norway!
19:51:22 <Taneb> I always thought the British Isles looked like Dangermouse and Penfold
19:51:36 <elliott> Phantom_Hoover: Agree that the British Isles are the prettiest geographical formation???
19:51:37 <Gregor> Taneb: I'M WATCHING DANGER MOUSE RIGHT NOW!
19:51:38 <elliott> All the other islands are like
19:51:39 <elliott> Just blobs
19:51:41 <elliott> The UK sort of
19:51:43 <elliott> Disintegrates
19:51:43 <elliott> to the left
19:51:49 <elliott> s/UK/Britsh Isles/
19:51:52 <elliott> w/e
19:52:09 <ais523> Scotland has a bunch of offshore islands, ranging from interesting to tiny and worthless
19:52:09 <elliott> But seriously, apart from the Nordic countries and the British Isles, all the other land is SO BORING shape-wise.
19:52:10 <Phantom_Hoover> elliott, you're just discussing the beauty of Scotland.
19:52:22 <elliott> Phantom_Hoover: Well OK but look the whole thing looks like an icon.
19:52:25 <Taneb> Newfoundland's pretty interesting
19:52:29 <elliott> No other island group looks like an icon.
19:52:30 <Taneb> One side of it, anyway
19:52:42 <ais523> they were used for the first reality TV show, before the genre got bad
19:52:43 <elliott> ais523: I'm sure they'd be quite upset at the worthless part
19:53:11 <Phantom_Hoover> ais523, hey, some of them have entertaining names!
19:53:13 <Phantom_Hoover> Rhum!
19:53:18 <ais523> elliott: the really worthless ones, nobody lives on
19:53:23 <Phantom_Hoover> Eigg!
19:53:24 <ais523> so there's nobody to get upset at the insult
19:53:35 <Phantom_Hoover> Also Rhum has deer!
19:53:35 <elliott> ais523: I'll be upset for them.
19:53:45 <Gregor> elliott: By the way, where's Saskatchewan? :P
19:53:54 <elliott> Gregor: Canada.
19:54:04 <Gregor> Canada is as big as Europe :P
19:54:11 <Phantom_Hoover> ais523, also apparently the sailing there is really good.
19:54:13 <Taneb> It's near the middle at the bottom!
19:54:21 <elliott> Gregor: Saskatchewan is a big part of Canada.
19:55:11 <calamari> africa is a bigger country ;)
19:55:20 <Taneb> AAARGH!
19:55:31 <Gregor> By the standard of Canadian provinces, Saskatchewan is pretty normal-sized I'd say.
19:55:34 <Taneb> I JUST HEARD THE NOISE MY PHONE MAKES WHEN I HAVE A TEXT MESSAGE
19:55:41 <elliott> Taneb: NOOOOOOOOOooooooOOOOOOOOoooOOOOOOOOooOOOOOOooOOOOOOOOOOOOOOO
19:55:42 <elliott> oooooooo
19:55:44 <monqy> do you have a text message
19:55:56 <Taneb> Only in the strictest sense
19:56:01 <Taneb> It was from twitter
19:56:03 <monqy> oh
19:56:26 <oerjan> rhum and eigg liquor
19:57:01 <itidus20> anyone can verify this?
19:57:03 <Taneb> Make sure you don't get any Muck in that, oerjan
19:57:04 <itidus20> λx. x λy. y λz.z λw. w z y x == (λx.((x)λy.((y)λz.((z)λw.((((w)z)y)x)))))
19:57:23 <oerjan> Taneb: ok
19:57:44 -!- azaq23 has quit (Quit: Leaving.).
19:58:25 <Taneb> itidus20: Looks right
19:58:45 <Taneb> itidus20: But I would avoid the second one like THE PLAGUE
19:58:58 <itidus20> its going too far?
19:59:50 <elliott> Pretty sure λ syntax is ambiguous in that position, but w/e.
20:00:00 <oerjan> i think λx. x (λy. y (λz. z (λw. w z y x))) would be more reasonable, it helps parsing without being unreadable
20:00:24 <Gregor> elliott: Hey, where's Arkansas? Also how do you pronounce it? Also hahaha I'm indirectly comparing Arkansas to Scotland (I guess that should be "haha"'d at Phantom_Hoover though)
20:00:39 <itidus20> elliott: well yeah.. good point.. the book has an interpretation.. i forgot to mention that
20:00:40 <Taneb> brb
20:00:58 <elliott> Gregor: US.
20:01:00 <elliott> Arkansaw.
20:01:14 <elliott> Southern US, but I already googled it by the time I remembered that :P
20:01:24 <oerjan> not arkensaw?
20:01:30 <elliott> Well yeah.
20:01:31 <itidus20> the book uses some notations such as: E1 E2 E3 means ((E1 E2) E3)
20:01:39 <elliott> itidus20: that's standard notation
20:01:39 <itidus20> and λx . E1 E2 E3 means (λx . (E1 E2 E3)) and not ((λx . E1 E2) E3).
20:01:40 <elliott> what are you reading
20:01:53 <itidus20> i dont actually know its a chapter i found online in pdf format
20:02:30 <itidus20> specifically it said "The
20:02:31 <itidus20> following notational conventions allow abbreviations that reduce the number
20:02:31 <itidus20> of parentheses:"
20:02:56 <itidus20> sorry.. bad post editng
20:02:56 <oerjan> itidus20: looks pretty similar to haskell's convention, except for the symbols
20:02:56 <Phantom_Hoover> <Gregor> elliott: Hey, where's Arkansas? Also how do you pronounce it? Also hahaha I'm indirectly comparing Arkansas to Scotland (I guess that should be "haha"'d at Phantom_Hoover though)
20:03:04 <oerjan> (\ and -> instead)
20:03:09 <Sgeo> I should stop randomly shouting UPDATE into MSPA channels
20:03:11 <Phantom_Hoover> Somewhere in the middle, possibly to the south? also "arkansaw".
20:03:21 <Sgeo> Even with context that I'm just shouting it randomly
20:03:36 <elliott> I hope Gregor doesn't ask me about something not on the American continent :P
20:03:36 <monqy> Sgeo: randomly as in not necessarily when an update actually has happened?
20:03:42 <Sgeo> monqy,
20:03:44 <Sgeo> yes
20:04:00 <Gregor> My point was just that, as bizarre as it was to not know where Scotland is (which I am not forgiving), it's not like you've got a razor-sharp impression of our continent either.
20:04:11 <oerjan> elliott: what's the capital of burkina faso ;P
20:04:20 <itidus20> trouble is since i only have a chapter of the book theres no answers :P
20:04:32 <Gregor> I'm not going to ask about Asia or Africa because I don't know where anything is there X-P
20:04:34 * Sgeo doesn't know the states all that well. Just the obvious ones
20:04:37 <elliott> oerjan: Muslimville
20:04:38 <oerjan> (i'm asking because it sounds funny)
20:04:44 <elliott> Gregor: Sure, but I know what's a state/province of what :P
20:04:49 <Gregor> elliott: That's MuslimVALE.
20:04:59 <oerjan> elliott: ok _maybe_ that's what it means, but no
20:05:05 <elliott> Gregor: And not knowing that Scotland is related to England in any way is just unforgivable :P
20:05:10 <Gregor> Fair 'nuff.
20:05:16 <Phantom_Hoover> Gregor, I can place African and Asian countries on a rough north/south and east/west axis respectively.
20:05:36 * Sgeo can't :(
20:05:39 <Gregor> <Phantom_Hoover> The Asian countries are roughly north-east of the African countries.
20:05:49 <Sgeo> I know that Japan is an island
20:05:57 <elliott> No it's not.
20:06:07 <pikhq_> Japan is several islands.
20:06:08 <Phantom_Hoover> Sgeo, the trick with Asia is that most of the west is stans.
20:06:12 <elliott> Japan is an archipelago.
20:06:16 <Phantom_Hoover> pikhq_, 4 main ones.
20:06:20 <elliott> Of 6,852 islands, said Wikipedia.
20:06:22 <Gregor> Japastan.
20:06:27 <elliott> Phantom_Hoover: which is definitely not "an island".
20:06:35 <elliott> Four is quite thoroughly bigger than one.
20:07:08 <oerjan> Phantom_Hoover: you mean most of the middle.
20:07:30 <Phantom_Hoover> http://www.reddit.com/r/politics/comments/ke8qi/a_14yearold_boy_got_into_a_fight_at_a_school_bus/c2jkyty?context=3
20:07:37 <pikhq_> oerjan: China is most of the middle.
20:07:44 <Phantom_Hoover> Sgeo, shooting in the thigh is most certainly not something you do if you're avoiding lethality.
20:08:00 <elliott> The thigh is well-known to contain the brain.
20:08:03 <pikhq_> Hence the name 中国.
20:08:06 <Sgeo> s/in the thigh/
20:08:09 <Sgeo> //
20:08:16 <oerjan> pikhq_: erm no. china is at the east of asia. admittedly it's quite wide, but not that wide.
20:08:21 <pikhq_> (lit. middle country, or "central country")
20:08:21 <itidus20> seems to be Text: Formal Syntax and Semantics of Programming Languages
20:08:29 <elliott> Sgeo: Yes, it is literally impossible to non-fatally wound someone with a gun.
20:08:29 <pikhq_> (though part of that's just their ego)
20:08:32 <Phantom_Hoover> There is at least one big artery in the thigh, and cutting it will kill you from blood loss long before any treatment can be made.
20:08:43 <Sgeo> Wasn't entirely aware when I wrote that that the thigh would be especially lethal, just that in general you don't shoot to wound
20:08:44 <Phantom_Hoover> elliott, it is not impossible, it is just much much harder than most people think.
20:09:06 <elliott> Just go for the ribcage, it has a lot of bones
20:09:41 <Gregor> Legs.
20:09:56 <Gregor> Calves, even.
20:09:56 <pikhq_> oerjan: https://secure.wikimedia.org/wikipedia/en/wiki/File:Asia_%28orthographic_projection%29.svg Okay, so it's not *most* of the middle. But holy fuck it's huge.
20:10:14 <elliott> How serious are ear-wounds
20:10:22 <elliott> Can you just blow someone's ear off and watch it flap away
20:10:24 <Gregor> elliott: How good is your aim? :P
20:10:40 <elliott> Gregor: My hands are never not shaky. So let's give it a try!
20:11:04 <oerjan> pikhq_: eek
20:11:07 <Gregor> "Who else has both ears pierced? Pirates! But then, they're sailors."
20:12:18 <Phantom_Hoover> elliott, just make the shakes cancel out.
20:12:34 <oerjan> pikhq_: hm it actually looks plausible that the center of mass might be in china. i'm surprised.
20:12:37 <Taneb> Hello
20:12:41 <elliott> hello
20:12:46 <Taneb> What did I miss?
20:13:08 <Taneb> I can't be bothered to scroll up, you see
20:13:36 <elliott> you missed a murder...
20:13:39 <elliott> `log murder
20:13:43 <HackEgo> 2010-09-12.txt:04:29:12: <pikhq> cpressey: Permission requested to murder you deeply.
20:13:47 <elliott> deeply
20:13:56 <elliott> `logurl 2010-09-12.txt:04:29:12:
20:13:58 <HackEgo> http://codu.org/logs/log/_esoteric/2010-09-12
20:14:16 <Sgeo> oooh
20:14:17 <Sgeo> ahhh
20:14:19 <Sgeo> eeeh
20:14:24 <Sgeo> uuuh
20:14:32 <Sgeo> Why am I giglly
20:14:35 <Sgeo> gggly
20:14:43 <oerjan> `log table
20:14:47 <HackEgo> 2011-09-04.txt:21:32:49: <elliott> Gregor: Also, object fields should totally be immutable by default :P
20:14:51 <elliott> Sgeo...
20:15:03 * Sgeo is entirely 100% sober
20:16:35 <Taneb> That's about 2% more sober than me
20:16:58 <elliott> Funny, I'm 2% sober.
20:17:04 <oerjan> elliott: also, the answer is ouagadougou
20:17:20 <Taneb> That's the capital of Burkina Faso!
20:17:22 <elliott> oerjan: nice name
20:17:37 <oerjan> Taneb: "that was the question"
20:17:44 <Taneb> Wow
20:18:26 <Taneb> What a crazy world
20:18:42 <Gregor> What's the capital of OREGON???
20:19:02 <Taneb> PHOENIX
20:19:03 <oerjan> Gregor: is this one of those tricky cases where it's _not_ portland?
20:19:04 <Taneb> ALBANY
20:19:12 <Gregor> oerjan: IT IS ... like most US states.
20:19:13 <Taneb> SPRINGFIELD
20:19:24 <oerjan> Gregor: was a fraidso
20:19:28 <Gregor> I would estimate that less than half of US states have their capital in the largest city.
20:19:33 * Sgeo cheats
20:19:45 <olsner> Q: What's that capital of [...]? A: Irrelevant.
20:20:11 <elliott> Is there any capital not named Portland
20:20:16 <Gregor> What's the largest city ... /in the woooooooorld/?
20:20:23 <elliott> I always used to think Portland was a country
20:20:30 <elliott> Gregor: beijing?
20:20:34 <Taneb> It's Java?
20:20:44 <Gregor> I thought it was Mexico City. But I also think it depends on your definition.
20:20:46 <olsner> largest by what measure? if by importance, the one I am currently in
20:20:49 <elliott> http://en.wikipedia.org/wiki/World%27s_largest_cities
20:20:51 <elliott> wow this is complicated
20:20:59 <Taneb> Portland is an islandy peninsula thing in Devon or is it Dorset
20:21:02 <Sgeo> I think the main reason I've heard of Portland, Oregon is 1/0
20:21:13 <elliott> Gregor: It's either Tokyo or Shanghai
20:21:22 <elliott> Mexico City is like number two or so
20:21:25 <elliott> Dunno
20:21:28 <Phantom_Hoover> <Sgeo> I think the main reason I've heard of Portland, Oregon is 1/0
20:21:36 <elliott> wow
20:21:37 <Phantom_Hoover> I thought Gregor was from there or something/
20:21:45 <Gregor> IT IS POSSIBLE
20:21:52 <Phantom_Hoover> <Gregor> I would estimate that less than half of US states have their capital in the largest city.
20:22:00 <Phantom_Hoover> Stupid capital friends!
20:22:17 <Gregor> ...........
20:22:21 <Sgeo> http://www.undefined.net/1/0/?strip=993
20:22:31 <Phantom_Hoover> Gregor, Glasgow.
20:22:42 <Gregor> Oh
20:22:49 <elliott> Glasgow is capital?
20:22:57 <Taneb> No, but it's the biggest
20:22:59 <elliott> I thought it was Edinburgh.
20:22:59 <elliott> Oh.
20:23:01 <Gregor> As in, "(state [not US sense, governmental entity] with stupid capital) friends"
20:23:02 <Taneb> It's like Prudhoe
20:23:11 <Taneb> It's actually bigger than Hexham
20:23:19 <elliott> "capital of scotlan" --> "Answer: Edinburgh, assuming scotlan is an administrative division. Computed by Wolfram|Alpha at Tue Sep 13 2011 21:23:42 GMT+0100 (BST)"
20:23:20 <elliott> thanks ddg
20:23:22 <elliott> lol at assuming
20:23:52 <oerjan> otoh i just learned the other week from a quiz that birmingham was the second largest city in the ... hm was it the uk or just england
20:23:52 <Sgeo> SCOTLAN
20:23:58 <Sgeo> The network of Scots
20:23:59 <Gregor> Edinburgh IS the capital of scotlan, it's just not the capital of Scotland is all.
20:24:05 <Phantom_Hoover> Sgeo, it's what we call our top secret... yeah.
20:24:14 <Phantom_Hoover> We make fun of the English on it.
20:24:23 <Taneb> Wow, Hexham and Scotland have swapped populations
20:24:24 <Gregor> oerjan: It's the second largest ... airport in the UK :P
20:24:34 <Taneb> I meant Prudhoe
20:24:38 <Taneb> Prudhoe and Scotland
20:24:47 <Gregor> BUT WHAT IS THE CAPITAL OF HEXHAM (the land of six pigs)
20:24:55 <Taneb> Lowgate
20:25:06 * Taneb nods sagely
20:25:06 <Sgeo> Decpork
20:25:22 <elliott> I'm gonna call this place Sixpig from now on.
20:25:40 <pikhq_> :D
20:25:54 <olsner> or, using the sanskrit name for six, shitbacon
20:25:58 <Sgeo> The amusement park where you ride pigs?
20:26:02 <olsner> *shatbacon
20:26:23 <Sgeo> Wait, that makes no snse
20:26:25 <Sgeo> Fuck sense
20:26:34 <oerjan> olsner: why not use the swedish word duh
20:26:42 * oerjan cackles evilly
20:26:43 <Gregor> "Why do you like Six Flags?" "I LIKE RIDING FLAGS"
20:27:28 <olsner> oerjan: SEXBACON
20:27:51 <olsner> there, happy now?
20:27:55 <oerjan> yes
20:27:57 <Phantom_Hoover> <Taneb> Lowgate
20:28:06 <Phantom_Hoover> Please tell me this is some local joke.
20:28:16 <Taneb> It's a little village to the West
20:28:21 <Gregor> Also I keep misreading "Prudhoe" as "Purdue"
20:28:31 <Taneb> Practically in Hexham
20:28:37 <Taneb> But really to one side
20:28:40 <oerjan> Gregor: perhaps that's how purdue was named
20:28:48 <Taneb> One of my friends lives there
20:29:03 <elliott> hmm, this is a very strange eval
20:29:13 <elliott> it's more like calling a procedure than actual eval
20:29:20 <oerjan> it's an evil
20:29:23 <Taneb> MISTER RIUS
20:29:35 <elliott> oerjan: no :'(
20:29:36 <elliott> it nice
20:30:12 <Gregor> `log pornography
20:30:17 <HackEgo> 2009-01-09.txt:17:14:14: <ehird> OH NO, PORNOGRAPHY
20:30:27 <Gregor> OH NO PORNO
20:30:28 <elliott> X-D
20:30:29 <elliott> `log eval
20:30:33 <HackEgo> 2010-08-05.txt:22:37:36: <oerjan> cpressey: evaluations/pure computations?
20:30:34 <oerjan> `log prepromorphism
20:30:38 <HackEgo> 2011-02-02.txt:21:01:16: <elliott> zygohistomorphic_prepromorphism f = g_prepro (distZygoT (liftAlgebra f) (distHisto id))
20:30:42 <elliott> `log \beval\b
20:30:46 <HackEgo> 2007-05-29.txt:22:32:26: <oklopol> eval(code){code.replace("\\n","\n"); s=code.split("\n"); if(s.length==1)print code; else eval(s[0].regex_replace(s[1],s[2])); }
20:30:46 <Taneb> I keep forgetting that Fellside is a place
20:30:53 <elliott> `log \beval\b
20:30:57 <HackEgo> 2011-01-18.txt:17:32:55: <elliott> ais523: eval doesn't operate on strings here
20:30:59 <oerjan> Taneb: a fell place?
20:31:06 <elliott> `log \beval\b
20:31:09 <HackEgo> 2006-01-14.txt:00:31:39: <fizzie> It's not good style, but you could generate a temporary name and that way use a predicate received as an argument, which would be like "eval"ing the argument in perl or some lisp-like thing.
20:31:30 <Gregor> `log eval.*pornography
20:31:34 <HackEgo> 2011-09-13.txt:20:31:30: <Gregor> `log eval.*pornography
20:31:45 <Gregor> SON I AM DISAPPOINT
20:31:56 <elliott> It can give that for things that actually have answers, too.
20:32:16 <oerjan> `log agrophnimorpic seprogniph
20:32:18 <Gregor> Yes, my main disappoint is in YOUUUUUUUU
20:32:20 <HackEgo> 2011-09-13.txt:20:32:16: <oerjan> `log agrophnimorpic seprogniph
20:32:31 <ais523> `log [^`]
20:32:37 <ais523> that query won't find itself
20:32:40 <HackEgo> shuf: memory exhausted
20:32:49 <oerjan> ais523: tru dat XD
20:33:01 <ais523> `log [^`]watermelon
20:33:05 <HackEgo> 2008-05-20.txt:20:50:45: <ehird> WATERMELONS
20:33:18 <elliott> ais523: umm, that doesn't really do what you want
20:33:27 <ais523> elliott: err, indeed
20:33:30 <ais523> `log [^]]watermelon
20:33:33 <ais523> that's better
20:33:34 <HackEgo> 2008-05-20.txt:20:50:48: <ehird> WATERMELONS
20:33:35 <elliott> heh
20:33:44 <elliott> `log [^]]zygohistomorphic diodsjfof
20:33:47 <olsner> `log watermelon
20:33:48 <HackEgo> No output.
20:33:50 <HackEgo> 2011-09-13.txt:20:33:34: <HackEgo> 2008-05-20.txt:20:50:48: <ehird> WATERMELONS
20:34:07 <olsner> `log bacon
20:34:10 -!- copumpkin has changed nick to frownyface.
20:34:10 <HackEgo> 2008-06-13.txt:19:33:20: <Slereah_> ERDOS BACON
20:34:14 -!- frownyface has changed nick to copumpkin.
20:34:24 <elliott> Does anyone know CHR? I suppose not.
20:34:29 <elliott> fax did.
20:34:32 <oerjan> erdos bacon? now that's just evil
20:35:05 <Gregor> <ais523> `log [^`] <ais523> that query won't find itself // actually this query WILL find itself.
20:35:21 <ais523> Gregor: see my correction above
20:35:29 <oerjan> `log self-reference
20:35:32 <HackEgo> 2011-02-24.txt:00:18:19: <oerjan> Mathnerd314: well i first detected accidental self-reference
20:35:58 <elliott> `log immoral
20:36:01 <HackEgo> 2009-05-05.txt:17:35:19: <ehird> GregorR: Selling non-scarce resources is inherently immoral, imo.
20:36:04 <elliott> `log immoral
20:36:07 <Taneb> Aaah!
20:36:08 <HackEgo> 2010-03-01.txt:13:27:43: <alise> trust Eliezer Yudkowsky to remark on how immoral creating a lookup table can be
20:36:09 <elliott> `log immortal
20:36:12 <Taneb> Windows 8!
20:36:13 <HackEgo> 2008-04-01.txt:19:26:38: <ehird> ' PLEASE NOTE THAT IMMORTALITY IS TREASON'
20:36:23 <elliott> I talk a lot.
20:36:25 <Phantom_Hoover> `log morale
20:36:28 <HackEgo> 2011-01-01.txt:19:32:02: <oerjan> THE BEATINGS WILL CONTINUE UNTIL MORALE IMPROVES
20:36:30 <elliott> oerjan: that's a quote from your interp in intercal, no?
20:36:32 <elliott> unlambda, I think?
20:36:35 <Gregor> `log immorale
20:36:38 <Phantom_Hoover> `log alternate
20:36:39 <HackEgo> 2011-09-13.txt:20:36:35: <Gregor> `log immorale
20:36:41 <Gregor> `log immortale
20:36:42 <HackEgo> 2007-07-13.txt:21:15:30: <lament> SimonRC: i think an alternate mood for "to be" would be nice
20:36:44 <elliott> `log amplicate
20:36:45 <HackEgo> 2011-09-13.txt:20:36:41: <Gregor> `log immortale
20:36:47 <HackEgo> 2011-09-13.txt:20:36:44: <elliott> `log amplicate
20:36:50 <Phantom_Hoover> `log alternate universe
20:36:50 <elliott> `log phantasm
20:36:54 <HackEgo> 2009-09-10.txt:20:35:41: <ehird> AnMaster: i'm the alternate universe ehird.
20:36:54 <HackEgo> 2008-10-19.txt:19:03:18: <fizzie> The books were: "Alice's Adventures in Wonderland", "Phantasmagoria and Other Poems", "Sylvie and Bruno", "The Game of Logic", "The Hunting of the Snark" and "Through the Looking-Glass"
20:37:00 <Phantom_Hoover> `log hoover
20:37:04 <HackEgo> 2011-07-13.txt:22:45:00: <Phantom_Hoover> augur, you'll have to comb the logs.
20:37:09 <elliott> `log phantom
20:37:10 <Phantom_Hoover> I guess it was inevitable.
20:37:13 <HackEgo> 2010-12-01.txt:16:56:56: <elliott> Phantom_Hoover_: But C-CoRN is awesome.
20:37:17 <ais523> HackEgo: I'm disappointed that that fizzie quote didn't mention Bjorn
20:37:20 <elliott> `log phantom[^_]
20:37:23 <Phantom_Hoover> `log bjorn
20:37:24 <HackEgo> 2010-12-21.txt:22:05:26: <elliott> Phantom_Hoover: Phantomhn Hoover?
20:37:26 <HackEgo> 2010-07-27.txt:23:58:31: <aliseiphone> SLOWLY DISROBING EVERY PERSON IN THE ROOM, BRIAN BLESSED THOUGHT OF BJORN, LOUDLY.
20:37:31 <elliott> wat
20:37:33 <oerjan> <elliott> oerjan: that's a quote from your interp in intercal, no? <-- um i doubt it was intended as such...
20:37:43 <ais523> elliott: hey, is the meme-bjorn pronounced "byorn" or "b'jorn"?
20:37:43 <elliott> oerjan: I meant the <HackEgo> 2008-04-01.txt:19:26:38: <ehird> ' PLEASE NOTE THAT IMMORTALITY IS TREASON'
20:37:50 <elliott> which I suspect was a quote from that
20:37:51 <Taneb> Samsung and Apple hate eachother
20:37:52 <elliott> ais523: I think the latter
20:38:00 <ais523> so do I, for some reason
20:38:20 <elliott> oerjan: do you have a link to it, so that I can check?
20:38:53 <oerjan> elliott: ah indeed it is
20:39:03 <elliott> told you
20:39:11 <itidus20> so i can tell myself zero is λf.λx.x and that λf.λx.x is (λf.(λx.(x))), but i can't imagine what use this is
20:39:23 <Taneb> It is every use
20:39:43 <elliott> itidus20: you want numbers, no?
20:39:49 <elliott> that's a representation of the natural numbers
20:40:00 <itidus20> i much prefer to say ram in computer memory is in the binary states 0 and 1
20:40:08 <elliott> lol
20:40:11 <itidus20> it makes more sense to my poor brain
20:40:12 <elliott> you don't know what you're talking about
20:40:13 <elliott> as usual
20:40:27 <Taneb> They are in HIGH and LOW states
20:40:27 <ais523> well, /technically/ it could end up metastable if you overclocked it
20:40:36 <ais523> at least for a while
20:40:40 <itidus20> well yeah
20:40:42 <ais523> I doubt it'd stay that way for long
20:41:03 <ais523> but there's a theorem that there's always going to be some metastable state that persists arbitrarily long
20:41:03 <itidus20> humm
20:41:21 <Phantom_Hoover> itidus20, you know how the Church numerals work?
20:41:26 <itidus20> what is nice about a pebble is that you can process it with your brain as a number by simply looking at it
20:41:31 <elliott> Phantom_Hoover: Obviously not
20:41:37 <elliott> `addquote <itidus20> what is nice about a pebble is that you can process it with your brain as a number by simply looking at it
20:41:38 <HackEgo> 659) <itidus20> what is nice about a pebble is that you can process it with your brain as a number by simply looking at it
20:41:52 <itidus20> shift more pebbles into your visual field and you can count them
20:42:13 <Taneb> What if you drew two circles on each pebble?
20:43:03 <itidus20> not sure then
20:43:09 <Taneb> That has very little applications in lambda calculus
20:43:17 <Taneb> I just wanted to see what you would say
20:43:23 <itidus20> absence of pebbles in the eye calculator = zero
20:43:29 <Taneb> I think you'd have twice as many circles as pepples
20:43:32 <Phantom_Hoover> What's the Mogensen-whatever encoding of a pebble?
20:43:43 <Phantom_Hoover> itidus20, do you therefore find calculus trivial?
20:43:59 <itidus20> i don't have any mathematical background
20:45:17 <Taneb> Go back to f(f(x)) and so on
20:45:42 <Taneb> What if x wasn't 0, but another lambda calculus number thing
20:46:04 <Taneb> With the f and x already filled in
20:46:48 <oerjan> elliott: http://oerjan.nvg.org/esoteric/intercal/unlambda.li btw
20:47:14 <itidus20> humm..
20:47:35 <elliott> oerjan: hm what's te .l part do
20:47:51 <oerjan> allows # comments
20:48:44 <elliott> ah
20:48:45 <elliott> cheating :)
20:48:49 <elliott> s/te/the/
20:48:53 <itidus20> maybe i am unconciously blocking myself from lambda cacl
20:48:54 <itidus20> calc
20:49:02 <itidus20> like i am trying to resist something about it
20:49:08 <Taneb> I thought the same
20:49:15 <Taneb> Then one day, I just cracked it
20:49:17 <itidus20> as if it were trying to undermine something i believe it
20:49:34 <itidus20> i have never had such trouble to understand a concept
20:49:50 <elliott> that's because you've refused to just read a tutorial
20:50:01 <elliott> you're trying to figure it out yourself from scratch and this only works for utterly trivial things
20:50:30 <itidus20> for the beginner and the expert at lambda calculus there is still only LC expressions..
20:50:36 <elliott> what
20:50:37 <Taneb> You have to stop thinking about λfx.f x as a number and think about it as a function that takes two things and returns a third
20:50:59 <itidus20> then why is it called a number?
20:51:07 <Taneb> Because it represents a number
20:51:21 <Taneb> It's like a painting can represent a church BUT IT IS NOT A CHURCH
20:51:33 <itidus20> oh.. representation
20:51:53 <elliott> ceci n'est pas une church
20:52:11 <Taneb> (λfx.f x)(λx.x+1)(0) <--- Evaluate, itidus20
20:52:12 <Phantom_Hoover> itidus20, more accurately, 'number' essentially just means 'thing that behaves in a certain way'.
20:52:22 <oerjan> church numerals are the church encoding of the data type data Nat = Succ Nat | Zero
20:52:30 <elliott> Taneb: don't
20:52:40 <elliott> he's had enough confusion by thinking you "mix" the LC with "other procedures from outside"
20:52:40 <olsner> Taneb: what you call "churches" are just representations of paintings
20:52:43 <oerjan> um
20:52:43 <Taneb> Yeah, I'm probably doing more harm than good
20:52:54 <elliott> using standard arithmetic notation won't help that :P
20:52:59 <oerjan> or the fold for that datatype
20:53:03 <itidus20> hang on 4.. 5 ..6 ..7 posts flying past.. now i will cut and paste the thing into my typing box
20:53:04 <Phantom_Hoover> In the case of natural numbers, which the Church encoding is a case of, you simply need to have something called 0, and something called S, and some guarantees about their behaviour.
20:53:09 <Sgeo> I forget. Church numerals are functions, or what?
20:53:24 <Phantom_Hoover> Specifically, that S(n) is distinct from n for all n.
20:53:27 * Sgeo should just wikipedia
20:53:41 <elliott> Phantom_Hoover: Obviously this will help immensely, considering itidus20 doesn't even grasp the basics of how LC works.
20:53:43 <Phantom_Hoover> Sgeo, you really aren't having a very good day today, are you?
20:54:01 <Phantom_Hoover> elliott, I'm sorry I can only argue that I was less unhelpful than Taneb.
20:54:16 <Taneb> I think this has taught us one thing. We can't teach itidus20 lambda calculus by comittee
20:54:28 <elliott> haha
20:54:45 <Sgeo> Can you build reals in lambda calculus
20:54:48 <elliott> it doesn't help that probably the best-qualified people are deliberately avoiding trying :P
20:54:56 <elliott> Sgeo: today is not your day
20:55:20 <oerjan> `addquote <Taneb> I think this has taught us one thing. We can't teach itidus20 lambda calculus by comittee
20:55:22 <HackEgo> 660) <Taneb> I think this has taught us one thing. We can't teach itidus20 lambda calculus by comittee
20:55:24 <Phantom_Hoover> oerjan, do things already
20:55:29 <Sgeo> I mean.. wait, clearly, integers are a subset of reals
20:55:34 <Phantom_Hoover> that is a thing but the wrong thing
20:55:42 <Sgeo> Can you build the ... why wouldn't you be able to, just and all the computables
20:55:46 * Sgeo facepalm?
20:55:52 <Phantom_Hoover> Facepalm indeed.
20:55:57 <itidus20> well it evaluates to 1
20:56:02 <elliott> Sgeo: Have you gone insane from not eating or something.
20:56:15 <Sgeo> I should go hurry to school
20:56:36 <Taneb> itidus20: what evaluates to 1 again? I'm lost
20:56:44 <Phantom_Hoover> Sgeo, at *4*?
20:56:47 <itidus20> (λfx.f x)(λx.x+1)(0) does
20:56:50 <elliott> `addquote <Sgeo> Can you build the ... why wouldn't you be able to, just and all the computables
20:56:51 <Sgeo> It's almost 5
20:56:52 <HackEgo> 661) <Sgeo> Can you build the ... why wouldn't you be able to, just and all the computables
20:56:54 <Taneb> Yes
20:56:59 <elliott> Sgeo: That answers Phantom_Hoover's question?
20:57:02 <Phantom_Hoover> itidus20, forget that, Taneb is stupid.
20:57:10 <Sgeo> elliott, technically, yes
20:57:15 <elliott> No it doesn't.
20:57:22 <elliott> Sgeo: At *5*?
20:57:28 <Sgeo> elliott, yes.
20:57:32 <Sgeo> =P
20:57:35 <elliott> Sgeo: Also not an answer.
20:57:50 <Phantom_Hoover> Wait of course you Americans call university college and then call that school because you are stupid and bad.
20:57:59 <Taneb> Now, (λfx.f x)(λnfx.f(n f x))((λfx.f (f x))(λx.x+1)(0))
20:58:12 <elliott> Taneb: That...
20:58:19 <elliott> You're just going to make him think the LC has a number type.
20:58:24 <elliott> Except express that more confusingly.
20:58:33 <Phantom_Hoover> Taneb is also stupid and wrong.
20:58:44 <Taneb> I'm right enough to fool myself
20:58:51 <Taneb> Which makes me even more wrong
20:59:24 -!- ais523 has quit (Remote host closed the connection).
21:00:08 <oerjan> Taneb: i suspect you misparenthesized that
21:00:31 <Taneb> It is pfuew- bracketed perfectly
21:00:32 <itidus20> because (λfx.f x)(λx.x+1)(0) = (λf.(λx.(f x)))(λx.(x+1))(0) = ((λx.(x+1)) (0)) = (0+1) = (1)
21:00:58 <oerjan> Taneb: well the second function never gets all its arguments
21:01:00 <itidus20> sorry i didnt actually start looking at that other thing
21:01:11 <elliott> itidus20: note how for every church numeral n, n(λx.x+1)(0) produces n as a numeral.
21:01:20 <elliott> (If Taneb is going to be confusing like that, I might as well help.)
21:02:04 <Taneb> If you call λx.x+1 f and 0 x, you can forget about the 0 and the +1!
21:02:33 <elliott> So helpful, Taneb.
21:02:35 <elliott> So. Helpful.
21:02:44 <elliott> itidus20 will know LC by the end of the week.
21:03:11 <itidus20> my brain seizes up often in a way which isn't clear externally
21:03:36 <itidus20> i am surprised sometimes i can remember how to walk
21:03:45 <itidus20> (not really)
21:03:53 <Phantom_Hoover> DF counts lye as a food.
21:04:07 <oerjan> the food is a lye!
21:04:26 <cheater> oerjan, ☺✋
21:04:39 <itidus20> my ultimate goal for LC is any applications i can find for it in game development
21:04:45 <oerjan> clearly dorfs love lutefisk
21:04:56 <itidus20> by which i don't mean writing games in haskell or scheme
21:05:08 <itidus20> but more generalized applications of it.. anything really
21:05:09 <elliott> itidus20: That is a very hubristic way to go about it.
21:06:13 <itidus20> for instance, i recently started to think of a scene from a play as a function..
21:06:37 <itidus20> like suppose you take a shakespeare play and make all the characters names be variables
21:06:39 <elliott> You are still trying to construct analogies in place of understanding?
21:06:55 <elliott> You are making this hard for yourself by being stubborn about it.
21:06:56 <itidus20> oh well.. functions exist in parallel to LC
21:07:13 <itidus20> i cant stop making analogies just for LC
21:07:23 <itidus20> :P
21:07:51 <itidus20> in some role playing games the characters name is a variable..
21:07:53 <elliott> You could stop making analogies so that you'd start actually understanding.
21:08:10 <itidus20> so the entire game is a function of that
21:09:32 <itidus20> uhh at least where his name is invoked
21:10:48 <itidus20> ok i know how to explain where my head is at
21:11:11 -!- Taneb has quit (Remote host closed the connection).
21:11:44 -!- Sgeo has quit (Ping timeout: 252 seconds).
21:12:11 <elliott> 2007-01-17.txt:23:15:01: <oklopol> rarely
21:12:11 <elliott> 2007-01-19.txt:21:58:04: <oklopol> you rarely depend on overflow
21:12:11 <elliott> 2007-01-19.txt:21:58:19: <oklopol> and in math you rarely have to iterate through memory
21:13:13 <itidus20> http://oi56.tinypic.com/25f254x.jpg
21:14:10 <itidus20> it doesn't have an answer section since its only 1 chapter and i presume actual answers at end of book
21:14:45 <itidus20> if it bothers with answers at all that is
21:16:15 <oerjan> itidus20: well question 1 is probably not very standard, but depends on the precise rules set down in the book
21:16:35 <itidus20> good point yeah
21:16:54 <itidus20> i might have been confused when doing it.. its not a big deal anyway
21:17:53 <oerjan> indeed that's a rather trivial matter of syntax
21:18:19 <itidus20> so i get that taneb's syntax is: λxyz.E == (λx.(λy.(λz.(E))))
21:18:51 <oerjan> yeah
21:18:58 <itidus20> haha (no its not taneb's syntax god damn it, its a very common syntax!)
21:24:34 -!- calamari has quit (Quit: Leaving).
21:30:35 -!- sllide has quit (Ping timeout: 276 seconds).
21:32:18 -!- derdon has quit (Remote host closed the connection).
21:34:55 <elliott> hi
21:35:32 * oerjan looks for the invisible newcomer which elliott is greeting
21:36:55 <elliott> im
21:36:56 <elliott> back
21:39:03 -!- sllide has joined.
21:40:04 <oerjan> back from his long travels, he discovered his hometown had gone quiet ... too quiet.
21:40:09 <atehwa> I could be the one
21:40:11 -!- FireFly has quit (Quit: FireFly).
21:40:26 <atehwa> oerjan: that reminds me of Faxanadu
21:40:38 <atehwa> the game for Nintendo 8bit
21:40:43 <oerjan> ok
21:40:48 <elliott> oerjan: yeah can i come to trondheim instead
21:40:59 <elliott> it's right next to scotland, right?
21:41:07 <oerjan> well you're already used to rain i assume...
21:41:12 <atehwa> oerjan: you live in Trondheim?
21:41:16 <elliott> quite :D
21:41:16 <oerjan> yes
21:41:21 <atehwa> my friend is somewhere there nearby
21:41:32 <oerjan> your friend is in HELL
21:41:36 <elliott> and with that, oerjan broke into a run
21:41:40 <atehwa> fii@IRCnet
21:41:59 <elliott> only finns use IRCnet, right?
21:42:10 <elliott> i have not seen a single non-finnish person mention it, ever
21:42:12 <atehwa> well I don't really know :)
21:42:14 <oerjan> (hell, norway)
21:42:23 -!- CakeProphet has joined.
21:42:23 -!- CakeProphet has quit (Changing host).
21:42:24 -!- CakeProphet has joined.
21:42:33 <atehwa> IRCnet is big, I don't think it could consist of Finns solely
21:42:43 <atehwa> IRCnet is the first IRC network
21:42:50 <atehwa> there ever was
21:42:54 <oerjan> depends. how many million people are on IRCnet?
21:42:56 <elliott> not to my knowledge
21:43:00 <CakeProphet> < elliott> CakeProphet: You're stupid in the past
21:43:05 <CakeProphet> elliott: this isn't news to me.
21:43:06 <elliott> ircnet descends from it
21:43:08 <elliott> but so does efnet
21:43:18 <elliott> undernet predates ircnet, even
21:43:21 <CakeProphet> also I had a heavy Python bias.
21:43:25 <elliott> I think ircnet just descends from efnet
21:43:28 <atehwa> depends on the definition of sameness, I guess
21:43:32 <CakeProphet> so I didn't really understand the point of lambdas other than to be used with map.
21:43:38 <oerjan> CakeProphet: but of course, to be news it would have to be in the future
21:43:41 <elliott> atehwa: well, there can't be more than one server there ever was :)
21:43:44 <elliott> erm
21:43:46 <elliott> atehwa: well, there can't be more than one first server there ever was :)
21:43:52 <elliott> s/server/network/
21:44:02 <atehwa> the first server was tolsun.oulu.fi
21:44:08 <atehwa> oh.
21:44:20 <atehwa> well, the first network didn't really have a name.
21:44:26 <elliott> IRC :P
21:44:38 <atehwa> IIRC :P
21:44:48 <elliott> huh, you're not allowed to run bots on ircnet without permission? weird
21:45:01 <atehwa> no, that's not true...
21:45:04 <CakeProphet> fungot isn't a bot
21:45:05 <fungot> CakeProphet: perhaps i should read about contification if you haven't
21:45:11 <atehwa> depends on your server
21:45:16 <CakeProphet> fungot has feelings like all of us.
21:45:17 <fungot> CakeProphet: and the equally endless " ha ha crappy microsoft programs"
21:45:19 <elliott> Keep in mind: IRC is a privilege, not a right
21:45:19 <elliott> Basic rules:
21:45:19 <elliott> [...]- No bots! They will be removed from this server without hesitation.
21:45:22 <atehwa> many IRCnet servers have overly strict policies
21:45:24 <elliott> that's irc.xs4all.nl at least
21:45:36 <elliott> my source is wikipedia, so maybe it's a totally unrepresentative server :P
21:45:49 <elliott> "IRCnet mostly consists of Finnish communities." Could someone please verify this? Scoo 17:20, 13 December 2005 (UTC)
21:45:56 <atehwa> well, it's not true: bots abound on IRCnet.
21:45:58 <elliott> at least one other person in the world thinks so :P
21:46:06 <itidus20> `log finnish
21:46:10 <HackEgo> 2011-03-18.txt:18:02:56: <oerjan> that's due to my decent knowledge of the finnish gibberish
21:46:17 <elliott> atehwa: hehe, I'm sure lots of non-permitted stuff abounds on EFnet... doesn't _necessarily_ mean it's ok:P
21:46:32 <oerjan> suomi gibberilainen
21:46:33 <elliott> I wonder what the largest network is nowadays
21:46:37 <elliott> I'm sure freenode is up there
21:46:43 <atehwa> well, _everybody_ means every "true" channel on IRCnet has a bot to regulate it
21:46:48 <elliott> maybe quakenet... wikipedia says quakenet
21:46:50 <itidus20> `log suomi
21:46:54 <HackEgo> 2006-04-21.txt:00:29:21: <kipple> "Finland" in Finnish is "Suomi", so I guess it it is something similar
21:47:08 <atehwa> what's typical of IRCnet is that it does not have a central service/bot that you can invite on your channel
21:47:24 <atehwa> s/means/knows/
21:47:49 <elliott> yeah, serverlessness is kinda weird
21:47:52 <elliott> s/server/service/
21:47:55 <elliott> I guess it's traditional
21:48:15 <oerjan> the service sucks
21:48:18 <atehwa> yes, it's an oldschool irc network if there ever was one :)
21:48:34 <CakeProphet> oerjan: yeah I want a refund.
21:51:53 <atehwa> wow, this wikipedia article is really interesting
21:52:01 <atehwa> http://en.wikipedia.org/wiki/IRCnet
21:52:34 <atehwa> but maybe that's just because I'm so interested in how social hierarchy works in the Internet
21:52:39 <elliott> I like the "with the support of Jarkko Oikarinen" part... IRCNet: God's Chosen Network
21:52:48 <elliott> oh, hmm, that was EFnet
21:53:01 <elliott> I wonder if it's even technically possible for freenode to split
21:53:09 <elliott> as in, permanently
21:53:30 <elliott> I don't really know much about server linking
21:54:11 <CakeProphet> I believe you could have a netsplit without a subsequent join, if that's what you mean.
21:54:25 <elliott> I know that part :P
21:54:30 -!- sllide has quit (Ping timeout: 258 seconds).
21:54:38 <elliott> I'm just wondering how easy it would be for half of freenode to split off and rename overnight
21:54:51 <atehwa> in IRC, server linking means that the servers share _all_ knowledge about nicks, channels, etc
21:55:32 <CakeProphet> elliott: sounds on the difficult side to me.
21:55:45 <CakeProphet> but it would be worth it...
21:55:54 <atehwa> elliott: so what do you think freenode could split off from?
21:56:02 <elliott> atehwa: no idea :P
21:56:05 <CakeProphet> irc.esonode.net
21:56:10 <elliott> CakeProphet: not /us/, server operators
21:56:11 <atehwa> :)
21:56:52 <CakeProphet> elliott: well, right
21:57:13 <elliott> but
21:57:18 <elliott> if they rename us to ##esoteric
21:57:22 <elliott> we should totally ditch this lame-ass network
21:57:48 <itidus20> humm.... is lambda calc level knowledge on the same level as knowing how to write compilers?
21:58:02 <atehwa> actually, the article about IRCnet is really interesting also in that it states many assumptions about IRC usage that I've taken for granted for a very long time
21:58:03 <elliott> no
21:58:04 <CakeProphet> no
21:58:08 <elliott> lambda calculus is easy
21:58:19 <CakeProphet> also there aren't levels of knowledge.
21:58:22 <elliott> so are compilers really, (just not the "traditional" kind), but they're harder than LC
21:58:28 <CakeProphet> one does not make it easier to do the other, and vice versa.
21:58:35 <atehwa> LC is just a rewrite system
21:58:47 <CakeProphet> atehwa: hey so are compilers. :P
21:58:49 <elliott> atehwa: I was raised on freenode, I assume so much :(
21:58:57 <atehwa> where you have first-class rewriting rules, and nothing else
21:59:33 <elliott> LC isn't much like rewriting rules (it's a rewrite system but not really a rewrite-system /language/) because they can't examine their inputs
21:59:37 <elliott> like, deconstruct them
21:59:40 <elliott> apart from applying them, of course
21:59:41 <atehwa> elliott: I assume, for instance, that no one will care if your channel is taken over
22:00:10 <elliott> haha
22:00:11 <itidus20> ok ok.. maybe i should ask
22:00:24 <itidus20> is lambda calc taught at a bachelor degree level?
22:00:30 -!- Sgeo has joined.
22:00:33 <elliott> atehwa: I assume that channels can't be taken over, except when freenode staff decide to do it to inactive mainspace channels because your nick dropped because you didn't log in for like a month
22:01:56 <itidus20> i.e. is lambda calc something you study when working on a phd or masters?
22:02:04 <elliott> lol
22:02:12 <elliott> lambda calculus is taught in any decent cs course
22:02:30 <atehwa> elliott: wow, talk about secure
22:02:54 <elliott> atehwa: I think it's actually something like thirty days that your nick can be dropped after
22:02:55 <itidus20> elliott: is it ever taught to a student working towards a bachelor's degree?
22:02:55 <elliott> or sixty days
22:02:57 <elliott> it's ridiculous
22:03:01 <elliott> itidus20: of course
22:03:40 <atehwa> elliott: nick wars still happen occasionally on IRCnet
22:03:49 <atehwa> there's no service to register nicks
22:04:09 <atehwa> nor should there be, probably
22:04:14 <elliott> atehwa: clearly you just need a bot to spam anyone who steals your nick without giving the password
22:04:38 <atehwa> what password? on IRCnet, there are no passwords
22:04:48 <atehwa> you protect your nick by being always present
22:04:58 <elliott> atehwa: The password the bot knows, duh.
22:05:09 <elliott> It's your own private NickServ, except instead of forcibly renaming you, it just tries to be really annoying.
22:05:20 <atehwa> :)
22:05:34 <Gregor> You could just have it join every channel that the nick purloiner joins and after every line, say "THIS PERSON IS A FRAUD. DO NOT LISTEN."
22:05:39 <atehwa> but it would have to be on every channel in order to notice a nick offender.
22:05:59 <elliott> atehwa: Nah, it'd just /whois every ten seconds.
22:06:08 <atehwa> ... and, on IRCnet, most server won't let you join 20+ channels
22:06:18 <atehwa> and that applies to bots, too.
22:06:26 <Gregor> The different servers on IRCnet have different join limits? :P
22:06:28 <atehwa> elliott: I suppose you mean /ison.
22:06:35 <elliott> atehwa: there's no whois on ircnet?
22:06:40 <atehwa> Gregor: yup.
22:06:47 <elliott> you finns are... so primitive :|
22:07:03 <atehwa> elliott: who should the bot do a /whois on?
22:07:23 <elliott> atehwa: your nick, duh
22:07:30 <elliott> or does whois require hostname
22:08:18 <atehwa> are you suggesting there should be a bot for _every_ user that wants their nick monitored?
22:08:42 <elliott> atehwa: obviously
22:08:46 <elliott> every _real_ channel has a bot
22:08:49 <elliott> every _real_ user has a bot
22:08:51 <elliott> botyguards
22:10:08 -!- augur has joined.
22:10:08 <atehwa> on IRCnet, channel bots are common, but user bots.. unheard of
22:10:15 <shachaf> > id runST (return 3)
22:10:17 <lambdabot> Couldn't match expected type `m t'
22:10:17 <lambdabot> against inferred type `forall s....
22:10:19 <shachaf> > (id runST) (return 3)
22:10:21 <lambdabot> 3
22:10:21 <atehwa> because every _real_ user has a screen
22:10:21 <shachaf> elliott: u mad?
22:10:28 <elliott> atehwa: Well clearly I need to innovate.
22:10:36 <elliott> shachaf: Augh, what. That's a GHC bug, right?
22:10:46 <elliott> I know rank-N types do that kind of thing, but...
22:10:48 <elliott> Surelyn ot.
22:10:55 <elliott> Yes, surelyn ot.
22:10:59 <shachaf> elliott: GHC bug? Come on, it's the parentheses.
22:10:59 <Gregor> On SovietRussiaNet, users manage network services.
22:11:08 <elliott> shachaf: BUT THOSE SHOULD PARSE IDENTICALLY
22:11:14 <shachaf> The more parentheses you add, the closer it is to LISP, and therefore the more dynamically-typed.
22:11:41 <elliott> shachaf: ;_____;
22:11:43 <Gregor> `addquote <shachaf> elliott: GHC bug? Come on, it's the parentheses. <shachaf> The more parentheses you add, the closer it is to LISP, and therefore the more dynamically-typed.
22:11:46 <HackEgo> 662) <shachaf> elliott: GHC bug? Come on, it's the parentheses. <shachaf> The more parentheses you add, the closer it is to LISP, and therefore the more dynamically-typed.
22:12:06 <shachaf> Ugh.
22:12:20 <Gregor> Welcome to the out-of-context quote database!
22:12:22 <Gregor> Enjoy your stay!
22:12:25 <elliott> shachaf: You've been QUOTED.
22:13:31 <Sgeo> `quote tusho
22:13:33 <HackEgo> No output.
22:13:39 <Sgeo> `quote ehird
22:13:41 <HackEgo> 19) <oerjan> ehird has gone insane, clearly. \ 24) <oerjan> In an alternate universe, ehird has taste \ 25) IN AN ALTERNATE UNIVERSE: <oerjan> In an alternate universe, I would say "In an alternate universe, ehird has taste" \ 26) <ehird> so i can only conclude that it is flawed, or the world is utterly bonkers \ 27) IN EINEM
22:13:54 <elliott> `pastequotes
22:13:56 <HackEgo> http://codu.org/projects/hackbot/fshg/index.cgi/raw-file/tip/paste/paste.1312
22:13:56 <elliott> Now you have all the quotes.
22:13:57 <elliott> `pastelogs
22:13:59 <elliott> Also some logs.
22:14:13 <HackEgo> http://codu.org/projects/hackbot/fshg/index.cgi/raw-file/tip/paste/paste.19059
22:14:29 <Gregor> Also, every True Scotsman has a bot.
22:14:36 <Gregor> Phantom_Hoover: Right?
22:14:43 <elliott> Who's Phantom_Hoover's bot? elliott?
22:14:43 <Phantom_Hoover> Yes.
22:14:48 <Phantom_Hoover> To both.
22:15:05 <elliott> Do we really have over 650 quotes?
22:15:11 <Gregor> Apparently.
22:15:20 -!- sebbu2 has joined.
22:15:20 -!- sebbu2 has quit (Changing host).
22:15:20 -!- sebbu2 has joined.
22:15:37 <Sgeo> Not all of them are #esoteric
22:16:11 <elliott> All of the good ones are.
22:16:16 <elliott> Also all of the ones beyond like quote fifty.
22:16:19 <elliott> Gregor: I don't like how you liked Python in 2006.
22:17:00 <Sgeo> 107 < 50 according to elliott
22:17:14 <elliott> I thought you were hurrying to school.
22:17:29 <Sgeo> I'm done hurrying to school
22:17:45 <elliott> Hurry some more.
22:17:50 <Gregor> I'm fairly certain I didn't know Python in 2006.
22:18:10 <elliott> Gregor: You did.
22:18:14 * Sgeo is listening to the professor drone about HTM
22:18:15 <Sgeo> HTML
22:18:16 <elliott> It was your "preferred non-web scripting language".
22:18:16 -!- sebbu has quit (Ping timeout: 260 seconds).
22:18:28 <Gregor> I suppose that's a distinct possibility :P
22:18:29 <elliott> http://eris.berkeley.edu/ hahaha
22:18:37 <Gregor> I have since discovered that Python is extremely terrible.
22:18:45 <elliott> <HackEgo> 2011-09-13.txt:22:18:16: <elliott> It was your "preferred non-web scripting language".
22:18:49 <elliott> That does not help my tab recovery, HackEgo.
22:18:53 <elliott> <elliott> `log preferred non-web
22:18:54 <elliott> <HackEgo> 2011-09-13.txt:22:18:45: <elliott> <HackEgo> 2011-09-13.txt:22:18:16: <elliott> It was your "preferred non-web scripting language".
22:18:54 <elliott> Dude.
22:19:04 <Gregor> :P
22:19:13 <Gregor> You SURE you don't want to filter HackEgo? :P
22:19:16 <elliott> 2006-04-22.txt:06:13:58: <GregorR> That being said, I now have a non-web scripting language of preference, which is good because perl is amazingly bad.
22:19:23 -!- DH____ has joined.
22:19:35 <elliott> 06:09:58: <lament> i like python
22:19:35 <elliott> 06:12:53: <GregorR> lament: DAMN YOU AND YOUR GOOD PROGRAMMING LANGUAGE!!!!!!!!!!!!!!!!
22:19:35 <elliott> 06:13:58: <GregorR> That being said, I now have a non-web scripting language of preference, which is good because perl is amazingly bad.
22:19:35 <elliott> 06:14:22: <lament> heh
22:19:35 <elliott> 06:15:04: <GregorR> I still don't enjoy the whole no-block-ending-keyword thing, but I'm learning to grok that, and it's a small price to pay.
22:19:37 <elliott> 06:15:59: <lament> don't worry, you'll enjoy it soon enough.
22:19:39 <elliott> 06:16:08: <lament> it's really way better than any other way.
22:19:41 <elliott> 06:17:28: <GregorR> I just don't like that you can end multiple blocks in one swift move, especially since it can sometimes be unclear exactly what block you just dropped to >_>
22:19:44 <elliott> PROOF
22:19:59 <Gregor> Tastes change *shrugs*
22:20:04 <Phantom_Hoover> `log stupid
22:20:06 <elliott> Um no sorry you are Bad Forever.
22:20:08 <HackEgo> 2011-01-28.txt:23:27:51: <quintopia> elliott: you would be stupid to do that. you can create fenced off areas indoors.
22:20:29 <Sgeo> am i bad forever
22:20:41 <elliott> Sgeo: yes.
22:21:55 <CakeProphet> elliott: also you're not allowed to read logs of me with that nickname. :P
22:22:07 <elliott> CakeProphet: Whyn't
22:22:11 <elliott> I really need to slog through the entire Kernel report sometime.
22:22:13 <CakeProphet> because I was young and naive.
22:22:22 <Phantom_Hoover> `log Sgeo
22:22:24 <CakeProphet> totally different from now.
22:22:27 <HackEgo> 2010-08-28.txt:22:43:01: <Sgeo> Anything with "Taxi" in the name should be an interpreter for Taxi
22:22:30 <elliott> CakeProphet: now you're old and naive.
22:22:41 <elliott> `log Oegs
22:22:42 <CakeProphet> makes a huge difference.
22:22:45 <HackEgo> 2009-08-03.txt:19:06:11: <HackEgo> \ I'm the one who created this project. Known as Sgeo almost everywhere I'm known, one place as Oegs, and one place as Sgeo2.
22:23:43 <CakeProphet> elliott: old and less naive for sure.
22:24:00 <CakeProphet> consider that I now know that lambdas and list comprehensions do not do the same things. :P
22:24:11 <CakeProphet> see how far I've come?
22:24:44 <itidus20> ok thinking again
22:24:54 <CakeProphet> itidus20: that's never good.
22:24:58 <oerjan> `log thinking
22:25:02 <HackEgo> 2009-09-20.txt:15:44:23: <AnMaster> ehird, ooh nice, but I was thinking more along the lines of rougelike in 3D
22:25:19 <CakeProphet> itidus20: I try to block out all thinking as much as possible.
22:25:27 <itidus20> so i could potentially invent my own notation such as: "λx." = "X"
22:25:28 <itidus20> and..
22:25:31 <itidus20> therefore
22:25:45 <itidus20> "λx.x" = "Xx"
22:25:49 <CakeProphet> uh, sure
22:26:03 <CakeProphet> that's how notation works, yep.
22:26:15 <oerjan> itidus20: please google "wadler's law"
22:26:33 <itidus20> "λf.λx.f (f x)" = "FXf(fx)"
22:26:50 <CakeProphet> oerjan: hahaha
22:27:08 <itidus20> i know that capital letter has another use in LC but just saying
22:28:58 <CakeProphet> I have a notation whereby x is a function that solves the halting problem for all inputs.
22:29:04 <CakeProphet> x
22:29:14 <CakeProphet> man that sure was fun.
22:29:19 <itidus20> so with what i am saying here can all LC expressions be expressed by the alphabet and parentheses?
22:30:14 <itidus20> assuming a maximum of 26 variables of course
22:30:15 <elliott> I like how you can tell when oerjan gives up.
22:30:28 <itidus20> ok wadlers law
22:31:06 -!- DH____ has quit (Ping timeout: 260 seconds).
22:31:07 <oerjan> itidus20: trivially so
22:31:37 <itidus20> elliott: ah but i am trying to determine which parts of LC can flex and bend without making any difference
22:32:00 <elliott> itidus20: before you actually understand it? ok
22:32:06 <elliott> i am sure itw ill help
22:32:06 <itidus20> a second syntax i thought of was using coloured blocks to represent expressions
22:32:13 <CakeProphet> ...
22:32:19 <CakeProphet> pretty
22:32:19 <itidus20> well there is nothing outside of the expressions
22:32:21 <oerjan> itidus20: ooh, google "alligator eggs"
22:32:33 <elliott> http://worrydream.com/AlligatorEggs/
22:32:34 <elliott> googled for you
22:32:55 <CakeProphet> elliott: fastest googler in the west.
22:32:56 <itidus20> already seen the alligator eggs and the bird calls at an earlier stage...
22:33:17 <elliott> CakeProphet: Technically I used DDG.
22:33:27 <CakeProphet> elliott: what? ...what?
22:33:31 <CakeProphet> how could you do such a thing?
22:33:39 <itidus20> i couldn't make sense of the bird calls though
22:33:43 <itidus20> too many lines
22:34:05 <elliott> CakeProphet: What.
22:34:20 <CakeProphet> elliott: if you google "furry strapon girls" and then use duckduckgo to search for "furry strapon girls"
22:34:26 <CakeProphet> you will see a distinct difference in the number of hits.
22:34:27 <oerjan> elliott: it's ok, ducks lay eggs too
22:34:37 <elliott> CakeProphet: I'm sure the former results are mostly junk
22:34:44 <elliott> seeing as Gregor was the first person to say that
22:34:47 <elliott> well
22:34:49 <elliott> TO MY KNOWLEDGE
22:34:52 <CakeProphet> elliott: but more representative of what you might find on the internet.
22:35:04 <elliott> I don't care what the internet has, I care about useful results
22:35:17 <elliott> In my trial, I found that DDG provided more useful results to me than Google on average
22:35:23 <CakeProphet> first hit: "furry strapon images"
22:35:26 <CakeProphet> wasn't that helpful?
22:35:29 <Gregor> If I was the first person to say that, then my life is sad.
22:35:31 <elliott> I also preferred the UI and don't trust Google much, so I decided to switch to DDG
22:35:33 <CakeProphet> you got exactly what you looked for.
22:35:39 <Gregor> As furry strapon girls are the solution to nearly every problem.
22:36:25 <itidus20> just like.. in arithmetic the main thing is i have to arrange numbers and operators.. and then i can rewrite them and gradually arrive at a single number.. unless there are variables in the arithmetic expression
22:36:29 <CakeProphet> Gregor: and DDG is highly lacking in this realm.
22:36:31 <CakeProphet> shame.
22:36:39 <itidus20> which will mean i arrive at numbers and varables
22:37:08 <CakeProphet> itidus20: only numbers and variables? x 12 45 y is not valid I think.
22:37:15 <CakeProphet> surely you also have operators.
22:37:23 <itidus20> hmmm
22:37:28 <itidus20> ok also operators
22:37:48 <itidus20> and.. i can always take an operator and combine 2 arithmetic expressions
22:38:26 <itidus20> so a variable tends to imply part of an expression which is rewritable
22:38:38 <CakeProphet> all parts of an algebraic expression are rewritable.
22:38:40 <elliott> oerjan: having fun?
22:38:45 <CakeProphet> not just variables.
22:39:04 <itidus20> hummm
22:39:06 <itidus20> ok ok
22:39:12 <CakeProphet> x + y = z + a
22:39:24 <CakeProphet> now those expressions are interchangeable.
22:39:26 <CakeProphet> along with others.
22:39:48 <itidus20> the operators are defined in such a way that you can always take any expression1 and rewrite it into: expression1 + expression2
22:39:52 <CakeProphet> but I'm not really sure what the point of this topic is.
22:40:07 <CakeProphet> itidus20: what?
22:40:13 <itidus20> in algebra that is the case
22:40:17 <CakeProphet> uh, no?
22:40:49 <CakeProphet> rewrite x*y as expression1 + expression2
22:40:56 <oerjan> expression1 + e^(i*pi) + 1
22:40:57 <CakeProphet> ...oh wait
22:40:58 <CakeProphet> lol
22:40:59 <CakeProphet> wjehriuwheuthwryg
22:41:01 <itidus20> x*y + expression2
22:41:17 <itidus20> i just worded it badly cos im not a mathematician >.<
22:41:17 <CakeProphet> oerjan: counterexample plz
22:41:33 <itidus20> ^ (x*y) + expression2
22:41:42 <oerjan> CakeProphet: it's rather hard to give a counterexample to something that is technically true.
22:42:08 <CakeProphet> ...oh.
22:42:11 <CakeProphet> yeah. nevermind. :P
22:42:15 <itidus20> for any expression1, you can have something like expression1 + expression2,.. you can do some kind of: (x*y) + expression2
22:42:30 <CakeProphet> I have two, which can also be 2 + 0 + 0 + 0 + 0 + 0 + 0 + 0
22:42:34 <itidus20> i lose control of my english grammar at such times
22:42:50 <itidus20> oh yes.. expression + 0 = expressin
22:42:59 <CakeProphet> profound.
22:43:03 <itidus20> oh yes.. expression * 1 = expression
22:43:23 <oerjan> it's called having an identity element
22:43:26 <itidus20> (sorry didn't mean to retype oh yes) expression / expression = expression
22:43:32 <CakeProphet> .......
22:43:33 <elliott> Gregor: Hey, can you stop all thirty-two bit machines from existing?
22:43:38 <elliott> itidus20: N...
22:43:39 <CakeProphet> itidus20: yep, that's how division works.
22:43:39 <elliott> No...
22:43:40 <itidus20> expression - 0 = expression
22:43:40 <CakeProphet> don't let them
22:43:43 <oerjan> mind you, you _can_ define operators which don't have any
22:43:46 <CakeProphet> don't let them try to convince you otherwise.
22:43:50 <CakeProphet> they're lying.
22:43:52 <Gregor> Bahaha, "Take Penfold, he could be useful as a sacrifice."
22:44:11 <Gregor> `run uname -a | sed 's/^/elliott: PROBLEM SOLVED. /'
22:44:13 <HackEgo> elliott: PROBLEM SOLVED. Linux (none) 3.0.1-umlbox #5 Fri Aug 19 13:17:44 UTC 2011 x86_64 GNU/Linux
22:44:29 <elliott> Gregor: Thanks. Also are you watching Dangermouse.
22:44:33 <CakeProphet> itidus20 is kind of the algebras.
22:44:34 <elliott> Is that because Taneb mentioned Dangermouse.
22:44:41 <elliott> Dangermouse is quality British culture.
22:44:43 <CakeProphet> s/kind/king/
22:44:53 <itidus20> elliott: i realise that is algebra and not LC which i am typing
22:44:54 <Gregor> elliott: No, I was watching Danger Mouse /when/ Taneb mentioned it.
22:45:00 <Gregor> elliott: And am still watching it.
22:45:01 <elliott> itidus20: no, x/x is not the same thing as x.
22:45:03 <elliott> what's 9/9
22:45:06 <elliott> Gregor: keep doing that
22:45:10 <CakeProphet> elliott: 9!
22:45:16 <itidus20> oops
22:45:19 <itidus20> i got confused then
22:45:23 <Phantom_Hoover> itidus20, what is x/x
22:45:28 <itidus20> expression / 1 = expression :P sorry
22:45:34 <Gregor> If you say "1" I'll punch you :P
22:46:07 <CakeProphet> well, now that x/x != x
22:46:12 <CakeProphet> there is nothing esoteric about this topic.
22:46:25 <Gregor> elliott: The thing I don't get is ... was this ever a kids show? It was presented to me as such, but as far as I can tell, no kid would get it :P
22:46:31 * Phantom_Hoover → sleep
22:46:49 -!- Phantom_Hoover has quit (Quit: Leaving).
22:47:06 <elliott> Gregor: Dude, we have smart kids in britain.
22:47:21 <elliott> I watched Danger Mouse as a kid, at least :P
22:47:47 <Gregor> Oh.
22:47:51 <elliott> What.
22:47:52 <Gregor> 'cuz we have stupid kids in the USA.
22:47:56 <elliott> Yes.
22:47:57 <itidus20> expression = 0... expression/expression = 1?
22:47:58 <itidus20> :P
22:48:08 <Gregor> And cartoons are just an alternative to ritalin.
22:48:10 <elliott> Gregor: Have you watched Top Cat -- wait you're American of course you've seen the entire Hanna-Barbera output.
22:48:16 <elliott> (Hanna-Barbera: So bad?)
22:48:19 <Gregor> itidus20: You need the hospital's rule.
22:48:20 <itidus20> no time for me to stfu
22:48:31 <itidus20> ^no. time for me to stfu
22:49:13 <CakeProphet> Gregor: does the hospital's rule involve you punching someone?
22:49:31 <itidus20> l'hopital
22:49:35 <itidus20> according to wiki
22:49:39 <CakeProphet> -_-
22:50:01 <itidus20> chances of me comprehending < chances of elliott winning the lottery this week ... :D
22:50:14 <elliott> A good self-fulfilling prophecy.
22:50:30 <CakeProphet> I am a self-fulfilling prophet.
22:50:34 -!- elliott has quit (Remote host closed the connection).
22:50:41 <itidus20> elliott: do you think i should study hospital's rule?
22:50:52 <CakeProphet> itidus20: you need to... focus. :P
22:50:56 <CakeProphet> on one thing
22:50:57 <CakeProphet> and learn that
22:50:57 -!- elliott has joined.
22:50:59 <itidus20> hang on.. zero over zero
22:51:14 <CakeProphet> and not jump from lambda calculus to basic algebra to regular calculus.
22:51:15 <oerjan> elliott: i thought you were doing an ais-style quit there
22:51:27 <CakeProphet> and not understand any of them very well.
22:51:28 <elliott> oerjan: no, i was restarting X.
22:51:29 <itidus20> maybe i was onto something there.. hahaha..
22:51:36 <elliott> oerjan: it's rage_/parts_ that ais does, not /quits.
22:51:48 * CakeProphet has exactly one rage part.
22:51:56 <itidus20> `log hospital
22:51:59 <HackEgo> 2011-08-02.txt:21:01:29: <Taneb> "Heatwave bone breaks clog hospital."
22:52:04 <itidus20> `log hospital
22:52:08 <HackEgo> 2011-01-31.txt:02:39:52: <elliott> What surprises some observers, including advice columnist Ann Landers, is the extent to which people hold strong opinions on such a trivial topic. Defenders of either position cite advantages ranging from aesthetics, hospitality, and cleanliness; to paper conservation and the ease of detaching
22:52:18 <itidus20> hehehe
22:52:19 <oerjan> `log l'hopital
22:52:22 <HackEgo> 2011-09-13.txt:22:52:19: <oerjan> `log l'hopital
22:52:26 <elliott> `log l'hopital
22:52:30 <HackEgo> 2010-03-12.txt:16:18:45: <fax> AnMaster, it's just exploring the convergence/divergence of sequences of real numbers, then series (running totals of sequences), then lim & integrability - the big theorem from it is l'hopital
22:53:19 <CakeProphet> `log `log
22:53:22 <HackEgo> 2011-09-13.txt:17:35:40: <HackEgo> 2011-09-13.txt:17:35:26: <monqy> `log `log
22:53:23 <itidus20> anmaster gets it now
22:53:35 <itidus20> `log `log log
22:53:38 <HackEgo> 2011-09-13.txt:18:33:30: <itidus20> `log log
22:53:40 <Gregor> >_<
22:53:52 <CakeProphet> `log log log
22:53:55 <HackEgo> 2010-09-17.txt:13:05:54: <Vorpal> since clog logs doesn't include anything but nick
22:54:05 <CakeProphet> :)
22:54:07 <Gregor> Hm
22:54:12 <Gregor> I have "OH GOD NOOOOOOOO" on my clipboard.
22:54:16 <Gregor> And no idea why.
22:54:29 <CakeProphet> someone is trapped in your clipboard
22:54:30 <elliott> Gregor: It's your OS.
22:54:32 <itidus20> `log `log `log log
22:54:34 <elliott> Gregor: It wants to be @.
22:54:36 <HackEgo> 2011-09-13.txt:22:53:35: <itidus20> `log `log log
22:54:50 <itidus20> a nice easter egg for someone to find oneday perhaps
22:55:08 <CakeProphet> `log dick nipples
22:55:11 <HackEgo> 2011-09-13.txt:22:55:08: <CakeProphet> `log dick nipples
22:55:24 <Sgeo> `log PSOX
22:55:25 <CakeProphet> a nice easter egg for someone to find.
22:55:28 <HackEgo> 2007-12-30.txt:21:30:38: * Sgeo considers PSOX.py to be a bit of a project
22:55:37 <Sgeo> `log PSOX
22:55:38 <elliott> `log PSOX sucks
22:55:41 <HackEgo> 2009-05-30.txt:01:52:52: <pikhq> goonx: It's kinda impoſsible, aſide from PSOX.
22:55:42 <HackEgo> 2007-09-10.txt:17:10:09: <bsmntbombdood> PSOX stands for "PSOX Sucks Other's Xenophobia"
22:55:49 <itidus20> `log stardate
22:55:53 <HackEgo> 2008-12-22.txt:05:59:12: <lolbot> Oh, that sound of male ego. You travel halfway across the galaxy and it's still the same song...-- Eve McHuron, "Mudd's Women", stardate 1330.1
22:55:57 <Gregor> elliott: By the way, you've better have watched Rocky and Bullwinkle *evil eye*
22:56:03 <elliott> `logurl 2008-12-22.txt:05:59:12:
22:56:04 <HackEgo> http://codu.org/logs/log/_esoteric/2008-12-22
22:56:08 <elliott> Gregor: >__________________________________________---__> i think i saw it once?????????//////////
22:56:16 <elliott> look ok usa cartoons are just not as good as uk cartoons
22:56:41 <Gregor> Rocky and Bullwinkle is better than EVERYTHING
22:56:42 <Sgeo> Avatar: The Last Airbender isn't good?
22:56:48 <CakeProphet> elliott: typical UK mind virus dronespeak
22:56:53 <CakeProphet> all US things are superior to UK things.
22:57:05 <itidus20> `log turtle
22:57:08 <HackEgo> 2011-02-11.txt:15:24:34: <Gregor> !bfjoust raping_turtle <
22:58:01 <itidus20> i was thinking of ninja turtles but, the comic was american, the animation was japanese
22:58:05 <Lymee> !bfjoust hi -*100000
22:58:08 -!- nooga has joined.
22:58:09 <CakeProphet> ITT: read things that were said in the past instead of talking in the present.
22:58:10 <tiffany> o.o
22:58:14 <EgoBot> ​Score for Lymee_hi: 8.1
22:58:15 * Lymee hugs tiffany ^^
22:58:21 * tiffany hugs lymee ^_^
22:58:46 * Gregor expands the vertical smiley ^__^
22:59:01 <oerjan> what's ITT again
22:59:18 <elliott> Is that a bot.
22:59:28 <CakeProphet> in this thread
22:59:31 <CakeProphet> or topic, I guess.
23:00:31 <CakeProphet> oerjan: an excellent way to make meta-observations about a conversation.
23:00:58 <oerjan> ITT: excellent meta-observations
23:01:01 <itidus20> some day i hope someone makes a calculus of notations
23:01:33 <CakeProphet> but you don't really know what that means.
23:02:09 <oerjan> there are almost surely several possible meanings of that phrase for which someone already did
23:02:17 <itidus20> the problem i need to solve is to increase my personal understanding of all existant notations while not negating the benefits of that feat
23:02:37 <Lymee> !bfjoust bye +*100000
23:02:37 <oerjan> BNF comes to mind
23:02:39 <CakeProphet> notations aren't even really that interesting.
23:02:40 <EgoBot> ​Score for Lymee_bye: 8.1
23:02:50 <Lymee> !bfjoust hi -*128
23:02:53 <EgoBot> ​Score for Lymee_hi: 8.1
23:02:58 <Lymee> !bfjoust bye [+]
23:03:01 <EgoBot> ​Score for Lymee_bye: 15.4
23:03:05 <Lymee> wat
23:03:12 <Lymee> !bfjoust hi [-]
23:03:16 <EgoBot> ​Score for Lymee_hi: 15.4
23:03:17 <Lymee> how does that
23:04:08 <elliott> itidus20: you want to know the metalevel before the base level?
23:04:18 <elliott> deconstructing notation will not help you learn anything.
23:04:24 <elliott> it is an excuse.
23:04:32 <itidus20> im good at excuses
23:04:37 <elliott> indeed.
23:04:42 <CakeProphet> !bfjoust a_dozen_tits_many_success (.)*12[+]
23:04:48 <CakeProphet> !bfjoust a_dozen_tits_many_success (.)*12[+]
23:04:52 <EgoBot> ​Score for CakeProphet_a_dozen_tits_many_success: 15.4
23:05:06 <itidus20> let me formalize that now
23:05:16 <CakeProphet> >_>
23:05:51 <itidus20> the part of my psyche which is being passive aggressive is good at excuses
23:05:55 <CakeProphet> itidus20 is playing with toys.
23:06:10 * CakeProphet <--- expert psychologist
23:06:35 <itidus20> it is not for me to identify with my passive aggression.. to glamourize it
23:06:44 <itidus20> although i do anyway
23:07:09 <CakeProphet> !bfjoust a_dozen_pairs_of_tits_many_success (.)*24[+]
23:07:12 <EgoBot> ​Score for CakeProphet_a_dozen_pairs_of_tits_many_success: 15.4
23:07:17 <itidus20> so that is the error in "im good at excuses"
23:08:19 <Lymee> !bfjoust not-so-perverted successes .*23[+]
23:08:22 <EgoBot> ​Score for Lymee_not-so-perverted: 15.6
23:08:25 <itidus20> its probably even worse to try to de-identify with it... thats a cultish thing to do
23:08:28 <Lymee> !bfjoust not_so_perverted_successes .*23[+]
23:08:32 <EgoBot> ​Score for Lymee_not_so_perverted_successes: 15.6
23:08:51 -!- CakeProphet has set topic: Freudian armchair psycho-babble | It is the 90s and there is time for the requirements of supervision and control of transmissible spongiform encephalopathies, also an Esolang event @ Hel/Finland on 3.10.2011: https://wiki.helsinki.fi/display/lambda/esoteeriset+ohjelmointikielet | god bless haskell america | 12345678!& | http://codu.org/logs/_esoteric/.
23:09:04 <elliott> Gregor: How does Fythe do parsing, again
23:09:07 <oerjan> is .*23 actually recognized
23:09:15 <elliott> probably not
23:09:42 <Gregor> elliott: Quite well, thank you.
23:09:49 <elliott> Gregor: Not helpful
23:09:59 <Gregor> elliott: It's a memoized recursive descent parser (AKA a ratpack parser)
23:09:59 <Lymee> !bfjoust test0 >*2<
23:10:02 <EgoBot> ​Score for Lymee_test0: 6.8
23:10:05 <Lymee> Erm
23:10:08 <Gregor> Err ... packrat
23:10:11 <Lymee> !bfjoust test0 ><*2
23:10:14 <EgoBot> ​Score for Lymee_test0: 6.8
23:10:16 <Lymee> !bfjoust test1 ><
23:10:19 <EgoBot> ​Score for Lymee_test1: 6.8
23:10:24 <Lymee> !bfjoust test2 >(<)*2
23:10:27 <EgoBot> ​Score for Lymee_test2: 0.0
23:10:28 -!- oerjan has set topic: Freudian armchair psycho-babble | It is the 90s and there is time for the requirements of supervision and control of transmissible spongiform encephalopathies, also an Esolang event @ Hel/Finland on 3.10.2011: https://wiki.helsinki.fi/display/lambda/esoteeriset+ohjelmointikielet | god bless haskell america | 12345678!& | http://codu.org/logs/_esoteric/.
23:10:29 <Lymee> Nope!
23:10:31 <CakeProphet> >< = "grrr"
23:10:32 <elliott> Gregor: Right, so PEGs.
23:10:41 <CakeProphet> the infamous grr strategy.
23:10:41 <elliott> Gregor: Isn't packrat parsing kinda slow? :P
23:10:41 <Gregor> Yes
23:10:45 <Gregor> No
23:10:48 <Lymee> !bfjoust not-so-pervertedly-named-successes (.)*23[+]
23:10:50 <elliott> I thought it was.
23:10:52 <EgoBot> ​Score for Lymee_not-so-pervertedly-named-successes: 15.2
23:10:52 <Gregor> It's O(n)
23:11:07 <elliott> The step could be really expensive :P
23:11:11 <CakeProphet> oerjan: what is different in that one?
23:11:30 <elliott> Apparently there's already a PEG parser for Haskell but I BET IT SUCKS.
23:11:32 <Gregor> elliott: If you have an enormously-ambiguous grammar, it can be memory-expensive.
23:11:51 <oerjan> CakeProphet: less horribly evil spacing
23:11:58 <Gregor> Otherwise, it's roughly the same speed as recursive descent parsing, but with a better worst-case.
23:12:29 <Lymee> !fyb plzreport +!
23:12:40 <elliott> Gregor: Right. I'm just tired of not being able to write left-recursive grammars :)
23:12:46 <EgoBot> ​Score for Lymee_plzreport: 23.1
23:13:01 <Gregor> elliott: Fythe supports left recursion with a simple transformation.
23:13:07 <elliott> I thought PEGs did in general.
23:13:12 -!- pikhq_ has quit (Ping timeout: 240 seconds).
23:13:17 -!- pikhq has joined.
23:13:32 <elliott> I wonder if I can get left-recursion working without observable sharing... (oerjan?)
23:13:48 <elliott> I'd have to try and look for the /RHS/ of any e.g. sequencing operator, as well as trying to see if the LHS will parse...
23:14:03 <Gregor> elliott: Sort of a definitional thing ...
23:14:05 <elliott> Then see if the string up to there is a valid LHS, and so on, until there's no more RHSs left in the string
23:14:06 <oerjan> eek
23:14:06 <elliott> At least I think so.
23:14:16 <elliott> Obviously it's a lot SIMPLER with observable sharing :P
23:14:27 <elliott> And I bet Gregor has no idea what I'm talking about because he doesn't know what observable sharing is, and so thinks I'm a total kook.
23:14:28 <elliott> THEM HASKELLERS
23:14:59 <oerjan> haskellers can be observed to share
23:15:14 <Gregor> Lies
23:15:27 <elliott> Gregor: DO you know what observable sharing is? :-P
23:15:34 <Gregor> Lies
23:15:49 <elliott> Gregor: That's a weird way of saying no X-D
23:16:07 <Gregor> I would assume that it's a situation where, for efficiency sake, two immutable objects are referentially identical, and that fact is not supposed to be observable, but is
23:16:16 <elliott> Sort of.
23:16:23 <Gregor> (Two properly equal immutable objects of course)
23:16:25 <elliott> It basically means you can extract the graph out of "x = f x y".
23:16:36 <elliott> Normally, you can't tell that the first parameter to x is shared with the object itself.
23:16:48 <elliott> But with some unsafeness (which you can wrap around), you can obviously tell it is.
23:16:51 <elliott> By storing a unique identifier with x.
23:16:58 <elliott> (There's other ways to do it too, but that's the most common._
23:16:59 <elliott> )
23:17:08 <elliott> Basically it's reifying the graph of pointers from an object :P
23:17:21 <oerjan> elliott: bad idea: recurse on the length of how much you're allowed to match
23:17:23 <elliott> So obviously you can do left-recursion if you have it, because you can tell that
23:17:26 <elliott> x = x, 'a'
23:17:30 <elliott> is left-recursive.
23:17:44 <elliott> Whereas if you don't do observable sharing, you just have to look at the right argument before you go recursing leftwards :P
23:17:46 <elliott> Or do both at once, or whatever.
23:18:18 <oerjan> that may have issues with empty strings matching non-terminals though
23:18:29 <elliott> oerjan: Eh?
23:18:35 <elliott> Erm, I mean
23:18:40 <elliott> x = '' | x, 'a'
23:18:44 <elliott> Which is obviously just a+.
23:19:29 <oerjan> elliott: if when you match that second x, it is not allowed to match as long a string as the whole...
23:19:58 <elliott> oerjan: The idea is to look for an "a" somewhere in the string, then see if the string /before/ that a matches "x". If so, then it's a match. If not, then you look for the /next/ "a", and see if the string before that matches x.
23:20:10 <elliott> And so on, until there are no more "a"s in the string; then you know it doesn't parse.
23:20:45 <elliott> I think if you do that in parallel (deterministic parallelism, obviously) with seeing if there's an x at the start, and then going on to 'a', means that you can parse both left- and right- recursive grammars.
23:20:47 <elliott> Not sure though.
23:21:57 <elliott> And then oerjan stopped listening to me :P
23:22:07 <oerjan> i wasn't talking about your idea anyhow
23:22:22 <elliott> Well, I didn't understand what you were criticising.
23:22:30 <oerjan> myself
23:22:38 <elliott> xD
23:22:46 <CakeProphet> -_;;;
23:22:56 <elliott> ;_____________;
23:22:59 <oerjan> i just thought of a bad idea for left-recursing without observable sharing
23:23:11 <elliott> what was the idea? just out of curiosity
23:23:23 <elliott> Gregor: By O(n), you meant in the length of the input string, right?
23:23:46 <Gregor> Of course
23:23:48 <itidus20> bad idea means "idea which is so good that merely calling it good would not express the magnitude of it's goodness"
23:23:50 <oerjan> to include a parameter for how long a string you're allowed to match, which must be decremented when recursing
23:24:17 <elliott> oerjan: ah
23:24:23 <elliott> oerjan: what was the problem with that?
23:24:45 * elliott wonders if PEGs are monadic or just applicative...
23:25:26 <elliott> Gregor: Do PEGs have a|b = b|a? I really should know more about them :/
23:25:45 <oerjan> if one nonterminal can consist entirely of another, then it's not safe to decrement
23:25:48 <Gregor> elliott: They don't.
23:25:54 <elliott> Gregor: :'(
23:25:57 <elliott> Gregor: Why not?
23:26:10 <Gregor> elliott: Because if you implement that, it's more than O(n) :)
23:26:14 -!- nooga has quit (Ping timeout: 260 seconds).
23:26:25 <Gregor> (In memory, not time)
23:26:35 <elliott> Gregor: Are you suuuure? :(
23:26:45 <elliott> No way around that? :P
23:27:05 <Gregor> Nothing comes to mind.
23:27:20 <elliott> Gregor: You could deterministically rearrange all alternatives before parsing :P
23:27:41 <Gregor> elliott: That doesn't help if it's properly ambiguous.
23:27:59 <elliott> Like whaddya mean?
23:28:50 -!- pikhq_ has joined.
23:28:52 -!- pikhq has quit (Ping timeout: 252 seconds).
23:30:45 -!- kmc has quit (Quit: Leaving).
23:31:24 <Gregor> elliott: If there exists a nonterminal in your grammar which can correctly parse two different lengths of input, but then only one will be selected as correct by a parser higher in the hierarchy, there's no way to guess which to choose.
23:33:03 <elliott> Gregor: Why are ambiguous grammars even accepted >_>
23:33:31 <elliott> "The fundamental difference between context-free grammars and parsing expression grammars is that the PEG's choice operator is ordered. If the first alternative succeeds, the second alternative is ignored. Thus ordered choice is not commutative, unlike unordered choice as in context-free grammars and regular expressions. Ordered choice is analogous to soft cut operators available in some logic programming languages."
23:33:32 <elliott> Bah :P
23:33:38 <elliott> Can we just do all parsing with Prolog?
23:33:47 <oerjan> determining whether a grammar is ambiguous is undecidable
23:33:53 <elliott> oerjan: Oh right :P
23:34:04 <elliott> oerjan: I knew that, it just didn't occur to me >_>
23:34:21 <elliott> "Compared to pure regular expressions (i.e. without back-references), PEGs are strictly more powerful, but require significantly more memory. For example, a regular expression inherently cannot find an arbitrary number of matched pairs of parentheses, because it is not recursive, but a PEG can. However, a PEG will require an amount of memory proportional to the length of the input, while a regular expression matcher will require only a constant a
23:34:22 <elliott> mount of memory."
23:34:30 <elliott> Hmm
23:34:40 <elliott> What's the memory usage of an LR(one) parser anyway
23:34:55 <elliott> I am so un-clued-up-on wrt parsers :|
23:34:56 <Gregor> Lower than a PEG :P
23:35:30 <elliott> If you have a PEG parser that produces an infinite list, can you GC the memory if you keep taking the tail of that list?
23:35:32 <elliott> Like...
23:35:35 <CakeProphet> elliott: I wonder how much memory a regex that parses matches parens uses.
23:35:39 <elliott> Can you match 'a'+ to an infinite list of as
23:35:39 <CakeProphet> compared to a PEG.
23:35:44 <CakeProphet> *matched
23:35:45 <elliott> CakeProphet: No regex can do that.
23:35:50 <elliott> <elliott> Can you match 'a'+ to an infinite list of as
23:35:52 <elliott> With constant memory
23:35:53 <oerjan> LR(one) parsers are deterministic PDAs
23:35:56 <elliott> Because you keep discarding the parses
23:35:56 <CakeProphet> elliott: Perl regexes can...
23:35:57 <elliott> Maybe???
23:35:58 <elliott> Gregor???
23:36:02 <elliott> CakeProphet: Perl regexps are not regular expressions.
23:36:10 <elliott> They, therefore, have none of the parsing guarantees regexps do.
23:36:10 <CakeProphet> elliott: ...that's why I said regex.
23:36:18 <elliott> CakeProphet: Well, the answer is bad.
23:36:22 <elliott> Perl's algorithm is very exponential.
23:36:23 <Gregor> elliott: Not in the conventional definition.
23:36:32 <oerjan> i don't think they can grow the stack more than no. of characters
23:36:35 <elliott> Gregor: Laziness isn't in the conventional definition :P
23:38:06 <elliott> I know that Frisby (Haskell PEG parser) is composable... "Unlike other parsers of PEG grammars, frisby need not be supplied with all possible rules up front, allowing composition of smaller parsers."
23:38:16 <elliott> But I don't wanna use it or look at it because NYEH PRIOR ART DOESN'T EXIST
23:38:44 <elliott> "Although memory consumption is linear in the size of the input, the constant factor is very large.
23:38:45 <elliott> frisby attempts to address both these concerns."
23:38:46 <elliott> PAH
23:38:52 <elliott> Gregor: How large is the constant for Fythe btw :P
23:39:19 <elliott> "frisby attempts to be lazy in reading the results of parsers, parsers tend to work via sending out 'feeler' predicates to get an idea of what the rest of the file looks like before deciding what pass to take, frisby attempts to optimize these feeler predicates via extra lazyness such that they do not cause the actual computation of the results, but rather just compute enough to determine whether a predicate would have succeeded or not.
23:39:19 <elliott> (It is interesting to note that the memory efficiency of frisby depends vitally on being as lazy as possible, in contrast to traditional thoughts when it comes to memory consumption)"
23:39:21 <elliott> IT'S LIKE MAGIC..............
23:39:24 <Gregor> elliott: Small enough that the parser has never been more than a spec in any profile of Fythe.
23:39:27 <Gregor> *speck
23:39:35 <Gregor> The transform engine, on the other hand ....
23:39:58 <elliott> Gregor: I take it Fythe solves the "Unlike other parsers of PEG grammars, frisby need not be supplied with all possible rules up front, allowing composition of smaller parsers." part
23:40:22 <Gregor> I don't understand why that would be an issue for any PEG parser :P
23:40:51 <elliott> Gregor: "Traditionally, PEG parsers have suffered from two major flaws:
23:40:51 <elliott> A global table of all productions must be generated or written by hand, disallowing composable parsers implemented as libraries and in general requiring the use of a parser generator tool like pappy"
23:40:54 <elliott> It doesn't go into any more depth :P
23:41:05 -!- oerjan has quit (Quit: Good night).
23:41:24 <Gregor> I have a global table of productions ... which is mutable ...
23:42:20 <elliott> Right, which is distinctly not composable :P
23:42:32 <CakeProphet> but does allow rules to not be given up front.
23:42:36 <CakeProphet> *all possible rules
23:43:40 <Gregor> The parsers can be defined as functions.
23:45:06 <elliott> Gregor: Doesn't mean it's composable
23:45:17 <CakeProphet> baaaawwww
23:45:20 <CakeProphet> :P
23:45:38 <elliott> Sorry, I won't state facts in future if it upsets you
23:46:14 <CakeProphet> I get very upset when things don't compose. :(
23:50:35 <itidus20> <EXP> ::= <VAR> | (<EXP><EXP>) | (λ<VAR>.<EXP>)
23:50:47 <elliott> additive = mdo
23:50:48 <elliott> additive <- newRule $ multitive <> char '+' ->> additive ## uncurry (+) // multitive
23:50:48 <elliott> multitive <- newRule $ primary <> char '*' ->> multitive ## uncurry (*) // primary
23:50:48 <elliott> primary <- newRule $ char '(' ->> additive <<- char ')' // decimal
23:50:48 <elliott> decimal <- newRule $ many1 (oneOf ['0' .. '9']) ## read
23:50:50 <elliott> return additive
23:50:52 <elliott> this is awfully ugly
23:50:58 <tiffany> ._.
23:51:10 <elliott> Gregor: So, what's the hot new thing in parsers these days that isn't PEG :P
23:51:33 <CakeProphet> human sweatshops;
23:53:01 <itidus20> <VAR> ::= 'a' | 'b' | 'c' | 'd' | 'e' | 'f' | 'g' | 'h' | 'i' | 'j' | 'k' | 'l' | 'm' | 'n' | 'o' | 'p' | 'q' | 'r' | 's' | 't' | 'u' | 'v' | 'w' | 'x' | 'y' | 'z'
23:53:07 -!- sebbu2 has changed nick to sebbu.
23:53:57 <itidus20> <EXP> ::= <VAR> | '('<EXP><EXP>')' | '(' 'λ'<VAR>'.'<EXP>')'
23:54:53 <CakeProphet> itidus20: that forces parens
23:54:59 <itidus20> yup
23:55:01 <CakeProphet> you can just have a '('<EXP>')' rule
23:55:11 <CakeProphet> and then have not-forced parens.
23:55:13 -!- Jafet has quit (Quit: Leaving.).
23:55:25 <itidus20> humm
23:55:39 <itidus20> humm
23:56:28 <monqy> CakeProphet: but then it becomes ambiguous unless you fix it more
23:56:35 <elliott> monqy: WHAT'S THE HOT NEW THING IN PARSING
23:56:45 <monqy> elliott: i dunno ;_;
23:56:49 <CakeProphet> furry strapon parsers.
23:56:54 <itidus20> <EXP> ::= <VAR> | '('<EXP>')' | <EXP><EXP> | 'λ'<VAR>'.'<EXP>
23:57:09 <elliott> Gregor: Detail to me the furry strapon parser algorithm
23:57:47 <CakeProphet> monqy: is that ambiguous?
23:57:52 <monqy> CakeProphet: yes!!
23:58:01 <CakeProphet> how so?
23:58:06 <CakeProphet> ....oh wait
23:58:09 <CakeProphet> perhaps. I see.
23:58:27 <monqy> consider the case of, say, yλx.xy
23:59:01 <monqy> or even just λx.xx I guess
23:59:13 <CakeProphet> ah
23:59:15 <CakeProphet> yeah
23:59:46 <elliott> I should probably Read The Literature on parsers.
23:59:57 <CakeProphet> elliott: RTFL
2011-09-14
00:00:06 <elliott> Yes.
00:00:23 <CakeProphet> while you're at it
00:00:24 <monqy> those closest i got to Reading The Literature is learning about the old hat way of parsers and looking through the trifecta slides
00:00:27 <CakeProphet> since I'm bad at reading literature
00:00:31 <CakeProphet> you should compile a list of literature
00:00:33 <CakeProphet> for me to read
00:00:35 <elliott> monqy: I want something that can do left-recursion :'(
00:01:07 <CakeProphet> left-recursion is strange
00:01:21 <CakeProphet> ...and thus on topic(?)
00:01:28 <monqy> what's so strange about it
00:01:30 <itidus20> i based it on this: http://oi51.tinypic.com/drc86g.jpg
00:01:39 <CakeProphet> it recurses leftwards...
00:01:41 <CakeProphet> I dunno
00:01:47 <itidus20> i don't actually know BNF particularly well
00:01:48 <CakeProphet> that is not a good explanation.
00:01:54 <monqy> wtf is <constant>
00:02:00 <itidus20> i left that out
00:02:04 <itidus20> forget about it
00:02:07 <elliott> there's no such thing as predefined objects
00:02:10 <elliott> read a different book
00:02:16 <elliott> CakeProphet: it is the cleanest way to express infix
00:02:25 <elliott> exp := number | exp '+' exp | exp '-' exp | ...
00:02:35 <elliott> although that misses precedence :P
00:02:47 <CakeProphet> though precedence can also be done with only left recursion
00:02:48 <monqy> CakeProphet: have you ever tried doing infix without recursion in one of the ways? it gets messy
00:02:53 <CakeProphet> instead of uh... left-right-recursion? I guess?
00:03:16 <CakeProphet> monqy: no I have not. But I have tried it with right recursion and it works quite well.
00:03:20 <itidus20> elliott: succ is a predefined constant
00:03:26 <itidus20> or Succ, is it
00:03:32 <CakeProphet> >_>
00:03:32 <itidus20> :>
00:03:35 <CakeProphet> no.
00:03:36 <monqy> CakeProphet: if by works quite well you mean is hideous, you may be correct
00:03:59 <CakeProphet> you and your aesthetics.
00:04:21 <itidus20> by constants, which is a fairly bad choice of words
00:04:41 <itidus20> i think he mainly means libraries of LC's
00:04:41 <monqy> itidus20: succ is not a predefined constant
00:04:46 <itidus20> what is it?
00:04:47 <monqy> itidus20: what libraries
00:04:52 <itidus20> what is succ?
00:04:59 <monqy> it depends on your encoding of numbers
00:05:11 <itidus20> hummm
00:05:16 <itidus20> ok >.<
00:05:51 <itidus20> succ has to be defined before usage anyway
00:06:08 <monqy> what do you mean "defined"
00:06:17 <CakeProphet> heh, "pre-defined" as in defined before?
00:07:03 <itidus20> maybe he should have called them predefined expressions
00:07:15 <monqy> maybe your book sucks and you shouldn't be reading it
00:07:15 <monqy> ok
00:07:38 <CakeProphet> predefined to me implies that it was defined outside of the language itself
00:07:39 <itidus20> the term constant seems a bit of a mes
00:07:42 <CakeProphet> which is not the case for succ
00:07:46 <monqy> constant isn't a thing
00:07:53 <itidus20> yeah
00:07:54 <CakeProphet> there are no "constants" in LC
00:08:13 <itidus20> CakeProphet: but what mechanism of the language can you use to define things?
00:08:14 <CakeProphet> ....except maybe uh, lambda?
00:08:21 <CakeProphet> lambda
00:08:25 <monqy> itidus20: there isn't one!!!
00:08:36 <itidus20> so then is succ defined outside of the language itself?
00:08:38 <CakeProphet> >_> lambda?
00:08:40 <monqy> itidus20: you define them in your head or on pencil and paper or with some sort of preprocessor
00:08:42 <CakeProphet> > cycle "lambda "
00:08:43 <lambdabot> "lambda lambda lambda lambda lambda lambda lambda lambda lambda lambda lamb...
00:08:49 <monqy> itidus20: and then inline the definitions
00:08:56 <elliott> itidus20: ((\succ. ...code using succ...) (...definition of succ...))
00:08:59 <elliott> that's the only way to name anything.
00:09:04 <monqy> or you can do that
00:09:05 <itidus20> monqy: yeah.. well notice i left constants out of my bnf :D
00:09:17 <itidus20> i just conveniently ignored that line
00:09:50 <elliott> CakeProphet: WHAT'S THE NEW THING IN PARSING monqy HELP
00:10:03 <itidus20> but i want to show that i didnt think it all up on my own... not that advanced yet
00:10:09 <CakeProphet> dude I don't know any more than you about parsing
00:10:13 <CakeProphet> why would you think such things.
00:10:20 <monqy> i don't knwlo; =______-; the parsec slides seemed intregueing but i forgot what they said
00:10:25 <monqy> not parsec
00:10:26 <monqy> trifecta
00:10:31 <monqy> trifecta slides
00:10:35 <CakeProphet> itidus20: http://en.wikipedia.org/wiki/Church_encoding
00:10:37 <monqy> I dunno if there's anything more than slides
00:10:38 <CakeProphet> read this.
00:10:39 <monqy> for trifecta
00:10:50 <elliott> CakeProphet: how will that help
00:11:14 <CakeProphet> elliott: it would show him ways to define data in lambda calculus?
00:11:19 <itidus20> All Church numerals are functions that take two parameters. Here f is the successor function and x represents 0. -- makes sense
00:11:52 <itidus20> a whole number then is a function of zero and a successor function. that isn't bad. :)
00:12:07 <CakeProphet> natural number specifically.
00:12:51 <monqy> all i remember about the trifecta slides is it did things to solve problems (and i remember vaguely some of these ways) and also mentioned other methods of parsing
00:12:56 <itidus20> so when it says λf.λx.x is zero.. it means it has no successor ?
00:13:08 <itidus20> oops sorry i take that back
00:13:10 <CakeProphet> zero is just a special case basically.
00:13:15 <itidus20> it means it is not a successor of anything
00:13:20 <CakeProphet> yeah.
00:14:30 <itidus20> to actually use church numerals do you have to apply zero to something?
00:14:36 <CakeProphet> no.
00:14:45 <CakeProphet> but you don't "actually use" lambda calculus.
00:14:54 <CakeProphet> if I understand what you mean.
00:15:21 <itidus20> there is such a thing as impure/applied lambda calculus though as i understand it
00:15:27 <elliott> no.
00:15:29 <elliott> your source was bullshit.
00:15:34 <elliott> CakeProphet: well he only wants to learn LC to "apply it to his gamedev". so of course he isn't going to be able to understand LC as the pure system it is.
00:15:55 <itidus20> are there any other pure systems?
00:15:56 <CakeProphet> itidus20: even if you did apply something to a function, you would be applying a function and returning a function
00:16:00 <CakeProphet> there is nothing else to apply or return.
00:16:03 <itidus20> is LC an instance of a pure system?
00:16:06 <elliott> oh my god
00:16:12 <elliott> note to self never say anything iti will overanalyse it
00:16:50 <itidus20> everything can be abstracted :D
00:16:55 <elliott> sigh
00:16:57 <monqy> :D
00:16:58 <itidus20> even LC
00:17:09 <CakeProphet> LC is a pure system, sure.
00:17:17 <itidus20> it is an instance of a pure system
00:17:18 <elliott> you do _not_ have enough knowledge to think about things like LC on a metalevel before you even understand the base level of plainly understanding it
00:17:25 <monqy> lc is a thing. an instance of a thing. thing.
00:17:27 <elliott> if you keep doing things like that you will _never_ learn it.
00:18:17 <itidus20> its a form of trolling of mine. but thats enough of it i dont want to stir trouble
00:18:33 <elliott> saying dumb things isn't trolling.
00:18:37 <elliott> it's just dumb.
00:18:50 <itidus20> i play with abstraction a lot
00:18:57 <CakeProphet> ....lol
00:19:17 <monqy> itidus20: and for what and in what ways do you want to use the lambda calculus? surely you have some applications in mind with such grave misconception of it
00:19:22 <itidus20> i have considered that sitting down is an instance of human actions
00:19:30 <monqy> itidus20: if i tell you you're wrong, will you stop being wrong?
00:19:53 <CakeProphet> itidus20 is master of the abstract.
00:19:59 <CakeProphet> do not trifle him.
00:20:08 <itidus20> no im not .. i just need to stop
00:20:14 <itidus20> and figure out why im being a pain
00:20:32 <itidus20> and hence stop being a pain
00:20:38 <CakeProphet> just learn the basics before you go off on misguided tangents.
00:20:47 <CakeProphet> that's pretty much all that you're doing wrong.
00:20:59 <itidus20> i got my first irc ban last night... it was kind of uncomfortable
00:21:08 <monqy> I must have missed it
00:21:13 <CakeProphet> being banned is pretty easy.
00:21:14 <elliott> where
00:21:16 <itidus20> not in this channel, or even this server
00:21:20 <elliott> where was it :P
00:21:20 <CakeProphet> 1. join #python 2. msg "lol
00:21:25 <itidus20> efnet #xna
00:21:36 <CakeProphet> "
00:21:44 <elliott> why'd you get banned
00:21:58 <itidus20> well this guy had been warning me for a while.. i think he just had enough
00:21:59 <CakeProphet> xna... fun stuff.
00:22:07 <elliott> that's not an answer :P
00:22:11 <elliott> but sure
00:22:11 <monqy> warning you? for generally acting like yourself?
00:22:14 <itidus20> partially i don't even use xna.. i just rant as if i was in here
00:22:24 <CakeProphet> oh okay.
00:22:34 <CakeProphet> yeah that makes sense.
00:22:37 <elliott> why are you in #xna if you don't use xna
00:22:37 <itidus20> he said the other day allowances can be made for people who at least sometimes talk about xna or use it
00:22:40 <elliott> ?
00:22:43 <itidus20> good point
00:22:54 <itidus20> i considered using it once upon a time years ago
00:23:16 <itidus20> not merely gamedev
00:23:17 <elliott> so how many channels do you rant in :P
00:23:39 <itidus20> i am thinking about bringing a new artform out of gaming
00:23:44 <monqy> oh?
00:23:55 <elliott> just curious
00:24:14 <itidus20> elliott: im currently in 9
00:24:20 <CakeProphet> itidus20: again, you should probably learn the basics of game design before you go making an artform out of it.
00:24:37 <elliott> itidus20: do you rant in all of them
00:24:39 <monqy> what are the basics of game design
00:24:43 <elliott> i just assumed we were special.
00:24:57 <itidus20> you are special
00:25:02 <elliott> howso
00:25:08 <CakeProphet> monqy: I don't think there's really a formal theory to it... it's just like... experience.
00:25:25 <itidus20> this is the only channel like it
00:25:40 <elliott> but you give those other channels your special rants :'(
00:25:59 <CakeProphet> the formal aspect would be the same as in the rest of CS. So game design is essentially just a specific subset of learning how to design programs.
00:26:10 <monqy> game design has nothing to do with cs
00:26:15 <itidus20> well in #xna.. i keep reacting to offtopic topics
00:26:23 <CakeProphet> monqy: fine. applied CS.
00:26:26 <itidus20> overreacting.
00:26:27 <elliott> monqy: it should
00:26:30 <monqy> CakeProphet: i said nothing to do
00:26:31 <elliott> game developers are just bad programmers
00:26:34 <itidus20> basically rants about patents
00:26:45 <monqy> elliott: the point was the separation between design and programming
00:26:45 <elliott> (usually)
00:27:01 <elliott> monqy: well all SE is applied CS.
00:27:05 <CakeProphet> CS isn't concerned with design?
00:27:13 <CakeProphet> in any way
00:27:16 <CakeProphet> there is no branch of it?
00:27:17 <CakeProphet> that cares?
00:27:24 <itidus20> i dont rant that much honestly
00:27:26 <monqy> game design would also apply to non-electronic games, and the such
00:27:33 <CakeProphet> ah, that's true.
00:27:42 <CakeProphet> fun design. :P
00:27:44 <CakeProphet> how to make fun.
00:27:46 <itidus20> some conclusions i have reached is that the word game does not imply entertainment
00:28:04 <itidus20> sorry cake.. didn't mean to be the fly in your soup
00:28:11 <elliott> the cake says it's ok.
00:28:12 <CakeProphet> wat.
00:28:19 <monqy> cake soup.
00:28:33 <Sgeo> My professor is assuming that my classmate's problem is due to a .txt extension, despite his saying (and being right) that it isn't
00:28:35 <itidus20> i am using lazy evaluation style of thinking
00:28:43 <CakeProphet> ..
00:28:45 <CakeProphet> ...
00:28:46 <elliott> do you mean you're just being lazy
00:28:52 <CakeProphet> itidus20: you say these wrong things
00:28:55 <CakeProphet> and it just makes me cringe.
00:29:11 <itidus20> i only JUST NOW concluded that the word game does not imply entertainment
00:29:21 <itidus20> but i had gathered the necessary proofs over the last month or so
00:29:22 <CakeProphet> you're like me from years ago on this channel. stop that.
00:29:27 <monqy> itidus20: do you know what lazy evaluation is
00:29:35 <aspect> is that why there are so many bad games?
00:30:10 <elliott> CakeProphet: i agree w/ comparison
00:30:18 <CakeProphet> a game is essentially an entertaining competition. What makes a game fun is subjective and different people find different kinds of games fun.
00:30:28 <elliott> competition? nah
00:30:35 <itidus20> monqy: i think it means only calculate the answers to questions you need the answers to
00:30:40 <elliott> games present challenges sure
00:30:43 <CakeProphet> elliott: well, not necessarily against other players
00:30:46 <elliott> but competition is the wrong word
00:30:52 <elliott> arguing over definitions of words is stupid anyway
00:30:55 <CakeProphet> you can be competing against the game rules. there is some kind of objective at least.
00:30:59 <elliott> it doesn't matter if something is a game or a toy or whatever
00:31:06 <elliott> CakeProphet: some games have no objective, literally no reward
00:31:14 <CakeProphet> minecraft.
00:31:15 <elliott> for instance, consider minecraft creative
00:31:16 <itidus20> ill reword that: i think it means only calculate the answers to questions you need the answers to when you need them
00:31:18 <elliott> nah
00:31:22 <elliott> today's minecraft has obstacles and shit
00:31:27 <elliott> but creative has literally no obstacle or objective
00:31:31 <elliott> and it's still undeniably a game
00:31:37 <elliott> or if you say it isn't a game, then every player of it would disagree
00:31:47 <itidus20> i still don't see how my definition differs from non-lazy evaluation.
00:31:49 <CakeProphet> hmmm. okay.
00:31:50 -!- copumpkin has quit (Quit: Computer has gone to sleep.).
00:31:51 <quintopia> it is not a game in the mathematical sense
00:31:56 <CakeProphet> lulz
00:32:05 <monqy> good words for good people
00:32:12 <CakeProphet> games are not games in the mathematical sense, are they?
00:32:17 <itidus20> monqy, cake: What I seem to do is an act of topic-dropping.
00:32:45 <monqy> itidus20: if you're wrong about something enough, maybe someone will pick up the topic and correct you?
00:32:52 <itidus20> Similar to name-dropping, I use an inappropriate phrase as a synonym for another phrase.
00:33:03 <elliott> monqy: usually no since it's too painful
00:33:22 <monqy> itidus20: oh. that's horrible.
00:33:28 <itidus20> it is
00:33:42 -!- Patashu has joined.
00:34:16 <CakeProphet> an itidus20 is an instance of an OO mind virus.
00:34:27 <elliott> monqy: help, parser, help, help
00:34:30 <quintopia> CakeProphet: CGoL is certainly not a game in the mathematical sense
00:34:47 <CakeProphet> quintopia: indeed not.
00:35:46 <itidus20> the appropriate phrase in place of "<itidus20> i am using lazy evaluation style of thinking" would have been "What I mean is I realized it just now because of the topic."
00:35:56 <itidus20> so that is topic-dropping
00:36:06 <itidus20> needlessly mentioning lazy evaluation when it is not relevant
00:36:26 <pikhq_> #define as ;while
00:36:27 <pikhq_> do foo
00:36:29 <CakeProphet> elliott: hopefully the difference between my former self and itidus20 is that I got around to learning all (well, most) of the things I didn't understand.
00:36:35 <pikhq_> do foo(n) as (n --> 0);
00:36:41 <elliott> CakeProphet: how old were you in like two thousand and seven again
00:36:53 <CakeProphet> elliott: 15
00:37:04 <itidus20> my mind viruses are partially built up by other people.
00:37:05 <CakeProphet> 15-16
00:37:14 <elliott> CakeProphet: another difference: you wre fourteen years younger
00:37:17 <elliott> s/wre/were/
00:37:20 <CakeProphet> ....oh
00:37:29 <itidus20> people who are happier if i am downtrodden and confused, taking steps to keep me down
00:38:01 <itidus20> it's human nature. people are often setting it as their goal to cause harm.
00:38:11 -!- Sgeo has quit (Ping timeout: 258 seconds).
00:38:24 -!- Jafet has joined.
00:39:13 <itidus20> humans cope because we manage to chill out in spite of our harmful intent
00:40:04 <itidus20> having said all that, i am taking lots of steps at formal introspection
00:40:07 <elliott> what made you convince yourself that that wasn't projecting, at least partially?
00:40:42 <itidus20> i know it is partially my fault.
00:40:56 <elliott> didn't say that
00:40:57 <elliott> at all
00:41:04 <elliott> was just asking a question
00:41:07 <itidus20> uhmmm
00:42:06 <itidus20> people take advantage of my defence mechanisms. i am responsible for my defence mechanisms. they are responsible for how they react to me.
00:42:24 <monqy> take advantage of?
00:43:03 <CakeProphet> help what is formal introspection
00:43:05 <itidus20> i'm not healthy in mind, body, social life, or money.
00:43:13 <CakeProphet> help Freudian armchair psycho-babble what do?
00:43:22 <CakeProphet> oh wait I have monqy help back in exchange for sour cereal.
00:43:30 <itidus20> CakeProphet: taking notes of how i am feeling at various times
00:43:58 <monqy> very formal
00:44:06 <monqy> very introspective
00:44:27 <itidus20> trying to analyze the actual causes of feelings i don't want to feel
00:45:22 <monqy> do the causes point to yourself is that where this is going
00:45:36 <monqy> or do they point to other people is that where this is going
00:46:12 <itidus20> well, other people can do what they like.. its my problem if i overreact
00:46:51 -!- kmc has joined.
00:47:04 <monqy> lots of gecho revisions recently
00:47:34 <itidus20> basically, if something i remember upsets me.. like for example.. if i remember such and such is gonna happen
00:47:47 <monqy> where by gecho I mean the gecho page. these revisions are saddening.
00:47:56 <monqy> gecho is saddening
00:47:57 <itidus20> im trying to take note of which things are actually causing such upset
00:48:17 <monqy> ok
00:48:21 <itidus20> monqy: yeah thats the idea.. no need to get depressed by gecho
00:48:32 <monqy> has your note taking worked
00:49:12 <itidus20> monqy: well, theres these feelings of derealization and depersonalization and psychosis which i seem to enter into at times
00:49:29 <CakeProphet> hey me too.
00:49:48 <itidus20> those are the main uhmm vector of attack which is bothering me recently
00:50:35 <itidus20> another thing is to be realistic about things.
00:51:03 <monqy> what does that mean
00:51:31 <CakeProphet> monqy: come on, be more realistic.
00:51:55 <CakeProphet> wow this topic is really appropriate right now.
00:52:02 <monqy> hm?
00:52:06 <itidus20> i have convinced myself that my brother isn't psychotic. he's just an asshole quite often.
00:52:26 <monqy> that must be a relief
00:52:52 <Gregor> Note that he just said he convinced himself of that, not that it's true.
00:53:10 <CakeProphet> I am convinced that Gregor is actually Roger G.
00:53:31 <Gregor> I am convinced that Scotland is where Santa Claus is from.
00:53:35 <CakeProphet> and his first name propaganda is a terrible lie that he has told everyone including the government.
00:53:50 <monqy> his last name is propaganda lies too
00:54:40 <CakeProphet> Gregor is also lying to himself about his name.
00:54:46 <CakeProphet> /Gregor/Roger G./
00:55:04 <CakeProphet> s'^/'s/'
00:55:26 <monqy> ok
00:55:28 <CakeProphet> man sometimes regex substition on IRC gets tricky.
00:55:37 <monqy> I don't bother with regex
00:55:39 -!- zzo38 has joined.
00:55:45 <monqy> I like it better my way
00:55:51 <elliott> i just do s/thing/
00:55:55 <elliott> monqy: what is your way,
00:56:03 <monqy> thing/other thing
00:56:12 <itidus20> Gregor: well he is an angry violent manipulative drunk who will take others things without a thought, but that doesn't necessarily mean psychotic
00:57:03 <monqy> if thing/other thing is insufficient I do a "where by ... i mean ..."
00:57:33 <monqy> I also sometimes use thing/other thing to add meaning rather than replace maybe? I forget if I do this.
01:01:49 <CakeProphet> perl regex substition is the only sane way to replace typos and misinformation.
01:01:57 <CakeProphet> all substitions must parse correctly.
01:02:01 <CakeProphet> these are the rules.
01:02:13 <monqy> I tend not to care about typos
01:04:43 -!- Gregor has changed nick to NotRogerGYouGuys.
01:04:52 <elliott> "...does it count as pedophilia if it's animals" --a friend
01:04:58 <CakeProphet> s/<monqy>(.*?)/$1, also I am a really bad/
01:05:16 <CakeProphet> s/<monqy>(.*?)/$1, also I am a really bad/g
01:05:27 <monqy> im a really bad
01:09:03 <CakeProphet> http://sourcereal.com/
01:09:10 <CakeProphet> I just need to revisit this site
01:09:12 <monqy> sour cereal
01:09:15 <CakeProphet> because it is truly the best site I've seen.
01:10:25 <elliott> what IS IT
01:11:31 <elliott> monqy: explain......
01:11:35 <elliott> you posted it originally right
01:11:44 <monqy> yes
01:11:56 <elliott> where
01:11:57 <elliott> did you find it
01:11:58 -!- Jafet has quit (Quit: Leaving.).
01:12:04 <CakeProphet> he googled sour cereal I imagine
01:12:06 <monqy> by searching for sour cereal
01:12:11 <elliott> is that it
01:12:13 <CakeProphet> after I mentioned it being possibly a good idea.
01:12:24 <CakeProphet> after eating SOUR PUNCH STRAWS
01:12:26 <elliott> source real . com
01:12:30 -!- Jafet has joined.
01:12:35 <elliott> nooo its privately registered whois
01:12:40 <elliott> IM CANNOT CONTACT
01:12:42 <CakeProphet> which, by the way, I must go buy more of.
01:13:12 <NotRogerGYouGuys> `log Roger G
01:13:18 <HackEgo> 2011-09-14.txt:00:54:46: <CakeProphet> /Gregor/Roger G./
01:13:23 <NotRogerGYouGuys> Piffle
01:13:38 <elliott> `log pop
01:13:42 <HackEgo> 2011-02-09.txt:14:41:06: <elliott> Deewiant: Personally, I think that "ABCD"4) only pops from the fingerprint stack if ABCD is the most recently loadedfingerprint.
01:13:44 <CakeProphet> part of becoming an adult is spending your money irresponsibly.
01:13:59 <elliott> `logurl 2011-02-09.txt:14:
01:14:01 <HackEgo> http://codu.org/logs/log/_esoteric/2011-02-09
01:14:05 <CakeProphet> on things like candy and alcohol and wimminz
01:14:15 <itidus20> roger: well psychopath's are like shannon's maxim.. the key is simply knowing yes or no if they are
01:14:34 <itidus20> it can be virtually impossible to know without this key piece of info
01:14:40 <CakeProphet> ..
01:14:49 <itidus20> thats the truth. i have read up on it
01:15:39 <CakeProphet> this KEY piece of info bahahahahaha
01:15:45 <CakeProphet> okay time to go.
01:15:51 -!- NotRogerGYouGuys has changed nick to Gregor.
01:16:19 <itidus20> yes. once a psychopath is known to be a psychopath, that is all you need to know to know.. and without this knowledge you can almost not know
01:16:47 <itidus20> it is like trying to use a captcha to catch a bot
01:16:51 <elliott> kk
01:16:53 <elliott> k
01:17:27 <itidus20> in accordance with shannon's maxim, it is their most prized possession
01:17:35 <CakeProphet> I am a psychopath.
01:18:20 <itidus20> so several moral dilemmas are raised. is a person evil just by being a psychopath?
01:18:35 <itidus20> and once caught there is no treatment, only to cycle them between prison and mental hospital
01:18:42 <elliott> please...stop...
01:18:47 <CakeProphet> you can eat them
01:18:47 <itidus20> why?
01:19:11 <CakeProphet> 21:16 < CakeProphet> okay time to go.
01:19:15 <CakeProphet> okay time to go.
01:22:19 <itidus20> basically ok, it's like trying to determine what is on a display by scanning the video memory instead of looking at the display with a camera
01:24:28 -!- DH____ has joined.
01:26:12 <elliott> Wow, String has really bad overhead.
01:26:22 <elliott> Gregor: Ask me what String's overhead is in Haskell.
01:27:15 -!- tswett has quit (Read error: Operation timed out).
01:27:21 <elliott> Gregor: Do it, it will amuse you.
01:27:56 <elliott> Gregor is bad.
01:28:53 <elliott> monqy: tell Gregor he is bad.
01:29:02 <Jafet> Only 39 bytes
01:29:14 <monqy> Gregor: bad
01:29:31 <elliott> Jafet: Forty, isn't it?
01:29:43 <Gregor> I was going to guess fifteen bytes one bit per character.
01:29:44 <elliott> Per codepoint, of course.
01:29:53 -!- tswett has joined.
01:29:56 <elliott> Gregor: It takes 5n words per codepoint, apparently :P
01:29:57 <Gregor> (Assuming ASCII only)
01:30:04 <elliott> Erm
01:30:06 <elliott> 5 words per codepoint
01:30:12 <Jafet> You asked for overhead
01:30:14 <elliott> It uses utf-thirtytwo always
01:30:18 <elliott> Jafet: Point :P
01:30:26 <elliott> It's not thirty-nine bytes though.
01:30:29 <elliott> It's thirty-two. No?
01:30:31 <elliott> Four words.
01:31:02 <Jafet> Most code points use one byte,
01:31:08 <Jafet> So UTF-320
01:31:16 <Gregor> Most take 7 bits :P
01:31:25 <elliott> UTF-320?
01:31:38 <pikhq_> Gregor: If you go by frequency of usage, perhaps.
01:31:43 <Gregor> pikhq_: Naturalismo.
01:32:04 <pikhq_> Context-dependent, but generally true in non-plain text.
01:33:52 <elliott> I wonder if there's a known-nicer string representation than ropes...
01:34:12 <elliott> (Or, well, "finger tree of small vectors of codepoints" if you want to be precise.)
01:36:37 -!- DH____ has quit (Read error: Connection reset by peer).
01:36:42 -!- DH____ has joined.
01:38:14 -!- Jafet has quit (Ping timeout: 276 seconds).
01:38:31 <itidus20> `log godel
01:38:35 <HackEgo> 2011-01-04.txt:19:12:22: <j-invariant> elliott: I don't get that godel quote
01:38:48 <itidus20> `pastelog godel
01:38:50 <HackEgo> ​/home/hackbot/hackbot.hg/multibot_cmds/lib/limits: line 5: exec: pastelog: not found
01:39:06 <quintopia> :/
01:39:17 <quintopia> that would be a good program
01:39:22 <quintopia> please write it
01:39:37 <itidus20> `pastelogs godel
01:39:42 <HackEgo> http://codu.org/projects/hackbot/fshg/index.cgi/raw-file/tip/paste/paste.25506
01:40:16 <quintopia> `run which pastelogs
01:40:18 <HackEgo> ​/hackenv/bin/pastelogs
01:40:26 <elliott> `logurl 2007-07-23
01:40:28 <HackEgo> http://codu.org/logs/log/_esoteric/2007-07-23
01:40:35 <elliott> quintopia: i made it : ): ))
01:40:36 <elliott> also `log
01:40:36 <elliott> `log
01:40:38 <HackEgo> 2005-03-24.txt:03:34:00: -!- lament has quit (clarke.freenode.net irc.freenode.net).
01:40:41 <elliott> `log
01:40:43 <HackEgo> 2005-09-15.txt:04:50:58: <lament> (actually, i'm not sure about this. hrm)
01:40:52 <monqy> ggood logss
01:41:43 <quintopia> `run ln -s /hackenv/bin/pastelogs /hackenv/bin/pastelog
01:41:45 <HackEgo> No output.
01:41:52 <quintopia> can i do that? :P
01:42:14 -!- zzo38 has quit (Remote host closed the connection).
01:42:24 -!- Sgeo has joined.
01:42:25 <monqy> `pastelog
01:42:42 <HackEgo> http://codu.org/projects/hackbot/fshg/index.cgi/raw-file/tip/paste/paste.16730
01:42:58 <itidus20> `log dangerously
01:43:03 <HackEgo> 2011-03-07.txt:18:41:51: <Phantom_Hoover> Sgeo doesn't, and was coming dangerously close to taking relationship advice from him.
01:43:23 <itidus20> `pastelogs dangerously
01:43:27 <HackEgo> http://codu.org/projects/hackbot/fshg/index.cgi/raw-file/tip/paste/paste.13037
01:44:14 -!- calamari has joined.
01:46:07 -!- Sgeo_ has joined.
01:46:59 -!- Jafet has joined.
01:47:42 -!- Sgeo has quit (Ping timeout: 260 seconds).
01:57:00 <itidus20> so is "\x x" church numeral 0?
01:57:06 -!- Jafet has quit (Quit: Leaving.).
01:57:14 <itidus20> hmm oops forgot 1 thing
01:57:26 <itidus20> so is "\f \x x" church numeral 0?
01:57:57 <quintopia> it can be
01:58:18 -!- augur has quit (Remote host closed the connection).
01:58:36 <itidus20> is "\f \x x" like "(λf.(λx.(x)))"
01:59:20 <monqy> it can be
01:59:41 <elliott> <quintopia> `run ln -s /hackenv/bin/pastelogs /hackenv/bin/pastelog
01:59:42 <elliott> no
01:59:42 <monqy> why do you have so many parentheses
01:59:48 <monqy> why do you have parentheses around the x
01:59:50 <monqy> why
02:00:05 <itidus20> because i don't want to make mistakes
02:00:12 <elliott> `rm bin/pastelog
02:00:13 <pikhq_> Because he's being strange and not doing sane notation.
02:00:13 <HackEgo> No output.
02:00:19 <monqy> you're more likely to make mistakes if you make a huge mess of parens like that
02:00:22 <itidus20> seems i am leaving out -> too
02:00:29 <pikhq_> I'd recommend \f x->x
02:00:40 <itidus20> ahh
02:00:41 <pikhq_> Or \f->\x->x if you want the currying explicit.
02:00:45 <itidus20> ahh
02:00:56 <monqy> I tend to use more spaces
02:00:59 <monqy> \ f x -> x
02:01:01 <pikhq_> Or \f.\x.x if you want it to *just* be all-ASCII standard lambda calculus notation.
02:01:33 <monqy> \fx.x if I'm doing it like that
02:02:02 <pikhq_> I'm too used to names of variable length. ;)
02:03:16 <itidus20> Ichi \fx->f x, Ni \fx->f(f x), San \fx->f(f(f x)), Yon \fx->f(f(f(f x))), Go \fx->f(f(f(f(f x))))
02:04:05 <pikhq_> 馬鹿じゃ!
02:04:10 <itidus20> One, Eck, Ichi \fx->f x, Two, Dou, Ni \fx->f(f x), Three, Teen, San \fx->f(f(f x)), Four, Chaar, Yon \fx->f(f(f(f x))), Five, Paanch, Go \fx->f(f(f(f(f x))))
02:05:04 <monqy> itidus20: it's strange of you to omit spaces in the formal parameters thingy but leave them in in the application
02:05:08 <pikhq_> 「12345」か、「一二三四五」か良いかもしらない。でも「Ichi Ni San Yon Go」がとても変だ。
02:05:21 <monqy> itidus20: and also leave them out in other applications
02:05:21 <itidus20> monqy: ahh true true
02:05:50 <itidus20> Is there anything not strange about what i am doing though?
02:05:54 <monqy> what
02:06:22 -!- Jafet has joined.
02:06:54 <calamari> the other day someone thought a lang had all instructions executing at once (turned out it wasn't), but it got me thinking, what if all instructions had a queue on the data.. for example *addr1=*addr2+*addr3. if addr2 or addr3 are changed, then that would execute, changing addr1, then anything that relied on addr1 would execute, etc. Is there an esolang like that?
02:07:38 <Jafet> Dataflow languages aren't esoteric
02:07:47 <Jafet> Neither are constraint logic ones
02:08:12 <itidus20> I am just getting used to the lego blocks of lambda calculus
02:08:15 <Sgeo_> It's certainly possible to make an esoteric dataflow language
02:08:18 <CakeProphet> I mean esoteric languages aren't even esoteric.
02:08:21 <CakeProphet> you're pretty much fucked.
02:08:33 <pikhq_> Nor are spreadsheets esoteric.
02:08:35 <itidus20> see monqy, that was what i call a topic-dropping.. the unnecessary use of "lego blocks" to mean "components" or "elements"
02:08:53 <Sgeo_> what's a good non-esoteric dataflow language
02:08:59 <monqy> itidus20: now im dead inside :(
02:09:08 <Sgeo_> why am i trying to talk like monqy
02:09:15 <monqy> what
02:09:30 <Sgeo_> with the whole no capitalization thing
02:09:30 <itidus20> learning to type logically also teaches how to think logically
02:09:38 <Jafet> You admire his intellect?
02:09:40 <calamari> cool, so I discovered something that they came up with in 1966 according to wikipedia :)
02:09:42 <monqy> sometimes I do caps; I'm rather inconsistent about it.
02:09:46 <itidus20> Sgeo_: because it's col
02:09:53 <itidus20> ^cool
02:09:57 <pikhq_> calamari: Well, topological sorting spreadsheets are a *bit* newer.
02:10:12 <itidus20> once you type i as i you're basically a no-caps'er
02:10:19 <CakeProphet> spreadsheets of functions
02:10:24 <pikhq_> Still, not exactly new.
02:10:34 <pikhq_> CakeProphet: Yes...
02:10:41 <monqy> spreadsheet of spreadsheets
02:10:44 <Sgeo_> What not new new thing did calamari do?
02:10:55 <calamari> Sgeo: said something :)
02:11:01 <Sgeo_> lol\
02:11:02 <itidus20> Sgeo_: you can type faster without caps..
02:11:07 <itidus20> its just a fact
02:11:12 <Sgeo_> But I don't like to type without caps.
02:11:16 <itidus20> you can type faster still without punctuation
02:11:28 <monqy> Typing with caps and punctuation doesn't slow me down very much at all.
02:11:37 <itidus20> but in either case i like punctuation
02:11:43 <monqy> what slows me down is bothering to correct ytpeoes
02:11:44 <Sgeo_> itidus20, not if your finger memory always reaches for the Shift and as such, you have to think about not doing it.
02:11:47 <CakeProphet> I'm too busy busting caps in niggas and hoes to type caps.
02:11:53 <itidus20> Sgeo_: yeah i just noticed that
02:12:19 <monqy> Shoiudl I stop bothering to correct my types? What will ahpepn?
02:12:22 <Sgeo_> Off to read some Discworld and eat
02:12:27 <itidus20> punctuation probably doesn't help much
02:12:34 <itidus20> i mean.. the removal of it
02:12:39 <Sgeo_> monqy, ugh, I hvae done that sort of thing before, really speeds things up att the expesne of typoes.
02:12:44 <itidus20> w.r.t speed
02:12:47 <calamari> I'm thinking about it, and I'm not sure a spreadsheet is exactly the same
02:12:54 <monqy> sometimes I bother, sometimes I don't!!!
02:13:01 <monqy> sometimes I also make more typoes than others.
02:13:04 <Sgeo_> 0_0
02:13:05 <monqy> sometimes.
02:13:18 <CakeProphet> higher order spreadsheets are spreadsheets of functions that take a spreadsheet input and a spreadsheet output
02:13:54 <CakeProphet> they are the best spreadsheets of all.
02:14:21 <quintopia> elliott: i hate you
02:14:22 <Jafet> I think you could make an esolang out of higher dimensional spreadsheets
02:14:32 <Jafet> And higher order, of course
02:17:52 <calamari> thanks for letting me know the name of what I discovered... now I won't have to implement it :)
02:19:50 <Jafet> I bet if someone here implemented an esolang based on spreadsheets, their endeavour to make it turing complete will make it superior to other real spreadsheets
02:20:20 <calamari> most spreadsheets have some kind of language you can embed behind it
02:21:00 <CakeProphet> I don't believe that was new information for anyone.
02:21:36 <CakeProphet> I once tried to write a brainfuck interpreter in Excel
02:21:38 <CakeProphet> didn't work.
02:21:53 -!- augur has joined.
02:22:07 <itidus20> <VARS> ::= <VAR> | <VARS><VAR>; <EXPR> ::= "\"<VARS> | <EXPR> "->" <EXPR> | <VAR>; ... is this faulty?
02:22:19 <CakeProphet> it's unecessary.
02:22:40 <itidus20> its a nice way to express ideas without using english
02:22:42 <elliott> yes faulty
02:22:48 <elliott> what's x -> x
02:23:02 <elliott> \ and -> are part of same rule
02:23:12 <itidus20> hmm
02:23:16 <itidus20> heheheh ok
02:23:41 <itidus20> <VARS> ::= <VAR> | <VARS><VAR>; <EXPR> ::= "\"<VARS> "->" <EXPR> | <VAR>; ... is this better?
02:25:29 <itidus20> i am wondering to myself and now typing it if the last one can be vars
02:26:24 <CakeProphet> well function application would be <EXPR><EXPR> ignoring insignificant whitespace.
02:26:28 <itidus20> trying to avoid \x->xxyzx not sure if i need to though
02:26:52 <itidus20> bugger
02:27:09 <CakeProphet> well, in Haskell it's a bit more complicated than that.
02:27:11 <CakeProphet> for function application
02:27:17 <CakeProphet> because you can have f x or f(x)
02:27:29 <elliott> itidus20: your expr has no application
02:27:32 <elliott> CakeProphet: no
02:27:44 <elliott> f(x) is just f (x)
02:27:50 <elliott> just like (((x))) = x
02:28:25 <itidus20> hmm.. so is "\x->" the same as "λx."
02:28:41 <CakeProphet> elliott: ...yes I understand they are the same
02:28:45 <CakeProphet> but to describe the syntax
02:28:49 <CakeProphet> you would include both forms.
02:29:00 <itidus20> or is -> used in both application and lambdaing
02:29:08 <CakeProphet> > reverse "hello"
02:29:10 <lambdabot> "olleh"
02:29:10 <CakeProphet> is application
02:29:14 <CakeProphet> > (
02:29:15 <lambdabot> <no location info>: parse error (possibly incorrect indentation)
02:29:20 <CakeProphet> > (\x -> x + x) 2
02:29:20 <elliott> itidus20: just lambdaing
02:29:21 <lambdabot> 4
02:29:26 <elliott> CakeProphet: not helpiiiing
02:29:29 <CakeProphet> is a lambda that is bein applied.
02:29:32 <elliott> CakeProphet: not helping
02:29:42 <elliott> you used arithmetic
02:29:46 <elliott> again
02:29:52 <itidus20> uhmm ok so function application in haskell is just (x y) ?
02:29:58 <CakeProphet> x y
02:30:03 <itidus20> ah
02:30:10 <itidus20> can it be x x?
02:30:13 <CakeProphet> sure
02:30:18 <CakeProphet> :t id id
02:30:19 <lambdabot> forall a. a -> a
02:30:22 <monqy> how about
02:30:26 <monqy> instead of concrete syntax
02:30:26 <elliott> sigh
02:30:28 <monqy> we focus on
02:30:30 <monqy> abstract syntax
02:30:52 <elliott> CakeProphet: you are _really_ not helping iti. please stop.
02:30:59 <itidus20> if i just keep stareing at syntaxes enough it is sure to just make sense
02:31:00 -!- sebbu2 has joined.
02:31:00 -!- sebbu2 has quit (Changing host).
02:31:00 -!- sebbu2 has joined.
02:31:01 <monqy> I'm actually surprised how much fuss you guys are making over concrete syntax
02:31:23 <CakeProphet> monqy: /me has not been making any sort of fuss about concrete syntax.
02:31:27 <monqy> yes you have
02:31:45 <itidus20> i am going on the theory that if you know the grammar of a language you should be able to use it at least in a trivial manner
02:31:54 <monqy> you're wrong
02:31:54 <elliott> lol
02:32:02 <elliott> jesus christ
02:32:08 <itidus20> its not like it has many rules
02:32:15 <itidus20> it's not latin
02:32:30 <Jafet> Hey, it works for python.
02:32:37 -!- sebbu has quit (Ping timeout: 260 seconds).
02:32:41 <Jafet> And any other language that is C in disguise
02:33:00 <CakeProphet> Python: C in disguise
02:33:21 <elliott> itidus20: you are acting like you are on the same level as the people trying to teach you - forming your own different path and disagreeing. until you accept that you must first be a _learner_, you will never learn.
02:33:33 <Jafet> C with reference counting.
02:33:42 <itidus20> hmm now heres how wirth would say it
02:34:13 <elliott> ok, ignore me
02:34:19 <itidus20> im not
02:34:53 <itidus20> curry f x; body begin x end;
02:34:56 <monqy> what
02:35:08 <elliott> wow.
02:35:14 <monqy> you're going like
02:35:17 <monqy> in the wrong direction
02:35:36 <elliott> remember itidus20 what i said about trying to form your own path?
02:35:58 <itidus20> lao tse once say, the sage follows the well worn path
02:36:30 <elliott> heheheheehehehehehee
02:37:32 <itidus20> well he might have said that
02:43:02 <itidus20> uhmm
02:43:38 <monqy> hm?
02:46:00 <itidus20> about lao tse could be a false memory
02:46:22 <itidus20> about how wirth would do a functional language, i think it would be beyond my imagination
02:46:30 <CakeProphet> what is wirth.
02:46:38 <itidus20> nikolaus wirth
02:46:40 <CakeProphet> is it the end of win?
02:46:49 <CakeProphet> or the end of wear?
02:47:00 <itidus20> algol-w, pascal, modula, oberon
02:47:12 <itidus20> i only know the names of his works really
02:48:08 <CakeProphet> if I beat you with this stick will learn more stuff?
02:48:36 <itidus20> cut and paste from some googling "I also remember bursting out laughing when the Modula-2 compiler warned correctly that I had written an infinite loop! Ooops."
02:50:44 <CakeProphet> > let fibs = 0 : 1 : zipWith (+) fibs (tail fibs) in fibs
02:50:45 <lambdabot> [0,1,1,2,3,5,8,13,21,34,55,89,144,233,377,610,987,1597,2584,4181,6765,10946...
02:51:09 <itidus20> http://web.archive.org/web/20100331222736/http://www.cs.inf.ethz.ch/~wirth/Articles/GoodIdeas_origFig.pdf
02:52:51 <itidus20> "To postulate a state-less model of computation on top of a machinery whose most eminent characteristic is state, seems to be an odd idea, to say the least." :P
02:54:51 <CakeProphet> and yet so good.
02:55:00 <elliott> yeah youve disproved the lambda calculus with a quote and a smiley good thing you never had to learn it
02:55:19 <itidus20> elliott: alright relax. im not giving up on it
02:55:31 <Lymee> > let fibs = 1 : 2 : zipWith (*) fibs (tail fibs) in fibs
02:55:31 <lambdabot> [1,2,2,4,8,32,256,8192,2097152,17179869184,36028797018963968,61897001964269...
02:55:44 <itidus20> its just i was looking for wirth's take on it.. its natural he is biased towards his imperative languages
02:56:06 <elliott> im perfectly relaxed.
02:56:21 <itidus20> you have shown me that it can be used for building OS's
02:56:52 <itidus20> i am used to the quotes of old men being bitter
02:57:30 <pikhq_> There's a pretty obvious issue with that quote.
02:57:55 <itidus20> the link was from lambda the ultimate anyway ironically
02:57:56 <pikhq_> Our machines are designed for ease of dealing with physical reality.
02:58:05 <pikhq_> Our code has no such concerns.
02:58:14 <itidus20> http://lambda-the-ultimate.org/node/1773
02:58:14 <pikhq_> (modulo obvious limits)
02:58:38 <CakeProphet> I'm not entirely sure that's how modulo works pikhq_ :P
02:59:06 <pikhq_> CakeProphet: Sadly, our code is guaranteed to halt.
02:59:47 <pikhq_> At a minimum, it will go with the rest of the universe.
03:00:02 <CakeProphet> if only lived in a magical world of mathematical thought.
03:00:09 <CakeProphet> I could be a theorem!
03:01:39 <itidus20> elliott: well i will never be able to learn it(LC) through the method of acquiring prerequisite knowledges.. so i am analyzing it's component's
03:02:02 <monqy> itidus20: what are its components
03:02:13 <monqy> itidus20: you may have a bad idea of what they are
03:02:59 <itidus20> it has just occured to me that i still don't have a good idea of what a variable is
03:03:38 <CakeProphet> in lambda calculus variables function parameters.
03:03:41 <CakeProphet> +are
03:03:47 <itidus20> such as with... \x-> ..
03:03:51 <monqy> they are also all functions
03:03:51 <CakeProphet> yes
03:03:53 <monqy> everything is a function
03:03:55 <CakeProphet> and yes.
03:04:07 <itidus20> is "λx." a complete lambda expression?
03:04:11 <CakeProphet> no
03:04:11 <monqy> no
03:04:22 <pikhq_> The function has to map to *something*.
03:05:38 <itidus20> and.. "λx." is basically equally incomplete as: "λa.", "λb.", "λc.", "λd.", ... etc.. and they each express the same thing in isolation right?
03:05:48 <monqy> what
03:06:00 <monqy> they don't express anything. they're nonsense.
03:06:17 <itidus20> i mean like if i wrote "λp." on a piece of paper and showed it to someone it would mean just as much as "λr."
03:06:25 <itidus20> no more or less
03:06:34 <monqy> at what are you getting
03:06:46 <pikhq_> itidus20: Yes, but it would also mean just as much as ASDGJIFujyh0-qwe4itgo0xcfnvjbhklsdau5689234iq8ibvgo0sdujt89ioweausjfgioxzfhyuiqejhiopfgjhsar89pitpjq;
03:06:50 <itidus20> and yet this is a component of LC .. and i am analyzing it
03:06:54 <pikhq_> It's a fucking syntax error.
03:07:05 <monqy> it isnot a component of the lambda calculus; it's a syntax error.
03:07:05 <CakeProphet> itidus20: yes the name of the variable doesn't matter as long as it's unique
03:07:10 <itidus20> its 1 character short of being a complete LC expression
03:07:22 <monqy> itidus20: things do not work like that
03:07:27 <monqy> itidus20: you are doing it wrong
03:07:36 <itidus20> i am being cruel perhaps
03:07:36 <Lymee> "λp." means "take p and... 404 file not found"
03:07:48 <monqy> itidus20: cruel?
03:07:58 <itidus20> yup...
03:08:05 -!- calamari has quit (Quit: Leaving).
03:08:16 <pikhq_> itidus20: When you write such "expressions" you are granting permission to launch demons from your nose, now stop it. ;)
03:08:21 <Gregor> `fetch http://sprunge.us/OViK
03:08:22 <HackEgo> 2011-09-14 03:08:22 URL:http://sprunge.us/OViK [7576] -> "OViK" [1]
03:08:28 <Gregor> `run sh OViK ; rm OViK
03:08:32 <HackEgo> x - created lock directory _sh21266. \ x - extracting bin/unlearn (text) \ x - extracting bin/forget (text) \ x - extracting bin/learnt (text) \ x - extracting bin/learn (text) \ x - removed lock directory _sh21266.
03:08:38 <itidus20> i am showing you a piece of the space with which i am exploring LC syntax.. and its nasty!
03:08:40 <Gregor> `learn elliott Ignore this loser.
03:08:42 <HackEgo> Learned!
03:08:45 <Gregor> `elliott
03:08:47 <HackEgo> elliott = Ignore this loser.
03:08:57 <monqy> ooh I love learn
03:09:09 <Lymee> `learn Lymee *hugs*
03:09:14 <Lymee> :(
03:09:17 <HackEgo> Learned!
03:09:21 <Lymee> :)
03:10:04 <pikhq_> Does GNU shar *actually test* for *GNU* md5sum?
03:10:10 <pikhq_> Not a functioning one, but *GNU*.
03:10:15 <pikhq_> Fucking fuck.
03:10:31 <monqy> a test:
03:10:32 <monqy> `learn cat cat
03:10:34 <HackEgo> Learned!
03:10:36 <monqy> `cat
03:10:37 <Gregor> shar: Easily the best.
03:10:38 <HackEgo> cat = cat
03:10:49 <Gregor> monqy: That ... could be a problem ...
03:11:04 <Lymee> `run echo a | cat
03:11:07 <HackEgo> cat = cat
03:11:09 <monqy> cat
03:11:12 <pikhq_> Gregor: Kinda an elegant archive format, but jebus GNU stuff is feces.
03:11:15 <Gregor> `rm bin/cat
03:11:16 <Lymee> `run echo $PATH
03:11:17 <HackEgo> No output.
03:11:17 <elliott> Gregor: this is a bad learndb i shall improve
03:11:18 <HackEgo> ​/hackenv/bin:/opt/python27/bin:/opt/ghc/bin:/usr/bin:/bin
03:11:31 <Gregor> elliott: THEN DOOOOOOOOOOOOOOOOOOOOOOOOO SO
03:11:49 <itidus20> lambda seems to be a modification of a symbol.. just as 'A' is a capitalization of 'a', and 'ga' in japanese is a change to 'ka', so "λx." is related directly to "x"
03:11:51 <Lymee> `export PATH=/opt/python27/bin:/opt/ghc/bin:/usr/bin:/bin:/hackenv/bin
03:11:52 <HackEgo> ​/home/hackbot/hackbot.hg/multibot_cmds/lib/limits: line 5: exec: export: not found
03:11:58 <Lymee> `run export PATH=/opt/python27/bin:/opt/ghc/bin:/usr/bin:/bin:/hackenv/bin
03:11:59 <HackEgo> No output.
03:12:01 <monqy> itidus20: what
03:12:09 <Lymee> `learn cat cat
03:12:11 <HackEgo> Learned!
03:12:14 <monqy> itidus20: you're not thinking right
03:12:16 <itidus20> "λx." introduces the symbol "x"
03:12:16 <Lymee> `run echo a | cat
03:12:18 <HackEgo> cat = cat
03:12:20 <Lymee> `rm bin/cat
03:12:21 <HackEgo> No output.
03:14:02 <itidus20> "λx." says something like.. in the following expression, "x" is a bound variable.
03:14:32 <monqy> "λx." isn't a complete thought
03:15:36 -!- pikhq_ has quit (Ping timeout: 240 seconds).
03:15:42 <monqy> maybe you should try learning the lambda calculus before you do this nonsense with it
03:16:01 <monqy> or have you given up on that
03:16:07 <itidus20> perhaps i should say "(λx.())"
03:16:15 <monqy> you're making it worse
03:16:30 <itidus20> i can go a little further
03:16:33 <Lymee> `wiki lambda calculus
03:16:35 <HackEgo> ​/home/hackbot/hackbot.hg/multibot_cmds/lib/limits: line 5: exec: wiki: not found
03:16:38 <Lymee> :<
03:16:51 <itidus20> "((()())(λx.(())())())"
03:16:56 <monqy> ;_;
03:16:59 <CakeProphet> that's not a thing
03:17:07 <itidus20> indeed
03:17:14 <itidus20> it is missing parts
03:17:15 -!- pikhq has joined.
03:17:22 <Lymee> Can we...
03:17:23 <Lymee> Get rid of itidus20
03:17:39 <monqy> no
03:17:42 <itidus20> ok i should leave until i can play reasonably though
03:17:55 <itidus20> bye
03:17:59 -!- itidus20 has left ("Leaving").
03:18:17 <monqy> bye
03:18:47 <Patashu> what are your guys' minesweeper records
03:19:08 <Jafet> I made a script to reroll until I could get it on the first click
03:19:15 <Patashu> haha
03:20:06 <Patashu> I just opened it up and got 227 seconds on expert. was wondering if that was decent
03:21:17 <Jafet> Microsoft has made a few different versions... the recent ones play in the background and prevent you from losing if the position is ambiguous
03:22:18 <Patashu> yeah, I'm using a verson that prevents you from needing luck
03:27:11 <monqy> `elliott
03:27:13 <HackEgo> elliott = Ignore this loser.
03:27:40 <monqy> oh i misread something up there
03:29:28 <CakeProphet> what a stupid command
03:29:57 <CakeProphet> well
03:30:01 <CakeProphet> it will come in handy later.
03:32:01 <elliott> back
03:32:12 <monqy> hi
03:32:44 -!- itidus20 has joined.
03:32:54 <monqy> hi
03:33:00 <itidus20> hi monqy
03:33:02 <elliott> coool simonrc knows edwin brady
03:33:03 <itidus20> everyone
03:33:08 <elliott> (i am logread)
03:34:07 -!- zzo38 has joined.
03:36:38 -!- copumpkin has joined.
03:37:10 <zzo38> Do you have idea if I could make up some doppelganger's prestige class for Dungeons & Dragons game? I should also probably write a fix for the Metamind class. But I think I did fix the Illithid Savant class now.
03:37:57 <zzo38> I don't remember very well. Was copumpkin wrote the which/left/right class for me or someone else?
03:38:36 -!- augur has quit (Remote host closed the connection).
03:40:58 <itidus20> ok, is λx.y a valid lambda calculus expression?
03:41:07 <zzo38> Not by itself.
03:41:47 <monqy> depends on what you mean by valid
03:42:16 <elliott> itidus20: you're still thinking about lc in terms of its concrete syntax, i see
03:42:53 <itidus20> hmmm
03:44:08 <itidus20> hmmm. now if λx.y is applied to something, would it become "y"?
03:44:13 <elliott> Gregor: How much convincing do you need to add new regexp-ish handlers to egobot
03:44:21 <elliott> itidus20: yes.
03:44:28 <elliott> specifically, the _application_ would become y.
03:44:43 <itidus20> perhaps i should instantiate a something
03:44:47 -!- quintopia has quit (Quit: Lost terminal).
03:44:55 -!- quintopia has joined.
03:44:55 -!- quintopia has quit (Changing host).
03:44:55 -!- quintopia has joined.
03:44:58 <Gregor> elliott: ???
03:45:06 <itidus20> (λx.y) z becomes (y)
03:45:25 <elliott> Gregor: For a nicer learndb system :P
03:45:51 <elliott> Hmm,w ait
03:45:53 <elliott> `? test
03:45:55 <HackEgo> ​/home/hackbot/hackbot.hg/multibot_cmds/lib/limits: line 5: exec: ?: not found
03:45:57 <elliott> Great
03:46:01 <elliott> Gregor: Never mind
03:46:25 <itidus20> and (λx.x) z becomes (x)
03:46:33 <itidus20> oops
03:46:35 <itidus20> oops
03:46:39 <elliott> Gregor: How can one view a certain file on hackego served as text/html :P
03:46:39 <itidus20> and (λx.x) z becomes (z)
03:46:56 <Gregor> `url
03:46:58 <HackEgo> http://codu.org/projects/hackbot/fshg/
03:47:04 <elliott> Gregor: That's as text/plain
03:47:22 <Gregor> Oh ... I see what you ... want ... but not why :P
03:47:27 <Gregor> "You can't" is the simple answer :P
03:47:30 <elliott> Gregor: Hyperlinked learndb wiki :D
03:47:36 <elliott> I just have to generate it after every learndb mutation.
03:48:47 <elliott> Gregor: C'moooooooooon
03:48:54 <itidus20> (λx.y) z becomes y and (λx.x) z becomes z, is this so far so good?
03:50:11 <elliott> itidus20: Yes.
03:50:28 <Gregor> elliott: Seems to me like this is when hackiki and hackbot should be merged :P
03:50:51 <elliott> Gregor: Well, no, it'd not be like hackiki. But I could write it as a hackiki page.
03:50:58 <elliott> Can any hackiki read from HackEgo?
03:52:22 <Gregor> Not at present >: )
03:52:38 <Gregor> Aaaaaaaaaand ... not tonight :P
03:53:55 <elliott> Gregor: How can I make HackEgo send multiple lines X-D
03:54:11 <elliott> I need to send each definition of a word on a separate line or it won't fit multiple definitions at all >__>
03:54:44 <Gregor> Not - gonna - happen.
03:54:59 <Gregor> One-in-one-out is a pretty strict rule.
03:55:12 <zzo38> Is it ever going to fix that QUIT messages should be copied into the channel logs?
03:55:14 <elliott> Maaaan, HackEgo is SO unsuitable for a learndb.
03:55:43 <pikhq> Clearly we need another bot.
03:55:47 <elliott> Yes.
03:56:00 <Gregor> zzo38: Probably. Months/years from now when I grab a moment to do it.
03:56:05 <pikhq> fungot, EgoBot, glogbot HackEgo? Definitely not enough.
03:56:06 <fungot> pikhq: it saves valuable internet bandwidth even if i'd get an " indefinite" number of arguments ( 1 for 0) i need to
03:56:11 <pikhq> Oh, and clog.
03:56:34 <zzo38> I wrote an IRC bot program once.
03:58:12 <zzo38> It is currently connected to Freenode.
03:58:37 <elliott> What's it called
03:58:38 * CakeProphet finishes his Data Structures project and turned it in with exactly 2 minutes to spare.
03:58:40 <elliott> Is it that pokemon one
03:58:51 <zzo38> elliott: Yes, well, sort of.
03:59:13 <zzo38> It is named "PocketMonsterIRC" you can command it to join channels
03:59:14 -!- augur has joined.
03:59:36 -!- Jafet has quit (Quit: Leaving.).
04:00:51 -!- PocketMonsterIRC has joined.
04:01:38 <zzo38> See? That is how it works.
04:02:36 <zzo38> OK
04:02:52 <CakeProphet> cool!
04:02:55 <itidus20> So if I put x y that is an application, but it cannot be applied until something like (λx.(x y)) λa.b which would become (λa.b) y and then finally b
04:03:04 <CakeProphet> no
04:03:19 <CakeProphet> x y is an application
04:03:20 <elliott> that is a correct reduction
04:03:25 <CakeProphet> it applies things.
04:03:30 <CakeProphet> but yes the reduction is correct.
04:03:59 <itidus20> CakeProphet: ah so you mean the terminology is a bit wonky
04:04:01 <CakeProphet> oh... I see what you mean, nevermind.
04:04:18 <itidus20> anyway.. hmm
04:04:23 <CakeProphet> the expression that a function returns is not evaluated until the function itself is applied.
04:04:36 <CakeProphet> if that's what you mean.
04:04:39 <elliott> Gregor: I have the perfect learndb ;___;
04:04:39 <elliott> What if
04:04:42 <elliott> I could make it
04:04:44 <elliott> Send notices
04:04:45 <elliott> ????????????????????????
04:04:47 <elliott> Those are better
04:04:48 <elliott> maybe
04:04:49 <elliott> help
04:04:54 <elliott> friendship learndb
04:04:55 <zzo38> I set up a macro to send command to PocketMonsterIRC, in my IRC client. It is possible to do that
04:05:04 <itidus20> now.. if i was to (λx.(x y)) a then that would become a y right?
04:05:07 -!- Jafet has joined.
04:05:16 <zzo38> So you can set up a macro too if you want to send commands, including your own program if you want to make IRC bot, to do that
04:05:23 <PocketMonsterIRC> zzo38:ro 2d6 = 5
04:05:30 <PocketMonsterIRC> zzo38:ro 2d6 = 7
04:05:30 <CakeProphet> itidus20: yes, but y should be defined somewhere.
04:05:32 <PocketMonsterIRC> zzo38:ro 2d6 = 4
04:05:33 <PocketMonsterIRC> zzo38:ro 2d6 = 12
04:05:38 <elliott> Gregor: See.
04:05:42 <elliott> So non-obtrusive.
04:05:43 <Patashu> stop that
04:05:44 <elliott> My nick column is only like
04:05:48 <elliott> At the edge of my screen now
04:05:57 <CakeProphet> itidus20: the thing to remember is that a, x, and y are all functions.
04:06:18 <itidus20> hmm...
04:06:31 <CakeProphet> there is /no/ other kind of value
04:07:15 <CakeProphet> and... that's pretty much it, in essense.
04:07:24 -!- elliott has changed nick to shfkhsdlsjdflsah.
04:07:27 <itidus20> CakeProphet: well would i just define y by nesting it in something else?
04:07:34 -!- shfkhsdlsjdflsah has changed nick to XXXXXXXXXXXXXXXX.
04:07:34 <CakeProphet> I'm not sure what you mean.
04:07:38 <XXXXXXXXXXXXXXXX> MWAHAHA
04:07:41 -!- XXXXXXXXXXXXXXXX has changed nick to elliott.
04:07:56 <CakeProphet> you define y through as a lambda parameter, yes.
04:08:09 <itidus20> ahh i see
04:08:39 <itidus20> so i would just say a y becomes λa.(a y) b and then it would become a b
04:08:53 <oklopol> "<Patashu> I just opened it up and got 227 seconds on expert. was wondering if that was decent" <<< my record is about 180 on this computer, haven't played a lot yet. i usually play normal since you can only win every 8th or so expert, which is frustrating
04:08:55 <CakeProphet> a y doesn't become that expression, no
04:08:59 <CakeProphet> but you could change it to that yourself.
04:09:01 <elliott> oklopol: teach itidus20 lambda calculus
04:09:13 <itidus20> sorry cake sorry
04:09:17 <itidus20> i got distratced rushing
04:09:23 <itidus20> so i would just say a y becomes λy.(a y) b and then it would become a b
04:09:24 <oklopol> my leftie record is something like 227
04:09:31 <Patashu> oklopol: download Mines-Perfect and set it to 'Hint' mode. whenever you have to be lucky hint gives you hints until you don't have to be anymore
04:09:50 <CakeProphet> itidus20: but then a is not defined in any of that.
04:10:01 <elliott> oklopol: im waiting
04:10:12 <oklopol> oh also i don't use flags usually, it's more fun that way, but way slower
04:10:25 <CakeProphet> itidus20: also do you understand how multiparameter functions work?
04:10:30 <elliott> there
04:10:32 <elliott> is no such thing
04:10:34 <elliott> in the lambda calculus
04:10:35 <CakeProphet> .......
04:10:38 <CakeProphet> yes I know
04:10:39 <elliott> jesus christ are you trying to complicate it for itidus20
04:10:47 <CakeProphet> no I am showing him how you would do such a thing.
04:10:47 <elliott> he doesn't even know the basics stop bringing up things for no reason
04:11:08 <elliott> yes "now that you have failed to learn the basics of the lambda calculus let me tutor you in its more advanced usage"
04:11:13 <Patashu> why are we teaching itidus20 lambda calculus?
04:11:19 <CakeProphet> ...he just demonstrated that he has an idea of the basics.
04:11:21 <oklopol> itidus20: first things first, here's how to simulate oop in lc
04:12:00 <itidus20> so guys.. whats another way i can write λx.(a y)? is there any?
04:12:09 <CakeProphet> a is not defined
04:12:11 <CakeProphet> y is not defined
04:12:22 <CakeProphet> you can have.
04:12:22 <itidus20> yes its an ironic function
04:12:29 <oklopol> ironic function
04:12:32 <itidus20> i just realized it when i hit enter
04:12:49 <elliott> oklopol: im waiting for you to teach itidus20 lc
04:12:51 <itidus20> humm i guess what i mean is
04:13:01 <CakeProphet> λa.(λy.(λx.a y))
04:13:31 <oklopol> elliott: okay, but only because i'm a professional teacher now
04:13:46 <itidus20> cake. ok i get what you mean there i think.. however..
04:13:47 <oklopol> itidus20: see, functions are like these creatures that eat stuff and poop other stuff out
04:13:58 <oklopol> but the poop is edi
04:14:01 <oklopol> ble!
04:14:13 <itidus20> is there a way to reduce λa.b c
04:14:21 <CakeProphet> not as a standalone expression
04:14:23 <oklopol> it's yummy poop really
04:15:38 <itidus20> but λa.b c d is either (λa.b c) d or λa.((b c) d) right?
04:16:20 <itidus20> hmm or λa.(b (c d)) also
04:16:24 <Jafet> I wonder what's the minimum number of identifiers you need for lambda calculus to be turing complete
04:16:29 <Jafet> Enough to define S and K, I guess
04:16:46 <Jafet> That makes three or so
04:16:56 <oklopol> "<Patashu> oklopol: download Mines-Perfect and set it to 'Hint' mode. whenever you have to be lucky hint gives you hints until you don't have to be anymore" <<< does it crash if you construct a convoluted case where it's hard to tell
04:17:19 <pikhq> S=\xyz.xz(yz);K=\xy.x says "3 at most".
04:17:27 <Patashu> oklopol: I've never seen it mischaracterize or crash
04:17:28 <Jafet> I presume the software doesn't let you tell it which position to use
04:17:36 <pikhq> itidus20: It's always \a.((b c) d), by definition.
04:17:47 <oklopol> Patashu: i've never seen a hard problem in ms
04:17:51 <elliott> oklopol: please teach itidus20 lambda calculus thanks
04:17:57 <oklopol> which was not manually constructed
04:18:12 <itidus20> its best just to let me ask the questions ^_^;
04:18:20 <oklopol> elliott: oh okay but only because it's my profession
04:18:51 <Jafet> Can you make a turing complete set of combinators with two variables? I suspect it's impossible with one
04:19:08 <elliott> Jafet: it's provably impossible with one
04:19:14 <Patashu> oklopol: yeah, the randomly genreated patterns are easy because you get so many clues
04:19:24 <CakeProphet> elliott: prove it.
04:19:27 <oklopol> itidus20: so you know how functions have an arg and then they have a body, well, the thing is when you apply a function, or "usabilize" it, it means you like put stuff to the arg and then like substitute things (let's not get into details) and that's it then
04:19:28 <elliott> k
04:19:35 <elliott> its proved in that paper uhh
04:19:36 <pikhq> CakeProphet: There is one definable function:\x.x
04:19:40 <elliott> but basically
04:19:42 <itidus20> pikhq: so λa.b c d is unambiguously λa.((b c) d) then?
04:19:45 <elliott> repeat the combinator N times
04:19:47 <Jafet> pikhq: \x.x x
04:19:49 <elliott> Jafet: oh uh
04:19:51 <pikhq> Jafet: Fuck you.
04:19:53 <pikhq> Jafet: :P
04:19:53 <elliott> Jafet: there is a one-combinator complete base
04:19:56 <elliott> but you need parentheses
04:19:58 <elliott> or at least
04:20:00 <elliott> some tree structure
04:20:03 <elliott> you cannot just have it be "unary"
04:20:09 <elliott> i.e. repeated applications without parens of one combinator
04:20:10 <pikhq> itidus20: Yes.
04:20:11 <oklopol> Patashu: maybe that's the reason, yes, dunno.
04:20:15 <Jafet> elliott: but the combinator can't be defined with just one variable name
04:20:20 <elliott> Jafet: oh
04:20:21 <elliott> right
04:20:23 <Jafet> So you can't bootstrap it into one-variable lambda calculus
04:20:25 <elliott> i see what you mean
04:20:41 <oklopol> in any case, there's a very small amount of patterns you have to learn
04:21:04 <elliott> Jafet: yeah i suspect you always need three variables
04:21:08 <elliott> except hmm
04:21:16 <elliott> can S be expressed as some composition of two-arg combinators...
04:21:35 <zzo38> I have had idea, make a program it can do compression, decompression, encryption, using its own programming language with these blocks: Top block, Pipe block, Control block, I/O block, Pure block, and Data block.
04:22:03 <Jafet> Breaking news: zzo invents cobol
04:22:07 <itidus20> so i know that λf.λx.x or λfx.x or \fx.x or \fx->x is church zero :D
04:22:15 <elliott> Jafet: teach itidus20 lambda calculus
04:22:36 <itidus20> ^alonzo-church zero
04:22:43 <oklopol> "<CakeProphet> elliott: prove it." --- it basically means you can only have functions that take an argument and apply it to itself n times
04:22:48 <pikhq> itidus20: The Church numerals are nothing inherent, they're just an encoding of numerals in the calculus.
04:22:49 <oklopol> so isn't it kind of obvious
04:22:58 <elliott> oklopol: well you can also apply them to self-applications :P
04:23:08 <elliott> as in \x.x(xx)
04:23:12 <elliott> CLEARLY
04:23:13 <elliott> THAT MAKES
04:23:14 <elliott> ALL
04:23:14 <elliott> THE
04:23:15 <elliott> DIFFERENCE
04:23:15 <pikhq> itidus20: This would be a bit like learning C by staring at struct {void*car,*cadr;} for a bit.
04:23:16 <CakeProphet> oklopol: prove that it's obvious. :D
04:23:21 <zzo38> Each one has its own commands, restrictions, etc. Such as, Top block is only one and it has no flow control. All operations in I/O block are reversible, including I/O. Each block has its own memory and there are restrictions how to access the memory from other blocks and from within the same block.
04:23:32 <itidus20> hmmmm
04:23:44 <pikhq> Erm, s/cadr/cdr/
04:23:44 <itidus20> ok back on track lets see
04:23:46 <Jafet> oklopol: jigsaw puzzles are turing complete
04:24:05 <Patashu> is that like the wang tiling turing completeness proof?
04:24:28 <Jafet> Yes, just assign colours to pieces
04:24:46 <oklopol> "<elliott> oklopol: well you can also apply them to self-applications :P" --- well yes, sure, and i don't actually have any idea what that implies
04:24:48 <zzo38> Can you explain how jigsaw puzzles are turing complete?
04:25:01 <CakeProphet> a human with a pencil and paper is turing complete.
04:25:02 <Patashu> zzo38, look up wang tiling
04:25:03 <elliott> \x.x(xx) looks suspiciously like the body of fix
04:25:07 <elliott> erm
04:25:07 <elliott> of Y
04:25:15 <elliott> but that has two variables :P
04:25:41 <Patashu> basically, it's set up to never repeat itself. so with certain initial conditions you can come up with an infinite number of different end results
04:25:52 <oklopol> "<CakeProphet> oklopol: prove that it's obvious. :D" --- i never said it's obvious, i asked whether it was obvious. i have revolutionized the socratic method, really.
04:26:14 <Patashu> I think it halts if you have to make a hole? don't recall exactly
04:26:34 <CakeProphet> I will now use the socratic method to teach itidus20
04:26:39 <CakeProphet> itidus20: what is the lambda calculus?
04:26:50 <oklopol> halts?
04:27:25 <oklopol> if a tiling never repeats itself, you have uncountably many ways to tile the plane
04:27:26 -!- cheater has quit (Ping timeout: 260 seconds).
04:27:35 <CakeProphet> oklopol: also that was a rhetorical question DOESN'T COUNT.
04:27:47 <oklopol> i mean if there is no periodic tiling, then you have uncountably many tilings
04:28:05 <Jafet> oklopol: incorrect
04:28:10 <zzo38> OK, I did read about it. "It is possible to translate any Turing machine into a set of Wang tiles, such that the Wang tiles can tile the plane if and only if the Turing machine will never halt. This problem is undecidable; therefore, the Wang tiling problem is also uncomputable. In a sense, Wang tiles have computational power equivalent to that of a Turing machine."
04:28:12 <Jafet> See Penrose tilings
04:28:40 <oklopol> i'm talking about wang tiles, but i'm pretty sure this holds for other shapes too
04:28:41 <zzo38> And even DNA as well, apparently.
04:29:09 <itidus20> back hmm
04:29:20 <oklopol> Therefore, a finite patch cannot differentiate between the uncountably many Penrose tilings, nor even determine which position within the tiling is being shown.[43]
04:29:23 <oklopol> on wp
04:29:39 <oklopol> where's your reference for only countably many tilings?
04:29:46 <CakeProphet> what are some examples of languages that can be proved to be Turing complete, but where it is very difficult to prove through isomorphism to another language.
04:29:59 <Jafet> Hmm, whoops
04:30:07 <Jafet> Maybe it was the pinwheel tiling
04:30:09 <Gregor> zzo38: Fixed (but not in raw yet)
04:30:22 <oklopol> you do realize i get paid thousands of euros a month to think about tilings
04:30:37 <Jafet> No, I did not realize that
04:30:54 <oklopol> i talk about it all the time
04:31:05 <oklopol> i'm like hey guys you know how i do ca and shit
04:31:19 <oklopol> and you guys like wow oklo u so cool
04:31:23 <oklopol> and i'm like, well, yes
04:31:53 <elliott> copumpkin: so if ghc is getting type-level nats, constraint kinds... what about pattern synonyms? I figure someone must be working on everything I've ever wanted :P
04:31:57 <oklopol> cellular automata are just deterministic tilings
04:32:12 <oklopol> you use the same constructions
04:32:35 <CakeProphet> elliott: pattern tail x = (_:x) ???
04:32:55 <elliott> CakeProphet: that's not the right name for that pattern
04:32:58 <elliott> you can do that already anyway
04:33:00 <elliott> f (tail -> xs) = ...
04:33:09 <elliott> what's more relevant is something like
04:33:18 <CakeProphet> .....you can? is that an extension or something?
04:33:26 <elliott> pattern VarBind name value = SetVar (Var name) (Eval (Exp value))
04:33:27 <elliott> or w/e
04:33:29 <elliott> CakeProphet: view patterns
04:34:06 <CakeProphet> I am not finding your example easy to discern.
04:34:13 <oklopol> anyway there are multiple ways to show tiling is undecidable, the usual way is to use robinson's tileset which draws an infinite quadtree of squares on the plane (Squares on a Plane!), you then just run a tm in each of these squares, avoiding hitting any of the smaller squares inside the big one
04:34:17 <elliott> which example
04:34:20 <oklopol> this is easy to do as tilings are nondeterministic
04:34:21 <zzo38> But I wanted more-notation in GHC, too. As well as, the ability to transform categories at compile time using TH, other than only the Hask category.
04:34:26 <elliott> CakeProphet: /
04:34:27 <elliott> ?
04:34:49 * Sgeo_ irritates Gregor
04:35:00 <oklopol> determinizing this is slightly harder, but possible, and proves nilpotency of 1-d ca is undecidable as well
04:35:18 <oklopol> this is a result of my supervisor from some 20 years ago
04:35:38 <elliott> CakeProphet: ?
04:35:41 <oklopol> also proves entropy of ca is uncomputable
04:36:43 <elliott> CakeProphet: hello?
04:37:12 <oklopol> Patashu: i can easily prove the uncountability thing to you if you know what compactness is, otherwise i'll go to work
04:37:45 <CakeProphet> elliott: back.
04:37:51 <oklopol> (i hope you don't, because i really have to go to work)
04:37:53 <elliott> <elliott> which example
04:37:56 <Patashu> go to work
04:37:59 <CakeProphet> your VarBind thing.
04:38:00 <CakeProphet> what does it do.
04:38:08 <elliott> declares a pattern synonym.
04:38:12 <elliott> then
04:38:17 <elliott> f (VarBind name value) = ...
04:38:18 <elliott> ===
04:38:21 <elliott> f (SetVar (Var name) (Eval (Exp value))) = ...
04:38:38 <CakeProphet> oh okay
04:38:42 <CakeProphet> right that's what I was saying basically.
04:38:45 <elliott> the lack of ability to abstract patterns is one of haskell's major flaws imo. it means that you have to deliberately design your datatypes to avoid nesting (and therefore be weaker, structurally) to make matching convenient.
04:38:58 <elliott> it also makes using things like Mu to do recursive types prohibitive
04:39:08 <elliott> which makes e.g. seamless annotation of datatypes a pain
04:39:15 <elliott> (like annotating an AST with source location information at every node)
04:39:20 <zzo38> Well, I would like to have macros.
04:39:26 <oklopol> thanks. also because it's not at all easy to prove
04:39:32 <CakeProphet> elliott: also how was tail not the right name for that pattern.
04:39:37 <CakeProphet> when that's exactly what it is..
04:39:41 <elliott> it is not.
04:39:55 <elliott> it's consSomething
04:40:00 <elliott> an ugly name for an ugly patter
04:40:00 <elliott> n
04:40:04 <elliott> you have to describe the _inverse_
04:40:32 <CakeProphet> ...no? pattern tail x = (_:x)
04:40:38 <elliott> no.
04:40:41 <elliott> that is the wrong name.
04:40:44 <CakeProphet> f (tail z) === f (_:x)
04:40:46 <copumpkin> elliott: they're in SHE, quit bitchin'
04:40:47 <CakeProphet> er
04:40:49 <CakeProphet> s/x/z/
04:40:53 <elliott> f (tail xs) = xs
04:40:55 <elliott> if we say
04:40:58 <elliott> f (tail [99,9])
04:41:02 <elliott> we should get [99,9]
04:41:05 <elliott> because that's how patterns work
04:41:11 <elliott> f (tail [99,9]) == []
04:41:15 <elliott> oops!
04:41:18 <elliott> your name is incorrect.
04:41:21 <elliott> copumpkin: oh come on
04:41:36 <CakeProphet> ....erm
04:42:07 <CakeProphet> so what is tail?
04:42:10 <CakeProphet> in pattern land?
04:42:11 <elliott> sigh
04:42:16 <elliott> it's not anythning
04:42:19 <elliott> because tail is not reversible
04:42:27 <elliott> you can't go from (tail [99,9,9]) to [99,9,9]
04:42:33 <elliott> because you get [9,9] which drops the head information
04:42:35 <elliott> there is no tail pattern
04:42:44 <CakeProphet> ...?
04:42:49 <CakeProphet> patterns need to be reversible?
04:43:01 <elliott> i am done bashing my head against this particular brick wall, sorry. figure it out for yourself
04:43:06 <zzo38> I will try to make a better macro system for Haskell, if I can.
04:43:47 <CakeProphet> functions are already pretty good at being macros...
04:44:46 <zzo38> CakeProphet: I don't think so. That is, if you want complicated macros doing stuff that is not how functions do.
04:44:57 <Gregor> Huzzah, I just fixed an extremely minor bug nobody knew about while thinking I was fixing a less-minor bug somebody did know about :P
04:45:35 <oklopol> Gregor: i'm a bit disappointed, i thought you were omnipotent
04:45:38 <Gregor> zzo38: OK, now the ACTUAL bug has been fixed :P
04:45:56 <Gregor> Sgeo_: Maybe once per /book/ :P
04:46:00 <oklopol> but 41 seconds to fix that second bug...
04:46:01 <zzo38> Gregor: OK thanks
04:46:42 <zzo38> Another feature I would like to have, is a function whatType :: Q Type in Template Haskell which when bind to function, that function will receive the parameter telling what types are expected for an expression belonging in place of the TH splice.
04:46:59 -!- PocketMonsterIRC has quit (Read error: Connection reset by peer).
04:46:59 <CakeProphet> elliott: I think the problem is that [99,9] is not a pattern you'd want to use with tail anyways.
04:47:13 <CakeProphet> because it's a literal.
04:47:31 <Gregor> `run wc -l quotes
04:47:42 <HackEgo> 662 quotes
04:47:54 <Gregor> Note how "wc -l quotes" happens to give a perfectly-formatted English reply :P
04:48:01 <elliott> CakeProphet: you are wrong
04:48:03 <zzo38> OK
04:48:52 <CakeProphet> okay, but I don't think I am.
04:48:56 <CakeProphet> noted?
04:49:07 <elliott> CakeProphet:
04:49:11 <elliott> f (tail [99,9]) = "hello world"
04:49:14 <elliott> f _ = "oh no"
04:49:19 <elliott> f (tail [99,9]) --> "oh no"
04:49:29 <CakeProphet> right, I'm saying it doesn't make sense to use [99,9] with tail
04:49:29 <elliott> if you think that a pattern should not match _itself_ as code, you are insane.
04:49:36 <elliott> copumpkin: please tell CakeProphet he's wrong thx
04:49:40 <CakeProphet> you would want to use a variable.
04:49:44 <CakeProphet> to bind
04:49:46 <CakeProphet> with
04:49:52 <elliott> CakeProphet: you are wrong.
04:49:59 <elliott> hey Gregor tell CakeProphet he's wrong.
04:50:27 <monqy> whats hapening
04:50:31 <monqy> i haven't been attentioen
04:50:36 <monqy> is CakeProphet wrong
04:50:36 <elliott> CakeProphet thinks that
04:50:39 <elliott> pattern tail x = _:x
04:50:42 <elliott> is a correct pattern synonym
04:50:42 <elliott> despite
04:50:45 <elliott> <elliott> f (tail [99,9]) = "hello world"
04:50:45 <elliott> <elliott> f _ = "oh no"
04:50:46 <elliott> <elliott> f (tail [99,9]) --> "oh no"
04:50:49 <elliott> and the fact that tail is not reversible anyway
04:50:55 <elliott> and me telling him that pattern should actually be called consAnythingTo
04:51:04 <monqy> im confsued??????
04:51:07 <elliott> yes
04:51:15 <CakeProphet> I didn't say it matched the code, but that tail was a correct name for it because it matches the tail of the input.
04:51:22 <elliott> CakeProphet: that is not how patterns work.
04:51:56 <elliott> the pattern (tail xs) should match the result of a function application (tail xs) and bind xs to the argument given to tail.
04:52:02 <elliott> this is impossible, as tail is not reversible.
04:52:15 <CakeProphet> ...is there any functions that could be turned into pattern synonyms like that?
04:52:15 <elliott> if you think otherwise, you are wrong, and I have explicitly shown you why your pattern is incorrect
04:52:31 <elliott> varBind name value = SetVar (Var name) (Eval (Exp value))
04:52:34 <elliott> pattern varBind name value = SetVar (Var name) (Eval (Exp value))
04:52:43 <elliott> O;H MY GOD SO HARD
04:52:51 <elliott> the correct definition of a tail pattern is
04:52:55 <elliott> pattern tail (_:xs) = xs
04:52:57 <elliott> which would be used like
04:53:07 <elliott> f (tail (x:xs)) = x
04:53:10 <elliott> which is clearly impossible
04:53:18 <zzo38> What I mean, is, to be able to make up macros that make up do notation and list notation and that stuff.
04:54:40 <CakeProphet> elliott: okay I understand.
04:54:48 <CakeProphet> I was just thinking of the pattern synonyms as pattern functions, which they are.
04:58:37 -!- jix has quit (Ping timeout: 260 seconds).
04:58:37 -!- Wamanuz has quit (Ping timeout: 252 seconds).
04:58:37 -!- Deewiant has quit (Ping timeout: 252 seconds).
04:59:21 -!- CakeProphet has quit (Ping timeout: 252 seconds).
04:59:21 -!- yiyus has quit (Ping timeout: 260 seconds).
05:01:05 -!- monqy has quit (Ping timeout: 252 seconds).
05:04:09 -!- tiffany has quit (Ping timeout: 260 seconds).
05:04:10 -!- zzo38 has quit (*.net *.split).
05:04:10 -!- yorick has quit (*.net *.split).
05:04:10 -!- aloril has quit (*.net *.split).
05:04:11 -!- augur has quit (*.net *.split).
05:04:11 -!- copumpkin has quit (*.net *.split).
05:04:11 -!- itidus20 has quit (*.net *.split).
05:04:11 -!- fizzie has quit (*.net *.split).
05:04:11 -!- Zetro has quit (*.net *.split).
05:04:11 -!- chickenzilla has quit (*.net *.split).
05:04:12 -!- Jafet has quit (*.net *.split).
05:04:12 -!- quintopia has quit (*.net *.split).
05:04:12 -!- Patashu has quit (*.net *.split).
05:04:12 -!- lambdabot has quit (*.net *.split).
05:04:12 -!- aspect has quit (*.net *.split).
05:04:13 -!- twice11 has quit (*.net *.split).
05:04:13 -!- sebbu2 has quit (*.net *.split).
05:04:13 -!- Sgeo_ has quit (*.net *.split).
05:04:13 -!- DH____ has quit (*.net *.split).
05:04:13 -!- kmc has quit (*.net *.split).
05:04:13 -!- iamcal has quit (*.net *.split).
05:04:13 -!- rodgort has quit (*.net *.split).
05:04:13 -!- ineiros has quit (*.net *.split).
05:04:13 -!- Lymee has quit (*.net *.split).
05:04:13 -!- Nisstyre has quit (*.net *.split).
05:04:13 -!- jcp has quit (*.net *.split).
05:04:14 -!- elliott has quit (*.net *.split).
05:04:14 -!- myndzi has quit (*.net *.split).
05:04:14 -!- MDude has quit (*.net *.split).
05:05:20 -!- elliott has joined.
05:05:20 -!- Deewiant has joined.
05:05:20 -!- glogbackup has joined.
05:05:20 -!- tiffnya has joined.
05:05:20 -!- monqy_ has joined.
05:05:20 -!- CakeProp1et has joined.
05:05:20 -!- jix_ has joined.
05:05:20 -!- Wamanuz2 has joined.
05:05:20 -!- Jafet has joined.
05:05:20 -!- augur has joined.
05:05:20 -!- quintopia has joined.
05:05:20 -!- copumpkin has joined.
05:05:20 -!- zzo38 has joined.
05:05:20 -!- itidus20 has joined.
05:05:20 -!- sebbu2 has joined.
05:05:20 -!- Sgeo_ has joined.
05:05:20 -!- kmc has joined.
05:05:20 -!- iamcal has joined.
05:05:20 -!- lambdabot has joined.
05:05:20 -!- rodgort has joined.
05:05:20 -!- yorick has joined.
05:05:20 -!- myndzi has joined.
05:05:20 -!- aloril has joined.
05:05:20 -!- MDude has joined.
05:05:20 -!- fizzie has joined.
05:05:20 -!- ineiros has joined.
05:05:20 -!- Zetro has joined.
05:05:20 -!- aspect has joined.
05:05:20 -!- chickenzilla has joined.
05:05:20 -!- Lymee has joined.
05:05:20 -!- Nisstyre has joined.
05:05:20 -!- jcp has joined.
05:05:20 -!- twice11 has joined.
05:05:37 -!- elliott has quit (Client Quit).
05:05:37 -!- glogbackup has left.
05:05:37 <CakeProp1et> lol
05:05:37 -!- monqy_ has changed nick to monqy.
05:06:04 <CakeProp1et> that was a tumultuous netsplit.
05:06:20 -!- CakeProp1et has changed nick to CakeProphet.
05:08:22 -!- elliott_ has joined.
05:08:30 <elliott_> CakeProphet: hyo
05:08:31 <elliott_> yorick:
05:08:31 <CakeProphet> elliott_: I don't really see why you didn't just ait. :P
05:08:31 <elliott_> yo
05:08:36 <elliott_> ait?
05:08:37 <CakeProphet> *wait
05:08:40 <elliott_> because
05:08:40 <elliott_> f
05:09:02 <CakeProphet> do I repulse you? :P
05:09:17 <elliott_> yes
05:09:58 <CakeProphet> you just don't understand my ways.
05:10:22 -!- MDude has changed nick to MSleep.
05:10:42 <monqy> ok time to pay attention again
05:10:49 -!- zzo38 has quit (Remote host closed the connection).
05:11:11 <elliott_> monqy: help in mercury how do i define a typeclass which takes a type function
05:11:12 <elliott_> not a type
05:12:30 <monqy> i dont know that much meurgcury :_--; how to learn type clases
05:12:34 * Sgeo_ wonder if any Ruby nuts would consider it sinful to use hg for a Ruby project
05:12:58 <monqy> "dont use ruby" -monqy
05:13:06 <elliott_> "dont use hg" -elliott
05:13:30 <elliott_> hey monqy its
05:13:30 <elliott_> six am
05:13:31 <elliott_> do i
05:13:32 <Sgeo_> Hmm? What's wrong with hg, is git any better, and if no to the last question, what should I use?
05:13:33 <elliott_> sleep
05:13:38 <elliott_> Sgeo_: darcs
05:13:47 <elliott_> or git if you care about other people but really you don't
05:13:51 <CakeProphet> !perl print (("yes", "no")[int(rand(2))])
05:13:53 <EgoBot> no
05:14:07 <CakeProphet> -- monqy
05:14:08 <monqy> can you selpp? recently i have been unable to sleep properly so i do not sleep properly, then i take naps when i am ready
05:14:31 -!- lifthrasiir has quit (Ping timeout: 260 seconds).
05:15:22 -!- yiyus has joined.
05:15:29 -!- Jafet has quit (Quit: Leaving.).
05:17:35 <itidus20> ok so, λa.(((((b c)d)e)f)g) i figure this is equivalent of λa.bcdefg but does (λa.bcdefg) h reduce to h ?
05:17:55 <itidus20> oops.. no i thought that out wrong
05:18:00 <monqy> oops
05:18:28 <itidus20> does (λa.bcdefg) h reduce to bcdefg ?
05:18:51 <copumpkin> yes
05:20:03 <itidus20> do applications only get applied in the presence of bound variables?
05:20:19 <monqy> what
05:20:25 <itidus20> well
05:20:34 <itidus20> bcdefgh cannot be reduced right?
05:20:58 <itidus20> uhm no.. i'm still asking the wrong question
05:21:23 <itidus20> (bcdefg) h cannot be reduced right?
05:21:34 <elliott_> sure
05:22:28 <itidus20> but if it was λb.(bcdefg) h it would become hcdefg
05:22:54 <copumpkin> if you meant different parentheses
05:23:08 <itidus20> parentheses are fairly confuing to me
05:23:49 <monqy> (\b.bcdefg)h
05:23:57 <itidus20> ahhh
05:23:59 <monqy> => hcdefg
05:27:17 <itidus20> hmm.. so the order of bcdefg only matters when one of them has an abstraction applied to it
05:27:30 <monqy> what
05:29:38 <itidus20> well.. you only need to think about implicit parentheses in (\b.bcdefg) if there is something like (\d.bcdefg) \x.y
05:29:53 <monqy> what
05:30:45 <itidus20> well i guess i am wondering what (\d.bcdefg) \x.y becomes
05:31:00 <CakeProphet> substitute d with \x.y
05:31:02 <CakeProphet> in the lambda
05:31:06 <CakeProphet> and return the expression
05:31:41 <itidus20> hmmm bc \x.y efg
05:31:50 <monqy> needs parens
05:32:09 <itidus20> thats what i am a bit confused about
05:32:13 <CakeProphet> you do know how functions work right?
05:32:36 <CakeProphet> also how is it confusing.
05:32:36 <itidus20> hmmm (((((bc)\x.y)e)f)g) ?
05:33:04 <monqy> you can reduce it further
05:33:10 <CakeProphet> you can also just write it as bc(\x.y)efg
05:33:17 <monqy> wait no oops
05:33:23 <monqy> im cfoneuse
05:33:35 <itidus20> ahhh
05:34:03 <itidus20> ok so needs parens means bc \x.y efg needs to be at least bc(\x.y)efg ?
05:34:08 <monqy> it might be wise to work with a few less free variables and do bigger reductions etc...........
05:34:19 <elliott_> "Have a question for the Republican candidates? Ask it now" ask it now links to youtube fox news help... "fox news google debate" oh god stop collaborating with them nO google
05:34:23 <elliott_> YUORE EVIL BUT NOT TATHT EVIL
05:34:29 <monqy> itidus20: something you might enjoy: (\x.xx)(\x.xx)
05:35:05 <itidus20> monqy: i set that situation up specifically to confuse myself and have it resolved now
05:35:17 <monqy> itidus20: oh?
05:37:26 <itidus20> so what i have learned is if i get (\d.bcdefg) \x.y then it is best reduced to bc(\x.y)efg
05:37:51 <monqy> have you learned anything else
05:38:21 <itidus20> i have what is known as a slow mind
05:38:29 <monqy> oh
05:38:32 <itidus20> i don't multitask very well..
05:38:43 <monqy> what was your conclusion on (\x.xx)(\x.xx)
05:38:48 <itidus20> i tend to like to finish one thought before jumping to another though
05:39:04 <itidus20> i havent actually begun looking at it yet.. which i will start now
05:39:52 <monqy> oh I thought you said you had resolved it but I guess you were referring to something else oops
05:41:34 <itidus20> step 1) (\x.xx)(\x.xx) intermediate step 1.5) (\x.(\x.xx)(\x.xx)) step 2) (\x.xx)(\x.xx) ... this i can now recall as something which i saw in some sidenote i saw somewhere about how not everything can be reduced (i forget exactly.. nevermind that)
05:42:18 <monqy> your intermediate step does not make sense to me
05:42:26 <monqy> is it in a different notation
05:42:32 <itidus20> hahaha
05:42:42 <itidus20> (\x.xx)(\x.xx) reduces to (\x.xx)(\x.xx)
05:42:48 <monqy> yes
05:43:01 <elliott_> sounds like itidus20 is starting to get it :P
05:44:07 <CakeProphet> is (\x.xx) fix? it seems similar.
05:44:18 <monqy> no
05:44:35 <CakeProphet> can you do Y in LC?
05:44:45 <monqy> sorry i just sputtered
05:44:57 <itidus20> (\x.xx) a would be a a
05:45:15 <elliott_> CakeProphet: it's mock. and duh, of course.
05:45:17 <elliott_> erm
05:45:18 <elliott_> mockingbird
05:45:39 <CakeProphet> I figured it was possible I'm just not sure how to write it
05:48:47 <monqy> I used to remember, but then I forgot. ;_;
05:49:53 <elliott_> sent in /msg
05:49:59 <CakeProphet> NOPE I AM GOING TO FIGURE IT OUT.
05:50:03 <elliott_> too late
05:50:06 <CakeProphet> not looking
05:50:12 <elliott_> k
05:50:16 <elliott_> its trivial
05:50:44 <itidus20> so is... trivia
05:50:49 <monqy> hi
05:51:44 <CakeProphet> \f. (\x. f (x x))(\x f (x x))
05:51:58 <CakeProphet> I think.
05:52:00 * CakeProphet checks.
05:52:09 <CakeProphet> BAM...
05:52:13 <CakeProphet> awwww yeah.
05:52:26 <monqy> victory dance
05:52:41 <CakeProphet> like mockingbird with that extra f...
05:56:29 <CakeProphet> recursion is weird in lambda calculus
05:56:32 <CakeProphet> well, I mean, not weird.
05:56:40 <monqy> ok
05:56:46 <CakeProphet> you just can't refer to the function by a name so you have to do the above.
05:57:17 <monqy> there are other ways too
05:58:15 <CakeProphet> I'd imagine they're all more or less equivalent.
06:00:10 <elliott_> LC is really in need of primitive fix, because a proper fix introduces sharing.
06:00:32 <CakeProphet> is sharing a thing that even makes sense to talk about in the context of LC?
06:00:38 <elliott_> yes.
06:00:39 <itidus20> and (\xy.xx)(\xy.xx) reduces into y.(y.(y.(y.((\xy.xx)(\xy.xx))))) and so on reducing forever right?
06:01:21 <itidus20> oops what i mean is
06:01:22 <elliott_> (\xy.xx)(\xy.xx) -> (\y.(\xy.xx)(\xy.xx))
06:01:23 <elliott_> then it stops
06:01:27 <elliott_> because it's a lambda without any application
06:01:38 <itidus20> ahhh
06:01:45 <monqy> you can still reduce cant you??
06:01:56 <monqy> depending on your
06:01:59 <monqy> evaluation strategy
06:02:15 <elliott_> monqy: not helpful
06:02:22 <monqy> ??
06:02:24 <CakeProphet> elliott is using the evaluate-by-impatient-programer strategy.
06:02:47 <monqy> oh wait
06:02:49 <monqy> uhh
06:02:56 <monqy> i think something bad happened
06:03:01 <monqy> heygenie wise
06:03:11 <monqy> it got dirted
06:03:17 <CakeProphet> genie: hey
06:03:30 <monqy> or not
06:03:37 <monqy> how did i confuse myself like that
06:03:38 <monqy> how
06:03:39 <monqy> did that happen
06:03:44 <monqy> maybe i am tired
06:03:55 <CakeProphet> maybe I am going to sleep.
06:04:01 <Vorpal> morning
06:04:12 <Vorpal> I see elliott_ is still up
06:04:26 <elliott_> NO IVE BEEN
06:04:27 <elliott_> IN BED FOR HOURS
06:04:28 <elliott_> AND
06:04:29 <elliott_> AM GOING TO BED
06:04:30 <elliott_> NOW
06:04:37 <Vorpal> elliott_: surely you will fall asleep during school?
06:05:12 <elliott_> zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz;
06:05:15 <monqy> z
06:08:43 <itidus20> (λy'2'.(λy'6'.(λy'10'.(λy'14'.(λy'18'.(λy'22'.(λy'26'.(λy'30'.(λy'34'.(λy'38'.(λy'42'.(λy'46'.(λy'50'.(λy'54'.(λy'58'.(λy'62'.(λy'66'.(λy'70'.(λy'74'.(λy'78'.(λy'82'.(λy'86'.(λy'90'.(λy'94'.(λy'98'.(λy'102'.(λy'106'.(λy'110'.(λy'114'.(λy'118'.(λy'122'.(λy'126'.(λy'130'.(λy'134'.(λy'138'.((λx'141'.(λy'142'.(x'141' x'141'))) (λx'143'.(λy'144'.(x'143' x'143'))))))))
06:08:43 <itidus20> )))))))))))))))))))))))))))))))
06:08:50 <itidus20> heh phew
06:09:37 -!- elliott_ has quit (Ping timeout: 240 seconds).
06:09:40 <monqy> itidus20: hi
06:09:43 <aspect> are those 'numbers' for hygiene?
06:10:03 <itidus20> this thing http://codu.org/lambda/lambda.html
06:10:07 <aspect> because if so, you might be interested to look up deBruijn-index notation
06:10:23 <itidus20> aspect: i'm a newbie really.
06:10:39 <aspect> that doesn't make it any less fun :)
06:10:55 <itidus20> it was auto generated numbers
06:18:05 <CakeProphet> itidus20: http://en.wikipedia.org/wiki/Church_encoding#Church_booleans
06:18:12 <CakeProphet> now read through this article, starting there.
06:18:25 <CakeProphet> and then go back to the top once you've read that.
06:19:36 <CakeProphet> notice how the Church encodings for true and false act like an if expression.
06:20:05 <CakeProphet> true x y = x; false x y = y
06:21:21 <itidus20> i don't like" true = ^ift.^iff.ift "
06:21:33 <CakeProphet> ...okay.
06:21:43 <itidus20> does he mean something else? :P
06:21:54 <CakeProphet> who is he.
06:22:13 <CakeProphet> also what is ^if
06:22:16 <itidus20> well its the codu page i assume its gregor
06:22:27 <itidus20> sounds like a screenshot in order
06:22:55 <monqy> CakeProphet: ^ is lambda
06:22:57 <CakeProphet> dunno but just look at that wikipedia page.
06:23:00 <CakeProphet> it uses a nicer syntax
06:23:08 <CakeProphet> no I saw it.
06:23:10 <CakeProphet> itidus20: no screenshot
06:24:31 <itidus20> http://oi55.tinypic.com/25pq0bc.jpg wahahaha
06:24:34 <CakeProphet> ..
06:24:41 <CakeProphet> dude I can scroll up in the conversation and click on a link.
06:24:52 <itidus20> ok ok nevermind
06:24:55 <itidus20> hmm
06:25:32 <CakeProphet> so yeah you write conditionals like: predicate then-value else-value
06:25:35 <itidus20> so what gregor is doing then is saying "x" = "ift", "y" = "iff"
06:25:43 <CakeProphet> no.
06:25:56 <CakeProphet> just ignore that it's bad.
06:25:59 <CakeProphet> :P
06:26:18 <CakeProphet> true = \a.\b. a
06:26:49 <CakeProphet> you can think of this as a kind of two-argument function.
06:26:53 <CakeProphet> true x y
06:27:18 <CakeProphet> which is actually ((true x) y), see how that works?
06:27:40 <itidus20> hmm \ab.a and \ab.b
06:27:53 <CakeProphet> yes those the typical representations for true and false.
06:28:23 <CakeProphet> \ab.expr just being a shorthand for \a.(\b. expr)
06:28:35 <itidus20> (\ab.a) c reduces to \b.c ?
06:28:41 <CakeProphet> yes.
06:28:52 <CakeProphet> see how it's like a conditional?
06:28:57 <itidus20> hmm
06:29:07 <CakeProphet> once you have and, or, and not defined
06:29:09 <CakeProphet> you can say things like
06:29:15 <CakeProphet> (and a b) x y
06:29:23 <CakeProphet> if a and b are both true then x is returns, otherwise y
06:29:38 <itidus20> (\ab.b) c reduces to (b.b) ?
06:29:47 <CakeProphet> \b.b yes
06:29:52 <itidus20> oops
06:29:59 <itidus20> haha those silly \'s
06:30:10 <itidus20> always trying to catch me out
06:30:11 <CakeProphet> ...am I making any sense?
06:30:25 <itidus20> yes except im thinking about 5 times slower
06:32:25 <CakeProphet> are you familiar with ?: in other languages? church booleans work like that except automatically... you don't need ?:
06:32:47 <itidus20> so if true = \ab.a then true x == \b.x and if false = \ab.b then false x == \b.b
06:32:56 <CakeProphet> yes.
06:33:03 <CakeProphet> true x y = ???
06:33:05 <CakeProphet> false x y = ??
06:33:11 <itidus20> humm
06:33:12 <CakeProphet> homework. go.
06:33:55 -!- Jafet has joined.
06:35:53 <CakeProphet> ....have you figured it out yet.
06:36:32 <itidus20> (\a.(\b.a)) x y (\b.x) y x ; (\a.(\b.b)) x y (\b.b) y y;
06:36:46 <itidus20> so thats about my processing speed
06:37:01 <CakeProphet> you already had half of it worked out you didn't need to start over.
06:37:16 <itidus20> either of us expecting my brain to go any faster will result in just anguish
06:37:27 <itidus20> i suggest enjoy the peace
06:37:28 <CakeProphet> okay so... uh
06:37:33 <CakeProphet> do you see how that's a conditional?
06:38:00 <CakeProphet> if you pass a Church boolean two arguments, true will give you the first one, and false will give you the second one.
06:40:16 <CakeProphet> true x y == x
06:40:19 <CakeProphet> false x y == y
06:40:31 <CakeProphet> .......right?
06:40:50 <CakeProphet> that's like.... a conditition, where you want one thing to happen when something is true and another thing to happen when something is false.
06:40:56 <CakeProphet> >_> <_< hello?
06:44:08 <CakeProphet> you're not paying attention are you.
06:44:12 <Sgeo_> itidus20, ping
06:44:40 <Sgeo_> Night all
06:49:20 -!- Sgeo_ has changed nick to Sgeo.
06:50:04 -!- GreaseMonkey has joined.
06:50:04 -!- GreaseMonkey has quit (Changing host).
06:50:04 -!- GreaseMonkey has joined.
07:01:46 <itidus20> i was afk
07:02:21 <CakeProphet> go forth and learn.
07:06:06 <CakeProphet> :t let true x y = x; false x y = y; not b = b false true in not true
07:06:06 <lambdabot> forall t t1. t -> t1 -> t1
07:06:11 <CakeProphet> :t let true x y = x; false x y = y; not b = b false true in not false
07:06:12 <lambdabot> forall t t1. t -> t1 -> t
07:09:02 <CakeProphet> > let true x y = x; false x y = y; not b = b; and x y = x y false; or x y = x true y in false true in or (not true) (and true false) "launch nukes" "pet kitten"
07:09:03 <lambdabot> <no location info>: parse error on input `in'
07:09:18 <CakeProphet> > let true x y = x; false x y = y; not b = b; and x y = x y false; or x y = x true y in or (not true) (and true false) "launch nukes" "pet kitten"
07:09:19 <lambdabot> "launch nukes"
07:09:25 -!- Patashu has joined.
07:09:39 <Patashu> first minesweeper 'speedrun' video http://www.youtube.com/watch?v=k​tLAPx_v8AE
07:09:44 <CakeProphet> > let true x y = x; false x y = y; not b = b; and x y = x y false; or x y = x true y in or (not false) (and true false) "launch nukes" "pet kitten"
07:09:45 <lambdabot> "pet kitten"
07:10:08 <CakeProphet> er...
07:10:21 <CakeProphet> not should be not b = b false true... I accidentally cut that out.
07:12:10 <CakeProphet> heh, I just noticed that if' in Haskell is a function that converts a Bool to a Church boolean. :P
07:15:31 <Patashu> http://www.youtube.com/watch?v=ktLAPx_v8AE fixed link
07:32:32 -!- rodgort has quit (Ping timeout: 260 seconds).
07:32:49 -!- lifthrasiir has joined.
07:42:12 -!- rodgort has joined.
07:50:17 -!- sllide has joined.
08:01:54 -!- sllide has quit (Ping timeout: 260 seconds).
08:12:51 -!- GreaseMonkey has quit (Quit: The Other Game).
08:21:31 <aspect> let true x = const x; false x = id; cons x y = \z -> z x y; car = true; cdr = false in (car (cdr (cons 1 (cons 2 3))))
08:21:34 <aspect> > let true x = const x; false x = id; cons x y = \z -> z x y; car = true; cdr = false in (car (cdr (cons 1 (cons 2 3))))
08:21:35 <lambdabot> Overlapping instances for GHC.Show.Show (b -> a -> a)
08:21:35 <lambdabot> arising from a use...
08:21:58 <aspect> hm, really?
08:23:07 <Patashu> I think that happens if it tries to show a function
08:23:08 <aspect> > let true x = const x; false x = id; cons x y = \z -> z x y; car = true; cdr = false in (cons 1 (cons 2 3)) cdr car
08:23:09 <lambdabot> 2
08:23:25 <aspect> duh
08:23:44 <aspect> should have used car x = x true etc
08:27:07 -!- nooga has joined.
09:27:01 -!- Patashu has quit (Quit: MSN: Patashu@hotmail.com , Gmail: Patashu0@gmail.com , AIM: Patashu0 , YIM: patashu2 .).
09:41:00 -!- Patashu has joined.
09:42:02 <Patashu> I have a question about holding ctrl and hitting space.
09:42:06 <Patashu> On pidgin and notepad++, it does nothing.
09:42:12 <Patashu> On chrome and mIRC, it creates a space.
09:42:23 <Patashu> Why does it differ across programs? Is it a linux vs non linux thing?
09:59:03 -!- jix_ has quit (Ping timeout: 260 seconds).
09:59:34 -!- jix has joined.
10:10:01 -!- cheater has joined.
10:10:33 -!- cheater has quit (Client Quit).
10:10:48 -!- cheater has joined.
10:33:21 -!- sebbu2 has quit (Read error: Connection reset by peer).
10:33:51 -!- sebbu2 has joined.
10:54:07 -!- FireFly has joined.
10:57:34 -!- Patashu has quit (Read error: Connection reset by peer).
10:57:49 -!- Patashu has joined.
11:18:41 -!- oerjan has joined.
11:48:33 -!- oerjan has quit (Quit: Reboot).
11:55:03 -!- sebbu2 has changed nick to sebbu.
12:06:07 -!- boily has joined.
12:21:00 -!- oerjan has joined.
12:36:09 -!- oerjan has quit (Quit: Something saw my reboot as an opportunity to ask for another one).
12:37:02 -!- Sgeo has quit (Ping timeout: 260 seconds).
12:43:50 -!- pikhq_ has joined.
12:44:10 -!- pikhq has quit (Ping timeout: 258 seconds).
13:08:30 -!- pikhq has joined.
13:09:30 -!- pikhq_ has quit (Ping timeout: 276 seconds).
13:55:39 -!- Sgeo has joined.
14:00:04 -!- Patashu has quit (Quit: MSN: Patashu@hotmail.com , Gmail: Patashu0@gmail.com , AIM: Patashu0 , YIM: patashu2 .).
14:04:09 -!- augur has quit (Remote host closed the connection).
14:11:06 * Sgeo gets an evil gleam in his eye
14:14:48 * CakeProphet gets a gleam in his evil eye
14:14:54 <Sgeo> and by evil i mean boring
14:19:39 -!- copumpkin has quit (Quit: Computer has gone to sleep.).
14:23:02 -!- Phantom_Hoover has joined.
14:24:57 -!- sllide has joined.
14:26:42 -!- jcp has quit (Ping timeout: 260 seconds).
14:28:49 -!- Sgeo has quit (Ping timeout: 258 seconds).
14:46:51 -!- copumpkin has joined.
15:42:37 -!- DH____ has joined.
15:49:28 <Gregor> Idea: wine for win32s.
15:49:38 <Gregor> I expect this to be implemented by the time I reappear in ~1hr.
15:49:39 <Gregor> Thx
15:56:27 <CakeProphet> how's the baltic sea doing?
15:57:10 * CakeProphet has been studying for a quiz on the world map, and now knows where things are located.
15:57:21 <CakeProphet> I feel like, at least for now, my dumb American syndrome has been cured.
15:58:46 <cheater> not frozen over yet
15:59:01 <CakeProphet> oh good.
15:59:29 <cheater> although judging by the last winter it might well happen this year
16:00:01 <cheater> i think they hadn't had that for at least 50 years
16:00:56 <CakeProphet> I think lakes in northern Canada freeze often (...?) and they're on the same latitude roughly.
16:01:03 <CakeProphet> but climate is weird and doesn't really work like that.
16:01:11 <cheater> no it doesn't
16:01:29 <cheater> no it is not the same latitude really, the baltic sea is further south
16:01:31 <cheater> also it is a sea.
16:01:35 <cheater> and very salty.
16:01:48 <CakeProphet> is everything named sea in Europe a sea?
16:01:52 <CakeProphet> because there's a lot of inland seas as well.
16:02:11 <CakeProphet> *Eurasia
16:02:13 <cheater> yes
16:02:16 <cheater> those are seas too.
16:02:45 <cheater> although some seas are called lakes by some cultures
16:02:52 <CakeProphet> yeah we don't have those. Unless you count Salt Lake.
16:02:53 <cheater> for example the baltic sea is called Ostsee in german
16:02:56 <cheater> the eastern lake
16:03:00 <CakeProphet> which I think is a... salt lake? I'm not sure what the difference is.
16:03:06 <cheater> probably an influence from dutch
16:03:36 <cheater> the difference is the drifts
16:03:39 <cheater> ebb and flow and so on
16:03:56 <CakeProphet> I thought it was perhaps naming conventions or size related.
16:04:02 <cheater> and whether it is at the top or at the bottom of the reservoir
16:04:03 <cheater> no
16:04:10 <cheater> a sea is the place all water goes into
16:04:18 <cheater> a lake is a source or an intermediate
16:04:24 <CakeProphet> ah okay.
16:04:43 <CakeProphet> can you have a freshwater sea then?
16:04:52 -!- augur has joined.
16:05:01 <cheater> no
16:05:15 <cheater> in the end water ends up penetrating the sediment and reaching minerals
16:05:20 <cheater> that's the "salt"
16:05:31 <CakeProphet> ah.
16:05:34 <cheater> it's not really salt as is, it's a much more complex selection of minerals
16:05:43 <CakeProphet> right.
16:06:04 <cheater> that's why sea salt is a billion times better than industry table salt
16:06:07 * CakeProphet would like to sail on the great lakes.
16:06:22 <cheater> i can get salt which is gathered from the sea by hand in the adriatic
16:06:23 <CakeProphet> I've only seen the coast (I guess that's what you would call it...)
16:06:47 <CakeProphet> I assume when you say "by hand" you mean "by hand using some tools" right? :D
16:06:51 <cheater> apparently if it's very windy the salt grains crystallize on the surface of the adriatic and they are then gathered by the fishermen or something
16:06:58 <CakeProphet> oh.
16:07:07 <cheater> usually by hand means as opposed to using machines
16:07:18 <CakeProphet> NEVER KNOW SEEMED UNLIKELY.
16:07:49 <CakeProphet> thank you for clearing up my dumb american syndrome with some of your geology.
16:08:02 <CakeProphet> unfortunately that will not help me on my map quiz, which I'm still probably fucked for.
16:10:05 <CakeProphet> it's strange, I would think that things like the Arabian and Adriatic seas as being gulfs
16:10:08 <CakeProphet> and not seas.
16:10:25 <CakeProphet> s/that/of/
16:10:56 <CakeProphet> well, red sea is a better example than arabian.
16:13:05 <CakeProphet> I guess they are gulfs but not by name, perhaps.
16:15:16 <CakeProphet> The Red Sea (alternatively Arabian Gulf[1] or Gulf of Arabia[2][3]) i
16:15:17 <CakeProphet> ah
16:15:45 <CakeProphet> but the Adriatic sea doesn't have an alternative gulf name. :P
16:15:45 <cheater> a gulf is like a sea which is more connected to the ocean
16:19:42 <CakeProphet> what's the climate in Germany comparable to?
16:19:52 <CakeProphet> on the western hemisphere.
16:20:18 <cheater> south or north germany?
16:20:26 <CakeProphet> both I guess.
16:20:43 <cheater> i don't think there is a direct match like that
16:20:48 <CakeProphet> I imagine it's cooler than it is here in the south US.
16:20:54 <cheater> yes
16:21:01 <cheater> south usa is like italy i am told
16:21:05 <CakeProphet> currently 81 F here. which is...
16:21:13 <cheater> i was talking about how the weather is in bari just today
16:21:14 <CakeProphet> 28 C
16:21:22 <cheater> apparently it never goes below 10 celsius
16:21:33 <CakeProphet> huh.
16:21:34 <cheater> which would be similar to what i was told about houston
16:21:44 <CakeProphet> it actually does reach freezing here in the winter, at least for a few weeks.
16:21:45 <CakeProphet> depends on the winter.
16:21:59 <CakeProphet> climate in Georgia = wonderful
16:22:16 <CakeProphet> you get really hot summers and still get below freezing temps in the winter sometimes. :P
16:22:26 <cheater> i don't like winters
16:22:28 <cheater> they're pointless
16:22:46 <CakeProphet> this summer was ridiculous. pretty much upper 90s F for over a month.
16:23:03 <cheater> very good
16:23:05 <cheater> that is what i like
16:23:15 <CakeProphet> and, unlike places like Arizona which frequently hit above 100, it's very humid here.
16:23:47 <CakeProphet> !interp
16:23:51 <CakeProphet> !userinterp
16:23:56 <CakeProphet> !userinterps
16:23:56 <EgoBot> ​Installed user interpreters: acro aol austro bc bct bfbignum brit brooklyn bypass_ignore bytes chaos chiqrsx9p choo ctcp dc decide drawl drome dubya echo ehird elmer fudd google graph hello id insanetemp jethro kraut lperl lsh map num numberwang ook pansy pi pikhq pirate plot postmodern postmodern_aoler prefixes python redneck reverse rimshot rot13 rot47 sadbf sanetemp sfedeesh sffedeesh simplename slashes svedeesh swedish valspeak wacro warez wc yodawg
16:24:26 <CakeProphet> I'm pretty sure we have a temperature converter somewhere here...
16:24:40 <CakeProphet> maybe it was removed.
16:25:05 <CakeProphet> !insanetemp 90
16:25:07 <EgoBot> 194.0
16:25:13 -!- MSleep has changed nick to MDude.
16:25:14 <CakeProphet> that's the opposite one.
16:25:23 <CakeProphet> !sanetemp 90
16:25:24 <EgoBot> 32.2
16:25:26 <CakeProphet> !sanetemp 100
16:25:26 <EgoBot> 37.7
16:25:46 <cheater> yea 37 is nice
16:25:52 <CakeProphet> ...not here.
16:26:04 <CakeProphet> humidity + heat = miserable
16:26:18 <CakeProphet> ~90 isn't bad though.
16:26:36 -!- zzo38 has joined.
16:26:50 <CakeProphet> still someone from the north US would be completely baffled as to how anyone would enjoy 90 degree temperatures.
16:26:52 -!- iamcal has quit (Ping timeout: 260 seconds).
16:27:12 <CakeProphet> !sanetemp 0
16:27:12 <EgoBot> ​-17.7
16:27:28 <CakeProphet> ...but I can't imagine who would enjoy 0 degree weather. :P
16:27:47 <CakeProphet> well 0 is a bit extreme
16:27:49 <CakeProphet> but not far off.
16:28:23 <CakeProphet> in any case Italy is much nicer than GA
16:28:27 <CakeProphet> go there, not here. :P
16:28:31 <cheater> -17 is normal winter weather
16:28:35 <cheater> i don't really like that
16:28:50 <cheater> yeah i am learning italian
16:28:59 <cheater> so maybe one day i'll move there or spain
16:29:06 <cheater> catalonian is like halfway italian anyways
16:29:12 <cheater> so learning italian helps with that too
16:29:13 <CakeProphet> though I guess GA is nice if you like deciduous forests.... everywhere.
16:29:30 <CakeProphet> and really old not-very-pointy mountains.
16:29:34 <CakeProphet> I'm sure there's a word for that.
16:29:38 <cheater> i had a lot of forests in poland
16:29:42 <cheater> didn't do much there
16:29:53 <cheater> eroded
16:30:10 <CakeProphet> north GA = mountains and forests south and central GA = boring slightly hilly plains
16:30:24 * CakeProphet lives in north GA.
16:30:34 <cheater> boring plains are boring
16:30:50 <CakeProphet> yeah. the great plains are kind of neat
16:30:55 <CakeProphet> but, you really only need to see them once to get the idea.
16:31:02 <CakeProphet> that it drags on for miles looking exactly the same.
16:31:13 <CakeProphet> but it is cool to see the... vastness, with no obstructions.
16:32:24 <CakeProphet> there are definitely many places in Europe I would enjoy.
16:32:35 <CakeProphet> Italy or Poland would be nice.
16:32:49 <CakeProphet> but I can't speak anything but English. Which isn't a huge problem, but still makes things more difficult.
16:33:04 * CakeProphet can read some Spanish somewhat proficiently, but is terrible at speaking or listening.
16:33:15 -!- pikhq_ has joined.
16:33:22 <cheater> you learn once you're there
16:33:36 -!- pikhq has quit (Ping timeout: 276 seconds).
16:33:41 <CakeProphet> after years I guess.
16:34:25 <CakeProphet> how often do you run into people that don't speak English, though?
16:37:19 <cheater> people at the local italian were surprised when i told them they called the seafood in the menu "sea fruit"
16:37:34 <CakeProphet> haha
16:37:50 <CakeProphet> awesome
16:38:02 <CakeProphet> Europe would be a hilarious place to live for a while.
16:38:04 <cheater> which is what you call it in german and italian
16:38:12 <cheater> yeah it's a hilarious place always
16:38:22 <cheater> i heard america was sort of boring in that regard
16:38:31 <CakeProphet> ...yes.
16:38:33 <CakeProphet> I think
16:38:38 <CakeProphet> I'm not really sure what makes a place hilarious
16:38:51 <cheater> that's the problem with you americans
16:38:57 <CakeProphet> the whole melting pot thing is kind of inaccurate.
16:38:58 <cheater> you don't know what makes a place hilarious
16:39:07 <cheater> yeah it's not really melting
16:39:15 <CakeProphet> just kind of stuck together in one culture.
16:39:16 <cheater> munich is a melting pot
16:39:21 <cheater> london even more so
16:39:48 <cheater> in london you can really get culture shock
16:40:06 <CakeProphet> percentage wise we have more non-English speakers than the UK.
16:40:22 <cheater> america is pretty much jews and mexicans vs the rest
16:40:30 <CakeProphet> lol
16:40:38 <CakeProphet> not really, but yeah there's a lot of hispanics.
16:40:53 <cheater> those are the major groups though aren't they
16:40:57 <CakeProphet> don't forget black people.
16:41:01 <cheater> oh yeah
16:41:08 <cheater> i totally forgot the black guy
16:41:09 <CakeProphet> well Jewish isn't really so big.
16:41:13 <cheater> in europe it's not like that that really
16:41:13 <CakeProphet> we kind of just have this color-code system
16:41:19 <cheater> because everyone has their like
16:41:22 <cheater> identity
16:41:23 <CakeProphet> and don't really pay attention to actual ethnicity.
16:41:36 <cheater> where their family lived for 1000s of years since it evolved from a fern
16:42:20 <CakeProphet> it depends on where you go really.
16:42:32 <cheater> nah it's like that everywhere
16:42:34 <CakeProphet> in the south for instance most immigrants are hispanic
16:42:39 <cheater> oh
16:42:42 <cheater> that is what you mean
16:42:44 <cheater> yeah ok
16:42:50 <CakeProphet> because, well, uh, the spanish speaking countries are south of us.
16:43:00 <cheater> nice
16:43:15 <cheater> i have just had two copies of the same partition on my computer
16:43:30 <CakeProphet> I imagine in the north you get more europeans and people of Jewish decent.
16:43:38 <cheater> and one was updated, recovered, fixed, and had a newer kernel
16:43:43 <cheater> grub loaded the kernel from that
16:43:45 <CakeProphet> ...that's odd.
16:43:48 <cheater> but mounted the other one
16:43:54 <cheater> and it couldn't find the modules :D
16:43:57 <cheater> hilarity ensued.
16:44:00 <CakeProphet> a lot of native Georgians actually come from colonial German immigrants.
16:44:21 <CakeProphet> I imagine I am a descendent from one of these immigrants.
16:44:28 <CakeProphet> but I don't really know.
16:45:24 <CakeProphet> and then in New York for example you have a lot of people who descend from colonial Irish people
16:45:31 <CakeProphet> so it really just depends on the location as to the ethnic make-up.
16:45:48 <CakeProphet> but "general American white mutt" permeates everywhere. :P
16:46:45 <cheater> i liked the movie 'gangs of new york'
16:46:57 <CakeProphet> haven't seen that one.
16:47:08 <cheater> it was a historical reconstruction of the every day life of the irish minority in the early days of new york
16:47:24 <CakeProphet> ah
16:47:32 <cheater> (not really)
16:47:44 <CakeProphet> a Hollywood bastardization of such?
16:47:50 <CakeProphet> yeah we're good at that.
16:47:56 <cheater> no it is a movie about gangs in new york
16:48:01 <CakeProphet> oh...
16:48:04 <cheater> beating and killing eachother up
16:48:10 <CakeProphet> oh fun.
16:48:16 <Gregor> "killing eachother up"
16:48:32 <CakeProphet> Gregor: be quiet roger or I'll kill you up.
16:48:34 <cheater> yeah funny how it came out innit?
16:48:37 <cheater> yeah
16:48:44 <cheater> you know daniel day lewis? of "my left foot" fame?
16:48:48 <cheater> sure you've seen that movie
16:48:51 <CakeProphet> noepep
16:48:58 <CakeProphet> I CANNOT TALK ANYMORE I MUST BE AT SCHOOL.
16:49:06 * CakeProphet is a terrible procrastinator.
16:49:06 <cheater> well he also played a character in gangs of new york
16:49:12 <cheater> he was good in both movies
16:49:17 <cheater> both roles were also very similar
16:49:30 <cheater> (not really, they were amazingly different)
16:49:39 * CakeProphet will return in.... about 2 and a half hours.
16:49:57 <CakeProphet> actually 1 and a half
16:50:13 <CakeProphet> er wait, what...
16:50:29 <CakeProphet> 2 hours. there we go...
16:50:35 <CakeProphet> I CAN DO MATHZ
16:52:30 <CakeProphet> also it is really strange to me that non-Americans talk about American movies.
16:52:37 <CakeProphet> and watch them.
16:52:39 <CakeProphet> a lot.
16:52:53 -!- iamcal has joined.
16:53:34 <CakeProphet> GET YOUR OWN MOVIES.
16:54:03 <cheater> no u
16:54:04 <Gregor> I notice a distinct lack of wine for win32s.
16:54:19 <cheater> win32s?
16:54:33 <cheater> ok
16:54:37 <cheater> never mind.
16:54:47 <cheater> forget i ever asked.
16:55:06 <CakeProphet> Gregor: get vodka instead.
16:55:10 <CakeProphet> it will help you
16:55:15 <CakeProphet> bahahaha
16:55:19 <CakeProphet> ..okay I'm gone now.
16:58:20 <zzo38> Is it possible to represent anything masthematically correct in category theory in Haskell?
16:58:44 <cheater> it might be but i'd call that masthurbation
16:59:00 <cheater> maybe if you're a masthodon
17:01:05 <zzo38> What does that mean?
17:02:24 <zzo38> What are the classes in Haskell called in category theory?
17:13:38 <CakeProphet> well there are only a few that I know of.
17:13:48 <CakeProphet> Monoids are... monoids. Categories are categories. Monads are monads.
17:15:21 <CakeProphet> I don't think you'll get anything too amazing by trying to apply category theory to programming in Haskell.
17:15:34 <CakeProphet> but it does help to understand some of the concepts.
17:16:26 <zzo38> No, I mean classes in general.
17:17:14 <CakeProphet> well a typeclass is a set of polymorphic functions
17:17:27 <CakeProphet> which would make it something like a... set of sets of morphisms?
17:18:05 * CakeProphet is teh category theory exphurt
17:19:13 <CakeProphet> because you have to account for Haskell's polymorphic functions being represented by multiple monomorphic morphisms in category theory.
17:20:06 <zzo38> I know about that
17:20:12 <CakeProphet> I bet copumpkin or oerjan know more about this...
17:22:36 <CakeProphet> yeah I believe a set of morphism sets would be accurate.
17:22:40 <CakeProphet> each instance is an additional subset.
17:27:37 -!- CakeProphet has quit (Ping timeout: 240 seconds).
17:30:58 -!- boily has quit (Ping timeout: 260 seconds).
17:31:55 -!- elliott_ has joined.
17:36:13 <elliott_> hi
17:38:40 <elliott_> 06:32:25: <CakeProphet> are you familiar with ?: in other languages? church booleans work like that except automatically... you don't need ?:
17:38:57 <elliott_> i am very sceptical of cakeprophet's approach to teaching iti.
17:39:23 <elliott_> especially bringing haskell into it.
17:40:13 <Gregor> You know how monads work in Haskell? Church numerals are like that, only better.
17:41:08 <elliott_> Gregor: Wow, you just set off seething hatred in me :P
17:41:38 <elliott_> hey oklopol did you see patashu totally own at minesweeper (apart from the bit where he lost) i dunno whether it'll make you feel superior or inferior
17:42:07 * Gregor takes a bow.
17:42:29 <Gregor> ... and shoots elliott_ with it.
17:42:32 <Gregor> Also an arrow.
17:42:39 <elliott_> :'(
17:42:52 <elliott_> Good thing this is Minecraft and so I've sustained approximately one minor bruise
17:43:15 <Gregor> You know how the arrow pierces your skin, rearranging and randomizing vital internal structure?
17:43:19 <Gregor> Monads are like that, only worse.
17:43:40 <elliott_> `addquote <Gregor> You know how the arrow pierces your skin, rearranging and randomizing vital internal structure? <Gregor> Monads are like that, only worse.
17:43:43 <HackEgo> 663) <Gregor> You know how the arrow pierces your skin, rearranging and randomizing vital internal structure? <Gregor> Monads are like that, only worse.
17:44:00 <elliott_> `log monad
17:44:09 -!- zzo38 has quit (Remote host closed the connection).
17:44:19 <HackEgo> 2008-06-01.txt:20:27:37: <tusho> Slereah: the IO monad is what we refer to as a "clever trick", though
17:46:13 <elliott_> `log monad
17:46:20 <HackEgo> 2010-02-20.txt:21:16:03: <alise> It's a full-blooded language, define what you want as long as it halts. If it might not or doesn't halt, put it in the partiality monad and you can still define it.
17:46:34 -!- boily has joined.
17:46:45 <elliott_> Gregor: can you make it filter out everything i say so it's less predictable
17:47:34 <Gregor> No, but you can :P
17:47:59 <elliott_> i have the power
17:48:04 <elliott_> `log monad
17:48:08 <HackEgo> 2011-02-09.txt:17:28:52: <Vorpal> elliott, well hm. So you don't use that monad for IO at all?
17:48:11 <elliott_> `log monad
17:48:15 <HackEgo> 2010-05-08.txt:23:14:28: <uorygl> A monad is a pair of functions.
17:48:22 <elliott_> tswett: and a type
17:48:23 <elliott_> `log monad
17:48:28 <HackEgo> 2010-05-08.txt:23:13:22: <alise_> stop even trying. learn haskell first, then monads
17:48:30 <elliott_> `log monad
17:48:34 <HackEgo> 2009-12-26.txt:13:19:26: <augur> soupdragon, are monads all Functors? they are right?
17:48:35 <elliott_> thsi si SOoooOOOOOoooOOOooOOOooOOooooooooooo boring
17:48:41 <elliott_> zzzzzzz
17:49:28 <tswett> elliott_: I may have been talking about category theory, where the functions determine the type. I think.
17:50:06 <elliott_> tswett: Maybe you were talking about LAAAAAAAAAAAAAME
17:50:10 <elliott_> It's possible.
17:50:52 <elliott_> this is the best minesweeper video i've ever watched
17:50:54 <elliott_> also the only
17:52:46 <tswett> I don't think LAME has monads.
17:53:40 <elliott_> No, but LAAAAAAAAAAAAAME does.
17:54:49 <elliott_> It stands for LAME-Aided Axiom-Added Ableising Americanisms Astutely Analysing An Antediluvian Astrophysicist Also A Monadic Exoskeleton.
17:55:49 -!- DH____ has quit (Read error: Connection reset by peer).
17:58:48 <elliott_> Gregor: I just realised that I already know what the hot new thing in parsing it, but had been mentally blocking it out for some reason :P
17:58:52 <elliott_> NO THANKS TO YOU ASSHOLES
18:02:27 <Gregor> And it is?
18:02:45 <Gregor> GLR?
18:03:32 <Gregor> bison? :P
18:03:44 <Gregor> RR(k)?
18:03:50 <elliott_> Gregor: The parsing with derivatives stuff
18:04:12 <elliott_> (Most people ignored it after Russ Cox thought it went exponential for a certain left-recursive grammar but then it turns out that it actually doesn't at all)
18:04:17 <elliott_> It works with any CFG, so woo :P
18:06:18 <elliott_> And it also uses laziness in its core algorithm, so TOTALLY GONNA BE THE BEST HASKELL PARSER COMBINATOR LIBRARY EVERRRRRRRRRRR
18:19:07 <augur> elliott_: you're boring
18:19:21 <elliott_> augur: th
18:19:22 <elliott_> x
18:19:50 <elliott_> th
18:19:52 <elliott_> x is the best word.
18:20:21 <augur> x
18:20:22 <augur> or th
18:20:22 <augur> x
18:20:24 <augur> ?
18:20:41 <elliott_> th
18:20:42 <elliott_> x.
18:21:16 <augur> words with newline chars are indeed pretty cool
18:21:45 <itidus20> THX
18:22:35 <itidus20> (\t.h) x = h
18:24:26 -!- Taneb has joined.
18:24:29 <itidus20> hmm.. now if i made that into (\t->h) x would it be haskell?
18:24:34 <Taneb> Hello!
18:24:40 <elliott_> "Parser-generators
18:24:40 <elliott_> are WYSIWYGIYULR(k)—“what you see is what you get if you understand
18:24:40 <elliott_> LR(k).”"
18:24:42 <elliott_> Gregor: Best acronym?
18:27:35 <olsner> wysi wygi yurlk
18:27:38 <Taneb> What is happening in the WORLD OF ESOTERIC PROGRAMMING
18:27:59 <Taneb> Aside from Gecho
18:28:06 <elliott_> Nothing
18:28:32 <itidus20> if i have (\t.h) x and i made that into (\t->h) x would it be haskell?
18:29:02 <itidus20> or is this opening a can of worms?
18:29:16 <Taneb> flip (const h) x
18:29:22 <elliott_> itidus20: Not unless you define h.
18:29:24 <elliott_> > (\t->h) x
18:29:25 <lambdabot> Ambiguous type variable `a' in the constraints:
18:29:25 <lambdabot> `SimpleReflect.FromExpr ...
18:29:27 <elliott_> Erm.
18:29:29 <elliott_> Fuck off, lambdabot.
18:29:39 <elliott_> itidus20:
18:29:40 <elliott_> *Main> (\t -> h) x
18:29:40 <elliott_> <interactive>:1:8: Not in scope: `h'
18:29:40 <elliott_> <interactive>:1:11: Not in scope: `x'
18:29:46 <elliott_> Given definitions of h and x, yes, that works.
18:29:50 <elliott_> But really, concentrate on just LC.
18:30:03 <Taneb> How's itidus20 going with his education?
18:30:05 <itidus20> ahh... i see.. i havent defined h and x
18:30:08 <elliott_> Haskell is not the LC, it isn't even a superset of the lambda calculus; it's a superset of a different, related system.
18:30:09 <itidus20> makes sense
18:30:17 <itidus20> ok
18:31:15 <itidus20> one fascinating element of LC is that an expression can't reduce itself out of existence
18:31:41 <itidus20> ie.. there is no empty set as it were
18:35:54 <itidus20> perhaps i am missing the point a bit.. arithmetic can never get beyond zero
18:36:17 <Taneb> You mean, arithmetic can never be a negative number?
18:36:40 <itidus20> i mean, no matter what you do to an arithmetic expression it will never cease to be an arithmetic expression
18:36:53 <itidus20> it will default to zero though
18:37:34 <elliott_> that's because the LC is closed under reduction
18:37:45 <elliott_> i.e., the reduction of any lambda-calculus term is a lambda-calculus term
18:38:25 <itidus20> ahh
18:38:51 <elliott_> so, reducing a lambda-calculus term any number of times cannot produce something that isn't a lambda-calculus term
18:51:00 <Taneb> Youth Theatre started today
18:51:12 <Taneb> Also, I am lamenting the loss of my luscious locks
18:51:58 <itidus20> and (\abcdefg.a) mnopqrs will reduce to m
18:54:12 <itidus20> and (\abcdefg.h) mnopqrs will reduce to h
18:54:32 <Taneb> Yes
18:54:39 <Taneb> Assuming h is defined
18:54:52 -!- augur has quit (Remote host closed the connection).
18:55:05 <itidus20> oh .. does that matter in pure LC?
18:55:19 <Taneb> ...I think so?
18:55:22 <Taneb> Ask elliott_
18:56:06 <itidus20> ok
18:58:00 -!- elliott has joined.
18:58:00 -!- elliott_ has quit (Read error: Connection reset by peer).
18:58:05 <elliott> <itidus20> and (\abcdefg.a) mnopqrs will reduce to m
18:58:07 <elliott> <itidus20> and (\abcdefg.h) mnopqrs will reduce to h
18:58:09 <elliott> <Taneb> Yes
18:58:11 <elliott> <Taneb> Assuming h is defined
18:58:13 <elliott> * augur has quit (Remote host closed the connection)
18:58:15 <elliott> <itidus20> oh .. does that matter in pure LC?
18:58:28 <elliott> you can say "for all h,m,n,o,p,q,r,s, (\abcdefg.h) mnopqrs reduces to h"
18:58:41 <elliott> so basically it doesn't matter
18:59:00 -!- augur has joined.
18:59:03 <itidus20> ahh that is the answer
18:59:12 <itidus20> i see
19:10:49 -!- KingOfKarlsruhe has joined.
19:22:06 <itidus20> is it possible to treat I = (\x.x) as meaning x does not exist outside of I?
19:22:32 <itidus20> if name clashes are caused by notation for example
19:22:32 <elliott> Sure, x is lexically scoped.
19:22:38 <elliott> It is completely opaque outside of I.
19:24:35 <itidus20> so anyway, this alternative paper i found is a bit better, by some guy Raul Rojas
19:24:56 <elliott> A retired Mexican-American featherweight boxer, apparently
19:24:59 <elliott> Perhaps not the same Raul Rojas
19:25:41 <itidus20> Ral Rojas Gonzlez (born 1955, in Mexico City) is a professor of Computer Science and Mathematics at the Free University of Berlin and a renowned specialist in artificial neural networks.
19:31:17 <Vorpal> elliott: crazy torrent: 40158 seeders, 38480 leechers
19:31:24 <Vorpal> never seen that much before
19:31:33 <elliott> what is it
19:31:44 <elliott> i suspect that's uh... not accurate
19:31:47 <Vorpal> elliott: a game I'm trying out a bit before buying. Yogscast recently played it.
19:31:57 <Vorpal> elliott: anyway that is what the tracker reports.
19:32:19 <Vorpal> or trackers rather, there is about 20000 on each of the ones that don't time out.
19:32:29 <elliott> Sounds like crap
19:32:40 <Vorpal> elliott: what does?
19:32:45 <elliott> The numbers
19:32:55 <Vorpal> perhaps
19:33:08 <Vorpal> elliott: but I seem to connect to several hundred peers just fine.
19:33:16 <Vorpal> who knows
19:33:19 <elliott> Ten thousand or so for a huge torrent, sure
19:33:24 <elliott> Forty thousand /seeders/... no
19:33:33 <Vorpal> elliott: yes I'm wtf at it too
19:34:02 <Vorpal> elliott: maybe some are dual counted on different trackers somehow?
19:34:16 <elliott> dunno
19:34:28 <Vorpal> elliott: anyway it is massive, even if not as massive as that
19:34:39 <itidus20> i think there is some fanciful seeder counts that get around
19:34:57 <itidus20> you can easily see a torrent with 3000 seeders and then wait for any action sometimes
19:36:43 <Vorpal> itidus20: well there are no issues with seeders or leechers here, whatever the real numbers are
19:37:09 <elliott> Wow, I had no idea SQLite's testing was /that/ hardcore.
19:38:43 <Vorpal> elliott: hm?
19:38:57 <elliott> Vorpal: http://www.sqlite.org/testing.html
19:39:01 <elliott> Read and weep.
19:39:12 <Vorpal> elliott: iirc they have fairly extensive automated testing tools? *waiting for page to load*
19:39:24 <Vorpal> ah yes, I read that page before
19:39:28 <elliott> "As of version 3.7.5 (all statistics in the report are against that release of SQLite), the SQLite library consists of approximately 73.0 KSLOC of C code. (KSLOC means thousands of "Source Lines Of Code" or, in other words, lines of code excluding blank lines and comments.) By comparison, the project has 1251 times as much test code and test scripts - 91378.6 KSLOC."
19:39:31 <elliott> " The TCL Tests are the oldest set of tests for SQLite. They are contained in the same source tree as the SQLite core and like the SQLite core are in the public domain. The TCL tests are the primary tests used during development. The TCL tests are written using the TCL scripting language. The TCL test harness itself consists of 18.9 KSLOC of C code used to create the TCL interface. The test scripts are contained in 617 files totaling 9.3MB in siz
19:39:32 <elliott> e. There are 27664 distinct test cases, but many of the test cases are parameterized and run multiple times (with different parameters) so that on a full test run, about 1.4 million separate tests are performed."
19:40:02 <Vorpal> yeah
19:40:17 <elliott> Jesus christ, 48.7 MB of C code making up one of the test suites?
19:40:24 <Taneb> Has anyone written a Brainfuck self-compiler?
19:40:26 <elliott> I can't even comprehend what that much C can do.
19:40:28 <elliott> Taneb: awib
19:40:50 <Vorpal> elliott: well you can trust sqlite3 to be correct pretty much. Sure, not proven, but correct for most purposes
19:51:41 -!- oerjan has joined.
19:52:09 <itidus20> for all y, (\x.yx) y reduces to y y , right?
19:52:59 <elliott> Yes.
19:53:01 <oerjan> itidus20: if y does not contain x free
19:53:42 <elliott> oerjan: You might want to clarify that a bit :P
19:53:58 <itidus20> i sort of understand
19:54:03 <oerjan> if x is a free variable of y, then it might fail
19:54:51 <itidus20> such as (\y.(\x.yx) y) x
19:55:45 <itidus20> which i guess could be rewritten as (\yx.yx)yx
19:55:56 <oerjan> yes. although that particular case happens not to be a counterexample, i think
19:56:38 -!- coppro has quit (Quit: Reconnecting).
19:56:40 <oerjan> hm i should switch servers
19:56:43 -!- coppro has joined.
19:57:09 -!- oerjan has quit (Quit: leaving).
19:57:10 <elliott> oerjan: just reconnect when it goes down
19:57:12 <elliott> or that
19:57:21 -!- oerjan has joined.
19:57:25 <elliott> <elliott> oerjan: just reconnect when it goes down
19:57:25 <elliott> <elliott> or that
19:57:44 <olsner> gotta disconnect before you get disconnected!
19:58:08 <itidus20> hrmm
19:58:35 <oerjan> elliott: it could take my client a long time to discover the disconnection
19:58:40 <elliott> wat
19:58:48 <oerjan> i'm not exactly sure
19:59:30 <oerjan> but it certainly takes a while for freenode to notice the other way
20:00:15 <itidus20> oerjan: what about (\y.(\x.yx)yx) a b is that a broken example?
20:00:50 <oerjan> <itidus20> which i guess could be rewritten as (\yx.yx)yx <-- no that's not the same, the last y isn't in both scopes
20:01:10 <itidus20> hmm
20:01:28 -!- boily has quit (Ping timeout: 260 seconds).
20:01:42 <itidus20> humm
20:02:00 <oerjan> itidus20: you cannot get a broken example from \y.(\x.yx)yx
20:02:15 -!- variable has quit (*.net *.split).
20:02:15 -!- pikhq_ has quit (*.net *.split).
20:02:16 -!- rodgort has quit (*.net *.split).
20:02:16 -!- tswett has quit (*.net *.split).
20:02:16 -!- mtve has quit (*.net *.split).
20:02:16 -!- SimonRC has quit (*.net *.split).
20:02:16 -!- coppro has quit (*.net *.split).
20:02:16 -!- augur has quit (*.net *.split).
20:02:17 -!- Zwaarddijk has quit (*.net *.split).
20:02:17 -!- olsner has quit (*.net *.split).
20:02:17 -!- copumpkin has quit (*.net *.split).
20:02:18 -!- sebbu has quit (*.net *.split).
20:02:18 -!- oklopol has quit (*.net *.split).
20:02:18 -!- clog has quit (*.net *.split).
20:02:18 -!- HackEgo has quit (*.net *.split).
20:02:32 <oerjan> because that automatically renames things
20:02:43 <itidus20> humm
20:03:10 <Gregor> HACKEGO, NOOOOOOOOO
20:03:16 -!- iamcal has quit (Remote host closed the connection).
20:03:18 <elliott> oerjan: I wish alpha-conversion wasn't the traditional way to present the lc :(
20:03:18 -!- coppro has joined.
20:03:18 -!- augur has joined.
20:03:18 -!- pikhq_ has joined.
20:03:18 -!- copumpkin has joined.
20:03:18 -!- sebbu has joined.
20:03:18 -!- rodgort has joined.
20:03:18 -!- tswett has joined.
20:03:18 -!- variable has joined.
20:03:18 -!- Zwaarddijk has joined.
20:03:18 -!- oklopol has joined.
20:03:18 -!- clog has joined.
20:03:18 -!- HackEgo has joined.
20:03:18 -!- olsner has joined.
20:03:18 -!- mtve has joined.
20:03:18 -!- SimonRC has joined.
20:03:22 <elliott> oerjan: I wish alpha-conversion wasn't the traditional way to present the lc :(
20:03:23 <oerjan> <itidus20> for all y, (\x.yx) y reduces to y y , right?
20:03:41 <oerjan> for that to break you have to replace y with something which _literally_ contains x
20:04:08 <oerjan> (and y = x doesn't actually work, but that's a coincidence)
20:04:47 <itidus20> (\y(\x.yx) y) (\z.xx)
20:05:04 <itidus20> does that break?
20:05:24 <elliott> oerjan: mutters something about de bruijn
20:05:28 <itidus20> yeah at this point i am just guessing :P
20:05:31 <Taneb> Yep
20:05:32 <itidus20> ill let it go..
20:05:51 <itidus20> i can study more when i am ready
20:06:00 <oerjan> itidus20: that one doesn't work because of alpha renaming. once you put it inside \y ... alpha renaming protects you against name collisions
20:06:42 <oerjan> it's only when you substitute something for y _literally_ in (\x.yx) y without doing alpha renaming for x that it can break
20:06:52 <Taneb> POSITIONING SQUAF
20:07:17 <itidus20> ahh
20:07:19 <oerjan> hm it might be that your book consider renaming x to happen automatically with substitution too, in which case it's always y y
20:07:46 <itidus20> like if you change (\x.yx) y (\x.yx) x
20:07:54 <itidus20> well this isnt from a book.. just thinking
20:08:03 <itidus20> ^ change to
20:08:08 <oerjan> itidus20: well i was assuming you substituted _both_ y's
20:08:14 <oerjan> with the same thing
20:08:32 <oerjan> and also, y = x doesn't work as a counterexample
20:08:44 <itidus20> can you give an example of anything that could go wrong with (\x.yx) y ?
20:09:00 <oerjan> y = x x should get pretty hairy :P
20:09:12 <oerjan> (\x.(xx)x)(xx)
20:09:33 <itidus20> ahh.. i think i get it
20:10:45 <itidus20> i think that what has happened is that i havent explored substitutions at all..
20:10:58 <itidus20> and so didn't realize it was possible
20:11:46 -!- KingOfKarlsruhe has quit (Quit: ChatZilla 0.9.87 [Firefox 6.0.2/20110902133214]).
20:14:43 -!- fungot has quit (*.net *.split).
20:14:43 -!- Vorpal has quit (*.net *.split).
20:14:43 -!- Zuu has quit (*.net *.split).
20:14:44 -!- atehwa has quit (*.net *.split).
20:14:59 -!- Zuu has joined.
20:15:04 -!- Zuu has quit (Changing host).
20:15:04 -!- Zuu has joined.
20:15:09 -!- Vorpal has joined.
20:15:13 <oerjan> basically the rules for when you must do alpha conversion when substituting are, in modern terms, about preserving lexical scoping
20:15:38 <oerjan> although it is possible that the idea of lexical scoping actually evolved _from_ lambda calculus
20:15:41 <itidus20> so i know you can add (\<name>.<expression1>) around expression1 and thus it becomes that..
20:16:08 <itidus20> and you can add (<expression1> <expression) around expression1 and it becomes that
20:16:48 <itidus20> but i didn't consider that you can take <expression1> and replace it with <expression2>
20:17:05 -!- boily has joined.
20:17:29 <oerjan> itidus20: erm you haven't learned beta reduction yet? that's the _essence_ of lambda calculus
20:18:19 -!- esowiki has joined.
20:18:19 -!- glogbot has joined.
20:18:19 -!- glogbackup has left.
20:18:19 -!- Gregor has joined.
20:18:21 -!- shachaf has joined.
20:18:29 -!- atehwa has joined.
20:18:29 -!- mycroftiv has joined.
20:18:43 -!- EgoBot has joined.
20:18:46 -!- Gregor has changed nick to Guest82930.
20:19:03 <elliott> oerjan: i don't think he's learning it as a formal set of rules, he's just replacing it intuitively :P
20:19:17 -!- yorick has quit (Quit: Poef!).
20:19:46 <oerjan> basically, (\x.<expression1>)(<expression2>) reduces to <expression1> with <expression2> substituted for x, while renaming bound variables to avoid collisions
20:19:58 <oerjan> *name collisions
20:20:46 <oerjan> and repeating beta reduction is how lambda calculus computes things
20:20:58 <itidus20> well (\x.yx) y to (\x.(xx)x)(xx) isn't really reduction right?
20:21:15 <itidus20> well i mean it may be some form of reduction
20:21:21 <itidus20> but what would you call that?
20:21:29 <itidus20> substitution?
20:21:30 <oerjan> no, that's substituting xx for y, but ignoring the renaming rules
20:22:14 <oerjan> you could call it substitution, but it's not a correct one for beta reduction
20:22:26 <itidus20> is it because (\x.(xx)x)(xx) is broken that it requires substitution to arrive at it?
20:22:34 <elliott> fromApple News_Europe@insideapple.apple.com
20:22:34 <elliott> subject20 Sept. is your last chance to get a 65 pound University Gift Card.
20:22:34 <elliott> Wow, that's a pretty heavy University Gift Card.
20:22:39 <elliott> What the hell is it made out of?
20:23:26 <oerjan> itidus20: yes. because if you started with (\y.(\x.yx)y)(xx) instead, then the beta reduction rule would demand the bound x be renamed.
20:23:56 <Guest82930> HELLO I AM GUEST
20:23:59 <itidus20> so, in practice do you ever need to do something likel (\x.yx) y to (\x.(xx)x)(xx) ?
20:24:28 <Guest82930> I HEARD THAT MELNU THE OVERSEER IS GOING TO RETURN IN 2012. COMMENTS?
20:24:29 <elliott> Guest82930: hi
20:24:32 -!- iamcal has joined.
20:24:33 <oerjan> -> (\y.(\z.yz)y)(xx) -> (\z.(xx)z)(xx) -> (xx)(xx)
20:24:34 <elliott> yes
20:24:35 <elliott> true
20:24:46 <oerjan> that doesn't break when renaming properly
20:24:48 <Guest82930> SHOULD WE FEAR THE GREAT OVERSEER?
20:25:34 <oerjan> Guest82930: THE GREAT OVERSEER SMELLS PRETTY BAD, SO SHOULD BE EASY TO HIDE FROM FOR MOST PEOPLE
20:25:36 <Taneb> WHY THE CAPS LOCK
20:25:48 <Guest82930> CAPS LOCK IS CRUISE CONTROL FOR COOL.
20:25:57 <Guest82930> *actually, that's the sustain pedal
20:26:00 -!- Guest82930 has changed nick to Gregor.
20:26:42 <itidus20> oerjan: i am not sure how to ask the right question. is it wrong to just say y = (xx)?
20:27:30 <Taneb> itidus20: no, but in some cases (when it is ambiguous what x is) yes
20:28:00 <oerjan> itidus20: that's ok. but you should always avoid name collisions by renaming.
20:28:33 <oerjan> so basically if you say (\x.yx)y where y = xx, you normally will automatically rename the bound x'es
20:28:33 <Phantom_Hoover> <Guest82930> SHOULD WE FEAR THE GREAT OVERSEER?
20:28:42 <Phantom_Hoover> Only if you are a noble.
20:29:32 <itidus20> does y = (xx) imply ( \y.<expr>) (xx) ?
20:29:39 <oerjan> itidus20: it is even common when representing lambda calculus in computers to use a representation where bound variables aren't named, that's the deBruijn indexes elliott mentioned
20:30:03 <oerjan> because that avoids a lot of this trouble
20:30:23 <Phantom_Hoover> Or even just to pretend everything is combinator calculus because it's so much easier.
20:30:45 <Taneb> Combinator calculus is harder to write but easier to read
20:30:50 <oerjan> itidus20: no. the y to the right is bound, so not the same variable really
20:31:06 <oerjan> itidus20: er or wait
20:31:27 <itidus20> hmm .. i will restate
20:31:45 <oerjan> itidus20: actually, yes, you can always incorporate equations in that way, which is why pure lambda calculus doesn't really need them
20:32:16 <itidus20> when going from (\x.yx) y to (\x.(xx)x)(xx) is ( \y.<expr>) (xx) implied?
20:32:48 <oerjan> itidus20: not if you want it to break.
20:33:04 <itidus20> but you never want it to break right?
20:33:59 <oerjan> itidus20: wikipedia suggests the term "capture-avoiding substitutions" for the ones involving renaming
20:34:02 <itidus20> uhmmm ok in other words
20:34:18 <itidus20> (\x.yx) y is safe as long as you use proper renaming methods
20:34:19 <oerjan> and you should always use them to avoid breakage
20:34:22 <oerjan> yep
20:35:17 <itidus20> ok so its basically that i said "for all y, " can include a y which is not following proper renaming methods
20:36:12 <oerjan> yeah
20:36:23 <Phantom_Hoover> oh god I'm running out of disk how
20:36:30 <Phantom_Hoover> FAREWELL RED DWARF
20:36:41 <itidus20> can you compress it any more?
20:37:20 <elliott> use more zippes
20:37:38 <itidus20> my guess is that the compressability of a video is not much though
20:38:53 <itidus20> if anything "video format" is all about the set of compression routines optimized for videos
20:39:08 <Phantom_Hoover> Oh BtW I have to go to Ireland tomorrow for grandfather hauling, don't miss me too much.
20:39:26 <itidus20> have a craic
20:39:30 <itidus20> or whatever
20:40:29 <Phantom_Hoover> That is not what 'craic' means iti.
20:41:04 <oerjan> <Phantom_Hoover> FAREWELL RED DWARF <-- are you sure your priorities are sound?
20:41:13 -!- Taneb has quit (Ping timeout: 260 seconds).
20:43:21 <Phantom_Hoover> oerjan, I've watched it all twice, I need fresh DS9 to stave off the boredom.
20:45:43 -!- Taneb has joined.
20:46:51 <itidus20> Phantom_Hoover: i revised my knowledge
20:47:40 <itidus20> but i still don't think sad events should mean you can't have craic
20:48:28 <itidus20> the only thing i think i got wrong about the meaning was using an article 'a'
20:49:50 <Phantom_Hoover> itidus20, no, I mean you don't have craic.
20:49:58 <Phantom_Hoover> It's just a thing.
20:50:38 <itidus20> ok it makes sense that i don't know what it means
20:51:32 <Phantom_Hoover> itidus20, it doesn't mean 'a good time', it doesn't really have a direct equivalent.
20:51:42 <itidus20> yeah. it is fair enouhg
20:51:45 <Phantom_Hoover> There is simply craic, and it is sometimes good.
20:51:49 <itidus20> ^fair enough
20:51:50 <Taneb> In BytePusher, is the register thingy containing the current instruction automatically updated?
20:51:52 <itidus20> :)
20:58:21 <elliott> `addquote <Taneb> Mayor says we need to make aluminum items <Phantom_Hoover> Taneb, PH says you need to make lava items.
20:58:23 <HackEgo> 664) <Taneb> Mayor says we need to make aluminum items <Phantom_Hoover> Taneb, PH says you need to make lava items.
21:02:25 <oerjan> can you feel the lava tonight
21:08:24 <itidus20> (\x.yx) y = (\bound1.free1 bound1) free1 ; (\y.(\z.yz)y)(xx) = (\bound1.(\bound2.bound1 bound2)bound1)(free1 free1)
21:08:47 <Phantom_Hoover> oerjan, deeply in lava.
21:09:01 -!- Taneb has quit (Read error: Connection reset by peer).
21:09:14 <itidus20> is this making sense?
21:10:11 <oerjan> itidus20: it is not usually allowed to rename _free_ variables, only bound ones
21:10:25 <itidus20> humm
21:11:25 <itidus20> yeah i am implying some unstated mechanism for converting variables named free to variables named bound
21:12:15 <itidus20> no no tats not the problem. nevermind hm. ok
21:12:22 <itidus20> thanks for comment
21:15:02 <itidus20> sorry oerjan my brain goes off in 10 directions before just taking a proper literal interpretation
21:17:18 <oerjan> with math, it's important to understand the literal interpretation first
21:18:03 <itidus20> hm
21:19:04 <itidus20> ironically with narrative text the literal interpretation can be a problem
21:19:25 <itidus20> narrative might be wrong word here
21:19:52 <itidus20> things like philosophy, religion, novels, poetry
21:20:50 <itidus20> maybe it is formal vs informal
21:28:14 -!- nooga has quit (Ping timeout: 252 seconds).
21:32:19 -!- augur has quit (Remote host closed the connection).
21:34:02 -!- augur has joined.
21:46:08 -!- BeholdMyGlory has joined.
21:47:35 -!- pikhq has joined.
21:49:05 -!- pikhq_ has quit (Ping timeout: 260 seconds).
22:03:32 -!- MDude has quit (Ping timeout: 260 seconds).
22:08:42 <elliott> `addquote <elliott> Dear god stop staring at me. <monqy> no never <Phantom_Hoover> monqy is always staring at everyone. <monqy> it takes many eyes to do this but I manage <Phantom_Hoover> He is an inspiration to us all.
22:08:44 <HackEgo> 665) <elliott> Dear god stop staring at me. <monqy> no never <Phantom_Hoover> monqy is always staring at everyone. <monqy> it takes many eyes to do this but I manage <Phantom_Hoover> He is an inspiration to us all.
22:09:17 <Phantom_Hoover> My quotes collection seems that bit more empty when I remember that elliott added like all of them.
22:09:34 <elliott> Whose quotes collection.
22:09:49 <elliott> That was a monqy quote not a Phantom_Hoover quote you egoistic fuck.
22:10:05 <Phantom_Hoover> elliott, it is a collaboration.
22:10:14 <Phantom_Hoover> It is a monqy quote feat. Phantom_Hoover.
22:10:19 <elliott> monqy ft. Phantom_Hoover -- always staring at everyone
22:10:25 <elliott> An instant hit.
22:10:36 <elliott> monqy ft. Phantom_Hoover remixed by elliott, a HackEgo production.
22:11:17 <elliott> `pastequotes Phantom_Hoover
22:11:19 <HackEgo> http://codu.org/projects/hackbot/fshg/index.cgi/raw-file/tip/paste/paste.7911
22:11:24 <Phantom_Hoover> Just monqy staring at you, also I sometimes stare at you too.
22:11:29 <elliott> Holy shit that's a lot.
22:12:36 <elliott> 433) <Sgeo> Hmm. I guess it's nearby GRBs that would be problematic? <Phantom_Hoover> Sgeo, if by 'problematic' you mean 'what's that in the AAAAAAAAARRRRRGGGGHHHH'.
22:12:40 <elliott> Phantom_Hoover: WHAT IS THE CONTEXT
22:12:42 <Gregor> Phantom_Hoover's quote collection seems really small when he realizes they're all somebody else's.
22:13:18 <elliott> 421) <Phantom_Hoover> Lymia, I don't know what that is but I want to hit you for it on principle.
22:13:18 <elliott> Interestingly, glogbot didn't log this.
22:13:30 <elliott> `log is pursuing the line of reasoning that eating raw foods can improve cognitive function
22:13:33 <HackEgo> 2011-09-14.txt:22:13:30: <elliott> `log is pursuing the line of reasoning that eating raw foods can improve cognitive function
22:13:37 <elliott> `log is pursuing the line of reasoning that eating raw foods can improve cognitive function
22:13:40 <HackEgo> 2011-09-14.txt:22:13:33: <HackEgo> 2011-09-14.txt:22:13:30: <elliott> `log is pursuing the line of reasoning that eating raw foods can improve cognitive function
22:13:43 <elliott> ...
22:13:45 <monqy> oh no
22:13:45 <elliott> `log is pursuing the line of reasoning that eating raw foods can improve cognitive function
22:13:46 -!- DH____ has joined.
22:13:49 <HackEgo> 2011-09-14.txt:22:13:40: <HackEgo> 2011-09-14.txt:22:13:33: <HackEgo> 2011-09-14.txt:22:13:30: <elliott> `log is pursuing the line of reasoning that eating raw foods can improve cognitive function
22:13:49 <Phantom_Hoover> I am a man of wit.
22:13:53 <monqy> oh noooo
22:13:58 <elliott> `pastelogs is pursuing the line of reasoning that eating raw foods can improve cognitive function
22:14:02 <HackEgo> http://codu.org/projects/hackbot/fshg/index.cgi/raw-file/tip/paste/paste.1860
22:14:03 -!- kmc has quit (Quit: Leaving).
22:14:10 -!- kmc_ has joined.
22:14:10 <elliott> Hmm.
22:14:15 <elliott> Where was that from, then?
22:14:18 <elliott> I doubt it was -minecraft.
22:14:28 -!- kmc_ has changed nick to kmc.
22:14:28 -!- Patashu has joined.
22:14:52 <Phantom_Hoover> <elliott> Phantom_Hoover: WHAT IS THE CONTEXT
22:14:52 <Phantom_Hoover> GRBs, funnily enough.
22:14:52 <Phantom_Hoover> I love all the quotes the context of which is lost to history because you added them from an msg.
22:15:10 <elliott> 563) <Phantom_Hoover> Oh god. <Phantom_Hoover> I've become a metallurgy hipster.
22:15:16 <elliott> Phantom_Hoover: Was that really after we started playing DF?
22:15:26 <Phantom_Hoover> elliott, I already told you why that was.
22:15:38 <Phantom_Hoover> I removed the "Iridium is too mainstream." for comedic effect.
22:15:45 <elliott> Oh, right.
22:15:48 <elliott> You're meant to use sed to do that.
22:16:14 <oerjan> <elliott> Phantom_Hoover: WHAT IS THE CONTEXT <-- all necessary context was included afaiac
22:16:21 <elliott> Afaiac?
22:16:28 <elliott> Oh, right.
22:16:58 <elliott> `pastequotes oerjan
22:17:00 <HackEgo> http://codu.org/projects/hackbot/fshg/index.cgi/raw-file/tip/paste/paste.15374
22:19:08 <elliott> `log understand it perfectly\. it's complete
22:19:11 <HackEgo> No output.
22:19:21 <elliott> `log not even going to try and understand
22:19:24 <HackEgo> 2011-09-14.txt:22:19:21: <elliott> `log not even going to try and understand
22:19:31 <elliott> `pastelogs not even going to try and understand
22:19:35 <HackEgo> http://codu.org/projects/hackbot/fshg/index.cgi/raw-file/tip/paste/paste.23435
22:19:39 <itidus20> `log perfectly
22:19:42 <HackEgo> 2010-11-13.txt:22:18:45: <pikhq> Vorpal: With a GFCI it's perfectly safe.
22:19:46 <elliott> Gregor: What is UP with these incomplete logs.
22:19:49 <elliott> `log @
22:19:54 <HackEgo> 2011-02-03.txt:23:09:13: <elliott> @undo do x <- pSimpleUL; xs <- pUL; return (x :< xs)
22:20:02 <elliott> `log @
22:20:07 <HackEgo> 2007-02-11.txt:23:43:53: -!- sebbu2 has quit ("@+").
22:20:09 <elliott> `log \b@\b
22:20:13 <HackEgo> 2011-03-09.txt:03:03:48: <elliott> Gregor: nearbyint@libc.so
22:20:15 <itidus20> `log \bDMM\b
22:20:19 <HackEgo> 2005-06-09.txt:10:12:12: <DMM> I read about Homespring for the first time today. Wow... that just blew me away :-)
22:20:23 <Gregor> elliott: :'(
22:20:28 <elliott> What, is that the real DMM?
22:20:28 <Gregor> elliott: That reference makes me cry
22:20:35 <elliott> Gregor: What reference
22:20:40 <elliott> `logurl 2005-06-09.txt:10:12:12:
22:20:41 <HackEgo> http://codu.org/logs/log/_esoteric/2005-06-09
22:20:46 <Gregor> elliott: <HackEgo> 2011-03-09.txt:03:03:48: <elliott> Gregor: nearbyint@libc.so
22:20:57 <elliott> wow, it's real DMM :DDDDDDDDddddddddddddddddddddddd
22:21:00 <elliott> i think
22:21:00 <sebbu> ?
22:21:04 <elliott> sebbu: ?
22:21:06 <elliott> oh
22:21:08 <elliott> blame `log
22:21:12 <Phantom_Hoover> dmm
22:21:14 <Phantom_Hoover> was here
22:21:14 <elliott> oerjan: dude dude.
22:21:16 <Phantom_Hoover> oh my god
22:21:16 <elliott> oerjan: dmm.
22:21:17 <elliott> was here.
22:21:26 <Phantom_Hoover> come back dmm ;_;
22:21:29 <elliott> dmm come
22:21:33 <elliott> back we will
22:21:34 <elliott> be friends ;__;
22:21:56 <elliott> 11:14:47: <DMM> I got some TV to watch... later guys
22:21:56 <elliott> AND HE LEFT...
22:22:03 <elliott> `patselogs <DMM>
22:22:05 <HackEgo> ​/home/hackbot/hackbot.hg/multibot_cmds/lib/limits: line 5: exec: patselogs: not found
22:22:10 <elliott> Phantom_Hoover: oh my god wiki drama
22:22:10 <elliott> 23:27:51: <calamari> graue: your vision of the wiki is a bit narrower than I'd hoped for
22:22:11 <elliott> 23:28:28: <calamari> I'm halfway wondering if you'll be pulling up those in-progress pages at any moment
22:22:11 <elliott> 23:30:29: <calamari> now I realize it's your wiki, you're running it, and all that.. which I appreciate.. but perhaps if you're going to stifle the expressive purposes of the wiki we need to abandon your stranglehold and start a new wiki elsewhere
22:22:19 <elliott> THIS FASCIST GRAUE REGIME
22:22:22 <Lymee> `pastelogs @pl
22:22:23 <elliott> `pastelogs <DMM>
22:22:27 <HackEgo> http://codu.org/projects/hackbot/fshg/index.cgi/raw-file/tip/paste/paste.18293
22:22:27 <HackEgo> http://codu.org/projects/hackbot/fshg/index.cgi/raw-file/tip/paste/paste.2363
22:22:32 <Phantom_Hoover> elliott, dude, graue was a bit extreme.
22:22:44 <Phantom_Hoover> No new categories without his approval?
22:22:46 <Phantom_Hoover> Seriously?
22:22:49 <elliott> THREE MONTHS OF SPORADIC DMM
22:22:57 <elliott> Phantom_Hoover: Erm, it's never been "his approval".
22:23:04 <elliott> It's always been "consensus".
22:23:34 <elliott> Phantom_Hoover: Also calamari said that just because of
22:23:34 <elliott> 23:26:11: <calamari> graue: I'd really like to integrate EsoShell into the wiki. Would you like to work on it with me?
22:23:34 <elliott> 23:26:49: <graue> i'd rather not have executable code running out of the wiki
22:23:34 <elliott> 23:26:56: <graue> it's for information, not running programs
22:23:36 <elliott> which is hilarious ok.
22:23:49 <elliott> It is hilarious. I have a policy that this is hilarious.
22:25:54 <Patashu> I love the idea of going to a page for an esolang and at the bottom is a console. "Try writing XXX language now!"
22:26:08 <monqy> hm did anything happen to the learn db
22:26:09 <monqy> `cat
22:26:15 <elliott> it would be a good way to find esolangs that are far too easy to be should exist
22:26:21 <elliott> monqy: i wrote a better one but gregor woudln't ;__;
22:26:23 <elliott> because it needed
22:26:25 <elliott> multiple line sends
22:26:31 <monqy> why did it need this
22:26:39 <elliott> because
22:26:41 <HackEgo> No output.
22:26:43 <elliott> multipe definitions
22:26:46 <elliott> but ok i will write one that is
22:26:48 <elliott> slightly better than that
22:29:24 <monqy> for multiple definitions you could stuff them into a listy thing and on requesting entry without being explicit as to which one it would display the first one. on displaying entry it says the entry number and the number of entries?? perhaps an special entry identifier for random entry, too?? perhapS???
22:29:43 <Gregor> Multiple entries is just a terrible idea :P
22:30:04 <Lymee> `which learn
22:30:05 <monqy> how is it a bad idea
22:30:05 <HackEgo> ​/hackenv/bin/learn
22:30:12 <Lymee> `paste /hackenv/bin/learn
22:30:13 <HackEgo> http://codu.org/projects/hackbot/fshg/index.cgi/raw-file/tip/paste/paste.30666
22:30:16 <Gregor> monqy: Complexity cost huge, benefit tiny.
22:30:23 <monqy> how is the benefit tiny
22:30:29 <elliott> `rm bin/learn
22:30:31 <HackEgo> No output.
22:30:35 <elliott> `rm bin/forget
22:30:37 <HackEgo> No output.
22:30:38 <Gregor> Who the hell needs multiple definitions? Think wiki, not ... whatever the hell you're thinking.
22:30:44 <elliott> Gregor: Complexity cost huge? Dude, my scripts were like ten lines.
22:30:48 <Lymee> `paste learnt
22:30:50 <HackEgo> http://codu.org/projects/hackbot/fshg/index.cgi/raw-file/tip/paste/paste.31091 \ cat: learnt: No such file or directory
22:30:52 <elliott> You have clearly never used a proper learndb :P
22:30:53 <Gregor> elliott: Use, not code.
22:30:54 <elliott> `run ls bin
22:30:56 <HackEgo> Lymee \ addquote \ allquotes \ botsnack \ calc \ commands \ creatures \ define \ delquote \ elliott \ esolang \ etymology \ fuck \ google \ imdb \ json \ k \ karma \ learnt \ log \ logurl \ marco \ minifind \ paste \ pastelog \ pastelogs \ pastenquotes \ pastequotes \ penis \ ping \ prefixes \ quine \ quote \ quotes \ rec
22:31:03 <elliott> Gregor: No... it was three commands.
22:31:04 <monqy> learning multiple things is very important!!!
22:31:06 <elliott> And trivial to use.
22:31:07 <Gregor> >_<
22:31:17 <Gregor> elliott: Yes, because it would presumably barf out every definition every time.
22:31:20 <oerjan> @list what
22:31:20 <lambdabot> where provides: where url what where+
22:31:21 <elliott> `run rm bin/Lymee bin/learnt
22:31:23 <HackEgo> No output.
22:31:27 <Lymee> `cat bin/Lymee
22:31:27 <oerjan> @what me worry
22:31:27 <lambdabot> I know nothing about me.
22:31:28 <HackEgo> cat: bin/Lymee: No such file or directory
22:31:29 <elliott> Gregor: Yes, which if you actually bothered to rate-limit properly would be fine :P
22:31:33 <elliott> Lymee: Stop.
22:31:34 <Lymee> `paste bin/lymee
22:31:35 <Gregor> Oy vey.
22:31:36 <HackEgo> http://codu.org/projects/hackbot/fshg/index.cgi/raw-file/tip/paste/paste.19221 \ cat: bin/lymee: No such file or directory
22:31:38 <elliott> I'm trying to add new scripts.
22:31:48 <Gregor> elliott: Having a bot that runs FUCKING ARBITRARY commands be able to output more than one per one is the
22:31:49 <Gregor> WORST
22:31:52 <Gregor> POSSIBLE
22:31:54 <Lymee> `paste bin/elliott
22:31:56 <Lymee> Okey.
22:31:56 <Gregor> IDEA
22:31:56 <HackEgo> http://codu.org/projects/hackbot/fshg/index.cgi/raw-file/tip/paste/paste.28307
22:32:07 <elliott> "What is rate limiting, also what is maximum lines of output" --Gregor
22:32:16 <monqy> you dont have to make it barf them all out....would that make it too complicated to use.....(hint: no)
22:32:16 <Gregor> I have a rate limit, and a maximum.
22:32:19 <Gregor> The rate limit is one per one.
22:32:21 <Gregor> The maximum is one.
22:32:33 <Gregor> Your ideas. They are fucking terrible.
22:32:41 <elliott> w/e
22:32:43 <elliott> `fetch http://sprunge.us/QFPP
22:32:45 <HackEgo> 2011-09-14 22:32:45 URL:http://sprunge.us/QFPP [97] -> "QFPP" [1]
22:32:51 <elliott> `run mv QFPP bin/'?'; chmod +x bin/'?'
22:32:53 <HackEgo> No output.
22:33:02 <monqy> `?
22:33:03 <HackEgo> ​? ¯\(°_o)/¯
22:33:06 <elliott> monqy: Not done.
22:33:17 <elliott> `fetch http://sprunge.us/OIib
22:33:18 <HackEgo> 2011-09-14 22:33:18 URL:http://sprunge.us/OIib [173] -> "OIib" [1]
22:33:18 <Gregor> lol, greatest output ever
22:33:25 <elliott> `run mv OIib bin/learn; chmod +x bin/learn
22:33:27 <HackEgo> No output.
22:33:36 <elliott> `fetch #!/bin/sh
22:33:36 <elliott> rm "learn/$1"
22:33:37 <HackEgo> http://#!/bin/sh: Invalid host name.
22:33:37 <elliott> ...
22:33:43 <elliott> `fetch http://sprunge.us/fgdX
22:33:44 <HackEgo> 2011-09-14 22:33:44 URL:http://sprunge.us/fgdX [25] -> "fgdX" [1]
22:33:48 -!- sllide has quit (Ping timeout: 260 seconds).
22:33:48 <elliott> `run mv fgdX bin/forget; chmod +x bin/forget
22:33:50 <HackEgo> No output.
22:33:51 <elliott> `run mkdir learn
22:33:53 <HackEgo> No output.
22:34:02 <elliott> `learn Gregor is the stupidest stupid.
22:34:04 <HackEgo> ​/hackenv/bin/learn: line 7: learn/Gregor: No such file or directory
22:34:13 <monqy> rip gregor
22:34:13 <elliott> Uhh
22:34:15 <elliott> `ls learn
22:34:16 <HackEgo> ls: cannot access learn: No such file or directory
22:34:17 <monqy> "the stupidest stupid"
22:34:20 <elliott> >_<
22:34:21 <elliott> `run mkdir learn
22:34:23 <HackEgo> No output.
22:34:26 <elliott> `learn Gregor is the stupidest stupid.
22:34:28 <HackEgo> ​/hackenv/bin/learn: line 7: learn/Gregor: No such file or directory
22:34:31 <elliott> Gregor: what
22:34:38 <elliott> `run mkdir learn
22:34:40 <HackEgo> No output.
22:34:51 <elliott> `learn Gregor is the stupidest stupid.
22:34:53 <HackEgo> ​/hackenv/bin/learn: line 7: learn/Gregor: No such file or directory
22:34:56 <elliott> Gregor: ??????????????
22:35:15 <oerjan> `ls learn
22:35:17 <HackEgo> ls: cannot access learn: No such file or directory
22:35:22 <monqy> what is learn doimg....
22:35:34 <elliott> `help
22:35:35 <HackEgo> Runs arbitrary code in GNU/Linux. Type "`<command>", or "`run <command>" for full shell commands. "`fetch <URL>" downloads files. Files saved to $PWD are persistent, and $PWD/bin is in $PATH. $PWD is a mercurial repository, "`revert <rev>" can be used to revert to a revision. See http://codu.org/projects/hackbot/fshg/
22:35:46 <Gregor> elliott: It doesn't remember empty directories.
22:35:52 <elliott> Gregor: lol@hg
22:36:03 <Gregor> elliott: lol@virtually every VCS in existence?
22:36:07 <elliott> Nope.
22:36:11 <elliott> darcs gets it right, for one.
22:36:15 <Gregor> 1.
22:36:16 -!- FireFly has quit (Quit: FireFly).
22:36:19 <elliott> I think SVN did too.
22:36:21 <Gregor> 2.
22:36:32 <elliott> Gregor: Dude, the only VCSes taht don't are git and hg :P
22:36:35 <elliott> I think bzr gets it right as well.
22:36:48 <monqy> git and hg are virtually every vcs in existence
22:36:54 <elliott> `run sed -i 's/learn/wisdom/g' bin/learn; sed -i 's/learn/wisdom/g' bin/'?'; sed -i 's/learn/wisdom/g' bin/forget
22:36:55 <HackEgo> No output.
22:36:57 <Gregor> It's been too long since I've used bzr to corroborate *shrugs*
22:37:08 <elliott> `run mkdir wisdom; echo "is a big stupid stupid." >wisdom/Gregor
22:37:11 <HackEgo> No output.
22:37:12 <elliott> `? Gregor
22:37:13 <HackEgo> Gregor? ¯\(°_o)/¯
22:37:18 <elliott> `ls wisdom
22:37:20 <HackEgo> Gregor
22:37:23 <elliott> uh
22:37:24 <Gregor> Oh good, so now you can't just say the name ...
22:37:33 <elliott> Gregor: Yes, because that was terrible :P
22:37:38 <elliott> `url bin/?
22:37:39 <HackEgo> http://codu.org/projects/hackbot/fshg/index.cgi/raw-file/tip/bin/?
22:37:45 <elliott> >_<
22:37:45 <Gregor> Well, I'll admit that having it get in the way of cat was kinda bad.
22:37:48 <elliott> `paste bin/?
22:37:50 <HackEgo> http://codu.org/projects/hackbot/fshg/index.cgi/raw-file/tip/paste/paste.25292
22:37:50 <Gregor> And that URL ain't gonna work at all X-D
22:37:57 <elliott> Hmm
22:38:05 <elliott> `run ls wisdom/Gregor
22:38:07 <HackEgo> wisdom/Gregor
22:38:10 <elliott> ???
22:38:19 <elliott> Am I misunderstanding what -e does? :P
22:38:50 <elliott> halp
22:38:55 <monqy> `cat wisdom/Gregor
22:38:57 <HackEgo> is a big stupid stupid.
22:39:18 <Gregor> `run [ -e wisdom/Gregor ] && echo hewoo
22:39:19 <HackEgo> hewoo
22:39:22 <Phantom_Hoover> `log wisdom
22:39:25 <HackEgo> 2011-09-14.txt:22:39:22: <Phantom_Hoover> `log wisdom
22:39:40 <elliott> `? .
22:39:42 <HackEgo> cat: wisdom/.: Is a directory \ .
22:39:47 <elliott> Nice X-D
22:40:03 <elliott> `? ../bin/?
22:40:04 <HackEgo> ​../bin/? #!/bin/sh \ [ -e "wisdom/$1" ] || { echo "$1? ¯\(°_o)/¯"; exit 1; } \ echo "$1 $(cat "wisdom/$1")"
22:40:10 <elliott> Feature.
22:40:12 <elliott> `? Gregor
22:40:13 <Gregor> Agreed
22:40:14 <HackEgo> Gregor is a big stupid stupid.
22:40:17 <elliott> Huh
22:40:19 <elliott> It suddenly works
22:40:25 <Lymee> `? echo
22:40:26 <HackEgo> echo? ¯\(°_o)/¯
22:40:29 <elliott> `pastequotes monqy
22:40:31 <HackEgo> http://codu.org/projects/hackbot/fshg/index.cgi/raw-file/tip/paste/paste.1494
22:40:32 <elliott> Time to start documenting the masses
22:40:44 <Gregor> `learn Gregor Wrote the bot. Better than you. For most values of "you".
22:40:46 <HackEgo> No output.
22:40:48 <Gregor> >_>
22:40:50 <elliott> Gregor: Wrong style :P
22:40:52 <Gregor> `? Gregor
22:40:54 <Gregor> Oh foo
22:40:54 <HackEgo> Gregor "you".
22:40:55 <elliott> Following `learn is a full sentence.
22:40:57 <elliott> ...
22:40:58 <elliott> what
22:40:58 <Gregor> lol
22:41:04 <Gregor> I'll go with that.
22:41:06 <elliott> Gregor "you".
22:41:06 <Gregor> Works for me.
22:41:14 <elliott> topic=$(echo "$1" | sed 's/ .*//')
22:41:14 <elliott> info=$(echo "$1" | sed 's/.* //')
22:41:17 <elliott> OK sed-experts, help me out here :P
22:41:27 <elliott> I didn't use /g
22:41:28 <Gregor> info removes everything before the last space there.
22:41:28 <elliott> So??
22:41:35 <elliott> Oh hmm
22:41:37 <Gregor> .* is greedy
22:41:42 <elliott> How can I make it be tighter >_>
22:41:44 <Gregor> You want [^ ]*
22:41:45 <elliott> .*? is perlism
22:41:48 <elliott> Thx :P
22:41:57 <Gregor> Yeah, as far as I know there's no non-greedy modifier for sed.
22:42:03 <elliott> `fetch http://sprunge.us/ECNd
22:42:04 <HackEgo> 2011-09-14 22:42:04 URL:http://sprunge.us/ECNd [178] -> "ECNd" [1]
22:42:08 <elliott> `run mv ECNd bin/learn; chmod +x bin/learn
22:42:10 <HackEgo> No output.
22:42:15 <elliott> `learn Gregor wrote the bot, which is why he's terrible.
22:42:16 <HackEgo> No output.
22:42:18 <elliott> `? Gregor
22:42:20 <HackEgo> Gregor wrote the bot, which is why he's terrible.
22:42:25 <Gregor> "No output" isn't the ideal output :P
22:42:34 <elliott> OK FINE TIME FOR SOME MEGA OUTPUT
22:42:50 <Gregor> How about "Filling me with your knowledge gives me a sexual kind of pleasure."
22:43:01 * Phantom_Hoover wonders how Transmission concludes, from a rate of consistently between 50 and 100 KiB/s, that it will take twelve hours to torrent 3GB.
22:43:33 <elliott> `fetch http://sprunge.us/aJVh
22:43:33 <HackEgo> 2011-09-14 22:43:33 URL:http://sprunge.us/aJVh [198] -> "aJVh" [1]
22:43:39 <elliott> `run mv aJVh bin/learn; chmod +x bin/learn
22:43:41 <HackEgo> No output.
22:43:48 <elliott> `run echo 'echo "Forget what?"' >>bin/forget
22:43:50 <HackEgo> No output.
22:43:58 <Gregor> `learn Gregor Wrote the bot. Better than you. For most values of "you".
22:44:01 <HackEgo> I knew that.
22:44:03 <elliott> Gregor: NOT A SENTENCE
22:44:08 <monqy> `forget Gregor
22:44:10 <HackEgo> Forget what?
22:44:15 <Gregor> `learn Gregor Wrote the bot. Better than you. For most values of "you".
22:44:17 <HackEgo> ​/hackenv/bin/learn: line 7: wisdom/Gregor: No such file or directory \ I knew that.
22:44:21 <Gregor> Sweet.
22:44:25 <Phantom_Hoover> > 3000000 / (75*60)
22:44:25 <lambdabot> 666.6666666666666
22:44:34 <Phantom_Hoover> > 3000000 / (75*60*60)
22:44:35 <lambdabot> 11.11111111111111
22:44:38 <Gregor> `? Gregor
22:44:39 <Phantom_Hoover> Oh.
22:44:40 <HackEgo> Gregor? ¯\(°_o)/¯
22:44:48 <elliott> `run mkdir wisdom; echo "You do not have the clearance necessary to view this entry." >wisdom/.doorstop
22:44:50 <HackEgo> No output.
22:44:53 <elliott> `? .doorstop
22:44:55 <HackEgo> ​.doorstop You do not have the clearance necessary to view this entry.
22:44:58 <Gregor> You yeah :P
22:45:00 <Gregor> `learn Gregor Wrote the bot. Better than you. For most values of "you".
22:45:02 <HackEgo> I knew that.
22:45:04 <elliott> `run mkdir wisdom; echo "is -- You do not have the clearance necessary to view this entry." >wisdom/.doorstop
22:45:05 <HackEgo> mkdir: cannot create directory `wisdom': File exists
22:45:05 <Gregor> Errr ... "Oh yeah"
22:45:11 <Phantom_Hoover> Dammit, computers, stop being better than me at arithmetic.
22:45:11 <elliott> `? .doorstop
22:45:13 <HackEgo> ​.doorstop is -- You do not have the clearance necessary to view this entry.
22:45:14 * Phantom_Hoover → sleep
22:45:16 -!- Phantom_Hoover has quit (Quit: Leaving).
22:45:19 <Gregor> `? Gregor
22:45:20 <HackEgo> Gregor Wrote the bot. Better than you. For most values of "you".
22:45:25 <elliott> You need to de-capitalise that w >_>
22:45:27 <Gregor> `learn Gregor wrote the bot. Better than you. For most values of "you".
22:45:29 <HackEgo> I knew that.
22:45:31 <Gregor> `? Gregor
22:45:32 <HackEgo> Gregor wrote the bot. Better than you. For most values of "you".
22:45:42 <elliott> Hmm
22:45:49 <Gregor> Now just to configure the bot to make that file unwritable :P
22:45:50 <elliott> I'm going to make it de-capitalise the queries
22:45:56 <elliott> So that
22:45:57 <elliott> `? gregor
22:45:58 <elliott> DTRT :P
22:45:58 <HackEgo> gregor? ¯\(°_o)/¯
22:47:56 <Gregor> I AM AN INSULIN NINJA
22:47:59 <elliott> `fetch http://sprunge.us/IWUd
22:48:00 <HackEgo> 2011-09-14 22:48:00 URL:http://sprunge.us/IWUd [126] -> "IWUd" [1]
22:48:14 <elliott> `run mv IWUd bin/'?'; chmod +x bin/'?'
22:48:16 <HackEgo> No output.
22:48:21 <elliott> `fetch http://sprunge.us/HggH
22:48:22 <HackEgo> 2011-09-14 22:48:22 URL:http://sprunge.us/HggH [250] -> "HggH" [1]
22:48:27 <elliott> `run mv HggH bin/learn; chmod +x bin/learn
22:48:29 <HackEgo> No output.
22:48:42 <elliott> `fetch http://sprunge.us/LYaH
22:48:43 <HackEgo> 2011-09-14 22:48:43 URL:http://sprunge.us/LYaH [69] -> "LYaH" [1]
22:48:44 <elliott> (learn you a haskell :DDddd)
22:48:50 <elliott> `run mv LYaH bin/forget; chmod +x bin/forget
22:48:51 <HackEgo> No output.
22:48:55 <elliott> `run rm -r wisdom
22:48:57 <HackEgo> No output.
22:49:09 <elliott> `run mkdir wisdom; echo "You do not have the clearance necessary to view this entry." >wisdom/.doorstop
22:49:11 <HackEgo> No output.
22:49:12 <elliott> `? DoorStop
22:49:14 <HackEgo> DoorStop? ¯\(°_o)/¯
22:49:19 <elliott> ;__;
22:49:20 <elliott> `? DoorStop
22:49:22 <HackEgo> DoorStop? ¯\(°_o)/¯
22:49:31 <elliott> oh duh
22:49:32 <itidus20> `? elliott
22:49:34 <HackEgo> elliott? ¯\(°_o)/¯
22:49:34 <elliott> `? .DoorStop
22:49:36 <HackEgo> You do not have the clearance necessary to view this entry.
22:49:45 <elliott> Gregor: OK gogogo :P
22:49:48 <Gregor> `? gREGOR
22:49:50 <HackEgo> gREGOR? ¯\(°_o)/¯
22:50:00 <Gregor> `run ls -a wisdom
22:50:02 <HackEgo> ​. \ .. \ .doorstop
22:50:05 <Gregor> Oh
22:50:07 <Lymee> `which ?
22:50:08 <Gregor> `learn Gregor wrote the bot. Better than you. For most values of "you".
22:50:09 <HackEgo> ​/hackenv/bin/?
22:50:11 <HackEgo> I knew that.
22:50:16 <Gregor> `? gREGOR
22:50:18 <HackEgo> Gregor wrote the bot. Better than you. For most values of "you".
22:50:20 <Lymee> `paste /hackenv/bin/?
22:50:22 <HackEgo> http://codu.org/projects/hackbot/fshg/index.cgi/raw-file/tip/paste/paste.6482
22:50:53 <elliott> `run echo '#!/bin/sh' >bin/pastewisdom; echo 'cat wisdom/* | paste' >>bin/pastewisdom; chmod +x bin/pastewisdom
22:50:55 <HackEgo> No output.
22:50:59 <elliott> Hmmhmm
22:51:00 <Gregor> `learn Wiki , the, is at http://esoteric.voxelperfect.net/wiki/Main_Page
22:51:03 <HackEgo> I knew that.
22:51:20 <elliott> `fetch http://sprunge.us/XAGK
22:51:21 <HackEgo> 2011-09-14 22:51:21 URL:http://sprunge.us/XAGK [143] -> "XAGK" [1]
22:51:26 <elliott> `run mv XAGK bin/learn; chmod +X bin/learn
22:51:28 <HackEgo> No output.
22:51:29 <elliott> `run chmod +x bin/learn
22:51:31 <HackEgo> No output.
22:51:34 <elliott> `run chmod -X bin/learn
22:51:36 <HackEgo> No output.
22:51:39 <elliott> Don't really want topics with spaces.
22:51:40 <elliott> `pastewisdom
22:51:43 <HackEgo> http://codu.org/projects/hackbot/fshg/index.cgi/raw-file/tip/paste/paste.27806
22:51:56 <elliott> Gregor: You can do that without the space after the comma btw.
22:52:07 <Gregor> "before" I assume you mean?
22:52:13 <Gregor> So it only accepts alpha(num)?
22:52:20 <elliott> `run echo "The wiki is at http://esolangs.org/wiki" >wisdom/wiki
22:52:22 <HackEgo> No output.
22:52:23 <elliott> Secret haxx
22:52:25 <elliott> `? wiki
22:52:26 <Gregor> Heh
22:52:26 <HackEgo> The wiki is at http://esolangs.org/wiki
22:53:09 <Lymee> `which forget
22:53:11 <HackEgo> ​/hackenv/bin/forget
22:53:12 <elliott> OK, now to fill this thing with correct opinions :P
22:53:20 <Lymee> `mv /hackenv/bin/forget /hackenv/bin/forget_
22:53:21 <HackEgo> mv: missing destination file operand after `/hackenv/bin/forget /hackenv/bin/forget_' \ Try `mv --help' for more information.
22:53:29 <elliott> Lymee: Being annoying =/= being funny/amusing/etc.
22:53:33 <Lymee> `run mv /hackenv/bin/forget /hackenv/bin/forget_
22:53:35 <HackEgo> No output.
22:53:39 <Lymee> `run mv /hackenv/bin/learn /hackenv/bin/forget
22:53:41 <HackEgo> No output.
22:53:43 <elliott> `help
22:53:44 <HackEgo> Runs arbitrary code in GNU/Linux. Type "`<command>", or "`run <command>" for full shell commands. "`fetch <URL>" downloads files. Files saved to $PWD are persistent, and $PWD/bin is in $PATH. $PWD is a mercurial repository, "`revert <rev>" can be used to revert to a revision. See http://codu.org/projects/hackbot/fshg/
22:53:46 <monqy> Lymee: whjat
22:53:47 <Lymee> `run mv /hackenv/bin/forget_ /hackenv/bin/learn
22:53:48 <HackEgo> No output.
22:53:49 <elliott> Gregor: Can you please make the bots ignore Lymee?
22:53:56 <elliott> She hasn't run a productive command in the last... uh, ever.
22:53:59 <monqy> Lymee: wahy are you dOING that
22:54:04 <elliott> `revert 229
22:54:06 <HackEgo> Done.
22:54:09 <Lymee> :(
22:54:25 <elliott> http://esolangs.org/wiki/User:WLaquitaCuevasa
22:54:26 <elliott> Oh my god.
22:54:46 <Gregor> lolwut
22:54:49 <elliott> However, some builders of Python and other languages disrespect PHP developers and deal with us like children of a lesser God. I have previously witnessed some Python developers particularly engaging in dislike speech towards PHP builders, in all probability because they do not have an understanding of why PHP received so well-known.
22:54:54 <elliott> THIS IS AMAZING
22:55:37 <elliott> `log international hub
22:55:41 <HackEgo> 2008-06-30.txt:20:50:03: <ais523> I like the international hub topic
22:55:45 <elliott> `log international hub
22:55:49 <HackEgo> 2007-07-16.txt:22:36:21: <oklopol> The international hub for esoteric programming language design and deployment | FORUM AND WIKI: http://esolangs.org | CHANNEL LOGS: http://ircbrowse.com/cdates.html?channel=esoteric | PASTEBIN: http://pastebin.ca
22:55:49 <itidus20> ahahhaha
22:55:51 <Gregor> SO DO I, AIS OF THE PAST! SO DO I!
22:56:11 <elliott> `learn Welcome to the international hub for esoteric programming language design and deployment! For more information, check out our wiki: http://esolangs.org/wiki/Main_Page
22:56:13 <HackEgo> ​/home/hackbot/hackbot.hg/multibot_cmds/lib/limits: line 5: /hackenv/bin/learn: Permission denied \ /home/hackbot/hackbot.hg/multibot_cmds/lib/limits: line 5: exec: /hackenv/bin/learn: cannot execute: Success
22:56:19 <Gregor> ... uhh
22:56:20 <elliott> sigh
22:56:23 <Gregor> `url
22:56:24 <elliott> Lymee: You get to fix whatever you fucked up.
22:56:25 <HackEgo> http://codu.org/projects/hackbot/fshg/
22:56:38 <Lymee> `run chmod +x /usr/bin/learn
22:56:40 <HackEgo> chmod: cannot access `/usr/bin/learn': No such file or directory
22:56:40 <Lymee> `run chmod +x /usr/bin/forget
22:56:41 <elliott> Gregor: I bet `revert doesn't manage permissions somehow.
22:56:42 <HackEgo> chmod: cannot access `/usr/bin/forget': No such file or directory
22:56:45 <elliott> Lymee: idiot.
22:56:47 <Lymee> `run chmod +x /hackenv/bin/forget
22:56:49 <HackEgo> No output.
22:56:49 <Lymee> `run chmod +x /hackenv/bin/learn
22:56:51 <HackEgo> No output.
22:56:51 <Lymee> elliott, :<
22:56:56 <elliott> `learn Welcome to the international hub for esoteric programming language design and deployment! For more information, check out our wiki: http://esolangs.org/wiki/Main_Page
22:56:58 <HackEgo> I knew that.
22:56:58 <Gregor> elliott: It ought to >_>
22:57:02 <elliott> `? welcome
22:57:04 <HackEgo> Welcome to the international hub for esoteric programming language design and deployment! For more information, check out our wiki: http://esolangs.org/wiki/Main_Page
22:57:07 <elliott> Gregor: Behold
22:57:12 <elliott> The newbie experience has been revolutionised
22:57:17 <Gregor> WOW
22:57:22 <elliott> Mere characters are all that is necessary to induct them into the channel
22:57:31 <elliott> Gone are the days of verbose explanation of the channel's purpose
22:57:37 <Gregor> Amazing!
22:57:40 <elliott> HERE AGAIN ARE THE DAYS OF THE INTERNATIONAL HUB!
22:57:42 <elliott> REJOICE!!!!
22:58:27 <elliott> `learn friendship wisdom
22:58:29 <HackEgo> I knew that.
22:58:32 <elliott> monqy: ask HackEgo what friendship is
22:59:05 <elliott> FINE I WILL
22:59:08 <elliott> `? friendshi
22:59:09 <elliott> `? friendshi
22:59:09 <HackEgo> friendshi? ¯\(°_o)/¯
22:59:09 <elliott> `? friendship
22:59:10 <monqy> `? friendship
22:59:11 <HackEgo> friendshi? ¯\(°_o)/¯
22:59:12 <HackEgo> friendship wisdom
22:59:12 <HackEgo> friendship wisdom
22:59:18 <elliott> `? friendship
22:59:20 <HackEgo> friendship wisdom
22:59:30 <monqy> `? wisdom
22:59:32 <HackEgo> wisdom? ¯\(°_o)/¯
22:59:55 <monqy> `? ../bin/?
22:59:57 <HackEgo> ​#!/bin/sh \ topic=$(echo "$1" | tr A-Z a-z) \ [ -e "wisdom/$topic" ] || { echo "$1? ¯\(°_o)/¯"; exit 1; } \ cat "wisdom/$topic" \
23:00:14 <elliott> `url bin/pastenquotes
23:00:15 <HackEgo> http://codu.org/projects/hackbot/fshg/index.cgi/raw-file/tip/bin/pastenquotes
23:00:23 <monqy> pastenquotes?
23:00:26 <monqy> oh
23:00:28 <monqy> pastenquotes
23:00:38 <elliott> `learn qdb is used like: `quote regexp; `quote id; `addquote ...; `delquote id; `pastequotes regexp; `pastenquotes [n]; see also qdbformat
23:00:40 <HackEgo> I knew that.
23:01:29 <elliott> `learn qdbformat is: <nick> message; * nick action; two spaces between messages; all elisions marked with [...] other than irrelevant intervening messages; for messages separated by elision, one space on each side, not two
23:01:30 <itidus20> `learn Esoteric is an abbreviation for Esoteric Programming Languages as contrasted with Esoteric languages such as lojban and klingon and contrasted with the occult, however those topics may well be compatible with each other .. according to itidus20
23:01:31 <HackEgo> I knew that.
23:01:32 <HackEgo> I knew that.
23:01:35 <elliott> itidus20: ...
23:01:50 <elliott> `? qdb
23:01:52 <HackEgo> qdb is used like: `quote regexp; `quote id; `addquote ...; `delquote id; `pastequotes regexp; `pastenquotes [n]; see also qdbformat
23:01:54 <elliott> `? qdbformat
23:01:56 <HackEgo> qdbformat is: <nick> message; * nick action; two spaces between messages; all elisions marked with [...] other than irrelevant intervening messages; for messages separated by elision, one space on each side, not two
23:02:01 <elliott> Gregor: DOCUMENTATION ;D
23:02:10 <itidus20> ok .. i won't do that
23:04:11 <itidus20> what have i done
23:04:34 <Gregor> `learn HackEgo, also known as HackBot, is a bot that runs arbitrary commands on Unix. See `help for info on using it. You should totally try to hax0r it! Make sure you imagine it's running as root with no sandboxing.
23:04:36 <HackEgo> I knew that.
23:04:39 <Gregor> `? HackEgo
23:04:41 <HackEgo> HackEgo? ¯\(°_o)/¯
23:04:45 <Gregor> `? HackEgo,
23:04:47 <HackEgo> HackEgo, also known as HackBot, is a bot that runs arbitrary commands on Unix. See `help for info on using it. You should totally try to hax0r it! Make sure you imagine it's running as root with no sandboxing.
23:04:50 <Gregor> elliott: YOUR LIES
23:04:52 <Gregor> elliott: THEY ARE LIES
23:05:14 <Gregor> `run mv wisdom/HackEgo, wisdom/HackEgo
23:05:16 <HackEgo> mv: cannot stat `wisdom/HackEgo,': No such file or directory
23:05:18 <monqy> `mv wisdom/hackego, wisdom/hackego
23:05:20 <HackEgo> mv: missing destination file operand after `wisdom/hackego, wisdom/hackego' \ Try `mv --help' for more information.
23:05:22 <monqy> oops
23:05:28 <Gregor> Feh
23:05:39 <Gregor> `run mv wisdom/hackego',' wisdom/hackego
23:05:40 <HackEgo> No output.
23:06:06 <monqy> maybe `learn should handle comas..
23:06:47 <Gregor> elliott SAID that it does :P
23:06:51 <Gregor> Because he LIES.
23:07:03 <monqy> `? elliott
23:07:05 <HackEgo> elliott? ¯\(°_o)/¯
23:07:15 <elliott> Gregor: i did not say that
23:07:29 <itidus20> `log `? elliott
23:07:32 <HackEgo> 2010-10-28.txt:20:41:05: <Vorpal> elliott, -b and -m iirc
23:07:51 <Gregor> <elliott> Gregor: You can do that without the space after the comma btw. <Gregor> "before" I assume you mean? <Gregor> So it only accepts alpha(num)? // I just assumed you meant "before" because "after" made no sense at all.
23:08:05 -!- augur has quit (Remote host closed the connection).
23:08:33 <Gregor> `learn elliott wrote this learn DB, and wrote or improved many of the other commands in this bot. He probably has done other things?
23:08:35 <HackEgo> I knew that.
23:09:04 <elliott> HackEgo: literally my only achievement.
23:09:12 <elliott> 05:31:08: <Tefad> i dislike the presence of chanserv btw
23:09:12 <elliott> 05:31:12: <Tefad> there's no point
23:09:12 <elliott> 05:31:28: <Tefad> and it just gives them means to peak at our conversation if they so choose
23:09:12 <elliott> 05:31:52: <Tefad> unless clog is a logger to a webpage
23:09:12 <elliott> 05:31:53: <Tefad> then uh
23:09:12 <elliott> 05:31:55: <Tefad> yeah..
23:09:15 <elliott> 05:31:59: * Tefad stabs violently
23:09:17 <elliott> 05:32:31: -!- Tefad has parted #esoteric (?).
23:10:04 <monqy> bye tefad
23:10:17 <Gregor> lol
23:11:08 <elliott> i like how he thinks freenode couldn't peek at convos without chanserv
23:11:30 <Gregor> THE GUMMINT
23:11:40 <monqy> the man
23:12:32 <elliott> this log is insane
23:12:52 <elliott> calamari rising up against the graue tyranny because his java applet will be ONE PAGE AWAY because graue doesn't want to embed java applets on the wiki
23:12:55 <elliott> s/PAGE/CLICK/
23:13:38 -!- Sgeo has joined.
23:15:41 <itidus20> `log applet
23:15:45 <HackEgo> 2007-07-06.txt:13:44:44: <oklopol> can applets be run without a browser? (:P)
23:15:46 <elliott> `pastelogs Tefad
23:15:51 <HackEgo> http://codu.org/projects/hackbot/fshg/index.cgi/raw-file/tip/paste/paste.32098
23:16:05 <elliott> lmao never came back after discoevring clog
23:16:14 <elliott> omg but is on freenode now must resist
23:16:15 <elliott> temptation
23:16:52 <itidus20> @oklopol: yes they can there is some applet player program
23:17:36 <elliott> "2007"
23:17:46 <elliott> `log oklopol
23:17:50 <HackEgo> 2011-01-15.txt:00:14:10: <fizzie> oklopol: And then there was the water thing.
23:18:05 <elliott> `log <oklopol>
23:18:09 <HackEgo> 2008-01-03.txt:21:34:47: <oklopol> oh holland, you crack me up!
23:19:22 <elliott> `log holland
23:19:26 <HackEgo> 2010-09-22.txt:23:01:42: <cheater99> alise: holland is the official name of the netherlands in polish, for example.
23:19:33 <elliott> `pastelogs finland
23:19:36 <elliott> gotta get the finland theory for learndb
23:19:37 <HackEgo> http://codu.org/projects/hackbot/fshg/index.cgi/raw-file/tip/paste/paste.3700
23:20:01 <elliott> 2003-09-08.txt:13:17:43: <Verbed> ~awaken The Russian Federation is by far the largest country of the world in area by spanning 11 time zones in both Europe and Asia. Russia shares borders with the following countries (starting in the north and in counter-clockwise order): Norway, Finland, Estonia, Latvia, Belarus, Lithuania (via Kaliningrad Oblast), Poland (idem), Ukraine, Georgia, Azerbaijan, Kazakhs
23:20:01 <elliott> tan, China, Mongolia and North Korea.
23:20:01 <elliott> 2003-09-08.txt:13:17:45: <Doppelganger> The Resin Feathered is by for the largesse country of the world in are by spinning 11 tone zoans in but Erebia and As. Rise swoors brother what they flummoxed country (starting in to north and in contrescene order: Near, Finlandia, Extend, Latvia, Bowler's, Letdown (via Killmaimthem Obligation, Plenty (idem), Ukraine, Grace, Acorpolous, Kissykissy, Come, Monosyll
23:20:04 <elliott> ables and Nerthe Krow.
23:20:06 <elliott> wat
23:20:28 <monqy> `log finland theory
23:20:31 <HackEgo> 2011-09-14.txt:23:20:28: <monqy> `log finland theory
23:21:21 <elliott> see
23:21:21 <elliott> 2008-08-31.txt:14:55:26: <Corun> There's only like 2 people in finland right?
23:21:22 <elliott> onwards
23:21:24 <elliott> in that paste
23:23:20 <elliott> `learn Finland is a European country. There are two people in Finland, and at least five of them are in this channel. Corun drives the bus.
23:23:22 <HackEgo> I knew that.
23:23:37 * shachaf is a citizen of Finland!
23:23:55 <elliott> shachaf: That's what they all say.
23:24:03 <shachaf> elliott: I've spent two weeks of my life there.
23:24:38 <elliott> Also what they all say.
23:24:52 <elliott> shachaf: Write your one-line biography.
23:24:56 <elliott> The learndb demands it.
23:25:05 * shachaf refuses to be biographed.
23:25:13 <elliott> `learn shachaf refuses to be biographed.
23:25:15 <HackEgo> I knew that.
23:25:18 <elliott> Biographed.
23:25:20 <monqy> I was just about to do that exact same thing
23:25:21 <shachaf> `unlearn shachaf
23:25:21 <monqy> biographed.
23:25:22 <Gregor> Was gonna do that
23:25:22 <HackEgo> I don't even know that!
23:25:29 <elliott> `rm bin/unlearn
23:25:30 <HackEgo> No output.
23:25:31 <elliott> unlearn is quite obsolete :P
23:25:38 <shachaf> :-(
23:25:39 <oerjan> `learn Vorpal går aldrig på biografen.
23:25:41 <HackEgo> I knew that.
23:25:44 <shachaf> `help
23:25:45 <HackEgo> Runs arbitrary code in GNU/Linux. Type "`<command>", or "`run <command>" for full shell commands. "`fetch <URL>" downloads files. Files saved to $PWD are persistent, and $PWD/bin is in $PATH. $PWD is a mercurial repository, "`revert <rev>" can be used to revert to a revision. See http://codu.org/projects/hackbot/fshg/
23:25:51 <elliott> There's a command to do it but you don't know what it is.
23:25:55 <shachaf> `ls
23:25:57 <HackEgo> babies \ bin \ bluhbluh \ canary \ env \ foo \ paste \ ps \ quine.pl \ quine2.pl \ quine3.pl \ quotes \ quotese \ tekst \ test.c \ test2.c \ test3.c \ tmp.tmp \ wisdom
23:25:59 <shachaf> `ls bin
23:26:01 <HackEgo> ​? \ addquote \ allquotes \ botsnack \ calc \ commands \ creatures \ define \ delquote \ elliott \ esolang \ etymology \ forget \ fuck \ google \ imdb \ json \ k \ karma \ learn \ log \ logurl \ marco \ minifind \ paste \ pastelog \ pastelogs \ pastenquotes \ pastequotes \ pastewisdom \ penis \ ping \ prefixes \ quine \ quote
23:26:02 <elliott> `learn Vorpal is really boring. Seriously, you have no idea.
23:26:04 <shachaf> `forget shachaf
23:26:04 <HackEgo> I knew that.
23:26:06 <HackEgo> Forget what?
23:26:14 <shachaf> `forget --help
23:26:16 <HackEgo> rm: cannot remove `wisdom/--help': No such file or directory \ Forget what?
23:26:23 <elliott> `learn shachaf refuses to be biographed.
23:26:25 <HackEgo> I knew that.
23:26:28 <elliott> IT SHALL NEVER
23:26:29 <elliott> FORGET
23:26:35 <shachaf> `cat bin/elliott
23:26:37 <HackEgo> ​#!/usr/bin/env learnt \ elliott = Ignore this loser.
23:26:42 <shachaf> `elliott
23:26:43 <HackEgo> ​/usr/bin/env: learnt: No such file or directory
23:26:43 <elliott> `rm bin/elliott
23:26:45 <HackEgo> No output.
23:26:47 <elliott> Damn these old things hanging around :P
23:26:54 <elliott> `url bin/minifind
23:26:56 <HackEgo> http://codu.org/projects/hackbot/fshg/index.cgi/raw-file/tip/bin/minifind
23:27:02 <elliott> Gregor: What
23:27:03 <monqy> `elliott
23:27:05 <HackEgo> ​/home/hackbot/hackbot.hg/multibot_cmds/lib/limits: line 5: exec: elliott: not found
23:27:17 <monqy> `ls bin
23:27:18 <HackEgo> ​? \ addquote \ allquotes \ botsnack \ calc \ commands \ creatures \ define \ delquote \ esolang \ etymology \ forget \ fuck \ google \ imdb \ json \ k \ karma \ learn \ log \ logurl \ marco \ minifind \ paste \ pastelog \ pastelogs \ pastenquotes \ pastequotes \ pastewisdom \ penis \ ping \ prefixes \ quine \ quote \ quotes
23:27:42 <monqy> what do these do
23:28:06 <itidus20> `marco
23:28:07 <shachaf> `run rm -rf bin
23:28:08 <HackEgo> ​/home/hackbot/hackbot.hg/multibot_cmds/lib/limits: line 5: exec: marco: not found
23:28:09 <HackEgo> No output.
23:28:12 <elliott> `help
23:28:13 <HackEgo> Runs arbitrary code in GNU/Linux. Type "`<command>", or "`run <command>" for full shell commands. "`fetch <URL>" downloads files. Files saved to $PWD are persistent, and $PWD/bin is in $PATH. $PWD is a mercurial repository, "`revert <rev>" can be used to revert to a revision. See http://codu.org/projects/hackbot/fshg/
23:28:22 <elliott> `revert 254
23:28:24 <HackEgo> Done.
23:28:25 <elliott> `? HackEgo
23:28:28 <HackEgo> HackEgo, also known as HackBot, is a bot that runs arbitrary commands on Unix. See `help for info on using it. You should totally try to hax0r it! Make sure you imagine it's running as root with no sandboxing.
23:28:30 <shachaf> elliott: Aw, I didn't really rm it.
23:28:31 <elliott> shachaf: Observe last two sentences.
23:28:45 <elliott> `learn Haskell is preferred by 9 out of 10 esoteric programmers. Ask your GP today! http://learnyouahaskell.com/
23:28:47 <HackEgo> I knew that.
23:28:51 <elliott> `pastewisdom
23:28:53 <HackEgo> http://codu.org/projects/hackbot/fshg/index.cgi/raw-file/tip/paste/paste.9171
23:28:56 <shachaf> elliott: I had previously mved bin .bin
23:29:14 <elliott> shachaf: So http://codu.org/projects/hackbot/fshg/ shows.
23:29:20 <shachaf> Hmph. :-(
23:29:26 <elliott> :D
23:29:37 <shachaf> `run killall -9 elliott
23:29:39 <HackEgo> sh: killall: command not found
23:29:41 <elliott> im dead
23:29:49 <shachaf> u dead?
23:30:01 <elliott> i dead
23:30:04 <Gregor> u mad bro?
23:30:05 <monqy> dead
23:30:07 <monqy> :(
23:30:10 <elliott> Gregor: thatsthejoke.jpg
23:30:14 <elliott> `learn monqy dead :(
23:30:16 <HackEgo> I knew that.
23:30:16 <Lymee> `run ls -al | grep bin
23:30:18 <HackEgo> drwxr-xr-x 2 5000 0 4096 Sep 14 23:30 bin
23:30:28 <monqy> `? monqy
23:30:30 <HackEgo> monqy dead :(
23:30:32 <monqy> :(
23:30:35 <elliott> :(
23:30:37 <shachaf> i heard u mad, so i put all the things in your things so u can mad while u mad?
23:30:44 <elliott> `learn shachaf heard u mad, so i put all the things in your things so u can mad while u mad?
23:30:46 <HackEgo> I knew that.
23:30:56 <monqy> no no no no no non on ononn ;_____________________;
23:31:01 -!- DH____ has quit (Read error: Connection reset by peer).
23:31:03 <shachaf> `cat /etc/shadow
23:31:04 <elliott> now anyone who wants to know about shachaf
23:31:04 <elliott> gets
23:31:05 <HackEgo> cat: /etc/shadow: No such file or directory
23:31:05 <elliott> the torture
23:31:07 <itidus20> `learn :( :-D
23:31:09 <HackEgo> I knew that.
23:31:13 <elliott> `forget :(
23:31:14 -!- DH____ has joined.
23:31:15 <HackEgo> Forget what?
23:31:17 <shachaf> `forget shachaf
23:31:19 <HackEgo> Forget what?
23:31:27 <elliott> `learn shachaf heard u mad, so i put all the things in your things so u can mad while u mad?
23:31:29 <HackEgo> I knew that.
23:31:30 <shachaf> `forget shachaf
23:31:32 <HackEgo> Forget what?
23:31:35 <elliott> shachaf: I have won botwars lasting whole days.
23:31:39 <elliott> `learn shachaf heard u mad, so i put all the things in your things so u can mad while u mad?
23:31:41 <HackEgo> I knew that.
23:31:49 <monqy> shachaf: this is all your fault
23:32:08 <oerjan> `learn shachaf is the one whose fault this all is.
23:32:10 <HackEgo> I knew that.
23:32:40 <elliott> `learn oerjan is just zis guy, you know?
23:32:42 <HackEgo> I knew that.
23:32:56 <shachaf> Hmph.
23:33:02 <oerjan> z'is true
23:33:04 <elliott> Hmph.
23:33:10 <monqy> hmph
23:33:13 <shachaf> Why can't you chmod +x things?
23:33:15 <shachaf> `cat bin/u
23:33:17 <HackEgo> ​#!/bin/bash \ echo i mad
23:33:21 <shachaf> Stupid thing.
23:33:23 <elliott> You can. You need `run.
23:33:26 <Gregor> `learn C is the language of choice for sexy, intelligent esolangers.
23:33:26 <elliott> `run chmod +x bin/u
23:33:28 <HackEgo> I knew that.
23:33:29 <HackEgo> No output.
23:33:33 <shachaf> elliott: No, my echo got messed up.
23:33:47 <elliott> `learn C is the language of��V�>WIד�.��Segmentation fault
23:33:49 <HackEgo> I knew that.
23:33:51 <shachaf> `run rm -rf /
23:33:51 <oerjan> ^echo works fine
23:33:53 <elliott> `? C
23:33:53 <HackEgo> rm: cannot remove root directory `/'
23:33:55 <HackEgo> C is the language of��V�>WIד�.��Segmentation fault
23:33:59 <shachaf> `run rm -rf `pwd`
23:34:01 <HackEgo> rm: cannot remove directory `/hackenv': Permission denied
23:34:03 <oerjan> aaaaaaaaaaaaaaaaaaaaaaaaa fungot!!!
23:34:06 <elliott> `help
23:34:06 <shachaf> `run rm -rf * .*
23:34:06 <HackEgo> Runs arbitrary code in GNU/Linux. Type "`<command>", or "`run <command>" for full shell commands. "`fetch <URL>" downloads files. Files saved to $PWD are persistent, and $PWD/bin is in $PATH. $PWD is a mercurial repository, "`revert <rev>" can be used to revert to a revision. See http://codu.org/projects/hackbot/fshg/
23:34:08 <HackEgo> rm: cannot remove directory `.' \ rm: cannot remove directory `..'
23:34:15 <shachaf> This bot is useless.
23:34:17 <elliott> `revert 274
23:34:18 <shachaf> lambdabot is way better.
23:34:19 <HackEgo> Done.
23:34:22 <shachaf> @admin + elliott
23:34:24 <shachaf> @admin - elliott
23:34:27 <elliott> @admin - shachaf
23:34:27 <lambdabot> Not enough privileges
23:34:33 <Gregor> ...........
23:34:34 <elliott> Fuck y'all.
23:35:04 <shachaf> @admin + elliott
23:35:06 <shachaf> @admin - elliott
23:35:08 <elliott> @admin -sh
23:35:08 <lambdabot> Not enough privileges
23:35:09 <elliott> sodihfgfdgjdfg
23:35:09 <elliott> gdfoji
23:35:25 <shachaf> @@ (@admin + elliott) (@admin - elliott)
23:35:25 <lambdabot> Plugin `compose' failed with: Privledged commands cannot be composed
23:35:26 <elliott> @admin - shachaf
23:35:26 <lambdabot> Not enough privileges
23:35:30 <shachaf> Hah.
23:35:31 <oerjan> `learn INTERCAL has excellent features for modular program for the enterprise market.
23:35:31 <Gregor> btw, elliott:
23:35:33 <HackEgo> I knew that.
23:35:34 <Gregor> `run rm -rf *
23:35:36 <HackEgo> No output.
23:35:36 <Gregor> Doesn't work.
23:35:39 <Gregor> `ls
23:35:41 <HackEgo> babies \ bin \ bluhbluh \ canary \ env \ foo \ paste \ ps \ quine.pl \ quine2.pl \ quine3.pl \ quotes \ quotese \ tekst \ test.c \ test2.c \ test3.c \ tmp.tmp \ wisdom
23:35:42 <elliott> How come :P
23:35:45 <shachaf> @admin - elliott
23:35:49 <shachaf> @admin + elliott
23:35:50 <shachaf> @admin - elliott
23:35:50 <Gregor> elliott: Note the files in the root thar
23:35:52 <elliott> @admin - shachaf
23:35:52 <lambdabot> Not enough privileges
23:35:57 <elliott> Gregor: idgi
23:36:01 <shachaf> elliott: You're not very good at this.
23:36:07 <Gregor> elliott: Note a particular, unusually-named file.
23:36:07 <elliott> shachaf: Oh I will be.
23:36:08 <elliott> You'll se.e
23:36:10 <elliott> I'll be the best.
23:36:11 <shachaf> @admin - elliott
23:36:12 <elliott> Ill be the utter best
23:36:13 <elliott> @admin - shachaf
23:36:13 <lambdabot> Not enough privileges
23:36:16 <elliott> Gregor: Ah :P
23:36:23 <elliott> shachaf: Butseriously,
23:36:23 <shachaf> @admin - elliott
23:36:24 <Gregor> elliott: Simplest way to avoid the stupidest offenders.
23:36:25 <elliott> The best I'll
23:36:25 <elliott> @admin - shachaf
23:36:25 <lambdabot> Not enough privileges
23:36:26 <shachaf> @admin + elliott
23:36:27 <shachaf> @admin - elliott
23:36:28 <elliott> be
23:36:28 <elliott> @admin - shachaf
23:36:28 <lambdabot> Not enough privileges
23:36:30 <elliott> uiasdjnkalcmsdv]\
23:36:31 <elliott> \
23:36:34 <elliott> The best I'll be
23:36:35 <elliott> is basically
23:36:36 <elliott> you know the best?
23:36:37 <elliott> Well
23:36:38 <elliott> shachaf
23:36:39 <elliott> the best I'll be
23:36:42 <elliott> is basically
23:36:44 <elliott> ten times that
23:36:45 <shachaf> @admin - elliott
23:36:46 <elliott> because
23:36:48 <elliott> I am
23:36:49 <elliott> the best
23:36:50 <shachaf> @admin + elliott
23:36:51 <shachaf> @admin - elliott
23:36:52 <elliott> at reaction times
23:36:54 <elliott> and to prove it
23:36:56 <elliott> @admin - shachaf
23:36:56 <lambdabot> Not enough privileges
23:37:00 <elliott> Fuck the police.
23:37:01 <elliott> fuck
23:37:04 <elliott> HA
23:37:06 <Gregor> ...................
23:37:07 <Lymee> Oh oh oh
23:37:08 <Gregor> Can we stop now.
23:37:09 <Lymee> Admin me instead
23:37:23 <elliott> So is dons an admin of lambdabot these days
23:37:27 <shachaf> @admin + elliott
23:37:30 <elliott> @admin - shacha
23:37:30 <elliott> @admin - shachaf
23:37:32 <elliott> YESSS
23:37:33 <elliott> YESSS
23:37:34 <elliott> EYESSSSSS
23:37:37 <elliott> YESSSSSSSSSSSSSSSSSSSSSSSSSSSSS
23:37:49 <Lymee> elliott, @kill
23:37:59 <elliott> @vixen-on
23:37:59 <lambdabot> Unknown command, try @list
23:38:02 <elliott> @list
23:38:02 <lambdabot> http://code.haskell.org/lambdabot/COMMANDS
23:38:05 <shachaf> Vixen got taken out of lambdabot.
23:38:12 <elliott> @vixen
23:38:12 <lambdabot> Government enterprise is the most inefficient and costly way of producing jobs.
23:38:14 <shachaf> elliott: You're not *actually* an admin, by the way.
23:38:14 <elliott> @vixen
23:38:14 <lambdabot> I reject the cynical view that politics is a dirty business.
23:38:17 <elliott> im cry
23:38:19 <elliott> shachaf: Why not.
23:38:29 <elliott> Also why vixen ded
23:38:35 <elliott> Gregor: butsrs what's minifin
23:38:35 <elliott> d
23:38:44 <Gregor> elliott: olde :P
23:38:46 <Gregor> `minifind
23:38:48 <HackEgo> ​./babies/babies.db \ ./bin/? \ ./bin/addquote \ ./bin/allquotes \ ./bin/botsnack \ ./bin/calc \ ./bin/commands \ ./bin/creatures \ ./bin/define \ ./bin/delquote \ ./bin/esolang \ ./bin/etymology \ ./bin/forget \ ./bin/fuck \ ./bin/google \ ./bin/imdb \ ./bin/json \ ./bin/k \ ./bin/karma \ ./bin/learn \ ./bin/log \ ./bin/logurl
23:38:50 <elliott> What's it fooooor.
23:38:51 <shachaf> @admin + elliott
23:38:52 <lambdabot> Not enough privileges
23:38:56 <shachaf> What?
23:38:59 <Gregor> elliott: It's find. Only stupid.
23:39:04 <shachaf> @admin + elliott
23:39:05 <lambdabot> Not enough privileges
23:39:09 <shachaf> I guess neither of us is an admin.
23:39:14 <elliott> @admin + shachaf
23:39:16 <elliott> @admin - shachaf
23:39:18 <elliott> I guess I am.
23:39:31 <elliott> But seriously, why vixen rip.
23:39:33 <elliott> Gregor: why
23:39:39 <Lymee> elliott has dethroned shachaf
23:39:42 <Gregor> elliott: I don't rightly recall.
23:39:45 <shachaf> Lymee: Not really.
23:39:48 <shachaf> @admin - elliott
23:39:49 <Lymee> Grats.
23:39:49 <lambdabot> Not enough privileges
23:39:57 <shachaf> @admin - elliott
23:40:02 <elliott> shachaf: But srsly, how am I not an admi- feck
23:40:02 <Lymee> :(
23:40:06 -!- elliott has changed nick to dons.
23:40:08 <dons> @admin + elliott
23:40:10 <shachaf> @admin - dons
23:40:11 -!- dons has changed nick to elliott.
23:40:11 <shachaf> @admin - elliott
23:40:14 <elliott> fuck
23:41:15 <elliott> shachaf: u r the worst
23:41:21 <shachaf> u r the maddest
23:41:33 <Gregor> The maddest ...
23:41:34 <Gregor> Of all bros.
23:41:48 <elliott> yes
23:41:50 <elliott> im maximum mad
23:41:56 <Gregor> elliott: HALP I'm out of Danger Mouse D-8
23:42:03 <elliott> Gregor: did you
23:42:06 <elliott> consume lal the dangermouse
23:42:24 <Gregor> Only "lal" the available.
23:42:42 <Gregor> PLUS all the Danger Mouse rule 34 fanfic on the web.
23:42:50 <elliott> Well that's a given
23:43:08 <shachaf> @admin + elliott
23:43:12 <shachaf> @admin - elliott
23:43:37 <elliott> i dont need your admin
23:43:45 <elliott> `learn shachaf mad
23:43:47 <HackEgo> I knew that.
23:43:49 <shachaf> I need to add some sort of randomized positive reinforcement.
23:43:55 <shachaf> i aint even mad
23:44:11 <shachaf> `cat bin/learn
23:44:13 <HackEgo> ​#!/bin/sh \ topic=$(echo "$1" | sed 's/ .*//' | tr A-Z a-z) \ info=$(echo "$1" | sed 's/[^ ]* //') \ echo "$1" >"wisdom/$topic" \ echo "I knew that." \
23:44:23 <shachaf> `ls wisdom
23:44:25 <HackEgo> c \ elliott \ esoteric \ finland \ friendship \ gregor \ hackego \ haskell \ intercal \ monqy \ oerjan \ qdb \ qdbformat \ shachaf \ vorpal \ welcome \ wiki
23:44:38 <shachaf> `run grep wisdom bin/*
23:44:40 <HackEgo> bin/?:[ -e "wisdom/$topic" ] || { echo "$1? ¯\(°_o)/¯"; exit 1; } \ bin/?:cat "wisdom/$topic" \ bin/forget:rm "wisdom/$(echo "$1" | tr A-Z a-z)" \ bin/learn:echo "$1" >"wisdom/$topic" \ bin/pastewisdom:cat wisdom/* | paste
23:44:48 <shachaf> `run grep -l wisdom bin/*
23:44:49 <HackEgo> bin/? \ bin/forget \ bin/learn \ bin/pastewisdom
23:44:50 <elliott> protip | paste
23:45:03 <elliott> also `url
23:45:11 <shachaf> `? elliott
23:45:13 <HackEgo> elliott wrote this learn DB, and wrote or improved many of the other commands in this bot. He probably has done other things?
23:45:18 <shachaf> ? elliott
23:45:28 <shachaf> #nethack's learndb is better.
23:45:49 <elliott> shachaf: Gregor wouldn't add new message hooks.
23:45:53 <elliott> Or multi-line output.
23:45:55 <elliott> He is noob.
23:46:00 <Gregor> I didn't say I wouldn't add new message hooks.
23:46:05 <Gregor> I said I wouldn't add multi-line output.
23:46:06 <shachaf> `learn elliott mad
23:46:08 <HackEgo> I knew that.
23:46:11 <Gregor> I could be persuaded to add new message hooks.
23:46:16 <elliott> `learn elliott wrote this learn DB, and wrote or improved many of the other commands in this bot. He probably has done other things?
23:46:18 <HackEgo> I knew that.
23:46:39 <shachaf> `learn u mad?
23:46:41 <HackEgo> I knew that.
23:46:47 <shachaf> `run cat bin/\?
23:46:48 <HackEgo> ​#!/bin/sh \ topic=$(echo "$1" | tr A-Z a-z) \ [ -e "wisdom/$topic" ] || { echo "$1? ¯\(°_o)/¯"; exit 1; } \ cat "wisdom/$topic" \
23:47:27 -!- Jafet has quit (Quit: Leaving.).
23:47:32 <elliott> `url bin/?
23:47:34 <HackEgo> http://codu.org/projects/hackbot/fshg/index.cgi/raw-file/tip/bin/?
23:47:42 <Gregor> Hyuk
23:48:11 <shachaf> `run ls -a
23:48:12 <HackEgo> ​. \ .. \ babies \ bin \ bluhbluh \ canary \ env \ foo \ paste \ ps \ quine.pl \ quine2.pl \ quine3.pl \ quotes \ quotese \ tekst \ test.c \ test2.c \ test3.c \ tmp.tmp \ wisdom
23:48:25 <shachaf> `cat env
23:48:27 <HackEgo> PLASH_FAKE_GID=0 \ CONSOLE=/dev/console \ TERM=linux \ SHELL=/bin/sh \ IRC_SOCK=/tmp/multibot.HackEgo \ rootmnt=/root \ IRC_NICK=Lymia \ PLASH_CAPS=conn_maker;fs_op \ PLASH_FAKE_EUID=5000 \ http_proxy=http://127.0.0.1:3128 \ LD_LIBRARY_PATH=/usr/lib/plash/lib \ INIT_VERSION=sysvinit-2.88 \ init=/sbin/init \ HACKENV=/tmp/hackenv.10379
23:48:36 <elliott> Gregor: Still got plash stuff set?
23:48:37 <shachaf> `run ./quine.pl
23:48:38 <HackEgo> sh: ./quine.pl: Permission denied
23:48:40 <shachaf> `ls -F
23:48:41 <HackEgo> babies/ \ bin/ \ bluhbluh \ canary \ env \ foo \ paste/ \ ps \ quine.pl \ quine2.pl \ quine3.pl \ quotes \ quotese \ tekst \ test.c \ test2.c \ test3.c \ tmp.tmp* \ wisdom/
23:48:44 <shachaf> `perl ./quine.pl
23:48:45 <HackEgo> open 0; print <0>
23:48:50 <Gregor> elliott: That's just a file that's been sitting there, probably for months :P
23:48:50 <elliott> Such a cheat.
23:48:56 <elliott> Gregor: Oh :P
23:49:04 <elliott> `run rm *.pl env
23:49:06 <HackEgo> No output.
23:49:10 <elliott> `run rm *.c
23:49:12 <HackEgo> No output.
23:49:16 <elliott> `run rm quotese tekst
23:49:18 <HackEgo> No output.
23:49:19 <elliott> `run rm foo
23:49:21 <HackEgo> No output.
23:49:22 <elliott> `ls
23:49:23 <HackEgo> babies \ bin \ bluhbluh \ canary \ foo \ paste \ ps \ quotes \ tmp.tmp \ wisdom
23:49:28 <elliott> `run rm tmp.tmp babies
23:49:30 <HackEgo> rm: cannot remove `babies': Is a directory
23:49:30 <elliott> (babies is broken anyway)
23:49:38 <Gregor> I'll break YOUR babies.
23:49:43 <elliott> `run rm -r babies bin/fuck bluhbluh foo paste ps tmp.tmp
23:49:45 <HackEgo> rm: cannot remove `foo': No such file or directory \ rm: cannot remove `tmp.tmp': No such file or directory
23:49:47 <elliott> `ls
23:49:48 <HackEgo> bin \ canary \ quotes \ wisdom
23:49:51 <elliott> Good
23:49:52 <elliott> `ls bin
23:49:54 <HackEgo> ​? \ addquote \ allquotes \ botsnack \ calc \ commands \ creatures \ define \ delquote \ esolang \ etymology \ forget \ google \ imdb \ json \ k \ karma \ learn \ log \ logurl \ marco \ minifind \ paste \ pastelog \ pastelogs \ pastenquotes \ pastequotes \ pastewisdom \ penis \ ping \ prefixes \ quine \ quote \ quotes \ rec
23:49:57 <elliott> `k
23:49:57 <shachaf> elliott: wats the best monad
23:49:58 <HackEgo> ​!"#$%^&* 0123456789
23:50:06 <elliott> shachaf: IOT
23:50:07 <Gregor> `quote monad
23:50:09 <HackEgo> 293) <elliott> Deewiant: ha, you were wrong, I have stacks, fungespace and MULTIPLE functions! <elliott> and a monad! <elliott> nothing can stop me now! \ 478) <Phantom_Hoover> oerjan, little do you realise that everything you say and do is part of that great monad tutorial we call life. \ 649) <Gregor> Phantom_Hoover: Sort of
23:50:16 <itidus20> `help creatures
23:50:16 <HackEgo> Runs arbitrary code in GNU/Linux. Type "`<command>", or "`run <command>" for full shell commands. "`fetch <URL>" downloads files. Files saved to $PWD are persistent, and $PWD/bin is in $PATH. $PWD is a mercurial repository, "`revert <rev>" can be used to revert to a revision. See http://codu.org/projects/hackbot/fshg/
23:50:17 <elliott> 478 is still one of the best quotes ever.
23:50:18 <Gregor> `pastequotes monad
23:50:20 <HackEgo> http://codu.org/projects/hackbot/fshg/index.cgi/raw-file/tip/paste/paste.3585
23:50:23 <shachaf> 8`quote 478
23:50:26 <shachaf> `quote 478
23:50:26 <itidus20> `creatures
23:50:27 <HackEgo> 478) <Phantom_Hoover> oerjan, little do you realise that everything you say and do is part of that great monad tutorial we call life.
23:50:28 <HackEgo> Look up what?
23:50:33 <Gregor> `quote 663
23:50:35 <HackEgo> 663) <Gregor> You know how the arrow pierces your skin, rearranging and randomizing vital internal structure? <Gregor> Monads are like that, only worse.
23:50:47 <monqy> `cat bin/penis
23:50:48 <HackEgo> ​#!/bin/sh \ echo "I'm a program. I don't /have/ genitals."
23:50:51 <elliott> `cat bin/rec
23:50:52 <HackEgo> ​#!/bin/bash \ rec
23:50:59 <elliott> `run rm bin/{penis,vagina}
23:51:01 <HackEgo> No output.
23:51:01 <elliott> stupid
23:51:03 <elliott> `rm bin/rec
23:51:04 <HackEgo> No output.
23:51:06 <elliott> `ls rec
23:51:07 <HackEgo> ls: cannot access rec: No such file or directory
23:51:08 <elliott> `ls bin
23:51:10 <HackEgo> ​? \ addquote \ allquotes \ botsnack \ calc \ commands \ creatures \ define \ delquote \ esolang \ etymology \ forget \ google \ imdb \ json \ k \ karma \ learn \ log \ logurl \ marco \ minifind \ paste \ pastelog \ pastelogs \ pastenquotes \ pastequotes \ pastewisdom \ ping \ prefixes \ quine \ quote \ quotes \ roll \ runasperl
23:51:11 <shachaf> #haskell-blah informs me that jQuery is the best monad.
23:51:15 <elliott> shachaf: It's true.
23:51:17 <elliott> `esolang
23:51:18 <Gregor> lol
23:51:19 <HackEgo> Use: `esolang <language>
23:51:21 <shachaf> jQuery is such a monad.
23:51:22 <elliott> Gregor: Does etymology work btw? :p
23:51:24 <elliott> `esolang brainfuck
23:51:26 <HackEgo> ​\ Looking up 127.0.0.1:3128 \ Making HTTP connection to 127.0.0.1:3128 \ Sending HTTP request. \ HTTP request sent; waiting for response. \ Alert!: Unexpected network read error; connection aborted. \ Can't Access `http://esolangs.org/wiki/brainfuck' \ Alert!: Unable to access document. \ \ lynx: Can't access startfile
23:51:27 <Gregor> elliott: Idonno, I didn't make it.
23:51:31 <elliott> Nice
23:51:33 <Gregor> `etymology etymology
23:51:36 <HackEgo> etymology \ late 14c., ethimolegia "facts of the origin and development of a word," from O.Fr. et(h)imologie (14c., Mod.Fr. tymologie), from L. etymologia, from Gk. etymologia, properly "study of the true sense (of a word)," from etymon "true sense" (neut. of etymos "true, real, actual," related to eteos "true") +
23:51:39 <Gregor> Seems to.
23:51:41 <elliott> You installed lynx I see
23:51:45 <elliott> `rm bin/esolang
23:51:46 <elliott> `ls bin
23:51:47 <HackEgo> No output.
23:51:47 <Gregor> Yes :P
23:51:47 <HackEgo> ​? \ addquote \ allquotes \ botsnack \ calc \ commands \ creatures \ define \ delquote \ esolang \ etymology \ forget \ google \ imdb \ json \ k \ karma \ learn \ log \ logurl \ marco \ minifind \ paste \ pastelog \ pastelogs \ pastenquotes \ pastequotes \ pastewisdom \ ping \ prefixes \ quine \ quote \ quotes \ roll \ runasperl
23:51:52 <elliott> Just doin' housecleaning :P
23:51:52 <itidus20> `etymology wales
23:51:54 <HackEgo> No output.
23:51:57 <elliott> `cat bin/botsnack
23:51:57 <monqy> `cat bin/runasperl
23:51:58 <HackEgo> ​#!/bin/sh \ echo 'OH BARF >XO'
23:51:58 <HackEgo> perl -e twat.pl alise
23:52:01 <Gregor> `etymology whales
23:52:03 <HackEgo> No output.
23:52:11 <elliott> `run rm bin/botsnack bin/runasperl
23:52:12 <HackEgo> No output.
23:52:14 <elliott> TODO: Think of a better botsnack.
23:52:18 <elliott> `roll 9d9
23:52:20 <HackEgo> 39
23:52:21 <itidus20> `etymology walnut
23:52:22 <elliott> Good
23:52:23 <HackEgo> walnut \ O.E. walhnutu "nut of the walnut tree," lit. "foreign nut," from wealh "foreign" (see Welsh) + hnutu (see nut). Cf. O.N. valhnot, M.L.G. walnut, M.Du. walnote, Du. walnoot, Ger. Walnu, So called because it was introduced from Gaul and Italy, distinguishing it from the native hazel nut. Cf. the L.L. name for it,
23:52:23 <elliott> `ls bin
23:52:24 <HackEgo> ​? \ addquote \ allquotes \ calc \ commands \ creatures \ define \ delquote \ etymology \ forget \ google \ imdb \ json \ k \ karma \ learn \ log \ logurl \ marco \ minifind \ paste \ pastelog \ pastelogs \ pastenquotes \ pastequotes \ pastewisdom \ ping \ prefixes \ quine \ quote \ quotes \ roll \ runfor \ rungcc \ say \ sayhi
23:52:27 <monqy> what is twat.pl
23:52:28 <shachaf> `run echo $HOME
23:52:29 <HackEgo> ​/
23:52:32 <elliott> `cat bin/commands
23:52:33 <HackEgo> ​#!/bin/sh \ cd `dirname "$0"` \ ls -m
23:52:35 -!- tiffnya has changed nick to tiffany.
23:52:36 <shachaf> `ls /
23:52:36 <elliott> X_X
23:52:37 <HackEgo> bin \ dev \ etc \ hackenv \ home \ lib \ lib64 \ opt \ proc \ sbin \ sys \ tmp \ usr \ var
23:52:37 <elliott> How stupid
23:52:40 <elliott> `commands
23:52:41 <HackEgo> ​?, addquote, allquotes, calc, commands, creatures, define, delquote, etymology, \ forget, google, imdb, json, k, karma, learn, log, logurl, marco, minifind, \ paste, pastelog, pastelogs, pastenquotes, pastequotes, pastewisdom, ping, \ prefixes, quine, quote, quotes, roll, runfor, rungcc, say, sayhi, strfile, \ swedish, toutf8,
23:52:42 <shachaf> `run ls -a /
23:52:43 <HackEgo> ​. \ .. \ bin \ dev \ etc \ hackenv \ home \ lib \ lib64 \ opt \ proc \ sbin \ sys \ tmp \ usr \ var
23:52:52 <tiffany> I just noticed someone's been using my nick :I
23:52:55 <shachaf> Hmm, how would you add things to bashrc?
23:52:59 <elliott> `run sed -i s'/-m/-m | tr -d '\n'/' bin/commands
23:53:00 <HackEgo> No output.
23:53:01 <elliott> `commands
23:53:03 <HackEgo> ​?, addquote, allquotes, calc, commads, creatures, defie, delquote, etymology, \ forget, google, imdb, jso, k, karma, lear, log, logurl, marco, miifid, \ paste, pastelog, pastelogs, pastequotes, pastequotes, pastewisdom, pig, \ prefixes, quie, quote, quotes, roll, rufor, rugcc, say, sayhi, strfile, \ swedish, toutf8, traslate,
23:53:04 <Gregor> shachaf: You wouldn't.
23:53:06 <elliott> Eh?
23:53:07 <elliott> Gregor: ?
23:53:10 <elliott> `cat bin/commands
23:53:11 <HackEgo> ​#!/bin/sh \ cd `dirname "$0"` \ ls -m | tr -d n
23:53:11 <shachaf> Gregor: Curses.
23:53:14 <elliott> `run sed -i s'/-m/-m | tr -d '\\n'/' bin/commands
23:53:15 <HackEgo> No output.
23:53:15 <elliott> `cat bin/commands
23:53:17 <HackEgo> ​#!/bin/sh \ cd `dirname "$0"` \ ls -m | tr -d n
23:53:19 <elliott> `cat bin/commands
23:53:20 <HackEgo> ​#!/bin/sh \ cd `dirname "$0"` \ ls -m | tr -d \ | tr -d n
23:53:24 <elliott> ..fuck :P
23:53:27 <elliott> `rm bin/commands
23:53:28 <HackEgo> No output.
23:53:30 <elliott> ls bin works juuust fine :P
23:53:31 <elliott> `ls bin
23:53:32 <HackEgo> ​? \ addquote \ allquotes \ calc \ creatures \ define \ delquote \ etymology \ forget \ google \ imdb \ json \ k \ karma \ learn \ log \ logurl \ marco \ minifind \ paste \ pastelog \ pastelogs \ pastenquotes \ pastequotes \ pastewisdom \ ping \ prefixes \ quine \ quote \ quotes \ roll \ runfor \ rungcc \ say \ sayhi \ strfile
23:53:38 <elliott> `cat bin/runfor
23:53:39 <HackEgo> ​#!/bin/bash \ if [ ! "$2" ] \ then \ echo 'Use: runfor <time> <command>' \ exit 1 \ fi \ \ TIME="$1" \ shift \ \ "$@" & \ sleep $(( TIME + 0 )) \ kill -9 %1
23:53:44 <elliott> `run ls -l bin | paste
23:53:46 <HackEgo> http://codu.org/projects/hackbot/fshg/index.cgi/raw-file/tip/paste/paste.31636
23:53:51 <elliott> Wow, that's a lot
23:53:58 <elliott> `sayhi
23:53:59 <HackEgo> hi, all
23:54:02 <elliott> x_X
23:54:06 <monqy> `cat bin/sayhi
23:54:06 <elliott> Gregor: When do we even GET this crap :P
23:54:07 <HackEgo> ​#!/bin/sh \ echo hi, all
23:54:09 <shachaf> `mkdir /tmp/home
23:54:10 <HackEgo> No output.
23:54:13 <Gregor> elliott: When you're not looking.
23:54:14 <shachaf> `chsh -h /tm/home
23:54:14 <monqy> `cat bin/wtf
23:54:15 <HackEgo> Usage: chsh [options] [LOGIN] \ \ Options: \ -h, --help display this help message and exit \ -s, --shell SHELL new login shell for the user account \
23:54:15 <HackEgo> ​#!/bin/sh \ echo "why $1 is like wtf"
23:54:19 <elliott> `run rm bin/say{,hi} bin/twat
23:54:20 <HackEgo> No output.
23:54:21 <Gregor> shachaf: tmp is not preserved between commands.
23:54:24 <shachaf> `id -a
23:54:25 <HackEgo> uid=5000 gid=188466
23:54:28 <shachaf> `whoami
23:54:29 <HackEgo> whoami: cannot find name for user ID 5000
23:54:33 <monqy> `cat bin/twat
23:54:33 <elliott> `imdb the room
23:54:34 <itidus20> `log fnord
23:54:34 <HackEgo> cat: bin/twat: No such file or directory
23:54:36 <HackEgo> ​\ Looking up 127.0.0.1:3128 \ Making HTTP connection to 127.0.0.1:3128 \ Sending HTTP request. \ HTTP request sent; waiting for response. \ Alert!: Unexpected network read error; connection aborted. \ Can't Access `http://imdb.com/find?q=%74%68%65%20%72%6f%6f%6d' \ Alert!: Unable to access document. \ \ lynx: Can't access startfile
23:54:40 <elliott> `rm bin/imdb
23:54:40 <HackEgo> 2007-12-11.txt:20:11:34: <oerjan> ELIZA: Gak fnord bezeekel ash fnebby.
23:54:41 <HackEgo> No output.
23:54:46 <tiffany> what happens if I `cat /usr/share/dict/words
23:54:47 <tiffany> :P
23:54:48 <elliott> `k
23:54:50 <HackEgo> ​!"#$%^&* 0123456789
23:54:51 <shachaf> `chfn -h /hackend/bin
23:54:52 <HackEgo> No output.
23:54:58 <Gregor> tiffany: Nothing very interesting.
23:55:01 <elliott> `cat bin/runfor
23:55:02 <HackEgo> ​#!/bin/bash \ if [ ! "$2" ] \ then \ echo 'Use: runfor <time> <command>' \ exit 1 \ fi \ \ TIME="$1" \ shift \ \ "$@" & \ sleep $(( TIME + 0 )) \ kill -9 %1
23:55:05 <elliott> What does that even do.
23:55:09 <shachaf> `run echo 'echo -ne a' > bin/.bashrc
23:55:10 <HackEgo> No output.
23:55:12 <shachaf> `echo a
23:55:13 <HackEgo> a
23:55:14 <shachaf> `run echo a
23:55:15 <HackEgo> a
23:55:16 <elliott> `run grep -r runfor bin
23:55:17 <HackEgo> bin/runfor: echo 'Use: runfor <time> <command>'
23:55:20 <shachaf> `echo $HOME
23:55:21 <elliott> `rm bin/runfor
23:55:21 <HackEgo> ​$HOME
23:55:22 <HackEgo> No output.
23:55:26 <shachaf> `run echo $HOME
23:55:26 <elliott> `cat bin/rungc
23:55:27 <HackEgo> ​/
23:55:27 <elliott> `cat bin/rungcc
23:55:27 <HackEgo> cat: bin/rungc: No such file or directory
23:55:28 <HackEgo> ​#!/usr/bin/env bash \ name=$(mktemp) \ tail -n +1 "$1" | gcc -x c -w -O2 -std=gnu99 /dev/stdin -o "$name" || exit $? \ shift \ "$name" "$@"; st=$? \ rm -f "$name" 2>/dev/null \ exit $? \
23:55:30 <shachaf> Stupid thing.
23:55:30 -!- Sgeo_ has joined.
23:55:33 <shachaf> `cat /etc/passwd
23:55:34 <HackEgo> cat: /etc/passwd: No such file or directory
23:55:38 <monqy> `cat bin/swedish
23:55:39 <HackEgo> ​#!/bin/bash \ echo "$1" | /usr/games/chef
23:55:44 <elliott> `run echo 'int main(){printf("hi\n");}' | rungcc
23:55:47 <shachaf> Useless.
23:55:47 <HackEgo> tail: cannot open `' for reading: No such file or directory \ /usr/lib/gcc/x86_64-linux-gnu/4.3.2/../../../../lib/crt1.o: In function `_start': \ (.text+0x20): undefined reference to `main' \ collect2: ld returned 1 exit status
23:55:55 <Gregor> lol
23:55:55 <elliott> `rm bin/rungcc
23:55:57 <HackEgo> No output.
23:55:58 <elliott> `cat bin/strfile
23:55:58 <monqy> `swedish this is a good command
23:55:59 <HackEgo> ​ELF...
23:55:59 <HackEgo> ​/hackenv/bin/swedish: line 2: /usr/games/chef: No such file or directory
23:56:03 <elliott> Why do we have strfile
23:56:11 <Gregor> elliott: Don't ask me X-D
23:56:12 <elliott> `rm bin/strfile
23:56:13 <HackEgo> No output.
23:56:16 <Gregor> GOD I love this bot.
23:56:19 <elliott> `run ls -l bin | paste
23:56:19 <monqy> `rm bin/swedish
23:56:20 <HackEgo> http://codu.org/projects/hackbot/fshg/index.cgi/raw-file/tip/paste/paste.20134
23:56:21 <HackEgo> No output.
23:56:31 <elliott> `cat bin/u
23:56:32 <HackEgo> ​#!/bin/bash \ echo i mad
23:56:36 <monqy> :(
23:56:38 <elliott> `rm bin/u
23:56:39 <HackEgo> No output.
23:56:40 <elliott> `? u
23:56:42 <HackEgo> u mad?
23:56:44 <elliott> See, it's obsolete.
23:56:47 <elliott> `cat bin/unstr
23:56:48 <HackEgo> ​ELF...
23:56:51 <elliott> X_X
23:56:54 <elliott> `rm bin/unstr
23:56:55 <HackEgo> No output.
23:56:56 <elliott> `ping
23:56:57 <HackEgo> pong
23:57:01 <elliott> `karma
23:57:04 <monqy> `cat bin/wolfram
23:57:05 <HackEgo> ​#!/bin/bash \ WA='http://www24.wolframalpha.com' \ \ dowget() { \ wget -U "Mozilla/5.0 (X11; U; Linux i686 (x86_64); en-US; rv:1.9.0.11) Gecko/2009060214 Firefox/3.0.11" "$@" \ return "$?" \ } \ \ if [ ! "$1" ] \ then \ echo 'Look up what?' \ exit 1 \ fi \ \ QUERY=`echo -n "$1" | od -t x1 -A n -w1000 | tr "
23:57:05 <elliott> `karma HackEgo
23:57:07 <HackEgo> grep: karma: No such file or directory
23:57:12 <itidus20> `learn Strfile has a mysterious purpose.
23:57:12 <elliott> `url bin/karma
23:57:13 <HackEgo> http://codu.org/projects/hackbot/fshg/index.cgi/raw-file/tip/bin/karma
23:57:13 <HackEgo> I knew that.
23:57:18 <elliott> `forget Strfile
23:57:19 <HackEgo> Forget what?
23:57:20 <elliott> I know what strfile does :P
23:57:23 <elliott> `rm bin/karma
23:57:24 <HackEgo> No output.
23:57:27 <elliott> I'll implement a proper karma system
23:57:31 <shachaf> This channel is too crowded.
23:57:31 <HackEgo> No output.
23:57:33 <elliott> `google qwerty
23:57:33 <itidus20> i don't
23:57:35 <HackEgo> No output.
23:57:38 <shachaf> Also, everyone in here is mad.
23:57:39 <elliott> `cat bin/creatures
23:57:39 <Gregor> shachaf: Only when people go into botnonsense mode.
23:57:40 <HackEgo> ​#!/bin/bash \ if [ ! "$1" ] \ then \ echo 'Look up what?' \ exit 1 \ fi \ \ QUERY=`echo -n "$1" | od -t x1 -A n -w1000 | tr " " %` \ \ lynx --cfg=/dev/null --lss=/dev/null \ \ --dump --width=1000 'http://creatures.wikia.com/wiki/'"$QUERY" | \ grep -A 100 'Jump to:' | \ tail -n +3 | \ sed 's/ */ /g'
23:57:47 <elliott> ...yeah, so useful and borken.
23:57:48 -!- Sgeo has quit (Ping timeout: 260 seconds).
23:57:49 <elliott> `rm bin/creatures
23:57:50 <HackEgo> No output.
23:57:51 <shachaf> Can all y'all get out of bot nonsense mode?
23:57:53 <elliott> `cat bin/calc
23:57:54 <HackEgo> ​#!/bin/bash \ if [ ! "$1" ] \ then \ echo 'Calculate what?' \ exit 1 \ fi \ \ QUERY=`echo -n "$1" | od -t x1 -A n -w1000 | tr " " %` \ \ lynx --cfg=/dev/null --lss=/dev/null \ \ --dump --width=1000 'http://google.com/search?q='"$QUERY" | \ grep -m 1 '=' | sed 's/ \+/ /g'
23:57:56 <elliott> shachaf: I'm doing HOUSEWORK.
23:57:57 <monqy> `cat bin/toutf8
23:57:59 <HackEgo> ​#!/usr/bin/python \ import sys \ import chardet \ x = sys.stdin.read() \ enc = chardet.detect(x)['encoding'] \ sys.stdout.write(x.decode(enc).encode('UTF-8'))
23:58:03 <elliott> `rm bin/calc
23:58:04 <HackEgo> No output.
23:58:05 <elliott> `rm bin/minifind
23:58:07 <HackEgo> No output.
23:58:08 <elliott> `marco
23:58:09 <HackEgo> polo
23:58:11 <elliott> That can stay.
23:58:13 <Gregor> shachaf: If HackEgo didn't so desperately need a cleanup, I'd try to put a stop to it :P
23:58:14 <monqy> `wtf
23:58:14 <elliott> The genocide is over.
23:58:15 <HackEgo> why is like wtf
23:58:16 <tiffany> o.o
23:58:19 <itidus20> `learn Everyone in here is mad.
23:58:21 <HackEgo> I knew that.
23:58:24 <elliott> `run ls -lR | paste
23:58:25 <HackEgo> http://codu.org/projects/hackbot/fshg/index.cgi/raw-file/tip/paste/paste.27770
23:58:29 <elliott> Gregor: Behold the new, cleaner HackEgo :P
23:58:39 -!- MSleep has joined.
23:58:41 <shachaf> `saverevision
23:58:42 <HackEgo> ​/home/hackbot/hackbot.hg/multibot_cmds/lib/limits: line 5: exec: saverevision: not found
23:58:44 <elliott> `wolfram 99
23:58:47 <Gregor> elliott: It is teh sexy.
23:58:47 <shachaf> So much for DWIM
23:58:54 <elliott> C'mon HackEgo.
23:58:56 <elliott> EH
23:58:56 <elliott> `rm bin/wolfram
23:58:57 <HackEgo> No output.
23:58:59 <elliott> Pretty sure it was broken anyway.
23:59:02 <shachaf> elliott: I've changed my mind. data Null a = Null is the best monad.
23:59:08 <elliott> shachaf: That it is.
23:59:14 <HackEgo> ​--2011-09-14 23:58:45-- http://www24.wolframalpha.com/input/?i=%39%39 \ Connecting to 127.0.0.1:3128... connected. \ Proxy request sent, awaiting response... No data received. \ Retrying. \ \ --2011-09-14 23:58:46-- (try: 2) http://www24.wolframalpha.com/input/?i=%39%39 \ Connecting to 127.0.0.1:3128... connected.
23:59:18 <elliott> X-D
23:59:37 <shachaf> u monad?
23:59:37 <tiffany> o.o
23:59:45 <shachaf> `learn u monad?
23:59:46 <HackEgo> I knew that.
23:59:59 <monqy> `cat bin/wl
2011-09-15
00:00:01 <HackEgo> ​#!/usr/bin/env python \ \ import os \ import sys \ import json \ import urllib2 \ \ proxy_handler = urllib2.ProxyHandler({'http': os.environ['http_proxy']}) \ opener = urllib2.build_opener(proxy_handler) \ urllib2.install_opener(opener) \ \ def lose(): \ print 'You get NOTHING! You LOSE! Good DAY sir!' \ sys.exit()
00:00:08 <itidus20> 99 repeats a single digit in base 10.
00:00:17 <elliott> `learn Monads are just monoids in the category of endofunctors.
00:00:19 <HackEgo> I knew that.
00:00:23 <elliott> `run ln -s wisdom/monad{,s}
00:00:24 <HackEgo> ln: creating symbolic link `wisdom/monads': File exists
00:00:25 <shachaf> @quote copumpkin lax
00:00:25 <lambdabot> copumpkin says: a monad is just a lax functor from a terminal bicategory, duh. fuck that monoid in category of endofunctors shit
00:00:28 <elliott> `run ln -s wisdom/monad{s,}
00:00:29 <HackEgo> No output.
00:00:33 <elliott> `learn monad
00:00:34 <monqy> `paste bin/wl
00:00:35 <elliott> erm
00:00:35 <HackEgo> ​/hackenv/bin/learn: line 4: wisdom/monad: No such file or directory \ I knew that.
00:00:35 <elliott> fuck
00:00:35 <HackEgo> http://codu.org/projects/hackbot/fshg/index.cgi/raw-file/tip/paste/paste.3547
00:00:41 <elliott> `? monad
00:00:42 <HackEgo> monad? ¯\(°_o)/¯
00:00:44 <elliott> `? monads
00:00:45 <HackEgo> Monads are just monoids in the category of endofunctors.
00:00:51 <elliott> `run ln -s wisdom/monad{s,}
00:00:52 <HackEgo> ln: creating symbolic link `wisdom/monad': File exists
00:00:52 <elliott> oh
00:00:53 <elliott> duh
00:00:56 <monqy> what does wl do
00:00:57 <elliott> `run rm wisdom/monad
00:00:58 <HackEgo> No output.
00:01:01 <elliott> `run cd wisdom; ln -s monads monad
00:01:03 <HackEgo> No output.
00:01:05 <elliott> monqy: wikilates
00:01:05 <elliott> `? monad
00:01:07 <HackEgo> Monads are just monoids in the category of endofunctors.
00:01:13 <shachaf> `run mv wisdom foolishness
00:01:14 <HackEgo> No output.
00:01:20 <elliott> `run mv foolishness wisdom
00:01:21 <HackEgo> No output.
00:02:07 <elliott> `run echo $(($(cat /dev/null)+1))
00:02:09 <HackEgo> 1
00:02:12 <elliott> Excellent.
00:02:34 <shachaf> `run mv wisdom elliott
00:02:35 <HackEgo> No output.
00:02:39 <elliott> `run mv elliott wisdom
00:02:40 <HackEgo> No output.
00:02:47 <elliott> You're encouraging botnonsense mode, shachaf.
00:02:58 <shachaf> `? elliott/u
00:03:00 <HackEgo> elliott/u? ¯\(°_o)/¯
00:03:02 -!- augur has joined.
00:03:08 -!- MSleep has changed nick to MDude.
00:03:46 <shachaf> `> u
00:03:47 <HackEgo> ​/home/hackbot/hackbot.hg/multibot_cmds/lib/limits: line 5: exec: >: not found
00:03:48 <shachaf> `? u
00:03:50 <HackEgo> u monad?
00:03:56 <shachaf> `rm -rf wisdom
00:03:57 <HackEgo> rm: invalid option -- \ Try `rm --help' for more information.
00:04:04 <shachaf> `run rm -rf wisdom
00:04:05 <HackEgo> No output.
00:04:07 <shachaf> No more nonsense.
00:04:14 <elliott> `help
00:04:14 <HackEgo> Runs arbitrary code in GNU/Linux. Type "`<command>", or "`run <command>" for full shell commands. "`fetch <URL>" downloads files. Files saved to $PWD are persistent, and $PWD/bin is in $PATH. $PWD is a mercurial repository, "`revert <rev>" can be used to revert to a revision. See http://codu.org/projects/hackbot/fshg/
00:04:18 <shachaf> `run while true; do true; done
00:04:30 <elliott> shachaf: Do you really think you're going to break the bot?
00:04:34 <elliott> `revert 318
00:04:35 <HackEgo> Done.
00:04:45 <elliott> `revert 321
00:04:45 <HackEgo> Done.
00:04:49 <HackEgo> No output.
00:04:49 <shachaf> elliott: No.
00:04:55 <shachaf> I just think I'll encourage the nonsense to stop.
00:04:58 <shachaf> By being part of it.
00:05:01 <elliott> `run mkdir lib
00:05:02 <HackEgo> No output.
00:05:05 <tiffany> o.o
00:05:05 <elliott> The nonsense is over :P
00:05:46 <shachaf> Do you people ever talk about esoteric languages?
00:05:50 <elliott> Yep
00:05:58 <elliott> `fetch http://sprunge.us/MYMX
00:05:59 <HackEgo> 2011-09-15 00:05:59 URL:http://sprunge.us/MYMX [73] -> "MYMX" [1]
00:06:07 <shachaf> ?bf +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++.
00:06:07 <lambdabot> [
00:06:09 <elliott> `run mv MYMX bin/karma; chmod +x bin/karma
00:06:10 <HackEgo> No output.
00:06:14 <itidus20> `? esoteric
00:06:16 <HackEgo> Esoteric is an abbreviation for Esoteric Programming Languages as contrasted with Esoteric languages such as lojban and klingon and contrasted with the occult, however those topics may well be compatible with each other .. according to itidus20
00:06:23 <elliott> `fetch http://sprunge.us/RDIF
00:06:23 <HackEgo> 2011-09-15 00:06:23 URL:http://sprunge.us/RDIF [155] -> "RDIF" [1]
00:06:28 <itidus20> ok i just wanted to do it once
00:06:31 <elliott> `run mv RDIF lib/adjustkarma; chmod +x lib/adjustkarma
00:06:33 <HackEgo> mv: cannot move `RDIF' to `lib/adjustkarma': No such file or directory \ chmod: cannot access `lib/adjustkarma': No such file or directory
00:06:42 <elliott> `run mkdir lib; mv RDIF lib/adjustkarma; chmod +x lib/adjustkarma
00:06:44 <HackEgo> No output.
00:06:54 <elliott> `fetch http://sprunge.us/IVaB
00:06:55 <HackEgo> 2011-09-15 00:06:55 URL:http://sprunge.us/IVaB [35] -> "IVaB" [1]
00:06:58 <elliott> `fetch http://sprunge.us/RRje
00:06:59 <HackEgo> 2011-09-15 00:06:59 URL:http://sprunge.us/RRje [35] -> "RRje" [1]
00:07:07 <elliott> `run mv IVaB bin/'++'; mv RRje bin/'--'
00:07:08 <HackEgo> No output.
00:07:10 <itidus20> shachaf: as a newbie here i am not at liberty to make the comments i made
00:07:15 <elliott> `run chmod +x bin/'++'; chmod +x bin/'--'
00:07:17 <HackEgo> No output.
00:07:21 <elliott> `run mkdir karma; touch karma/.doorstop
00:07:23 <HackEgo> No output.
00:07:24 <itidus20> thats why i added "according to" clause :D
00:07:26 <elliott> `karma shachaf
00:07:27 <HackEgo> cat: karma/shachaf: No such file or directory \ shachaf has karma 0.
00:07:32 <elliott> Ugh
00:07:55 <elliott> `fetch http://sprunge.us/SUdf
00:07:56 <HackEgo> 2011-09-15 00:07:56 URL:http://sprunge.us/SUdf [85] -> "SUdf" [1]
00:08:01 <elliott> `run mv SUdf bin/karma; chmod +x bin/karma
00:08:02 <HackEgo> No output.
00:08:11 <elliott> `fetch http://sprunge.us/jcDD
00:08:12 <HackEgo> 2011-09-15 00:08:12 URL:http://sprunge.us/jcDD [167] -> "jcDD" [1]
00:08:17 <shachaf> `ls karma
00:08:19 <HackEgo> No output.
00:08:19 <elliott> `run mv jcDD lib/adjustkarma; chmod +x lib/adjustkarma
00:08:20 <HackEgo> No output.
00:08:23 <elliott> `karma shachaf
00:08:24 -!- Sgeo__ has joined.
00:08:24 <HackEgo> shachaf has 0 karma.
00:08:26 <elliott> `-- shachaf
00:08:27 <HackEgo> ​/home/hackbot/hackbot.hg/multibot_cmds/lib/limits: line 5: exec: shachaf: not found
00:08:32 <elliott> Gregor?
00:08:41 <elliott> Think you have a problem with quoting -- there :P
00:08:44 <elliott> You want to put -- before all the arguments
00:08:47 <elliott> To denote end of options, etc.
00:08:50 <shachaf> itidus20: What?
00:09:00 <itidus20> nothing
00:09:40 <elliott> Gregor: BUUUUUUUUUUUUUUUUUUUGS
00:09:55 <elliott> `run mv bin/'++' bin/karma'+'; mv bin/'--' bin/karma'-'
00:09:56 <HackEgo> No output.
00:10:00 <elliott> `karma- shachaf
00:10:02 <itidus20> `log esperanto
00:10:02 <HackEgo> shachaf has -1 karma.
00:10:05 <HackEgo> 2007-07-13.txt:21:27:58: <oklokok> pikhq: esperanto isn't that good, judging by what i've read about it
00:10:25 <elliott> Ugh
00:10:27 <itidus20> `forget esoteric
00:10:27 <elliott> I forgot to case-normalise karma
00:10:28 <HackEgo> Forget what?
00:10:51 <itidus20> `forget esoteric
00:10:52 <HackEgo> rm: cannot remove `wisdom/esoteric': No such file or directory \ Forget what?
00:10:53 <itidus20> oops
00:10:55 <Gregor> elliott: ... huh?
00:10:56 <itidus20> `log esperanto
00:10:59 <HackEgo> 2007-05-31.txt:20:28:35: <Pikhq> Ne, ne, ne! Lernu Esperanton.
00:11:00 <Gregor> elliott: Oh
00:11:01 <elliott> Gregor: You handle `-- incorrectly
00:11:06 <shachaf> `karma+ shachaf
00:11:07 <itidus20> `log esperanto
00:11:08 <HackEgo> shachaf has 0 karma.
00:11:10 <HackEgo> 2006-08-26.txt:01:32:32: <pikhq> ihope: Ne. Esperanto.
00:11:13 -!- Sgeo_ has quit (Ping timeout: 260 seconds).
00:11:14 <elliott> `fetch http://sprunge.us/FPTI
00:11:15 <HackEgo> 2011-09-15 00:11:15 URL:http://sprunge.us/FPTI [117] -> "FPTI" [1]
00:11:17 <shachaf> `cat bin/karma+
00:11:17 <elliott> `fetch http://sprunge.us/RaVh
00:11:18 <HackEgo> 2011-09-15 00:11:18 URL:http://sprunge.us/RaVh [211] -> "RaVh" [1]
00:11:18 <HackEgo> ​#!/bin/sh \ lib/adjustkarma "$1" +1 \
00:11:23 <elliott> `run mv FPTI bin/karma; chmod +x bin/karma
00:11:24 <HackEgo> No output.
00:11:30 <itidus20> `log esperanto
00:11:31 <shachaf> `run lib/adjustkarma shachaf +1000
00:11:32 <elliott> `run mv RaVh lib/adjustkarma; chmod +x lib/adjustkarma
00:11:33 <HackEgo> shachaf has 1000 karma.
00:11:33 <HackEgo> No output.
00:11:34 <HackEgo> 2008-06-02.txt:15:08:16: <pikhq> I'd tend to say "Esperanto parolas vin", BTW.
00:11:39 <elliott> `rm karma/shachaf
00:11:40 <HackEgo> No output.
00:11:41 <shachaf> `cat RaVh
00:11:43 <HackEgo> cat: RaVh: No such file or directory
00:11:46 <shachaf> `ls
00:11:47 <HackEgo> bin \ canary \ karma \ lib \ paste \ quotes \ wisdom
00:11:49 <elliott> shachaf discovers that in an open-world bot it is possible to adjust any data.
00:11:52 <elliott> No shit, sherlock.
00:12:05 <shachaf> elliott: I wasn't particularly unaware of it beforehand.
00:12:17 <Gregor> elliott: Fixt.
00:12:22 <shachaf> This wasn't exactly a "zomg guys u have a bug!!!!"
00:12:26 <elliott> :P
00:12:27 <itidus20> `karma itidus20
00:12:29 <HackEgo> itidus20 has 0 karma.
00:12:29 <elliott> Gregor: Thx, not that I want it to be called `--
00:12:34 <elliott> Gregor: But speaking of message handlers
00:12:45 <shachaf> `echo 1337 > karma/elliott
00:12:46 <HackEgo> 1337 > karma/elliott
00:12:46 <elliott> Gregor: Can you cause any foo++ and foo-- in a message to run bin/karma+ foo or bin/karma- foo
00:12:48 <elliott> Thanks
00:12:52 <shachaf> `run echo 1337 > karma/elliott
00:12:53 <HackEgo> No output.
00:12:58 <elliott> `rm karma/elliott
00:13:00 <HackEgo> No output.
00:13:11 <Gregor> elliott: /just/ foo++, or anywhere in the message?
00:13:36 <elliott> Gregor: Anywhere in the message. Actually, you probably want to run it as "karma+ blah; karma+ blah; karma- blah" etc., otherwise it'll spam N lines for N karma adjustments.
00:13:49 <elliott> Gregor: You might want to special-case C++ and C--... but you might not, it's way more fun if you don't :P
00:13:55 <Gregor> Idonno if I like it being anywhere in the message ...
00:13:57 <elliott> Gregor: Actually just silence the output.
00:14:06 <shachaf> Gregor: That's how the cool bots do it.
00:14:08 <shachaf> @karma Gregor
00:14:09 <lambdabot> Gregor has a karma of 1
00:14:09 <elliott> It's true.
00:14:12 <elliott> preflex and lambdabot agree thoroughly.
00:14:12 <shachaf> Gregor++
00:14:14 <shachaf> @karma Gregor
00:14:14 <lambdabot> Gregor has a karma of 2
00:14:19 <Gregor> Oh, do it silently.
00:14:22 <Gregor> Silently works.
00:14:23 <elliott> <elliott> karma C
00:14:24 <elliott> <preflex> C: 174240
00:14:34 <shachaf> @karma c/c
00:14:35 <lambdabot> c/c has a karma of 650
00:14:39 <elliott> X-D
00:14:40 <shachaf> u mad kmc?
00:14:44 <Lymee> `run lib/adjustkarma elliott -100000
00:14:46 <HackEgo> elliott has -100000 karma.
00:14:49 <shachaf> Oops, he's in here.
00:14:51 <Lymee> `run lib/adjustkarma elliott -100000000000000000000000000000000000000000000000
00:14:53 <HackEgo> elliott has -6450984253743269536 karma.
00:14:53 <elliott> Lymee: You're not funny, you're just annoying.
00:14:55 <elliott> `rm karma/elliott
00:14:56 <Lymee> Okey.
00:14:56 <HackEgo> No output.
00:15:05 <monqy> `ls karma
00:15:06 <HackEgo> No output.
00:15:07 <shachaf> elliott: That's true of everyone in this channel.
00:15:14 <elliott> True.
00:16:12 <elliott> `run echo '#!/bin/sh' >bin/pastekarma; echo 'for thing in karma/*; do' >>bin/pastekarma; echo ' echo "$thing: $(cat "karma/$thing")"' >>bin/pastekarma; echo 'done | paste' >>bin/pastekarma
00:16:13 <HackEgo> No output.
00:16:15 <elliott> `run chmod +x bin/pastekarma
00:16:16 <HackEgo> No output.
00:16:17 <elliott> `pastekarma
00:16:18 <HackEgo> http://codu.org/projects/hackbot/fshg/index.cgi/raw-file/tip/paste/paste.7337 \ cat: karma/karma/*: No such file or directory
00:16:22 <elliott> What.
00:16:26 <elliott> `url bin/pastekarma
00:16:27 <HackEgo> http://codu.org/projects/hackbot/fshg/index.cgi/raw-file/tip/bin/pastekarma
00:16:32 <elliott> Oh, hmm.
00:16:38 <elliott> What's the right way to do it?
00:16:39 <elliott> I know that
00:16:42 <elliott> for thing in `echo karma/*`; do
00:16:46 <elliott> is meant to be a Useless Use of Whatever.
00:16:54 <elliott> oh hmm
00:17:00 <elliott> `run for thing; do echo $thing; done
00:17:01 <HackEgo> No output.
00:17:04 <elliott> huh
00:17:15 <elliott> Oh
00:17:17 <elliott> That's for argument processing
00:17:37 <Sgeo__> LOLOLOL at rather idiotic VirtualBox bug
00:17:43 <elliott> LOLOLOLOLOLOL UMAD
00:18:03 <Sgeo__> Try to import ovf file, change the name, and the extension of the disk image changes
00:18:04 <elliott> `fetch http://sprunge.us/FHcN
00:18:04 <HackEgo> 2011-09-15 00:18:04 URL:http://sprunge.us/FHcN [94] -> "FHcN" [1]
00:18:09 <elliott> `run mv FHcN bin/pastekarma; chmod +x bin/pastekarma
00:18:11 <HackEgo> No output.
00:18:12 <elliott> `pastekarma
00:18:14 <HackEgo> http://codu.org/projects/hackbot/fshg/index.cgi/raw-file/tip/paste/paste.27268
00:18:28 <elliott> `karma- C++
00:18:30 <HackEgo> C++ has 0 karma.
00:18:33 <Lymee> `karma+ foo
00:18:35 <HackEgo> foo has 1 karma.
00:18:35 <elliott> Huh?
00:18:38 <Lymee> `karma+ bar
00:18:40 <HackEgo> bar has 1 karma.
00:18:41 <elliott> It should become minus one.
00:18:42 <Lymee> `pastekarma
00:18:44 <HackEgo> http://codu.org/projects/hackbot/fshg/index.cgi/raw-file/tip/paste/paste.8129
00:18:46 <elliott> `karma- C++
00:18:48 <HackEgo> C++ has 0 karma.
00:18:51 <elliott> Oh
00:18:54 <elliott> Gregor: Did you implement it?
00:19:02 <elliott> Might wanna disable it on lines targeted at HackEgo X-D
00:19:13 <Gregor> elliott: Haven't even started :P
00:19:24 <elliott> `run rm -r karma; mkdir karma; touch karma/.doorstep
00:19:25 <elliott> Righty then
00:19:25 <HackEgo> No output.
00:19:49 <elliott> Gregor: When you do, it'd be nice if you routed ?foo, where the ? is at the start of the message, to bin/? foo
00:19:55 <elliott> But yeah, no big deal :P
00:20:01 <elliott> TIME TO SIT BACK AND RELAX
00:20:05 <elliott> `log relax
00:20:08 <HackEgo> 2008-10-29.txt:14:43:05: <ehird> Relax, sit back. It'll be alright.
00:20:15 <elliott> me too
00:20:31 <elliott> shachaf: Botmadness officially over.
00:20:31 <itidus20> `log horror
00:20:34 <HackEgo> 2007-04-29.txt:02:44:01: <bsmntbombdood> horror?
00:20:46 <itidus20> `log horror
00:20:49 <HackEgo> 2011-08-13.txt:12:50:59: <CakeProphet> I'm pretty sure CakeProphet: The Musical would be of the horror tradgedy genre
00:20:50 <oerjan> elliott: erm, ? is lambdabot prefix
00:21:04 <elliott> oerjan: All the better.
00:21:07 <Gregor> `url
00:21:09 <HackEgo> http://codu.org/projects/hackbot/fshg/
00:21:22 <elliott> Gregor: Whaddya doin' :P
00:21:24 <elliott> oerjan: btw
00:21:25 <elliott> `? welcome
00:21:27 <HackEgo> Welcome to the international hub for esoteric programming language design and deployment! For more information, check out our wiki: http://esolangs.org/wiki/Main_Page
00:21:28 <elliott> oerjan: the most useful???
00:21:28 <Gregor> elliott: EVIL
00:21:35 <elliott> Gregor: I am sceptical
00:21:41 <itidus20> `log evil
00:21:45 <HackEgo> 2010-10-30.txt:20:37:16: <Phantom_Hoover> Well, I can't see why you view it as evil.
00:21:57 -!- Jafet has joined.
00:22:03 -!- oerjan has quit (Quit: Good night).
00:22:15 <itidus20> `log evil
00:22:18 <HackEgo> 2010-11-17.txt:00:41:04: <elliott> Vorpal: (If I succumb to you and other evil people's wishes, I'll just put a huge gob of extra code in svmg so it can support start scripts that don't leave a process running around, but it will require donations.)
00:23:02 <elliott> `karma .doorstep
00:23:03 <HackEgo> ​.doorstep has karma.
00:23:05 <elliott> good old doorstep
00:23:08 <elliott> um
00:23:08 <elliott> wait
00:23:09 <elliott> doorstep
00:23:10 <elliott> its
00:23:12 <elliott> meant to be doorstop...
00:23:12 <shachaf> elliott: Doesn't look that way.
00:23:17 <elliott> `run mv karma/.doorstep karma/.doorstop
00:23:19 <HackEgo> No output.
00:23:22 <elliott> shachaf: This isn't botmadness, this is just botusage.
00:23:25 <elliott> `log happiness
00:23:28 <HackEgo> 2011-01-22.txt:11:51:53: <oklopol> well someone could be experiencing happiness in your backyard, so you tell them happiness is not allowed in there, and then he says "but the happinessness of my happiness is so overwhelming i can't control it!" and then you say "the happinessnessness your happiness' happinessness is feeling
00:24:29 <Lymee> `echo abcd > karma/test
00:24:31 <HackEgo> abcd > karma/test
00:24:32 <Lymee> `karma+ test
00:24:34 <HackEgo> test has 1 karma.
00:24:38 <Lymee> `run echo abcd > karma/test
00:24:39 <HackEgo> No output.
00:24:41 <Lymee> `karma+ test
00:24:43 <HackEgo> test has 1 karma.
00:24:50 <Lymee> `rm karma/tet
00:24:51 <Lymee> `rm karma/test
00:24:51 <HackEgo> rm: cannot remove `karma/tet': No such file or directory
00:24:52 <HackEgo> No output.
00:30:12 <elliott> `? shachaf
00:30:14 <HackEgo> shachaf mad
00:30:20 <elliott> Indeed, HackEgo. Indeed.
00:33:25 <elliott> Gregor: So what were you actually doing :P
00:34:47 <elliott> `log mad
00:34:50 <HackEgo> 2009-10-22.txt:07:54:39: <Oranjer> I must now reread your previous comments, madbrain, with that in mind
00:35:05 <elliott> `log \bmad\b
00:35:09 <HackEgo> 2007-11-21.txt:18:28:58: <Slereah-> "The barbarian messenger spoke: "You profane! You are all mad!" Replied Leonidas: "We are mad? WE ARE SPARTA.""
00:35:39 <itidus20> `log doing
00:35:42 <HackEgo> 2006-10-21.txt:01:11:47: <pikhq> jix: And why do you need an infinite loop that's doing no calculation?
00:35:48 <elliott> `log \bmad\b
00:35:52 <HackEgo> 2010-08-03.txt:03:49:52: <SgeoN1> My dad has been paranoid about mad cow disease
00:36:49 <itidus20> `log eiffel
00:36:52 <HackEgo> 2008-08-03.txt:19:13:23: <Deewiant> tusho: eiffel is from the USA
00:36:55 <Lymee> `log rabies
00:36:58 <HackEgo> 2010-10-24.txt:18:01:42: <elliott> Gregor: Also you have rabies.
00:37:16 <elliott> `log Lymee
00:37:19 <HackEgo> 2011-09-13.txt:03:16:33: <Lymee> That explains why every time I try to unbreak my system via sysrq nothing happens
00:37:26 <itidus20> `log \b^_^\b
00:37:30 <HackEgo> No output.
00:37:35 <elliott> `log \b\^_\^\b
00:37:39 <HackEgo> 2008-01-27.txt:21:49:49: -!- Asztal^_^_ has joined #esoteric.
00:37:44 <Lymee> `log \^___\^
00:37:47 <HackEgo> 2007-10-24.txt:02:41:29: <Fa1r> hum... sounds like useful one ^___^
00:37:56 <itidus20> `log \b\^_\^\b
00:37:59 <HackEgo> 2011-09-15.txt:00:37:39: <HackEgo> 2008-01-27.txt:21:49:49: -!- Asztal^_^_ has joined #esoteric.
00:38:06 <elliott> `log \b\^_\^\b
00:38:06 <itidus20> hahahah
00:38:06 <elliott> `log \b\^_\^\b
00:38:07 <elliott> `log \b\^_\^\b
00:38:07 <elliott> `log \b\^_\^\b
00:38:12 <HackEgo> 2009-05-29.txt:14:26:50: <Gracenotes> lereah_: O^_^O
00:38:12 <HackEgo> 2006-08-25.txt:23:57:49: <ihope> ^_^_^_^_^?
00:38:12 <HackEgo> 2008-01-27.txt:22:16:37: -!- Asztal^_^_ is now known as Asztal.
00:38:13 <HackEgo> 2011-09-15.txt:00:37:59: <HackEgo> 2011-09-15.txt:00:37:39: <HackEgo> 2008-01-27.txt:21:49:49: -!- Asztal^_^_ has joined #esoteric.
00:38:21 <Lymee> `log \^_\^
00:38:24 <HackEgo> 2006-01-16.txt:00:59:08: <GregorR-L> Figured, short lesson ^_^
00:38:28 <Lymee> `log \^\^
00:38:30 <elliott> `log \ \^_\^\
00:38:31 <HackEgo> egrep: Trailing backslash
00:38:32 <HackEgo> 2008-06-25.txt:11:46:02: <KingOfKarlsruhe> its a 10 minutes program ^^
00:38:33 <elliott> `log \ \^_\^
00:38:37 <HackEgo> 2010-02-01.txt:00:10:40: <bsmntbombdood> wouldn't like me use the quadratic formula ^_^
00:38:43 <Lymee> `log hugs
00:38:46 <HackEgo> 2009-04-30.txt:18:54:38: * oerjan hugs fungot
00:38:51 <Lymee> `log hugs
00:38:54 <HackEgo> 2007-03-29.txt:18:31:11: <oerjan> it's that in Hugs at least
00:39:19 <Gregor> ?elliott
00:39:19 <itidus20> `log hugs
00:39:19 <lambdabot> Unknown command, try @list
00:39:21 <HackEgo> elliott wrote this learn DB, and wrote or improved many of the other commands in this bot. He probably has done other things?
00:39:23 <HackEgo> 2010-10-28.txt:19:34:01: * Gregor hugs HackEgo
00:39:25 <Gregor> ...
00:39:35 <Gregor> elliott: That good idea seems to be a bad idea :P
00:39:36 <elliott> Gregor: Dude
00:39:38 <elliott> oerjan just said
00:39:42 <elliott> that ? was the lambdabot prefix :P
00:39:46 <Gregor> elliott: I've been implementin', not readin'
00:39:50 <elliott> Gregor: I propose "\w+\?"
00:39:58 <Gregor> >_O
00:39:59 <elliott> Then people asking "brainfuck?" might actually get a useful result, even :P
00:40:03 <elliott> COME ON YOU KNOW IT'S THE BEST.
00:40:09 <Gregor> So ... a postfix :P
00:40:11 <elliott> Yes
00:40:17 <itidus20> `log karma
00:40:18 <Gregor> That ... is wonderful.
00:40:18 <elliott> It's less spammy than fungot ;D
00:40:21 <HackEgo> 2009-01-13.txt:05:41:32: <bsmntbombdood> <3 job karma
00:40:26 <elliott> Gregor: ARE YOU BEING SARCASTIC
00:40:43 <elliott> poop++
00:40:45 <elliott> `karma poop
00:40:46 <HackEgo> poop has 0 karma.
00:40:54 <elliott> rip poop domed to krama
00:41:08 <itidus20> `log krama
00:41:11 <HackEgo> 2011-09-15.txt:00:41:08: <itidus20> `log krama
00:41:54 <Gregor> elliott: The only problem is that it would give output for all one-word questions, at least in the simplest mode :P
00:42:00 <elliott> Gregor: That's the POINT :P
00:42:01 <itidus20> `log gobshite
00:42:04 <elliott> brainfuck?
00:42:04 <HackEgo> 2011-09-15.txt:00:42:01: <itidus20> `log gobshite
00:42:08 <elliott> <HackEgo> Brainfuck HAS ENOUGH DERIVATIVES
00:42:13 <elliott> what?
00:42:13 <Gregor> elliott: Gobbledywtflol?
00:42:16 <elliott> <HackEgo> [something witty]
00:42:17 <Gregor> Or "what?"
00:42:23 <Lymee> `log cuddles
00:42:24 <elliott> Gregor: What?
00:42:25 <HackEgo> 2009-07-01.txt:00:53:25: * Zuu cuddles ehird ^^
00:42:28 <elliott> Gregor: You have ceased to make sense :P
00:42:51 <elliott> There is literally no way that answering to all one-word questions is the wrong decision... especially since come on they aren't THAT common.
00:42:55 <elliott> You can make an exception for "what" :P
00:42:58 <Gregor> lol
00:42:59 <monqy> ?karma poop
00:42:59 <lambdabot> poop has a karma of 1
00:43:01 <Gregor> Huh?
00:43:07 <elliott> ?
00:43:13 <Gregor> ¿Qué?
00:43:15 <elliott> ?
00:43:17 <elliott> Oh :P
00:43:21 <itidus20> `log poop
00:43:22 <Gregor> lol?
00:43:23 <elliott> Gregor: OK fine, huh and what get exceptions :P
00:43:24 <HackEgo> 2006-10-14.txt:22:29:02: <Razor-X> Of course, every other girl loves biology. I mean, who doesen't find pooping, mating, sleeping, and eating interesting?
00:43:28 <elliott> "lol?" is hardly common.
00:43:30 <Gregor> Why?
00:43:33 <elliott> OK
00:43:34 <elliott> huh
00:43:34 <elliott> what
00:43:35 <elliott> and
00:43:35 <elliott> what
00:43:36 <elliott> erm
00:43:46 <elliott> Gregor: huh, what, why, when, who, whom, where
00:43:46 <Gregor> Who?
00:43:48 <Gregor> Or is it whom?
00:43:49 <elliott> THERE
00:43:50 <Gregor> Aw damn :P
00:44:00 <elliott> THOSE EXCEPTIONS NONE OTHER
00:44:42 <monqy> my tendencies will trigger the bot a lot, but I do not care
00:45:04 <elliott> Gregor: And then just make it not say anything if the exit code is one
00:45:04 <itidus20> `log whom
00:45:08 <HackEgo> 2010-12-21.txt:20:05:08: <fizzie> "Noun, sense 1. An affectionate synonym for 'vagina'. See also gash. Noun, sense 2. Someone with whom you basically just get drunk and/or high and have sex, usually on a short term basis. Compare to "your girl" or "a ho", both are higher on the intimacy ladder." (Urban Dictionary.)
00:45:14 <elliott> Gregor: To avoid it going HUH WHAT to anything it doesn't know about. :P
00:45:23 <elliott> If you can't check exit code
00:45:24 <elliott> `? jfkljlsdfjksdf
00:45:26 <HackEgo> jfkljlsdfjksdf? ¯\(°_o)/¯
00:45:30 <elliott> just grep for the helpful i dunno lol.
00:46:47 <elliott> shachaf?
00:46:51 <elliott> (This is my implementation test.)
00:47:30 <itidus20> http://i.imgur.com/WNTDy.png
00:47:58 <elliott> Wasn't that on /r/,inecraft like a year ago :P
00:48:00 <elliott> s/,/m/
00:55:34 <itidus20> i found it in the log. fizzie was describing the word notch
00:56:10 <elliott> fizzie.
00:59:50 <shachaf> elliott: ?
00:59:51 * shachaf return
01:00:02 -!- sllide has joined.
01:00:28 <elliott> shachaf: Yes.
01:00:35 <elliott> shachaf?
01:00:39 <elliott> Gregor: I mad.
01:01:54 * shachaf isn't sure what's going on.
01:03:09 <elliott> shachaf: I mad.
01:03:25 <shachaf> u mad?
01:04:17 <Gregor> elliott: ... bro?
01:04:19 <Gregor> :P
01:04:22 <elliott> Gregor: Bro.
01:04:24 <elliott> shachaf?
01:04:26 <elliott> Gregor: Madness remains.
01:04:35 <Gregor> Yeah, I'mma not deal with that today :P
01:04:38 <Gregor> 'cuz lazy
01:04:48 <elliott> `log u mad
01:04:51 <HackEgo> 2010-12-06.txt:17:44:08: <ais523> some of those can't happen with the usage used in cat, e.g. EPIPE wouldn't happen as you use the default SIGPIPE handler, EINVAL wouldn't happen if you made sure you used valid arguments
01:04:56 <elliott> `log \bu mad
01:04:59 <HackEgo> 2010-12-27.txt:17:25:49: <Quadrescence> elliott: u mad
01:05:00 <elliott> Bu mad.
01:05:03 <elliott> Ugh.
01:05:07 <elliott> `log \bu mad
01:05:10 <HackEgo> 2011-09-15.txt:00:14:40: <shachaf> u mad kmc?
01:05:10 <elliott> This time give me a non-horrible person.
01:05:15 <elliott> No.
01:05:17 <elliott> I said non-horrible.
01:05:19 <elliott> `log \bu mad
01:05:22 <HackEgo> 2011-09-14.txt:23:31:27: <elliott> `learn shachaf heard u mad, so i put all the things in your things so u can mad while u mad?
01:05:26 <elliott> Ah.
01:05:28 <elliott> There we go.
01:05:37 <shachaf> Stop highlighting kmc's name.
01:05:41 <shachaf> He did nothing to deserve this.
01:05:42 <shachaf> Oops.
01:06:06 <elliott> Sorry kmc.
01:07:46 <itidus20> http://ko.wikipedia.org/wiki/HQ9%2B
01:08:56 <elliott> exceedingly notable
01:09:00 <elliott> david morgan-mar
01:09:01 <elliott> erm
01:09:03 <elliott> davia morgan-mar
01:10:14 <itidus20> http://ru.wikipedia.org/wiki/Feckfeck
01:10:36 <elliott> `log arse
01:10:39 <HackEgo> 2010-03-07.txt:11:42:25: <AnMaster> olsner, the use case is async threaded funge. And specifically it's funge space. Assuming we have (part of it) implemented as a static non-sparse array, and the rest of it as a tree structure or hash table, then it should be possible I think to only require locking for the the non-static part
01:11:09 <itidus20> feckfeck is notable in russia
01:12:27 <itidus20> and in discussion "Why do I write this article, if it did not understand? Wikipedia - the free encyclopedia, not a handbook for kulturschiny. Either be normal people, and make a story that she was for all, or be assholes, and mess up or delete the article."
01:14:05 <elliott> `log
01:14:06 <HackEgo> 2004-06-24.txt:06:22:05: -!- deltab has quit (sterling.freenode.net irc.freenode.net).
01:14:11 <elliott> `log
01:14:13 <HackEgo> 2007-02-04.txt:14:05:02: -!- ihope_ has joined #esoteric.
01:14:22 <elliott> `log
01:14:23 <HackEgo> 2007-07-15.txt:02:32:03: <Figs> or linguine!
01:14:57 <elliott> `log
01:14:59 <HackEgo> 2010-11-21.txt:20:34:24: <elliott> Phantom_Hoover: so?
01:15:16 <elliott> `log
01:15:17 <HackEgo> 2009-04-12.txt:00:33:15: <psygnisfive> WHAT IS LOVE
01:15:27 <elliott> tru
01:16:21 <monqy> `quote
01:16:22 <HackEgo> 612) <Gregor> ANOTHER THUNDERSTORM, INDIANA? <Gregor> That's three today. <elliott> Gregor: It FEELS like it should be a really simple fix :P
01:18:51 <elliott> `log
01:18:52 <HackEgo> 2010-08-06.txt:17:45:55: <alise> cpressey: In that it doesn't do deep sequencing?
01:20:08 <elliott> `log Obey Newton's laws or face elongation
01:20:11 <HackEgo> 2007-08-12.txt:00:05:15: <sp3tt> Obey Newton's laws or face elongation!
01:22:19 <Gregor> Ooh yeah, sequence me deep.
01:32:29 <elliott> `log
01:32:31 <HackEgo> 2009-09-09.txt:23:08:43: <Rugxulo> ah, out of memory
01:32:33 <elliott> `log
01:32:35 <HackEgo> 2007-03-08.txt:19:32:27: -!- ShadowHntr has joined #esoteric.
01:32:37 -!- sllide has quit (Read error: Connection reset by peer).
01:32:43 <elliott> ?Gregor
01:32:43 <lambdabot> Unknown command, try @list
01:32:49 <elliott> Gregor: You removed it D:
01:34:10 <Gregor> 'course I did :P
01:34:28 <elliott> `rm bin/.bashrc
01:34:30 <HackEgo> No output.
01:34:41 <elliott> `wl en poop
01:34:44 <HackEgo> Traceback (most recent call last): \ File "/hackenv/bin/wl", line 52, in <module> \ q = query(continue_id) \ File "/hackenv/bin/wl", line 44, in query \ response = urllib2.urlopen(url).read() \ File "/opt/python27/lib/python2.7/urllib2.py", line 126, in urlopen \ return _opener.open(url, data,
01:34:49 <Gregor> lol
01:34:51 <elliott> Gregor what did you do
01:35:07 <elliott> `wl io Herono
01:35:10 <HackEgo> Traceback (most recent call last): \ File "/hackenv/bin/wl", line 52, in <module> \ q = query(continue_id) \ File "/hackenv/bin/wl", line 44, in query \ response = urllib2.urlopen(url).read() \ File "/opt/python27/lib/python2.7/urllib2.py", line 126, in urlopen \ return _opener.open(url, data,
01:35:17 <elliott> Gregor.....fix it....
01:35:26 <Gregor> elliott: Waaaaaaaaah
01:35:52 <elliott> it...worked....before...
01:35:53 <elliott> you...
01:35:54 <elliott> BROKE
01:35:54 <elliott> IT
01:35:57 <elliott> .:((((((((((((((99
01:39:09 -!- zzo38 has joined.
01:39:28 <elliott> Tart is designed to be easy to learn, but its also designed to be “expert-friendly”. Like a musical instrument, Tart enables a true master to create “virtuoso performances” of excellence and creative power.
01:39:33 <elliott> ahahahahahah
01:40:06 <Gregor> elliott: ?
01:40:32 <elliott> Gregor: ?
01:40:44 <Gregor> elliott: ‽
01:40:51 <elliott> Gregor: ‽
01:41:10 <monqy> whats tart is it a progragmeing langauge
01:41:14 <monqy> is it baAaad
01:41:42 <Gregor> monqy put that much better than I could have.
01:41:45 <elliott> im comment only on that paragraph
01:41:49 <elliott> but http://code.google.com/p/tart/
01:42:19 <monqy> it was a good paragraph
01:42:21 <elliott> zzo38: Can you write a one-line biography of yourself?
01:43:17 <Gregor> zzo38: And furthermore can you assure that that one-line biography begins with "zzo38 ", then prefix "`learn " to it and write that to the channel? :P
01:43:54 <zzo38> elliot, Gregor: I don't know. I don't think so, though.
01:44:12 <elliott> If you don't write one, you'll get an even worse one than you'd write, written by me.
01:44:18 <elliott> And that would be awful.
01:45:10 <Gregor> `learn augur took forty cakes. He took 40 cakes. That's as many as four tens. And that's terrible.
01:45:12 <HackEgo> I knew that.
01:45:56 <elliott> `forget augur
01:45:58 <HackEgo> Forget what?
01:46:02 <elliott> Gregor you are so irresponsible.
01:46:11 <Gregor> :(
01:47:02 <elliott> So
01:47:03 <elliott> Irresponsible
01:47:08 <Gregor> :'(
01:47:28 <augur> Gregor: :|
01:47:34 <augur> i took no cakes
01:48:17 <Gregor> LIES
01:48:56 <elliott> `learn augur took no cakes.
01:48:57 <HackEgo> I knew that.
01:49:06 <augur> lol
01:49:13 <augur> hows `learn work
01:49:16 <augur> what does `learn do
01:49:23 <monqy> `? augur
01:49:24 <HackEgo> augur took no cakes.
01:49:38 <monqy> `? elliott
01:49:39 <HackEgo> elliott wrote this learn DB, and wrote or improved many of the other commands in this bot. He probably has done other things?
01:49:44 * Sgeo__ is bored and wants to use VirtualBox for something fun
01:49:46 <monqy> oh right that entry
01:49:48 <monqy> `? sgeo
01:49:50 <HackEgo> sgeo? ¯\(°_o)/¯
01:49:57 <monqy> `? itidus20
01:49:58 <HackEgo> itidus20? ¯\(°_o)/¯
01:50:12 <Sgeo__> `learn add Sgeo hi
01:50:14 <HackEgo> I knew that.
01:50:17 <Sgeo__> ..?
01:50:21 <monqy> `? Sgeo
01:50:22 <HackEgo> Sgeo? ¯\(°_o)/¯
01:50:23 <Lymee> `? HackEgo
01:50:24 <Sgeo__> `? add
01:50:25 <HackEgo> HackEgo, also known as HackBot, is a bot that runs arbitrary commands on Unix. See `help for info on using it. You should totally try to hax0r it! Make sure you imagine it's running as root with no sandboxing.
01:50:26 <HackEgo> add Sgeo hi
01:50:45 <monqy> lets just leave that there
01:51:42 <elliott> Sgeo__: What on earth made you think that was the syntax
01:51:52 <elliott> `karma- Sgeo
01:51:54 <HackEgo> Sgeo has 0 karma.
01:51:57 <elliott> GAH
01:51:58 <elliott> `karma- Sgeo
01:52:00 <HackEgo> Sgeo has 0 karma.
01:52:01 <Sgeo__> Having vague recollections of Rodney
01:52:02 <elliott> I must fix that :P
01:52:12 <elliott> `cat bin/karma-
01:52:13 <HackEgo> ​#!/bin/sh \ lib/adjustkarma "$1" -1 \
01:52:22 <elliott> `cat lib/adjustkarma
01:52:24 <HackEgo> ​#!/bin/sh \ thing=$(echo "$1" | tr A-Z a-z) \ newkarma=$(($(cat "karma/$thing" 2>/dev/null) $2)) \ if [ $newkarma -eq 0 ]; then \ rm "karma/$thing" 2>/dev/null \ else \ echo $newkarma >"karma/$thing" \ fi \ karma "$1" \
01:52:28 <elliott> Hey Gregor, fix it
01:52:40 <itidus20> `learn will demonstrate to sgeo the syntax.
01:52:42 <HackEgo> I knew that.
01:52:42 <elliott> `run echo $(($(cat /dev/null) -1))
01:52:43 <HackEgo> ​-1
01:52:45 <itidus20> `? will
01:52:46 <HackEgo> will demonstrate to sgeo the syntax.
01:52:49 <elliott> `forget will
01:52:51 <HackEgo> Forget what?
01:53:06 <elliott> Oh hmm
01:53:06 <Sgeo__> itidus20, it wasn't exactly hard to figure out after `? add
01:53:16 <elliott> `run [ -1 -eq 0 ]; echo $?
01:53:18 <HackEgo> 1
01:53:23 <elliott> Hmm
01:53:27 <elliott> `cat karma/Sgeo
01:53:28 <HackEgo> cat: karma/Sgeo: No such file or directory
01:53:29 <elliott> `cat karma/sgeo
01:53:30 <HackEgo> ​-2
01:53:33 <itidus20> `learn easy is figuring out the syntax of the learn command.
01:53:34 <elliott> `karma+ sgeo
01:53:34 <HackEgo> I knew that.
01:53:35 <elliott> shrug
01:53:36 <HackEgo> sgeo has -1 karma.
01:53:43 <elliott> `forget easy
01:53:45 <HackEgo> Forget what?
01:53:53 <elliott> `ls karma
01:53:54 -!- augur has quit (Remote host closed the connection).
01:53:54 <HackEgo> sgeo
01:53:59 <elliott> `ls wisdom
01:54:01 <HackEgo> add \ augur \ c \ elliott \ everyone \ finland \ friendship \ gregor \ hackego \ haskell \ intercal \ monad \ monads \ monqy \ oerjan \ qdb \ qdbformat \ shachaf \ u \ vorpal \ welcome \ wiki
01:54:06 <monqy> `run echo what > karma/monqy
01:54:07 <HackEgo> No output.
01:54:09 <monqy> `karma monqy
01:54:10 <HackEgo> monqy has what karma.
01:54:15 <elliott> `rm karma/monqy
01:54:16 <HackEgo> No output.
01:54:44 <itidus20> `? everyone
01:54:45 <HackEgo> Everyone in here is mad.
01:54:48 <Sgeo__> `run echo stolen elliotts karma >> karma/sgeo
01:54:49 <HackEgo> No output.
01:54:55 <Sgeo__> `karma sgeo
01:54:56 <HackEgo> sgeo has -1 \ stolen elliotts karma karma.
01:55:10 <Sgeo__> derp
01:55:15 <itidus20> `forget everyone
01:55:16 <HackEgo> Forget what?
01:55:37 <shachaf> `cat wisom/shachaf
01:55:38 <HackEgo> cat: wisom/shachaf: No such file or directory
01:55:43 <Gregor> Wow
01:55:44 <Sgeo__> wisom
01:55:53 <elliott> `rm karma/sgeo
01:55:55 <HackEgo> No output.
01:56:00 <elliott> `karma- sgeo
01:56:01 <Sgeo__> Woo! 0 karma again!
01:56:01 <elliott> Gregor: Wow what
01:56:01 <HackEgo> sgeo has -1 karma.
01:56:02 <Sgeo__> Damgit
01:56:12 <elliott> `learn Everyone in here is mad.
01:56:13 <HackEgo> I knew that.
01:57:02 <itidus20> `learn ievan is basically http://www.youtube.com/watch?v=4om1rQKPijI
01:57:04 <HackEgo> I knew that.
01:57:20 <elliott> Can we mark all entries itidus20 adds somehow?
01:57:29 <itidus20> sorry
01:57:37 <itidus20> i can just not add entries
01:57:42 <itidus20> i can do that
01:57:54 <itidus20> i have the self control
01:58:09 <Sgeo__> itidus20, thank you for that video
01:58:20 <elliott> Sgeo__: what
01:58:23 <elliott> itidus20: no they are good entries
01:58:26 <elliott> they just need marking or something
01:58:52 <itidus20> they're not meant to be good really
01:58:52 * Sgeo__ wonders where that old video went
01:59:50 <itidus20> `log itidus `learn
01:59:53 <HackEgo> 2011-09-15.txt:01:59:50: <itidus20> `log itidus `learn
02:00:07 <itidus20> ok.. closer..
02:00:20 <itidus20> `log <itidus20> `learn
02:00:23 <HackEgo> 2011-09-15.txt:01:52:40: <itidus20> `learn will demonstrate to sgeo the syntax.
02:00:29 <itidus20> `log <itidus20> `learn
02:00:32 <HackEgo> 2011-09-15.txt:01:57:02: <itidus20> `learn ievan is basically http://www.youtube.com/watch?v=4om1rQKPijI
02:00:34 <itidus20> `log <itidus20> `learn
02:00:37 <HackEgo> 2011-09-15.txt:02:00:29: <itidus20> `log <itidus20> `learn
02:00:39 <itidus20> `log <itidus20> `learn
02:00:40 -!- Jafet has quit (Quit: Leaving.).
02:00:42 <HackEgo> 2011-09-15.txt:02:00:39: <itidus20> `log <itidus20> `learn
02:00:44 <itidus20> `log <itidus20> `learn
02:00:48 <HackEgo> 2011-09-14.txt:23:01:30: <itidus20> `learn Esoteric is an abbreviation for Esoteric Programming Languages as contrasted with Esoteric languages such as lojban and klingon and contrasted with the occult, however those topics may well be compatible with each other .. according to itidus20
02:00:59 <itidus20> `log <itidus20> `learn
02:01:02 <HackEgo> 2011-09-15.txt:02:00:44: <itidus20> `log <itidus20> `learn
02:01:05 <itidus20> `log <itidus20> `learn
02:01:08 <HackEgo> 2011-09-15.txt:02:00:39: <itidus20> `log <itidus20> `learn
02:01:24 <itidus20> `pastelogs <itidus20> `learn
02:01:28 <HackEgo> http://codu.org/projects/hackbot/fshg/index.cgi/raw-file/tip/paste/paste.8173
02:01:54 <itidus20> but 'everyone' was someone elses words
02:02:56 <itidus20> i forgot esoteric because of:
02:03:02 <itidus20> `pastelogs esperanto
02:03:06 <HackEgo> http://codu.org/projects/hackbot/fshg/index.cgi/raw-file/tip/paste/paste.19927
02:05:37 <elliott> `log friend
02:05:40 <HackEgo> 2011-09-13.txt:20:28:48: <Taneb> One of my friends lives there
02:06:22 -!- Jafet has joined.
02:07:06 <itidus20> i don't know why i even made that post
02:08:35 <elliott> `run mv canary pigeon
02:08:36 <HackEgo> No output.
02:13:26 <itidus20> i wonder if foreign music is more enjoyable _because_ of not knowing what the words mean
02:15:32 <Gregor> itidus20: I can tell you that English opera is about the worst thing.
02:15:38 <Gregor> itidus20: But also that Italians like Italian opera.
02:15:38 <elliott> s/English //
02:15:46 <Gregor> Sooooooooo I think that English is just terrible.
02:15:53 <itidus20> yeah
02:16:07 <itidus20> and the language is terrible too
02:17:18 <itidus20> it's this new english that's the problem
02:17:24 <oklopol> have you heard french? now there's a language made of poop
02:17:39 <oklopol> american english is beautiful
02:18:12 <itidus20> hmm
02:19:03 <oklopol> italian is nice enough
02:19:40 <itidus20> theres definitely politics in languages
02:21:22 -!- augur has joined.
02:21:34 <itidus20> like a history told through where parts of the language have been borrowed or stolen
02:31:56 <elliott> oklopol: one line biography of you plz
02:32:41 <pikhq> <oklopol> \n
02:32:48 <Gregor> pikhq: YOU TOO
02:33:07 <elliott> no pikhq is uninteresting only oklopol needs biographising
02:33:19 <Gregor> `learn pikhq took forty cakes. He took 40 cakes. That's as many as four tens. And that's terrible.
02:33:21 <HackEgo> I knew that.
02:33:31 <pikhq> :D
02:33:41 <elliott> `forget pikhq
02:33:42 <HackEgo> Forget what?
02:33:44 * pikhq takes forty cakes.
02:33:46 <elliott> `learn Gregor took forty cakes. He took 40 cakes. That's as many as four tens. And that's terrible.
02:33:48 <HackEgo> I knew that.
02:33:56 * Sgeo__ ponders doing the Maybe monad in .NET via reflection
02:33:57 <Sgeo__> >.>
02:33:57 <Gregor> I find this 100% acceptable.
02:34:02 <pikhq> I'm taking 40 cakes. That's as many as four tens. And that's terrible.
02:34:06 <Sgeo__> Or, well, not sure if it would actually be nice and monadic
02:35:30 <Gregor> pikhq: Sorry, he erased that TRUISM from history.
02:35:52 <elliott> oklopol
02:35:52 <elliott> biographise
02:36:44 <oklopol> as if i'd write my own biography
02:37:27 <oklopol> now that would just be douchy. i'm gonna pay someone to do it for me.
02:37:31 <Gregor> `learn oklopol okokoko okloklokoko kokoko oko kook
02:37:32 <HackEgo> I knew that.
02:37:57 <oklopol> Gregor: how much do you charge?
02:38:11 <Gregor> oklopol: Sexual favors are my only accepted form of payment.
02:38:27 <oklopol> Gregor: i'll get back to you later
02:38:28 <elliott> `learn oklopol is one of the two citizens of Finland. He doesn't drive the bus.
02:38:30 <HackEgo> I knew that.
02:39:03 <Sgeo__> http://gbracha.blogspot.com/2011/01/maybe-monads-might-not-matter.html I'm starting to wonder if I should lose a bit of faith in Bracha
02:39:41 <aspect> he doesn't even mention burritos!
02:39:43 <Sgeo__> Or I should just read his replies to the criticism instead
02:40:34 <elliott> "The most important practical contribution of monads in programming is, I believe, the fact that they provide a mechanism to interface pure functional programming to the impure dysfunctional world."
02:40:35 <elliott> ahahaha
02:41:31 <Sgeo__> When criticised for that in the comments, he re-emphasizes practical
02:42:02 <elliott> if you think that makes that statement make any more sense
02:42:08 <elliott> then you're as ignorant as him
02:43:12 <elliott> wow, lot of high-profile folks in the comments telling him he's wrong there
02:43:30 <elliott> sigfpe, tony morris, someone who i assume is lennart augustsson
02:43:48 <pikhq> Funny, I always felt that monadic IO was almost tangential to the niceness of the abstraction.
02:43:56 <elliott> kmett... it's like #haskell descended at once :D
02:44:12 <elliott> oh i suspect chris smith is cdsmith
02:44:27 <oklopol> i had a dream that i showered. now i have to shower again.
02:44:30 <oklopol> fuck
02:44:51 <elliott> Carl said...
02:44:51 <elliott> Some researchers put forth the thesis that monads could help with concurrency. At this point, it looks like their thesis has failed.
02:44:51 <elliott> The Actor model (e.g. see ActorScript(TM) extension of C sharp (TM), Java(TM), and Objective C(TM)) is a better foundation for concurrency than monads.
02:44:52 <elliott> (TM)
02:44:55 <elliott> (TM) (TM) (TM)
02:45:31 <pikhq> What the what?
02:45:47 <Gregor> ™™™™™™™
02:45:48 <elliott> (TM)
02:45:49 <elliott> (TM) (TM) (TM)
02:45:49 <pikhq> I'm pretty sure actors are monadic.
02:46:01 <oklopol> but that is irrelevant, they say
02:46:19 <Gregor> Actors™ are Mo®onic.
02:46:30 <Sgeo__> This is the first I'm learning of an actor-monad connection
02:46:32 <Sgeo__> I don't get it
02:46:51 <aspect> it starts like this: Actors like burritos ...
02:47:06 <elliott> Actors honestly have to be the stupidest idea in computing yet.
02:47:08 <elliott> Stupider than objects.
02:47:24 <elliott> It takes something special to reinvent functions and claim they solve concurrency.
02:47:40 <aspect> no, that's Agents
02:47:44 -!- copumpkin has quit (Quit: Computer has gone to sleep.).
02:48:17 <elliott> aspect: Well, OK, CS.
02:49:18 <aspect> ok I'll give you that
02:49:35 <aspect> "the stupidest idea in CS" is a pretty high accolade though
02:50:04 <aspect> it's not as though the field has experienced a shortage of stupid ideas for the past 30 years
02:51:41 -!- DH____ has quit (Read error: Connection reset by peer).
02:52:18 <elliott> aspect: Well, OK, stupidest idea that more than a hundred people have taken really seriously. :p
02:52:35 <elliott> Can I not even make bold statements on IRC without being challenged any more?!?!?!
02:52:48 <Gregor> See: STM
02:53:21 <elliott> Gregor: What's that meant to mean :P
02:53:37 <elliott> STM is a reinvention of functions?
02:54:00 <Gregor> No
02:54:10 <Gregor> STM is also way up there for worst possible ideas :P
02:54:21 <elliott> Whyso
02:54:36 -!- Jafet has quit (Quit: Leaving.).
02:54:42 <elliott> Obviously it doesn't work very well in languages with mutability and the like, but in functional languages it works pretty great for shared-state concurrency
02:55:18 <elliott> Certainly it seems to work fine for most people in Haskell
02:57:46 <elliott> Gregor: I see :P
02:58:13 * Gregor reappears.
02:58:35 <itidus20> ok i see what i need to research next]
02:58:49 <Gregor> So, it only works in places that get around the fact that it's hilariously, untenably slow by not using it much :P
02:59:16 <itidus20> Historically, some mathematicians can be regarded as having foreseen and come close to a modern formulation of the concept of function. Among them is Oresme (13231382) . . . In his theory, some general ideas about independent and dependent variable quantities seem to be present.
02:59:20 <elliott> Gregor: What makes you say it slow; I know the worst-case is pretty bad, but to my knowledge GHC's implementation performs pretty great in practice
02:59:33 <elliott> And people use algorithms with terrible worst-cases all day with no problems
02:59:47 <elliott> s/it/it's/
03:00:21 <itidus20> As a mathematical term, "function" was coined by Gottfried Leibniz, .. ok so thats the etymology
03:02:35 <itidus20> i can see this is not something wikipedia will answer for me
03:04:31 <elliott> Gregor: Hokay :P
03:06:01 <itidus20> "Descartes (1596-1650) clearly stated that an equation in two variables, geometrically represented by a curve, indicates a dependence between variable quantities." good for him, the showoff
03:07:33 <elliott> Gregor's IRC client uses STM, that's why his typing is so slow.
03:07:57 <Sgeo__> How do I misread a book that badly? Failing to notice that a character was in her bedroom, and thinking she fell asleep on the bus
03:09:58 <Gregor> Why do these C students think that if they just email us the code for their homework, we'll fix it for them and send it back >_<
03:09:59 <Gregor> WHYYYY
03:10:25 <elliott> Gregor: Should I stop waiting for a reply? :p
03:10:30 <Gregor> Now then, elliott: The "best case" for STM is not accessing any shared state, in which case it's effectively free, but the overhead of accessing any state at all is huge (it has to log everything)
03:11:02 <elliott> Sure, it has to log it, that's kind of the whole point. That's very different from a demonstration that STM is slow in practice.
03:11:15 <Gregor> Oy vey.
03:11:33 <Gregor> OK, let me go drag out a giant friggin' benchmark suite and compare it to hell knows what :P
03:11:36 <elliott> Plenty of things "sound" slow but work just fine in practice.
03:12:09 <elliott> But seriously, if STM was fundamentally unworkably slow, I think all the people working on and using GHC STM over the years would have noticed :P
03:12:40 <Gregor> So, show me the Haskell benchmarks where they implemented something (non-stupidly) with locks and with STM, and STM was faster *shrugs*
03:12:53 <Gregor> (Obviously you could serialize everything and go "Look! STM is faster!")
03:13:06 <elliott> Dunno of any; if I were the snarky type, I would say that everyone was too busy using them to bother :P
03:13:13 <elliott> Gregor: But no, I never claimed STM was faster than locking.
03:13:19 <itidus20> so it seems to me a nand gate could be implemented by defining 1 as a closed valve, and 0 as an open valve
03:13:44 <itidus20> err wait no that doesn't
03:13:52 <itidus20> d'oh
03:14:06 <Gregor> elliott: In every benchmark in languages that you have invalidated for having too much shared state anyway (a valid concern), the overhead has been lolhuge.
03:14:08 <itidus20> actually yeah
03:14:28 <elliott> Gregor: I don't consider locking concurrency to even be an option, it's just not a viable way to program. Certainly a locking program will generally be faster in general, but it's about balancing "humans can actually use this shit" and "it performs well".
03:14:48 <elliott> Gregor: And yeah, that's the exact reason I discounted languages with traditional state models :P
03:15:53 <elliott> I haven't used STM myself so certainly I'm not gonna claim to be any kind of expert.
03:16:08 <Gregor> But that being said, STM for Haskell isn't fundamentally different from STM for anything else except insofar as Haskell has so little state that you'd barely touch the STM. Which is to say, you may very well be getting 500% slowdown but never know it because that 500% is in the 2% of code that actually touches state. That is, until you run it on 100 cores.
03:16:09 <elliott> But certainly lots of things on Hackage use STM and I haven't seen any whining about it.
03:16:33 <elliott> Gregor: "Haskell has so little state" -- well this is bullshit.
03:16:39 <Gregor> *shared state
03:16:55 <elliott> Yes, but the WHOLE POINT of STM is to manage shared state :P
03:17:02 <elliott> Like, if you have unnecessary shared state in another language... that's just a bug.
03:17:11 <elliott> The amount of state you need to share is independent of language.
03:17:18 <Gregor> In other languages, you have state that it doesn't know is not shared.
03:17:24 <Gregor> So it has to log it, 'cuz wtf does it know.
03:17:35 -!- copumpkin has joined.
03:17:40 <Gregor> (As a slight generalization :P )
03:18:00 <elliott> Gregor: So what you're saying is, "if your program is entirely made out of modifications to a huge gob of shared state, STM will be slower than locks".
03:18:19 <elliott> But seriously, how many programs are like that?
03:18:24 <elliott> And how many of them actually benefit from concurrency?
03:18:28 <Gregor> Why are you so fucking argh
03:18:30 <elliott> The kind of locking you'd have to do anyway would be hellish.
03:18:38 <Gregor> No, what I'm saying is, if STM considers your heap to be shared state, which it usually does, then STM will have to log all sorts of ridiculous shit.
03:19:05 <Gregor> But since it DOESN'T in Haskell, due to the nature of state being so defined there anyway, it can get away with much more cleverness.
03:19:06 <elliott> Yeah, well, that's just a criticism of implementing STM idiotically.
03:19:17 <elliott> What I was trying to say is --
03:19:24 <Gregor> HOWEVER even that cleverness won't help you when you get to enough cores that that sharing is all bunched together again.
03:19:27 <elliott> "STM is slow but maybe it doesn't show up because you don't have much shared state."
03:19:46 <elliott> is an entirely worthless comment, since it doesn't matter how slow it is to run a bajillion STM operations if you don't NEED a bajillion STM operations.
03:19:49 <Gregor> Yes, that's what I'm saying, but with the giant friggin' caveat that how much it shows up scales with the number of cores.
03:20:20 <elliott> Gregor: I kind of have my doubts that locks will scale up to a hundred cores either...
03:20:44 <elliott> Once your computation is made trivial by the amount of iron you have, by definition you're spending all your time doing busywork bookeeping.
03:20:50 <elliott> s/bookeeping/bookkeeping/
03:21:57 -!- MDude has changed nick to MSleep.
03:22:28 <Gregor> STM works under the assumption that conflicts are rare. When conflicts occur, sadness (very bad performance and serialized execution) happens. As you scale up your cores, your chance of conflicts scales up, but the amount of time to fix a conflict does not scale down.
03:22:54 <Gregor> Eventually you're at 100% conflicts, and sequentializing everything, because you have too many cores.
03:22:57 <elliott> Gregor: Locks work under the assumption that conflicts are rare. When conflicts occur, sadness happens. Blah blah blah.
03:23:03 <elliott> I mean, sure, I agree.
03:23:03 <Gregor> Wrong.
03:23:18 <Gregor> The sadness of lock contention at least scales considerably better.
03:23:51 <Gregor> Classically, when STM conflicts occur, it retries. But this causes livelock in approximately 100% of all systems ever. So instead, when conflicts occur, it explicitly sequentializes them.
03:23:51 <elliott> This is basically just the "worst case O(n), real-world n=not many" thing again :P
03:24:09 <elliott> I think GHC actually retries.
03:24:12 <elliott> Don't quote me on that.
03:24:27 <Gregor> Oh, so even better, as cores scales up, chances of livelock approaches 100% :P
03:24:49 <elliott> Pretty sure someone will have thought about that at some point in time :P
03:25:01 <Gregor> Yes, they have. That's why they sequentialize when things fail.
03:25:09 <elliott> I mean someone=GHC developers.
03:25:27 <Gregor> OK, then it sequentializes when things fail :P. Maybe not on first failure, but eventually.
03:25:46 <elliott> Well, I'm definitely not gonna claim STM scales to a hundred cores.
03:25:50 <elliott> But I don't think locks will either.
03:26:12 <elliott> I don't know what will. But I'm also gonna claim that most concurrent programs are not run on a hundred cores today, or within four years :P
03:26:20 <itidus20> "<itidus20> so it seems to me a nand gate could be implemented by defining 1 as a closed valve, and 0 as an open valve" i drew a picture http://oi51.tinypic.com/315zlp2.jpg
03:26:23 <Gregor> Welllllll, my belief is that our current status w.r.t. concurrency is "we're so fucked"
03:26:46 <Gregor> However, the speedup curve of locks should at least be monotonic.
03:26:59 <Gregor> Just ... plateauy.
03:27:01 <elliott> Gregor: Yeah, but humans can't program lock-based systems, so it's kind of irrelevant.
03:27:18 <elliott> I mean, we can sometimes make it work now, but when you actually have a hundred cores going, our chances of getting it right are approximately 0.
03:27:25 <Gregor> That's also true :)
03:27:44 <Gregor> OK, I'll revise my former statement as such:
03:27:47 <Gregor> See: concurrency
03:27:52 <Gregor> Hahaha *stabs self*
03:28:03 <elliott> I concur :P
03:29:29 <elliott> Here's a wild, unjustified prediction: RAM is getting really cheap. Soon, our computers will have so much RAM that the best concurrency strategy involves treating the computer like a mini-internet, and just having each thread keep its own copy of the state, with explicit "database server" threads handling merging of state whenever an outside entity wants to query the current relevant state.
03:29:29 <itidus20> what wirth failed to understand in his comment the other day is that things operate on multiple levels
03:29:38 <itidus20> order can operate above a level of chaos
03:30:02 <elliott> That obviously doesn't work when you have a bunch of threads reading the writes of other threads as they happen, but I don't think that's a very common situation. Also this is a wild, unjustified prediction, so I don't have to care about that.
03:30:09 <itidus20> software operates on hardware
03:30:17 <Gregor> elliott: Sooooooooooooo ... ACTORS?
03:30:20 <itidus20> stateless operates above state
03:30:34 <elliott> Gregor: Har har har :P
03:30:51 <elliott> Gregor: It's... not quite the same thing. I mean, sure, you could implement that with actors.
03:31:04 <elliott> But the point is that on some level shared state fundamentally doesn't scale.
03:31:30 <elliott> But the internet does seems to scale, and it's based on tons of systems with their own private state that synchronise it explicitly when necessary.
03:31:33 <Gregor> A level described by Amdahl :P
03:31:45 <Gregor> The Internet is not a computation.
03:31:50 <itidus20> i am of course thinking of the tcp stack
03:31:54 <Gregor> (I'm gonna regret saying that)
03:31:58 <elliott> Gregor: It's a substrate on which plenty of computations take place.
03:32:02 <elliott> So are operating systems.
03:32:04 <itidus20> Gregor: maybe it is?
03:32:11 <itidus20> :))
03:32:27 <elliott> Gregor: The basic problem with all this is that you end up with literally thousands of copies of the same basic state with only small parts changed :P
03:32:32 <itidus20> says aloud "no how can it be"
03:32:39 <elliott> And you can't make it copy-on-write, because that reintroduces ALL THE SAME LOCKING PROBLEMS that you just got rid of.
03:32:47 <elliott> (OR DOES IT???? Yeah it probably does.)
03:33:04 <Gregor> Naw, it has considerably less locking problems, but is also nasty.
03:33:08 <elliott> But hey, if you have a hundred gigs of ram, maybe it all works out.
03:33:13 <elliott> God I hope it does.
03:33:25 <elliott> Gregor: OK, here's an idea.
03:33:30 <elliott> How about we all switch to smartphones with one core.
03:33:35 <elliott> And forget threads ever existed.
03:33:39 <elliott> Let's just... pretend.
03:33:43 <Gregor> SOUNDS GOOD
03:33:47 <itidus20> what about positioning stateless programming in the computer architecture?
03:33:53 <elliott> THEN IT'S SORTED
03:33:56 <elliott> itidus20: Reduceron
03:34:01 <elliott> Reduceron reduceron reduceron reduceron
03:34:35 <itidus20> i think by the time you get to 4th generation apps like sql (?) the path is lost
03:34:43 <itidus20> but maybe it fits in somewhere
03:35:25 <itidus20> hehdiuewhudiehwui
03:35:35 <elliott> Gregor: Wow I hate you, I had gone whole days without thinking about concurrency.
03:35:38 <itidus20> what do i know.. that topic is too hard
03:36:17 <itidus20> elliott: what about minecraft being played by the elderly
03:36:21 <oklopol> so i hear these blogs are getting popular, people like writing about their lives and shit. on this thing called the internet which is like a neural network only really stupid.
03:36:25 <elliott> itidus20: wat
03:36:27 <Gregor> elliott: TEEHEE
03:36:43 <itidus20> its an attempt to distract you
03:36:58 <oklopol> i tried too
03:37:07 <elliott> ?learn oklopol "so i hear these blogs are getting popular, people like writing about their lives and shit. on this thing called the internet which is like a neural network only really stupid."
03:37:07 <lambdabot> http://www.haskell.org/learning.html
03:37:08 <oklopol> this was all too complicated for me
03:37:09 <itidus20> horny 60 year olds having cybersex in minecraft
03:37:12 <elliott> `learn oklopol "so i hear these blogs are getting popular, people like writing about their lives and shit. on this thing called the internet which is like a neural network only really stupid."
03:37:14 <HackEgo> I knew that.
03:37:19 <elliott> `? itidus20
03:37:21 <HackEgo> itidus20? ¯\(°_o)/¯
03:37:27 <elliott> `learn itidus20 is horny 60 year olds having cybersex in minecraft
03:37:29 <HackEgo> I knew that.
03:37:32 <elliott> I hope you like your new biographies
03:37:37 <itidus20> i do
03:37:48 <oklopol> i am
03:37:54 <elliott> Gregor: Say... isn't HackEgo's concurrency mechanism kinda like STM? :D
03:37:58 <itidus20> i uhh
03:38:00 <elliott> (Note: KIND OF.)
03:38:16 <itidus20> elliott: "<itidus20> so it seems to me a nand gate could be implemented by defining 1 as a closed valve, and 0 as an open valve" i drew a picture http://oi51.tinypic.com/315zlp2.jpg
03:38:28 <elliott> It logs the changes all the threads make, then cancels the vast majority of them :P
03:38:30 <itidus20> distraction #2
03:38:38 <elliott> itidus20: It is beautiful.
03:38:55 <Gregor> elliott: Nope, it's more like COW.
03:39:02 <itidus20> i can't quite see it as a complete system though
03:39:24 <elliott> Gregor: Why didn't you want to make HackEgo locking-based, again?
03:39:28 <itidus20> like i wouldn't know how to take those pieces and make a computer
03:39:45 <Gregor> elliott: Because it was never a question of concurrency, it was a question of atomicity.
03:40:03 <elliott> Gregor: Okay, now pretend I'm three years old.
03:40:24 <Gregor> elliott: I hear Barney! Barney's on the tellie! Hooray!
03:40:35 <elliott> Gregor: WHY WON'T YOU MAKE HACKEGO SEQUENTIAL
03:40:53 <Gregor> So that people can't DoS it just by
03:40:55 <Gregor> `sleep 29
03:41:11 <elliott> Gregor: `kill :P
03:41:25 <Gregor> Ew
03:41:25 <HackEgo> No output.
03:41:35 <elliott> Gregor: You mean like EgoBot used to have? :P
03:42:02 <elliott> You could hook in to open() and have it block if there's a conflict.
03:42:04 <elliott> And still run them concurrently.
03:42:09 <elliott> That's probably a pain with UMLBox though :P
03:42:16 <Gregor> That's a pain any which way.
03:42:34 <elliott> Not really with LD_PRELOAD.
03:42:53 <Gregor> I mean implementation :P
03:42:59 <Sgeo__> GIVE ME AN ESOTERIC OPERATING SYSTEM TO RUN IN VIRTUALBOX
03:43:06 <elliott> Gregor: Weeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeell
03:43:06 <Gregor> Sgeo__: ... ... ReactOS?
03:43:09 <itidus20> what is an esoteric operating system?
03:43:10 <elliott> It's not that hard, you just need some shared state :P
03:43:16 <elliott> It would be nice though.
03:43:23 <elliott> If I implement it will you add it? :P
03:44:35 <Gregor> If it's nonterrible.
03:44:42 <Gregor> But I am the sole judge of nonterrible.
03:44:45 <elliott> Sgeo__: I have vague plans for one but I am so lazy.
03:44:48 <elliott> Sgeo__: @ :P
03:44:54 <elliott> (Not the one I have plans for.)
03:45:09 <elliott> Gregor: How do you even implement the current system? Copying the whole state before running anything?
03:45:37 <Sgeo__> elliott, if it was implemented in such a way that I could download it, I would
03:45:37 <Gregor> hg clone
03:45:40 <Sgeo__> In a heartbeat
03:45:43 <itidus20> Gregor: directnet is a good idea.
03:45:49 <elliott> Sgeo__: What, @?
03:45:51 <Gregor> itidus20: It /was/ a good idea! :P
03:45:54 <elliott> Gregor: So, yes, it copies the whole state first :P
03:45:54 <Sgeo__> Yes
03:46:06 <Gregor> elliott: Yeah, I was just being specific in the means by which it does this.
03:46:31 <Gregor> elliott: I believe, by the way, that UML has a COW hostfs option, which I've considered adding support for to UMLBox.
03:46:33 <itidus20> i was in another chatroom the other day arguing that internets made entirely of wifi routers should be built
03:46:50 <elliott> Gregor: It really is a pain to do this and still keep the hg history stuff, isn't it >_>
03:46:58 <Gregor> itidus20: Add the word "rogue" and it'll become a good plan.
03:47:05 <itidus20> considered the farmer problem though
03:47:05 <Gregor> elliott: Why yeeeeeeeeeeeees!
03:47:12 <elliott> Gregor: OH WAIT
03:47:14 <itidus20> a farmer's wifi router is too remote
03:47:21 <elliott> Gregor: It's actually quite easy, because hg and git use the same terrible history-blind model.
03:47:41 <itidus20> and uh.. someone mentioned mesh-nets which i hadn't heard of before
03:47:58 <Sgeo__> As is, say, a British router from a router in, say, anywhere on the East Coast of the US
03:48:12 <Sgeo__> Which means I would no longer be a participant in this channel...
03:48:14 <Sgeo__> Oh crud
03:48:21 <elliott> Gregor: On open(): Consult the global table. If there's already this filename open in another thread, block until it's closed. Then, insert this thread into the table as having the file open. Then, /copy the file/ from that thread's FS to this one, and go on to the usual open() path.
03:48:33 <itidus20> but the problem that you can see a list of people with your wifi antenna but not communicate with them trivially is a tough one.. is it bad for privacy or good for society
03:48:34 <elliott> Sgeo__: What?
03:48:48 <Sgeo__> You lot would prefer that
03:48:54 <elliott> I have no idea what you are talking about.
03:48:55 <itidus20> im raambling aye aye
03:49:18 <Sgeo__> elliott, if I couldn't get to this channel
03:49:22 <elliott> Gregor: The only problem there is handling other FS operations like moving and unlink and the like :P
03:49:26 <elliott> But that handles open() perfectly, I think.
03:49:42 <elliott> And doesn't wait for the entire other command to finish or anything.
03:49:49 <Sgeo__> Due to separate Eurasian and American internets
03:50:21 <Gregor> elliott: If you don't wait for the other command to finish, you've gotten rid of atomicity. Which, frankly, is fine for this, but there are much simpler solutions that get rid of atomicity.
03:50:40 <elliott> The concurrency primitive you need is just... oh, it's just a box with a value in it; all you need is f(box,nevwal): block until this box is empty, insert newval into the box, and return the old value in the box.
03:50:56 <elliott> Gregor: What's a simpler solution that gets rid of atomicity?
03:51:02 <elliott> And really, it would be fine to block until the other revision changed too.
03:51:10 <elliott> It would only cause thirty-second waits in really pathological cases.
03:51:57 <Gregor> elliott: Copy-on-open.
03:52:15 <Gregor> (And don't copy while a commit is occurring)
03:52:16 * Sgeo__ opens ReactOS
03:52:18 <itidus20> elliott: as they asked ron gilbert when he was making maniac mansion... does he really need to use the word shithead? they sent him off to think about it
03:52:26 <itidus20> he came back and settled on the word tunahead
03:52:38 <Sgeo__> Text on buttons is very broken
03:52:41 * Sgeo__ boggles
03:52:47 <elliott> Gregor: That still leads to e.g. two addquotes at the same time causing an hg conflict.
03:53:03 <itidus20> now what i am thinking is you need to consider will you really enjoy hackbot more if the proposed changes are implemented?
03:53:15 <elliott> itidus20: Yes.
03:53:18 <Gregor> itidus20: elliott will :P
03:53:24 <elliott> It's really annoying having the conflicts.
03:53:33 <Gregor> elliott: Oh you're right. Both are nonatomic, but yours is atomic over individual files *shrugs*
03:53:52 <itidus20> oops hackego
03:53:55 <elliott> Gregor: But yeah OK, here's a simpler, atomic system:
03:54:22 <Lymee> `run echo *hugs elliott*
03:54:24 <HackEgo> ​*hugs elliott*
03:54:37 <elliott> Gregor: On open(): Consult the global table. If there's already this filename open in another thread, block until that thread completes, then restart this command starting from that new revision.
03:54:40 <elliott> Gregor: ...oh my god, it's STM.
03:54:46 <elliott> That was completely unintentional :P
03:54:59 <elliott> And s/already this filename open/this filename was open ever in another thread/
03:55:04 <elliott> But w/e, I understand it in my head :P
03:55:11 <Gregor> Thou shalt not STM :P
03:55:32 <elliott> Gregor: This is actually a good system though >_>
03:55:45 <elliott> Gregor: It's basically "do things sequentially whenever there's a conflict, otherwise be fully concurrent".
03:55:50 <elliott> And that actually works for HackEgo :P
03:57:07 * Sgeo__ cannot imagine anything like Active Worlds running well on ReactO
03:57:09 <Sgeo__> ReactOS
03:57:14 <elliott> Sgeo__: it's just wine: the os
03:57:26 <oklopol> how about multicore concurrency where only one processor works at a time and the others just like stretch and shit so they'll be faster when their turn comes
03:57:27 <elliott> Gregor: So how non-terrible is that eh eh eh :P
03:57:31 <elliott> oklopol: good
03:58:02 <itidus20> so my system would be good for implementing N-ary NAND gates
03:58:23 <pikhq> Sgeo__: It is quite literally WINE with a kernel.
03:58:37 <oklopol> itidus20: cool, i think that's actually an open problem
03:58:49 <itidus20> oklopol: http://oi51.tinypic.com/315zlp2.jpg
03:58:50 <Gregor> pikhq, Sgeo__: Only, with worse software support.
03:58:54 <itidus20> this is what i am talking about
03:58:57 <Sgeo__> Well, the version of WINE that the latest ReactOS is based off of has trouble displaying text
03:59:00 <elliott> Gregor: Eh eh eh eh eh eh eh eh :P
03:59:10 <elliott> I honestly will implement this given approval, I'm sick and tired of conflicts :p
03:59:32 <Sgeo__> "It is now safe to turn off your computer"
03:59:35 <oklopol> are you making a liquid computer?
03:59:49 <itidus20> oklopol: it is just an idea... i am wondering how far it could go
03:59:58 <elliott> Hmm, there's /one/ bad feature of it: If you send off two delquotes, one request will go through properly, and the other one will delete a quote off by one from the one you were trying to delete.
04:00:06 <elliott> The merge case actually handles that correctly, usually.
04:00:08 * Sgeo__ vaguely ponders whether VirtualBox Tools (I don't remember the real name) will help any
04:00:09 <elliott> But ehhhhhh nobody does that
04:00:13 <Gregor> elliott: You haven't actually seen HackEgo's code, have you :)
04:00:20 <elliott> Gregor: Try me :P
04:00:22 <pikhq> Gregor: Well, I think they had to do a manual reimplementation of e.g. user32.dll.
04:00:25 <Gregor> elliott: It's bash.
04:00:38 <elliott> Gregor: I thought it was C.
04:00:45 <Gregor> Only the IRC interface is.
04:00:47 <Gregor> It's multibot.
04:00:53 <elliott> `info
04:00:54 <HackEgo> info: Writing node (dir)Top... \ info: Done. \ File: dir.Node: Top.This is the top of the INFO tree \ This (the Directory node) gives a menu of major topics. \. Typing "q" exits, "?" lists all Info commands, "d" returns here, \ "mCoreutils<Return>" visits Coreutils topic, etc. \ Or click mouse button 2 on a
04:00:57 <elliott> ...
04:00:58 <Gregor> lol
04:01:02 <elliott> `help
04:01:03 <HackEgo> Runs arbitrary code in GNU/Linux. Type "`<command>", or "`run <command>" for full shell commands. "`fetch <URL>" downloads files. Files saved to $PWD are persistent, and $PWD/bin is in $PATH. $PWD is a mercurial repository, "`revert <rev>" can be used to revert to a revision. See http://codu.org/projects/hackbot/fshg/
04:01:12 <Gregor> Remove "fs" from there for hackbot itself.
04:01:21 <elliott> http://codu.org/projects/hackbot/hg/index.cgi/file/6a36bc81753b/multibot_cmds/PRIVMSG/tr_3F.cmd
04:01:24 <elliott> What the fuck is this shit.
04:01:25 <itidus20> oklopol: well i remembered "any gate can be built from nand" so i went to wikipedia, looked at the truth table, and envisioned the picture
04:01:39 <itidus20> but i forget why i did it to begin with
04:01:47 <Gregor> elliott: multibot is an IRC bot that just translates inputs into "run this command kthx"
04:01:59 <elliott> Yeah but what the fuck is this shit :P
04:02:03 <elliott> ?commands
04:02:03 <lambdabot> Unknown command, try @list
04:02:08 <elliott> HmmmmmmmmmmMMMMMMmmmmmmmmmmmmmmmm
04:02:13 <elliott> http://codu.org/projects/hackbot/hg/index.cgi/file/6a36bc81753b/multibot_cmds/PRIVMSG/tr_60.cmd
04:02:15 <elliott> Wow this is awful.
04:02:20 <Gregor> elliott: When it receives a line that starts with `, it tries PRIVMSG/tr_60.cmd
04:02:25 <Gregor> elliott: Because ` = hex 60
04:02:32 <elliott> Gregor: I hate that system and I hate you.
04:02:39 <Gregor> (Failing that, it also tries PRIVMSG.cmd)
04:02:53 <Gregor> elliott: It's very versatile :)
04:02:59 <elliott> Also: awful.
04:03:12 <elliott> BTW did you ever install gmp.
04:03:16 <Gregor> You misspelled awesome.
04:03:42 <Gregor> Wasn't I only asked to so that you could go on a ridiculous foolhearted quest to build GHC?
04:04:15 <elliott> Gregor: No, you installed ghc.
04:04:16 <elliott> `ghc
04:04:21 <HackEgo> ghc: no input files \ Usage: For basic information, try the `--help' option.
04:04:23 <elliott> Uh
04:04:24 <elliott> `ghci
04:04:27 <HackEgo> GHCi, version 7.2.1: http://www.haskell.org/ghc/ :? for help \ Loading package ghc-prim ... linking ... done. \ Loading package integer-gmp ... <command line>: can't load .so/.DLL for: libgmp.so (libgmp.so: cannot open shared object file: No such file or directory)
04:04:28 <elliott> Gregor: But the point is, ghc needs gmp :P
04:04:30 <elliott> And you ain't got gmp.
04:04:36 <Gregor> Oh
04:04:41 <elliott> So it's kind of useless :P
04:04:42 <Gregor> I don't recall that request :P
04:04:59 <elliott> 134 # Now commit the changes (make multiple attempts in case things fail)
04:05:00 <elliott> wjw
04:05:30 <pikhq> Gregor: So, I could actually add another escape sequence to HackEgo?
04:05:46 <Gregor> pikhq: multibot_cmds is not part of the environment it exposes to users :P
04:05:48 <elliott> Gregor: I like the part where lib/interp is terrible
04:05:52 <pikhq> elliott: So, the name is appropriate?
04:06:00 <elliott> So, ?
04:06:12 <elliott> Gregor: Sooooooooo will LD_PRELOAD work with umlbox X-D
04:06:13 <pikhq> Gregor: Okay, "Trivially if I had commit access", then.
04:06:23 <elliott> Also do you even use slox here.
04:06:42 <Gregor> elliott: It ought to.
04:06:47 <Gregor> elliott: Nope :)
04:06:54 <pikhq> Gregor: It'd be totally awesome if it were that hackable.
04:07:08 <pikhq> If also probably a bad idea to stick on an IRC channel long-term.
04:07:08 <elliott> Gregor: It ought to? But I thought UML was like... a totally separate system. :x
04:07:31 <Gregor> elliott: It ought to as in it ought to work ...
04:07:49 <Gregor> pikhq: Yes, trivially if you had commit access. I've considered making it that hackable, but decided that the ability to make it barf something to the channel after /every line/ is bad.
04:07:51 <elliott> Gregor: I'M JUST ASKING WHYYYYYY
04:08:04 <Gregor> elliott: ... UML is just a program ...
04:08:16 <elliott> Gregor: OK, let me rephrase.
04:08:23 <pikhq> Gregor: He wants it working inside the sandbox.
04:08:26 <elliott> Gregor: Can I use LD_PRELOAD to override the libc /the program running UNDER UMLBox uses/?
04:08:28 <pikhq> Not *on* the sandbox.
04:08:36 <Gregor> Oh. Sure, of course, why not?
04:08:53 <elliott> Because why would an entirely separate Linux instance use the host libc?
04:09:11 <Gregor> Because /lib is just a hostfs mount of the host's /lib.
04:09:23 <elliott> That's not the same thing as an environment variable :P
04:09:44 <Gregor> I don't see the relevance ... if you set LD_PRELOAD in the child, it will preload.
04:09:58 <pikhq> Is there a way to?
04:10:03 <elliott> OK, I conclude that I can add proper atomic mergeless transactions to HackEgo, but I'm too tired to do it today.
04:10:15 <elliott> pikhq: A way to what?
04:10:32 <Gregor> pikhq: The very file he was complaining about (lib/interp) adds environment variables to the guest :P
04:10:42 <pikhq> Gregor: Okay, then.
04:10:55 <Gregor> Also, excluding comments and blank lines, that file is 6 lines long :P
04:11:04 -!- Zuu has quit (Read error: Connection reset by peer).
04:12:46 <elliott> OK, here's the basic plan:
04:13:35 <elliott> LD_PRELOAD a library which, for every filesystem operation, checks to see if the "dirty files" table (file/whatever) contains the filename mentioned; if so, write out a note "need to restart this command" and kill the process. Otherwise, add it to the dirty files list, and continue as normal.
04:14:16 <elliott> In the bot: After all threads terminate, run all the commands that need to be restarted with the latest hg tree each time, sequentially.
04:14:22 <elliott> Then clear the dirty files list.
04:14:25 <elliott> Tadaaaaaaaaa
04:14:28 <itidus20> elliott, oklopol: here is the improved MK2 model.. actually becoming potentially useful: http://oi56.tinypic.com/kbq1di.jpg
04:14:41 <elliott> Note: Image is NSFW
04:15:16 <itidus20> it still doesn't quite make sense to me but it seems like a good idea
04:15:19 <oklopol> i don't get how that's a nand
04:15:38 <itidus20> my earlier post before you were here was worded thus
04:15:59 <itidus20> "<itidus20> so it seems to me a nand gate could be implemented by defining 1 as a closed valve, and 0 as an open valve"
04:16:01 -!- Zuu has joined.
04:16:42 <itidus20> maybe thats not how it works though.. it might be better to base this on NOR
04:16:53 <itidus20> i have certainly not thought this through and very unlikely that i ever will
04:18:22 <itidus20> yeah.. actually its best forgotten
04:20:11 <itidus20> one element missing from the diagram though is that 2 valves would flow through some kind of funnel onto one pipe-shaped thing
04:20:35 <itidus20> ugh.. time for mk3
04:25:45 <elliott> `log now consider that do-stuff might use a gc'd language
04:25:46 <HackEgo> ​/hackenv/bin/log: line 1: hr.1: command not found \ /hackenv/bin/log: command substitution: line 6: syntax error near unexpected token `.^.P./KD.J{.' \ /hackenv/bin/log: command substitution: line 6: `.v e.f0+HGm{g1;xz7j(.^.P./KD.J{.(r..N(&؈0y}|y.u#T..
04:25:55 <elliott> Gregor: ...
04:26:17 <Gregor> That's pretty good.
04:26:26 <elliott> .................
04:26:56 <elliott> ..........???????????????????????
04:27:03 <elliott> Gregor: ????????????/
04:27:12 <Gregor> I honestly have no answer for you at all :P
04:27:15 <Gregor> `log that was wtfy
04:27:17 <HackEgo> ​/hackenv/bin/log: line 1: hr.1: command not found \ /hackenv/bin/log: command substitution: line 6: syntax error near unexpected token `.^.P./KD.J{.' \ /hackenv/bin/log: command substitution: line 6: `.v e.f0+HGm{g1;xz7j(.^.P./KD.J{.(r..N(&؈0y}|y.u#T..
04:27:20 <Gregor> Hmm
04:27:25 <elliott> `cat bin/log
04:27:27 <HackEgo> ​hr.1 \ "R ;WER{n{̍p.s@#.g.\ws.#e-:..m._'m.b.&.A.Y'3U..Dh7R1..`.v e.f0+HGm{g
04:27:29 <Gregor> Hm
04:27:32 <elliott> wow
04:27:37 <elliott> `help
04:27:37 <HackEgo> Runs arbitrary code in GNU/Linux. Type "`<command>", or "`run <command>" for full shell commands. "`fetch <URL>" downloads files. Files saved to $PWD are persistent, and $PWD/bin is in $PATH. $PWD is a mercurial repository, "`revert <rev>" can be used to revert to a revision. See http://codu.org/projects/hackbot/fshg/
04:27:46 <elliott> Sigh
04:27:47 <elliott> Lymee: Fuck off
04:27:54 <elliott> `revert 405
04:27:55 <HackEgo> Done.
04:27:56 <elliott> `log test
04:28:07 <Gregor> `shred --help
04:28:09 <HackEgo> Usage: shred [OPTIONS] FILE [...] \ Overwrite the specified FILE(s) repeatedly, in order to make it harder \ for even very expensive hardware probing to recover the data. \ \ Mandatory arguments to long options are mandatory for short options too. \ -f, --force change permissions to allow writing if necessary \ -n,
04:28:11 <aspect> itidus20: http://www.blikstein.com/paulo/projects/project_water.html
04:28:15 <HackEgo> 2010-05-29.txt:17:04:22: <Mathnerd314> !c printf("test")
04:28:18 <Gregor> ... huh.
04:28:21 <elliott> Gregor: Seriously, please remove Lymee's bot access, she has not once done a single thing to the bots that wasn't abusive
04:28:35 <elliott> And that was in /msg so god knows how long it could have been before someone noticed.
04:28:39 <elliott> It's really irritating.
04:28:51 <Gregor> Fair 'nuff
04:29:15 -!- Zuu has quit (Ping timeout: 244 seconds).
04:30:21 <Gregor> `echo hi
04:30:21 <HackEgo> Mmmmm .... no.
04:30:30 <Gregor> `echo hi
04:30:32 <HackEgo> hi
04:30:32 <Gregor> Done
04:31:05 <elliott> X-D
04:31:07 <itidus20> aspect: before i click i just had to finish off this third diagram: http://oi55.tinypic.com/1231e2b.jpg
04:31:14 <elliott> Gregor: Bug report: Ellipses have three, not four dots
04:31:57 <aspect> I still have no idea how that's a nand
04:32:05 <Gregor> elliott: Fixt.
04:32:44 <itidus20> the theory being that the weight of the water could open the valves
04:33:02 <Gregor> elliott: I'm disappointed that you're not running any commands :P
04:33:03 <elliott> Gregor: Sweeeet
04:33:09 <elliott> `log I know what this will do.
04:33:09 <HackEgo> Mmmm ......................................... no.
04:33:19 <elliott> I guessed correctly.
04:33:22 <Gregor> :P
04:33:29 <elliott> `rm bin/EVERYTHING I WROTE
04:33:31 <HackEgo> rm: cannot remove `bin/EVERYTHING I WROTE': No such file or directory
04:33:40 <elliott> Gregor: Is it just random? X-D
04:33:53 <Gregor> No, I removed you from the blocklist :P
04:34:30 <elliott> :')
04:35:25 <itidus20> aspect: thanks for the link
04:36:03 * Sgeo__ ponders using TinyCore as a desktop
04:36:15 <pikhq> `echo hi
04:36:16 <HackEgo> hi
04:36:22 <elliott> Sgeo__: But how will you run Active Worlds?
04:37:00 <pikhq> elliott: Obviously he'll get a circa '96 Windows machine and a dialup line.
04:44:40 <itidus20> ok final version after spamming the room with it... behold my NAND gate http://oi55.tinypic.com/23sg2ki.jpg
04:46:04 <elliott> !bf_txtgen oklopol
04:46:08 <EgoBot> ​57 ++++++++++[>+++++++++++>+>><<<<-]>+.----.+.+++.+.-.---.>. [319]
04:46:16 <elliott> oerjan got it waaaaaaaaaaaaaaaaaaay lower
04:46:17 <elliott> 10:03:57: <oerjan> ^bf --[>-<-------]>+.----.+.+++.+.-.---.
04:47:19 <itidus20> what a useless thing i have depicted..
04:50:25 <pikhq> Looks like oerjan just massaged the loop a little bit.
04:50:50 <monqy> itidus20: how is that nand
04:51:15 <itidus20> monqy: well.. a stream of water represents a '0'
04:51:34 <monqy> oh
04:51:44 <itidus20> the stream of water hits the cup and opens the valve..
04:51:50 <pikhq> Or just did stringout "oklopol" in PEBBLE.
04:51:53 <itidus20> and thus creates another stream
04:51:58 <aspect> where does the water go?
04:52:19 <itidus20> i think there are certain aspects i am overlooking in this design
04:52:31 <itidus20> the water just leaks onto the floor
04:52:32 <pikhq> source ^stdcons.bfm;@ a;@ b;stringout "oklopol" : b a ;# gets that output.
04:52:34 <monqy> it still doesn't look quite like nand to me
04:52:43 <monqy> maybe im confused but
04:52:52 <aspect> it looks more like and to me
04:53:00 <itidus20> maybe
04:53:07 <itidus20> >.<
04:53:22 <itidus20> but well ..
04:54:03 <aspect> or perhaps nor
04:54:04 <itidus20> ignoring 0 and 1 it can be described this way
04:54:25 <monqy> can it?
04:54:26 <aspect> oh cool a logic gate that can be described without reference to 0 or 1
04:54:30 <monqy> what does ignoring 0 and 1 mean
04:54:35 * aspect gets some popcorn
04:54:45 <itidus20> if A recieves water, the gate outputs water. if B recieves water, the gate outputs water. if A and B recieve water, the gate outputs water. if neither A nor B recieve water then the gate does not output water.
04:55:00 <itidus20> ^that is the idea
04:55:07 <monqy> that's the same as 0 and 1
04:55:09 <monqy> with different names
04:55:29 <aspect> you need tiny perforations in the bottom of the tobacco-pipe-shaped-things
04:55:35 <aspect> so the gates don't latch
04:55:36 <Sgeo__> Would there be anything too wrong with using TinyCore as a preferred distro?
04:55:54 <Sgeo__> Why did I hate Puppy Linux, I forget
04:56:30 <elliott> It would be immoral.
04:56:37 <elliott> And you'd be contributing to global poverty.
04:56:39 <monqy> itidus20: anyway, with your device: 0, 0 -> 0; 0, 1 -> 0; 1, 0 -> 0; 1, 1 -> 1. looks like and to me
04:56:39 <elliott> But apart from that, no.
04:56:53 <itidus20> ok
04:57:22 <itidus20> well.. its food for thought at least
04:57:27 <monqy> itidus20: given 21:51:50 < itidus20> monqy: well.. a stream of water represents a '0'
04:57:49 <itidus20> monqy: i gave up on knowing what represents what :D
04:57:59 <Patashu> I thought a stream of water was a 1
04:58:06 <itidus20> i guess it has to be
04:58:31 <monqy> still not anything really powerful
04:58:37 <itidus20> darn
04:58:56 <itidus20> it has to be 1 cos if there was a device at the end where the water turned on a switch
04:59:09 <monqy> you'll also have to deal with gravity porblems if you want to make interesting things
04:59:14 <Patashu> you could always have a device somewhere that emits water while not being given water
04:59:30 <itidus20> like it might have one of those cups complete a circuit for a lightbulb
05:00:09 <elliott> Patashu: i think africa would like one of those
05:00:18 <Patashu> XD
05:00:55 <itidus20> well it is very absurd thing i have drawn.
05:01:07 <Lymee> Dwarven physics is more practical.
05:03:20 <itidus20> Lymee: *nods*
05:05:02 <elliott> hi hi hi hi hi ih hiihi hi ih ihih
05:14:27 <Gregor> Man, when did I become such a GC fanatic.
05:15:09 <Gregor> More to the point: Why are there languages that aren't GC'd, and also aren't at the same level as C?
05:15:22 <Gregor> Ohwait, there aren't :P
05:16:41 <itidus20> back
05:17:21 <itidus20> Patashu: one benefit is i can use salt water (except machine will degrade one way or another
05:18:00 <pikhq> Gregor: Python isn't GC'd
05:19:27 <elliott> Gregor: http://codu.org/ugly.html this is beautiful
05:20:07 <elliott> Also, lol@anyone who thinks manual memory management is a good idea in any circumstance ever
05:20:14 <elliott> (Except maybe writing a memory manager :P)
05:20:16 <elliott> (Or embedded systems)
05:20:27 <pikhq> elliott: It's a wonderful idea in certain contexts.
05:20:52 <pikhq> Those contexts are either comically old or implementation details.
05:22:45 <Gregor> pikhq: Actually it is now, it has a GC as a backup for its wow-whotf-thinks-refcounting-is-good.
05:23:08 <Patashu> python has had a gc for ages I thought
05:23:11 <elliott> Gregor: Seriously? X-D
05:23:18 <Gregor> elliott: Really an truly.
05:23:33 <elliott> Refcounting is utterly great, it combines all the slowness of manual memory management with all the accuracy of manual memory management.
05:23:36 <Gregor> Patashu: "now" doesn't mean "recently" :P
05:23:50 <pikhq> Patashu: As a cyclic-reference breaker.
05:23:51 <elliott> Gregor: It's been your wallpaper for three years, how are you still alive?
05:23:54 <Gregor> elliott: Actually it's slower and less accurate.
05:24:01 <elliott> Gregor: Well, yes :P
05:24:10 <Gregor> elliott: Lots of fullscreen windows.
05:24:23 <elliott> Gregor: ugly.html or just ugly.png?
05:24:27 <elliott> Oh
05:24:28 <elliott> Wait
05:24:31 <elliott> That's tiled??
05:24:37 <elliott> It PERFECTLY shows up my TFT's imperfections.
05:24:42 <pikhq> So it combines all the slowness of manual memory management with all the accuracy of manual memory management with all the implementation burden of automatic memory management.
05:24:45 <elliott> It's a gradient-ish thing here.
05:25:24 <Gregor> elliott: lul
05:25:31 <elliott> Gregor: http://wellnowwhat.net/trippy.html Make this your background
05:25:46 <Gregor> elliott: That wonderful combination was a non-match given by my color matcher, btw :P
05:26:01 <elliott> I know, I'm reading the log :P
05:26:09 <elliott> God trippy.html is hot.
05:26:18 <Gregor> elliott: Also a good wallpaper: http://codu.org/spinners.png
05:26:25 <elliott> Heh
05:26:37 <elliott> Nobody ever made my perfect wallpaper :(
05:27:29 <pikhq> Gray?
05:27:58 <Gregor> *Grey
05:28:15 <pikhq> Both are correct.
05:28:26 <Gregor> Mine is better.
05:28:47 <elliott> No my perfect
05:28:48 <elliott> wallpaper is
05:28:48 <Gregor> 9/10 dentists agree that "grey" is the superior spelling for their patients who chew gum.
05:28:55 <elliott> Imagine an infinite plane of lines.
05:28:56 <elliott> Specfiically
05:29:00 <elliott> Black background
05:29:02 <elliott> Zebra-style
05:29:07 <elliott> Black/white/black/white lines vertically
05:29:09 <elliott> Tiling the whole plane
05:29:13 <elliott> Now imagine rotating this place
05:29:14 <elliott> erm
05:29:15 <elliott> Now imagine rotating this plane
05:29:28 <elliott> Now imagine taking a screen-sized section of that rotating, animated plane
05:29:32 <elliott> And making it your desktop background.
05:29:34 <elliott> Discuss.
05:30:08 <itidus20> would make me dizzy i think
05:30:27 <Sgeo__> Eh?
05:30:32 <Sgeo__> How is reference counting slow?
05:30:35 <Sgeo__> I get the inaccurate part
05:31:24 <elliott> Sgeo__: One,
05:31:28 <Gregor> Sgeo__: It promotes stack writes into heap writes. It also promotes local heap writes into distant heap writes. Basically, it promotes all writes into "oh and also let's fuck up my cache just for fun".
05:31:30 <elliott> Because it's basically just like malloc()/free().
05:31:31 <pikhq> Memory access is slower than you think. No, slower still.
05:31:31 <elliott> Two,
05:31:41 <elliott> Because you branch on every ref--.
05:32:14 <elliott> Also what Gregor said :P
05:32:17 <Gregor> Heh. I focused on caching, elliott focused on branching, and pikhq focused on overutilization.
05:32:25 <Gregor> I think we've covered all the important bases :P
05:32:28 <elliott> Reference counting: literally the worst possible system.
05:33:09 <Sgeo__> Can it be modified to be accurate?
05:33:11 <elliott> Here's a better system than reference counting: free() is never called. Occasionally the interpreter just exits and your service manager restarts your server.
05:33:21 <Gregor> Sgeo__: Yes. It's called a mark and sweep garbage collector.
05:33:32 <pikhq> elliott: Win.
05:33:38 <elliott> Sgeo__: It's possible to do cyclic reference counting I think, but it's even slower.
05:33:45 <elliott> And a GC is better in every way.
05:33:58 <pikhq> Heck, manual memory management is better in most every way.
05:34:03 <Gregor> elliott: Every claim to that effect I've seen have been "delayed reference counting", which is a pseudonym for mark and sweep.
05:34:20 <pikhq> Gregor: Delayed reference counting? Lawl.
05:34:24 <elliott> Gregor: Heh
05:34:37 <elliott> Gregor: You could replace the reference integer with a list of referencing objects.
05:34:37 <Gregor> Yes. I have seen those words.
05:34:40 <Sgeo__> Is mark and sweep decent?
05:34:42 <elliott> And keep a "seen" list or...
05:34:50 <elliott> Gregor: What I'm saying is, you COULD do it without mark and sweep :P
05:34:57 <elliott> In the same way that eightebed disproved your claim.
05:35:01 <pikhq> Sgeo__: Not state of the art, but it definitely works.
05:35:05 <elliott> Sgeo__: It's pretty okay
05:35:24 <Sgeo__> Do I have a chance in hell of successfully implementing it myself?
05:35:25 <Gregor> elliott: ARGH. That. ARGH. We never defined "GC" precisely enough, it was all of a GC except for actual reclamation :P
05:35:39 <pikhq> Yes, actually. Though you'll probably want to read up on memory management.
05:35:40 <monqy> what is sgeo doing
05:35:45 <monqy> is it a bad
05:35:45 <elliott> Sgeo__: Here's mark and sweep: Start from the current closure. Traverse every pointer you see, set its "mark" bit.
05:35:45 <monqy> thing
05:35:56 <elliott> Sgeo__: Then, go through every object in the system, and free() every object without its mark bit set.
05:36:03 <elliott> And clear the mark bit on every object with a mark bit set.
05:36:04 <pikhq> monqy: No, he's merely inquiring about generalities.
05:36:10 <Gregor> Incidentally, all modern mark-and-sweep collectors have an O(1) sweep :P
05:36:15 <Sgeo__> Well, I do have a plan in mind...
05:36:16 <monqy> 22:35:59 < Sgeo__> Do I have a chance in hell of successfully implementing it myself?
05:36:21 <Sgeo__> WRT Second Life stuff
05:36:24 <elliott> I'm pretty sure this is the Active Wo-
05:36:25 <elliott> Same thing.
05:36:27 <elliott> Same goddamn thing.
05:36:28 <monqy> hehehehehehe
05:36:32 <elliott> Sgeo__: you should port gggggc to second life
05:36:37 <elliott> Gregor: Please tell him how easy this will be
05:36:42 <Gregor> elliott: TOO MANY GEES
05:36:44 <pikhq> You'd probably have an even easier time doing a copying GC. Which are pretty silly.
05:36:53 <elliott> Gregor: OGC
05:37:12 <Sgeo__> OGC has a meaning other than that logo?
05:37:56 <elliott> Oligarchical Gregor Collector
05:38:08 <pikhq> Here's copying collection: Start from the current closure. Traverse every pointer you see, copy that object into a new heap, making sure to not copy objects multiple times.
05:38:29 <Sgeo__> https://github.com/wvanbergen/ogc
05:38:51 * Sgeo__ is a little dizzy trying to follow that readme
05:39:04 <pikhq> Oh, yeah, and you'll probably want a pointer rewrite step there, XD
05:39:22 <elliott> pikhq: It's Second-Life; he'll already need heap-relative pointers.
05:39:26 <elliott> Not like they give you C.
05:39:30 <pikhq> Ah, right.
05:39:53 <Sgeo__> I should start actually thinking this through at some point
05:39:54 <elliott> Sgeo__: Does Second Life run on Linux? I think you need adult supervision trying to implement a VM.
05:40:01 <pikhq> elliott: Yes, it does.
05:40:12 <elliott> pikhq: Then the burden falls onto me to be a responsible guardian.
05:40:22 <elliott> http://secondlife.com/_img/pix.gif
05:40:26 <elliott> Can you get married if you upgrade to Premium.
05:40:28 <elliott> Is that what Premium is.
05:40:30 <elliott> Please say yes.
05:40:35 <elliott> Oh my god this Flash advert.
05:40:47 <elliott> http://secondlife.com/_img/pix.gif
05:40:49 <elliott> styling
05:40:49 <elliott> oh
05:40:50 <elliott> its
05:40:53 <elliott> not the real url of the pix
05:40:53 <elliott> :'(
05:40:56 <monqy> :'(
05:41:01 <elliott> monqy: http://secondlife.com/destination/911-memorial
05:41:08 <pikhq> And it running on Linux even predated them open-sourcing it.
05:41:08 <monqy> oh god what
05:41:10 <elliott> 911 victims....... looking ghostly
05:41:33 <pikhq> Incidentally, Second Life is horribly written.
05:41:35 <elliott> its the least classiest marble ive ever seen
05:41:49 <monqy> they also have a world trade centre memorial. and a rainbow gardens pet memorial centre
05:41:54 <elliott> http://secondlife.com/destination/lost-lovers-dancing-club---live-events
05:41:55 <monqy> http://secondlife.com/destination/rainbow-gardens-pet-memorial-center
05:42:00 <elliott> lost lovers dancing club
05:42:11 <elliott> monqy: oh sweet jesus
05:42:13 <Gregor> A VIRTUAL memorial: Worst memorial ever?
05:42:15 <monqy> http://secondlife.com/destination/club-graffiti
05:42:22 <elliott> Gregor: http://common-flash-secondlife-com.s3.amazonaws.com//new/destinations/en/_img/fullsize/5917.jpg
05:42:23 <elliott> Best.
05:42:24 <monqy> club graffiti
05:42:49 <elliott> Second Life is like... real life, modelled by people who've READ about real life, you know, in books.
05:43:00 <pikhq> elliott++
05:43:01 <Gregor> `addquote <elliott> Second Life is like... real life, modelled by people who've READ about real life, you know, in books.
05:43:02 <HackEgo> 666) <elliott> Second Life is like... real life, modelled by people who've READ about real life, you know, in books.
05:43:06 <elliott> "Club re:noize bills itself as "a distorted eargasm for noize-minded souls" and we don't disagree."
05:43:09 <Gregor> OH GOD IT'S SATAN'S QUOTE
05:43:14 <elliott> I don't either, but only because I have no idea what that means.
05:43:28 <pikhq> I understand it could be put to somewhat more interesting use, but holy fuck most of it is boring.
05:44:14 <elliott> I'd like to note we're all hypocrites who play a game that offers all the fun of mining with none of the real-world benefits :P
05:44:25 <Gregor> X-D
05:44:32 <elliott> OK, with slightly less risk, admittedly.
05:44:33 <elliott> Slightly.
05:44:42 <Gregor> Much greater obesity risk.
05:44:54 <pikhq> elliott: My criticism comes from first-hand experience.
05:44:59 <monqy> bad person risk
05:45:08 -!- CakeProphet has joined.
05:45:08 -!- CakeProphet has quit (Changing host).
05:45:08 -!- CakeProphet has joined.
05:45:16 <monqy> speak of the devil
05:45:19 <itidus20> elliott: well it certainly suggests a new way of thinking about mining in general
05:45:22 <elliott> Step into the grid and get lost in one of the many cyberpunk places in Second Life.
05:45:29 <elliott> This homage to classic computer games and cyberpunk culture places you "on the grid." Amidst bouncing balls and other surreal experiments, explore the multi-leveled displays — be bold and fly up. Hang out here and you may spot a Torley at work in its digital habitat!
05:45:43 <itidus20> mine trees! mine dirt!
05:45:44 <Gregor> "Cyberpunk"
05:45:46 <elliott> Spirituality & Belief (26)
05:45:51 <elliott> YES THIS IS GOING TO BE THE BEST CATEGORY
05:45:56 <elliott> Suicide City
05:45:56 <elliott> What terrors await you in this rain-swept, creepy town? Explore the horrors, but bring a friend — you might not be able to make it out alive!
05:45:58 <elliott> SUICIDE
05:45:58 <elliott> CITY
05:46:00 <Gregor> Most people who have used that word need a cyberpunch in the face.
05:46:09 <elliott> Gregor: At least it's not steampunk.
05:46:14 <monqy> steampunch in the face
05:46:21 <elliott> "Technology... but with COGS!"
05:46:23 <itidus20> :-?
05:46:25 <Gregor> elliott: I suspect a steampunch in the face would hurt considerably more.
05:46:39 <itidus20> ahh steam power
05:46:44 <elliott> I have to admit, I was hoping the "Cyber" category would be something else.
05:46:47 <CakeProphet> What's wrong with cyberpunk and steampunk?
05:46:48 <Gregor> I mean, let's face it, "cyber"technology isn't much on moving parts.
05:46:52 <elliott> By hoping, I mean for purely comedic purposes.
05:47:04 <elliott> Visit Duran Duran Universe, the official Second Life presence of the popular band.
05:47:06 <elliott> I......................
05:47:13 <elliott> Duran Duran — Secret Rehearsal Rooms
05:47:13 <elliott> Practice your musical skills in one of the many secret rehearsal rooms at Duran Duran Universe.
05:47:15 <elliott> ..........................................
05:47:19 <CakeProphet> lol
05:47:23 <elliott> I am completely devoid of words.
05:47:29 <itidus20> i personally think the steampunk world looks the most fun
05:47:31 <CakeProphet> I have only laughter.
05:47:40 <pikhq> elliott: Linden doesn't much like SL sex, so they make efforts to make it hard to find.
05:47:41 <CakeProphet> everything is more fun when steam powered.
05:47:44 <itidus20> given the choice between this world, the cyberpunk one, and the steam one
05:47:46 <elliott> Mud wrestling, arm wrestling and pillow fights. Anything can happen at The Skin Dive in Duran Duran Universe.
05:47:47 <pikhq> From what I understand, this doesn't do much.
05:48:00 <elliott> how do you even have a pillow fight in sl that has to be like
05:48:03 <elliott> the most awkward thing ever
05:48:11 <monqy> more awkward than sl sex
05:48:13 <monqy> more awkward than metaplace sex
05:48:21 <pikhq> Yes, all physical actions are awkward.
05:48:21 <elliott> `? Sgeo
05:48:22 <HackEgo> Sgeo? ¯\(°_o)/¯
05:48:23 <CakeProphet> "wow this scripting sure is neat!" "yeah!"
05:48:27 <elliott> `learn Sgeo invented Metaplace sex.
05:48:27 <pikhq> Except, like, walking.
05:48:29 <HackEgo> I knew that.
05:48:29 <itidus20> i think steampunk is kinda soft-anarcho-primitivism
05:48:37 <elliott> A good biography.
05:48:48 <Gregor> itidus20: I thought we were an anarchosyndicalist commune.
05:49:01 <Sgeo__> CakeProphet, that's kind of my main draw to SL >.>
05:49:03 <itidus20> i dont even know what that means`` yet
05:49:10 <Sgeo__> Or part of it
05:49:17 <CakeProphet> itidus20: is that kind of like rocktronicelectronintendowavecore?
05:49:24 <elliott> Duran Duran - TIon Love Chapel
05:49:25 <elliott> Get hitched at the TIon Love Chapel in Duran Duran Universe.
05:49:27 <elliott> DURAN DURAN LOVE CHAPEL
05:49:30 <pikhq> CakeProphet: Best thing?
05:49:38 <elliott> "LGBT Friendly"
05:49:44 <elliott> So are the other locations in Second Life not LGBT friendly?
05:49:48 <itidus20> CakeProphet: soft- is being used in the sense of "not taken to extremes, or allowing some room for vairance and exceptions"
05:49:52 <elliott> Set in the present-day urban Southern California, Rejectz immerses you in a bad part of town where anything can happen. This grungy role-playing area is a place for gay males to meet and play.
05:49:57 <elliott> jesus christ
05:50:09 <elliott> Learn more information about LGBT civil rights worldwide at the Brokeback Gay Civil Rights Center. This area, which is accessible to age-verified adult residents, also features a club, cathedral, art gallery, memorial park and "Drama Queen Theater."
05:50:16 <elliott> brokeback gay
05:50:16 <pikhq> Welp, found the sex.
05:50:19 <CakeProphet> itidus20: oh okay so it's soft punk fusion neo-grime
05:50:26 <elliott> pikhq: where da straight sex at
05:50:31 <pikhq> Beats me.
05:50:38 <elliott> Connect with your community and meet new friends at Gay Archipelago, an international LGBT-friendly cluster of 147 sims in Second Life.
05:50:38 <pikhq> I've not cared enough.
05:50:41 <elliott> garchypelago
05:50:53 <pikhq> "So... It's like porn, but badly animated?" "Yup." "Fuck that."
05:51:06 <itidus20> CakeProphet: i like the idea of human knowledge increasing but technology being more moderate
05:51:12 <elliott> oh no
05:51:15 <elliott> theres a steampunk category
05:51:16 * Sgeo__ needs to go eat
05:51:18 <elliott> There are no destinations in this category with the maturity rating of Any.
05:51:22 <coppro> hahaha
05:51:24 <elliott> are they all steampunk sex worlds
05:51:28 <coppro> yes
05:51:30 <elliott> amazing
05:51:31 <pikhq> YES
05:51:35 <itidus20> i guess its all the same in the end
05:51:36 <pikhq> YEEESS
05:51:41 <elliott> Vampire (18)
05:51:42 <elliott> oh no
05:51:46 <elliott> There are no destinations in this category with the maturity rating of Any.
05:51:48 <CakeProphet> itidus20: oh so you're more into abstract glitch-hop fusion?
05:51:49 <myndzi> didn't LGBT get some extra letters?
05:51:57 <elliott> LITERALLY ALL OF THESE "ROLEPLAYING COMMUNITIES" ARE SEX-BASED
05:52:02 <myndzi> why don't they just say EVERYTHINGEXCEPTNORMALPEOPLE
05:52:12 <myndzi> we can shorten it to N-
05:52:12 <itidus20> im not really thinking things out
05:52:14 <myndzi> :P
05:52:27 <CakeProphet> dude there's no like, pen and paper SL worlds?
05:52:45 <pikhq> myndzi: Some variants add "allies" to the mix.
05:52:48 <elliott> What is it with those blacks and, like, hispanics. Can't we just say normal people, and freaks?
05:52:54 <pikhq> Which leaves you including everyone except jerks.
05:52:57 <elliott> And those asians too. It's too many to remember.
05:53:05 <myndzi> i'm pretty sure i remember one with like 7 letters lol
05:53:10 <itidus20> CakeProphet: there is a problem that if you change the system to give everyone what they want, they will adjust their desires again
05:53:21 <elliott> monqy: there's a haunted category
05:53:22 <elliott> looking ghostly
05:53:34 <elliott> oh my god
05:53:35 <monqy> im spouked
05:53:40 <elliott> http://common-flash-secondlife-com.s3.amazonaws.com//new/destinations/en/_img/fullsize/6664.jpg
05:53:44 <elliott> just
05:53:45 <myndzi> LOLOL
05:53:45 <elliott> http://common-flash-secondlife-com.s3.amazonaws.com//new/destinations/en/_img/fullsize/6664.jpg
05:53:47 <myndzi> quiltbag
05:53:54 <myndzi> you know it's getting bad when you have to make mnemonics
05:54:03 <CakeProphet> itidus20: yeah that's the problem with genres like alternative, where the desire is to be something that isn't mainstream. So you give everyone what they want and then they want something alternative again.
05:54:03 <elliott> http://common-flash-secondlife-com.s3.amazonaws.com//new/destinations/en/_img/fullsize/6664.jpg
05:54:05 <elliott> monqy: guy inthe middle
05:54:07 <elliott> looking ghostly
05:54:08 <elliott> (because)
05:54:09 <elliott> (he is dead)
05:54:22 <CakeProphet> itidus20: that's why house is nice because everyone just likes the same four to the floor for hours and hours.
05:54:24 <monqy> sl murder
05:54:32 <elliott> Sgeo__: can you kill in sl
05:54:38 <pikhq> CakeProphet: Or you just go so far off the beaten path you're never mainstream ever.
05:54:44 <CakeProphet> noise.
05:54:52 <CakeProphet> is never mainstream.
05:55:02 <elliott> The Corn Field is a region of mythological status where once naughty avatars were sent to think about what they had done. Read more here: http://bit.ly/kmL0EF
05:55:06 <Sgeo__> elliott, "legally", in certain places, I think. And not so allowed, there is griefing
05:55:31 <quintopia> the corn field? is that a reference to "It's A Good Life"?
05:55:37 <elliott> quintopia: apparently
05:55:45 <CakeProphet> dark ambient music such as Voice of Eye: http://www.youtube.com/watch?v=jZ_fUZDeNQo
05:55:46 <quintopia> neat
05:55:46 <elliott> http://secondlife.com/destination/cyrus-apollo-s-giant-bears
05:55:47 <elliott> augh
05:55:47 <Sgeo__> There used to be devices that could send people up billions of meters against their will
05:55:49 <CakeProphet> is great.
05:55:50 <CakeProphet> everyone should like it.
05:55:57 <elliott> monqy: click
05:55:58 <elliott> that
05:56:00 <elliott> its augh
05:56:12 <monqy> augh
05:56:15 <monqy> who did that
05:56:17 <monqy> who
05:56:18 <monqy> would do that
05:56:21 <elliott> cyrus apollo i
05:56:23 <elliott> guess
05:56:23 <monqy> (a genouse)
05:56:25 <elliott> based on
05:56:26 <elliott> url
05:56:27 <monqy> (geniouse)
05:56:31 <Sgeo__> I mostly stick to the sandboxes
05:56:55 <monqy> https://d1yjxggot69855.cloudfront.net/images/3/3c/The_Corn_Field.jpg corn field
05:56:59 <Sgeo__> Oh huh, the place with the bears is apparently near a small sandbox
05:57:32 <elliott> Romantic Spots (47)
05:57:39 <elliott> awwww ye
05:58:06 <elliott> http://common-flash-secondlife-com.s3.amazonaws.com//new/destinations/en/_img/fullsize/5452.jpg
05:58:12 <elliott> i question the anatomy depicted in this picture
05:59:09 <elliott> Sgeo__: this is really bad good god
05:59:09 <monqy> good anatomy
05:59:25 <elliott> Strange & Mysterious (37)
05:59:31 <CakeProphet> Third Life community: have fun playing Third Life with your Second Life personas!
05:59:35 <elliott> Catalan Institute of Nanotechnology
05:59:35 <elliott> Don't let the name fool you — this ain't a sterile research facility. As you explore this forest of pulsating shapes and shifting structures, the wild textures you see were supposedly derived from actual nanoparticles.
05:59:45 <elliott> im sterile
05:59:55 <Sgeo__> I mostly don't get involved with that stuff. Except one of the sandboxes I _used_ to like was a furry sandbox
05:59:57 <CakeProphet> ACTUAL NANOPARTICLES?
06:00:01 <elliott> Visit this recreation of Robert A. Heinlein's "Crooked House" by Seifert Surface. Explore the interconnected rooms of the house, which is modeled on a four-dimensional hypercube. Learn more about the story behind the house's creation at http://pdx.be/efe8.
06:00:02 <elliott> ok that's cool
06:00:07 <elliott> that is the single cool thing i have seen so far
06:00:54 <Sgeo__> I don't see how that's possible in Second Life.
06:00:58 <Sgeo__> Worlds.com sure, but SL?
06:01:00 <elliott> http://nwn.blogs.com/nwn/2006/06/_and_he_rezzed_.html
06:01:15 <elliott> http://nwn.blogs.com/wja_hamlet_thumbnail.jpg
06:01:28 <Sgeo__> YouTube video not working for me
06:01:55 <elliott> I note there's no furry category in this thing
06:01:57 <elliott> OPPRESION
06:02:01 <Sgeo__> Oh, that sort of thing
06:02:11 <monqy> fursecution
06:02:14 <Sgeo__> Saw something like it before
06:02:18 <CakeProphet> @HOOGLE furry
06:02:18 <lambdabot> Unknown command, try @list
06:02:24 <CakeProphet> @hoogle furry
06:02:24 <lambdabot> No results found
06:02:27 <CakeProphet> WHAT?
06:02:38 <elliott> where the furry furry bondage girls at
06:03:04 <monqy> zzo made something called furryscript right what is that
06:03:27 <Sgeo__> I was banned from a furry sandbox
06:03:35 <elliott> did you try and have metaplace sex
06:03:48 <Sgeo__> I dropped a cube.
06:03:51 <monqy> oh
06:04:00 <elliott> NOOOOOOOOOOOOOOOOoooooooooooooo
06:04:03 <CakeProphet> Sgeo__: accidental bestiality?
06:04:05 <monqy> is that furspeak for fuck you
06:04:06 <CakeProphet> oh.
06:04:12 <elliott> he "dropped"
06:04:13 <elliott> a "cube"
06:04:16 <elliott> if you "know"
06:04:18 <elliott> what I "mean"
06:04:30 <monqy> dropped a fat beat
06:04:36 <elliott> dropped a bat feet
06:04:43 <CakeProphet> elliott just "dropped" some "knowledge" on these "bitches"
06:04:46 <Gregor> To elucidate: That's a euphemism for expressing anything short of a desire for immediate and ongoing bestiality.
06:04:55 <Sgeo__> Well, the script in the cube may have violated TOS, as well as being a physical cube that caused some lag
06:04:59 <elliott> Important: The Google Image Search API has been officially deprecated as of May 26, 2011. It will continue to work as per our deprecation policy, but the number of requests you may make per day may be limited.
06:05:09 <Sgeo__> (It was a chat transmitter thing)
06:05:17 <elliott> Gregor: Is there a successor API, I guess you know these things
06:05:20 <elliott> I suppose I should just screen-scrape???
06:05:28 <monqy> <sgeo> i dropped a chat transmitter thing
06:05:31 <Gregor> elliott: There will almost assuredly not be.
06:05:42 <elliott> Gregor: Google sure like being a closed system, don't they
06:05:49 <Gregor> elliott: They drop APIs whenever they feel it's important enough to their business that exposing it by any non-ad-laden means is bad.
06:06:14 <elliott> Google business model: You give us all your data --> We use it to profit forever --> The end
06:06:23 <elliott> --> So much money
06:06:31 <monqy> --> so mcuch
06:06:47 <elliott> Oh well, screen-scraping is easy
06:06:56 <elliott> Stonehenge Rebuilt
06:06:56 <elliott> This reconstruction of the Neolithic site of Stonehenge attempts to explain its lithology and show how it must have appeared in ancient times. It demonstrates how rays of sun passed between the megaliths during the summer solstice.
06:07:08 <elliott> oh my god
06:07:09 <elliott> http://common-flash-secondlife-com.s3.amazonaws.com/new/destinations/en/_img/fullsize/2944.jpg
06:07:18 <monqy> megaliths reminded me of beedaweeda help
06:07:22 <elliott> http://common-flash-secondlife-com.s3.amazonaws.com/new/destinations/en/_img/fullsize/2944.jpg
06:07:30 <monqy> wirdiculous
06:07:34 <monqy> that smile god damn
06:07:45 <elliott> oh my god
06:07:54 <elliott> Looking for a sexy shape for your avatar? Adult Second Shapes features a wide variety of attractive shapes, including curvy and realistic body shapes that will get you noticed.
06:07:54 <monqy> it would be staring into my soul but instead it is staring into its snout's soul
06:07:58 <elliott> they literally sell new skins
06:08:00 <monqy> maybe it has crosseye problems
06:08:29 <elliott> AKERUKA Italian Creations offers high quality skins for men and women along with shapes created and styled with perfection to suit different types looks, cultures and ages.
06:08:29 <Sgeo__> skin != shape
06:08:31 <elliott> so fuckin' classy
06:09:10 <elliott> http://common-flash-secondlife-com.s3.amazonaws.com/new/destinations/en/_img/fullsize/4188.jpg
06:09:15 <Sgeo__> Maybe I shouldn't comment on the fact that my current avatar is mostly just a skin
06:09:18 <elliott> those faces to the right are so disturbing
06:09:56 <zzo38> monqy: Yes I did make something called FurryScript. Someone asked me to type in esolang wiki so I made a user subpage explaining it a bit
06:09:58 <elliott> its really painful how hard this is trying to emulate consumer culture
06:10:02 <Sgeo__> (+invisible hair +shape +i forgot the last necessity)
06:10:10 <elliott> the pain is intense
06:10:40 <Sgeo__> It kind of is consumer culture, I think
06:10:43 <monqy> does your avatar have clothes, sgeo
06:10:43 <Sgeo__> People pay for these things
06:10:52 <Sgeo__> monqy, no. But the skin isn't human skin
06:11:00 <zzo38> Specifically this document http://esolangs.org/wiki/User:Zzo38/FurryScript
06:11:35 <elliott> Sgeo__: are you a cube
06:11:43 <Sgeo__> N
06:11:45 <Sgeo__> no
06:11:48 <elliott> are you two cubes
06:12:04 <elliott> i see no denial
06:12:13 <Sgeo__> I'll get a pic
06:12:18 <elliott> oh no
06:12:24 <Sgeo__> No, that's not my current av
06:12:24 <monqy> the cube sgeo dropped was his naughty bits
06:12:50 <monqy> this is why he got banned
06:12:53 <Sgeo__> https://marketplace.secondlife.com/p/Editing-Appearance-HUD/219015
06:13:09 <Sgeo__> I think that's considered SFW
06:13:19 <monqy> it's gross
06:14:33 <monqy> so what is it you want to do again
06:14:35 <monqy> calculate sl gravity
06:14:49 <elliott> more like sl poop
06:14:51 <Sgeo__> That's a separate project
06:14:51 <itidus20> http://jyte.com/cl/i-have-used-at-least-10-different-programming-languages zzo38 has used at least 10
06:15:06 <elliott> itidus20: are you stalking everyone from this channel or sth :P
06:15:16 <itidus20> i actually searched for furryscript
06:15:21 <elliott> oh
06:15:29 <itidus20> so indirect stalking
06:15:35 <elliott> indiralking
06:15:44 <Sgeo__> Dear SL Marketplace: I'd appreciate it if you emailed me when I get reviews, like you used to
06:16:38 <Sgeo__> https://marketplace.secondlife.com/p/Antiposeball-5-SAVE-PRIMS-ON-FURNITURE/219014 I haven't updated this thing since 2007
06:16:40 <zzo38> itidus20: If you want FurryScript please look at article I linked to
06:17:07 <Sgeo__> "This is good if you only want avs to use ONE position for sitting. I wanted to add a variety and well..that just didnt happen with this, for some reason the instructions to use commas in between names just wasnt enough. Ah well. Not for me , but if you only need a single sit then this is very easy to use and recommended. =)P"
06:17:16 <Sgeo__> I've been intending to remove those instructions
06:17:16 <itidus20> i was trying to figure out if it was something you made or if it was something you merely documented
06:17:45 <itidus20> and just curious what this furryscript is used for. heh
06:18:06 <zzo38> itidus20: It is something I made. To see some of its use, look at external resources
06:18:07 <elliott> `? monq
06:18:08 <elliott> `? monqy
06:18:09 <HackEgo> monq? ¯\(°_o)/¯
06:18:10 <HackEgo> monqy dead :(
06:18:15 <elliott> tru
06:18:47 <zzo38> I used Haskell too since I typed on that Jyte page so I added it now
06:21:27 <itidus20> zzo38: im guessing that furryscript is too useful to be a regular topic :D
06:22:16 <itidus20> it's as if there is a one-to-one correspondancy between source code ascii text and outputted text...
06:22:17 <zzo38> itidus20: Sort of. That is one reason why it is user subpage. It does, however, have a few features which might be considered a bit strange. But, it works well for what it is trying to do, I think.
06:22:23 <itidus20> ^sickening
06:22:56 -!- Zuu has joined.
06:23:09 <itidus20> you can't just write an ascii character in source code and repeat that ascii character as program output!?! what do you think this is
06:23:14 <itidus20> some kind of joke
06:24:07 <itidus20> ahem.. sorry a bit cranky this afternoon
06:24:49 <zzo38> All script are included in here http://zzo38computer.cjb.net/furry/scripts/ If you write your own script, please tell me by writing on [[User talk:Zzo38/FurryScript]]
06:25:47 <itidus20> there is this kind of category of programming languages which doesn't really have much of a good name
06:26:17 <itidus20> that is not esoteric, not mainstream, not done in a university, possibly only a handful of users
06:26:40 <CakeProphet> post-rock indie programming languages.
06:26:55 <itidus20> punklangs?
06:26:55 <zzo38> TV PLOT is something I found in a very old book but I updated it with more choices
06:27:08 <itidus20> just kidding....!
06:27:35 <itidus20> yeah when programming language categories start to resemble music categories there is great danger
06:27:59 <itidus20> now i must lie down half awake
06:28:01 <zzo38> Or when you categorise chess variants by color
06:28:17 <CakeProphet> extreme thrash-step bebopcore metal.
06:28:48 <CakeProphet> dude...
06:28:51 <CakeProphet> so what if I made a program
06:28:55 <CakeProphet> that randomly generated genres.
06:29:26 <elliott> "Retry execution of the current memory transaction because it has seen values in TVars which mean that it should not continue (e.g. the TVars represent a shared buffer that is now empty). The implementation may block the thread until one of the TVars that it has read from has been udpated. (GHC only)"
06:29:32 <elliott> Gregor: Aww yeah, GHC STM has UDPATED
06:29:40 <elliott> I guess that's like an update... across UDP.
06:29:45 <zzo38> FurryScript can randomly generate stuff by templates; that was its original use. But it has other features too.
06:30:57 <zzo38> You can see stuff I made in Jyte by viewing the profile http://jyte.com/profile/zzo38computer.cjb.net In case it interest you; to login you simply need OpenID (there is other form to fill, but it is optional; OpenID is sufficient)
06:36:40 <zzo38> What does "The bigger the wheel, the ranger the forest." means?
06:37:07 <monqy> I've never heard it
06:37:53 <CakeProphet> itidus20: so you're more into Baroque industrial grimehouse?
06:40:58 <zzo38> Has there ever been a chess game properly notated "12. 0-0-0!!" ?
06:41:25 <CakeProphet> No but I bet someone's been like "12. !!!???!?!?"
06:44:16 <zzo38> CakeProphet: What is that?
06:44:24 <fizzie> "12. !!!???!?!? *throws table, pieces fly everywhere*"
06:45:34 <CakeProphet> I thought maybe I could combine programming language categories to make nonsense ones, but then I realized, sadly, that most of them make some sort of sense.
06:46:03 <CakeProphet> non-strict functional dataflow language.
06:46:05 <monqy> chess variant: in alternate universes, each of your pieces which can move to a given spot does so. the goal is to win in more universes than your opponent
06:46:45 <monqy> does this exist?
06:47:18 <CakeProphet> I think you'd just tie probably?
06:48:03 <monqy> what makes you think this?
06:48:09 <Patashu> http://i.imgur.com/lqcjm.png minesweeper is pretty hard
06:48:29 <CakeProphet> well you'd each have the same number of choices.
06:48:34 <Patashu> monqy: if you mean you elect a spot and branch universes into it
06:48:35 <elliott> Patashu: hot
06:48:46 <monqy> Patashu: yes
06:48:47 <Patashu> hmm
06:48:49 <elliott> are those non-grid boards playable
06:48:50 <elliott> or just the grid one
06:48:51 <elliott> s
06:48:54 <Patashu> I know of a variant where you elect to make branches however you like
06:49:02 <Patashu> apparently you could force a win as player 1 trivially in it
06:49:03 <Patashu> :(
06:49:10 <monqy> what? :(
06:49:15 <Patashu> let me see if I can find it
06:49:23 <CakeProphet> oh right, maybe white would win.
06:49:32 <Patashu> and elliott: every board is playable if you register it
06:49:45 <elliott> Patashu: including those non-grid ones?
06:49:49 <elliott> hot hot hot pirate it immediately
06:49:55 <Patashu> http://www.chessvariants.com/large.dir/contest/manyworlds.html http://www.chessvariants.org/index/listcomments.php?itemid=ManyWorldsChess
06:50:24 <itidus20> CakeProphet: i dunno what im into musically
06:50:52 <Patashu> elliott, you can download the trial version and see all the boards available, and have autoplay solve them for you http://www.software3d.com/Mines3D/download.php
06:51:14 <elliott> pirate pirate pirate then make youtube videos thanks
06:51:52 <monqy> Boards do not remember which player moved last; there is no rule preventing you from making a move on a given board even if you were the player whose move created the board.
06:52:00 <monqy> and the goal is to capture the king on any board
06:52:10 <monqy> so I guess to win as player 1 you just repeatedly move until you get the king?
06:52:28 <Patashu> read the comments
06:52:35 <Patashu> they explain how to mate in 4 as player 1
06:52:35 <monqy> oh where's that oh there
06:52:39 <Patashu> so your variant should make sure it isn't possible
06:53:24 <itidus20> A ship has crashed on the border between two kingdoms. You must decide where to bury the survivors. -- lol
06:53:32 <monqy> oh i guess you can only move on one board at a time
06:54:52 <itidus20> THIS REPORT IS ABOUT A INTELLIGENT FAERIE WHO IS A FLOP AT CHESS AND WHO OPPOSES THE GOVERNMENT
06:55:44 <Patashu> btw, if you want some crazy but cool chess variants from a master, look at Ralph Betza's http://www.chessvariants.org/index/mainquery.php?type=Any&orderby=Type&displayauthor=1&displayinventor=1&authorid=RalphBetza&usethisheading=Items+Authored+by+Ralph++Betza
06:55:53 <Patashu> The Game for the Trees and The Game of Nemoroth in particular are great
06:56:25 <Patashu> The Game of Nemoroth has its own -lore- and its own alternate universe chess rules. That's pretty cool
06:56:55 <itidus20> haha halflings
06:57:06 <Vorpal> <itidus20> A ship has crashed on the border between two kingdoms. You must decide where to bury the survivors. -- lol <-- where is that from?
06:57:25 <zzo38> It is from one of the files I have for FurryScript
06:57:33 <zzo38> (It is not part of FurryScript itself)
06:57:53 <zzo38> However, that in turn was taken from somewhere else which in turn from somewhere else and so on.
06:59:14 <Vorpal> Ad infinitum?
06:59:28 <itidus20> `log godzilla
06:59:31 <zzo38> No, I don't think so
06:59:35 <Vorpal> oh well
06:59:40 <itidus20> oh that bot is not about
06:59:48 <HackEgo> 2010-12-07.txt:21:06:31: <HackEgo> I&#39;m Godzilla coming! I want to die!
06:59:54 <itidus20> oh there he is
07:00:20 <Vorpal> I think the script needs to convert back from HTML escapes
07:00:22 <Vorpal> elliott: ^
07:00:32 <itidus20> `pastelogs godzilla
07:00:35 <elliott> Vorpal: What?
07:00:42 <Vorpal> <HackEgo> 2010-12-07.txt:21:06:31: <HackEgo> I&#39;m Godzilla coming! I want to die!
07:00:45 <Vorpal> that looks wrong
07:00:46 <elliott> The script does not make any HTTP requests.
07:00:53 <elliott> The logs are accurate.
07:00:53 <Vorpal> elliott: well was it like that in the original?
07:00:55 <Vorpal> ah
07:01:06 <HackEgo> No output.
07:01:17 <elliott> `? Vorpal
07:01:18 <itidus20> i will just let hackego rest
07:01:21 <HackEgo> Vorpal is really boring. Seriously, you have no idea.
07:01:23 <elliott> (I forgot what your biography is.)
07:01:26 <itidus20> he seems sleepy
07:01:39 <Vorpal> ^run type '?'
07:01:45 <Vorpal> `run type '?'
07:01:48 <HackEgo> ​? is /hackenv/bin/?
07:01:56 <Vorpal> `run file /hackenv/bin/?
07:01:57 <elliott> `pastewisdom
07:01:58 <HackEgo> ​/hackenv/bin/?: POSIX shell script text executable \ /hackenv/bin/k: POSIX shell script text executable
07:01:59 <HackEgo> http://codu.org/projects/hackbot/fshg/index.cgi/raw-file/tip/paste/paste.22337
07:02:10 <elliott> `forget add
07:02:12 <HackEgo> Forget what?
07:02:34 <itidus20> `pastelogs monster
07:02:40 <monqy> "��V�>WIד�.��" - c
07:02:47 <Vorpal> what was the command to get the url of a file?
07:02:47 <HackEgo> http://codu.org/projects/hackbot/fshg/index.cgi/raw-file/tip/paste/paste.30032
07:03:01 <Vorpal> `url /hackenv/bin/?
07:03:02 <HackEgo> http://codu.org/projects/hackbot/fshg/index.cgi/raw-file/tip//hackenv/bin/?
07:03:05 <Vorpal> ah yes
07:03:06 <elliott> `url bin/?
07:03:07 <HackEgo> http://codu.org/projects/hackbot/fshg/index.cgi/raw-file/tip/bin/?
07:03:11 <elliott> Except that won't work.
07:03:12 <Vorpal> `url bin/?
07:03:13 <elliott> Obviously
07:03:13 <HackEgo> http://codu.org/projects/hackbot/fshg/index.cgi/raw-file/tip/bin/?
07:03:17 <elliott> `run paste bin/'?'
07:03:19 <HackEgo> http://codu.org/projects/hackbot/fshg/index.cgi/raw-file/tip/paste/paste.25005
07:03:19 <elliott> That will though.
07:03:28 <elliott> Except it gets the encoding wrong.
07:03:39 <monqy> as always
07:03:40 <Vorpal> "elliott wrote this learn DB, and wrote or improved many of the other commands in this bot. He probably has done other things?"
07:03:40 <Vorpal> eh
07:03:42 <Vorpal> elliott: what db?
07:03:49 <elliott> Vorpal: the one you're looking at.
07:03:52 <Vorpal> it seems like plaintext
07:03:55 <itidus20> `pastelogs godzilla
07:03:55 <elliott> Gregor wrote that bio, anyway.
07:04:03 <HackEgo> http://codu.org/projects/hackbot/fshg/index.cgi/raw-file/tip/paste/paste.840
07:04:07 <Vorpal> elliott: right
07:04:15 <monqy> `? our
07:04:16 <elliott> Vorpal: So what's new that isn't you not understanding the definition of database?
07:04:17 <HackEgo> our? ¯\(°_o)/¯
07:04:18 <elliott> Data-base.
07:04:19 <elliott> Base of data.
07:04:22 <monqy> `? wiki
07:04:24 <HackEgo> The wiki is at http://esolangs.org/wiki
07:04:26 <monqy> `? the
07:04:27 <HackEgo> the? ¯\(°_o)/¯
07:04:36 <elliott> `cat wisdom/wiki
07:04:37 <HackEgo> The wiki is at http://esolangs.org/wiki
07:04:40 <Vorpal> elliott: well okay, yes a flatfile is a db, true.
07:04:42 <elliott> It... bends the rules a bit.
07:04:57 <itidus20> `pastelogs zombie
07:05:01 <HackEgo> http://codu.org/projects/hackbot/fshg/index.cgi/raw-file/tip/paste/paste.8534
07:05:37 <Vorpal> elliott: anyway you should use sqlite, it is better tested than flatfiles.
07:05:43 <monqy> `? .doorstop
07:05:44 <HackEgo> You do not have the clearance necessary to view this entry.
07:06:12 <elliott> `karma- Vorpal
07:06:14 <HackEgo> Vorpal has 0 karma.
07:06:21 <elliott> `karma Vorpal
07:06:22 <monqy> vorpal had karma?
07:06:23 <HackEgo> Vorpal has 0 karma.
07:06:25 <elliott> Gah, what _is_ it with that bug.
07:06:27 <elliott> `karma- Vorpal
07:06:28 <Vorpal> elliott: do you think I care about karma?
07:06:29 <HackEgo> Vorpal has 0 karma.
07:06:31 <elliott> `karma Vorpal
07:06:33 <HackEgo> Vorpal has 0 karma.
07:06:36 <elliott> Come on.
07:06:38 <elliott> `karma+ Vorpal
07:06:40 <HackEgo> Vorpal has 0 karma.
07:06:42 <elliott> `karma- Vorpal
07:06:44 <HackEgo> Vorpal has 0 karma.
07:06:48 <Vorpal> elliott: well it seems broken whatever it is
07:06:49 <elliott> Dear god.
07:06:54 <Vorpal> elliott: and I don't really care about karma.
07:06:56 <elliott> Vorpal: it's a bug I can't figure out.
07:06:57 <elliott> `karma+ Vorpal
07:06:59 <elliott> `karma+ Vorpal
07:07:00 <HackEgo> Vorpal has 0 karma.
07:07:00 <elliott> `karma+ Vorpal
07:07:01 <HackEgo> Vorpal has 0 karma.
07:07:02 <Vorpal> elliott: so that isnt' going to stop me
07:07:02 <HackEgo> Vorpal has 0 karma.
07:07:04 <elliott> `karma- Vorpal
07:07:04 <elliott> `karma- Vorpal
07:07:05 <elliott> `karma- Vorpal
07:07:05 <elliott> `karma- Vorpal
07:07:06 <Vorpal> isn't*
07:07:08 <HackEgo> Vorpal has 0 karma.
07:07:08 <HackEgo> Vorpal has 0 karma.
07:07:08 <HackEgo> Vorpal has 0 karma.
07:07:08 <HackEgo> Vorpal has 0 karma.
07:07:17 <Vorpal> elliott: stop spamming me with highlights though
07:07:20 <monqy> @karma- vorpal
07:07:20 <lambdabot> vorpal's karma lowered to -1.
07:07:26 <elliott> @karma- Vorpal
07:07:26 <lambdabot> Vorpal's karma lowered to -2.
07:07:28 <elliott> I find this acceptable.
07:07:36 <itidus20> @karma++ Vorpal
07:07:36 <lambdabot> Vorpal's karma raised to -1.
07:07:39 <zzo38> @karma+ Vorpal
07:07:39 <lambdabot> Vorpal's karma raised to 0.
07:07:41 <elliott> @karma- Vorpal
07:07:41 <lambdabot> Vorpal's karma lowered to -1.
07:07:43 <elliott> You are all traitors.
07:07:44 <itidus20> @karma+ Vorpal
07:07:44 <lambdabot> Vorpal's karma raised to 0.
07:07:45 <elliott> You are all traitors.
07:07:46 <elliott> @karma- Vorpal
07:07:46 <lambdabot> Vorpal's karma lowered to -1.
07:07:49 <Deewiant> @karma- elliott
07:07:49 <lambdabot> elliott's karma lowered to 2.
07:07:53 <elliott> @karma+ elliott
07:07:53 <lambdabot> You can't change your own karma, silly.
07:07:57 <Deewiant> Silly.
07:08:01 -!- elliott has changed nick to fthepolice.
07:08:03 <fthepolice> @karma+ elliott
07:08:04 <lambdabot> elliott's karma raised to 3.
07:08:06 -!- fthepolice has changed nick to elliott.
07:08:08 <Vorpal> stop the highlight spam though.
07:08:08 <elliott> @karma- Deewiant
07:08:08 <lambdabot> Deewiant's karma lowered to -2.
07:08:16 <fizzie> "Silly" applies to the whole thing above.
07:08:17 <zzo38> O, I thought of that but thought you have to PART first
07:08:18 <monqy> `echo "a lot of" > karma/monqy
07:08:19 <HackEgo> ​"a lot of" > karma/monqy
07:08:20 <monqy> `karma monqy
07:08:20 -!- itidus20 has changed nick to itidus21.
07:08:21 <HackEgo> monqy has 0 karma.
07:08:23 <monqy> oops
07:08:24 <Vorpal> fizzie: agreed.
07:08:26 <monqy> `run echo "a lot of" > karma/monqy
07:08:27 <HackEgo> No output.
07:08:28 <monqy> `karma monqy
07:08:30 <HackEgo> monqy has 0 karma.
07:08:32 <monqy> oh nooo
07:08:33 <itidus21> `karma+ itidus20
07:08:35 <HackEgo> itidus20 has 1 karma.
07:08:41 -!- itidus21 has changed nick to itidus20.
07:09:09 <elliott> @karma- Vorpal
07:09:09 <lambdabot> Vorpal's karma lowered to -28.
07:09:10 -!- itidus20 has changed nick to itidus21.
07:09:17 <monqy> oh
07:09:20 <Vorpal> elliott: messing in /msg too. *shrug*
07:09:26 <elliott> No.
07:09:29 <elliott> That was just a really strong -.
07:09:34 -!- itidus21 has changed nick to itidus20.
07:09:36 <monqy> how do i get a lot of karma
07:09:42 <monqy> "a lot of" as my karma number
07:09:42 <elliott> @karma+ monqy
07:09:43 <lambdabot> monqy's karma raised to 1.
07:09:44 <elliott> @karma+ monqy
07:09:44 <lambdabot> monqy's karma raised to 2.
07:09:44 <Vorpal> elliott: as I said I don't care about it. I'm just annoyed at the highlight spam.
07:09:44 <elliott> @karma+ monqy
07:09:44 <lambdabot> monqy's karma raised to 3.
07:09:52 <elliott> Vorpal: Sorry, I'll fix the karma.
07:09:53 <monqy> i do not want numbers i want a lot of
07:09:54 <elliott> @karma+ Vorpal
07:09:54 <lambdabot> Vorpal's karma raised to -27.
07:09:55 <elliott> @karma+ Vorpal
07:09:55 <lambdabot> Vorpal's karma raised to -26.
07:09:55 <elliott> @karma+ Vorpal
07:09:55 <elliott> @karma+ Vorpal
07:09:55 <lambdabot> Vorpal's karma raised to -25.
07:09:55 <lambdabot> Vorpal's karma raised to -24.
07:09:56 <elliott> @karma+ Vorpal
07:09:56 <lambdabot> Vorpal's karma raised to -23.
07:09:58 <elliott> @karma+ Vorpal
07:09:58 <lambdabot> Vorpal's karma raised to -22.
07:09:59 <Vorpal> ...
07:10:00 <elliott> @karma+ Vorpal
07:10:00 <lambdabot> Vorpal's karma raised to -21.
07:10:04 <elliott> @karma+ Vorpal
07:10:04 <lambdabot> Vorpal's karma raised to -20.
07:10:06 <elliott> @karma+ Vorpal
07:10:06 <lambdabot> Vorpal's karma raised to -19.
07:10:08 <elliott> @karma+ Vorpal
07:10:08 <lambdabot> Vorpal's karma raised to -18.
07:10:09 <Vorpal> glad you like me at least
07:10:10 <elliott> friendship karma
07:10:30 <Deewiant> ?karma-all
07:10:31 <lambdabot> "pmichaud" 1018
07:10:31 <lambdabot> "moritz" 955
07:10:31 <lambdabot> "c/c" 650
07:10:32 <lambdabot> "jnthn" 607
07:10:34 <lambdabot> "lwall" 530
07:10:36 <lambdabot> [3660 @more lines]
07:10:37 <elliott> Oh dear god.
07:10:45 <coppro> hahaha
07:10:46 <elliott> @more
07:10:46 <lambdabot> "masak" 457
07:10:46 <lambdabot> "pmurias" 404
07:10:46 <lambdabot> "g" 400
07:10:46 <lambdabot> "Weed" 334
07:10:46 <lambdabot> "(" 286
07:10:47 <Deewiant> Wow, it really does what it says on the tin
07:10:48 <lambdabot> [3655 @more lines]
07:10:49 <elliott> @more
07:10:50 <lambdabot> "+" 257
07:10:52 <lambdabot> "br1" 182
07:10:54 <lambdabot> "colomon" 175
07:10:56 <lambdabot> "ruoso" 164
07:10:56 <elliott> We can do this, folks.
07:10:58 <fizzie> "+" is well-liked.
07:10:58 <lambdabot> "azawawi" 149
07:11:00 <elliott> We can do this.
07:11:00 <lambdabot> [3650 @more lines]
07:11:02 <elliott> @more
07:11:03 <lambdabot> "moritz_" 147
07:11:04 <lambdabot> "##c" 146
07:11:06 <lambdabot> "putter" 144
07:11:08 <lambdabot> "Tinned_Tuna" 143
07:11:09 <elliott> fizzie: You don't mind me doing this, right?
07:11:10 <lambdabot> "diakopter" 135
07:11:12 <Vorpal> ...
07:11:12 <lambdabot> [3645 @more lines]
07:11:14 <elliott> @more
07:11:14 <lambdabot> "erg0t" 130
07:11:16 <lambdabot> "tizoc" 108
07:11:18 <lambdabot> "kyle" 107
07:11:20 <Vorpal> this is absurd
07:11:20 <lambdabot> "jonathan" 102
07:11:22 <elliott> @more
07:11:22 <lambdabot> "TimToady" 95
07:11:24 <lambdabot> [3640 @more lines]
07:11:26 <elliott> Gotta get through them all
07:11:26 <lambdabot> "elpolilla" 91
07:11:28 <lambdabot> "mberends" 88
07:11:30 <lambdabot> "bonnie" 87
07:11:32 <lambdabot> "carlin" 85
07:11:34 <lambdabot> "Notepad" 81
07:11:36 <lambdabot> [3635 @more lines]
07:11:38 <elliott> @more
07:11:38 <lambdabot> "hinrik" 76
07:11:40 <lambdabot> "libstdc" 75
07:11:42 <lambdabot> "szabgab" 75
07:11:43 <itidus20> lmao @ notepad
07:11:44 <Vorpal> > a+4;
07:11:44 <lambdabot> "\"C" 74
07:11:46 <elliott> This should only take a few hours
07:11:46 <lambdabot> "Tene" 70
07:11:48 <lambdabot> <no location info>: parse error on input `;'
07:11:49 <elliott> <lambdabot> "\"C" 74
07:11:50 <elliott> wat
07:11:50 <lambdabot> [3630 @more lines]
07:11:53 <elliott> @more
07:11:56 <coppro> elliott: make a script
07:11:58 <elliott> Vorpal: YOU BROKE IT
07:12:02 <Vorpal> elliott: :D
07:12:05 <elliott> coppro: No need for a script, I can just
07:12:07 <elliott> @karma-all
07:12:08 <lambdabot> "pmichaud" 1018
07:12:08 <lambdabot> "moritz" 955
07:12:08 <lambdabot> "c/c" 650
07:12:08 <lambdabot> "jnthn" 607
07:12:08 <lambdabot> "lwall" 530
07:12:09 <elliott> @more
07:12:09 <elliott> @more
07:12:10 <lambdabot> [3660 @more lines]
07:12:10 <elliott> @more
07:12:10 <elliott> @more
07:12:10 <elliott> @more
07:12:10 <elliott> @more
07:12:11 <lambdabot> "masak" 457
07:12:12 <elliott> @more
07:12:13 <Vorpal> > a+4;
07:12:14 <lambdabot> "pmurias" 404
07:12:14 <elliott> @more
07:12:16 <lambdabot> "g" 400
07:12:16 <quintopia> :(
07:12:16 <elliott> @more
07:12:18 <lambdabot> <no location info>: parse error on input `;'
07:12:18 <elliott> @more
07:12:19 <lambdabot> "Weed" 334
07:12:20 <elliott> @more
07:12:20 <coppro> elliott: rate-limiting
07:12:22 <lambdabot> "(" 286
07:12:22 <elliott> @more
07:12:23 <lambdabot> [3655 @more lines]
07:12:24 <elliott> @more
07:12:26 <elliott> @more
07:12:28 <elliott> @more
07:12:30 <elliott> Oh dear.
07:12:32 <Vorpal> ...
07:12:34 <elliott> Aw.
07:12:50 <Vorpal> well I'll be off soon, someone else have to deal with it.
07:12:59 <elliott> There's something to deal with?
07:13:04 <elliott> There's something to deal with that you would be capable of dealing with?
07:13:17 <Vorpal> yes and yes
07:13:24 <elliott> What would that be?
07:13:49 <itidus20> the blackjack dealer
07:14:42 -!- sllide has joined.
07:14:54 <CakeProphet> itidus20: so something like 12-bar nano-stochastic lumberjack's swing.
07:15:24 <itidus20> it's a joke because of the word dealer used in another sense , and because of the implication that going off to gamble is a sign of not dealing with things very well
07:18:17 <Patashu> oh man you know what would be so awesome?
07:18:23 <zzo38> The various pictures I have sent to Jyte are missing there now. However, I still have copies of it in my computer
07:18:24 <Patashu> 3d minesweeper with a projection that lets you see every surface at once
07:18:26 <Patashu> like on maps of the world
07:19:07 <CakeProphet> wouldn't that be mostly like normal minesweeper but with a different shape?
07:19:24 <Patashu> 'different shape' changes a lot about how you play minesweeper
07:19:48 <fizzie> Different shape and presumably some wraparounding.
07:19:54 <Patashu> if a cell can have 7 or 9 or 11 adjacent to it instead of 8 you need new rules
07:20:15 <CakeProphet> still, saying it's a projection of a 3d surface doesn't really make it anything more than a different shape.
07:20:30 <itidus20> Patashu: ahh so like a continuous minesweeper surface.. some sort of torus?
07:20:34 <CakeProphet> Patashu: well if cells are squares then they would still have 8 adjacent ones...
07:20:42 <Patashu> http://www.software3d.com/Mines3D/index.php
07:20:43 <Patashu> This game
07:20:45 <Patashu> But change the perspective
07:21:02 <Patashu> CakeProphet, consider a cell in the corner of a cube and count the cells adjacent to it. I count 7, you?
07:21:29 <itidus20> Patashu: following your idea, what about minepsweeper played on a game of life that wraps around horizontally and vertically
07:21:35 <Patashu> been done too
07:21:42 <CakeProphet> Patashu: ah okay.
07:21:49 <Patashu> http://www.youtube.com/watch?v=7kVEdHSCwmg
07:23:45 <Patashu> the other thing I'd like for that program is, for the boards that have a hole in the middle, a hotkey to move your camera to the center looking outward
07:24:48 <CakeProphet> why does that when you could play a never-ending game of sierpinski's triangle minecraft.
07:27:57 <CakeProphet> surely someone has made minesweeper in minecraft...
07:28:25 <Patashu> http://www.youtube.com/results?search_query=minesweeper+minecraft&aq=f apparently so
07:28:38 -!- sllide has quit (Read error: Connection reset by peer).
07:29:20 <itidus20> can i assume you have all seen the minesweeper movie trailer
07:29:28 <Patashu> I have
07:29:34 <itidus20> right on
07:32:34 <itidus20> Why are you really here?
07:32:38 <elliott> dunno
07:32:40 <itidus20> I want to make this land safe!
07:32:42 <elliott> what
07:32:52 <itidus20> Why are you here soldier?
07:32:56 <itidus20> Because I'm bored!
07:33:01 <itidus20> Don't you ever forget that.
07:33:23 -!- aspect has left.
07:35:15 <elliott> you scared away aspect
07:35:27 <itidus20> http://www.youtube.com/watch?v=LHY8NKj3RKs
07:35:57 <CakeProphet> itidus20: so it's kind of like folk noise pop?
07:36:22 <itidus20> i'm fond of nirvana
07:36:38 <CakeProphet> that's not folk noise pop.
07:37:03 <itidus20> i like the music in the film pulp fiction
07:37:14 <itidus20> i don't know if that is the same thing as it's soundtrack
07:37:29 <CakeProphet> well the intro is surfer rock.
07:37:41 <CakeProphet> dude
07:37:42 <CakeProphet> surf metal
07:37:47 <CakeProphet> I'm going to start a surf metal band.
07:38:00 <itidus20> psha
07:38:04 <monqy> sour cereal band
07:38:58 <itidus20> i like ievan polkka
07:39:26 <CakeProphet> *distorted latin-influenced guitar licks with double bass pedals tapping out 32nd notes- GRRRRRRRRRRROOOOOOAAAAAAR.
07:39:28 <itidus20> oh uhmm
07:40:02 <itidus20> http://www.youtube.com/watch?v=CVAiGf-fku0
07:40:23 <itidus20> chances of anyone who clicks actually enjoying it are minimal.
07:43:17 <CakeProphet> *plays rapid palm muted licks while bending his vibrato arm while plugged into a maxed-out tremolo effect pedal* FEEEEEEL THE WAAAAVES ON YOUR SKIIIIIN. FEEEEEL THE SURF BLOOD IN YOUR VEEEEINS. UGH.
07:43:33 <CakeProphet> I have three arms.
07:45:56 <CakeProphet> all surf metal guitarists need a minimum of three hands.
07:46:20 <CakeProphet> it is suggested that drummers use all 8 limbs.
07:50:58 <elliott> fizzie: You never told me how awful Google markup is. :/
07:55:54 <elliott> ?hoogle Maybe a -> [a]
07:55:54 <lambdabot> Data.Maybe maybeToList :: Maybe a -> [a]
07:55:54 <lambdabot> Data.Foldable toList :: Foldable t => t a -> [a]
07:55:54 <lambdabot> Data.Maybe catMaybes :: [Maybe a] -> [a]
07:59:06 <elliott> fizzie: I suppose your Perl script used gd? :p
08:08:00 <fizzie> Yes, it did.
08:08:28 <fizzie> I anallllized only the thumbnail images, incidentally.
08:11:08 <elliott> *Main> head `fmap` (getSearchPage "hello world" >>= getThumbnails)
08:11:08 <elliott> [152,152,152,255]
08:11:12 <elliott> That looks a bit small, even for a thumbnail. :/
08:11:38 <elliott> I suppose I may have fucked up the parsing.
08:12:30 <elliott> How does one force wget to succeed? I want to see if what I'm getting back is an error pag.e
08:12:31 <elliott> page.
08:12:59 <elliott> It's going "oh, this is all http forbidden, I'm not downloading the error page".
08:15:43 <fizzie> Hrm; curl fetches the error pages by default, don't know about wget.
08:15:51 <elliott> I'll just use curl then. :p
08:17:33 <elliott> Hrm; it does indeed appear to be the correct search page that's downloaded.
08:18:41 <elliott> Aha, there we go.
08:18:44 <elliott> I just had to flush the file. :p
08:21:25 -!- nooga has joined.
08:23:56 <elliott> http://sprunge.us/BULB
08:23:59 <elliott> This sure is a thing.
08:24:03 <monqy> bulb
08:24:03 <elliott> fizzie: I blame you for this. :p
08:25:09 <elliott> I wonder if you can use the Google chart API to just give an image of a solid colour.
08:25:15 <CakeProphet> man Perl sure would be better for this.
08:25:25 <elliott> It would be nicer than fiddling around with SDL or whatever just to display a solid colour.
08:25:40 <elliott> CakeProphet: I am incredibly sceptical that Perl could do that in significantly fewer lines.
08:25:44 <elliott> Ignoring the imports which are a bit excessive.
08:26:20 -!- zzo38 has quit (Remote host closed the connection).
08:30:16 <CakeProphet> well it would involve either a lot of short regex or some shitty library
08:30:32 <CakeProphet> but would probably be fewer lines of code, I guess.
08:30:34 -!- ineiros has quit (Remote host closed the connection).
08:31:06 <CakeProphet> but I wasn't really talking about lines of code.
08:31:40 <CakeProphet> hmmm, dunno it's probably the same. What you save in terseness with Perl you lose in debugging.
08:32:53 <fizzie> http://chart.apis.google.com/chart?chs=200x200&cht=lc:nda&chf=bg,s,ff00bb <-- that's pretty close to a 200x200 square with that color only.
08:32:54 -!- Jafet has joined.
08:32:57 <elliott> http://chart.googleapis.com/chart?cht=p&chs=200x200&chf=bg,s,EFEFEF
08:33:06 <elliott> fizzie: If you use the pie chart, all the border things go away. :p
08:33:14 <elliott> This MAY be the ugliest hack ever.
08:33:20 <fizzie> So does the :nda suffix to a line chart.
08:33:40 <elliott> =p is fewer bytes. :p
08:36:39 <elliott> readImage :: FilePath -> IL (Array DIM3 Word8)Source
08:36:39 <elliott> Reads an image into an RGBA array. Indices are (row,column,color-channel).
08:36:42 <elliott> Oh, I just realised how horrific that API is.
08:36:48 <elliott> Colour channel as the third dimension. :-|
08:39:20 <fizzie> It sounds typicalish; MATLAB image-reading functions tend to return a [height]x[width]x[samples-per-pixel] 'matrix' too.
08:39:22 <elliott> > showIntAtBase
08:39:23 <lambdabot> Overlapping instances for GHC.Show.Show
08:39:23 <lambdabot> (a
08:39:23 <lambdabot> ...
08:39:25 <elliott> :t showIntAtBase
08:39:26 <lambdabot> forall a. (Integral a) => a -> (Int -> Char) -> a -> String -> String
08:39:46 <elliott> Bleh, I just want a padded hex. :/
08:39:55 <elliott> > ['0'..'F']
08:39:56 <lambdabot> "0123456789:;<=>?@ABCDEF"
08:40:00 <elliott> D'aww.
08:40:37 <elliott> > showIntAtBase 16 ("0123456789ABCDEF" !!) 99 ""
08:40:38 <lambdabot> "63"
08:40:43 <elliott> > showIntAtBase 16 ("0123456789ABCDEF" !!) 9 ""
08:40:44 <lambdabot> "9"
08:40:49 <fizzie> > showHex 99
08:40:50 <lambdabot> Overlapping instances for GHC.Show.Show
08:40:50 <lambdabot> (GHC.B...
08:40:59 <elliott> :t showHex
08:41:00 <lambdabot> forall a. (Integral a) => a -> String -> String
08:41:03 <elliott> "Oh."
08:41:05 <elliott> > showHex 99 ""
08:41:06 <lambdabot> "63"
08:41:06 <elliott> > showHex 90 ""
08:41:07 <lambdabot> "5a"
08:41:14 <elliott> Very well, then.
08:41:29 <fizzie> Right, it's one of those ShowSeses. Doesn't pad either, of course.
08:43:20 <fizzie> > printf "%02x" 15 :: String
08:43:21 <elliott> hex n = reverse . take 2 . reverse . ("0" ++) $ showHex n ""
08:43:21 <lambdabot> "0f"
08:43:22 <elliott> "Works."
08:43:27 <elliott> fizzie: printf is grosse.
08:43:31 <elliott> So unsafe. :/
08:43:51 <elliott> > printf "%02x" (print 99) () "hahaha" :: String
08:43:52 <lambdabot> No instances for (Text.Printf.PrintfArg (GHC.Types.IO ()),
08:43:52 <lambdabot> ...
08:44:00 <elliott> OK WELL _THAT_ WOULD FAIL WOULDN'T IT :P
08:44:06 <elliott> > printf "%02x" [99] () "hahaha" :: String
08:44:07 <lambdabot> No instance for (Text.Printf.PrintfArg ())
08:44:07 <lambdabot> arising from a use of `Text.P...
08:44:12 <elliott> > printf "%02x" [99] 99.999 "hahaha" :: String
08:44:13 <lambdabot> Ambiguous type variable `t' in the constraints:
08:44:13 <lambdabot> `GHC.Num.Num t'
08:44:13 <lambdabot> ari...
08:44:19 <elliott> > printf "%02x" [99::Int] (99.999 :: Float) "hahaha" :: String
08:44:20 <lambdabot> No instance for (Text.Printf.IsChar GHC.Types.Int)
08:44:20 <lambdabot> arising from a use of...
08:44:23 <elliott> Suicide.
08:44:33 <Deewiant> > printf "%02x" "foo" :: String
08:44:34 <lambdabot> "*Exception: Printf.printf: bad argument
08:44:38 <elliott> Thank you, sir.
08:45:48 <elliott> _ <-
08:45:49 <elliott> createProcess $
08:45:49 <elliott> (Process.proc "xdg-open" [chart ++ hex r ++ hex g ++ hex b]) {
08:45:49 <elliott> std_out = CreatePipe }
08:45:53 <elliott> What an ugly few lines. :/
08:46:12 <fizzie> > let p :: Int -> String; p = printf "%02x" in p 8
08:46:13 <lambdabot> "08"
08:46:13 <fizzie> > let p :: Int -> String; p = printf "%02x" in p "foo"
08:46:14 <lambdabot> Couldn't match expected type `GHC.Types.Int'
08:46:14 <lambdabot> against inferred type ...
08:46:21 <elliott> fizzie: IT'S NOT RIGHT TO EVEN _IMPORT_ SOMETHING THAT BAD
08:46:26 <Deewiant> You should totally use Pipe dude
08:46:27 <fizzie> Sure, sure. :p
08:46:34 <elliott> Deewiant: Mo dependencies mo problems
08:46:53 <fizzie> 99 problems but a Pipe ain't one.
08:46:59 <elliott> Yes. Exactly.
08:47:20 <Deewiant> It's less than 100 LOC :-P
08:47:56 <elliott> 100 lines of problem
08:48:07 <elliott> 100 lines of i mad.
08:49:26 <Vorpal> elliott: he said *less than*
08:49:42 <elliott> It'll be a hundred within the week.
08:49:47 <Vorpal> oh?
08:50:08 <elliott> I'll start depending on it and then find out it needs tons more features than it has and then eventually break down and write a patch myself.
08:50:14 -!- ineiros has joined.
08:50:47 <Vorpal> elliott: keep it simple and so on
08:50:59 <Vorpal> elliott: btw what are you trying to do?
08:51:10 <elliott> Recreate this thing fizzie had in the logs once. Except it's not quite Perl.
08:51:25 <elliott> Right now I'm at the exciting stage "wow, I totally don't know how HSV works".
08:51:28 <fizzie> Color name → RGB value via Google Image search.
08:51:56 <Vorpal> ah
08:52:54 <Vorpal> elliott: anyway I think I read somewhere that HSV -> RGB can be done with matrices. Or was it XYZ -> RGB maybe
08:53:00 <elliott> It's RGB -> HSV I want to do. :p
08:53:04 <elliott> Well, and the other way around, I suppose.
08:53:12 <elliott> http://hackage.haskell.org/package/colour Oh, this looks nice.
08:53:16 <Vorpal> well if you can do one with matrices then you could do the other I think
08:53:22 <Deewiant> Mo dependencies mo problems?
08:53:26 <elliott> Except it doesn't actually have HSV, oops.
08:53:33 <elliott> Deewiant: Mo having to understand colours mo problems
08:53:39 <Vorpal> elliott: http://en.wikipedia.org/wiki/HSL_and_HSV#Converting_to_RGB
08:53:39 <elliott> I understand process spawning
08:53:54 <fizzie> It's a bit messy conversion, I wouldn't be sure it's linear.
08:53:59 <Deewiant> http://hackage.haskell.org/packages/archive/colour/2.3.1/doc/html/Data-Colour-RGBSpace-HSV.html
08:54:04 <Deewiant> Is that not HSV?
08:54:06 <CakeProphet> http://www.cs.rit.edu/~ncs/color/t_convert.html
08:54:11 <Vorpal> fizzie: right, could have been XYZ -> HSV then maybe?
08:54:11 <CakeProphet> you're welcome.
08:54:18 <elliott> Deewiant: That might be HSV.
08:54:46 <CakeProphet> I mean, it's icky procedural code but I'm sure you can map it to functional code.
08:55:00 <fizzie> Vorpal: Or XYZ <-> RGB; they're sort of related.
08:55:01 <Vorpal> fizzie: right, it is XYZ<->RGB that is matrices
08:55:02 <Vorpal> yeah
08:55:20 <fizzie> I see the wikipage has the matrix and all.
08:55:36 <Vorpal> matrices are wonderful, there are so many cool things that you can do with them.
08:55:55 <itidus20> theres algos around on how to do RGB -> HSL
08:56:07 <itidus20> sorry i just don't like the term V
08:56:10 <elliott> Mo matrices mo problems.
08:56:18 <CakeProphet> itidus20: hey look I totally linked one
08:56:18 <itidus20> Luminance is so fitting
08:56:37 <fizzie> HSL != HSV, conventionally.
08:56:43 <itidus20> oh.. shit
08:56:53 <fizzie> They're very close though.
08:56:55 <itidus20> thanks for the protip fizzie
08:57:10 <elliott> instance Applicative RGB where
08:57:10 <elliott> pure c = RGB c c c
08:57:10 <elliott> (RGB fr fg fb) <*> (RGB r g b) = RGB (fr r) (fg g) (fb b)
08:57:12 <elliott> The most useful instance
08:57:17 <elliott> I have RGBs with function components ALL THE TIME
08:57:42 <CakeProphet> elliott: I mean... why wouldn't you?
08:58:24 <elliott> Deewiant: I like how it doesn't expose any way to go from RGB->HSV or HSV->RGB. :/
08:58:33 <elliott> I mean, it has an RGB type, but the only exposed constructor is from HSV.
08:58:34 <CakeProphet> elliott: see link make your own
08:58:42 <Deewiant> elliott: Um
08:58:47 <Deewiant> elliott: hsvView :: Rgb a -> (a,a,a)
08:58:53 <Deewiant> elliott: hsv :: a -> a -> a -> RGB a
08:58:59 <Deewiant> elliott: Modulo spelling and instances
08:59:18 <elliott> Deewiant: Yes, which will be id
08:59:22 <CakeProphet> you guys you can't take the remainder of the division of arbitrary words.
08:59:27 <CakeProphet> MODULO DOESN'T WORK LIKE THAT.
08:59:29 <elliott> Unless hsvView (hsv h s v) /= (h,s,v) which would be insane.
09:00:17 <Deewiant> It might be if they get normalized somehow in between and your initial values aren't
09:00:28 <Deewiant> E.g. your h is 360 instead of 0 or something
09:00:42 <Deewiant> But anyway, those two functions are exactly RGB->HSV and HSV->RGB
09:01:13 <shachaf> elliott: Why is one function using a tuple and the other not? How inconsistent.
09:01:16 <elliott> Deewiant: Yes, but /there are no exposed constructors for RGB/.
09:01:32 <elliott> The ONLY way to get an RGB is by converting it from HSV. The ONLY thing you can get out of an RGB is HSV values.
09:01:47 <CakeProphet> http://www.cs.rit.edu/~ncs/color/t_convert.html
09:01:48 <CakeProphet> http://www.cs.rit.edu/~ncs/color/t_convert.html
09:01:49 <CakeProphet> http://www.cs.rit.edu/~ncs/color/t_convert.html
09:01:54 <elliott> Prelude Data.Colour.RGBSpace.HSV> hsv 99 99 99
09:01:54 <elliott> RGB {channelRed = -6271.65, channelGreen = 99.0, channelBlue = -9702.0}
09:01:54 <elliott> Prelude Data.Colour.RGBSpace.HSV> channelRed (hsv 99 99 99)
09:01:54 <elliott> <interactive>:1:1: Not in scope: `channelRed'
09:02:00 <elliott> I suppose I could extract the data from "show"??????????
09:02:10 <Deewiant> read "RGB 1 2 3"
09:02:20 <elliott> Oh, that type is exported by Data.Colour.RGBSpace
09:02:21 <shachaf> elliott: Or just impor Data.Colour.RGBSpace?
09:02:21 <CakeProphet> you could just write these two very simple algorithms in Haskell.
09:02:29 <elliott> Which is conveniently not mentioned anywhere, and the module /source/ imports a different module
09:02:38 <elliott> Wooooooooooooooooo /waves a little American flag
09:02:47 <CakeProphet> god bless haskell america
09:03:19 <shachaf> elliott: :i is your friend.
09:03:35 * elliott continues waving a little American flag
09:03:55 <shachaf> You're not allowed to wave an American flag while working with a module named "colour".
09:04:01 <shachaf> I mean wourking.
09:04:15 <elliott> Now let's see if repa can go from (Array DIM3 Word8) to (Array DIM2 RGB) without, like, reallocating everything. (Probably: not.)
09:04:18 <elliott> Actually hmm.
09:04:32 <elliott> I should probably read my copied fizzie quotes on the actual algorithm to figure out whether I should even be doing that.
09:04:40 <CakeProphet> http://www.cs.rit.edu/~ncs/color/t_convert.html
09:04:46 * shachaf >>= undefined
09:04:54 <elliott> CakeProphet: Are you trying to be really irritating?
09:05:03 <elliott> shachaf: Is that, like, suicide?
09:05:03 <Vorpal> elliott: why not just convert it to a spectrum of wavelengths and then to HSV from there?
09:05:07 <elliott> God bless haskell america.
09:05:13 <elliott> Vorpal: A practical solution.
09:05:20 <Vorpal> elliott: absolutely!
09:05:38 <elliott> 22:34:39: <fizzie> GregorR: The statistics part was very very simple: it just converted all pixels to HSV, did separate histograms for H, S and V values, and interpolated the highest peak out of them histograms.
09:05:41 <Vorpal> elliott: anyway why do you need RGB <-> HSV?
09:05:41 <shachaf> elliott: Leaving the Internet for any period of time? Pretty much.
09:05:45 <elliott> Ah, histograms. The solution to every statistical problem.
09:05:53 <elliott> Vorpal: Because it's part of The Algorithm.
09:06:09 <fizzie> You don't really need to follow The Algorithm, though.
09:06:09 <Vorpal> elliott: the algorithm for what?
09:06:18 <elliott> fizzie: The Prophets demand it.
09:06:27 <Vorpal> fizzie: what algorithm?
09:06:35 <elliott> The Algorithm.
09:06:38 <CakeProphet> elliott: histogram = fromListWith (+) . (`zip` repeat 1)
09:06:47 <Vorpal> elliott: implementing some esolang?
09:06:58 <fizzie> Vorpal: The one to convert a set of images into a single RGB triplet.
09:07:05 <fizzie> (In some sort of meaningful way.)
09:07:17 <CakeProphet> elliott: can you do that w ith array thingies?
09:07:23 <Vorpal> fizzie: heh?
09:08:11 <fizzie> Vorpal: See, the whole point is to determine the color of "foo" from a hundred or so Google image search results for the word. So you need some way to classify the "most prominent" color of the whole set.
09:08:20 <Vorpal> ah
09:08:42 <elliott> :t find
09:08:43 <lambdabot> forall a. (a -> Bool) -> [a] -> Maybe a
09:09:16 <Vorpal> fizzie: idea: for each colour, count pixels with that colour, return the colour with most pixels?
09:09:44 <CakeProphet> elliott: hi am I /ignore'd
09:09:51 <Vorpal> sure, #fafafa and #fafafb for example would count as separate, so if you want to avoid that, maybe
09:10:07 <fizzie> Vorpal: That's certainly one way, but the whole 256*256*256-color RGB space will be rather sparsely populated by thumbnail-sized images.
09:10:11 <elliott> CakeProphet: yes
09:10:26 <Vorpal> fizzie: well yes, you could download the originals?
09:11:09 <fizzie> Vorpal: Sure, but that's annoying; it tends to run into all kinds of referer-checks and currently-down servers and whatnot. At least the thumbnails are always available.
09:11:11 <elliott> ?pl \x -> fmap f (g x)
09:11:12 <lambdabot> fmap f . g
09:11:16 <Vorpal> true
09:11:22 <CakeProphet> elliott: I will stop trying to help then.
09:11:24 <CakeProphet> good night.
09:11:30 <Deewiant> f .: g
09:13:27 <fizzie> Vorpal: Anyhow, what I did was to pick the most common H, S and V values for each image separately for each channel, and then take the weighted average over images, with weights derived from the standard deviation of hue, so that "single-colour" images (in some sense) got more weight.
09:15:18 <Vorpal> fizzie: ah
09:15:27 <elliott> fizzie: You lied, that's much more complicated than what you describe in this log. :p
09:15:54 <fizzie> elliott: Possibly I describe only the "color of a single image" case.
09:16:57 <elliott> nextPageURI :: [Tag ByteString] -> Maybe URI
09:16:57 <elliott> nextPageURI =
09:16:57 <elliott> find isNextPageURI >=>
09:16:57 <elliott> URI.parseURI . ("http://www.google.com" ++) . B8.unpack . fromAttrib "href"
09:16:57 <elliott> where isNextPageURI link@(TagOpen _ _) = fromAttrib "id" link == "pnnext"
09:16:57 <elliott> isNextPageURI _ = False
09:16:59 <elliott> This could be prettier. :/
09:17:08 <fizzie> If you want the details, for a standard deviation of hue (in degrees) of S, the corresponding weight W(S) = { 1 if S < 10; 0.02 if S > 50; linearly interpolated if 10 <= S <= 50 }. (Parameters selected using the Stetson-Harrison method.)
09:17:09 <elliott> fizzie: You literally just say
09:17:09 <elliott> 22:34:39: <fizzie> GregorR: The statistics part was very very simple: it just converted all pixels to HSV, did separate histograms for H, S and V values, and interpolated the highest peak out of them histograms.
09:17:19 <fizzie> Yes, well, that's for one image.
09:17:25 <elliott> Yes. Pah :P
09:17:32 <elliott> Well, I need to concentrate on actually getting a hundred thumbnails first.
09:17:38 <Vorpal> yay histograms
09:19:39 <fizzie> Incidentally, I think the newer MATLAB-dumping code was in order to fine-tune those parameters; I seem to have found a couple of color name lists (rgb.txt and some others), and I vaguely think I was going to use those as known targets to tune the color selection.
09:19:51 <fizzie> Possibly I never got around to it.
09:20:06 <fizzie> The rgb.txt names are somewhat nonsensical anyway.
09:20:58 <Vorpal> fizzie: rgb.txt?
09:21:22 <fizzie> The X11 color name list.
09:21:24 <Vorpal> ah
09:21:58 <Vorpal> yeah those tend to be nonsensical beyond the basic colours iirc.
09:22:32 <fizzie> 0,47,167,international klein blue
09:22:32 <fizzie> 255,79,0,international orange
09:22:36 <fizzie> Heh.
09:22:45 <Vorpal> 190 190 190gray
09:22:45 <Vorpal> 190 190 190grey
09:22:45 <Vorpal> 211 211 211light grey
09:22:45 <Vorpal> 211 211 211LightGrey
09:22:45 <Vorpal> 211 211 211light gray
09:22:46 <Vorpal> 211 211 211LightGray
09:23:01 <fizzie> It also has spelling variants, sure; and those numbered darker variants.
09:23:06 <elliott> 22:37:05: <fizzie> Hahah, I still have a ~/.gcolor/ directory which has 100 megabytes of them thumbnails -- I was trying to make it better by fetching various lists of defined colors (wikipedia color names, X11 rgb.txt) and using that for training data, so I wanted a local cache of the images.
09:23:12 <elliott> An remembering blast from the past courtesy past fizzie.
09:23:15 <Vorpal> 252 252 252 gray99
09:23:15 <Vorpal> 252 252 252 grey99
09:23:15 <Vorpal> 255 255 255 gray100
09:23:15 <Vorpal> 255 255 255 grey100
09:23:33 <fizzie> elliott: Ooh, I seem to have remembered right, then.
09:23:47 <fizzie> ~/.gcolor is gone now, though.
09:24:18 <elliott> http://sprunge.us/KiUL ;; Well, it's progress.
09:24:30 <elliott> It can now get the correct number of thumbnails for a given query, as (RGB) image arrays. :p
09:24:35 <Vorpal> <fizzie> 255,79,0,international orange <-- can't find that, which rgb.txt did you get that from?
09:24:42 <elliott> Oops, except I forgot to s/100/pics/ in one place.
09:25:10 <fizzie> Vorpal: Like I said, there were multiple sources. Those are from "colors.wikipedia.txt", I don't recall how I collected those.
09:25:18 <Vorpal> ah
09:25:26 <fizzie> http://en.wikipedia.org/wiki/List_of_colors maybe?
09:25:33 <fizzie> Yes, probably.
09:25:51 <fizzie> I'm not sure what's so international about that orange.
09:26:16 <fizzie> "Non-photo blue".
09:26:17 <elliott> fizzie: So how long is your Perl stuff? :P
09:26:24 <elliott> The one that actually worked, I mean.
09:26:26 <elliott> Not that MATLAB stuff.
09:26:27 <fizzie> Long.
09:26:46 <elliott> A specific answer indeed.
09:27:12 <fizzie> Almost 300 lines in all.
09:27:29 <elliott> Hokay, so I guess I want (Image -> RGB Word8) now.
09:27:42 -!- derdon has joined.
09:27:43 <elliott> fizzie: Aww, mine might actually end up longer, then.
09:28:30 <elliott> I wonder what I should do with that pesky alpha channel.
09:28:32 <elliott> Probably just ignore it.
09:28:49 -!- augur has quit (Remote host closed the connection).
09:28:51 <Patashu> leave it alone
09:32:11 <Vorpal> elliott: maybe ignore completely transparent pixels at least? Since those probably aren't part of the "image as such".
09:32:59 <elliott> Vorpal: Tooo much work.
09:33:06 <elliott> At least for now. :p
09:34:09 <elliott> No instance for (R.Elt (RGB Word8))
09:34:09 <elliott> arising from a use of `show'
09:34:10 <elliott> Augh
09:34:17 <elliott> repaaaaaaaaaaaaaaaaaaaaaaaaaaaa
09:35:29 * elliott just stores arrays of triplse instead
09:35:32 <elliott> GHETTO.
09:35:35 <elliott> s/triplse/triples/
09:39:19 <Vorpal> elliott: store it as (array of R, array of G, array of B)
09:39:46 <elliott> Vorpal: No, that's awful.
09:39:51 <Vorpal> right
09:39:53 <Vorpal> bbiab
09:40:29 <elliott> ?hoogle uncurry3
09:40:30 <lambdabot> No results found
09:40:59 <elliott> imageToHSV :: Image -> HSVImage
09:41:00 <elliott> imageToHSV (Image img) = HSVImage (R.map f img)
09:41:00 <elliott> where f = word . hsvView . (\(r,g,b) -> RGB r g b) . double
09:41:00 <elliott> double :: (Word8,Word8,Word8) -> (Double,Double,Double)
09:41:00 <elliott> double (r,g,b) = (fromIntegral r, fromIntegral g, fromIntegral b)
09:41:00 <elliott> word :: (Double,Double,Double) -> (Word8,Word8,Word8)
09:41:04 <elliott> word (h,s,v) = (round h, round s, round v)
09:41:08 <elliott> fizzie: Behold the ELEGANCE OF HASKELL.
09:43:22 <fizzie> How very.
09:43:23 <elliott> HASKELLEGANCE.
09:44:01 <elliott> I'm kind of way to write the (HSVImage -> RGB Word8) enflattener right now, so it shall SIT AND MATURE.
09:44:14 <elliott> But I shall be back to you very soon, dear code.
09:44:19 <elliott> s/way to/way too lazy to/
09:47:36 -!- augur has joined.
09:49:58 <Vorpal> elliott: new idea: store it as bitplanes for each colour, like [[(R1,G1,B1),...],[(R2,G2,B2),...],...]
09:51:00 <Vorpal> so the first "bitplane" contains the first bit of each colour, the second "bitplane" the second bit of each colour and so on
09:52:37 <elliott> fizzie: It's too bad the whole thing is so ridiculously IO-bound, or I'd TOTALLY thrash you in the benchmarks.
09:52:52 <elliott> (Also the "actually works with Google's current page" marks, which might be more important depending on your POV.)
10:00:01 <Vorpal> elliott: I guess it would even be pointless to download in the background of processing?
10:00:11 <elliott> Vorpal: Yes.
10:02:23 <elliott> Maybe I should just take the mean H, mean S, and mean V rather than bothering with, you know, all that fizzie magic. (My laziness cannot even be quantified.)
10:02:25 -!- ineiros has quit (Remote host closed the connection).
10:04:30 <Vorpal> not sure mean of those is all that useful though
10:05:14 <fizzie> At least for hue the regular mean is rather senseless, esp. for red images that straddle the 0/360 boundary.
10:06:11 <fizzie> For the other two the mean value could be something reasonable.
10:07:07 <elliott> fizzie can't even BEGIN to comprehend how lazy I am.
10:07:57 <fizzie> You do get a color our of it in any case, so in that sense it could work.
10:09:13 <elliott> [RGB {channelRed = 2.1418661116892126e-2, channelGreen = 2.122740927004503e-2, channelBlue = 2.122735673820327e-2},RGB {channelRed = 1.3108320251177395e-2, channelGreen = 1.2870692910211269e-2, channelBlue = 1.2870641916952748e-2},
10:09:21 <elliott> I... suspect something is going wrong.
10:10:17 <fizzie> Sounds quite black.
10:10:21 <elliott> Unless "hello world" really is just the blackest concept.
10:10:43 <Vorpal> it is so dark and grim you can't even begin to imagine
10:10:52 <fizzie> GRIMDARK.
10:11:02 <Vorpal> fizzie: where is that from now again?
10:11:13 <Deewiant> WH40K
10:11:17 <Vorpal> ah right
10:11:29 <Vorpal> wasn't there a gamed based on WH40K recently?
10:11:37 <Vorpal> computer game I meant
10:11:45 <Deewiant> Yes, and even more depending on what you mean by "recently"
10:11:57 <Vorpal> Deewiant: like, last 6 months.
10:12:09 <fizzie> One reasonable approach for the image->color case could be to take the mean (possibly in the RGB space, it doesn't have the hue discontinuity problem) of the most likely Gaussian distribution to have yielded the image pixels, considering each pixel as an independent sample.
10:12:30 <Deewiant> I think the second expansion to Dawn of War II came out within the last 6 months
10:12:32 <fizzie> Wait, that'd just be the mean. Never mind.
10:12:39 <Deewiant> Space Marine came out like a few weeks ago
10:12:48 <elliott> In the grim dark hello world there is only black.
10:12:58 <elliott> `addquote <fizzie> One reasonable approach for the image->color case could be to take the mean (possibly in the RGB space, it doesn't have the hue discontinuity problem) of the most likely Gaussian distribution to have yielded the image pixels, considering each pixel as an independent sample. <fizzie> Wait, that'd just be the mean. Never mind.
10:12:58 <Vorpal> Deewiant: ah yes I meant "space marine"
10:13:00 <HackEgo> 667) <fizzie> One reasonable approach for the image->color case could be to take the mean (possibly in the RGB space, it doesn't have the hue discontinuity problem) of the most likely Gaussian distribution to have yielded the image pixels, considering each pixel as an independent sample. <fizzie> Wait, that'd just be the mean. Never mind.
10:13:15 <fizzie> "You slip into the fabled blackdeath trance of the woegothics, quaking all the while in the bloodeldritch throes of the broodfester tongues. You advise the members of your Complacency not to be ala
10:13:15 <fizzie> rmed, as they chronicle the event in tomes bound in the tanned, writhing flesh of a tortured hellscholar, with runes stroked in the black tears bled from the corruption-weary eyes of fifty thousand imaginary occultists.
10:13:17 <elliott> Thank god mathematics exists to give us more and more complicated ways of defining the mean.
10:13:20 <fizzie> But they fail to not be alarmed.
10:13:21 <fizzie> This is because, as is now painfully obvious to anyone with a brain, you have basically gone completely off the deep end in every way.
10:13:25 <fizzie> You have officially gone grimdark."
10:13:30 <elliott> Oh no, I interrupted the quote.
10:13:42 <Deewiant> OH NO
10:13:44 <Vorpal> fizzie: that sounds lovecraftian
10:13:47 <fizzie> I managed to put a newline in the middle of "alarmed", so it was ruined anyhow.
10:14:00 * elliott weeps a tear for the newline.
10:14:03 <elliott> A tear for the newline, wept.
10:14:15 <fizzie> I don't think "as is now painfully obvious to anyone with a brain" sounds especially Lovecraftian.
10:14:39 <elliott> Also "basically gone completely off the deep end in every way".
10:14:48 <elliott> Then this Cthulhu dude came and everyone went WACK.
10:14:59 <elliott> It was, like, totally insane. Freakin' monster.
10:15:31 <Vorpal> fizzie: I meant the bit before
10:15:58 <elliott> I like how Vorpal devoted sixteen hours of his life to reading something he then promptly forgot and never picked up again.
10:16:13 <elliott> Would that we all learned to manage time and memory in such a garbage-collection-friendly manner.
10:16:15 <Vorpal> elliott: what do you refer to?
10:16:28 <fizzie> Vorpal: It's from the stuckhome.
10:16:36 <Vorpal> fizzie: oh right
10:16:47 <Vorpal> anyway, bbl university
10:17:27 <elliott> It occurs to me that maybe my imageToHSV isn't quite right.
10:17:58 <elliott> Specifically
10:18:03 <elliott> where f = word . hsvView . (\(r,g,b) -> RGB r g b) . double
10:18:06 <elliott> That truncation might be a bit iffy.
10:18:11 <fizzie> Anyway, maybe a GMM and then pick the mean of the highest-weight Gaussian, how would that sound like? It's almost like a soft clustering thing then.
10:18:42 <elliott> I should probably learn what HSV values tend to actually look like.
10:18:50 <elliott> I'm not a, you know, colour person.
10:19:24 <fizzie> It's not entirely well-established. The S and L components are often either [0, 1] or [0, 100] or [0, 255], while the H tends to be [0, 360].
10:19:34 <elliott> I should probably: check.
10:19:39 <fizzie> Or [0, 360) maybe.
10:20:18 <elliott> (126,1,62),(127,1,78),(131,0,119),(131,0,132),(129,1,57),(128,1,82),(126,0,112),(123,1,82),(116,1,97),(112,1,70),(110,1,76),(114,1,64),(126,1,79),(130,1,52),(125,1,46),(120,1,43),(120,1,18),(120,1,36),(112,0,125),(120,1,33),(120,1,51),(122,0,118),(120,1,39),(124,1,42),(126,0,74),(128,1,32),(120,1,8),(120,1,13),(120,1,25),(113,1,98),(117,1,54),(119,1,80),(120,1,67),(120,1,69),(116,1,46),(120,1,20),(106,
10:20:18 <elliott> 1,34),(100,1,54),(120,1,21),(102,1,68),(110,0,96),(120,1,19),(122,1,57),(123,1,100),(116,1,68),(117,0,95),(124,0,86),(120,1,41),(128,0,102),(128,0,106),(120,1,19),(124,1,44),(118,1,42),(120,1,21),(120,1,32),(120,1,16),(120,1,16),(120,1,24),(120,1,18),(120,1,20),(120,1,12),(120,1,22),(120,1,10),(120,1,11),(120,1,9),(120,1,11),(118,1,25),(120,1,11),(120,1,22),(120,1,14),(120,1,16),(120,1,22),(133,1,64),(
10:20:19 <elliott> 130,1,43),(133,0,107),(132,0,100),(127,1,41),(128,1,77),(128,0,92),(122,1,39),(12
10:20:31 <elliott> Uh.
10:20:38 <elliott> Is my S on a different scale to my V?
10:21:05 <fizzie> It certainly looks rather binary.
10:21:05 <elliott> (Also was it HSL or HSV you actually used, anyway? Da Log says HSV, but you know what past you is like.)
10:21:16 <elliott> fizzie: Well, it's post-perhaps-unclever-truncation.
10:21:18 <fizzie> HSV probably, though it doesn't really matter all that much.
10:21:28 * elliott makes HSVImages Double-componente.
10:21:29 * elliott makes HSVImages Double-componented.
10:23:02 <fizzie> It's also possible that your hsvView expects to get an RGB constructed from [0,1]-ranged values, while whatever you use for reading the image returns integers in the [0, 255] range.
10:23:26 <elliott> RGB {channelRed = 12, channelGreen = 57, channelBlue = 16},RGB {channelRed = 123, channelGreen = 122, channelBlue = 78},RGB {channelRed = 71, channelGreen = 95, channelBlue = 100},RGB {channelRed = 225, channelGreen = 227, channelBlue = 207},RGB {channelRed = 73, channelGreen = 181, channelBlue = 154},RGB {channelRed = 128, channelGreen = 123, channelBlue = 120},RGB {channelRed = 168, channelGreen = 17
10:23:26 <elliott> 9, channelBlue = 165},RGB {channelRed = 38, channelGreen = 73, channelBlue = 46},RGB {channelRed = 11, channelGreen = 17, channelBlue = 9},RGB {channelRed = 229, channelGreen = 237, channelBlue = 225},RGB {channelRed = 92, channelGreen = 117, channelBlue = 112},RGB {channelRed = 31, channelGreen = 32, channelBlue = 18},RGB {channelRed = 234, channelGreen = 244, channelBlue = 233},RGB {channelRed = 120,
10:23:27 <elliott> channelGreen = 133, channelBlue = 63}
10:23:34 <elliott> Eliminating the rounding seems to make everything 0kay.
10:23:45 <elliott> Though of course that's still the ridiculous "mean of H, S, V" method.
10:31:50 -!- ais523 has joined.
10:31:56 <elliott> hi ais523
10:32:33 -!- Phantom_Hoover has joined.
10:33:56 <elliott> hi Phantom_Hoover
10:34:52 <ais523> hi people who need hi saying to them
10:35:18 <elliott> hi
10:36:08 <Phantom_Hoover> hi ho, hi ho,
10:36:10 <monqy> hi
10:36:15 <elliott> hi
10:36:37 <Phantom_Hoover> monqy, so when are we doing that staring collaboration.
10:36:46 <fizzie> Hisayers are like a more positive breed of naysayers.
10:37:24 <monqy> all the time
10:37:30 <elliott> it's a lovely word, hi
10:37:31 <elliott> really lovely
10:37:37 <elliott> definitely, one of my top words
10:37:38 <elliott> in terms of
10:37:40 <elliott> words that i like
10:37:51 <monqy> hi is a Good Word
10:38:00 <elliott> hi
10:38:07 <monqy> hi
10:38:53 <elliott> hi
10:42:02 <Phantom_Hoover> elliott, what are other words that you like?
10:42:08 <Phantom_Hoover> 'Rabbit'?
10:44:08 <elliott> hi rabbit
10:52:12 -!- ais523 has quit (Read error: Connection reset by peer).
10:53:02 -!- ais523 has joined.
11:08:29 -!- derdon has quit (Remote host closed the connection).
11:11:42 <Phantom_Hoover> "The safest way through Mogadishu is escorted by Ethiopian and official Somalian troops, or African Union peacekeeping forces;"
11:11:45 <Phantom_Hoover> Best holiday.
11:17:56 <elliott> <ais523> [genuine concern]
11:18:44 <ais523> elliott: at what?
11:18:51 <elliott> <Phantom_Hoover> "The safest way through Mogadishu is escorted by Ethiopian and official Somalian troops, or African Union peacekeeping forces;"
11:18:51 <elliott> <Phantom_Hoover> Best holiday.
11:18:56 <ais523> ah, I see
11:19:24 <elliott> Something along the lines of "please don't go on holiday there".
11:19:55 <elliott> Where's oerjan when you need to complain to him about a deficiency in the Haskell report?
11:22:21 <elliott> ais523: can I have an asterisk?
11:22:34 <Phantom_Hoover> *
11:22:36 <ais523> *
11:22:39 <elliott> thanks
11:22:46 <elliott> would anyone like to buy an asterisk? I have one spare
11:23:01 <fizzie> Here, have three: ⁂
11:23:33 <fizzie> Any copy-paste systems around that could select a single asterisk of an asterism?
11:23:55 -!- FireFly has joined.
11:23:59 <ais523> probably not
11:26:18 <elliott> darn, I don't think zippers are monads
11:27:29 <elliott> perhaps not even applicatives
11:36:01 <Phantom_Hoover> Zippers are the things that tell you where stuff is, right/
11:36:28 <elliott> deep
11:36:46 <Phantom_Hoover> Where are we all, man?
11:37:07 <elliott> deep
11:39:29 <Phantom_Hoover> We're all just specks in that great zipper of the universe.
11:39:50 <elliott> What _are_ zippers, really?
11:39:55 <elliott> And what _is_ life?
11:40:17 <Phantom_Hoover> Life is an algebraic data structure, duh.
11:41:05 <elliott> Thanks, Conway.
11:41:36 <monqy> I think I remember reading something about zippers and comonads? I forget what or where it was.
11:41:36 <Phantom_Hoover> Hashlife is the key to existence.
11:41:56 <Phantom_Hoover> Comonads are monads the other way round, then?
11:42:27 <Phantom_Hoover> They are the least confusing thing ever, and tutorials on them are so scarce as to be nearly nonexistent.
11:42:32 <elliott> ?unmtl StaetT s Cont
11:42:32 <lambdabot> StaetT s Cont
11:42:39 <elliott> ?unmtl StateT s Cont
11:42:39 <lambdabot> err: `StateT s Cont' is not applied to enough arguments.
11:42:42 <elliott> ?unmtl StateT s Cont a
11:42:42 <lambdabot> err: `Cont (a, s)' is not applied to enough arguments, giving `/\A. (A -> (a, s)) -> (a, s)'
11:42:46 <elliott> ?unmtl StateT s (Cont r) a
11:42:47 <lambdabot> s -> (a -> s -> r) -> r
11:42:55 <elliott> ?unmtl ContT r (StateT s) a
11:42:55 <lambdabot> err: `StateT s r' is not applied to enough arguments, giving `/\A. s -> r (A, s)'
11:43:01 <elliott> >_<
11:43:03 <elliott> ?unmtl ContT r (State s) a
11:43:03 <lambdabot> (a -> s -> (r, s)) -> s -> (r, s)
11:53:25 * Phantom_Hoover → Ireland
11:53:27 -!- Phantom_Hoover has quit (Quit: Leaving).
11:58:45 -!- oerjan has joined.
11:59:13 <elliott> hi oerjan
11:59:19 <oerjan> hi elliott
11:59:36 <elliott> hi oerjan
11:59:51 * oerjan swats elliott -----###
11:59:56 <elliott> :'(
12:00:01 <oerjan> i mean hi
12:00:28 <elliott> :'(
12:01:28 <elliott> :t M.insertWith
12:01:29 <lambdabot> forall a k. (Ord k) => (a -> a -> a) -> k -> a -> M.Map k a -> M.Map k a
12:01:32 <oerjan> the beatings will continue until morale improves
12:01:39 <elliott> :'(
12:01:45 <elliott> im not going to stop the cry
12:03:16 <oerjan> <elliott> 10:03:57: <oerjan> ^bf --[>-<-------]>+.----.+.+++.+.-.---.
12:03:31 <oerjan> that looks distinctively short for oklopol
12:03:52 <oerjan> !bf --[>-<-------]>+.----.+.+++.+.-.---.
12:03:53 <EgoBot> oklopol
12:04:06 <oerjan> oh hm it's using wrapping
12:04:41 <oerjan> division by 7, bf_txtgen doesn't do that sort of thing
12:06:05 <oerjan> so basically it just starts with the optimal 'o', then adjusts that
12:06:57 -!- ineiros has joined.
12:07:02 <elliott> okokokokok
12:07:04 <elliott> kokokoko
12:07:06 <elliott> kpkps
12:07:09 <elliott> oklopol: im fail
12:09:17 <elliott> primitive ptr_to_int "unsafePtrToInt" :: a -> Int
12:09:17 <elliott> bothtruth2:: Bool -> Bool -> Bool
12:09:17 <elliott> bothtruth2 a b = a `seq` b `seq` (ptr_to_int a - ptr_to_int False) +
12:09:17 <elliott> (ptr_to_int b - ptr_to_int False) ==
12:09:17 <elliott> 2*(ptr_to_int True - ptr_to_int False)
12:09:18 <elliott> hi oerjan
12:10:19 <oerjan> <elliott> Where's oerjan when you need to complain to him about a deficiency in the Haskell report?
12:10:22 <oerjan> slepping
12:10:52 <elliott> YOU'RE a slep
12:12:14 <monqy> im a slep
12:12:17 -!- monqy has quit (Quit: hello).
12:12:54 <elliott> rip monqy "a slep"
12:14:45 <elliott> why can't every OS have @'s IO system :(
12:14:59 -!- oerjan has quit (Quit: Help I'm abducted by the reboot mafia).
12:18:18 <elliott> ais523: you missed a spam link
12:18:23 <elliott> in WLaquitaCuevasa
12:18:34 <ais523> go fix it for me, if you want the page around so much
12:18:41 <elliott> I'm doing so
12:18:43 <elliott> I was just letting you know
12:18:58 <elliott> oh, hmm, actually you didn't
12:19:04 <ais523> why do you like the page, btw? because it's almost ontopic?
12:19:14 <elliott> because it's amazing
12:19:19 <elliott> "However, some builders of Python and other languages disrespect PHP developers and deal with us like children of a lesser God. I have previously witnessed some Python developers particularly engaging in dislike speech towards PHP builders, in all probability because they do not have an understanding of why PHP received so well-known."
12:19:28 <elliott> i want to know who wrote this pro-php rant
12:19:44 <elliott> and also, who thought it'd be helpful for spam in any way whatsoever
12:19:49 <ais523> I think it's the same spambot that was spamming Google
12:19:57 <ais523> as in, "Google is a search engine http://google.com"
12:20:01 <ais523> not exactly like that, but close
12:20:04 <elliott> useful information
12:20:35 -!- oerjan has joined.
12:21:53 <elliott> helo oerjan
12:21:59 <oerjan> ehlo elliott
12:22:39 -!- Jafet has quit (Ping timeout: 276 seconds).
12:23:11 <elliott> I should read up on how GHC's event manager thing works, I wonder how similar it is to @ IO
12:24:30 -!- derdon has joined.
12:25:04 <oerjan> that would depend how much you steal from it, i think
12:25:29 <fizzie> oerjan: You might consider only using the EHLO verb if the greeting included the "ESMTP" string, that way you won't hit so many problems with old-fashioned IRCers that don't understand it.
12:25:42 <oerjan> fizzie: ah.
12:26:14 <oerjan> i don't think elliott counts as an old-fashioned IRCer, anyhow
12:26:37 <elliott> hi
12:26:42 <oerjan> de ho
12:26:57 -!- derdon has quit (Remote host closed the connection).
12:27:38 <fizzie> oerjan: Well, he didn't list the extensions he supported after your EHLO. Though I suppose it could be he only implements the mandatory commands.
12:28:07 <oerjan> ic
12:28:28 <elliott> whats a really dumb mail server that doesnt know a lot and forgets messages a lot, im that mails erver
12:29:19 <fizzie> If you were often infested by worms, I'd say Sendmail.
12:29:23 <elliott> o
12:30:42 <fizzie> Maybe "has opinions and is not afraid to share them" qmail could fit.
12:31:04 <ais523> elliott: cat
12:31:13 <ais523> admittedly, it's not very good as a mailserver at all
12:31:26 <ais523> but it succeeds at "really dumb", "doesn't know a lot", and "forgets messages a lot"
12:31:31 <elliott> i like cats
12:31:57 <fizzie> "cat --herd" should do something.
12:32:07 <elliott> implementing lambda without lambda is a difficult :(
12:32:41 <fizzie> Uh, GNU cat accepts the options AbeEnstTuv. That's a lot of options for a cat.
12:32:42 <ais523> elliott: you're getting dangerously close to my current Feather problem there
12:33:12 <elliott> cat --meow
12:33:21 <elliott> ais523: well, I think I've managed to do it
12:33:39 <ais523> what did you implement it in terms of?
12:34:11 <elliott> vau, if, eq?, quote, (), cons, car, cdr, eval
12:35:06 <elliott> hmm... you could eliminate quote if you made () self-evaluating :)
12:35:17 <ais523> what does vau do again?
12:35:19 <oerjan> they should expand to Abel Ernst Tuv so that it sounds like a norwegian name
12:35:59 <elliott> ais523: construct fexprs; they're like functions, but they receive their arguments as code, not evaluated
12:36:09 <elliott> or, in other words, a function is an fexpr that receives all its arguments pre-evaluated
12:36:22 <ais523> aha, so it's a generalisation on top of call by name
12:36:41 <elliott> it's similar; you can't deconstruct the ast of your argument in most call-by-name languages, though :)
12:36:45 <ais523> because as well as evaluating 0, 1 or more times, you can choose to do other things instead
12:36:51 <fizzie> oerjan: Unfortunately it would then be AbeElnrstTuv, because they insist on alphabetical order.
12:36:53 <elliott> and with vau you have to explicitly eval, it's never "implicit"
12:36:57 <elliott> although that's more of a library thing
12:37:00 <oerjan> um call by name preserves scoping, doesn't it, which is more than passing things unevaluated...
12:37:29 <elliott> well, vau is hygienic by default in kernel
12:37:32 <oerjan> aha
12:37:38 <elliott> it gets an environment parameter
12:37:50 <elliott> obviously you can break the hygiene since you can evaluate anything in the environment
12:37:55 <elliott> but it doesn't just throw away the scope
12:38:00 <elliott> I think you can make it unbreakably hygienic
12:38:27 <elliott> but I'm not sure that pays off
12:38:50 <elliott> ais523: wow, the IE in Windows 8 isn't going to support plugins
12:39:10 <ais523> does IE9 in Windows 7 support plugins? IIRC yes but hardly anyone uses them
12:39:13 <elliott> well, the Metro IE, but afaict Microsoft wants absolutely everyone to use Metro (it's that tablet-esque UI)
12:39:27 <elliott> ais523: Yes, absolutely nobody uses Adobe Flash or Acrobat Reader.
12:39:32 <elliott> Oh, wait, sorry, no, everyone does.
12:39:37 <ais523> oh right, that sort of plugin
12:39:42 <ais523> I thought you meant add-on, Firefox-style
12:39:45 <elliott> ah
12:39:59 <ais523> to be fair, Acrobat works just as well outside the browser as inside, and arguably better
12:40:11 <elliott> Acrobat works terribly everywhere, but that's not really the point :P
12:40:13 <ais523> the keyboard controls are much clearer as you don't have two programs competing with each other
12:40:17 * elliott wonders if Microsoft are deliberately trying to annoy as many people as possible
12:40:41 <ais523> the thing that amuses me about Metro is that Microsoft have seen Ubuntu going down the path of a UI everyone hates, and decided to copy it
12:40:42 <elliott> I mean, they just disabled Adobe's two most popular products
12:40:52 <ais523> not completely, but the same sort of idea
12:40:57 <fizzie> Our local Ubuntu installation has changed so that PDFs now open inside the browser; it works for one (1) PDF, after that it only opens a blank window.
12:40:58 <oerjan> it is somewhat annoying that ^W doesn't work inside the reader
12:42:32 <ais523> Flash is mostly used for video nowadays, rather than its original intended purpose
12:42:59 <ais523> so I suppose that replacing that with HTML5 could work, but IIRC Microsoft's implementation of HTML5 video is incompatible with other browsers' due to an argument over standards
12:43:02 <elliott> Damn that PH going off to Ireland, I can't contract him for hire to write my Haskell for me now.
12:43:23 * ais523 vaguely considers a "take that back!" comment
12:43:29 <fizzie> I still see flash-for-navigation-and-content-and-everything sites here and there.
12:43:30 <ais523> but I think we came to an agreement about that already
12:43:33 <elliott> ais523 is going to call this excessive, but it is very much deserved.
12:43:38 <elliott> Aww, too slow.
12:43:48 <elliott> Sorry PH I take it back your damnation is undone.
12:43:54 <elliott> You will instead go to puppy heaven.
12:44:03 <fizzie> Why was my first, immediate thought after "Damn that PH going off to Ireland, I can't contract him for hire to" that "oh, it's about an assassination"?
12:44:04 <ais523> fizzie: I don't, mostly because I literally wouldn't notice
12:44:26 <elliott> fizzie: Well, it /is/ me.
12:44:38 <fizzie> ais523: I've had the occasion to browse websites of hotels; quite many of those are, with no fallbacks.
12:44:42 <ais523> the name "Scots" comes from an Irish tribe
12:44:49 <ais523> fizzie: how bizarre
12:45:13 <ais523> normally when I come across a site like that, I just think "it's broken", and possibly enable JS experimentally if I really care badly about viewing the site
12:46:43 <ais523> I suppose I should make a list of what HTML features I consider as "generally makes a website look nicer/easier to read" and "generally annoys me"
12:46:53 <ais523> I think even <img> is sort-of on the borderline ther
12:46:55 <ais523> *there
12:47:04 <ais523> seeing images is important on many sites, but I don't like the unnecessary overuse of them
12:47:15 <ais523> on most webforums, I use AdBlock Plus to block avatars
12:47:29 -!- MSleep has changed nick to MDude.
12:47:34 <elliott> most forums let you disable display of avatars natively
12:47:50 <ais523> that requires having an account there
12:48:09 <elliott> not necessarily, you could just steal one
12:48:54 <ais523> *that requires being logged in there
12:50:09 -!- DH____ has joined.
12:51:32 <fizzie> I'm tempted to go all "not necessarily, some may stuff options into a permacookie".
12:51:50 <elliott> vacuum has some really terrifying types
12:52:42 <oerjan> but at least there's no pressure to make you use them
12:52:54 <elliott> vacuum :: a -> IntMap HNode
12:52:54 <elliott> Vacuums the entire reachable heap subgraph rooted at the a.
12:52:54 <elliott> vacuumTo :: Int -> a -> IntMap HNode
12:52:54 <elliott> Stop after a given depth.
12:52:54 <elliott> getClosure :: a -> IO Closure
12:52:56 <elliott> getInfoPtr :: a -> Ptr StgInfoTable
12:52:58 <elliott> AHHH YES THANK YOU FOR THE NIGHTMARES
12:53:03 <elliott> at least getClosure is in IO
12:53:09 -!- ais523 has quit (Remote host closed the connection).
12:53:23 -!- ais523 has joined.
12:53:28 <ais523> `log deployment
12:53:33 <HackEgo> 2011-02-02.txt:22:59:14: <fizzie> Ilari: Oh, and there's a set of TeliaSonera "IPv6 Deployment Plans" slides from RIPE-49 (September 2004) that say "We want to have support for IPv6 in all of our IP Networks both Mobile and Fixed within two years". :p
12:53:36 <ais523> `log deployment
12:53:40 <HackEgo> 2007-07-18.txt:05:12:03: <toBogE> #esoteric is a channel on irc.freenode.net. The topic is '+++++++++++++++[>++++++>+++++++>+++++++>++<<<<-]>------.>>-.---.>++.<<.+++++.++++++.>.<--.----.<+++++++++++++.>++++++.>++++.++++++.-.<<.>>--.>.<----.<+.<+.>>>.<--.<------.+++. esoteric programming language design and deployment'
12:53:41 <elliott> `? welcome
12:53:43 <HackEgo> Welcome to the international hub for esoteric programming language design and deployment! For more information, check out our wiki: http://esolangs.org/wiki/Main_Page
12:53:53 <ais523> just wanted to make sure I had the wording right
12:54:03 <elliott> for what?
12:54:18 -!- ais523 has set topic: Freudian armchair psycho-babble | It is the 90s and there is time for an international hub for esoteric programming language design and deployment @ Hel/Finland on 3.10.2011: https://wiki.helsinki.fi/display/lambda/esoteeriset+ohjelmointikielet | god bless haskell america | 12345678!& | http://codu.org/logs/_esoteric/.
12:54:26 <oerjan> !bf +++++++++++++++[>++++++>+++++++>+++++++>++<<<<-]>------.>>-.---.>++.<<.+++++.++++++.>.<--.----.<+++++++++++++.>++++++.>++++.++++++.-.<<.>>--.>.<----.<+.<+.>>>.<--.<------.+++.
12:54:26 <EgoBot> The international hub for
12:54:26 <ais523> the topic had been like that for too long
12:54:57 <ais523> hah, is the 12345678!& bit in the topic for elliott to copy/paste from?
12:55:19 <oerjan> correct
12:55:20 <elliott> maybe
12:55:48 <ais523> !bf_txtgen 1234567*!&
12:55:51 <EgoBot> ​66 ++++++++++[>+++++>++++>+++>+<<<<-]>-.+.+.+.+.+.+.>++.>+++.+++++.>. [838]
12:55:58 <ais523> I wonder what the best algo for bf_txtgenning is
12:56:01 <fizzie> oerjan: Delayed groan.
12:56:05 <ais523> that one definitely isn't it
12:56:15 <oerjan> fizzie: i thought no one got it...
12:56:30 <elliott> ais523: pebble does fairly well, I think
12:56:37 <elliott> there's provably no best algorithm though, I think
12:56:42 <ais523> also, what was toBogE? I've forgotten
12:56:44 <fizzie> (Delay was due to a visiting supervisor.)
12:56:48 <elliott> bad
12:56:58 <fizzie> Seems like an evil clone of EgoBot from the mirror universe.
12:56:59 <elliott> oerjan: i just ignored
12:57:05 <oerjan> O KAY
12:57:33 <ais523> elliott: well, depends on what you mean by "best"
12:57:33 <ais523> but yes, brute-force works up to the point your termination-tester stops working
12:57:37 <elliott> it was immibis, enough said
12:57:39 <HackEgo> ​<zzo38>? ¯\(°_o)/¯
12:57:42 <oerjan> <ais523> I wonder what the best algo for bf_txtgenning is <-- kolmogorob complexity, dude
12:57:45 <oerjan> *v
12:57:51 <ais523> `? <alise>
12:57:52 <HackEgo> ​<alise>? ¯\(°_o)/¯
12:57:59 <elliott> ais523: what are you doing?
12:58:01 <ais523> oh, is that an error message
12:58:05 <ais523> elliott: trying to get random log lines
12:58:09 <elliott> ais523: with the learndb?
12:58:11 <oerjan> FAIL
12:58:11 <ais523> yep
12:58:14 <ais523> ah, I see
12:58:18 <ais523> `log <alise>
12:58:22 <HackEgo> 2010-08-23.txt:02:17:05: <Vorpal> <alise> and i have 0 interest in windows compatibility <--- wait, didn't you say cfunge was stupid because it didn't support windows at one point
12:58:26 <ais523> `log <zzo38>
12:58:30 <HackEgo> 2010-08-22.txt:02:29:39: <zzo38> I think the fundamental feature is connecting to the IRC server?
12:58:33 <ais523> haha, the one from you wasn't even by you
12:58:39 <ais523> `log <alise>
12:58:42 <HackEgo> 2010-08-31.txt:15:29:35: <alise> std, I think.
12:58:53 <ais523> `log <cpressey>
12:58:56 <HackEgo> 2010-10-25.txt:19:37:58: <cpressey> Mental note: Punxsutawney: avoid.
12:59:08 <fizzie> !bf +++++++++++++++[>++++++>++>+++++++>+++++++>++++++++>+++++++<<<<<<-]>------.>>-.---.<++.>>.+++++.>----.<<.>>--.<.<----.>>++.>.<<+.-.<.>--.<<.>>>>-.<+.<<+.<.>++++.>+++.+++.
12:59:08 <EgoBot> The international hub for
12:59:15 <fizzie> Slightly shorter with "-t 6".
12:59:17 <elliott> `ls wisdom
12:59:33 <ais523> `? qdb
12:59:35 <HackEgo> qdb is used like: `quote regexp; `quote id; `addquote ...; `delquote id; `pastequotes regexp; `pastenquotes [n]; see also qdbformat
12:59:35 <elliott> ais523: quick, write yourself a one-line biography
12:59:41 <oerjan> !bf ++++++++[->+>++++++<<]>[->.+<]
12:59:42 <EgoBot> 01234567
12:59:44 <ais523> does it have to be accurate?
12:59:47 <elliott> ais523: no
12:59:49 <oerjan> !bf ++++++++[->+>++++++<<]>[->+.<]
12:59:49 <EgoBot> 12345678
12:59:55 <ais523> and how do you add qdb entries?
12:59:56 <elliott> `learn qdb is used like: `quote; `quote regexp; `quote id; `addquote ...; `delquote id; `pastequotes regexp; `pastenquotes [n]; see also qdbformat
12:59:57 <HackEgo> I knew that.
13:00:02 <elliott> ais523: addquote
13:00:15 <ais523> umm, I meant bio/learndb entries
13:00:24 <ais523> even though that's not what I said
13:00:43 <elliott> there is a hint in the past few lines :P
13:00:56 <elliott> also enlightening:
13:00:58 <elliott> `cat wisdom/wiki
13:00:59 <HackEgo> The wiki is at http://esolangs.org/wiki
13:01:07 <elliott> (note first word differing from topic)
13:01:10 <ais523> ah, hmm, you have to echo the file in by hand?
13:01:15 <elliott> ...
13:01:16 <elliott> <elliott> `learn qdb is used like: `quote; `quote regexp; `quote id; `addquote ...; `delquote id; `pastequotes regexp; `pastenquotes [n]; see also qdbformat
13:01:19 <elliott> you _are_ blind, right?
13:01:24 <ais523> that explains how to use the qdb
13:01:32 <ais523> that's not the same thing as the learndb, is it?
13:01:36 <elliott> /facepalm
13:01:39 <elliott> oerjan: facepalm time
13:01:43 <ais523> oh, the see also
13:01:44 <elliott> synchronised facepalming gogogo
13:01:47 <elliott> ais523: facepalm
13:01:49 <ais523> `? qdbformat
13:01:50 <HackEgo> qdbformat is: <nick> message; * nick action; two spaces between messages; all elisions marked with [...] other than irrelevant intervening messages; for messages separated by elision, one space on each side, not two
13:01:56 <ais523> wait, no
13:01:57 <elliott> you have _no idea_ how hard i am facepalming
13:02:07 <fizzie> Three-hand facepalm time?
13:02:11 <elliott> Yes.
13:02:13 <elliott> Make it happen.
13:02:28 <ais523> elliott: whatever you think the obvious clue is, I can't see it
13:02:40 <fizzie> ais523: The "`learn" part, perhaps?
13:02:43 <ais523> also, there's a subversion of the "two spaces between messages" in there somewhere, I used a sequence of Unicode spaces that added up to two
13:03:02 <ais523> fizzie: well, HackEgo wasn't responding in any useful way
13:03:28 <ais523> `learn ais523 ais523 is ais523. This topic may retroactively become more informative if or when Feather is invented.
13:03:30 <HackEgo> I knew that.
13:03:34 <elliott> fail
13:03:46 <elliott> `? ais523
13:03:48 <HackEgo> ais523 ais523 is ais523. This topic may retroactively become more informative if or when Feather is invented.
13:03:54 <elliott> or is your name "ais523 ais523"? :P
13:04:07 <ais523> wait, that error message is singularily useless
13:04:11 <ais523> given that it happens even on success
13:04:14 <ais523> `learn ais523 is ais523. This topic may retroactively become more informative if or when Feather is invented.
13:04:15 <HackEgo> I knew that.
13:04:18 <elliott> ais523: who says it happens on failure?
13:04:20 <ais523> `? ais523
13:04:22 <HackEgo> ais523 is ais523. This topic may retroactively become more informative if or when Feather is invented.
13:04:26 <ais523> elliott: it looks like a failure message
13:04:40 <elliott> ais523: the bug is your preconceptions :)
13:04:51 <elliott> `forget ais523
13:04:53 <HackEgo> Forget what?
13:04:56 <elliott> `learn ais523 is ais523. This topic may retroactively become more informative if or when Feather is invented.
13:04:58 <HackEgo> I knew that.
13:05:00 <elliott> See, it's very consistent.
13:05:02 <ais523> pretty much every learndb bot I've ever seen has actually given useful messages
13:05:11 <ais523> NO THAT DOES NOT COUNT AS USEFUL
13:05:12 <elliott> ais523: this is #esoteric, we do things differently around here
13:05:59 <ais523> I still don't think it's reasonable to expect me to deduce how the bot works from a sequence of misleading and unhelpful messages
13:07:13 <ais523> I think #nethack's qdb and learndb are both better
13:08:05 <elliott> what's wrong with our qdb?
13:08:22 <oerjan> `learn oerjan, Your future evil overlord, is an expert in lazy computation.
13:08:24 <HackEgo> I knew that.
13:08:27 <oerjan> `? oerjan
13:08:29 <HackEgo> oerjan is just zis guy, you know?
13:08:32 <oerjan> wat
13:08:41 <oerjan> i thought there was a syntax for that
13:08:46 <oerjan> `? oerjan,
13:08:47 <HackEgo> oerjan, Your future evil overlord, is an expert in lazy computation.
13:08:52 <oerjan> `forget oerjan,
13:08:54 <HackEgo> Forget what?
13:08:59 <elliott> oerjan: try echo :P
13:09:11 <elliott> learn is not going to start parsing punctuation to figure out what you mean
13:09:21 <elliott> "`run echo '...' >wisdom/x" works for non-standard usage
13:09:27 <oerjan> elliott: i had somehow got the impression it already did
13:09:38 <elliott> ais523: anyway, what's wrong with our qdb?
13:10:00 <ais523> well, the one for #nethack (and related channels) is http://qdb.rawrnix.com
13:10:05 <ais523> which seems to be running the same software as bash.org
13:10:15 <ais523> so it has things like voting on quotes, etc
13:10:17 <elliott> ais523: that's clearly inferior to an irc-based system for convenience
13:10:27 <ais523> there's an IRC-based system linked to it
13:10:28 <oerjan> `run echo "Your future evil overlord oerjan is an expert in lazy computation." >wisdom/oerjan
13:10:30 <HackEgo> No output.
13:10:37 <oerjan> `? oerjan
13:10:39 <HackEgo> Your future evil overlord oerjan is an expert in lazy computation.
13:10:51 <fizzie> Also "voting", what are we, a democracy?
13:10:53 <elliott> oerjan: I distinctly prefer the older version :P
13:11:03 <oerjan> elliott: KNEEL, SCUM
13:11:08 <ais523> fizzie: well, it's more for identifying which are actually good
13:11:17 <oerjan> or rebel, whatever
13:11:18 <elliott> ais523: we have a system to do that, it's called `delquote
13:11:48 <nooga> oh
13:11:50 <ais523> elliott: but there's more shades of good in quotes than true and false
13:11:50 <nooga> that again
13:11:55 <ais523> `log <nooga>
13:11:58 <HackEgo> 2007-02-22.txt:15:44:55: <nooga> what is V?
13:12:01 <elliott> ais523: we specialise in only the best
13:12:11 <elliott> `pastequotes
13:12:12 <HackEgo> http://codu.org/projects/hackbot/fshg/index.cgi/raw-file/tip/paste/paste.21755
13:12:14 <ais523> but the less good ones that are still good can be fun to read too
13:12:25 <elliott> I wonder if quote one will ever be deleted
13:12:37 <elliott> it's not very funny, but it would feel wrong
13:12:52 <ais523> it's more funny than most of them
13:12:58 <elliott> No it's not.
13:13:04 <ais523> especially the early ones, most aren't very good at all
13:13:14 <elliott> The recent ones have been pretty consistently funny, IMO.
13:13:19 <oerjan> <ais523> I think #nethack's qdb and learndb are both better <-- suddenly ais523 somehow resembles zzo
13:13:32 <elliott> Anyway, adding new good quotes is far superior to decreasing the visibility of bad ones.
13:13:45 <ais523> `quote 109
13:13:46 <fizzie> oerjan: You just reminded me of http://www.ozyandmillie.org/d/20020318.html
13:13:47 <HackEgo> 109) <ais523> let's put that in the HackEgo quotes files, just to completely mystify anyone who looks back along them in the future
13:13:53 <elliott> `quote
13:13:55 <HackEgo> 326) <oklopol> okay see in my head it went, you send from your other number smth like "i'd certainly like to see you in those pink panties again" and she's like "WHAT?!? Sgeo took a pic?!?!?! that FUCKING PIG"
13:13:59 <elliott> `quote
13:14:00 <HackEgo> 113) <Warrigal> I seem to think of coaxial cables as being omnipotent somehow.
13:14:02 <elliott> `quote
13:14:04 <HackEgo> 141) <fungot> AnMaster: to any airbus plane. 3 passengers sadly died the most awesome thing ever.
13:14:11 <elliott> See, a fungot quote in three.
13:14:15 <elliott> That's quality.
13:14:22 <elliott> `quote
13:14:23 <HackEgo> 185) <alise> Phantom_Hoover: Don't be nasty; he's a lunatic, not a murderer.
13:14:27 <elliott> fizzie: Also the fungot; where is it.
13:14:28 <ais523> it's not as good as most of the other fungot quotes in there
13:14:31 <elliott> `quote
13:14:33 <HackEgo> 619) <fizzie> I tend to debase64 with perl -MMIME::Base64 -e 'print decode_base64("...");', because at least PERL stands for "PERL ein't-no ruddy-poo lol-GNU".
13:14:41 <elliott> `quote
13:14:42 <HackEgo> 609) <fizzie> They're (according to current plans/rumours) going to release a grand total of approximately 1.1 MeeGo devices; the N9, plus the N950 "developers only" phone, which I'm counting as 0.1 because (even though it is a MeeGo device) it's not going to actually be released.
13:14:56 <fizzie> It has gone -> RAW >>> :leguin.freenode.net NOTICE fungot :Server Terminating. Received SIGTERM <<<
13:14:57 <elliott> well, /I/ laughed
13:15:08 <elliott> `quote
13:15:09 <ais523> fizzie: that's, umm, bizarre
13:15:10 <HackEgo> 67) <oklopol> hmm, this is hard
13:15:13 <ais523> fungot killed the server?
13:15:14 <elliott> `quote
13:15:16 <HackEgo> 446) <oklopol> so about jacuzzis, do they usually have a way to make it it not heat but freeze the water?
13:15:19 <elliott> `quote
13:15:21 <HackEgo> 615) <zzo38> I think Perl is a programming language too. [...]
13:15:26 <elliott> ais523: we just need to filter out all the old quotes
13:15:31 <elliott> or at least bias heavily against them
13:15:35 <ais523> `quote 135
13:15:37 <HackEgo> 135) <alise> like, just like I'd mark "Bob knob hobs deathly poop violation EXCREMENT unto;" as English <ais523> alise: that's great filler <alise> ais523: well it contains all the important words in the english language...
13:15:40 <elliott> /or/, add a bunch of new quotes so that we're more likely to get new ones
13:15:40 <ais523> the best quote there
13:15:49 <elliott> ridiculous, there are far better quotes
13:15:50 <fizzie> ais523: Freenode killed the server, I believe. That's a notice from the server to fungot about it.
13:16:08 -!- fungot has joined.
13:16:24 <elliott> `quote arrow
13:16:25 <HackEgo> 663) <Gregor> You know how the arrow pierces your skin, rearranging and randomizing vital internal structure? <Gregor> Monads are like that, only worse.
13:16:38 <ais523> `quote 188
13:16:40 <HackEgo> 188) <alise> "Europe is the national anthem of the Republic of Kosovo." <cpressey> alise: I <cpressey> I was going to say something then your last line floored me
13:16:42 <ais523> I like that too
13:17:48 <elliott> `quote
13:17:49 <HackEgo> 147) <oerjan> alise: mainly it's the fact it blows so hard i cannot avoid hitting the walls of the thing, which completely goes against my basic public toilet hygiene principles
13:17:56 <elliott> also, we need to get cpressey back in here
13:18:01 <fizzie> `quote 208
13:18:02 <HackEgo> 208) <fungot> ais523: my nose feels like a bad heuristic
13:18:03 <elliott> having time to actually do things be damned
13:18:11 <elliott> <ais> take that back
13:18:27 <ais523> daming abstract concepts doesn't really make sense at all
13:18:41 <elliott> daming
13:18:46 <elliott> making them become dames?
13:18:52 <ais523> *damning
13:19:14 <elliott> 602) <monqy> im sampling ultra hip holiday <monqy> hes the boogie woogie santa clause <monqy> switching to oktoberfest <monqy> yes i would love to shop to this
13:19:14 <elliott> See, these are quality quotes.
13:19:22 <ais523> `quote 288
13:19:24 <HackEgo> 288) <zzo38> ais523: Maybe it is better, because I don't think the octopus will live very well in the tree. But the difference is that the Internet is lying and you cannot see such things; you could make modified picture, though, in order to lie more clearly, at least.
13:19:28 <ais523> that's probably the best zzo one
13:19:29 <elliott> As long as monqy is here we will have a guaranteed supply of above-average quotes for the rest of our lifetimes.
13:19:50 <elliott> 606) <Vorpal> elliott_, oh they are people known in the ruby community? <elliott_> Vorpal: Uh... you mean Hannah Montana? <Vorpal> elliott_, yeah. And Zed Shaw. Either they are that or they come from popular culture.
13:19:55 <elliott> Also, as long as Vorpal is here.
13:20:06 <ais523> `quote 300
13:20:08 <HackEgo> 300) <Deewiant> My STRN.G detects runoff strings that haven't been terminated but would hit a zero after wrapping and tries to allocate the 16+-gigabyte-stack required
13:20:13 <ais523> I like that one because of the thought involved
13:20:33 <ais523> just like implementing the + in HQ9+, but more awesome
13:20:38 <elliott> 648) <itidus20> according to physics and maths can we theoretically have a box with infinite cookies inside?
13:20:38 <elliott> Also iti.
13:21:58 <oerjan> itidus20: sadly, no. it would collapse into a black hole.
13:22:22 <elliott> 610) <monqy> game where you flip a coin but it's really really big
13:22:22 <elliott> GOOD. QUOTES.
13:22:44 <coppro> are we sure that the accumulator in HQ9+ is program-specific?
13:22:58 <oerjan> coppro: ooh
13:23:05 <elliott> 574) <Phantom_Hoover> What is it with Cardassians, they're all really nice and then they hit you with a rock.
13:23:06 <elliott> QUALITY
13:23:07 <elliott> QUOTES
13:23:08 <elliott> coppro: oh my
13:23:50 <oerjan> it's all in the "ass" part
13:24:58 <elliott> coppro: I'm trying to think of a suitable substrate to implement global HQ9+ on, now
13:25:28 <elliott> I know there's plenty of substrates that let you insert data immutably and address it by hash globally, but are there any that permit a mutable reference?
13:25:41 <elliott> I mean, that are properly distributed beyond just being "an HTTP server".
13:25:52 <elliott> I don't think freenet or Tor or anything offer that.
13:27:07 -!- Zuu has quit (Ping timeout: 244 seconds).
13:27:23 <elliott> V. disappointed that you're not all looking into this for me.
13:28:23 <ais523> just write it in Network Headache?
13:28:47 <ais523> (fun question: can an HQ9+ interp be written in Network Headache that always works regardless of what other programs are doing? my guess is no, but I'm not sure)
13:28:55 <elliott> but there isn't a proper Network Headache implementation, either
13:28:58 <elliott> it needs the same sort of substrate
13:30:06 <ais523> just write a self-interp, then push the lack of decentralized control backwards to infinity
13:30:11 <ais523> (note: wouldn't actually work even in Feather)
13:30:47 <ais523> `quote 460
13:30:49 <HackEgo> 460) <ais523_> meanwhile, I've been running a program for over 24 hours (getting close to 48 now) which is calculating digits of pi, in binary <ais523_> so far, it has found four digits <ais523_> I hope it will find the fifth some time this week
13:30:50 <ais523> ah, the nostalgia
13:30:59 <elliott> did it?
13:31:05 <ais523> no, the computer crashed first
13:31:08 <elliott> nice
13:33:16 <ais523> `quote 526
13:33:18 <HackEgo> 526) <Vorpal> ais523, how are we supposed to guess before you tell us unless you give us more hints?
13:33:20 <ais523> secret project reference?
13:33:28 <elliott> yes
13:33:41 <elliott> hmm... I think tahoe-lafs may implement the necessary operations to allow Cloud HQ9+
13:33:46 <ais523> I need to start working on that again at some point
13:34:02 <ais523> hopefully implementing UNIX sockets will be enough to get pulseaudio to work
13:34:26 <elliott> I'm, umm, not sure there's a "main" tahoe-lafs network nowadays though
13:34:41 <elliott> ISTR the test grid was shut down
13:34:46 <ais523> `quote 549
13:34:48 <HackEgo> 549) <monqy> beautiful summer / fuck fuck fuck fuck fuck fuck fuck / fuck fuck fuck fuck fuck
13:34:50 <ais523> wow, I remember that
13:34:57 <elliott> `log beautiful summer / fuck fuck fuck fuck fuck fuck fuck / fuck fuck fuck fuck fuck
13:35:00 <HackEgo> 2011-09-15.txt:13:34:57: <elliott> `log beautiful summer / fuck fuck fuck fuck fuck fuck fuck / fuck fuck fuck fuck fuck
13:35:01 <elliott> maybe because it was mere weeks ago
13:35:07 <ais523> possibly the best haiku ever mentioned in this channel
13:35:10 <elliott> HackEgo...
13:35:16 <elliott> `log beautiful summer / fuck fuck fuck fuck fuck fuck fuck / fuck fuck fuck fuck fuck
13:35:19 <HackEgo> 2011-09-15.txt:13:34:57: <elliott> `log beautiful summer / fuck fuck fuck fuck fuck fuck fuck / fuck fuck fuck fuck fuck
13:35:23 <elliott> oh for chrissakes
13:35:31 <elliott> `log fuck fuck fuck fuck fuck fuck fuck
13:35:34 <HackEgo> 2011-09-15.txt:13:34:48: <HackEgo> 549) <monqy> beautiful summer / fuck fuck fuck fuck fuck fuck fuck / fuck fuck fuck fuck fuck
13:35:40 <elliott> :'(
13:35:41 <elliott> `log fuck fuck fuck fuck fuck fuck fuck
13:35:44 <HackEgo> 2011-09-15.txt:13:35:41: <elliott> `log fuck fuck fuck fuck fuck fuck fuck
13:35:49 <elliott> oh my god
13:36:06 <ais523> 'quote 590
13:36:09 <ais523> how did that end up there?
13:36:25 <ais523> ^[^`]* fuck fuck fuck fuck fuck fuck
13:36:28 <ais523> `log ^[^`]* fuck fuck fuck fuck fuck fuck
13:36:29 <elliott> `quote 590
13:36:30 <HackEgo> 590) <ais523> (Enigma is two games; one is solving Enigma puzzles, the other is working out how to represent things as Enigma puzzles, preferably with the minimal amount of lua and player-hidden information possible)
13:36:32 <HackEgo> 2011-09-13.txt:18:02:38: <HackEgo> 2010-08-30.txt:16:15:24: <alise> I can fix that! Fuck fuck fuck fuck fuck fuck fuck fuck fuck
13:36:50 <elliott> hmm, tahoe is really complicated :(
13:37:13 <ais523> `quote 600 has got me laughing in real life, even though it's not all that good
13:37:14 <HackEgo> No output.
13:37:21 <ais523> bleh, I can't give it trailing arguments?
13:37:29 <ais523> `quote 600 # has got me laughing in real life, even though it's not all that good
13:37:30 <HackEgo> No output.
13:37:34 <ais523> not even if I comment them out?
13:37:39 <ais523> `quote 600
13:37:41 <HackEgo> 600) <fizzie> That's the stupidest thing I've heard all morning. (Though I did wake up five minutes ago, so I haven't had a chance to hear very much.) <fizzie> The "Why are you still asleep? I told the cat to wake you up." comment does come pretty close, though.
13:37:58 <elliott> I laugh every time I remember it, so I think it's fairly objectively good :P
13:38:25 <ais523> `quote 629
13:38:27 <HackEgo> 629) <CakeProphet> monqy: help how do I use lambdabot to send messages to people. [...around half an hour later...] <CakeProphet> @messages <lambdabot> quicksilver said 1y 2m 18d 19h 54m 29s ago: you use @tell
13:38:36 <ais523> pure awesome there
13:38:54 <elliott> yeah that was pretty much maximum synchronicity
13:38:59 <elliott> all downhill from there
13:41:50 <elliott> ais523: btw, I was going to make the learndb better, but Gregor refused to make HackEgo output multiple lines ever :P
13:41:58 <elliott> so the multiple-entry possibilities were rather limited
13:43:21 <oerjan> `run quote 600 #maybe like this?
13:43:23 <HackEgo> 600) <fizzie> That's the stupidest thing I've heard all morning. (Though I did wake up five minutes ago, so I haven't had a chance to hear very much.) <fizzie> The "Why are you still asleep? I told the cat to wake you up." comment does come pretty close, though.
13:43:54 <elliott> ais523: I have found clear evidence of inferiority of the nethack qdb to ours: http://qdb.rawrnix.com/?357
13:44:01 <ais523> now I'm wondering if fizzie's cat /tried/ to wake him or her up
13:44:07 <elliott> you won't see any anti-acehack propaganda in _this_ qdb!
13:44:16 <ais523> it's a funny statement
13:44:19 * elliott pats himself on the back for a logic well done
13:44:21 <ais523> also, look at who's saying it
13:44:26 <ais523> I'm pretty sure you know Wooble
13:44:29 <elliott> Yes, I have eyes
13:44:36 <elliott> Well, sometimes
13:44:40 <elliott> Sometimes I am just an amorphous blob
13:44:43 <elliott> It depends.
13:44:56 <ais523> sometimes I fly around in a spaceship :>
13:44:56 <oerjan> focus, elliott, focus
13:45:06 <ais523> wait, was it a lowercase i?
13:45:11 <ais523> `log fly around in a spaceship
13:45:12 <elliott> probably
13:45:14 <HackEgo> 2009-03-05.txt:16:10:34: <ais523> FireFly: sometimes I fly around in a spaceship?
13:45:20 <ais523> `log fly around in a spaceship
13:45:23 <HackEgo> 2011-09-15.txt:13:45:11: <ais523> `log fly around in a spaceship
13:45:27 <ais523> `log fly around in a spaceship :>
13:45:30 <HackEgo> 2011-08-26.txt:04:14:24: <elliott> "sometimes i fly around in a spaceship :>"
13:45:32 <oerjan> `cat bin/log
13:45:34 <HackEgo> ​#!/bin/sh \ cd /var/irclogs/_esoteric \ if [ "$1" ]; then \ egrep -i -- "$1" ????-??-??.txt | shuf -n 1 \ else \ file=$(shuf -en 1 ????-??-??.txt) \ echo "$file:$(shuf -n 1 $file)" \ fi \
13:45:34 <ais523> yep, lowercase i
13:45:43 <FireFly> uh-huh
13:45:49 <elliott> hi FireFly
13:45:53 <FireFly> Hello
13:45:57 <FireFly> I can't even remember that line
13:46:00 <ais523> FireFly: the thing about logquoting bots is that they have a tendency to randomly ping people
13:46:05 <FireFly> And I usually remember lines that HL me
13:46:23 <FireFly> 2009 was a while ago though
13:46:48 <ais523> `log <FireFly>
13:46:52 <HackEgo> 2009-07-31.txt:16:01:46: <FireFly> Well, I like my tabs as they are
13:47:01 <ais523> equivalent to eight spaces?
13:47:18 <ais523> (when at a multiple of 8 already)
13:47:38 <ais523> elliott: oh, I found another tab=to-multiple-of-8 source, it's the Google style guide for INTERCAL
13:47:39 <elliott> oerjan: op me so that i can institute a beautiful reign of kicking ais523 whenever he goes on about tabs
13:47:54 <ais523> elliott: but I haven't won this argument yet
13:47:56 <FireFly> I usually go with 4-space tabs, though I prefer actual tab characters to spaces
13:47:59 <FireFly> That's probably what the line refers to
13:48:08 <elliott> ais523: it's quite hard to win an argument that you've already lost, repeatedly, in the past
13:48:17 <ais523> I just haven't won it yet
13:48:20 <ais523> and I have so many sources on my side
13:48:29 <elliott> /ignore ais523
13:52:03 <ais523> p
13:52:04 <ais523> *o
13:52:28 <elliott> wat
13:53:16 <ais523> just randomly oing
13:53:28 <ais523> people don't seem to do that that much any more, not even oklopol
13:53:35 <ais523> but I typoed and randomly ped instead
13:53:43 <fizzie> ais523: If the cat tried, I did not notice. It's not the most reliable person, so I wouldn't be surprised if it just ignored the task it was given.
13:57:49 <elliott> OK, I'm laughing harder at http://qdb.rawrnix.com/?470 than any quote we've had here
13:57:55 <elliott> THIS IS UNACCEPTABLE
14:00:27 <Patashu> wat
14:00:36 <Patashu> oh, nethack
14:00:55 <Patashu> that's surreal humour. it...doesn't quite click but I see how it could
14:01:37 -!- Taneb has joined.
14:02:19 <elliott> Patashu: it's more the idea of someone cutting off their arm in nethack in /anticipation/ of maybe being able to eat it
14:02:34 <Taneb> I just read "armchair" as "slip" in the topic
14:03:20 <Taneb> Also, hello
14:04:34 <elliott> hi
14:05:29 -!- copumpkin has quit (Quit: Computer has gone to sleep.).
14:06:44 <Taneb> I never got the hang of nethack
14:08:16 <elliott> ?src ap
14:08:16 <lambdabot> ap = liftM2 id
14:08:20 <elliott> ?src liftM2
14:08:20 <lambdabot> liftM2 f m1 m2 = do { x1 <- m1; x2 <- m2; return (f x1 x2) }
14:09:22 <Taneb> You know that program I wrote in Haskell then everyone helped me improve and fix it?
14:09:32 <elliott> yes
14:09:52 <Taneb> I translated it back into Python for the hell of it
14:09:56 <Patashu> lol
14:10:02 <Taneb> Haskell is much more readable
14:10:27 <Taneb> And also, Python has no equivalent built in to [1..] unless you import itertools
14:10:57 <Taneb> And I have just had a thought to improve the Haskell version
14:11:42 <Taneb> Nevermind, wouldn't have worked
14:13:44 <elliott> oerjan: I wish there was a haskell uninliner :(
14:14:35 -!- Patashu has quit (Quit: MSN: Patashu@hotmail.com , Gmail: Patashu0@gmail.com , AIM: Patashu0 , YIM: patashu2 .).
14:14:45 <oerjan> that's called refactoring isn't it
14:15:37 <elliott> oerjan: I mean more like, given an explicit implementation of return/(>>=), and an implementation of (<*>) in terms of them (i.e. ap), a pattern-matching definition is spat out
14:15:45 <elliott> preferably a flat one i.e. it's just not literally inlining as nested case clauses
14:16:45 <Taneb> I wonder if ~ATH is suitable for the wiki
14:16:53 <Taneb> I mean, we don't do fictional languages
14:16:54 <Taneb> Much
14:32:26 -!- copumpkin has joined.
14:32:44 <MDude> I could imagine an implementation of it that runs within a virtual world of some sort.
14:33:03 <MDude> Or set of virtual worlds, I suppose.
14:33:34 <elliott> ?pl f <*> pure x
14:33:35 <lambdabot> f <*> pure x
14:33:43 <elliott> oerjan: is there really no name for that?
14:34:36 -!- nooga has quit (Ping timeout: 276 seconds).
14:38:07 <oerjan> @hoogle m (a -> b) -> a -> m b
14:38:08 <lambdabot> Control.Applicative (<*>) :: Applicative f => f (a -> b) -> f a -> f b
14:38:08 <lambdabot> Control.Monad ap :: Monad m => m (a -> b) -> m a -> m b
14:38:08 <lambdabot> Control.Applicative (<**>) :: Applicative f => f a -> f (a -> b) -> f b
14:38:29 <elliott> makeZipper' = gfoldl f Done
14:38:29 <elliott> where f r h =
14:38:29 <elliott> case cast h :: Maybe d of
14:38:29 <elliott> Just h' -> Zip h' (ap r . pure . fromMaybe h . fmap (fromJust . cast))
14:38:29 <elliott> Nothing -> r <*> pure h
14:38:30 <elliott> turns out this doesn't work :P
14:38:48 <elliott> :(
14:38:52 <elliott> hmm
14:39:18 <oerjan> elliott: seems that one is missing yeah
14:39:52 <elliott> *Main> explore (makeZipper' [9,9,9,9] :: Zipper Int [Int])
14:39:52 <elliott> Current item: 9
14:39:52 <elliott> Insert new item or enter to keep: 99999999
14:39:52 <elliott> [99999999,9,9,9]
14:39:56 <elliott> that is not how it is supposed to work >:(
14:40:01 <oerjan> :t (.)
14:40:02 <lambdabot> forall a b (f :: * -> *). (Functor f) => (a -> b) -> f a -> f b
14:40:09 <elliott> hmm, I suppose the problem is that it sees the tail as Just Another Subterm
14:40:15 <elliott> one which happens to not be of type Int
14:40:15 <oerjan> :t flip
14:40:16 <lambdabot> forall (f :: * -> *) a b. (Functor f) => f (a -> b) -> a -> f b
14:40:28 <elliott> *Main> explore (makeZipper' [9,9,9,9] :: Zipper [Int] [Int])
14:40:28 <elliott> Current item: [9,9,9]
14:40:28 <elliott> Insert new item or enter to keep: []
14:40:28 <elliott> [9]
14:40:29 <elliott> heh
14:40:31 <oerjan> elliott: wouldn't you know, it's precisely caleskell's flip :P
14:40:40 <elliott> oerjan: wonderful :P
14:45:54 <Deewiant> ?pl \ff x -> fmap ($x) ff
14:45:54 <lambdabot> flip (fmap . flip id)
14:46:33 -!- MDude has quit (Read error: Connection reset by peer).
14:46:48 <Deewiant> ?pl \ff x -> ff <*> pure x
14:46:48 <lambdabot> (. pure) . (<*>)
14:46:53 <Deewiant> Bah
14:51:00 <elliott> :{
14:53:09 <Deewiant> ?. hoogle type \f g -> (. g) . f
14:53:10 <lambdabot> Parse error:
14:53:10 <lambdabot> --count=20 "forall a b (f :: * -> *) (f1 :: * -> *). (Functor f, Functor f1) => f1 (a -> b) -> f a -> f1 (f b)
14:53:10 <lambdabot> "
14:53:14 <Deewiant> Bah
14:53:54 <Deewiant> ?. hoogle type \f g -> (Prelude.. g) Prelude.. f
14:53:54 <lambdabot> Parse error:
14:53:55 <lambdabot> --count=20 "forall b c a a1. (a1 -> b -> c) -> (a -> b) -> a1 -> a -> c
14:53:55 <lambdabot> "
14:54:08 <Deewiant> ?hoogle (a1 -> b -> c) -> (a -> b) -> a1 -> a -> c
14:54:08 <lambdabot> Data.Function on :: (b -> b -> c) -> (a -> b) -> a -> a -> c
14:54:09 <lambdabot> Data.Data gmapQl :: Data a => (r -> r' -> r) -> r -> (d -> r') -> a -> r
14:54:09 <lambdabot> Data.Data gmapQr :: Data a => (r' -> r -> r) -> r -> (d -> r') -> a -> r
14:54:19 <Deewiant> Bah
14:57:08 <elliott> Deewiant: Pretty sure gmapQr is the thing
14:57:19 <Deewiant> Yeah no
14:57:24 <Deewiant> ?src on
14:57:24 <lambdabot> (*) `on` f = \x y -> f x * f y
14:57:32 <Deewiant> ?ty let (*) `on` f = \x y -> f x * f y in on
14:57:33 <lambdabot> forall t t1 t2. (t -> t -> t1) -> (t2 -> t) -> t2 -> t2 -> t1
14:57:51 <oerjan> :t flip (curry . second)
14:57:52 <lambdabot> forall a b c. a -> (b -> c) -> b -> (a, c)
14:58:03 <oerjan> oops
15:01:29 <oerjan> @djinn (a1 -> b -> c) -> (a -> b) -> a1 -> a -> c
15:01:30 <lambdabot> f a b c d = a c (b d)
15:01:49 <oerjan> @pl f a b c d = a c (b d)
15:01:50 <lambdabot> f = flip . ((.) .)
15:02:24 <oerjan> most readable
15:03:12 <elliott> hmm I would _really_ like serialisation of Haskell functions
15:03:14 <elliott> (not in a portable manner)
15:03:21 <elliott> well, closures
15:06:27 <oerjan> \a b c d -> a c (b d) = flip (\a c b d -> a c (b d)) = flip (\a c b -> a c . b) = flip (\a c -> (.) (a c)) = flip (\a -> (.) . a) = flip ((.) .)
15:06:44 <oerjan> :t Prelude.flip ((.) .)
15:06:44 <lambdabot> forall a b (f :: * -> *) b1. (Functor f) => b1 -> (b1 -> a -> b) -> f a -> f b
15:06:54 <oerjan> :t Prelude.flip ((Prelude..) Prelude..)
15:06:55 <lambdabot> forall b c a b1. b1 -> (b1 -> b -> c) -> (a -> b) -> a -> c
15:06:57 <elliott> Deewiant: Lemme know when you've figured out how to do that
15:07:04 <oerjan> gah
15:07:45 -!- oerjan has quit (Quit: Anyway, later).
15:15:05 <Deewiant> elliott: instance Binary (a -> b) where something#
15:18:42 <elliott> Neat
15:24:57 <Taneb> I wonder if Uniquode, as specified, is Turing-Complete
15:28:45 -!- augur has quit (Remote host closed the connection).
15:50:31 -!- Vorpal has quit (Quit: ZNC - http://znc.sourceforge.net).
16:03:48 <elliott> Deewiant: I don't think that's actually possible... you need to know the types of the stuff in the closure
16:05:02 <Deewiant> instance (Typeable a, Typeable b) => Binary (a -> b) where something#
16:05:19 <elliott> Deewiant: In the closure
16:05:20 <elliott> Consider
16:05:33 <elliott> foo :: SomethingRidiculouslyUnserialisable -> Int -> Int
16:05:37 <elliott> foo x y = y + magic x
16:05:55 <Deewiant> Right
16:05:56 <elliott> (foo x) is (Int -> Int), but its closure carries around a SomethingRidiculouslyUnserialisable that isn't referenced in the type at all
16:07:22 <elliott> So I think you need to explicitly specify the closure types, which involves just trusting whatever's given... so basically you have to make some TH magic to do it for people and tell them not to use anything more direct :P
16:08:33 <Lymee> What kind of Haskell type would be unserialisable?
16:09:01 <elliott> Well, in theory anything is serialisable; in practice something like a file handle is not very
16:09:13 <elliott> For obvious reasons
16:09:41 * tswett doesn't respond to that ping.
16:09:50 <Lymee> A file handle in pure code?
16:10:17 <elliott> Lymee: Eh?
16:10:38 <elliott> I don't THINK a Handle carries around any state you can access outside of IO, but certainly other types might.
16:10:42 <elliott> Consider StableName.
16:10:56 <elliott> http://www.haskell.org/ghc/docs/latest/html/libraries/base-4.4.0.0/System-Mem-StableName.html
16:11:01 <elliott> No way you're gonna serialise one of those.
16:11:13 <tswett> You can't serialize an Internet connection.
16:11:17 <elliott> And you can hashStableName in pure code.
16:11:21 <tswett> Even in theory. I think.
16:11:33 <elliott> tswett: No, but you can serialise the bits representing the socket
16:11:34 <Lymee> elliott, yeah, good point.
16:11:36 <elliott> It's not just very useful, is all
16:11:52 <elliott> tswett: Also you totally should be able to serialise internet connections.
16:12:00 <tswett> Well, I meant connectivity, not connections.
16:12:01 <cheater> tswett, stateless protocols such as HTTP REST can be serialized.
16:12:20 <elliott> Start a connection, serialise it, destroy the machine on the other end, deserialise it... magically it still works
16:12:56 <tswett> I can't serialize the path that radio waves take when traveling betwen my laptop and the router.
16:13:10 <tswett> I mean, I guess I can. But, like before, it wouldn't be very useful.
16:13:11 <elliott> tswett: All I'm hearing is flaws in the universe.
16:13:26 <cheater> neither can you serialize the copper and nickel that the electrons traverse when going from your cpu to your ram.
16:13:27 <tswett> We should fix those. Quick, donate all your money to the SIAI.
16:34:01 -!- augur has joined.
16:34:01 -!- cheater has quit (Quit: Ex-Chat).
16:35:40 <Taneb> HellO!
16:35:48 <ais523> hi
16:35:55 <elliott> hell o
16:36:01 <Taneb> I liked todays IWC
16:36:28 <elliott> only six until it's over ;D ;D ;D; D
16:36:36 <elliott> my hobby: trolling iwc fans
16:47:03 -!- nooga has joined.
16:55:40 <Taneb> I've got my Gameboy Advance here
16:56:00 <Taneb> Going to play Pokémon
16:56:12 <Taneb> Dammit, Birch!
16:56:27 <Taneb> Nobody ever calls you the POKéMON PROFESSOR
16:57:33 <Taneb> I'm in a Truck
16:57:46 <ais523> Taneb: Ruby, Sapphire, or Emerald?
16:57:59 <Taneb> Emerald
16:58:07 <Taneb> Which, from my POV was the first one
16:58:38 <ais523> it was actually the last third-gen game
16:59:17 <Taneb> It was the first one I got
16:59:26 <Taneb> It was my first Pokémon game
16:59:35 <ais523> it also has the most abusable RNG in third gen, if you're into that sort of thing
17:00:03 <ais523> and it's still the easiest to do RNG abuse calculations for, although the actual abuse itself is easier on Black/White
17:00:08 <Taneb> I play these games for fun
17:00:15 <ais523> so do I
17:00:20 <Deewiant> That doesn't in any way exclude RNG abuse
17:00:28 <Taneb> It does if you're me
17:00:35 <Taneb> But you are not me
17:00:38 <Taneb> So it doesn;t
17:01:39 <Taneb> Apparently I'm Taneb, their new next-door neighbour!
17:10:02 <Taneb> Yay, I get a Pokéman
17:10:08 <Taneb> I will name it Deewiant
17:22:47 -!- sllide has joined.
17:28:25 <Gregor> `find
17:28:26 <HackEgo> ​. \ ./bin \ ./bin/? \ ./bin/addquote \ ./bin/allquotes \ ./bin/define \ ./bin/delquote \ ./bin/etymology \ ./bin/forget \ ./bin/google \ ./bin/json \ ./bin/k \ ./bin/karma \ ./bin/karma+ \ ./bin/karma- \ ./bin/learn \ ./bin/log \ ./bin/logurl \ ./bin/marco \ ./bin/paste \ ./bin/pastekarma \ ./bin/pastelog \ ./bin/pastelogs
17:30:05 <elliott> Gregor: ?
17:30:10 <elliott> hey someone give me a number sign
17:30:35 <ais523> you mean #?
17:30:38 <elliott> yes thanks
17:30:45 <ais523> strange name for it
17:32:33 <fizzie> Yes, it would have been far more obvious to say "give me a sink".
17:33:37 <shachaf> `? shachaf
17:33:38 <HackEgo> shachaf mad
17:33:43 <shachaf> `rm wisdom/shachaf
17:33:44 <HackEgo> No output.
17:36:24 <Taneb> Hello
17:36:42 <Taneb> I'm training ais523 tge Wingull
17:36:55 * ais523 makes Wingull sound
17:37:10 <ais523> (and I know what a Wingull sounds like, too...)
17:37:56 <Taneb> Level 6!
17:39:21 <elliott> waht does wingull sound like :(
17:39:29 <Taneb> eeh-eeh!
17:39:31 <elliott> `learn shachaf mad
17:39:32 <HackEgo> I knew that.
17:39:42 <elliott> Taneb: Congratulations you just described the sound of like half of all the pokemons.
17:39:52 <shachaf> `rm wisdom/shachaf
17:39:53 -!- sliddy has joined.
17:39:53 <HackEgo> No output.
17:39:58 <elliott> `learn shachaf mad
17:40:00 <Taneb> While being completely true
17:40:00 <HackEgo> I knew that.
17:40:01 <elliott> shachaf: u so mad.
17:40:02 <shachaf> elliott: Could you keep it that way, please?
17:40:04 <shachaf> `rm wisdom/shachaf
17:40:05 <HackEgo> No output.
17:40:09 <Taneb> And as accurate as I could
17:40:10 <elliott> The wisdom cannot be erased.
17:40:28 <elliott> The wisdom is Eternal.
17:40:36 <elliott> Eternalsdom.
17:40:39 <elliott> Wisdeternal.
17:41:35 -!- Zuu has joined.
17:41:35 -!- Zuu has quit (Changing host).
17:41:35 -!- Zuu has joined.
17:42:27 -!- sllide has quit (Ping timeout: 276 seconds).
17:45:49 <Taneb> ais523 is now may highest level POKéMON
17:46:07 <elliott> POKéMON
17:46:13 <Gregor> HEY GUYS THERE IS SUCH A THING AS A CAPITAL É
17:46:25 <Taneb> Not in the POKéMON font
17:46:31 <ais523> Gregor: however, the word itself is spelt POKéMON
17:46:36 <Gregor> The correct capitalization is POOKIEMANS
17:46:45 <ais523> writing POKÉMON is like writing Brainfuck
17:47:03 <elliott> ais523: you're lucky ph isn't here or he'd whine at you
17:47:17 <ais523> at what, BF's capitalisation?
17:47:41 <elliott> he's of the firm opinion that BrainFuck is an abomination but anyone who corrects Brainfuck to brainfuck is a pedantic asshole :P
17:48:24 <ais523> I think "Pokémon" is a valid capitalization too as of Black/White
17:48:35 <Taneb> This is Emerald
17:48:47 <Taneb> I may make a language called brianfcuk just to confuse everyone
17:49:02 -!- Jafet has joined.
17:49:38 -!- augur has quit (Remote host closed the connection).
17:51:29 <ais523> I was planning to make a language called brainfuck that was identical to Brainfuck apart from the name
17:51:33 <ais523> as a parody of bad BF derivatives
17:51:37 <Taneb> It will be as different from brainfuck as possible
17:51:48 <ais523> but I'm not sure I could do it in a suitably amusing way
17:51:54 <ais523> umm, swap brainfuck and Brainfuck there
17:52:42 <Taneb> Instead of a tape, have string of Unicode characters
17:53:16 <Taneb> And a character index rather than a pointer
17:53:49 <Sgeo__> What is a good bF derivative?
17:53:53 <Taneb> Ook!
17:54:20 <ais523> Ook! would be a pretty bad derivative if it didn't come early enough that it wasn't cliched
17:54:21 <Taneb> It was original, a reference to Discworld, and by David Morgan-Mar
17:54:34 <ais523> I think PaintFuck was considered a good BF deriv
17:56:27 -!- ive has joined.
17:57:24 <elliott> wow, generic zippers are a pain to make pretty
18:00:10 <Taneb> brianfcuk is too similar to Haskell.
18:00:14 <Taneb> Not esoteric enough
18:01:03 <Taneb> To the LIST OF IDEAS PAGE
18:02:15 <ais523> elliott: you still owe me My Name Is Johny, btw
18:03:07 -!- ais523 has quit (Remote host closed the connection).
18:03:38 <elliott> OR ELSE
18:05:50 -!- augur has joined.
18:21:48 -!- pikhq has quit (Quit: Later).
18:23:31 <Taneb> All my ideas for brianfcuk are lame
18:24:04 <oklopol> did you try renaming the operations
18:24:08 <oklopol> i hear that's cool
18:25:06 -!- oklopol has quit.
18:25:06 <elliott> we need a language called brainf***
18:25:41 <Taneb> One of my ideas was essentially a minimalistic notation for lambda calculus
18:25:51 <Gregor> ShaFuck iz da bezt.
18:25:53 <Taneb> Where the predeccessor function is \\\34(\\14(24114))(\24)(\14)
18:27:05 <elliott> Taneb: um is that not just de bruijn notation
18:27:29 <Taneb> Bijective base 3 de bruijn notation postpended with fours
18:27:56 <elliott> wow
18:29:25 <Taneb> Told you it was lame
18:30:38 <Taneb> I could use my loadsa combinators
18:30:40 <Taneb> ide
18:30:40 <Taneb> a
18:31:48 <Taneb> Screw this, I'm going to work on Salesman
18:34:21 <Taneb> I don't want to use a stack. I do not like stacks.
18:35:06 <Taneb> I could use an accumulator...
18:36:35 <Taneb> Or two
18:40:22 <Taneb> I do not like green queues and stacks
18:47:44 <Taneb> http://esolangs.org/wiki/User:Taneb/Salesman
18:49:00 <Taneb> The NP-Hard programming language!
18:50:36 -!- ive has quit (Ping timeout: 252 seconds).
18:56:32 <Taneb> Thoughts?
19:00:35 -!- ive has joined.
19:01:58 <elliott> Sorry, I was too busy writing an eloquent defence and analysis of wikispam.
19:02:00 <elliott> http://esolangs.org/wiki/User_talk:WLaquitaCuevasa
19:09:27 <elliott> good lord, I got into HWN /again/
19:09:29 <elliott> WHEN WILL MY FAME END
19:10:21 <Taneb> Can you check out salesman now?
19:11:59 <elliott> I'm a bit tired, 'mafraid.
19:12:07 <elliott> Perhaps in a minute.
19:16:50 <elliott> TODO: Optimise Shiro's IPLists
19:17:01 <nooga> ffffffuuuuu
19:17:16 <nooga> my USB mouse does not work with macbook pro
19:17:33 <nooga> or rather, macbook pro doesn't work with the mouse
19:17:43 <Taneb> Search for drivers?
19:19:02 <nooga> FOR GODDAMN USB MOUSE?
19:19:19 <Taneb> FOR A GODDAMN MAC BOOK PRO
19:20:15 <nooga> i hate this computer
19:23:42 -!- cheater has joined.
19:26:47 -!- sliddy has quit (Read error: Connection reset by peer).
19:37:13 <elliott> http://ompldr.org/vYWRiZw thanks duckduckgo
19:40:39 -!- oerjan has joined.
19:41:49 <elliott> hi oerjan hi hihi i hi hi oerjan hi
19:44:17 <oerjan> elliott seems very hi today
19:47:12 <itidus20> hmm
19:47:42 <oerjan> hindley-milner-mycroft
19:47:55 <itidus20> Another day anticipates the sunrise relative to the frame of reference of my window.
19:49:31 <oerjan> apparently that may not exist, but hindley-milner and milner-mycroft do
19:49:50 <itidus20> `log entertainment
19:49:55 <HackEgo> 2009-06-21.txt:20:50:59: <ehird> God, I hate people who say "tl;dr". Because your idiotic soundbites and bits of compacted media and entertainment that you love so much has made your brain incapable to read anything more than a paragraph or two lest your now severe ADHD kick in.
19:49:57 <Taneb> Mycroft as in Holmes?
19:50:03 <elliott> oerjan: ziepress are hard :(
19:50:06 <elliott> zierperpzerierps
19:50:08 <elliott> im
19:50:11 <elliott> cant type much
19:50:17 <elliott> its hard to type :'(
19:50:18 <elliott> and to think
19:50:20 -!- MDude has joined.
19:50:26 <elliott> but one thing is easy......
19:50:27 <elliott> that thing....
19:50:29 <elliott> is saying hi
19:50:29 <oerjan> elliott: and to read
19:50:32 <elliott> oerjan: hi hi hi hi hi hi hi
19:50:37 <elliott> hi
19:50:38 <elliott> hi hi
19:50:38 <elliott> hi
19:50:45 <oerjan> poor elliott, slowly turning into the winslow
19:51:01 <elliott> hi
19:51:03 <oerjan> it was not how he had envisioned eternal life
19:51:17 <elliott> what if i want to win quickly, what then
19:51:57 <oerjan> Taneb: no, as in the type theorist
19:52:25 <elliott> type theory is so gangsta. just saying
19:52:28 <Taneb> Also, I've done some more work on Salesman
19:53:48 <oerjan> mind you i have not yet any real idea what he's done, although "polymorphic recursion" seems a clue
19:54:22 <elliott> `run echo 'flower. what IS a flower?' >wisdom/flower
19:54:24 <HackEgo> No output.
19:54:49 <elliott> oerjan. what IS an oerjan?
19:54:50 <Deewiant> And yet, elliott's said "tl;dr" 92 times according to my logs (and ehird 41 times)
19:54:53 <oerjan> well he cannot be that important, no wikipedia page >:)
19:54:58 <elliott> hi. hi HI hi hi?
19:55:34 <elliott> Deewiant: wut
19:55:40 <elliott> oerjan: i hear he wrote the haskell nientryeight report.....
19:55:43 <elliott> if we're talking about oerjan
19:55:49 <elliott> which i guess acutally we were talking about that type theorists
19:55:50 <Deewiant> elliott: Re. `log entertainment some 20 lines ago
19:56:00 <elliott> Deewiant: oh i didn't pay attention, was it something about me
19:56:10 <Deewiant> I suppose it could've been something you were quoting
19:56:14 <oerjan> elliott: no i'm trying to find out who mycroft is
19:56:40 <elliott> how old was it, anything more than like eight months and i ain't even know who that guy that was me is
19:56:52 <elliott> well it's eight months right now it's kind of variable
19:56:56 <Deewiant> 2009-06-21
19:57:00 <elliott> maybe i'll decide i'm completely alienated with my five-minutes-ago self
19:57:04 <elliott> that would be uh
19:57:04 <elliott> fun
19:57:12 <elliott> Deewiant: oh well that's like before i even remember breathing.
19:57:33 <Deewiant> In fact, you'd used "tl;dr" several times before that, even.
19:57:55 <elliott> token laxative; dangerous recall
19:58:10 <oerjan> seems he was milner's student
19:58:37 <elliott> did he train in the craft of milnering
19:58:48 <Taneb> Milnercraft
19:58:57 <itidus20> Taneb: beat me to it
19:59:10 <elliott> that's a good kraft
19:59:12 <itidus20> i was about 2 keypresses away
19:59:18 <elliott> i didn't even think of that
19:59:22 <elliott> i remain unsmart
19:59:47 <oerjan> <elliott> what if i want to win quickly, what then <-- i detect insufficient phil foglio exposure
19:59:48 <Taneb> According to Wolfram Alpha, the name Haskell is dying out
19:59:54 <itidus20> elliott: you made the inspiring comment. "craft of milnering"
19:59:59 -!- Gregor has quit (Excess Flood).
20:00:04 -!- Gregor has joined.
20:00:04 <itidus20> you can't self-inspire
20:00:06 <elliott> oerjan: folio
20:00:10 <elliott> Gregor: stop flüd
20:00:31 -!- Gregor has changed nick to Guest53387.
20:00:35 <oerjan> <elliott> oerjan: i hear he wrote the haskell nientryeight report..... <-- well that is _so_ last millennium
20:00:46 <elliott> you need to keep contributing typofixes
20:00:47 <elliott> to stay relevant
20:00:48 <elliott> and hip
20:00:51 <elliott> :\
20:02:02 <oerjan> die zauberflüd
20:05:14 <itidus20> spellcraft, morecraft, warcraft, starcraft, minecraft, fortresscraft, fishcraft
20:05:38 <elliott> poopcraft
20:05:44 <Taneb> mincecraft
20:05:46 <itidus20> it's not entirely clear to me what -craft means in the context of video games
20:06:03 <itidus20> it has about as much meaning as super-
20:06:15 <Taneb> Supercraft 64
20:06:22 <Taneb> Advance
20:06:45 <fizzie> "Using closest Wolfram|Alpha interpretation: sun in moon" "Input interpretation: [ Moon | volume ] / [ Sun | volume ]" "Result: 1.556 x 10^-8"
20:06:56 <fizzie> I keep feeding it nonsense, but at least sometimes I get nonsense back.
20:07:05 <fizzie> W|A is unable to compute the length of the solar day of the Sun.
20:07:29 <fizzie> "Input interpretation: [ Sun | solar day ]" "Result: (data not available)"
20:07:35 <elliott> fizzie: Is this how you spend your life?
20:07:45 <fizzie> I is a bit tiered at the moment.
20:07:47 <elliott> Because I mean, I approve.
20:08:08 <Taneb> brb
20:08:38 <fizzie> "tiered sun" => "Using closest Wolfram|Alpha interpretation: ranked sun" => "Input interpretation: [ Sun | rank ]" => "Result: 2228th".
20:09:13 <oerjan> you'da thought it'd rank higher than that
20:09:43 <elliott> sad sun :(
20:10:03 <oerjan> fizzie: are you looking for the time the sun takes to rotate around itself?
20:10:09 <MDude> Of course it can't calculate the solar day of the sun.
20:10:13 <fizzie> "floating sun" gives this really complicated "option name: European lookback with floating strike" financial thingamajigger.
20:10:21 <itidus20> there is a band named supercraft
20:10:26 <MDude> What Oerjan jsut said.
20:10:38 <itidus20> ahh.. "SUPERCRAFT - a up 'n coming Norwegian band in synthpop / futurepop."
20:11:09 <fizzie> I like the comparisons, they're always so sensible.
20:11:38 <oerjan> "Solar rotation is able to vary with latitude because the Sun is composed of a gaseous plasma."
20:11:43 <fizzie> [ Sun | rotation frequency ] => 0.03993 rev / day; comparisons as angular velocity: ~ 0.002 ~ 1/600 x mean angular velocity of slow eye drift movements.
20:11:46 <oerjan> http://en.wikipedia.org/wiki/Solar_rotation
20:12:29 <fizzie> Next time you are having a slow eye drift movement, you can console yourself that the sun rotates only at 1/600th of the speed of your eye.
20:12:40 <itidus20> supercraft at elektrostat http://www.youtube.com/watch?v=r1jbycSRyBY
20:13:11 <MDude> "lunar day of sun" is inerpreted as [Moon | [this | Sunday]].
20:13:29 * oerjan ponders if it would have been better as "superkraft" or not
20:13:51 <oerjan> which incidentally is the norwegian word for superpower
20:14:08 <itidus20> the music is actually good though
20:15:38 <oerjan> i suppose with the c it sounds punny
20:16:11 <itidus20> i can relate to the lyrics a bit (maybe)
20:16:21 <itidus20> `log derealization
20:16:24 <HackEgo> 2011-09-14.txt:00:49:12: <itidus20> monqy: well, theres these feelings of derealization and depersonalization and psychosis which i seem to enter into at times
20:16:42 * oerjan sidles away from itidus20
20:17:08 <MDude> W|A is also unable to compute the solutions for "a ^ b = b ^ a, a != b".
20:17:23 <fizzie> Input interpretation: M_{sun} (solar mass) / housecat typical mass => 3 x 10^29.
20:17:29 <fizzie> That's how many cats there are in the Sun.
20:17:44 <elliott> Yes.
20:18:05 <oerjan> MDude: that's strange, probably doesn't parse the question correctly because mathematica has to have a function for that
20:18:46 <oerjan> b*log a = a*log b, b/log b = a/log a
20:20:40 <MDude> I tried inputing it when I read in Number Freak that and four were the only numbers that could be interchenged like that.
20:20:54 <oerjan> *that two, i assume
20:21:03 <oerjan> and presumably that's integers only
20:21:11 <MDude> Yes.
20:21:30 <oerjan> because clearly if 2,4 are solutions and b/log b is continuous, there have to be others nearby
20:21:48 <elliott> oerjan: have you got serialisation of closures working yet thx
20:22:09 <oerjan> elliott: that seems to be outside my area of expertise, but i hear erlang does that
20:22:34 <oerjan> and also there was a haskell project with a modified ghc iirc
20:22:44 <elliott> maybe that's what that cloud haskell thing does.
20:22:53 <elliott> I _think_ I can do it with vacuum... it'll just be such a huge unimaginable pain
20:22:55 <oerjan> that sounds about right
20:23:17 <oerjan> yes, vacuum is pretty painful i guess
20:24:44 <elliott> is that a pun
20:24:52 <oerjan> but of course
20:25:00 <elliott> :(
20:25:05 <fizzie> Plain "a^b = b^a" gives a ContourPlot[a^b == b^a, {a, 0.36, 6.3}, {b, 0.36, 6.3}] followed by a solution for b; b = -a W(-log(a) / a) / log(a), where W(z) is ProductLog[z], the principal solution for w in z = w e^w.
20:25:29 -!- itidus21 has joined.
20:25:52 <elliott> oerjan: did you like my analysis of wikispam.
20:26:13 <elliott> it is beautiful.
20:26:17 <oerjan> if you graph log b / b it is probably obvious that there are only finitely many options
20:26:32 <oerjan> elliott: i haven't got to that tab yet
20:26:39 <oerjan> ->
20:27:15 <elliott> oerjan: is that you moving tabs
20:28:52 -!- itidus20 has quit (Ping timeout: 276 seconds).
20:31:38 -!- itidus21 has quit (Quit: Leaving).
20:32:21 -!- itidus20 has joined.
20:34:17 -!- itidus20 has quit (Client Quit).
20:34:58 <elliott> `? oerjan
20:34:59 <HackEgo> Your future evil overlord oerjan is an expert in lazy computation.
20:35:04 <elliott> ok
20:43:50 -!- itidus20 has joined.
20:46:37 -!- itidus20 has quit (Client Quit).
20:50:26 -!- itidus21 has joined.
20:50:50 <Sgeo__> `? add
20:50:52 <HackEgo> add? ¯\(°_o)/¯
20:50:55 <Sgeo__> `? Sgeo
20:50:57 <HackEgo> Sgeo invented Metaplace sex.
20:51:31 <Sgeo__> ಠ_ಠ
20:51:51 <Taneb> `? What's all this then?
20:51:52 <HackEgo> What's all this then?? ¯\(°_o)/¯
20:52:36 <Taneb> Also, goodnight
20:52:40 -!- Taneb has quit (Quit: TTFN).
21:00:35 <elliott> https://github.com/xonatius/linux/commit/bdb25f1ee3bae85433d94e9192f8a18a880b28ac
21:00:37 <elliott> how not to patch
21:01:09 <elliott> oh my god people actually started spamming torvalds/linux pull request comments yelling at him for not liking them..........
21:05:55 -!- nooga has quit (Ping timeout: 260 seconds).
21:06:20 <Sgeo__> elliott, where are those comments
21:06:34 <elliott> https://github.com/torvalds/linux/pull/11
21:13:56 -!- sllide has joined.
21:25:27 -!- monqy has joined.
21:27:24 <elliott> ah, the friendship monqy
21:28:48 <elliott> oerjan: impart wisdom
21:28:50 <monqy> hi
21:32:09 <oerjan> `run echo "The friendship monqy is an ancient Chinese mystery; ask itidus21 for details." >wisdom/monqy
21:32:11 <HackEgo> No output.
21:32:26 <oerjan> `? monqy
21:32:28 <HackEgo> The friendship monqy is an ancient Chinese mystery; ask itidus21 for details.
21:32:36 <itidus21> :-s
21:33:14 <oerjan> elliott: like that?
21:33:18 <itidus21> i do have an extensive collection of english-translated ancient chinese books and ebooks... but i don't know much about it
21:33:57 <itidus21> and my memory is hopeless
21:34:25 <oerjan> although better than your joke detector
21:34:25 -!- augur has quit (Remote host closed the connection).
21:35:39 <elliott> oerjan: you keep ruining all the
21:35:40 <oerjan> (ok so there may be an oblique reference to the journey to the west in there)
21:35:40 <elliott> quotes :'(
21:35:42 <elliott> erm
21:35:44 <elliott> s/quotes/wisdoms/
21:35:45 <elliott> it was
21:35:46 <elliott> so wisdom before
21:35:47 <elliott> it was
21:35:50 <elliott> monqy dead :'(
21:35:55 <elliott> also
21:35:59 <elliott> you have anxetraneous
21:36:01 <elliott> space
21:36:03 <elliott> :'(
21:36:03 <elliott> im
21:36:03 <elliott> cry
21:36:08 <elliott> `run echo "The friendship monqy is an ancient Chinese mystery; ask itidus21 for details." >wisdom/monqy
21:36:10 <HackEgo> No output.
21:36:14 <elliott> is itidus20
21:36:18 <elliott> not suitable for asking
21:36:23 <elliott> must we only ask the upgraded
21:36:26 <elliott> version
21:36:34 <elliott> ????
21:37:39 <elliott> oerjan: ???
21:38:19 <oerjan> a complicated question. is his memory getting worse or better with time?
21:38:48 <elliott> help
21:39:11 <oerjan> is itidus21 using mystery to reverse entropy?
21:39:42 <elliott> looking ghostly
21:40:44 <itidus21> i don't know the stuff seriously
21:41:11 <itidus21> i do know that leibniz was curious about the i ching
21:41:35 <itidus21> and wolframalpha says that yin yang is like mathematical monad
21:42:17 * elliott logreadnotes to self
21:42:19 <elliott> --
21:42:19 <elliott> -- TODO: Shorten this and other functions by using (~==) from TagSoup,
21:42:19 <elliott> -- see e.g. http://neilmitchell.blogspot.com/search/label/tagsoup
21:42:19 <elliott> --
21:42:43 <elliott> (for my fizzie-clone :P)
21:43:34 <oerjan> fizzie: what do you feel about being cloned?
21:44:08 <itidus21> oerjan: if you clone your enemy can you find his weaknesses?
21:44:40 <oerjan> some of them, maybe
21:45:00 <itidus21> perhaps having a dna sample of your enemy could give insight into their weaknesses
21:45:13 <itidus21> im not meaning that this is a good thing..
21:45:23 <itidus21> but seems like an inevitable military application
21:45:50 <itidus21> you could discover allergies they don't know they have
21:46:23 <itidus21> but on the topic of allergies i have heard it might not be genetic.. i dunno
21:47:59 -!- Zuu has quit (Ping timeout: 260 seconds).
21:53:07 <itidus21> back. a topic i am interested in is definitions of difficult and easy
21:54:00 <itidus21> for me easy to difficult is a continuum, easy being involuntary, difficult being impossible
21:54:48 <elliott> impossible is nothing
21:56:01 <itidus21> i think a task moves towards impossible as the ratio of required materials, time, kilojoules moves away from the available materials, time, kilojoules
21:56:38 <itidus21> but also the capacity to bridge the gap between the required and available affects it
21:57:32 <elliott> oerjan: are you learning, im learning
21:57:53 <itidus21> you just don't like the word difficult
21:58:05 <itidus21> noone seems to
21:58:43 <itidus21> impossible to me is if any chatter here is not dead within 130 years
21:59:03 <itidus21> i don't believe any amount of science will manage it
21:59:19 <itidus21> because for one thing science requires money
21:59:25 <itidus21> and money is a finite resource
22:00:33 <itidus21> so this time constraint of 130 years may just make it unworkable
22:01:08 <itidus21> sure if you remove constraints then things become possible
22:02:34 -!- DH____ has quit (Ping timeout: 260 seconds).
22:02:56 <itidus21> impossible is also if i held up fingers anyone being able to count them..
22:03:34 -!- DH____ has joined.
22:04:13 <itidus21> although there is a possibility that someone really does have a camera in place to count them, it is not a real possibility
22:05:07 <itidus21> ok ill go chill out
22:05:10 -!- itidus21 has left ("Leaving").
22:06:47 -!- itidus21 has joined.
22:07:44 -!- itidus21 has left ("Leaving").
22:10:09 -!- sllide has quit (Ping timeout: 260 seconds).
22:10:50 -!- itidus21 has joined.
22:12:04 <itidus21> lagging bad
22:12:10 <itidus21> maybe impossible is a limit
22:12:24 <itidus21> which you can only approach,kind of like infinity
22:15:03 <itidus21> ^not that i want to be here in 130 years
22:17:04 <itidus21> `log shenanigan
22:17:09 <HackEgo> 2011-08-16.txt:12:46:24: <fizzie> For a piece of real hardware, BytePusher's screen is particularly anemic. No sprites, no hardware scroll, no programmable palette, no mid-frame interrupts to do shenanigans, just in general no help from the hardware at all.
22:18:07 <itidus21> `log random
22:18:11 <HackEgo> 2008-10-31.txt:22:36:45: <ehird> h = randomColorScheme(h, ...)
22:18:37 <itidus21> `log impossible
22:18:41 <HackEgo> 2009-07-25.txt:00:36:02: <ehird> that's impossible
22:18:48 <monqy> good log
22:19:42 <itidus21> `log world
22:19:45 <HackEgo> 2008-08-08.txt:12:10:10: <tusho> optbot: you wanna be on #worlddomination too right?
22:20:00 <itidus21> `log world
22:20:04 <HackEgo> 2011-02-04.txt:22:36:46: <elliott> Man, I woke up in a strange new world where "poop" is a swear word.
22:20:40 <itidus21> `log dwarf
22:20:41 -!- elliott has quit (Ping timeout: 252 seconds).
22:20:43 <HackEgo> 2011-02-01.txt:21:00:17: <ais523> elliott: I'm trying to make a comment on Dwarf Fortress' astonishing CPU usage
22:20:51 <oerjan> `log hid the body
22:20:54 <HackEgo> 2011-09-15.txt:22:20:51: <oerjan> `log hid the body
22:21:02 <monqy> `log hide the body
22:21:05 <HackEgo> 2011-09-15.txt:22:21:02: <monqy> `log hide the body
22:21:16 <itidus21> `log the body
22:21:19 <HackEgo> 2011-03-21.txt:15:30:31: <Gregor> Does the body actually have a "drowning" reflex per se?
22:21:23 <oerjan> darn, my attempt to use the logs to solve crime, thwarted
22:21:24 <olsner> `log the log
22:21:27 <HackEgo> 2011-01-21.txt:23:03:59: <ais523> set it to remember the login
22:21:45 <itidus21> @gregor, yeah.. the reflex is discussed on wiki page of common misconceptions
22:24:03 <itidus21> impossible = talking someone out of doing something malicious to you
22:24:51 <olsner> sounds quite useless to have a drowning reflex, I can see the use for a non-drowning reflex though
22:25:20 <itidus21> basically the drowning reflex is not social
22:25:29 <itidus21> its not designed to draw others attention
22:25:34 -!- FireFly has quit (Quit: FireFly).
22:25:42 <itidus21> all energy becomes concentrated on survival
22:25:52 <itidus21> unfortunately its quite useless
22:26:37 <itidus21> if drowning reflex worked you wouldn't need bodyguards
22:26:44 <itidus21> ^lifeguards
22:29:47 -!- Patashu has joined.
22:34:28 <Guest53387> itidus21: You're responding to RANDOM LINES FROM THE LOG?!?!
22:35:05 <monqy> hi Guest53387
22:35:42 <itidus21> Guest53387: yeah, except, i must add that it migt be a social thing.. but the point is the drowning reflex is something you could be 5 feet away from someone and not know they're drowning
22:35:50 <itidus21> unless you know what to look for
22:36:26 <monqy> I'm going to try this responding to random lines from the log thing
22:36:27 <monqy> `log
22:36:29 <HackEgo> 2007-05-03.txt:15:29:14: -!- crathman has joined #esoteric.
22:36:34 <monqy> hi crathman
22:36:36 <monqy> `log
22:36:38 <HackEgo> 2006-10-13.txt:23:38:47: <ihope> RodgerTheGreat: wait, writing all this on the alphasmart thing?
22:36:45 <itidus21> human body is not good at a few things "rotting teeth"... "drowning"
22:36:55 <Guest53387> HALLO I AM GUEST
22:37:02 <olsner> human body is bad at many things
22:37:20 <monqy> `log
22:37:20 <Guest53387> SHALL WE WORSHIP THE GREAT OVERSEER NOW?
22:37:21 <HackEgo> 2007-11-19.txt:23:09:02: <oklopol> unfortunately people don't seem to be able to learn an alphabet no matter how many memory pegs you give them
22:37:28 <itidus21> i mean we need a dentist industry to avoid chronic tooth pain? its really that bad?
22:37:43 <itidus21> evolution fucked up on the teeth department
22:37:52 <monqy> :'(
22:38:14 -!- Guest53387 has changed nick to Gregor.
22:38:27 <DH____> Pfft. You're just being picky...
22:38:41 <monqy> `log
22:38:43 <HackEgo> 2005-01-25.txt:05:06:25: -!- calamari has joined #esoteric.
22:38:50 <monqy> hi calamari
22:38:54 <oerjan> itidus21: evolution may not have foreseen industrial sugar
22:38:57 <itidus21> well i feel bad about my rant before
22:39:12 <itidus21> so im overcompensating :)
22:39:24 <DH____> As long as you don't care what you look like you rarely need to go to a dentist...
22:39:43 <itidus21> but a toothache won't just stop
22:39:44 <Gregor> To be fair, evolution has no interest.
22:40:05 <Gregor> Evolution cares only enough about you to make sure you get laid.
22:40:11 <Gregor> After that, it leaves you on the curb.
22:40:18 <itidus21> dh_ ok you're right
22:40:21 <Gregor> Evolution is the ultimate wham-bam-thank-you-{ma'am,sir}
22:41:00 -!- ive has quit (Ping timeout: 260 seconds).
22:41:10 <oerjan> Gregor: there _is_ a theory that humans have evolved the ability to be grandparents, you know
22:41:44 <Gregor> oerjan: OK, OK, it's more like "until children are weaned", but basically its influence drops quite fast after your kids are likely to have kids.
22:41:46 * oerjan does suspect Gregor is not entirely serious
22:41:50 <monqy> I've even heard myths of great grandparents
22:42:07 <oerjan> i think i met my great grandfather once
22:42:24 <oerjan> but i was quite small
22:42:26 <itidus21> :o
22:42:36 <itidus21> ability to be grandparents
22:42:42 <itidus21> thats pretty intense
22:42:45 <monqy> it's like a superpower
22:42:48 <olsner> woah, GRANDparents
22:43:00 <itidus21> most animals don't become grandparents?
22:43:31 <oerjan> erm, i mean ability to have a _role_ as grandparents, as opposed to just generally existing (or not)
22:43:50 <itidus21> `log sandwich
22:43:53 <HackEgo> 2009-02-28.txt:20:19:26: <GregorR> People need to replace the term "GLBT" with "GBLT". Support your local gay bacon lettuce and tomato sandwich.
22:44:03 <olsner> `log sammich
22:44:06 <HackEgo> 2009-05-28.txt:21:28:38: <GregorR-L> !bfjoust make_me_a_sammich (>)*10+>->+[[-]>+]
22:44:19 <itidus21> `log bread
22:44:20 <oerjan> perhaps some other very social animals do too
22:44:23 <HackEgo> 2007-04-09.txt:00:51:29: <SevenInchBread> but I'm assuming that's what they exist for.
22:44:31 <itidus21> `log toast
22:44:31 <olsner> Gregor's spelling of sandwich is inconsistent :/
22:44:34 <HackEgo> 2010-12-17.txt:19:31:42: <Deewiant> elliott: No, but my toaster is.
22:44:48 <itidus21> `log crossaint
22:44:52 <HackEgo> 2011-09-15.txt:22:44:48: <itidus21> `log crossaint
22:44:53 <monqy> samwich, sandmich
22:45:06 <olsner> `log burrito
22:45:09 <HackEgo> 2011-03-20.txt:22:26:31: <myndzi> aw, i put a burrito in the microwave on defrost and it burst
22:45:18 <monqy> that happens to me too
22:45:20 <itidus21> `log sandwich
22:45:24 <HackEgo> 2010-01-17.txt:00:13:34: <Gregor> I am eating a turkey sandwich made with it /right now/.
22:45:24 <oerjan> olsner: not every sandwitch raises to the quality needed to be a sammitch. or so i hear.
22:45:32 <oerjan> *sandwich
22:45:35 <itidus21> `log sandwich
22:45:37 <Gregor> I believe
22:45:39 <HackEgo> 2010-12-09.txt:19:07:39: <fizzie> Phantom_Hoover: Or lightly-garnished sandwiches.
22:45:40 <Gregor> That the "it" there
22:45:43 <olsner> oerjan: so you hear, so you hear
22:45:43 <Gregor> Was BACONNAISE
22:45:47 <monqy> sandwhich
22:46:03 <itidus21> `log sammich
22:46:06 <HackEgo> 2009-11-13.txt:20:03:58: <zzo38> I found a page on the wiki called [[Sammich]] but it seems it so far is only a example program, do you think anything should be done with that?
22:46:46 <monqy> sammich is a bad wiki page
22:48:09 <oerjan> sammizdat
22:49:30 -!- nooga has joined.
22:52:19 <itidus21> http://blog.progopedia.com/2011/jul/31/gourmet-programming/
23:04:06 <itidus21> ok so i was thinking and reading,
23:04:29 <itidus21> it has occured to me that chessboard does not contain an encoding of the rules of chess within itself
23:04:38 <Patashu> yup
23:04:45 <itidus21> this is a terrible situation
23:05:15 <itidus21> so i thought of a possible solution
23:05:50 <oerjan> the quineboard!
23:07:52 <DH____> Not a cheeseboard for gourmet programming?
23:08:07 <Patashu> There are chess variants about food
23:08:44 <itidus21> i was reading hither and thither
23:09:49 <itidus21> ok this is the general idea http://oi53.tinypic.com/21jtzs5.jpg
23:10:31 <itidus21> someone in here once mentioned to me that some game where each piece was a chessboard of its own
23:11:09 <itidus21> but the idea i am looking at here is each piece is an address of some program section which defines it
23:11:35 * oerjan suddenly is reminded of titan
23:12:03 <oerjan> oh, also shogun
23:12:27 <itidus21> so the chessboard itself i am trying to see as being just a part of a program
23:12:39 <oerjan> although that wasn't every piece, just a smaller board for battles
23:12:55 <Patashu> there are plenty of chess programs
23:13:34 <itidus21> humm.. so how would it work.. it would be
23:14:22 <itidus21> well firstly you might have a data structure representing a chess piece
23:15:08 <itidus21> and each class of chess piece could be some numbers plugged into that data structure
23:16:01 <itidus21> and, so, you could, say each piece was a pointer to a chess piece data structure
23:16:23 -!- copumpkin has quit (Quit: Computer has gone to sleep.).
23:18:00 <itidus21> ok Betza defines a pawn as "mfWcfFimfW2" and Parlett defines a pawn as "o1>, c1X>, io2>"
23:18:20 <itidus21> so you could store "mfWcfFimfW2" at say, address 100
23:18:50 <itidus21> and your row of pawns would then all be pointers to address 100
23:19:50 <itidus21> now if a piece could break out of the board.. and tamper with the definition of a pawn
23:20:03 <itidus21> it could start getting quite interesting
23:23:15 -!- nooga has quit (Ping timeout: 240 seconds).
23:29:39 -!- Jafet has quit (Quit: Leaving.).
23:29:44 <itidus21> Patashu: so the program becomes the board.. and pieces are presumably tracked by some kind of array or list
23:34:36 <itidus21> so when it is your turn you would select a cell from those available in your list of cells, and a desired place to move it, and it would look up the instructions of the piece by following its address
23:34:39 -!- augur has joined.
23:35:05 <itidus21> for example pawns might be described at address 100, and then, if your move is possible it would be made
23:37:05 -!- ive has joined.
23:52:03 <CakeProphet> itidus21: there is no fenestrated wall in programs.
23:53:11 <CakeProphet> ^style europarl
23:53:11 <fungot> Selected style: europarl (European Parliament speeches during approx. 1996-2006)
23:53:14 <CakeProphet> fungot: you make me fun
23:53:15 <fungot> CakeProphet: mr president, as a result of this position, which is the accelerated procedure allowing the implementation of the civil aspects of the euro is not just thought about young people we should recognise that we must not allow ourselves to create a specialized, centralized courts in all our countries are going to guarantee the democratic legitimacy of the european union
23:53:30 <CakeProphet> fungot: you make me fun
23:53:31 <fungot> CakeProphet: mr president, i should like to start by thanking mr salafranca snchez-neyra has said, i have to say. because development cooperation has been placing increasing emphasis on development by integration into the market of genetically-modified maize modified by fnord, the parameters of the berlin wall, which amounts to resigning itself to a structural reform of its organisation and is asking the commission to consult
23:56:46 <oerjan> there should be a fenestrated wall in programs, so that you can have a defenestrate command.
23:57:58 -!- fungot has quit (Ping timeout: 244 seconds).
23:59:11 <oerjan> ouch
2011-09-16
00:00:46 <monqy> oh no
00:01:12 -!- Jafet has joined.
00:05:32 <CakeProphet> itidus21: meaning that anything in the program that goes "outside the bounds" of the system has either been designed as part of the system, or is most likely a bug/segfault.
00:05:46 <Lymee> http://i55.tinypic.com/15gwgwh.png < Pretty? :3
00:10:56 -!- Gregor has changed nick to Guest53387.
00:11:32 -!- Guest53387 has changed nick to Gregor.
00:11:40 <Gregor> Argh
00:12:29 <itidus21> CakeProphet: yeah..
00:13:11 <itidus21> a properly implemented chessboard and chess rules will never bring about a situation where the pieces can leave the board
00:13:36 <itidus21> leaving board has to be by design or by hacking/bugs
00:15:30 <itidus21> theres this problem that a game doesn't necessarily become better by being larger or more complicated
00:18:18 <monqy> how is that a problem
00:19:00 <itidus21> like it can be a memory test[eg the game memory], a reflex test[arcade/action games], a calculation test[puzzle/strategy games], a strength test[punching bag style games/some sports], a stamina test[some sports]
00:19:40 <itidus21> also.. it can be a test of how much time and money you have
00:20:41 <itidus21> the idlerpg game is like a test of how long you can maintain an irc connection
00:21:55 <itidus21> some games where you can buy items or priviliges with real world money show that off... and being able to afford better internet connections or living in country with good internet can improve that
00:22:01 -!- augur has quit (Remote host closed the connection).
00:22:05 <Sgeo__> How about the game where you lose if someone else starts playing within a certain time?
00:23:00 <itidus21> also games can be a test of the ability to cheat or hacking it
00:24:31 <itidus21> monqy: because i want to think up a cool game.. and it would be easy if all i had to do was say "bigger! more complicated!"
00:25:15 <itidus21> the trick is that a game does not infact prove superiority of one over another.. it is an illusion of the ego
00:29:49 <itidus21> so, another way i try to look at it is the value of art
00:30:01 -!- ive has quit (Ping timeout: 276 seconds).
00:31:03 <itidus21> poetry, novels, drawings, paintings, musical compositions, sculptures, garden arrangements, house decoration
00:31:15 <itidus21> ^film
00:31:17 -!- copumpkin has joined.
00:31:54 <itidus21> theater plays, operas, orchestras, concerts, puppet shows, circuses
00:32:45 <itidus21> singing, dancing
00:33:58 <itidus21> origami, martial arts, fashion
00:34:34 <itidus21> cooking
00:35:06 <oerjan> bonsai kittens
00:35:52 * oerjan waits for itidus21 to run away screaming
00:36:46 <itidus21> now whether science, mathematics, physics, electronics, engineering, philosophy, religion, programming etc, fits in with that first list i am not sure
00:37:08 <Jafet> Sex.
00:42:25 <itidus21> now these things difficult to classify religion, business, politics, law, military, sales, marketing, tourism, psychology(could be science)
00:42:37 -!- CakeProphet has quit (Ping timeout: 252 seconds).
00:43:08 <itidus21> the last ones seem to be a category of things which are particularly social in nature
00:44:01 -!- oerjan has quit (Quit: Good night).
00:44:17 <itidus21> so, i am left wondering where gaming fits in to all this
00:45:11 <itidus21> is it a drug.. is it a shallow consumable..
00:45:21 <itidus21> is it an artform
00:45:30 <itidus21> is it a science
00:47:02 <itidus21> perhaps a game can be enjoyed or not enjoyed in just the same way as everything else
00:47:57 -!- qnix has joined.
00:48:23 <itidus21> upon a stable basis of friendly people wanting to interact a game can perform it's magic
01:03:46 <itidus21> so drawing my attention now to how games are played. chess tables in a park. gambling in wild west saloons. casinos. basketball courts. football fields. olympic stadiums. racing tracks. slot car racing venues. golf courses. arcade game places.
01:04:07 <itidus21> billiads/pool halls.
01:04:25 <itidus21> ^bulliards
01:07:02 <itidus21> on a phone. bedroom PC. a lan cafe. lan parties. family tv with console attached. tabletop games like board games, military sims, role playing games
01:07:59 <itidus21> marble games often played outdoors
01:09:31 <itidus21> i spy, charades, travel versions of some board games
01:09:51 <itidus21> newspaper puzzles, magazine puzzles,
01:10:13 <itidus21> live action role playing games(LARP)
01:11:13 <itidus21> hop scotch. tennis ball bouncing games, such as bouncing in squares of pavement or bouncing off a wall
01:11:48 <itidus21> easter egg hunts
01:13:28 <itidus21> some games seems to be played for entertainment, some played for profit..
01:14:25 <itidus21> some for .. i don't know.. i can't really understand mathematicians or why they play mathematical games
01:15:50 <itidus21> perhaps those are also entertaining, but there is certainly some educational value to some games too
01:16:37 <itidus21> however, education of course is a means and not an end, and yet we hope that we never stop learning
01:17:59 * itidus21 walks off in the twilight among the chirps of crickets, satisfied.
01:21:00 -!- HolyBlood has joined.
01:28:02 -!- HolyBlood has quit.
01:30:02 -!- CakeProphet has joined.
01:30:24 <CakeProphet> sex with bonsai kittens?
01:32:36 <monqy> ew
01:33:43 <CakeProphet> !kill monqy
01:36:04 -!- kmc has quit (Ping timeout: 260 seconds).
01:36:12 <monqy> hi
01:36:25 <Jafet> And I thought the psycho-babble thing was a joke
01:36:32 <CakeProphet> nope.
01:36:39 <CakeProphet> it is most definitely not a joke.
01:36:43 <CakeProphet> it is our tpic.
01:37:00 <Jafet> Shit just god Freudian
01:37:10 <Jafet> gott, even
01:37:17 <CakeProphet> Freudian slip.
01:37:33 <CakeProphet> hmmmm
01:38:01 <CakeProphet> so I have: caramel frappucino, banana foster, pumpkin spice, and fuzzy peach
01:38:07 <CakeProphet> which flavors should I mix into my hookah bowl?
01:43:55 <CakeProphet> !haskell import System.Random;import Control.Monad; main = print =<< pick (filterM (const [True, False]) ["cf, "bf", "ps", "fp"]) where pick ls = randomRIO (0, length ls) >>= (ls!!)
01:44:54 <CakeProphet> !haskell import System.Random;import Control.Monad; main = print =<< pick (filterM (const [True, False]) ["cf", "bf", "ps", "fp"]) where pick ls = randomRIO (0, length ls) >>= (ls!!)
01:46:02 <CakeProphet> oh...
01:46:30 <CakeProphet> !haskell import System.Random;import Control.Monad; main = print =<< pick (filterM (const [True, False]) ["cf", "bf", "ps", "fp"]) where pick ls = randomRIO (0, length ls) >>= (return.(ls!!))
01:46:31 <monqy> I see a few problems with that
01:46:35 <EgoBot> ​["bf","ps","fp"]
01:46:41 <CakeProphet> I NOW SEE NONE
01:46:53 <CakeProphet> that is actually a good combination..
01:47:22 <CakeProphet> I could just use fmap instead of >>= in pick
01:47:51 <CakeProphet> !haskell import System.Random;import Control.Monad; main = print =<< pick (filterM (const [True, False]) ["cf", "bf", "ps", "fp"]) where pick ls = (ls!!) <$> randomRIO (0, length ls)
01:48:08 <monqy> hheheheh
01:48:15 <CakeProphet> !haskell import System.Random;import Control.Monad; main = print =<< pick (filterM (const [True, False]) ["cf", "bf", "ps", "fp"]) where pick ls = (ls!!) `fmap` randomRIO (0, length ls)
01:48:19 <CakeProphet> monqy: shush
01:48:20 <EgoBot> ​["ps"]
01:48:22 <monqy> hheheheh
01:48:26 <CakeProphet> what? :P
01:48:29 -!- kmc has joined.
01:48:34 <monqy> what a boring mix
01:48:38 <monqy> at least you didn't get the empty list
01:48:41 <monqy> that would have been dreadful
01:48:42 <CakeProphet> well, one flavor alone is delicious.
01:49:07 <CakeProphet> why is <$> in Control.Applicative anyways.
01:49:09 <CakeProphet> it should be with fmap.
01:52:05 <CakeProphet> I wonder if there's a better way to do pick without using both length and !!
01:52:21 <CakeProphet> seems like you need the length to calculate the probability either way.
01:52:34 <CakeProphet> if you wanted it to be evenly distributed.
01:53:58 <CakeProphet> @pl pick ls = (ls!!) `fmap` randomRIO (0, length ls)
01:53:59 <monqy> you could also do it differently
01:53:59 <lambdabot> pick = liftM2 fmap (!!) (randomRIO . (,) 0 . length)
01:54:17 <CakeProphet> monqy: right that's basically the question I was asking. "I wonder if I could do it differently"
01:54:21 <monqy> hehehe
01:54:28 <monqy> I'm going to do it differently now
01:55:33 <CakeProphet> ah I know how you could do it differently.
01:55:41 <CakeProphet> .5 probability for each element.
01:55:47 <monqy> yes that's what i was going to do
01:55:48 <CakeProphet> basically skip the power set.
01:56:12 <CakeProphet> perhaps the power set is never the best way to do anything. :P
01:56:29 <monqy> getting the power set is a good way to get the power set
01:56:37 <CakeProphet> true enough.
01:56:56 <CakeProphet> it seems like most of the algorithms involving a power set can be reduced to something more efficient that is essentially equivalent.
01:58:14 -!- Jafet has quit (Quit: Leaving.).
01:58:53 <CakeProphet> !haskell import System.Random;import Control.Monad; main = print =<< filterM (randomRIO (False,True)) ["cf", "bf", "ps", "fp"]
01:59:01 <CakeProphet> bah
01:59:52 <CakeProphet> :t const <$> (undefined :: IO Bool)
01:59:53 <lambdabot> forall b. IO (b -> Bool)
02:00:00 <CakeProphet> :t const (undefined :: IO Bool)
02:00:00 <lambdabot> forall b. b -> IO Bool
02:00:10 <CakeProphet> !haskell import System.Random;import Control.Monad; main = print =<< filterM (const $ randomRIO (False,True)) ["cf", "bf", "ps", "fp"]
02:00:15 <EgoBot> ​["cf","bf"]
02:01:03 <CakeProphet> I think I'll try that one actually
02:01:06 <CakeProphet> sounds like a good combo.
02:02:30 <monqy> > unsafeCoerce (const Nothing :: a -> Maybe a) :: Int
02:02:31 <lambdabot> Not in scope: `unsafeCoerce'
02:02:38 <monqy> > Unsafe.Coerce.unsafeCoerce (const Nothing :: a -> Maybe a) :: Int
02:02:39 <lambdabot> Not in scope: `Unsafe.Coerce.unsafeCoerce'
02:02:39 <CakeProphet> also, today I learned this:
02:02:41 <monqy> oops
02:02:44 <CakeProphet> :t ap const const
02:02:45 <lambdabot> forall b. b -> b
02:03:05 <monqy> SKK
02:03:09 <CakeProphet> yes, is I
02:03:13 <monqy> yes
02:03:19 <monqy> isn't it common knowledge?
02:03:37 <CakeProphet> ....uh, you have a strange definition of "common knowledge"
02:04:29 <monqy> common knowledge amongst those who know anything about the ski combinator calculus
02:04:38 <CakeProphet> oh, well yes.
02:04:54 <CakeProphet> I'm not very good SKI though
02:04:56 <CakeProphet> or lambda calculus
02:04:58 <CakeProphet> or anything of that nature.
02:05:04 <CakeProphet> I just know what they are.
02:05:54 <CakeProphet> and then I learned:
02:05:57 <CakeProphet> let's see if I can remember it...
02:06:08 <CakeProphet> :t ap (const ap) const
02:06:09 <lambdabot> forall a b b1. (a -> b) -> (b1 -> a) -> b1 -> b
02:07:37 <CakeProphet> though I should have already known that one.
02:08:36 <CakeProphet> because it's B in BCKW
02:10:05 <CakeProphet> :t ap (const (ap id id )) (ap (ap (const ap) const) (const (ap id id)))
02:10:06 <lambdabot> Occurs check: cannot construct the infinite type: a = a -> b
02:10:06 <lambdabot> Probable cause: `id' is applied to too few arguments
02:10:06 <lambdabot> In the second argument of `ap', namely `id'
02:10:31 <monqy> (ap id id) is a bad idea
02:10:45 <CakeProphet> well, that would be Y... but Haskell doesn't allow that to type.
02:10:49 <monqy> i mean
02:12:10 <monqy> i guess i meant what i said oops
02:12:11 -!- augur has joined.
02:13:02 <CakeProphet> :t ap (id id)
02:13:03 <lambdabot> forall a b. ((a -> b) -> a) -> (a -> b) -> b
02:13:09 <CakeProphet> :t ap id id
02:13:09 <lambdabot> Occurs check: cannot construct the infinite type: a = a -> b
02:13:10 <lambdabot> Probable cause: `id' is applied to too few arguments
02:13:10 <lambdabot> In the second argument of `ap', namely `id'
02:13:14 -!- DH____ has quit (Read error: Connection reset by peer).
02:13:17 <CakeProphet> :t ap id
02:13:18 <lambdabot> forall a b. ((a -> b) -> a) -> (a -> b) -> b
02:13:28 -!- Jafet has joined.
02:13:34 -!- DH____ has joined.
02:13:50 <CakeProphet> @hoogle (a -> b) -> a
02:13:50 <lambdabot> Data.Function fix :: (a -> a) -> a
02:13:50 <lambdabot> Control.Monad.Fix fix :: (a -> a) -> a
02:13:50 <lambdabot> Data.Generics.Schemes everywhere :: (a -> a) -> a -> a
02:13:59 <CakeProphet> bah
02:15:15 <CakeProphet> !haskell :t id
02:15:17 <EgoBot> id :: a -> a
02:15:38 <CakeProphet> hmmm, but I can't import stuff.
02:16:21 <CakeProphet> oh well I'll find out what happens.
02:17:12 -!- DH____ has quit (Read error: Connection reset by peer).
02:18:21 <CakeProphet> !haskell import Unsafe.Coerce; import Control.Monad; main = print $ fix (1:) where fix = ap (const (ap id (unsafeCoerce id :: (a -> b) -> a))) (ap (ap (const ap) const) (const (ap id (unsafeCoerce id :: (a -> b) -> a))))
02:18:48 <CakeProphet> :P
02:20:58 <CakeProphet> not sure where the error is. it just says "compilation errors
02:21:00 <CakeProphet> "
02:21:43 <monqy> nice
02:22:25 <CakeProphet> obviously if I just tell the type system everything is okay then it'll work perfectly.
02:24:09 <CakeProphet> hmmm maybe...
02:24:41 <CakeProphet> !haskell import Unsafe.Coerce; import Control.Monad; main = print $ fix (1:) where fix = ap (const (ap id unsafeCoerce)) (ap (ap (const ap) const) (const (ap id unsafeCoerce)))
02:25:03 <CakeProphet> ah
02:25:44 <CakeProphet> !haskell import Unsafe.Coerce; import Control.Monad; import Control.Monad.Instances; main = print $ fix (1:) where fix = ap (const (ap id unsafeCoerce)) (ap (ap (const ap) const) (const (ap id unsafeCoerce)))
02:26:06 <CakeProphet> .....uh, no compilation errors I think.
02:26:11 <CakeProphet> so it just crashes I guess.
02:31:29 * Sgeo__ decides no one here wants to hear about what happened today.
02:31:35 <Sgeo__> And even if someone did: It's private.
02:32:04 <Sgeo__> I guess the fact that something happened that I deem private isn't private, though
02:32:32 <itidus21> yeah, we can take the burden of knowing something happened without knowing what it was
02:40:59 <Sgeo__> ?` Sgeo
02:40:59 <lambdabot> Maybe you meant: . ? @ v
02:41:04 <Sgeo__> `? Sgeo
02:41:06 <HackEgo> Sgeo invented Metaplace sex.
02:42:01 <CakeProphet> wow skype is incredibly shitty
02:42:07 <monqy> yep
02:43:28 <Sgeo__> Is there anything better than skype?
02:44:31 <CakeProphet> any IM client, for text conversations
02:44:33 <CakeProphet> or IRC
02:44:45 <Sgeo__> What about for video chat?
02:45:42 <CakeProphet> no idea.
02:45:55 <CakeProphet> wow
02:46:01 <CakeProphet> skype is completely unusuable right now.
02:46:04 <CakeProphet> how terrible.
02:46:11 * Sgeo__ highly doubts that ooVoo counts as better
02:46:21 <Sgeo__> Although it was working earlier
02:51:04 <CakeProphet> fungot: help you are gone.
02:53:15 <monqy> ;_;
03:02:56 <itidus21> `log smeg
03:03:00 <HackEgo> 2010-07-28.txt:00:05:30: * cpressey wonders who the smeg Casey & Andy are and why they've been mentioned three times in here today
03:03:22 <itidus21> `log smeg
03:03:25 <HackEgo> 2011-09-16.txt:03:03:00: <HackEgo> 2010-07-28.txt:00:05:30: * cpressey wonders who the smeg Casey & Andy are and why they've been mentioned three times in here today
03:03:31 <itidus21> o.o
03:04:12 <itidus21> `log loller
03:04:15 <HackEgo> 2005-09-07.txt:14:04:35: <kipple_> Aardwolf: are you the designer of Brainloller?
03:04:48 <itidus21> `log fuck
03:04:52 <HackEgo> 2008-08-12.txt:09:27:27: <AnMaster> asiekierka, you could make almost anything, after all brainfuck is turing complete
03:05:10 <itidus21> `log fuck
03:05:13 <HackEgo> 2010-10-16.txt:19:35:33: <pikhq> Well, it does fuck with your credit score a lot.
03:05:18 <itidus21> `log fuck
03:05:21 <HackEgo> 2011-09-15.txt:04:27:47: <elliott> Lymee: Fuck off
03:05:37 <itidus21> `log unusable
03:05:40 <HackEgo> 2010-10-21.txt:15:28:25: <Gregor> FURTHER DISCOVERY: document.elementFromPoint is effectively unusable.
03:06:30 <itidus21> `log mario
03:06:33 <HackEgo> 2011-08-11.txt:02:43:06: <Vorpal> ais523, btw I think you should be able to run around floating eyes to kill them. (Note: only makes sense if you played Mario64 I think)
03:06:49 <itidus21> `log #jesus
03:06:52 <HackEgo> 2011-08-09.txt:23:36:02: <Patashu> screw #jesus, terraria 1.0.6 is finally out http://www.terrariaonline.com/threads/1-0-6-changelog.50278/
03:07:32 <itidus21> `log http
03:07:36 <HackEgo> 2006-02-26.txt:17:26:59: <Keymaker> http://koti.mbnet.fi/yiap/stuff/antdata.txt
03:08:08 <itidus21> `log norris
03:08:11 <HackEgo> 2008-04-05.txt:03:27:07: <Slereah> Chuck Norris. Ninjas. Objectivist propaganda.
03:12:45 -!- Sgeo__ has changed nick to Sgeo.
03:13:27 <monqy> itidus21: hi
03:15:10 <Gregor> `url bin/log
03:15:11 <HackEgo> http://codu.org/projects/hackbot/fshg/index.cgi/raw-file/tip/bin/log
03:17:32 <Gregor> `fetch http://sprunge.us/JMhe
03:17:33 <HackEgo> 2011-09-16 03:17:32 URL:http://sprunge.us/JMhe [223] -> "JMhe" [1]
03:17:42 <Gregor> `run mv JMhe bin/log && chmod 0755 bin/log
03:17:44 <HackEgo> No output.
03:17:47 <Gregor> `log
03:17:49 <HackEgo> 2010-03-02.txt:01:01:26: <Gre​gor> ...
03:19:19 <Gregor> `log this log search feature sucks
03:19:21 <HackEgo> 2011-09-16.txt:03:19:19: <Gregor> `log this log search feature sucks
03:28:05 <itidus21> `log just using log to maintain some modicum of relaxation
03:28:07 <HackEgo> 2011-09-16.txt:03:28:05: <itidus21> `log just using log to maintain some modicum of relaxation
03:35:18 <qnix> any one extremely good with md5 collision and brainfuck language pm me ? :)
03:36:24 <shachaf> No one is good with MD5 coll... Oops, sorry, just got out of my time machine.
03:45:28 <itidus21> my theory that mondrian's style was already existant in flag designs
03:45:41 <itidus21> but not formalized
03:50:12 <CakeProphet> my flags are the best.
03:50:40 <CakeProphet> `celebrate
03:50:42 <HackEgo> ​/home/hackbot/hackbot.hg/multibot_cmds/lib/limits: line 5: exec: celebrate: not found
03:50:44 <CakeProphet> !celebrate
03:50:47 <CakeProphet> halp
03:50:53 <CakeProphet> @celebrate
03:50:53 <lambdabot> Unknown command, try @list
03:50:56 <CakeProphet> ?celebrate
03:50:56 <lambdabot> Unknown command, try @list
03:50:57 <CakeProphet> haaalp
03:51:15 <CakeProphet> ^celebrate
03:51:19 <CakeProphet> NO FUNGOT
03:51:24 <CakeProphet> fizzie: no fungot
03:51:36 <CakeProphet> > cycle "no fungot" --fizzie
03:51:37 <lambdabot> "no fungotno fungotno fungotno fungotno fungotno fungotno fungotno fungotno...
03:52:51 <CakeProphet> !haskell import System.Random;import Control.Monad; main = print =<< filterM (const $ randomRIO (False,True)) ["cf", "bf", "ps", "fp"]
03:52:56 <EgoBot> ​["cf","bf","ps"]
03:53:54 <CakeProphet> :t filterM
03:53:55 <lambdabot> forall a (m :: * -> *). (Monad m) => (a -> m Bool) -> [a] -> m [a]
03:55:38 <CakeProphet> !addinterp cpick haskell import System.Random;import Control.Monad; main = print =<< filterM (const $ randomRIO (False,True)) =<< words <$> getContents
03:55:38 <EgoBot> ​Interpreter cpick installed.
03:55:45 <CakeProphet> !cpick apples oranges bananas
03:55:57 <CakeProphet> NOOOO
03:56:24 <CakeProphet> !addinterp cpick haskell import System.Random;import Control.Monad; main = print =<< filterM (const $ randomRIO (False,True)) =<< fmap words getContents
03:56:24 <EgoBot> ​There is already an interpreter for cpick!
03:56:28 <CakeProphet> !delinterp cpick
03:56:28 <EgoBot> ​Interpreter cpick deleted.
03:56:30 <CakeProphet> !addinterp cpick haskell import System.Random;import Control.Monad; main = print =<< filterM (const $ randomRIO (False,True)) =<< fmap words getContents
03:56:30 <EgoBot> ​Interpreter cpick installed.
03:56:37 <CakeProphet> !cpick apples oranges bananas
03:56:42 <EgoBot> ​["apples"]
03:56:44 <CakeProphet> !cpick apples oranges bananas
03:56:49 <EgoBot> ​["oranges","bananas"]
03:59:16 <CakeProphet> :t unwords
03:59:17 <lambdabot> [String] -> String
04:00:29 <CakeProphet> !delinterp
04:00:29 <EgoBot> ​ is not a user interpreter.
04:00:58 <CakeProphet> !addinterp cpick haskell import System.Random;import Control.Monad; main = print . unwords =<< filterM (const $ randomRIO (False,True)) =<< fmap words getContents
04:00:58 <EgoBot> ​There is already an interpreter for cpick!
04:01:02 <CakeProphet> !delinterp pick
04:01:02 <EgoBot> ​That interpreter doesn't exist!
04:01:03 <CakeProphet> !addinterp cpick haskell import System.Random;import Control.Monad; main = print . unwords =<< filterM (const $ randomRIO (False,True)) =<< fmap words getContents
04:01:03 <EgoBot> ​There is already an interpreter for cpick!
04:01:06 <CakeProphet> ejrwhwer
04:01:09 <CakeProphet> !delinterp cpick
04:01:09 <EgoBot> ​Interpreter cpick deleted.
04:01:11 <CakeProphet> !addinterp cpick haskell import System.Random;import Control.Monad; main = print . unwords =<< filterM (const $ randomRIO (False,True)) =<< fmap words getContents
04:01:11 <EgoBot> ​Interpreter cpick installed.
04:01:20 <CakeProphet> !cpick apples oranges bananas
04:01:25 <EgoBot> ​"apples bananas"
04:01:49 <CakeProphet> oh...
04:01:53 <CakeProphet> !delinterp
04:01:53 <EgoBot> ​ is not a user interpreter.
04:01:57 <CakeProphet> !delinterp cpick
04:01:58 <EgoBot> ​Interpreter cpick deleted.
04:02:08 <CakeProphet> !addinterp cpick haskell import System.Random;import Control.Monad; main = putStrLn . unwords =<< filterM (const $ randomRIO (False,True)) =<< fmap words getContents
04:02:08 <EgoBot> ​Interpreter cpick installed.
04:02:13 <CakeProphet> !cpick apples oranges bananas
04:02:18 <EgoBot> apples oranges
04:07:01 <Sgeo> calamari
04:07:04 <Sgeo> No ping :(
04:08:43 <CakeProphet> the equivalent Perl would be: $,=" "; print grep {int(rand(2))} split " " for <>;
04:12:18 <CakeProphet> I wish Haskell syntax avoided parens more often. $ is pretty nice though
04:14:09 <CakeProphet> !perl $,=" "; print "test", "test"; print "test";
04:14:10 <EgoBot> test testtest
04:14:15 <CakeProphet> !perl $,=" "; print "test", "test",; print "test";
04:14:15 <EgoBot> test testtest
04:14:19 <CakeProphet> !perl $,=" "; print "test", "test",; print ,"test";
04:14:20 <EgoBot> test test
04:14:23 <CakeProphet> :(
04:14:50 <monqy> test? test test
04:14:55 <monqy> test test test
04:15:14 <CakeProphet> > words "test\ntest"
04:15:15 <lambdabot> ["test","test"]
04:15:37 <CakeProphet> > unwords . words $ "test\ntest"
04:15:38 <lambdabot> "test test"
04:15:41 <CakeProphet> SHAME ON YOU HASKELL
04:15:44 <CakeProphet> THEY ARE NOT INVERSES.
04:15:49 <CakeProphet> baaaawwww
04:15:57 <monqy> did it ever claim they were
04:16:03 <CakeProphet> no
04:16:05 <CakeProphet> >_>
04:16:21 <CakeProphet> maybe by using un-
04:19:48 <CakeProphet> !perl $,=" "; print "test", "test"; print "","test";
04:19:48 <EgoBot> test test test
04:19:50 <CakeProphet> beautiful code
04:30:20 <CakeProphet> so uh
04:30:35 <CakeProphet> what's the different between <file.h> and <cfile> in C++?
04:30:47 <CakeProphet> cstdio vs stdio.h for example
04:31:23 <CakeProphet> I'm afraid C++ is still a huge baffling mystery to me.
04:32:10 <Sgeo> CakeProphet, I think one does one thing and one does another, not sure
04:32:21 <CakeProphet> ...ah
04:32:39 <CakeProphet> I'm inclined to think stdio.h is the C header and cstdio is the C++ header
04:32:43 <CakeProphet> but maybe they're the same.
04:32:50 <Sgeo> They're almost the same, iirc
04:33:31 <Sgeo> Same functions, but cwhatever puts the functions in std::, while whatever.h leaves them global
04:33:42 <Sgeo> Note that this is for the standard library only, probably
04:33:57 <CakeProphet> right
04:33:58 <Sgeo> http://www.parashift.com/c++-faq-lite/mixing-c-and-cpp.html
04:34:43 <CakeProphet> cool so I can skip a using line. :P
04:35:26 * Sgeo shoots CakeProphet
04:36:34 <CakeProphet> what? it also means that my code will be C basically
04:36:37 <CakeProphet> which is immensely better.
04:37:07 <Sgeo> Then why not write in C?
04:37:22 <CakeProphet> I basically am at this point.
04:37:41 <Sgeo> As in, why are you using a C++ compiler?
04:38:03 <Sgeo> Also, best practices differ with some things between C and C++
04:38:44 <Sgeo> iirc, C++ forces you to cast malloc() to a void*, while in C, that's a rather bad idea
04:39:11 <Sgeo> Oh, erm, not casting to a void*, I think
04:39:15 <Sgeo> hmm, not sure
04:39:38 <Sgeo> http://stackoverflow.com/questions/605845/do-i-cast-the-result-of-malloc
04:39:54 <Sgeo> (The answer is "No" for C, and "You have to" for C++)
04:40:19 <monqy> answeR: why are you using c++
04:41:14 <CakeProphet> don't worry about it.
04:41:38 <Sgeo> Compile C with a C compiler, compile C++ with a C++ compiler.
04:41:59 <Sgeo> Although page I linked has a useful macro for if you must compile new C code with a C++ compiler
04:48:54 -!- fungot has joined.
04:49:01 <fizzie> There.
04:49:30 <fizzie> fungot: Maybe one day you should learn to restart yourself or something.
04:49:31 <fungot> fizzie: slowly a char at a time, if you're interested. seriously. especially if you're asking about
04:54:07 <CakeProphet> ^celebrate
04:54:08 <fungot> \o| |o| |o/ \m/ \m/ |o/ \o/ \o| \m/ \m/ \o| |o| |o/
04:54:08 <myndzi> | | | `\o/´ | | | `\o/´ | | |
04:54:09 <myndzi> /< >\ /< | /`\ /| |\ | /< /< |\
04:54:09 <myndzi> /`\ /'¯|_)
04:54:09 <myndzi> (_| |_) (_|
04:56:12 <shachaf> Those \m/ \m/ things are are prisoners hanging from a wall, right?
04:56:12 <myndzi> `\o/´
04:56:13 <myndzi> |
04:56:13 <myndzi> /'\
04:56:13 <myndzi> (_| |_)
04:59:44 <CakeProphet> I think it's someone jumping in the air with their fists up.
04:59:57 <CakeProphet> and out
04:59:58 <itidus21> \o/
04:59:58 <myndzi> |
04:59:58 <myndzi> /´\
05:00:31 <itidus21> shachaf: well their arms have to be up because basically
05:00:42 <itidus21> o
05:00:46 <itidus21> /|\
05:00:52 <itidus21> / \
05:01:01 <itidus21> is not possible to indicate :D
05:01:07 <shachaf> \m/ \m/ # prisoner on a rack
05:01:41 <itidus21> shachaf: ohh i see
05:02:14 <shachaf> No, that's a different thing.
05:02:25 <itidus21> had to fix my font
05:02:37 <itidus21> \m/ \m/
05:02:37 <myndzi> `\o/´
05:02:37 <myndzi> |
05:02:37 <myndzi> (_|¯´¯|_)
05:02:42 * shachaf was thinking of the cliché of... Not sure how to find a picture of it.
05:02:47 <itidus21> guh.. i aligned him wrong
05:03:16 <itidus21> keep on truckin?
05:03:38 <itidus21> nah just kidding it aint the truckin' guy :-?
05:03:55 <CakeProphet> my webcam is apparently semi-broken.
05:04:49 * itidus21 discovered just how poor i was this year when i couldn't have a digital camera even though i had the money for it on my birthday
05:06:17 * Sgeo 's webcam seems to be functional
05:07:43 <itidus21> (\webcam.webcam's cam is working) sgeo
05:08:06 <itidus21> ^ (\webcam.webcam's cam is working) (sgeo)
05:08:12 <CakeProphet> mine occasionally shows a completely green picture with black outlines
05:08:19 <CakeProphet> or will sometimes "freeze"
05:08:29 <itidus21> is that a bastardiation of LC right there? :D
05:08:38 <CakeProphet> but I can fix it by apply pressure to the top of the back of my laptop case
05:09:00 <CakeProphet> yes a terrible bastardization. whatever that means.
05:09:36 <CakeProphet> :t M.fromListWith
05:09:37 <lambdabot> forall a k. (Ord k) => (a -> a -> a) -> [(k, a)] -> M.Map k a
05:09:48 <itidus21> (\w.the cam of w is functional) (sgeo)
05:10:12 <CakeProphet> > M.fromListWith (+) . (`zip` repeat 1) $ "What is love? Baby don't hurt me."
05:10:13 <lambdabot> fromList [(' ',6),('\'',1),('.',1),('?',1),('B',1),('W',1),('a',2),('b',1),...
05:10:26 <Sgeo> M?
05:10:33 <CakeProphet> it's short for Data.Map
05:10:42 <CakeProphet> lambdabot shorthand stuff.
05:10:51 <CakeProphet> BS is bytestring and S is set I believe.
05:11:10 <itidus21> the plan of course is that (\w.the cam of w is functional) (sgeo) becomes the cam of (sgeo) is functional
05:11:51 <CakeProphet> > sortBy (compare `on` snd) . M.fromListWith (+) . (`zip` repeat 1) $ "What is love? Baby don't hurt me."
05:11:51 <lambdabot> Couldn't match expected type `[(a, b)]'
05:11:51 <lambdabot> against inferred type `Data...
05:12:22 <CakeProphet> > sortBy (compare `on` snd) . toList . M.fromListWith (+) . (`zip` repeat 1) $ "What is love? Baby don't hurt me."
05:12:23 <lambdabot> Not in scope: `toList'
05:12:29 <CakeProphet> > sortBy (compare `on` snd) . M.toList . M.fromListWith (+) . (`zip` repeat 1) $ "What is love? Baby don't hurt me."
05:12:31 <lambdabot> [('\'',1),('.',1),('?',1),('B',1),('W',1),('b',1),('d',1),('i',1),('l',1),(...
05:12:41 <itidus21> (\wx.the x of w is functional) (sgeo) (webcam)
05:12:58 <monqy> what
05:13:06 <CakeProphet> > sortBy (flip compare `on` snd) . M.toList . M.fromListWith (+) . (`zip` repeat 1) $ "What is love? Baby don't hurt me."
05:13:08 <lambdabot> [(' ',6),('t',3),('a',2),('e',2),('h',2),('o',2),('\'',1),('.',1),('?',1),(...
05:13:10 <itidus21> you know what it means, it's perfectly valid :>
05:13:24 <Sgeo> itidus21, is as addicted to pseudolambdacalculus as I am to [censored]
05:13:44 <monqy> a good summary
05:13:50 <monqy> description
05:13:51 <monqy> thing
05:13:52 <CakeProphet> s/\[censored]/cocaine/
05:13:57 <monqy> metaplace sex
05:14:21 <itidus21> it is only a coincedence that the variables s g e and o happen to spell out sgeo
05:14:34 <CakeProphet> is there anything in Haskell that lets you specify a secondary thing to sort by...
05:15:00 <CakeProphet> like, a quick pointfree way to say "if this comparison is EQ then try this one"
05:16:06 <CakeProphet> I guess you would just use if'
05:16:45 <CakeProphet> or write your own.
05:17:14 <CakeProphet> @hoogle or
05:17:14 <lambdabot> Prelude or :: [Bool] -> Bool
05:17:15 <lambdabot> Data.Foldable or :: Foldable t => t Bool -> Bool
05:17:15 <lambdabot> Data.List or :: [Bool] -> Bool
05:17:18 <Jafet> > (LT `mappend` GT, EQ `mappend` GT)
05:17:19 <lambdabot> (LT,GT)
05:17:24 <monqy> Yes there is: a Monoid instance for Ordering. I dunno if it's standard though.
05:17:26 <monqy> yes that thing
05:17:34 <monqy> the one Jafet used
05:17:39 <itidus21> (\wx.the x of w is functional) (sgeo) (webcam) is suggestive of my shameful limitations
05:17:44 <CakeProphet> > LT `mappend` EQ
05:17:44 <lambdabot> LT
05:17:48 <CakeProphet> > EQ `mappend` EQ
05:17:49 <lambdabot> EQ
05:17:50 <CakeProphet> > EQ `mappend` GT
05:17:51 <lambdabot> GT
05:17:52 <CakeProphet> > EQ `mappend` LT
05:17:52 <lambdabot> LT
05:18:07 <Jafet> > liftM2 mappend [LT..GT] [LT..GT]
05:18:07 <lambdabot> A section must be enclosed in parentheses thus: (`LT..` GT)Not in scope: `L...
05:18:15 <CakeProphet> > mappend <$> [LT..GT] <*> [LT..GT]
05:18:15 <lambdabot> A section must be enclosed in parentheses thus: (`LT..` GT)Not in scope: `L...
05:18:18 <CakeProphet> you beat me to it...
05:18:18 <Jafet> > liftM2 mappend [LT .. GT] [LT .. GT]
05:18:19 <lambdabot> [LT,LT,LT,LT,EQ,GT,GT,GT,GT]
05:18:37 <CakeProphet> hmmm, okay.
05:18:41 <CakeProphet> that's cool.
05:18:56 <monqy> you know how to use Ordering right
05:19:07 <CakeProphet> ...how could I not know how to use Ordering?
05:19:17 <monqy> by being sgeo? i dunno
05:19:21 <monqy> does sgeo know how to use Ordering
05:19:43 -!- MDude has changed nick to MSleep.
05:20:31 <CakeProphet> monqy: no really what do you mean.
05:20:47 <monqy> what do i mean by what
05:21:08 <CakeProphet> I just don't really understand why you asked that.
05:21:29 <monqy> oh
05:21:37 <itidus21> what surprised me i suppose about #esoteric is the sheer intelligence found heer
05:21:44 <monqy> because you seemed not to know what to do???
05:21:57 <CakeProphet> I'm just bad at Haskell. :P
05:22:41 <CakeProphet> @hoogle Comparing -> Comparing -> Comparing
05:22:41 <lambdabot> Warning: Unknown type Comparing
05:22:41 <lambdabot> Prelude asTypeOf :: a -> a -> a
05:22:41 <lambdabot> Network.BufferType buf_append :: BufferOp a -> a -> a -> a
05:22:47 <CakeProphet> er
05:22:52 <itidus21> i think i expected to just find half-baked versions of BASIC
05:22:54 <CakeProphet> @hoogle Ordering -> Ordering -> Ordering
05:22:54 <lambdabot> Prelude max :: Ord a => a -> a -> a
05:22:54 <lambdabot> Prelude min :: Ord a => a -> a -> a
05:22:55 <lambdabot> Data.Ord max :: Ord a => a -> a -> a
05:23:05 <CakeProphet> ....Ordering is not Ord hoogle
05:23:27 <CakeProphet> @hoogle Ordering -> Ordering
05:23:28 <lambdabot> Prelude pred :: Enum a => a -> a
05:23:28 <lambdabot> Prelude succ :: Enum a => a -> a
05:23:28 <lambdabot> Prelude id :: a -> a
05:23:41 <CakeProphet> @src comparing
05:23:41 <lambdabot> Source not found. Listen, broccoli brains, I don't have time to listen to this trash.
05:25:05 <monqy> I'm guessing comparing f = compare `on` f
05:25:24 <CakeProphet> yeah except it doesn't use on
05:25:27 <CakeProphet> but same thing.
05:25:30 * CakeProphet just looked it up.
05:26:22 <CakeProphet> > let comparingD = flip compare `on` f in sortBy (comparingD snd `mappend` comparingD fst) . M.toList . M.fromListWith (+) . (`zip` repeat 1) $ "What is love? Baby don't hurt me."
05:26:23 <lambdabot> Couldn't match expected type `((a, a) -> a)
05:26:23 <lambdabot> ...
05:26:43 <CakeProphet> > let comparingD = (flip compare `on`) in sortBy (comparingD snd `mappend` comparingD fst) . M.toList . M.fromListWith (+) . (`zip` repeat 1) $ "What is love? Baby don't hurt me."
05:26:44 <lambdabot> [(' ',6),('t',3),('o',2),('h',2),('e',2),('a',2),('y',1),('v',1),('u',1),('...
05:27:31 <CakeProphet> there should really be something like an Ordering negation. LT -> GT, GT -> LT, EQ -> EQ
05:27:58 <CakeProphet> but maybe that wouldn't do what you'd expect for partial orders?
05:28:04 * CakeProphet doesn't understand partial orders very well.
05:30:04 <CakeProphet> but still the existing combinators make complex sorts not very terrible.
05:30:11 <CakeProphet> would be nice if it were ++ instead of mappend.
05:30:51 <monqy> pull a caleskell
05:32:19 <CakeProphet> I think we could collective improve the standard lib a bit.
05:32:31 <CakeProphet> also our Prelude should definitely be called Overture. :P
05:32:59 -!- RFKorolev has joined.
05:37:34 <RFKorolev> Good time =)
05:37:46 <monqy> hi
05:41:08 <RFKorolev> Дарова всем=)
05:41:38 <monqy> nope
05:42:59 <RFKorolev> ???
05:43:53 <monqy> help
05:47:12 <RFKorolev> you need help?=)
05:47:59 <monqy> I do not understand you. This is the area in which I need help.
05:58:44 -!- Jafet has quit (Quit: Leaving.).
06:02:48 -!- RFKorolev has left.
06:02:54 <monqy> bye
06:10:53 -!- Jafet has joined.
06:12:23 <CakeProphet> hmmm, I'm not really sure why the dictionary is necessary.
06:12:43 <CakeProphet> couldn't you compile typeclasses down into a large number of specific functions, and then use those where appropriate?
06:13:12 <CakeProphet> the only exception I can think of is existentials / rank-n types
06:13:26 -!- Gregor has quit (Ping timeout: 260 seconds).
06:15:48 -!- Gregor has joined.
06:16:15 -!- Gregor has changed nick to Guest79464.
06:18:53 <Sgeo> !
06:30:36 <CakeProphet> !
06:30:45 <shachaf> ¡
06:33:03 <Patashu> I know about the permutations, combinations, combinations with repetitions and so on. But how do I calculate the possible combinations of a state machine whos possible states in each slot depend on the previous slot? e.g. slot can be lit only if slot before it was not lit
06:34:47 <fizzie>
06:41:01 <CakeProphet> Patashu: basically you have to do each one as a special case, and then add each case together.
06:41:39 <monqy> CakeProphet: oh?
06:41:44 <Patashu> I mean a closed formular
06:41:48 <Patashu> like how there's a closed formula for fibbonaci
06:42:27 <Patashu> http://pastebin.com/QS6YHr67 here's an example
06:42:32 <Patashu> I sooort of have a closed formula
06:42:45 <fizzie> For any sequence, just compute the first 5-10 numbers by hand and feed them to OEIS. Never fails.
06:43:02 <Patashu> hahaha
06:44:14 <fizzie> (It works slightly less well when you have two parameters to vary, though.)
06:44:32 <CakeProphet> yeah no sure I understand.
06:44:34 <CakeProphet> *not
06:45:39 <CakeProphet> okay so each slot has two states and there's no adjacent ons?
06:45:43 <Patashu> yes
06:45:45 <Patashu> find combinations
06:45:57 <Patashu> it looks kiiind of like the real combinations function. but not quite
06:46:09 <CakeProphet> uh... lets see.
06:46:15 <CakeProphet> I have a feeling it will involve a lot of addition.
06:46:21 <Patashu> e.g. compare to http://upload.wikimedia.org/wikipedia/commons/thumb/6/62/Combinations_with_repetition%3B_5_multichoose_3.svg/370px-Combinations_with_repetition%3B_5_multichoose_3.svg.png
06:46:29 <CakeProphet> but maybe you can compress it into something more succinct.
06:46:45 <Patashu> hmm...
06:46:53 <CakeProphet> is there a finite number of slots?
06:47:05 <CakeProphet> ....I would assume so.
06:47:09 <Patashu> it's like a staggered version of the combination function. each extra stage with more lights enters one slot later and has one slot less than the previous one
06:47:10 <Patashu> or so
06:47:10 <CakeProphet> difficult to count combinations otherwise.
06:47:19 <Patashu> yeah, we define it over s finite slots
06:48:07 <CakeProphet> ...that's pretty complicated. :P
06:48:14 <Patashu> another function I'd like is: how many ways can I draw n distinct (separated by a gap of one or more off tiles) groups on a row of m tiles
06:49:21 <Patashu> hmm... I bet something in here will help: http://en.wikipedia.org/wiki/List_of_permutation_topics if I only knew what to read first...
06:50:22 -!- Jafet has quit (Ping timeout: 252 seconds).
06:52:14 -!- Jafet has joined.
06:58:44 <fizzie> If I hand-counted the first few right (and understood the thing), it starts with 2,3,5,8,13,20,34,55..., and curiously there are no such sequences in OEIS.
06:59:05 <Patashu> if you start it with 1 (for s = 0)
06:59:08 <Patashu> it looks like fibonacci briefly
06:59:09 <Patashu> then diverges
06:59:50 <Sgeo> Patashu, hmm, was going to say similar, but was not familiar enough with Fib to immediately recognize the divergance
07:00:13 <Patashu> wait...
07:00:17 <Patashu> I don't think you hand counted them right
07:00:18 <Patashu> let me try
07:00:30 <fizzie> "Question 3 (30): If n and k are any naturals, define h(n,k) to be the number of subsets of the set {1,...,n} of size k that do not contain two adjacent numbers. For example, h(4,2) = 3 because the relevant sets are {1,3}, {1,4}, and {2,4}. The other three subsets of size 2 contain two adjacent numbers."
07:00:48 <fizzie> It has been a question on some "CMPSCI 250: Introduction to Computation" course.
07:01:20 <fizzie> (I was just going by that example paste here.)
07:01:24 <Patashu> oh, cool
07:01:36 <Patashu> but is that something you write a program to solve?
07:01:43 <Patashu> or something you write a closed formula for?
07:01:56 <fizzie> "(c,15) Prove that h(n,k) = (n choose 2k-1) for all n and k. (Hint: Define and justify a bijection from the no-adjacent element sets of size k and all the sets of size 2k-1.) "
07:02:01 <fizzie> With solutions, http://www.cs.umass.edu/~barring/cs250f04/exams/3pracsol.html
07:02:33 <Patashu> 1 1 1 1 1 1 1 1 1 1
07:02:33 <Patashu> 1 2 3 4 5 6 7 8 9
07:02:33 <Patashu> 1 3 6 10 15 21 28
07:02:33 <Patashu> 1 4 10 20 35
07:02:51 <Patashu> looks like it goes 1 2 3 5 8 12 21 33 50 73
07:03:26 <Patashu> ty, fizzie
07:03:43 <Jafet> > let cnt n = length $ filter (all (\(x,y) -> x/=y)) $ map (ap tail zip) $ subsequences [1..n] in map cnt [1..9]
07:03:44 <lambdabot> Couldn't match expected type `a -> b' against inferred type `[a1]'
07:04:04 <fizzie> 1+5+6+1 != 12.
07:04:11 <Patashu> oh yeah, 13
07:04:11 <Patashu> derp
07:05:46 <CakeProphet> Jafet: precedence error with $ I believe.
07:05:49 <Jafet> > let cnt n = length $ filter (all (\(x,y) -> x/=y)) $ map (ap zip tail) $ subsequences [1..n] in map cnt [1..9]
07:05:50 <lambdabot> [2,4,8,16,32,64,128,256,512]
07:06:09 <Jafet> Okay, that's probably not correct.
07:06:32 <fizzie> As for the 33, are you sure that shouldn't be 34? There's one more row there, it'd be 1+7+15+10+1.
07:06:48 <Jafet> > let cnt n k = length $ filter (all (\(x,y) -> x/=y)) $ map (ap zip tail) $ filter ((==k).length) $ subsequences [1..n] in [ [ cnt n k | k <- [1..n] ] | n <- [1..8] ]
07:06:50 <lambdabot> [[1],[2,1],[3,3,1],[4,6,4,1],[5,10,10,5,1],[6,15,20,15,6,1],[7,21,35,35,21,...
07:07:12 <Jafet> Proof by lambdabot
07:07:49 <fizzie> http://oeis.org/A000045 <- Fibonacci numbers, aka "F(n+2) = number of binary sequences of length n that have no consecutive 0's. F(n+2) = number of subsets of {1,2,...,n} that contain no consecutive integers."
07:08:44 <CakeProphet> oh neat.
07:08:55 <CakeProphet> an application for fibonacci numbers. :D
07:09:05 <Patashu> woah. now THAT's cool
07:09:16 -!- Jafet has quit (Quit: Leaving.).
07:09:28 <fizzie> Good old fib: it's everywhere.
07:09:46 <Patashu> I didn't realize it was just plain old fibby
07:09:48 <Patashu> XD
07:09:51 <Patashu> crazy
07:12:05 <CakeProphet> > let count = (fibs !!) . (+2); fibs = 0 : 1 : zipWith (+) fibs (tail fibs) in count 7
07:12:06 <lambdabot> 34
07:14:21 <CakeProphet> > let count = (fibs !!) . (+2); fibs = 0 : 1 : zipWith (+) fibs (tail fibs) in drop 2 fibs
07:14:22 <lambdabot> [1,2,3,5,8,13,21,34,55,89,144,233,377,610,987,1597,2584,4181,6765,10946,177...
07:15:06 <CakeProphet> the number of permutations grows fibonaccically. :P
07:15:12 <CakeProphet> (totally a real term)
07:16:59 <Patashu> fib is exponential I believe
07:17:15 <Patashu> yeah, exponential, since it grows as fast as it is big
07:17:23 <Patashu> O(2^n) ftw!
07:17:34 <fizzie> > let count = fib . (+2); fib = floor . (+0.5) . (/ (sqrt 5)) . (phi^); phi = (1 + (sqrt 5)) / 2 in count 7
07:17:35 <lambdabot> 34
07:17:54 <fizzie> Oh noes, it was longer than the fibs !!.
07:18:08 <CakeProphet> > let fibs = 0 : 1 : zipWith (+) fibs (tail fibs) in zipWith (-) (map (2^) [0..]) (drop 2 fibs)
07:18:09 <lambdabot> [0,0,1,3,8,19,43,94,201,423,880,1815,3719,7582,15397,31171,62952,126891,255...
07:18:16 <Patashu> that's a fail fib function
07:18:44 <fizzie> > [1,2,3] ‼ 1 -- can you do the unicode thing
07:18:45 <lambdabot> Not in scope: `
07:18:47 <fizzie> Aw.
07:18:48 <CakeProphet> difference in number of binary total strings vs strings with no consecutive 0's
07:19:14 <CakeProphet> Patashu: what's wrong with it?
07:19:37 <fizzie> > let l ‼ i = l !! i in [1,2,3] ‼ 1
07:19:38 <lambdabot> 2
07:20:11 <monqy> > let (‼) = (!) in [1,2,3] ‼ 1
07:20:12 <lambdabot> Couldn't match expected type `GHC.Arr.Array i e'
07:20:12 <lambdabot> against inferred t...
07:20:17 <monqy> oh oops
07:20:20 <monqy> > let (‼) = (!!) in [1,2,3] ‼ 1
07:20:20 <lambdabot> 2
07:20:22 <monqy> there all better
07:21:18 <Patashu> 1+3 = 8?
07:21:33 <CakeProphet> ...uh, no? :P
07:21:39 <Patashu> hmm
07:21:46 <Patashu> oh, I see
07:21:49 <CakeProphet> ...yeah.
07:22:03 <CakeProphet> I am counting the difference
07:22:12 <CakeProphet> how many are not possible.
07:24:12 <CakeProphet> it helps to actually read code before you criticize it. kthx :P
07:24:32 <Patashu> I still can't read haskell
07:24:35 <Patashu> especially people making fibs in haskell
07:24:44 <Patashu> I know why it works, I just can't read it
07:24:46 <Patashu> it's some arcane trickery
07:24:52 <CakeProphet> 0 : 1 : zipWith fibs (tail fibs) is beautiful and easy.
07:25:33 <Patashu> I see what it's meant to do
07:25:36 <Patashu> But I try and work through it in my head
07:25:38 <Patashu> And stack overflow
07:26:28 <CakeProphet> > let fibs = 0 : 1 : zipWith fibs (tail fibs) in fibs
07:26:28 <lambdabot> Couldn't match expected type `[a]'
07:26:28 <lambdabot> against inferred type `a -> b ->...
07:26:34 <Patashu> forgot (+)
07:26:38 <Patashu> > let fibs = 0 : 1 : zipWith (+) fibs (tail fibs) in fibs
07:26:38 <lambdabot> [0,1,1,2,3,5,8,13,21,34,55,89,144,233,377,610,987,1597,2584,4181,6765,10946...
07:26:41 <CakeProphet> > let fibs = 0 : 1 : zipWith (+) fibs (tail fibs) in fibs
07:26:41 <lambdabot> [0,1,1,2,3,5,8,13,21,34,55,89,144,233,377,610,987,1597,2584,4181,6765,10946...
07:26:43 <CakeProphet> > let fibs = 0 : 1 : zipWith (+) fibs (tail fibs) in tail fibs
07:26:44 <lambdabot> [1,1,2,3,5,8,13,21,34,55,89,144,233,377,610,987,1597,2584,4181,6765,10946,1...
07:27:26 <CakeProphet> you have 0 : 1 : *thunk* and 1 : *thunk
07:27:29 <CakeProphet> to start with
07:27:35 <Patashu> so when I want an element of fibs I ask it if it has this element. for the first two it says yes. for the third it has to run zipwith on itself. it asks for the first and second element and gets it, delivering the third. when I ask it for the fourth, it runs it on the second and third...
07:27:37 <Patashu> I think I get it
07:27:49 <CakeProphet> yep.
07:28:00 <CakeProphet> it's laziness magic.
07:28:57 <CakeProphet> > filterM (const [True, False]) "abc"
07:28:57 <lambdabot> ["abc","ab","ac","a","bc","b","c",""]
07:29:00 <CakeProphet> do you know how this one works?
07:29:07 <Patashu> so, what you were finding is how much faster it grows than 2^
07:29:11 <Patashu> one second
07:29:13 <Patashu> I want to try something
07:29:17 <CakeProphet> how slower it grows
07:29:20 <Patashu> > let fibs = 0 : 1 : zipWith (+) fibs (tail fibs) in zipWith (-) (map (3^) [0..]) (drop 2 fibs)
07:29:21 <lambdabot> [0,1,6,22,73,230,708,2153,6506,19594,58905,176914,531064,1593713,4781982,14...
07:29:31 <CakeProphet> 2^length == total number of binary strings of length
07:29:38 <Patashu> so 3^ grows faster than fibs?
07:29:42 <CakeProphet> yes.
07:29:47 <CakeProphet> 2^ grows faster than fibs.
07:29:48 <Patashu> right, I was thinking about it backwards
07:29:54 <Patashu> > let fibs = 0 : 1 : zipWith (+) fibs (tail fibs) in zipWith (-) (map (1.5^) [0..]) (drop 2 fibs)
07:29:55 <lambdabot> [0.0,-0.5,-0.75,-1.625,-2.9375,-5.40625,-9.609375,-16.9140625,-29.37109375,...
07:30:01 <Patashu> so it's between 2 and 1.5, ey?
07:30:05 <Patashu> > let fibs = 0 : 1 : zipWith (+) fibs (tail fibs) in zipWith (-) (map (1.618^) [0..]) (drop 2 fibs)
07:30:06 <lambdabot> [0.0,-0.3819999999999999,-0.38207599999999964,-0.7641989679999988,-1.146473...
07:30:13 <Patashu> yeah, about 1.618
07:30:20 <CakeProphet> and in combinatorics to get the number of possibilities in which some condition doesn't occur, you can subtract the total number by the number in which the event does occur
07:30:23 <fizzie> About phi.
07:30:26 <Patashu> ya
07:31:17 <CakeProphet> I wonder why it's Fib(n+2)
07:31:23 <CakeProphet> the +2, specifically
07:31:34 <Patashu> I don't think it needs to be?
07:31:38 <Patashu> > let fibs = 0 : 1 : zipWith (+) fibs (tail fibs) in zipWith (-) (map (1.618^) [0..]) (fibs)
07:31:39 <lambdabot> [1.0,0.6180000000000001,1.6179240000000004,2.2358010320000012,3.85352606977...
07:31:45 <Patashu> ooo
07:31:46 <Patashu> now that's cool
07:31:48 <CakeProphet> ...er, you misunderstand.
07:31:52 <Patashu> phi^2 = phi+1, did you know?
07:31:53 <Patashu> oh
07:32:07 <CakeProphet> sure did.
07:32:11 <Patashu> okay, explain away
07:32:47 <CakeProphet> I was wondering why the number of binary strings of length n with no consecutive 0's is Fib(n+2). Specifically why you add two to the length.
07:33:07 <Patashu> it must be a consequence of numbering them differently, is all
07:33:10 <Patashu> like gamma and factorial
07:33:33 <CakeProphet> yeah I have a vague intuitive idea but I don't really know how to work it out.
07:34:56 <Patashu> Well, I mean in the sense that you can start fib as 0, 1, 1, 2 or as 1, 1, 2 or as 1, 2
07:35:03 <Patashu> Depending on what scenario it arises from
07:35:12 <Patashu> After all, the two starting values of fib are given
07:35:14 <CakeProphet> I don't think starting with 1, 2 is common.
07:35:17 <Patashu> So do you give 0,1 1,1 or 1,2?
07:35:30 <Patashu> Well, in this case apparently you start with 1,2 :O)
07:35:38 <CakeProphet> ah, yeah I see.
07:35:50 <CakeProphet> because the first two cases are 1, 2 2 :P
07:35:52 <CakeProphet> -2
07:36:58 <CakeProphet> which is kind of obvious since that's what the fibonacci sequence does...
07:37:23 <fizzie> As for "why fib", there's the obvious intuitive explanation of "to generate all suitable binary strings of length N, take either '1' followed by a string of length N-1, or '01' followed by a string of length N-2".
07:37:49 <CakeProphet> ah yes
07:37:58 <CakeProphet> and the previous strings have to follow the same rule.
07:37:59 <fizzie> (I do wonder why it's "no consecutive 0s" as opposed to "no consecutive 1s", though.)
07:38:06 <CakeProphet> makes no difference though.
07:38:09 <Patashu> no difference
07:38:21 <CakeProphet> I guess they just picked one. :P
07:38:35 <Patashu> thanks fizzie
07:40:06 <CakeProphet> combinatorics is one of those fields of math that I enjoy learning about, but don't really have a talent for.
07:40:23 <CakeProphet> it's very useful.
07:41:20 <CakeProphet> hmmm I wonder if you can extend that to strings with an arbitrary number of symbols.
07:41:43 <CakeProphet> yeah..
07:41:44 <CakeProphet> you can.
07:42:36 <CakeProphet> > let f = 0 : 3 : zipWith (+) f (tail f) in f
07:42:36 <lambdabot> [0,3,3,6,9,15,24,39,63,102,165,267,432,699,1131,1830,2961,4791,7752,12543,2...
07:42:48 <CakeProphet> I think this is ternary.
07:42:50 <CakeProphet> I think.
07:43:13 <CakeProphet> with no consecutive 0's (or whatever symbol you want)
07:43:38 <CakeProphet> hmmm, no
07:43:51 -!- Jafet has joined.
07:43:58 <Patashu> that's just fib with different start
07:44:02 <Patashu> hmm
07:44:12 <CakeProphet> there would be more than 3 for the case of length 2. You'd have 01, 10, 11, 12, 21, ...
07:44:14 <Patashu> yeah, that's not right
07:44:50 <CakeProphet> it's no consecutive 0's or 1's
07:44:52 <Patashu> recursively, you can have 1 then N-1, 2 then N-1, 01 then N-2 or 02 then N-2
07:44:54 <CakeProphet> or whichever 2 symbols you want.
07:44:55 <Patashu> oh?
07:44:56 <Patashu> hmmm
07:45:11 <Patashu> so 2 then N-1, 02 then N-2 or 12 then N-2
07:45:39 <CakeProphet> it's not f(n+2) here just f(n) I believe.
07:46:05 <CakeProphet> > let f = 0 : 1 : zipWith (+) f (tail f) in f
07:46:06 <lambdabot> [0,1,1,2,3,5,8,13,21,34,55,89,144,233,377,610,987,1597,2584,4181,6765,10946...
07:46:14 <CakeProphet> ah no.
07:46:28 <CakeProphet> > let f = 1 : 3 : zipWith (+) f (tail f) in f
07:46:29 <lambdabot> [1,3,4,7,11,18,29,47,76,123,199,322,521,843,1364,2207,3571,5778,9349,15127,...
07:47:30 <CakeProphet> > replicateM 2 "012"
07:47:31 <lambdabot> ["00","01","02","10","11","12","20","21","22"]
07:47:40 <CakeProphet> nah
07:55:36 <CakeProphet> > let f = 1 : 3 : 8 : zipWith3 (+) f (tail f) (tail (tail f)) in f
07:55:37 <lambdabot> Occurs check: cannot construct the infinite type: c = c -> t
07:56:47 <CakeProphet> @pl (\x y z -> x+y+z)
07:56:47 <lambdabot> ((+) .) . (+)
07:57:00 <CakeProphet> > let f = 1 : 3 : 8 : zipWith3 ((+) :. (+)) f (tail f) (tail (tail f)) in f
07:57:01 <lambdabot> Not in scope: data constructor `:.'
07:57:07 <CakeProphet> > let f = 1 : 3 : 8 : zipWith3 ((+) .: (+)) f (tail f) (tail (tail f)) in f
07:57:08 <lambdabot> [1,3,8,12,23,43,78,144,265,487,896,1648,3031,5575,10254,18860,34689,63803,1...
07:57:33 <CakeProphet> ?
07:58:01 <CakeProphet> > replicateM 3 "abc"
07:58:01 <lambdabot> ["aaa","aab","aac","aba","abb","abc","aca","acb","acc","baa","bab","bac","b...
07:58:06 <CakeProphet> > replicateM 3 "012"
07:58:06 <lambdabot> ["000","001","002","010","011","012","020","021","022","100","101","102","1...
07:58:41 <CakeProphet> > drop 8 $ replicateM 3 "012"
07:58:41 <lambdabot> ["022","100","101","102","110","111","112","120","121","122","200","201","2...
07:58:47 <CakeProphet> > drop 7 $ replicateM 3 "012"
07:58:48 <lambdabot> ["021","022","100","101","102","110","111","112","120","121","122","200","2...
07:58:51 <CakeProphet> > drop 6 $ replicateM 3 "012"
07:58:52 <lambdabot> ["020","021","022","100","101","102","110","111","112","120","121","122","2...
07:59:38 <CakeProphet> > drop 11 $ replicateM 3 "012"
07:59:39 <lambdabot> ["102","110","111","112","120","121","122","200","201","202","210","211","2...
08:03:31 <CakeProphet> yeah I can't figure out how to do that.
08:08:01 <CakeProphet> the first numbers in the sequence are 1, 3, 8
08:10:17 <fizzie> For an alphabet of K symbols with a single "no consecutive 0s", you could construct all the N-length valid strings f(N) = "X".f(N-1) | "0X".f(N-1) where X is one out of the K-1 non-'0' symbols; so the count n(N) = (K-1)*n(N-1) + (K-1)*n(N-2) = (K-1)*(n(N-1) + n(N-2)).
08:10:27 <fizzie> In this case, 8 = 2*(1+3).
08:10:42 <CakeProphet> ah
08:11:19 <fizzie> http://oeis.org/A028859
08:11:25 <fizzie> "Number of words of length n without adjacent 0's from the alphabet {0,1,2}."
08:13:52 <Patashu> wow, cool
08:14:04 <CakeProphet> > let f k = 1 : k : zipWith ((+) `on` (*(k-1))) (f k) (tail (f k)) in f 3
08:14:08 <lambdabot> mueval-core: Time limit exceeded
08:14:10 <CakeProphet> erm
08:15:16 <CakeProphet> > let f k = let a = 1 : k : zipWith ((+) `on` (*(k-1))) a (tail a) in a in f 3
08:15:17 <lambdabot> [1,3,8,22,60,164,448,1224,3344,9136,24960,68192,186304,508992,1390592,37991...
08:15:29 <CakeProphet> > let f k = let a = 1 : k : zipWith ((+) `on` (*(k-1))) a (tail a) in a in f 4
08:15:30 <lambdabot> [1,4,15,57,216,819,3105,11772,44631,169209,641520,2432187,9221121,34959924,...
08:15:32 <CakeProphet> > let f k = let a = 1 : k : zipWith ((+) `on` (*(k-1))) a (tail a) in a in f 5
08:15:33 <lambdabot> [1,5,24,116,560,2704,13056,63040,304384,1469696,7096320,34264064,165441536,...
08:15:33 <CakeProphet> > let f k = let a = 1 : k : zipWith ((+) `on` (*(k-1))) a (tail a) in a in f 6
08:15:34 <lambdabot> [1,6,35,205,1200,7025,41125,240750,1409375,8250625,48300000,282753125,16552...
08:15:35 <CakeProphet> > let f k = let a = 1 : k : zipWith ((+) `on` (*(k-1))) a (tail a) in a in f 7
08:15:36 <lambdabot> [1,7,48,330,2268,15588,107136,736344,5060880,34783344,239065344,1643092128,...
08:16:08 <CakeProphet> wheeee
08:17:04 <CakeProphet> > let f k = let a = 1 : k : zipWith ((+) `on` (*(k-1))) a (tail a) in a in f 127
08:17:05 <lambdabot> [1,127,16128,2048130,260096508,33030224388,4194580432896,532678942817784,67...
08:17:25 <fizzie> http://oeis.org/A125145 "Number of aa-avoiding words of length n on the alphabet {a,b,c,d}." http://oeis.org/A086347 "Number of aa-avoiding words of length n on alphabet {a,b,c,d,e}."
08:18:01 <CakeProphet> so yeah, looks to be correct.
08:19:10 <fizzie> And http://oeis.org/A180033 is for 6, except it's not listed in the comments; but it's "a(n) = f*a(n-1) + 5*a(n-2) with a(0) = 1 and a(1) = 6". (The official description is "eight white queens and one red queen on a 3 X 3 chessboard".)
08:19:49 <CakeProphet> f*a(n-1)?
08:19:52 <CakeProphet> what is f?
08:20:00 <fizzie> 5. Sorry. Didn't copy-pasta.
08:20:03 <CakeProphet> ah
08:20:30 <CakeProphet> quick let's do something interesting with this knowledge.
08:20:55 <fizzie> In general, the generating function seems to be (1+x)/(1 - (k-1)x - (k-1)x^2) for all of these. I'm sure a real combinatricist could immediately tell why's that.
08:24:33 -!- itidus21 has left ("Leaving").
08:52:31 <CakeProphet> hookahzeit
08:53:01 <CakeProphet> a programming language with word-compounding would be interesting.
08:56:02 <monqy> eh?
08:56:20 <CakeProphet> monqy: ALWAYS SO CONFUSED
08:56:21 <CakeProphet> WHY
08:56:25 <monqy> why
08:57:34 <CakeProphet> !addinterp monqy haskell import Data.Char;import Control.Monad putStrLn =<< mapM toLower getContents
08:57:34 <EgoBot> ​Interpreter monqy installed.
08:57:38 <CakeProphet> !monqy WHY
08:57:40 -!- cheater has quit (Ping timeout: 260 seconds).
08:58:20 <monqy> why
08:58:23 <CakeProphet> :t mapM
08:58:24 <lambdabot> forall a (m :: * -> *) b. (Monad m) => (a -> m b) -> [a] -> m [b]
08:58:29 <CakeProphet> oh..
08:58:38 <CakeProphet> !addinterp monqy haskell import Data.Char;import Control.Monad putStrLn =<< fmap toLower getContents
08:58:38 <EgoBot> ​There is already an interpreter for monqy!
08:58:41 <CakeProphet> !delinterp monqy
08:58:41 <EgoBot> ​Interpreter monqy deleted.
08:58:41 <CakeProphet> !addinterp monqy haskell import Data.Char;import Control.Monad putStrLn =<< fmap toLower getContents
08:58:41 <EgoBot> ​Interpreter monqy installed.
08:58:48 <CakeProphet> !monqy WHY
08:58:57 <monqy> you want fmap.fmap i think
08:59:14 <CakeProphet> !delinterp monqy
08:59:14 <EgoBot> ​Interpreter monqy deleted.
08:59:26 <monqy> fmap (fmap toLower) getContents is the idea
08:59:36 <CakeProphet> !addinterp monqy perl print lc while <>
08:59:36 <EgoBot> ​Interpreter monqy installed.
08:59:40 <CakeProphet> !monqy WHY
08:59:40 <EgoBot> why
08:59:42 <monqy> ;_;
08:59:48 <monqy> besides
09:00:04 <monqy> lowercasing everything isn't quite an accurate representation, especially when I uppercase
09:00:16 <monqy> sometimes I remove puntuation, sometimes I retain it, what now??????
09:00:22 <CakeProphet> right but it's an interpreter to help you with your need to lowercase things.
09:00:30 <monqy> i do not require it
09:00:35 <CakeProphet> well it's to help me with it
09:00:47 <CakeProphet> !monqy SO THERE
09:00:48 <EgoBot> so there
09:00:52 <monqy> so there
09:01:29 <CakeProphet> as it turns out bananas foster and caramel frappucino are an excellent combination.
09:01:49 -!- kmc has quit (Quit: Leaving).
09:01:53 <CakeProphet> monqy: perhaps later it can be extended to randomly select one of multiple common cases.
09:02:06 <monqy> it will never work
09:02:18 <monqy> if the channel were not +c I'd be making extensive use of bold and underline as well
09:02:29 <CakeProphet> evil.
09:02:32 <CakeProphet> __evil__
09:02:35 <CakeProphet> _evil_
09:02:44 <CakeProphet> irssi underlines _evil_
09:02:55 <monqy> _not if there are multiple words_
09:02:55 <CakeProphet> *evil*
09:02:59 <CakeProphet> right
09:03:03 <monqy> also it's ugly
09:03:11 <CakeProphet> _a_b_
09:03:14 <CakeProphet> _a_ _b_
09:03:19 <CakeProphet> _fuck_ _you_
09:03:41 <monqy> :(
09:04:39 <CakeProphet> !addinterp irssi perl print s/\b/_/r while <>
09:04:39 <EgoBot> ​Interpreter irssi installed.
09:04:42 <CakeProphet> !irssi fuck you
09:04:43 <EgoBot> Bareword found where operator expected at /tmp/input.5480 line 1, near "s/\b/_/r"
09:04:58 <CakeProphet> um
09:05:03 <monqy> ~perl~
09:05:12 <monqy> in all its glory
09:06:56 <CakeProphet> ...I don't really understand the error.
09:07:07 <CakeProphet> ... /r is totally a thing.
09:08:08 <CakeProphet> !delinterp irssi
09:08:08 <EgoBot> ​Interpreter irssi deleted.
09:08:16 <CakeProphet> !addinterp irssi perl print $_ =~ s/\b/_/r while <>
09:08:16 <EgoBot> ​Interpreter irssi installed.
09:08:20 <CakeProphet> !irssi fuck you
09:08:20 <EgoBot> Bareword found where operator expected at /tmp/input.5834 line 1, near "s/\b/_/r"
09:08:23 <CakeProphet> ...wat
09:08:25 <CakeProphet> lies.
09:08:29 -!- nooga has joined.
09:08:30 <CakeProphet> !delinterp irssi
09:08:30 <EgoBot> ​Interpreter irssi deleted.
09:09:09 <CakeProphet> !addinterp irssi perl print ($_ =~ s/\b/_/r) while <>
09:09:09 <EgoBot> ​Interpreter irssi installed.
09:09:12 <CakeProphet> !irssi aerhiwurhuiwer weoirjiouwehr
09:09:13 <EgoBot> Bareword found where operator expected at /tmp/input.6108 line 1, near "s/\b/_/r"
09:09:20 <CakeProphet> !delinterp irssi
09:09:20 <EgoBot> ​Interpreter irssi deleted.
09:09:40 <CakeProphet> !perl $_="what?"; print s/what?/???/r
09:09:40 <EgoBot> Bareword found where operator expected at /tmp/input.6342 line 1, near "s/what?/???/r"
09:09:42 <Deewiant> CakeProphet: It doesn't like the /r
09:09:45 <CakeProphet> yes I understand
09:09:48 <CakeProphet> but... not why.
09:10:40 <CakeProphet> /r is a non-destructive substitute.
09:11:34 <fizzie> It was also added in some post-5.10 version, wasn't it?
09:11:39 <Deewiant> Added in what version?
09:11:40 <Deewiant> Right
09:12:28 <fizzie> 5.14, I think.
09:13:00 <fizzie> 5.12 manual says "s/PATTERN/REPLACEMENT/msixpogce"; 5.14 manual says "s/PATTERN/REPLACEMENT/msixpodualgcer".
09:13:07 <fizzie> (That's quite a list of modes.)
09:13:36 <Deewiant> 5.8.4 manual says s/PATTERN/REPLACEMENT/egimosx
09:13:55 <CakeProphet> !perl use 5.12; $_="what?"; print s/what?/???/r
09:13:55 <EgoBot> Perl v5.120.0 required (did you mean v5.12.0?)--this is only v5.10.1, stopped at /tmp/input.6650 line 1.
09:14:13 <fizzie> 5.12 won't help if it was introduced in 5.14.
09:14:23 <CakeProphet> right I was just checking the version.
09:14:49 <CakeProphet> use 5.12 is a version check not a "magically use this version instead".
09:14:55 <CakeProphet> even though that's kind of what it suggests that it would do.
09:15:36 <fizzie> Well, sure, but I would have thought it'd make more sense to check for 5.14 directly. But w/e.
09:15:58 <CakeProphet> yeah I just glanced up to get a version number but didn't check which one was right. :P
09:16:54 <CakeProphet> I'd imagine there's some version variable somewhere
09:17:05 <CakeProphet> !perl print __VERSION__
09:17:21 <fizzie> !perl print $^V
09:17:21 <nooga> perl
09:17:21 <EgoBot> v5.10.1
09:17:27 <CakeProphet> ah
09:17:47 <CakeProphet> yeah one day I'm going to go memorize all of those global variables.
09:17:50 <fizzie> (Also $PERL_VERSION, but $^V is definitely more perly.)
09:17:51 <CakeProphet> (Note: not really)
09:17:57 <fizzie> !perl print $]
09:17:57 <EgoBot> 5.010001
09:18:02 <fizzie> Yes, that's also better.
09:18:08 <fizzie> At least it's punctuation-only.
09:18:11 <CakeProphet> what, why ]
09:18:30 <fizzie> "Mnemonic: Is this version of perl in the right bracket?"
09:18:36 <fizzie> Of course.
09:18:45 <CakeProphet> !perl $[=100; print (1,2,3)[101]
09:18:46 <EgoBot> syntax error at /tmp/input.7119 line 1, near ")["
09:18:51 <CakeProphet> !perl $[=100; print ((1,2,3)[101])
09:18:52 <EgoBot> 2
09:18:54 <CakeProphet> bah stupid stupid stupid
09:18:58 <Deewiant> Of those, only $] works in my 5.8.4
09:19:11 <CakeProphet> I hate that it cannot parse list_literal[index]
09:19:15 <fizzie> Deewiant: Weird; the $] docs say "Deprecated in Perl 5.6".
09:19:17 <CakeProphet> without () around the whole thing
09:19:44 <fizzie> "This variable [$^V] first appeared in perl 5.6.0; earlier versions of perl will see an undefined value. Before perl 5.10.0 $^V was represented as a v-string."
09:20:10 <CakeProphet> sounds like checking versions without the use pragma is kind of a pain.
09:21:06 <fizzie> Perl 5.12 deprecates $[, incidentally.
09:21:15 <CakeProphet> it is kind of terrible, yes.
09:21:27 <Deewiant> Oh no, it works
09:21:31 <Deewiant> It just prints in binary
09:21:38 <Deewiant> 0x05 0x08 0x04
09:21:50 <fizzie> Deewiant: Yes, well, it's a v-string pre-5.10, like the above says.
09:22:04 <Deewiant> As if I should know what a v-string is.
09:22:05 <CakeProphet> $[ is a nice feature, but ends up breaking things that aren't coded to use it (read: most code out there)
09:22:23 <fizzie> (s)printf's "%vd" conversion can make a string out of it.
09:22:52 <CakeProphet> I believe s?printf is a bit more perly. :P
09:22:53 <fizzie> !perl printf "%vd\n", v5.8.4
09:22:53 <EgoBot> 5.8.4
09:22:54 <Deewiant> So it can.
09:24:28 <fizzie> "Note that since Perl 5.8.1 the single-number v-strings (like v65) are not v-strings before the => operator (which is usually used to separate a hash key from a hash value); instead they are interpreted as literal strings ('v65'). They were v-strings from Perl 5.6.0 to Perl 5.8.0, but that caused more confusion and breakage than good. Multi-number v-strings like v65.66 and 65.66.67 continue to be v-strings always."
09:24:32 <fizzie> Perl. <3
09:24:50 <CakeProphet> when people write array-handling code they usually just put explicit zeroes instead of $[ thus... $[ would tend to break code
09:24:53 <CakeProphet> if anyone actually used it.
09:27:39 -!- sebbu has quit (Read error: Connection reset by peer).
09:28:03 <CakeProphet> I find it kind of hilarious that things like $[ and $/ and $\ are variable names...
09:28:05 -!- sebbu has joined.
09:28:05 -!- sebbu has quit (Changing host).
09:28:05 -!- sebbu has joined.
09:28:56 <CakeProphet> !perl print ($2mice = "2 mice")
09:28:56 <EgoBot> Bareword found where operator expected at /tmp/input.7994 line 1, near "$2mice"
09:29:03 <CakeProphet> waaaah
09:29:28 <CakeProphet> that is totally parseable.
09:29:33 <fizzie> !perl $; = " - "; %h = (); $h{"the", "best", "way", "to", "join", "strings", "with", "a", "delimiter?"} = 42; print keys %h;
09:29:33 <EgoBot> the - best - way - to - join - strings - with - a - delimiter?
09:29:54 <fizzie> "Mnemonic: comma (the syntactic subscript separator) is a semi-semicolon."
09:30:14 <CakeProphet> ...wat
09:30:17 <CakeProphet> lol
09:30:24 <CakeProphet> what a weird thing to have.
09:30:58 <CakeProphet> perl is definitely an esolang.
09:31:21 <fizzie> It's the multidimensional array fakery thing before you could conveniently make arrays-of-arrayrefs things.
09:31:38 <CakeProphet> oh right, that used to be a thing that perl couldn't do.
09:32:15 <Patashu> did you guys ever figure out the answer for no aa or bb on {abc}?
09:33:05 <fizzie> $< and $> are the UID and EUID of the process, and you can do "$< = $>;" to set uid to euid, or "($<,$>) = ($>,$<);" to swap uid/euid.
09:33:09 <CakeProphet> I would remember $; as "the other comma thing that isn't $,"
09:34:28 <CakeProphet> !perl print $^O
09:34:28 <EgoBot> linux
09:34:36 <CakeProphet> helpful
09:35:20 <CakeProphet> !perl $^O = "Win32"; print $^O
09:35:21 <EgoBot> Win32
09:35:33 <CakeProphet> hey look guys perl is a Windows emulator.
09:38:23 <fizzie> Strings S(L) of length L with no aa or bb on {abc} you could make as "a[bc]".S(L-2) | "b[ac]".S(L-2) | "c".S(L-1); so n(L) = 4*n(L-2) + n(L-1), n(0) = 1, n(1) = 3. That gives 1,3,7,19,47,123,311,803,2047,5259,13447,... seeming to match A026581.
09:38:46 <fizzie> Or no, that's not exactly right; it needs more complication for "ab".
09:39:20 <CakeProphet> hmmm what's this notation you're using.
09:39:31 <fizzie> Nothing official.
09:39:36 <CakeProphet> oh.
09:39:42 <fizzie> It would be clumsy to write as proper sets.
09:40:06 <CakeProphet> so it's like pseudo-regexp?
09:40:24 <fizzie> Pseudo-regexp-cfg, maybe.
09:40:28 <fizzie> With the | thing.
09:40:39 <fizzie> Well, I guess that's still regex.
09:40:45 <fizzie> (Too.)
09:41:06 <CakeProphet> I've got a partially written spec for a programming language that kind of resembles that notation is why I ask.
09:41:20 <CakeProphet> except things in "" match literals and not regexp
09:41:51 <CakeProphet> it's a regexp programming language of sorts.
09:43:58 <CakeProphet> all of the expressions have return values based on the input string. So you write captures as variable assignments. x = "a"*
09:45:03 -!- derdon has joined.
09:45:08 <CakeProphet> * concatenates the string result of its operand and sums the numeric results, which works out nicely.
09:46:00 <CakeProphet> it's the way perl regex should work. :D
09:47:28 <CakeProphet> I just need to a) finish the other details b) write an interpreter c) eventually try to compile it and make it efficient
09:48:32 <Patashu> I figured out that it's start 1,3,7 and then fib(n-1)+2*fib(n-2)+fib(n-3)
09:48:35 <Patashu> for no aa, bb in abc
09:48:38 <Patashu> I don't know WHY though
09:48:43 <Patashu> length 0: (1)
09:48:44 <Patashu> length 1: a, b, c (3)
09:48:44 <Patashu> length 2: ab, ba, ac, ca, bc, cb, cc (7)
09:48:44 <Patashu> length 3: c before all lengths of 2 or (ac or bc) before all lengths of 1 or ??? before all lengths of 0
09:48:44 <Patashu> what is ???
09:48:53 <fizzie> S(L) = "c".S(L-1) | "ac".S(L-2) | "bc".S(L-2) | "ab".S_a(L-2) | "ba".S_b(L-2); S_a(L) = "b".S_b(L-1) | "c".S(L-1); S_b(L) = "a".S_a(L-1) | "c".S(L-1); n(L) = n(L-1) + 2*n(L-2) + 2*n'(L-2); n'(L) = n'(L-1)+n(L-1).
09:49:00 <fizzie> > let n 0 = 1; n 1 = 3; n l = n (l-1) + (2 * (n (l-2))) + (2 * (n' (l-2))); n' 0 = 1; n' 1 = 2; n' l = n' (l-1) + n (l-1) in take 20 $ n <$> [0..]
09:49:01 <lambdabot> [1,3,7,17,41,99,239,577,1393,3363,8119,19601,47321,114243,275807,665857,160...
09:49:07 <fizzie> I may have easily screwed that up.
09:49:31 <Patashu> that's wrong
09:49:37 <Patashu> it goes 1 3 7 14 31
09:50:27 <Patashu> hmm ,wait, no
09:50:30 <Patashu> I'm mixing two sequences up now
09:51:10 <Patashu> XD
09:52:12 <Patashu> I either want to find out no aa, bb in abc OR groups(X,n) which tells you how many ways you can make X separated lines of on bulbs in n off bulbs, which I could then do *2^X on for all the possible ways of starting alternating strings
09:52:38 <Patashu> sum X from 0 to inf of groups(X,n) is that sequence 1 3 7 14 31
09:52:44 <Patashu> no aa, bb in abc will be different
09:53:14 <Patashu> a specific groups(X,n) is a specific function in the triangular number series - tri, tetra, four-d triangle, etc etc, each staggered by 2
09:53:19 <CakeProphet> > let f n = length . filter (all ((a,b) a /= b) . ap zip tail) $ replicateM n "abc" in map f [0..]
09:53:20 <lambdabot> Couldn't match expected type `t -> a'
09:53:20 <lambdabot> against inferred type `(Simpl...
09:53:30 <CakeProphet> > let f n = length . filter (all ((a,b) -> a /= b) . ap zip tail) $ replicateM n "abc" in map f [0..]
09:53:31 <lambdabot> Pattern syntax in expression context: (a, b) -> a /= b
09:53:35 <CakeProphet> bah
09:53:39 <CakeProphet> > let f n = length . filter (all (\(a,b) -> a /= b) . ap zip tail) $ replicateM n "abc" in map f [0..]
09:53:43 <lambdabot> mueval-core: Time limit exceeded
09:54:00 <CakeProphet> > let f n = length . filter (not . any (\(a,b) -> a == b) . ap zip tail) $ replicateM n "abc" in map f [0..]
09:54:04 <lambdabot> mueval-core: Time limit exceeded
09:54:23 <fizzie> abab abac abca abcb abcc acab acac acba acbc acca accb accc baba babc baca bacb bacc bcab bcac bcba bcbc bcca bccb bccc caba cabc caca cacb cacc cbab cbac cbca cbcb cbcc ccab ccac ccba ccbc ccca cccb cccc; that's quite many already.
09:54:26 <CakeProphet> that's not quite right though.
09:55:59 <Patashu> > let f n = length . filter (not . any (\(a,b) -> a == b) . ap zip tail) $ replicateM n "abc" in f 2
09:56:01 <lambdabot> 6
09:56:12 <Patashu> > let f n = filter (not . any (\(a,b) -> a == b) . ap zip tail) $ replicateM n "abc" in f 2
09:56:13 <lambdabot> ["ab","ac","ba","bc","ca","cb"]
09:56:16 <Patashu> it's missing cc
09:56:20 <Patashu> oh, you know though
09:56:40 <Patashu> > let f n = filter (not . any (\(a,b) -> a == b or a == 'c') . ap zip tail) $ replicateM n "abc" in f 2
09:56:41 <lambdabot> Precedence parsing error
09:56:41 <lambdabot> cannot mix `GHC.Classes.==' [infix 4] and `GH...
09:56:44 <Patashu> > let f n = filter (not . any (\(a,b) -> a == b || a == 'c') . ap zip tail) $ replicateM n "abc" in f 2
09:56:45 <lambdabot> ["ab","ac","ba","bc"]
09:56:51 <Patashu> oh derp
09:56:57 <Patashu> > let f n = filter (not . any (\(a,b) -> a == b && a != 'c') . ap zip tail) $ replicateM n "abc" in f 2
09:56:58 <lambdabot> Not in scope: `!='
09:57:06 <Patashu> really?
09:57:16 <CakeProphet> > let f n = length . filter (all (\x -> not (x == "aa" || x == "bb") . ap zipWith (\x y -> [x,y]) tail) $ replicateM n "abc" in f 4
09:57:16 <lambdabot> <no location info>: parse error on input `in'
09:58:34 <CakeProphet> > let f n = length . filter (all (\x -> not (x == "aa" || x == "bb")) . ap zipWith (\x y -> [x,y]) tail) $ replicateM n "abc" in f 4
09:58:35 <lambdabot> The lambda expression `\ x y -> ...' has two arguments,
09:58:35 <lambdabot> but its type `(a -...
09:59:00 <CakeProphet> > let f n = length . filter (all (\x -> not (x == "aa" || x == "bb")) . ap (zipWith (\x y -> [x,y])) tail) $ replicateM n "abc" in f 4
09:59:01 <lambdabot> 41
09:59:03 <CakeProphet> parenthesese hell lol
09:59:07 <CakeProphet> errtyjierjtioj
09:59:11 <Patashu> > let f n = length . filter (all (\x -> not (x == "aa" || x == "bb")) . ap (zipWith (\x y -> [x,y])) tail) $ replicateM n "abc" in f 2
09:59:12 <lambdabot> 7
09:59:13 <Patashu> > let f n = length . filter (all (\x -> not (x == "aa" || x == "bb")) . ap (zipWith (\x y -> [x,y])) tail) $ replicateM n "abc" in f 3
09:59:15 <lambdabot> 17
09:59:18 <Patashu> seems right to me
09:59:26 <Patashu> > let f n = length . filter (all (\x -> not (x == "aa" || x == "bb")) . ap (zipWith (\x y -> [x,y])) tail) $ replicateM n "abc" in map f [0..10]
09:59:28 <lambdabot> [1,3,7,17,41,99,239,577,1393,3363,8119]
09:59:45 <Patashu> ah, my mistake. your earlier creation was right, fizzie
09:59:51 <Patashu> just not for what I was solving
10:00:26 <CakeProphet> @pl (\x y -> [x,y])
10:00:26 <lambdabot> (. return) . (:)
10:00:44 <Patashu> now, how to prove that...
10:00:59 <fizzie> > let v 0 = [""]; v 1 = ["a","b","c"]; v n = (("c"++) <$> v (n-1)) ++ (("ac"++) <$> v (n-2)) ++ (("bc"++) <$> v (n-2)) ++ (("ab"++) <$> vb (n-2)) ++ (("ba"++) <$> va (n-2)); va 0 = [""]; va n = (("b"++) <$> vb (n-1)) ++ (("c"++) <$> v (n-1)); vb 0 = [""]; vb n = (("a"++) <$> va (n-1)) ++ (("c"++) <$> v (n-1)) in length $ v 4
10:01:01 <lambdabot> 41
10:01:07 <CakeProphet> > let f n = length . filter (all (\x -> not (x == "aa" || x == "bb")) . ap (zipWith (return .: (:)) tail) $ replicateM n "abc" in f 4
10:01:08 <lambdabot> <no location info>: parse error on input `in'
10:01:15 <Patashu> > 17+7*3+3
10:01:16 <lambdabot> 41
10:01:23 <fizzie> (That's the construction directly translated.)
10:01:23 <CakeProphet> > let f n = length . filter (all (\x -> not (x == "aa" || x == "bb")) . ap (zipWith (return .: (:))) tail) $ replicateM n "abc" in f 4
10:01:24 <lambdabot> Couldn't match expected type `GHC.Types.Char'
10:01:24 <lambdabot> against inferred type...
10:01:26 <CakeProphet> kahseiuhwseurhwuerh
10:01:28 <Patashu> > 99+17*3+7
10:01:29 <lambdabot> 157
10:01:32 <Patashu> wait
10:01:35 <CakeProphet> > let f n = length . filter (all (\x -> not (x == "aa" || x == "bb")) . ap (zipWith ((:) .: return)) tail) $ replicateM n "abc" in f 4
10:01:36 <Patashu> > 99+41*3+17
10:01:36 <lambdabot> Couldn't match expected type `[GHC.Types.Char]'
10:01:36 <lambdabot> against inferred ty...
10:01:37 <lambdabot> 239
10:01:43 <Patashu> yeah, that's the spot
10:01:43 <Patashu> :)
10:02:11 <CakeProphet> Patashu: oh btw != is /=
10:02:14 <Patashu> ah ty
10:02:16 <CakeProphet> maybe you caught that.
10:02:16 <CakeProphet> oh
10:02:17 <CakeProphet> okay.
10:02:26 <CakeProphet> yeah it threw me off for a while.
10:03:49 <CakeProphet> fizzie: also that code is crazy.
10:05:01 <Patashu> Initial conditions:
10:05:01 <Patashu> length 0: (1)
10:05:01 <Patashu> length 1: a b or c (3)
10:05:01 <Patashu> length 2: ab, ba, ac, ca, bc, cb, cc (7)
10:05:01 <Patashu> Recurrence is f(n-1)+f(n-2)*3+f(n-3):
10:05:02 <Patashu> length 3: c + string of length 2 (7) or ac or bc or ?? + string of length 1 (3*3 = 9) or ??? + string of length 0 (1) (= 17)
10:05:05 <Patashu> help me - what are ?? and ???
10:05:28 <CakeProphet> !wacro
10:05:29 <EgoBot> HIORTCAD
10:05:33 <monqy> bad
10:05:37 <CakeProphet> Patashu: HIORTCAD
10:05:40 <Patashu> oh
10:05:40 <monqy> bad
10:05:48 <fizzie> I don't know what you're looking for here.
10:05:56 <CakeProphet> monqy just stalks around and waits for me to use !wacro
10:05:58 <monqy> hiortcad is better than most though
10:05:59 <CakeProphet> I think he has it set to ping.
10:06:01 <Patashu> I'm trying to construct the reasoning behind the recurrence relationship
10:06:02 <Patashu> like when you said
10:06:05 <Patashu> Proof: For a length m, we can either add a 0 before all all lengths of m-1 or a 10 before all lengths of m-2.
10:06:10 <Patashu> I want the Proof: for no aa no bb in abc
10:07:19 <Patashu> > let f n = filter (all (\x -> not (x == "aa" || x == "bb")) . ap (zipWith (\x y -> [x,y])) tail) $ replicateM n "abc" in f 3
10:07:20 <lambdabot> ["aba","abc","aca","acb","acc","bab","bac","bca","bcb","bcc","cab","cac","c...
10:07:35 <Patashu> > let f n = filter (all (\x -> not (x == "aa" || x == "bb")) . ap (zipWith (\x y -> [x,y])) tail) $ replicateM n "abc" in take 10 f 3
10:07:35 <lambdabot> Couldn't match expected type `[a]'
10:07:36 <lambdabot> against inferred type `GHC.Types...
10:07:43 <Patashu> > let f n = filter (all (\x -> not (x == "aa" || x == "bb")) . ap (zipWith (\x y -> [x,y])) tail) $ replicateM n "abc" in take 10 (f 3)
10:07:44 <lambdabot> ["aba","abc","aca","acb","acc","bab","bac","bca","bcb","bcc"]
10:07:48 <Patashu> > let f n = filter (all (\x -> not (x == "aa" || x == "bb")) . ap (zipWith (\x y -> [x,y])) tail) $ replicateM n "abc" in drop 10 (f 3)
10:07:49 <lambdabot> ["cab","cac","cba","cbc","cca","ccb","ccc"]
10:08:19 <CakeProphet> could reduce the condition to its && and /= version FOR GREATER CLARITY OF EXPRESSION
10:08:29 <Patashu> lol
10:08:35 <CakeProphet> and (return .) . (:)
10:08:39 <CakeProphet> for the zipWith argument
10:08:57 <CakeProphet> :t return .: (:)
10:08:58 <lambdabot> forall (m :: * -> *) a. (Monad m) => a -> [a] -> m [a]
10:09:04 <CakeProphet> or that one
10:10:09 <CakeProphet> it would be neat to have an operator that was $ but with greater precedence than spaces.
10:10:31 <CakeProphet> I'll call it... $$
10:11:06 <CakeProphet> well, no that wouldn't help.
10:11:25 <fizzie> > let f1 0 = 1; f1 1 = 3; f1 2 = 7; f1 n = f1 (n-1) + 3 * f1 (n-2) + f1 (n-3); f2 0 = 1; f2 1 = 3; f2 n = 2 * f2 (n-1) + f2 (n-2) in (f1 &&& f2) <$> [0..9]
10:11:26 <lambdabot> [(1,1),(3,3),(7,7),(17,17),(41,41),(99,99),(239,239),(577,577),(1393,1393),...
10:11:33 <fizzie> Those two certainly seem to be the same thing.
10:11:45 <fizzie> So f(n) = 2f(n-1) + f(n-2).
10:11:46 <monqy> CakeProphet: a fancy circumfix operator i'm naming right now (...)
10:11:59 <CakeProphet> you could say ap zipWith $$ (return .: (:)) tail
10:12:07 <CakeProphet> and it would in no way be horrible.
10:12:15 <monqy> actually it'd be awful
10:12:23 <monqy> ap (zipwith $ return .: (:)) tail
10:12:29 <monqy> beautiful
10:12:31 <monqy> or even better
10:12:37 <monqy> ap (zipwith (return .: (:))) tail
10:12:42 <CakeProphet> I just like avoid () when possible. But I agree that is not the correct way.
10:13:00 <CakeProphet> s/when possible/ when its clearer/
10:13:04 <monqy> parentheses are the best infix operators are the worst
10:13:05 <Patashu> hmm...
10:13:18 <Patashu> > 7*2+3
10:13:18 <lambdabot> 17
10:13:21 <Patashu> > 17*2+7
10:13:22 <lambdabot> 41
10:13:22 <Patashu> wow
10:13:26 <Patashu> ok, that one works better for me
10:14:21 <CakeProphet> monqy: you must not like Haskell very much then.
10:14:33 <monqy> CakeProphet: what makes you say that?
10:14:39 <CakeProphet> because there is infix everywhere
10:14:53 <monqy> haskell is okay
10:15:08 <monqy> or even good
10:17:52 <fizzie> Patashu: Given the simpler f(n) = 2f(n-1) + f(n-2) you can just substitute in the latter to go: f(n) = 2*(2f(n-2) + f(n-3)) + f(n-2) = 5f(n-2) + 2f(n-3) = 3f(n-2) + f(n-3) + 2f(n-2) + f(n-3) = 3f(n-2) + f(n-3) + f(n-1).
10:18:06 -!- adam__ has joined.
10:18:06 <Patashu> Yeah, I figured something like that
10:18:10 <Patashu> Ok, here's my 'logical' interpretation
10:18:11 <Patashu> Initial conditions:
10:18:11 <Patashu> length 0: (1)
10:18:11 <Patashu> length 1: a b or c (3)
10:18:11 <Patashu> Recurrence is 2*f(n-1)+f(n-2):
10:18:11 <Patashu> length 2: opposite two letters (ab before c, ac before b, bc before a) before all strings of length 1 (3*2) OR cc before strings of length 0 (1) (=7) (ab, ac, ba, bc, ca, cb, cc)
10:18:12 <Patashu> length 3: opposite two letters before all strings of length 2 (7*2) OR cc before strings of length 1 (3) (=17)
10:18:12 <Patashu> length 4: opposite two letters before all strings of length 3 (17*2) OR cc before strings of length 2 (7) (=41)
10:18:13 <Patashu> etc
10:18:13 <Patashu> The recurrence covers all 'safe' ways before something that might have an unsafe letter, and then does all ccs by itself looking two back.
10:18:23 <adam__> why is there no postfix Haskell translator thing.
10:18:50 -!- CakeProphet has quit (Disconnected by services).
10:18:55 -!- adam__ has changed nick to CakeProphet.
10:18:59 <CakeProphet> EGADS MY REAL NAME HAS BEEN EXPOSED.
10:19:11 <CakeProphet> !delinterp monqy
10:19:12 <EgoBot> ​Interpreter monqy deleted.
10:19:24 <monqy> "exposed"? it's been your username forever hasn't it
10:19:28 <CakeProphet> no
10:19:31 <fizzie> Patashu: "opposite two letters before all strings of length 2" does not directly work, because you can't have "ab" before "ba".
10:19:31 <CakeProphet> no such thing.
10:19:45 <monqy> 03:20:43 [freenode] -!- CakeProphet [~adam@h222.0.18.98.dynamic.ip.windstream.net]
10:19:48 <monqy> 03:20:43 [freenode] -!- ircname : adam
10:19:53 <monqy> ~adam@...
10:19:53 <CakeProphet> lies, fabricated documents.
10:19:57 <monqy> real name: adam
10:20:29 <CakeProphet> there is no such thing as username it is a Freenode contrivance
10:20:45 <CakeProphet> Freenode hacked all RFCs to show it in the IRC protocol
10:20:52 <CakeProphet> again, a figment of nothingness.
10:21:16 -!- CakeProp1et has joined.
10:21:21 <monqy> hi
10:21:22 -!- CakeProp1et has quit (Client Quit).
10:21:32 <CakeProphet> bah
10:21:34 -!- CakeProphet has quit (Client Quit).
10:21:51 -!- CakeProphet has joined.
10:23:08 <CakeProphet> I bet a function called contrive in Haskell would do something neat.
10:29:23 <Patashu> fizzie, opposite two letters means a/c before b, a/b before c, b/c before a
10:29:24 <Patashu> it works
10:29:24 <Patashu> so
10:29:31 <fizzie> Yes, I realizezed it later.
10:29:51 <fizzie> The "ab before c" thing was just confusingly put; it didn't immediately read as "a or b before c".
10:31:24 -!- copumpkin has quit (Ping timeout: 258 seconds).
10:31:49 -!- copumpkin has joined.
10:33:27 <fizzie> The corresponding OEIS A001333 is commented as being "Number of n-words from the alphabet A={0,1,2} which two neighbors differ by at most 1"; that's pretty much the same thing, except it avoids the 'ac' and 'ca' substrings as opposed to 'aa' and 'bb'.
10:33:55 <Patashu> hm!
10:33:58 <Patashu> interesting
10:34:32 -!- DH____ has joined.
10:43:19 -!- DH____ has quit (Read error: Connection reset by peer).
10:43:23 -!- DHeadshot has joined.
11:16:45 <Patashu> http://www.chessvariants.org/other.dir/captain-spalding.html chess where you can find an elephant in your pajamas
11:28:06 -!- oerjan has joined.
11:29:33 <CakeProphet> Patashu: wow that looks fun I'll have to play that with some friends.
11:29:47 <Patashu> play this one too http://www.chessvariants.org/other.dir/nemoroth.html
11:34:46 <oerjan> > let f = 1:3:8:map(sum.take 3)(tails f) in f
11:34:48 <lambdabot> [1,3,8,12,23,43,78,144,265,487,896,1648,3031,5575,10254,18860,34689,63803,1...
11:35:02 <Patashu> > let f = 1:3:7:map(sum.take 3)(tails f) in f
11:35:04 <lambdabot> [1,3,7,11,21,39,71,131,241,443,815,1499,2757,5071,9327,17155,31553,58035,10...
11:39:49 <oerjan> <CakeProphet> !addinterp monqy haskell import Data.Char;import Control.Monad putStrLn =<< fmap toLower getContents
11:39:53 <oerjan> i sense a missing ;
11:40:20 <oerjan> if EgoBot's version of ghci even supports import
11:40:54 <CakeProphet> ...oh
11:41:00 <CakeProphet> so I just came up with an awesome chess variant.
11:41:05 <CakeProphet> which I will not write down.
11:41:09 <Patashu> why not
11:41:12 <CakeProphet> er
11:41:13 <CakeProphet> will now
11:41:15 <CakeProphet> write down
11:41:20 <Patashu> that's a better idea
11:41:21 <Patashu> hmmm
11:41:29 <Patashu> esolangs should have an esoteric chess variants/esoteric games variants page
11:41:31 <oerjan> Patashu: freudian sex day
11:41:34 <oerjan> *slip
11:41:59 <CakeProphet> Patashu: it will have a two piece-generators kind of like captain spalding
11:42:16 <CakeProphet> and any pieces adjacent to the piece-generator can be swapped with pieces that are adjacent to the other generator.
11:43:18 <Patashu> example of esoteric chess http://www.chessvariants.org/diffmove.dir/oomost-chess.html
11:43:28 <CakeProphet> also, there are cannons that shoot projectiles. it's a two turn process. The projectile is spawned adjacent to the cannon, and then at the END of your next turn it fires "forward" and captures any pieces in its path
11:43:45 <Patashu> shooting pieces are quite powerful
11:43:47 <Patashu> make sure they're balanced
11:43:56 <CakeProphet> unless it hits a barrier (knight) which redirects the projectile path, based on the direction that the knight's nose is pointing.
11:44:00 <CakeProphet> the two turn thing makes it more balanced.
11:44:19 <CakeProphet> a knight can spend a turn to reorient its nose.
11:44:38 <CakeProphet> also the projectile might stop once it captures a single piece
11:44:44 <CakeProphet> instead of like... clearing everything in its path.
11:44:48 <oerjan> <monqy> _not if there are multiple words_
11:44:54 -!- ais523 has joined.
11:44:54 <oerjan> actually mine does
11:44:59 <monqy> huh
11:45:03 <oerjan> (i set an option for it)
11:45:09 <monqy> ah
11:45:37 <CakeProphet> but it seems to me that the strategy would basically involve tricking your opponents with barriers and cannons, or using their own pieces against them.
11:45:39 <oerjan> emphasis_multiword
11:45:58 <Patashu> http://www.chessvariants.org/multiplayer.dir/anynumber.html FFA chess
11:46:09 <CakeProphet> and because the projectile is at the end of your next turn and happens as an extra action in your turn, it means you can use the teleporting effect to suddenly change its path..
11:46:20 <monqy> set; _trying it out now_
11:46:22 <monqy> seems to work
11:47:03 <CakeProphet> so then a cannon is basically like a rook that doesn't move to capture and requires two turns to capture... minus the whole redirecting bit.
11:47:51 <CakeProphet> also the redirecting effect would be piece neutral meaning you can use opponent barriers (maybe I should call them arrows?) to redirect.
11:48:00 <fizzie> oerjan: What does it do if someone emphasises multiple words _like_this_?
11:48:08 <oerjan> fizzie: nothing, alas
11:48:18 <oerjan> _like_this_ testing
11:48:21 <Jafet> I think you're describing befunge, not chess.
11:48:22 <oerjan> not that either
11:48:30 <Jafet> (Multiplayer befunge!)
11:48:38 <monqy> _who_emphasises_like_this_seriously_
11:48:51 <CakeProphet> Jafet: kind of I guess.
11:48:57 <CakeProphet> I could add a trampoline just for fun. :P
11:49:20 <oerjan> lemmings chess
11:49:24 <monqy> a trampoline as in that sort or something else
11:49:34 <CakeProphet> but anyways cannons are rooks I guess so there's only two. missiles are bishops because they look like missiles.
11:49:55 <CakeProphet> a trampoline would be like a befunge trampoline in that the projectile won't capture whatever is after the trampoline, and doesn't capture the trampoline either.
11:50:00 <CakeProphet> they're little safety nets.
11:50:15 <oerjan> _what about this_?
11:50:19 <oerjan> that works
11:50:22 <CakeProphet> not for me.
11:50:34 <monqy> works for me
11:50:39 <monqy> set emphasis_multiword
11:50:48 <monqy> (to on)
11:50:51 <fizzie> I think for underlining _doing_it_like_this_ still makes a modicum of sense, but *doing*this*certainly*doesn't*.
11:50:57 <CakeProphet> also a missile can be captured in the turn it's spawned, which makes it not fire next turn obviously.
11:51:35 <CakeProphet> and once it fires it leaves the board... because it's just a projectile thing.
11:52:02 <oerjan> _this then?_
11:52:07 <oerjan> doesn't
11:52:20 <CakeProphet> _test test_
11:52:22 <CakeProphet> there we go
11:52:26 <CakeProphet> *bahahahaha
11:52:27 <CakeProphet> *bahahahaha*
11:52:30 <CakeProphet> *bahahahah haa*
11:52:46 <oerjan> oh no, we've made a monster!
11:52:46 <CakeProphet> okay so the cannon thing is pretty central at this point, I need some other ideas.
11:53:58 <CakeProphet> man I wish some other piece had directionality. everything but the knight has top-down radial symmetry.
11:54:24 <fizzie> http://sprunge.us/bhFN?c -- irssi highlighter isn't the prettiest ever. (I remember looking at it earlier too.)
11:54:50 <monqy> :(
11:55:04 <monqy> this sads me
11:55:18 <fizzie> Also I see some tab issues there; shouldn't have displayeded it with unholy four-char tabs.
11:55:34 <monqy> the code itself, not irssi's not being the prettiest ever
11:56:09 <monqy> i like 2-space indentation because i'm a weirdo
11:56:28 <Jafet> You are referring to Stanton pieces? The bishop has radial asymmetry.
11:56:45 <CakeProphet> erm...
11:56:52 <Jafet> The other pieces, well... fix them with a sharpie
11:57:00 <CakeProphet> I don't know?
11:57:19 <Jafet> http://en.wikipedia.org/wiki/Staunton_chess_set
11:57:20 <CakeProphet> most games i've played the bishop is radial.
11:57:28 <Jafet> Chess is supposed to be independent of the piece shapes
11:57:38 <CakeProphet> yeah no notches in my chess sets.
11:57:52 -!- ais523 has quit (Remote host closed the connection).
11:59:09 -!- ais523 has joined.
11:59:40 <CakeProphet> okay so if the projectile passes through the friendly king (an exception to the projectiles-kill-anything-except-arrows rule) then the trampoline (pawn) effect is reversed so that the projectile ONLY captures after a trampoline
12:00:00 <CakeProphet> hmmm, well no
12:00:09 <CakeProphet> it will capture the trampoline. because otherwise they are kind of hard to kill.
12:00:18 <CakeProphet> ????
12:01:06 <CakeProphet> I dunno if this is a good game yet, lol
12:02:45 <CakeProphet> the queen being a spawner and the queen/king being able to swap pieces that are adjacent to them makes mobility more interesting, as most of the pieces besides the queen are going to be rather slow moving.
12:02:56 <Patashu> http://www.chessvariants.org/d.betza/chessvar/missmark.html lol
12:02:59 <CakeProphet> but I think the two-turn projectile part is an issue because it sounds easy to avoid.
12:03:31 <CakeProphet> especially when you set up your king to reverse the trampoline effect. extra prep time = more obviousness = less fun
12:05:23 <CakeProphet> and it would be trivial for the opponent to just move the trampoline out of the way in the one turn they have to react... unless they have to do something else, but there are fewer situations like that than in chess.
12:05:32 <oerjan> <CakeProphet> EGADS MY REAL NAME HAS BEEN EXPOSED.
12:05:49 <oerjan> i suggest you change your username to your last name so it doesn't happen again.
12:05:55 <CakeProphet> heh
12:06:01 * oerjan whistles innocently
12:06:05 <CakeProphet> well the pawns could just be like... pawns.
12:06:11 <CakeProphet> instead of trampolines
12:06:24 <CakeProphet> so they're just one-time barriers.
12:06:31 <CakeProphet> no, bad idea.
12:06:53 <CakeProphet> opening streategy: surround king in layers of pawns
12:08:42 <CakeProphet> also I think I'll free up the bishop as missile by having pawns be missiles. if a pawn is adjacent to a missile then it gets fired off.
12:09:15 <CakeProphet> obviously now bishops are extra-dimensional portals
12:09:41 <ais523> CakeProphet: this whole concept is rather ridiculously zzoish
12:09:45 <ais523> are you sure you want to go down that route?
12:09:56 <CakeProphet> ....how so?
12:10:28 <oerjan> i understand zzo is a _regular_ contributor to chessvariants.org
12:10:34 <CakeProphet> oh.
12:10:35 <CakeProphet> oh well.
12:10:40 <CakeProphet> chess variants are cool.
12:11:05 <ais523> it's more the whole making a massively complicated variant of something existing thing
12:11:38 <oerjan> extended tic-tac-toe
12:11:43 <CakeProphet> so yeah the bishop is a portal, a projectile goes into its notch and comes out the other bishops notch. teleporting redirecting clusterfuck ensues.
12:12:09 <CakeProphet> I guess some pieces are immortal or something? I don't know.
12:12:30 <ais523> oerjan: that reminded me of the generalised Sudoku I came up with when trying to work out an infinite Sudoku so I could figure out if it was TC or not
12:12:56 <oerjan> one of the pawns is immortal, however this is marked _under_ it so the opponent can only find out which by capturing it.
12:13:07 <oerjan> *trying to capture
12:13:08 <CakeProphet> haha
12:13:18 <CakeProphet> THE IMMORTAL TRAMPOLINE.
12:13:33 <CakeProphet> I dunno if I like the trampoline.
12:13:42 <CakeProphet> maybe pawns should do something else. Something useful and numerous.
12:14:11 <oerjan> ais523: "generalised sudoku is NP-complete"
12:14:22 <oerjan> although that's not infinite
12:14:30 <ais523> oerjan: hmm
12:14:33 <CakeProphet> ...imagine if pawns were prisms, and caused projectiles to split cardinally in three directions.
12:14:45 <ais523> in other puzzles I've seen, normally pspace-complete on finite puzzles generalized to TC on infinite ones
12:14:59 <ais523> although I don't think that's well-defined enough for it to be possible to make a theorem out of it
12:15:22 <CakeProphet> maybe the friendly queen could be a prism. that would be kind of ridiculous.
12:16:00 <oerjan> CakeProphet: that sounds like you get some dangerous exponential blowup
12:16:11 <CakeProphet> well with the pawns yeah.
12:16:32 <CakeProphet> -100 turns of careful setup- -SUDDENLY EVERYTHING DIES-
12:17:21 <oerjan> that's a bit similar to uranium, actually
12:17:26 <CakeProphet> perhaps the bishops will be the teleporters as well as portal-things. they will just be portals.
12:18:02 <CakeProphet> and they can still be captured by shooting them on any of their notchless sides.
12:18:10 <CakeProphet> well, no...
12:18:25 <CakeProphet> well, maybe? you wouldn't have a portal at that point because one of the links would be broken.
12:18:55 <CakeProphet> it would seem that losing any of your major pieces would put you at a huge disadvantage.
12:19:40 -!- sllide has joined.
12:20:51 <oerjan> how shockingly unlike ordinary chess
12:21:05 <CakeProphet> but I think it's more of a disadvantage here
12:21:09 <CakeProphet> because all of your pieces do ridiculous things.
12:21:28 <CakeProphet> like teleport other pieces around..
12:25:57 <CakeProphet> obviously the solution is to introduce even more complicated rules
12:26:04 <Patashu> obviously
12:26:07 <CakeProphet> so now that when a teleporter or portal becomes unlinked it behaves differently.
12:26:18 <CakeProphet> in a way I have not decided.
12:27:59 <CakeProphet> bahahaha, when you kill a teleporter/portal the other one explodes and takes all adjacent pieces with it.
12:28:20 <CakeProphet> problem solved.
12:28:56 <CakeProphet> in any case I suspect capturing pieces will be incredibly difficult and will rely entirely on convoluted piece setups.
12:29:16 <Patashu> I'm kind of reminded of some roles I designed for the game of mafia, which only produce interesting results with lots of other 'power roles', but such a game requires huge amounts of players to not be ridiculous full of power roles
12:29:25 <Patashu> From all the nonsense I am hearing about here
12:29:55 <CakeProphet> well I can have two different kinds of pawns I realized by placing sharpie marks on some.
12:30:32 <CakeProphet> so I was thinking I could have four arrows which are marked pawns, and then that frees up knights to be portals, and then bishops are teleporters.
12:30:45 <CakeProphet> currently the two rooks are cannons but one could be flipped over to do something else.
12:31:39 <Patashu> have you considered making a chu chu rocket mod instead of a chess mod?
12:31:49 <CakeProphet> wat
12:31:56 <Patashu> it's a dreamcast game
12:32:14 <CakeProphet> really I don't see an issue with everything being over the top as long as it's fun.
12:32:21 <Patashu> hah, yeah
12:33:13 <CakeProphet> I haven't really worked out movement yet. Just the projectile dynamics.
12:33:42 <CakeProphet> cannons will be slow I think. one or two space movers. teleporters should be quick and be able to jump over things.
12:34:37 <CakeProphet> but perhaps with weird movement restrictions.
12:36:11 <CakeProphet> portals could be replaced with something else but they sound like great fun.
12:36:31 <CakeProphet> and teleporters and portals may be merged into one piece so that "walking into a portal" is the teleport effect.
12:37:19 <CakeProphet> also I just realized with four arrows one could make an infinite projectile loop...
12:38:19 <CakeProphet> also with one arrow and two portals you can create the same loop but without the square pattern.
12:38:40 <CakeProphet> I guess these could just set up death walls until the chain is broken... muahahahaha
12:40:21 <CakeProphet> and these death walls could be redirected by arrows or portals (as long as they're facing the right direction otherwise they would be captured)
12:40:31 <CakeProphet> and thus fed into possibly another infinite loop.
12:41:07 <CakeProphet> so basically an arrow in one of these loops would just have to turn a direction to capture something....
12:41:38 <CakeProphet> thus breaking the loop.
12:42:15 <CakeProphet> wow that's awesome.
12:42:22 <CakeProphet> this is the best rule abuse ever.
12:43:53 <CakeProphet> most pieces at this point don't even get captured by projectiles.
12:44:05 <CakeProphet> thus making it difficult to capture things.
12:45:23 -!- monqy has quit (Quit: hello).
13:14:50 -!- CakeProphet has quit (Ping timeout: 260 seconds).
13:40:12 -!- variable has quit (Ping timeout: 255 seconds).
13:40:16 -!- Patashu has quit (Quit: MSN: Patashu@hotmail.com , Gmail: Patashu0@gmail.com , AIM: Patashu0 , YIM: patashu2 .).
14:01:09 -!- Guest79464 has changed nick to Gregor.
14:01:38 -!- Gregor has changed nick to Guest16962.
14:10:46 -!- copumpkin has quit (Quit: Computer has gone to sleep.).
14:36:44 -!- copumpkin has joined.
14:52:31 <ais523> hmm, is writing "more *.txt | cat" a useless use of cat?
14:52:48 <ais523> it's the simplest way I know to tell more to act like it isn't connected to a terminal
14:53:46 <oerjan> sounds like the answer is "no"
14:56:58 -!- azaq23 has joined.
14:57:33 -!- pumpkin has joined.
14:58:03 -!- copumpkin has quit (Ping timeout: 252 seconds).
14:58:22 -!- pumpkin has changed nick to copumpkin.
14:59:20 -!- azaq23 has quit (Client Quit).
15:01:02 -!- Taneb has joined.
15:01:13 <Taneb> Hello!
15:01:33 -!- oerjan has quit (Quit: Goodbye!).
15:06:29 <Sgeo> How are you?
15:06:50 <Taneb> Alright
15:09:24 <Deewiant> Alleft
15:12:39 <Taneb> The world of esoteric programming seems quiet
15:12:50 <Taneb> I blame the awful weather in Hexham
15:12:52 <ais523> Sgeo: a bit ill, but recovering
15:13:15 <Sgeo> o.O, glad you're recovering, feel even better soon
15:15:36 -!- hagb4rd has joined.
15:15:44 <hagb4rd> waidmannsheil
15:16:04 <hagb4rd> sry wrong chan
15:16:11 <Taneb> Why not stay?
15:17:28 <hagb4rd> me?
15:17:32 <Taneb> Yes
15:18:11 <hagb4rd> oh, i'm gonna stay for a while, sure
15:18:18 <hagb4rd> how are things goin?
15:18:30 <Taneb> Just out of curiousity, which channel did you mean to post that in?
15:18:36 <Taneb> "waidmannsheil", that is
15:18:54 <hagb4rd> german-elite.net#gulli
15:19:00 <Taneb> Okay
15:19:33 <hagb4rd> where is elliott?
15:19:45 <Taneb> Relatively close to where I am
15:21:05 <hagb4rd> relativly close yess :)
15:21:16 <Taneb> That sounds disturbing...
15:21:41 <hagb4rd> well it could mean anything at all
15:22:02 <hagb4rd> but that's one of worlds mysteries i guess
15:22:33 -!- FireFly has joined.
15:22:40 <Taneb> What do you think about http://esoteric.voxelperfect.net/wiki/User:Taneb/Salesman ?
15:24:22 <fizzie> ais523: Assuming you're using that to just get per-file headers in there (or does 'more' do something more (no pun intended) when not in terminal), "head -n -0 *.txt" is an alternative (with different-looking file headers).
15:24:50 <hagb4rd> well, does it work? sounds like a pretty fast solution, not goin into details
15:25:02 <hagb4rd> is that kind of a*?
15:25:04 <fizzie> s/nal/nal?/
15:32:05 <Deewiant> Alas, that head invocation is not as portable as more.
15:32:40 <Deewiant> The Solaris man page for head(1) suggests head -9999.
15:34:51 -!- variable has joined.
15:37:40 -!- calamari has joined.
15:42:43 <Guest16962> ARGH
15:42:56 -!- Guest16962 has changed nick to Gregor.
15:43:08 <Sgeo> Oh, so that wasn't deliberate.
15:43:40 <Gregor> My bouncer doesn't identify for me.
15:45:10 <Sgeo> Ah
15:53:05 -!- calamari has quit (Quit: Leaving).
15:55:26 <Taneb> flip (flip id (+1)) 0
15:56:03 <Deewiant> No instance for (Show (((a0 -> a0) -> b0 -> c0) -> c0))
15:56:24 <Taneb> > flip (flip id (+1)) 0 (const id)
15:56:26 <lambdabot> 0
15:56:39 <Taneb> flip (flip id (+1)) 0 id
15:56:53 <Deewiant> 1
15:57:07 <Taneb> I bet there is a shorter way of writing that
15:57:18 <Deewiant> Yes: 1
15:57:29 <Taneb> \x->x(+1)0
15:57:51 <Deewiant> ?pl \x->x(+1)0
15:57:51 <lambdabot> flip ($ (1 +)) 0
15:59:26 <Taneb> ?pl \x->\y->x y y
15:59:26 <lambdabot> join
16:01:37 <Taneb> ?pl \x -> \y -> \z -> x z (y z)
16:01:37 <lambdabot> ap
16:03:54 <Taneb> > flip ($ (1+)) 0 (ap (.) (join (.)))
16:03:56 <lambdabot> 3
16:04:19 <Taneb> ?pl ap (.) $ join (.)
16:04:19 <lambdabot> ap (.) (join (.))
16:04:34 <Deewiant> ?. pl unpl ap (.) $ join (.)
16:04:34 <lambdabot> (join (.) >>=) . (return .) =<< (.)
16:04:56 <Taneb> brb
16:06:57 <Taneb> Right, I've been delivered a box
16:07:02 <Taneb> I can't get into the box
16:07:09 <Taneb> It may contain my laptop
16:07:29 <Taneb> But, according to the latest theories in Quantum Mechanics, I can't tell until I open it
16:07:43 <Taneb> Found some scissors
16:10:12 <Taneb> It's my laptop!
16:10:27 <Taneb> Sans battery
16:13:42 <Taneb> They've uninstalled ubuntu
16:14:32 <Taneb> They've completely wiped it
16:14:41 <Taneb> I thought that they would
16:15:53 <hagb4rd> so now you need some food for your cat, right?
16:15:58 <hagb4rd> or is it dead?
16:16:15 <Taneb> It turned out to be a dog
16:16:18 <hagb4rd> lol
16:19:07 <Taneb> First step: install decent browse
16:19:08 <Taneb> r
16:19:12 <Taneb> BUT WHICH ONE?
16:19:28 <Taneb> Bah, I'll get Firefox, Chrome, AND Opera
16:28:56 <Taneb> I am browsered up
16:28:59 <Taneb> Now to get GHC
16:29:05 <coppro> Taneb: don't forget IE
16:29:15 <fizzie> Try to whip up some sort of a thing that uses all the browsers simultaneously.
16:29:20 <Taneb> Installed by default
16:29:21 <Sgeo> Why would you leave the HD in?
16:29:53 <Sgeo> Or was it a software issue
16:30:23 <Taneb> The HD was where the problem was
16:30:48 <Sgeo> Oh
16:31:00 -!- elliott has joined.
16:31:43 <elliott> sup
16:32:05 <Taneb> Hey!
16:32:16 <Taneb> Weather's miserable, isn't it?
16:32:46 <elliott> no i live in latvia and as such have no idea what you are talking about
16:33:00 <elliott> facts
16:33:39 <fizzie> Hexham, Latvia.
16:34:22 -!- Gregor has changed nick to Guest16962.
16:34:50 <elliott> yes
16:43:45 <Taneb> Finally installing Haskell Platform
16:43:53 <Taneb> Next: Minecraft and Dwarf Fortress
16:44:42 <elliott> how many computers do you use exactly
16:46:34 <Taneb> 2-5, depending how you count it
16:46:54 <Taneb> Including the ones at school, anything up to about 30
16:48:20 <Deewiant> ?hoogle Applicative f => f (a -> b) -> (b -> c) -> f (a -> c)
16:48:20 <lambdabot> Data.Generics.Schemes everywhereBut :: GenericQ Bool -> GenericT -> GenericT
16:48:30 <elliott> Deewiant: Oh god what are you doing.
16:48:57 <Deewiant> Trying to save a pair of parentheses in f <*> (g <$> x)
16:48:59 -!- ive has joined.
16:49:38 <elliott> Deewiant: ap f $ g <$> x
16:49:52 <elliott> Or even ap f $ fmap g x
16:50:12 <Taneb> Installing Minecraft and Dwarf Fortress
16:50:13 <Deewiant> But ap isn't for Applicatives :-/
16:50:30 <Deewiant> I've managed to avoid importing Control.Monad
16:50:47 <elliott> Deewiant: ap = (<*>)
16:50:52 <Deewiant> ?ty ap
16:50:53 <lambdabot> forall (m :: * -> *) a b. (Monad m) => m (a -> b) -> m a -> m b
16:50:59 <elliott> Deewiant: I'm telling you to define it locally :P
16:51:05 <elliott> (At module scope)
16:51:12 <Deewiant> Meh
16:51:20 <elliott> :t (<$>)
16:51:21 <lambdabot> forall a b (f :: * -> *). (Functor f) => (a -> b) -> f a -> f b
16:51:23 <elliott> I swear it used to be Applicative
16:51:28 <elliott> Deewiant: Uh wait
16:51:33 <elliott> Deewiant: f <*> fmap g x
16:51:34 <elliott> Duh
16:52:23 <Deewiant> That'd need to be fmap g $ x and I can't do that because of cannot mix `$' [infixr 0] and `<?>' [infix 0] in the same infix expression
16:52:38 <elliott> 22:44:34: <HackEgo> 2010-12-17.txt:19:31:42: <Deewiant> elliott: No, but my toaster is.
16:52:38 <elliott> Me too
16:52:53 <elliott> Deewiant: Can I see your expression, I'd like to tell you how much I dislike you for writing it
16:53:05 <elliott> Also how much it needs parentheses
16:53:24 <elliott> Also: I wonder if trifecta's <?> has better precedence :-)
16:53:48 <Deewiant> punctuator = here PPPunctuator <*> (fromJust.punctuatorFromString <$>
16:53:49 <Deewiant> (choice $ map string
16:53:49 <Deewiant> [ "->", "++", "--", "<<=", ">>=", "<=", ">=", "==", "!="
16:53:49 <Deewiant> , "&&", "||", "...", "*=", "/=", "%=", "+=", "-=", "<<"
16:53:49 <Deewiant> , ">>", "&=", "^=", "|=", "##", "<:", ":>", "<%", "%>"
16:53:51 <Deewiant> , "%:%:", "%:"]
16:53:53 <Deewiant> ++ [(:[]) <$> satisfy ((`IS.member` punctuatorChars).ord)]))
16:53:56 <Deewiant> <?> "punctuator"
16:54:16 <elliott> "PPPunctuator"?
16:54:17 <Deewiant> Hmm, trifecta
16:54:23 <Deewiant> Hadn't noticed that one
16:54:33 <elliott> It's the hot new thing
16:54:40 <elliott> Gives clang-style diagnostics
16:54:44 <elliott> ANSI and all
16:54:49 <elliott> data Parser e a = Parser
16:54:49 <elliott> { unparser :: forall r.
16:54:49 <elliott> (a -> ErrState e -> ErrLog e -> Bool -> Delta -> ByteString -> It Rope r) -> -- uncommitted ok
16:54:49 <elliott> ( ErrState e -> ErrLog e -> Bool -> Delta -> ByteString -> It Rope r) -> -- uncommitted err
16:54:49 <elliott> (a -> ErrState e -> ErrLog e -> Bool -> Delta -> ByteString -> It Rope r) -> -- committed ok
16:54:50 <elliott> ( ErrState e -> ErrLog e -> Bool -> Delta -> ByteString -> It Rope r) -> -- committed err
16:54:51 <elliott> ErrLog e -> Bool -> Delta -> ByteString -> It Rope r
16:54:53 <elliott> }
16:54:55 <elliott> Nice
16:55:28 <elliott> Deewiant: BTW bugreport "fromJust.punctuatorFromString"
16:55:33 <elliott> Needs spaces
16:55:37 <Deewiant> No it doesn't
16:55:42 <elliott> Additionally ).ord
16:55:50 <elliott> Deewiant: Yeah it does, you couldn't replace fromJust with a constructor there
16:55:52 <Deewiant> . totally doesn't need spaces
16:55:54 <elliott> Which is terrible
16:56:01 <Deewiant> That's Haskell's problem, not mine
16:56:03 <elliott> I think TDNR would also make that invalid but don't quote me on it
16:56:07 <Deewiant> TDNR?
16:56:10 <Deewiant> Oh
16:56:11 <elliott> Type-directed name resolution
16:56:11 <elliott> Deewiant: You're writing Haskell
16:56:24 <elliott> Are you designing your code to be difficult to change? :-P
16:56:40 <elliott> Anyway, my solution is to use the parens and just put the multi-line shit in its own "where"-define
16:58:49 <Deewiant> Then I'll just use the parens and not put the multi-line shit in its own "where"-define
16:58:58 <elliott> Gross
16:59:01 <Taneb> Minecraft and Dwarf Fortess installed
16:59:03 <Deewiant> Does trifecta have lookAhead
16:59:11 <Taneb> Next: some sort of IRC client
16:59:21 <elliott> Deewiant: What does that do again
16:59:23 <Taneb> Any reccomendations for Windows IRC clients?
16:59:34 <Deewiant> elliott: Parse without changing the position, essentially
16:59:37 <elliott> Taneb: Silverex works alright
16:59:40 <Deewiant> I justt need one-character lookahead
16:59:42 <elliott> Deewiant: You mean try?
16:59:45 <Deewiant> No
16:59:47 <elliott> Hmm
16:59:50 <elliott> I see
16:59:53 <Deewiant> I need it to not change the position even when it succeeds
16:59:57 <elliott> Can't you simulate that with try always
17:00:01 <Deewiant> How
17:00:12 <elliott> (try a >> deriv e a) <|> e
17:00:21 <elliott> Where (deriv e a) is e with the a at the front stripped off :P
17:00:37 <elliott> Anyway, I dunno if it does, but it has documentation :P
17:00:44 <elliott> I would assume so
17:00:46 <Deewiant> I need to parse (x *> lookAhead newline)
17:00:52 <Deewiant> Er, <*
17:01:04 <Deewiant> I'm looking for it but can't find it :-P
17:01:10 <elliott> ?hoogle lookAhead
17:01:10 <lambdabot> Text.Parsec.Combinator lookAhead :: Stream s m t => ParsecT s u m a -> ParsecT s u m a
17:01:10 <lambdabot> Text.ParserCombinators.Parsec.Combinator lookAhead :: Stream s m t => ParsecT s u m a -> ParsecT s u m a
17:01:10 <lambdabot> System.IO hLookAhead :: Handle -> IO Char
17:01:16 * elliott tries hayoo
17:01:29 <Deewiant> Hayoo found it
17:01:33 <Deewiant> http://hackage.haskell.org/packages/archive/trifecta/latest/doc/html/Text-Trifecta-Parser-Class.html#v:lookAhead
17:01:53 <Deewiant> No default definition suggests that no, it can't be simulated :-P
17:02:03 <elliott> It can be simulated for any given full parser
17:02:09 <elliott> You need to transform what comes next, is all
17:02:19 <Deewiant> Yeah I don't want to rewrite my whole parser
17:02:21 <elliott> That is, (lookAhead p >> q) can be simulated
17:02:31 <elliott> instance MonadParser m => MonadParser (Yoneda m) where
17:02:38 <elliott> Thank god
17:02:46 <Deewiant> Yoneda is a lot of things
17:02:47 <elliott> I'm sure he actually uses that :P
17:03:02 <elliott> infix 0 <?>
17:03:08 <Deewiant> D'oh
17:03:19 <elliott> Yeah, but hot new thing, how can you not?
17:03:26 <elliott> I like how
17:03:27 <elliott> -- | Lexeme parser |semi| parses the character \';\' and skips any
17:03:27 <elliott> -- trailing white space. Returns the character \';\'.
17:03:29 <elliott> is a primitive
17:03:54 <Deewiant> Where's thattt
17:03:56 <Deewiant> ttttttttttttttttttttttttttt
17:04:17 <elliott> Deewiant: http://hackage.haskell.org/packages/archive/trifecta/0.46/doc/html/Text-Trifecta-Parser-Class.html
17:04:18 <Deewiant> Today is a bad day for my t button
17:04:35 <elliott> Ttttoday
17:04:49 <Deewiant> Yeah, that doesn't seem like something that needs to be in the class :-P
17:05:09 <elliott> Deewiant: It's probably an optimisation
17:05:25 <Deewiant> For semicolons?
17:05:27 <Deewiant> Whyyy
17:05:32 <elliott> Language parsing
17:05:43 <elliott> I'd bet money on it being an optimisation
17:06:16 <elliott> Deewiant: Trifecta also gets you layout parsing in case you're parsing Haskell :-P
17:06:28 <elliott> You MIGHT be!
17:06:48 <Deewiant> Does it have manyTill1 :: Alternative f => f a -> f end -> f ([a], end)
17:07:13 <elliott> No; can't you write that yourself
17:07:28 <Deewiant> Yes, and I have because Parsec doesn't have it
17:07:45 <Deewiant> Just seems like something that would be generically useful :-P
17:07:46 <elliott> manyTill :: (Alternative m, MonadPlus m) => m a -> m end -> m [a]
17:07:46 <elliott> manyTill p end = go where go = ([] <$ end) <|> ((:) <$> p <*> go)
17:07:46 <elliott> That's one readable definition
17:07:51 <Deewiant> Ehm
17:07:52 <Deewiant> p `manyTill1` end = fix $ ((,) [] <$> end <|>) . liftA2 (first . (:)) p
17:08:01 <elliott> How did you make it even more readable
17:08:04 <elliott> I thought it impossible
17:08:10 <Deewiant> I've got skillz
17:08:23 <elliott> Seriously though, I hate you and your code
17:08:29 <Deewiant> That's actually an easy derivation from that manyTill
17:08:37 <elliott> Well that excuses it
17:08:38 <Deewiant> Parsec has an ugly monadic definition
17:08:47 <elliott> It's so ugly I might even understand it first time
17:10:09 <elliott> 02:31:29: * Sgeo__ decides no one here wants to hear about what happened today.
17:10:09 <elliott> 02:31:35: <Sgeo__> And even if someone did: It's private.
17:10:15 <elliott> Sgeo: Unfortunately you are now obligated to tell us all
17:10:18 <elliott> I will weep in the corner
17:11:06 <Taneb> Now I have four browsers, Minecraft, Dwarf Fortress, Haskell, and an IRC Client, it is time to install Ubuntu
17:11:23 <Sgeo> elliott, there may have been some hints further in the log
17:11:25 <Sgeo> <,<
17:11:44 <ais523> Taneb: ?
17:12:19 <Taneb> Got my laptop back with a wiped hard drive
17:12:28 <Taneb> It had BSODed badly
17:13:01 <Taneb> I tend to switch between Ubuntu and Windows, and Windows is preinstalled
17:13:40 <elliott> ais523: helo
17:13:54 <elliott> 03:35:18: <qnix> any one extremely good with md5 collision and brainfuck language pm me ? :)
17:14:02 <elliott> qnix: are you trying to program in shafuck
17:14:02 <elliott> execpt
17:14:04 <elliott> wtih md
17:14:07 <elliott> instead of sha i guess
17:14:34 <ais523> elliott: 250 Hello elliott
17:14:44 <elliott> ais523: help
17:15:24 <ais523> err, I don't make a very good SMTP server
17:15:42 <elliott> help
17:15:50 <Taneb> hlep
17:15:53 <ais523> it took me that long to look up that 250 was the correct number to use for a HELO response
17:16:11 <elliott> Taneb: what is happening outside, did gangs break the weather or something
17:16:16 <elliott> i dont think the sky is normally that colour
17:16:46 <elliott> Deewiant: Also you should use IntSet rather than IS for that qualified import
17:16:51 <elliott> It is the wisdom of zomgm- elliott
17:16:58 <Deewiant> So verbose
17:17:05 <ais523> !help
17:17:05 <EgoBot> ​help: General commands: !help, !info, !bf_txtgen. See also !help languages, !help userinterps. You can get help on some commands by typing !help <command>.
17:17:13 <ais523> `help
17:17:14 <HackEgo> Runs arbitrary code in GNU/Linux. Type "`<command>", or "`run <command>" for full shell commands. "`fetch <URL>" downloads files. Files saved to $PWD are persistent, and $PWD/bin is in $PATH. $PWD is a mercurial repository, "`revert <rev>" can be used to revert to a revision. See http://codu.org/projects/hackbot/fshg/
17:17:15 <elliott> Deewiant: I would like to ban you from using Haskell
17:17:18 <elliott> At least I can read CCBI
17:17:18 <Taneb> I see nothing wrong with a yellowy grey sky
17:17:24 <elliott> it's yellowy?
17:17:25 <fizzie> ^help
17:17:25 <fungot> ^<lang> <code>; ^def <command> <lang> <code>; ^show [command]; lang=bf/ul, code=text/str:N; ^str 0-9 get/set/add [text]; ^style [style]; ^bool
17:17:36 <Taneb> More smurgy
17:17:56 <elliott> is smurgy a word
17:18:11 <Deewiant> elliott: Reading IS.member isn't so hard :-P
17:18:29 <elliott> Deewiant: The rest of it is a bigger problem
17:18:43 <Taneb> It's sort of like lurgy and smoggy
17:20:45 <Taneb> Did anyone look at Salesman?
17:20:59 <Taneb> Also, bye
17:21:21 -!- Taneb has changed nick to Taneb|Hoverpack.
17:22:23 <Deewiant> elliott: Does trifecta treat '\t' as advancing 1 column or more
17:22:38 <elliott> Deewiant: Wait, you actually are doing layout?
17:22:54 <elliott> Also you realise I'm just reading the source to answer these
17:22:55 <Deewiant> No, I just hate error messages that depend on a tab width
17:23:00 <elliott> Oh
17:23:07 <elliott> ais523:
17:23:11 <elliott> Deewiant: Enjoy your trolling
17:23:21 <ais523> elliott: gah, a bot in another channel's gone mad and is doing nick: on everyone when they arrive
17:23:26 <Deewiant> I'm not trolling, dammit
17:23:32 <elliott> Deewiant: No, enjoy ais523's trolling of you
17:23:44 <elliott> ais523: Deewiant just said something that implied that there exists a "tab width" that doesn't necessarily have to have the value eight
17:23:49 <Deewiant> I wouldn't call what he's doing trolling, either
17:23:56 <elliott> It's what he's about to do
17:24:01 <Deewiant> I know what he's about to do
17:24:09 <Deewiant> Or what you want him to do
17:24:13 <Deewiant> And I wouldn't call that trolling
17:24:37 <elliott> http://hackage.haskell.org/packages/archive/trifecta/0.46/doc/html/src/Text-Trifecta-Parser-Prim.html I think this answers your question
17:24:44 <ais523> elliott: it's an esolang, I wouldn't expect them to use standard meanings for tab just like I wouldn't expect them to use standard meanings for space
17:24:48 <ais523> either that, or it isn't an esolang
17:24:55 <ais523> in which case it's probably just wrong
17:24:59 <elliott> ais523: I don't know that it's an esolang
17:25:07 <ais523> well, this is #esoteric
17:25:12 <elliott> Yes, so it probably isn't
17:25:13 <ais523> I assume anything I haven't heard of is an esolang until proven otherwise
17:25:13 <Deewiant> It's just error messages generically
17:25:30 <elliott> Deewiant: Pretty sure it doesn't handle tabs specially
17:25:35 <elliott> There's '\n' casing but no \t
17:25:46 <elliott> Hmm
17:25:48 <elliott> data Delta Source
17:25:48 <elliott> Constructors
17:25:48 <elliott> Columns !Int64 !Int64
17:25:48 <elliott> Tab !Int64 !Int64 !Int64
17:25:48 <elliott> Lines !Int64 !Int64 !Int64 !Int64
17:25:49 <elliott> Directed !ByteString !Int64 !Int64 !Int64 !Int64
17:25:51 <Deewiant> How do I run a Trifecta parser
17:25:56 <Deewiant> Parser**
17:26:01 <elliott> column :: HasDelta t => t -> Int64
17:26:01 <elliott> column t = case delta t of
17:26:01 <elliott> Columns c _ -> c
17:26:01 <elliott> Tab b a _ -> nextTab b + a
17:26:02 <elliott> Lines _ c _ _ -> c
17:26:04 <elliott> Directed _ _ c _ _ -> c
17:26:14 <elliott> Can't find nextTab's definition :P
17:26:14 <elliott> Oh
17:26:15 <elliott> Hmm
17:26:18 <elliott> No, still can't
17:26:23 <elliott> nextTab :: Int64 -> Int64
17:26:23 <elliott> nextTab x = x + (8 - mod x 8)
17:26:27 <elliott> Deewiant: Sorry, it makes assumptions :P
17:26:32 <Guest16962> WTFWTF HOW AM I GUEST
17:26:32 <elliott> But you could write your own Delta functions
17:26:33 -!- Guest16962 has changed nick to Gregor.
17:27:05 <elliott> Deewiant: http://hackage.haskell.org/packages/archive/trifecta/0.46/doc/html/Text-Trifecta-Parser-ByteString.html seems to be the absolute-highest-level interface
17:27:21 <ais523> <elliott> nextTab x = x + (8 - mod x 8)
17:27:23 <Deewiant> I don't have a file
17:27:24 <elliott> Which uses...
17:27:25 <ais523> elliott: I approve of this definition
17:27:33 <elliott> ais523: I'm uninterested in your approval
17:27:42 <elliott> Deewiant: http://hackage.haskell.org/packages/archive/trifecta/0.46/doc/html/src/Text-Trifecta-Parser-ByteString.html#parseFromFileEx
17:27:49 <elliott> There is probably an easier way than that if you don't care about efficiency
17:28:02 <Deewiant> That's what one would hope
17:28:06 <Gregor> Publishing a research paper = apparently the best bug report.
17:28:10 <elliott> I dunno, ask edwardk :P
17:28:14 <Gregor> Opera fixed a bug I mentioned in a paper :P
17:29:05 <Deewiant> I guess parseTest will do for now
17:30:47 <elliott> Hmm, I should write that n-gram stuff
17:31:49 <elliott> 07:26:38: <Patashu> > let fibs = 0 : 1 : zipWith (+) fibs (tail fibs) in fibs
17:31:53 <elliott> oh, patashu isn't here
17:32:00 <elliott> or i'd give a better explanation than cakeprophet's terrible one
17:32:07 <Deewiant> Hmm, is writing a custom Rendering more work than rewriting the 20 lines of Parsec needed to handle tabs more nicely
17:32:28 <elliott> Deewiant: I don't know, let me read the source for you
17:32:43 <Deewiant> I've been reading the source, you don't really need to answer that
17:32:45 -!- DHeadshot has quit (Read error: Connection reset by peer).
17:32:45 <Deewiant> I'm just musing
17:32:52 <elliott> It was a: joke
17:34:27 <elliott> 08:58:38: <CakeProphet> !addinterp monqy haskell import Data.Char;import Control.Monad putStrLn =<< fmap toLower getContents
17:34:28 <elliott> forgot semicolon
17:34:38 <Deewiant> One wonders how many of these instances are necessary
17:34:48 <elliott> !addinterp monqy haskell import Data.Char; main = mapM_ (putChar . toLower) getContents
17:34:48 <EgoBot> ​Interpreter monqy installed.
17:34:52 <elliott> !monqy HELLO WORLD
17:34:56 <elliott> Deewiant: Which ones
17:34:58 <elliott> The Yoneda crap?
17:35:09 <Deewiant> The instances for Diagnostic, Rendering, and Delta
17:35:17 <Deewiant> All of which I'd have to copy and customize
17:35:22 <elliott> !addinterp monqy haskell import Data.Char; main = getConetnts >>= mapM_ (putChar . toLower)
17:35:22 <EgoBot> ​There is already an interpreter for monqy!
17:35:26 <elliott> Deewiant: Probably very few of them are necessary
17:35:39 <elliott> But it wouldn't be an edwardk package without all sorts of ridiculous theory dependencies
17:35:48 <Deewiant> True enough
17:35:52 -!- ais523 has quit (Remote host closed the connection).
17:36:12 <Deewiant> I hate these gratuitous imports :-/
17:36:18 <Deewiant> hiding is such a misfeature
17:36:29 <elliott> How is hiding a misfeature
17:36:59 <Deewiant> I prefer reading code where one can tell from within the file where all the identifiers are from
17:37:25 <elliott> Deewiant: So how would one use e.g. Control.Category
17:37:30 <elliott> import Prelude (HUGEST LIST EVER)?
17:37:46 <Deewiant> Okay, I suppose Prelude can be excepted
17:38:06 <Deewiant> But import X hiding (Y) where X /= Prelude should totally be an error
17:38:08 <elliott> Deewiant: What about Data.List, it has clashes with superior Foldable/Traversable variants IIRC
17:38:20 <Deewiant> import Data.List (what you need)
17:38:33 <elliott> Deewiant: So import Data.List (HUGEST LIST EVER) then
17:38:47 <Deewiant> Most of Data.List is in Prelude
17:39:05 <elliott> My real response is that special-casing Prelude is uglier than misuse of hiding :P
17:39:09 <Deewiant> This is 378 lines and it uses exactly foldl'
17:39:22 <Deewiant> Yeah, I know
17:39:26 <Deewiant> It still sucks though :-P
17:40:29 <elliott> Deewiant: There were people who would rather "import M" gave an error as well as anything using hiding
17:40:32 <elliott> I think they're mad though
17:40:40 <elliott> (As opposed to explicitly listing every use or importing qualified)
17:40:55 <Deewiant> I wouldn't mind e.g. Hackage enforcing that on upload
17:41:03 <elliott> It increases forwards-compatibility and modularity at the expense of being a huge pain in the arse
17:41:05 <Deewiant> For tinkering convenience making it an error is a bit nasty though
17:41:11 <elliott> Huge pain in the arses are never acceptable
17:42:48 <elliott> import Prelude hiding (catch)
17:42:48 <elliott> import Data.Char
17:42:48 <elliott> import qualified Data.Map as Map
17:42:48 <elliott> import qualified Data.Vector as V
17:42:48 <elliott> import Data.ByteString (ByteString)
17:42:49 <elliott> import Control.Exception
17:42:50 <elliott> import Control.Monad.State.Strict
17:42:52 <elliott> import Control.Applicative
17:42:54 <elliott> import System.IO.Error hiding (catch)
17:42:56 <elliott> Oh noes, Shiro breaks Deewiant's rules
17:43:20 <Deewiant> Well, the Prelude is also too small for comfort ;-)
17:43:40 <elliott> Deewiant: System.IO.Error is the problem there
17:43:56 <Deewiant> Basically everything in my .ghci should be in the Prelude
17:44:05 <Deewiant> :m +Control.Applicative Control.Arrow Control.Monad Control.Monad.Loops Data.Bits Data.Char Data.Either Data.Function Data.Functor Data.List Data.List.Split Data.Maybe Data.Monoid Data.Ord Debug.Trace Numeric Text.Printf
17:44:11 <Deewiant> Except for Debug.Trace
17:44:17 <elliott> I would ragequit haskell if Control.Arrow ended up in the Prelude.
17:44:21 <Deewiant> Why
17:44:27 <elliott> I don't like arrows.
17:44:34 <Deewiant> That's a silly reason
17:44:35 <elliott> I would be fine with its combinators specialised to functions, though
17:44:45 <elliott> No it isn't, I /really/ don't like arrows
17:44:52 <Deewiant> Yeah, really we should have Data.Tuple with equivalents
17:44:55 <Deewiant> (And that in the Prelude)
17:45:07 <elliott> What about +++ and ||| :P
17:45:09 <elliott> I use them literally ALL
17:45:09 <elliott> THE
17:45:10 <elliott> TIME
17:45:12 <elliott> (all the time == never)
17:45:16 <Deewiant> ?ty (+++)
17:45:17 <lambdabot> forall (a :: * -> * -> *) b c b' c'. (ArrowChoice a) => a b c -> a b' c' -> a (Either b b') (Either c c')
17:45:22 <Deewiant> Oh yeah, ArrowChoice
17:45:31 <elliott> Data.Either I guess :P
17:45:36 <elliott> Oh, Text.Printf also should not be in the prelude
17:45:42 <elliott> At all
17:45:49 <Deewiant> Yeah true
17:46:00 <elliott> I would be fine with a properly-typed formatter combinator library though ;-)
17:46:04 <Deewiant> It's only one identifier to import anyway :-P
17:46:15 <elliott> Clearly I should finish mine and propose it be added to base
17:46:44 <elliott> Data.Bits and Control.Monad.Loops I'm not to keen on either
17:46:51 <elliott> Latter should be rolled into Control.Monad though, definitely
17:47:00 <elliott> Data.Bits is really a specialised usecase though
17:47:20 <Deewiant> import Prelude as P
17:47:22 <Deewiant> Gah
17:48:05 <Deewiant> Maybe it is, but when you use one part of it you tend to use all of it, and it's reasonably common
17:48:14 <elliott> So...
17:48:16 <elliott> import Data.Bits
17:48:28 <Deewiant> >_<
17:48:35 <elliott> What
17:48:38 <elliott> It doesn't conflict with anything
17:48:43 <elliott> When you use one part of it you tend to use all of it
17:48:46 <elliott> And it's a specialised usecase
17:48:52 <elliott> So one simple unqualified import line :P
17:49:00 <elliott> I've used Data.Bits in maybe like five files out of hundreds
17:49:27 <Deewiant> Ditto for Data.Monoid, but ++ should still be from there
17:49:39 <elliott> Monoids aren't a "specialised usecase"
17:49:48 <elliott> You use them all the time, see: every "empty" and "append" function used ever
17:50:08 <elliott> You might not define monads all that often either, but that doesn't mean you don't use them in every program that isn't "main = interact f" :P
17:50:11 <Deewiant> import Control.Applicative
17:50:11 <Deewiant> import Control.Comonad
17:50:11 <Deewiant> import Control.Monad.State
17:50:11 <Deewiant> import Data.Array
17:50:11 <Deewiant> import Data.ByteString as B hiding (groupBy, empty, any)
17:50:13 <Deewiant> import Data.Foldable
17:50:16 <Deewiant> import Data.Function (on)
17:50:18 <Deewiant> import Data.Int (Int64)
17:50:21 <Deewiant> import Data.Functor.Bind
17:50:23 <Deewiant> import Data.List (groupBy)
17:50:26 <Deewiant> import Data.Semigroup
17:50:29 <Deewiant> import Data.Semigroup.Foldable
17:50:31 <Deewiant> import Data.Semigroup.Traversable
17:50:34 <Deewiant> import Data.Traversable
17:50:36 <Deewiant> import Text.Trifecta.IntervalMap
17:50:39 <Deewiant> import Prelude as P
17:50:41 <Deewiant> import Prelude hiding (span)
17:50:41 <elliott> import Edward.Kmett.Prelude
17:50:44 <Deewiant> import System.Console.Terminfo.Color
17:50:46 <Deewiant> import System.Console.Terminfo.PrettyPrint
17:50:49 <Deewiant> import Text.PrettyPrint.Free hiding (column)
17:50:51 <Deewiant> import Text.Trifecta.Rope.Bytes
17:50:54 <Deewiant> import Text.Trifecta.Rope.Delta
17:50:56 <Deewiant> import Text.Trifecta.Highlight.Class
17:50:58 <Deewiant> import Text.Trifecta.Highlight.Effects
17:51:01 <Deewiant> import qualified Data.ByteString.UTF8 as UTF8
17:51:04 <Deewiant> Where's <>
17:51:05 <elliott> That would be like six lines with Edward.Kmett.Prelude
17:51:12 <elliott> <> is semigroup I think
17:51:21 <elliott> Or uh semigroupoids
17:51:24 <elliott> What's the difference
17:51:27 <elliott> No, not semigroupoids
17:51:30 <elliott> Semigroups
17:51:33 <elliott> http://hackage.haskell.org/packages/archive/semigroups/0.8/doc/html/Data-Semigroup.html
17:51:42 <copumpkin> wat
17:51:42 <Deewiant> Where's <+>
17:51:54 <elliott> Hmm, <+> is probably...
17:52:04 <elliott> Data.Semigroup.Foldable or Data.Semigroup.Foldable
17:52:14 <Deewiant> Wrong
17:52:21 <elliott> Hmmm
17:52:25 <elliott> Oh, probably Control.Comonad
17:52:27 <Deewiant> Not Data.Semigroup.Traversable either
17:52:29 -!- DH____ has joined.
17:52:37 <Deewiant> Nope, not Comonad
17:52:41 <elliott> xNo wait
17:52:42 <elliott> Data.Functor.Bind
17:52:48 <elliott> Where the hell ist hat on Hackage
17:52:56 <Deewiant> Nope, not there
17:53:04 <elliott> Oh wait
17:53:07 <elliott> I know <+>
17:53:07 <elliott> Duh
17:53:14 <elliott> It's from the spj prettyprinter library thing
17:53:22 <elliott> It'll be the ANSI terminal derivative used there
17:53:26 <Deewiant> Ah
17:53:32 <Deewiant> Text.PrettyPrint.Free, got it
17:53:48 <elliott> Deewiant: In fairness, importing everything used from the prettyprinting library would be a pain
17:53:56 <elliott> copumpkin: wat?
17:54:01 <copumpkin> wat
17:54:05 <elliott> copumpkin: wat?
17:54:05 <copumpkin> thom
17:54:07 -!- Taneb|Hoverpack has changed nick to Taneb.
17:54:12 <elliott> copumpkin: wat?
17:54:16 <copumpkin> http://en.wikipedia.org/wiki/Angkor_Thom
17:54:18 <Deewiant> import Text.PrettyPrint.Free (Pretty(pretty, prettyList), vsep, (<+>), nest, indent, columns, align, hcat)
17:54:22 <Deewiant> Not really
17:54:25 <elliott> copumpkin: wat?
17:54:33 <Deewiant> Where's window
17:54:39 <elliott> Show me the usage
17:54:43 <copumpkin> http://en.wikipedia.org/wiki/Angkor_Wat
17:54:47 <elliott> copumpkin: I'm aware
17:54:48 <Deewiant> (lo, hi) = window (column d) ll (min (max (cols - 2) 30) 200)
17:55:05 <Deewiant> Oh, it's in there
17:55:20 <elliott> Guesses: Text.Trifecta.IntervalMap, Text.Trifecta.Rope.Delta, Text.Trifecta.Highlight.{Class,Effects},
17:55:28 <elliott> Data.Functor.Bind
17:55:29 <elliott> One of those
17:55:31 <elliott> Oh
17:55:32 <Deewiant> Text.Trifecta.Diagnostic.Rendering.Prim
17:55:35 <elliott> Fuck you :P
17:55:58 <elliott> But seriously, what's Data.Functor.Bind
17:56:04 * elliott hayoos it
17:56:09 <elliott> Oh, it's in semigroupoids
17:56:44 <elliott> "A Monad sans return."
17:56:46 <elliott> The most useful
17:56:56 <elliott> (Okay, it /is/ fairly useful)
17:57:48 <elliott> "Neil Bickford calculated the first 458 million terms for the continued fraction of pi, breaking the previous record of 180 million. He used Mathematica to develop his code and verify his results—which he posted shortly after he turned 13." --Wolfram blog
17:57:52 <elliott> "On October 17th, I calculated approximately 458,000,000 terms of pi in about 3 hours on a 64-bit machine running Windows on a Core 2 Duo @ 3.00 GHz. This was later verified using Mathematica…. The program was coded in C#, has a command-line interface (with menus!), and uses Emil Stefanov’s wrapper of GNU MP for the BigInteger multiplications." --the author of the code
17:58:00 <elliott> "used Mathematica to develop his code" indeed
17:58:52 <Deewiant> The guy also isn't as clever as everybody seems to think
17:59:42 <Deewiant> He essentially did some brute-forcing, hooray?
18:00:06 <Deewiant> Like the sliding puzzle thing
18:00:11 <elliott> http://nbickford.wordpress.com/ seems to be a better argument for his intelligence than calculating a continued fraction :-P
18:00:15 <Deewiant> The toughest puzzle he’s found so far—the one pictured above—takes 132 moves to solve, although Bickford still needs to verify the result. To get the solution, he generated every possible puzzle in Mathematica, and then solved them all in another program. It took 48 days to run, so he’d like to speed up that computation.
18:00:23 <elliott> Not that I've done everything but a bunch page downs
18:00:27 <elliott> s/everything/anything/
18:01:00 <Deewiant> I mean his not stupid but he's not anything /special/ either, other than that he's atypically young
18:01:03 <Deewiant> he's*
18:01:13 <Deewiant> Damn, I don't think I've ever managed that typo
18:01:54 <elliott> Well, it's more "this doesn't prove he's anything special", not "he's not anything special", no? I mean, bruteforcing something doesn't mean you're not intelligent otherwise
18:02:07 <Deewiant> Yes, of course
18:02:28 <Deewiant> I was speaking only in terms of the info in the Wolfram blog post
18:02:32 <elliott> Right
18:02:48 <elliott> Apparently Gosper tutors him... although my source here is Quadrescence's reddit account so take that with the fewest grains of salt you have in your collection of salt
18:03:51 <elliott> Now I shall prove my superiority to this fucking whippersnapper by writing some Markov chains
18:04:15 -!- DH____ has quit (Ping timeout: 260 seconds).
18:04:57 <elliott> Actually that sounds boring, I'll just stare at this shiro code and watch people on IRC instead
18:05:01 <elliott> This is how you get ahead
18:05:21 <Deewiant> Wow, Data.Sequence use
18:05:26 <elliott> What of it
18:05:29 <Deewiant> I don't think I've ever actually seen anything use it
18:05:40 <elliott> I use it fairly often because oerjan tells me to
18:05:50 <Deewiant> What do you use it for
18:05:54 <elliott> It's used for the ropes in Trifecta IIRC
18:05:58 <elliott> Deewiant: I don't remember my programs
18:06:07 <Deewiant> Meh
18:06:09 -!- boily has quit (Ping timeout: 252 seconds).
18:06:31 <elliott> Deewiant: Data.Sequence is literally just a rope done with finger trees, so ostensibly it should be suitable for just about anything
18:06:46 <Deewiant> Yeah, pretty much
18:06:58 <Deewiant> In practice people seem to just use [] or something very specialized
18:07:03 <elliott> Deewiant: I wouldn't mind [] becoming Seq :-)
18:07:17 <elliott> Although we'd really need pattern synonyms
18:07:19 <elliott> So you could say
18:07:27 <elliott> pattern x:xs = viewl -> x |> xs
18:07:51 <elliott> Hmm, I might have to write Shiro 2 soon; this code is starting to irritate me
18:08:27 -!- nooga_ has joined.
18:08:49 <elliott> I'm not really sure how to optimise it beyond the fungespace at this point
18:09:24 <Deewiant> You'd use pattern guards or view patterns, I guess
18:09:30 <elliott> To optimise Shiro?
18:09:39 <Deewiant> No, instead of pattern synonyms
18:09:47 <Deewiant> If you can optimize Shiro with them I commend you
18:09:52 <elliott> Deewiant: Ehh, I'd rather pattern synonyms just be added
18:10:00 <elliott> she has them, so it's exactly hard to implement :P
18:10:02 <elliott> erm
18:10:04 <elliott> she has them, so it's not exactly hard to implement :P
18:10:20 <Deewiant> Overloading always worries me :-P
18:10:27 <elliott> Deewiant: Overloading howso?
18:10:54 <Deewiant> The : in x:xs
18:10:57 <elliott> Erm, <elliott> pattern x:xs = viewl -> x |> xs should be:
18:11:06 <elliott> pattern x:xs = viewl -> x :< xs
18:11:11 -!- nooga has quit (Ping timeout: 260 seconds).
18:11:20 <elliott> Deewiant: You mean because it can't be used in expressions?
18:11:46 <elliott> I'd require a function definition for every pattern guard, with the obvious isomorphism property being expected of the programmer
18:12:16 <Deewiant> Okay at this point I'm going to state that I don't think I understand what you mean in that pattern x:xs line
18:12:27 <elliott> f (x:xs) = ...
18:12:28 <elliott> -->
18:12:32 <elliott> f (viewl -> x :< xs) = ...
18:12:41 <Deewiant> Isn't that exactly a view pattern?
18:12:51 <elliott> No? The closest you can get is the latter
18:12:57 <elliott> Or equivalently, (uncons -> (x,xs))
18:13:03 <Deewiant> Yeah, okay
18:13:09 <elliott> In fact, you'd need
18:13:10 <Deewiant> So how is : defined for the above
18:13:13 <elliott> (uncons -> Just (x,xs))
18:13:20 <elliott> Deewiant: By the pattern
18:13:25 <elliott> You'd do something like
18:13:26 <elliott> (:) :: a -> [a] -> [a]
18:13:26 <elliott> (:) = (|>)
18:13:26 <elliott> pattern x:xs = viewl -> x :< xs
18:13:40 <elliott> Most of the time, the value and pattern definition would be the same
18:13:48 <elliott> So I agree being "able" to define them separately is a wart in some sense
18:13:56 <elliott> But if you restrict them, you can't e.g. do exactly that ;-)
18:14:06 <elliott> Since the first element of a Seq doesn't correspond to a traditional pattern
18:14:10 <Deewiant> The function (:) can't be defined as part of [] as usual?
18:14:20 <Deewiant> Or did you mean [a] = Seq a there
18:14:31 <elliott> Deewiant: Yes, that's what I'm saying; to make [] a Seq, we'd need pattern syonyms
18:14:32 <elliott> synonyms
18:14:38 <elliott> Or they'd be a pain to use
18:14:44 <elliott> (Or a special case in the compiler but ugh)
18:14:52 <Deewiant> So you wouldn't have [] as it is now at all here
18:15:05 <elliott> Data.LinkedList
18:15:16 <Deewiant> Right, that's what tripped me up
18:15:21 <elliott> Right
18:15:43 <elliott> You need pattern synonyms to process any kind of complex AST really
18:15:44 <Deewiant> I thought you'd have (:) as usual in addition to that (:)
18:15:52 <elliott> (Try writing a Language.C program if you don't believe me)
18:16:12 <Deewiant> Language.C?
18:16:16 <elliott> Also for things like Mu-recursive data types to use generic annotations and the like (again an AST being the motivating example
18:16:17 <elliott> )
18:16:29 <elliott> Deewiant: http://hackage.haskell.org/package/language-c
18:16:37 <elliott> It's a framework for processing/analysing/transforming C99 code
18:16:44 <elliott> It's wonderful but dear god the AST is a pain to match on
18:16:55 <elliott> For instance
18:17:03 <elliott> transformItem :: GCTypeInfo -> CBlockItem -> State (Set String) [CBlockItem]
18:17:03 <elliott> transformItem ti x@(CBlockDecl decl@(CDecl _ decls _)) | relevant decl && loltrace decls = do
18:17:03 <elliott> forM_ decls (\(Just (CDeclr (Just ident) _ _ _ _),_,_) -> modify (Set.insert (identName ident)))
18:17:03 <elliott> return [x, CBlockStmt (CExpr (Just (CCall (CVar (internalIdent "GGC_PUSH") internalNode) [CVar (internalIdent "foo") internalNode] internalNode)) internalNode)]
18:17:03 <elliott> where relevant (CDecl spec _ _) = any interesting spec
18:17:05 <elliott> interesting x@(CTypeSpec (CTypeDef (Ident name _ _) _)) = name `Map.member` ti
18:17:09 <elliott> interesting _ = False
18:17:11 <elliott> ...
18:17:13 <elliott> where yeah x@(CAssign op (CMember (CVar ident@(Ident name _ _) _) field True _) to ni) = do
18:17:15 <elliott> ...
18:17:25 <Deewiant> heh
18:17:26 <elliott> The previous version I had was even more deeply nested and awful
18:17:39 <Deewiant> Well, that's ASTs for you
18:17:45 <elliott> Yeah, which is why we need pattern guards :-P
18:17:46 <Deewiant> They can't really not be nested :-p
18:17:50 <Deewiant> synonyms*
18:18:24 <elliott> where yeah x@(op := (Var ident@(Ident name _ _) :. field)) = ...
18:27:52 -!- Vorpal has joined.
18:28:45 -!- MSleep has quit (Ping timeout: 260 seconds).
18:31:41 <elliott> "Why serve up the orange homage to Szent-Gyorgy today? Guessing the Googlers is a fool's errand but the folks at SearchEngineWatch do note that flu season is right around the bend." --CBS
18:31:44 <elliott> "alt="Albert Szent-Gyorgyi&#39;s 118th Birthday" title="Albert Szent-Gyorgyi&#39;s 118th Birthday"" --Google
18:37:22 <Gregor> lol, that is wildly non-mysterious :P
18:37:30 <Gregor> It's a fool's errand!
18:37:43 <Gregor> "He is credited with discovering vitamin C and the components and reactions of the citric acid cycle."
18:37:45 <Gregor> WHAT COULD IT MEAN
18:38:29 <elliott> Gregor: Well yeah, they do figure that part out in the article :P
18:38:34 <elliott> But then they're like WHY TODAY????????
18:38:37 <elliott> WHO KNOWS?????
18:39:03 -!- zzo38 has joined.
18:39:22 <Gregor> ...
18:39:23 <Gregor> lol
18:39:42 <zzo38> ...
18:39:54 <elliott> lol
18:41:46 -!- Taneb has quit (Quit: closing).
18:43:23 <zzo38> I have a copy of some of the CGA Collection games, including information about many of them (although not all of the programs)
18:43:57 <zzo38> This is the games: http://zzo38computer.cjb.net/GAMES/cgacoll1.zip
18:45:10 -!- Taneb has joined.
18:46:58 <zzo38> Do you like this games?
18:47:51 <Gregor> Copyright infringement! (Probably?)
18:48:29 <elliott> I'm pretty sure they're zzo's games.
18:48:55 <zzo38> Gregor: It is public domain.
18:49:13 <Gregor> Oh :P
18:49:31 <zzo38> And all of them source-codes available.
18:49:37 <zzo38> All are DOS games.
18:51:31 <Deewiant> Okay I've decided I can't use trifecta due to this tab business
18:52:12 <elliott> Deewiant: Are you srs
18:52:21 <Deewiant> instance Semigroup Delta where
18:52:24 <Deewiant> Tab x y a <> Tab x' y' b = Tab x (nextTab (y + x') + y') (a + b)
18:52:35 <elliott> Yeah, but I don't think Tab is actually used there
18:52:39 <elliott> Maybe it's used in the layout stuff
18:52:42 <Deewiant> It is used
18:52:51 <Deewiant> > parseTest (string "\t" >> string "x") "\ty"
18:52:51 <Deewiant> (interactive):1:9: error: expected: "x"
18:52:51 <lambdabot> Not in scope: `parseTest'Not in scope: `string'Not in scope: `string'
18:52:54 <elliott> Why does it matter so much anyway, considering that no editor on the planet considers tabs to be one column
18:53:09 <Deewiant> Because many editors on the planet consider tabs to be something other than 8 columns
18:53:26 <elliott> Yep, but if you consider them one column, it'll be useful to exactly zero people
18:53:27 <Deewiant> And it helps for the column number to match something that your editor can conveniently tell you :-P
18:53:41 <elliott> My editor can't conveniently tell me that
18:53:43 <Deewiant> Considering them one column gives you the byte offset
18:53:43 <elliott> At least I don't think it can
18:53:48 <Deewiant> Mine can
18:53:49 <elliott> Anyway, since trifecta's diagnostics show the line
18:53:53 <elliott> And draw a little arrow to the relevant part of the line
18:53:58 <elliott> I think the column number is pretty irrelevant :P
18:54:07 <elliott> <Deewiant> Considering them one column gives you the byte offset
18:54:10 <elliott> No, it gives you the codepoint offset
18:54:39 <Deewiant> Or grapheme cluster offset, depending on how Unicodey trifecta is
18:54:55 <elliott> I doubt it's that Unicodey
18:55:03 <elliott> But anyway,
18:55:04 <elliott> <elliott> Anyway, since trifecta's diagnostics show the line
18:55:04 <elliott> <elliott> And draw a little arrow to the relevant part of the line
18:55:04 <elliott> <elliott> I think the column number is pretty irrelevant :P
18:55:06 <Taneb> You what I've just noticed
18:55:12 <Deewiant> In my defence clang reports an error like that as 1:2 not 1:9
18:55:13 <Taneb> The video for Take On Me
18:55:16 <elliott> (OK, so sometimes it even highlights sections of the line rather than just using an arrow.)
18:55:16 <zzo38> Why do you need to parse tabs depending on their number of columns anyways?
18:55:19 <Deewiant> So trifecta isn't very clang-styley!
18:55:24 <elliott> Deewiant: Oh no!
18:55:26 <Taneb> Everything starts going wrong when the comic is put in the bin
18:55:31 <elliott> I don't think clang ever highlights the source code, either.
18:55:37 <Deewiant> Eh?
18:55:46 <elliott> Well, I heard murmurings that trifecta could do that.
18:55:50 <elliott> Something involving HsColour.
18:55:53 <elliott> Maybe I wrong.
18:56:07 <Deewiant> That'd probably involve telling it how to do it for whatever you're parsing
18:56:13 <elliott> Deewiant: trifecta has had two Hackage uploads today
18:56:15 <zzo38> Generally tabs use to separate fields though, such as in tab-separated-values, or in gopher menus.
18:56:20 <elliott> Deewiant: If you complained, I bet you could make that three :-P
18:56:27 <Deewiant> Eh, I doubt it
18:56:29 <zzo38> And if you can set tab stops, then use it to organize columns in anything
18:56:48 <Deewiant> I don't really have the energy to try and convince him, especially if he's like ais
18:57:01 <elliott> I doubt he's like ais, I bet he's just going by what Haskell considers
18:57:03 <elliott> Which is tab = eight spaces
18:57:12 <elliott> Because layout parsing
18:57:16 <Deewiant> And the alternative is making a very deeply-ingrained thing configurable in a small way, breaking probably half the code
18:57:26 <elliott> No it isn't, just put tabWidth in the delta
18:57:46 <zzo38> That is one problem with layout parsing of Haskell programs containing tabs. I suggest either not using tabs or not using layout.
18:57:50 <elliott> Hmm, you'd need to special case tabWidth=one because of modulo
18:57:53 <elliott> But w/e
18:57:58 <Deewiant> I don't even know where he should put tabWidth
18:58:11 <elliott> Delta
18:58:12 <Deewiant> You need to pass it from the top-level parser call methinks
18:58:26 <elliott> Aren't Deltas a monoid
18:58:35 <elliott> In which case you just need to replace wherever mempty is called
18:58:36 <Deewiant> Yes
18:58:36 <elliott> Maybe
18:58:45 <elliott> Assuming all deltas are derived from mempty
18:58:58 <Deewiant> Tab x y a <> Tab x' y' b = Tab x (nextTab (y + x') + y') (a + b)
18:59:01 <Deewiant> nextTab :: Int64 -> Int64
18:59:02 <Deewiant> nextTab x = x + (8 - mod x 8)
18:59:05 <elliott> Dude
18:59:07 <elliott> Tab is a constructor of Delta
18:59:14 <Deewiant> Yes, and
18:59:23 <Deewiant> My point is that there's a lot of Tab-unpacking :-P
18:59:25 <elliott> Tab x y a tw <> Tab x' y' b tw = Tab x (nextTab tw (y + x') + y') (a + b)
18:59:29 <elliott> Deewiant: In the instance? No shit
18:59:44 <elliott> I tend to deconstruct data types a lot from their module
19:00:05 <elliott> Anyway, I still don't think a single person will ever look at the column number if they have an arrow pointing to the relevant character
19:00:29 <Deewiant> Meh
19:00:29 <Deewiant> FINE
19:00:36 <zzo38> When I make preprocessor of Haskell, I can simply solve this problem by not parsing layout at all.
19:01:19 <elliott> Deewiant: I think zzo38 is solving your problem here
19:01:25 <elliott> You should probably implement whatever he's talking about
19:01:28 <Deewiant> No I think he's solving his own
19:01:39 <elliott> Well, aren't zzo38's problems everyone's, in some sense
19:01:44 <zzo38> Deewiant: Yes, I am solving my own
19:01:56 <zzo38> But if it helps you, then you might be able to use it. Otherwise, it don't .
19:02:58 <Deewiant> elliott: Haha, speaking of Hackage uploads today
19:03:04 <Deewiant> The docs have changed in the meanwhile
19:03:06 <Deewiant> Where's lookAhead now/
19:03:11 <Deewiant> s/\/$/?/
19:03:14 <elliott> Awesome
19:03:27 <elliott> http://hackage.haskell.org/packages/archive/trifecta/latest/doc/html/Text-Trifecta-Parser-Class.html#v:lookAhead
19:03:30 <elliott> Still where it was?
19:03:35 <Deewiant> Oh, whoops
19:03:40 <Deewiant> cabal update is a good thing to run
19:03:50 <elliott> Oh that wacky Deewiant
19:04:09 <elliott> Aw feck, I have a bunch of global GHC packages now unintentionally
19:04:17 <elliott> Time to trash 'em all
19:04:21 <Deewiant> Why is that a problem
19:04:42 <Deewiant> Whee, building 142 Haskell modules
19:04:43 <elliott> Because cabal-dev
19:04:59 <elliott> The chances of getting broken packages as t goes to infinity are one
19:05:07 <Deewiant> C++ projects are typically faster to compile than Haskell ones because at least they can build in parallel
19:05:12 <elliott> At least with cabal-dev it's easier to get working again
19:05:27 <elliott> Deewiant: You can build Haskell modules in parallel too
19:05:31 <elliott> GHC just doesn't
19:05:49 <Deewiant> If "cabal install" doesn't then I'm going to say you "can't"
19:05:59 <Deewiant> Because the alternative is slower than building serially :-P
19:06:36 <elliott> Time to bootstrap HsColour again
19:06:45 <elliott> Deewiant will now ask me what that means and why I need to do that
19:07:09 <Deewiant> Btw, if cabal-install can install source codes in the local haddock docs, please tell me how
19:07:17 <elliott> Hahaha
19:07:19 <elliott> That's why I need to do that
19:07:26 <Deewiant> It can do that these days?
19:07:31 <elliott> It has always been able to do that
19:07:35 <elliott> OK, sit down, children, and listen
19:07:38 <elliott> Here's a tutorial
19:08:29 <elliott> Deewiant: Wipe your .cabal and .ghc. Download hscolour from Hackage. runhaskell Setup.hs configure --user, build, install, clean, configure --user, build, haddock --hyperlink-source, install. Download cabal-install. Find the configure/build/install lines, and insert after build:
19:08:32 <elliott> ./Setup haddock ${VERBOSE} --hyperlink-source \
19:08:32 <elliott> || die "Building the ${PKG} package's documentation failed"
19:08:39 <elliott> Re-bootstrap
19:08:41 <elliott> Install
19:09:01 <elliott> I /think/ cabal-install automatically does haddock --hyperlink-source if you have it intsalled
19:09:27 <elliott> It would be nice if I could get highlighted source for the global base packages too, sigh
19:09:28 <Deewiant> Okay so it was more the pain of getting Haddock to work, then
19:09:36 <elliott> Well Haddock works without all that, it's just hscolour
19:09:52 <Deewiant> I have hscolour, but my haddock doesn't recognize --hyperlink-source
19:10:03 <elliott> It's not haddock
19:10:08 <elliott> It's Setup.hs haddock
19:10:13 <Deewiant> But anyway I'll replace "wipe your .cabal and .ghc" with "wait until extra/ghc switches to a new version"
19:10:26 <Deewiant> Setup.hs haddock is haddock
19:10:31 <elliott> Oh hmm
19:10:33 <elliott> You just need to do
19:10:41 <elliott> --haddock-options=--hyperlink-source on every cabal-install call, it seems
19:10:58 <elliott> Heh
19:11:09 <elliott> Maybe there's a ~/.cabal/config option for that
19:11:14 <Deewiant> Probably
19:11:16 <elliott> I guess I never actually checked to see if the source links were being generated
19:12:41 <elliott> Oh well, I'd like to keep with only one cabal-install'd package, anyway
19:12:59 <elliott> (i.e., cabal-dev)
19:13:18 -!- nooga_ has quit (Ping timeout: 260 seconds).
19:13:35 <Deewiant> http://hackage.haskell.org/packages/archive/trifecta/0.46/doc/html/Text-Trifecta-Parser-It.html
19:13:45 <Deewiant> Text.Trifecta.Parser.It
19:13:46 <Deewiant> harder, better, faster, stronger...
19:13:54 <Deewiant> What the hell is this?
19:14:07 <elliott> An internal module with a Daft Punk quote as its only documentation?
19:14:09 <elliott> HTH
19:14:15 <elliott> data It r a
19:14:15 <elliott> = Pure a
19:14:15 <elliott> | It a (r -> It r a)
19:14:15 <Deewiant> It's exported
19:14:19 <elliott> Looks like an iterator of some description
19:14:31 <Deewiant> It's a cofree comonad
19:14:35 <Deewiant> That's its other documentation
19:14:41 <elliott> That's the documentation of the Comonad instance
19:14:46 <elliott> -- | Return the text of the line that contains a given position
19:14:47 <elliott> rewindIt :: Delta -> It Rope (Maybe Strict.ByteString)
19:14:54 <elliott> It's just some kind of iterator
19:18:06 <elliott> Deewiant: BTW, my official recommendation wrt parsers is that you wait until mine is out
19:18:17 -!- Wamanuz2 has quit (Remote host closed the connection).
19:18:18 <Deewiant> That's not a very useful recommendation
19:19:09 <Deewiant> How many instances will I need to make Text trifecta-Parseable, I wonder
19:19:23 <elliott> Don't, just use ByteStrings, it parses UTF-eight
19:19:33 <elliott> Supposedly it's fast
19:19:52 <elliott> Deewiant: Anyhow, don't you /want/ a derivative-based (so it supports any CFG, including left-recursive ones, efficiently in practice) parser combinator library that supports incremental input (like all the fancy libraries do these days) library with hopefully nice diagnostics????
19:20:28 -!- Taneb has quit (Ping timeout: 240 seconds).
19:20:57 <Deewiant> But Data.Text has toCaseFold, it's all Unicodey
19:21:02 <elliott> s/list of advantages of derivative-based parsers/that list, plus (<|>) being commutative/
19:21:28 <elliott> Deewiant: If you use it in your parser, why not just create the relevant text for the snippet inside the parser
19:21:31 <zzo38> I used Parsec to make parsing in Haskell
19:21:41 <elliott> OK, that's probably slow :P
19:21:45 <elliott> Well
19:21:47 <elliott> Maybe not that slow
19:21:51 <Deewiant> http://abstrusegoose.com/_007297.htm
19:22:19 <Deewiant> I'm not really tied to any particular string type at this point
19:22:36 <Deewiant> Data.Text just looked like "the hot new thing"
19:22:52 <elliott> Data.Text.Text is my perfectprelude's String
19:23:03 <elliott> (perfectprelude as in what you were saying needs to go into Prelude, not something that actually exists)
19:23:10 <elliott> Well
19:23:11 <Deewiant> It has O(n) cons
19:23:11 <elliott> That's a lie
19:23:16 <Deewiant> That makes it kinda annoying
19:23:17 <elliott> I want all the functions and properties
19:23:20 <elliott> But a better implementation
19:23:24 <elliott> i.e.
19:23:25 <elliott> A rope :)
19:23:31 <Deewiant> Meh, ByteString it is
19:23:34 <Deewiant> How old-fashioned
19:23:40 -!- Wamanuz has joined.
19:23:45 <elliott> Something like... a rope of what is Text now
19:23:50 <elliott> Except UTF-eight
19:23:58 <coppro> +++++
19:23:58 <elliott> With the lengths cached properly
19:24:00 <elliott> i.e. not length in bytes
19:24:02 <elliott> coppro: What
19:24:02 <coppro> +++++++++++++++
19:24:03 <Deewiant> Either ISO88591 UTF32
19:24:14 <elliott> Deewiant: I vomited
19:24:25 <Deewiant> I doubt it
19:24:34 <elliott> My IRC persona did
19:24:39 <Deewiant> Something I ran into recently used that, I can't remember what it was
19:24:43 <Deewiant> (Might not have been Haskell)
19:25:07 <elliott> Ooh, I know how to speed Shiro up; cabal-dev install --ghc-opts="-O2"
19:25:13 <elliott> Then all my dependencies will get MOAR OPTIMISATION
19:25:26 <elliott> I'm so glad nobody mature is in here to tell me how stupid that is
19:25:29 <Deewiant> Doesn't cabal-install do that by default?
19:25:47 <Deewiant> -- optimization: True
19:25:50 <Deewiant> I imagine that means something
19:25:52 <elliott> cabal defaults to -O1 nowadays because -O2 is slow
19:25:57 <elliott> And doesn't help much for most things
19:26:02 <elliott> much ~ at all
19:26:07 <Deewiant> Meh, that sucks
19:26:16 <elliott> You were just complaining about how slow Haskell building was
19:26:36 <Deewiant> But MOAR OPTIMIZATION, dude
19:26:54 -!- oerjan has joined.
19:27:01 <zzo38> GHC is written in Haskell, so if they fix it to run faster (and possibly, less memory; this result in less page faults too), then it should compile faster, too.
19:27:02 <Deewiant> But I was also referring to -O2 not helping much
19:27:15 <Deewiant> Do the new GHCs use -fllvm by default yet?
19:27:17 -!- monqy has joined.
19:27:24 <elliott> Define new
19:27:33 <Deewiant> Darcs head
19:27:39 <Deewiant> Or git head, these days
19:27:39 <elliott> Fucked if I know
19:27:43 <oerjan> istr -O2 only gives marginal improvement over -O
19:27:46 <elliott> I don't think 7.0.4 does, but seven-point two might
19:27:49 <elliott> I'll ask the channel
19:27:54 <Deewiant> I know 7.0.x doesn't
19:28:05 <Deewiant> It doesn't even work on Arch because it depends on an old LLVM
19:28:38 <elliott> When my laptop gets back (after I send my laptop off >_>) I think I'll get me a shiny new SVN LLVM + GHC 7.2
19:28:46 <elliott> It'll be like Christmas
19:28:52 <elliott> Maybe shiro will even speed up, rather than slow down
19:29:14 <elliott> <parcs> no
19:29:16 <elliott> Deewiant: no
19:29:32 <oerjan> <elliott> When my laptop gets back <-- oh, so you finally --> (after I send my laptop off >_>) <-- oh, never mind.
19:29:36 <Deewiant> Shameful
19:29:40 <zzo38> The more -O results in a larger LLVM program, from what I tried.
19:29:42 <elliott> SpecConstr
19:29:42 <elliott> Function `a_soBN{v} [lid]'
19:29:42 <elliott> has two call patterns, but the limit is 1
19:29:42 <elliott> Use -fspec-constr-count=n to set the bound
19:29:42 <elliott> Use -dppr-debug to see specialisations
19:29:43 <elliott> SpecConstr
19:29:45 <elliott> Function `a_soBN{v} [lid]'
19:29:48 <elliott> has two call patterns, but the limit is 1
19:29:49 <elliott> Use -fspec-constr-count=n to set the bound
19:29:52 <elliott> Use -dppr-debug to see specialisations
19:29:53 <elliott> SpecConstr
19:29:54 <Deewiant> That's GHC 7.0.x for you
19:29:55 <elliott> Function `$j_soCK{v} [lid]'
19:29:57 <Deewiant> It prints that
19:29:57 <elliott> has six call patterns, but the limit is 3
19:29:58 <oerjan> </actual thought process>
19:30:00 <elliott> Use -fspec-constr-count=n to set the bound
19:30:01 <elliott> Use -dppr-debug to see specialisations
19:30:03 <elliott> I loooooooooove how you can't turn these off
19:30:05 <elliott> At all
19:30:07 <elliott> Because they're not actually warnings, the specialiser just prints them out
19:30:09 <elliott> oerjan: :-)
19:30:09 <Deewiant> Use grep
19:30:33 <elliott> I wish they were printed as warnings, but without the typical warning guard, so that -Werror failed on them
19:30:36 <elliott> That's the only way they could be more annoying
19:30:46 <elliott> By wish I mean, like, I don't know, it would be cosmically appropriate
19:30:48 <Deewiant> Man, people should use Data.Pointed more
19:30:54 <elliott> Why
19:30:57 <Deewiant> So that I could include it instead of other things
19:31:00 <Deewiant> import*
19:31:03 <elliott> I thought you were annoyed at Kmett's massive import list
19:31:08 <Deewiant> I am
19:31:10 <elliott> But no, you want more Kmett imports, more
19:31:13 <elliott> Moooore
19:31:23 <elliott> Kmetskell does not have the same ring to it.
19:31:25 <Deewiant> I want FingerTree to use it, actually
19:31:26 <elliott> s/t/tt/
19:31:39 <elliott> Deewiant: Which FingerTree
19:31:48 <elliott> Kmett has one :-)
19:31:49 <elliott> I think
19:31:58 <Deewiant> He uses Data.FingerTree in trifecta
19:32:00 <elliott> Oh
19:32:01 <elliott> Probably not then
19:32:08 <elliott> He has a priority queue, which is close enough right?
19:32:28 <Deewiant> Evidently just using a Trifecta parser requires using a FingerTree, a Rope, a UTF8 ByteString, and an ordinary ByteString
19:32:38 <elliott> A "UTF8 bytestring"?
19:32:39 <Deewiant> Oh, the UTF8 is just for the file name
19:32:45 <elliott> That's called a ByteString with a certain type of data inside it
19:32:49 <Deewiant> Whatever man
19:32:58 <Deewiant> Add "module" to the end of the line if you want
19:33:07 <elliott> Deewiant: BTW, you said Text has O(n) cons and the like, but it's pretty much the same internally as ByteString, which has the same problems
19:33:16 <elliott> For ByteString it's probably ok because of the use-case, though
19:33:19 <Deewiant> I was comparing it to String at that time
19:33:54 <elliott> Text doesn't even do "when we grow, grow too much for speculative future use" I think because that's a pain for functional languages for some reason I don't recall
19:34:09 <elliott> So everything that's O(n) really is O(n), every single time, always
19:34:15 <zzo38> I would like to be able to use Template Haskell to generate declarations even if it is not a declaration splice.
19:35:36 <elliott> Hey Deewiant, what's a good name for Vector a -> [(Int, a -> a)] -> Vector a
19:36:09 <elliott> i.e. f v xs = v // map (\(k,f) -> (k, f (v!k)) xs
19:36:43 <oerjan> <hagb4rd> german-elite.net#gulli
19:36:47 <oerjan> sounds scary
19:36:54 <Deewiant> apply'Em
19:37:15 <hagb4rd> oerjan: it is
19:37:24 <oerjan> O KAY THEN
19:37:31 <Deewiant> elliott: apply'Em
19:37:32 <elliott> Deewiant: What
19:37:36 <elliott> Why
19:37:37 <elliott> That
19:37:38 <elliott> Is the worst name
19:37:42 <Deewiant> It's like applyThem but apply'Em
19:37:48 <elliott> It isn't applyThem either
19:38:01 <Deewiant> I know, I just can't think of anything really good so I went with something really bad and apostrophy
19:38:05 <monqy> apply'em is better than apply'Em but still bad
19:38:09 <elliott> I was thinking (%%) or (//%) or update
19:38:19 <elliott> Or even modifyV
19:38:25 <Deewiant> //% reminds me of mathematica
19:38:37 <elliott> Data.Vector.(//) does that in the first place
19:38:38 <elliott> To me
19:38:44 -!- MSleep has joined.
19:38:46 <Deewiant> //% would work for me
19:38:58 <elliott> http://permalink.gmane.org/gmane.comp.lang.agda/3127 Oh dear god, Agda is now in our browsers, using FRP
19:40:46 <elliott> modifyFPInstructions $ \v -> v //% map (\ins -> (fromEnum ins, tail)) instructions
19:40:46 <elliott> d
19:40:49 <elliott> Deewiant: Yeah that's fairly good
19:40:54 <MSleep> What's Adga?
19:41:02 <zzo38> One use of more-notation, is that haskell-src-exts has too much duplication of everything: data PExp l = Var l (QName l) ... ann e = case e of Var l qn -> l ...
19:41:11 <MSleep> Asking WIkipedia got me "American Dairy Goat Association".
19:41:17 -!- MSleep has changed nick to MDude.
19:41:43 <elliott> MDude: A dependently-typed purely-functional programming language/proof system.
19:41:48 <MDude> No wonder, I got the g and a switched.
19:42:02 <zzo38> The other one, is, pretend MSE is actually Haskell and doens't have impure functions: data Card = Card { more CardFields, cardStyle :: Maybe Style }; data Style = more Styles; renderStyle :: Style -> Render (); renderStyle s = case s of more StyleRenderers;
19:42:15 -!- sllide has quit (Ping timeout: 260 seconds).
19:42:38 <elliott> modifyFPInstructions $ \v ->
19:42:38 <elliott> let (aSem, aSems) = let x:xs = v V.! fromEnum a in (x, bSem:xs)
19:42:38 <elliott> (bSem, bSems) = let x:xs = v V.! fromEnum b in (x, aSem:xs)
19:42:38 <elliott> in v V.// [(fromEnum a, aSems), (fromEnum b, bSems)]
19:42:38 <elliott> Oh dear, this could be complicated
19:42:45 <monqy> zzoskelle is scary
19:42:54 <elliott> Mutual recursion, isn't it great
19:43:06 <Deewiant> import Control.Applicative ( (<$>), (<|>), (<*), (*>), (<*>)
19:43:06 <Deewiant> , (<**>), pure, empty, optional
19:43:06 <Deewiant> , liftA2)
19:43:10 <Deewiant> Who said importing what you use is a pain
19:43:21 <elliott> Deewiant: I call that a pain
19:43:22 <zzo38> Now you use orders in more-declarations to represent z-orders of rendering fields.
19:43:51 <oerjan> <Deewiant> ?hoogle Applicative f => f (a -> b) -> (b -> c) -> f (a -> c)
19:43:57 <Deewiant> (Note the less than 40 characters available for the symbols; thanks be to "Text.Trifecta.Parser.Combinators")
19:44:17 <oerjan> :t flip (fmap (.))
19:44:18 <lambdabot> forall a b (f :: * -> *) a1. (Functor f) => a1 -> (a1 -> a -> b) -> f a -> f b
19:44:30 <oerjan> argh
19:45:01 <oerjan> :t flip (fmap (.) .)
19:45:02 <lambdabot> forall a b (f :: * -> *) (f1 :: * -> *) a1. (Functor f, Functor f1) => a1 -> (a1 -> f1 (a -> b)) -> f1 (f a -> f b)
19:45:15 <Deewiant> ?ty flip ((<*>) . pure . (Prelude..))
19:45:16 <lambdabot> forall (f :: * -> *) b c a. (Applicative f) => f (a -> b) -> (b -> c) -> f (a -> c)
19:45:19 <oerjan> wth is it about flip and me again
19:45:30 <oerjan> Deewiant: no, it should _not_ require Applicative
19:45:45 <elliott> I really wish Vector was polymorphic in the index type :-(
19:45:47 <Deewiant> ?ty flip (ap . return . (Prelude..))
19:45:48 <lambdabot> forall (m :: * -> *) b c a. (Monad m) => m (a -> b) -> (b -> c) -> m (a -> c)
19:45:57 <oerjan> Deewiant: only Functor
19:46:06 <Deewiant> I know what you meant :-P
19:46:06 <elliott> Someone make that happen, please
19:46:45 <zzo38> monqy: zzoskelle is scary?
19:46:48 <monqy> yes.
19:46:52 <monqy> zzoskelle is scary.
19:47:13 -!- CakeProphet has joined.
19:47:13 <elliott> Ha ha, I have a function here that would be made more readable with Control.Arrow but I'm not going to do it, take THAT Deewiant
19:47:13 -!- CakeProphet has quit (Changing host).
19:47:13 -!- CakeProphet has joined.
19:47:23 <Deewiant> Oh noes
19:47:28 <Deewiant> I am wounded!
19:47:43 <oerjan> :t (fmap (.) .)
19:47:44 <lambdabot> forall a b (f :: * -> *) (f1 :: * -> *) (f2 :: * -> *). (Functor f, Functor f1, Functor f2) => f2 (f1 (a -> b)) -> f2 (f1 (f a -> f b))
19:47:47 -!- Taneb has joined.
19:47:53 <oerjan> i think someone should assassinate Cale.
19:48:04 <oerjan> :t (fmap (Prelude..) Prelude..)
19:48:05 <Deewiant> It's pretty clearly flip (.:)
19:48:05 <lambdabot> forall b c a (f :: * -> *) a1. (Functor f) => (a1 -> f (b -> c)) -> a1 -> f ((a -> b) -> a -> c)
19:48:12 <Deewiant> ?ty flip (fmap fmap fmap)
19:48:13 <lambdabot> forall (f :: * -> *) a b (f1 :: * -> *). (Functor f, Functor f1) => f (f1 a) -> (a -> b) -> f (f1 b)
19:48:21 <Taneb> Cale?
19:48:25 <Deewiant> Now just substitute (Prelude..) for the appropriate fmaps
19:48:36 <Deewiant> ?ty flip (fmap fmap (Prelude..))
19:48:36 <lambdabot> forall (f :: * -> *) b c a. (Functor f) => f (a -> b) -> (b -> c) -> f (a -> c)
19:48:51 <Deewiant> ?ty flip (fmap . (Prelude..))
19:48:52 <lambdabot> forall (f :: * -> *) b c a. (Functor f) => f (a -> b) -> (b -> c) -> f (a -> c)
19:49:02 <oerjan> Taneb: the guy who modified (.) in lambdabot and gave no short way to write the original
19:49:17 <zzo38> monqy: What is it scary? What can it scares you?
19:49:31 <monqy> zzo38: the parts that are zzoskelle scare me
19:49:33 <elliott> Deewiant: P.S., please rename my Vector type, thanks
19:49:46 <zzo38> monqy: Then please be more specific and explain why.
19:49:47 <Deewiant> Wector
19:50:05 <monqy> (.) really should stop being fmap and start being (Control.Category..) also prelude-. should be category-. and same for id
19:50:24 <elliott> Deewiant: I find this a bad renaming
19:50:33 <elliott> Oh, so that's why I imported Data.Bits qualified
19:50:48 <monqy> zzo38: I'm not quite sure
19:51:08 <zzo38> monqy: Yes, I do think it make more sense. Since (.) and id in Category are still defined for the Hask category as well.
19:51:16 <elliott> Also, argh @ people who put (a -> Foo) into classes and say "YOU CAN'T EXAMINE THE VALUE LOL JUST PASS UNDEFINED"; Deewiant: You don't do that, do you?
19:51:22 -!- Taneb has quit (Remote host closed the connection).
19:51:50 <Deewiant> Is there an alternative to doing that when you have to do that? :-PP
19:51:57 <elliott> Yes
19:51:58 <oerjan> Deewiant: yes, use Proxy
19:52:02 <elliott> Proxy a -> Foo
19:52:03 <elliott> or
19:52:03 <elliott> Tagged a Foo
19:52:14 <elliott> They're in the same package and have conversion functions each way so I don't give a damn which you use
19:52:20 <zzo38> monqy: But I don't know why it can scare anyone
19:52:20 <elliott> The former lets the same source definitions keep working, though
19:52:25 <elliott> If you're fixing something broken
19:53:44 <Vorpal> if anyone loves a ultra-violence zombie game, I can recommend Dead Island. However, I personally find the violence a bit too much perhaps.
19:53:55 <elliott> Deewiant: Disabling fingerprints made Mycology go /slower/; please fix thanks
19:54:04 <Vorpal> s/loves a/loves/
19:54:10 <Vorpal> s/game/games/
19:54:17 <elliott> Vorpal: It was correct before then
19:54:21 <elliott> Although informal
19:54:27 <Deewiant> elliott: Mycology doesn't have a speed, Shiro does
19:54:30 <monqy> I've heard only good things about dead island
19:54:35 <Vorpal> elliott, yeah well that is what I got from editing it before sending it.
19:54:47 <Vorpal> elliott, even if it was correct I didn't intend it that way
19:54:49 <elliott> Heh
19:54:56 <elliott> Deewiant: I am offended
19:55:10 <Deewiant> I am okay with that
19:55:14 <Vorpal> <elliott> Deewiant: Disabling fingerprints made Mycology go /slower/; please fix thanks <-- wut
19:55:17 <elliott> Deewiant: BTW, tell me you have a backup of the RC/Funge website, or at least the fingerprints page
19:55:24 -!- Taneb has joined.
19:55:30 <Vorpal> elliott, that is opposite of my experience with cfunge and the -F switch
19:55:32 <Deewiant> The fingerprints page, yes
19:55:35 <Deewiant> Not sure how recent though
19:55:38 <Deewiant> It might be e.g. 5 years old
19:55:39 <Vorpal> so you are probably doing something wrong
19:55:40 <elliott> I rather suspect it will stop existing sometime within the next few years due to obviously being completely unmaintained
19:55:43 <elliott> Deewiant: lol
19:55:53 <elliott> Vorpal: It's within rounding error range
19:55:55 <Vorpal> elliott, I believe I have a backup, on a computer that is dual-booted to another OS atm.
19:55:59 <Vorpal> is the site down?
19:56:03 <elliott> Vorpal: No, I was just checking
19:56:10 <elliott> I'll mirror it myself for funge-archive when I get around to adding more
19:56:35 <Deewiant> It's in the wayback machine, I wouldn't worry
19:56:48 <elliott> Fair enough
19:57:30 <elliott> Does anyone (i.e. Deewiant or oerjan) have a nicer way of writing
19:57:34 <elliott> let (aSem, aSems) = let x:xs = v ! a in (x, bSem:xs)
19:57:35 <elliott> (bSem, bSems) = let x:xs = v ! b in (x, aSem:xs)
19:57:36 <elliott> in v // [(a, aSems), (b, bSems)]
19:57:37 <Vorpal> elliott, oh and downside with dead islands: load screen takes ages. Sure I'm using a slightly older hdd for windows, but 15 minutes is *absurd*
19:57:39 <elliott> I mean, I find it kind of elegant
19:57:41 <elliott> Just wondering
19:57:41 <Vorpal> and one*
19:57:44 <Deewiant> Also argh, can I tell firefox to not URL-escape stuff when expanding keyworded bookmark
19:57:47 <Deewiant> +s
19:58:02 <Taneb> Done some more work on Salesman
19:58:27 <Vorpal> <Deewiant> It's in the wayback machine, I wouldn't worry <-- not the binary files though?
19:59:17 <zzo38> How can they make compiled Haskell programs smaller? There could be some mode to tell it assume not to have errors, to compile it in that way by option
19:59:37 <Sgeo> islands?
20:00:03 <Deewiant> Noo System.Console.TermInfo.PrettyPrint
20:00:06 <Sgeo> zzo38, that sounds more likely to make compilation faster than to make the resulting binary smaller
20:00:12 <Deewiant> Why must you be even longer than Text.Trifecta.Parser.Combinators
20:00:21 <elliott> Deewiant: What are you even doing
20:00:22 <Sgeo> But it also defeats a large point of the purpose of Haskell.
20:00:28 <elliott> Oh, importing things?
20:00:38 <Deewiant> elliott: I'm trying to write parse :: Parser BS.ByteString a -> BS.ByteString -> Result s a and am now importing things, yes
20:00:54 <elliott> Deewiant: This will make you happy: https://github.com/ekmett/trifecta/commit/83133201c95d142c6faf5c9e3c6384aea4515c62
20:01:01 <zzo38> Sgeo: Maybe it is. But, it is one reason it should be option; not the default way.
20:01:02 <elliott> Although it doesn't fix the one you were complaining about
20:01:26 <Deewiant> Yeah, it would've made me happy a moment ago
20:01:29 <Deewiant> But not any more
20:01:29 <Taneb> I have done some more work on Salesman
20:01:31 <Deewiant> Although it might still
20:01:38 <Deewiant> Depending on whether I actually need prettyTerm here
20:01:39 <elliott> Wow, I know why disabling fingerprints sped me up
20:01:41 <zzo38> There could also be an option for simple errors, where it does not keep track of information about error but still knows to stop in case of error.
20:01:50 <elliott> Deewiant: Vorpal: -O2 on everything slowed things down
20:01:52 <elliott> Neat.
20:01:54 <elliott> oerjan: too
20:01:56 <zzo38> Either way, it could possibly remove information about errors from the executable file
20:02:18 <elliott> oerjan: Also you didn't answer my question :-P
20:03:08 <Vorpal> elliott, -O2 to what? clang?
20:03:11 <elliott> What, how do I depend on parsec
20:03:13 <elliott> Vorpal: ghc
20:03:16 <Vorpal> ah
20:03:27 <elliott> I guess one of my dependencies depends on parsec
20:03:34 <Vorpal> elliott, maybe you use parsec to "parse" befunge XD
20:03:41 <elliott> No, I dno't
20:03:42 <elliott> don't
20:03:56 <elliott> That's Shiro.Fungespace.mergeByteString
20:04:01 <elliott> The ugliest function in my program
20:04:09 <elliott> Shiro.Fungespace.insertFS is the second-ugliest
20:06:13 <zzo38> Is this a right way of State monad? get :: State s s; get = State $ join (,); put :: s -> State s s; put = State . flip (,);
20:06:33 <elliott> put does not look right.
20:06:51 <zzo38> I know it is the wrong type of the actual State monad.
20:07:26 <zzo38> But this way seems to work as far as I can tell
20:07:36 -!- boily has joined.
20:08:04 <elliott> Well, you haven't told us the definition of State there
20:09:00 <elliott> Deewiant: Wait, -Otwo didn't really slow things down, I think (//percent sign) did
20:09:21 <zzo38> I used newtype State s t = State { runState :: s -> (t, s) };
20:09:22 <Deewiant> When benchmarking, change only one thing at a time :-)
20:09:26 <elliott> How is this program so goddamn fidgety
20:09:32 <elliott> I can't change a single thing without it breaking
20:09:57 <elliott> :t flip (,) 99
20:09:58 <lambdabot> forall a a1. (Num a1) => a -> (a, a1)
20:10:06 <elliott> Hmm, right, it does work
20:10:12 <elliott> The return value is really confusing though
20:10:22 <elliott> Deewiant: Yeah but come oooon
20:10:36 <elliott> Also I'm still waiting for you or oerjan to make that code nicer :-|
20:16:53 <zzo38> It is really confusing? It seem reasonable to me.
20:17:07 <monqy> you're you
20:19:46 <oerjan> elliott: let (aSem, aSems) = (bSem:) <$> splitAt 1 (v ! a) i think, requires Control.Monad.Instances iirc
20:20:21 <Deewiant> let (aSem, aSems) = head &&& (bSem:).tail $ v ! a
20:20:35 <elliott> Those are both less symmetric and therefore gross
20:20:43 <elliott> And one uses arrows
20:20:49 <Deewiant> How less symmetric
20:20:59 <Deewiant> Just define (&&&) locally
20:21:15 <elliott> Actually yours are both broken
20:21:26 <elliott> They do one fewer vector reference
20:21:28 <elliott> So they must be
20:21:39 <elliott> Oh, wait, those are just replacing each line
20:21:42 <elliott> Each line is fine, I mean the whole structure
20:21:47 <Deewiant> let ~(aSem, aSems) = head &&& (bSem:).tail $ v ! a
20:21:48 <Deewiant> ~(bSem, bSems) = head &&& (aSem:).tail $ v ! b
20:21:48 <Deewiant> in v // [(a, aSems), (b, bSems)]
20:21:57 <elliott> Each line is fine, I mean the whole structure
20:21:59 <Deewiant> There's your symmetry
20:22:29 <Deewiant> And I don't think there's much to be done about the whole structure
20:22:36 <oerjan> <elliott> Deewiant: Vorpal: -O2 on everything slowed things down <-- i think the ghc user guide even warns about that possibility.
20:23:14 <zzo38> It seem Control.Monad.State not exposing the data constructor.
20:23:37 <Deewiant> How do I get [(something positiony, error message)] out of trifecta, grr
20:24:08 <elliott> Deewiant: You want to use Trifecta, but don't want the clang-style diagnostics?
20:24:09 <elliott> Neat
20:24:15 <Deewiant> Um
20:24:16 <Deewiant> Where did I say thatt
20:24:24 <elliott> Well, you want to throw away the type of diagnostic
20:24:42 <elliott> http://hackage.haskell.org/packages/archive/trifecta/0.46/doc/html/Text-Trifecta-Diagnostic.html See Caret/Span
20:24:45 <Deewiant> That can be part of the error message for all I care
20:24:48 <elliott> And all that jazz
20:24:53 <elliott> Deewiant: Then what do you need the position for
20:24:59 <Deewiant> I need to mess with it
20:25:06 <elliott> To do what
20:25:22 <elliott> Please tell me you're not going to re-scan the line so you can adjust the column to account for tabs
20:25:26 <Deewiant> What I'm parsing has been messed with between the user inputting it and trifecta seeing it
20:25:31 <elliott> Gross, why
20:26:03 <oerjan> *elliott: let ([aSem], aSems) = (bSem:) <$> splitAt 1 (v ! a) i think, requires Control.Monad.Instances iirc
20:26:23 <Deewiant> Because it's C and also because I haven't bothered to look into how to fix the fact that my parser requires me consing a newline in front of the input
20:26:40 <elliott> Deewiant: What are you even parsing
20:26:45 <Deewiant> C, I told you
20:27:10 <elliott> Deewiant: Why are the existing C parsers inadequte
20:27:12 <elliott> inadequate
20:27:17 <Deewiant> They're not DeathStation 9000 enough
20:27:28 <elliott> You trying to steal my thunder? :P
20:27:42 <elliott> I think language-c marks all GNU extensions in the AST
20:27:57 <Deewiant> I think it has an identical source and execution character set
20:28:07 <elliott> language-c doesn't execute.
20:28:10 <elliott> It just parses.
20:28:15 <oerjan> <zzo38> It seem Control.Monad.State not exposing the data constructor. <-- that's weird, i thought i'd used it before
20:28:32 <elliott> zzo38: Use "state"
20:28:35 <elliott> :t state
20:28:36 <lambdabot> forall s a. (s -> (a, s)) -> State s a
20:28:37 <Deewiant> I think it doesn't implement the source passes precisely the way the abstract C translator does
20:28:56 <Deewiant> Anyway, conversion to execution character set happens before the conventional "parsing" stage
20:29:00 <zzo38> elliott: OK. But why is it like that?
20:29:01 <elliott> Deewiant: It doesn't do cpp (well it does, but only by invoking cpp), and you're mixing lexing and parsing too
20:29:05 <oerjan> > runState (State $ \s -> (s+s, s-s)) 1
20:29:05 <lambdabot> Not in scope: data constructor `State'
20:29:09 <oerjan> huh
20:29:09 <elliott> zzo38: Because it's StateT
20:29:13 <elliott> oerjan: Like I said, state
20:29:30 <zzo38> O, OK, that's why. Thank you for telling me.
20:29:31 <oerjan> elliott: this must be some new development?
20:29:40 <Deewiant> I'm only mixing lexing and parsing a tiny bit
20:29:42 <elliott> oerjan: mtl two, I think
20:29:47 <Deewiant> In that I gather preprocessing directives as I parse
20:29:49 <elliott> So last October
20:29:50 <Deewiant> Er, lex
20:29:51 <oerjan> :t state
20:29:51 <lambdabot> forall s a. (s -> (a, s)) -> State s a
20:29:52 <elliott> Or was it transformers
20:30:00 <elliott> Oh, mtl two switched to transformers
20:30:09 <Deewiant> And that's only because <foo> could be a header-name or less-than foo greater-than
20:30:14 <elliott> Deewiant: You're mixing lexing and parsing because you're using Parsec/Trifecta/whatever
20:30:14 <Deewiant> And disambiguating that later would be annoying
20:30:16 <elliott> Which do that inherently
20:30:20 <oerjan> elliott: gah if they did that they should have made state a MonadState method :(
20:30:30 <oerjan> one which i recall missing
20:30:34 <Deewiant> elliott: That doesn't matter?
20:30:44 <elliott> Deewiant: Neither does language-c's mixing
20:30:52 <elliott> oerjan: IIRC edwardk has complained that MonadState isn't _just_ state
20:30:56 <elliott> Since you can encode the rest with it
20:30:56 <Deewiant> elliott: It's the principle of the thing
20:31:07 <elliott> Or was it state, get, set, modify with the latter two with defaults in terms of the first
20:31:12 <elliott> Deewiant: I see
20:31:15 <oerjan> elliott: they should have defaults in terms of each other, certainly
20:31:22 <Deewiant> elliott: This doesn't matter from the POV of the abstract C machine, I'm just doing a bit of phase 3 and 4 together
20:31:29 <elliott> Deewiant: You should logread, ais and others had various ideas for DS9King in a way that points out assumptions well
20:31:42 <elliott> For instance the representation of things casted to char pointers
20:31:53 <Deewiant> I'll get to that if/when I get as far as a backend :-p
20:32:23 <elliott> Deewiant: "If"? What the world truly needs is a C parser and typechecker with absolutely nothing else :-P
20:32:41 <elliott> That's the hard part, after all ;-)
20:32:51 <Deewiant> Currently the hard part is lexing
20:33:02 <Deewiant> Diagnostic !(Either String Rendering) !DiagnosticLevel m [Diagnostic m]
20:33:07 <Deewiant> What is the Either and why
20:33:08 <elliott> The hard part of a DS9C
20:33:34 <oerjan> !haskell import Unsafe.Coerce; import Control.Monad.Instances; main = print ((' ':) `fmap` unsafeCoerce "testing" :: (Char, String))
20:33:37 <elliott> Deewiant: http://hackage.haskell.org/packages/archive/trifecta/0.46/doc/html/src/Text-Trifecta-Diagnostic-Prim.html#tellDiagnostic
20:33:39 <EgoBot> ​(
20:33:41 <elliott> See Pretty instance, possibly other
20:33:41 <elliott> s
20:33:45 <oerjan> :(
20:34:10 <elliott> Deewiant: So which C standard are you doing
20:34:17 <Deewiant> Latest
20:34:35 -!- EgoBot has quit (Remote host closed the connection).
20:34:46 -!- EgoBot has joined.
20:34:58 -!- boily has quit (Ping timeout: 260 seconds).
20:35:01 <elliott> Oh no, pushString is one of my bottlenecks
20:35:15 <elliott> I could make it faster, but it'd require OverloadedStrings :-/
20:35:26 <Deewiant> So enable it
20:35:33 <Deewiant> Not like you're portable to non-GHC anyway
20:35:35 <zzo38> The way I defined get and put, I can also define: post :: (s -> s) -> State s s; post f = get >>= put . f;
20:35:41 <elliott> Deewiant: All I depend on is FlexibleInstances and BangPatterns
20:35:47 <elliott> And no GHC. or Unsafe. modules
20:35:51 <elliott> Not even unsafePerformIO
20:35:54 <Deewiant> Oh, darn
20:36:02 <Deewiant> Well, you don't ever /need/ OverloadedStrings
20:36:07 <elliott> Not that anything that isn't GHC can run this, but that's just because they're all crap
20:36:09 <Deewiant> It's just convenience, you can manually convert
20:36:23 <elliott> Deewiant: Weeeeeeeeeeeeeeeeeeeeeeeell... I guess I can try and inline pushString
20:36:25 <elliott> But I'm not doing to write
20:36:34 <zzo38> In Control.State.Monad they have this example: do { n <- get; put (n+1); return n; }
20:36:45 <zzo38> But I do it this way instead: post (1 +)
20:36:56 <elliott> pushString (\stack -> fromIntegral (ord 'z') :- 'y' :- 'x' :- 0 :- stack)
20:37:06 <elliott> fromIntegral and ords omitted for two of those because I got lazy
20:37:12 <zzo38> That is why I prefer to define "put" in this way.
20:38:01 -!- DH____ has joined.
20:39:16 <oerjan> zzo38: post is usually called modify, unless they changed that too.
20:39:26 <oerjan> :t modify
20:39:27 <lambdabot> forall s (m :: * -> *). (MonadState s m) => (s -> s) -> m ()
20:39:32 <elliott> oerjan: He wants -> m s
20:39:33 <elliott> For no apparent reason
20:39:59 <oerjan> well -> m s is admittedly about as intuitive as -> m ()
20:40:02 <elliott> Deewiant: What, inlining pushString slows things down
20:40:15 <elliott> It fucking reverses the string and then builds a simple monadic list of actions out of them
20:40:15 <oerjan> since they are the only reasonable options
20:40:18 <Deewiant> Guess you're not calling it often enough there
20:40:22 <elliott> How can it be slowed down by having to make no assumptions about the string
20:40:23 <elliott> How
20:40:27 <elliott> Erm
20:40:30 <elliott> How can it be sped up by having to make no assumptions about the string
20:40:37 <elliott> And having to go through it twice
20:40:43 -!- Taneb has quit (Read error: Connection reset by peer).
20:40:44 <elliott> oerjan: except he wants it to return the _old_ state
20:40:55 <oerjan> ...oh.
20:41:23 <oerjan> hm i guess post is a better name, then. or perhaps pre?
20:42:01 <zzo38> It is like, postincrement does in C, for example. It return the old state, in C, too.
20:42:23 <oerjan> ah yes.
20:44:12 <oerjan> <elliott> fromIntegral and ords omitted for two of those because I got lazy <-- just define a Integral Char instance >;P
20:44:17 <oerjan> *an
20:44:40 <oerjan> hm wait
20:44:45 <oerjan> that still won't work
20:45:04 <oerjan> needs OverloadedChars :P
20:46:10 <oerjan> you could use OverloadedStrings
20:46:24 -!- Taneb has joined.
20:46:26 <elliott> that's
20:46:29 <elliott> exactly what the topic of discussion was
20:47:05 <oerjan> how logical.
20:47:55 <oerjan> apparently my eyes glazed over everything except the actual haskell code :P
20:52:16 <zzo38> Maybe I will make the Haskell preprocessor program you have overloaded everything.
20:52:30 <elliott> Deewiant: What. Removing my check for \0 in pushString makes things slower.
20:52:36 <elliott> Just
20:52:36 <elliott> What
20:52:40 <elliott> Noticably slower too
20:52:43 <elliott> Like almost half a second slower
20:52:45 -!- KingOfKarlsruhe has joined.
20:53:01 <elliott> Ugh, not almost half a second
20:53:07 <elliott> It's that fucking //percent sign again
20:53:11 <Deewiant> Are you pushing huge strings now instead of stopping at the null like you should? ;-)
20:53:36 <elliott> Deewiant: I don't "stop at the null", I error out at the null.
20:53:45 <oerjan> // is not a percent sign. trust me on this.
20:53:47 <elliott> Haskell Strings can contain \0s; 0gnirtses can't.
20:53:54 <Deewiant> error "x" is probably more expensive than something else
20:54:03 <oerjan> elliott: increased strictness perhaps?
20:54:04 <elliott> Deewiant: It's /never reached/
20:54:13 -!- kmc has joined.
20:54:17 <elliott> oerjan: push is strict, so it isn't that
20:54:18 <Deewiant> It's still created
20:54:22 <elliott> Deewiant: No?
20:54:27 <elliott> where pushChars [] = return ()
20:54:27 <elliott> pushChars ('\0':_) =
20:54:27 <elliott> error $ "pushStringAs0Gnirts " ++ show s ++ ": string contains NUL byte"
20:54:27 <elliott> pushChars (c:s') = do
20:54:27 <elliott> push . fromIntegral . ord $ c
20:54:28 <elliott> pushChars s'
20:54:31 <elliott> I literally commented out the \0 clause.
20:54:37 <zzo38> You don't need OverloadedStrings but it should help more in my opinion, if you can program the overloading at compile-time, when you have access to the source file when doing the program that is for overloading
20:54:52 <Deewiant> Then the c isn't strict, maybe?
20:55:15 <elliott> Deewiant: Like I said, push is strict
20:55:18 <elliott> Very strict
20:55:32 <Deewiant> So?
20:55:33 <oerjan> elliott: what happens if you replace the $ c by $! c ?
20:55:38 <Deewiant> Does pushChars realize that?
20:55:53 <elliott> push :: Value -> Shiro ()
20:55:54 <elliott> push x = modifyStack (stackCons x)
20:55:54 <elliott> stackCons :: Value -> Stack -> Stack
20:55:54 <elliott> stackCons x (Stack n (x' :- xs)) = Stack (n+1) (x :- x' :- xs)
20:55:54 <elliott> infixr 5 :-
20:55:54 <elliott> data StackElems = (:-) {-# UNPACK #-} !Value StackElems deriving (Show)
20:55:56 <elliott> data Stack = Stack {-# UNPACK #-} !Value !StackElems deriving (Show)
20:56:16 <elliott> oerjan: Let's find out
20:56:40 <oerjan> elliott: or better, use (!c:s') in the pattern
20:56:52 <elliott> oerjan: That would make me use more extensions :-(
20:56:57 <elliott> Currently I use each extension in only one file :P
20:57:11 <elliott> oerjan: Gah, yes, $! reverses the slowdown
20:57:12 <oerjan> sigh, c `seq` do then
20:57:13 <Deewiant> pushChars c : s' | seq c otherwise = do
20:57:17 <elliott> I'll keep it but put the \0 back
20:57:22 <elliott> As in, the \0 clause
20:57:25 <Deewiant> elliott: Toldja so
20:57:32 <elliott> Deewiant: It's unnatural :-(
20:57:43 <elliott> Deewiant: How many IPs does Mycology create, roughly
20:57:48 <Deewiant> ccbi -s
20:57:48 <elliott> rotate :: ([a],[a]) -> ([a],[a])
20:57:48 <elliott> rotate ([ip], r) = (reverse r ++ [ip], [])
20:57:48 <elliott> rotate (ip:xs, r) = (xs, ip:r)
20:57:48 <elliott> rotate _ = error "rotate: no IPs"
20:57:48 <elliott> remove :: ([a],[a]) -> ([a],[a])
20:57:49 <elliott> remove ([_], r) = (reverse r, [])
20:57:51 <elliott> remove (_:xs, r) = (xs, r)
20:57:53 <elliott> remove _ = error "remove: no IPs"
20:57:55 <elliott> These look pretty slow
20:57:57 <elliott> Deewiant: CCBI this, CCBI that; sheesh
20:58:07 <elliott> How do I disable TURT
20:58:10 <elliott> -F -turt?
20:58:12 <elliott> -f -TURT
20:58:12 <elliott> I forget
20:58:16 <Deewiant> As do I
20:58:16 <elliott> Yeah, -f -TURT
20:58:22 <Vorpal> elliott, iirc at most 3 threads at the same time, but over an entire run, much more
20:58:25 <elliott> (It creates a file which is annoying)
20:58:35 <elliott> elliott@katia:~/Code/shiro$ ~/ccbi-2.1/ccbi -s -f -TURT rsc/mycology/mycology.b98
20:58:35 <elliott> CCBI :: unexpected argument 'R'. Use '--help' for help.
20:58:35 <elliott> CCBI :: unexpected argument 'T'. Use '--help' for help.
20:58:35 <elliott> CCBI :: unexpected argument 'U'. Use '--help' for help.
20:58:35 <elliott> CCBI :: argument 'fingerprints' expects 1 parameter(s), but has only 0.
20:58:37 <elliott> Deewiant: Bug report.
20:58:45 <elliott> Forked: 6 IPs
20:58:46 <elliott> Stopped: 7 IPs
20:58:46 <elliott> Had: 2 IPs live at maximum
20:58:46 <elliott> Was dormant: 1 IP
20:58:48 <elliott> Vorpal: Much more being "six"
20:59:00 <elliott> OK, so my IP list code is probably not any kind of bottleneck.
20:59:07 <Vorpal> elliott, huh, thought it was like 10
20:59:19 <elliott> That's much more? :-P
20:59:32 <Vorpal> elliott, yes
20:59:38 <Vorpal> not like "much" is well defined anyway
20:59:39 <Deewiant> elliott: -f-TURT
20:59:49 <Deewiant> elliott: -f +all,-TURT (IIRC)
20:59:56 <elliott> Deewiant: Lame
21:00:00 <elliott> That's not getopt standard (TM)
21:00:03 <elliott> Well, I don't think
21:00:11 <Deewiant> It's not my argument parser
21:00:22 <elliott> It should be
21:00:30 <Deewiant> It won't be
21:00:45 <elliott> Admittedly Shiro uses someone else's argument parser
21:00:48 <elliott> But it has exactly two argument
21:00:49 <elliott> s
21:01:02 <elliott> currentIP Shiro.Monad 1.8 0.4
21:01:02 <elliott> Maybe my iplist code /is/ a bottleneck
21:01:24 <elliott> f (x:xs) = xs ++ [x]
21:01:30 <elliott> oerjan: That's O(1) in practice, right?
21:01:36 <elliott> If I only ever look at the head, or do f
21:01:41 <elliott> That's literally the only options I ever do on the list
21:01:47 <elliott> Oh, wait
21:01:51 <elliott> I also take the tail
21:03:13 <elliott> Thanks oerjan
21:03:26 <oerjan> i dunno
21:03:35 <elliott> Bah
21:04:01 <elliott> Hey Deewiant, that's O(one) in practice, right
21:04:08 <oerjan> maybe quadratic in the number of f's applied
21:04:20 <elliott> oerjan: I always access the head before f
21:04:29 <elliott> As in, my usage looks like
21:04:41 <elliott> head, f, head, f, head, f, head, tail, head, f, ...
21:05:31 <oerjan> hm i may still suspect quadratic.
21:05:42 <elliott> Hmm, I'm surprised my current code isn't broken; Deewiant: After quitting an IP, I still go to the next IP
21:05:49 <elliott> As in, I skip the IP directly after the quit one's turn
21:05:52 <elliott> Do you check for that?
21:06:00 <oerjan> actual profiling might discover the truth :P
21:06:01 <elliott> If so, I guess Mycology understands my code better than I do
21:06:03 <Deewiant> Probably not
21:06:12 <Deewiant> I only check concurrent code with two IPs, remember
21:06:15 <elliott> >_<
21:06:19 <Deewiant> So if you skip a turn it's missed
21:06:31 <Deewiant> When you implement TRDS it'll notice, don't worry :-)
21:06:54 <elliott> I'm trying to optimise before that
21:07:05 <elliott> ?pl pop >>= \a -> push a >> push a
21:07:05 <lambdabot> liftM2 (>>) push push =<< pop
21:07:22 <elliott> <Deewiant> pop >>= join (liftM2 (>>)) push
21:07:40 <Deewiant> Right
21:07:54 <oerjan> elliott: because the linear cost of applying xs ++ [x] is spread across the entire part before ++, so head will only affect it a tiny bit, i think
21:08:31 <oerjan> while each f followed by a head will apply the cost of all the previous f's at that point
21:08:31 <elliott> oerjan: Right
21:08:46 <elliott> oerjan: That's annoying :/
21:09:16 <elliott> oerjan: I basically have a list of N elements, and a pointer into this list that I increment; upon reaching the end, it resets to the start
21:09:22 <elliott> And sometimes I remove an element from the list
21:09:30 <elliott> The question is how to do that without something ugly like a vector :P
21:09:46 <elliott> Last time you got me to use zippers, but that involves reversing on the reset-to-start case
21:09:46 <oerjan> zipper?
21:09:49 <elliott> Last time you got me to use zippers, but that involves reversing on the reset-to-start case
21:09:53 <elliott> rotate :: ([a],[a]) -> ([a],[a])
21:09:53 <elliott> rotate ([ip], r) = (reverse r ++ [ip], [])
21:09:53 <elliott> rotate (ip:xs, r) = (xs, ip:r)
21:09:53 <elliott> rotate _ = error "rotate: no IPs"
21:09:53 <elliott> remove :: ([a],[a]) -> ([a],[a])
21:09:54 <elliott> remove ([_], r) = (reverse r, [])
21:09:56 <elliott> remove (_:xs, r) = (xs, r)
21:09:56 <oerjan> yep
21:09:58 <elliott> remove _ = error "remove: no IPs"
21:10:05 <elliott> Which is ugly and non-constant-time
21:10:15 <oerjan> ...still better than quadratic :P
21:10:38 <elliott> >:(
21:10:46 <elliott> I guess I'll try sequencing the list
21:11:36 <elliott> rotate :: ([a],[a]) -> ([a],[a])
21:11:36 <elliott> rotate ([ip], r) = length xs' `seq` (xs', []) where xs' = reverse r ++ [ip]
21:11:36 <elliott> rotate (ip:xs, r) = (xs, ip:r)
21:11:36 <elliott> rotate _ = error "rotate: no IPs"
21:11:38 <elliott> Maybe this'll do better
21:12:11 <elliott> Gah, reverse on Seq is O(one)
21:12:22 <elliott> erm
21:12:23 <elliott> O(n)
21:12:29 <elliott> I thought it might be able to do some fancy "just flip a bit" thing, since it has O(one) accessing from the end
21:12:48 <oerjan> elliott: you can fake that with wrapping around it
21:12:54 <elliott> Hmm, that seq doesn't seem to help
21:13:02 <elliott> At least not noticeably
21:13:07 <elliott> oerjan: Yeah, just wondering whether it's worth it
21:13:09 <elliott> I'll give it a try
21:13:20 <oerjan> but if you use Seq, why use reverse
21:13:48 <oerjan> just append things, which is supposed to be cheap
21:14:05 <elliott> oerjan: um because I'd still use a zipper?
21:14:10 <elliott> oh hmm I see
21:14:17 <oerjan> elliott: if you use Seq there's no point in a zipper
21:14:22 <elliott> yes, that might work, thanks :)
21:14:27 <elliott> I swear to god I've tried Seq for this before...
21:14:41 <oerjan> i may even have been the one suggesting it ;P
21:15:55 <oerjan> i'm sure queues _is_ one of the suggested use cases for it
21:17:08 <elliott> yeah I think I might have tried Seq on your suggestion?
21:17:18 <elliott> maybe I decided this was simpler
21:17:18 <elliott> dunno
21:17:20 <elliott> I must have been an idiot
21:17:25 <oerjan> it is conceivable that you dropped it because zippers were more efficient in total?
21:17:42 <oerjan> after all the reverse only applies each time you have traversed the list completely
21:17:54 <elliott> oerjan: I definitely wasn't thinking about speed at that point :-)
21:18:26 <oerjan> i suspect zippers are more efficient but Seq's may be more "real-time"
21:18:45 <elliott> Deewiant: Does Fungicide test tons of concurrent IPs
21:18:50 <oerjan> that is, less max waiting
21:19:02 <Deewiant> elliott: Yes
21:19:05 <elliott> Deewiant: How many
21:19:27 <Deewiant> http://iki.fi/matti.niemenmaa/befunge/fungicide-rankings/fork.b98.html
21:19:53 <elliott> oerjan: Seq should be more efficient for 131072 items, right?
21:20:24 <oerjan> elliott: only at the point when you do the reverse for a zipper
21:20:34 <elliott> oerjan: I mean in total :-P
21:20:36 <elliott> But hmm
21:21:05 <oerjan> a zipper is a _much_ simpler data structure, so i think it's more efficient in total
21:22:33 <oerjan> mind you this is a hunch, i'm not known for actually optimizing my own programs ;P
21:22:44 <elliott> Deewiant: So how many instructions does each IP execute
21:22:49 <elliott> I mean, I need to reverse every N instructions, where N = number of IPs
21:23:01 <elliott> And reversing a list of 131072 items won't be fast
21:23:34 <Deewiant> I think they all just z until they all @ at once
21:23:43 <Deewiant> So [1..131072]
21:23:56 <oerjan> elliott: indeed. but amalgamawordineverremembered, it's spread out over all the previous 131072 steps and becomes O(1) per step
21:24:14 <Deewiant> amortized
21:24:19 <oerjan> right
21:24:26 <elliott> Deewiant: Heh
21:24:40 <elliott> oerjan: right
21:24:58 <oerjan> and each step is O(1) anyhow, so there's only a constant multiple for it
21:25:02 <elliott> Well, let's see what it does to my Mycology performance
21:25:23 <elliott> oerjan: executing an instruction is _not_ O(1)
21:25:45 <elliott> well hmm, I don't think
21:25:48 <oerjan> elliott: in that case the reverse should be even less significant
21:25:53 <elliott> oerjan: well no it is in practice
21:26:08 <elliott> but there are edge-cases, like k can do any finite number of executions of a single instruction
21:26:22 <oerjan> ok
21:27:45 <elliott> oerjan: Holy crap Seqs are slower
21:27:49 <Taneb> Had an algorithm test in further maths
21:27:52 <elliott> Like, it's been running for several seconds already
21:28:00 <oerjan> elliott: was 'fraid so
21:28:01 <elliott> Oh hmm
21:28:04 <elliott> Going to test concurrent execution with 2 IPs.
21:28:04 <elliott> Assuming that instructions without any particular concurrency-related behaviour, such as ^>v<#, take one tick.
21:28:04 <elliott> Will continue to produce textual output, so strings must work correctly where concurrency is concerned: "a b" should take 5 ticks, 'a should take 1.
21:28:04 <elliott> [LITERAL HANG]
21:28:06 <elliott> OK, so it's just broken
21:28:18 <elliott> But it was definitely slower before anyway
21:28:20 <Taneb> Compared to even the stuff that I understnad that bounces back and forth in this channel, it was first school stuff
21:29:29 <Taneb> 20 marks for doing a thingy with bubblesort
21:29:37 <Taneb> Debug trace
21:29:37 <Taneb> Shuttlesort, rather
21:29:39 <elliott> Bubblesort, the best sort.
21:29:45 <elliott> Debug traces are algorithms?
21:29:54 <oerjan> it's bubbly!
21:33:16 <oerjan> <Taneb> Everything starts going wrong when the comic is put in the bin
21:33:18 <oerjan> aha
21:33:53 <elliott> oerjan: Five more comics of IWC for you
21:33:59 * elliott continues hobbying.
21:34:07 <oerjan> AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAaaaaaaaaaaa
21:34:18 <elliott> Ah, the sweet sound of horror.
21:34:30 <elliott> "I kind of assumed that if Choking was to be made permanently Choking, Fireballs would be made permanently Fireballs again. This seems so final, though; I hope this doesn't mean the story is coming to an end."
21:34:35 <elliott> You know the story is ending when deaths start getting demoted.
21:34:51 <oerjan> whatever dmm intends, he is certainly keeping up the suspense by seemingly wrapping up things
21:35:16 <elliott> oerjan: My prediction is: a giant fireball and everything resets. That would be new!
21:35:28 <oerjan> u think
21:35:38 <elliott> u mad?
21:35:42 <monqy> :(
21:35:45 <elliott> In this analogy, u mad because IWC is ending.
21:36:02 <oerjan> u thant
21:36:07 <elliott> wat
21:36:54 <oerjan> angkor
21:37:00 <elliott> no
21:38:12 <oerjan> dr.
21:38:25 <elliott> ok
21:38:32 <oerjan> o
21:38:40 <elliott> help
21:38:45 <oerjan> u mad?
21:39:07 <Vorpal> oerjan, is it confirmed that iwc is ending?
21:39:21 <oerjan> Vorpal: not last i checked :P
21:39:25 <Vorpal> good
21:39:42 <elliott> thank god it isn't /confirmed/, only obvious :P
21:40:02 <Vorpal> oerjan, I suspect he will do one more than what everyone thinks he is going to stop at.
21:40:57 <Taneb> But some people think he is going to do that!
21:41:11 <Vorpal> Taneb, well, the majority I meant
21:41:26 <oerjan> the majority hasn't said anything, on the forum at least
21:41:33 <Vorpal> right
21:41:40 <elliott> they're trying to avoid giving him ideas
21:41:44 <Vorpal> oerjan, he should run a poll XD
21:42:17 <oerjan> although there was one person who misremembered the number as 3150 and posted a relief post that it hadn't stopped then
21:42:28 <elliott> i just read that lol
21:43:05 <Vorpal> oerjan, what is the actual number now again?
21:43:10 -!- Wamanuz has quit (Remote host closed the connection).
21:43:50 <oerjan> 3160
21:43:57 <Vorpal> ah
21:44:08 <Sgeo> number of what?/
21:44:17 <Vorpal> The Number
21:44:45 <elliott> number of green people in world
21:45:23 <oerjan> Sgeo: dmm has several times mentioned that he wanted to reach the number of calvin & hobbes comics, 3160.
21:45:36 <oerjan> and now iwc is at #3155
21:46:27 <oerjan> at the same time as several of the iwc themes look eerily like they're in a "wrapping up" stage
21:46:54 <oerjan> the fantasy group even finished their quest!
21:47:17 <elliott> What was their quest again? My knowledge of IWC is so patchy.
21:47:18 <Sgeo> Is it not a regular occurance for IWC to seem to be ending?
21:47:26 <oerjan> yes, that's true
21:47:35 <oerjan> but still, some of us are worried.
21:47:50 <elliott> oerjan: five comics seems a bit short to wrap up everything, from the last ten or so I read
21:48:10 <oerjan> elliott: perhaps.
21:48:21 <elliott> oerjan: maybe it'll end on 3163 :D
21:48:25 <elliott> just to catch everyone out
21:48:29 <oerjan> eek
21:48:34 <Taneb> I reckon he's going to go into Supers and Espionage again
21:48:38 <Taneb> After 3160
21:49:16 <oerjan> supers does require him to get hold of the illustrator...
21:49:27 <elliott> oh no, getting a hold of an illustrator
21:49:31 <elliott> a well-known impossibility
21:49:44 <elliott> Harry Potter is also disconnected, isn't it?
21:50:02 <oerjan> elliott: um _the_ illustrator, who obviously cannot be much interested since he hasn't made any for years...
21:50:22 <elliott> oerjan: "can I have another bunch of comics since I'm ending the strip you drew a bunch of comics for"
21:50:28 <oerjan> well harry potter may or may not be happening entirely within will shakespeare's mind...
21:50:34 <elliott> doesn't sound _that_ hard to achieve :P
21:51:02 <oerjan> well ok, maybe one or so might be possible
21:52:21 -!- Wamanuz has joined.
21:54:06 <oerjan> <elliott> Aren't Deltas a monoid
21:55:19 <oerjan> Delta = data type for representing a generalization of character width including tabs of arbitrary column settings?
21:55:40 <Deewiant> Delta = data type representing a position in a file
21:55:42 <Deewiant> I /think/
21:55:46 <Deewiant> I still don't get half of it
21:55:47 <oerjan> oh.
21:56:01 <oerjan> did anyone give an actual definition?
21:56:07 <Deewiant> (Where "it" = position/source representation in Trifecta)
21:56:18 <oerjan> oh hm.
21:57:06 <Deewiant> data Delta
21:57:07 <Deewiant> Columns !Int64 !Int64
21:57:07 <Deewiant> Tab !Int64 !Int64 !Int64
21:57:07 <Deewiant> Lines !Int64 !Int64 !Int64 !Int64
21:57:08 <Deewiant> Directed !ByteString !Int64 !Int64 !Int64 !Int64
21:57:36 <oerjan> instance Monoid Delta where mempty = Columns 0 0 mappend = (<>)
21:57:44 <oerjan> found that
21:58:00 <oerjan> http://hackage.haskell.org/packages/archive/trifecta/0.36.3/doc/html/src/Text-Trifecta-Rope-Delta.html
21:58:15 <Deewiant> Yes, it's a Monoid, we knew that :-P
21:58:30 <oerjan> i thought you were asking
21:58:50 <Deewiant> 2011-09-16 21:58:58 ( elliott) Aren't Deltas a monoid
21:58:50 <Deewiant> 2011-09-16 21:59:07 ( elliott) In which case you just need to replace wherever mempty is called
21:58:53 <Deewiant> 2011-09-16 21:59:08 ( Deewiant) Yes
21:59:03 <Deewiant> That "Yes" was to the former
21:59:37 <oerjan> ok
22:00:17 -!- Taneb has quit (Ping timeout: 276 seconds).
22:01:51 <oerjan> <Deewiant> It's a cofree comonad
22:02:08 <oerjan> i keep wanting to read that as coffee comonad
22:02:33 <elliott> fromList :: [Word8] -> ByteSet
22:02:33 <Deewiant> I actually read that as coffee comonad until I noticed that I said it
22:02:34 <elliott> fromList s0 = ByteSet $ I.unsafeCreate 32 $ \t -> do
22:02:34 <elliott> _ <- I.memset t 0 32
22:02:34 <elliott> let go [] = return ()
22:02:34 <elliott> go (c:cs) = do
22:02:34 <elliott> prev <- peekByteOff t byte :: IO Word8
22:02:36 <elliott> pokeByteOff t byte (prev .|. bit)
22:02:38 <elliott> go cs
22:02:40 <elliott> where I byte bit = index (fromIntegral c)
22:02:42 <elliott> go s0
22:02:47 <elliott> Neat.
22:03:36 <Deewiant> mapM_ something-simpler s0
22:08:01 -!- elliott has quit (Ping timeout: 260 seconds).
22:08:46 -!- Patashu has joined.
22:12:51 -!- derdon has quit (Remote host closed the connection).
22:14:52 -!- cheater has joined.
22:20:27 -!- cheater has quit (Remote host closed the connection).
22:20:51 -!- cheater99 has joined.
22:40:11 -!- DH____ has quit (Ping timeout: 260 seconds).
22:44:13 -!- cheater99 has quit (Quit: Ex-Chat).
22:44:49 -!- DH____ has joined.
22:46:39 -!- cheater has joined.
23:01:49 <CakeProphet> hmmm so I'm thinking about buying a server.
23:01:58 <CakeProphet> getting my own place with a static IP
23:07:11 <CakeProphet> I wonder how much a decent server will cost...
23:07:14 <CakeProphet> and decent broadband.
23:07:23 -!- Zuu has joined.
23:11:39 -!- nys has joined.
23:15:42 <CakeProphet> wow comcast is fucking expensive.
23:15:54 <CakeProphet> 50 mbps for $100
23:15:55 <CakeProphet> a month
23:16:10 <CakeProphet> that's their fastest speed. the next lowest is 16 mbps
23:18:50 <monqy> so why do you want this
23:18:51 <monqy> server
23:19:00 <monqy> _secrets?????????????????_
23:19:04 <CakeProphet> business website, business....server.
23:19:09 <monqy> business
23:19:11 <CakeProphet> for... business
23:19:37 <CakeProphet> also it will basically just be an awesome desktop...
23:19:45 <CakeProphet> so I can play games. :P
23:19:52 <monqy> biz tld please say yes
23:19:54 <CakeProphet> like DF, which is apparently too intense for my laptop.
23:20:09 <CakeProphet> monqy: uh, yes.
23:20:14 <monqy> yesssss
23:20:14 <CakeProphet> er.
23:20:15 <CakeProphet> no
23:20:18 <monqy> noo ;_;
23:20:21 <CakeProphet> you mean like... .biz?
23:20:23 <CakeProphet> no
23:20:26 <monqy> yes .biz
23:20:34 <CakeProphet> no that's a dumb top-level domain.
23:20:44 <CakeProphet> no one uses that.
23:20:46 <CakeProphet> fuck ICANN
23:20:47 <monqy> all biznes sites need it
23:21:05 <CakeProphet> .com is where it's at.
23:21:29 <CakeProphet> actually I really don't have too many uses for a server
23:21:30 <monqy> cakes cool community club
23:21:33 <CakeProphet> I should probably think of those.
23:21:40 <monqy> business, dwarf fortress
23:21:43 <monqy> "good enough"
23:22:09 <CakeProphet> well if I ever go into profitshare I could offering hosting of sites.
23:22:31 <monqy> will there be anything special to your hosting i like special
23:22:49 <CakeProphet> uh, included server maintenance / sysadmin shit.
23:23:14 <CakeProphet> that's a thing right?
23:23:20 <CakeProphet> "included sysadmin shit"
23:23:22 <monqy> I think so
23:23:42 <monqy> but what does it do
23:23:50 <CakeProphet> so basically someone hires me to set up their stupid blog/CMS nonsense
23:24:02 <CakeProphet> and then I maintain it and host it on my server for a monthly fee.
23:24:21 <CakeProphet> so their feeble brains don't have to worry about it.
23:25:00 <monqy> good luck hosting popular blogs with your server box
23:25:12 <CakeProphet> doesn't need to be popular
23:25:22 <monqy> if they're popular you're dead
23:25:23 <CakeProphet> I just need to get paid.
23:25:59 <CakeProphet> oh look kallisti.com is not taken.
23:26:10 <CakeProphet> no one take it. it's mine.
23:26:13 <monqy> ok
23:26:25 <CakeProphet> oh wait
23:26:30 <CakeProphet> www.kallisti.com is taken.
23:26:38 <CakeProphet> "This page intentional left blank."
23:26:43 <CakeProphet> NAME SQUATTING ASSHOLE.
23:26:48 <CakeProphet> *intentionally
23:27:38 <zzo38> Checking corresponding IP address of domain names does not seem the way to check if it is taken; use WHOIS instead.
23:27:58 <monqy> kallisti.biz
23:28:37 <monqy> hm what's in the newest batch of tlds
23:28:38 -!- FireFly has quit (Quit: FireFly).
23:29:16 <CakeProphet> why does whois read like an advertisement help
23:29:35 <zzo38> Some of them do. I don't know why.
23:29:51 <monqy> this tld list is crazy
23:29:55 <CakeProphet> NOTE: FAILURE TO LOCATE A RECORD IN THE WHOIS DATABASE IS NOT INDICATIVE
23:29:55 <CakeProphet> OF THE AVAILABILITY OF A DOMAIN NAME.
23:30:01 <monqy> wtf sort of tld is XN--CLCHC0EA0B2G2A9GCD
23:30:14 <monqy> I see xxx made it in there
23:30:28 <monqy> can't wait for someone to use .museum
23:30:59 <CakeProphet> kallisti.biz has been claimed by godaddy.
23:31:04 <monqy> .cat good tld
23:31:09 <monqy> .coop
23:31:16 <CakeProphet> chicken.coop
23:31:29 <CakeProphet> cool.cat
23:31:31 <monqy> .info .jobs .name .mobi .travel
23:31:50 <monqy> arpa asia aero
23:31:52 <CakeProphet> kallisti.name
23:31:54 <CakeProphet> doesn't have the same ring
23:32:07 <zzo38> CakeProphet: Well, there are many ways to check, you could probably use all of them. One is a DNS lookup, one is WHOIS. I don't know what else would help.
23:32:34 <CakeProphet> zzo38: "typing the host name into google Chrome" counts as a DNS lookup, yes?
23:32:41 <monqy> ooh here's a good one
23:32:44 <zzo38> CakeProphet: Yes
23:32:45 <monqy> kallisti.pro
23:32:48 <CakeProphet> that's what I did originally, to discover that "this page is intentionally left blank"
23:32:51 <CakeProphet> monqy: ha, nice.
23:32:57 <CakeProphet> Kallisti Professional
23:33:28 <CakeProphet> no whois match
23:33:38 <zzo38> You can also use country codes
23:33:51 <CakeProphet> I think .pro is the way to go
23:33:52 <CakeProphet> bahahahaha
23:33:53 <monqy> kallisti.xxx
23:34:06 <CakeProphet> yeah so I can be blacklisted in China. sounds good.
23:34:35 <CakeProphet> http://www.felarya.com/wiki/index.php?title=Kallisti
23:34:48 <CakeProphet> Once an ordinary succubus, Kallisti spent several millenia gathering power, influence, and souls and became a goddess widely worshiped on several worlds. She is beautiful, sensual and is known both for her terrible brutality on the battlefield, and for her encyclopedic knowledge of the ways of pleasure.
23:35:10 <CakeProphet> based on the wiki logo I'm guessing it's some kind of vorephilia roleplay community?
23:35:21 <monqy> good for .xxx
23:35:47 <CakeProphet> it was one of the listing that showed up from one of those auto-generated ISP pages
23:35:51 <CakeProphet> when I typed in kallisti.pro
23:36:04 <monqy> i hate those things
23:36:20 <oerjan> <monqy> wtf sort of tld is XN--CLCHC0EA0B2G2A9GCD <-- hm is that the unicode encoding format?
23:36:22 <monqy> also when isp gives false dns results
23:36:46 <monqy> oerjan: perhaps; I was looking at http://data.iana.org/TLD/tlds-alpha-by-domain.txt
23:36:53 <CakeProphet> monqy: yeah normally I ignore them but when I saw that snippet I had to click...
23:37:50 <Gregor> oerjan: Punycode
23:37:59 <Gregor> (Is the name of it)
23:38:02 <oerjan> Gregor: rings a bell
23:38:21 <Gregor> Its a format for encoding short Unicode strings as ASCII containing only letters and dashes.
23:38:33 <Gregor> That restriction being for the obvious reason of domain names :)
23:38:48 <Gregor> It's the standard for Unicode domains.
23:39:26 <CakeProphet> domain names sure are stupid.
23:39:56 <Gregor> So are confectionery prophecies!
23:40:47 <oerjan> "singapore" in Tamil script, it seems
23:40:56 <CakeProphet> !cpick steal_cash steal_furniture steal_jewelry leave_through_window hide_body
23:40:59 * oerjan didn't know singapore used tamil script
23:41:01 <EgoBot> steal_cash steal_furniture steal_jewelry
23:41:12 <Gregor> oerjan: I strongly suspect that they do not :P
23:42:06 <oerjan> சிங்கப்பூர்
23:42:10 <CakeProphet> !cpick smoke_hookah do_homework party
23:42:16 <EgoBot> do_homework
23:42:19 <CakeProphet> ...
23:42:27 <CakeProphet> WRONG
23:51:10 -!- Tjr has joined.
23:53:31 -!- elliott has joined.
23:54:02 <elliott> 23:01:49: <CakeProphet> hmmm so I'm thinking about buying a server.
23:54:02 <elliott> 23:01:58: <CakeProphet> getting my own place with a static IP
23:54:02 <elliott> 23:07:11: <CakeProphet> I wonder how much a decent server will cost...
23:54:02 <elliott> 23:07:14: <CakeProphet> and decent broadband.
23:54:07 <elliott> CakeProphet: Dude, just get a VPS.
23:55:20 <monqy> can a vps do df.....................
23:55:57 <zzo38> I have been able to run a server with dynamic IP address; that is what domain names help with.
23:56:41 <Gregor> Dwarf Fortress?
23:56:50 <elliott> 23:28:37: <monqy> hm what's in the newest batch of tlds
23:56:50 <elliott> one is .xxx
23:56:54 <Gregor> Surely a 1996 PC running DOS 6 can do Dwarf Fortress :P
23:56:57 <elliott> Deewiant: Did it work in the end
23:57:00 <Gregor> Oh, I haven't bought a .xxx domain!
23:57:01 <elliott> Gregor: ...you're joking, right?
23:57:05 <elliott> DF is very CPU-intensive.
23:57:10 <elliott> It's /famous/ for being CPU-intensive.
23:57:19 <Gregor> elliott: I assumed that it wasn't because whyTF would it be :P
23:57:30 <Gregor> Welllll
23:57:37 -!- itidus20 has joined.
23:57:37 <elliott> Gregor: Its liquid physics are very complex, as are its AIs
23:57:37 <Gregor> I guess it maintains a RIDICULOUS amount of state about all the agents.
23:57:44 <elliott> And you have like a hundred dorfs+ at a time.
23:57:45 <Gregor> OK, fair 'nuff.
23:58:32 <elliott> Gregor: It's like "Minecraft looks like crap, why does it eat all my RAM" :-P
23:58:48 <elliott> 23:31:09: <monqy> .coop
23:58:48 <elliott> .coop is ancient, monqy
23:59:00 <elliott> Well, 2001
23:59:15 <monqy> that doesn't make it not dumb
23:59:21 <elliott> Why is it dumb
23:59:23 <itidus20> wow a new log day begins in like 1 minute
23:59:31 <elliott> It's a very reasonable TLD
23:59:56 <Gregor> And chicken.coop is actually a co-op! D-8
2011-09-17
00:00:07 <elliott> Only co-ops can register .coops
00:00:11 <Gregor> Oh :P
00:00:30 <elliott> But seriously, co-operatives aren't nonprofit, so .org doesn't apply, and they're not really anything like a "traditional" business at all, so .com doesn't really apply either
00:00:33 <elliott> .coop seems reasonable to me
00:00:43 <monqy> ok
00:00:56 <elliott> 23:31:52: <CakeProphet> kallisti.name
00:00:56 <elliott> 23:31:54: <CakeProphet> doesn't have the same ring
00:01:01 <elliott> CakeProphet: Your name is CakeProphet Kallisti?
00:01:06 <elliott> Otherwise no go, you can't register it.
00:01:12 <Gregor> Except that .com, .net and .org mean "entity that thinks .com is a cool TLD", "entity that thinks that .net is a cool TLD" and "entity that thinks that .org is a cool TLD"
00:01:23 <zzo38> OK, that seems a sensible explanation. But maybe better is .msc for "miscellaneous" anything that the other TLD does not apply
00:01:56 <elliott> Gregor: That doesn't make introducing new TLDs with semantic purpose dumb :P
00:02:03 <elliott> Gregor: .org's derestriction is terrible though.
00:02:11 <elliott> I've seen straight-out businesses operating off .org.
00:02:17 <Gregor> elliott: Codu dot ORRRRRRRRG
00:02:21 <Gregor> I AM AN ORG
00:02:42 <elliott> Gregor: You don't profit from codu, so it seems reasonable enough
00:02:50 <elliott> We really need a non-horrible "personal" TLD though
00:02:50 <Gregor> Damn
00:02:56 <Gregor> I just happen to be an org of one :P
00:03:00 <elliott> .name is awful, .me is awful
00:03:08 <itidus20> .info ?
00:03:13 <Gregor> Also, .me is not actually a TLD for individuals, right?
00:03:21 <monqy> info is not suited for personal
00:03:26 <elliott> Gregor: It's been marketed as one since before it came out
00:03:29 <elliott> Gregor: See nic.me
00:03:36 <Gregor> elliott: Well of course.
00:03:43 <Gregor> elliott: Just because whatever country .me is isn't stupid :P
00:03:47 <elliott> Gregor: Well, their government is making tons of money off it. :P
00:03:53 <elliott> So it's as officially for people as it can be.
00:03:56 <Gregor> Fair enough *shrugs*
00:04:16 <Gregor> It's amazing that we live in a world where a government can make a ton of money for happening to have a good name :P
00:04:19 <elliott> Montenegro apparently
00:04:24 -!- copumpkin has quit (Quit: Computer has gone to sleep.).
00:04:35 <elliott> Gregor: I gotta wonder why Tokleau isn't rolling out the casinos and hookers
00:04:36 <elliott> Maybe they are
00:05:00 <elliott> Although I can't imagine .tk makes that much money, seeing as its entire appeal is being free
00:05:08 <elliott> Oh wow.
00:05:09 <elliott> http://my.dot.tk/tweak/
00:05:11 <Gregor> Also it has no meaning as a word :P
00:05:16 <elliott> A URL shortener that registers a new domain for every URL.
00:05:23 <Gregor> BAHAHAHA
00:05:26 <elliott> Finally an idea so stupid I did not think of it first.
00:05:26 <Gregor> BEST
00:05:27 <Gregor> EVER
00:05:39 <zzo38> Both the official and unofficial DNS have TLDs according to mode of access; which is an idea I don't like. Mode of access would be the bottom level if anything, not the top level. It could also be by port number. (Some such TLDs are .mobi and .gopher)
00:05:43 <elliott> OK, who wants to set up a bot to shorten URLs with that constantly?
00:05:47 <elliott> We can exhaust the namespace in a few months.
00:06:12 <elliott> Oh wow, they even have an API.
00:06:14 <CakeProphet> elliott: my pretty newish Dell laptop starts to get very very slow once my population hits about 80
00:06:17 <elliott> "We never remove shortened URLs, as long as they are created in accordance with our terms & conditions."
00:06:19 <elliott> Yesssssssssssssssssssssssssssssssss
00:06:28 <elliott> CakeProphet: My pretty newish MacBook Air doesn't
00:07:06 -!- Nisstyre has quit (Ping timeout: 260 seconds).
00:07:18 <monqy> but what are their temrs ans conditieosn
00:07:44 <CakeProphet> elliott: also yeah VPN is probably the way to go. I just like the idea of running my own server, plus I can avoid hosting costs.
00:07:59 <elliott> >VPN
00:08:06 <elliott> Also, you "run your own" VPS. You get root.
00:08:17 <elliott> You can irrevocably fuck it up if you want. Nobody else can fix it for you.
00:08:22 <elliott> (Well, you can usually reset the HD.)
00:08:26 <CakeProphet> well right. Not what I mean..
00:08:39 <zzo38> Running your own server is always best way you can configure whatever protocols you need and whatever server software you need; even if you use Apache you should need to configure it
00:08:39 <CakeProphet> still I'd be paying for one internet bill instead of an internet bill and a hosting bill.
00:08:40 <elliott> Also, it's like twenty dollars a month, which is way cheaper than a non-laughable connection would be.
00:08:49 <elliott> Add the COST of the computer...
00:08:49 <CakeProphet> zzo38: you can do the same on a VPN
00:08:53 <elliott> VPS
00:08:53 <elliott> VPS
00:08:54 <elliott> VPS
00:08:59 <elliott> A VPN IS SOMETHING ENTIRELY DIFFERENT
00:09:03 <coppro> ^
00:09:04 <CakeProphet> elliott: I'll be getting a nice Desktop anyways.
00:09:07 -!- ralc has joined.
00:09:09 <CakeProphet> er... VPS
00:09:11 <CakeProphet> right
00:09:14 <itidus20> "Per IP address only 250 addresses maybe shortened per 24 hours. "
00:09:19 <coppro> CakeProphet: make sure you're allowed to run a server on your internet connection
00:09:22 <elliott> CakeProphet: Yes, and unless it's constantly idle it'll make a lousy server.
00:09:26 <coppro> CakeProphet: odds are good you aren't
00:09:32 <coppro> oh, and your OS too
00:09:34 <elliott> Especially since basically every major ISP tries to block nice ports such as, you know, eighty.
00:09:36 <coppro> check the licensing terms
00:09:42 <elliott> Eighty is also known as "port HTTP".
00:09:52 <CakeProphet> :(
00:10:26 <zzo38> Not all ISPs block port 80 (or other ports). You can still run HTTP server on nonstandard port, or run different protocol servers too
00:10:43 <CakeProphet> what so I can't play Borderlands and Magicka and Dwarf Fortress on my home web server? :P
00:10:48 <CakeProphet> it's like you're expecting me to get actual traffic.
00:11:02 <elliott> Enjoy hosting everyone's blogs
00:11:06 -!- Nisstyre has joined.
00:11:07 <elliott> Does Magicka run on Linux
00:11:09 <CakeProphet> no.
00:11:12 <elliott> Or are you seriously planning to run a server on Windows
00:11:15 <CakeProphet> no.
00:11:27 <CakeProphet> but it would be worth it to play Magicka I think.
00:11:27 <elliott> So you're planning to have a server that goes out for hours at a time at unpredictable intervals when you play games
00:11:29 <CakeProphet> my laptop can't run it.
00:11:39 <CakeProphet> elliott: yes that's the plan. :P
00:11:47 <monqy> good plan
00:11:48 <zzo38> My ISP has specifically said it is allowed to run servers on any port.
00:11:50 <CakeProphet> but do servers really "go out" because of that?
00:12:01 <monqy> what is zzo's isp
00:12:11 <zzo38> Delta Cable
00:12:37 <zzo38> I don't know if they have that information public, but they have told me by telephone.
00:13:43 <elliott> The .me registry is operated by doMEn, which won a contract to do so after a bid process conducted by the government of Montenegro.
00:13:50 <elliott> Gregor: So .me is owned by do men.
00:14:03 <CakeProphet> ....I believe that's "do me in", but okay.
00:14:06 <elliott> Oh jesus, I just realised that .me is the successor of .yu X-D
00:14:50 <CakeProphet> "do me in" sounds like a very trustworthy company.
00:15:02 <elliott> Gregor: Don't worry, you can get libc.what after a few revolutions.
00:15:11 <Gregor> :'(
00:15:22 <Gregor> elliott: BTW, .tk's "tweak" service has an API.
00:15:22 <CakeProphet> kallisti.pro is an awesome name.
00:15:26 <zzo38> And in fact I have servers on three ports. Later I might even add more.
00:15:28 <CakeProphet> monqy is a pro.
00:15:37 <elliott> Gregor: I said that.
00:15:42 <Gregor> elliott: I DON'T READ
00:16:18 <elliott> Man, web.archive.org is really bad at archiving.
00:16:39 <CakeProphet> elliott: you try archiving the web.
00:16:49 <zzo38> I don't plan to change any, because of links coming in externally, I want to ensure the URLs remain valid.
00:17:01 -!- hagb4rd has quit (Ping timeout: 260 seconds).
00:17:37 <CakeProphet> elliott: by the way Magicka is an excellent game if you have a graphics card you should buy it
00:17:41 <CakeProphet> it's like $10
00:17:47 <CakeProphet> best $10 spent
00:18:01 <Gregor> "if you have a graphics card"
00:18:02 <Gregor> lol
00:18:17 <Gregor> I'll just dig out my old Hercules card, I think I've got an ISA slot spare.
00:18:17 <CakeProphet> ..yes/?
00:18:18 <elliott> Unfortunately I use my MacBook Air via serial port.
00:18:25 <CakeProphet> oh.
00:18:32 <CakeProphet> you're running linux right?
00:18:39 <CakeProphet> ....right?
00:18:49 <Gregor> OK, fine, so I'll dig out my first-generation VGA card.
00:18:54 <elliott> No. OS X has excellent support for serial ports.
00:18:56 <CakeProphet> ..
00:19:00 <CakeProphet> NOOOOOO
00:19:03 <zzo38> Gregor: To play CGA collection games you need CGA card; Hercules won't work. You also need PC speaker.
00:19:04 <CakeProphet> and here I believed in you.
00:19:10 * Gregor nods sagely.
00:19:13 <elliott> To get around the fact that my MacBook Air has no serial port, I just punched an appropriately-sized hole in the side.
00:19:20 <elliott> Like, literally punched.
00:19:28 <CakeProphet> ha..
00:19:34 <elliott> Then I realised that it was thinner than a serial port. So I pulled it open.
00:19:38 <CakeProphet> I thought you ran Ubuntu somewhere?
00:19:41 <elliott> It works perfectly.
00:19:48 <elliott> CakeProphet: Everything I am saying is completely true.
00:19:58 <CakeProphet> ..
00:20:09 <Gregor> It is SO TRUE that you can't even handle it.
00:20:20 <CakeProphet> I can't handle this shit I've got to go.
00:20:20 <zzo38> Does the motherboard support serial ports even though there is none? If it isn't, I wouldn't expect that to work.
00:20:26 <CakeProphet> ....
00:20:37 <CakeProphet> I wonder when he'll catch on.
00:20:43 <elliott> zzo38: Yes. Apple may have welded the SSD directly to the motherboard.
00:20:47 <elliott> But they know that you don't fuck with serial ports.
00:20:58 <zzo38> In fact I am sure simply punching a hole in it won't work if the motherboard doesn't already support serial port.
00:21:27 <elliott> Good thing it does.
00:21:32 <elliott> They just couldn't fit the actual hole.
00:23:35 <monqy> wow what
00:23:39 <elliott> monqy: ?
00:23:51 <monqy> i'm two minutes too late because of log reading
00:24:05 <itidus20> crazy bastards just run something like dosbox
00:24:16 <elliott> monqy: too late for what
00:24:21 <monqy> responding snappily
00:24:23 <itidus20> and come to terms with the facts noone ever made cga games for linux
00:24:32 <elliott> monqy: To what
00:25:01 <monqy> not being able to fit in the hole for their port
00:25:06 -!- CakeProphet has quit (Ping timeout: 260 seconds).
00:25:18 <itidus20> or do a dos partition? i dunno
00:25:33 <itidus20> but installing an actual retro video card is not the answer i think
00:25:53 <elliott> monqy: Everything I am saying is completely true.
00:25:53 <monqy> sage advice as always
00:25:54 <zzo38> itidus20: Well, yes, you do not need an actual CGA card if you have a compatible card or an emulator.
00:26:00 <elliott> Gregor: itidus20 says you shouldn't install a CGA card.
00:26:10 <elliott> This is despite the fact that Hercules was a separate thing to CGA.
00:26:29 * itidus20 laughs aloud
00:26:33 <zzo38> Hercules was pretty good monochrome card.
00:26:50 <monqy> elliott: "wow what" doesn't necessarily mean i believe it's true, just that it's ridiculous
00:26:54 <elliott> But what about the Hercules InColor Card??????????????????????
00:27:07 <itidus20> whatever.. i secretly want him to do it
00:27:15 <zzo38> There is color Hercules card? I don't know about that.
00:28:15 <zzo38> CGA Collection is also fully source codes available, so with a few modifications you might get it to compile on other computers too
00:28:26 <monqy> good plan
00:28:44 -!- Tjr has left.
00:28:52 <zzo38> And it is public domain, so it is definitely allowed to do so.
00:28:53 <elliott> Wait, isn't Tjr that nethack guy?
00:29:26 <elliott> I blame ais.
00:29:31 <itidus20> elliott: I percieve two me's. The me of the past who did interesting things but not very well. And the me of the present who does nothing and who thinks the old me was better and also realizes the old me was a failure.
00:29:42 <zzo38> Actually, one of them is STARWARS is probably trademark infringement, but the copyright for the program is still public domain.
00:29:49 <elliott> itidus20: Ye verily.
00:30:39 <itidus20> some people use confusing language to confuse. i use it to make complicated statements
00:31:35 <zzo38> CGA works in low-resolution mode (40x25 text or 320x200 graphics) and high-resolution mode (double the horizontal). CGA Collection games all use low-resolution (although some are text mode and some are graphics mode).
00:31:50 <itidus20> what is cga collection?
00:32:05 <zzo38> A collection of public domain games for DOS computers.
00:32:07 <itidus20> i bet it includes bill williams's alley cats
00:32:15 <itidus20> or is it alleycat^
00:32:29 <zzo38> No it doesn't include that game. It only includes games in the public domain and with source-codes available.
00:32:34 <itidus20> ah
00:33:05 <zzo38> I made the collection myself, but if you have any games meeting the requirement I could add that one too.
00:33:14 <itidus20> hmm
00:33:28 <zzo38> Such as, make up your own game!
00:34:08 <zzo38> You can download some of the games: http://zzo38computer.cjb.net/GAMES/cgacoll1.zip
00:34:16 <itidus20> in the past before i got the world wide web, creating things on my pc was more entertaining
00:34:24 <itidus20> the web is like the spoiling parents
00:34:47 <zzo38> Tell me if you like this game.
00:34:53 <zzo38> Or, other opinion, please.
00:35:34 <zzo38> If you make up levels for any of the games already in CGA Collection, I will add that too.
00:36:08 <elliott> oerjan: STILL NEEDS SOME RENAMIN'
00:36:15 -!- KingOfKarlsruhe has quit (Quit: ChatZilla 0.9.87 [Firefox 6.0.2/20110902133214]).
00:36:49 <itidus20> Virus scanner says: This game cgacoll1 is free of viruses however my heuristics indicate it is probably bollocks.
00:37:08 <itidus20> (i didnt really virus scan it)
00:37:30 <itidus20> oh wow its a whole collection
00:37:39 <itidus20> in 208kb
00:38:16 <zzo38> It includes a lot of games although the linked URL is a ZIP file of only five of them. I will post more later. And possibly, update those that are already there, too.
00:38:58 <itidus20> i wish i had my old games from my 8086/80286 days
00:39:17 <Jafet> http://gog.com
00:39:18 <itidus20> my games were nothing fancy at all.. just experiments of someone learning qbasic1.0
00:39:37 <zzo38> If you read the documentation file and have questions about any of the other games described there, you can ask me. I might be able to post them immediately or it might take a while
00:39:49 <itidus20> 10 crappy versions of pong. fixed at 45degree angle increments
00:40:04 <zzo38> itidus20: I made only one.
00:40:15 <itidus20> it was the same version.
00:40:35 <zzo38> But I don't include those thing in CGA Collection.
00:40:35 <itidus20> i think i just renamed each improvement like pong1, pong2, pong3
00:40:58 <elliott> Jafet: I like the part where they're selling a game that came out this year
00:41:21 <elliott> Good Old Games without the old part... so Good Games... now we just need to find a bad game they're selling and it'll be Games
00:41:23 <elliott> g.com
00:42:04 -!- Vorpal has quit (Ping timeout: 260 seconds).
00:42:19 <monqy> it'll be an old game eventually
00:42:23 <monqy> they're future-ready
00:42:55 <zzo38> All games in CGA Collection so far are games I programmed myself, although if anyone make up other games too, meeting the requirements, please tell me I might add it there too
00:43:01 <itidus20> i did vector graphics in turbo pascal 6 simply because my way of doing putpixel for every pixel was way too slow
00:43:41 -!- oerjan has quit (Quit: Good night).
00:44:10 <itidus20> like line(0,0,5,0) or whatever the syntax was.. ran faster than putpixel(0,0); putpixel(1,0); putpixel(2,0); putpixel(3,0); putpixel(4,0); putpixel(5,0);
00:44:56 <itidus20> or did it.. oh who cares
00:46:02 <Jafet> elliott: perhaps the game was already old!
00:46:12 <zzo38> Try the five games I posted: BIGMAZE, PUZZLEX, STARSTAK, WUMPUS9, and ZNAK.
00:46:13 <itidus20> ok enough rambling.. i started bigmaze
00:46:14 <elliott> itidus20: What, you didn't try poking the byte before line?
00:46:16 <Jafet> Oh, it wasn't DNF.
00:46:23 <zzo38> itidus20: Did you read the documentation first?
00:46:31 <elliott> Jafet: Well, DNF would certainly remove the "Good" part.
00:46:39 <elliott> s/remove/invalidate/
00:46:43 <itidus20> a little...
00:46:49 <itidus20> i don't like over-reading documentations
00:47:27 <zzo38> OK, but at least be aware the controls are the arrow keys (or h,j,k,l if you prefer) and the space-bar to use dig.
00:47:43 <itidus20> big maze is reminiscent of minecraft innit
00:47:51 <zzo38> I don't think so.
00:48:28 <itidus20> it "anticipates" minecraft, to use art-critic speak
00:49:00 <zzo38> OK, but I don't know. Write your own reviews though, if you like to do so.
00:49:19 <zzo38> I don't know art-critic speak either.
00:50:29 <itidus20> well anticipates means, it basically does something before something else does it in a more popular way
00:50:38 <itidus20> something like that
00:51:09 -!- ive has quit (Read error: Operation timed out).
00:51:21 <zzo38> OK
00:51:36 <itidus20> hmm.. i like the ascii-maze style
00:52:13 <itidus20> also what seems to be hiding bits of the maze that are too far out of the way
00:53:51 -!- hagb4rd has joined.
00:54:33 <itidus20> ahh the cross was a window
00:55:17 <itidus20> thought maybe it is burial :P
00:55:23 <zzo38> Yes, the cross is a window.
00:56:07 <itidus20> zzo38: basically i try to add extra spice to some gaming experiences by intentionally not reading all of documentation
00:57:05 <zzo38> Well, it is not required to read the documentation. And then, you try to figure out.
00:58:09 <itidus20> there is a difficulty of if you give too many instructions the player will feel they are following instructions
00:58:47 <itidus20> im not saying bigmaze documentation does that.
01:00:03 <zzo38> Yes; I try to avoid discussing strategy in the documentation, and I also intentionally do not include everything, as much as possible.
01:00:31 <itidus20> heh
01:00:44 <zzo38> I list the controls, command-line parameters, goals, and possibly a few other things. But not everything.
01:01:21 <itidus20> but still, i am spoiled by the worldwide web
01:01:31 <itidus20> entertainment coming from so many sources
01:03:23 <elliott> Sigh, when did oerjan escape
01:03:32 <elliott> Hey Deewiant, the burden falls onto you to rename Vector again
01:03:57 <zzo38> itidus20: Did you win? Did you lose?
01:04:05 -!- sebbu2 has joined.
01:04:05 -!- sebbu2 has quit (Changing host).
01:04:05 -!- sebbu2 has joined.
01:04:09 <itidus20> oh i lost
01:04:21 <itidus20> it was late on that i noticed the arrow
01:04:43 <itidus20> also.. i think i got confused about what digging actually caused..
01:04:57 <itidus20> since so much of the screen can change when digging
01:05:11 <itidus20> now wumpus hunting
01:05:17 <zzo38> It digs around your location. However, some things are undiggable.
01:07:17 <zzo38> The WUNPUS9 game is much more difficult than the old "Wumpus" game. The goals are also different (in this game, simply to have a high score; you are guaranteed to die in this game)
01:08:18 <elliott> zzo38: can you relink again
01:08:20 <elliott> i might try in dosbox
01:08:21 -!- sebbu has quit (Ping timeout: 260 seconds).
01:08:30 <zzo38> http://zzo38computer.cjb.net/GAMES/cgacoll1.zip
01:09:16 <elliott> thx
01:09:18 <elliott> zipbomb right?
01:09:22 <zzo38> Yes
01:10:37 <elliott> bigmaze startup is fun.
01:10:45 <elliott> How many dots does it do
01:11:00 <zzo38> elliott: It is not always the same amount.
01:11:34 <elliott> How many lines can I expect to wait for, since it's pretty slow :P
01:11:37 <elliott> Roughly
01:12:05 <zzo38> Usually 4 to 6
01:12:47 <elliott> Thanks
01:12:53 <elliott> It must be a very big maze
01:13:23 <elliott> zzo38: It's meant to look kinda squashed, right
01:13:39 <elliott> (Also, where's the documentation itidus20 mentioned?)
01:14:01 <zzo38> elliott: No it isn't; it is meant for 40x25 text screen
01:14:06 <zzo38> The documentation is CGACOLL.DOC
01:14:13 <itidus20> microsoft proprietry format .doc
01:14:18 <itidus20> :P
01:14:18 <elliott> Hmm; here the face is squashed so it's much wider than high
01:14:22 <zzo38> It is a plain ASCII text file with printable line endings 75 columns
01:14:40 <zzo38> itidus20: It is not a Microsoft format; it is a plain ASCII format. It just has the .DOC extension.
01:14:42 <itidus20> sorry zzo for then for that accusation
01:16:12 <DH____> Word for MS Dos?
01:16:20 <zzo38> No; just plain ASCII text.
01:17:24 <elliott> zzo38: Where's DANCEKEY
01:17:31 <elliott> Or DOWN
01:17:57 <Gregor> What is that imaginary joke machine people mention when you start stepping on undefined behavior in C? And what is its best implementation? :P
01:17:58 <zzo38> Most of the files are missing; sorry. I will post whatever I can when I can. Possibly in a few days.
01:19:25 <elliott> Gregor: ...DS9K, and Deewiant has just started implementing one today... that we then talked about... for hours...
01:19:28 <elliott> Are you _trying_ to be synchronicious?
01:20:45 <Gregor> elliott: Um ... no? :P
01:20:53 <Gregor> elliott: I was trying to remember it for my C lab today.
01:20:56 <elliott> Gregor: Well you're succeeding.
01:21:14 <elliott> Gregor: I don't know of any implementations of C's abstract machine that deliberately try to trip code up; that's why we've discussed one a lot in here :P
01:21:54 <Gregor> Right, yeah, it's been talked a lot about in here, which is why I asked in here :P
01:21:57 <zzo38> I have old versions of some of the files but I don't want to post those. I believe I have the newest version of KNAR, though. (These files are on other computer and I need floppy disk to transfer them; that is why I don't have all files)
01:21:59 <Gregor> But you'd think SOMEBODY would have implemented it.
01:22:17 <elliott> Gregor: Maybe someone has, but it was probably bad
01:22:34 <elliott> Gregor: The problem is that almost every program relies on tons of UB.
01:22:53 <elliott> Gregor: You can either be an almost useless tool, or make UB /work/ but in a way that you can detect and log.
01:23:07 <Gregor> Hmm
01:23:27 <Gregor> I think more precisely you'd want a sort of "undefinedness verbosity level"
01:23:48 <elliott> It's not that simple; either you let UB happen undetected, or you define things in a way that when UB happens, you know about it, and that makes it almost impossible to recover from
01:24:11 <elliott> Casting an int to a pointer is UB, right?
01:24:12 <Gregor> Well, but there are many undefined behaviors.
01:24:17 <elliott> But pointer to int isn't.
01:24:34 <Gregor> In principle, you could switch off in each of those cases and either do the expected thing or nonsense based on flags.
01:24:44 <elliott> You want your int-representations of pointers to be absolutely ridiculous to trip out things that expect them to be used normally; but if someone casts a pointer to an int, you log it as UB, but then you have to /have a useful result/.
01:24:57 <Gregor> Hmhmhm
01:24:58 <elliott> And if you have a useful result, then pointer -> integer -> pointer doesn't work, and that'll break every program that expects it to.
01:25:05 <elliott> i.e. most programs that cast integers to pointers.
01:25:34 <elliott> Gregor: Personally I think it should just be hardline about it because good programs should make you feel bad about yourself
01:25:52 <elliott> No harm in offering a resume feature when it can be done, but pointless to try and design around it
01:25:54 <Gregor> But wait ... OK, maybe I'm not following.
01:26:19 <Gregor> Let's say for simplicity that "undefined behavior" is always "program terminates with exit code 42", since it's easy to check for.
01:26:23 <elliott> Gregor: Your false assumption is probably that you can detect UB without changing the semantics of the implementation.
01:26:30 <elliott> You cannot.
01:26:37 <Gregor> Hmmmmmmmmmm
01:26:42 <elliott> You must use completely pathological representations to trip programs up.
01:26:50 <elliott> e.g. pointers cannot be integers, internally, you want something completely different.
01:26:56 <elliott> You want to keep track of the type in pointers.
01:26:58 <elliott> Array bounds.
01:26:58 <elliott> etc.
01:27:12 <elliott> But hang on, you can convert anything in C to a bunch of bytes.
01:27:12 <Gregor> But the thing is, casting a pointer to an integer is something a compiler can see.
01:27:16 <elliott> Because you can cast anything to a char pointer.
01:27:19 <Gregor> It could simply write abort() instead of the code to do it.
01:27:29 <elliott> Gregor: Too bad that's not UB
01:27:46 <Gregor> You ... just said it is? :P
01:27:53 <elliott> No, integer -> pointer is
01:27:54 <elliott> I think
01:27:56 <Gregor> Oh
01:27:59 <Gregor> Well, whichever one.
01:28:04 <Gregor> Either way, the compiler can see it.
01:28:08 <elliott> Gregor: s/compiler/interpreter/
01:28:18 <elliott> It must be some kind of interpreter or it can't catch tons of things.
01:28:31 <Gregor> Fair enough, but this one in particular is static :P
01:28:40 <elliott> Gregor: Anyway, the point is that the way you define things mean that operations like that /can't/ just "log but then go on".
01:28:48 <elliott> Because you have to change the representations to trip programs up.
01:28:52 <elliott> Which then makes those operations meaningless.
01:28:56 <Gregor> I don't argue for "log but then go on"
01:28:57 <elliott> Which is the whole point they're UB - they don't make sense everywhere.
01:29:07 <elliott> Gregor: What, then? "Be more like a real machine slider"?
01:29:19 <elliott> That would probably work, but is a pain to code, and you'd lose a lot
01:29:25 <Gregor> Well, more like a bunch of flags (with convenient presets), and if a UB is met, *boom*
01:29:49 <Gregor> No "go on", because ... why go on?
01:29:53 <elliott> Well
01:29:55 <elliott> That isn't what I meant
01:30:04 <elliott> Gregor: You're assuming every UB detection can look like this
01:30:10 <elliott> if (level > n) abort();
01:30:13 <elliott> else return meaningful_result;
01:30:15 <elliott> It can't.
01:30:26 <elliott> I will say this one more time before I start typing in all-caps:
01:30:39 <elliott> You must change representations to catch as much UB as possible, and these changes make the relevant UB operations detectable but having _no meaningful result_.
01:30:50 <elliott> That is the reason a lot of things are UB: Because they only make sense given certain assumptions that aren't true everywhere.
01:30:56 <elliott> You must break those assumptions to trip programs up.
01:31:11 <elliott> The point is: "If my program works with DS9KCC, it works anywhere."
01:31:20 <elliott> Therefore, one must violate all assumptions possible.
01:31:55 <itidus20> one naive assumption is that a char is 8bits
01:32:03 <Gregor> I understand that you keep saying that, but I'm not yet convinced because you're yet to present an example :P. Although intuitively I'd agree with you that there are cases which are not detectable at runtime, I just haven't found a case in my head.
01:32:07 <itidus20> is that a good one to start with?
01:33:35 <Gregor> Well, that a char is 8 bits isn't a behavior ... that a char, shifted left by six bits, is something, is.
01:33:49 <Gregor> Though I suppose to define all such cases I end up in Rice's purgatory :)
01:34:07 <elliott> Gregor: Logread if you want examples
01:34:09 <elliott> It's been discussed tons
01:34:15 <Gregor> Fair 'nuff
01:34:16 <elliott> I gave a minor example
01:34:32 <itidus20> i will not try to wedge myself into the topic anymore.
01:34:35 <itidus20> :D
01:34:41 <elliott> itidus20: Oh, you were talking? :P
01:34:50 <elliott> Gregor: Btw "that a char is 8 bits isn't a behavior" yes it is
01:34:51 <elliott> CHAR_BIT
01:35:13 <Gregor> Reading CHAR_BIT is behavior.
01:35:18 <Gregor> The fact that a char is 8 bits is not.
01:35:20 <elliott> Gregor: Incidentally, Valgrind with -fmudflap and all that nonsense is kind of a partial C DS9K
01:35:24 <elliott> Handling only memory management
01:35:40 <elliott> I think -fmudflap is the one that causes every memory access to go through a function, at least
01:35:42 <elliott> I don't really recall
01:35:55 <elliott> The great thing about a C DS9K is that you can give ridiculously detailed errors :P
01:35:56 <Gregor> I just said "reading" for a #define, but y'know, that sorta is reading at CPP-time :P
01:36:47 <zzo38> It is possible to do C preprocessor at the same time as reading other C codes.
01:36:47 <elliott> "The pointer (sdfdf + 999) in function foo at file:line:col was dereferenced, overflowing the bounds of the array blah at otherfile:line:col by N elements."
01:37:30 <elliott> Gregor: Oh yeah, and pointers to different types should look TOTALLY different (when read via char-pointer)
01:37:38 <elliott> Especially function pointers
01:37:53 <elliott> Even if there's an integer index SOMEWHERE in a pointer, it wants to be random :P
01:38:09 <elliott> And each pointer should be of a different, stupid size.
01:38:11 <elliott> As in
01:38:13 <elliott> Each pointer type
01:38:32 <Gregor> Hmmmm ... I truly thought that void * was guaranteed to be the same size as char * (but not function pointers) ...
01:38:48 <elliott> The only guarantee is that any pointer can be casted to (void *)
01:38:53 <elliott> (void *) can just be lolhuge.
01:38:56 <Gregor> Ahh, so void * --- right.
01:39:18 <Gregor> Essentially you could have an arbitrarily-retarded amount of space be usable for things of certain types :P
01:39:21 <elliott> In fact, (void *) could be smaller than (char *); maybe (char *) stores string length or something for debugging purposes :P
01:39:23 <itidus20> ok i looked up ds9k .. what a wonderful thing.. especially the name
01:39:24 <elliott> Then the cast would just throw that away.
01:39:53 <Gregor> elliott: Surely (char *) (void *) (char *) is supposed to work ...
01:40:11 <elliott> Gregor: Yeah, but that'd just note that no length info was available.
01:40:23 <Gregor> Oh right, I spose that since it's for debugging it doesn't matter :P
01:40:23 <elliott> Of course == would discard the length info in comparing equality.
01:40:28 <elliott> But it's still part of the size.
01:40:32 <Gregor> Heh
01:40:41 <elliott> Gregor: Basically, the main reason to fuck with (observable) representations isn't to catch UB that you couldn't otherwise (though it can aid in that, certainly), but to violate the assumptions programs make.
01:40:59 <elliott> Sure, it might just crash horribly rather than giving a nice error message, but the point is that a program that assumes those things will break.
01:41:14 <elliott> And besides, "crashing horribly" pretty much always means you get a luxurious error message when the machine is this clued-in.
01:41:18 <Gregor> Sure sure.
01:41:48 <Gregor> Right, I guess my contention was just that this sort of thing isn't all cause /undefined/ behavior, the behavior is well-defined, it's just not what the programmer expected.
01:42:01 <elliott> Gregor: There's a problem similar to branch coverage though... e.g. if there's a signed overflow that only happens in extremely rare situations.
01:42:06 <Gregor> "isn't all cause" >_> ???
01:42:13 <elliott> You need a combination of static analysis and runtime DS9Kery... but those are basically entirely separate projects.
01:42:24 <elliott> Since DS9Kness is mostly in the backend, and static analysis is like compilation without a backend :P
01:42:27 <Gregor> elliott: Oh for piff sake, let's not go overboard :P
01:42:33 <Sgeo> DS9K?
01:42:40 <elliott> Gregor: Dude, you call signed overflow overboard?
01:42:49 * Sgeo googles
01:42:50 <elliott> Gregor: Do you REALISE how little you're allowed to do in C?
01:42:52 <Gregor> elliott: I call detecting that in all unreached branches overboard.
01:43:01 <elliott> That's impossible.
01:43:07 <Gregor> Yes :P
01:43:14 <elliott> The point is that lots of programs have UB that's only rarely reached.
01:43:18 <elliott> Most bugs are only rarely reached.
01:43:23 <elliott> That's why they haven't been fixed.
01:43:38 <elliott> So you need a separate static analyser to catch things less accurately but more ahead-of-time.
01:43:41 <elliott> But that's an entirely separate project.
01:43:54 <elliott> I'm just saying that a platonically perfect DS9K toolchain would include a static analyser.
01:44:06 <Gregor> I'm just --- right, "platonically perfect" is what I'm arguing about :P
01:44:09 <itidus20> there could be a C compiler which would simply not compile UB right?
01:44:28 <Gregor> elliott: Designing a system that is actually implementable within our lifetimes would be a nice first step :P
01:44:44 <elliott> Gregor: Deewiant wrote/is writing a parser, so /shrug
01:54:46 -!- myndzi\ has joined.
01:55:43 -!- Jafet1 has joined.
01:58:31 -!- mycrofti1 has joined.
01:58:55 -!- atehwa_ has joined.
01:59:33 -!- Jafet has quit (Ping timeout: 260 seconds).
01:59:34 -!- mycroftiv has quit (Ping timeout: 260 seconds).
01:59:34 -!- atehwa has quit (Ping timeout: 260 seconds).
01:59:35 -!- myndzi has quit (Ping timeout: 260 seconds).
02:04:23 <elliott> "Agda now knows where your (HTML5 geolocation compatible) browser is [...] I just came back from a walk round the block with my Android phone, and watched my coordinates update themselves."
02:04:26 <elliott> WHY ARE YOU DOING THIS TO POOR AGDA
02:05:23 <Sgeo> What do they mean by Agda? Surely not the language
02:06:58 <elliott> Agda
02:07:04 <elliott> http://permalink.gmane.org/gmane.comp.lang.agda/3127
02:11:32 <itidus20> new random thought here
02:11:37 <itidus20> is testing computation?
02:11:42 <elliott> >_<
02:12:16 <itidus20> every software system tends to involve testing
02:12:53 <itidus20> because what the human creates is not always what the human desires
02:13:05 -!- ralc has quit (Quit: Leaving).
02:13:52 <itidus20> and also, that a program is only correct according to a standard being used by a human
02:14:57 <Sgeo> I'm wondering if I could make my VM vaguely resemble PicoLisp's
02:14:58 <itidus20> i wish i didn't have to do this monologue
02:15:18 <itidus20> attempted cathartic
02:16:44 <itidus20> humans created C standard. humans wrote programs in C. the programs are only wrong because they are measured against C standard. therefore humans shouldn't beat themselves up over it ^^;
02:17:27 -!- Jafet1 has changed nick to Jafet.
02:17:41 -!- quintopia has quit (Ping timeout: 260 seconds).
02:17:59 <itidus20> i am not sure whether humans act randomly. because a computer can easily act pseudorandomly.
02:20:57 -!- quintopia has joined.
02:20:57 -!- quintopia has quit (Changing host).
02:20:57 -!- quintopia has joined.
02:21:47 <itidus20> most applications are written in such a way that they expect the user to not operate at 100% efficiency of using the application.
02:22:35 <itidus20> slow typing, slow mouse moving, slow thinking, slow text reading, uncertainty, ignorance of features
02:22:40 <Gregor> Hulu's movie selection is like MST3K without the MST3K characters.
02:23:23 <itidus20> so the most efficient applications are the ones most removed from human interaction
02:24:56 <itidus20> ahh.. one could just feed a stream of 0s and 1s into a cpu
02:25:03 <itidus20> who cares what it does
02:26:01 <elliott> `addquote <Gregor> Hulu's movie selection is like MST3K without the MST3K characters.
02:26:03 <HackEgo> 668) <Gregor> Hulu's movie selection is like MST3K without the MST3K characters.
02:27:53 <elliott> I wonder why FRP isn't more popular in JavaScript.
02:27:57 <elliott> Probably 'cuz it's called FRP.
02:28:04 <coppro> FRP?
02:28:08 <monqy> FUNCTIONAL IS HARD
02:28:15 <elliott> coppro: frp
02:28:18 <elliott> It stands for frp.
02:28:34 <itidus20> as long as a human is not monitoring the calculations then a CPU which is getting it's data and instructions as a stream of 0s and 1s is correct computation
02:29:19 <itidus20> i suppose then error is defined by anything which interrupts the processing of the stream
02:29:23 <coppro> elliott: that's the dumbest acronym ever
02:30:03 -!- copumpkin has joined.
02:30:10 <elliott> coppro: Sorry, you misspelled best.
02:30:15 <elliott> It lets you vary the punctuation.
02:50:03 <Gregor> "The Rocky Horror and Bullwinkle Picture Show"
02:53:15 <itidus20> so the trouble with software is it gives feedback
02:54:01 <itidus20> feedback means it enters into the reward and punishment mechanisms.. as if software is judging us
02:55:33 <itidus20> contrasting with the leitmotifs used to build up associations between music and characters/themes
02:56:19 <itidus20> so i am being too crazy about it..
02:56:32 <itidus20> cause and effect is not judgement
03:00:20 <elliott> <edwardk> i redesigned the way i was plumbing diagnostic messages through trifecta. now there are a much simpler set of combinators, and many fewer twisty passages they must take going through the parser
03:00:21 <elliott> Deewiant:
03:00:26 <elliott> New release ;-)
03:09:47 -!- evincar has joined.
03:10:55 <evincar> I am returned.
03:10:55 <lambdabot> evincar: You have 1 new message. '/msg lambdabot @messages' to read it.
03:11:39 <evincar> I don't suppose anyone cares much.
03:12:01 <Gregor> We care because now we have to type "el[tab]" for elliott instead of just "e[tab]" X-P
03:13:08 -!- evincar has changed nick to why.
03:13:16 <why> Aww, registered nick.
03:13:21 -!- why has changed nick to evincar.
03:13:24 <evincar> I give up.
03:13:35 <evincar> I'm not known by enough names that I can just switch.
03:19:45 -!- MDude has changed nick to MSleep.
03:20:04 <evincar> Holy shit. I earned $8.73 yesterday from ads?
03:22:05 <evincar> I did not know my blog was earning this much.
03:22:17 <elliott> A WHOLE EIGHT DOLLARS A DAY
03:22:39 <evincar> I know. That covers at least my food.
03:23:48 <evincar> I usually spend twenty minutes on a post, so if it makes me a few dollars, it still works out to a decent hourly rate.
03:23:53 <Jafet> "The best minds of my generation are figuring out how to make people click ads." ~ Jeff Hammerbacher
03:24:28 <evincar> I don't care too much about it. It's just a nice surprise.
03:25:01 <evincar> I'm more concerned with people reading my content than clicking the nearby salesmanboxen.
03:28:17 <evincar> Speaking of concerns, I'm concerned I'll need to rewrite the interpreter for my language. :(
03:29:58 <evincar> It's very modular and wonderfully lazy right now, and it would suck to break that...
03:30:05 <evincar> ...but the different levels of the language are heavily intertwined.
03:30:13 <evincar> So the interpreter may have to reflect that.
03:32:32 -!- itidus20 has quit (Quit: Leaving).
03:39:10 -!- ive has joined.
03:53:00 <zzo38> I found out something in Haskell, that if you import qualified, and then, you can define the class members for an instance without qualification.
04:07:16 <zzo38> And I think const = curry fst and flip const = curry snd
04:09:16 <zzo38> And fst = uncurry const and snd = uncurry $ flip const
04:14:46 <Lymee> :t fst
04:14:47 <lambdabot> forall a b. (a, b) -> a
04:15:03 <Lymee> :t curry
04:15:04 <lambdabot> forall a b c. ((a, b) -> c) -> a -> b -> c
04:15:20 <Lymee> Oh, curry, not uncurry.
04:15:38 <elliott> Deewiant: edwardk says he was planning to add something to customise the tab width
04:15:39 <elliott> FWIW
04:17:22 -!- hagb4rd has changed nick to hagb4rd|zzZ.
04:20:45 <zzo38> Tab width in what?
04:22:15 <elliott> trifecta
04:25:16 -!- nys has quit (Quit: enden).
04:25:38 <zzo38> Can you set it to infinite?
04:26:04 <elliott> no
04:26:41 -!- hagb4rd|zzZ has quit (Ping timeout: 260 seconds).
04:28:42 <elliott> http://www.moderngpu.com/intro/scan.html#Ballot
04:28:51 <elliott> ais deals with aliens.
04:31:25 <elliott> Gregor: Remember that question you asked who's answer was LZO
04:31:30 <elliott> Gregor: http://code.google.com/p/snappy/ might be another answer
04:33:07 <elliott> Deewiant: Also
04:33:10 <elliott> <edwardk> but even so, he could largely ignore the column information i give, i have a column byte in delta as well that provides the offset from the beginning of line in bytes
04:33:11 <elliott> <edwardk> if he doesn't care about the rendering of the source line then he can just use that if he must
04:33:14 <elliott> <edwardk> (assuming he doesn't care about utf-8)
04:33:22 <elliott> This is so much more efficient than direct communication
04:34:13 <Gregor> elliott: Sweet
04:34:24 <elliott> Gregor: What WERE you using it for, anyway?
04:34:47 <Gregor> elliott: Intermediate files produced while doing some music processing that ended up needing to be floating point.
04:35:05 <elliott> What's wrong with that
04:35:33 <Gregor> Only that there are no lossless codecs for floating point audio.
04:35:43 <Gregor> Err, no lossless /compressed/ codecs anyway :P
04:35:47 <elliott> Were the files really that big uncompressed?
04:35:51 <Gregor> Yes.
04:35:54 <elliott> How big
04:36:14 <Gregor> Well, for my ~4 minute audio file, before everything could finally be put together, it was about 5GB
04:36:19 <elliott> Yow
04:36:35 <elliott> How many fucking bits/channels/whatever :-P
04:36:38 <elliott> /hz
04:36:48 <Gregor> 64/2/48000
04:37:01 <elliott> 64-bit floating point? That... I don't think that's a commonly-used audio format.
04:37:18 <Gregor> Even 32-bit floating point isn't particularly common :P
04:37:23 <elliott> Why. Are you doing that.
04:37:34 <Gregor> But 32-bit floating point can't accurately store every 32-bit integer value, so converting /to/ it is lossy.
04:37:40 <Gregor> (I only go to 16-bit as my final step)
04:37:40 <elliott> >_<
04:38:33 <Gregor> Human ears can't hear the difference, but cumulative errors are a bitch, and human ears can hear them real good.
04:38:46 <Gregor> More precision = less cumulative errors
04:38:53 <Gregor> (Or rather, lesser cumulative errors)
04:39:28 <elliott> Humans can't tell ~128 Kio/s MP3 from the original source
04:39:33 <zzo38> Then don't use the floating point format
04:39:34 <elliott> For an average definition of human
04:39:44 <Jafet> For an average definition of source
04:39:45 <elliott> Do you have any examples of such cumulative errors? ABX results? :-P
04:39:48 <Gregor> elliott: Shall I just repeat my last three lines, or would you prefer to read them again?
04:40:14 <Gregor> Precisely the cumulative errors I was getting was from combining multiple reverberations.
04:40:14 <elliott> Gregor: Just asking if you have any actual examples, since I don't think anyone in the world has yet resorted to 64-bit floating point audio :P
04:40:29 <Gregor> Oh, I'm overkilling it.
04:40:33 <Gregor> Most assuredly.
04:40:44 <Gregor> But suffice it to say I was very frustrated with the cumulative errors :P
04:41:14 <Jafet> I heard from a film commentary that they had to render some part of it with 64-bit colour instead of 32-bit colour, because it affected the results
04:41:26 <Jafet> It involved a diffraction shader or something
04:41:51 <elliott> <director> The infrared! You fucked up the goddamn infrared! Fix it!
04:42:02 <Gregor> Right, probably the same sort of idea. You can't tell the difference, but if there's an error in the difference 1000 times, you can.
04:42:04 <elliott> Tetrachromats must find films really disappointing.
04:42:12 <elliott> They look so /dull/.
04:43:00 <Gregor> Is there a term for hypothetical beings that can actually discern all colors? (Ignoring the physical plausibility of such an ability)
04:43:12 <elliott> Headaches
04:43:14 <Gregor> X-D
04:43:41 <elliott> It sounds an excellent recipe for a pretty but useless visual field.
04:46:25 <elliott> Deewiant: <edwardk> elliott: trying to figure out how i can make a modeline parser transformer for reading vim and emacs mode lines and adjusting tabstops, etc. appropriately
04:46:45 <elliott> My parsing library had better become exponentially more awesome overnight with this kind of shit to keep up with
05:25:05 -!- ive has quit (Quit: leaving).
05:34:29 -!- copumpkin has quit (Ping timeout: 240 seconds).
05:34:53 -!- copumpkin has joined.
05:39:14 <evincar> elliott: How do you measure the awesome of a library?
05:44:25 <elliott> http://www.thepimanifesto.com/
05:44:33 <elliott> Oh my god everybody shut up.
05:45:39 <monqy> why is pi vs tau a thing
05:46:09 <elliott> people don't have anything better to do
05:46:19 <evincar> It's so petty...
05:46:21 <elliott> "Tauists also claim that their version of Euler's formula is better than the original, but we will see that it is in fact weaker."
05:46:26 <elliott> this is amazing
05:46:45 <elliott> im going to find a bunch of formulas where 3pi looks nicer and start the... uhh, lets look at the greek alphabet
05:47:02 <elliott> qoppa manifesto
05:47:11 <elliott> Ϙ
05:47:41 <evincar> That's not even modern Greek. You're doing it right.
05:48:32 <evincar> As programmers, aren't we guilty of stuff like this though?
05:48:52 <evincar> Very often?
05:49:07 <monqy> nope
05:49:43 <zzo38> I think pi is better, but the reason has nothing to do with circles.
05:50:14 <evincar> Pi has to do with circles...
05:50:20 <evincar> ...anything that has to do with pi has to do with circles.
05:50:28 <monqy> shut up shut up shut up
05:51:24 <zzo38> evincar: No it doesn't. Various things with circles have pi, but not everything, and not everything pi is circles.
05:51:53 <evincar> I'm much too lazy to argue.
06:01:23 <evincar> Blog posts about programming languages --> 0-100 views.
06:01:33 <evincar> Blog posts about stuff I don't really care about --> 100-1000 views.
06:01:35 <evincar> :(
06:01:45 <evincar> I appear to be doing it wrong.
06:01:51 <coppro> woot, almost finished getting down linear algebra notes
06:06:44 -!- acommasplice has joined.
06:08:24 <elliott> acommasplice: hi
06:08:57 <elliott> `? welcome
06:08:59 <HackEgo> Welcome to the international hub for esoteric programming language design and deployment! For more information, check out our wiki: http://esolangs.org/wiki/Main_Page
06:09:25 <acommasplice> hi
06:11:11 <Jafet> Which esoteric programming languages have been deployed?
06:14:29 <evincar> Jafet: What do you mean by "deployed"?
06:15:11 <Jafet> HackEgo: What do you mean by "deployment"?
06:15:21 <elliott> `log international hub
06:15:22 <Jafet> The silent type, eh.
06:15:34 <elliott> Silenter than it should be.
06:15:35 <elliott> HackEgo: oi.
06:15:37 <HackEgo> 2009-05-07.txt:21:57:15: <ais523> ah, I always get a warm fuzzy nostalgic feeling when we have "the international hub for esoteric programming language design and deployment" in the topic
06:15:56 <elliott> I think it's just a play on them practical channels' topics.
06:16:00 <elliott> At least circa oh-five.
06:16:10 <evincar> So I'm thinking about a package system for my language.
06:16:12 <Jafet> We should be the intergalactic hub
06:16:31 <elliott> `log intergalactic hub
06:16:36 <HackEgo> 2011-09-17.txt:06:16:31: <elliott> `log intergalactic hub
06:16:44 <elliott> Hmph.
06:16:44 <elliott> `log intergalactic hub
06:16:47 <HackEgo> 2011-09-17.txt:06:16:31: <elliott> `log intergalactic hub
06:16:52 <elliott> `log I hate you
06:16:56 <HackEgo> 2007-07-09.txt:16:55:15: <CakeProphet> I HATE YOU
06:17:29 <elliott> I share these sentiments.
06:17:32 <evincar> Do you suppose it makes sense for a package to have a canonical URL?
06:17:40 <elliott> They are sentiments I share.
06:17:51 <evincar> Or should there be an alias and a central repo of redirects to real URLs, in case of change?
06:18:22 <elliott> What is it with me and long, verbose wiki comments lately.
06:18:25 <elliott> Well okay, two of them.
06:18:26 <evincar> I don't want to set up any central stuff...
06:18:38 <elliott> But two is, like, significantly more than one.
06:18:40 <elliott> Or even zero.
06:18:46 <elliott> I'd like to point out that two is much greater than zero.
06:19:02 <elliott> And thus by the "zero, one, infinity" rule we can conclude that I'll be making long, verbose wiki comments for the rest of my life.
06:19:14 <elliott> That isn't quite infinity though. I guess I've assured my own immortality?
06:19:27 <evincar> Congratulations.
06:19:37 -!- acommasplice has quit (Quit: acommasplice).
06:20:09 <elliott> RIP acommasplice.
06:20:12 <elliott> Killed by a comma splice.
06:20:47 <evincar> So like http://company.com/very/package.vp versus very://company/package
06:21:27 <elliott> Meanwhile, a very esoteric work:
06:21:28 <elliott> http://hackage.haskell.org/package/gutenberg-fibonaccis
06:21:36 <evincar> Where the latter would go to cvan.com/company/package.vp and possibly be redirected to the former.
06:21:36 <elliott> "The fibsLen function returns the number of Fibonacci numbers - |in the first1001Fibs list."
06:21:45 <evincar> ...
06:21:48 <elliott> Thank god Gutenberg are preserving the fibonacci numbers for generations to come.
06:22:17 <evincar> We might lose them otherwise.
06:22:35 <evincar> I guess decentralised > centralised?
06:22:48 <evincar> And then if you're changing your URL, you'll notify people anyway.
06:22:54 <evincar> And old software will just be broken.
06:23:07 <evincar> Or you could put it on github or something and save yourself the trouble.
06:23:14 <evincar> Hadn't thought of that.
06:23:39 <elliott> I wonder if that guy is anticipating further Gutenberg fibonacci releases.
06:23:49 <elliott> You know, so he can make it bigger, and then maybe fibsLen would be useful.
06:24:01 <elliott> When we discover more Fibonacci numbers.
06:24:06 <evincar> They come out in episodes of 1001 each.
06:24:19 <evincar> One episode a season.
06:25:04 <evincar> Also, is it a good idea for a web framework to validate generated code?
06:25:18 <evincar> Or should it stay out of the way?
06:25:23 <Jafet> Why would generated code be invalid?
06:25:36 <elliott> Jafet: It might break its knee.
06:26:03 <evincar> I dunno, you could write something that's syntactically fine but semantically invalid.
06:26:06 <Jafet> Is this why some programmers worry about padding?
06:26:08 <evincar> Easily.
06:26:15 <elliott> Jafet: Yes.
06:26:19 <elliott> Jafet: Health and safety is vital when programming.
06:26:22 <elliott> It's a rough world out there.
06:27:02 <Jafet> Why would a code generator produce something semantically invalid?
06:27:11 <Jafet> Find that code generator and break its knee.
06:27:38 <evincar> I dunno, say someone writes <span><p>...</p></span>. Am I responsible?
06:27:56 <Jafet> Did they include a doctype?
06:28:23 <evincar> Assume <!DOCTYPE html> I guess.
06:28:30 <monqy> evincar: you could put that in the type system if you wanted to
06:28:30 <elliott> Jafet: I, too, advocate violence against invalids.
06:28:34 <elliott> Jafet: You monster.
06:28:34 <Jafet> What's HTML?
06:28:45 <monqy> evincar: but why are you talking about this
06:28:54 <Jafet> Or html
06:29:07 <evincar> monqy: Writing a basic web framework for my language?
06:29:09 <monqy> ew
06:29:17 <evincar> Jafet: HTML5.
06:29:27 <monqy> evincar: anyway you wouldn't check the output; you'd put it in the type system and catch errors at compile time
06:29:33 <Jafet> Okay, then validate it as HTML5. If that's even possible.
06:29:54 <Jafet> For bonus points, validate all actionscript
06:29:55 <evincar> monqy: Yeah. Well, I'd do it at compile-time, but not in the type system.
06:30:07 <monqy> then where would it be?
06:30:14 <monqy> if not in the type system
06:30:19 <evincar> In a macro.
06:30:21 <monqy> what
06:30:27 <monqy> what do you mean
06:30:29 <monqy> in a macro
06:30:38 <evincar> In a function that is evaluated at compile time.
06:30:55 <monqy> and what would it do
06:31:11 <elliott> monqy: this is beautiful poetry.
06:31:11 <monqy> I have a feeling you're wrong about something and I have an idea as to what it is
06:31:20 <elliott> Beautry.
06:31:21 <elliott> Boetry.
06:31:36 <Jafet> How Poeful.
06:32:20 <monqy> evincar: indeed you could be Wrong about multiple things
06:32:35 <evincar> Well, I've got a family of macros (such as <span>) that read cdata and other SGML-like macros.
06:32:36 <monqy> evincar: it is very possible your naive approach would be computationally impossible
06:32:56 <evincar> So they'd just report any elements that show up that shouldn't be in them.
06:32:57 <elliott> Jafet: Boeful.
06:33:00 <elliott> Boefultry.
06:33:05 <elliott> Botry.
06:33:06 <elliott> Boats.
06:33:08 <elliott> I like boats.
06:33:10 <monqy> evincar: and how would it know what elements show up in them
06:33:16 <monqy> evincar: how would you determine this at compile time
06:33:51 <evincar> By...reading them?
06:33:56 <evincar> There are plenty of ways to check.
06:33:56 <monqy> what do you mean reading them
06:34:08 <elliott> You can read books.
06:34:11 <evincar> Maintain a stack of parent element names, and blow up if they're wrong.
06:34:11 <elliott> Not as well as boats though.
06:34:14 <elliott> Boaks.
06:34:17 <elliott> The best thing
06:34:18 <elliott> .
06:34:33 <monqy> evincar: what happens if it doesn't halt
06:34:40 <monqy> evincar: is your language sub-TC?
06:34:43 <evincar> Why wouldn't it halt?
06:35:02 <evincar> HTML is sub-TC. :P
06:35:05 <monqy> what
06:35:07 <monqy> i mean your language
06:35:35 <monqy> if you can use your language to embed arbitrary tags and stuff in html, and your language is TC, you've got a Real Problem if you're doing it your way
06:36:21 <evincar> I don't know what you mean by "embed arbitrary tags and stuff in html".
06:36:25 <monqy> i mean
06:36:27 <evincar> And I think you might be misunderstanding me.
06:36:37 <evincar> Because I haven't really explained myself. :P
06:36:50 <monqy> ok; explain away
06:36:58 <monqy> I assure you, you're Wrong
06:37:05 <elliott> Wrongness is good.
06:37:12 <elliott> Actually most things starting with capital letters are.
06:37:18 <elliott> They're so
06:37:20 <elliott> capital.
06:37:38 <shachaf> Capital letters are evil.
06:37:46 <shachaf> English would be far superior if they were completely eliminated.
06:37:46 <monqy> evincar: if you don't feel like explaining, that's fine too; honestly, I'd rather not bother
06:38:03 <monqy> evincar: just know that you're Wrong
06:38:46 <evincar> monqy: It's simple. Tags are macros, which expand to functions that act like templates.
06:39:02 -!- acommasplice has joined.
06:39:03 <monqy> evincar: and how does this catch html errors at compile time
06:39:40 <evincar> By including simple validation tests in the tag macros?
06:39:52 -!- acommasplice has left.
06:39:54 <monqy> and how would that catch html errors at compile time
06:40:07 <monqy> look, you're severely underthinking it
06:40:41 <evincar> There's not much to think about.
06:40:45 <monqy> oh?
06:40:50 <evincar> Write a function that validates some HTML.
06:41:03 <evincar> Now define it as a macro so it evaluates at compile-time.
06:41:16 <evincar> And name it after a tag.
06:41:21 <evincar> Yaaay done.
06:41:22 <monqy> how about an example
06:42:07 <monqy> (define f (don't terminate)) (span f)
06:42:39 <evincar> If the code you put in a template doesn't terminate, you can't expect the template to terminate.
06:43:09 <monqy> so your compilation will silently hang
06:43:28 <monqy> dude
06:43:34 <monqy> just embed it in the type system
06:43:35 <evincar> That's like saying <?php function f() { don't terminate } ?><span><?php f(); ?></span>
06:43:41 <monqy> or some other sub-tc language
06:43:43 <evincar> It's nonsensical.
06:43:48 <monqy> how about
06:43:53 <evincar> Why would you do that?
06:43:55 <monqy> writing your web framework
06:43:57 <monqy> in a sub-tc language
06:44:01 <monqy> such that
06:44:04 <monqy> nothing can ever not terminate
06:44:08 <monqy> that would be
06:44:08 <monqy> grand
06:44:25 <evincar> I already did that once.
06:44:28 <monqy> evincar: people make mistakes. mistakes make infinite loops.
06:44:48 <monqy> evincar: why not embed it in the type system? does your language not have a good type system?
06:45:35 <evincar> monqy: It would be possible to do it in the type system, but not as pretty.
06:45:43 <monqy> not as pretty?
06:45:49 <elliott> Can I have a number sign monqy?
06:45:51 <elliott> It'd be very nice and lovely.
06:45:54 <monqy> #
06:45:58 <elliott> Thanks bro.
06:46:08 <elliott> You can stop your poetry now though.
06:46:12 <monqy> ok
06:46:14 <monqy> evincar: shut up
06:46:28 <evincar> You're the one who was arguing.
06:46:35 <evincar> I just asked if it was a good idea to validate the output at all.
06:46:53 <monqy> how boring
06:56:52 <evincar> Not all problems are interesting.
06:59:49 <monqy> except this channel is for ones that are
07:02:21 <evincar> Care to help me figure out how I ought to implement this beast then?
07:02:33 <evincar> The language itself.
07:02:38 <evincar> Not the dumb library.
07:02:38 <monqy> be a better language / be a better person
07:02:59 <evincar> It's a great language.
07:03:05 <monqy> I'm doubtful
07:04:32 <evincar> It has an irrational obsession with metaprogramming.
07:04:52 <monqy> irrational obsession sounds Bad
07:05:14 <Jafet> Rational obsession?
07:05:20 <evincar> Sounds bad, but feels good.
07:05:36 <elliott> Irrational Obsession: a good b- no it's not who am I kidding.
07:05:49 <elliott> I wonder what the ratio of things people have said are good band names to good band names is.
07:06:58 <Jafet> Queen is a really shitty band name.
07:07:20 <evincar> I resent successful bands with bad names because it perpetuates bad naming.
07:07:50 <elliott> Jafet: Not as bad as King.
07:07:50 <monqy> cool
07:10:04 <evincar> All the layers of the language are intertwined problematically.
07:10:23 <evincar> I fear I'll end up with a one-function interpreter, with no modularity.
07:11:24 <monqy> oh no
07:12:04 <evincar> :/
07:18:16 -!- itidus21 has joined.
07:18:52 <elliott> oh hello itidus21
07:19:16 <monqy> A Refreshing Change of Pace
07:19:40 <elliott> a refreshing change of itidus21
07:23:27 <itidus21> ahh
07:27:16 <elliott> monqy: nother number sign please?
07:27:25 <monqy> ############################################
07:27:25 <elliott> never mind
07:27:28 <elliott> found the old one
07:31:48 <elliott> thanks though
07:33:17 -!- CakeProphet has joined.
07:33:17 -!- CakeProphet has quit (Changing host).
07:33:17 -!- CakeProphet has joined.
07:35:21 <CakeProphet> SUP GUYS
07:36:58 <elliott> sup
07:38:52 <CakeProphet> just got back
07:38:55 <CakeProphet> from social stuff
07:38:56 <CakeProphet> and now
07:38:59 <CakeProphet> I must do not social stuff.
07:39:04 <elliott> log off irc then
07:39:05 <monqy> like irc
07:39:07 <monqy> oops
07:39:11 <elliott> sorry monqy
07:39:14 <elliott> yours was better
07:39:24 <CakeProphet> elliott: unpossible.
07:40:08 <CakeProphet> assholes. doubting my multitasking skills.
07:41:14 <itidus21> i wish i could do social stuff
07:41:26 <itidus21> sort of
07:41:28 <CakeProphet> uh, why?
07:41:33 <CakeProphet> also, you ca.
07:41:33 <CakeProphet> n
07:42:17 <itidus21> because the fact that i can't is merely symptomatic of my mental problems
07:42:41 <CakeProphet> only if you think about that way.
07:42:51 <CakeProphet> which, is more difficult to change than it sounds, I realize.
07:43:08 <itidus21> i struggle to enjoy moment to moment existence
07:43:13 <elliott> CakeProphet: s/only if you think about it that way/only if you think about it that way, or actually have mental illness/
07:43:23 <CakeProphet> elliott: well...
07:43:29 <CakeProphet> that's a difficult topic.
07:43:36 <elliott> you brought it up
07:43:44 <CakeProphet> and like I said it's more difficult than it sounds, for anyone.
07:43:47 <itidus21> im always stressing about fear of vertigo, or fear of heights or fear of open spaces
07:43:49 <CakeProphet> especially if you have a mental illness.
07:44:16 <itidus21> fear of "what is self?"
07:44:28 <itidus21> ok its like this
07:44:30 <CakeProphet> I too have fears about Self. it's a scary idea.
07:44:44 <itidus21> you know that superman movie where they send the villains into space in a polygon
07:44:47 <evincar> When you have fears about Self, just make Smalltalk.
07:44:59 <itidus21> sometimes i wonder if my existence is really squashed like that
07:45:13 <elliott> CakeProphet: "Think your problems away" is basically the premise of that awful The Secret book. Though psychiatry is something like homeopathy, so it's not much better.
07:45:28 <evincar> itidus21: Would it really be relevant to your daily life if your existence were squashed?
07:46:06 <evincar> For all practical purposes, you can ignore most probing existential questions.
07:46:08 <CakeProphet> elliott: well, I'm not saying it works quite like that. But in essence any kind of therapy that isn't drug-based follows this kind of path.
07:46:20 <CakeProphet> it's important to think of yourself as not helpless
07:46:23 <CakeProphet> or you won't get anywhere.
07:46:28 <itidus21> evincar: i do ponder them... some people forced them on me i guess
07:46:42 <elliott> CakeProphet: Sure, but that's one of them "necessary, but not sufficient" conditions.
07:47:15 <CakeProphet> sure.
07:47:15 <itidus21> ive never been quite the same since i started to think of myself as a kind of 2 dimensional thing
07:47:49 <itidus21> it just amplifies all my other fears
07:48:41 <evincar> itidus21: Do you engage in enough physical activity? How's your diet?
07:48:54 <evincar> I find that I hate the world if my blood sugar is low.
07:48:59 <evincar> Or if I haven't exercised lately.
07:49:00 <itidus21> i have diabetes
07:49:06 <itidus21> and i dont get any exercize
07:49:07 <evincar> See, that would do it.
07:49:30 <itidus21> i have no friends
07:49:35 <evincar> Your sugar can really fuck with your emotions.
07:49:55 <itidus21> no money, no job, no schooling, can't drive/no car
07:50:08 <monqy> evincar what are you doing
07:50:18 <itidus21> and lots of people who like to manipulate me
07:50:20 <CakeProphet> elliott: perhaps we're not in disagreement here, just emphasizing different points that are both true.
07:51:05 <evincar> monqy: Trying to be helpful based on experience?
07:51:36 <monqy> experience with being itidus21? ouch.
07:51:50 <evincar> Experience with having fucked up blood glucose.
07:51:56 <elliott> the best experience
07:51:57 <elliott> bexperience
07:51:59 <elliott> toast
07:52:08 <elliott> toast :))))))))))))))))))))))))
07:52:09 * CakeProphet has experience at being crazy.
07:52:15 <CakeProphet> dunno how to help with that. I manage somehow.
07:52:37 <itidus21> i can't really be myself in my house because my brother has chronic explosive anger which can be triggered by anything
07:52:59 <itidus21> gradually i am learning that my mom and i are too passive, so the imbalance goes both ways
07:53:39 <itidus21> i need to get regular sleeping pattern to improve my diabetes
07:53:56 <itidus21> but... it seems like i am always being counted on occasionally to be awake in the morning
07:54:08 <itidus21> sometimes my brother will be sleeping in when he works..
07:54:24 <itidus21> or it could be an internet technician visiting early
07:55:23 <itidus21> its like when i go outside i start losing a sense of inside and outside
07:55:33 <itidus21> cos ive been indoors so much]
07:55:40 <itidus21> and i start to flip out
07:55:49 <CakeProphet> I've decided that sleeping properly in the modern world is close to impossible.
07:55:50 <itidus21> combined with the existential pondering
07:56:02 <itidus21> am i inside, am i outside
07:56:53 <evincar> Is the difference important?
07:57:06 <itidus21> i have pondered whether i have some problem with vestibular system
07:58:32 <itidus21> so i try various things.. opening the curtains.. turning on radio
07:58:44 <elliott> radio curtains
07:58:47 <elliott> rurtrains
07:59:05 <monqy> good idea
08:00:19 <elliott> that's
08:00:20 <elliott> my curtains
08:00:22 <elliott> open
08:00:23 <elliott> suddenly
08:00:24 <elliott> radio
08:00:29 <elliott> ......ghost
08:00:37 <CakeProphet> my osseous labyrinth is a beast.
08:00:38 <itidus21> a few times too much existential pondering leads me to start shaking.. at which times i got a cup of whiskey off my broter
08:00:43 <CakeProphet> knowing all sorts of shit about gravity and other forces.
08:00:45 <elliott> the words CakeProphet learned today
08:01:09 <CakeProphet> elliott: always learning.
08:01:23 <evincar> Alcohol isn't...the best thing.
08:01:46 <elliott> iti when's your birthday
08:01:53 <CakeProphet> alcohol is great people are just dumb.
08:01:53 <itidus21> march
08:02:02 <CakeProphet> addiction is a super power.
08:02:44 <evincar> I've never quite gotten past the fact that it tastes like and is poison.
08:02:49 <itidus21> freenode is too academic
08:03:07 <itidus21> every freaking channel is like a science lab :P
08:03:09 <evincar> And I get drunk quickly and sober quickly because I don't weigh a lot.
08:03:19 <CakeProphet> yeah but it's a great poison, and also a macronutrient!
08:03:24 <elliott> itidus21: it's for open projects
08:03:27 <elliott> which in practice reduces to programming
08:03:33 <elliott> what'd you expect
08:03:39 <CakeProphet> second highest in caloric content per mass below fat.
08:04:17 <CakeProphet> it's like, delicious poison fuel that makes it easier to socialize and relax and want to drink more.
08:04:26 <monqy> gross
08:04:31 <CakeProphet> what could go wrong.
08:04:53 <evincar> My progression is generally:
08:05:00 <evincar> One shot, can't feel face.
08:05:03 <evincar> Two shots, drunk.
08:05:08 <evincar> Three shots, can't taste alcohol.
08:05:19 <Patashu> first world problems
08:05:24 <evincar> Wait fifteen/twenty minutes, repeat.
08:05:35 <evincar> I haven't timed this.
08:05:40 <monqy> cool
08:05:42 <evincar> So I'm probably exaggerating.
08:05:52 <itidus21> Patashu: x + y = 0 is always equally dependant on x as it is on y >:-)
08:06:04 <Patashu> yes, very astute of you
08:06:17 <elliott> + is commutative --iti
08:07:01 <itidus21> unfortunately expectations increase needs
08:08:46 <CakeProphet> I'm going to rephrase what you said to make it sound trivial because I'm kind of a jerk -- elliott
08:08:49 * CakeProphet -- jerk
08:08:53 <evincar> Alcohol is excellent for practicing a language though.
08:09:07 <elliott> CakeProphet: but that's literally what he said
08:09:14 <CakeProphet> true enoug.
08:09:16 <CakeProphet> h
08:09:22 <elliott> also commutative is not a trivial word
08:11:18 <monqy> commutativbe is a baby word
08:11:19 <monqy> for babys
08:11:28 <elliott> my word is q
08:11:43 <monqy> q is a good word
08:12:36 <CakeProphet> I think q is frowzy.
08:13:16 <itidus21> all im saying is when i stagger into my brothers room laying down having a whiskey from him while my body is shaking.. which all seems caused by existential pondering
08:13:37 <itidus21> i have been less upset when my father died honestly
08:13:38 <CakeProphet> probably the diabetes.
08:13:40 -!- zzo38 has quit (Remote host closed the connection).
08:15:12 <CakeProphet> eat lots of steak
08:15:14 <CakeProphet> and fish
08:15:15 <CakeProphet> and chicken
08:15:21 <CakeProphet> and stay away from all those saccaride things.
08:15:27 <CakeProphet> when you ponder.
08:15:35 <itidus21> like diet coke type things?
08:15:41 <evincar> CakeProphet: Careful.
08:15:43 <CakeProphet> uh... no
08:15:55 <itidus21> dont even know what saccaride is
08:16:10 <CakeProphet> sugars. either simple or complex carbohydrates.
08:16:21 -!- nooga has joined.
08:16:27 <monqy> bad ideas town
08:16:31 <itidus21> i have to eat a lot of sugars cos my blood sugars drop too easily
08:16:32 <CakeProphet> I guess complex isn't bad.
08:16:33 <monqy> "a good place to be"
08:16:47 <itidus21> i cant control my sugar until i sleep better
08:16:50 <CakeProphet> but yeah #esoteric isn't an advice channel so I hope you're not like
08:16:54 <CakeProphet> taking everything too seriously.
08:17:02 <CakeProphet> itidus21: how so
08:17:09 <elliott> i thought diabetes was having too much blood sugar
08:17:13 <elliott> im not doctor
08:17:14 <itidus21> both
08:17:22 <CakeProphet> it's an inability to maintain it.
08:17:23 <itidus21> the insulin can make it drop if everything is not controlled
08:17:27 <monqy> theres lots of things called diabetes......
08:17:33 <elliott> diabetes "im dont know how to blood sugar" -- diabetes
08:17:35 <itidus21> lack of insulin = high sugar
08:17:38 <elliott> diabetesquotes.com
08:17:40 <itidus21> insulin without food = low sugar
08:17:57 <itidus21> its about mastering that balance
08:18:06 <monqy> do you get to put needles in yourself
08:18:09 <monqy> is that how it works
08:18:21 <itidus21> CakeProphet: perhaps just for you i will monitor my blood sugar better
08:18:34 <elliott> monqy: diabetes.....heroin addiction.....the same thing???
08:18:35 <itidus21> now my comment before was a bit morbid
08:18:37 <CakeProphet> awww how sweet. <3 :3 :3 :3 :3 :# :12; :;
08:18:42 <itidus21> but when im losing my mind.. what can be worse
08:18:43 <elliott> :12;
08:19:04 <elliott> my face
08:19:50 <CakeProphet> itidus21: I believe the trick is to eat small, frequent meals with very few simple sugars.
08:19:57 <CakeProphet> things that will metabolize slowly over time.
08:20:09 <elliott> im mel
08:20:10 <elliott> oops
08:20:37 <itidus21> sorry patashu
08:21:16 <itidus21> everyone of the comments in here must be helping
08:21:44 <CakeProphet> yes #esoteric-self-help is coming along nicely.
08:21:58 <itidus21> it was reading freud comments on subconcious which really gave me the shakes
08:22:09 <CakeProphet> don't ever pay attention to Freud.
08:22:14 <elliott> finally CakeProphet says something smart
08:22:24 <monqy> freud will Hurt you
08:22:33 <itidus21> monqy: why? :P
08:22:33 <elliott> freud is a big poop
08:22:36 <CakeProphet> finally elliott is still a jerk.
08:22:37 <CakeProphet> wait what?
08:22:37 <evincar> Immortalise him in the quote thing.
08:22:42 <elliott> and also unsmart
08:23:01 <elliott> CakeProphet: how many jerk accusations before the jerkhood flips... this is what i wish to know....
08:23:14 <CakeProphet> the jerk is bidirectional
08:23:53 <CakeProphet> elliott: stupid head. nyah.
08:24:05 <elliott> poop
08:24:13 <CakeProphet> > reverse "poop"
08:24:14 <lambdabot> "poop"
08:24:26 <elliott> whoaho
08:24:36 <elliott> monqy: waoah
08:24:39 <monqy> poop
08:24:51 <elliott> poop
08:24:54 <itidus21> now this fear about 2d... makes me worry.. about 1)depth perception 2) reading books 3)watching videos
08:24:59 <CakeProphet> oppo
08:25:03 <itidus21> i think
08:25:04 <elliott> NO
08:25:22 <CakeProphet> elliott: stop being a poop popo
08:25:33 <monqy> poop is a Bad Word
08:25:51 <itidus21> sort of traps me
08:26:21 <CakeProphet> itidus21: you might have extra-dimensional crises when you realize that there is also depth to your width and height.
08:26:33 <CakeProphet> or... width to your depth and height. or height to your depth and width
08:26:40 <CakeProphet> depends on what kind of 2-dimensional thing you are.
08:26:50 <elliott> <monqy> poop is a Bad Word
08:26:51 <elliott> no
08:26:53 <elliott> its the best
08:26:53 <CakeProphet> also point of reference as to where axes are plot.
08:26:56 <elliott> padrilome
08:27:02 <itidus21> i dont think you understand
08:27:16 <itidus21> this isnt a game.. this is pain i endure
08:27:34 <monqy> sorry itidus
08:27:40 <itidus21> to some extent locking me out of enjoyment of traditional 2d media
08:27:46 <itidus21> although i still enjoy some of it
08:29:15 <itidus21> which is ironic in a bedroom full of bookshelves
08:29:40 <CakeProphet> how do you feel about chess?
08:30:09 <itidus21> the solvability of it has started to make me unable to find real purpose in it
08:30:18 <evincar> Play Go then.
08:30:39 -!- evincar has quit (Quit: Goodnight all.).
08:30:45 <monqy> good night evin car
08:31:28 <itidus21> theres a lot which built up to it
08:31:36 -!- derrik has joined.
08:31:47 <itidus21> constant bullying and manipulation from people the whole time growing up
08:32:06 <itidus21> at the end i turned out to be more fragile than i expected
08:35:36 <CakeProphet> Why do you say that?
08:35:51 <monqy> he didn't expect to be as fragile as he observes himself now
08:35:55 <monqy> quite simpley
08:36:06 <itidus21> its a certain anxiety and heavy tiredness in my eyes
08:36:26 <CakeProphet> I don't understand.
08:36:33 <itidus21> just a mess
08:36:45 <monqy> he had an expectation of how fragile he would be. he observes himself to be more fragile than this.
08:37:02 <CakeProphet> Perhaps your plans have something to do with this.
08:37:04 <itidus21> psyche is fragile
08:37:18 <itidus21> im just feeling dizzy
08:37:32 <itidus21> short of breath
08:37:50 <itidus21> sinuses tight
08:38:05 <CakeProphet> `quote
08:38:08 <HackEgo> 59) <Warrigal> I think hamsters cannot be inert.
08:38:24 <itidus21> maybe sleepy
08:38:33 <CakeProphet> constant bullying and manipulation from people the whole time growing up
08:38:44 <CakeProphet> sounds bad.
08:39:35 * CakeProphet should really go to sleep so he can do this metric shit ton of work tomorrow.
08:40:36 <CakeProphet> ^style eliza
08:40:36 <fungot> Not found.
08:40:40 <CakeProphet> ^style
08:40:40 <fungot> Available: agora alice c64 ct darwin discworld europarl ff7 fisher homestuck ic irc* jargon lovecraft nethack pa sms speeches ss wp youtube
08:40:43 <CakeProphet> ^style alice
08:40:43 <fungot> Selected style: alice (Books by Lewis Carroll)
08:40:48 <CakeProphet> ^style agora
08:40:48 <fungot> Selected style: agora (a large selection of Agora rules, both current and historical)
08:40:59 <CakeProphet> ^style ct
08:40:59 <fungot> Selected style: ct (Chrono Trigger game script)
08:41:06 <CakeProphet> ^style pa
08:41:06 <fungot> Selected style: pa (around 1200 transcribed Penny Arcade comics)
08:41:11 <CakeProphet> ^style ss
08:41:11 <fungot> Selected style: ss (Shakespeare's writings)
08:41:14 <CakeProphet> fungot
08:41:15 <fungot> CakeProphet: ham. it is the bishop of winchester, a page with a torch.
08:41:23 <CakeProphet> excellent.
08:45:09 <monqy> good
08:46:52 <CakeProphet> fungot:
08:46:52 <fungot> CakeProphet: bast. my lord protector will come this way by and by
08:47:43 <monqy> bothj are
08:47:46 <monqy> peotic
08:49:58 <CakeProphet> fungot: blatherly
08:49:59 <fungot> CakeProphet: des. what, angry, sir. an early stirrer, by the king your father, and bid mee fetch thee fnord? i will find out logs, and fnord
08:53:52 <fizzie> "fetch thee fnord? i will find out logs, and fnord".
08:58:10 <Patashu> and fnord
09:01:30 <itidus21> ok feeling better with some drawing therapy
09:01:38 <itidus21> and momentary nap
09:13:57 <CakeProphet> fungot: I will fetch no fnords
09:13:58 <fungot> CakeProphet: no visor does become black villany so well as i: nothing confutes me but eyes, and then to beslubber our garments with it, it shall be still thy true loues recompence, my heart
09:16:15 <itidus21> ^style
09:16:15 <fungot> Available: agora alice c64 ct darwin discworld europarl ff7 fisher homestuck ic irc jargon lovecraft nethack pa sms speeches ss* wp youtube
09:16:31 <itidus21> ^style youtube
09:16:32 <fungot> Selected style: youtube (Some YouTube comments)
09:16:44 <itidus21> oh lordy fungot wot has you
09:16:45 <fungot> itidus21: again--not sent via this medium. you can't lie about things that they say: put up or shut up.
09:17:07 <itidus21> fungot, i invoke thee pray tell
09:17:07 <fungot> itidus21: wat language was the aircraft with sofisticate computers, but i think they can keep their bullsh*t straight anymore.
09:17:51 <itidus21> fungot moar
09:17:52 <fungot> itidus21: crappy actors, this video is wrong. the plane was empty ( no people were the days) or... how? like wtf
09:18:09 <itidus21> fungot so many aircraft oriented
09:18:10 <fungot> itidus21: its called takeoff go around button and thats fucking awesome
09:20:04 <itidus21> fungot are you partial to amelia earhart?
09:20:15 <CakeProphet> fungot:
09:20:15 <fungot> CakeProphet: or you will find that there was a fly by at an airshow. look over jorma's shoulder when he first came on snl.
09:20:25 <CakeProphet> youtube isn't great.
09:20:31 <CakeProphet> ^style europarl
09:20:31 <fungot> Selected style: europarl (European Parliament speeches during approx. 1996-2006)
09:20:33 <CakeProphet> fungot
09:20:34 <fungot> CakeProphet: mr president, the first of these is concerned, the use of all the legislation involved. this is a benchmark we must not bury our heads in the right place for these ideas to third countries or the countries currently members of the committee of inquiry into drugs in the first place when nitrofen has been banned for years.
09:20:52 <CakeProphet> fungot
09:20:54 <fungot> CakeProphet: madam president, i would like to draw the honourable members' commitment in the house, have had some very intensive talks with the un human rights committee to investigate the possibilities for aid for the victims of that crash. i feel that many more documents are being supplied in both the products and technologies used. this morning, seemed to me at all that right-wing forces have been involved in these four proc
09:21:39 <itidus21> australian parliament is also interesting
09:23:26 <itidus21> mr speaker, i would like to say to the leader of the opposition mr speaker that the opposition's policies are a betrayal of the australian public mr speaker
09:25:23 <itidus21> heres a random sample http://www.youtube.com/watch?v=aaLLP4sc_6Q
09:27:23 <elliott> this is just uk parliament but wimpier
09:27:29 <itidus21> yeah i know
09:27:30 <itidus21> ...
09:27:44 <elliott> :P
09:29:45 <CakeProphet> American politics is the best.
09:29:58 -!- monqy has quit (Read error: Connection reset by peer).
09:30:01 -!- monqy_ has joined.
09:30:41 <CakeProphet> it's like twice the tomfoolery with half of the sense.
09:32:52 <CakeProphet> > compare LT GT
09:32:52 <lambdabot> LT
09:33:03 <CakeProphet> > compare GT LT
09:33:04 <lambdabot> GT
09:33:07 -!- derrik has quit (Ping timeout: 252 seconds).
09:33:13 <CakeProphet> greater than is greater than greater than
09:33:15 <CakeProphet> er
09:33:16 <CakeProphet> less than
09:34:04 <CakeProphet> oh hey I just found the Ordering negation operator
09:34:05 <elliott> no shit
09:34:13 <CakeProphet> > let f = compare EQ in f LT
09:34:13 <lambdabot> GT
09:34:21 <elliott> clap clap clap
09:34:35 <CakeProphet> well I wouldn't say it's immediately obvious..
09:34:46 <elliott> calp
09:35:01 <CakeProphet> "oh hey why don't I compare comparison values"
09:36:37 -!- monqy_ has changed nick to monqy.
09:39:49 -!- sebbu2 has changed nick to sebbu.
09:50:49 -!- FireFly has joined.
10:13:30 -!- Vorpal has joined.
10:35:27 <monqy> http://esoteric.voxelperfect.net/wiki/User:Aptennap what could it be
10:35:42 -!- yorick has joined.
10:41:59 -!- oerjan has joined.
10:43:59 <oerjan> <elliott> Sigh, when did oerjan escape
10:44:04 <oerjan> i should be so lucky
10:46:08 <elliott> RENAEM MY VECTOR
10:46:48 <oerjan> wat
10:47:00 <oerjan> hector the vector
10:47:01 <elliott> i have a type Vector
10:47:03 <elliott> that amounts to (Value,Value
10:47:04 <elliott> )
10:47:05 <elliott> but
10:47:06 <elliott> Data.Vetor
10:47:07 <elliott> Vector
10:47:08 <elliott> also has
10:47:09 <elliott> Vector
10:47:10 <elliott> and...
10:47:13 <elliott> confusion
10:47:15 <elliott> so
10:47:16 <elliott> I want to rename my Vector type
10:47:19 <elliott> to something nicer??
10:47:20 <oerjan> Pair?
10:47:31 <elliott> I guess Vector might be a misnomer in the first place, I basically use it for position and delta
10:47:41 <elliott> oerjan: um Value is integral if that helps
10:48:00 <oerjan> delta is usually a vector-like quality
10:48:16 -!- nooga has quit (Ping timeout: 252 seconds).
10:48:36 -!- monqy has quit (Quit: hello).
10:49:22 <elliott> oerjan: but yeah help :(
10:49:27 <elliott> pair is ok i guess
10:49:29 <elliott> buuut
10:50:55 <oerjan> it seems hard to think of delta as something other than a vector...
10:51:59 <elliott> it's just a coordinate pair :P
10:52:04 <itidus21> Point ?
10:52:07 <elliott> except sometimes instead of coordinates it is a delta :-|
10:52:14 <elliott> maybe what I need to do is have two type
10:52:15 <elliott> s
10:52:16 <elliott> Point and Delta
10:52:20 <itidus21> Coordinate ?
10:52:28 <itidus21> Position ?
10:52:31 <elliott> Coords would work but is kind of bluh
10:52:34 <elliott> Position and Delta might work
10:52:41 <elliott> I think Point and Delta is nicer thouhg
10:52:46 <oerjan> itidus21: it's the delta that makes it not quite like a point
10:52:51 <itidus21> TwoD
10:53:02 <elliott> the annoying thing is that i'll have to define all the same things for positions and deltas
10:53:08 <elliott> but I guess I just need a simple typeclass for (.+.) and (.-.)
10:53:29 <oerjan> elliott: type Position = Delta, problem solved.
10:53:31 <itidus21> CoincidentScalars
10:53:38 <elliott> oerjan: yes. so well-type-checked.
10:53:59 <itidus21> Location
10:54:02 <oerjan> elliott: newtype Position = Position Delta deriving Everything
10:54:09 <CakeProphet> elliott: make a GADT, phantom types, and then type synonyms
10:54:17 <CakeProphet> profit.
10:54:26 <itidus21> XY
10:54:48 <itidus21> Pixel
10:55:14 <oerjan> Thataway
10:55:24 <itidus21> Translation
10:55:54 <oerjan> Thither
10:56:06 <CakeProphet> type Delta = Pointlike D
10:56:12 <CakeProphet> type Point = Pointlike P
10:56:21 <CakeProphet> SUDDENLY TYPE CHECKING.
10:56:43 <itidus21> Vektori
10:57:04 -!- elliott has quit (Read error: Connection reset by peer).
10:57:12 -!- elliott has joined.
10:57:19 <CakeProphet> obviously elliot left because he was disgusted by my design.
10:57:21 <CakeProphet> oh.. hi
10:57:25 <elliott> there is no elliot
10:57:35 <itidus21> Vektori, Vektor, Bektop
10:57:48 <CakeProphet> whatever you say eltoitl
10:58:02 <elliott> oerjan: now the problem being, I still need a type underlying the Point and Delta newtypes ;P
10:58:03 <itidus21> 空間ベクトル
10:58:03 <elliott> :P
10:58:15 <CakeProphet> elliott: some kind of Pointlike type
10:58:16 <oerjan> elliott: see CakeProphet
10:58:17 <elliott> oerjan: and that needs a name :D
10:58:18 <CakeProphet> with a phantom type.
10:58:22 <elliott> oerjan: no Pointlike is the worst.
10:58:26 <elliott> also using the phantom type like that is silly.
10:58:35 <CakeProphet> I think elliott just hates GADTs with phantom types.
10:58:42 <CakeProphet> for typechecking goodness.
10:58:47 <CakeProphet> which is totally what it's for.
10:59:05 <oerjan> i'd say this is precisely what phantom types are for
10:59:08 <itidus21> SinCos
10:59:39 <CakeProphet> though by the time elliott weighed all of these pros and cons he could have probably already written two instances.
10:59:43 <oerjan> itidus21: i think he wants longer vectors than that.
10:59:54 <CakeProphet> itidus21: also naming isn't really an issue here.
11:00:08 <elliott> yes
11:00:09 <elliott> it is
11:00:11 <CakeProphet> so just spewing names out of the front of your face is not helping.
11:00:21 <itidus21> it helps me
11:00:25 <CakeProphet> ...the front of your virtual face.
11:00:27 <elliott> oerjan: not really phantom types -- they're two types that happen to be composed of two values underneath
11:00:32 <elliott> and i was wrong wrt .+. and .-.
11:00:36 <elliott> they only have the possible types
11:00:41 <elliott> (.+.) :: Point -> Delta -> Point
11:00:49 <elliott> (.-.) :: Point -> Delta -> Point
11:00:49 <itidus21> Spot
11:00:50 <elliott> well
11:00:52 <elliott> you could also have
11:00:58 <elliott> (.-.) :: Point -> Point -> Delta
11:00:59 <CakeProphet> yes, so you can use one type to represent both, and then the phantom type is used to distinguish them for the purposes of typechecking....
11:01:01 <elliott> but I don't think I need that :P
11:01:02 <CakeProphet> ?
11:01:04 <elliott> CakeProphet: or
11:01:07 <elliott> just define two types?
11:01:23 <CakeProphet> well, you wanted to avoid that, and that seems like the best way to avoid it.
11:01:28 -!- nooga has joined.
11:01:30 <CakeProphet> do what you want.
11:01:36 <elliott> data Point = (:@) {-# UNPACK #-} !Value {-# UNPACK #-} !Value deriving (Eq, Ord, Show)
11:01:37 <elliott> data Delta = (:/) {-# UNPACK #-} !Value {-# UNPACK #-} !Value deriving (Eq, Ord, Show)
11:01:43 <CakeProphet> gross.
11:01:49 <CakeProphet> all of that identicalness.
11:01:57 <itidus21> Dual
11:02:02 <CakeProphet> itidus21: no
11:02:06 <CakeProphet> that's already taken.
11:02:14 <itidus21> ChuckNorris
11:02:17 -!- derdon has joined.
11:02:17 <elliott> CakeProphet: it comes down to
11:02:22 <elliott> data Point = Value :@ Value
11:02:25 <elliott> data Delta = Value :/ Value
11:02:27 <itidus21> DeltaForce
11:02:29 <elliott> it's just added optimisation sauce on top of that
11:02:36 <CakeProphet> yes I know.
11:02:56 <itidus21> DxDy
11:02:57 <CakeProphet> but now you have... instance Point ...
11:03:00 <CakeProphet> and instance Delta...
11:03:05 <CakeProphet> and any code that can operate on both
11:03:14 <CakeProphet> must be put in the instance.
11:03:16 <CakeProphet> and written twice.
11:03:16 <elliott> <CakeProphet> but now you have... instance Point ...
11:03:16 <elliott> <CakeProphet> and instance Delta...
11:03:20 <elliott> what? where do I have these?
11:03:34 <elliott> I think you will find that very few operations make sense identically on both points and deltas in context.
11:03:36 <CakeProphet> you were writing a typeclass right?
11:03:41 <oerjan> elliott: how do you define .+. without
11:03:49 <elliott> for instance
11:03:50 <elliott> origin :: Vector
11:03:51 <elliott> origin = 0 :@ 0
11:03:51 <elliott> south :: Vector
11:03:51 <elliott> south = 0 :@ 1
11:03:51 <elliott> east :: Vector
11:03:51 <elliott> east = 1 :@ 0
11:03:53 <elliott> north :: Vector
11:03:56 <elliott> north = 0 :@ (-1)
11:03:57 <elliott> west :: Vector
11:04:00 <elliott> west = (-1) :@ 0
11:04:02 <elliott> obviously origin is a Point, and the rest are Deltas
11:04:03 <elliott> CakeProphet: no, i was mistaken
11:04:06 <elliott> oerjan: without what?
11:04:10 <CakeProphet> ah okay.
11:04:12 <oerjan> elliott: without a typeclass
11:04:22 <elliott> oerjan: (.+.) :: Point -> Delta -> Point
11:04:31 <CakeProphet> ah.
11:04:34 <oerjan> er right
11:04:47 <elliott> oerjan: adding two deltas is rather fundamentally different from that, so it should have another name
11:04:50 * oerjan goes to turn on his brain
11:05:08 <oerjan> ...sorry, out of batteries.
11:05:15 <elliott> ah.
11:05:20 <elliott> your last task is to give Delta a nicer constructor name :P
11:05:22 <elliott> :/ is gross
11:05:29 <CakeProphet> :/ is :/
11:05:33 <elliott> (:@) is nice for Point because it has the nice "at" connotation.
11:05:52 <itidus21> Vertex
11:06:10 <CakeProphet> I wonder if you can use :, for point
11:06:13 <elliott> CakeProphet: no
11:06:29 <oerjan> :>
11:06:32 <CakeProphet> :% ?
11:06:35 <CakeProphet> for delta?
11:06:46 <itidus21> dunno why vertex didn't occur to me sooner.. it may not be appropriate but it's better than most of my efforts
11:06:47 <CakeProphet> connotate what you wish.
11:06:55 <oerjan> (it clashes if you use Seq, though)
11:06:58 <elliott> :% for delta might work
11:07:05 <elliott> I don't like :>, it's too directional and that conflict as you said
11:07:18 <CakeProphet> I don't like :> because it's a stupid little face
11:07:25 <CakeProphet> :>
11:07:26 <oerjan> elliott: but deltas _are_ directions >:)
11:07:38 <CakeProphet> but not directional between its arguments.
11:07:47 <oerjan> :^
11:07:52 <CakeProphet> :% implies change to me or something.
11:08:09 <elliott> :^ is cute
11:08:22 <elliott> we'll see
11:08:23 <CakeProphet> @hoogle (:^)
11:08:23 <lambdabot> No results found
11:08:41 <itidus21> :\/
11:08:47 <itidus21> :P
11:08:52 <CakeProphet> don't believe \ is valid actually
11:08:56 <oerjan> yes it is
11:08:58 <CakeProphet> ah
11:08:59 <CakeProphet> yes it is.
11:09:03 <itidus21> im being silly thouhg
11:09:08 <CakeProphet> :!@$%
11:09:12 <CakeProphet> for delta
11:09:16 <itidus21> :FFFFUUUUUUUUUUU
11:09:26 <oerjan> itidus21: that's not legal, no letters
11:10:00 <oerjan> > let (\/:) = (+) in 2 \/: 2
11:10:01 <lambdabot> 4
11:10:20 <elliott> oerjan: ah hm, turns out I do need addition on points
11:10:31 <CakeProphet> :\/ is not bad for delta except that it's annoying to type.
11:10:31 <oerjan> impossible!
11:10:31 <elliott> the storage offset (which is a point) plus a coordinate within that offsetted area
11:10:33 <elliott> but that's alright
11:10:36 <elliott> I can define it separately
11:10:42 <CakeProphet> just define it as Num
11:10:51 <elliott> no.
11:10:52 <itidus21> :|)
11:10:54 <itidus21> hahahah
11:11:16 <oerjan> itidus21: sorry, no brackets either
11:11:35 <CakeProphet> I bet you'll need addition on deltas as well.
11:11:57 <itidus21> well my intention with \/ is it spells v
11:12:08 <CakeProphet> .+. :: Pointlike a -> Pointlike a -> Pointlike a
11:12:11 <itidus21> otherwise i don't men much by it
11:12:11 <CakeProphet> teeheeheehee
11:12:23 <CakeProphet> :/\ kind of looks like a delta.
11:12:26 <CakeProphet> kind of.
11:12:37 <itidus21> :|\ :/|
11:12:53 <itidus21> :/|\
11:13:23 <itidus21> :/`\ :/_\
11:13:35 <CakeProphet> question
11:13:38 <CakeProphet> so if you make
11:13:51 <CakeProphet> er wait
11:13:53 <CakeProphet> can you write
11:13:57 <CakeProphet> type P = Pointlike a
11:14:04 <oerjan> no.
11:14:07 <CakeProphet> type P = forall a. Pointlike a
11:14:32 <oerjan> ...maybe.
11:14:43 <CakeProphet> so then is P -> P equivalent to Pointlike a -> Pointlike a or Pointlike a -> Pointlike b?
11:15:11 <oerjan> it's equivalent to (forall a. Pointlike a) -> (forall a. Pointlike a)
11:15:40 <itidus21> C< . . . . . . ∩ . . ∩
11:15:58 <oerjan> which cannot take a plain Pointlike a as argument.
11:16:27 <CakeProphet> erm, what can it take?
11:16:53 <CakeProphet> perhaps I don't understand rank-n types very well... or, I guess this is an existential?
11:16:56 <CakeProphet> just with no typeclass.
11:16:58 <oerjan> a polymorphic value of type forall a. Pointlike a
11:17:05 <oerjan> this is afaict rank-2
11:17:12 <CakeProphet> ...ah okay.
11:17:20 <CakeProphet> so plain as in has a concrete a.
11:17:28 <oerjan> yeah
11:17:39 <CakeProphet> hmmmm... okay
11:17:50 <CakeProphet> I think I understand rank-2 now.
11:17:57 <oerjan> the forall in the result type is easy to remove, though.
11:18:20 <CakeProphet> how does one get values of P then?
11:18:26 <olsner> hmm, the function gets a rank-2 type, but the type P isn't in itself? or is it?
11:18:30 <CakeProphet> with a polymorphic argument.
11:18:30 <itidus21> S ≡ λwyx.y(wyx)
11:18:51 <oerjan> CakeProphet: hopefully you would have some functions that are polymorphic in a...
11:19:05 <CakeProphet> hmmm, okay.
11:19:11 <elliott> <p>The REFC fingerprint allows vectors to be encoded into
11:19:11 <elliott> and decoded from single scalar cell values.
11:19:11 <elliott> Gah
11:19:14 <elliott> oerjan: Point or Delta :-P
11:19:35 <oerjan> AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAaaaaaaaaaaaa
11:19:42 <CakeProphet> why not just have points...
11:19:55 <CakeProphet> and then special functions that treat one point as a delta.
11:20:03 <CakeProphet> s/special//
11:20:08 <itidus21>
11:20:17 <elliott> Why don't we just have one type of data
11:20:20 <elliott> And functions that treat it specially
11:20:20 <oerjan> itidus21: that's not what we usually call S
11:20:25 <elliott> Oh right, because this isn't Tcl
11:20:34 <itidus21> oops :Δ
11:20:47 <itidus21> oerjan: ok sorry.
11:20:52 <CakeProphet> yeah but they're essentially the same thing the only difference is that you have operations that have an operand that treats the point as a delta.
11:21:02 <oerjan> itidus21: sadly greek letters count as letters, so no.
11:21:03 <elliott> yeah but they're essentially the same thing the only difference is that you have operations that have an operand that treats the string as a list.
11:21:08 <itidus21> lol
11:21:42 <oerjan> otherwise everyone would be using real λ in haskell by now
11:21:51 -!- Taneb has joined.
11:22:09 <CakeProphet> (mappend :: Point -> Point -> Point) point delta
11:22:10 <CakeProphet> bahahahaha
11:22:12 <Taneb> Hello!
11:22:50 <oerjan> ho lle
11:22:55 <CakeProphet> hmmm, booleans are monoids yes?
11:23:10 <oerjan> CakeProphet: in four different ways :P
11:23:13 <CakeProphet> but perhaps not in Haskell yes?
11:23:25 <CakeProphet> oerjan: makes me wonder why there is no typeclasses for monoids like that.
11:23:31 <oerjan> wait, six
11:23:33 <CakeProphet> like a typeclass for &&, ||, etc
11:23:44 -!- derdon has quit (Remote host closed the connection).
11:23:46 <elliott> what
11:23:56 <CakeProphet> nevermind.
11:24:01 <CakeProphet> basically I just don't like newtypes.
11:24:09 <CakeProphet> and would prefer having Monoid classes with more than one mappend.
11:24:11 <oerjan> &&, ||, /=, ==, const and const id are all monoid operations for Bool
11:24:27 <oerjan> er wait
11:24:31 <elliott> um
11:24:32 <oerjan> scratch those const ones
11:24:35 <elliott> isn't mempty `mappend` ... yeah
11:24:40 <oerjan> they're just semigroups
11:25:00 <itidus21> ╔╦═══╗
11:25:00 <itidus21> ╚╩═══╝
11:25:09 <CakeProphet> ^celebrate
11:25:09 <fungot> \o| |o| |o/ \m/ \m/ |o/ \o/ \o| \m/ \m/ \o| |o| |o/
11:25:10 <myndzi\> | | | `\o/´ | | | `\o/´ | | |
11:25:10 <myndzi\> >\ |\ >\ | >\ /'\ /`\ | /'\ |\ /<
11:25:10 <myndzi\> /'\ (_|¯`\
11:25:10 <myndzi\> (_| |_) |_)
11:25:20 <oerjan> itidus21: i have no idea what haskell considers those chars as
11:25:30 <CakeProphet> oerjan: box-drawing character duh.
11:25:32 <itidus21> i just got inspired playing around with character map
11:25:41 <CakeProphet> only useful for drawing boxes.
11:25:59 <oerjan> CakeProphet: well yes but are they legal operator characters? :P
11:26:18 <Taneb> Somebody's made another brainfuck derivative
11:26:25 <CakeProphet> does Haskell even allow Unicode aside from a few special cases?
11:26:25 <itidus21> ♫♪ ♫
11:26:25 <oerjan> > let a ╔ b = a + b in 2 ╔ 2
11:26:26 <lambdabot> 4
11:26:30 <oerjan> yay :P
11:26:39 <CakeProphet> oh
11:26:40 <CakeProphet> okay.
11:26:49 <elliott> haskell has full unicode support
11:26:58 <CakeProphet> goood.
11:27:02 <elliott> > let æßð = "yes" in æßð
11:27:02 <lambdabot> "yes"
11:27:05 <oerjan> CakeProphet: at least ghc uses the unicode character classifications to decide. somehow.
11:27:23 <CakeProphet> ╔ is an operator that takes uh two.... uh... somethings and TURNS RIGHT,
11:27:29 <elliott> > let æßð = "yes"; (→) = const in æßð → "a"
11:27:29 <lambdabot> <no location info>: parse error on input `
11:27:31 <CakeProphet> sharply.
11:27:32 <elliott> Aw. :/
11:27:40 <elliott> > let æßð = "yes"; → = const in → æßð "a"
11:27:41 <lambdabot> <no location info>: parse error on input `
11:27:42 <elliott> :|
11:27:50 <CakeProphet> you could also have it turn one thing right by being postifx.
11:28:24 <CakeProphet> (car╔)
11:28:32 <itidus21> > let a ▲ b = a + b in 2 ▲ 2
11:28:33 <lambdabot> 4
11:29:06 <CakeProphet> elliott: there you go, your delta-application function. :)
11:29:16 <CakeProphet> obviously with type Point -> Delta -> Point
11:29:19 <CakeProphet> where type Delta = Point
11:29:22 <itidus21> It is cheerfully describes it as Black Up-Pointing Triangle
11:29:59 <elliott> cheerfully
11:30:21 <itidus21> > let a ∆ b = a * b in 3 ∆ 5
11:30:22 <lambdabot> 15
11:30:32 <itidus21> thats another one
11:30:44 <oerjan> > let x → y = x in 2
11:30:45 <lambdabot> <no location info>: parse error on input `
11:30:47 <itidus21> cheerfully described as "Increment"
11:31:12 <oerjan> > (sin :: Double → Double) 2
11:31:13 <lambdabot> 0.9092974268256817
11:31:14 <CakeProphet> now I just need a unicode keyboard so I can sanely program with these operators.
11:31:17 <oerjan> ah.
11:31:31 <Taneb> My chair has speakers in it
11:31:39 <oerjan> it wasn't illegal, just taken.
11:31:51 <Taneb> I am going to play some Queen music
11:31:53 <itidus21> i didnt mean to define all of these things
11:32:04 <itidus21> i hope im not making a mess of lambdabot
11:32:26 <itidus21> haha...
11:32:45 <CakeProphet> there should be a Haskell IDE or somesuch in which you can assign numpad keys to unicode characters
11:32:50 <oerjan> itidus21: > let doesn't actually define things permanently
11:32:52 <CakeProphet> with some kind of graphical bank displayed.
11:32:58 <itidus21> oerjan: thats good
11:33:10 <itidus21> at least i have kind of opened the possibility of the unicodes :D
11:33:18 <oerjan> you need @let for ... slightly more permanent, but not really.
11:33:19 <itidus21> beginning with my /\ tomfoolery
11:34:25 <CakeProphet> also other nice features like automatically inserting type signatures, renaming functions globally across multiple files, etc.
11:34:45 <CakeProphet> but the unicode bank would actually make unicode operators convenient
11:34:53 <itidus21> my zanyness can come in handy
11:36:18 <oerjan> today's http://www.mezzacotta.net/postcard/ has a nice disclaimer
11:38:10 <oerjan> *(no, the picture is not broken)
11:38:27 <elliott> yes, it is
11:38:33 <elliott> depending on your definition of broken
11:38:52 <elliott> oerjan: only four more IWC strips left ;D
11:39:08 <oerjan> ^ul ((A)S:^):^
11:39:08 <fungot> AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA ...too much output!
11:40:13 <CakeProphet> other Haskell IDE ideas: builtin (un)?pl, (un)?do, djinn, shell (which obviously includes ghci), hoogle, documentation viewer stuff
11:40:58 <oerjan> CakeProphet: there is a way to plug lambdabot into ghci. ostensibly.
11:41:16 * itidus21 starts pondering other potential uses of unicode characters.
11:41:41 <oerjan> itidus21: maybe you could use them to write in strange languages
11:42:07 <CakeProphet> oerjan: ah yes that would work I think. though also a source-code transform version of each would be neat.
11:42:22 <CakeProphet> so you right-click on a type signature, run djinn, and it spits out a function definition
11:42:36 <CakeProphet> right-click on a function and then transform via do/pl
11:42:45 <CakeProphet> ...more useful for do than pl
11:42:52 <elliott> oerjan: not really ostensibly, IIRC it's even maintained still.
11:42:53 <CakeProphet> as you may not necessarily want what pl gives you. :P
11:43:01 <elliott> CakeProphet: djinn is not very useful in practice at all.
11:43:10 <CakeProphet> eh, still
11:43:15 <elliott> I guess it's nice if you want to generate large swathes of the Prelude, but apart from that.
11:43:16 <CakeProphet> if it ever does become useful in practice.
11:43:20 <elliott> "ever does"?
11:43:25 <CakeProphet> ..yes
11:43:28 <elliott> It's not some collection of hacks; it's a defined, immutable algorithm.
11:43:28 <CakeProphet> like, if they improve it.
11:43:35 <elliott> Do you know how djinn works?
11:43:40 <CakeProphet> not specifically.
11:43:58 <elliott> "For the curious, Djinn uses a decision procedure for intuitionistic
11:43:58 <elliott> propositional calculus due to Roy Dyckhoff. It's a variation of
11:43:58 <elliott> Gentzen's LJ system."
11:44:13 <elliott> It's just Curry-Howard.
11:44:28 <CakeProphet> okay, but that's not to say it couldn't be improved.
11:44:33 <elliott> ...
11:44:51 <elliott> You would like it to just make shit up if that fails?
11:45:10 <CakeProphet> well no, but if it had access to more functions
11:45:14 <elliott> What.
11:45:23 <CakeProphet> to plug in... in the correct place.
11:45:28 <CakeProphet> I'm sure this makes sense. :P
11:46:08 <oerjan> djinn does have a way to define data types. they just cannot be recursive.
11:46:14 <oerjan> @list djinn
11:46:14 <lambdabot> djinn provides: djinn djinn-add djinn-del djinn-env djinn-names djinn-clr djinn-ver
11:46:18 <oerjan> @djinn-env
11:46:18 <lambdabot> data () = ()
11:46:18 <lambdabot> data Either a b = Left a | Right b
11:46:18 <lambdabot> data Maybe a = Nothing | Just a
11:46:18 <lambdabot> data Bool = False | True
11:46:18 <lambdabot> data Void
11:46:20 <lambdabot> type Not x = x -> Void
11:46:22 <lambdabot> class Monad m where return :: a -> m a; (>>=) :: m a -> (a -> m b) -> m b
11:46:24 <lambdabot> class Eq a where (==) :: a -> a -> Bool
11:46:26 <lambdabot> class Applicative f where pure :: a -> f a; (<*>) :: f (a -> b) -> f a -> f b; (*>) :: f a -> f b -> f b; (<*) :: f a -> f b -> f a
11:46:32 <elliott> I'm honestly impressed djinn can even do typeclasses.
11:46:43 <CakeProphet> well I don't mean define data types. I mean if it had a collection of functions and their type information
11:47:00 <CakeProphet> it could decide that a function has the correct type to satisfy the proof, so to speak.
11:47:23 <Taneb> brb
11:47:25 -!- Taneb has quit (Quit: what a big quitter he is, eh?).
11:47:30 <oerjan> well that would be equivalent to having some extra axioms in the logic.
11:47:42 <oerjan> so probably possible in principle
11:47:54 <elliott> oerjan: I'm pretty sure you'd have to modify the search procedure for each new axiom.
11:48:13 <CakeProphet> yes, and it would make it more practical as you could say "write a program for this type and here's a function, module, etc to use"
11:48:15 <elliott> so the answer to the question "can djinn do lists if we special-case it to do lists" is... yes!
11:48:41 <oerjan> elliott: it would still be limited to non-recursive types i think
11:48:57 <elliott> yeah, I just couldn't think of a type :P
11:48:59 <elliott> :t (((. head . uncurry zip . splitAt 1 . repeat) . uncurry) .) . (.) . flip
11:49:00 <lambdabot> forall b c a. (b -> a -> c) -> (b -> a) -> b -> c
11:49:15 <CakeProphet> also there are other problems.
11:49:17 <CakeProphet> ambiguity...
11:49:38 <CakeProphet> but a sufficiently sophisticated djinn could list a bunch of alternatives and have the user decide which one to insert.
11:49:38 <oerjan> elliott: in fact you can in principle already do this with @djinn as it stands - just add your axioms as extra a1 -> a2 -> parts
11:50:01 <oerjan> well, those cannot be polymorphic i guess.
11:50:06 -!- nooga has quit (Ping timeout: 252 seconds).
11:50:10 <elliott> oerjan: wasn't that obvious? :P
11:50:18 <elliott> you can also define any data type by just including the relevant function as its only field.
11:51:28 <oerjan> yeah
11:51:54 <oerjan> @djinn Monad m => m (m a) -> m a
11:51:54 <lambdabot> -- f cannot be realized.
11:52:12 <oerjan> ...something tells me the monad support is rather limited
11:52:35 <elliott> heh
11:52:37 <oerjan> @djinn Monad m => a -> m a
11:52:37 <lambdabot> f = return
11:52:59 <oerjan> @src join
11:52:59 <lambdabot> join x = x >>= id
11:53:46 <oerjan> @djinn Monad m => (a -> m b) -> m a -> m b
11:53:47 <lambdabot> f a b = b >>= a
11:55:48 <elliott> hm is there a way to tell GHC to use irrefutable patterns for a datatype by default?
12:00:41 <twice11> elliott: None I know of, as irrefutable patterns destroy the ability of matching multiple patterns.
12:01:04 <twice11> Depending on what you try to do, you could replace your datatype by a newtype.
12:01:25 <twice11> As newtypes are single-constructor only, matches on them are inherently irrefutable.
12:01:57 <oerjan> i assume the useful case would be single-constructor, multiple fields
12:02:05 <twice11> newtype a tuple.
12:02:14 <oerjan> doesn't work.
12:03:42 <elliott> twice11: There's only one constructor.
12:04:04 <elliott> Newtyping a tuple isn't viable, the whole reason I'm using this in place of a tuple is that it's strict and unboexd :-)
12:04:06 <elliott> unboxed
12:04:56 <oerjan> also this would be tricky, what about case (x, (y:z)) of ... where the tuple does this by default, but it would still be wierd to error out if the second element is an empty list...
12:04:58 <twice11> oerjan: Doesn't work? For me it certainly does.
12:05:03 <twice11> newtype Test = Test (Int,Bool, String) deriving Show
12:05:10 <twice11> main = print $ Test (3,True,"why?")
12:05:11 -!- Sgeo has quit (Ping timeout: 260 seconds).
12:05:15 <twice11> compiles + runs
12:05:22 <oerjan> twice11: doesn't work to achieve a useful irrefutable pattern default
12:05:54 <elliott> I'm sure oerjan knows what he's talking about, having written half the Haskell Report. :p
12:07:15 <oerjan> case Test (1, True, "") of Test (_, _, (x:xs)) -> ... would still error out too early.
12:07:56 <twice11> In this case, the match on the list would need to be irrefutable, though, not the match on the type "Test".
12:08:49 <twice11> Of course there is no way to make the match on members of a data type irrefutable by just playing around with the data type.
12:08:50 <oerjan> > case (1, True, "") of ~(_, _ x:xs) -> "testing"
12:08:51 <lambdabot> <no location info>: Parse error in pattern
12:08:59 <oerjan> > case (1, True, "") of ~(_, _, x:xs) -> "testing"
12:09:00 <lambdabot> "testing"
12:09:54 <twice11> OK, I'm not gonna split hairs here, but the "~" character is obviously "recursive", applying to all sub-patterns too.
12:09:58 <elliott> "hough, not the match on the type "Test".
12:09:58 <elliott> <twice11> Of course there is no way to make the match on members of a data type irrefutable by just playing around with the data type."
12:10:00 <elliott> I was thinking more a flag.
12:10:03 <elliott> Erm
12:10:04 <elliott> Like INLINE
12:10:08 <elliott> A declaration
12:10:12 <elliott> Admittedly INLINE doesn't change semantics
12:10:15 <elliott> But LANGUAGE does :P
12:10:37 <twice11> So like "data Test = Test Int Bool String {#-IRREFUTABLE-#}"?
12:10:46 <oerjan> twice11: it's not clear what should be the semantics if someone _did_ provide a way to make irrefutable default patterns
12:10:50 <elliott> Something like
12:10:54 <twice11> So that matches on the string fields would be irrefutable.
12:10:54 <elliott> {#- IRREFUTABLE Test -#}
12:10:59 <elliott> data Test = Test Int Bool String
12:11:00 <elliott> Then a match
12:11:03 <elliott> f (Test ...) = ...
12:11:04 <elliott> would actually be
12:11:06 <elliott> f ~(Test ...) = ...
12:11:15 <elliott> So I could say:
12:11:19 <elliott> {#- IRREFUTABLE Point -#}
12:11:22 <elliott> infix 0 :@
12:11:22 <elliott> data Point = (:@) {-# UNPACK #-} !Value {-# UNPACK #-} !Value deriving (Eq, Ord, Show)
12:11:45 <elliott> Erm, {-# ... #-} not {#- ... -#} of course.
12:12:52 -!- MSleep has changed nick to MDude.
12:12:54 <twice11> for the top-level match, newtype-of-tuple provides the required irrefutability:
12:13:07 <twice11> data Test2 = Test2 Int Bool String deriving Show
12:13:11 <twice11> foo1 (Test _) = True
12:13:14 <twice11> foo2 (Test2 _ _ _) = True
12:13:18 <twice11> foo3 ~(Test2 _ _ _) = True
12:13:28 <twice11> foo1 and foo3 can be called with "undefined".
12:13:46 -!- hagb4rd|zzZ has joined.
12:14:06 <oerjan> twice11: but you can actually define any variables in foo1
12:14:09 <oerjan> *cannot
12:14:15 <elliott> twice11: But not the required unpacking or strictness.
12:14:17 <twice11> right, so I was cheating.
12:14:20 <elliott> If I didn't need them, I would just use a tuple.
12:14:38 <twice11> elliott: I guess "unboxed tuples" are too limited for you.
12:15:02 <elliott> Definitely. Also ugly. :p
12:16:47 <twice11> foo4 (Test (_,_,_)) can not be called with undefined (of course), so I just moved the refutability by introducing a non-refutable futile further layer of indirection.
12:17:03 <elliott> I love how cabal, when a package fails to build, just builds a random other number of them before reporting the error.
12:17:15 <elliott> twice11: Clearly we just need an infinite stack of irrefutability.
12:20:24 <twice11> elliott: Do you want irrefutability for performance or for being able to pass undefined?
12:21:24 <elliott> Performance. Not that I expect it'll help much or perhaps even at all... I'd just like to try everything before actually having to replace my fungespace :-P
12:22:10 <twice11> So saying !Point instead of Point and relying of ghc's worker split-off would do the job nicely.
12:22:27 <twice11> No, I don't know a way of getting the bang everywhere.
12:22:31 <elliott> Well, sed.
12:22:47 <elliott> Preferably I'd like to localise the Horrific Cthulian Directives, though. :p
12:23:00 <twice11> Also, !Point is a pattern does not work...
12:23:23 <elliott> ~(a :@ b) would do it.
12:23:55 <twice11> Modifying actual patterns instead of type signatures would be even more ugly.
12:24:24 <elliott> You can say !Point as a type?
12:24:48 <twice11> No.
12:24:55 <elliott> Aw. That would be nice.
12:25:12 <elliott> Fun Haskell-derivative feature number 9999: Strictness polymorphism.
12:25:27 <twice11> That's what I meant when I wrote "!Point is a pattern", wanted to type "!Point in a pattern" and meant "!Point in a signature".
12:25:32 <elliott> Right.
12:26:07 <elliott> To expand on that feature: Every type is, by default, takes either "strict" or "lazy". It then passes this on to all the types mentioned in its definition that don't have an explicit override.
12:26:39 <elliott> So you can define lists once and get lazy lists with lazy elements, spline-strict lists with lazy elements, element-strict lists with lazy splines, ...
12:28:43 -!- oerjan has quit (Quit: leaving).
12:31:41 -!- itidus21 has quit (Quit: Leaving).
12:37:34 -!- Taneb has joined.
12:37:42 <Taneb> Hello!
12:41:55 -!- itidus21 has joined.
12:44:28 <Taneb> Does anyone else do Project Euler?
12:46:38 -!- itidus21 has quit (Client Quit).
12:50:21 -!- itidus21 has joined.
12:50:53 -!- itidus21 has quit (Client Quit).
12:56:47 -!- itidus21 has joined.
12:59:03 -!- Taneb has quit (Remote host closed the connection).
13:01:45 -!- Taneb has joined.
13:02:26 <Jafet> The thing that isn't a project and has nothing to do with Euler
13:03:32 <Taneb> That has nothing to do with my question
13:03:49 <cheater> what is the keyboard combination to change readline to vi mode and emacs mode?
13:03:58 <Jafet> elliott: data Lazy a = Lazy a; data StrictList a = SNil | SCons !a (StrictList a); type LazyList a = StrictList (Lazy a)
13:04:43 <elliott> Jafet: Cute. But doesn't let you parameterise spline strictness.
13:05:29 <Jafet> data ElliottIsAFag s a = SNil | SCons !a !(spn (ElliotIsAFag spn a))
13:05:44 <Jafet> ...I think that would work.
13:06:00 <Jafet> s/s /spn /
13:06:04 <elliott> Congratulations, you've proved that strict languages admit explicit laziness
13:06:27 <Jafet> Damn, I was trying to prove the converse.
13:06:28 <elliott> The idea with this is that you wouldn't have to define all that, and also wouldn't have to pack/unpack Lazy values (i.e. the reason laziness is awful in strict languages) :P
13:07:14 <Jafet> You can usually fix that with more polymorphism.
13:07:26 <Jafet> POLYMOARPHISM
13:09:13 <elliott> Go on then
13:09:44 <Jafet> The Prelude does not have polymoarphism.
13:10:04 <elliott> Implement yer own
13:10:09 <elliott> I guess you mean
13:10:13 <elliott> data Lazy a = Lazy a
13:10:20 <elliott> data Strict a = Strict !a
13:10:32 <Jafet> Also, you can't unbox that !a.
13:10:41 <elliott> class O o where pack :: a -> o a; unpack :: o a -> a
13:10:43 <elliott> instance O Lazy
13:10:45 <elliott> instance O Strict
13:10:57 <Jafet> More like Num a => Num (Lazy a)
13:11:05 <Jafet> Repeat 9001 times
13:11:13 <elliott> data List o a = Nil | Cons !(o a) !(o (List o a))
13:11:22 <elliott> Jafet: who cares about the prelude
13:11:28 <Jafet> And don't have pack or unpack, just roll both into cast
13:11:40 <elliott> Jafet: Anyway, one problem there is that yo uca'n't override strictness of the element type
13:11:49 <elliott> You need to define your own newtype that discards its argument
13:11:52 <elliott> Which is lame
13:12:09 <elliott> Compare (List! Int~)
13:12:16 <elliott> i.e. spline-strict list of lazy integers
13:12:25 <elliott> (List! Int) == fully strict list because the ! is passed on
13:12:30 <elliott> I dunno, it sounds interesting :-P
13:12:46 <elliott> (List Int!) -- polymorphic on spline strictness but with strict elements
13:13:08 <Jafet> Programming with splines sure is
13:13:26 <elliott> Sure is what
13:14:15 <Jafet> ,,,smooth? Visually appealing?
13:14:24 <elliott> Totes
13:14:45 <elliott> The other nice thing is that functions become the automatic "correct" strict implementation
13:14:54 <elliott> As in you don't need to rewrite map for efficiency on strict lists
13:15:43 -!- itidus21 has quit (Read error: Connection timed out).
13:15:46 <Jafet> How would it be more efficient?
13:16:08 <elliott> Than what?
13:16:11 -!- itidus21 has joined.
13:16:20 <Jafet> map on a non-strict list.
13:16:30 <elliott> It wouldn't, it'd just be properly strict
13:16:32 -!- sllide has joined.
13:16:45 <elliott> I guess that Haskell stuff gtes you the same, but really nobody wants to write in that
13:17:23 <Jafet> That would suck, actually, since you'd need a stack or a reversal.
13:18:27 <Jafet> Either way, it's a linear amount of extra space.
13:19:51 <elliott> Jafet: What would suck?
13:20:12 <Jafet> map on strict lists.
13:20:45 <elliott> Jafet: Well, I'm not saying strict languages are a party.
13:20:56 <elliott> But people do map over strict lists quite an awful lot In The Real World, it has to be said. :p
13:21:10 <Jafet> It's kind of egregious when a strict solution uses more space than the lazy one.
13:21:27 <elliott> But the main thing is that I could write !(Value,Value) as a type, dammit, rather than defining my own fucking tuples.
13:21:31 <Jafet> Well, you save a bit of space from unboxing, but it's not enough.
13:21:50 <Jafet> (#,#)
13:22:32 <Jafet> Do you need strict tuples that often, or do you just want unboxed tuples
13:22:50 <elliott> infix 0 :@
13:22:50 <elliott> data Point = (:@) {-# UNPACK #-} !Value {-# UNPACK #-} !Value deriving (Eq, Ord, Show)
13:22:51 <elliott> I want these
13:23:06 <elliott> Except without the part where I reimplement tons of things for them and the constructor/destructor syntax isn't as nice as (a,b)
13:23:15 <elliott> Unboxed tuples wouldn't even remotely work, I need to return these things
13:23:23 <Jafet> Well, you can fix the tuple type system while you're at it.
13:23:30 <elliott> Tuple type system?
13:24:06 -!- Taneb has quit (Read error: Connection reset by peer).
13:24:22 <Jafet> So you can write tail (a,b,c...) and get (b,c...)
13:24:36 -!- elliott has changed nick to Clippy.
13:24:40 <Jafet> Then init (x,y,z,w) = (x,y,z)
13:24:42 <Clippy> It looks like you're writing HLists.
13:24:44 <Clippy> - Bow to Oleg
13:24:47 <Clippy> - Continue futility
13:24:50 <Clippy> - Bug the GHC developers
13:24:51 -!- Clippy has changed nick to elliott.
13:25:39 <elliott> Everyone loves Clippy.
13:25:52 <elliott> If you disagree, reconsider your opinions.
13:26:12 <Jafet> Eh pops up at the right time and doesn't afraid of anything.
13:26:28 <elliott> Except rejection.
13:26:31 <Jafet> @google openoffice.org clippy
13:26:32 <lambdabot> http://www.oooforum.org/forum/viewtopic.phtml?t=50110
13:26:44 <elliott> Finally I can switch to Linux.
13:28:37 <Jafet> http://www.oooforum.org/forum/viewtopic.phtml?t=22401
13:28:46 <Jafet> 10% of people actually want it.
13:29:54 <Jafet> That's probably more people than the people who want, say, auto-turn-everything-that-could-possibly-be-interpreted-as-a-date-into-a-date-even-American-so-called-dates in spreadsheets.
13:30:32 <elliott> Really, American dates aren't that bad. PDPs had integers like that, you know.
13:30:45 <elliott> I wonder if PDPs were fast at handling American dates.
13:33:06 -!- sebbu has quit (Read error: Connection reset by peer).
13:35:24 -!- sebbu has joined.
13:35:24 -!- sebbu has quit (Changing host).
13:35:24 -!- sebbu has joined.
13:38:35 -!- ais523 has joined.
13:45:53 <ais523> something that came up at my job, and people might have ideas on here: what's the easiest (ideally fully-automated) way to get all the email sent to a gmail account into an mbox file or equivalent easily machine-readable format?
13:46:05 <ais523> I'm assuming it involves IMAP somewhere
13:47:34 * ais523 goes and checks CPAN
13:47:36 <elliott> step one
13:47:36 <elliott> imap
13:47:39 <elliott> step two
13:47:40 <elliott> done
13:47:46 <elliott> gmail has imap interface, so just enable it and... use a client
13:47:50 <elliott> a standard imap client
13:47:53 <ais523> yep, I'm wondering where to get an appropriate IMAP client
13:48:03 <ais523> using Evolution is obviously silly
13:48:05 <elliott> fetchmail :-)
13:48:12 <elliott> note: joke. joke. joke. no. joke.
13:48:17 <ais523> I thought it might be
13:48:32 <elliott> ais523: At least do Maildir rather than mbox.
13:48:42 <ais523> what's the difference?
13:48:50 <elliott> Maildir isn't useless.
13:49:18 <ais523> well, the application is: I want to perform an operation on the text and subject line of every email emailed to a particular gmail account
13:49:28 <elliott> It has a file per message and actually supports more than one application accessing a file without like totally rewriting it.
13:49:28 <ais523> (using gmail wasn't my choice here, and seems a little inappropriate for the task)
13:49:42 <elliott> It's easy to implement, http://en.wikipedia.org/wiki/Maildir#Technical_operation
13:49:48 <ais523> there's only the one application accessing the account
13:49:50 <elliott> ais523: bayes has code for this :-)
13:49:53 <ais523> it's dedicated for the one task only
13:49:58 <elliott> though you'd have to ask comex if he has a copy of it
13:50:00 <elliott> and it's Python
13:50:01 <ais523> elliott: aha, it probably does
13:50:09 <elliott> well, I forget what bayes operated on
13:50:12 <ais523> language isn't really important, although I don't like Python
13:50:14 <elliott> might have been imap, might have been mbox
13:50:21 <elliott> but python has imap too so that's like three extra lines
13:50:24 <elliott> ais523: i don't either but it worked at the time
13:50:25 <itidus21> `log language
13:50:33 <elliott> ais523: I'm really surprised Bayes worked, really
13:50:39 <itidus21> `log language
13:50:46 <ais523> elliott: the same is true of most programs
13:50:47 <HackEgo> 2007-08-19.txt:22:24:16: <Overand> Gurami: my favorite language for web development is english - I requie all web users to phrase queries in plain english, then I write my answer out in cursive german, which an OCR program will scan, and translate to english, then feed back to the user.
13:50:47 <HackEgo> 2005-07-16.txt:07:25:12: <calamari> that's interesting though.. I wonder what a programming language would look like if the ancient egyptians had computers
13:50:55 <ais523> I'm surprised my quick hacks to OCaml's parser this morning worked
13:51:00 <ais523> and to its main evaluation loop
13:51:05 <elliott> did Bayes ever actually do well at the AAA?
13:51:15 <elliott> it played perfectly, but I don't remember if that translated into real success
13:51:16 <itidus21> `log really important
13:51:16 <ais523> the AAA collapsed before it had much of a chance, IIRC
13:51:19 <HackEgo> 2008-04-04.txt:19:06:07: <ais523> but it's really important in sed
13:51:23 <itidus21> `log really important
13:51:27 <HackEgo> 2011-09-17.txt:13:51:16: <itidus21> `log really important
13:51:31 <itidus21> `log really important
13:51:34 <HackEgo> 2010-01-25.txt:22:02:48: <cpressey> If it was really important for me to get clang running, I probably would have tried it in the VM. But for kicks, it's hey, let's try cygwin!!
13:51:43 <itidus21> `log really important
13:51:46 <HackEgo> 2010-10-16.txt:15:01:08: <elliott> catseye: is the windows partition really important? i'd have just upgraded the ubuntu install
13:52:00 * itidus21 sidles away
13:52:22 <elliott> ais523: hmm, partnerships weren't stripped of personhood, right?
13:52:37 <elliott> ...never mind :P
13:52:38 <itidus21> `log personhood
13:52:41 <HackEgo> 2010-10-20.txt:00:04:00: <cpressey> trees have personhood
13:52:43 <ais523> yes, they were
13:52:46 <itidus21> `log personhood
13:52:49 <HackEgo> 2010-10-20.txt:00:04:00: <cpressey> trees have personhood
13:52:53 <ais523> I know I tried to argue that they were still nonetheless players
13:52:58 <elliott> hmm, I thought that was ruled R101-violating
13:52:58 <itidus21> `log personhood
13:52:58 <ais523> until someone explicitly deregistered them
13:53:01 <HackEgo> 2010-09-12.txt:07:51:52: <Sgeo> Does U.S. Law, which might contain legal fictions (corporate personhood, for example), constitute a fictitious world?
13:53:11 <ais523> but I think it was decided that the undefinition of concepts caused partnerships to cease to exist
13:53:13 <elliott> seems an easy way to circumvent R101; depersonalise something, abuse it, then repersonalise it
13:53:16 <elliott> ais523: heh
13:53:21 <elliott> `log nomic
13:53:24 <HackEgo> 2010-09-17.txt:05:44:25: <pikhq> Less so culturally, but very much so economically.
13:53:38 <ais523> `log \bnomic\b
13:53:40 <itidus21> nice abuse of nomic
13:53:41 <HackEgo> 2007-12-28.txt:00:17:49: <ihope> Small world, I guess. I conclude that everyone here is interested in Nomic.
13:53:53 <ais523> egrep recognises \b? nice
13:54:08 <itidus21> `log recogni
13:54:12 <HackEgo> 2008-05-08.txt:15:36:17: <ehird> Monticello recognizes your monkey patches and even version controls them
13:54:23 <ais523> elliott: ooh, that sounds useful
13:54:38 <itidus21> `log recogni
13:54:41 <elliott> ais523: I'm sure Feather's VCS could do that
13:54:42 <HackEgo> 2007-04-17.txt:02:37:31: <SevenInchBread> if the filesystem recognizes content types... then it can be smart about handling them. audio is typically large, and edited infrequently... while a swap file stays roughly the same most of the time, but will be written and read from frequently.
13:54:42 <ais523> I was planning to diff my unpacked OCaml directory against the original, ignoring files that didn't exist in both, to find my monkeypatches
13:54:48 <ais523> elliott: Feather has a VCS?
13:54:51 <ais523> do you mean @'s VCS?
13:54:53 <elliott> Monticello is a Smalltalk thing, so presumably?
13:55:01 <ais523> oh, I see
13:55:03 <itidus21> `log VCS
13:55:07 <HackEgo> 2010-03-01.txt:11:58:55: <scarf> one thing I've been thinking about recently is designing my own VCS
13:55:16 <ais523> haha, it begins
13:55:18 <elliott> Ha, what does that scarf know about VCSes.
13:55:20 <elliott> He should try scapegoat.
13:55:24 -!- ais523 has changed nick to scarf.
13:55:24 <elliott> It'll beat whatever crappy idea HE has.
13:55:27 <scarf> heh
13:55:29 -!- scarf has changed nick to ais523.
13:55:44 * itidus21 abuses `log
13:55:53 <ais523> `log
13:55:55 <HackEgo> 2011-03-16.txt:02:53:07: <quintopia> indeed, it is impossible to give an answer inadvertently
13:55:56 <elliott> ?tell scarf I'm from the future! Turns out your VCS sucks. Actually it wiped out half the human population. Thanks a bunch.
13:55:56 <lambdabot> Consider it noted.
13:56:19 * itidus21 leaves lesions and trauma on `log
13:56:24 <ais523> elliott: you're getting sg and feather muddled again
13:56:33 <ais523> anyway, I'm pretty sure I know what a Feather program is
13:56:39 <elliott> ais523: the folly is pretending all these concepts can be separated
13:56:49 <ais523> it's a sequence of program fragments that, when run, transform a Feather interpreter into a new state
13:57:01 <ais523> I'm not sure if output is possible, but luckily it's an esolang, so I don't really mind
13:57:30 <itidus21> `log ton
13:57:34 <HackEgo> 2010-04-19.txt:16:38:52: -!- Tritonio_GR has quit (Read error: Connection reset by peer).
13:57:42 <itidus21> `log fuckton
13:57:45 <HackEgo> 2010-03-13.txt:18:25:41: <Gregor> pikhq: Y'know, I'm starting to think that metric fucktons aren't even a real unit!
13:57:54 <itidus21> yes they are
13:58:07 <itidus21> blasphemy
13:58:21 <itidus21> jk,,
13:58:50 <itidus21> `log fuckton
13:58:53 <HackEgo> 2010-10-17.txt:17:57:02: <elliott> pikhq: I think we are up for a FUCKTON of flashbacks.
13:59:46 <itidus21> why are people always addressing pikhq with the word fuckton i wonder
14:00:15 <elliott> Always=two.
14:00:18 <itidus21> lets take another dip
14:00:18 <elliott> Two=infinity.
14:00:20 <itidus21> `log fuckton
14:00:21 <elliott> Zero, one, infinity.
14:00:24 <HackEgo> 2011-09-17.txt:13:58:50: <itidus21> `log fuckton
14:00:28 <itidus21> `log fuckton
14:00:31 <HackEgo> 2011-09-12.txt:03:52:40: <Gregor> As per how many files, roughly a metric fuckton.
14:00:57 <itidus21> so it seems gregor's faith in that metric is stable
14:01:06 <itidus21> ok my sample size was too small
14:01:33 <itidus21> `log fuckton
14:01:37 <HackEgo> 2009-06-18.txt:21:10:58: <ehird> pikhq: metric fuckton?
14:01:59 <itidus21> wtf.. some freeeaky pattern there
14:02:18 <itidus21> gestures
14:13:46 -!- Taneb has joined.
14:17:59 -!- hagb4rd|zzZ has changed nick to hagb4rd.
14:29:06 -!- Taneb has quit (Read error: Connection reset by peer).
14:35:24 -!- Patashu has quit (Ping timeout: 258 seconds).
14:39:15 -!- Taneb has joined.
15:13:04 -!- derrik has joined.
15:15:31 -!- Taneb_ has joined.
15:17:56 -!- sebbu2 has joined.
15:18:08 -!- Taneb has quit (Ping timeout: 252 seconds).
15:21:20 -!- sebbu has quit (Ping timeout: 252 seconds).
15:25:06 -!- Taneb_ has quit (Ping timeout: 252 seconds).
15:38:18 -!- sebbu2 has changed nick to sebbbu.
15:39:20 -!- calamari has joined.
15:59:22 <Gregor> `pastelogs fuckton
15:59:28 <HackEgo> http://codu.org/projects/hackbot/fshg/index.cgi/raw-file/tip/paste/paste.3409
16:00:35 <Gregor> Welp, I'm the first person to ever say "fuckton" in this channel.
16:00:38 <Gregor> Pretty proud of that.
16:00:47 <Gregor> Also the first person to say "metric fuckton"
16:01:13 <ais523> isn't a metric fuckton slightly smaller than an imperial fuckton?
16:01:24 <Gregor> ais523: According to our own logs, slightly /larger/
16:01:28 <ais523> ah, aha
16:01:57 <Gregor> `run sed 's/\(.*metric\)/ \1/gi' paste/paste.3409 | paste
16:01:59 <HackEgo> http://codu.org/projects/hackbot/fshg/index.cgi/raw-file/tip/paste/paste.5111
16:02:32 <Gregor> Looks like about half of all fuckton mentions are qualified.
16:28:08 -!- sebbbu has quit (Read error: Connection reset by peer).
16:30:37 -!- sebbbu has joined.
16:35:33 -!- sebbbu has changed nick to sebbu.
16:35:47 -!- sebbu has quit (Changing host).
16:35:48 -!- sebbu has joined.
16:46:35 -!- ive has joined.
16:46:43 -!- Freedom666 has joined.
16:47:36 -!- Freedom666 has left.
16:48:06 <elliott> ?hoogle Q [Q a] -> [Q a]
16:48:07 <lambdabot> Language.Haskell.TH appsE :: [ExpQ] -> ExpQ
16:48:07 <lambdabot> Language.Haskell.TH listE :: [ExpQ] -> ExpQ
16:48:07 <lambdabot> Language.Haskell.TH tupE :: [ExpQ] -> ExpQ
16:48:08 <elliott> That won't work >_>
16:48:17 <elliott> ?hoogle m [m a] -> [m a]
16:48:17 <lambdabot> Data.List transpose :: [[a]] -> [[a]]
16:48:17 <lambdabot> Control.Monad msum :: MonadPlus m => [m a] -> m a
16:48:17 <lambdabot> Test.QuickCheck oneof :: [Gen a] -> Gen a
16:48:19 <elliott> BUT I MIGHT AS WELL TRY
16:48:53 -!- derrik has quit (Quit: gone).
16:49:21 <Deewiant> elliott: (Parsec3, Text) -> (Trifecta, ByteString): 6 files changed, 263 insertions(+), 202 deletions(-)
16:49:38 <elliott> Deewiant: Nice
16:49:41 <elliott> Deewiant: I logpinged you repeatedly
16:49:43 <elliott> w/ edwardk comments
16:49:48 <Deewiant> I noticed
16:50:12 <Deewiant> Nice to know that the tab thing is in the works
16:51:12 <Deewiant> Dang, 12% of this file is imports now
16:51:21 <elliott> :-D
16:51:29 <elliott> Deewiant: Be thankful, you're not dealing with TH like I am
16:51:34 <Deewiant> I don't think I've ever had 8 qualified imports in one module
16:52:00 <elliott> Gotta love a library where the recommended calling convention for the API functions is "they all take monadic values and return monadic values, except that, if it's a list, it's actually a pure list of monadic values, and..."
16:55:27 <Deewiant> Whoops, make that 214 deletions
16:59:32 <elliott> Deewiant: Can you shoot whoever wrote the cereal package for me, thanks
16:59:52 <elliott> What kind of horrible person adds functions for serialising WordNs for various N in little-endian BUT NOT INTS
16:59:56 <elliott> WHAT AM I MEANT TO DOOOOO
17:00:05 <elliott> (Okay I guess I can just fromIntegral it and it'll be fine but still)
17:01:43 <Deewiant> elliott: That'd be "Galois Inc." and some others
17:03:14 <elliott> Deewiant: DAMN YOU GALOIS INC.
17:03:20 <elliott> module MC.Protocol.Helpers
17:03:20 <elliott> ( putInt16be
17:03:20 <elliott> , putInt32be
17:03:20 <elliott> , putInt64be
17:03:20 <elliott> , putTextUCS2be
17:03:21 <elliott> ) where
17:03:26 <elliott> Finally my code is becoming a mess already
17:03:31 <elliott> Just what I always secretly wanted
17:19:21 -!- azaq23 has joined.
17:19:22 -!- azaq23 has quit (Changing host).
17:19:22 -!- azaq23 has joined.
17:28:09 -!- calamari has quit (Quit: Leaving).
17:48:02 <fizzie> Deewiant: My xmonad.hs has six qualified imports, and they're named using the "1-3-letter all-uppercase cryptic acronyms" style elliott hates. (Though three of them probably have no real business to be qualified.)
17:49:40 <elliott> fizzie: I thought you used so-called ``awesome''.
17:49:53 <Deewiant> At least I can recognize five of these eight abbreviations out of context
17:50:02 <elliott> Also, as far as hating them goes, I realised my style was totally inconsistent and switched to Deewiant's
17:50:06 <elliott> Bit of an existential crisis there
17:50:07 <Deewiant> as BS
17:50:07 <Deewiant> as BSL
17:50:07 <Deewiant> as UTF8
17:50:07 <Deewiant> as F
17:50:07 <Deewiant> as IM
17:50:09 <Deewiant> as IS
17:50:12 <Deewiant> as PP
17:50:14 <Deewiant> as TriD
17:50:23 <elliott> Deewiant: I gently request "B" instead of "BS", on behalf of programmers worldwid.e
17:50:25 <elliott> worldwide.
17:50:28 <elliott> I mean come on, BS.
17:50:33 <elliott> Also it: is shorter.
17:50:35 <fizzie> elliott: I made the plunge a month ago.
17:50:43 <fizzie> Deewiant: HT, W, T, DBA, DBC, DBT.
17:50:47 <Deewiant> Actually I just remembered that BSL should be BL
17:50:51 <elliott> fizzie: I hope you've enjoyed your plungerating.
17:51:00 <fizzie> elliott: At Least It's Not Lua(tm).
17:51:22 <Deewiant> Anyway, BS is intentional precisely because it's BS
17:51:49 <Deewiant> UTF8 should probably be BS_UTF8 but meh
17:52:26 <elliott> fizzie: I should probably try out xmonad sometime myself. I mean, there's something to be said for being under fifty lines.
17:52:32 <elliott> Deewiant: What exactly is the BS_UTF8 module
17:52:41 <Deewiant> Data.ByteString.UTF8
17:53:31 <elliott> I'd go for BUTF8
17:53:35 <elliott> Beautiful eight.
17:53:39 <olsner> Data.BullShit.UTF8
17:53:41 <Deewiant> Butt F8
17:53:44 <elliott> Meanwhilst, from the land of generated code:
17:53:45 <elliott> 1 -> Control.Monad.ap
17:53:45 <elliott> (Control.Monad.ap
17:53:45 <elliott> (Control.Monad.ap
17:53:45 <elliott> (Control.Monad.ap
17:53:45 <elliott> (Control.Monad.ap
17:53:45 <fizzie> elliott: So far I like it, even though my setup (Gnome-2 session running XMonad as the WM, with a gnome-panel instance holding all those indicator schwubblets and a systray) is probably something that would make "real XMonadists" go up in flames.
17:53:46 <elliott> (Control.Monad.ap
17:53:48 <elliott> (Control.Monad.ap
17:53:50 <elliott> (Control.Monad.ap
17:53:52 <elliott> (Control.Applicative.pure CLogin)
17:53:54 <elliott> MC.Protocol.Helpers.putInt32be)
17:53:56 <elliott> MC.Protocol.Helpers.putTextUCS2be)
17:53:58 <elliott> MC.Protocol.Helpers.putInt64be)
17:54:00 <elliott> MC.Protocol.Helpers.putInt32be)
17:54:02 <elliott> Data.Serialize.Put.putWord8)
17:54:04 <elliott> Data.Serialize.Put.putWord8)
17:54:08 <elliott> Data.Serialize.Put.putWord8)
17:54:10 <elliott> Data.Serialize.Put.putWord8 } }
17:54:13 <fizzie> Oh no, I messed up the pretty triangle. :(
17:54:16 <elliott> fizzie: Pretty sure PROMINENT XMONAD COMMUNITY MEMBERS(tm) do the Gnome thing too.
17:54:22 <elliott> And yes, you are disgusting.
17:54:41 <elliott> Now if you stay quiet for a second, you will hear the sound of Deewiant yelling USE <ASTERISK>
17:54:43 -!- DH____ has quit (Read error: Connection reset by peer).
17:54:47 <elliott> He will then type the asterisk, enabling my use of it
17:55:04 -!- DH____ has joined.
17:55:11 <Deewiant> <*>
17:55:20 <elliott> Also he might tell me that it should be get instead of put there and he'd be EXACTLY RIGHT.
17:55:57 <elliott> 1 -> ((((((((Control.Applicative.pure CLogin
17:55:57 <elliott> Control.Applicative.<*>
17:55:57 <elliott> MC.Protocol.Helpers.getInt32be)
17:55:57 <elliott> Control.Applicative.<*>
17:55:57 <elliott> MC.Protocol.Helpers.getTextUCS2be)
17:55:58 <elliott> Control.Applicative.<*>
17:55:59 <elliott> MC.Protocol.Helpers.getInt64be)
17:56:02 <elliott> Control.Applicative.<*>
17:56:03 <elliott> MC.Protocol.Helpers.getInt32be)
17:56:05 <elliott> Control.Applicative.<*>
17:56:09 <elliott> Data.Serialize.Get.getWord8)
17:56:11 <elliott> Control.Applicative.<*>
17:56:16 <elliott> Data.Serialize.Get.getWord8)
17:56:16 <elliott> Control.Applicative.<*>
17:56:17 <elliott> Data.Serialize.Get.getWord8)
17:56:19 <elliott> Control.Applicative.<*>
17:56:21 <elliott> Data.Serialize.Get.getWord8) } }
17:56:23 * copumpkin sighs
17:56:25 <elliott> Isn't it pretty?
17:56:28 <Deewiant> elliott: Do you need those brackets
17:56:31 <fizzie> I also have a dzen2-for-each-monitor statusbars thing fed by a separate proggie that receives status updates via DBus, and the XMonad.Layout.IndependentScreen thing that makes workspaces local per screen (as in Awesome), which I guess are non-conventional things to do also.
17:56:32 <Deewiant> elliott: Also btw henceforth when I use first/second if you yell at me about arrows I'll say they're from Data.Bifunctor
17:56:35 <fizzie> The sauna. ->
17:56:45 <elliott> Deewiant: (a) This is GHC printing its generated splice code
17:56:48 <elliott> All this is from TH
17:56:52 <elliott> Deewiant: (b) Okay
17:56:58 <elliott> copumpkin: Do you have a highlight on applicative or something
17:57:03 <copumpkin> nope
17:57:10 <elliott> Or were you just expressing general disapproval of my beautiful exhibits
17:57:36 <Deewiant> elliott: And if you can find me an (&&&) outside Control.Arrow I can drop arrows entirely
17:57:49 <elliott> :t (&&&)
17:57:50 <lambdabot> forall (a :: * -> * -> *) b c c'. (Arrow a) => a b c -> a b c' -> a b (c, c')
17:57:53 <elliott> Hayoo time
17:58:00 <Deewiant> \f g -> bimap f g . join (,)
17:58:31 <Deewiant> It exists in various places IIRC but nowhere nice :-P
17:58:38 <elliott> http://hackage.haskell.org/packages/archive/data-aviary/latest/doc/html/Data-Aviary-Functional.html#v:(&&&)
17:58:38 <elliott> http://hackage.haskell.org/packages/archive/uulib/latest/doc/html/UU-Util-Utils.html#v:split
17:58:40 <elliott> http://hackage.haskell.org/packages/archive/pointless-haskell/latest/doc/html/Generics-Pointless-Combinators.html#v:(/\)
17:58:41 <elliott> http://hackage.haskell.org/packages/archive/Agda/latest/doc/html/Agda-Utils-Tuple.html#v:(/\)
17:58:43 <elliott> http://hackage.haskell.org/packages/archive/hamusic/latest/doc/html/Music-Analysis-PF.html#v:split
17:58:46 <Deewiant> Yes, exactly
17:58:48 <elliott> I suggest the Agda or hamusic one. :p
17:58:52 <elliott> Deewiant: Well, hmm
17:58:53 <Deewiant> Yes, exactly not :-P
17:59:10 <elliott> http://hackage.haskell.org/package/pointless-haskell-0.0.5 does not look so bad, though it depends on haskell98 and duplicates a lot of edwardk packages ;-)
17:59:29 <Deewiant> Yes, the duplication is the main problem :-P
17:59:31 <elliott> uulib is apparently the parsing library? I assumed it'd just be a grab-bag of Utrecht-style insanity
17:59:44 <elliott> Oh, data-aviary is just a set of combinator birds
17:59:48 <elliott> That's not so bad, is't?
17:59:52 <elliott> Though it certainly has all the stupid names. :p
18:00:05 <elliott> Oh, Data.Aviary.Functional: "This is for reference (obviously) and is not intended for use."
18:00:17 <elliott> Deewiant: In conclusion, I recommend depending on Agda
18:00:24 <Deewiant> Not hamusic?
18:00:31 <elliott> Deewiant: It uses the older Haddock CSS
18:00:33 <elliott> I don't like that
18:01:00 <elliott> Deewiant: More seriously though, I might just make my own package of "Arrow shit except specialised to functions"
18:01:05 <elliott> Since I want it, too
18:01:15 <elliott> The question is where to put them, module-wise :P
18:01:19 <elliott> Data.Function.Extra is gross
18:01:20 <Deewiant> Make it a "tuple helpers" instead
18:01:28 <elliott> Deewiant: What about arrowchoice
18:01:29 <Deewiant> And add Trifunctors etc
18:01:33 <Deewiant> Nobody uses arrowchoice
18:01:45 <elliott> Deewiant: But okay, tuple helpers sounds decent
18:01:48 <elliott> Data.Function.Tuple?
18:01:53 <Deewiant> Data.Tuple already exists
18:02:01 <Deewiant> Data.Tuple.ElliottsExtrasEmporium
18:02:08 <elliott> Yes, which is why I'm trying to think of logical other names
18:02:21 <Deewiant> I meant that I'd put it under Data.Tuple
18:02:30 <elliott> Data.Tuple.Combinators?
18:02:40 <elliott> That seems reasonable, if a little long
18:02:48 <Deewiant> That's not long
18:02:54 <Deewiant> System.Console.Terminfo.PrettyPrint is long
18:02:58 <elliott> Your mind is warped by the trifecta
18:03:04 <Deewiant> That's not trifecta
18:03:13 <elliott> s/trifecta/edwardk/ :-P
18:03:30 <Deewiant> And hey, Data.ListTrie.Patricia.Map.Enum
18:03:35 <Deewiant> That's long too
18:03:44 <elliott> Deewiant: I'm so glad I put GPipe stuff on the back-burner
18:03:46 <Deewiant> But it's only ever imported qualified so it doesn't matter for my alignment purposes
18:03:56 <elliott> Means I'm not dealing with your awful library :-D
18:04:04 <Deewiant> :-(
18:04:12 <elliott> OK, beautiful library with ugly typeclasses.
18:04:25 <Deewiant> Which you haven't fixed yet
18:04:28 <Deewiant> Or where did we end up with that
18:04:32 <elliott> Like I said, I put GPipe stuff on the backburner
18:04:38 <Deewiant> Yeah okay
18:04:44 <elliott> It's not hard to fix at all, it's just a lot of tedious work :P
18:04:46 <Deewiant> I'm just wondering if you'd given up on it or if we were stuck on something else
18:04:58 <elliott> Deewiant: So (&&&) isn't a very nice name
18:05:09 <Deewiant> I don't care about the name
18:05:16 <elliott> You probably care about whether it's infix or not
18:05:23 <Deewiant> Not that much
18:05:26 <Deewiant> I'm fine with bimap instead of ***
18:05:31 <Deewiant> I think, at least
18:05:41 <Deewiant> I haven't used either *** or &&& lately
18:05:44 <elliott> What type does (\f g -> bimap f g . join (,)) actually come out to
18:06:01 <Deewiant> \f g -> bimap f g . join (,) :: (c -> b) -> (c -> d) -> c -> (b, d)
18:07:49 <Deewiant> (Same as with (***))
18:08:17 <elliott> Oh, I thought it'd end up with some funky bifunctor crap in the type
18:08:31 <Deewiant> The (,) makes it be a pair
18:08:39 <Deewiant> And that's the only bifunctor crap there could be
18:09:06 <ais523> <Esolang> Brainlove adds a few more commands to brainfuck in order to make it easier to program in.
18:09:08 <ais523> oh dear
18:09:10 <elliott> ais523: augh
18:09:12 <elliott> ?hoogle showHex
18:09:12 <lambdabot> Numeric showHex :: Integral a => a -> ShowS
18:09:23 <elliott> > showHex 99 "a"
18:09:24 <lambdabot> "63a"
18:10:10 <ais523> it seems to be BF + one register that can be copied to/from tape + until loop + instruction that makes while/unless into if/unless
18:11:29 <Deewiant> I always think of http://i.imgur.com/6Ybge.jpg when elliott says "augh"
18:11:40 <elliott> Fairly accurate
18:12:38 <elliott> Has anyone here who is Deewiant used lazy bytestrings
18:12:48 <Deewiant> Yes
18:12:52 <elliott> Excellent
18:13:03 <elliott> Deewiant: I take it doing the equivalent of getContents for a lazy bytestring isn't a Done Thing
18:13:16 <elliott> It's only that, I just realised that cereal only works on bytestrings
18:13:20 <elliott> And the data is variable length
18:13:27 <elliott> So I have no idea how many bytes to read
18:13:27 <elliott> So
18:13:27 <elliott> Yeah
18:13:35 <elliott> I could do my own buffering but I'd rather it be more automatic
18:13:36 <elliott> Oh hmm
18:13:38 <elliott> Constructors
18:13:38 <elliott> Fail String
18:13:38 <elliott> The parse failed. The String is the message describing the error, if any.
18:13:38 <elliott> Partial (ByteString -> Result r)
18:13:39 <elliott> Supply this continuation with more input so that the parser can resume. To indicate that no more input is available, use an empty string.
18:13:43 <elliott> Done r ByteString
18:13:45 <elliott> The parse succeeded. The ByteString is the input that had not yet been consumed (if any) when the parse succeeded.
18:13:48 <elliott> Yeah okay this should work
18:13:55 <Deewiant> Glad I could help
18:13:56 <elliott> I'll still have to keep my own buffer but that's pretty good
18:14:01 <elliott> Deewiant: You're very welcome
18:14:18 <elliott> Deewiant: To thank you for your help, here's a horrible function: http://sprunge.us/ASLM
18:14:30 <elliott> Actually that's probably the prettiest TH code I've written yet
18:14:31 <Deewiant> Looks fine to me
18:14:36 <Deewiant> The average identifier length far exceeds 1
18:14:42 <elliott> Deewiant: Quick, what does it do, tell me in ten seconds
18:14:43 <Deewiant> Compare to trifecta
18:14:45 <elliott> No cheating
18:14:58 <elliott> Also no looking at the function body which makes it obvious :-P
18:15:10 <Deewiant> Too late, I already looked before you asked
18:15:30 <elliott> Dammit
18:15:41 -!- copumpkin has quit (Quit: Computer has gone to sleep.).
18:15:43 <elliott> let x = 0 of type UNSIGNED byte
18:15:43 <elliott> while (x = read byte from stream) does not equal 127:
18:15:44 <elliott> select based on value of (x >> 5):
18:15:44 <elliott> case 0: read byte from stream
18:15:44 <elliott> case 1: read short from stream
18:15:44 <elliott> case 2: read int from stream
18:15:46 <elliott> case 3: read float from stream
18:15:48 <elliott> case 4: read string (UCS-2) from stream
18:15:50 <elliott> case 5: read short, byte, short from stream; save as item stack (id, count, damage, respectively)
18:15:52 -!- zzo38 has joined.
18:15:53 <elliott> case 6: read int, int, int from stream; save as extra entity information.
18:15:55 <elliott> end select
18:15:57 <elliott> end while
18:15:59 <elliott> What a beautiful serialisation.
18:16:01 <elliott> By beautiful, I mean ``augh''.
18:19:50 <ais523> is that pseudocode? or some language I'm not aware of?
18:19:54 <Deewiant> elliott: (x *> ((:) <$> y) <* z <*> w) or ((:) <$> (x *> y) <* z <*> w) or ((:) <$> (x *> y <* z) <*> w)
18:19:59 <ais523> oh, must be pseudocode because of the "respectively"
18:20:00 <Deewiant> Question mark
18:20:12 <ais523> the only language I can think of that has something even vaguely corresponding to that is COBOL
18:20:15 <elliott> ais523: pseudocode, yeah
18:20:27 <elliott> Deewiant: Um
18:20:33 <ais523> err, pun unintentional
18:20:35 <elliott> ?. undo unpl ((:) <$> (x *> y) <* z <*> w)
18:20:35 <lambdabot> (((((:)) <$> (x *> y)) <* z) <*> w)
18:20:38 <elliott> God dammit
18:20:41 <ais523> and probably will be missed unless you know at least a bit of COBOL
18:20:44 <elliott> ?. do unpl ((:) <$> (x *> y) <* z <*> w)
18:20:45 <lambdabot> (((((:)) <$> (x *> y)) <* z) <*> w)
18:20:47 <elliott> God dammit
18:20:53 <elliott> ?. do unpl ((:) `fmap` (x *> y) <* z `ap` w)
18:20:53 <lambdabot> (do { b <- ((fmap ((:)) (x *> y)) <* z); a <- w; return (b a)})
18:21:00 <elliott> ?. do unpl ((:) `fmap` (x >> y) <* z `ap` w)
18:21:00 <lambdabot> (do { b <- ((fmap ((:)) (do { x; y})) <* z); a <- w; return (b a)})
18:21:25 <elliott> ?do let q a b = do x <- a; b; return x in (do { b <- ((fmap ((:)) (do { x; y})) `q` z); a <- w; return (b a)})
18:21:26 <lambdabot> let { q a b = do { x <- a; b; return x}} in (do { b <- ((fmap ((:)) (do { x; y})) `q` z); a <- w; return (b a)})
18:21:28 <elliott> >_<<
18:21:29 <elliott> >_<
18:21:36 <elliott> Deewiant: Yeah, I recommend something that looks nothing like that
18:21:58 <Deewiant> I'll just take the first option then
18:22:59 <Deewiant> Well, I suppose I could use (:) <$> between x z y <*> w
18:25:40 <elliott> Hey Deewiant, what should I prefix/suffix/whatever field constructors with
18:25:49 <elliott> "string" and "bool" are a bit too close to clashing wit things for comfort
18:26:02 <elliott> f_ prefix is ugly, fInt is hideous, intF/stringF/... are just kinda weird
18:26:09 <elliott> Clearly you have the perfect solution
18:26:12 <Deewiant> Some say "don't, import qualified"
18:26:15 <olsner> Deewiant: or something with liftA2 (:) or liftM2 (:), if you haven't already been there
18:26:21 <elliott> Deewiant: Hmm, that might actually be a good idea here
18:26:48 <elliott> Yeah, that should work
18:26:59 <elliott> Although "TF." is a bit long a prefix
18:27:06 <elliott> I don't want F., that's reserved for Foldable
18:38:39 -!- Taneb has joined.
18:40:06 <Taneb> How about GHost?
18:40:26 <Taneb> I'm not sure why I said that
18:49:51 -!- copumpkin has joined.
19:04:11 -!- Taneb has changed nick to Taneb|Hovercraft.
19:04:34 -!- oerjan has joined.
19:04:58 -!- Zuu has quit (Ping timeout: 244 seconds).
19:12:38 -!- Taneb|Hovercraft has changed nick to Taneb.
19:22:34 <oerjan> the Taneb has landed
19:23:39 <zzo38> One feature idea I have for Haskell, is ability to define equivalence classes where you can specify that it should assume everything listed there is equivalent to each other. If the name of an equivalence class is mentioned, it will select whichever one has a matching type (or kind), and if more than one has, it selects one arbitrarily. The equivalence class has its own fixity.
19:24:29 <Taneb> What does anyone think of Salesman?
19:24:37 <Taneb> I'm trying to get opinions and feedback of it
19:24:47 <oerjan> *MWAHAHAHA*
19:24:51 <zzo38> Taneb: OK I will read it
19:24:56 <Taneb> http://esoteric.voxelperfect.net/wiki/User:Taneb/Salesman
19:26:39 <zzo38> OK. Although, examples should be given, and a line break in the description of command 3
19:31:17 <ais523> hmm, the joys of orthogonality: IMAP has a pair of commands that returns a message's UID, one takes a sequence number as argument, the other takes a message's UID as argument
19:31:56 <fizzie> So it takes a message's UID and returns the message's UID?
19:32:05 <ais523> yep
19:32:08 <oerjan> the id-eal command
19:32:29 <fizzie> Does it return some sort of an error for a nonexistent message?
19:32:31 <ais523> the Perl library I'm reading actually has a wrapper for that command that actually sends it across the network
19:32:38 <ais523> umm, I think so
19:32:42 <ais523> but I'm not sure from the docs
19:32:42 <fizzie> Then it's not so id-eal.
19:34:22 <oerjan> @hoogle Set key -> key -> Maybe key
19:34:23 <lambdabot> Did you mean: Set Key -> Key -> Maybe Key /count=20
19:34:23 <lambdabot> Prelude asTypeOf :: a -> a -> a
19:34:23 <lambdabot> Data.Dynamic dynApply :: Dynamic -> Dynamic -> Maybe Dynamic
19:34:47 <Deewiant> elliott:
19:34:50 <Deewiant> > chr 42
19:34:50 <lambdabot> '*'
19:35:03 <oerjan> that could be a useful command for monadic chaining
19:35:25 <oerjan> hm
19:35:28 <oerjan> :t guarding
19:35:29 <lambdabot> Not in scope: `guarding'
19:35:50 <oerjan> i think someone suggested that once...
19:36:11 <oerjan> @hoogle (x -> Bool) -> x -> m x
19:36:11 <lambdabot> Prelude until :: (a -> Bool) -> (a -> a) -> a -> a
19:36:11 <lambdabot> Data.IntMap filter :: (a -> Bool) -> IntMap a -> IntMap a
19:36:11 <lambdabot> Data.Foldable find :: Foldable t => (a -> Bool) -> t a -> Maybe a
19:36:20 <oerjan> @hoogle MonadPlus m => (x -> Bool) -> x -> m x
19:36:20 <lambdabot> Prelude until :: (a -> Bool) -> (a -> a) -> a -> a
19:36:21 <lambdabot> Data.IntMap filter :: (a -> Bool) -> IntMap a -> IntMap a
19:36:21 <lambdabot> Data.Foldable find :: Foldable t => (a -> Bool) -> t a -> Maybe a
19:36:55 <fizzie> ^ord *
19:36:55 <fungot> 42
19:37:00 <fizzie> Unfortunately it doesn't do the inverse.
19:37:08 <Deewiant> ?ty \x s -> fmap (const x) $ guard (Data.Set.member x s)
19:37:08 <lambdabot> forall a (f :: * -> *). (Functor f, Ord a, MonadPlus f) => a -> S.Set a -> f a
19:37:14 <oerjan> ^show ord
19:37:14 <fungot> >>,[[-<+2>[-<+>[-<+>[-<+>[-<+>[-<+>[-<+>[-<+>[-<+>[<[-]+>->+<[<-]]]]]]]]]]>]<2[>+6[<+8>-]<-.[-]<]+32.[-]>>,]
19:37:28 <oerjan> fizzie: hm shouldn't be _too_ hard
19:37:43 <elliott> Deewiant: Can't type dem numbers either
19:39:08 <Deewiant> > map chr [fromIntegral (minBound :: Char)..]
19:39:08 <lambdabot> No instance for (GHC.Real.Integral GHC.Types.Char)
19:39:08 <lambdabot> arising from a use of...
19:39:15 <Deewiant> Oops
19:39:19 <Deewiant> > map chr [ord (minBound :: Char)..]
19:39:20 <lambdabot> "\NUL\SOH\STX\ETX\EOT\ENQ\ACK\a\b\t\n\v\f\r\SO\SI\DLE\DC1\DC2\DC3\DC4\NAK\S...
19:39:25 <Deewiant> Bah
19:39:46 <ais523> hmm, interesting that the backslash-single-character escapes are in a block like that
19:40:19 <Lymee> > text $ "\NUL"
19:40:37 <Lymee> > ord '\NUL'
19:40:38 <lambdabot> 0
19:41:11 <Lymee> ^ord joijio
19:41:11 <fungot> 106 111 105 106 105 111
19:41:23 <Lymee> ^ord
19:41:26 <Lymee> ^ord aa aa
19:41:26 <fungot> 97 97 32 32 32 97 97
19:41:44 <Deewiant> ^ord asterisk
19:41:45 <fungot> 97 115 116 101 114 105 115 107
19:41:49 <Lymee> > ord '\SQH'
19:41:50 <lambdabot> <no location info>:
19:41:50 <lambdabot> lexical error in string/character literal at chara...
19:42:01 <Lymee> > chr 0
19:42:01 <lambdabot> '\NUL'
19:42:02 <Lymee> > chr 1
19:42:03 <lambdabot> '\SOH'
19:42:43 <Lymee> > chr 1 : "ACTION hugs oerjan" ++ [chr 1]
19:42:44 <lambdabot> "\SOHACTION hugs oerjan\SOH"
19:42:51 <Lymee> > text $ chr 1 : "ACTION hugs oerjan" ++ [chr 1]
19:42:52 <lambdabot> ACTION hugs oerjan
19:42:57 <Lymee> :(
19:46:11 -!- Taneb has quit (Remote host closed the connection).
19:46:50 -!- Taneb has joined.
19:51:01 <fizzie> ^bf ,[>[->++++++++++<]>[-<+>]<<------------------------------------------------[>+<-],]>.!42
19:51:01 <fungot> *
19:51:06 <fizzie> ^help
19:51:06 <fungot> ^<lang> <code>; ^def <command> <lang> <code>; ^show [command]; lang=bf/ul, code=text/str:N; ^str 0-9 get/set/add [text]; ^style [style]; ^bool
19:51:17 <fizzie> ^def chr bf ,[>[->++++++++++<]>[-<+>]<<------------------------------------------------[>+<-],]>.
19:51:18 <fungot> Defined.
19:51:21 <fizzie> ^chr 42
19:51:21 <fungot> *
19:51:23 <fizzie> ^save
19:51:23 <fungot> OK.
19:51:32 <fizzie> (Not that elliott can still write any numbers.)
19:52:05 <fizzie> (Human interest point: I first did that the wrong way around.)
19:52:19 <fizzie> ^bf ,[>,]<[>>[-<++++++++++>]<<------------------------------------------------[>+<-]<]>>.!24
19:52:20 <fungot> *
19:52:22 <fizzie> Like that.
19:52:52 <fizzie> ^show chr
19:52:52 <fungot> ,[>[->+10<]>[-<+>]<2-48[>+<-],]>.
19:52:55 -!- Taneb has quit (Remote host closed the connection).
19:54:34 <oerjan> <elliott> The idea with this is that you wouldn't have to define all that, and also wouldn't have to pack/unpack Lazy values (i.e. the reason laziness is awful in strict languages) :P
19:55:01 <oerjan> if you could do this with data/codata instead, it might be useful for dependently typed languages...
19:56:24 <fizzie> ^bf +.,[.,]+.!ACTION still doesn't filter CTCP *shame*
19:56:24 * fungot still doesn't filter CTCP *shame*
19:56:37 <fizzie> "One of these days."
19:56:38 <oerjan> how does agda handle this? does it just define most functions twice for lists and streams?
19:57:18 <oerjan> fizzie: secretly we all prefer it that way, just don't tell any admins
19:58:48 -!- augur has quit (Remote host closed the connection).
19:59:23 <oerjan> or make an exception for ACTION
20:06:25 <fizzie> If I manage to gather the willpower to actually filter it, maybe checking the first word wouldn't be such a huge hassle, yes.
20:09:01 <elliott> Well, we're Plazmaless. :p
20:09:25 <oerjan> we're a zolid bunch
20:09:37 <oerjan> having a gaz
20:10:28 <oerjan> elliott: also, i thought you were the resident agda expert
20:10:57 <elliott> i am?
20:11:09 <oerjan> as in you've actually tried it, or something
20:11:48 <oerjan> i guess some of the #haskellers might be even more likely
20:12:12 <oerjan> (re my data/codata question)
20:14:57 <copumpkin> ?
20:15:19 <copumpkin> yeah, you just define functions twice
20:15:30 <copumpkin> you do the same in haskell, fwiw
20:15:56 <copumpkin> the closest thing to a haskell list is a colist in agda
20:16:09 <oerjan> yes, but it seems like it would be more annoying the more variations of a list there are
20:16:14 <copumpkin> certainly
20:16:26 <copumpkin> which is why people are especially interested in generics in dependent languages
20:16:37 <copumpkin> the levitation stuff in epigram, for example
20:16:47 <copumpkin> or the ornamentation
20:24:34 <zzo38> I want to change rules of Magic: the Gathering cards, I have a lot of ideas.
20:25:12 <zzo38> * Each object which is a card has an initial state, which corresponds to what is printed on the card and is immutable. Other objects have no initial state and cannot be given any.
20:25:59 <zzo38> * When an object moves from one zone to another, except for stack->play, and phasing, the old object is destroyed and a new object created from the old object's initial state is placed in the new zone.
20:26:45 <zzo38> * There is no state-based effect for tokens out of play ceasing to exist. Instead, the above rule applies, which has a similar effect.
20:26:55 <zzo38> * Copies of spells on the stack are the same things as tokens.
20:27:31 <zzo38> * No state based effects for auras or equipments that are also creatures. Something that is both a creature and an aura still is both things with no conflict.
20:27:54 <zzo38> * If a nonexistent object would deal damage, that damage is prevented.
20:27:59 <ais523> hmm, next issue: what if someone sends an HTML email, or GPG-signed email (both quite likely to happen on our systems)
20:28:31 <elliott> ais523: what issue?
20:28:40 <zzo38> * Losing due to being unable to draw a card is not a state based effect; it happens immediately.
20:28:51 <ais523> elliott: with the system I'm writing for work
20:28:54 <zzo38> (Before state-based effects are checked)
20:29:02 <ais523> what we really want is just to receive plain text as the email body
20:29:03 <elliott> ais523: I mean, why is that an issue?
20:29:11 <elliott> GPG is just cruft above and below the message
20:29:14 <ais523> because I can't exactly run HTML through an OCaml parser
20:29:16 <elliott> But uh
20:29:21 <elliott> Grep Python's stdlib for MIME :P
20:29:25 <elliott> ais523: wait, what?
20:29:33 <elliott> whatever you're doing, stop, I don't care who told you to do it
20:29:42 <ais523> elliott: running arbitrary code emailed to me?
20:29:52 <elliott> I believe I already told you to stop
20:29:55 <ais523> nah, I'm not quite that mad
20:30:06 <elliott> I don't really care what it is, I know enough
20:30:24 <ais523> just you telling me to stop won't stop me designing something I'm being paid to do
20:30:42 <zzo38> * Mana burn still works (that is one of the rules changed in the new rules; I don't know all the changes)
20:30:55 <elliott> ais523: i can no longer talk to you in good conscience :(
20:30:57 <ais523> gmail being involved is ridiculous enough as it is
20:31:04 <ais523> seriously, though, why are you so upset about this?
20:31:16 <ais523> parsing user input is hard, especially when it comes from students
20:31:24 <oerjan> <ais523> because I can't exactly run HTML through an OCaml parser <-- just consider it a CHALLENGE
20:31:31 <elliott> you're feeding html mail into the ocaml parser
20:31:34 <elliott> that's never ok :(
20:31:37 <ais523> no, I'm not
20:31:40 <ais523> at least, I don't want to
20:31:51 <elliott> you want to turn it into text then feed it into the ocaml parser which is just as bad
20:31:52 <elliott> :P
20:31:53 <zzo38> * Rules for playing land cards no longer overrides rules for other types. (Existing Artifact Lands will still act as they do; but if you make an Artifact Land with a mana cost, you can now play the card as either an Artifact or as a Land, because the mana cost allows you to do so.)
20:31:53 <ais523> so the challenge is to figure out when I'm sent HTML mail, and look for the plaintext portion, or at worst detag it myself
20:32:04 <elliott> what language?
20:32:21 <ais523> elliott: there's no way you're going to get a yearful of students to get it right when they can't even do CSV right
20:32:31 <elliott> what language are you writing this in, I mean?
20:32:33 <ais523> I'm using Perl for the glue code, but the OCaml parser itself is in OCaml
20:32:43 <elliott> heh
20:32:57 <zzo38> ais523: Would it help to convert HTML mail into ANSI escape sequences?
20:33:21 <ais523> zzo38: I'd prefer to convert it into plain Unicode
20:33:23 <oerjan> i recall back when i found ocaml, ocamlyacc still was based around a modified yacc in C
20:33:30 <ais523> or even ASCII would do
20:33:57 <elliott> oerjan: nicw
20:33:58 <elliott> nice
20:34:12 <zzo38> ais523: OK, that would do, I suppose. Although it loses formatting in case there is any important formatting
20:34:28 <ais523> elliott: it'd be fun to punish the students for sending HTML email, but I really doubt I could get away with that
20:34:37 <ais523> especially because it's basically impossible to do in most webclients
20:34:45 <elliott> ais523: p.s. I want to confess that I've just willingly used git to version control something that I could have put into darcs without much trouble
20:34:48 <elliott> i'm sorry :(
20:34:51 <ais523> zzo38: well, they're meant to be sending programs, and I think I can dispense with syntax highlighting
20:35:00 <zzo38> OK
20:35:02 <ais523> elliott: it's OK
20:35:10 <elliott> "especially because it's basically impossible to do in most webclients" -- what, send html mail? :-)
20:35:12 <ais523> git might be utterly broken, but it still works well enough to be usable
20:35:15 <ais523> elliott: send plaintext mail
20:35:18 <elliott> ais523: is it ok if I partly did it for github? :-P
20:35:35 * ais523 laughs at the question, but doesn't answer
20:35:53 <elliott> oh lame, github's haskell syntax highlighting doesn't recognise template haskell's overloading of the character quoting character
20:35:56 <elliott> i want my money back
20:36:03 <elliott> (TH has the worst syntax imaginable)
20:36:11 <elliott> (character literal in haskell: 'a', '\n')
20:36:17 <elliott> (reference to name foo in template haskell: 'foo)
20:36:24 <ais523> ouch
20:36:33 <elliott> (pop quiz: how do you get a reference to the name x', which is of course perfectly legal?)
20:36:34 <ais523> OCaml uses 'a for type variables
20:36:41 <elliott> (hint: you don't, you have to use mkName manually)
20:36:58 <elliott> oh, and ''Foo is the same at the type level
20:37:03 <elliott> because it wasn't confusing enough
20:37:43 <ais523> elliott: I was really impressed with Kate's syntax highlighting of Perl
20:37:44 <zzo38> I recognized that problem immediately when reading about Template Haskell syntax.
20:37:52 <ais523> it managed stuff that confused all the other editors I tried
20:38:11 <oerjan> starting things with $ also doesn't seem very nice, but at least you can use space then
20:38:12 <elliott> ais523: well, the KDE folks need _something_ to win the flamewars with
20:38:21 <elliott> so they got a perl junkie to spend a few weekends on it :P
20:38:43 <elliott> "oh, well, I quite like ema-" "CAN YOUR PRECIOUS EMACS HIGHLIGHT THIS????"
20:38:46 <ais523> I actually downloaded a Perl port of the source for Kate's syntax highlighter
20:38:54 <ais523> for reasons I can't quite remember
20:39:05 <ais523> maybe it'll come in useful some day
20:39:06 <zzo38> I happen to think Template Haskell syntax works OK, though, even though there is that problem
20:39:17 <elliott> it works, it just isn't very nice
20:40:01 -!- monqy has joined.
20:40:18 <elliott> arcane monqy. how are the curts wronrging.
20:40:19 <zzo38> Currently at FreeGeek Vancouver, UNIX-to-UNIX mail doesn't work. The system administrator says he will fix it soon, and that the software already has this capability it only has to be configured. He also says Internet-to-UNIX mail will be configured (UNIX-to-Internet already works).
20:40:32 <monqy> whats a curt
20:40:32 <ais523> now I need to work out how to send an HTML email, as a test for this thing
20:40:36 <ais523> just to see what it comes up with
20:40:36 <elliott> zzo38: like... UUCP?
20:40:52 * ais523 tries to work out how to send HTML mail from Evolution
20:41:13 <ais523> ah, there's a dropdown
20:41:26 <elliott> be a bad person: [yes] [no]
20:41:28 <elliott> except
20:41:30 <elliott> as a dropdown
20:42:03 <ais523> indeed
20:42:17 <elliott> you have selected
20:42:20 <elliott> to be a bad person
20:42:23 <elliott> you must now face the consequences :(
20:43:14 <zzo38> elliott: Actually, I mean to a different user on the same computer.
20:43:17 <ais523> aha, Evolution sends a plaintext component, then the HTML component after that
20:43:20 <ais523> that's actually really nice behaviour
20:43:44 <ais523> anyone here who uses Thunderbird? could you send me an HTML mail with a bit of formatting in, so I can see how it behaves?
20:44:06 <monqy> oh no, as i feared, brainlove is Bad
20:44:19 <elliott> hmm, apparently the fucking weather is fucking ...alright
20:44:27 <elliott> i don't know whether to agree or not
20:44:33 <elliott> ais523: I use gmail
20:44:36 <elliott> ais523: can i still send html mail
20:44:57 <ais523> well, that's less useful, because the students /should/ be using their University accounts
20:45:12 <ais523> which means that they should be sending from Thunderbird or Outlook Web Access (*shudder*)
20:45:27 <ais523> and I definitely don't trust OWA to do anything sane, but I was hoping with Thunderbird
20:45:30 <elliott> MC/Protocol.hs:1:1: Error: Unused LANGUAGE pragma
20:45:30 <elliott> Found:
20:45:30 <elliott> {-# LANGUAGE TemplateHaskell #-}
20:45:30 <elliott> Why not remove it.
20:45:30 <elliott> because it's not unused, you presumptuous program >:(
20:45:32 <elliott> ais523: "should"
20:45:47 <ais523> elliott: "should" in that we're at least justified if we deny them marks for using something else
20:46:01 <elliott> ais523: deny someone marks for avoiding Outlook Web Access?
20:46:04 <ais523> because those are the only clients they're given on their University account, which is the one they're meant to use
20:46:06 <elliott> you're horrible
20:46:09 <elliott> I don't like the new ais523
20:46:12 <ais523> hey, I didn't make the rules
20:46:22 <elliott> that's what the Nazis said!
20:46:25 <ais523> how I'd love to say "use mail(1) only"
20:46:31 <ais523> and avoid all these issues
20:47:02 <zzo38> I too would say use UNIX mail, if the computer is UNIX you would use it. However, some people might use other program anyways.
20:56:03 -!- augur has joined.
20:58:32 <zzo38> Did someone tell me before that do-notation with the (x ->) monad does correspond to something in Curry-Howard? Can you please remind me?
20:58:34 <fizzie> My inbox has bazillion emails from Thunderbird (it's the quasi-official client in our desktop installation, I think) but so far all of them have been plaintext-only.
20:59:47 <fizzie> "Microsoft Office Outlook 12.0" has sent a multipart/alternative message, with a text/plain copy first, and a text/html copy after. That I think is the "usual way".
21:01:30 <ais523> I think what I'll do is parse it, and take the first text/plain part I come across
21:01:32 <elliott> ais523: I sent you some HTML mail just in case
21:01:41 <elliott> I think your spam filter might block it thoug
21:01:41 <elliott> h
21:01:49 <ais523> is it that spammy?
21:01:53 <elliott> It's a masterpiece.
21:01:59 <ais523> I haven't received it, at least
21:02:06 <elliott> "viagra cialis" appears more than once.
21:02:10 <elliott> Also there's some Haskell in it.
21:02:14 <elliott> It's pink.
21:02:34 <fizzie> I did get one incredibly complicated-looking MIME subpart tree from a student once.
21:02:39 <elliott> Wow, the text/plain version is almost not entirely fucked up, too.
21:02:46 <fizzie> (Mutt's message-part-viewer shows it as a tree.)
21:04:02 <ais523> hmm, I'm going to send myself some OCaml as an attachment, just to see what content-type it gets
21:04:04 <elliott> Deewiant: So what manner of trifunctory stuff would you want to see in the hypothetical tuple-combinators
21:04:13 <ais523> I'm hoping for text/x-ocaml, but that seems really implausible
21:04:36 <Deewiant> elliott: trimap, first3/second3/third3
21:04:56 <Deewiant> (Do we already have thd/trd and friends in base somewhere?)
21:05:01 <elliott> Deewiant: What signature would trimap have exactly, I'm trying to think of a use-case for this
21:05:09 <elliott> Oh
21:05:11 <elliott> For three-ples
21:05:13 <Deewiant> Like bimap but for three
21:05:25 <ais523> hmm, at least the involvement of gmail was the least complex part in all of this
21:05:28 <elliott> I have this kind of belief that using anything more than a tuple is bad. Is that bad of me?
21:05:40 <elliott> It feels like once you get to that point you need to start naming something.
21:05:42 <Deewiant> s/tuple/pair/
21:05:46 <elliott> Yeah yeah
21:05:47 <elliott> two-ple
21:05:54 <Deewiant> I think three isn't that bad
21:06:15 <fizzie> I think I took a screencap of the complicatedness, but it's hard to find anything when all the names are like "florb.png".
21:06:23 <Deewiant> ?ty Data.Map.splitLookup
21:06:23 <lambdabot> forall k a. (Ord k) => k -> M.Map k a -> (M.Map k a, Maybe a, M.Map k a)
21:06:33 <elliott> Deewiant: I'd kind of prefer Trifunctor to be in a separate trifunctors package, but that feels like it's a slippery slope towards Kmett package dominance
21:06:42 <Deewiant> Yeah, I know
21:06:50 <elliott> Finally we can replicate Control.Arrow specialised to functions with only fifty import
21:06:50 <elliott> s
21:07:54 <fizzie> Also there's a "blurg.png".
21:07:58 <ais523> elliott: a 3-item tuple is called a triple
21:08:05 <ais523> given that people here seem to have had issues finding the name
21:08:20 <elliott> I wish I had a nicer name than tuple-combinators
21:08:21 <fizzie> Perhaps it should be called a "trubble", because it's nothing but trouble?
21:08:21 <oerjan> zzo38: i think i said something about the "decision theorem", which i then failed to google, but it's essentially about proving a -> b by assuming a locally as an axiom and proving b from that, which to me seems similar to what the (x ->) monad allows you to do
21:08:33 <ais523> elliott: Subject: [SPAM?] SPAM: example viagra cialis hexham didgeridoo
21:08:46 <ais523> it seems to have been greylisted and marked as possible spam by one filter and certain spam as another
21:08:46 <elliott> ais523: Yessssssssssssss
21:08:52 <ais523> but not to the extent that it wasn't delivered at all
21:08:55 <elliott> I hope I'm on blacklists now
21:09:03 <ais523> what's with all the GIF images?
21:09:05 <elliott> Deewiant: Yo, better name than tuple-combinators, hit me
21:09:12 <elliott> ais523: Emojis!
21:09:13 <Deewiant> tumbinators
21:09:14 <elliott> Gmail supports them nowadays.
21:09:22 <monqy> viagra cialis hexham didgeridoo
21:09:25 <elliott> They're even in Unicode!
21:09:33 <elliott> But I doubt you have a font with the PILE OF POO character in it, so I used the images instead.
21:09:40 <ais523> wow, it hit a 7.4 on spam score
21:09:42 <ais523> that's pretty high
21:09:43 <elliott> I neglected to include GOAT.
21:09:51 <elliott> It's a pretty spammy message.
21:10:40 <ais523> strangely, it was knocked down 0.7 for the reputation of your account
21:10:48 <ais523> it'd have been 8.1 from an unrecognised sender
21:10:53 <zzo38> oerjan: OK, yes I suppose I can see how that works with do-notations.
21:11:12 <elliott> ais523: haha
21:11:17 <elliott> good to know I have the karma
21:11:43 <ais523> the pharmaceutical-related words make up most of the spam score, it seems
21:11:58 <oerjan> zzo38: oh wait now i suddenly remembered and no wonder i couldn't google it, it's called the _deduction_ theorem. http://en.wikipedia.org/wiki/Deduction_theorem
21:12:06 <ais523> also, it seems it has 10 nested blockquotes
21:12:15 <fizzie> ais523: One of our departmental "little christmas" parties had (as one of the multitude of activities they usually have) a SPAM competition; there was a console set up on a desk, and you typed a handle and a message, and then it ran SpamAssassin on the message and showed a highscore list of handles and corresponding spam scores.
21:12:29 <zzo38> oerjan: Yes, and I think what you describe is also like what is called "fantasy rule" in Hofstadter's book, which I already figured out before, which is why I asked about do-notation, because it seem to do the fantasy rule.
21:12:30 <ais523> haha
21:12:45 <ais523> it might be quite hard to get control of a blacklisted spam domain to bump the score up higher
21:13:00 <elliott> Deewiant: Hmm, wait, isn't bimap a superset of (&&&)'s type
21:13:02 <ais523> although we managed it with Normish, seems the IP had belonged to a spammer before Normish gained it
21:13:08 <fizzie> I think it just fed the message as-is to SA, so you got to write all kinds of headers into it.
21:13:10 <ais523> and it took a while to get it off the blacklists
21:13:28 <Deewiant> elliott: No, it's a superset of (***) restricted to functions
21:13:36 <Deewiant> (So really, it's disjoint)
21:13:45 <elliott> Oh, hmm, right
21:13:55 <elliott> I'm new to this fancy bifunctor shit :-P
21:14:24 <elliott> Is there really no way to avoid the explicit (,) in that triple-ampersands implementation?
21:14:26 <elliott> It's soooo inelegant. :p
21:14:48 <Deewiant> If you can think of a way of going from a to (a,a) without a (,), sure
21:15:09 <zzo38> Deewiant: It seem to me, the way would be: join (,)
21:15:14 <elliott> Without a (,)
21:15:18 <Deewiant> zzo38: That's not without a (,)
21:15:33 <zzo38> Deewiant: I know. But I don't know why you don't want (,)
21:15:38 <oerjan> zzo38: oh there's something possibly relevant in that wp article: "Under the Curry–Howard correspondence, the above conversion process for the deduction meta-theorem is analogous to the conversion process from lambda calculus terms to terms of combinatory logic, where axiom 1 corresponds to the K combinator, and axiom 2 corresponds to the S combinator. Note that the I combinator corresponds to the theorem schema P→P.
21:15:46 <Deewiant> zzo38: elliott just stated why.
21:16:31 <zzo38> Of course you can write (a,a) but I don't know if that counts.
21:16:39 <oerjan> and the SKI combinators are ap, return, ask in the (x ->) monad
21:17:16 <zzo38> I know return = const so that is K combinator.
21:17:33 <zzo38> I have not heard of "ask"
21:17:40 <elliott> thread :: (a -> b) -> (c -> d) -> (a,c) -> (b,d)
21:17:40 <elliott> combine :: (a -> b) -> (a -> c) -> a -> (b,c)
21:17:41 <monqy> it's from Reader
21:17:44 <elliott> Deewiant: Whaddya think of those names
21:17:49 <elliott> With thread just being defined as bimap ofc
21:17:58 <monqy> there's a MonadReader instance for (a ->)
21:18:13 <Deewiant> They sound as arbitrary as the names of the polarities of bfjoust
21:18:24 <elliott> Deewiant: I put thought into those :(
21:18:40 <Deewiant> "combine" is about as generic a name as possible
21:18:41 <elliott> Deewiant: With the first, you can imagine two completely separate bits of string that you want to meet at the inputs and outputs
21:18:52 <elliott> So you thread them together through two little holes
21:18:58 <elliott> And that threading is the result
21:19:02 <Deewiant> I can imagine that, or I can imagine something completely different
21:19:08 <elliott> Pah
21:19:13 <Deewiant> forkIO could be called thread :-P
21:19:14 <elliott> Gimme nice operator names then :P
21:19:28 -!- MDude has quit (Ping timeout: 252 seconds).
21:19:30 <elliott> "split" would be good for combine
21:19:35 <elliott> but it's taken by Data.List.Split
21:19:42 <Deewiant> ?ty split
21:19:43 <lambdabot> forall g. (RandomGen g) => g -> (g, g)
21:19:47 <Deewiant> ?ty Data.Map.split
21:19:48 <lambdabot> forall k a. (Ord k) => k -> M.Map k a -> (M.Map k a, M.Map k a)
21:19:57 <zzo38> But of course I is id, and K is const.
21:20:04 <elliott> Hmm, pointless-haskell does
21:20:11 <elliott> (/\) :: (a -> b) -> (a -> c) -> a -> (b, c)
21:20:17 <oerjan> :t join (curry id)
21:20:17 <lambdabot> forall b. b -> (b, b)
21:20:18 <elliott> (><) :: (a -> b) -> (c -> d) -> (a, c) -> (b, d)
21:20:26 <Deewiant> ?hoogle (><)
21:20:26 <oerjan> Deewiant: ^
21:20:26 <lambdabot> Data.Sequence (><) :: Seq a -> Seq a -> Seq a
21:20:26 <lambdabot> Data.Graph.Inductive.Query.Monad (><) :: (a -> b) -> (c -> d) -> (a, c) -> (b, d)
21:20:29 <elliott> Ugh
21:20:42 <Deewiant> oerjan: s/Deewiant/elliott/
21:20:48 <oerjan> elliott: ^
21:21:26 <elliott> oerjan: Not the point :-P
21:21:30 -!- MDude has joined.
21:21:42 <fizzie> In[1]:= ?Thread
21:21:42 <fizzie> Thread[f[args]] "threads" f over any lists that appear in args
21:21:46 <Deewiant> That second (><) is the same one though
21:21:46 <fizzie> See, that's what "thread" does.
21:21:48 <elliott> Deewiant: Heh, it then goes on to do (\/) :: (b -> a) -> (c -> a) -> Either b c -> a
21:22:09 <Deewiant> I'd have \/ and /\ the other way around
21:22:10 <oerjan> zzo38: ask is a method of MonadReader, which (x ->) belongs to
21:22:19 <elliott> >_<
21:22:29 <zzo38> oerjan: OK
21:22:34 <elliott> Which logical operator is /\ again
21:22:36 <elliott> I always mix 'em up
21:22:41 <Deewiant> And
21:22:41 <elliott> The one that's and should be the tuple one :P
21:22:45 <elliott> Then it's correct
21:22:48 <elliott> Either ~ or, so \/
21:22:51 <elliott> (,) ~ and, so /\
21:22:52 <Deewiant> heh
21:23:01 <Deewiant> Fair enough I guess
21:23:14 <elliott> ?hoogle (a -> b) -> (c -> d) -> (a,c) -> (b,d)
21:23:14 <lambdabot> Data.Graph.Inductive.Query.Monad (><) :: (a -> b) -> (c -> d) -> (a, c) -> (b, d)
21:23:17 <oerjan> <zzo38> But of course I is id, and K is const <-- i meant that they are monadic functions from the (x ->) monad
21:23:18 <elliott> Hmph
21:23:25 <Deewiant> ?hayoo
21:23:25 <elliott> Nobody has a nicer operator name for it? :-P
21:23:25 <lambdabot> Unknown command, try @list
21:23:36 <Deewiant> ?ty (|||)
21:23:37 <lambdabot> forall (a :: * -> * -> *) b d c. (ArrowChoice a) => a b d -> a c d -> a (Either b c) d
21:23:46 <Deewiant> Hmf
21:23:53 <elliott> OK, so the names are:
21:23:56 <elliott> (><)
21:23:57 <Deewiant> elliott: |,| ? :-P
21:23:57 <elliott> cross
21:23:59 <elliott> (-asterisk-)
21:24:01 <elliott> pairApply
21:24:04 <elliott> (asteriskasteriskasterisk)
21:24:35 <elliott> Deewiant: I'd go for || were it not taken
21:24:42 <zzo38> oerjan: OK.
21:24:49 <elliott> Deewiant: Actually >< is quite brilliant graphically, it shows the two unrelated functions "meeting" in the middle
21:24:52 <Deewiant> I'd go for |,| if you don't want to override |||
21:24:53 <elliott> Input below/above, output above/below
21:25:03 <Deewiant> Right, >< is fine as well
21:25:05 <zzo38> But |,| is not a name in Haskell
21:25:05 <elliott> Hmm, /\ does the same
21:25:10 <Deewiant> It isn't?
21:25:14 <elliott> Two separate functions
21:25:16 <elliott> One from the left
21:25:18 <elliott> One from the right
21:25:20 <elliott> And a single output value at the top
21:25:38 <elliott> Deewiant: What fixity :-P
21:25:44 <elliott> I'm terrible at fixities
21:25:44 <elliott> Always
21:25:50 <Deewiant> Ditto
21:25:53 <elliott> Darn
21:25:56 <elliott> I'll copy Control.Arrow's
21:26:01 <elliott> But first, I'll sleep.
21:26:18 <Deewiant> I guess you want . to bind tighter
21:26:35 <oerjan> Deewiant: commas are punctuation and cannot be used in operators
21:26:41 <Deewiant> Darn
21:26:54 <oerjan> same with semicolons. although not colons...
21:28:29 <oerjan> also not brackets or quotes, except ' is generally messed up
21:30:27 -!- elliott has quit (Ping timeout: 260 seconds).
21:30:58 <fizzie> "Comma is a semi-semicolon", to quote a Perl document.
21:31:08 <fizzie> I don't know why but it sounds funny.
21:31:42 <ais523> it's because they were really stretching for mnemonics at that point
21:31:51 <ais523> and pretty much admitted as much
21:31:57 <oerjan> > let a |!@#$%&/=?+\^~*-:. b = a + b in 2 |!@#$%&/=?+\^~*-:. 2
21:31:58 <lambdabot> 4
21:32:09 <oerjan> oh wait
21:32:18 <oerjan> > let a |!@#$%&/=?+\^~*-:.<> b = a + b in 2 |!@#$%&/=?+\^~*-:.<> 2
21:32:19 <lambdabot> 4
21:33:27 -!- pikhq has joined.
21:33:41 <fizzie> I might think a semi-semicolon would be some sort of a "two commas vertically" instead. Haven't found a real character for that from Unicode yet, though of course you can put a "combining comma above" on a comma, like ,̓ that.
21:34:14 <itidus21> `pastelogs fuckton
21:34:20 <HackEgo> http://codu.org/projects/hackbot/fshg/index.cgi/raw-file/tip/paste/paste.21829
21:35:14 <fizzie> 35 of every 80 fucktons are metric.
21:37:44 <zzo38> The character ' in Haskell is a letter that is neither uppercase nor lowercase. (I think)
21:38:09 <monqy> letter?
21:39:29 <ais523> Content-Type: text/x-ocaml;
21:39:33 <ais523> oh Evolution I love you
21:39:45 <ais523> although I'm not entirely sure how you figured it out
21:39:59 <ais523> perhaps from the extension, although .ml could mean all sorts of ML-family languages
21:41:28 <fizzie> <glob pattern="*.ml"/> and <glob pattern="*.mli"/> are in my /usr/share/mime/text/x-ocaml.ml.
21:41:33 <fizzie> (And no other conditions.)
21:41:49 <Deewiant> Shameful
21:42:04 -!- pikhq_ has joined.
21:42:11 <ais523> fizzie: ditto in mine, that must be it
21:42:14 <ais523> I didn't know that file existed
21:42:33 <ais523> it also has "OCaml source code" translated into a lot of languages
21:42:35 <fizzie> It's the modern way to do /etc/mime.types.
21:43:29 <ais523> so there's a good chance I will get text/x-ocaml attachments after all
21:44:02 <ais523> I suppose I could just run an OCaml parser over every part of the message (after decoding and deHTMLing) to see which parsed correctly
21:44:36 <oerjan> monqy: ' is used for character constants, but also in otherwise alphanumeric identifiers. but because of the former it cannot be used at the beginning of identifiers.
21:44:57 <ais523> use ACME::Don't;
21:45:14 -!- pikhq has quit (Ping timeout: 260 seconds).
21:45:47 <fizzie> I guess it could also be using "file --mime", which has a magic-db contents of http://p.zem.fi/hws1
21:46:01 <oerjan> monqy: "neither uppercase or lowercase" sort of fits to characterize that in haskell, because haskell distinguishes those in meaning at the beginning of identifiers. btw _ is then lowercase.
21:46:01 <fizzie> (Do they all really start with "Caml1999"?)
21:46:30 <fizzie> I suppose that's for the more compiled file types, not the source.
21:46:58 <oerjan> monqy: and : is the only uppercase _operator_ character :P
21:47:32 <ais523> hmm, the author of MIME::Parser is insistent that storing parsed MIME components of email in memory is a security risk in case someone emails you a many-gigabyte attachment
21:47:58 <ais523> I'm getting around it by refusing to parse emails more than a megabyte long, on the basis that that's /quite/ enough for one short OCaml program
21:48:38 <ais523> fizzie: the standard compiled bytecode actually starts with a shebang
21:51:14 <monqy> : being the only uppercase operator character...is that why all the type/data constructor operators start with :
21:51:54 <monqy> At least I think I've only seen them ever start with :
21:52:17 <ais523> bleh, a search for "which punctuation marks are uppercase?" gave me no results
21:52:25 <ais523> (with the quotes; without, it gave only irrelevant results)
21:52:35 <ais523> I was hoping for some crazy answer
21:53:31 <ais523> and "uppercase punctuation" gives me just pages which meant to say "uppercase, punctuation" or "uppercase/punctuation" but screwed up the punctuation mark between them
21:57:59 <zzo38> Is there any standard function for "foldr (.) id"?
22:01:22 <oerjan> monqy: yep, precisely
22:01:38 <oerjan> :t foldr (.) id
22:01:38 <lambdabot> forall b. [b -> b] -> b -> b
22:02:36 <oerjan> @hoogle [b -> b] -> b -> b
22:02:36 <lambdabot> Data.Generics.Schemes everywhere :: (a -> a) -> a -> a
22:02:37 <lambdabot> Data.Generics.Schemes everywhere' :: (a -> a) -> a -> a
22:02:37 <lambdabot> Prelude until :: (a -> Bool) -> (a -> a) -> a -> a
22:02:45 <oerjan> zzo38: i don't know of any
22:02:52 <oerjan> :t foldr ($)
22:02:53 <lambdabot> forall b. b -> [b -> b] -> b
22:03:04 <oerjan> :t flip (foldr ($))
22:03:05 <lambdabot> forall b. [b -> b] -> b -> b
22:03:15 <oerjan> i think that's equivalent
22:03:52 <zzo38> I suppose I can define it in my program then. What should it be called?
22:04:03 <oerjan> @hoogle f (b -> b) -> b -> b
22:04:03 <lambdabot> Data.Generics.Schemes everywhere :: (a -> a) -> a -> a
22:04:03 <lambdabot> Data.Generics.Schemes everywhere' :: (a -> a) -> a -> a
22:04:03 <lambdabot> Prelude until :: (a -> Bool) -> (a -> a) -> a -> a
22:04:20 <monqy> compose? composes? composed?
22:04:58 <oerjan> @hoogle (a -> m) -> t a -> m
22:04:59 <lambdabot> Prelude ($) :: (a -> b) -> a -> b
22:04:59 <lambdabot> Prelude ($!) :: (a -> b) -> a -> b
22:04:59 <lambdabot> Data.Function ($) :: (a -> b) -> a -> b
22:05:25 <oerjan> @hoogle (Monoid m, Foldable f) => (a -> m) -> f a -> m
22:05:25 <lambdabot> Data.Foldable foldMap :: (Foldable t, Monoid m) => (a -> m) -> t a -> m
22:05:25 <lambdabot> Data.Traversable foldMapDefault :: (Traversable t, Monoid m) => (a -> m) -> t a -> m
22:05:25 <lambdabot> Data.Foldable all :: Foldable t => (a -> Bool) -> t a -> Bool
22:05:25 <zzo38> Is @hoogle broken?
22:05:35 <oerjan> :t foldMap Endo
22:05:36 <lambdabot> Not in scope: `foldMap'
22:05:48 <oerjan> :t Data.Foldable.foldMap Endo
22:05:49 <lambdabot> forall a (t :: * -> *). (Data.Foldable.Foldable t) => t (a -> a) -> Endo a
22:06:17 <oerjan> hm or is that in the direction
22:06:30 <oerjan> zzo38: how so?
22:06:41 <zzo38> It makes responses which don't match
22:07:05 <oerjan> zzo38: yes it tries to guess if you meant something different if there's no exact match
22:07:20 <fizzie> 12.8 htkallas 9/18 01:07 0+00:00:00 [????????????????]
22:07:26 <fizzie> That does not look good.
22:07:40 <fizzie> It's supposed to say where my job is running.
22:09:50 <oerjan> @hoogle (Arrow a) => [a b b] -> a b b
22:09:50 <lambdabot> Data.Map unions :: Ord k => [Map k a] -> Map k a
22:09:51 <lambdabot> Data.Graph.Inductive.Internal.Heap mergeAll :: Ord a => [Heap a b] -> Heap a b
22:09:51 <lambdabot> Data.Graph.Inductive.Basic grev :: DynGraph gr => gr a b -> gr a b
22:10:12 <fizzie> XMonad calls it (well, something a bit like it; in fact it composes ManageHooks) "composeAll".
22:11:07 <oerjan> zzo38: what worries me more is that it required me to add the Monoid and Foldable class before it gave anything useful, that's stupid.
22:11:08 <fizzie> But that's possibly because it also has a composeOne, which runs only the first on the list that actually does something.
22:11:17 -!- sebbu has quit (Ping timeout: 260 seconds).
22:12:00 <oerjan> it seems obvious to me that adding those should be a smaller change than modifying the actual type part to something incompatible...
22:12:18 -!- sebbu has joined.
22:13:31 <oerjan> @hoogle (Category a) => [a b b] -> a b b
22:13:31 <lambdabot> Data.Map unions :: Ord k => [Map k a] -> Map k a
22:13:31 <lambdabot> Data.Graph.Inductive.Internal.Heap mergeAll :: Ord a => [Heap a b] -> Heap a b
22:13:31 <lambdabot> Control.Category (.) :: Category cat => cat b c -> cat a b -> cat a c
22:14:40 <oerjan> :t foldr`flip`id
22:14:41 <lambdabot> forall a a1. (a -> (a1 -> a1) -> a1 -> a1) -> [a] -> a1 -> a1
22:14:49 <oerjan> oops
22:15:14 <oerjan> oh right
22:22:23 -!- ive has quit (Ping timeout: 252 seconds).
22:59:14 <CakeProphet> data Many a = One a | Many (Many a)
22:59:18 <CakeProphet> I wonder what you could use this for.
22:59:47 <CakeProphet> it seems to just associate an integer count to a value.
23:01:08 <CakeProphet> count (One a) = 1; count (Many a) = 1 + count a
23:01:14 <oerjan> like Nat with an extra parameter
23:01:46 <CakeProphet> you could also generalize (1+) to f
23:01:51 <CakeProphet> er, well no
23:01:54 <oerjan> also it's isomorphic to that delayed monad thing
23:01:58 <CakeProphet> but you can apply f a number of times.
23:02:15 <CakeProphet> runMany (Many a) = f(runMany a)
23:02:15 <zzo38> What delayed monad thing?
23:02:19 <oerjan> data Delayed a = Now a | Later (Delayed a)
23:02:31 <oerjan> (not sure i have the name right)
23:02:34 <zzo38> If you want to apply a number of things, you can also use church numerals
23:02:47 -!- copumpkin has quit (Quit: Computer has gone to sleep.).
23:03:36 <CakeProphet> data Lol a b = Nothing | Left a | Right b | Both a b | Many (Lol a b)
23:03:37 <CakeProphet> bahahaha
23:03:51 <monqy> is this abomination your doing
23:03:56 <CakeProphet> yes
23:04:22 -!- DH____ has quit (Ping timeout: 260 seconds).
23:04:30 <zzo38> I made genCurry i = do { n <- mapM id $ replicate i (newName "x"); f <- newName "x"; lamE (varP f : map varP n) (appE (varE f) . tupE $ map varE n); };
23:05:38 <CakeProphet> type Lol a b = Many ( Maybe (Either (Either a b) (a,b)))
23:06:00 <monqy> zzo38: mapM id? isn't that the same as sequence?
23:06:17 <zzo38> monqy: O, maybe it is.
23:06:54 <zzo38> Yes that works
23:07:40 <oerjan> zzo38: in fact i think mapM id $ replicate i = replicateM i
23:08:05 <CakeProphet> yep
23:08:09 <zzo38> So, in other words, curry = $(genCurry 2)
23:08:41 <CakeProphet> good ol' replicateM
23:09:05 <zzo38> OK, I fixed it to use replicateM and it works.
23:10:12 <oerjan> s/[$]/./ technically
23:10:21 <monqy> I was about to comment on that
23:10:55 <zzo38> oerjan: Yes
23:11:59 <zzo38> Now I can understand how the "newName" command works. The documentation doesn't say what it is but I figure it out.
23:12:12 <zzo38> The document just says the type.
23:12:49 <oerjan> i guess it's for inventing a fresh variable name
23:13:12 <oerjan> almost like lisp gensym
23:13:12 <zzo38> Yes, that is what it does. But you still need to indicate its name anyways!
23:13:39 <zzo38> Why does it require you to indicate the name anyways, even though it is always a new name?
23:14:02 <oerjan> zzo38: i assume it uses the x as a prefix
23:14:04 -!- CakeProphet has quit (Ping timeout: 260 seconds).
23:14:17 <oerjan> zzo38: it might help if you want to read core output, perhaps
23:14:30 <zzo38> Yes it does use it as a prefix
23:15:29 <oerjan> or generated output, there's probably an option for printing it just after the TH step
23:16:18 <zzo38> Generated output printing after TH step by -ddump-splices shows the name you specify as prefix, and the other stuff in []
23:16:34 <oerjan> ok
23:17:08 <zzo38> But I suppose one other thing, is to tell whether you want uppercase or lowercase, but it should be able to figure that out by itself.
23:18:15 <oerjan> might be tricky in some cases
23:18:21 <zzo38> But perhaps they don't want one name used in both ways, but it can anyways because it is for type levels and value levels
23:19:20 <oerjan> zzo38: but constructors appear both places.
23:20:20 <zzo38> If you do something like f = X :: X; then both X are different
23:21:07 <oerjan> yes but what about x = X :: X x
23:21:51 <zzo38> Then I also think both x are different, too, isn't it?
23:22:11 <oerjan> zzo38: i thought you were talking about distinguishing upper and lower case
23:23:22 <zzo38> Yes.....
23:23:55 <zzo38> But those don't seem to be problem there, if you can use a name in multiple places
23:23:57 -!- ive has joined.
23:24:06 <oerjan> all of those might be produced from newName "x" if it were to change the case everywhere
23:24:47 <oerjan> anyway it probably _could_ decide, since the actual definition site inserted would probably tell what it was
23:25:04 <zzo38> oerjan: Say, you have a different function newName' which takes no argument.
23:25:05 <oerjan> but it might require some awkward tying of the knots
23:25:30 <zzo38> But it could not use newName' for either of the X here.
23:25:49 <zzo38> I don't think it could use newName either.
23:26:20 <oerjan> oh so newName isn't general for all names?
23:26:26 <oerjan> @hoogle newName
23:26:26 <lambdabot> Language.Haskell.TH newName :: String -> Q Name
23:26:26 <lambdabot> Language.Haskell.TH.Syntax newName :: String -> Q Name
23:26:27 <lambdabot> Language.Haskell.TH.Syntax qNewName :: Quasi m => String -> m Name
23:26:59 <zzo38> oerjan: newName can do uppercase or lowercase names, but in the example "x = X :: X x" it couldn't do because X would need to be defined already for that to be accepted
23:27:29 -!- sllide has quit (Ping timeout: 258 seconds).
23:28:46 <oerjan> zzo38: right, so newName requires that you're generating a splice which includes the definition.
23:28:51 <zzo38> Actually I suppose there is still some difficulty, that you have [d| data X = $x; y = $x; |] the answer is still obvious but the program to determine it might not be entirely simple.
23:29:03 <monqy> the best part of TH is using mkName to make impossible names, like ones with alphanumeric and operator charaters mixed together
23:29:04 <zzo38> oerjan: Yes, because it is the Q monad.
23:29:42 <zzo38> But I suppose you can have newVar = newName "name___"; newCon = newName "Name___";
23:29:58 <oerjan> monqy: those actually _work_?
23:30:04 <monqy> oerjan: I've done it!
23:31:03 <oerjan> monqy: in that case, does it work to use the name in a spot with the "wrong" case for it?
23:31:18 <ais523> monqy: /why/ did you do it?
23:31:21 <monqy> I've never tried, but I'm guessing yes it will work
23:31:35 <monqy> ais523: bad reasons, naturally
23:31:51 <oerjan> zzo38: ok if what monqy says is true then it's likely TH doesn't actually _care_ about the case used
23:32:05 <zzo38> Actually it works as long as the *first* character is of the correct case.
23:32:12 <ais523> hmm, idea my supervisor had for sandboxing OCaml (whilst preventing uses we don't want of the standard library): reject all mentions of modules other than Pervasives, combined with rejecting the stuff in Pervasives we don't want them to use
23:32:15 <zzo38> Everything else can be any symbols it doesn't matter.
23:32:17 <monqy> ais523: I was too lazy to parse haskell but I wanted to do some syntactic modifications where I could mark a haskell expression, pull it out, put it somewhere else, and leave a stump in its place
23:32:25 <ais523> so I've hooked the parser to recognise only Pervasives as a legitimate module name
23:32:31 -!- CakeProphet has joined.
23:32:31 -!- CakeProphet has quit (Changing host).
23:32:31 -!- CakeProphet has joined.
23:32:31 <oerjan> zzo38: oh so that is required.
23:32:32 <ais523> is this going to be a crazily flawed solution?
23:32:40 <monqy> ais523: yes
23:32:58 <monqy> I used the syntactically invalid identifier to mark the expressions I wanted to pull out
23:33:00 <ais523> (that is, in any context where a module name is expected, if it isn't "Pervasives" error out)
23:33:02 <zzo38> Now instead of f <- newName "x"; I can write f <- newVar;
23:33:06 <ais523> monqy: can you see any flaws with it?
23:33:11 <monqy> it was ugly
23:33:22 <monqy> oh you were not talking about what I was doing there
23:33:22 <monqy> oops
23:33:25 <ais523> oh, I see
23:33:31 <monqy> I was talking about my thing being falwed
23:33:35 <ais523> crossed conversations
23:34:27 <monqy> but it does have a sort of ugliness similar to what i was doing
23:34:42 -!- kmc has quit (Ping timeout: 260 seconds).
23:34:51 <monqy> hm
23:34:58 <oerjan> never cross the conversations!
23:36:25 <monqy> dunno if this quite applies to ocaml at all, but perhaps make a wrapper module, always included, which exports only the stuff you want from Pervasives, and make all module imports syntactically invalid?
23:36:30 <Vorpal> oerjan, augh
23:36:44 <monqy> or would that be going against a goal or two
23:37:24 -!- CakeProphet has quit (Ping timeout: 260 seconds).
23:38:45 <ais523> yep, the idea is to verify that input programs use a particular subset of OCaml
23:39:00 <ais523> I haven't yet got around to the idea of conditionally banning if, mostly because it's so easy to work around
23:39:20 <ais523> there are any number of ways to express an if in OCaml, just as in most languages
23:39:49 <monqy> the ugliest part is rejecting the stuff in Pervasives you don't want them to use
23:39:50 <Gregor> Heh, one of the places where I buy cheap Chinese junk just sent me an email saying that they now have a US warehouse for their most popular wares, and so can offer 3nd day delivery. Whatever "3nd day delivery" is :P
23:40:12 <monqy> I can't think of any clean way to do it without making a new module :(
23:40:19 <monqy> and making a new module is also ugly :(
23:41:20 <ais523> I could reject module imports and qualifies altogether, because Pervasives is loaded by default
23:41:30 <ais523> but yes, I agree, the issue's rejecting things like file opens
23:42:00 <ais523> Gregor: I can pronounce it as a word somewhere between "third" and "second", and yet even though it's obvious how to pronounce it, I still don't know what it means
23:42:01 -!- Patashu has joined.
23:43:46 <zzo38> One idea is, to have a macro system in Haskell with its own syntax and its own types. Such as, MetaExp, MetaPat, MetaName, MetaLcName, MetaUcName, MetaNewLcName, MetaNewUcName, MetaLocalLcName, MetaLocalUcName, MetaInt, MetaOrder, MetaLayout, etc.
23:44:00 <zzo38> And each keyword is its own type.
23:44:03 -!- CakeProphet has joined.
23:44:03 -!- CakeProphet has quit (Changing host).
23:44:03 -!- CakeProphet has joined.
23:49:06 <oerjan> zzo38: i somehow had the idea that was what template haskell is...
23:49:21 <oerjan> approximately, anyhow
23:50:27 -!- kmc has joined.
23:51:50 <zzo38> oerjan: No, it isn't. What I mean is something, you can define macro called "j" of type (MetaNewUcName -> Q [Dec]) to make a declaration "j K" permitted and it means K is a new name to this module instead of imported or something like that. And same with the other things; including make up new syntax and affecting what is already there, such as making up do-notation instead require it already have do-notation.
23:52:57 <zzo38> Or possibly different monad not Q, it would be different to do the different thing, but in addition to the Q stuff of Template Haskell too.
23:54:53 <oerjan> i see. i think that would require intertwining TH with parsing?
23:55:25 <zzo38> Yes, unless you did it different so that it is a separate step from TH.
2011-09-18
00:12:50 -!- FireFly has quit (Quit: FireFly).
00:22:52 <zzo38> But one thing should be in TH, is an expression that it require the list of expression and select the first one that typechecks.
00:23:02 <zzo38> (If none of them typecheck it is error)
00:25:01 -!- Vorpal has quit (Ping timeout: 276 seconds).
00:31:14 <oerjan> > let a ☺ b = a / b in 2 ☺ 3
00:31:15 <lambdabot> 0.6666666666666666
00:32:47 <Gregor> Divisiooooooon is the loneliest op'rator you'll eeeeever dooooooooo
00:34:06 <ais523> so why does smiley face count as an operator not an identifier?
00:34:52 <ais523> one of the problems with Unicode is that nobody's memorized the difference between lowercase/uppercase letters and lowercase/uppercase punctuation in it
00:35:27 <oerjan> well since i picked it out from a SO discussion linked on reddit of why that char isn't allowed in javascript identifiers: because it's not a unicode letter.
00:36:40 <ais523> ☺ is easy enough to type if you have a working compose key
00:36:43 <Gregor> Yeah, JS tokenization actually uses the Unicode categories.
00:37:10 <oerjan> as does ghc
00:37:19 <Gregor> So there ya go :P
00:37:46 <Gregor> > let 4 = 2 in 4 + 4
00:37:47 <lambdabot> 8
00:38:39 <ais523> o
00:39:20 <Gregor> > let 2 = 4 in 4 + 4
00:39:21 <lambdabot> 8
00:39:23 <Gregor> Hm
00:39:30 <oerjan> ...don't tell me you don't understand that one yet.
00:39:56 <Gregor> "Yet"? I haven't used Haskell in years :P
00:41:37 <ais523> and I've never bothered to inquire into that particular corner of Haskell
00:41:39 <ais523> I understand this one
00:41:47 <ais523> > let 2 + 2 = 3 in 2 + 2
00:41:48 <lambdabot> 3
00:41:58 <Gregor> Oh right, that's what I was looking for :)
00:41:59 <ais523> but the examples above don't seem to be following that pattern
00:42:16 <ais523> (in particular, I don't get why "let 4 = 2" isn't a parse error)
00:42:17 <Gregor> Because you can specific cases for functions, but can't redefine literals I guess.
00:42:29 <Gregor> Right, seems like that ought to be caught earlier.
00:43:00 <oerjan> ais523: 4 is a legal pattern so may be on the left side of = , it just doesn't actually bind any variables.
00:43:18 <ais523> ah right
00:43:23 <Gregor> So then it should be a /semantic/ error >_<
00:43:32 <ais523> so how can you tell whether the pattern matched or not?
00:43:56 <ais523> it doesn't seem to have anything to match
00:43:59 <oerjan> also, patterns in let are lazy so are not checked until a variable in them is used - in this case never, since there aren't any.
00:44:28 <Jafet> > let !4 = 2 in ()
00:44:29 <lambdabot> *Exception: <interactive>:3:4-9: Non-exhaustive patterns in pattern binding
00:44:31 <oerjan> it's just a logical but unintuitive consequence of orthogonal features.
00:45:14 <ais523> > let a + 2 = 4 in a
00:45:15 <lambdabot> a
00:45:42 <ais523> > let a + 2 = 4 in a + 2
00:45:43 <lambdabot> 4
00:45:50 <oerjan> heh
00:46:01 <oerjan> the right a isn't in the scope of the first one
00:46:02 <ais523> I take it a here is a value, rather than a variable?
00:46:05 -!- azaq23 has quit (Quit: Leaving.).
00:46:24 <oerjan> so it's actually one of lambdabot's predefined Expr values.
00:46:31 <ais523> yep, I thought it'd be something like that
00:46:43 <ais523> > let ttt + 2 = 4 in ttt
00:46:44 <lambdabot> Not in scope: `ttt'
00:46:50 <ais523> > let ttt + 2 = 4 in ttt + 2
00:46:51 <lambdabot> Not in scope: `ttt'
00:46:54 <ais523> that's way saner
00:46:58 -!- CakeProphet has quit (Ping timeout: 260 seconds).
00:47:45 <Jafet> That defines (+).
00:47:51 <Jafet> > let (x + 2) = 4 in x
00:47:52 <lambdabot> <no location info>: Parse error in pattern
00:48:03 <Jafet> That attempts to use a horrible deprecated feature.
00:48:31 <oerjan> lambdabot already has a ghc version without it?
00:48:37 <oerjan> @version
00:48:37 <lambdabot> lambdabot 4.2.2.1
00:48:37 <lambdabot> darcs get http://code.haskell.org/lambdabot
00:48:47 <oerjan> doesn't say which ghc version
00:48:59 <oerjan> > let f (n+1) = n in f 2
00:48:59 <lambdabot> <no location info>: Parse error in pattern
00:49:04 <oerjan> indeed
00:50:16 <Jafet> It has always been possible to turn that off.
00:50:43 <ais523> hmm, I sent CTCP SOURCE to lambdabot, but didn't get a reply
00:50:50 <ais523> why does nobody implement that nowadays?
00:50:56 <ais523> (also, did anyone ever implement that ever?)
00:52:48 <ais523> haha, INTERCAL will have that feature all to itself now!
00:53:20 <ais523> (admittedly, it doesn't actually /work/, but it's nontrivial to make it do so without bruteforcing all possible values in the representable range for every variable and constant in the expression)
00:53:59 <oerjan> ais523: you need to work more on your maniackal laughter.
00:55:12 <Gregor> I don't think I've ever seen CTCP SOURCE ....
00:55:56 <ais523> it's standard!
00:56:20 <Gregor> Yeah, but I've got four quarts of curry in my 'fridge.
00:56:22 <Gregor> So there's that.
00:56:27 <oerjan> <ais523> haha, INTERCAL will have that feature all to itself now! <-- i thought you were referring to CTCP SOURCE here
00:56:40 <ais523> no, to putting expressions on the LHS of an assignment
00:57:02 <ais523> you can end up with expressions overloading arbitrary identifiers in INTERCAL anyway, so it was more or less inevitable
00:57:06 <oerjan> if no one uses CTCP SOURCE, then clearly INTERCAL should.
00:57:30 <ais523> (C-INTERCAL won't let you do that with a completely different data type from the one that's meant to be there; CLC-INTERCAL will)
00:58:00 <monqy> hm, maybe I should learn INTERCAL sometime.
00:58:31 <ais523> perhaps I should give lessons in-channel, so elliott doesn't have to walk all the way from Hexham to attend them
01:00:39 <zzo38> I didn't implement CTCP SOURCE because I didn't know the proper response
01:01:30 <oerjan> maybe the joke is that CTCP SOURCE is actually unimplementable
01:02:53 <ais523> well, you're meant to give details of an FTP server you can get the source of the IRC client from, and where on the server to look
01:03:25 <zzo38> An FTP URL would give those details, I think.
01:04:02 <ais523> yep, but there's a different format defined in the standard, IIRC, that nobody uses
01:04:23 <zzo38> However I do not run an FTP server and I don't know FTP server to put it on. If you have any FTP server, then I will be glad to upload my IRC client source code to that server and program it to give that information.
01:05:16 <Gregor> It is the nineties, and there is time for FTP server.
01:05:27 <ais523> I think that's the real reason CTCP SOURCE isn't implemented much, the people who remember it exists don't have FTP servers handy
01:05:53 <Gregor> Surely IRC doesn't predate URLs ...
01:06:39 <oerjan> i assume the frc stuff is still on the nvg ftp server where i put it
01:07:02 <oerjan> or else somewhat would probably have complained
01:07:06 <oerjan> *someone
01:07:10 -!- augur has quit (Remote host closed the connection).
01:10:44 -!- CakeProphet has joined.
01:10:44 -!- CakeProphet has quit (Changing host).
01:10:44 -!- CakeProphet has joined.
01:11:32 <CakeProphet> <Gregor> > let 4 = 2 in 4 + 4
01:11:43 <CakeProphet> I must be master of Haskells for understanding that one.
01:12:05 <oerjan> IT'S COMPLETELY LOGICAL, I SAID
01:12:15 <CakeProphet> yeah not a semantic error
01:12:20 <CakeProphet> just a failed pattern match
01:14:02 <CakeProphet> = as equality is a lie!
01:14:40 <CakeProphet> no equality in Haskell. it is a fascist language.
01:15:19 <CakeProphet> > let [] = 4 in undefined
01:15:20 <lambdabot> No instance for (GHC.Num.Num [t])
01:15:20 <lambdabot> arising from the literal `4' at <inter...
01:15:49 <CakeProphet> yeah okay. I wasn't sure if it could give "types" to patterns or not.
01:15:57 <zzo38> You could mention properties of URLs (depending on URI scheme, but sometimes also on other parts of the URL): interactive, readable, writable, enumerable, fileable, displayable, ...
01:16:24 <zzo38> (Although some things depend on the system, such as which URLs are displayable type of URL, and so on)
01:16:27 <CakeProphet> interactive = readable + writable?
01:17:16 <zzo38> CakeProphet: No, not quite.
01:17:50 <zzo38> HTTP URLs are readable and writable but not interactive.
01:18:05 <CakeProphet> ah interactive as in stateful
01:18:29 <zzo38> Telnet is interactive.
01:18:59 <oerjan> as is ftp
01:19:11 <CakeProphet> right.
01:19:16 <CakeProphet> sustained connection.
01:19:20 <CakeProphet> I forgot the term.
01:20:29 <CakeProphet> persistentI know HTTP is referred to as a stateless protocol, so an interactive protocol would be the opposite of a stateless one I think.
01:20:39 <CakeProphet> >_>
01:21:36 <CakeProphet> my subconscious must be at work.
01:21:48 <zzo38> I was thinking of a system with the following URI schemes: ftp gopher http telnet tape sprunge file h o s x (h = hard drive, o = optical drive, x = USB Plan 9 or network Plan 9, s = active saver directory, tape = encode data in audio I/O)
01:21:58 * CakeProphet sits in an armchair and consternates.
01:22:35 <CakeProphet> don't forget data
01:22:46 <zzo38> Where the commands are LOAD, SAVE, and DISPLAY with one URL, and COPY with two URLs. (These are in BASIC. However, it will also have corresponding Forth commands)
01:22:58 -!- oerjan has quit (Quit: Good night).
01:23:30 <CakeProphet> I think being inspired by BASIC should be against the rules.
01:24:36 <zzo38> O, and the sprunge URL is write-only URL that is treated like HTTP, but the # if any is the name of the form field to send to ("sprunge" is the default), and there can be a status message.
01:25:26 <zzo38> For example: sprunge://sprunge.us/#sprunge is an upload URL for text programs, and then it has a status message is the "http://" URL which downloads the file. (If you upload to "http://" directly it uses PUT method)
01:25:48 <CakeProphet> zzo38: I have an idea for a chess variant you might be interested in.
01:26:07 <zzo38> CakeProphet: OK.
01:27:08 <CakeProphet> you begin the game with a king, and two portals (knights)
01:27:28 <zzo38> OK
01:27:45 <CakeProphet> all of your other available pieces are in a pool at the start of the game. When a portal moves it can optionally leave behind a piece from the pool.
01:28:07 <zzo38> OK.
01:28:27 <zzo38> Does the knight still move and capture as in FIDE chess or is there different rules?
01:28:56 <CakeProphet> there are two cannons (rooks), four arrows (pawns with a sharpie mark to indicate a direction), missiles (pawns), and... some other pieces I haven't decided on yet.
01:29:15 <CakeProphet> different movement rules for everything, except the king who is pretty much the same at this point.
01:29:23 <CakeProphet> though I may give him some special rules.
01:29:48 <CakeProphet> haven't workd out the movement rules
01:29:50 <zzo38> OK. Is there castling?
01:30:03 -!- SgeoN1 has joined.
01:30:30 <CakeProphet> but the basic idea is that when a cannon is adjacent to a missile, then the missile is expended and anything in a straight line from the missile going away from the cannon is captured.
01:30:45 <CakeProphet> missiles can be fired cardinally or diagonally.
01:31:04 <CakeProphet> no castling
01:31:08 <zzo38> OK
01:31:08 <CakeProphet> nothing from chess is given.
01:31:30 <CakeProphet> okay, so portals and arrows have directionality. at the end of their move they can be rotated a different direction, also diagonally or cardinally.
01:31:59 <CakeProphet> when an arrow is in the path of a fired missile, it redirects the path of capturing in the direction of its nose (arrows are knights)
01:32:20 * SgeoN1 badmoods
01:32:31 <monqy> I thought arrows were sharpied pawns
01:32:36 <monqy> make up your mind!!!
01:32:39 <itidus21> CakeProphet: thats a fantastic damn idea
01:32:55 <CakeProphet> if a missile is fired at a portal, and the sharpie mark on the portal is facing the path of the projectile, then the path of fire continues out of the other portal on the board.
01:33:06 <Jafet> Are they sidewinders? They must be sidewinders.
01:33:13 <CakeProphet> also, if a portal is captured, its corresponding linked portal explodes and captures itself and all pieces adjacent to it. :)
01:33:51 <CakeProphet> pieces can also move through portals, by moving "on top" of the portal, their path of motion continues in the direction the other portal is facing.
01:34:01 <ais523> "captures itself" is ridiculous terminology
01:34:11 -!- augur has joined.
01:34:11 <CakeProphet> for a piece that only moves one square this means that they appear on the other side in front of the portals opening.
01:34:20 <ais523> why not just use "dies" or whatever, given that you're changing everything else about chess?
01:34:21 -!- sebbu has quit (Read error: Connection reset by peer).
01:34:42 <CakeProphet> so portals act as teleporters as well. these rules are independent of piece color. So you can use enemy portals and arrows just as well as your own. and fired missiles can capture any piece regardless of color.
01:35:18 <Jafet> Because it wouldn't be a chess variant any more!
01:35:22 <CakeProphet> the goal is to capture the king.
01:35:32 <monqy> is the number of pieces the same as in chess or can you portal-place at most more or less than chess
01:35:34 <CakeProphet> that's probably the only thing that stays the same.
01:36:12 <itidus21> there is a reason that people don't play much chess on video game consoles
01:36:34 <monqy> oh? this has always puzzled me
01:36:41 <CakeProphet> same number of pieces. you get two portals (knights), two cannons (tooks), one king, one queen (whose role is undecided), two bishops (role also undecided), and four arrows (four specially marked pawns)
01:37:02 <CakeProphet> the remaining pawns are replenishable so when they are captured they return to your spawn pool for replacement by a portal.
01:37:24 <CakeProphet> originally the queen was going to be the piece-spawner but I realize the queen would then serve no purpose once all pieces are spawned, other than to place missiles and capture normally.
01:37:31 <itidus21> monqy: i suppose my argument isn't fair because chess is free
01:38:26 -!- sebbu has joined.
01:38:26 -!- sebbu has quit (Changing host).
01:38:26 -!- sebbu has joined.
01:40:21 <CakeProphet> cannons are slow moving pieces, I'm thinking one square any direction per turn, with no capturing. portals have large movement spans, perhaps 3-4 squares with jumping though I haven't decided if there are any restrictions to how they can move. they can only capture in the direction of their portal, and can only be captured from directions that their portal is not facing otherwise you piece just teleports to the other sid
01:40:46 <CakeProphet> s/you/the/
01:41:20 <CakeProphet> arrows move like bishops and can't capture. kings movement and capturing is the same.
01:41:57 <CakeProphet> most pieces can't move very quickly, thus making the missile firing and teleporting more valuable.
01:42:28 <CakeProphet> also I've got some rules for how infinite loops work with the projectiles.
01:42:52 <CakeProphet> because you can easily set up an infinite loop with four arrows or two portals and any number of arrows.
01:43:21 <Jafet> ALL THE PORTALS ASPLODE.
01:43:56 <CakeProphet> so an arrow in an infinite loop can capture in any direction by simply turning, which then breaks the loop but gives one free capture.
01:44:06 <CakeProphet> same with portals.
01:44:31 <CakeProphet> you could also have multiple circuits the loop could take, with arrows and portals acting as switches.
01:45:29 <CakeProphet> but I imagine in practice the setup time would often not be worth the gain.
01:46:56 <CakeProphet> the idea is to make capturing somewhat difficult. you have to rely on misguiding your opponent with convoluted portal/arrow setups.
01:47:17 <monqy> knight pieces would make the best arrows, as they clearly point in a single direction, so no sharpie, but you specify 4 arrows, and there are only 2 knmights
01:47:27 <CakeProphet> well portals have direction as well
01:47:30 <CakeProphet> and there are only two of those.
01:47:35 <CakeProphet> I like four arrows because it allows more craziness.
01:47:51 <CakeProphet> four portals would be, perhaps, too much craziness. :P
01:48:12 <CakeProphet> some bishop pieces have notches on them as well, so arrows could be bishops in that case but then there are only two.
01:48:20 <CakeProphet> not sure what the bishop does at this point.
01:48:38 <CakeProphet> I was thinking one piece would be special in that if a friendly projectile passes through it it would change the nature of the projectile
01:48:42 <monqy> I dunno how anyone would use arrows
01:48:43 <CakeProphet> perhaps allowing the capturing of arrows.
01:48:51 <CakeProphet> monqy: strategically.
01:48:52 <monqy> it might be interesting to program bots for this game and see what people do
01:48:52 <CakeProphet> :P
01:49:02 <monqy> CakeProphet: but how? what strategies?
01:49:11 <CakeProphet> well cannons are slow, arrows are fast.
01:49:26 <CakeProphet> so you don't want to move cannons all over the board, you would just redirect projectiles via arrows.
01:50:03 <monqy> I'm also thinking you could guard your cannon and then use arrows to move around
01:50:10 <CakeProphet> also you can point your arrows at opponent arrows/portals and utilize them / force them to move elsewhere.
01:50:19 <monqy> by move around I mean go into dangerous places
01:50:29 <CakeProphet> essentially the strategy would be much like chess in that you could set up situations where your opponent has to choose between two pieces.
01:50:34 <monqy> can arrows capture? I think they'd be most intesting if they can't
01:50:41 <CakeProphet> they can't
01:50:43 <monqy> good
01:50:46 <monqy> er
01:50:49 <monqy> intesting/interesting
01:50:53 <CakeProphet> also they are difficult to capture because they redirect projectiles.
01:50:55 <monqy> intesting is _not a word_
01:50:58 <monqy> as far as I know at least
01:51:19 <CakeProphet> though I was thinking one of the queens abilities would be to change friendly projectiles that pass through her so that they can capture arrows.
01:51:32 <CakeProphet> or perhaps the king.
01:51:34 <CakeProphet> but
01:51:42 <CakeProphet> utilizing the king in that way to capture arrows seems not so smart.
01:52:04 <monqy> do arrows have a fixed direction or is repositioning them a valid move or part of a valid move
01:52:12 <CakeProphet> also not sure how missiles work. if they can move/capture.
01:52:14 <monqy> and how does portal repositioning go
01:52:23 <CakeProphet> repoisition is a valid move and can be done after they are moved normally
01:52:31 <CakeProphet> so you can turn them and leave them in the same place
01:52:36 <CakeProphet> or move them and then turn them in one turn.
01:52:48 <CakeProphet> same rules for portals.
01:52:53 <CakeProphet> all of the directional pieces have this rule.
01:52:58 <CakeProphet> currently there are only two directional pieces.
01:53:07 <zzo38> How do you use the (Maybe Dec) parameter of the VarI constructor?
01:53:38 <zzo38> CakeProphet: You could have a rule for rooks to flip if you need that too, flip right-side-up or upside-down
01:53:38 <CakeProphet> I believe portals will be highly valuable due to their mobility and their ability to make other things mobile
01:53:44 <CakeProphet> also you don't want to lose them because they asplode.
01:53:57 <CakeProphet> zzo38: yes I've seen that in Ultima
01:54:06 <CakeProphet> I've considered a possible use for that but don't have one so far.
01:54:43 <zzo38> In the game Baroque (a.k.a. Ultima) you do have one rook up and one upsidedown, but they don't ever flip during the game.
01:54:50 <CakeProphet> right.
01:55:03 <CakeProphet> I probably wouldn't do that as two cannons seems like a good number
01:55:06 <CakeProphet> one would be very limiting.
01:55:17 <zzo38> OK.
01:55:18 <CakeProphet> but the cannons could have two different moves of operation somehow.
01:55:21 <CakeProphet> *modes
01:55:25 <zzo38> OK, maybe.
01:55:45 <CakeProphet> bahahaha terran siege tanks.
01:56:04 <CakeProphet> siege mode allows firing, tank mode allows faster movement.
01:56:06 <CakeProphet> (no, this is a bad idea)
01:56:49 <CakeProphet> still need to figure out the queen and bishop
01:57:03 <zzo38> But I realized, that even in FIDE chess, you might have flippable rooks; start upsidedown but flip them the right way up as soon as they make a move or if the king moves. This is used in case it is difficult to remember if you are allowed you castle; now you can know for sure castling or not.
01:57:03 <CakeProphet> the queen should obviously do something kind of queen-like.
01:57:19 <CakeProphet> ah, yes.
01:57:25 <zzo38> (I implemented Chess.zrf in a similar way to this, actually)
01:57:42 <zzo38> (This is a public domain prorgam, an alternative to the standard Chess.zrf)
01:57:42 <Jafet> How do people forget whether they're allowed to castle
01:58:00 <CakeProphet> in some earlier mental drafts the queen could swap places with any other piece but the king, and spawned pieces at the beginning of the game like portals currently do.
01:58:11 <CakeProphet> I don't think I like that though.
01:58:32 <zzo38> Jafet: Even if the people do not forget, I used a similar method to make the computer keep track of if castling is allowed
01:59:40 <CakeProphet> but the idea is for the queen to be similar to that in chess. a very powerful piece but something you wouldn't want to sacrifice and thus limited by that in the early game.
01:59:41 <pikhq_> Jafet: Well, it's possible due to being a form of game state that's not directly encoded.
01:59:46 <CakeProphet> not sure how that would work with these rules.
02:02:39 <CakeProphet> I also considered, simply for the fun of the though, that bishops could be prisms. So when they are hit by a projectile the projectile branches in the other three cardinal (or diagonal, depending on the original path) directions.
02:02:51 <CakeProphet> this is however a terrible idea. but fun to consider.
02:03:00 <CakeProphet> s/though/thought/
02:03:33 <CakeProphet> or the queen could do this.
02:04:33 <CakeProphet> there are still some issues to work out.
02:05:04 <itidus21> on the topic of chessvariants, one move scheme i thought of one time is giving a piece 2 options. a short move which can capture, and a longer move which cannot capture
02:05:08 <zzo38> I have implemented many variants including 123456 Chess and Chess with Wickets.
02:05:22 <CakeProphet> itidus21: there are variants with exactly this sort of scheme
02:05:45 <itidus21> i was thinking of street fighter 2 when i thought of it
02:05:51 <CakeProphet> in particular one problem is that, if your piece spawner dies, you now have a finite supply of missiles.
02:06:06 <itidus21> and such things.. where you have this speed vs strength trade off
02:06:18 <itidus21> and just in general this tradeoff exists eh
02:06:36 <CakeProphet> so perhaps I should use the original rules, where the cannons spawn missiles adjacent to them, and then the subsequent turn they're fired. making projectiles a 2-turn process, but this also has disadvantages.
02:06:50 <itidus21> the nimble weakling vs the stumbling oaf
02:07:45 <itidus21> :D :D oh man.. i wonder if they ever made chess variants based off of animes
02:07:58 <CakeProphet> hmmm./
02:08:22 <itidus21> like dragon ball z, naruto, bleach, these kinds of things
02:08:28 <CakeProphet> I guess no one is interesting in offering suggestions so I'll shush now. I was hoping for some ideas.
02:08:39 <itidus21> sorry.. im off-topicing
02:08:48 * itidus21 sidles away.
02:09:01 <CakeProphet> itidus21: DBZ checkers. when you reach the end of the board you're promoted to super saiyan.
02:09:31 <itidus21> i like the idea of a cannon and a cannonball(which you have called a missile)
02:09:49 <CakeProphet> yes but there are issues with strategy and overall game progression
02:10:00 <CakeProphet> such as what happens when you lose all of your cannons, or both of your portals, etc.
02:10:18 <CakeProphet> if missile spawning is tied to a piece that's expendable then you have a situation where cannons are basically useless.
02:10:18 <itidus21> its a bit like a pinball scheme you have dreamed up.. where the cannon is the launcher
02:10:41 <CakeProphet> and once cannons are useless then arrows are useless.
02:10:47 <itidus21> and the arrows are those bouncy parts
02:11:39 <CakeProphet> so perhaps cannons should spawn their own missiles.
02:11:53 <itidus21> or something like gregor's 2L which i was peeking at the other day
02:12:41 <CakeProphet> hmm
02:13:05 <itidus21> see im really not a chess guy.. ill drop out here and let someone who better understands in
02:14:13 <CakeProphet> there could be no missile pieces.
02:14:17 <CakeProphet> cannons can just fire...
02:14:31 <CakeProphet> and then pawns are some sort of expendable but useful thing.
02:15:03 <CakeProphet> ah, one-time use trampolines. :)
02:15:06 <CakeProphet> perhaps.
02:15:36 <CakeProphet> this gives them a defensive use while also making them not overpowered. They're not invincible.
02:15:50 <CakeProphet> but they protect pieces behind them in the line of fire.
02:15:53 <CakeProphet> for one shot.
02:15:57 <CakeProphet> perhaps.
02:16:20 <CakeProphet> nah...
02:18:44 <CakeProphet> but it definitely makes sense for cannons not to rely on a missile piece for firing.
02:20:44 <CakeProphet> ah okay.
02:21:17 <CakeProphet> the two cannons are different. one fires diagonally one fires cardinally. otherwise they'd be ridiculous.
02:21:30 <CakeProphet> also help what is a sidewinder.
02:22:54 <zzo38> I have played pinball games with nonstandard launch, such as JiggleBox.
02:23:26 <zzo38> CakeProphet: Yes, that is idea; you could use rook upsidedown to indicate that, too.
02:24:23 <CakeProphet> right that was implied.
02:24:45 <CakeProphet> so that removes the cumbersome missile requirement without making cannons like super-queens
02:24:57 <CakeProphet> well, slow super-queens :P
02:25:37 <CakeProphet> perhaps the piece spawning mechanic should also be ditched.
02:25:40 <zzo38> I do know about Chinese cannons (in Xiangqi and some other chess variants), but I suppose your game is entirely different cannons and has nothing to do with that.
02:26:15 <CakeProphet> yes the cannons are vital. portals are probably second most vital.
02:26:25 <CakeProphet> arrows are probably more useful than I currently realize.
02:26:55 <CakeProphet> okay, nevermind, I now realize they are useful.
02:27:03 <CakeProphet> than I previously realized, or whatever. :P
02:27:46 <CakeProphet> okay so either the queen or the two bsihops have the arrow-destroying property.
02:29:30 * CakeProphet is going to go read some chess variant rules for inspiration.
02:30:14 <zzo38> Do you know Emperor-Wars? I had a book about it once, but now I lost it. It is also a chess variant.
02:31:05 <zzo38> Here is my chess variants using mostly normal chess pieces. All URLs start with http://www.chessvariants.org/index/msdisplay.php?itemid=
02:32:36 <CakeProphet> the queen /could/ be like an arrow with no direction.
02:32:45 <CakeProphet> the player can freely choose in which direction it redirects.
02:33:00 <CakeProphet> but then there is no drawback to this. there isn't the same sacrifice-dynamic here.
02:33:51 <zzo38> MS123456chess MS2choicechess MSblandchess MSchecker-captur MSchesswithcheck MSchesswithquant MSchesswithwicke MScommunistchess MSinvisiblekingc MSvariantswithqu
02:33:51 -!- augur has quit (Remote host closed the connection).
02:35:25 <zzo38> These are list of my variants using mostly normal chess set. A chess/checkers/backgammon set is preferred.
02:37:24 <CakeProphet> perhaps two arrows is sufficient.
02:37:33 <CakeProphet> so then bishops could be arrows.
02:37:49 <zzo38> OK.
02:39:26 <zzo38> Do you know about Shogi or Xiangqi?
02:39:33 <CakeProphet> Xiangqi yes.
02:41:25 <zzo38> I know how to play both.
02:43:24 <CakeProphet> perhaps there could be... no pawns.
02:43:39 <zzo38> And I especially like Tsume Shogi.
02:43:59 <CakeProphet> otherwise I think they should be trampolines (think befunge #)
02:48:46 <zzo38> Here are some chess variants: http://www.chessvariants.org/fiction.dir/hitchhiker/zork_and_turn.html (I like many of the variants by Claude Chaunier and Joao Pedro Neto)
02:48:46 <zzo38> It defines chess variants as follows: Chess is a class of games that comply with the following restriction: There must be at least one special piece, called King. Each player must protect his own King and loses if it is captured or checkmated.
02:48:59 -!- EgoBot has quit (Ping timeout: 252 seconds).
02:49:35 -!- Zetro has quit (Quit: End of Stream).
02:49:36 -!- EgoBot has joined.
02:49:42 -!- Zetro has joined.
02:51:38 -!- MDude has changed nick to MSleep.
02:54:20 -!- augur has joined.
02:55:05 <ais523> so suicide chess isn't a chess variant?
02:55:20 <zzo38> ais523: I think it is a chess variant, actually.
02:55:32 <ais523> but it doesn't have any special powers involving the king
02:55:36 <zzo38> The definition that description gives is not completely accurate, I think.
02:55:45 <zzo38> ais523: Some forms of suicide chess allow castling.
02:55:59 <monqy> is suicide chess anything like strip chess
02:56:11 <ais523> but the capture or checkmate of the king doesn't end a game of suicide chess
02:56:13 <ais523> monqy: not really
02:56:38 <CakeProphet> zzo38: I would think the only real technical requirement of a chess variant is that it bear some semblance to chess. Either using the same board, a similar rule, or the same pieces.
02:56:43 <zzo38> ais523: I know; that is why I say I think that definition is inaccurate
02:57:07 <monqy> I dunno how strip chess would work. Is there a good ruleset?
02:57:12 <zzo38> CakeProphet: That definition is also inaccurate, I think, as seen by the various chess variants existing.
02:57:48 <CakeProphet> so if a chess variant has a completely different board, completely different pieces, and no rules in common with chess
02:57:52 <CakeProphet> is it still a chess variant?
02:57:52 <monqy> loser retroactively takes off clothes? is that fair?
02:57:54 <ais523> monqy: normally on captures, is how chess is adapted to the usual forfeit-related game-patterns
02:58:10 <ais523> although that probably works better with alcoholic chess than strip chess
02:58:33 <CakeProphet> yeah, you could also employ piece values to determine various things.
02:58:35 <zzo38> Oops! GHC told me to report a bug because the 'impossible' happened.
02:58:48 <CakeProphet> in drinking chess the piece value would determine how much or what you drink.
02:58:56 <ais523> indeed, it does
02:59:14 <ais523> "please report a bug: it's not that anything drastic's gone wrong internally, we're just lonely"
03:00:07 <CakeProphet> okay so the only things to figure out now are a) starting piece position b) purpose of the queen c) make the movement rules a bit more precise
03:01:13 <zzo38> Oops! The database for GHC bug tracker is locked.
03:01:20 <monqy> the queen can swap with any piece? is that too useless or powerful or similar to other pieces?
03:01:20 <zzo38> Therefore I cannot report a bug.
03:02:06 <CakeProphet> monqy: it's not useless it would actually give it a similar sacrifice dynamic. it would be similar to the portal but more useful I think. Also it needs to have some other purpose besides that
03:02:30 <CakeProphet> originally it was to spawn pieces, but I later ditched that. Also I considered some kind of sacrifice dynamic where pieces adjacent to the queen could be sacrificed and replaced by other pieces.
03:02:36 <CakeProphet> but that could be a little wonky.
03:02:44 <zzo38> Type of classInstances is classInstances :: Name -> [Type] -> Q [Name] different from the documentation, and the code producing error is $(classInstances ''Num [ConT ''Integer] >>= reify . head >>= runIO . print >> [| 0 |])
03:03:27 <CakeProphet> monqy: I think the queen should permit the capturing of arrows by cannons. perhaps it could also change the nature of friendly projectiles so that they clear an entire path instead of capturing only one piece, but this might make it incredibly easy to checkmate.
03:03:47 <CakeProphet> you wouldn't want your king in an enclosed area where it can't move.
03:03:55 <zzo38> What does "reifyType PredTy" mean?
03:04:11 <monqy> CakeProphet: my idea would give the queen the job of positioning important pieces, rescuing important pieces, and fleeing by swapping with an unimportant piece
03:04:38 <CakeProphet> rescuing and what way?
03:04:44 <monqy> CakeProphet: important pieces mainly being clumsy slowmoving things like the king and the cannons
03:04:54 <monqy> rescuing as in swapping out with a piece in danger
03:04:59 <CakeProphet> well I would specifically not allow swapping with the king.
03:05:02 <CakeProphet> I think.
03:05:03 <monqy> what!!!
03:05:13 <monqy> special cases are not cool!!!
03:05:21 <CakeProphet> sure they are. the king is already a special case.
03:05:37 <monqy> diaf, cakechess
03:06:29 <CakeProphet> so then the queen basically becomes a very useful support tool that is very difficult to capture. Not sure I like that.
03:07:04 <monqy> what's not to like? not a rhetorical question; I honestly haven't thought much about my queen, beyond what I already said
03:07:17 <zzo38> OK, I managed to report bug now
03:07:31 <CakeProphet> the best way to capture the queen would be to put the king in a check in which the only way to escape is to swap with the queen.
03:07:44 <CakeProphet> otherwise the queen can just disappear as it pleases.
03:10:16 <monqy> disappear as it pleases at the cost of sacrificing your pieces!! of coruse all pieces would have to be fairly valuable for this to be meaningful
03:10:16 <CakeProphet> also the portal fills a similar role albeit in a different way.
03:10:31 <CakeProphet> all pieces except pawns are extremely valuable.
03:10:59 <monqy> portal sort of fulfiles the moving a piece into attack role except only once when it places the piece
03:11:31 <monqy> CakeProphet: so then i guess you place pawns either when you're out of other stuff to place or you want queen escape teleport fodder?
03:11:33 <CakeProphet> yes sort of makes the cannons slowness less of an issue, in a way similar but different to arrows.
03:12:31 <CakeProphet> monqy: oh by the way I ditched the portal spawning stuff.
03:12:35 <monqy> oh
03:12:35 <CakeProphet> you begin the game with all pieces on the board.
03:12:44 <monqy> that makes queens more problematic
03:12:49 <CakeProphet> but portal however can still teleport pieces. a piece walks into the direction the portal is facing
03:12:53 <CakeProphet> and comes out the other side.
03:12:55 <CakeProphet> like a poral.
03:12:59 <CakeProphet> portals are portals.
03:13:01 <monqy> i was going on the assumption that you had to take turns to place pawns for use with queens
03:14:10 <CakeProphet> the queen could always just be a simple piece adept at capturing.
03:14:19 <CakeProphet> something that is lacking in this game.
03:14:28 <CakeProphet> currently arrows are very tricky to capture.
03:14:37 <CakeProphet> and are very valuable when strategically placed.
03:14:38 -!- augur has quit (Remote host closed the connection).
03:15:08 <monqy> also i forgot about portals actually working as portals oops
03:15:19 <CakeProphet> yes portals will be fun.
03:15:21 <monqy> also i remember you saying something about portals having a direction? what's that about
03:15:53 <CakeProphet> the direction is the direction the portal is facing. you can't capture it from that direction because you just pass through.
03:16:08 <CakeProphet> projectiles pass through as well as pieces.
03:16:24 <CakeProphet> all other directions are open for capture though.
03:16:51 <monqy> directional capturing? what's that about
03:16:54 <CakeProphet> not sure how or if portals capture. Perhaps that can capture in one direction, making them kind of useful defensively.
03:17:05 <CakeProphet> ...I mean, I hoped it was kind of an intuitive concept but I guess not.
03:17:15 <zzo38> "People usually think great things about Planets. The fact is planets are just small and rocky or big and foggy gravity modeled spheres, where complex biological cells try to grab to its surface as hard as they can, in order to invent cable television."
03:17:18 <monqy> if anything has knightsmoves, will portals not work for them?
03:17:36 <CakeProphet> knights still have a direction in which they're moving when capturing, so it will still work
03:17:43 <CakeProphet> also I don't plan on having anything that moves like a knight
03:17:49 <CakeProphet> except that portals can hop.
03:18:22 <CakeProphet> .....also I have no considered what happens when a portal tries to pass through a portal it is linked to.
03:18:26 <CakeProphet> I'd thinkt his isn't possible.
03:18:47 <CakeProphet> or they just explode or something.
03:18:51 <CakeProphet> which could be useful.
03:19:12 <CakeProphet> a portal is bound to explode at some point. it's in their nature.
03:19:47 <CakeProphet> (explode meaning that all adjacent pieces and the piece itself are captured)
03:20:28 <ais523> how big's the board? 8x8 would be hilarious given this complexity
03:20:43 <CakeProphet> 8x8 I'd imagine. I don't have fancy boards.
03:23:27 <CakeProphet> I've been running situations in my head and if you use a starting board placement that's exactly the same as normal chess it works out similarly.
03:23:47 <CakeProphet> well, actually I'll probably modify it a little bit.
03:24:38 <CakeProphet> but basically it works similarly to chess from what I can except that where you should move pieces is now drastically different.
03:24:51 <CakeProphet> you should basically have no need to move cannons until the endgame.
03:25:50 <CakeProphet> the cannon essentially acts as a piece that turns other friendly pieces in its path of fire into projectiles.
03:26:04 <CakeProphet> put a portal directly in front of a cannon and now your second portal can shoot things.
03:26:23 -!- evincar has joined.
03:27:21 <CakeProphet> also what is being sacrificed is not directly straightforward, for example. say you have your portal set up directly in front of your cannon, and an arrow is placed so that the enemies cannon can capture your portal.
03:27:34 <CakeProphet> so, you spend your turn to turn your portal to face the arrow so that the portal won't be captured.
03:28:17 <CakeProphet> ...but now you've either sacrificed some other piece you own on a completely different location on the board, or you've pointed the potential projectile at an enemy piece and thus caused them not to fire.
03:28:28 <CakeProphet> wildly different things could happen as the result of a single move.
03:29:32 <evincar> I thoroughly endorse these shenanigans.
03:30:04 -!- copumpkin has joined.
03:34:17 <monqy> hi evincar
03:35:23 <zzo38> Make a chess variant based on this idea: "A Black Hole is a place where all the White squares has been removed from the local representational Chess board."
03:35:48 <pikhq_> ... Relativistic chess?
03:36:21 <zzo38> I don't know.
03:40:42 <CakeProphet> I need a name for my game.
03:40:53 <monqy> I've been calling it cakechess, once.
03:40:59 <zzo38> CakeProphet: I don't know.
03:41:20 <evincar> Cakechess is fine as a working title.
03:41:43 <CakeProphet> I was thinking shellshock but I'm almost certain that's already the name of something.
03:41:46 <evincar> monqy: Ohai.
03:43:48 <CakeProphet> there's some stupid online game called shellshock
03:43:53 <CakeProphet> so I could call my game shellshocked
03:44:34 <CakeProphet> I think cannon placement will be somewhat problematic
03:44:39 <CakeProphet> for the starting layout.
03:45:38 <CakeProphet> though I think pawns will perhaps mitigate the problem to a degree.
03:46:21 <CakeProphet> essentially since capturing by cannon is indirect there's no defenses for things like bishops and rooks in chess
03:46:35 <CakeProphet> where you have many units surrounding the piece to capture it
03:46:42 <CakeProphet> because the cannon can just capture from afar.
03:47:03 <CakeProphet> I suppose it's the same thing you just have to think about it differently.
03:47:28 <CakeProphet> those above sentences probably make no sense to anyone else but me.
03:49:06 <CakeProphet> okay so assuming the diagonal cannon is on queenside and the cardinal cannon on kingside.
03:49:17 -!- pikhq has joined.
03:49:29 <CakeProphet> moving g2 to g3, then f1 to g2
03:49:46 <CakeProphet> er no, wrong side.
03:49:54 -!- pikhq_ has quit (Ping timeout: 260 seconds).
03:50:01 <CakeProphet> b2 to b3. then c1 to b2.
03:50:05 <CakeProphet> would be a good starting move for white.
03:50:38 <CakeProphet> because the arrow protects your diagonal cannon while also allowing you to aim it
03:50:43 <CakeProphet> but there are likely other good starting moves.
03:51:16 <CakeProphet> and then black will need to do very different things in order to react defensively to white.
03:52:05 <CakeProphet> also strange things could easily happen very quickly. :P
03:53:48 <CakeProphet> infinite loops between two opposing arrows would be, uh, interesting.
03:55:03 <CakeProphet> yeah I'm thinking the queen could act as a directionless arrow.
03:55:19 <CakeProphet> that can also capture.
03:55:24 <CakeProphet> but doesn't move as quickly.
03:58:23 <zzo38> I have read about program to make up the Haskell function from the type, but can it work with Template Haskell?
03:58:53 <copumpkin> just integrate @djinn
03:58:59 <copumpkin> @djinn a -> Not (Not a)
03:59:00 <lambdabot> f a b = b a
03:59:12 <copumpkin> @djinn Either (Not a) (Not b) -> Not (a, b)
03:59:13 <lambdabot> f a =
03:59:13 <lambdabot> case a of
03:59:13 <lambdabot> Left b -> \ (c, _) -> b c
03:59:13 <lambdabot> Right d -> \ (_, e) -> d e
03:59:14 <CakeProphet> meaning that a friendly projectile can be redirected to any path across the queen, and will at that point be able to capture arrows, but enemy projectiles will still capture her. (yes, a special case.)
04:00:37 <CakeProphet> so this is something that is incredibly useful, but vulnerable
04:00:47 <zzo38> copumpkin: That is seem a function taking two parameters, the type specifies only one, what is the Not type?
04:01:00 <copumpkin> type Not a = a -> Void
04:01:11 <zzo38> And how do I do djinn? I cannot find the information it seem broken
04:01:38 <copumpkin> you just give @djinn a type and it will try to write a function (prove) of that type
04:01:55 <copumpkin> what I wrote up there was one of the deMorgan laws
04:02:22 <zzo38> OK, I understand those things. But it still doesn't explain how to integrate @djinn into another program, because I do not have the information of that program.
04:02:22 <copumpkin> oddly enough, in haskell, only three out of the four deMorgan laws are true
04:02:43 <copumpkin> http://hackage.haskell.org/package/djinn-th
04:02:54 <copumpkin> and http://hackage.haskell.org/package/djinn
04:03:42 <zzo38> OK thanks
04:03:59 <itidus21> CakeProphet: to avoid infinite loops you could possibly give each arrow a finite number of arrowings per turn
04:04:07 <itidus21> just a thought
04:04:14 <itidus21> im sure theres other ways to get around it
04:04:41 <CakeProphet> itidus21: I have no intention of avoiding infinite loops
04:04:46 <itidus21> lol..
04:04:55 <CakeProphet> the only annoying about them is that you need to verbally declare that you have created one
04:05:03 <CakeProphet> which is kind of annoying and not very chess-like.
04:05:21 <CakeProphet> I guess you could just say "loop" or something like that, similar to check.
04:05:29 <itidus21> you have to declare check right?
04:05:39 <itidus21> (i don't know chess )
04:05:42 <CakeProphet> yes.
04:05:48 <itidus21> so it is chesslike really
04:05:51 <itidus21> not to worry
04:05:53 <CakeProphet> ...yes it's a chess variant.
04:06:07 <CakeProphet> using chess pieces, on a chess board, with what is currently the exact same starting layout.
04:06:16 <itidus21> i mean declaring a state of the game is chess-like
04:06:25 <CakeProphet> oh, well, right I just don't want it to be like
04:06:31 <itidus21> precidented on "check"
04:06:47 <itidus21> ^precedented
04:06:49 <CakeProphet> "oh uh, by the I just fired this cannon here and made this loop here that follows this path like so..."
04:06:55 * CakeProphet gestures and points awkwardly
04:07:17 <CakeProphet> which is normally not very chess-like as most of the time it's completely silent.
04:07:31 <CakeProphet> so I think saying "loop" would be sufficient except in cases where multiple possible loops can happen.
04:07:33 <zzo38> copumpkin: Which deMorgan laws not true in Haskell?
04:07:52 <copumpkin> @djinn Not (a, b) -> Either (Not a) (Not b)
04:07:52 <lambdabot> -- f cannot be realized.
04:08:07 <copumpkin> it's not provable in constructive logic
04:08:50 <zzo38> Is there a way to do different kind of logic?
04:09:10 <CakeProphet> "a player may simply declare "loop" in the event that they've fired a projectile that forms an infinite loop. If the opponent wishes the player to clarify, then they must do so."
04:09:19 <copumpkin> no, most programming (and proof assistants) model an intuitionist (constructive) logic
04:09:20 <CakeProphet> sounds good to me.
04:09:40 <copumpkin> classical logic is very non-computational
04:10:08 <zzo38> copumpkin: I know, Curry-Howard uses intuitionistic logic, and sometimes it is good, but sometimes you might want different logic and I think I read someone can somehow make it using different logic too
04:10:29 <CakeProphet> itidus21: actually I forsee loops being a useful defensive and offensive strategy.
04:10:31 <copumpkin> some type systems encode substructural logics
04:10:43 <zzo38> What are substructural logics?
04:10:46 <copumpkin> but you typically don't get classical logic
04:10:46 <itidus21> is a loop the end of a game?
04:10:54 <CakeProphet> either to respond to an enemies arrow placement with your own arrow pointing in the opposite direction, or to form defensive walls.
04:11:13 <CakeProphet> (part of the loop rules include that firing a projectile into an existing loop cancels both the loop and the fired projectile)
04:11:21 <copumpkin> substructural logics basically place restrictions on what you can do with your context, which in programming language terms, means that you put restrictions on how many times you can (or must) use your variables
04:11:28 <itidus21> oh so the loop persists between turns? :D
04:11:30 <copumpkin> some say that a variable must be used exactly once
04:11:32 <zzo38> OK, Wikipedia does have article about substructural logic, I will read that too
04:11:35 <copumpkin> others say at least once
04:11:35 <CakeProphet> loops work similarly to how you would imagine them to work, if you imagine the projectile as a deadly laser death wall
04:11:38 <copumpkin> others say at most once
04:11:38 <CakeProphet> itidus21: yes.
04:11:40 <copumpkin> and so on
04:11:41 <CakeProphet> itidus21: until the loop is broken.
04:11:41 <itidus21> dude you're good at this.
04:11:51 <copumpkin> even more strict ones say that you must use variables in the same order you declare them
04:12:06 <CakeProphet> itidus21: so all you have to do is turn an arrow in the loop and you immediately capture something. loops are a very dangerous situation.
04:12:23 <copumpkin> ATS and clean have type systems that support certain kinds of substructural logics
04:12:27 <CakeProphet> or turn a portal.
04:12:46 <itidus21> this thing you're describing is so far the coolest chess variant i have heard of
04:13:10 <monqy> of how many chess variants have you heard, anyhow
04:13:25 <itidus21> 1,220,005
04:13:26 <CakeProphet> actually I can forsee some situations in which the best way to counteract an infinite loop being used to capture something is to form another chain in the loop
04:13:35 <copumpkin> is this laserchess?
04:13:38 <CakeProphet> yes.
04:13:40 <copumpkin> I loved laserchess
04:13:45 <copumpkin> had to write an AI for it a while back
04:13:46 <CakeProphet> oh, is that a thing? nevermind
04:13:52 <copumpkin> oh
04:13:54 <CakeProphet> no this is something I've come up with that might be similar.
04:14:04 <copumpkin> you should check it out. It's lots of fun
04:14:08 <copumpkin> you have a laser and mirrors
04:14:09 <copumpkin> and rotation
04:14:14 <copumpkin> and the complexity is way higher than regular chess
04:14:32 <CakeProphet> yes it basically looks like this game but with way more arrows.
04:14:41 <CakeProphet> and different kinds of arrows
04:14:47 <CakeProphet> I've added portals as well.
04:14:52 <zzo38> Wikipedia does mention "Correspondence between classical logic and control operators", it has to do with continuations, apparently.
04:15:15 <CakeProphet> ah and mirrors don't work exactly like arrows.
04:15:28 <CakeProphet> an arrow forced the direction of a projectile into one specific direction. the mirrors can reflect two different ways.
04:15:49 <CakeProphet> er multiple different ways.
04:16:20 <itidus21> monqy: ok i will say there is no best chess variant. but basically, some games are more memorable than others independant of factors like marketing
04:16:33 <itidus21> ^and word of mouth
04:16:54 <CakeProphet> I think portals will be great fun.
04:17:08 <itidus21> i never even really followed the portal part of it
04:17:22 <CakeProphet> bah, I've explained it so many times now. :P
04:17:35 <itidus21> i can read log if i have to
04:17:39 <itidus21> its all there
04:17:42 <copumpkin> zzo38: yeah
04:18:03 <CakeProphet> portals are knights. the direction of their nose is the direction of the portal. You can literally think of it as a portal. If you move a piece into the opening they come out the other opening, moving as they normally would through the portal
04:18:15 <itidus21> a game only has to be slightly more memorable than the other games in order to achieve mainstream popularity
04:18:16 <CakeProphet> projectiles can travel through the portal opening as well.
04:18:18 <CakeProphet> for great fun.
04:18:20 <CakeProphet> and profit.
04:18:59 <CakeProphet> if you capture a portal its corresponding portal EXPLODES and everything around it and itself is captured.
04:19:17 <CakeProphet> portals can't point to nothing, and obviously this requires that they explode.
04:19:41 <CakeProphet> also trying to pass a portal through its sister portal will cause them to EXPLODE in the same fashion
04:19:44 <CakeProphet> paradox is not allowed.
04:19:58 <itidus21> like if i wrote a simulation where people play games and talk about them, the games which were talked about even slightly more would have iterated positive feedback
04:20:02 <CakeProphet> and obviously causes explosions.
04:20:35 <CakeProphet> also, if any other rules I discover cause annoying side-effects, you can be sure something will explode.
04:21:57 <CakeProphet> hmm, perhaps I should have four arrows again instead of just two.
04:22:03 <CakeProphet> sounds more fun.
04:23:40 <zzo38> I think I can understand why Pierce's law is not deducible, though. If it is a function type, you have a value of type ((a -> b) -> a) there is nothing to call the function because you need (a -> b) which you don't have. Is that correct? (I know there is unsafe functions, and undefined, but I believe you have to be limited to safe and halting computations)
04:26:13 <zzo38> I know there is (x ->) monad and I have suggested using do-notation for fantasy rule. Would you simply use different monads, or...?
04:32:03 <CakeProphet> so basically as it currently stands if you lose a portal, cannon, or prism (queen) you are very likely to lose.
04:32:12 <CakeProphet> especially a portal, as a portal takes many pieces with it.
04:32:24 <Lymee> :t fix($)
04:32:25 <lambdabot> forall a b. a -> b
04:32:34 <Lymee> zzo38, what do you mean by "you don't have"
04:32:41 <Lymee> @djinn (a->b) -> a
04:32:41 <lambdabot> -- f cannot be realized.
04:33:14 <CakeProphet> can anyone think of any interesting ideas for pawns? Currently they move and capture exactly as chess pawns.
04:33:44 <CakeProphet> which is perfectly fine with me. pawns are definitely one of the most useful pieces in chess.
04:35:09 <zzo38> Lymee: Isn't that an infinite loop though?
04:35:33 <CakeProphet> they will be even more expendable in this game though, as capturing a pawn with a cannon does not place any of your pieces in danger like capturing a pawn would in chess.
04:35:39 <Lymee> zzo38, yes.
04:35:45 <Lymee> But it fits the type signature.
04:36:42 <Lymee> Can you even write a function with the signature (a->b)->a?
04:36:48 <Lymee> @djinn a->b->c
04:36:49 <lambdabot> -- f cannot be realized.
04:37:25 <Lymee> @djinn a->b->(e->d->c->a->b)->c->d->e->(b->r)->r
04:37:25 <lambdabot> f a _ b c d e f = f (b e d c a)
04:37:40 <Lymee> @djinn a->b->(e->d->c->a->x)->c->d->e->(x->r)->r
04:37:40 <lambdabot> f a _ b c d e f = f (b e d c a)
04:38:09 <Lymee> @djinn a->([a]->(a,b,c)->x)->b->(e->e->e->x->x)->c->d->e->(x->r)->r
04:38:09 <lambdabot> Error: Undefined type []
04:38:11 <Lymee> :(
04:38:16 <Lymee> @djinn a->(a->(a,b,c)->x)->b->(e->e->e->x->x)->c->d->e->(x->r)->r
04:38:17 <lambdabot> f a b c d e _ f g = g (d f f f (b a (a, c, e)))
04:38:22 * Lymee stops silly
04:38:41 <CakeProphet> hmmm
04:38:57 <CakeProphet> I have a feeling shellshock AI will be more difficult than chess AI.
04:39:04 <zzo38> Lymee: Maybe you can if you have infinite loop and all of that stuff, but for all 'a' and 'b' you probably do not have such a function that is always defined output for all defined input.
04:39:46 <zzo38> But even if you can, what you need is (((a -> b) -> a) -> a)
04:40:39 <zzo38> Which means you require (a -> b), at least I think it does.
04:46:19 <CakeProphet> hmmm, here's an interesting idea. perhaps a portal could swap places with any friendly pieces in its movement radius.
04:46:27 <CakeProphet> monqy: ^^^
04:47:02 <CakeProphet> this is perhaps a bad idea though.
04:47:13 <monqy> so that would be any place to which it can move?
04:47:17 <CakeProphet> yes
04:47:26 <CakeProphet> which, currently is three spaces in any direction.
04:47:30 <CakeProphet> but might be shortened to two.
04:47:39 <CakeProphet> I will play with my first draft and then go from there.
04:47:54 <CakeProphet> also portals can hop.
04:48:07 <CakeProphet> which puts them near the top of the mobility list, below arrows.
04:48:36 -!- evincar has quit (Quit: Night.).
04:49:14 <CakeProphet> because both portals and arrows will need to get to places quickly and often.
04:49:37 <CakeProphet> as they're the primary defensive pieces.
04:49:41 <CakeProphet> and offensive pieces.
04:49:43 <CakeProphet> >_>
04:50:27 <Patashu> Has anyone in here played DROD (Deadly Rooms of Death) and Braid?
04:51:14 <CakeProphet> Braid sounds familiar.
04:52:55 <zzo38> What is a "dependent product type"? The article about Curry-Howard mentions it, but the article about dependent types, while I read it, I still don't know what dependent product type is.
04:53:06 <monqy> I've played some braid and I think I've played some drod as well. don't remember either that well.
04:55:33 <CakeProphet> hmmm, I'll need to clarify the rules involving infinite loops and prisms.
04:56:47 <Patashu> I had an idea two nights ago in bed to combine the time travel elements of braid with drod
04:56:52 <Patashu> Drod already lets you undo as many moves as you like
04:56:57 <Patashu> So why not introduce achronal elements into it?
04:59:59 <Lymee> @let abaa :: ((a -> b) -> a) -> a; abaa p = fix($)
04:59:59 <lambdabot> <local>:3:39:
04:59:59 <lambdabot> Couldn't match expected type `a1' against inferred type `...
05:00:05 <CakeProphet> dude shellshock is going to be so fun I can't wait to play it.
05:00:38 <monqy> i'm still going to call it cakechess it sounds better to me
05:00:41 <Lymee> @let abaa :: ((a -> b) -> a) -> a; abaa p a = fix($)
05:00:42 <lambdabot> <local>:3:30:
05:00:42 <lambdabot> Couldn't match expected type `a1'
05:00:42 <lambdabot> against inf...
05:00:56 <Lymee> Wait, never mind.
05:01:01 <CakeProphet> laser chess would be a good name but that's already taken.
05:01:03 <CakeProphet> maybe portal chess.
05:03:10 <CakeProphet> arrows might be equally important as cannons, or just slightly below importance.
05:03:17 <CakeProphet> portals are pretty vital I think.
05:04:05 <CakeProphet> portal, cannon, prism, arrow. perhaps.
05:04:19 <CakeProphet> but losing any of them would be very much like losing a queen in chess.
05:06:27 <CakeProphet> anybody play sc2
05:06:31 <CakeProphet> I'm thinking about getting back in.
05:19:19 <CakeProphet> a similar game: http://en.wikipedia.org/wiki/Khet_(game)
05:19:25 <CakeProphet> to my chess variant.
05:19:44 <CakeProphet> more like laser chess though
05:21:25 <CakeProphet> it has actual lasers too. this is something portal chess cannot do because of portals. :P
05:21:48 <CakeProphet> well, no, if the portal pieces were electronic, they could have a sensor/laser combo on one of their sides.
05:21:52 <itidus21> i started taking down some notes on a dbz-chess
05:21:55 <CakeProphet> and a wireless transmitter. :P
05:22:00 <CakeProphet> itidus21: oh god no.
05:22:03 <CakeProphet> don't do it.
05:22:06 <itidus21> cos thats how i like to pass 10 minutes on a sunday
05:22:18 <CakeProphet> chess does not work like that.
05:22:29 <CakeProphet> also, no stealing my ideas.
05:22:43 <itidus21> feh
05:23:14 <itidus21> you're encouraging me to actually take down more notes!
05:23:23 <CakeProphet> no
05:23:25 <itidus21> however.. to also be mindful of not stealing your ideas
05:23:33 <CakeProphet> your game will be horrible and unbalanced. while mine is obviously not.
05:23:37 <monqy> good idea: explosion chess.
05:23:41 <monqy> I'll leave the rest up to you
05:23:48 <CakeProphet> yes explosions are always good
05:23:52 <CakeProphet> especially to avoid rule paradox.
05:23:58 <CakeProphet> such as portals going into portals.
05:24:03 <itidus21> i am probably subconciously stealing ideas.
05:24:15 <CakeProphet> itidus21: well it's difficult to have DBZ chess without ENERGY BEAMS
05:24:44 <CakeProphet> so basically you'd have something where like... every piece can shoot some kind of projectile, and so everything would just die very quickly and it would be lame.
05:24:47 <CakeProphet> bad game.
05:25:20 <CakeProphet> and you could give some piece cool powers like the queen could be cell which would absorb other pieces and take their leet powerz
05:25:33 <CakeProphet> but it wouldn't matter because everything else would just shoot everything to deth. the end.
05:25:35 <itidus21> oh.. i would scrap the whole idea of using chess pieces
05:26:14 <itidus21> *sigho* as long as you're not getting genuinely too upset.
05:26:21 <CakeProphet> either way unless you have a lame hit points system you will have a) projectiles b) rapid death
05:26:32 <CakeProphet> yes I'm furious.
05:26:32 <itidus21> someone else mentioned that some of your ideas are similar to laserchess
05:26:40 <CakeProphet> yes but it's not the same.
05:27:06 <CakeProphet> it's actually very different. the only similarity is that there are cannon pieces and there are pieces that redirect the direction of the cannons fires.
05:27:29 <CakeProphet> but the way they redirect is very different..
05:27:51 <itidus21> maybe you're furious because i don't like chess
05:27:54 <CakeProphet> as is the number of pieces that redirect.
05:28:05 <itidus21> and my ideas are basically attempts to destroy it
05:28:08 <CakeProphet> nah I'm just saying dbz chess is probably not a good idea.
05:28:14 <CakeProphet> you can't destroy chess.
05:28:23 <CakeProphet> that's like saying "today I'm going to destroy communism"
05:28:36 <CakeProphet> or "today I'm going to destroy object-oriented programming"
05:28:46 <Patashu> mr fischer, tear down this board
05:28:56 <Patashu> *checkmate*
05:29:19 <CakeProphet> Did you think to kill me? There's no flesh or blood within this cloak to kill. There's only an idea. Ideas are bulletproof.
05:29:21 <itidus21> months ago i had ideas about streetfighter style fighting game with chess characters drawn in that style
05:30:11 <itidus21> i even had an idea about a chess platform game
05:30:28 <Patashu> itidus21
05:30:33 <Patashu> have you been to www.chessvariants.com
05:30:41 <CakeProphet> no don't encourage him.
05:31:10 <itidus21> well ya see.. the characters: King, Queen, Knight, Bishop, Pawn, Rook can be abstracted entirely out of the gameplay structure
05:31:13 <Patashu> I figure either he'll get better ideas or be overwhelmed by all the stuff on the site and ruminate
05:31:37 <CakeProphet> hmm also another neat idea for a chess variant inspired from Khet
05:31:38 <itidus21> heck, you could even make chess the sitcom
05:31:50 <CakeProphet> where your pieces are all arranged in a massive block and movement is done by swapping out pieces.
05:32:01 <CakeProphet> not sure what the objective would be.
05:32:08 <itidus21> chess the sitcom: "Welcome home King." "Thanks Queen." *canned laughter*
05:32:30 <itidus21> "Wheres our little pawns?" "Oh they're watching TV" *more canned laughter*
05:32:54 <CakeProphet> all the pawns would obviously die in horrible ways to protect other pieces.
05:32:55 <Patashu> CakeProphet: Castlingmost Chess
05:33:23 <CakeProphet> and the queen would always run away.
05:33:30 <CakeProphet> and the knight would always hop out of danger.
05:33:39 <itidus21> "King: It was a busy day at work today. 3 of our men got captured"
05:33:44 <CakeProphet> meanwhile the bishop is doing something strategic.
05:34:11 <CakeProphet> and sneaky
05:34:31 <itidus21> "Moooom! Timmy says he's gonna capture me!"
05:34:39 <CakeProphet> okay this can't continue.
05:35:04 <itidus21> i think there may have been an xkcd comic about a chess raft
05:35:19 <CakeProphet> the punch line so far is: "haha anthropomorphic chess family" "haha capturing"
05:35:37 <itidus21> maybe its just in my head
05:35:40 <monqy> haha
05:35:49 <Patashu> I remember that comic
05:35:53 <Patashu> they were going to settlers of catan
05:35:59 <Patashu> and the knights was having an argument with the bishop
05:36:34 <CakeProphet> so how does one post a contribution to chessvariants?
05:36:38 <CakeProphet> I must write up ze rules.
05:36:46 <itidus21> CakeProphet: yes anthropomorphic chess characters.
05:36:49 <Patashu> http://www.chessvariants.com/index/membersubmission.php presumably
05:36:52 <CakeProphet> of what is either portal chess or shellshock I can't decide.
05:36:57 <Patashu> I'm not sure if stuff is still getting added to it though...
05:37:11 <CakeProphet> well, I still need to work out a final draft after some test plays
05:37:17 <itidus21> so taking something like a manga.. and importing it into chess is simply an inverse operation of anthropomorphizing chess pieces
05:37:19 <CakeProphet> but surely they will see the awesomeness and allow it.
05:38:11 <Patashu> ah, yes. there are still new pages
05:38:16 <CakeProphet> excellent.
05:38:33 <CakeProphet> they shall witness what is probably the most excellent game ever made. well, maybe, after extensive testing.
05:38:50 <Patashu> yeah, you better playtest it :fistshake:
05:38:56 <CakeProphet> oh I will.
05:38:58 <Patashu> in my youth I had an overwhelming desire to come up with chess variants
05:39:01 <Patashu> but no desire to playtest them
05:39:03 <Patashu> so yeah it was awful
05:39:15 <CakeProphet> well playtesting is where you figure out if your game is actually good.
05:40:07 <CakeProphet> I have a feeling it will be extremely fun to begin with, and then get gradually less fun for one person as they lose all of the incredibly important pieces. hopefully at that point losing will be swift.
05:40:29 <Patashu> just gg out when you can't win
05:40:30 <Patashu> I guess
05:40:54 <CakeProphet> sidenote: it is probably always a bad idea to have a portal next to a king
05:41:15 <itidus21> basically i don't like chess for exactly the same reason that chessplayers do like it. i don't like knowing that it takes 50 years to learn to do anything in the game which hasn't been done before redundantly :D
05:41:38 <CakeProphet> I wonder if I should include some kind of indirect check rule in which portals can be placed in check if capturing the portal would result in capturing the king.
05:41:43 <CakeProphet> or if I should just not care.
05:41:55 <CakeProphet> and include that "oh by the way if a portal explodes on a king you lose"
05:42:21 <CakeProphet> itidus21: chess isn't about breaking the mold, really.
05:42:45 <itidus21> one idea i had was to make the tiles shaped as golden ratio instead of squares
05:42:55 <Patashu> good luck with that
05:43:04 <CakeProphet> a golden ratio is not a... shape.
05:43:14 <itidus21> a golden ratio rectangle
05:43:37 <CakeProphet> that's not an actual thing.
05:43:48 <itidus21> an approximation of a golden ratio rectangle
05:43:54 <CakeProphet> you need more than one.
05:44:15 <CakeProphet> ah wait, no you don't.
05:44:37 <CakeProphet> still what does changing the dimensions of the squares do exactly?
05:44:45 <itidus21> it doesn't mean anything yeah
05:45:26 <itidus21> it could unfortunately make certain distances on the board seem larger than they are also
05:45:46 <CakeProphet> do you mean make a golden SPIRAL?
05:46:03 <CakeProphet> or just have squares whose side ratios are phi?
05:46:26 <itidus21> yeah, i just mean take the sqaures and turn them into rectangles whose side ratios are pi
05:46:47 <CakeProphet> I see.
05:47:09 <itidus21> it would create a false sense of distance though
05:47:22 <itidus21> but i wonder if that would matter
05:47:26 <CakeProphet> I doubt it.
05:47:57 <CakeProphet> hmmm, just found some more things I need to clarify
05:48:03 <CakeProphet> these rules are going to get pretty large I think.
05:48:40 <CakeProphet> ah wait, no. I don't need the rule I was thinking of. I was thinking in terms of lasers but that's not how it will work.
05:48:49 <Jafet> Chess rules are hard enough to write down.
05:48:53 <Jafet> @google joke chess problem
05:48:54 <lambdabot> http://en.wikipedia.org/wiki/Joke_chess_problem
05:48:54 <lambdabot> Title: Joke chess problem - Wikipedia, the free encyclopedia
05:49:07 <CakeProphet> I was thinking if at any point the projectile crosses its own path it would nullify itself
05:49:14 <CakeProphet> but that would only make sense if it were imagined as a laser
05:49:35 <CakeProphet> and not as an abstract path thing.
05:49:37 <Jafet> Laser beams can cross themselves...
05:49:44 <Jafet> Do you mean TRON? Star Wars?
05:49:45 <CakeProphet> also that.
05:49:48 <CakeProphet> yes.
05:50:11 <CakeProphet> however I am making it a rule that infinite loops act basically like big laser death walls.
05:50:30 <CakeProphet> and if you fire a projectile /at/ an infinite loop then it cancels the projectile that was fired as well as the loop.
05:50:46 <CakeProphet> they collide.
05:51:09 <CakeProphet> also if an infinite loop captures a piece it ceases to exist. no permanent death walls.
05:51:47 <CakeProphet> basically you can imagine it as a pointlike projectile move around very very quickly inside the circuit. it collides with anything that crosses the circuit and then goes away.
05:51:59 <Jafet> TRON chess, the next big thing since trek chess
05:52:20 <CakeProphet> ha
05:52:24 <CakeProphet> tron chess would be madness
05:52:30 <CakeProphet> you'd need some kind of piece to keep track of the walls.
05:52:34 <CakeProphet> checker pieces I guess.
05:52:41 <Jafet> Play on a whiteboard
05:52:54 <CakeProphet> here I think the loops are simple enough that you can simply use your memory to locate loops.
05:52:59 <Jafet> Also, every piece moves every turn.
05:53:30 <CakeProphet> though perhaps I will precisely define how loops should be handled
05:53:41 <CakeProphet> I think you should have to redeclare a loop if you create a new loop from an existing loop.
05:54:14 <Patashu> how about chess where the board's colours update every round according to a CA (game of life or day and night would be appropriate) and then movement is determiend as follows: http://www.chessvariants.org/boardrules.dir/piedchess.html
05:54:21 <CakeProphet> ...
05:56:11 <CakeProphet> hmmm the simplest loop I think would be a wall structure. on a single row, column, or diagonal you could have: (canon) >> <<
05:56:55 <CakeProphet> you could also have an L-shaped circuit, but that would involve the opponent's arrow. shared loops are nasty situations.
05:57:23 <CakeProphet> and then you could have an L-shaped loop between two portals and a connecting arrow inbetween them.
06:01:08 <CakeProphet> ...bah, I think I'll actually need to give loops a directional quality as well.
06:01:33 <CakeProphet> in a portal-arrow-portal loop only one portal could change directions wouldn't being captured.
06:01:49 <CakeProphet> the other would change directions and then collide with the looping projectile.
06:05:32 <CakeProphet> so basically in any portal-based loop there's an in-portal and an out-portal, based on the direction the projectile was originally fired.
06:06:20 <CakeProphet> rotating the in-portal without moving it would cause it to be captured, the out-portal can rotate and move freely, thus breaking the loop and capturing the piece directly in front of it at the end of the turn.
06:06:40 <CakeProphet> yeah... that's probably the most complex rule of the game.
06:09:07 <CakeProphet> it also makes the out-portal an extremely deadly thing
06:09:41 <CakeProphet> as it can, in one turn, move three spaces in any direction, hoping over any piece, and face any direction... capturing whatever is in front of it at the end of the turn as it breaks the loop.
06:29:58 <CakeProphet> http://www.chessvariants.org/diffsetup.dir/pattsch.html
06:30:46 <Patashu> haha, that's hilarious
06:32:01 <CakeProphet> I don't really see how that's a double stalemate.
06:32:07 <CakeProphet> you can easily move one of the pawns forward.
06:32:14 <Patashu> no
06:32:22 <Patashu> look at where they start
06:32:24 <Patashu> then look at a normal board
06:32:27 <Patashu> notice something different?
06:32:47 <CakeProphet> aside from the two pawns above the rank no.
06:33:12 <CakeProphet> also the colors are flipped.
06:33:29 <CakeProphet> so, is that implying the pawns move backwards?
06:35:11 <CakeProphet> help
06:35:21 <Patashu> think
06:35:25 <CakeProphet> I am.
06:35:40 <Patashu> 'the players start the game in a position in which they are both stalemated.'
06:35:43 <Patashu> Is the page lying?
06:36:04 <CakeProphet> "it's a stalemate because it says it is" is not a valid explanation.
06:36:47 <CakeProphet> my only guess is that pawns move backwards because they reversed the locations of the pieces.
06:37:09 <Patashu> bravo
06:37:24 <CakeProphet> you'll note that I said that several lines ago.
06:37:38 <CakeProphet> and you didn't confirm it.
06:38:07 <Patashu> you should have been able to figure it out on your own lol
06:38:22 <Patashu> I didn't deny it
06:38:47 <CakeProphet> asshole.
06:38:58 <Patashu> wow
06:39:13 <CakeProphet> oh wait
06:39:20 <CakeProphet> I forgot the :P
06:39:25 <CakeProphet> see now everything is better.
06:39:32 <Patashu> yes
06:40:01 <CakeProphet> hahaha you're a terrible person just kidding hahaha
06:40:14 <Patashu> hahahaha
06:40:15 <Patashu> :)
06:40:58 <Patashu> anyway yeah
06:41:00 <Patashu> on chess variants
06:41:04 <Patashu> always assume fide rules and rule zero to the letter
06:41:18 <Patashu> until it says something contradictory
06:41:42 <Patashu> fide rules for instance explicitly says white starts on THIS side black starts on THIS side white's pawns go THIS way
06:41:44 <Patashu> and so on
06:45:40 -!- ive has quit (Quit: leaving).
07:08:26 -!- augur has joined.
07:11:58 <itidus21> in some book i downloaded(stole) it began by explaining its easier to describe fairy chess pieces relative to standard pieces... (please note: i am using my own words here in this paraphrase, and my memory always makes small forgettings)
07:12:21 <itidus21> reason for saying this? i suppose that fide provides a stable base
07:14:19 <CakeProphet> yes it's easier to say "this piece moves like a bishop" or "this piece moves like a knight, except.."
07:15:05 <CakeProphet> I don't this is entirely true for portal chess. "This piece moves like a king, except it can shoot bulletz lol"
07:15:15 <CakeProphet> +think
07:15:20 <itidus21> he's a badass king
07:15:25 <itidus21> carrys a rifle
07:15:51 <CakeProphet> also I've found some other abstract strategy games that have a directional componnt
07:15:54 <itidus21> calls himself k1ng
07:15:54 <CakeProphet> jwiriwejr
07:16:19 <CakeProphet> in one game you had to change direction a single turn, except there was one kind of piece that could move and turn in the same turn.
07:16:42 <itidus21> `log pawn
07:16:54 <CakeProphet> but I think it makes things more interesting if you can move and turn in one move.
07:17:03 <HackEgo> 2007-09-26.txt:22:51:33: <bsmntbombdood> something like Like a flock of hellspawns \ And stewards of the son of despite \ We parry their guile with the magnificence of disgust
07:17:18 <CakeProphet> hmmm, though once again I have more loop dilemmas...
07:17:37 <itidus21> CakeProphet: can i predict laserchess never had loops?
07:18:18 <itidus21> loops in chess is sort of cool. loops in chess in _the_ esolang channel, is quite special.
07:18:21 <CakeProphet> let's say I have a loop, and the opponent puts his portal inside of the loop and then turns his piece so that the portal is facing the path of the projectile
07:18:42 <CakeProphet> does the portal get captured or does it break the loop?
07:18:55 <CakeProphet> I would think it breaks the loop
07:19:17 <itidus21> are your portals anything like narbacular drop portals?
07:19:35 <CakeProphet> you can kind of think of them as walls with Portal portals on them.
07:19:44 <CakeProphet> you can reorient the walls.
07:19:50 <itidus21> `log narbacular
07:19:51 <CakeProphet> ...I've explained it like 4 times at least.
07:19:55 <HackEgo> 2008-07-18.txt:15:43:01: <Deewiant> shooting a portal through a portal? that worked in narbacular drop
07:20:02 <itidus21> ^_^
07:20:25 <itidus21> sorry cake.. i hate being so wrong that i have to regularly apologize
07:21:01 <CakeProphet> so anyways I guess the portal should break the loop...
07:21:14 <CakeProphet> any loop-breakage should be calculated at the end of a turn, in other words.
07:21:20 <CakeProphet> not halfway through it. that would be kind of arbitrary.
07:21:39 * CakeProphet will have a fairly large section on loop-breaking at the end of the rules
07:21:46 <CakeProphet> it's the most potentially confusing part of the game.
07:21:56 <itidus21> im a right groan and grunt
07:22:06 <itidus21> thank you big book of rhyming slang
07:22:51 <itidus21> ok i see
07:22:57 <itidus21> so a portal can divert a laser
07:23:02 <itidus21> faark thats cool
07:23:12 <CakeProphet> bah, okay I don't have a solution for this one.
07:23:19 <CakeProphet> let's say you have the simple 2-arrow loop
07:23:39 <itidus21> ok ill stop calling em lasers
07:23:46 <CakeProphet> (Cannon) >>------(loop)------<<
07:23:56 <CakeProphet> >> and << are arrows.
07:24:07 <itidus21> yeah im following most of it believe it or not
07:24:24 <CakeProphet> okay so in the L-shaped loops, there was an obvious direction to the loop. so that a portal could suddenly jump into te loop and something predictable would happen.
07:24:39 <itidus21> ahhhhh
07:24:39 <CakeProphet> but... what happens here when a portal jumps into a loop. do you flip a fucking coin?
07:25:21 <itidus21> hmm
07:25:31 <CakeProphet> I have to decide one way or another.
07:25:43 <CakeProphet> either the portal dies or it breaks the loop safely.
07:25:49 <itidus21> you could default to facing the portal at the cannon
07:25:56 <itidus21> along the loop
07:25:58 <CakeProphet> meh.
07:26:07 <itidus21> but yeah i know that answer sucks
07:26:10 <CakeProphet> that breaks my intuitive loop thinking. :P
07:26:21 <CakeProphet> flipping a coin makes the most sense but that's gross.
07:26:41 <CakeProphet> okay, the projectile is moving way too fast there's no way to time it correctly, the portal is always captured. :P
07:27:00 <itidus21> hummmm
07:27:02 <CakeProphet> however, portals can hop... thus allowing them to pass through. they just can't stand in it and break the loop.
07:27:59 <CakeProphet> so yeah I'll basically have to document the two cases (arrow-based loops vs portal-based loops) and how they differ.
07:28:15 <CakeProphet> portal-based loops have a directional quality. arrow-based loops do not.
07:28:21 <itidus21> so what happens if 2 loops cross each other.. is that the explosion case?
07:28:38 <CakeProphet> that can't happen because if a projectile crosses a loop they're both negated.
07:28:45 <itidus21> ahh
07:28:56 <itidus21> hmm
07:29:01 <CakeProphet> the explosion case involves a portal trying to pass through its linked portal
07:29:07 * itidus21 troll grins.
07:29:10 <CakeProphet> also when portals are captured their linked portal explodes.
07:29:35 <CakeProphet> you want to keep your portals alive...
07:31:08 <CakeProphet> actually portal-based and arrow-based is bad terminology as there's a 4-arrow case with directional qualities
07:31:17 <CakeProphet> so basically I should call them bidirection and unidirectional loops.
07:31:34 <CakeProphet> (the 4-arrow case would be extremely unlikely as it involves all four arrows on the board)
07:32:26 <itidus21> at times like this i bet you wish you could code up a simulator for it in 10 minutes
07:32:58 <CakeProphet> ........nooooo
07:32:59 <CakeProphet> I just found
07:33:04 <CakeProphet> something I'm pretty sure cannot be solved.
07:33:12 <CakeProphet> without a major rule change.
07:33:48 <CakeProphet> oh wait nevermind.
07:33:52 <CakeProphet> that can't happen.
07:33:53 <CakeProphet> phew
07:34:24 <CakeProphet> okay so anytime you break a loop, there is ONE predictable path the projectile can take.
07:34:33 <CakeProphet> itidus21: do you understand what happens when a loop breaks?
07:34:47 <itidus21> nope
07:34:56 <CakeProphet> okay simplest case:
07:35:06 <CakeProphet> (Cannon) >>------(loop)------<<
07:35:16 <CakeProphet> the arrow on the far right moves diagonally up-right
07:35:32 <CakeProphet> the loop is broken, which causes
07:35:42 <CakeProphet> (Cannon) >>--------(projectile)-----------
07:35:47 <itidus21> right
07:36:05 <CakeProphet> right, so everytime a loop is broken a potential capture is possible.
07:36:30 <CakeProphet> making loops a situation where the person controlling the loop has a huge advantage.
07:36:58 <itidus21> (Cannon) >>------(loop)------<< (bob)
07:37:03 <CakeProphet> because there's I think 12 options even in that simple case.
07:37:06 <CakeProphet> of where the projectile can go.
07:37:09 <itidus21> (Cannon) >>--------(projectile)---------(bob captured)---
07:37:12 <CakeProphet> yes.
07:37:32 <CakeProphet> no there's 10
07:37:34 <CakeProphet> 10 options
07:37:50 <CakeProphet> the two options that are removed the ones that form the loop
07:37:56 <CakeProphet> +are
07:38:13 <CakeProphet> that's a lot of different ways for things to potentially be captured, and the opponent can only react to one.
07:38:29 <CakeProphet> unless
07:38:43 <CakeProphet> they can, in their turn, break the loop via portal. which is not possible in the bidirectional case.
07:39:08 <CakeProphet> hmmmm, maybe it should be. otherwise that very very easy to setup loop could not be easily handled.
07:39:43 <itidus21> maybe you can declare a loop direction on creation of a loop
07:39:43 <CakeProphet> WHAT SAYETH?
07:39:50 <CakeProphet> no... that's not how it works.
07:39:55 <itidus21> ok :P
07:40:00 <CakeProphet> the projectile moves back and forth. it's bidirectional
07:40:23 <CakeProphet> a unidirectional loop moves in a circle thanks to portals or very unlikely arrow situations
07:40:35 <CakeProphet> >>-----V
07:40:35 <itidus21> ahhhhhh i see
07:40:38 <CakeProphet> ^-----^
07:40:40 <CakeProphet> or whatever
07:40:46 <CakeProphet> very unlikely with arrows
07:41:06 <CakeProphet> but more likely with portals. two portals + 1 arrow = L-shaped loop with a single direction of travel.
07:41:31 <CakeProphet> well there's also a line-based version.
07:41:45 <CakeProphet> ()-------<<------()
07:41:48 <CakeProphet> the ()'s are portals
07:42:03 <CakeProphet> the cannon is perpendicular to the arrow and fires.
07:42:51 <CakeProphet> the L-shaped loops is similar but with the portals not on the same rank/file
07:43:07 <itidus21> ╔═►═╗
07:43:11 <itidus21> ▲ ▼
07:43:12 <itidus21> ╚═◄═╝
07:43:15 <CakeProphet> yep.
07:43:22 <itidus21> i know thats not how it works but it looks cool
07:43:30 <CakeProphet> that's the 4-arrow loop
07:43:45 <CakeProphet> the only loop that consists entirely of arrows and is also unidirectional.
07:43:58 <itidus21> i realize in practice those arrows would be on the corners but artistic license
07:44:03 <CakeProphet> it is owned by both players. Hilarity ensues.
07:44:32 -!- zzo38 has quit (Remote host closed the connection).
07:44:44 <CakeProphet> basically you would not want to be the person to form this loop as it gives your opponent license to redirect the loop as he pleases.
07:45:14 <CakeProphet> UNLESS you can somehow make it so that any possible breaking of the loop causes the opponent to lose a piece
07:45:21 <CakeProphet> but that's even more unlikely than forming the loop itself.
07:45:34 <itidus21> hmm
07:45:42 <itidus21> ok heres a random idea
07:45:52 -!- kmc has quit (Ping timeout: 260 seconds).
07:46:08 <CakeProphet> okay so for the sake of balance I think bidirectional loops can always be broken by an intervening portal.
07:46:11 <itidus21> you could say that you can only control the loop if your opponent has no pieces adjacent to it.. or that might be going a bit far
07:46:24 <CakeProphet> uh, that's not how it works.
07:46:25 <itidus21> or it could be if you have more pieces adjacent
07:46:31 <CakeProphet> the loop is the result of an arrangement of pieces
07:46:38 <CakeProphet> re-arranging those pieces should logically alter it.
07:47:15 <CakeProphet> there's no balance issues with the loop rules as far as I can tell.
07:47:22 <itidus21> yeah.. you can imagine how fucked up a chess variant would be if i produced it
07:47:41 <CakeProphet> they're expensive in time to set up and allow for a wide-number of neat possibilities. all positive things in my opinion.
07:47:57 <CakeProphet> to prevent them from being unbalanced and not fun.
07:48:27 <CakeProphet> I /could/ make the bidirectional portal break thing-a-ma-jig a coin flip...
07:48:43 <CakeProphet> the ONLY element of chance in the entire game.
07:49:03 -!- kmc has joined.
07:49:17 <CakeProphet> but no I think a ortal should be able to break a bidirectional loop always because they're the most trivial to set up and are still very nasty for the opponent who isn't in control of it.
07:49:58 <itidus21> nothing drives me more crazy about game design than knowing that victory is usually the result of opponent error
07:50:28 <itidus21> and that where victory is not the result of opponent error it is the result of inherent advantage to one player
07:50:47 <itidus21> and where those aren't the case it could be pure luck
07:51:13 <CakeProphet> yes those are generally the three cases.
07:51:15 <itidus21> but still.. that is an extreme and unrealistic way of looking at it i have
07:51:23 <CakeProphet> here's an interesting case
07:51:32 <CakeProphet> >>----()()----<<
07:51:52 <CakeProphet> also bidirectional
07:52:27 <CakeProphet> >>----() ()----<<
07:52:32 <CakeProphet> or any equivalent arrangement
07:52:41 <itidus21> but what i described is not really the case. and that is where i draw hope from
07:52:48 <itidus21> its an oversimplifcation i made
07:52:58 <CakeProphet> well no if you look at game theory that's pretty much true I believe.
07:53:18 <itidus21> `log nash
07:53:21 <HackEgo> 2009-11-08.txt:15:52:22: <Gregor> Observation: gnash actually ... like ... works 'n stuff.
07:53:29 <itidus21> `log \bnash\b
07:53:33 <HackEgo> 2011-09-18.txt:07:53:18: <itidus21> `log nash
07:53:36 <itidus21> `log \bnash\b
07:53:40 <HackEgo> 2011-08-16.txt:03:18:46: <HackEgo> 362) <monqy> I've only watched bad movies about video game. I enjoyed every second of it. \ 536) <itidus20> Game theory is not a perfect tool for analyzing video games. <itidus20> Nash failed to create a "video game theory"
07:53:47 <CakeProphet> there are so called perfect games in which one player can always win.
07:53:55 <itidus21> my quote is not necessarily true..
07:54:08 <itidus21> but theres proof that it is something that plagues me :D
07:54:09 <CakeProphet> the only case you didn't mention is an impartial game where stalemate is possible if no one makes an error.
07:54:17 -!- Patashu has quit (Ping timeout: 252 seconds).
07:55:42 <CakeProphet> the majority of competitive video games have some degree of chance.
07:56:07 <CakeProphet> I think even a game like starcraft 2 has elements of chance.
07:56:28 <itidus21> in the end i guess it's that it's not who wins
07:57:13 <CakeProphet> ah wait no the element of chance I thought existed in starcraft actually does not.
07:57:33 <CakeProphet> I thought the damage calculations were semi-random but they have definite values.
07:57:55 <itidus21> i rant about my ideas a lot
07:58:00 <CakeProphet> I see.
07:58:00 <itidus21> `log test of reflexes
07:58:03 <HackEgo> 2011-09-18.txt:07:58:00: <itidus21> `log test of reflexes
07:58:08 <itidus21> `log test of reflexes
07:58:11 <HackEgo> 2011-09-18.txt:07:58:03: <HackEgo> 2011-09-18.txt:07:58:00: <itidus21> `log test of reflexes
07:58:16 <itidus21> hmm
07:58:23 <itidus21> `log test of
07:58:26 <HackEgo> 2010-04-24.txt:02:02:09: <oklopod> i think i uploaded the most recentest of changes
07:58:29 -!- ais523 has quit (Remote host closed the connection).
07:58:31 <itidus21> `log test of
07:58:34 <HackEgo> 2009-01-08.txt:17:08:12: <fungot> fizzie: they are not the brightest of bots
07:58:40 <itidus21> ha ha ha haha ha
07:58:43 -!- pikhq_ has joined.
07:58:52 <itidus21> sorry
07:58:55 -!- pikhq has quit (Ping timeout: 260 seconds).
07:59:04 <itidus21> i gotta chill out more effectively
08:00:22 <itidus21> don't be afraid to tell me off.. i have some bad chat habits.
08:00:42 <itidus21> im basically not much of a contributer
08:01:05 <itidus21> now ill see if i can get your topic back after i broke it
08:01:47 <itidus21> ok so
08:01:58 <itidus21> a normal piece can be captured by the missile right?
08:02:28 <CakeProphet> any piece that doesn't interact with projectiles, yes.
08:02:36 <itidus21> a cannon can be captured. a missile can be captured.
08:02:43 <CakeProphet> missiles are not pieces anymore
08:02:47 <itidus21> ahh
08:02:56 <CakeProphet> cannons fire missiles, which are kind of just abstract rule-things.
08:04:05 <itidus21> so... there is an interesting case
08:04:33 <itidus21> (cannon) >>------(loop)------(portal-a) (portal-b)------(loop)-------<<
08:04:59 <itidus21> thats exactly what you said isnt it
08:05:22 <itidus21> thats another of my bad chat habits .. repeating peoples text back at them
08:05:40 <CakeProphet> yeah that's a case I already covered.
08:05:55 <CakeProphet> it's just a more interesting case of the basic bidirectional one
08:06:05 <CakeProphet> because it can exist on two seperate locations.
08:06:11 <CakeProphet> also I haven't considered cases involving four portals.
08:06:14 <itidus21> "<CakeProphet> here's an interesting case <CakeProphet> >>----()()----<<"
08:06:38 <itidus21> i practically copied your post word for word..
08:06:40 <CakeProphet> because as far as the projectile rules are considered opponent arrows and portals are fair game.
08:06:55 <CakeProphet> so there are 4 portals and 4 arrows total on the board, if none have been captured.
08:07:20 <itidus21> it's interesting because it represents the situation of whether a portal is in a loops path before the loop is created
08:07:36 <CakeProphet> well not exactly
08:07:51 <CakeProphet> it's not possible to place both portals into a loop unless you have a secondary loop to pass it off to.
08:07:51 <itidus21> hmm
08:08:18 <CakeProphet> placing one portal into >-----< just breaks the loop, sends the projectile somewhere else.
08:08:34 <CakeProphet> which could be a new loop, sure.
08:08:41 <itidus21> oops i mean
08:08:43 <CakeProphet> maybe I don't understand what you're getting at.
08:09:08 <itidus21> in order to have >>----() ()----<< .. it means that a portal is in the loops path before the loop is created
08:09:23 <CakeProphet> yes
08:10:03 <itidus21> there is another way it could be done
08:10:10 <CakeProphet> (A)------(b) (B)--<<--(a) here's a fun and unlikely case
08:10:16 <CakeProphet> also you could have.....
08:10:31 <itidus21> if you pushed an arrow into the loop the loop would be cut short
08:10:37 <CakeProphet> (A)------(b) (B)-----<<
08:10:41 <itidus21> then you could insert a portal
08:10:41 <CakeProphet> followed by
08:10:47 <itidus21> and remove the arrow
08:10:53 <CakeProphet> (A)------(b) (B)----(a)----<<
08:11:06 <CakeProphet> er wait...
08:11:11 <itidus21> hnn.. what does upper case mean?
08:11:13 <CakeProphet> that case is not possible I messed that up.
08:11:21 <CakeProphet> upper case is one players portals, lower case is the others.
08:11:31 <CakeProphet> yeah there is no 4-portal case unless arrows are involved
08:12:22 <itidus21> 1) >>-----------<< 2) >>------<< << 3) >>------<<() << 4) >>-------() <<
08:12:43 <itidus21> oh thats the same problem..
08:12:44 <itidus21> i see
08:12:46 <CakeProphet> in those cases a loop breaks and a new one is formed.
08:12:56 <itidus21> (2) is wrong
08:12:57 <CakeProphet> ...in the event that you break the loop
08:13:04 <CakeProphet> well two is an entirely possible setup.
08:13:33 <itidus21> oh uhhh no no 2 is correct because the loop would ultimately be shrunk that way
08:13:52 <CakeProphet> an interesting case where a loop breaks and no projectile-flies-off-the-board capturing occurs.
08:13:53 <itidus21> oops
08:14:07 <CakeProphet> because it gets caught in a second loop.
08:14:08 <itidus21> 1) >>-----------<< 2) >>------<< << 3) >>------<<() << 4) >>-------() << ()------<<
08:14:15 <CakeProphet> ultimately these loop scenarios are highly contrived and unlikely.
08:14:18 <CakeProphet> but still possible.
08:14:34 <CakeProphet> so the rules need to be clear on them.
08:14:57 <CakeProphet> yes nothing new is happening in these examples.
08:15:05 <itidus21> so i am just pointing out that if loops capture portals theres still ways to use them
08:15:18 <CakeProphet> I'm looking for cases I haven't considered with possibly ambiguous rules.
08:15:30 <CakeProphet> ...oh, well sure.
08:15:39 <CakeProphet> the main use for capturing a loop with a portal would be to capture something on the other end.
08:15:47 <CakeProphet> a loop is just a capture waiting to happen.
08:16:09 <itidus21> does a loop end with a capture?
08:16:42 <CakeProphet> do you mean does a capture break the loop? yes.
08:16:53 <CakeProphet> do you mean do all loops conclude with a capture inevitably? no.
08:17:24 <CakeProphet> in the basic rules if a projectile captures something the path of the projectile is stopped.
08:17:41 <CakeProphet> same rule applies for loops as they're essentially projectiles that have been sustained across multiple turns.
08:18:04 <monqy> I haven't been paying attention how do you represent active loops
08:18:51 <monqy> also what happens if the opponent fires a projectile into an active loop
08:19:02 <monqy> mutual annihilation?
08:19:08 -!- SgeoN1 has quit (Quit: Bye).
08:19:55 <CakeProphet> monqy: yes
08:20:21 <CakeProphet> also, you declare that a loop exists and if requests by your opponent disambiguate the nature of the loop
08:20:29 <CakeProphet> in most situations there's probably only one loop that's possible though.
08:20:44 <CakeProphet> and... you just keep a mental note of it. there is no on-board representation.
08:20:47 <monqy> oh
08:21:01 <monqy> hidden state is messy
08:21:10 <monqy> especially in things like this
08:21:13 -!- augur has quit (Remote host closed the connection).
08:21:22 <CakeProphet> it's just a consequence of the projectile, which is a hidden state itself.
08:21:28 <itidus21> it might be possible to represent a loop with an object on the loops path
08:21:40 <CakeProphet> sure but it's not really necessary.
08:21:43 <itidus21> nah forget that
08:21:44 <CakeProphet> optional rule.
08:21:49 <itidus21> im silly.
08:22:03 <monqy> CakeProphet: but projectiles normally don't persist, so they aren't problematic
08:22:07 <CakeProphet> I find it quite easy to picture evil death walls.
08:22:19 <CakeProphet> monqy: right, even when they do persist they remain in a stable circuit until broken.
08:22:42 <monqy> but how do you know when the circuit is active or inactive (your own memory and the memory of your opponent that's what)
08:22:46 <CakeProphet> also directionality can be inferred from arrows along the loop so that's not a problem either.
08:23:17 <CakeProphet> monqy: when someone declares a loop it's active, meaning that he spent his turn to fire a cannon into a loop, thus activating it
08:23:25 <CakeProphet> it remains so until broken.
08:23:34 <itidus21> if you really wanted you could have a second board which shows the loops :D
08:23:41 <monqy> CakeProphet: that isn't my problem
08:23:50 <CakeProphet> which occurs as the result of a re-arrangement of the loop components or obstruction by something else.
08:23:51 <monqy> CakeProphet: my problem is with loops persisting without indication
08:24:08 <CakeProphet> the loop declaration is the indication.
08:24:17 <itidus21> if you really wanted you could have a second board which shows the loops :D = the monqy board
08:24:19 <monqy> and then you just remember it
08:24:24 <CakeProphet> yes.
08:24:27 <CakeProphet> it's not difficult.
08:24:28 <monqy> hidden state
08:24:33 <monqy> the Worst Thing
08:24:37 <monqy> go back to perl
08:24:39 <monqy> ;_;
08:24:41 <itidus21> lol
08:24:47 <CakeProphet> also when you move a pawn two squares forward in regular chess
08:24:59 <CakeProphet> you have to remember that it can be captured on the space it would have been had it moved one space.
08:25:08 <CakeProphet> *been at
08:25:09 <monqy> what
08:25:19 <monqy> that's not remembering
08:25:23 <CakeProphet> http://en.wikipedia.org/wiki/En_passant
08:25:28 <CakeProphet> sure it is.
08:25:34 <itidus21> you could use bits of string on the board even ^^;
08:25:48 <CakeProphet> what if the pawn had moved one square, and then one square a second turn?
08:25:55 <CakeProphet> the rule doesn't apply even though the board is in the same state physically.
08:25:57 <monqy> oh multiple turns i forgot about that.
08:26:03 <monqy> yuck chess is disgusting ;_;
08:26:39 <itidus21> the state doesn't have to be hidden.. its just that representing it requies a kludge or 2
08:26:42 <CakeProphet> oh, btw, "hidden state woooooo" is not a design philosophy of perl.
08:26:49 <monqy> i know
08:26:56 <monqy> they're related by being gross
08:27:17 <itidus21> the irony of perl is that it's not meant to be an esolang
08:27:29 <CakeProphet> in any case it's not an issue as loops are in practice very short lived entities.
08:27:30 <itidus21> i don't know perl so empty words from me
08:27:41 -!- zake has joined.
08:27:46 <monqy> CakeProphet: hahaha good luck making them short-lived
08:27:51 -!- zake has quit (Client Quit).
08:27:53 <CakeProphet> monqy: ???
08:28:01 <monqy> CakeProphet: nobody will want to enter them
08:28:16 <monqy> they'll persist for turns at least
08:28:20 <itidus21> CakeProphet: bits of string could do it.. as could a second board.. it's not really insurmountable
08:28:22 <CakeProphet> protal chsse 101
08:28:26 <CakeProphet> how to break a loop
08:28:35 <CakeProphet> 1) >>-------<<
08:28:41 <CakeProphet> 2) >>-----^
08:28:41 <monqy> what is this notation
08:28:55 <CakeProphet> >> and ^ are arrows the direction of the symbol indicates the direction of the arrow
08:29:03 <CakeProphet> ------ is a projectile path (aka the loop)
08:29:15 <itidus21> (>>)/(<<)/(^)(v) = (arrow piece)
08:29:17 <CakeProphet> on one row/file/diagonal. it's a 1d view of the board
08:29:32 <CakeProphet> I am constrained by IRC
08:29:40 <monqy> use a paste bin
08:29:58 <CakeProphet> okay basically all you have to do is change the direction of an arrow and the loop will break.
08:30:05 <CakeProphet> change the state of any of the loops components and it breaks.
08:30:13 <monqy> and how do you change the direction of someone else's arrow
08:30:17 <CakeProphet> put a portal which can redirect the loop into the loop and it breaks.
08:30:23 <CakeProphet> .....you don't. it's yours.
08:30:26 <CakeProphet> you have two arrows.
08:30:58 <itidus21> ►═══▼
08:31:00 <CakeProphet> there are several ways to break loops. in many cases it will be advantageous to break an arrow as it captures something.
08:31:01 <monqy> why would you break your own loop if not for the enemy falling into range of one of its constituent arrows
08:31:01 <itidus21> ║ ║
08:31:03 <itidus21> ▲═══◄
08:31:04 <CakeProphet> ...
08:31:08 <CakeProphet> you don't understand at all.
08:31:30 <CakeProphet> breaking a loop essentially allows you to capture something by /turning an arrow in a direction/
08:31:36 <monqy> yes I know
08:31:56 <monqy> because someone will put definitely something in that direction
08:32:13 <CakeProphet> there are 10 of them in the most basic loop you can make.
08:32:15 <CakeProphet> 10 paths
08:32:18 <CakeProphet> the loop can break.
08:32:24 <itidus21> ►═════▼
08:32:29 <itidus21> ║ ║
08:32:30 <itidus21> ▲═) (═◄
08:33:05 <CakeProphet> and even, as you say, "no one will want to break their own loop", the opponent can still place a portal into the loop to redirect it.
08:33:23 <CakeProphet> (which is, consequently, even more reason for the loop-maker to want to break their own loop, otherwise they give their opponent a free projectile)
08:33:25 <monqy> people will want to break their own loops
08:33:29 <CakeProphet> yes.
08:33:30 <monqy> did you reade the "unless" clause
08:33:38 <monqy> I mean "if not"
08:33:53 <monqy> and the "why would you" not "nobody will ever"
08:33:57 <monqy> but whatever
08:34:01 <CakeProphet> hmmm?
08:34:36 <CakeProphet> ah my mistake.
08:34:44 <CakeProphet> "nobody will want to enter them"
08:34:48 <CakeProphet> the dangers of paraphrasing.
08:34:51 <CakeProphet> still all of my points are valid.
08:34:57 <monqy> what points
08:35:09 <monqy> you're assuming people will walk into deathtraps
08:35:15 <monqy> i.e. into range of the arrows
08:35:28 <CakeProphet> that loops are systematically short-lived entities as a result of their purposes and the ability to be "stolen" from you
08:35:55 <monqy> what purposes
08:36:00 <monqy> by stolen do you mean via portals
08:36:12 <CakeProphet> to allow 10 or more possible paths of capture at the same time
08:36:13 <CakeProphet> and yes.
08:36:21 -!- Vorpal has joined.
08:36:33 <CakeProphet> sure they could be defensive as well, but again there's the case where a portal can redirect it
08:36:38 <CakeProphet> so you wouldn't want it to stay around long
08:36:45 <CakeProphet> a few turns is not a long time to remember the existence of a portal.
08:36:49 <CakeProphet> it's not an issue.
08:36:58 <CakeProphet> s/portal/loop/
08:37:42 <monqy> 1) yes it is (2) elegance suffers greatly and i will hate it forever (3) how would you use them offensively, positioning and firing and all
08:37:51 <monqy> they seem like a pretty defensive thing to me
08:38:17 <monqy> and offensive when broken because you forced the enemy to move into range
08:38:32 <monqy> or the enemy is being stupid or using a pawn to break it intentionally
08:38:38 <CakeProphet> they're both. but being able to fire a projectile at will from any of the components is a major perk of breaking them.
08:38:47 <CakeProphet> yes, no one will walk into a death trap.
08:38:49 <monqy> but i guess using a pawn isn't fulfulling much of its purpose my train of thought kind of derailed there
08:39:41 <CakeProphet> also there are only 4 arrows at any given time
08:39:49 <CakeProphet> it's not like the board is going to be littered with loops to keep track of.
08:40:10 <monqy> it seems a lot more like a tool for restricting movement than killing
08:40:17 <itidus21> also.. how many players do you think is optimal for this game?
08:40:25 <itidus21> is this a 4 player jubilee?
08:40:28 <CakeProphet> ....2
08:40:32 <itidus21> hehe
08:40:35 <CakeProphet> it's on a chess board.
08:40:39 <monqy> also also
08:41:02 <monqy> in loop case 1... >>-----<<...positioning a portal in there...what happens
08:41:03 <itidus21> d&d Also?
08:41:07 <CakeProphet> it is very much a tool for killing.
08:41:13 <monqy> does it both do the redirection and get destroyed?
08:41:13 <itidus21> ignore that comment
08:41:26 <CakeProphet> monqy: portal redirects it. I considered that case and decided for balance reasons that was the best choice.
08:41:34 <CakeProphet> but there are two variant rules you could play.
08:41:36 <monqy> also what happens when you put your own pieces in a loop. destruction?
08:41:42 <CakeProphet> yes.
08:41:47 <CakeProphet> projectiles are friendly-fire always.
08:42:02 <CakeProphet> with the exception of arrows, prisms, and portals facing the right direction.
08:42:19 <CakeProphet> (also need to clarify prism-based loops as they're kind of tricky)
08:43:19 <CakeProphet> ...actually a prism based loop with arrows is impossible
08:43:33 <monqy> oh?
08:43:51 <CakeProphet> the prism, by the way, is the queen piece. it's an arrow without a direction, basically. the player is free to choose a path. also once a projectile passes through a prism is destroys arrows in its path.
08:44:09 <monqy> what
08:44:12 <CakeProphet> ?
08:44:18 <monqy> destroys arrows in its path
08:44:18 <monqy> why
08:44:24 <CakeProphet> to allow that to be possible.
08:44:32 <CakeProphet> as otherwise arrows are kind of difficult to capture and can just roam around easily.
08:44:47 -!- FireFly has joined.
08:44:58 <itidus21> CakeProphet: when i was reading about 2L there was a thing which redirects dependant on incoming direction
08:45:00 <CakeProphet> arrows are highly useful as well, which compounds the issue of them being difficult to capture.
08:45:25 <CakeProphet> so far it's the best idea for a queen piece I have. it might change but I like it.
08:45:53 <CakeProphet> if I allowed prisms to destroy portals as well then I could avoid clarifying prism-based loops entirely. :P
08:45:57 <CakeProphet> but I'm not sure I want to do that.
08:46:39 <CakeProphet> monqy: oh also prisms can capture, but have restricted movement (currently 2 squares no hoping)
08:47:12 <CakeProphet> but I might increase their movement capabilities since they're one of the few pieces that are effective at non-projectile captures.
08:47:20 -!- augur has joined.
08:48:20 <CakeProphet> hmmm, actually no
08:48:29 <CakeProphet> I'll make prism movement/capturing a combination of knight and king.
08:48:33 <CakeProphet> I like that better.
08:48:39 <monqy> what do you mean by that
08:48:53 <CakeProphet> ....it can move and capture like knights and kings can in chess...
08:48:58 <CakeProphet> either way.
08:49:04 <CakeProphet> very simple.
08:49:05 <CakeProphet> to grasp...
08:49:41 <monqy> oh so you choose between them?
08:49:44 <CakeProphet> yes.
08:49:48 <monqy> ok
08:49:55 <CakeProphet> ah I see the confusion.
08:50:08 <CakeProphet> anyways what do you think about these prisms?
08:50:31 <CakeProphet> I basically used as a convenient to close some issues concerning arrow capture.
08:50:39 <CakeProphet> s/used/used them/
08:50:44 <CakeProphet> s/convenient/convenient way/
08:51:27 <CakeProphet> prisms only have that effect on friendly fire, btw.
08:51:30 <CakeProphet> they are not like arrows.
08:51:34 <CakeProphet> this makes them more vulnerable.
08:51:57 <CakeProphet> ew gross special case, etc.
08:52:33 <monqy> i wis this game was ~elegant~
08:52:36 <monqy> wish
08:52:53 <CakeProphet> "all pieces are parenthetical lists"
08:53:09 <CakeProphet> question: what makes something elegant?
08:53:30 <monqy> me saying it's elegant (thumbs up)
08:54:12 <CakeProphet> but anyways if you can think of something better for the queen let me know.
08:54:28 <CakeProphet> but it gives it queen-like attributes while allowing arrow capture so I think it's pretty solid.
08:54:55 <monqy> queeen like attributes like what
08:55:14 <CakeProphet> being powerful offensively but weak defensively.
08:55:19 <CakeProphet> er, no
08:55:26 <CakeProphet> that's not what it does.
08:55:28 <monqy> it's pretty defensively powerful
08:55:30 <monqy> it has knight moves
08:55:48 <monqy> though the queen can escape from a bunch of things as well
08:55:57 <CakeProphet> it is still vulnerable compared to arrows
08:56:10 <monqy> arrows are weird
08:56:12 <CakeProphet> so it's not something you'd use
08:56:16 <CakeProphet> like
08:56:19 <CakeProphet> at the beginning of the game
08:56:25 <itidus21> My scouter indicates the prism has a power level over 9000.
08:56:34 <CakeProphet> because then every arrow decides to point at it, and it must flee.
08:56:53 <CakeProphet> monqy: arrows are awesome.
08:57:07 <CakeProphet> arrows are definitely all-around amazing defensive/offense.
08:57:58 <CakeProphet> provided they have cannons...
08:59:06 <CakeProphet> arrows are probably better defense than offense though, I think.
08:59:28 <CakeProphet> as they can "block" cannon fire.
09:00:02 <CakeProphet> from multiple sources.
09:00:15 <CakeProphet> portals can only block from one direction at a time.
09:00:23 <Vorpal> which game are you discussing?
09:00:33 <CakeProphet> a chess variant I created.
09:00:36 <Vorpal> ah
09:00:46 <CakeProphet> it's like... laser chess with portals.
09:00:51 <Vorpal> whoa
09:00:59 <Vorpal> CakeProphet, are there pirates and ninjas too?
09:01:08 <CakeProphet> unfortunately no.
09:01:10 <Vorpal> aww
09:01:14 <monqy> what if instead of special cases you had pirates and ninjas
09:01:18 <monqy> i would be less angry
09:01:19 <CakeProphet> ...no
09:01:22 <CakeProphet> there are no special cases.
09:01:23 <CakeProphet> just rules.
09:01:30 <monqy> how about the hidden state then
09:01:36 <CakeProphet> that's not a special case of anything.
09:01:39 <CakeProphet> that's just a rule.
09:01:46 <Vorpal> CakeProphet, so you removed en passant (nfc about spelling)
09:01:46 <monqy> i didn't say it was a special case
09:01:51 <CakeProphet> the distinction is completely pointless in a board game.
09:01:55 <Vorpal> that is a special case in normal chess IMO
09:02:12 <CakeProphet> Vorpal: actually haven't decided. pawns work like chess pawns but I dunno if they should have en passant.
09:02:22 <monqy> use checkerspieces or coins to mark active loops
09:02:38 <CakeProphet> monqy: put a coin under each active component?
09:02:57 <itidus21> is it legal to sell money?
09:02:59 <Vorpal> CakeProphet, how are the lasers used? As weapons?
09:03:06 <CakeProphet> yes they're the primary means of capture.
09:03:14 <monqy> CakeProphet: as long as it makes the state explicit and works in all cases, sure
09:03:24 <Vorpal> if so you need hitpoints
09:03:25 <itidus21> eg... if you sell a toy with actual legal tender in the packaging. is that legal?
09:03:30 <CakeProphet> the rooks are cannons. the upside-down rook can fire a projectile in any diagonal direction. right-side up rook is the same but cardinal.
09:03:36 <itidus21> lol
09:03:50 <Vorpal> CakeProphet, heh
09:03:55 <itidus21> probably would attract many thiefs
09:04:11 <CakeProphet> a projectile will capture anything in its path up to the first thing it captures.
09:04:14 <CakeProphet> ...
09:04:19 <CakeProphet> a weird way to word it I know.
09:04:27 <Vorpal> CakeProphet, projectile? Doesn't sound like a laser
09:04:38 <CakeProphet> it's... well it doesn't really matter how you view it.
09:04:52 <CakeProphet> it's an abstract path like thing
09:04:57 <Vorpal> CakeProphet, anyway grenades.
09:05:00 <Vorpal> laser grenades!
09:05:00 <CakeProphet> with a direction.
09:05:04 <Vorpal> (no clue how that would work)
09:05:21 <CakeProphet> Vorpal: I'm afraid I already have most of the rules solidified minus some minor future revision perhaps.
09:05:24 <CakeProphet> need to playtest.
09:05:26 <Vorpal> ah
09:05:52 <monqy> remove en passant and i'll be hapey
09:05:56 <Vorpal> CakeProphet, random idea: zombie chess
09:06:07 <monqy> I've never liked castling being a thing either
09:06:12 <CakeProphet> so yeah an interesting thing is that you portals. the knights. the direction of their nose indicates the opening of the portal
09:06:21 <CakeProphet> monqy: castling is no longer thing. I'll remove en passant sure.
09:06:27 <monqy> hurrey
09:06:30 <CakeProphet> maybe even the 2-square pawn thing.
09:06:36 <monqy> sure
09:06:46 <monqy> I don't care as much about that though
09:06:48 <itidus21> what about piece promotion? :D can more cool items be made? silly question i know
09:07:02 <CakeProphet> itidus21: no, no, and yes.
09:07:14 <CakeProphet> Vorpal: I think there are chess variants with zombie pieces.
09:07:17 <Vorpal> XD
09:07:24 <Vorpal> well, bbl, need to leave for a while
09:07:27 <CakeProphet> Vorpal: http://www.chessvariants.com/other.dir/nemoroth.html
09:07:28 <CakeProphet> ah okay.
09:07:34 -!- Taneb has joined.
09:07:41 <CakeProphet> when pawns (humans) go to the end of the board they're promoted to zombies.
09:07:42 <itidus21> vorpal would probably like my lowbrow style of chess variation
09:07:46 <Taneb> Hello!
09:07:53 <CakeProphet> Taneb: heyo
09:08:06 <CakeProphet> monqy: you're just jealous because my special cases make the game awesome in all ways.
09:08:12 <monqy> ;_;
09:08:12 <CakeProphet> nyah!!! :P
09:08:23 <monqy> also hidden state ;________;
09:08:45 <CakeProphet> more like "state that is verbally declared and just needs to be remembered"
09:08:50 <CakeProphet> might be a problematic rule for goldfishes.
09:08:57 <Taneb> FUNCTIONAL PYTHON <- awful idea? amazing idea? YOU DECIDE
09:09:02 <itidus21> thats a false myth
09:09:20 <itidus21> mythbusters proved goldfish have good memory
09:09:32 <Taneb> CakeProphet: itidus21: there's one of those "hidden" states in regular chess
09:09:33 <itidus21> but maybe theres multiple kinds of memory
09:09:33 <CakeProphet> fine. snakes. insects. anything.
09:09:41 <Taneb> "Has this king moved yet?"
09:09:44 <itidus21> he taught a goldfish to run an obstacle course
09:09:53 <CakeProphet> Taneb: we also determined en passant was similar.
09:09:56 <itidus21> so maybe its not so much memory as conditioning
09:09:59 <itidus21> but whatever
09:10:32 <Taneb> Similar to Functional Python, or similar to deciding whether the king has moved yet?
09:10:36 <CakeProphet> but honestly if you can't remember where a loop is you probably should accidentally walk into it.
09:10:39 <Taneb> Because it's neither really
09:11:04 <itidus21> CakeProphet: that is a possible design decision :)
09:11:05 <CakeProphet> and probably shouldn't be playing a game that's played with chess pieces and involves redirecting projectiles across the board.
09:11:09 <monqy> if you can't remember if you've allocated/freed the memory........
09:11:23 <CakeProphet> *imaginary projectiles
09:11:31 <monqy> or what your values are
09:11:46 <monqy> because your varaibales are mutable and there's manaul memroy memanagement with poeinters
09:11:51 <CakeProphet> speaking of which I have a feeling portal chess AI is very difficult.
09:11:58 <Taneb> I am implementing one of DMM's sorting algorithms in Python!
09:12:01 <monqy> because you're using c or something
09:12:17 -!- Vorpal has quit (Ping timeout: 248 seconds).
09:12:17 <CakeProphet> Taneb: I occasionally use functional style in Python, but the syntax is very limiting.
09:12:23 <CakeProphet> also no tail call optimization.
09:12:32 <monqy> i guess perl has the mutable variables but most of its inelegance is in other areas???
09:12:48 <CakeProphet> monqy: perl is beautiful if not elegant.
09:12:48 <Taneb> I meant an entirely functional version of python
09:12:55 <CakeProphet> oh well that's just weird.
09:12:55 <monqy> oh?
09:12:56 <CakeProphet> weirdo.
09:13:00 <Jafet> Python is dysfunctional by design
09:13:04 <monqy> TCO is Unpythonic -- master guido
09:13:08 <CakeProphet> monqy: er, not saying perl is elegant.
09:13:13 <Jafet> Anyone who tries to fix this will face the wrath of guido
09:13:17 <itidus21> `log unpythonic
09:13:21 <HackEgo> 2007-07-03.txt:20:27:55: <lament> bsmntbombdood: so? this is still unpythonic. Besides, it's clearly not the only stdout, otherwise you wouldn't need that __stdout__ thing.
09:13:28 <itidus21> ok
09:13:34 <CakeProphet> monqy: I meant "perl is beautiful, but definitely not elegant"
09:13:40 <monqy> ah
09:13:48 <itidus21> so the word is common
09:13:59 <CakeProphet> yes pythonic is a term invented by pythonistas
09:14:02 <monqy> a beautiful trainwreck
09:14:03 <CakeProphet> which is another term invented by pythonistas.
09:14:21 <CakeProphet> pythonistas are lame.
09:14:26 <Taneb> I call them pyfaces
09:14:40 <CakeProphet> itidus21: if you want to get banned from a channel right now
09:14:48 <CakeProphet> join #python, type "lol", press enter.
09:14:53 <monqy> I haven't called them anything consistently, but I've probably parroted "pythonistas" once or twice
09:15:05 <itidus21> i've been banned from 2 recently
09:15:05 <CakeProphet> monqy is a good parrot.
09:15:08 -!- Nisstyre has quit (Ping timeout: 260 seconds).
09:15:38 <itidus21> ##c-basic because of bad connection, and efnet #xna for being off topic and ranting
09:16:33 <CakeProphet> if you need any evidence that Python users are style fascists, the "no lol" rule is it.
09:16:44 <itidus21> ok here goes
09:16:55 * itidus21 rubs hands together
09:17:11 <Jafet> They can't possibly ban everyone that says lol, I think
09:17:22 <Jafet> The channel ban list would overflow
09:17:30 <CakeProphet> they do.
09:17:39 <Jafet> Probably temporary bans
09:17:46 <CakeProphet> most likely.
09:17:54 <Jafet> Go in there every day and lol until you get permanently banned
09:18:02 <CakeProphet> otherwise they'd ban some long-time visitors that accidentally say it.
09:18:10 <Jafet> Automate it.
09:18:13 <CakeProphet> Jafet: no I occasionally ask #python questions
09:18:16 <CakeProphet> and occasionally get good answers!
09:18:42 <itidus21> i left after taunting the quiet room
09:18:55 <monqy> what did you say
09:18:59 <itidus21> don't really want to be banned bad enough to wait
09:19:13 <itidus21> i said <itidus21> lol <itidus21> more euler problems needed
09:19:22 <monqy> banned from life
09:19:23 <CakeProphet> don't really want to wait bad enough to be banned.
09:19:40 <CakeProphet> itidus21: they can still ban you even if you're not there you know.
09:19:50 <itidus21> well i kinda assumed i would be banned when i did that
09:20:07 <CakeProphet> they should have a nololbot
09:20:33 <monqy> that reminds me of the #jesus bot
09:20:40 <monqy> with the broken bad words filter
09:21:52 -!- Taneb has quit (Read error: Connection reset by peer).
09:22:12 <CakeProphet> monqy: did it need moar \b?
09:22:44 <monqy> it banned when you said "ands" or "an s"
09:22:51 <CakeProphet> wat
09:22:57 <monqy> "ants" was special-cased not to ban
09:23:10 <CakeProphet> why those phrases.
09:23:17 <monqy> it was meant to ban on "anus", the baddest word, but I guess "anvs" is bad too
09:23:26 <monqy> anqs
09:23:28 <CakeProphet> wow like....
09:23:35 <CakeProphet> how do you break something that badly.
09:23:39 <CakeProphet> how can you get that wrong.
09:24:17 <monqy> variants of "fuck" were also repeated everywhere, despite "fuck" itself being in the list of things to ban on even if it's within other words etc
09:24:30 <Jafet> One time, yahoo's discussion board censored "breast"
09:24:31 <CakeProphet> man christians sure are weird.
09:24:43 <Jafet> It was not appreciated by women who wanted to talk about their chicken breasts
09:25:04 <CakeProphet> chicken breasts? gross.
09:25:19 <monqy> I bet they didn't censor other variants of the word
09:25:24 <CakeProphet> where they genetically modified?
09:25:30 <CakeProphet> ....
09:25:31 <CakeProphet> *were
09:26:57 <CakeProphet> monqy: I challenge you to make a chess variant that is more elegant than mine.
09:27:11 <monqy> oh snap!!!!!
09:27:25 <CakeProphet> AND YET RICH WITH COMPLEXITY AND FUN.
09:27:33 <CakeProphet> MAYBE
09:27:34 <monqy> maybe i could take you up on that s-expression chess
09:27:37 -!- Nisstyre has joined.
09:29:03 <itidus21> K vs K. Can only capture diagonally.
09:29:08 <itidus21> I dunno how it would go.
09:29:21 <monqy> K?
09:29:24 <itidus21> king?
09:29:40 <itidus21> not sure of notations
09:30:28 <monqy> I dunno about king vs king stuff but I'd be willing to call it a stalemate
09:30:58 <itidus21> im not sure how my rules would override the usual king vs king rules
09:31:05 <CakeProphet> Ultima is a neat chess variant.
09:31:07 <monqy> your rules?
09:31:26 <CakeProphet> mostly consisting of odd capturing rules.
09:31:28 <itidus21> "King vs King. Can only capture diagonally."
09:31:41 <CakeProphet> for example there's one type of rook that captures by moving /away/ from something adjacent to it.
09:32:06 <CakeProphet> and chameleons (bishop) can only capture pieces by using their capture rules.
09:32:23 <itidus21> heh
09:32:34 <CakeProphet> I imagine it's actually cumbersome to play.
09:32:39 <CakeProphet> UNLIKE PORTAL CHESS WHICH IS VERY GOOD.
09:32:44 <monqy> ok
09:32:47 <CakeProphet> -ahem-
09:32:54 <CakeProphet> excuse me.
09:33:05 <monqy> also I remember you saying something about knigt-moves having direction? what's that about
09:33:16 <monqy> relevant if any of your pieces have knight moves and try stepping into portals
09:33:31 <monqy> also what happens when portals step into their counterparts
09:33:39 <monqy> is that invalid?
09:33:43 <CakeProphet> well I suppose they have two different possible directions actually.
09:33:46 <monqy> do they explode?
09:33:47 <CakeProphet> monqy: they explode.
09:33:47 <CakeProphet> yes.
09:34:10 <CakeProphet> possibly useful as a suicide strategy but probably a really bad idea.
09:34:13 <itidus21> `log explode
09:34:16 <HackEgo> 2010-09-28.txt:21:09:22: <Phantom_Hoover> The LWSSes hit it and everything explodes.
09:37:06 <CakeProphet> monqy: the portal direction could be made irrelevant for entrance perhaps.
09:37:25 <CakeProphet> or knights-likes could simply enter from two directions
09:37:29 <monqy> CakeProphet: but then you've got really weird stuff
09:37:45 <CakeProphet> how so?
09:38:19 <monqy> nevermind
09:38:29 <monqy> actually yes do mind it's really weird
09:38:47 <itidus21> (cannon)>>-------()-------<<(cannon) ()------<<
09:38:49 <itidus21> :P
09:39:08 <CakeProphet> itidus21: that doesn't breakanything.
09:39:13 <monqy> also how will you deal with bishop-movers and portals? is them switching to the other coloure just a natural thing?
09:39:17 <itidus21> fair enough
09:39:22 <itidus21> its kind of cool
09:40:02 <monqy> I was going to say something els ebut I forgot it
09:40:55 <CakeProphet> monqy: portals can hop anywhere in a 3-square radius
09:41:05 <CakeProphet> thus I don't see how bishop movement is a problem.
09:41:17 <monqy> ok?
09:41:39 <CakeProphet> ooooh
09:41:40 <CakeProphet> I see.
09:41:46 <CakeProphet> yeah it doesn't matter.
09:42:01 <CakeProphet> in fact that would be a useful way to switch colors for arrows.
09:42:11 <CakeProphet> which are the pieces that move like bishops
09:42:19 <CakeProphet> (possibly like queens in the future... I haven't decided)
09:42:26 <itidus21> radius? :p
09:42:42 <itidus21> ah ok. radius]
09:42:57 <itidus21> understood
09:42:57 <monqy> presumably by chebyshev distance
09:44:14 -!- DH____ has joined.
09:44:36 <monqy> CakeProphet: is it chebyshev or is it manhattan or are you So Wrong
09:44:52 <CakeProphet> I have no idea what that means.
09:45:18 <CakeProphet> ah yes
09:45:18 <monqy> is your "3-square radius" measured by chebyshev distance or manhattan distance or are you Wrong
09:45:19 <CakeProphet> chevyshev
09:45:19 <itidus21> i realized that it probably means 3 spaces in 8 directions when i said (ah ok. radius])
09:45:23 <CakeProphet> *cheby
09:46:16 <CakeProphet> though perhaps 3 is a bit extreme? especially with hoppage.
09:46:35 <itidus21> oh ok i see what chebyshev is
09:46:40 <monqy> portals can't capture can they
09:46:47 <monqy> directly, I mean
09:47:29 <monqy> if portals trigger when hopping onto someone you could kill them by portalling dudes into active loops
09:47:50 <monqy> er
09:48:07 <monqy> if portals trigger when hopping onto pieces you could kill them by portalling them into active loops
09:48:12 <monqy> there
09:48:14 <monqy> less confusion
09:48:15 <monqy> that
09:48:15 <monqy> time
09:48:17 <CakeProphet> well, sort of.
09:48:27 <CakeProphet> you can't portal something to a loop though.
09:48:37 <CakeProphet> because moving the portal breaks the loop
09:48:38 <monqy> oh?
09:48:48 <CakeProphet> however
09:48:50 <monqy> no I mean
09:48:51 <CakeProphet> there is a neat trick you can do.
09:48:54 <monqy> portal isn't part of the loop
09:48:59 <monqy> the portal is pointing into the loop
09:49:09 <CakeProphet> ah okay
09:49:11 <CakeProphet> yes that's possible
09:49:29 <monqy> that;s one way to use loops offensively
09:49:50 <CakeProphet> also breaking a loop with the out-portal is very nice.
09:49:53 <monqy> with a little preparation you have an extremely mobile capturing machine
09:50:21 <monqy> and i guess you could also move portal into loop to get the thing worky
09:50:32 <CakeProphet> because you can hop three spaces, and change direction to release the project whose loop you just broke.
09:50:38 <CakeProphet> which is actually kind of ridiculous.
09:50:43 <CakeProphet> if you consider the possibilities.
09:50:46 <monqy> mhm
09:50:50 <monqy> oh right I remembered a thing
09:50:50 <monqy> about
09:50:53 <monqy> what I was going to say
09:50:54 <monqy> about
09:51:04 <monqy> portals where the in-portal triggers from any direction
09:51:05 <monqy> which is
09:51:12 <monqy> how do you capture them?
09:51:19 <CakeProphet> ah, yes.
09:51:21 <CakeProphet> that's a problem
09:51:27 <CakeProphet> I think I just need to define the movement rules well
09:51:34 <monqy> answer: a portal explosion (by portal suicide)
09:51:34 <CakeProphet> so basically even if you move like a knight you still have directionality.
09:51:53 <monqy> alternatively a prismed projectile
09:52:03 <monqy> if that works the same was on portals as arrows
09:52:08 <CakeProphet> yeah but currently prismed projectiles do not kill portals.
09:52:11 <monqy> oh
09:52:20 <CakeProphet> ...might change that?
09:52:20 <monqy> I think they should for consistency
09:52:24 <CakeProphet> hmmm
09:52:35 <monqy> anyway I think it'd be best to fix directionality anyway
09:52:39 <CakeProphet> well, portals can still be killed when facing the wrong direction
09:52:46 <CakeProphet> while arrows work from any direction
09:52:54 <CakeProphet> fix it how?
09:53:09 <monqy> to give every movement a direction
09:53:34 <CakeProphet> oh, yes, that's what I meant.
09:53:35 <monqy> fior knights it could be the side in which they move more
09:53:38 -!- DH____ has quit (Ping timeout: 260 seconds).
09:53:56 <CakeProphet> well, no. knights could just have multiple entrance directions.
09:53:57 <monqy> since they move 2 in one direction and 1 in the other isn't it
09:54:05 <monqy> that works too
09:54:14 <monqy> and they enter from the applicable one?
09:54:16 <CakeProphet> yep
09:54:20 <CakeProphet> same with portals
09:54:28 <CakeProphet> who move like knights but with a chevyshev distance of 3
09:55:02 <CakeProphet> no need to get incredibly detailed...
09:55:09 <CakeProphet> I feel it's a fairly intuitive notion.
09:55:16 <monqy> do portals hopping onto things have a direction or do they always work or do they not work anymore
09:55:29 <CakeProphet> the only thing that's not reall very intuitive so far is the bidirectional loop portal breakage rule thing.
09:55:53 <monqy> since portals turn whenever they hop I can see portal hops always working being fine
09:56:01 <CakeProphet> monqy: I was thinking if portals captured that would be how they capture. only able to capture in the direction they're facing.
09:56:18 <CakeProphet> but that's kind of weird
09:56:25 <CakeProphet> intuitively they should just teleport whatever they land on.
09:58:24 <CakeProphet> it's probably a bad idea to teleport things unless they die immediately on the other side.
09:58:40 <CakeProphet> or
09:58:42 <monqy> i.e. there's a loop waiting for them?
09:58:44 <CakeProphet> they have nothing to capture.
09:58:44 <CakeProphet> yes
09:58:59 <CakeProphet> there's also the situation where killing the portal on the other side causes an explosion and kills a bunch of the opponents pieces.
09:59:07 <CakeProphet> so they wouldn't want to capture said portal.
09:59:32 <monqy> I'm imagining moving an enemy piece into any piece via portal will capture that piece
09:59:36 <CakeProphet> in this way the portal explosion rule can be used for bargaining power.
09:59:48 <monqy> so I guess you could use enemy pieces to capture other enemy pieces? or your own pieces if you're dumb
10:00:01 <CakeProphet> hmmm... it would capture enemy pieces but would be an illegal move otherwise I think.
10:00:14 <monqy> illegal?
10:00:22 <CakeProphet> ..yes because you can't capture your own pieces.
10:00:27 <monqy> you can;t???
10:00:28 <CakeProphet> well, I would think not.
10:00:32 <CakeProphet> ...not without projectiles.
10:00:34 <monqy> why not!!
10:00:34 <CakeProphet> I DON'T KNOW
10:00:40 <CakeProphet> MAKES SENSE?
10:00:53 <CakeProphet> fine okay you can elect to capture your own pieces.
10:00:56 <CakeProphet> like a boss.
10:00:57 <monqy> hurray
10:01:19 <CakeProphet> so in this weird corner case where someone is directly in front of your portal and you teleport something to that portal it gets captured .
10:01:31 <CakeProphet> this game is full of weird corner cases.
10:01:33 <monqy> most likely usually a bad move but getting rid of pawns which are in the way may prove useful
10:01:46 <monqy> naturally emerging corner cases, right?
10:01:50 <CakeProphet> yes.
10:01:54 <monqy> not special exceptions in the rules good good
10:02:53 <CakeProphet> but I'll have to list that as how the portals work.
10:02:55 <CakeProphet> to clarify.
10:02:58 <CakeProphet> it's not immediately obvious.
10:03:33 <CakeProphet> also if a piece moves through a portal it can continue moving on the other side, as you would expect I hope.
10:03:34 <monqy> as long as you note it in such a way to make it clear that it's natural and not just some other rule you made up!!
10:03:42 <CakeProphet> as long as it legaly has more squares that it can move in its turn.
10:03:46 <CakeProphet> *legally
10:04:01 <monqy> oh right I was going to ask about that too
10:04:06 <monqy> with regard to direction changing and all
10:04:11 <CakeProphet> yes
10:04:22 <CakeProphet> portals are direction/location changers.
10:04:39 <CakeProphet> hmmm... I wonder if I should include that.
10:04:41 <monqy> it won't work with knightsmoves either right
10:04:42 <CakeProphet> if an arrow goes through a portal
10:04:50 <CakeProphet> it reorients to keep the same angle.....
10:04:54 <CakeProphet> if that makes sense.
10:05:00 <monqy> ???
10:05:06 <monqy> what do you mean reorients and same angle
10:05:14 <CakeProphet> okay so imagine you're the arrow
10:05:20 <CakeProphet> you're facing up-right
10:05:24 <CakeProphet> and you walk through a portal
10:05:35 <CakeProphet> you are still going the same direction when you come out, but now facing a different way.
10:05:40 <CakeProphet> thus.... your direction would change
10:05:46 <CakeProphet> your absolutely direction
10:05:49 <CakeProphet> -ly
10:05:57 <monqy> yes that's what I was hoping
10:06:01 <CakeProphet> to reflect that your direction actually didn't change as you walked through the portal and reoriented.
10:06:03 <monqy> unless I interpreted you backwards
10:06:17 <CakeProphet> but that's a pretty complex thing to worry about.
10:06:38 <CakeProphet> also knight movers still have legal moves if they go through a portal.
10:06:45 <CakeProphet> I just need to define knight moves properly
10:06:45 <monqy> like if you're going left and facing left into a rightfacing portal and the outportal is up now you're going up and you're facing up
10:06:48 <CakeProphet> as a series of single-square moves
10:06:51 <CakeProphet> for it to make sense.
10:06:53 <monqy> absolute-wise
10:07:06 <CakeProphet> yes.
10:07:18 <monqy> a series of single-square moves? how will the leaping work then?
10:07:33 <CakeProphet> ....uh, it just will. :P
10:07:38 <monqy> :|
10:08:04 <CakeProphet> "the prism can leap across pieces in the course of making its move"
10:08:08 <CakeProphet> I mean
10:08:27 <CakeProphet> you don't have to interpret it as a LITERAL series of single-square movements where you MUST have an EMPTY square.
10:08:36 <monqy> also the destination according to the knightsmoves rules and not being "here go three spaces leaping over stuff"
10:08:41 <CakeProphet> it's just to make the directions and portal stuff well-defined.
10:09:03 <CakeProphet> hmmm?
10:09:04 <monqy> I liked it better when it was a single move with two directions :(
10:09:16 <CakeProphet> it's the same thing... just different ways to say it.
10:09:26 <monqy> not really
10:09:49 <CakeProphet> it will be way easier to comprehend when talking about portals.
10:09:53 <monqy> it's easier to specify the knightsmove conditions for single moves than make a state machine to get three moves to obey the knightsmove rules
10:09:53 <CakeProphet> who can move 3 squares.
10:10:28 <monqy> am I sense ing????
10:10:30 <CakeProphet> ....no it's the opposite of that.
10:10:35 <monqy> what????????????????
10:10:38 <CakeProphet> you have only ONE direction entering the portal.
10:10:46 <CakeProphet> because it's all defined in terms of single square moves.
10:11:00 <CakeProphet> with your system you have two/three directions
10:11:07 <CakeProphet> which makes less sense.
10:11:27 <monqy> three directions? when's that?
10:11:49 <monqy> with your system you have to specify the second and third moves in terms of their predecessors
10:11:54 <monqy> which is ugly- gross
10:12:15 <monqy> and hard to follow
10:12:16 <CakeProphet> .......?
10:12:34 <CakeProphet> oh and the three direction case is when you enter a portal on your second jump as a portal---oh wait that causes explosions
10:12:37 <CakeProphet> but still a valid move I suppose
10:12:49 <monqy> in my system knights leap over portals
10:13:02 <CakeProphet> so they have to hop on them to teleport?
10:13:03 <monqy> as they leap over all other pieces
10:13:04 <monqy> yes
10:13:11 <CakeProphet> hmmm
10:13:19 <CakeProphet> so then the direction doesn't matter with knights?
10:13:21 <CakeProphet> that works.
10:13:24 <CakeProphet> I thought you might complain about that.
10:13:41 <monqy> either it doesn't matter or it's one of the directions in which they traveled or it's the longer of the directions in which they traveled
10:13:41 <CakeProphet> also portals are not restricted to where they can land.
10:13:44 <monqy> either one
10:13:48 <CakeProphet> meaning they don't /have/ to move three squares.
10:13:54 <CakeProphet> they can move one, or two.
10:13:56 <monqy> right
10:13:58 <CakeProphet> is that ridiculous?
10:14:05 <monqy> I figured that when you said "within" rather than "at"
10:14:10 <monqy> in "within a 3-square radius"
10:14:12 <monqy> or whatever it was
10:14:24 <CakeProphet> that's like... being a queen and a knight 3 squares around you.
10:14:32 <CakeProphet> granted you can't capture anything
10:14:35 <CakeProphet> so I guess that's fine.
10:14:51 <monqy> you can pull off wickednasty stunts though!!!
10:14:56 <CakeProphet> yes.
10:15:08 <CakeProphet> the portal is mobile but by itself not effective.
10:15:10 <CakeProphet> so that's fine.
10:15:36 <CakeProphet> it would be silly if portals were not very good at jumping around and portalling things.
10:15:56 <monqy> indeed!!
10:16:07 <CakeProphet> they're currently the second most mobile in terms of sheer distance. arrows are the only pieces that can move an unlimited number of squares in a single direction.
10:16:36 <CakeProphet> I think this makes sense in this game.
10:16:44 <monqy> I need to see it in action now
10:16:51 <CakeProphet> ...how will you do that?
10:17:04 <CakeProphet> monqy: you could write a program for it. :)
10:17:08 <CakeProphet> an IRC bot.
10:17:10 <monqy> never
10:17:14 <monqy> wait irc bot what
10:17:19 <monqy> how would that even work
10:17:20 <CakeProphet> ASCII board
10:17:22 <CakeProphet> commands
10:17:22 <itidus21> it could be static animated
10:17:30 <CakeProphet> ...yes/
10:17:31 <CakeProphet> ?
10:17:38 <CakeProphet> it would be very spammy.
10:17:44 <monqy> the spamest
10:17:44 <CakeProphet> but each turn it would print out the board.
10:17:54 <itidus21> i mean as in.. it could have an animation mocked up
10:17:57 <CakeProphet> which would not be bad, say, in a separate channel.
10:18:02 <CakeProphet> itidus21: explain.
10:18:07 <CakeProphet> how does that even make sense in IRC.
10:18:09 <CakeProphet> and why do you need to animate it.
10:18:33 <itidus21> like a game drawn frame by frame and saved as a gif or something for purpose of <monqy> I need to see it in action now
10:18:51 <CakeProphet> well. monqy can just play it with some friends IRL?
10:18:57 <monqy> whats friends
10:19:00 <CakeProphet> oh..
10:19:04 <CakeProphet> well, that's how I'm going to playtest it.
10:19:08 <CakeProphet> I have some friends that like chess
10:19:12 <CakeProphet> so I'm pretty sure they'd like this game.
10:19:21 <CakeProphet> they also like Portal... so...
10:19:27 <monqy> do they like lasers
10:19:28 <itidus21> i used to have friends.. thats almost the same thing as having friends :-s
10:19:29 <CakeProphet> and hookah.
10:19:30 <CakeProphet> probably.
10:19:34 <monqy> that was a joke everyone loves lasers
10:19:52 <CakeProphet> I wonder if they like prisms.
10:19:57 -!- sllide has joined.
10:20:04 <CakeProphet> I wonder if the prism is a good piece...
10:20:07 <monqy> prisms _are_ nifty
10:20:13 <monqy> I mean real prisms
10:20:22 <CakeProphet> I am somewhat suspicious that they could be improved upon.
10:20:26 <monqy> me too
10:20:45 <CakeProphet> but something needs to capture arrows...
10:20:57 <monqy> can normal pieces not?
10:21:10 <CakeProphet> currently that includes: pawn, king, and queen
10:21:15 <monqy> aahh
10:21:20 <CakeProphet> s/queen/prism/
10:21:33 <monqy> what are bishopes agian i forgot
10:21:36 <CakeProphet> arrows.
10:21:42 <monqy> ah
10:21:54 <monqy> moved it from sharpied pawns, then? good
10:21:56 <CakeProphet> I changed the piece roles a bit near the end of brainstorming.
10:21:57 <CakeProphet> yes.
10:22:28 <CakeProphet> queenside rook is the d-cannon, kingside rook is the c-cannon
10:22:33 <CakeProphet> that's diagonal and cardinal.
10:22:47 <CakeProphet> d-cannon is upside down.
10:24:30 <CakeProphet> these designations may change entirely. needs more playtesting.
10:24:48 <CakeProphet> but a cannon that fires in all directions seems bad to me.
10:24:55 <CakeProphet> but then prisms basically do that are more mobile...
10:25:21 <CakeProphet> still they're not offensively mobile in that they need to be in a projectile path to be effective.
10:25:48 <CakeProphet> ...except when they're just hopping around capturing normally.
10:25:53 <CakeProphet> which is one of their advantages as well.
10:26:28 <CakeProphet> it's a very effective anti-arrow piece. but not something that's invincible itself.
10:27:24 <monqy> I was imagining it'd be a pretty good piece for staying in some degree of saftey and sniping at the enemy
10:27:42 -!- Patashu has joined.
10:27:50 <CakeProphet> well, that's kind of why I want portals to not be affected by prisms
10:27:51 <monqy> as with some assistance it can do what queen-captures without moving itself
10:28:07 <CakeProphet> portals could be used to defend against prisms then.
10:28:47 <monqy> only if they're facing the right direction!!
10:28:49 <CakeProphet> which can otherwise just destroy anything in three different paths without having to move out of safety.
10:28:52 <CakeProphet> monqy: right
10:29:25 <CakeProphet> so yeah leaving portals unaffected by prisms would be a nice balance I think.
10:30:30 <CakeProphet> arrows defend against cannon fire, prisms can kill arrows, but regular cannon fire can kill prisms
10:30:57 <CakeProphet> portals can defend against anything in which it's facing.
10:31:11 <CakeProphet> (...results may vary on the other end of the portal. :P )
10:31:37 <monqy> hm
10:31:41 <monqy> a thing
10:32:02 <CakeProphet> yes a thing.
10:32:03 <Patashu> so is this chess or a wargame
10:32:06 <monqy> what happens when you have two corresponding portals pointing into each other and someone somehow gets into one of them, say by knightsmoves
10:32:12 <CakeProphet> Patashu: what is a wargame
10:32:25 <Patashu> like panzer general and stratego and so on
10:32:26 <CakeProphet> monqy: oh my.
10:32:32 <monqy> CakeProphet: explosions?
10:32:37 <CakeProphet> monqy: uh......
10:32:39 <CakeProphet> uh.......
10:32:42 <CakeProphet> yeah explosions.
10:32:44 <monqy> woohoo
10:32:52 <CakeProphet> explosions are cures for all forms of paradox.
10:33:12 <itidus21> monqy: stargate rules?
10:33:15 <CakeProphet> Patashu: uh I'd say it's chess-like
10:33:17 <Patashu> That would be a funny premise for a time travel game
10:33:20 <itidus21> is there any applicable rule?
10:33:22 <Patashu> Mess up? EXPLOOOSION
10:33:27 <monqy> itidus21: never seen it
10:33:40 <itidus21> i dont think anything like that ever happened
10:33:47 <itidus21> but stargate is much like a portal
10:33:53 <CakeProphet> monqy: it could just be like illegal or something...
10:34:07 <monqy> illegal is boring
10:34:18 <CakeProphet> also how should diagonal movement work through a portal that isn't facing diagonal
10:34:23 <monqy> so long as you're making an exception for it, might as well make it explodey
10:34:26 <CakeProphet> or similarly with cardinal movement.
10:34:51 <monqy> CakeProphet: oh right that was a thing I was going to ask you about. when I was thinking about bishopmovement/portals
10:35:04 <CakeProphet> well, for example
10:35:08 <CakeProphet> if a king goes through a portal
10:35:14 <CakeProphet> and the out-portal is diagonally facing
10:35:19 <CakeProphet> then he should come out right in front of it.
10:35:24 <CakeProphet> no problem.
10:35:41 <CakeProphet> so
10:35:49 <monqy> bishopmove attempt to reorient? explosion
10:35:53 <CakeProphet> maybe things should just always come out on the square adjacent to the portals opening
10:35:56 <CakeProphet> and then they continue movement from there.
10:36:12 <monqy> or rookmove attempt to reorient. either way.
10:36:25 <CakeProphet> OR
10:36:38 <CakeProphet> maybe they continue along the path the portal points them? as a strategic element.
10:36:49 <CakeProphet> so a diagonally moving arrow goes through a portal and comes out a portal that's facing in a cardinal direction
10:36:52 <CakeProphet> at which point it continues cardinally.
10:36:55 <monqy> and then they're back to normal after stopping movemntn?
10:36:59 <CakeProphet> yes.
10:37:00 <monqy> that works
10:37:08 <monqy> best solution
10:37:14 <CakeProphet> yes allows for shenanigans.
10:37:44 <CakeProphet> ....wow these rules are ridiculously complicated.
10:37:59 <itidus21> the implications on this rule is huge
10:38:05 <CakeProphet> it'll be fun trying to explain it all to my friends.
10:38:27 <CakeProphet> well it really only affects arrows.
10:38:38 <itidus21> of which there arenot many
10:38:39 <itidus21> :P
10:39:07 <CakeProphet> if I decide to make something else that isn't a knight-mover or a king-mover
10:39:17 <CakeProphet> or which doesn't explode upon going through a portal.
10:39:25 <CakeProphet> then it would follow that rule as well.
10:39:35 <CakeProphet> i.e., a rook-like could go diagonally.
10:39:51 * itidus21 blinks
10:40:00 <itidus21> now that is hardcore
10:40:14 <CakeProphet> but there are no rooklikes.
10:40:28 <itidus21> changing the frame of reference of a chesspiece surely doesn't happen a lot
10:40:56 <CakeProphet> everything is king-like, knight-hop-hop, pawns, or bishop-like
10:41:02 <Patashu> wow. rotating a piece via portal
10:41:39 <CakeProphet> monqy: also I realized that the whole angle-reorienting stuff is kind of pointless since you can just change directions at the end of the turn anyways.
10:42:08 <monqy> oh right
10:42:23 <monqy> that makes it a bit less complicated
10:42:27 <CakeProphet> should I make re-angling take a whole turn? seems kind of... lame.
10:42:42 <monqy> it's fine as-is
10:42:49 <itidus21> well this frame of reference thing would be more meaningful in a game with regular pieces
10:43:08 <CakeProphet> yes but then no projectile shenanigans and loops.
10:43:29 <itidus21> im just imagining pawns rotated to walk to the walls
10:43:36 <CakeProphet> wat
10:43:39 <monqy> they change back to normal at turn-end
10:43:40 <CakeProphet> "walls"?
10:43:42 <Patashu> walls
10:43:42 <Patashu> lol
10:43:48 <itidus21> sorry.. side panels
10:43:51 <Patashu> the chess board is surrounded by infinitely high walls of infinitely thick concrete
10:43:54 <CakeProphet> "side panels"?
10:43:55 <itidus21> spectator stands of rome
10:43:57 <Patashu> or
10:43:58 <Patashu> wait
10:43:59 <Patashu> what if
10:44:00 <Patashu> you could move
10:44:02 <itidus21> caesar looks on
10:44:02 <Patashu> -between the squares-
10:44:05 <Patashu> along the edges and corners
10:44:11 <CakeProphet> Patashu: woah dude
10:44:13 <itidus21> actually considering that rome probably never saw chess
10:44:19 <monqy> changing back to normal at turn end is how you avoid a choice between hidden state and sharpieing your pawns!!!
10:44:35 <CakeProphet> it wouldn't even make sense for them to continue moving that way afterwards.
10:44:49 <CakeProphet> GOES AGAINST THE LAWS OF PORTAL CHESS PHYSICS.
10:45:03 <itidus21> glados has infected the system
10:45:19 -!- monqy has quit (Quit: hello).
10:45:37 <Patashu> hmm, I'm picturing a simple 'chess with portals' variant now.
10:46:00 <CakeProphet> also if you a have a portal adjacent to a king
10:46:11 <CakeProphet> any time the linked portal can be captured you're in check.
10:46:30 <Patashu> FIDE rules except both teams start with a them-coloured portal on a tile in their third rank. a portal moves to any unoccupied tile. you can move a piece onto a portal and it continues out the other side like the two tiles were in fact right together
10:46:55 <Patashu> or possibly make both portals neutral instead of owned by a side and add 'no repeating an earlier state' as a rule
10:47:04 <CakeProphet> help where's directionality of portals.
10:47:04 <Patashu> hi I have not tested my game at all
10:47:41 <CakeProphet> I do find adding a concept of direction to chess to be interesting.
10:47:44 <CakeProphet> could explore that with other variants.
10:47:51 <CakeProphet> #esoteric-chess? :P
10:48:10 <Patashu> I assume they'd never be rotated
10:48:13 <Patashu> but you could add that easily
10:48:36 <Patashu> portals have an orientation, you can move it to any tile or change its orientation as your turn. when you go into one portal you look at what its orientation is re: the other one and that's how much it angles by
10:49:02 <CakeProphet> lolwat
10:49:27 -!- Vorpal has joined.
10:49:28 <CakeProphet> Patashu is not allowed to write rules for portal chess.
10:49:29 -!- Vorpal has quit (Changing host).
10:49:29 -!- Vorpal has joined.
10:49:30 <Patashu> example, if both portals face north then there's zero difference so you go through unchanged. if one is bent 90 degrees then going through one bends you 90 degrees
10:49:31 <Patashu> oh
10:49:33 <Patashu> well then!
10:49:36 <CakeProphet> !!!!!
10:49:38 * Patashu storms off in a huff. through a portal
10:49:41 * Patashu closes it behind him
10:49:59 <CakeProphet> you could have chess with a portal gun
10:50:02 <CakeProphet> the portal gun is directional
10:50:07 <Vorpal> hi
10:50:09 <CakeProphet> and then fires portals on the infinite concrete walls
10:50:12 <itidus21> i considered portal gun earlier but stayed silent :D
10:50:13 <Vorpal> <itidus21> vorpal would probably like my lowbrow style of chess variation <-- oh?
10:50:23 <Vorpal> (was the last line I saw before putting computer to sleep)
10:50:53 <itidus21> i haven't completed any though
10:51:08 <Vorpal> itidus21, what is your lowbrow style of chess?
10:51:34 <CakeProphet> he drools on the pieces.
10:51:44 <Vorpal> XD
10:51:45 <itidus21> <Vorpal> CakeProphet, are there pirates and ninjas too?
10:51:46 <Patashu> lowbrow style of chess makes me think of the version of chess played in...sweden? germany? someplace like that. where you throw a piece of wood underarm across a field and try to hit your enemy's king with it
10:52:02 <itidus21> <monqy> what if instead of special cases you had pirates and ninjas <monqy> i would be less angry
10:52:04 <Vorpal> Patashu, that isn't chess, that is kubb I think
10:52:08 <Patashu> yes
10:52:08 <Patashu> kubb
10:52:09 <Vorpal> Patashu, very different from chess
10:52:21 <Patashu> I might be confusing it with a hhgttg joke
10:52:24 <itidus21> lol patashu
10:52:29 <CakeProphet> soon I will publish my chess variant and no one will play chess anymore
10:52:35 <CakeProphet> they will only play PORTAL CHESS!!!!!!111111111
10:52:53 <Vorpal> Patashu, I mean, it has nothing to do with chess. Apart from being a game. It is normally played between two teams.
10:53:12 * CakeProphet fantasizes about his future fame as a renowned chess variant writer.
10:53:12 <Vorpal> anyway it is from Sweden, I played it once. I suck at it.
10:53:43 <Patashu> spend 10 years becoming a kubb grandmaster
10:53:48 <Patashu> and complain about how no one appreciates this game anymore
10:53:53 <Vorpal> heh
10:54:31 <Vorpal> Patashu, wikipedia indicates it is common in Germany too at least.
10:55:04 <CakeProphet> note that Wikipedia says nothing about portal chess.
10:55:29 <itidus21> CakeProphet: if you're checking wikipedia thats because you're afraid of the nasty truths you'll find in google
10:55:33 <Vorpal> CakeProphet, and?
10:55:36 <itidus21> (which i havent checked)
10:55:38 <CakeProphet> http://en.wikipedia.org/wiki/Portal:Chess
10:55:40 <CakeProphet> not the same.
10:55:44 <Vorpal> XD
10:56:10 <CakeProphet> Vorpal: I'm just revelling in my ego right now having just created something entirely new to the world.
10:56:17 <CakeProphet> pay no mind.
10:56:30 <Vorpal> CakeProphet, sounds like a combination of chess and Portal.
10:56:37 <CakeProphet> well yes...
10:56:47 <itidus21> CakeProphet: this isn't a competitor... but... worth looking at http://www.youtube.com/watch?v=dav9OyEORk4
10:56:47 <CakeProphet> new things are usually resynthesized from previous ideas.
10:56:52 <CakeProphet> but this doesn't make them any less original.
10:57:23 <Vorpal> speaking of games, I recently played Bastion. Very impressive game. Innovative.
10:57:41 <Vorpal> and it is right up there with Braid in terms of games being art.
11:00:40 <itidus21> CakeProphet: ok heres the first bitter taste of your competition. but don't lose hope too easily. http://blog.chess.com/balifid/portal-chess
11:01:12 -!- Taneb has joined.
11:01:16 <itidus21> it doesn't even have guns though
11:01:23 <itidus21> its not exactly a big threat
11:03:17 <itidus21> http://www.quora.com/How-might-one-add-portals-to-chess -- curious
11:06:42 <CakeProphet> yeah that doesn't look like a good game.
11:06:53 <itidus21> now this is a badass idea http://www.youtube.com/watch?v=WtcGiZelPfk
11:08:18 <CakeProphet> bahaha
11:09:17 <itidus21> good game * good game = good game
11:09:41 <CakeProphet> I think I would be a good game designer actually.
11:09:54 <CakeProphet> I've done some brainstorming on an Android game I've thought about.
11:09:58 <itidus21> ive been following super mario very closely
11:10:00 <CakeProphet> kind of a metroid-like game.
11:10:07 <CakeProphet> but a puzzle game.
11:10:13 <itidus21> so im excited to see a video of super mario with portals
11:10:24 <CakeProphet> action-puzzle game.
11:10:36 <CakeProphet> with things like time dilation missiles.
11:10:56 <CakeProphet> and... other things I haven't thought of. time dilation missiles are basically the main idea I've got.
11:11:28 <CakeProphet> lemme check my notes...
11:11:43 <itidus21> so combining themes from laserchess with original loops idea with portals and i think it is likely you're onto something original
11:12:31 <CakeProphet> ....I think this is an original chess variant already.
11:12:46 <itidus21> thats what i meant to say
11:12:46 <CakeProphet> I will need to playtest it but the game seems pretty complete to me.
11:12:56 <itidus21> i cant find any obvious copies
11:13:21 <CakeProphet> I didn't even know about laserchess actually.
11:13:37 <CakeProphet> laser chess is more strictly about bouncing lasers everywhere.
11:13:43 <CakeProphet> each piece reflects differently.
11:14:19 <CakeProphet> man I need to sleep.
11:14:24 <CakeProphet> too much thinking about portal chess
11:14:27 <CakeProphet> not enough homeworkdone.
11:16:22 <itidus21> "Little known fact: knights in chess travel over other pieces by rocket jumping."
11:17:26 <CakeProphet> itidus21: also what is L2
11:17:39 -!- oerjan has joined.
11:17:49 <itidus21> 2L http://codu.org/eso/2l/README
11:19:43 <CakeProphet> oerjan: there is now such a thing as portal chess. Obviously you are as excited as I am right now.
11:20:40 <oerjan> well i _do_ have to consider the possibility that the CakeProphet is a lie.
11:21:08 <CakeProphet> oerjan: no no it's real all the paradoxes cause explosions.
11:21:15 <CakeProphet> everything is fine.
11:21:16 <oerjan> yay
11:21:20 <Taneb> Does SK do the same as KI in a different way?
11:21:27 <oerjan> Taneb: yes
11:21:35 <Taneb> INTERESTING
11:21:38 <Taneb> ALSO WEIRD
11:21:42 <oerjan> with lazy evaluation, anyhow
11:21:44 <CakeProphet> :t const id
11:21:45 <lambdabot> forall a b. b -> a -> a
11:21:50 <CakeProphet> :t ap const
11:21:50 <lambdabot> forall b a. (b -> a) -> b -> b
11:22:14 <oerjan> in (strict) unlambda they're slightly different in what can be evaluated.
11:22:57 <CakeProphet> :t ap const (const id)
11:22:58 <Taneb> I'm really thinking in terms of MIBBLLII
11:22:58 <lambdabot> forall b. b -> b
11:23:19 <oerjan> :t ap const undefined
11:23:20 <lambdabot> forall b. b -> b
11:24:46 <CakeProphet> see I'm tempted to not listen to monqy and gives knights directionality to their movements
11:25:12 <CakeProphet> so that the adjacent portals with infinitely teleporting knight situation can't happen.
11:25:47 <CakeProphet> well, infinitely teleporting prism, which can move like a knight.
11:26:20 <Taneb> Next: Portal Monopoly
11:26:43 <CakeProphet> yeah... monqy's rule causes more problems than the way I wanted to do it.
11:27:57 <oerjan> so, monqy's rule it is, then?
11:29:04 <Taneb> Which ap is lambdabot's ap?
11:29:18 <CakeProphet> there's more than one?
11:29:19 <oerjan> the usual one...
11:29:21 <CakeProphet> @hoogle ap
11:29:21 <lambdabot> Control.Monad ap :: Monad m => m (a -> b) -> m a -> m b
11:29:22 <lambdabot> Data.Graph.Inductive.Query.ArtPoint ap :: Graph gr => gr a b -> [Node]
11:29:22 <lambdabot> Control.Arrow app :: ArrowApply a => a (a b c, b) c
11:30:53 -!- Taneb_ has joined.
11:30:53 <oerjan> "I'd like to be able to apply Arrows to each other." "There's an app for that."
11:31:19 -!- Taneb has quit (Read error: Connection reset by peer).
11:31:22 <Taneb_> Control.Monad, I presume?
11:31:25 -!- Taneb_ has changed nick to Taneb.
11:31:33 <oerjan> well yes
11:32:35 <CakeProphet> arrows are weird.
11:33:43 <CakeProphet> as far as I understand they're like monads but tuplier
11:35:13 <oerjan> arrows = category + applicative + some extra laws
11:35:25 <oerjan> no bind, unless you have arrowapply
11:35:51 <oerjan> in which case they're equivalent to monads
11:42:02 -!- Taneb has quit (Ping timeout: 252 seconds).
11:42:40 <CakeProphet> I guess I should play Braid
11:42:46 <Vorpal> CakeProphet, yeah it is awesome
11:43:49 -!- pikhq has joined.
11:44:02 -!- pikhq_ has quit (Ping timeout: 260 seconds).
11:44:46 <CakeProphet> Vorpal: what was the other game someone was talking about?
11:44:54 <Vorpal> CakeProphet, Bastion?
11:45:07 <CakeProphet> no
11:45:10 <CakeProphet> deadly death something.
11:45:13 <Vorpal> minecraft? magicka? Deus Ex?
11:45:18 <Vorpal> CakeProphet, oh, dead island?
11:45:23 <CakeProphet> no
11:45:38 <Vorpal> harry potter and the deadly hallows (I heard it was shit)
11:45:53 <CakeProphet> Vorpal: wow imagine that.
11:46:11 <CakeProphet> Deadly Rooms of Death
11:46:17 <Vorpal> never heard of that
11:46:20 <Vorpal> what sort of game is it?
11:46:39 <Vorpal> well *googles*
11:46:45 <Vorpal> hm, released in 1997
11:56:20 -!- sllide has quit (Ping timeout: 260 seconds).
12:11:53 <CakeProphet> Vorpal: you've played magicka?
12:12:00 <CakeProphet> it's a favorite of mine.
12:13:38 -!- hagb4rd has quit (Ping timeout: 260 seconds).
12:25:26 <Patashu> harry potter and the deadly rooms of death
12:25:32 <Patashu> he even gets a Really Big Sword
12:25:46 <Patashu> and has to sm.. sl... well it kind of works!
12:29:06 -!- Taneb has joined.
12:31:16 <Taneb> Does anyone know any combinatory logic system things other than BCKW and SKI?
12:31:23 <Taneb> And Iota's
12:31:59 <Patashu> they're all equivalent anyway :downs:
12:33:06 <olsner> Taneb: there are a bunch of single-combinator bases, e.g. Fokker's X combinator
12:33:10 <olsner> ... his paper also has a few alternative single-combinator bases he compares against
12:33:57 <olsner> and yes, any complete combinatory logic system is equivalent to all the other complete ones
12:34:14 <olsner> but that doesn't really make it any less interesting
12:42:30 -!- sebbu has quit (Read error: Connection reset by peer).
12:43:35 -!- sebbu has joined.
12:43:35 -!- sebbu has quit (Changing host).
12:43:35 -!- sebbu has joined.
12:45:09 <oerjan> Taneb: there's one without K that is not equivalent but nonetheless TC
12:45:46 <oerjan> Taneb: also, if you look at it the right way, Underload is one
12:47:23 <oerjan> (curry (i think) proved it TC by showing you could approximate K well enough for numbers, or something like that)
12:49:23 <Vorpal> oerjan, hm. What do you mean with equivalent if not equivalent computational class?
12:49:41 <oerjan> it cannot express the same lambda terms
12:49:45 <Vorpal> ah
12:50:19 <oerjan> http://en.wikipedia.org/wiki/Combinatory_logic#CLK_versus_CLI_calculus
12:52:05 <Vorpal> hm, interesting
12:56:20 <Deewiant> ?hoogle (a -> a) -> [a] -> [a]
12:56:20 <lambdabot> Prelude iterate :: (a -> a) -> a -> [a]
12:56:21 <lambdabot> Data.List iterate :: (a -> a) -> a -> [a]
12:56:21 <lambdabot> Prelude map :: (a -> b) -> [a] -> [b]
12:57:11 <oerjan> Deewiant: do you want something different from map?
12:57:25 <Deewiant> I want to modify the head only
12:57:32 <oerjan> ah.
12:58:05 <oerjan> there is a distinct lack of functions that act separately on head and tail
12:58:20 <Deewiant> Data.List.NonEmpty doesn't seem to have it either
12:59:03 <oerjan> :t uncurry (:) . first ?f . splitAt 1
12:59:04 <lambdabot> forall a. (?f::[a] -> a) => [a] -> [a]
12:59:10 <oerjan> oops
12:59:37 <oerjan> oh well, it's easy to write
13:00:21 <Deewiant> Should it be a noöp or an error on []
13:01:34 <oerjan> that would depend on your use case, wouldn't it
13:01:53 <Deewiant> Just thinking what makes more sense for the general case
13:02:52 <oerjan> noop can easily be converted to the other form
13:03:19 <oerjan> :t uncurry (:) . first (map ?f) . splitAt ?n
13:03:20 <lambdabot> forall b. (?f::[b] -> b, ?n::Int) => [[b]] -> [[b]]
13:03:34 <oerjan> er
13:03:38 <oerjan> :t uncurry (++) . first (map ?f) . splitAt ?n
13:03:39 <lambdabot> forall b. (?f::b -> b, ?n::Int) => [b] -> [b]
13:04:30 <oerjan> :t uncurry (++) . (map ?f *** map ?g) . splitAt ?n
13:04:30 <lambdabot> forall b a. (?f::a -> b, ?g::a -> b, ?n::Int) => [a] -> [b]
13:04:49 <oerjan> moar generaller
13:09:06 -!- sebbu2 has joined.
13:09:09 <Deewiant> ?hoogle [a] -> Int -> Ordering
13:09:09 <lambdabot> Prelude (!!) :: [a] -> Int -> a
13:09:09 <lambdabot> Data.List (!!) :: [a] -> Int -> a
13:09:09 <lambdabot> Data.List genericIndex :: Integral a => [b] -> a -> b
13:10:34 <oerjan> :t null . drop n
13:10:35 <lambdabot> Couldn't match expected type `Int' against inferred type `Expr'
13:10:35 <lambdabot> In the first argument of `drop', namely `n'
13:10:35 <lambdabot> In the second argument of `(.)', namely `drop n'
13:10:38 <oerjan> :t null . drop ?n
13:10:38 <lambdabot> forall a. (?n::Int) => [a] -> Bool
13:11:51 <Deewiant> > map (null . drop 5) ["LESS","EQUAL","GREATER"]
13:11:53 <lambdabot> [True,True,False]
13:12:33 -!- sebbu has quit (Ping timeout: 260 seconds).
13:21:36 -!- Taneb has quit (Ping timeout: 252 seconds).
13:57:44 -!- oerjan has quit (Quit: leaving).
14:11:30 <Patashu> I am fucking terrible at combinatory logic
14:11:40 <Patashu> http://www.angelfire.com/tx4/cus/combinator/birds.html
14:11:52 <Patashu> How do I go through the process of evaluating Bluebird ((S(KS))K) to f x y
14:12:14 <Patashu> It should turn it into (f (g x)) since that's what B does
14:12:24 <Patashu> But I have no idea what receives what first and how much of it it wants and blah blah blah
14:12:31 <Patashu> Even thouhg I can look at the page and be like oh, S does this and K does this
14:12:37 <Patashu> My head is fucked by actually trying to do it
14:18:16 -!- Phantom_Hoover has joined.
14:29:53 -!- Patashu has quit (Quit: MSN: Patashu@hotmail.com , Gmail: Patashu0@gmail.com , AIM: Patashu0 , YIM: patashu2 .).
15:06:04 -!- sebbu2 has changed nick to sebbu.
15:36:51 -!- MSleep has changed nick to MDude.
15:48:26 -!- azaq23 has joined.
16:01:30 -!- monqy has joined.
16:08:34 -!- Taneb has joined.
16:08:43 <Taneb> Hello!
16:09:13 <Taneb> You know, I almost had the middle name Elliott?
16:10:45 <monqy> Taneb Elliott Somethingorother
16:12:20 <Taneb> My initials would have been N.G.E.vD.
16:12:52 <monqy> so mcuh name
16:18:12 <Gregor> Taneb: 's name is now Ngevd.
16:18:15 <Taneb> I have here a record of the songs from Disney's the Jungle Book
16:18:19 -!- Taneb has changed nick to Ngevd.
16:20:08 <Gregor> How do you pronounce your name, Ngevd?
16:23:15 <Ngevd> First is a velar nasal
16:23:53 <Ngevd> Then an open-mid front unrounded vowel
16:24:13 <Ngevd> Then a voiced labiodental fricative
16:24:53 <Ngevd> Then a voiced alveolar plosive
16:24:58 <Ngevd> Ngevd
16:25:18 <Gregor> Oh good. I was afraid the 'g' might be pronounced independently of the 'ng'
16:25:44 -!- sebbu has quit (Read error: Connection reset by peer).
16:26:38 <Ngevd> A bit like ng-ev'd
16:27:32 <Ngevd> Does anyone know how to convert an LP into an iPod compatible format?
16:28:07 -!- sebbu has joined.
16:28:29 <monqy> LP?
16:28:40 <Gregor> You're probably stuck with finding a player with line-out and recording.
16:28:50 <Gregor> If there exist players with line out :P
16:29:10 <Ngevd> Shouldn't be too difficult to make
16:29:21 <Ngevd> However, I am not one of life's makers
16:29:32 <Ngevd> And it probably quite difficult to buy
16:29:53 <Ngevd> But how else will I listen to Eagles Greatest Hits Volume 2 while on the move?
16:30:01 <Gregor> http://www.thinkgeek.com/electronics/digital-conversion/c7fd/
16:30:17 <Gregor> You can probably get these for less than this retarded price too :P
16:30:45 <Ngevd> I think there's actually someone near HEXHAM, THE CAPITAL OF ESOTERIC PROGRAMMING who does it for a living
16:31:53 <Gregor> Last summer I converted a bunch of beta tapes to DVD
16:34:22 <fizzie> I've once built the correct analog filter to make a regular line out into something that can be plugged into the "usual" LP player input of an amplifier (because the amplifier in question was from the 1970s or so and didn't really have any sensible "aux" inputs for a computer); the inverse shouldn't be too tricky.
16:35:44 <fizzie> "First, any self-respecting audiophile would be embarrassed to admit using a USB turntable, as there are no high-end models."
16:38:55 <Gregor> And what if you're not an audiophile :P
16:39:33 <fizzie> Then you are unimportant and not worth an answer, I believe. (I'm speaking from the viewpoint of this document, you understand.)
16:39:47 <fizzie> Anyway, you only need about $1000 to do it almost right, that's not too bad.
16:41:14 <fizzie> (Or $100 if you already have a good analog turntable.)
16:41:32 <Phantom_Hoover> <Ngevd> I think there's actually someone near HEXHAM, THE CAPITAL OF ESOTERIC PROGRAMMING who does it for a living
16:41:43 <Phantom_Hoover> Dude, Helsinki is the capital.
16:41:48 <Phantom_Hoover> Look at all the Finns here.
16:41:53 <Gregor> How about this: What if the LP format sucks ass, your records have been sitting around for years and are probably scuffed anyway, and audiophiles are retardedly trying to preserve what amounts to white noise?
16:43:49 -!- impomatic has joined.
16:43:53 <impomatic> Hi :-)
16:46:53 <Gregor> impomatic: Let us discuss the correct procedure for converting LP -> FLAC
16:48:11 <fizzie> The correct procedure is: you put the LP into a flatbed scanner, scan it as a Windows .bmp file, and then rename that file to .flac.
16:49:46 <Gregor> *clap clap*
16:50:08 <Gregor> `addquote <Gregor> Let us discuss the correct procedure for converting LP -> FLAC <fizzie> The correct procedure is: you put the LP into a flatbed scanner, scan it as a Windows .bmp file, and then rename that file to .flac.
16:50:10 <HackEgo> 669) <Gregor> Let us discuss the correct procedure for converting LP -> FLAC <fizzie> The correct procedure is: you put the LP into a flatbed scanner, scan it as a Windows .bmp file, and then rename that file to .flac.
16:50:54 <fizzie> What? It's lossless!
16:52:34 <Vorpal> no it isn't. The scanner will introduce some noise
16:52:44 <Vorpal> at the very least some thermal noise
16:53:21 <Vorpal> and even if you get rid of that you have various quantum noise thingies
16:56:37 <fizzie> No, no, it's called "free LOSSLESS audio codec".
16:56:54 <impomatic> What's LP, apart from "Limited Process"? :-)
16:57:22 <Deewiant> Long Playing
16:59:13 <Vorpal> impomatic, which in this case refer to a type of gramophone record
17:02:06 -!- ive has joined.
17:11:54 -!- impomatic has quit (Quit: impomatic).
17:12:09 <Gregor> We really need better terms for degrees of lossiness.
17:12:23 <Gregor> Since it's not the /format/ that causes loss, it's the /conversion/.
17:12:45 <Gregor> FLAC is lossless, but converting from an LP can't be, GIF is lossless but only supports a 256-color palette ...
17:22:06 <fizzie> Assuming we're inside a simulation anyway, converting from an LP sure can be lossless.
17:32:15 * Phantom_Hoover ponders again the perennial question of what ais' middle name is.
17:42:03 <Vorpal> Phantom_Hoover, does it matter?
17:42:34 <Gregor> Phantom_Hoover: Irene. His parents ... they weren't so good with names.
17:43:21 <Vorpal> fizzie, why? What if the simulation runs on a analogue computer?
17:43:39 <Phantom_Hoover> Gregor, not implausible, given that he did say that his parents gave both him and his brother gender-neutral names, although not his sister.
17:44:33 <fizzie> My guess is "I-don't-have-a-middle-name" is his middle name.
17:45:01 <Gregor> "Irene" is not a gender-neutral name :P
17:47:40 -!- SgeoN1 has joined.
17:47:56 <SgeoN1> You should become a magical girl.
17:48:16 <Vorpal> ... who?
17:48:31 <Gregor> EEEEEEEEEEEEEEEEEEEVERYONE
17:49:35 -!- Ngevd has quit (Ping timeout: 276 seconds).
17:49:38 <Phantom_Hoover> Lymee, aha, your sock is revealed!
17:50:20 <Vorpal> I don't understand windows IO handling. When windows is under heavy disk load, other programs that seemingly should not need to access the disk respond slowly too, that doesn't happen under linux.
17:50:24 <Vorpal> same disk too
17:50:33 <Vorpal> so wtf
17:50:56 <Lymee> My what?
17:56:03 -!- Phantom_Hoover has quit (Ping timeout: 260 seconds).
18:02:34 -!- Taneb has joined.
18:06:10 <Taneb> Oh yeah, I changed my name
18:06:14 -!- Taneb has changed nick to Ngevd.
18:06:22 <Gregor> Welcome back, Ngevd!
18:19:26 -!- copumpkin has quit (Quit: Computer has gone to sleep.).
18:24:11 -!- elliott has joined.
18:24:18 <elliott> Deewiant: http://hackage.haskell.org/packages/archive/bifunctors/0.1.2/doc/html/Data-Bifunctor-Apply.html
18:24:27 <elliott> There's your (three ampersands)
18:24:49 <elliott> f [three ampersands] g == ((f,g) <<.>>)
18:25:13 <Deewiant> Yeah I noticed that earlier today
18:25:25 <elliott> Deewiant: Hideous name though
18:25:30 <Deewiant> I also filed a bug about the fact that his definitions aren't as lazy as Control.Arrow's
18:26:17 <elliott> And here I am thinking I'm a genius for realising that what you wanted were essentially Biapplicatives, going to check bifunctors for a detail I needed to write them down, and then noticing they were already there :P
18:26:31 <elliott> Still need Trifunctors though right???
18:26:42 <elliott> Also it's missing `both`. :p
18:27:11 <Deewiant> join (uncurry (<<.>>))
18:27:47 <elliott> Deewiant: Yes, which is not nice to use
18:28:03 <elliott> Thus giving it a name :-P
18:28:17 <Deewiant> Yep :-P
18:28:41 <elliott> It'd be nice if Data.Bifunctor.Apply exported bilift = (<<.>>)
18:28:46 -!- ais523 has joined.
18:28:51 <elliott> Or at least I wouldn't want to write ((f,g) <<.>>)
18:29:27 <elliott> http://hackage.haskell.org/packages/archive/bifunctors/0.1.2/doc/html/Data-Bitraversable.html Prize to the first person to find a use for these :P
18:29:52 <SgeoN1> Why do electronics disintegrate in my hands?
18:30:43 <elliott> Deewiant: But I was thinking (before I realised all this) that I could snap up the "combinators" name on Hackage, since it's not taken; then I could include nice things like (.:) too.
18:30:58 <elliott> And names for flip (.) and flip ($).
18:31:04 <Deewiant> How cunning
18:31:14 <elliott> I detect sarcasm
18:31:53 <Deewiant> Well, more sinful than cunning
18:32:06 <elliott> What part is sinful
18:32:10 <elliott> Claiming the combinators name?
18:32:11 <Deewiant> "combinators"
18:32:18 <Deewiant> Nothing should be called that :-P
18:32:32 <SgeoN1> Got a good old email account phishing mail
18:32:39 <SgeoN1> Completely generic
18:32:50 <elliott> Deewiant: What would you call something that defined all the birds in To Mock a Mockingbird, except with reasonable names so they're not birds
18:32:59 <Deewiant> birdlike-combinators
18:33:07 <SgeoN1> When people reply, is there database automatically or manually filled?
18:33:11 <elliott> Deewiant: I UNBIRDED THEM
18:33:30 <SgeoN1> What would happen if I said my password is FUCKPHISHERS
18:33:52 <ais523> elliott: http://esoteric.voxelperfect.net/wiki/User:Ncrazyj isn't as good as some of the spam we've been getting, but I'm about to delete it, so if you care about saving a copy you'd better look now
18:34:34 <elliott> thank you kindly
18:35:50 <ais523> can I delete it now, then?
18:36:03 <elliott> Absolutely not. (Yes, I doubt I can stop you anyway.)
18:36:11 <elliott> (diff) (hist) . . N Talk:Brainlove‎; 23:47 . . (+102) . . Maharba (Talk | contribs) (New page: Don't let User:Phantom Hoover see this. —~~~~)
18:36:12 <elliott> Sage words
18:36:24 <elliott> I was hoping the word love would keep him away... --Aptennap 07:14, 18 September 2011 (UTC)
18:36:26 <elliott> NOTHING CAN SAVE YOU
18:36:47 <ais523> I raged at it in-channel
18:37:13 <ais523> although not very hard, as raging ais523 looks much the same as normal ais523
18:37:15 <elliott> We need to seriously deincentivise the creation of BF derivatives somehow.
18:37:17 -!- mycrofti1 has changed nick to mycroftiv.
18:37:29 <elliott> Like, if you make a brainfuck derivative, you have to provide a translation of your page in Swahili.
18:37:33 <ais523> well, it's not like all these BF derivatives hurt anyone
18:37:36 -!- derdon has joined.
18:37:41 <ais523> and it helps get their authors into esolangs
18:37:45 <elliott> ais523: They hurt me.
18:39:18 <Ngevd> Do MIBBLLII and I hate your bf-derivative I really do count as branfuck derivatives?
18:39:46 <elliott> I liked I hate your bf-derivative I really do before it turned out that the author actually likes BF derivatives
18:39:52 <elliott> :(
18:41:24 <elliott> 21:52:17: <ais523> bleh, a search for "which punctuation marks are uppercase?" gave me no results
18:41:27 <elliott> ais523: try ask jeeves
18:41:35 <elliott> 21:57:59: <zzo38> Is there any standard function for "foldr (.) id"?
18:41:38 <ais523> haha, I forgot that existed
18:41:42 <elliott> > ala Endo foldMap [succ, succ] 99
18:41:43 <lambdabot> Not in scope: `foldMap'
18:41:46 <elliott> > ala Endo mconcat [succ, succ] 99
18:41:46 <lambdabot> Couldn't match expected type `(a -> a) -> Data.Monoid.Endo a'
18:41:47 <lambdabot> again...
18:41:48 <elliott> > mconcat [succ, succ] 99
18:41:49 <lambdabot> Ambiguous type variable `a' in the constraints:
18:41:49 <lambdabot> `Data.Monoid.Monoid a'
18:41:49 <lambdabot> ...
18:41:53 <elliott> >_<
18:41:55 <elliott> wrong intsance
18:41:56 <elliott> ok wait I forget...
18:42:04 <elliott> hmm
18:42:10 <elliott> :t mconcatMap
18:42:11 <lambdabot> Not in scope: `mconcatMap'
18:42:13 <ais523> IIRC it's just an alias for some other search engine, but I'm trying it anyway
18:42:18 <elliott> > ala Endo (mconcat . map) [succ, succ] 99
18:42:19 <lambdabot> Couldn't match expected type `[b -> n']'
18:42:19 <lambdabot> against inferred type `[a ...
18:42:29 <elliott> > ala Endo (const mconcat) [succ, succ] 99
18:42:30 <lambdabot> No instance for (Control.Newtype.Newtype (a -> a) (t -> a1))
18:42:30 <lambdabot> arising fro...
18:42:32 <elliott> ?hoogle concatMap
18:42:32 <monqy> :t ala
18:42:32 <lambdabot> Prelude concatMap :: (a -> [b]) -> [a] -> [b]
18:42:32 <lambdabot> Data.ByteString concatMap :: (Word8 -> ByteString) -> ByteString -> ByteString
18:42:32 <lambdabot> Data.Foldable concatMap :: Foldable t => (a -> [b]) -> t a -> [b]
18:42:33 <lambdabot> forall o n b n' o'. (Newtype n o, Newtype n' o') => (o -> n) -> ((o -> n) -> b -> n') -> b -> o'
18:42:39 <elliott> ?hoogle foldMap
18:42:39 <lambdabot> Data.Foldable foldMap :: (Foldable t, Monoid m) => (a -> m) -> t a -> m
18:42:39 <lambdabot> Data.Traversable foldMapDefault :: (Traversable t, Monoid m) => (a -> m) -> t a -> m
18:42:44 <elliott> > ala Endo Data.Foldable.foldMap [succ, succ] 99
18:42:44 <lambdabot> 101
18:42:47 <elliott> there we go
18:42:49 <elliott> monqy: http://hackage.haskell.org/packages/archive/newtype/0.2/doc/html/Control-Newtype.html
18:43:00 <ais523> oh wow, one of the results was even relevant
18:43:16 <elliott> ais523: nice
18:43:20 <ais523> not very /good/, but relevant: http://typophile.com/node/60376
18:43:56 <elliott> oh, oerjan started working this out later on
18:44:32 <elliott> 22:59:14: <CakeProphet> data Many a = One a | Many (Many a)
18:44:40 <elliott> CakeProphet: this is the partial computation monad
18:45:04 <elliott> CakeProphet: also known as resumption
18:45:08 <elliott> 23:01:08: <CakeProphet> count (One a) = 1; count (Many a) = 1 + count a
18:45:14 <elliott> that counts the number of steps needed to complete the computation
18:45:21 <elliott> 23:01:54: <oerjan> also it's isomorphic to that delayed monad thing
18:45:21 <elliott> yeah
18:47:07 <elliott> 23:32:12: <ais523> hmm, idea my supervisor had for sandboxing OCaml (whilst preventing uses we don't want of the standard library): reject all mentions of modules other than Pervasives, combined with rejecting the stuff in Pervasives we don't want them to use
18:47:15 <elliott> ais523: that's basically a one-time hack version of SafeHaskell :P
18:47:20 <elliott> which is in latest ghc
18:47:34 <ais523> hmm, glad to know the idea isn't completely stupid
18:47:48 <ais523> I may put a prctl() on there just to make sure
18:47:54 <elliott> ais523: just use UMLBox, dude
18:47:59 <elliott> it's a simple "make" to build
18:48:00 <ais523> I wonder if it's possible to run OCaml in one of those?
18:48:07 <elliott> and you can disable all file access
18:48:12 <elliott> and just use nice and sleep to handle the rest
18:48:19 <elliott> five line shell script
18:48:28 <elliott> no OCaml module hacks required
18:50:15 -!- copumpkin has joined.
18:50:23 <elliott> ais523: no?
18:51:11 <elliott> 00:56:27: <oerjan> <ais523> haha, INTERCAL will have that feature all to itself now! <-- i thought you were referring to CTCP SOURCE here
18:51:11 <elliott> 00:56:40: <ais523> no, to putting expressions on the LHS of an assignment
18:51:15 <elliott> ais523: the only thing gone is n+k patterns
18:51:23 <elliott> you can still redefine (+) locally just fine
18:51:33 <ais523> INTERCAL reverse assignments work like n+k patterns
18:51:36 <ais523> just, on anything
18:52:07 <ais523> (as long as it doesn't use the same variable or constant twice, e.g. .1$.1 <- #1$#2 isn't going to work well)
18:52:18 <elliott> that's just finding a fixed point
18:52:29 <elliott> 01:05:53: <Gregor> Surely IRC doesn't predate URLs ...
18:52:29 <elliott> URLs: 1994; IRC: 1988
18:52:30 <elliott> Gregor: so yes it does
18:53:04 <ais523> hmm, now I'm wondering when the Web was invented
18:53:22 <ais523> 1989
18:53:36 <ais523> ah, now why it requires an FTP server location makes a lot of sense
18:53:37 <elliott> Sheesh, I was just about to tell you.
18:53:48 <elliott> The web only went public in 1990 anyway.
18:54:32 <Ngevd> It was invented by someone from Hexham
18:54:37 <Ngevd> Well, it wasn't
18:54:41 <Ngevd> Same country
18:54:54 -!- elliott has quit (Read error: Connection reset by peer).
18:55:00 -!- elliott has joined.
18:56:03 <elliott> 01:32:20: * SgeoN1 badmoods
18:56:03 <elliott> not a verb
18:56:58 <elliott> 01:50:55: <monqy> intesting is _not a word_
18:56:58 <elliott> it's what intestines do
18:57:06 <elliott> what's up intestines? oh nothing, just intesting
18:58:18 <elliott> `addquote <itidus21> :D :D oh man.. i wonder if they ever made chess variants based off of animes
18:58:19 <HackEgo> 670) <itidus21> :D :D oh man.. i wonder if they ever made chess variants based off of animes
18:58:36 <monqy> it is a good quote
18:59:36 <elliott> 02:55:59: <monqy> is suicide chess anything like strip chess
18:59:36 <elliott> suicide strip chess
19:00:06 <tiffany> intercal x_x
19:00:10 <monqy> hi
19:00:33 <ais523> what's wrong with INTERCAL?
19:00:46 <elliott> ais523: tiffany just says random words at random times followed by x_x, as far as I can tell
19:00:53 <tiffany> "A Sieve of Eratosthenes benchmark, computing all prime numbers less than 65536, was tested on a Sun SPARCStation-1. In C, it took less than half a second; the same program in INTERCAL took over seventeen hours.[6]"
19:01:01 <tiffany> how does that even
19:01:05 <elliott> ah yes, now we finally know what's wrong with intercal
19:01:07 <elliott> it's slower than C
19:01:16 <Gregor> Noooo!
19:01:17 <elliott> ais523: make C-INTERCAL produce faster programs and it'll be a great language
19:01:33 <tiffany> intercal uses <- for assignment
19:01:35 <tiffany> squirrel does too
19:01:36 <tiffany> ;-;
19:01:36 <ais523> elliott: C-INTERCAL is substantially faster, I remember running the same program a year ago
19:01:48 <monqy> tiffany: congratulations you've figured it out
19:01:59 <monqy> why intercal is a Bad Language
19:02:00 <elliott> that's the other bad thing about intercal, using <- to assign
19:02:01 <monqy> x_x
19:02:03 <ais523> well, there are only that many plausible syntaxes for assignment
19:02:11 <ais523> really, INTERCAL's expression syntax needs redoing
19:02:11 <elliott> RUINED FOREVER
19:02:18 <ais523> I'm really happy with the control flow
19:02:26 <tiffany> it's not a bad thing
19:02:30 <ais523> but the expressions, while interesting, are just obstructive for no good reason (other than being INTERCAL)
19:02:37 <monqy> I honestly prefer <- over = for assignment of mutable variables
19:02:49 <tiffany> it's that a programming language that i used to like a lot uses <- for assignment, which a parody language also uses
19:03:00 <monqy> oh no
19:03:08 <tiffany> squirrel uses variable <- value; and local variable=value;
19:03:11 <elliott> isn't squirrel that boring game extension languages
19:03:18 <elliott> yes languages PLURAL
19:03:23 <tiffany> squirrel's a 6k interpreted language
19:03:29 <tiffany> used in the source engine
19:03:31 <tiffany> and other thingies
19:03:37 <monqy> I remember squirrel being a boring game extension language last I checked
19:03:45 <ais523> I'm a fan of having separate "define initial (and thus eventual) value of immutable variable" and "assign to memory pointed to by variable name" operators
19:04:15 <monqy> mm
19:04:31 <ais523> most commonly, languages which make the distinction call them = and :=
19:04:40 <monqy> tiffany: but does that make it interesting
19:04:48 <elliott> tiffany: so yes then
19:04:53 <monqy> the interpreter being 6k and used in places
19:05:07 <tiffany> I think I've grown closer to javascript
19:05:08 <elliott> i briefly considered using squirrel for mcmap i think but i didn't because it was bad
19:05:15 <elliott> oh well not as bad as javascript certainlt
19:05:16 <elliott> y
19:05:22 <monqy> heheheh
19:05:23 <tiffany> I was bored and wrote a 3D renderer with it using canvas and kind of like it
19:05:31 <ais523> 6k's quite big for an interp
19:05:37 <tiffany> 6k lines of code?
19:05:42 <tiffany> isn't lua like 50k?
19:05:49 <ais523> if you're aiming for small interp size
19:06:02 <tiffany> I wrote a super basic programming language in 40 lines of lua once
19:06:09 <ais523> rather than speed or clarity of input
19:06:39 <elliott> 03:02:44: <zzo38> Type of classInstances is classInstances :: Name -> [Type] -> Q [Name] different from the documentation, and the code producing error is $(classInstances ''Num [ConT ''Integer] >>= reify . head >>= runIO . print >> [| 0 |])
19:06:41 <elliott> not a bug
19:06:44 <elliott> you're using an older GHC/TH
19:06:50 <elliott> http://hackage.haskell.org/packages/archive/template-haskell/2.5.0.0/doc/html/Language-Haskell-TH.html has the correct type for that version
19:07:08 <monqy> does zzo logread
19:07:16 <elliott> ?tell zzo38 the docs for classInstances aren't broken; you're just using an older GHC. see http://hackage.haskell.org/packages/archive/template-haskell/2.5.0.0/doc/html/Language-Haskell-TH.html for the documentation of your version
19:07:16 <lambdabot> Consider it noted.
19:07:34 <ais523> my record for small interp is 14 bytes (http://esoteric.voxelperfect.net/wiki/MiniMAX), but it doesn't do I/O and the source is in binary
19:07:35 -!- Ngevd has quit (Ping timeout: 276 seconds).
19:07:48 <tiffany> ._.
19:08:15 <ais523> there's a 36-byte one by someone else which avoids both issues
19:08:35 -!- rottytooth has joined.
19:08:38 <elliott> 03:07:17: <zzo38> OK, I managed to report bug now
19:08:38 <elliott> do I have to comment /there/ too?
19:08:40 <ais523> http://esoteric.voxelperfect.net/wiki/MinISCule
19:08:45 <elliott> hmm, rottytooth rings a bell
19:08:53 <elliott> but I'll `? welcome all the same
19:08:54 <elliott> `? welcome
19:08:55 <HackEgo> Welcome to the international hub for esoteric programming language design and deployment! For more information, check out our wiki: http://esolangs.org/wiki/Main_Page
19:09:04 <monqy> thanks `? welcome
19:09:04 <rottytooth> Hi there
19:09:41 <elliott> oh, he had an actual bug
19:09:43 <elliott> compiler panic
19:09:48 <ais523> hmm, seems calamari's website is down
19:09:59 <monqy> what ghc version though maybe it was fixed?? who knows.....
19:10:06 <elliott> 7.0.3
19:10:34 <ais523> elliott: valgrind panics and reports a bug when running in the Secret Project
19:10:37 <elliott> hmm, I should probably use enumerators for this
19:10:58 <ais523> but that's probably just an effect of the Debugger Repulsion Field
19:11:00 <elliott> ais523: did you report it?
19:11:03 <ais523> no
19:11:07 <elliott> lame :P
19:11:39 <ais523> I'm not convinced the Secret Project counts as a supported platform
19:12:50 <elliott> 04:09:19: <copumpkin> no, most programming (and proof assistants) model an intuitionist (constructive) logic
19:12:57 <elliott> copumpkin: you can always just add LEM as an axiom
19:13:16 <copumpkin> and stop being able to compute things
19:13:18 <ais523> which one's LEM?
19:13:24 <copumpkin> A or NOT A
19:13:28 <ais523> aha
19:13:35 <ais523> you're right
19:13:51 <ais523> now I'm wondering what the double negation shift looks like in Curry-Howard
19:13:54 <copumpkin> elliott: it's fine as long as you're only thinking about truth of statements
19:14:07 <copumpkin> but if you ever want to deal with anything algorithmically it's pretty useless
19:14:25 <ais523> (a basic rule of computer science seminars is, if you ever see someone write f(¬¬A) = ¬¬f(A) on the whiteboard, you run)
19:15:16 <ais523> hmm, OISCs are always going to win, in general, on compiler/interp size, right?
19:15:25 <ais523> as in, a simple OISC will beat a simple more-instruction-set-computer
19:15:28 <elliott> not necessarily
19:15:34 <elliott> ByteByteJump splits into two instructions fairly easily, IIRC
19:15:36 <ais523> and a complex one will typically beat a non-OISC of similar complexity
19:15:41 <elliott> that might be simpler than implementing the combined one
19:15:54 <elliott> because lots of OISCs are basically two instructions in disguise
19:16:01 <elliott> http://esolangs.org/wiki/ByteByteJump#The_two-instruction_ByteByte.2FJump
19:16:10 <elliott> depends on what you're implementing it in ofc
19:17:05 <elliott> 04:14:52: <zzo38> Wikipedia does mention "Correspondence between classical logic and control operators", it has to do with continuations, apparently.
19:17:05 <elliott> v
19:17:06 <elliott> http://okmij.org/ftp/Computation/lem.html
19:19:55 <elliott> ais523: quick, what's a Perl script to print if I have two newlines at the end of a file?
19:20:00 <elliott> as opposed to just one terminating newline
19:20:12 <ais523> to check for double-newline at the end of a file?
19:20:13 -!- Taneb has joined.
19:20:45 <elliott> yes
19:20:54 <ais523> umm... "undef $/; $_=<>; print "ends with double newline\n" if /\n/\n$/s
19:20:56 <ais523> "
19:20:58 <elliott> "Haskell frameworks -vs- Arc for web apps" oh no, someone let the kids into /r/haskell :/
19:21:05 <ais523> err, I screwed up the quoting the program onto IRC
19:21:11 <ais523> undef $/; $_=<>; print "ends with double newline\n" if /\n/\n$/s;
19:21:12 <ais523> there we go
19:21:13 <elliott> thx
19:21:16 <ais523> I think, at least, it's untested
19:21:17 <monqy> people still care about arc?
19:21:33 <monqy> people cared about arc?
19:21:33 <elliott> Backslash found where operator expected at -e line 1, near "/\n/\"
19:21:33 <elliott> (Missing operator before \?)
19:21:33 <elliott> syntax error at -e line 1, near "/\n/\"
19:21:33 <elliott> Substitution pattern not terminated at -e line 1.
19:21:34 <elliott> :-P
19:21:40 <elliott> just need to remove the extra /
19:21:42 <ais523> undef $/; $_=<>; print "ends with double newline\n" if /\n\n$/s;
19:21:46 <ais523> it's actually an extra /
19:21:52 <ais523> oh right, that's what yous aid
19:21:55 <ais523> *you said
19:22:13 <ais523> just assume I'm drunk, it's simpler
19:22:17 <ais523> (I'm not, but I get this way anyway sometimes)
19:22:41 <Taneb> I need to change my nick permanently
19:22:48 -!- Taneb has changed nick to NGEvD.
19:22:53 <monqy> ngevd
19:22:59 <elliott> taneb: why
19:23:01 -!- NGEvD has changed nick to Ngevd.
19:23:19 <monqy> whos taneb
19:23:22 <elliott> taneb is nicer than ngevd imho
19:23:24 <elliott> as
19:23:25 <elliott> a name
19:23:37 <Ngevd> :t "Ping"
19:23:37 <lambdabot> [Char]
19:24:07 <elliott> "I see you didn't list javascript. For prototyping, it's hard to imagine how another existing language would make it much faster as it can be done with jQuery currently."
19:24:15 <elliott> jQuery: a good language to develop web apps in
19:26:04 -!- Ngevd has quit (Remote host closed the connection).
19:26:19 <monqy> bye ngevd
19:26:24 <elliott> rip ngevd
19:26:25 <elliott> died as he lived
19:26:29 <monqy> ngevd
19:27:18 <elliott> hmm, there are too many iteratee libraries :'(
19:27:36 <monqy> :(
19:28:14 -!- Ngevd has joined.
19:28:32 <elliott> i cannot decide between iteratee, enumerator, and iterIO :'(
19:28:58 <Ngevd> Right, Ngevd is what I am called on IRC now
19:29:05 <Ngevd> Unless I change it
19:29:11 <elliott> im dont like ngevd
19:29:13 <elliott> whym not taneb :(
19:29:16 <Ngevd> Taneb|Kindle doesn't like it
19:29:23 <monqy> ngevd|kindle
19:29:23 <elliott> why doesnt, he like it
19:29:52 <elliott> whym doesnt
19:29:54 <elliott> he like it
19:29:55 <elliott> :'(
19:29:56 <Ngevd> Awkward to type on a Kindle
19:30:23 <elliott> and
19:30:24 <elliott> ngevd isn't
19:30:53 <Ngevd> No, Ngevd is
19:30:55 <Ngevd> Taneb isn't
19:31:02 <elliott> oh
19:31:03 -!- dell has joined.
19:31:04 <elliott> this sounds
19:31:07 <elliott> like superiority for taneb
19:31:08 <elliott> hi dell
19:31:09 <elliott> `? welcome
19:31:10 <HackEgo> Welcome to the international hub for esoteric programming language design and deployment! For more information, check out our wiki: http://esolangs.org/wiki/Main_Page
19:31:50 <dell> i have simply dropped the idea of llvm-bf converter....i think asm-bf will be awesome!
19:31:52 <dell> ?
19:32:07 <elliott> oh
19:32:09 <elliott> were you dell last time
19:32:13 <elliott> i think you had a different nick then
19:32:13 <Ngevd> asm?
19:32:15 <ais523> hmm, that seems like a decent idea
19:32:18 <ais523> although could be difficult
19:32:26 <elliott> ais523: oh, i told dell to talk to you about gcc-bf, they were asking about it
19:32:41 <elliott> they wanted to do llvm-bf and I said to talk to you because you had considered it
19:32:41 <elliott> etc.
19:32:47 <dell> ais523:real mind fucker project
19:32:48 <elliott> but I guess that doesn't matter now if... what is asm-bf
19:32:56 <elliott> are you trying to convert xeightsix asm into bf
19:32:57 <dell> assembler to brainfuck
19:33:01 <elliott> which assembler
19:33:02 <dell> x86
19:33:05 <elliott> ah
19:33:07 <elliott> good
19:33:08 <ais523> really, BF isn't that bad, despite its name
19:33:10 <elliott> luck with that
19:33:21 <ais523> although x86 is possibly going to make life hard for yourself
19:33:28 -!- Nisstyre has quit (Ping timeout: 260 seconds).
19:33:35 <elliott> that makes it easier to drop, which is a good quality in projects
19:33:35 <ais523> I wonder what the simplest asm would be? Redcode?
19:33:40 <elliott> ais523: OISC, duh
19:33:42 <dell> i find llvm a little too complex to parse
19:33:47 <elliott> dell: LLVM has an API...
19:33:49 <ais523> I don't consider OSICs to be asms
19:33:59 <elliott> you could just write a backend the proper way
19:34:01 <elliott> like ais523 was doing with gc-cbf
19:34:03 <elliott> gcc-bf
19:34:08 <ais523> elliott: I looked into llvm-bf
19:34:18 <ais523> LLVM makes so many assumptions that aren't true about BF, I was heartbroken
19:34:25 <ais523> whereas gcc tries not to
19:34:32 <elliott> ais523: however hard it is, doing it by manually parsing LLVM IR is never going to be easier than writing a backend
19:34:34 <ais523> admittedly, the code doesn't actually /work/
19:34:42 <ais523> elliott: right, that much is obvious
19:34:45 <ais523> so I didn't need to comment on it
19:35:01 <ais523> and just argued with the most recent statement that wasn't
19:35:18 -!- Ngevd has quit (Read error: Connection reset by peer).
19:35:18 -!- Ngevd_ has joined.
19:35:35 <elliott> what was that statement?
19:35:49 <elliott> I already told dell that you considered llvm-bf more of a pain to do than gcc-bf
19:35:53 <elliott> last time they were here
19:35:57 -!- zzo38 has joined.
19:36:02 <ais523> that llvm was worth using at all
19:36:40 <zzo38> LLVM is better designed than C, in my opinion.
19:36:40 <lambdabot> zzo38: You have 1 new message. '/msg lambdabot @messages' to read it.
19:36:52 <zzo38> @messages
19:36:52 <lambdabot> elliott said 29m 36s ago: the docs for classInstances aren't broken; you're just using an older GHC. see http://hackage.haskell.org/packages/archive/template-haskell/2.5.0.0/doc/html/Language-
19:36:52 <ais523> zzo38: I'm not sure that's a good comparison
19:36:52 <lambdabot> Haskell-TH.html for the documentation of your version
19:37:24 <ais523> it's like comparing gcc's internal intermediate representation with ADA
19:37:30 <ais523> *Ada
19:38:06 <elliott> I think Ada is better than cheese.
19:38:30 <dell> these days i get involved in college crap so much that not getting enough time
19:38:53 <zzo38> ais523: What I mean is, with a good macro system and literate programming environment, I think LLVM would be a good programming language to program in, instead of being limited to C.
19:38:59 <dell> i am still wondering whether to do this in python or C
19:39:08 <elliott> do it in asm MORE HARDCORE YEAAAAAAAAAAAAAAAAAAAAAH
19:39:10 <zzo38> dell: Doing what in Python or C?
19:39:17 <ais523> zzo38: I don't, it'd be rather inflexible and nonportable
19:39:23 <dell> x86 asm to bf
19:39:47 <ais523> I suppose you could write it in 32-bit LLVM
19:40:01 <ais523> dell: C is a really inappropriate lang for that, and Python is almost as bad
19:40:16 <ais523> I don't think I'd consider doing that in anything other than a functional language
19:40:19 <ais523> although, I wouldn't really consider it at all
19:40:27 <elliott> <me> haskell <ais> ocaml
19:40:30 <Gregor> dell: If you're gonna do an ASM->BF, may I recommend MIPS.
19:40:35 <elliott> <zzo> FORTH
19:40:43 <ais523> elliott: oh, Haskell and OCaml are both pretty similar for that sort of thing
19:40:46 <Ngevd_> I AM CURIOUS 'BOUT SOMETHING
19:40:56 <ais523> even though they're different languages in general
19:40:58 <Gregor> Ngevd_: How you got that stylish underscore?
19:40:58 <elliott> Gregor: He's set on x86, since that is surely easier than the LLVM-BF he's given up on.
19:41:04 <Gregor> elliott: lol
19:41:08 <Ngevd_> What do pythonbashers generally think of Boo?
19:41:15 <ais523> they generally haven't heard of it
19:41:22 <ais523> at least, if you count me as the main Pythonbasher here
19:41:25 <Gregor> Ngevd_: Mostly, "wtf is Boo"
19:41:46 <elliott> i looked at boo once it is so boring
19:41:55 <elliott> it's PYTHON... but SLIGHTLY DIFFERENT...
19:41:57 <elliott> and ONLY FOR .NET
19:42:02 <elliott> THIS IS WHAT THE WORLD NEEDS
19:42:05 <Ngevd_> It's strongly typed python, essentially
19:42:12 <Gregor> Yeah, "for CLI" pretty much means "I love sucking Microsoft's cock"
19:42:14 <elliott> oh is it strongly typed
19:42:17 <Gregor> Sooooooo, a big no on that one.
19:42:20 <elliott> it's PYTHON... but SLIGHTLY BETTER
19:42:21 <ais523> my objections to Python have pretty much nothing to do with its typing discipline
19:42:31 <ais523> there's a place for both statically and dynamically typed languages
19:42:40 <elliott> a, b = 0L, 1L #The 'L's make the numbers double word length (typically 64 bits)
19:42:40 <elliott> as opposed to "bignum", like Python
19:42:42 <elliott> this is kind of like Erlang
19:42:47 <elliott> let's use all of Prolog's syntax but none of its semantics
19:42:50 <ais523> (I sort of subscribe to the viewpoint that "strongly typed" has been used to mean so many different things that it's meaningless)
19:43:15 <elliott> ais523: IMO, the place for dynamically-typed languages is as a subset of statically-typed ones
19:43:26 <elliott> static and dynamic typing are basically two completely different things, anyway
19:43:29 <elliott> comparing them is near-meaningless
19:43:40 <elliott> if statements are a kind of dynamic typing, really
19:44:18 <copumpkin> I like to call dynamic types "monoidal programming"
19:44:22 <ais523> for compiled languages, the distinction is easy: a statically-typed language is one where, after compilation, you can take any variable in the program and know what type it is without having to actually run the program
19:44:39 <copumpkin> languages are not compiled
19:44:44 <copumpkin> implementations are
19:45:33 <ais523> well, yes
19:45:48 <ais523> languages that can reasonably directly be compiled then, I guess
19:45:57 <zzo38> But one thing I think missing in LLVM is explicit unions. You can still do unions by what it has, but I would prefer an explicit type for unions (this can also allow certain optimizations and analysis to be done)
19:47:00 -!- dell has quit (Quit: Leaving).
19:48:16 <zzo38> You could check many things at runtime, even in a system that doesn't actually have pointers, by representing a pointer by an object ID and offset. Object IDs are garbage collected. If you try to dereference a pointer with an invalid offset or invalid object ID, you get an error message. Same thing when using unions incorrectly. You can use it for both static and dynamic analysis.
19:52:14 -!- Nisstyre has joined.
19:55:38 -!- Ngevd_ has quit (Read error: Connection reset by peer).
19:59:15 <elliott> Hey Vorpal, you get to be the substitute fizzie
20:02:07 -!- sllide has joined.
20:02:25 <elliott> Pah
20:03:40 -!- Ngevd has joined.
20:03:43 <elliott> ais523: Go wake fizzie up
20:04:04 <ais523> how? it's not like he's in the room
20:04:21 <elliott> Well then find the room he's in and be in it so that you can wake him up
20:04:29 <ais523> he'd probably wake up naturally first
20:04:43 <elliott> That's for the universe to know and you to find out
20:07:46 <elliott> Hmm, seems nobody really uses iterIO
20:07:52 <elliott> But maybe everyone is just a bad person???
20:08:08 -!- Ngevd has quit (Ping timeout: 252 seconds).
20:10:55 <elliott> monqy: Hey, pick the library for me. It is your duty.
20:12:48 <monqy> :(
20:12:55 <monqy> i know nothjing about their diffierences
20:13:05 <monqy> never even heard of the ones that aren';t iteratee
20:13:12 <elliott> Well, it's pretty much between enumerator and iterIO :-P
20:13:20 <elliott> enumerator is like iteratee but more things use it and it's simpler.
20:13:23 <elliott> iterIO is different.
20:13:35 <elliott> And has a lot of seeming advantages, e.g. http://www.scs.stanford.edu/~dm/iterIO/, http://hackage.haskell.org/packages/archive/iterIO/0.1/doc/html/Data-IterIO.html
20:13:43 <elliott> But I do not know :'(
20:14:04 <elliott> "Because of CPS, iteratee should be capable of delivering the best performance of the three iteratee packages. A disadvantage of iterIO's approach is that every invocation of lift must be propagated all the way up the call chain, where a small amount of overhead is added for each enclosing catchI or similar call. While iterIO can handle most successful IterR outcomes and caught exceptions locally without popping back up the call stack, there is a
20:14:04 <elliott> lso potentially overhead from actually checking that the outcome was successful at each bind site. (GHC's inliner may be able to avoid the check in some cases.)
20:14:04 <elliott> However, iteratee lacks several features of iterIO; offering these features would likely reduce the benefits of CPS and complicate code. For instance, there is no way to execute a pure iteratee without monadic actions (the benefit touted above and described below for LL(*) parsing). Moreover, iteratee's exception mechanism discards the current location in the input stream, making it unsuitable for failed parse alternatives. IterIO provides a gene
20:14:10 <elliott> ral control mechanism to make arbitrary requests from enumerators (such as seek, tell, getpeername, get SSL information, etc.); iteratee instead overloads the exception mechanism for control purposes, which prevents control operations from returning values. Thus, while iteratee can implement seek, it cannot, for instance, implement tell.
20:14:14 <elliott> The enumerator package's approach is closer to iterIO's, but makes every iteratee into a monadic action in the underlying monad m:
20:14:17 <elliott> -- From the enumerator package:
20:14:18 <elliott> newtype Iteratee a m b = Iteratee { runIteratee :: m (Step a m b) }
20:14:21 <elliott> Here Step is similar to iterIO's IterR type, but the m wrapper disallows iterIO's LL(*) parsing tricks. It also causes gratuitous invocation of m's bind function, which can be expensive when using stacks of monad transformers. Furthermore, enumerator discards the input state on all errors, making it impossible to resume from failures that leave the input in a known state (such as a parsing lookahead failure)
20:15:37 <elliott> "
20:16:01 <elliott> iterIO looks like a Fancy Better thing but I don't know if I should use it since it only has one release and nobody else has used it...
20:16:39 <monqy> that is not a good reason not to use it????? maybe????????
20:16:49 <elliott> monqy: but it might have lots of bugs :(
20:16:55 <elliott> Whereas enumerator is used in a lot of high-profile packages like Yesod
20:17:07 <elliott> maybe iterIO will be really slow or something...
20:17:23 <Vorpal> <elliott> Hey Vorpal, you get to be the substitute fizzie <-- ?
20:17:51 <elliott> Vorpal: Turns out I could answer my own question
20:17:54 <elliott> Well, maybe
20:18:05 <elliott> I was wondering how many packets a Minecraft client would send before it waits for the server to respond before sending any more
20:18:09 <elliott> And I think the answer is just the login packets
20:18:43 <fizzie> I'm not going to be non-away today, sorry.
20:18:56 <fizzie> (Today I've been mostly Portal.)
20:19:26 <elliott> So irresponsible.
20:19:29 <fizzie> My guess is also that it just sends the login, if you have a completely quiet server.
20:19:35 <elliott> Your people NEED you.
20:20:06 <fizzie> Don't know about the case where you have a server that goes non-responsive in the middle of the game; in that case I think it might keep on sending movement stuff until some sort of a timeout.
20:23:58 <elliott> fizzie: The usecase is pretty much "testing my client parser stuff before writing the server packet code". :p
20:24:07 <elliott> Whereby code, I mean "protocol.txt-alike".
20:24:13 -!- sllide has quit (Ping timeout: 260 seconds).
20:24:21 <elliott> So I think I'll just write the server stuff.
20:24:54 -!- oerjan has joined.
20:25:15 <elliott> heloerjan
20:25:29 <elliott> `log hell?oerjan
20:25:33 <HackEgo> 2011-09-18.txt:20:25:15: <elliott> heloerjan
20:25:50 <oerjan> *gasp*
20:25:53 <elliott> :(
20:25:54 <elliott> `log hell?oerjan
20:25:56 <ais523> `pastelogs hell?oerjan
20:25:57 <elliott> i swear ive done it before
20:25:57 <HackEgo> 2011-09-18.txt:20:25:33: <HackEgo> 2011-09-18.txt:20:25:15: <elliott> heloerjan
20:25:59 <HackEgo> http://codu.org/projects/hackbot/fshg/index.cgi/raw-file/tip/paste/paste.22953
20:26:01 <elliott> ais523: so cheating
20:26:07 <elliott> 2011-08-31.txt:20:45:31: <elliott> heloerjan
20:26:09 <elliott> :')
20:26:11 <Lymee> `log `log
20:26:12 <HackEgo> Mmmmm ... no.
20:26:16 <Lymee> >:c
20:26:22 <Lymee> I'll get you next time.
20:26:25 <ais523> 2011-08-31.txt:20:45:31: <elliott> heloerjan
20:26:26 <ais523> 2011-09-18.txt:20:25:15: <elliott> heloerjan
20:26:29 <ais523> once before
20:26:30 <elliott> Lymee: HackEgo doesn't like talking to you any more.
20:26:37 <elliott> ais523: yes, that's what I just quoted :P
20:26:45 <monqy> does `log `log not work anymore?
20:26:55 <ais523> I was wondering about it
20:27:02 -!- Ngevd has joined.
20:27:04 <ais523> but I think there's just some anti-Lymia feature
20:27:07 <oerjan> too bad there is no way to find out
20:27:12 <ais523> just like the bots don't talk to each other
20:27:15 <Ngevd> Hello!
20:27:20 <ais523> hi
20:27:21 <ais523> `log fungot
20:27:22 <oerjan> hello
20:27:22 <fungot> ais523: mr president, mrs soltwedel-schfer, perhaps i might continue with the member states, including austria. only by doing so the commission is not allowed to be marketed. this parliament has judged the customs union the economic benefits of the use of the best food industries in the same way as heterosexuals. nor can you say who is to carry out an analysis of the market.
20:27:25 <HackEgo> 2010-05-02.txt:17:50:20: <fungot> http://git.zem.fi/fungot/blob/HEAD:/fungot.b98
20:27:26 <elliott> ais523: it's an ignore list
20:27:30 <elliott> `log `log
20:27:32 <elliott> still works
20:27:34 <HackEgo> 2011-09-17.txt:13:54:08: <itidus21> `log recogni
20:27:35 <ais523> see what I mean? fungot didn't respond to hackego's mention of its name
20:27:36 <fungot> ais523: as to the " no" campaign was not pushing for a " no" to drugs and arms, which originates with this criminal structure in fnord that is alleged to have been in the vanguard for change as mr martens said, but it was, but she has managed to flout the treaty and widened in the concept of reducing the emission of greenhouse gases ( of which parliament forms a part of these amendments were adopted by the iter. i shall only gi
20:27:54 <ais523> ^ul (`log ^ul)S
20:27:54 <fungot> `log ^ul
20:27:58 <HackEgo> No output.
20:27:58 <elliott> "the " no" campaign was not pushing for a " no" to drugs and arms"
20:28:02 <fizzie> elliott: You could of course dump-to-a-file a mcmap session (it's just one line: "fwrite(net_dpacket.p->bytes, 1, net_dpacket.p->size, clientdumpfile);" in the PACKET_FROM_CLIENT case of proxy.c) and then test your thing with nc localhost 26655 < blah.dump. But since you need to do both directions at some point anyway...
20:28:02 <elliott> just say no to legs
20:28:08 <ais523> hmm, although hackego does respond to fungot, it seems
20:28:11 <fungot> ais523: the report on the current uclaf to be strengthened at european level. against that we have had in getting information with regard to monetary policy, a factor of six. i am asking, under rule 115, that we should offer help to alleviate the effects of global warming caused by concentrations of dangerous substances. i can reassure mrs keppelhoff-wiechert: the object of discussion at the intergovernmental conference, mr pre
20:28:14 <ais523> ^ul (`log \^ul)S
20:28:14 <fungot> `log \^ul
20:28:17 <HackEgo> 2011-02-10.txt:16:55:32: <Deewiant> elliott: On fungot's ^ul interpreter, we're talking 10s vs 15s or something
20:28:19 <elliott> fizzie: Ooh, clever.
20:28:26 <elliott> fizzie: It's easier than that though isn't it
20:28:30 <elliott> fizzie: I can just use nc or whatever
20:28:36 <elliott> nc mcserver port | nc -l port
20:28:39 <elliott> Erm
20:28:43 <elliott> Except with tee in there
20:28:46 <elliott> nc mcserver port | tee log | nc -l port
20:28:49 <elliott> Then connect to that with MC
20:29:20 <fizzie> No, because that won't feed the output of the final 'nc' back to the stdin of the first 'nc'.
20:29:27 <fizzie> And you need bidirectional forwarding there.
20:29:46 <oerjan> ^ul (!echo hi)
20:29:46 <ais523> fizzie: just use a fifo, and connect it in a loop
20:29:46 <elliott> fizzie: That just needs my "tie" tool.
20:29:50 <elliott> ais523: No FIFO required
20:29:51 <ais523> I do that all the time when making IRC bots
20:29:59 <oerjan> ^ul (!echo hi)S
20:29:59 <fungot> !echo hi
20:30:01 <EgoBot> hi
20:30:03 <elliott> tie is just pipe(), dup[two], and an exec
20:30:03 <ais523> elliott: indeed, but it's the easiest way to do it with standard UNIX commands
20:30:12 <elliott> and it just takes a shell line
20:30:18 <elliott> ais523: yeah, 'strue
20:30:19 <ais523> I wrote something tie-like in my first degree
20:30:33 <elliott> It was originally more complex because I thought it needed to take a list of shell statements to pipe
20:30:33 <ais523> and then discovered mkfifo, which saves having to get a separately-compiled program involved
20:30:37 <elliott> but I realised you could just join them with |
20:30:44 <elliott> ais523: tie is more elegant though :P
20:30:51 <elliott> I want a whole suite of pipe-wrangling tools
20:30:57 <ais523> heh, I wrote one
20:31:21 <ais523> the most general one there was "backpipe" which gave a bunch of FDs connected to each other, so that you could connect programs in arbitrary ways
20:31:30 <ais523> but it turns out to do the same thing as mkfifo, just more confusingly
20:32:10 <elliott> ais523: well, catbus connects each command in a list to every other command
20:32:17 <elliott> I never implemented it, mostly because I could never find a use for it
20:32:26 <elliott> nc -e can be recreated with tie, you don't need catbus
20:32:29 <elliott> tie 'nc server port | prog'
20:32:29 <elliott> or
20:32:31 <elliott> tie 'prog | nc server port'
20:32:42 <elliott> (you can rotate the pipeline passed to tie arbitrarily with no semantic effect)
20:33:20 <ais523> prog < fifo | nc server port > fifo
20:33:29 <elliott> yeah but that's grosser
20:33:31 <ais523> although it's probably a little neater with a UUOC
20:33:50 <Gregor> I pretty much just use socat.
20:33:59 <Gregor> It's major overkill for most things, but soooo delicious.
20:34:10 <elliott> socat is awful.
20:34:19 <Gregor> elliott: YOU'RE AWFUL
20:34:29 <elliott> But at least it's not GNU netcat, which is just plain defamation of the netcat name.
20:34:36 <elliott> $ mkfifo fifo; nc p.nerd.nu 25565 <fifo | nc -l 9999 | tee fifo >log
20:34:36 <elliott> This looks right, right?
20:34:52 <elliott> ("log" is meant to end up containing everything the Minecraft client sent; it will connect to port 9999)
20:35:56 <elliott> hmm... I can connect fine, at least
20:35:59 <elliott> s/ dollar sign//
20:36:00 <fizzie> I would've done "tee log >fifo", but there's no particular reason.
20:36:21 <ais523> fizzie: there is for interactive applications, I think; tee ends up buffering
20:37:02 <elliott> ais523: oh, it does?
20:37:03 <fizzie> I would hope bash can do it with an anonymous pipe too; if with nothing else, then with coproc, but coproc's horrible. I would hope you could get by with just "nc server port <&3 | nc -l listenport | tee logfile > &4" + some magic to make the pipe.
20:37:07 <elliott> ais523: will it flush once the nc -l quits?
20:37:19 <ais523> I don't know, but I hope so
20:37:49 <elliott> -rw-r--r-- 1 elliott elliott 41K 2011-09-18 21:38 log
20:37:49 <elliott> seems to have worked
20:37:51 <elliott> smaller than I was expecting, too
20:38:05 <elliott> although mostly ^As
20:38:15 <fizzie> Client-to-server direction is a lot less costly too.
20:38:19 <elliott> (Minecraft sends hundreds of pings per second for no obvious reason)
20:38:50 <elliott> I should probably take this to -minecraft to avoid annoying ais523, but at least it's fairly esoteric
20:39:16 <ais523> elliott: oh no, you've made me rage at SDL's event loop again
20:39:23 <elliott> wat
20:39:27 <ais523> I suppose I just hate tick-based event loops
20:39:29 <elliott> oh, right
20:39:39 <elliott> have I mentioned that @'s event loop is THE BEST? :-P
20:39:44 <elliott> (it doesn't have one)
20:39:44 <ais523> and much prefer the schedule-future-action-then-wait-until-next-scheduled-action version
20:40:07 <ais523> elliott: well, how does @ idle the processor if all process-equivalents are sleeping simultaneously, for whatever reason?
20:40:23 <oerjan> <Taneb> My initials would have been N.G.E.vD.
20:40:27 <ais523> I suppose, it doesn't have an explicit event loop, but it still needs a scheduler
20:40:33 <ais523> which has the same sort of issues that an event loop does
20:40:39 <oerjan> Nathan Galactus Elliott von Death
20:41:20 <Gregor> fizzie: I wonder ... if you did have a very high-quality scanner, COULD you make a converter from a scanned LP to a super-low-quality audio file? I wonder if you could guess the pits based on something.
20:41:57 <elliott> "Additional to the result of get it returns the number of consumed bytes and the rest of the input." No it doesn't, you're lying :-(
20:42:02 <elliott> Gregor: I think someone did that
20:42:14 <elliott> same person as the person who did "use a CRT as a radio transmitter" maybe?
20:42:17 <elliott> it sounded quite bad
20:42:27 <Ngevd> Evidence that elliott is my evil twin:
20:42:28 <elliott> <ais523> elliott: well, how does @ idle the processor if all process-equivalents are sleeping simultaneously, for whatever reason?
20:42:28 <fizzie> http://www.phys.huji.ac.il/~springer/DigitalNeedle/
20:42:33 <fizzie> That seems to be the first likely hit.
20:42:37 <elliott> ais523: it's more like, to do event things you just register handlers at the low elvel
20:42:39 <elliott> level
20:42:42 <Ngevd> We both live in the same town, despite never having met
20:42:49 <elliott> ais523: or if you block, then your continuation just gets inserted as an event handler, and your (lightweight) thread killed
20:42:56 <Ngevd> We both have some connection to the name "Elliott"
20:43:06 <ais523> elliott: but you're going to need to implement the thing that dispatches events to the handler
20:43:12 <elliott> ais523: so if you block on waiting for the next event, your thread's continuation is installed as an event handler, and the thread is killed
20:43:19 <elliott> ais523: not really
20:43:22 <ais523> yep, I understand that much
20:43:28 <ais523> but something has to call the event handler
20:43:29 <elliott> ais523: /causing/ the event causes each handler to be spawned as a thread
20:43:35 <ais523> say a process does sleep(1000)
20:43:44 <ais523> what's responsible for calling the continuation it gives once the sleep ends?
20:43:47 <elliott> so, e.g., what does writing to a pipe do? spawn off all the read-handlers for that pipe with the data, nothing else
20:43:53 <elliott> ais523: the timer driver
20:44:00 <ais523> ah, OK
20:44:09 <ais523> so how does the timer driver idle when it doesn't have any timings to give right now?
20:44:11 <elliott> presumably you'd abstract over it to offer sleep to processes
20:44:12 <ais523> it can't do the equivalent of a sleep
20:44:29 <ais523> as it can't ask itself
20:44:37 <elliott> ais523: well, how do you talk to hardware timers nowadays?
20:44:40 <Ngevd> When questioned about this situation, elliott suggested a fight to the death, I suggested something more civilized
20:44:47 <elliott> presumably, there's an interface that doesn't involve polling constantly
20:44:52 <Ngevd> I have facial hair
20:44:55 <fizzie> Elsewhere, someone wanted a "line-in to CD" adapter in the same vein as those "line-in to tape" things you can buy to plug your MP3 player to an old tape-only car stereo; now *there's* quite a technical challenge.
20:44:56 <elliott> it might use interrupts
20:44:57 <Gregor> elliott, fizzie: Yessssssssssss
20:44:58 <ais523> elliott: ah, OK, it's triggered by interrupts?
20:45:01 <elliott> which are basically hardware event handlers
20:45:09 <oerjan> Ngevd: goatie?
20:45:11 <elliott> fizzie: that seems to be it
20:45:14 <oerjan> *goatee
20:45:16 <elliott> ais523: probably
20:45:28 <ais523> fizzie: ouch, that sounds basically impossible
20:45:35 <ais523> I think it'd have to be wireless
20:45:40 <Ngevd> oerjan: No, that requires more hair
20:45:42 <Gregor> lol, it's so gloriously bad.
20:45:48 <oerjan> ah.
20:45:48 <ais523> but even then it'd be basically impossible
20:45:49 <Gregor> But it is recognizably music!
20:45:51 <elliott> Gregor: You just need to anti-phaser it
20:45:56 <elliott> I presume that's possible
20:45:58 <elliott> Uh
20:45:59 <elliott> Phaser
20:46:04 <elliott> I mean the effect that you can hear on the first recording
20:46:13 <Ngevd> Some time in 2008-2009, elliott or someone with the same name as elliott kicked someone in the face
20:46:29 <elliott> that probably wasn't me
20:46:31 <Ngevd> Someone who later became good friends with me
20:46:36 <elliott> well, if it /was/ me, I don't remember it
20:46:54 <Gregor> The "someone" in that sentence is Taneb/Ngevd.
20:46:56 <ais523> there are quite a lot of people called elliott in the world
20:46:57 <elliott> ais523: anyway, @ handles push-based things better than things you need to poll, I think
20:47:03 <ais523> we've had two of them here
20:47:05 <elliott> ais523: but you can model a pull as a push
20:47:18 <Gregor> My cat just LEAPED off the windowsill, halfway across the room.
20:47:22 <Gregor> She had no reason at all to do that.
20:47:26 <Ngevd> Someone called Elliott Hird?
20:47:28 <elliott> ais523: just tell the driver you'd like to know X, and give a handler
20:47:37 <ais523> the other one had a different surname
20:47:38 <elliott> or whatever
20:47:44 <Gregor> Ngevd: The later "someone" I meant :P
20:47:55 <elliott> Gregor: She had the most important reason: she's a cat.
20:48:00 <Gregor> elliott: Tre.
20:48:01 <Gregor> *True
20:48:07 <Ngevd> That was neither me nor elliott
20:48:34 <ais523> Ngevd: are you claiming that you're the real Elliott Hird, and elliott is just some sort of imposter who happens to have the same name as you?
20:48:36 <fizzie> ais523: Well, I suppose it might depend on the structure of the reader. You don't really need a rotating fake-disc, "just" some sort of a fixed thing that reads the rotation of the central spine, and a thing clamped firmly on top of the radially moving read-head, that can both read the radial distance as well as change its reflectivity. Still.
20:48:45 <Ngevd> ais523: My name is Nathan
20:49:06 <Ngevd> ais523: I am claiming that elliott is my evil twin
20:49:08 <ais523> fizzie: I'm thinking more about the issue of connecting wires through all possible interfaces for inserting a CD into a reader
20:49:15 <ais523> also, you'd have to know where the read-head was
20:49:33 <fizzie> ais523: Well, yes, it'd work in pretty much one CD player model only.
20:49:37 <ais523> and it could be at any place rotationally around the disk
20:49:40 <ais523> oh, I see
20:49:44 <ais523> I thought you meant a general one
20:49:45 <olsner> hmm, do evil people think that good people are evil?
20:49:51 <elliott> ?hoogle (a,b) -> (b->c) -> (a,c)
20:49:51 <lambdabot> Data.Graph.Inductive.Query.Monad mapSnd :: (a -> b) -> (c, a) -> (c, b)
20:49:51 <lambdabot> Control.Arrow (>>^) :: Arrow a => a b c -> (c -> d) -> a b d
20:49:51 <lambdabot> Data.Graph.Inductive.Query.Monad (><) :: (a -> b) -> (c -> d) -> (a, c) -> (b, d)
20:49:54 <fizzie> Well, a general one would of course be more desirable.
20:49:57 <elliott> gah
20:50:00 <elliott> Deewiant:
20:50:16 <Deewiant> flip second
20:50:27 <elliott> Deewiant: I want it flipped :P
20:50:29 <elliott> I'm trying to write
20:50:31 <elliott> | otherwise = do
20:50:32 <elliott> (a, dump') <- runGetState (get :: Get ClientPacket) dump 0
20:50:32 <elliott> (a:) <$> parseDump dump'
20:50:34 <elliott> nicerly
20:50:34 <olsner> (e.g. when there's an evil twin, does the evil twin think he has a good twin or that his good twin is his evil twin?)
20:50:57 <elliott> second parseDump $ runGetState (get :: Get ClientPacket) dump 0
20:51:05 <elliott> then I need (a,[a]) -> [a]
20:51:11 <elliott> oh hmm
20:51:16 <elliott> second parseDump <$> runGetState (get :: Get ClientPacket) dump 0
20:51:19 <elliott> uncurry (:) . second parseDump <$> runGetState (get :: Get ClientPacket) dump 0
20:51:19 <elliott> I think
20:51:20 <fizzie> ais523: "Perhaps if you had some sort of a separate CD-shaped medium upon which you could (in advance) "print" the required impressions, maybe with some sort of a laser... uh, wait."
20:51:21 <Deewiant> ?ty uncurry (:)
20:51:22 <lambdabot> forall a. (a, [a]) -> [a]
20:51:45 <Lymee> :t (:)
20:51:46 <lambdabot> forall a. a -> [a] -> [a]
20:51:55 <Lymee> Oh that
20:52:09 <Lymee> :t fix(:)
20:52:09 <lambdabot> Occurs check: cannot construct the infinite type: a = [a] -> [a]
20:52:10 <lambdabot> Probable cause: `:' is applied to too few arguments
20:52:10 <lambdabot> In the first argument of `fix', namely `(:)'
20:52:10 <elliott> Main.hs:13:38:
20:52:10 <elliott> Couldn't match expected type `[ClientPacket]'
20:52:10 <elliott> with actual type `Either String [ClientPacket]'
20:52:10 <elliott> Expected type: ByteString -> [ClientPacket]
20:52:10 <elliott> Actual type: ByteString -> Either String [ClientPacket]
20:52:14 <elliott> Deewiant: Not quite :(
20:52:15 <Lymee> :t fix(flip :)
20:52:16 <lambdabot> forall (f :: * -> *) a b. (Functor f) => [f (a -> b) -> a -> f b]
20:52:18 <elliott> I think I do need something monadic
20:52:39 <oerjan> <olsner> hmm, do evil people think that good people are evil? <-- at least they pretend to think that.
20:52:49 <Lymee> @hoogle fix
20:52:50 <lambdabot> Data.Function fix :: (a -> a) -> a
20:52:50 <lambdabot> Control.Monad.Fix fix :: (a -> a) -> a
20:52:50 <lambdabot> module Control.Monad.Fix
20:52:57 <oerjan> <SgeoN1> Why do electronics disintegrate in my hands?
20:52:58 <Ngevd> Not enough people are signing my epetition
20:53:01 <oerjan> pauli effect?
20:55:09 -!- ais523 has quit (Remote host closed the connection).
20:56:29 <oerjan> a non-spam esoforum message appears!
20:57:36 <monqy> of course it's a brainfuck derivative.
20:58:22 <oerjan> :t fix.(:)
20:58:22 <lambdabot> forall a. a -> [a]
20:58:39 <monqy> repeat?
20:58:42 <oerjan> yep
20:59:09 <oerjan> :t fix.(++) -- cycle
20:59:10 <lambdabot> forall a. (Monoid a) => a -> a
20:59:16 <oerjan> ...or that.
20:59:24 <monqy> mcycle
21:00:16 <elliott> micyle
21:00:40 <zzo38> olsner: I would think you cannot tell the answer to "when there's an evil twin, does the evil twin think he has a good twin or that his good twin is his evil twin?" in general; you need to determine by each specific case
21:00:41 <Lymee> > head 20 $ fix.(:) 1
21:00:42 <lambdabot> Couldn't match expected type `a -> a' against inferred type `[t]'
21:01:02 <oerjan> Lymee: precedence error
21:01:07 <Lymee> > take 20 $ fix.(:) 1
21:01:08 <lambdabot> Couldn't match expected type `[a -> a]'
21:01:08 <lambdabot> against inferred type `[t] ...
21:01:13 <Lymee> > take 20 $ (fix.(:)) 1
21:01:15 <lambdabot> [1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]
21:02:10 <oerjan> :t fix.(>>) -- forever
21:02:11 <lambdabot> forall (m :: * -> *) a b. (Monad m) => m a -> m b
21:09:08 <elliott> gah
21:09:49 <elliott> cereal's error messages are _not_ helpful.
21:12:07 <elliott> fizzie: wait, Minecraft prefixes the length of strings in /codepoints/?
21:12:08 <elliott> not /bytes/?
21:12:22 <elliott> THANK GOD, IT ALMOST AVOIDED USING LENGTH PREFIXES!
21:12:33 <elliott> IT WAS ALMOST SIMPLE TO PARSE THIS ONE FIELD TYPE!!!! ALMOST!!
21:12:55 <monqy> minecraft
21:13:07 <elliott> OK, this has ceased to be esoteric, now it's just annoying, I'm going to -minecraft to avoid incurring ais' wra- oh, he's gone
21:13:13 <elliott> STAYING HERE THEN HAHAHAHAHAHAHA
21:13:47 <elliott> hmm, apparently all the strings are 240 bytes or less, which might come in handy...
21:14:51 <elliott> oerjan: "Note: this structure is not thread safe. It is not safe to use value of this type simultaneously from multiple threads."
21:14:57 <elliott> oerjan: suffer with me pls
21:15:03 <elliott> (yes, it has _pure_ functions operating on it)
21:15:07 <elliott> "pure"
21:15:31 <elliott> OK, well at least it's UCS-2, so there's no surrogate.
21:15:32 <elliott> surrogates.
21:15:37 <elliott> So it does /kind of/ prefix the length in bytes.
21:18:08 <elliott> oh my, 1407808682066025 is a very long string
21:18:23 <elliott> oh
21:18:24 <elliott> hey monqy
21:18:30 <monqy> hii
21:18:39 <elliott> how many bits are there in a short? hint: the answer is not 64
21:18:54 <monqy> trick question it's system dependant
21:19:06 <monqy> or is it not
21:19:11 <monqy> i'm bad at bit sizes
21:19:35 <fizzie> elliott: Well, it's actually in UTF-16 elements, so you just multiply by two to get bytes.
21:19:45 <elliott> fizzie: DING DING DING WRONG
21:19:54 <olsner> at least 16 bits per short, iirc
21:20:03 <elliott> fizzie: It's in UCS-2 elements, so that works.
21:20:10 <elliott> fizzie: Were it UTF-16, that would not work.
21:20:12 <elliott> Surrogate.s
21:20:15 <elliott> s/\.s/.s/
21:20:17 <elliott> s/\.s/s./
21:20:48 <olsner> if your bytes are 16-bit, two bytes is enough for any UTF-16 surrogate pair
21:20:53 <fizzie> elliott: No, it's a Java string; they are UTF-16, just that everything counts surrogate pairs as two elements.
21:20:58 <elliott> $ dist/build/mchost/mchost < log
21:20:58 <elliott> CHandshake "ehird"
21:20:58 <elliott> CLogin 17 "ehird" 0 0 0 0 0 0
21:20:58 <elliott> too few bytes
21:20:58 <elliott> From:demandInput
21:20:58 <elliott> Well... it's a start.
21:21:01 <elliott> fizzie: Oh. Weird.
21:21:23 * elliott makes his TH code generate Debug.Trace.trace calls.
21:21:24 <elliott> So gross.
21:22:53 <fizzie> java.lan.String has a separate API which returns codepoints (as 'int's) decoding the surrogate pairs, but I don't think people generally bother to use it, because it's so clumsy (offsets are still counted as 'char's and all). Still, officially it's UTF-16.
21:23:01 <fizzie> s/lan/lang/
21:23:05 <Ngevd> There should be more Esoteric Markup Languages
21:23:40 <elliott> getClauseExp = [| Debug.Trace.trace (showHex $(litE (integerL (fromIntegral ptype))) "") $(foldl apE (appE (varE 'pure) (conE pname)) . map fieldGet $ fields) |]
21:23:41 <elliott> Yesssssssssssssssss
21:23:44 <monqy> markup is kind of boringggggggggg
21:23:59 <elliott> getClauseExp = [| Debug.Trace.trace (showHex ($(litE (integerL (fromIntegral ptype))) :: Int) "") $(foldl apE (appE (varE 'pure) (conE pname)) . map fieldGet $ fields) |]
21:23:59 <elliott> EVEN BETTER
21:24:01 <monqy> nice TH
21:24:13 <zzo38> I implemented Maybe as an instance of Quasi (in Template Haskell)
21:24:16 <elliott> Yay, I misparse 0D.
21:24:37 <Ngevd> Goodnight
21:24:39 <elliott> Oh, float/double confusion.
21:24:39 <monqy> zzo38: oh?
21:24:39 -!- Ngevd has quit (Quit: what a big quitter he is, eh?).
21:24:41 <elliott> Ngevd: goodnight
21:24:52 <zzo38> elliott: Yes. runIO is the only unimplemented method.
21:25:00 <elliott> I am not monqy.
21:25:11 <zzo38> monqy: Yes.
21:25:40 <monqy> how do the rest work, then?
21:26:24 <elliott> :t encodeFloat
21:26:24 <zzo38> It is this: instance Quasi Maybe where { qNewName = const Nothing; qReport _ _ = Just (); qRecover = flip mplus; qReify = const Nothing; qClassInstances _ _ = Nothing; qLocation = Nothing; qRunIO _ = error "Cannot run I/O in Maybe"; };
21:26:25 <lambdabot> forall a. (RealFloat a) => Integer -> Int -> a
21:26:32 <elliott> What.
21:26:37 <elliott> Oh, hmm.
21:26:38 <elliott> instance Serialize Double where
21:26:38 <elliott> put d = put (decodeFloat d)
21:26:39 <elliott> get = liftM2 encodeFloat get get
21:26:41 <elliott> instance Serialize Float where
21:26:43 <elliott> put f = put (decodeFloat f)
21:26:45 <elliott> get = liftM2 encodeFloat get get
21:26:47 <elliott> This is not right.
21:26:49 <elliott> I think?
21:26:52 <elliott> Is this right?
21:26:54 <elliott> :t decodefloat
21:26:54 <lambdabot> Not in scope: `decodefloat'
21:26:56 <elliott> :t decodeFloat
21:26:57 <lambdabot> forall a. (RealFloat a) => a -> (Integer, Int)
21:26:58 <zzo38> In the state monad I could probably make better implementations of these things.
21:27:07 <elliott> Yeah, that's not right.
21:27:24 <monqy> your instance looks kind of useless :(
21:27:34 <monqy> are there any Quasi laws
21:27:47 <zzo38> monqy: I don't know. But if there is, I hope to fix it.
21:28:01 <elliott> -- Conversions use 'STUArray' and the 'ST' monad to reinterpret bytes
21:28:02 <elliott> -- and get /what we assume to be/ the IEEE 754 binary representation
21:28:02 <elliott> -- of single and double precision floating point numbers.
21:28:03 <zzo38> One reason I have it is simply to get an Exp from a [| ... |]
21:28:04 <elliott> bad doggy :(
21:28:15 <elliott> fizzie: Hey, you should port your float/double code to Haskell :-P
21:29:17 -!- ive has quit (Ping timeout: 276 seconds).
21:33:24 <zzo38> How do I make an instance of a state monad?
21:33:45 <oerjan> @src MonadState
21:33:45 <lambdabot> Source not found. You untyped fool!
21:33:49 <oerjan> bah
21:33:54 -!- pikhq has quit (Ping timeout: 252 seconds).
21:34:05 <oerjan> :t put
21:34:06 <lambdabot> forall s (m :: * -> *). (MonadState s m) => s -> m ()
21:34:12 <oerjan> it's that class, anyway
21:34:55 <zzo38> I want to make "instance Quasi (State QuasiState)" but it won't accept that.
21:35:49 <oerjan> zzo38: do you have FlexibleInstances option?
21:36:44 <zzo38> OK, it seems to work now.
21:37:03 <oerjan> otherwise there are some stupid ancient restrictions on instances and their types
21:37:14 <zzo38> Why?
21:38:02 <oerjan> standards compliance i assume
21:40:34 <oerjan> originally it was presumably to make type classes easy to implement
21:42:46 <oerjan> and Haskell 2010, the first revision in 12 years, only did a couple tiny changes to the fundamentals
21:43:07 <oerjan> (of the language, i don't think they touched type classes)
21:45:30 <oerjan> mainly they just incorporated the ffi and hierarchical module addendas, i think. and removed n+k patterns.
21:45:55 <oerjan> or was n+k later...
21:46:58 <elliott> there was a syntax change, I think
21:47:05 <elliott> to that stupid layout rule that nobody uses
21:47:07 <elliott> ("reparse if fail")
21:47:13 <elliott> or was it just making dangling else work
21:47:16 <elliott> as it does in all implementations
21:47:16 <elliott> dunno
21:47:24 <elliott> but yeah, Haskell has never been easy to implement :P
21:47:27 <oerjan> not the reparse if fail
21:47:32 <elliott> FlexibleInstances really needs to be default.
21:47:36 <oerjan> it was the operator precedence iirc
21:47:48 <oerjan> it was detached from the main parsing, to make things sane
21:47:52 <elliott> fizzie: Um, is there an 0x84 packet type?
21:47:55 <elliott> It's certainly not on the wiki.
21:48:15 <elliott> mcmap doesn't know it either. Hmph.
21:48:46 <elliott> Pretty sure I'm not desync'd either:
21:48:49 <elliott> CPlayerPosition 281.69999998807907 27.0 28.62000000476837 46.51032322405371 True
21:48:49 <elliott> CRespawn
21:48:49 <elliott> CKeepAlive 16777344
21:48:49 <elliott> CKeepAlive 0
21:48:49 <elliott> Failed reading: Unknown packet type 0x84
21:48:49 <elliott> Empty call stack
21:49:13 <elliott> Oh hmm what
21:49:27 <elliott> , packet 0x09 "CRespawn" [] -- dunno
21:49:29 <elliott> Not helpful, past me
21:49:38 <oerjan> also pattern guards. http://www.haskell.org/onlinereport/haskell2010/haskellli2.html#x3-5000
21:50:37 <monqy> not much in there, but at least the changes were good....
21:50:59 <elliott> Pattern guards are standard now? Great
21:51:23 <elliott> Okay, entity_animate is sent by the client, apparently. :/
21:54:15 <oerjan> the dangling else wasn't mentioned, but it see from http://www.haskell.org/onlinereport/haskell2010/haskellch3.html#x8-320003.6 that it was changed
21:54:35 <elliott> cool
21:55:05 <elliott> http://hackage.haskell.org/trac/haskell-prime/wiki/DoAndIfThenElse
21:55:05 <elliott> http://hackage.haskell.org/trac/haskell-prime/wiki/NondecreasingIndentation
21:55:13 <elliott> I think the first was accepted too
21:55:22 <elliott> at least, I use that style in one place in Shiro :-P
21:57:05 -!- derdon has quit (Remote host closed the connection).
22:00:19 <oerjan> elliott: i don't think NondecreasingIndentation is there
22:00:34 <elliott> ok
22:01:27 <zzo38> Now I managed to make instance Quasi (State QuasiState)
22:01:47 <oerjan> *i see from
22:02:16 <zzo38> It doesn't implement recover, reify, classInstances, or runIO. It might be possible to implement later, though.
22:02:25 <zzo38> If I know what its implementation should be.
22:03:20 <oerjan> elliott: also "that stupid layout rule which no one uses" is probably used quite a bit. one-liners in particular.
22:03:33 <elliott> oerjan: It's not used at all because nobody implements it.
22:03:44 <elliott> They implement similar behaviour in a different manner.
22:03:48 <oerjan> wat
22:04:03 <elliott> Go ask the GHC devs whether they implement layout by reparsing on failure
22:04:06 <elliott> Deewiant: I'm afraid I'm likely to make my TH generate less applicative output :-)
22:04:23 <elliott> Deewiant: (I'm micro-optimising ahead of my time for the hell of it and the Applicative stuff is not inlined out)
22:04:39 <oerjan> elliott: i thought you were talking about the insertion of } at syntax error...
22:05:47 -!- Zuu has joined.
22:06:08 <elliott> oerjan: I think I am; I'm not sure of the specifics
22:06:39 <oerjan> http://www.haskell.org/onlinereport/haskell2010/haskellch10.html#x17-17800010.3
22:07:02 <oerjan> hm i guess i should look at h98 version
22:08:23 <zzo38> With the Maybe instance I can do that: extractQ :: Q a -> a; extractQ = maybe (error "No value in Quasi") id . runQ;
22:08:45 -!- pikhq has joined.
22:09:14 <oerjan> elliott: what they _did_ remove is the dependency on operator fixities, which indeed no one implemented, because it's insane
22:10:24 <zzo38> What is the dependency on operator fixities?
22:11:09 <oerjan> http://haskell.org/onlinereport/syntax-iso.html end of section 9.3
22:13:02 <oerjan> basically when operator fixities were allowed to affect whether there is the kind of syntax error which needs inserting a }, things get horribly complicated (especially since fixities can be defined anywhere, even later in the file or in a local scope), so no one ever implemented it that way
22:14:19 <oerjan> i've heard rumors of someone managing to make a paradoxical case where the } insertion affected the size of the local scope of a definition such at the } should be inserted iff it wasn't :P
22:14:27 <oerjan> *such that
22:15:42 <oerjan> or something like that, i may be confusing somewhat with my own thoughts on the matter
22:16:06 <elliott> oerjan: that's beautiful :P
22:16:11 <elliott> maybe that was what was being talked about, then
22:25:18 <oerjan> if the fixities are not considered, then the underlying layout-free haskell syntax presumably becomes context-free and handleable by a yacc-style parser. since i vaguely think that's how ghc does it.
22:27:26 <zzo38> OK, I can understand why to remove the stuff mentioned at the end of section 9.3 because it can be difficult to implement, I read about how some things are implemented in GHC, and fixities are not known at parsing time, so that would make it difficult to implement.
22:27:49 <oerjan> yeah
22:31:40 -!- sebbu2 has joined.
22:31:40 -!- sebbu2 has quit (Changing host).
22:31:40 -!- sebbu2 has joined.
22:32:46 -!- sebbu has quit (Ping timeout: 260 seconds).
22:33:35 <elliott> [GblId, Arity=2, Caf=NoCafRefs, Str=DmdType LU(SAAAAAAAA)]
22:33:41 <elliott> SAAAAAAAA!
22:34:20 <oerjan> sounds like the core is preparing to attack
22:34:23 <elliott> at this point oerjan notices I'm reading core and fears for the safety of neighbouring towns
22:34:25 <elliott> snap
22:35:39 <oerjan> The Core - the story of how haskell destroyed northern england
22:36:01 <elliott> oerjan: here's a sad thing: GHC turns my "case" on a bunch of Word8 constants (with a single default case) into a bunch of nested if/then/elses, at least at the Core level, rather than some sort of jump table
22:36:12 <oerjan> it was all a plot by the glaswegians
22:36:28 <elliott> I might have to write my own, say by creating a Data.Vector of monadic actions
22:36:48 <elliott> or one of GHC's low-level array things
22:37:31 <oerjan> huh
22:37:35 -!- zzo38 has quit (Remote host closed the connection).
22:38:01 -!- Patashu has joined.
22:38:24 <oerjan> even after optimization? (not that i know this stuff)
22:38:30 <oerjan> food ->
22:39:27 <elliott> oerjan: yes, -O2
22:41:33 -!- Jafet has quit (Quit: Leaving.).
22:42:18 <oerjan> elliott: no i mean, are you printing the core after the optimization stage, i think there are different options...
22:43:29 <elliott> -ddump-simpl
22:43:43 <elliott> -ddump-simpl
22:43:43 <elliott> Dump final simplifier output
22:43:43 <elliott> [dynamic]
22:43:44 <elliott> so yes
22:43:52 <elliott> apparently GHC never does it, alas
22:43:58 <elliott> but backends might, I guess
22:49:10 -!- FireFly has quit (Quit: FireFly).
22:52:56 -!- ive has joined.
22:54:51 -!- NihilistDandy has joined.
22:56:02 -!- NihilistDandy has quit (Client Quit).
22:56:26 -!- NihilistDandy has joined.
23:13:54 -!- augur has quit (Remote host closed the connection).
23:28:21 <elliott> ?t \f x y -> flip f x `fmap` y
23:28:21 <lambdabot> Maybe you meant: tell thank you thanks thx ticker time todo todo-add todo-delete topic-cons topic-init topic-null topic-snoc topic-tail topic-tell type . ? @ ft v
23:28:24 <elliott> ?ty \f x y -> flip f x `fmap` y
23:28:26 <lambdabot> forall a a1 b (f :: * -> *). (Functor f) => (a -> a1 -> b) -> a1 -> f a -> f b
23:28:30 <elliott> ?hoogle (a -> a1 -> b) -> a1 -> f a -> f b
23:28:30 <lambdabot> Control.Monad liftM2 :: Monad m => (a1 -> a2 -> r) -> m a1 -> m a2 -> m r
23:28:30 <lambdabot> Control.Applicative liftA2 :: Applicative f => (a -> b -> c) -> f a -> f b -> f c
23:28:30 <lambdabot> Prelude scanr :: (a -> b -> b) -> b -> [a] -> [b]
23:28:35 <elliott> Hmph.
23:30:40 -!- sllide has joined.
23:33:04 <oerjan> :t \f x y -> Prelude.flip f x `fmap` y
23:33:04 <lambdabot> forall a b c (f :: * -> *). (Functor f) => (a -> b -> c) -> b -> f a -> f c
23:33:06 -!- Jafet has joined.
23:33:12 <oerjan> oh
23:34:22 <oerjan> @pl \f x -> fmap . flip f x
23:34:22 <lambdabot> ((fmap .) .) . flip
23:34:47 -!- sebbu2 has changed nick to sebbu.
23:35:14 -!- augur has joined.
23:35:34 <oerjan> @pl \fmap flip -> ((fmap .) .) . flip
23:35:34 <lambdabot> (.) . (.) . (.)
23:38:02 <elliott> nice
23:39:33 <oerjan> :t flip
23:39:33 <lambdabot> forall (f :: * -> *) a b. (Functor f) => f (a -> b) -> a -> f b
23:40:19 <monqy> @pl \ f x y -> flip f x `fmap` y
23:40:19 <lambdabot> (fmap .) . flip
23:40:28 <oerjan> :t \f x y -> flip x (f `fmap` y)
23:40:28 <lambdabot> forall (f :: * -> *) b a b1 (f1 :: * -> *). (Functor f1, Functor f) => (a -> b1) -> f (f1 b1 -> b) -> f1 a -> f b
23:40:30 <monqy> @pl \ fmap flip -> (fmap .) . flip
23:40:30 <lambdabot> (.) . (.)
23:40:35 <oerjan> argh
23:40:45 <oerjan> oh wait
23:40:59 <oerjan> :t \f x y -> f `fmap` y `flip` x
23:41:00 <lambdabot> forall a a1 b (f :: * -> *). (Functor f) => (a -> a1 -> b) -> a1 -> f a -> f b
23:41:06 <oerjan> *MWAHAHAHAHA*
23:41:15 -!- sllide has quit (Read error: Connection reset by peer).
23:41:37 <oerjan> @pl \f x y -> f `fmap` y `flip` x
23:41:38 <lambdabot> flip . (flip .) . fmap
23:42:13 * oerjan sits down to watch heads explode
23:42:15 <monqy> :t fmap fmap fmap
23:42:16 <lambdabot> forall (f :: * -> *) a b (f1 :: * -> *). (Functor f, Functor f1) => (a -> b) -> f (f1 a) -> f (f1 b)
23:42:55 <monqy> :t fmap fmap (fmap fmap fmap)
23:42:56 <lambdabot> forall (f :: * -> *) (f1 :: * -> *) a b (f2 :: * -> *). (Functor f, Functor f1, Functor f2) => (a -> b) -> f (f1 (f2 a)) -> f (f1 (f2 b))
23:43:26 <monqy> this is good
23:44:09 <oerjan> caleskell flip should definitely be an operator somewhere
23:44:22 <monqy> is it useful
23:44:39 <elliott> :t flip
23:44:39 <lambdabot> forall (f :: * -> *) a b. (Functor f) => f (a -> b) -> a -> f b
23:44:47 <elliott> yeah
23:44:52 <elliott> ?hoogle f (a -> b) -> a -> f b
23:44:52 <lambdabot> Control.Applicative (<*>) :: Applicative f => f (a -> b) -> f a -> f b
23:44:53 <lambdabot> Control.Monad ap :: Monad m => m (a -> b) -> m a -> m b
23:44:53 <lambdabot> Control.Applicative (<**>) :: Applicative f => f a -> f (a -> b) -> f b
23:44:58 <elliott> wait, how does that work?
23:44:59 <elliott> there's no pure
23:45:06 <monqy> oh yeah that thing
23:45:15 <monqy> looks useful but flip is a bad name for it
23:45:19 <elliott> ?djinn Functor f => f (a -> b) -> a -> f b
23:45:19 <lambdabot> Error: Class not found: Functor
23:45:23 <elliott> oerjan: help
23:45:52 <oerjan> :t \ff x -> fmap ($x) ff
23:45:53 <lambdabot> forall a b (f :: * -> *). (Functor f) => f (a -> b) -> a -> f b
23:45:59 <monqy> i was just about to say that
23:46:06 <monqy> except with a isntead of x and f instead of ff
23:46:14 <monqy> and a space between \ and f
23:46:21 <monqy> and $ and a
23:46:42 <elliott> oerjan: I was about to ask a question about zip and map but then I realised that I was using mapM so it was irrelevant :(
23:46:54 <monqy> ?pl \ f a -> fmap ($ a) f
23:46:54 <lambdabot> flip (fmap . flip id)
23:47:17 <monqy> irrelevant?
23:47:26 <oerjan> elliott: i think fmap and caleskell flip together implement the intuition that when you combine applicatives where all except one term is a pure, only Functor is really needed.
23:47:35 <elliott> monqy: oh right
23:47:39 <elliott> oh oerjan did it
23:47:40 <elliott> before
23:47:41 <elliott> ok
23:47:42 <elliott> yes
23:47:49 <elliott> oerjan: yeah
23:48:00 <elliott> oerjan: I kind of find Functors ugly :(
23:48:08 <elliott> because of the weird restriction to one-argument functions
23:48:16 <elliott> it would be nice if there was a way to get N-argument functions without pure
23:48:26 <elliott> maybe just f a -> f b -> f (a,b)
23:52:01 <oerjan> you can get that with just <*> and <$>, i think
23:52:25 <elliott> oerjan: how
23:52:27 <elliott> hmm
23:52:28 <elliott> oh right you can
23:52:49 <elliott> so the question is, what can you implement (<$>) for but not (<*>)? and is it interesting at all? :P
23:53:19 <oerjan> well Functors are mathematically fundamental
23:53:23 -!- Vorpal has quit (Quit: ZNC - http://znc.sourceforge.net).
23:53:59 <elliott> oerjan: yeah, I'm just wondering if they're Haskelly fundamental :P
23:54:54 <oerjan> hm i think (,) a is an example
23:55:06 <shachaf> oerjan: No, (,) is an Applicative.
23:55:10 <shachaf> It's Writer.
23:55:19 <elliott> shachaf: that requires a constraint though
23:55:23 <oerjan> shachaf: not without Monoid restriction on a
23:55:30 <oerjan> you need some way to combine two a's
23:55:37 <shachaf> Well, OK.
23:55:42 <shachaf> Map k has an instance of Functor.
23:56:12 <oerjan> that's pretty obviously an Applicative too, i think
23:56:39 <oerjan> in an analogous way as ZipList, just throw away non-common keys
23:57:42 <oerjan> might even be a Monad
23:58:34 <oerjan> oh wait, no return/pure is the problem
23:59:11 <oerjan> scratch that
2011-09-19
00:01:54 <elliott> well yes but I'm saying no pure
00:01:56 <elliott> not saying Applicative
00:03:03 <oerjan> <elliott> so the question is, what can you implement (<$>) for but not (<*>)?
00:03:33 <elliott> yes
00:03:34 <oerjan> i think Map k has a perfectly fine <*>
00:04:01 <itidus21> A block of granite is flexible in that it can be carved in a myriad of ways. Using carving tools it can become a sculpture of anything. This is a non-reversible operation. One is forced to choose between the virginity of the granite block, or the actualization of a sculpture.
00:05:03 <monqy> I'm guessing Set doesn't count, since you don't exactly have <$> for it either
00:05:08 <Gregor> itidus21: FUCK THE STONE
00:05:10 <itidus21> I guess another thing you can do is divide the block up into different rearrangeable sections.
00:05:23 <itidus21> Gregor: ;_; sorry
00:05:32 <Gregor> lolwut
00:05:33 <monqy> for similar reasons as to why you wouldn;t have <*>
00:05:43 <oerjan> a stone raped Gregor when he was little
00:05:51 <itidus21> i have worshipped hte stone too much
00:05:59 <Gregor> I was using "fuck" in the classical sense of "fornicate at"
00:06:04 <itidus21> oh!
00:06:34 <oerjan> it was all the rage among the classical greek.
00:06:49 <Gregor> oerjan: Fornicating at stuff?
00:06:54 <itidus21> sorry guys.. thats my hijacking the conversation. but you probably all needed a small break.
00:07:02 <itidus21> letting the tension go a bit
00:07:06 <oerjan> Gregor: why else do you think they made all those nude statues.
00:07:12 * Gregor nods sagely.
00:07:34 <monqy> uughhhh all these applicative laws involve pure
00:07:39 <itidus21> there was no porn back then
00:08:20 <CakeProphet> there was
00:08:22 <elliott> monqy: I guess that's a problem
00:08:41 <CakeProphet> http://en.wikipedia.org/wiki/History_of_erotic_depictions
00:08:45 <oerjan> monqy: you might be able to use <$> instead some places?
00:08:48 <monqy> hm
00:08:49 <monqy> perhaps
00:08:57 <elliott> oerjan: why would this be taking up eighty percent of my time in a profiling:
00:08:57 <elliott> printDump :: ByteString -> IO ()
00:08:57 <elliott> printDump dump
00:08:57 <elliott> | B.null dump = return ()
00:08:57 <elliott> | otherwise =
00:08:57 <elliott> case SE.runGetState (SE.get :: Get ClientPacket) dump 0 of
00:08:59 <elliott> Left err -> hPutStr stderr err >> exitFailure
00:09:01 <elliott> Right (p, dump') -> print p >> printDump dump'
00:09:09 <itidus21> im a _pseudo_-chinese philosopher
00:09:16 <elliott> not the runGetState itself
00:09:19 <elliott> but the actual function
00:09:52 <oerjan> famous chinese philosopher Su Do
00:10:04 <itidus21> lol
00:10:09 <monqy> (.) <$> u <*> v = u <*> (v <*> w)
00:10:19 <oerjan> which somehow gets corrupted into Itidus in latin.
00:10:22 <elliott> oerjan: whyyyyyyyyyyyyyyyyyyyyyy
00:10:33 <monqy> The Law
00:10:48 <monqy> maybe I can squeeze some more laws out of this if I stare hard enough
00:10:50 <itidus21> i + s/teiida/tidus + s/20/21
00:11:09 <monqy> maybe it doesn't need any more laws
00:11:17 <elliott> monqy: what is w
00:11:25 <monqy> a typo
00:11:30 <elliott> what's it meant to be
00:11:37 <monqy> (.) <$> u <*> v <*> w = u <*> (v <*> w)
00:12:26 <oerjan> elliott: this doesn't look like my area of expertise
00:12:51 <elliott> oerjan: oh well :P
00:13:03 <monqy> trying to squeeze another law:
00:13:05 <Jafet> elliott: so spend eighty percent of your time optimizing it
00:13:06 <itidus21> ITIDVSXXI
00:13:24 <CakeProphet> `addquote <oerjan> famous chinese philosopher Su Do
00:13:26 <HackEgo> 671) <oerjan> famous chinese philosopher Su Do
00:13:32 <elliott> `delquote 671
00:13:34 <HackEgo> ​*poof*
00:13:50 <CakeProphet> elliott: you are an evil archival dictator
00:13:58 <elliott> !haskell import Unsafe.Coerce; data Test = A | B | C; main = print (unsafeCoerce (2 :: Int) :: Test)
00:14:24 <elliott> !haskell import Unsafe.Coerce; data Test = A | B | C deriving (Show); main = print (unsafeCoerce (2 :: Int) :: Test)
00:14:29 <EgoBot> A
00:14:33 <elliott> huh
00:14:35 <elliott> !haskell import Unsafe.Coerce; data Test = A | B | C deriving (Show); main = print (unsafeCoerce (0 :: Int) :: Test)
00:14:36 <CakeProphet> oerjan: ban elliott for gross lack of quoting you
00:14:40 <EgoBot> A
00:14:41 <elliott> !haskell import Unsafe.Coerce; data Test = A | B | C deriving (Show); main = print (unsafeCoerce (99 :: Int) :: Test)
00:14:46 <EgoBot> A
00:14:49 <elliott> !haskell import Unsafe.Coerce; data Test = A | B | C deriving (Show); main = print (unsafeCoerce (999 :: Int) :: Test)
00:14:54 <EgoBot> A
00:14:55 <monqy> im bad at law squezeing :(
00:14:58 <elliott> oerjan: help :(
00:14:59 <itidus21> i spent a lot of time scouring walk-in-bookstores for chinese philosophy books.. in hindsihgt i kinda wish i had amazon access instead
00:15:03 <elliott> !haskell import Unsafe.Coerce; data Test = A | B | C deriving (Show); main = print (unsafeCoerce (B :: Test) :: Int)
00:15:05 <oerjan> monqy: basically i think you can reshape everything into f <$> x1 <*> x2 <*> ... <*> xn form
00:15:08 <EgoBot> 4828174336
00:15:14 <elliott> oh no
00:15:16 <elliott> !haskell import Unsafe.Coerce; data Test = A | B | C deriving (Show); main = print (unsafeCoerce (C :: Test) :: Int)
00:15:21 <EgoBot> 35757122814038016
00:15:23 <elliott> oh no
00:15:31 <monqy> oerjan: what's everything
00:15:31 <elliott> > gcd 4828174336 35757122814038016
00:15:32 <lambdabot> 2048
00:15:38 <elliott> > map (div 2048) [4828174336, 35757122814038016]
00:15:39 <lambdabot> [0,0]
00:15:45 <elliott> > map (`div` 2048) [4828174336, 35757122814038016]
00:15:46 <lambdabot> [2357507,17459532624042]
00:15:47 <itidus21> philosophy texts don't show up as pirated ebooks often enouhg
00:15:49 <elliott> oerjan: help
00:16:02 <elliott> i guess they're pointers
00:16:05 <oerjan> monqy: any applicative expression using <$> and <*>.
00:16:07 <elliott> except
00:16:10 <CakeProphet> elliott: I would think so
00:16:11 <elliott> they're not
00:16:13 <elliott> because A isn't
00:16:15 <elliott> !haskell import Unsafe.Coerce; data Test = A | B | C deriving (Show); main = print (unsafeCoerce (A :: Test) :: Int)
00:16:19 <EgoBot> 35962179842425344
00:16:31 <elliott> !haskell import Unsafe.Coerce; data Test = A | B | C deriving (Show); main = print (unsafeCoerce ((99*2048) :: Test) :: Int)
00:16:42 <oerjan> monqy: flattening it, so to speak
00:16:44 <elliott> !haskell import Unsafe.Coerce; data Test = A | B | C deriving (Show); main = print (unsafeCoerce ((99*2048) :: Int) :: Test)
00:16:49 <EgoBot> A
00:16:54 <elliott> !haskell import Unsafe.Coerce; data Test = A | B | C deriving (Show); main = print (unsafeCoerce ((999*2048) :: Int) :: Test)
00:16:55 <CakeProphet> oerjan: help I can't quote you.
00:16:58 <itidus21> 4828174336 = 0001 0001 1111 1100 1000 0001 1000 0000 0000
00:16:58 <EgoBot> A
00:17:00 <elliott> !haskell import Unsafe.Coerce; data Test = A | B | C deriving (Show); main = print (unsafeCoerce ((9999*2048) :: Int) :: Test)
00:17:05 <EgoBot> A
00:17:07 <elliott> !haskell import Unsafe.Coerce; data Test = A | B | C deriving (Show); main = print (unsafeCoerce ((99999*2048) :: Int) :: Test)
00:17:12 <EgoBot> A
00:17:16 <monqy> A
00:17:17 <elliott> !haskell import Unsafe.Coerce; data Test = A | B | C deriving (Show); main = print (unsafeCoerce ((999999*2048) :: Int) :: Test)
00:17:22 <EgoBot> A
00:17:29 <itidus21> :-??
00:17:31 <elliott> help oerjan help
00:17:47 <elliott> !haskell import Unsafe.Coerce; data Test = A | B | C deriving (Show); main = print (unsafeCoerce ((2^9) :: Int) :: Test)
00:17:48 <CakeProphet> I guess GHC just assigns some weird integer value for enum-like constructors?
00:17:53 <EgoBot> A
00:17:56 <Jafet> http://uncyclopedia.org/wiki/AAAAAAAAA!
00:17:56 <elliott> CakeProphet: i suspect they /are/ pointers, but tagged
00:17:57 <elliott> !haskell import Unsafe.Coerce; data Test = A | B | C deriving (Show); main = print (unsafeCoerce ((2^(9+9)) :: Int) :: Test)
00:18:02 <EgoBot> A
00:18:13 <elliott> Jafet: hi how do i coerce a small integer to a data type thnx
00:18:37 <CakeProphet> toEnum
00:18:40 <oerjan> elliott: didn't someone say this stuff only worked with data types of at most 4 constructors, which Int obviously isn't
00:18:52 <Jafet> !haskell data Test = A | B | C deriving (Show, Enum); main = mapM_ (print.toEnum) [0..2]
00:19:13 <CakeProphet> I think you just want map there...
00:19:16 <elliott> oerjan: well that's why I'm doing arithmetic
00:19:18 <Jafet> Int has one constructor, namely I#
00:19:20 <elliott> Jafet: NOT EFFICIENT ENOUGH
00:19:22 <CakeProphet> er, nevermind.
00:19:56 <CakeProphet> elliott: I bet a GADT can be used to solve this issue.
00:19:57 <Jafet> !haskell data Test = A | B | C deriving (Show, Enum); main = mapM_ (putStr.show.(toEnum::Int->Test)) [0..2]
00:20:02 <EgoBot> ABC
00:20:13 <CakeProphet> GADTs are sufficient for all porpoises.
00:20:18 <elliott> Jafet: NOT EFFICIETNT ENOUGHGH
00:20:38 <Jafet> MOAR NITROGLYCERIN
00:21:27 <CakeProphet> elliott: what do you need Ints for?
00:21:41 <elliott> CakeProphet: Network protocol.
00:21:59 <CakeProphet> instance Show Test where ... :P
00:22:08 <elliott> What?
00:22:19 <CakeProphet> convert them into strings of integers. best plan.
00:22:21 <CakeProphet> most efficient.
00:22:45 <elliott> I don't think you know what I'm talking about.
00:22:48 <CakeProphet> nope
00:22:50 <oerjan> CakeProphet: sounds like the reflection package
00:23:15 <CakeProphet> elliott: I'm going entirely off of "network protocol" as the explanation for what you're doing.
00:23:27 <oerjan> CakeProphet: also when quoting me, you might want to include enough context to make it actually funny
00:23:39 <elliott> oerjan: what sounds like that?
00:23:44 <elliott> CakeProphet: No, you know the exact function I was trying to write.
00:23:46 <elliott> But w/e.
00:23:52 <oerjan> elliott: <CakeProphet> convert them into strings of integers. best plan.
00:24:15 <CakeProphet> Ancient Roman oil lamp (circa 1st Century AD) depicting woman having sexual intercourse with two men simultaneously
00:25:19 <Jafet> They didn't have man pages.
00:26:00 <oerjan> hm...
00:26:11 <elliott> oerjan: ah
00:26:57 <CakeProphet> oerjan: I'm too lazy to do that. also I had just joined in and thus didn't have any context and still found it funny.
00:27:33 <oerjan> !haskell import Unsafe.Coerce; data Test = A | B | C deriving (Show); main = print (unsafeCoerce (A :: Test) :: Either Int ())
00:27:38 <EgoBot> Left
00:27:46 <oerjan> ...so much for that.
00:27:59 <oerjan> oh wait
00:28:20 <oerjan> !haskell import Unsafe.Coerce; data Test = A | B | C deriving (Show); main = print (unsafeCoerce (Left (A :: Test)) :: Int)
00:28:24 <EgoBot> 139868736410664
00:28:30 <oerjan> :(
00:29:11 <CakeProphet> data Test p = Test Int deriving blah blah blah
00:29:18 <CakeProphet> type Phantom1 = ...
00:29:20 <CakeProphet> type Phantom2 = ...
00:29:24 <CakeProphet> best plan.
00:29:45 <CakeProphet> phantom types are always the answer.
00:29:48 <oerjan> !haskell import Unsafe.Coerce; data Test = A | B | C deriving (Show); main = print (unsafeCoerce (Right (A :: Test)) :: Int)
00:29:52 <EgoBot> ​-2305842462150928042
00:30:41 <oerjan> it would appear there's no compatible structure to exploit...
00:31:05 <CakeProphet> er wait, not phantom types
00:31:06 <CakeProphet> but
00:31:14 <CakeProphet> newtype Test = Test Int
00:31:19 <CakeProphet> a = Test 0
00:31:22 <CakeProphet> b = Test 1
00:31:23 <CakeProphet> ...
00:31:28 <oerjan> given Int = I# Int# , an unboxed field, that may not be too surprising
00:32:14 <monqy> http://esoteric.voxelperfect.net/wiki/User:OArnoldoWhiteheada
00:32:23 <CakeProphet> I'm assuming the idea is to efficiently convert zero-argument type constructors to integers...
00:32:35 <CakeProphet> so why not just represent them as integers and name each one via functions?
00:32:52 <oerjan> CakeProphet: no pattern matching for one thing...
00:33:03 <CakeProphet> ah yes.
00:33:34 <CakeProphet> well you can pattern match them just not in a fun way.
00:34:26 <CakeProphet> -XPatternSynonyms :P
00:34:49 <monqy> what
00:34:54 <CakeProphet> but yeah you probably just want to use toEnum and be happy.
00:35:02 <CakeProphet> (Note for monqys: not an actual thing)
00:35:20 <monqy> oh
00:35:53 <CakeProphet> elliott and I were talking about pattern synonyms a few days ago.
00:36:21 <monqy> http://personal.cis.strath.ac.uk/~conor/pub/she/patsy.html these ones or pattern synonyms in general
00:36:25 <CakeProphet> and now we have an example of where they would be useful.
00:36:30 <elliott> i was telling you they were great and you were being lame
00:36:33 <elliott> and misunderstanding
00:36:33 <elliott> and bad
00:36:35 <elliott> :'(
00:36:37 <CakeProphet> sure.
00:36:57 <CakeProphet> I'm always bad.
00:37:31 <CakeProphet> elliott: also you should definitely logread the 4 or 6 hours of last night where I basically hijack the channel for the purposes of portal chess.
00:37:35 <CakeProphet> and find holes in it plz
00:37:37 <elliott> I did.
00:37:38 <elliott> It was really annoying.
00:38:10 <CakeProphet> or possible improvements plz
00:40:01 <elliott> I have none.
00:40:13 <CakeProphet> so then it is clearly a perfect game, yes?
00:40:28 <CakeProphet> otherwise you would have something to say. :)
00:40:49 <elliott> clearly
00:41:02 -!- copumpkin has quit (Quit: Computer has gone to sleep.).
00:41:25 <CakeProphet> perhaps I should ask instead
00:41:27 <CakeProphet> what is wrong with it?
00:41:36 <CakeProphet> I guess that's similar to "find holes"
00:41:41 <CakeProphet> but less specific
00:41:56 <oerjan> it's not a hole, it's a portal!
00:44:20 <CakeProphet> ...surely elliott is not passing up this great opportunity.
00:44:34 <CakeProphet> what better things could he have to do?
00:46:00 <oerjan> monqy: (.) <$> u <*> v <*> w = u <*> (v <*> w) + some variations with <$> on the right side should suffice to flatten everything
00:47:19 <elliott> I wonder if I shouldn't use String for strings guaranteed to be 120 characters or less.
00:47:26 <elliott> Rather than Text. :p
00:47:57 <oerjan> u <$> (v <*> w) = (u .) <$> v <*> w
00:48:05 <elliott> Though I guess it's no big deal.
00:48:10 <CakeProphet> Text.Array sounds like the right choice.
00:48:34 <oerjan> u <$> (v <$> w) = (u . v) <$> w (Functor law)
00:48:48 <CakeProphet> but yes also not a big deal.
00:49:16 <CakeProphet> oerjan: where are these laws documented I never see them.
00:50:00 <oerjan> CakeProphet: these ones i'm just reconstructing, but the ones with pure in them i think i've seen...
00:50:11 <CakeProphet> ah
00:50:39 <oerjan> u <*> (v <$> w) = (. v) <$> u <*> w
00:50:49 <oerjan> monqy: i think those four are all needed
00:51:29 <CakeProphet> is length on arrays O(1) in Haskell?
00:51:51 <oerjan> yeah
00:52:08 <CakeProphet> so it stores the link as an Integer I'd hope?
00:52:13 <CakeProphet> otherwise array sizes are fixed.
00:52:21 <oerjan> ...they are fixed.
00:52:27 <CakeProphet> er I mean
00:52:29 <oerjan> well, per array
00:52:38 <CakeProphet> otherwise there's a fixed maximum array size.
00:52:57 <oerjan> CakeProphet: well i think it's Int, really.
00:53:08 <oerjan> they're supposed to fit in memory.
00:53:25 <CakeProphet> > 2^32
00:53:26 <lambdabot> 4294967296
00:53:31 <CakeProphet> NOT GOOD ENOUGH.
00:53:45 <oerjan> CakeProphet: also that's just underneath. there's an entire Ix class for types that may be used for array indices.
00:53:51 <oerjan> > maxBound :: Int
00:53:52 <lambdabot> 9223372036854775807
00:54:05 <CakeProphet> such short-sightedness
00:54:33 <CakeProphet> it won't be long before we have thousands of terabytes of memory.
00:54:56 <monqy> int may be bigger by then
00:55:01 <monqy> who knows!!!
00:56:22 <CakeProphet> no all systems will be 64-bit obviously
00:56:42 <elliott> CakeProphet: You're not far off; existing computers have a hundred terabytes of RAM.
00:56:44 <elliott> Well, at least one.
00:56:50 <elliott> I can't find RAM information for Jaguar or Fujitsu K.
00:56:59 <elliott> But Roadrunner has 103.6 Tio of RAM.
00:57:10 <oerjan> http://www.haskell.org/ghc/docs/latest/html/libraries/haskell98-2.0.0.0/Ix.html
00:57:15 <elliott> Admittedly it's not all on the one motherboard.
00:57:31 <elliott> And accessing RAM at the opposite end of the complex is probably _not_ as fast as you expect RAM to be.
00:57:54 <CakeProphet> but still reasonably fast I'd imagine.
00:57:58 <oerjan> CakeProphet: http://www.haskell.org/ghc/docs/latest/html/libraries/base-4.4.0.0/Control-Applicative.html lists the laws
00:58:06 <elliott> CakeProphet: Well, not really.
00:58:14 <elliott> The request and response have to go over Infiniband.
00:58:23 <Jafet> Numa numa yay
00:58:30 <elliott> It's faster than Ethernet, but...
00:58:43 <elliott> It might even be faster than reading from disk; Inifiniband is pretty good.
00:58:45 <monqy> i misread as infinibad
00:58:50 <CakeProphet> is the speed of light not good enough for you?
00:58:50 <elliott> But it'll be orders of magnitude off local RAM.
00:58:55 <Jafet> The same thing already happens on a single motherboard
00:59:02 <elliott> CakeProphet: Light is pretty slow.
00:59:08 <elliott> Jafet: That's a rather lower distance.
00:59:10 <Jafet> See the multi-socket Xeon or Opteron boards
00:59:19 <elliott> Wikipedia says Roadrunner's complex is 6,000 sq ft.
00:59:24 <elliott> Or 560 square metres.
00:59:30 <CakeProphet> elliott: you have high expectations for "fast" :P
00:59:32 <elliott> I'd like to see a motherboard _that_ big.
00:59:39 <elliott> CakeProphet: So do computers.
01:00:00 <Jafet> Latency isn't really that important for memory.
01:00:05 <CakeProphet> s/computers/humans that use computers/
01:00:10 <Jafet> It just means you have to pipeline moar.
01:00:20 <Jafet> And not share cache lines.
01:00:56 <CakeProphet> also what do you mean faster than reading from disk? isn't that slow?
01:01:03 <CakeProphet> oh you're saying accessing memory from across the complex
01:01:06 <CakeProphet> might be faster than that.
01:01:39 <Jafet> It might be nearly as fast if every node had a flash disk
01:03:17 <CakeProphet> I don't think Adobe flash is a good persistent storage device. :3
01:03:36 <CakeProphet> (>:3)
01:03:54 <elliott> Jafet: You mean completely in place of RAM?
01:03:58 <elliott> Not over SATA, that's for sure.
01:04:11 <oerjan> shiver me timbers, it's that day again
01:04:30 <elliott> oerjan: wat
01:04:36 <CakeProphet> oerjan: ahoy mate it is.
01:04:38 <Jafet> Also, 100T of flash isn't cheap neither
01:05:12 <CakeProphet> oerjan: well, not in these waters it ain't. But soon!
01:05:33 <elliott> s/neither/either/
01:05:38 <elliott> oerjan: oh right
01:05:42 <elliott> oerjan: plz refrain
01:05:51 <itidus21> registers are fast.
01:06:00 <CakeProphet> elliott: help what is negations.
01:06:05 <CakeProphet> itidus21 has a good point
01:06:07 <monqy> CakeProphet: please refrain as well
01:06:07 <oerjan> elliott: arrright! errr, i mean...
01:06:11 <CakeProphet> they could just replace everything with registers.
01:06:17 <elliott> Yes.
01:06:31 <elliott> Well, compilers tend to already assume machines have infinite registers.
01:06:43 <elliott> (They just pretend they have infinite registers, then do register allocation and spill over to the stack to match these to real registers.)
01:06:44 <CakeProphet> good plan
01:06:46 <elliott> Well, a finite but arbitrary amount.
01:07:32 <CakeProphet> itidus21: also, registers are fast because they are pretty much part of the CPU.
01:07:59 <CakeProphet> and so don't have to travel, or deal with other physical nuisances.
01:08:04 <itidus21> travel = latency
01:08:16 <CakeProphet> sure.
01:08:32 <itidus21> im not certain on that though
01:08:40 <itidus21> if you queue up a stream of data is it fast?
01:08:41 <CakeProphet> it's part of it.
01:08:46 <CakeProphet> also what?
01:09:03 <itidus21> i guess you can't just "queue up a stream of data"
01:09:08 <itidus21> my head has the wrong conception
01:09:13 <CakeProphet> "queue up a stream of data" is abstract-speak. latency is considered with physical implementation.
01:09:22 <CakeProphet> *concerned
01:10:27 <itidus21> quantum computers ahoy then?
01:10:40 <CakeProphet> what
01:11:05 <itidus21> perhaps quantum computers are fast
01:11:42 <CakeProphet> sure
01:14:33 <CakeProphet> monqy: ya can't tell me when to avast ya scurvy rat-nosed scalawag.
01:14:53 <monqy> :|
01:15:13 -!- Jafet1 has joined.
01:15:25 <elliott> fizzie: Ping
01:15:49 -!- Jafet has quit (Ping timeout: 260 seconds).
01:16:17 <elliott> If this system is equivalent to 25000 PS3, then where is the cost justification? 25000 PS3s = $10 million (at $400/PS3), while this machine cost a 100 million... that's 1000% more expensive... Which gives two possible explainations: 25000 PS3 estimate is wrong, or people who made this machine are idiots 99.240.71.232 (talk) 01:00, 17 September 2008 (UTC)
01:16:32 <elliott> Behold the intelligence of Wikipedia talk page commentors.
01:17:07 -!- Jafet1 has changed nick to Jafet.
01:17:52 <Jafet> But can it run Crysis.
01:18:15 <CakeProphet> 1000% more expensive
01:18:16 <elliott> Hurr hurr
01:18:22 -!- copumpkin has joined.
01:18:44 <CakeProphet> (at $400/PS3)
01:18:47 <monqy> more ps3s
01:19:34 <CakeProphet> s/Crysis/Dwarf Fortress/
01:20:14 <itidus21> if thats the case im guessing ps3 cost reduction is from selling a lot
01:20:19 <CakeProphet> can it run the entire generated world of dwarf fortress all at once? (is that even a thing you can do with DF?)
01:20:42 <CakeProphet> it should be.
01:21:29 <itidus21> 51.8 million ps3's have been sold
01:21:37 <itidus21> that probably helps keep costs down
01:21:59 <CakeProphet> #esoteric - masters of economic theory
01:23:57 <oerjan> CakeProphet: well we could only be marginally worse...
01:24:58 <itidus21> "Move along, these are not the gaming rigs you are looking for."
01:26:03 <CakeProphet> oerjan: argh, hold fast and quit ye optimism.
01:26:29 <elliott> http://www.minecraftwiki.net/images/8/8c/Items_slot_number.JPG
01:26:33 <elliott> What an incredibly rational numbering system.
01:26:35 <oerjan> CakeProphet: how is that optimism
01:26:50 <CakeProphet> oerjan: I don't bloody know I'm a pirate!
01:27:03 <CakeProphet> elliott: makes sense to me.
01:27:08 <CakeProphet> also it's all rationals
01:27:15 <CakeProphet> so... I guess you weren't being sarcastic?
01:27:43 <elliott> CakeProphet: Note how it randomly skips from thirty-five to eighty.
01:27:46 <elliott> Then from eighty-three to a hundred.
01:27:53 <elliott> And then starts going upwards rather than left-downwards.
01:28:07 <CakeProphet> well yes there's that. that's to disinguish different slot locations. I suppose the choose of 80 and 100 are somewhat arbitrary however.
01:28:19 <CakeProphet> *choice
01:28:30 <elliott> Why doesn't it distinguish the immediately-accessible inventory from the rest of it, then?
01:28:36 <elliott> There's no corresponding jump; it just goes from eight to nine.
01:28:49 <CakeProphet> that's fine it can do that... :P
01:28:51 <itidus21> so what does 80 81 82 83 produce
01:28:56 <CakeProphet> those are crafting slots.
01:28:58 <CakeProphet> for crafting
01:28:59 <CakeProphet> things.
01:29:04 <itidus21> well what has been crafted?
01:29:07 <itidus21> seems like nothing
01:29:07 <CakeProphet> nothing
01:29:10 <CakeProphet> that is a diagram
01:29:30 <itidus21> they need to take out 83 and replace it with Add
01:29:39 <CakeProphet> ..
01:29:41 <itidus21> ^Sum
01:29:43 <CakeProphet> ...
01:30:10 <itidus21> it's basically application
01:30:16 <CakeProphet> argh! man ye cannons we spotted an itidus
01:30:18 <itidus21> except not
01:30:27 <itidus21> 4 term application
01:30:31 <CakeProphet> stop.
01:30:55 <itidus21> ok i see where im going wrong
01:31:01 <itidus21> i ought to stop
01:31:07 <CakeProphet> it's minecraft. not a programming language (well... elliott shhhh).
01:32:01 <CakeProphet> elliott: I do find it odd that 100-103 goes from bottom to top instead of top to bottom like eveything else.
01:33:18 <CakeProphet> I wonder what happens when you try to store something in 36-79
01:33:42 <elliott> DEATH.
01:34:05 <itidus21> {5,10,Sum,Increment} = 16
01:34:32 <CakeProphet> (5,10,Multiply,Increment) = ???
01:34:36 <CakeProphet> help order of operations
01:34:57 <oerjan> 51
01:35:06 <monqy> itidus21: what
01:35:14 <itidus21> 5*10= 50 + 1 = 51; 5+1=6*10 = 60
01:35:28 <CakeProphet> oerjan: what rules did you use because it could also be 55 or 60.
01:35:43 <itidus21> sorry i didnt use proper =
01:35:49 <oerjan> ah it's a set?
01:35:57 <CakeProphet> it's ah uh....
01:36:03 <CakeProphet> minecraft crafting window.
01:36:06 <CakeProphet> thing
01:36:12 <CakeProphet> with a list of 4 items
01:36:17 <CakeProphet> >_>
01:36:18 * itidus21 is just thinking of practical uses
01:36:51 <itidus21> {0, Inc} = 1
01:36:51 <CakeProphet> oerjan: so basically it's not anything so the rules are ambiguous is what I meant.
01:36:54 <oerjan> CakeProphet: clearly this is a case for gamma calculus.
01:37:01 <itidus21> {0, Inc, Inc, Inc} = 3
01:37:09 <monqy> itidus21: what are you doing
01:37:27 <itidus21> i'm doing it wrong
01:37:31 <itidus21> :P
01:37:48 <CakeProphet> Some fundamental requirements of workflow enactment are autonomous, distributed, decentralized control that can cope with partial lack of information and can adapt to a dynamically changing environment.
01:37:52 <CakeProphet> oerjan: help
01:38:41 <CakeProphet> The lambda-gamma calculus: A language adequate for defining recursive functions
01:38:49 <itidus21> {5, Stick, Stick, }
01:38:54 <CakeProphet> I wonder if this author realizes that the lambda calculus is adequate for defining recursive functions
01:39:03 <monqy> itidus21: what
01:39:18 <itidus21> monqy: it's a uhmm..
01:39:32 -!- SgeoN1 has quit (Read error: Connection reset by peer).
01:39:34 <itidus21> crafting of a '5' and 'stick' and 'stick'
01:39:35 <oerjan> CakeProphet: i'm not sure all the google links are relevant. or any. but it should be a chemistry analogue.
01:39:50 <CakeProphet> oerjan: yes that's what this one is about
01:39:59 <CakeProphet> http://www.gridworkflow.org/snips/gridworkflow/space/Gamma-calculus
01:41:57 <itidus21> well minecraft follows arbitrary rules as far as i know
01:43:05 -!- oerjan has quit (Quit: Good night).
01:43:25 <CakeProphet> oerjan quits
01:43:57 <itidus21> i havent actually got minecraft, but it is a nice quality that crafting is a finite system
01:44:07 <itidus21> at least i hope it is finite
01:44:25 <CakeProphet> help what is he talking about
01:44:41 <itidus21> crafting table.. taking a number of elements. creating a single element
01:45:06 <CakeProphet> explain how an infinite system would work.
01:45:36 <sebbu> autogenerated & autoexpand
01:45:48 <sebbu> or realtime processing
01:46:28 <itidus21> well suppose that there were infinite possible results of crafting
01:46:44 <sebbu> any element mixed with any other would make a element
01:46:57 <sebbu> eventually you should by able to transmut them in circle
01:47:06 <CakeProphet> that's not infinite.
01:47:13 <itidus21> it could be
01:47:23 <itidus21> oops
01:47:31 <itidus21> uhhhmmm
01:47:54 <sebbu> if it create new element
01:48:01 <itidus21> if you allowed the element/object descriptor size to be unbounded
01:48:03 <sebbu> and the transmutation can add AND remove element
01:48:13 <sebbu> can be infinite
01:48:41 <itidus21> i dunno.. what does minecraft terminology call those objects?
01:48:42 <sebbu> (but i doubt it'ld be a good apport to the game)
01:48:47 <itidus21> im not actually a minecraft player
01:49:06 <itidus21> i guess it doesn't need a precise name. object works
01:49:14 <elliott> item
01:49:15 <elliott> probably
01:49:19 <itidus21> haha
01:49:44 -!- Jafet has quit (Ping timeout: 260 seconds).
01:49:59 <elliott> hilarious.
01:50:16 <itidus21> wiki says, among other definitions, Item is: entry in a list, or one object in a collection of objects
01:50:48 <itidus21> Item (gaming), the objects in a video game collected by the player character to increase the score or progress through the story
01:51:01 <elliott> "The item the player is currently holding. Note that this should be 0 for "no item", unlike -1 used in other packets. A negative value crashes clients."
01:51:02 <sebbu> (this channel is the only one where people are speaking right now among all the channel i'm on)
01:51:03 <elliott> I HATE YOU NOTCH
01:51:06 <elliott> I HATE YOUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU
01:51:30 <monqy> notch..................................................
01:51:40 <itidus21> `log notch
01:51:41 <monqy> speaking of elliottcraft
01:51:44 <HackEgo> 2011-09-19.txt:01:51:03: <elliott> I HATE YOU NOTCH
01:51:48 <itidus21> `log notch
01:51:52 <HackEgo> 2011-01-07.txt:18:51:39: <Phantom_Hoover> Wait, is Notch actually against *redstone circuits*
01:51:58 <itidus21> `log notch
01:52:01 <HackEgo> 2010-12-21.txt:22:34:52: <elliott> Goosey: Because god dammit Notch.
01:52:03 -!- Jafet has joined.
01:52:06 <itidus21> `log notch
01:52:10 <HackEgo> 2010-11-18.txt:23:16:35: <fizzie> Though based on Notch's tweets, he has it sort-of working and it will be in next patch.
01:54:17 <itidus21> talk page "The article talks about items in RPGs, but then does not link to either an article about them nor go into any depth." -- pissed off wikipedian
01:55:14 <sebbu> try other wiki, like wikia, or some rpg dev communities :p
01:55:24 <monqy> why is item (video game) even a thing
01:55:28 <monqy> er
01:55:31 <monqy> item (gaming)
01:55:54 <monqy> "Item (gaming), the objects in a video game collected by the player character to increase the score or progress through the story"
01:55:59 <monqy> sounds like a thing itidus21 would say
01:56:02 -!- sebbu has quit (Read error: Connection reset by peer).
01:56:03 <monqy> somehow
01:56:14 -!- variable has quit (Quit: I found 1 in /dev/zero).
01:56:24 -!- sebbu has joined.
01:56:24 -!- sebbu has quit (Changing host).
01:56:24 -!- sebbu has joined.
01:56:38 -!- invariable has joined.
01:57:11 -!- invariable has changed nick to variable.
02:00:01 <elliott> elliottcable news: elliottcable has a channel named after himself. I will now land-grab #elliott.
02:01:42 <elliott> shachaf: Accept that invite so I can kick you.
02:02:07 <elliott> Oops, I should have used the message "u mad".
02:02:10 <elliott> I mad. :(
02:02:25 <shachaf> Whoops, you can't kick me.
02:02:29 <shachaf> elliott mad!
02:02:44 <elliott> @admin - shachaf
02:02:44 <lambdabot> Not enough privileges
02:02:49 <shachaf> @admin + shachaf
02:02:53 <elliott> Useful.
02:02:56 <elliott> Now do it to me.
02:03:02 <CakeProphet> oh baby.
02:03:07 <shachaf> @@ (@admin + elliott) (@admin - elliott)
02:03:08 <lambdabot> Plugin `compose' failed with: Privledged commands cannot be composed
02:03:09 <elliott> @admin - shachaf
02:03:09 <lambdabot> Not enough privileges
02:03:19 <elliott> I wonder if @@ is atomic.
02:03:27 <elliott> Maybe if it didn't block that, I could get in in the millisecond between the two commands.
02:03:38 <shachaf> @admin + elliott
02:03:39 <shachaf> @admin - elliott
02:03:39 <CakeProphet> hey I bet it's atomic.
02:03:41 <elliott> @admin - shachaf
02:03:41 <lambdabot> Not enough privileges
02:03:43 <elliott> oijsadiosdjofidjoigjdg
02:03:46 <elliott> IM GOING TO RIP YOUR SKULL OUT
02:03:48 <shachaf> "millisecond"?
02:04:01 <elliott> Sorry, Haskell is slow, isn't it? Second.
02:04:01 <shachaf> MOAR LYK MEGASECOND AMIRITE?
02:04:10 <elliott> Oh, that was your joke. :/
02:04:20 <shachaf> elliott: My joke was about *something* being slow.
02:04:26 <CakeProphet> I thought he was confused about why it would take an entire millisecond...
02:04:30 <elliott> Your FACE is slow.
02:04:34 <elliott> CakeProphet: ME too.
02:04:38 <elliott> s/ME/Me/
02:04:39 <shachaf> :
02:04:40 <shachaf> -
02:04:41 <shachaf> (
02:04:47 <elliott> That... is the slowest face.
02:04:58 <shachaf> :
02:04:59 <shachaf>
02:04:59 <shachaf> -
02:05:00 <shachaf>
02:05:01 <shachaf> (
02:05:07 <CakeProphet> :
02:05:09 <elliott> Also that.
02:05:13 <shachaf> @admin + elliott
02:05:13 <shachaf> @admin - elliott
02:05:14 <elliott> CakeProphet is just a :.
02:05:15 <elliott> @admin -
02:05:15 <lambdabot> Not enough privileges
02:05:20 <shachaf> @admin + elliott
02:05:21 <shachaf> @admin - elliott
02:05:34 <CakeProphet>
02:05:39 <elliott> Don't even GIVE A SHIT
02:05:44 <elliott> "Damage" field This field is also used to store item metadata. E.g. you mined birch wood(its id is the same as normal wood) so you must set damage to the metadata of birch wood(2). The same case is wool. Id is the same but data is different.For example: you mined blue wool so your damage field should send value 0xB.
02:05:47 <elliott> FML.
02:05:56 <monqy> admin + monqy
02:06:06 <shachaf> @admin + elliott
02:06:35 <shachaf> la la la
02:06:38 <CakeProphet> -
02:06:48 <elliott> @admin - shachaf
02:06:51 <elliott> @admin - dons
02:06:52 <lambdabot> Not enough privileges
02:06:54 <monqy> finally
02:06:55 <elliott> @admin - mauke everyone
02:07:01 <elliott> What, I am below the dons.
02:07:06 <elliott> @admin - mauke
02:07:06 <lambdabot> Not enough privileges
02:07:10 <elliott> Aw. :/
02:07:20 <elliott> @vixen-on plz
02:07:20 <lambdabot> Unknown command, try @list
02:07:22 <elliott> cry
02:07:23 <elliott> @list
02:07:24 <lambdabot> http://code.haskell.org/lambdabot/COMMANDS
02:07:34 <CakeProphet>
02:07:35 <elliott> @uptime
02:07:35 <lambdabot> uptime: 5d 10h 33m 21s, longest uptime: 1m 10d 23h 44m 29s
02:07:40 <elliott> @listchans
02:07:40 <lambdabot> ##freebsd ##logic ##proggit ##villagegreen #agda #arch-haskell #darcs #dtp2010 #esoteric #fedora-haskell #friendly-coders #functionaljava #gentoo-haskell #gentoo-uy #ghc #gp2010 #happs #haskell #
02:07:41 <lambdabot> haskell-blah #haskell-books #haskell-fr #haskell-freebsd #haskell-in-depth #haskell-overflow #haskell.au #haskell.cz #haskell.de #haskell.dut #haskell.fr #haskell.hr #haskell.se #hscraft-srv #
02:07:41 <lambdabot> learnanycomputerlanguage #lesswrong #macosx #macosxdev #rosettacode #scala #scalaz #scannedinavian #teamunix #unicycling #uscs2010 #xmonad #yi weird#
02:07:47 <elliott> weird# is some channel.
02:07:56 <CakeProphet> I'm joining.
02:07:56 <shachaf> unboxed#
02:08:21 <monqy> #learnanycomputerlanguage what
02:08:27 <CakeProphet> elliott: a brilliant observation.
02:08:34 <CakeProphet> (
02:08:39 <CakeProphet> my slow face is complete.
02:08:40 <elliott> shachaf: It's a channel where all the people inside have their guts spewed out directly into the user list.
02:08:43 <elliott> It's kind of hideous.
02:09:06 <CakeProphet> #functionaljava what
02:09:14 <CakeProphet> that's not a thing
02:09:26 <shachaf> It's a thing.
02:09:46 <CakeProphet> also what is #lesswrong
02:09:51 <CakeProphet> sounds like elitist pricks.
02:10:10 <CakeProphet> not at all like the rest of Freenode.
02:10:52 <shachaf> It's lesswrong.com, man.
02:11:58 <CakeProphet> it appears to be some sort of elitist IRC club.
02:13:02 <elliott> I can't tell whether CakeProphet is making a joke wrt Less Wrongers' holier-than-thouness or is just dim.
02:13:13 <elliott> Actually I can never understand whether CakeProphet is joking or just dim.
02:13:27 <CakeProphet> ...my humor often relies on playing stupid.
02:13:38 <shachaf> DIM CakeProphet AS INTEGER
02:14:09 <CakeProphet> they are voiced I think
02:14:13 <elliott> CakeProphet: That's hard to pull off when you're stupid.
02:14:15 <CakeProphet> it's a "karma-limited channel"
02:14:27 <elliott> (My humour often relies on being an asshole without any emoticons.)
02:14:41 <CakeProphet> :) :) :) :) :) :) :)
02:14:44 <CakeProphet> that's easy to do.
02:14:53 <Gregor> FFFFFFFFFFFFUUUUUUUUu
02:14:59 <Gregor> I typed /list weird#
02:15:04 <Gregor> I'm probably about to be kicked.
02:15:12 <CakeProphet> bahahaha
02:15:23 <Gregor> WHY WOULD THAT LIST EVERY CHANNEL
02:15:25 <Gregor> WHYYYYYYYYYYYYYYYYYYYY
02:15:29 <CakeProphet> elliott: are you perhaps suggesting that I am too stupid to pull off playing stupid?
02:15:39 <CakeProphet> I am shocked
02:15:43 <CakeProphet> I thought we friendship. :(
02:16:20 <monqy> are you playing dumb now too
02:16:26 <Gregor> Hey ... I'm still alive.
02:17:17 <elliott> Gregor: Uh
02:17:22 <CakeProphet> monqy: no, elliott and I are great franz
02:17:22 <elliott> Gregor: I /list occasionally for the hell of it
02:17:33 <CakeProphet> I'm even in his channel about elliottcable
02:17:35 <elliott> It's perfectly fine, freenode is not gigantic and the internet is fast :P
02:17:48 <elliott> Many clients expose a fancy GUI /list, even
02:18:06 <elliott> See Server → List of Channels... in X-Chat
02:18:08 <elliott> s/X-/X/
02:18:12 <CakeProphet> Freenode apparently doesn't have squery
02:18:40 <CakeProphet> well, it doesn't have ALIS
02:18:43 <tswett> elliott: say. What was that one VM or programming language project where the idea is to expose everything about everything to the program?
02:18:54 <tswett> Like Smalltalk, except you can access those things Smalltalk doesn't let you access?
02:19:09 <CakeProphet> I think C? :>
02:19:42 <elliott> tswett: Do you mean VPRI's cola work?
02:19:49 <CakeProphet> well, C doesn't have reflection I guess.
02:19:53 <tswett> elliott: yes, that sounds right.
02:19:58 <elliott> http://piumarta.com/software/cola/
02:20:11 <CakeProphet> reflective-C
02:20:21 <elliott> The VPRI is where Alan Kay's at these days, FWIW.
02:20:29 <tswett> Yes, yes. Everything is late-bound. That's it.
02:20:48 <tswett> You're the man now, dog. Thank you.
02:21:15 <tswett> Come to think of it, I've praised you a little too effusively. I'm not *that* pleased. If you'll permit me to compensate slightly...
02:21:19 <tswett> elliott: fuck you.
02:21:26 <tswett> There. Perfect. Carry on.
02:22:01 <elliott> tswett: Excellent.
02:22:11 <CakeProphet> elliott is a pretty cool guy. eh links websites and doesn't afraid of anything.
02:22:14 <elliott> `addquote <tswett> Come to think of it, I've praised you a little too effusively. I'm not *that* pleased. If you'll permit me to compensate slightly... <tswett> elliott: fuck you. <tswett> There. Perfect. Carry on.
02:22:16 <HackEgo> 671) <tswett> Come to think of it, I've praised you a little too effusively. I'm not *that* pleased. If you'll permit me to compensate slightly... <tswett> elliott: fuck you. <tswett> There. Perfect. Carry on.
02:22:24 <Gregor> elliott: I thought it would SendQ me to hell :P
02:22:36 <elliott> Gregor: Isn't that SENDING too much :P
02:22:42 <CakeProphet> elliott: archival. fascist.
02:22:51 <tswett> No, I think SendQ is when you're receiving too much.
02:22:52 <Gregor> elliott: Faaaaaaaaaaaaaair point.
02:22:59 <tswett> I.e. the server is sending you too much.
02:23:00 <elliott> CakeProphet: I omitted nothing.
02:23:01 <Gregor> elliott: "Kicked for flooding" is sending too much
02:23:05 <Gregor> SendQ is the server's send queue
02:23:26 <tswett> You're both wrong. About *everything*.
02:23:38 <CakeProphet> monqy is the mon queuey
02:23:42 -!- kmc has quit (Quit: Leaving).
02:23:46 <monqy> hi what
02:24:17 <CakeProphet> `log hi
02:24:21 <tswett> A quinquagintillion is a queuein queueuagintillion, I suppose.
02:24:23 <HackEgo> 2005-09-30.txt:18:01:28: <Keymaker> but the main thing is ready
02:24:41 <elliott> `log \bhi\
02:24:42 <elliott> `log \bhi\b
02:24:43 <HackEgo> egrep: Trailing backslash
02:24:46 <HackEgo> 2010-02-12.txt:20:43:01: <alise> Oh, hi, scarf.
02:25:00 <CakeProphet> `log .
02:25:08 * CakeProphet whistles.
02:25:08 <HackEgo> shuf: memory exhausted
02:25:18 <monqy> poor shuf
02:25:32 <tswett> May he rest in piece.
02:25:39 <elliott> `log
02:25:40 <tswett> [sic]
02:25:41 <HackEgo> 2007-08-15.txt:23:17:35: <jix> so people think it's a real person... at least for some time
02:25:46 <elliott> That's what `log is for.
02:25:49 <elliott> tswett: shuf is male?
02:25:57 <tswett> Well... a piece of him is.
02:26:12 <CakeProphet> `log (.*?).*?(?<=...)
02:26:12 <elliott> Weird.
02:26:15 <HackEgo> 2010-10-05.txt:16:13:52: <alise> ais523: changing "< end" to "<= end-1" fixed it.
02:26:30 <CakeProphet> `log (.*?)+?(?<=...).
02:26:34 <HackEgo> 2011-01-08.txt:18:57:40: <elliott> |^(0) => #2 <= {(0,0): inc(#0); (0,1): inc(inc(#1))}
02:26:44 <tswett> Actually, I don't know anything about this shuf person. Who is he?
02:27:16 <CakeProphet> Gregor's slave. his memory is exhausted so he's not really sure who he is.
02:27:40 <elliott> `log 2010-10-05.txt:16:13:52:
02:27:43 <HackEgo> 2011-09-19.txt:02:27:40: <elliott> `log 2010-10-05.txt:16:13:52:
02:27:46 <elliott> `logurl 2010-10-05.txt:16:13:52:
02:27:48 <HackEgo> http://codu.org/logs/log/_esoteric/2010-10-05
02:28:06 <tswett> Now, I wonder, why the 'L' is an integer represented by a pointer whose *lowest* bit is 1, in Smalltalk?
02:28:20 <elliott> tswett: That makes sense.
02:28:33 <elliott> Systems only allocate even pointers, usually.
02:28:45 <tswett> If you do that, then integer-pointers have to be converted before they can be treated as integers.
02:28:52 <elliott> So having the pointer tag be 0 avoids de-masking a pointer before dereferencing it.
02:28:57 <elliott> tswett: Yes, they do.
02:29:02 <elliott> That's better than pointer-pointers needing conversion.
02:29:06 <elliott> This is the standard system.
02:29:16 <tswett> Yes, that is true.
02:29:32 <CakeProphet> integers to pointers are the worst.
02:29:58 <tswett> Yeah, the worst integers are the ones that intege to pointers.
02:30:39 <CakeProphet> no they're the worst of worse things.
02:31:07 <tswett> (As everyone knows, "to intege" means "to be whole".)
02:31:27 <monqy> !wacro
02:31:28 <EgoBot> PMERSGFM
02:31:32 <monqy> speaking of the worst things
02:31:50 <CakeProphet> but all integers must have an integirth.
02:32:25 <tswett> Yes, PMERSGFM is also definitely one of the worst things.
02:32:31 <CakeProphet> !wacro
02:32:31 <EgoBot> CBCN
02:32:33 <CakeProphet> !wacro 3 5
02:32:34 <EgoBot> APB
02:32:35 <CakeProphet> !wacro 3 5
02:32:36 <EgoBot> AOE
02:32:37 <CakeProphet> !wacro 3 5
02:32:37 <EgoBot> DSMBE
02:32:38 <CakeProphet> !wacro 3 5
02:32:39 <EgoBot> BBA
02:32:39 <CakeProphet> !wacro 3 5
02:32:40 <monqy> baaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaad
02:32:40 <EgoBot> GPB
02:32:42 <CakeProphet> !wacro 3 5
02:32:42 <EgoBot> VHMC
02:32:44 <CakeProphet> !wacro 3 5
02:32:45 <EgoBot> MMRR
02:32:47 <CakeProphet> !wacro 3 5
02:32:48 <EgoBot> BPMA
02:32:54 <CakeProphet> these are all perfectly acceptable acronyms.
02:33:15 <tswett> !warco 35
02:33:20 <tswett> !wacro 35
02:33:21 <EgoBot> BTSDFSDBCDTHAEUCCIRCMOEBT
02:33:30 <monqy> !wacro 25
02:33:31 <EgoBot> NKUSPBLMBFAFASVKICIVCCUFS
02:33:37 -!- SgeoN1 has joined.
02:33:48 <CakeProphet> !show wacro
02:33:48 <EgoBot> perl (sending via DCC)
02:33:58 <CakeProphet> beautiful code.
02:34:21 <Lymee> CBCN < Chinese Bakery Cake Network
02:34:22 <Lymee> Or something
02:34:35 <CakeProphet> monqy has high expectations for acronyms.
02:34:44 <CakeProphet> and does not realize that most acronyms are actually not pronouncable or clever in any way.
02:35:01 <monqy> most acronyms suck
02:35:18 <CakeProphet> monqy: then you can admit that this is a faithful acronym generator.
02:35:22 <monqy> scuba? good. laser? good. pmersgfm? bad.
02:35:41 <CakeProphet> !wacro 3 5
02:35:42 <EgoBot> CASB
02:35:43 <CakeProphet> !wacro 3 5
02:35:44 <EgoBot> WCP
02:35:45 <CakeProphet> !wacro 3 5
02:35:46 <EgoBot> GWCA
02:35:46 <CakeProphet> !wacro 3 5
02:35:47 <EgoBot> UTW
02:35:48 <CakeProphet> !wacro 3 5
02:35:49 <EgoBot> BLCTP
02:35:50 <CakeProphet> !wacro 3 5
02:35:51 <EgoBot> RLTD
02:35:58 <CakeProphet> BLCTP could easily be a transfer protocol
02:36:00 <tswett> Casualty Actuary Society, Bitch.
02:36:29 <tswett> We Calculate Pensions. Go With Casualty Actuary.
02:36:41 -!- Patashu has quit (Ping timeout: 258 seconds).
02:36:47 <CakeProphet> Big Lounging Cat Transfer Protocol
02:37:06 <CakeProphet> Universal Turing Waffle
02:37:20 <monqy> Grant Wacro Complete Annihilation
02:37:48 <monqy> its a sign
02:37:56 <tswett> Royal Lagoon Transformation Dance.
02:38:09 <tswett> The most important dance.
02:38:15 <CakeProphet> !wacro 3 6
02:38:16 <EgoBot> GCGPD
02:38:19 <CakeProphet> !wacro 3 6
02:38:19 <EgoBot> CCS
02:38:20 <CakeProphet> !wacro 3 6
02:38:21 <EgoBot> TKW
02:38:21 <CakeProphet> !wacro 3 6
02:38:22 <EgoBot> LRJE
02:38:23 <CakeProphet> !wacro 3 6
02:38:24 <EgoBot> TPPP
02:38:25 <CakeProphet> !wacro 3 6
02:38:26 <EgoBot> CBNT
02:38:27 <CakeProphet> !wacro 3 6
02:38:28 <EgoBot> ECSCJ
02:39:07 <CakeProphet> monqy is jealous.
02:39:08 <monqy> Cool Cat Splendor
02:39:25 <CakeProphet> because he's never coded anything bad.
02:39:26 <tswett> Transfer Protocol Protocol Protocol.
02:40:46 <monqy> turquoise paper party palace
02:41:16 <tswett> The most important palace.
02:41:23 <CakeProphet> Centralized Bureau of Neglect and Torment
02:41:59 <Lymee> CCS means one and only one thing to me. >>
02:42:01 <CakeProphet> To Kill a Wacro
02:42:13 <monqy> hm?
02:42:27 <Lymee> A certain anime.
02:42:28 <monqy> how can it mean only one thing!!
02:42:30 <monqy> oh
02:42:31 <Lymee> Doh!
02:42:40 <CakeProphet> !wacro 3 6
02:42:41 <EgoBot> HZLMJA
02:42:48 <CakeProphet> the best one yet.
02:42:54 <CakeProphet> !wacro 3 6
02:42:55 <CakeProphet> !wacro 3 6
02:42:55 <EgoBot> FFS
02:42:55 <CakeProphet> !wacro 3 6
02:42:55 <EgoBot> PUQE
02:42:56 <EgoBot> KLD
02:43:05 <CakeProphet> bahahaha
02:43:06 -!- rottytooth has left.
02:43:18 <CakeProphet> FFS. PUQE.
02:43:24 <monqy> kld
02:44:16 <monqy> hurriedly, zealous leprachauns make jam always
02:44:21 <tswett> Hey Zappa Lame Michael Jackson Authority.
02:44:29 <tswett> Kill Languising Daemons.
02:44:41 <tswett> It's a cross between languishing and disguising.
02:45:28 <CakeProphet> Finite Fourier Sandwich
02:45:49 <monqy> Please Understand Queen Elizabeth
02:46:05 <monqy> !wacro 4 7
02:46:06 <EgoBot> BBDR
02:46:09 <tswett> The most important kind of elizabeth.
02:46:22 <tswett> Be Back; Dumping Raccoons
02:46:28 <monqy> !wacro 4 7
02:46:29 <EgoBot> CMLA
02:46:49 <monqy> !wacro 4 7
02:46:50 <EgoBot> CDSDAG
02:47:22 <monqy> !wacro 4 7
02:47:23 <EgoBot> UPHESG
02:47:38 <tswett> Unless Pedro Has Escaped, Smoke Gum.
02:47:53 <tswett> Cancel My Latest Appointment. How plausible.
02:48:08 <tswett> Then again, why would you ever cancel a past appointment?
02:48:24 <tswett> Lost time is never found again. Ben Franklin discovered this.
02:48:28 <CakeProphet> a past appointment
02:48:33 <CakeProphet> not a past fulfilling of said appointment
02:48:38 <CakeProphet> thus completely reasonable.
02:48:39 <CakeProphet> ...
02:48:42 <CakeProphet> or something.
02:49:04 <CakeProphet> CMLA is also Catholic
02:49:07 <CakeProphet> Metro League of Atlanta
02:49:12 <monqy> boring
02:49:38 <CakeProphet> monqy is just never satisfied with anything.
02:49:43 <monqy> ever
02:50:40 <CakeProphet> you should program something.
02:50:43 <CakeProphet> I AM INTRIGUED
02:50:50 <CakeProphet> BY WHAT YOU MIGHT PRODUCE.
02:50:54 <CakeProphet> like banans and oranges.
02:50:56 <elliott> This is the most tedious thing ever.
02:51:19 <CakeProphet> elliott: perl
02:52:05 <elliott> What.
02:52:12 <monqy> Cakeprophet Desires Salvation, Destroys Acronym Generator
02:52:17 <CakeProphet> put some kind of --autogenerated code goes here comment
02:52:27 <CakeProphet> and then write a Perl script to auto-generate code.
02:52:36 <CakeProphet> using -pi
02:52:39 <tswett> What does "wacro" stand for, anyway?
02:52:45 <CakeProphet> weighted acronym
02:52:51 <monqy> wreallybad acronym
02:53:27 <CakeProphet> the letters are given weighted probabilities based on frequency as a starting letter of entries in /usr/share/dict/words
02:53:33 <elliott> CakeProphet: I'm already using TH.
02:53:43 <CakeProphet> oh... yes that's probably a better choice.
02:53:54 <monqy> perl to generate th
02:53:54 <CakeProphet> I should learn me some TH for great good sometime.
02:55:40 <CakeProphet> tswett: the first incarnation was called !simpleacro but is now !acro
02:55:41 <CakeProphet> !acro
02:55:44 <EgoBot> VRWHT
02:55:48 <CakeProphet> as you can see it's not so great.
02:55:53 <CakeProphet> !acro
02:55:54 <CakeProphet> !acro
02:55:55 <CakeProphet> !acro
02:55:55 <CakeProphet> !acro
02:55:56 <CakeProphet> !acro
02:55:57 <EgoBot> BIN
02:55:57 <EgoBot> AYVGX
02:55:58 <EgoBot> NMSHGRN
02:55:59 <EgoBot> IKSBWCOBGR
02:55:59 <EgoBot> XPPFGZGTR
02:56:17 <CakeProphet> !show acro
02:56:17 <EgoBot> haskell let pick a = System.Random.randomRIO (0, length a - 1) >>= return . (a !!) in do {len <- pick [2..10]; putStrLn =<< (Control.Monad.replicateM len $ pick ['A'..'Z'])}
02:56:40 <CakeProphet> hmmm... is Char a Random?
02:56:58 <CakeProphet> :t randomR
02:56:58 <lambdabot> forall a g. (Random a, RandomGen g) => (a, a) -> g -> (a, g)
02:57:10 <CakeProphet> > randomR ('a', 'z') (mkStdGen 123981294812412415123)
02:57:10 <lambdabot> ('x',31932274 40692)
02:57:18 <CakeProphet> ...oh, well that would simplify things greatly.
03:00:46 <CakeProphet> now I wonder if that's an inclusive range.
03:00:51 <CakeProphet> I believe so.
03:00:59 <elliott> I think so.
03:01:08 <elliott> > randomR (0,0) (mkStdGen 0)
03:01:09 <lambdabot> (0,40014 40692)
03:01:13 <elliott> > randomR (0,1) (mkStdGen 0)
03:01:14 <lambdabot> (1,40014 40692)
03:01:17 <elliott> Yes.
03:01:19 <CakeProphet> otherwise what the hell would randomR (True, False) even mean.
03:01:51 <copumpkin> yay, best Show instance evar
03:02:37 <elliott> copumpkin: Totally
03:02:45 <elliott> You just need an instance Num (... -> ...)
03:02:51 <Lymee> > randomR (False,True) (mkStdGen 0)
03:02:51 <elliott> That constructs a StdGen
03:02:52 <lambdabot> (True,40014 40692)
03:02:53 <Lymee> > randomR (False,True) (mkStdGen 0)
03:02:54 <lambdabot> (True,40014 40692)
03:02:57 <Lymee> > randomR (False,True) (mkStdGen 0)
03:02:58 <lambdabot> (True,40014 40692)
03:03:02 <elliott> Lymee: Haskell is a pure language.
03:03:02 <Lymee> > randomR (False,True) (mkStdGen 1)
03:03:03 <lambdabot> (True,80028 40692)
03:03:05 <Lymee> oh derp
03:03:08 <CakeProphet> lol
03:03:12 <Lymee> elliott, I missed the "0" part
03:03:13 -!- Jafet1 has joined.
03:03:14 <Lymee> > randomR (False,True) (mkStdGen 2)
03:03:15 <lambdabot> (True,120042 40692)
03:03:19 <Lymee> > randomR (False,True) (mkStdGen 3)
03:03:19 <lambdabot> (True,160056 40692)
03:03:22 <elliott> Lymee: That wouldn't stop it being pure.
03:03:34 <Lymee> > map (randomR (False,True) . mkStdGen) [1..]
03:03:35 <CakeProphet> Lymee: yeah you'll have to change the seed a lot.
03:03:36 <lambdabot> [(True,80028 40692),(True,120042 40692),(True,160056 40692),(True,200070 40...
03:03:37 <elliott> > map randomR (False,True) . mkStdGen $ [0..99]
03:03:38 <lambdabot> Couldn't match expected type `[(a, a)]'
03:03:38 <lambdabot> against inferred type `(GHC...
03:03:43 <elliott> Dammit, Lymee beat me to it.
03:03:45 * CakeProphet noticed this earlier.
03:03:47 <elliott> > map (fst . randomR (False,True) . mkStdGen) $ [0..99]
03:03:47 <Lymee> > map (fst . randomR (False,True) . mkStdGen) [1..]
03:03:48 <lambdabot> [True,True,True,True,True,True,True,True,True,True,True,True,True,True,True...
03:03:49 <lambdabot> [True,True,True,True,True,True,True,True,True,True,True,True,True,True,True...
03:03:52 <elliott> Nice.
03:04:03 <Lymee> > map (fst . randomR (True, False) . mkStdGen) [1..]
03:04:05 <lambdabot> [True,True,True,True,True,True,True,True,True,True,True,True,True,True,True...
03:04:13 <elliott> That'll be the same as (True,True).
03:04:38 <elliott> @check \i -> let gen = mkStdGen i in randomR (True,True) gen == randomR (True,False) gen
03:04:39 <lambdabot> No instance for (GHC.Classes.Eq System.Random.StdGen)
03:04:39 <lambdabot> arising from a use...
03:04:45 <elliott> @check \i -> let gen = mkStdGen i in fst (randomR (True,True) gen) == fst (randomR (True,False) gen)
03:04:45 <lambdabot> "OK, passed 500 tests."
03:05:36 <CakeProphet> !addinterp haskell import System.Random; import Control.Monad; main = (replicateM =<< randomRIO (2, 10)) `ap` (putChar =<< randomRIO ('A', 'Z'))
03:05:37 <EgoBot> ​There is already an interpreter for haskell!
03:05:45 <CakeProphet> !delinterp acro
03:05:45 <EgoBot> ​Interpreter acro deleted.
03:05:49 <CakeProphet> !addinterp acro haskell import System.Random; import Control.Monad; main = (replicateM =<< randomRIO (2, 10)) `ap` (putChar =<< randomRIO ('A', 'Z'))
03:05:49 <EgoBot> ​Interpreter acro installed.
03:05:52 <CakeProphet> !acro
03:06:16 <monqy> rip acro
03:06:41 <CakeProphet> erm...
03:06:48 <elliott> !haskell import System.Random; import Control.Monad; main = (replicateM =<< randomRIO (2, 10)) `ap` (putChar =<< randomRIO ('A', 'Z'))
03:07:02 <elliott> it is broken
03:07:08 <CakeProphet> yes I know I'm looking at the error right now.
03:07:11 <CakeProphet> trying to make sense of it.
03:07:43 <CakeProphet> :t randomRIO
03:07:44 <lambdabot> forall a. (Random a) => (a, a) -> IO a
03:07:49 -!- Jafet has quit (Ping timeout: 260 seconds).
03:08:13 <CakeProphet> oh I see.
03:08:35 <CakeProphet> :t replicateM =<< randomRIO (2,10)
03:08:35 <lambdabot> Couldn't match expected type `m a -> Int'
03:08:35 <lambdabot> against inferred type `IO t'
03:08:35 <lambdabot> In the second argument of `(=<<)', namely `randomRIO (2, 10)'
03:08:52 <CakeProphet> erm, nevermind no I don't
03:09:13 <CakeProphet> :t replicateM >>= randomRIO (2,10)
03:09:14 <lambdabot> Couldn't match expected type `(m a -> m [a]) -> Int -> b'
03:09:14 <lambdabot> against inferred type `IO t'
03:09:14 <lambdabot> In the second argument of `(>>=)', namely `randomRIO (2, 10)'
03:09:15 <CakeProphet> lol
03:09:32 <CakeProphet> HELP
03:09:44 <CakeProphet> :t replicateM
03:09:45 <lambdabot> forall (m :: * -> *) a. (Monad m) => Int -> m a -> m [a]
03:09:55 <CakeProphet> :t (=<<)
03:09:56 <lambdabot> forall a (m :: * -> *) b. (Monad m) => (a -> m b) -> m a -> m b
03:12:30 <CakeProphet> !delinterp acro
03:12:30 <EgoBot> ​Interpreter acro deleted.
03:12:33 <CakeProphet> !addinterp acro haskell import System.Random; import Control.Monad; main = (`replicateM` (putChar =<< randomRIO('A','Z'))) =<< randomRIO (2, 10)
03:12:33 <EgoBot> ​Interpreter acro installed.
03:12:36 <CakeProphet> !acro
03:12:41 <EgoBot> TJT
03:12:52 <CakeProphet> ...I am not so great at Haskell still.
03:12:58 <CakeProphet> combinator overload.
03:17:03 <monqy> !acro
03:17:08 <EgoBot> MYDZDPYHZV
03:17:18 <monqy> :(
03:17:59 <CakeProphet> @undo do {n <- randomRIO (2,10); replicateM n (putChar =<< randomRIO ('A','Z')}
03:17:59 <lambdabot> Unbalanced parentheses
03:18:05 <CakeProphet> @undo do {n <- randomRIO (2,10); replicateM n (putChar =<< randomRIO ('A','Z'))}
03:18:06 <lambdabot> randomRIO (2, 10) >>= \ n -> replicateM n (putChar =<< randomRIO ('A', 'Z'))
03:18:12 <elliott> ?pl randomRIO (2, 10) >>= \ n -> replicateM n (putChar =<< randomRIO ('A', 'Z'))
03:18:12 <lambdabot> flip replicateM (putChar =<< randomRIO ('A', 'Z')) =<< randomRIO (2, 10)
03:18:20 <elliott> ?pl randomRIO (2, 10) >>= \ n -> replicateM n (randomRIO ('A', 'Z') >>= putChar)
03:18:20 <lambdabot> flip replicateM (putChar =<< randomRIO ('A', 'Z')) =<< randomRIO (2, 10)
03:18:20 <CakeProphet> oh, okay... so basically what I did.
03:18:53 <monqy> why is ?pl obsessed with =<<
03:19:01 * CakeProphet prefers it as well.
03:19:05 <CakeProphet> usually
03:19:07 <CakeProphet> it depends
03:19:30 <monqy> because it's in the same order as all the other stuff that is usually in the wrong ordeR??
03:19:32 <CakeProphet> >>= is nice to visualize pipelining.
03:19:41 <CakeProphet> while =<< looks more like a function application
03:21:52 <CakeProphet> f =<< m reads pretty naturally though.
03:22:48 <monqy> it's okay if it's small like that
03:23:03 <monqy> but when writing out a big,, it's really backwards annoying
03:23:12 <CakeProphet> it depends on which side of the expression is big.
03:23:20 <SgeoN1> I'm wondering what distro to put on USB for the time being. I'll be stuck with it for a while.
03:23:28 <CakeProphet> I think it's easier to read when the left-hand side is the smaller expression.
03:23:34 <elliott> monqy: (.) is backwards in the same way
03:23:37 <elliott> SgeoN1: ubuntu or debian
03:23:39 <SgeoN1> I do want to try Ubuntu's new thing.
03:23:44 <elliott> if ubuntu, use gnome.
03:23:50 <monqy> elliott: 20:20:44 < monqy> because it's in the same order as all the other stuff that is usually in the wrong ordeR??
03:23:56 <CakeProphet> SgeoN1: ubuntu's new thing is bad.
03:23:56 <elliott> monqy: right
03:23:59 <monqy> i was SECRETLY REFERENCING (.)
03:24:04 <SgeoN1> Would Linux Mint be that bad?
03:24:34 <CakeProphet> SgeoN1: I use what is now called the "classic interface" in Ubuntu 10.10 (aka GNOME)
03:24:37 <monqy> CakeProphet: when you have long chains it's easier to read >>=wise than =<<wise
03:24:53 <elliott> SgeoN1: linux mint is stupid
03:25:01 <CakeProphet> again, depends on which expressions are large.
03:25:04 <monqy> what's the point of linux mint anyway
03:25:06 <elliott> and pointless
03:25:09 <elliott> monqy: nothing
03:25:12 <elliott> it has literally no point
03:25:21 <monqy> this is what confused me. I couldn't figure out the point.
03:25:23 <elliott> other than "lol we ship slightly more non-free drivers by default except actually ubuntu ships all them anyway"
03:25:24 <SgeoN1> I think I like having just one bar
03:25:33 <elliott> SgeoN1: yeah you can do that with gnome in hmm
03:25:36 <elliott> about ten seconds
03:25:44 <elliott> and xfce comes lik ethat by default
03:25:47 <elliott> soOOOOOoooooooOOOOoooOOOoooOOooooooooo
03:25:55 <CakeProphet> Pure:Dyne is pretty neat.
03:26:07 <CakeProphet> comes with a bunch of music software.
03:26:20 <CakeProphet> and is below Ubuntu on the repo chain.
03:26:38 <CakeProphet> also has good realtime scheduling support.
03:26:53 <CakeProphet> which is kind of silly for a distro that's intended to be used on a CD / USB
03:27:03 <SgeoN1> Can I easily switch between classic and new?
03:27:09 <CakeProphet> yes
03:27:13 <CakeProphet> it's an option on the login screen
03:27:14 <CakeProphet> at the bottom.
03:27:23 <CakeProphet> the new interface is baaaaad
03:27:34 <CakeProphet> it's like "lolololol let's emulate Apple poorly because that's the new trend"
03:27:40 <monqy> woohoo
03:27:49 <monqy> I've never tried it? what's so bad about it? I'd probably hate both?
03:28:02 <elliott> it's awful
03:28:11 <elliott> in every way but not the ways CakeProphet says
03:28:18 <CakeProphet> of course.
03:28:53 <CakeProphet> it's just... obviously it's not a mature piece of software.
03:28:58 <elliott> it doesn't matter
03:28:58 <CakeProphet> unlike GNOME.
03:29:00 <elliott> it's terrible
03:29:04 <elliott> if it were polished
03:29:06 <elliott> it would remain terrible
03:29:11 <CakeProphet> ...yes, but better nonetheless.
03:29:15 <monqy> polished
03:29:41 <CakeProphet> in any case just keep using GNOME forever
03:29:48 <CakeProphet> and not Unity
03:29:58 <CakeProphet> though I think Unity is on top of gnome... whatever.
03:30:18 <SgeoN1> Should I use Ubuntu 11.04, is there cool stuff besides the new thing or stick with 10.04 LTS which I don't need to download something
03:31:00 <CakeProphet> oh wait... I'm not using 10.10 I'm using 11.04
03:31:17 <CakeProphet> I lose track of these versions...
03:31:20 <elliott> SgeoN1: I use 10.10. I wouldn't use 10.04, it's rather outdated by now.
03:31:44 <elliott> 11.04 with GNOME is probably fine; I downgraded because I didn't like the change to the default terminal scrollbar colour, and because the pointer seemed to be moving annoyingly faster.
03:31:51 <elliott> Note that I was already incredibly aggravated at that point.
03:32:20 * CakeProphet hasn't much of a difference besides minor cosmetic changes to gnome in 11.04
03:32:24 <CakeProphet> +noticed
03:33:26 <CakeProphet> the scrollbars are different yes.
03:33:27 <elliott> The 10.10 packages are pretty out of date. I'll probably move to Debian when I finally send this thing off and get it back.
03:33:41 <elliott> CakeProphet: Yeah, but the terminal scrollbars are black.
03:33:44 <elliott> I don't think any other scrollbar is black.
03:33:47 <CakeProphet> yeah
03:33:51 <CakeProphet> scrollbars are for jumps.
03:33:53 <CakeProphet> ...er
03:33:55 <CakeProphet> chumps
03:34:23 <elliott> They're useful for jumping, too.
03:34:43 <CakeProphet> I use page up / page down for that... which annoyingly doesn't work in terminal
03:36:36 <CakeProphet> ...uh, rsync does not appear to be paying attention to my exclude file.
03:39:09 -!- azaq23 has quit (Ping timeout: 276 seconds).
03:39:39 <SgeoN1> I assume that I'll notice Unity's badness quickly, or is it more subtle and will grate on me later?
03:39:50 <CakeProphet> elliott: to exclude all subdirectories of a directory do I need to specify dir/*?
03:39:55 <CakeProphet> SgeoN1: you will notice immediately
03:40:13 -!- sebbu2 has joined.
03:40:13 -!- sebbu2 has quit (Changing host).
03:40:13 -!- sebbu2 has joined.
03:40:45 <elliott> SgeoN1: You have no taste, so who knows.
03:40:57 <elliott> Maybe it will be so new and shiny that you are seduced and you will spend the rest of your life using it.
03:41:07 <CakeProphet> horrible.
03:41:32 <CakeProphet> okay qadding the *'s fixed it.
03:42:30 <CakeProphet> a lot of this crap I don't really want to backup but I'm too lazy to add like 20 exclude entries.
03:42:56 -!- sebbu has quit (Ping timeout: 260 seconds).
03:44:41 <elliott> CakeProphet: dude, just use an existing rsync-based backup solution
03:44:52 <elliott> one that does hardlink snapshotting for you
03:45:04 <elliott> I hear good things about rdiff-backup: http://www.nongnu.org/rdiff-backup/
03:46:38 <Gregor> "rsync-based backup solution"???
03:46:39 <CakeProphet> I pretty much already have this set up though...
03:46:43 <Gregor> rsync already is a backup solution.
03:46:49 <CakeProphet> yeah..
03:47:06 <elliott> Gregor: Not really.
03:47:14 <elliott> It doesn't do snapshotting, for one.
03:47:35 <CakeProphet> not really what I want.
03:47:46 <elliott> Why not
03:47:48 <Gregor> elliott: My backup of Codu is rsync -> git.
03:47:54 <Gregor> For luls!
03:47:54 <SgeoN1> MonoDevelop doesn't support C# 4.0 ? Bleh
03:48:00 <elliott> Gregor: Why git
03:48:13 <Gregor> elliott: Because neither hg nor git can store themselves in themselves, and I never use git :P
03:48:25 <elliott> Why can hg not store itself inside itself
03:48:34 <Gregor> I honestly have no friggin' clue.
03:48:36 <elliott> And why are you under the impression that git is a decent deduplicative storage system
03:48:36 <Gregor> Well, no.
03:48:56 <Gregor> Both of them just arbitrarily say "lol no" if you try to store their dot directory.
03:49:07 <CakeProphet> elliott: it's not necessary and I already have rsync set up.
03:49:26 <Gregor> elliott: Mainly because I've been doing this for over a year and it hasn't gone crazy.
03:49:33 <elliott> CakeProphet: Let me know when you run out of disk space and/or lose an important backup because you delete them way too frequently
03:49:44 <elliott> Gregor: That doesn't mean it isn't using a billion times more disk than necessary :P
03:49:55 <elliott> (Billion may be exaggerated, but c'mon, git is based around storing entire trees.)
03:50:05 <elliott> Do you at least git-gc it?
03:50:27 <Gregor> Yes, once per week.
03:50:42 <CakeProphet> I don't have my external plugged in most of the time so the cron script rarely runs.
03:50:42 <elliott> Fair enough then, though it's still awful. :
03:50:43 <elliott> :p
03:50:45 <CakeProphet> I usually manually run it.
03:51:22 <CakeProphet> and I'm not going to run out of disk space because I only keep one backup.
03:51:42 <CakeProphet> though with my external I could easily keep about 3 or 4 rotating backups.
03:52:15 <CakeProphet> more if I used diffs... which is probably what rdiff-backup does.
03:52:53 <elliott> Do you actually know what snapshotting is?
03:53:18 <elliott> I mean, yes, it does diffs, but you can get snapshotting just with hardlinks.
03:53:34 <CakeProphet> yes it copies a read-only version of the directory..
03:53:44 <elliott> What?
03:53:50 <CakeProphet> that is what snapshotting is...
03:54:06 <CakeProphet> it takes a "snapshot" of the directory before it copies it, to prevent writes from fucking up the transfer.
03:54:17 <CakeProphet> >_>?
03:54:26 <Gregor> elliott: At present, my .git directory is a bit over 2x the size of my current snapshot, and it's been doing nightly snapshots for 2 years 5 months. I think it's doin' just fine :P
03:54:30 <elliott> CakeProphet: Yes, but you expect a snapshot-based backup system to not re-backup unchanged files.
03:54:39 <elliott> i.e. almost every file on your system.
03:54:42 <elliott> i.e. backups are much smaller.
03:54:54 <CakeProphet> rsync does this anyways.
03:55:04 <CakeProphet> not with diffs.
03:55:08 <CakeProphet> just by checking modification times.
03:55:42 <CakeProphet> I just ran a backup that took about a minute.
03:55:46 <CakeProphet> first backup took several hours.
03:55:49 <elliott> >_<
03:55:52 <elliott> Yes, but you're overwriting your previous backup.
03:55:57 <elliott> So it's not a snapshot at all.
03:56:09 <CakeProphet> didn't say it was.
03:57:01 -!- Jafet1 has quit (Quit: Leaving.).
03:57:03 <CakeProphet> okay if I ever have a huge system with lots of important data that is frequently deleted then I will use rdiff-backup, okay?
04:04:04 <SgeoN1> Ugh, arty, not enough space. Going to put TinyCore onto USB then deal with things from there
04:05:08 <elliott> "arty"?
04:06:00 <SgeoN1> Autocorrevt
04:06:12 <SgeoN1> Was warty or something
04:06:22 <SgeoN1> Argh
04:07:47 <SgeoN1> Would it really be a bad idea to use TinyCore as a primary OS?
04:08:02 <elliott> I nominate Gregor to babysit SgeoN1, I'm busy.
04:08:12 <elliott> s/,/;/
04:08:47 <SgeoN1> I forgot why I hated puppy
04:11:40 <CakeProphet> SgeoN1: whenever you finish all of thatI recommend nautilus-open-terminal
04:14:50 <SgeoN1> NO UNETBOOTIN I DO NOT WANT MICROCORE
04:16:20 <elliott> monqy: id really needs renaming :'(
04:16:29 <elliott> SgeoN1: i think unetbootin's copy of tiny core is ancient, give it the iso
04:16:31 <monqy> :(
04:17:06 <elliott> monqy: it
04:17:09 <elliott> monqy: mconfcointliscts :(
04:17:14 <SgeoN1> I did give it the iso
04:17:34 <SgeoN1> I don't remember the differences between tcblah
04:20:55 * SgeoN1 tries startx
04:21:04 <SgeoN1> Not found
04:21:06 -!- MDude has changed nick to MSleep.
04:21:26 <SgeoN1> I chose tca. Command line thing for that mentions MultiCore
04:21:58 <elliott> Hey Gregor
04:21:59 <elliott> Hey
04:22:00 <elliott> Gregor
04:22:01 <elliott> Gregor
04:22:02 <elliott> Rename my type
04:23:28 <SgeoN1> I'm going to do what I should have done before
04:23:38 <SgeoN1> Wait, that may or may not work
04:24:09 <SgeoN1> Can I have unetbootin's target ISO stored on the USB drive?
04:25:25 <elliott> It copies the ISO's contents to the drive.
04:25:55 <SgeoN1> OK, tinycore's working
04:27:05 <elliott> wow, 2-3 finger trees were only invented in 2006?
04:31:13 -!- sebbu3 has joined.
04:31:13 -!- sebbu3 has quit (Changing host).
04:31:13 -!- sebbu3 has joined.
04:34:14 -!- sebbu2 has quit (Ping timeout: 260 seconds).
04:41:01 <CakeProphet> elliott: if I made some sort of portal chess program would you play it?
04:41:13 <CakeProphet> I was thinking IRC bot, or web-based.
04:42:29 <elliott> Maybe.
04:45:12 <CakeProphet> I have no idea how to write an AI for it though so it would have to be multiplayer for sure.
04:50:23 -!- zzo38 has joined.
04:50:36 <itidus21> no need for AI if you have I
04:51:00 <zzo38> You can define a monad treating unit and join and fmap as basic, or return and (>>=) as basic, but can you define a moand treating (return .) and (<=<) as basic?
04:51:30 -!- augur has quit (Remote host closed the connection).
04:53:37 <elliott> (return .) == fmap
04:53:41 <elliott> or hm
04:53:44 <elliott> :t (return .)
04:53:46 <lambdabot> forall a (m :: * -> *) (f :: * -> *). (Monad m, Functor f) => f a -> f (m a)
04:53:50 <elliott> argh
04:53:53 <elliott> :t (return Prelude..)
04:53:54 <lambdabot> forall b (m :: * -> *) a. (Monad m) => (a -> b) -> a -> m b
04:53:56 <elliott> yeah
04:54:02 <elliott> so it's fmap and (>=>)
04:54:08 <elliott> i doubt it
04:54:11 <elliott> because that doesn't give you return
04:55:04 <zzo38> I don't think that is the type of fmap
04:55:43 <zzo38> fmap is (a -> b) -> f a -> f b
04:56:02 <zzo38> (return .) is you remove the first f
04:57:02 <SgeoN1> Going to download Ubuntu to USB and use Unetbootin on that. I think it unpacked stuff to temporary, so...
04:57:08 <SgeoN1> Tmp dammit
04:57:10 <CakeProphet> elliott: also do you know of any libraries that would be useful for a web-based chess-like game?
04:57:18 <CakeProphet> I was probably just going to JS tomfoolery.
04:57:20 <CakeProphet> +do
04:57:30 <elliott> jQuery? :-P
04:58:42 <zzo38> Why are you trying to make a web-based chess-like game? You could use other programs too such as local file (or remote file).
04:58:53 <elliott> zzo38: sorry, I was wrong, that isn't fmap, yeah
04:59:09 <CakeProphet> well the idea is to make it accessible to people who might say, not care very much.
04:59:18 <elliott> yeah (f .) ~ f
04:59:30 <elliott> to go (f .) -> f: g id
04:59:34 <elliott> to go from f -> (f .) = (f .)
04:59:44 <elliott> where g is (f .) in the first one
04:59:58 <CakeProphet> also being web-based makes it simpler to set up online multiplayer such that someone could just create a game with anyone else who were on the site.
05:00:13 <CakeProphet> *was
05:00:39 <zzo38> CakeProphet: O, I think using MUD service or something like that work better; I believe FICS does something like that (although it does have a Java client too; you could do that, I suppose).
05:00:52 <CakeProphet> ...nah not as many people use MUDs.
05:01:11 <zzo38> It has a Java client, so if you have Java you do not need a MUD client.
05:01:20 <CakeProphet> yeah Java is an option.
05:01:27 <CakeProphet> so is Flash but flash is icky.
05:01:37 <zzo38> And if you have a MUD client you do not need Java or a web browser program.
05:01:49 <zzo38> You could use Flash if you want, but I suggest using Java.
05:02:12 * CakeProphet is completely new to web interfaces so he'll likely do it the wrong way at first.
05:03:03 <zzo38> That is why it should be done as a MUD service. And then write the Java or whatever on top of that (you can easily have webpages that automatically run the Java program properly)
05:03:59 <CakeProphet> you mean like... barebones telnet right? am I interpreting MUD correctly?
05:04:29 <zzo38> CakeProphet: FICS is linemode, so if you have a linemode telnet client that will work.
05:04:58 <CakeProphet> hmmm okay
05:04:59 <zzo38> (You could support charmode as well if you wanted to, I suppose)
05:05:14 <elliott> OK, this trackpad is almost broken.
05:05:27 <elliott> This laptop: I am sick of it.
05:05:42 <zzo38> Then fix it or get a new one.
05:06:01 <CakeProphet> zzo38: how do you create games with other people using FICS?
05:06:22 <elliott> zzo38: I am, I've just been busy using it.
05:06:36 <zzo38> CakeProphet: I have not used it in a long time and forget what the command is, but you can use help command to access the help it tell you what it is.
05:07:43 <elliott> Metadata has a massively quirky packing format, the details of which are not quite all understood. However, successful parsing of metadata is possible, according to the following rules.
05:07:43 <elliott> A metadata field is a byte. The top three bits of the byte, when masked off and interpreted as a three-bit number from 0 to 7, indicate the type of the field. The lower five bits are some sort of unknown identifier. The type of the byte indicates the size and type of a payload which follows the initial byte of the field.
05:07:43 <elliott> The metadata format consists of at least one field, followed by either another field or the magic number 0x7F. 0x7F terminates a metadata stream.
05:07:45 <elliott> Thus, the example metadata stream 0x00 0x01 0x7f is decoded as a field of type 0, id 0, with a payload of byte 0x00.
05:07:48 <elliott> oh dear god
05:07:50 <CakeProphet> also Java could easily be converted to an android app. my portal chess empire will soon kick off.
05:07:58 <elliott> CakeProphet: "Easily"
05:08:09 <elliott> Except that the entire Android API is wildly different from standard Java stuff.
05:08:14 <CakeProphet> elliott: you are correct.
05:08:20 <elliott> So not easily at all.
05:08:25 <zzo38> I can understand if you have f = (return .) then you have return = f id but can you convert (<=<) (or (>=>)) to other forms?
05:08:26 * CakeProphet has made Android apps so actually knows this.
05:08:43 <elliott> zzo38: dunno
05:08:50 <CakeProphet> elliott: with enough boilerplate code anything is possible in Java. :P
05:09:01 <CakeProphet> JUST GOTTA THINK WITH CLASSES.
05:09:04 <CakeProphet> DAWG
05:09:34 <zzo38> CakeProphet: Yes, you could use Android as well; anyone with a keyboard Android device could use MUD client or the other one whichever you prefer, and if you have no keyboard you can just use the Java program.
05:10:18 -!- kmc has joined.
05:10:19 <CakeProphet> the average person would not use a MUD client. also, the average person is important to the success of the CakeProphet Portal Chess Empire(tm).
05:10:32 <zzo38> Using (return .) and (<=<) seem like a category where you have morphism conversion and morphism composition.
05:10:36 <CakeProphet> which will no doubt blossom in a few months.
05:10:38 <zzo38> CakeProphet: That is why you need a Java client!!
05:10:43 <CakeProphet> correct.
05:11:23 <zzo38> You can have menus and whatever to access commands, graphics interface, sound effect, etc. But still make the underlying protocol a MUD service (this is what FICS does too).
05:11:37 <CakeProphet> yes I will need a good explosion sound effect for when portals explode.
05:11:38 <CakeProphet> :P
05:11:57 <CakeProphet> zzo38: I am understanding what you said. no need to clarify.
05:12:05 <zzo38> OK
05:12:59 <fizzie> elliott: Also known as ENTITY_DATA in protocol.c; it's not *that* hard to skip, but I presume you want to de/serialize it to some Haskell type representation. More fun for you.
05:13:07 <CakeProphet> I like how the FICS website has some woman playing chess on it.
05:13:25 <CakeProphet> probably to persuade socially inept chess nerds that they will find their soulmate through FICS.
05:14:23 <elliott> fizzie: It's... what is even this format?
05:14:28 <elliott> Seriously. What is it.
05:14:40 <elliott> CakeProphet: I'm pretty sure there are, in fact, women who play chess.
05:14:42 <fizzie> CakeProphet: Our CS department website photos tend to do that too.
05:14:53 <elliott> fizzie: What is this. Website.
05:15:00 <CakeProphet> elliott: what? unspeakable.
05:15:04 <elliott> ...
05:15:05 <elliott> Website?
05:15:06 <zzo38> elliott: You don't know answer to my question?
05:15:07 <elliott> I mean format.
05:15:09 <elliott> zzo38: I don't.
05:15:22 <elliott> fizzie: Seriously. This is the screwiest format... ever.
05:15:23 <pikhq> CakeProphet: I can confirm that there are, in fact, women who play chess.
05:15:24 <fizzie> elliott: It's just this thing, you know.
05:15:34 <CakeProphet> pikhq: that's unpossible
05:15:38 <CakeProphet> I am completely unconvinced at the unpossible.
05:15:56 <elliott> Ironic sexism: bringing funny to your IRC since 1990.
05:16:00 <elliott> fizzie: It's.
05:16:02 <zzo38> Since you already have return from that, can it be converted to a statement in intuitionistic logic by Curry-Howard?
05:16:03 <elliott> fizzie: It's not a thing I like.
05:16:06 <itidus21> `log impossible is
05:16:06 <elliott> fizzie: I don't like the thing.
05:16:11 <HackEgo> 2007-08-03.txt:21:51:44: <ehird`> bsmntbombdood, but this is clearly in an alternate universe where the impossible is possible
05:16:11 <elliott> fizzie: Help.
05:16:21 <zzo38> Actually I don't know if Curry-Howard is sufficient.
05:16:23 <itidus21> `log impossible is
05:16:26 <HackEgo> 2011-09-19.txt:05:16:23: <itidus21> `log impossible is
05:16:30 <itidus21> `log impossible is
05:16:34 <HackEgo> 2011-09-19.txt:05:16:06: <itidus21> `log impossible is
05:16:38 <itidus21> shee
05:16:40 <itidus21> t
05:16:46 <itidus21> `log impossible is
05:16:49 <HackEgo> 2011-09-15.txt:22:12:10: <itidus21> maybe impossible is a limit
05:16:54 <pikhq> No, it's just as utterly implausible as the move 0-0-0-0-0-0.
05:16:55 <itidus21> `log impossible is
05:16:59 <HackEgo> 2011-09-19.txt:05:16:26: <HackEgo> 2011-09-19.txt:05:16:23: <itidus21> `log impossible is
05:17:09 <CakeProphet> elliott: just pretending to be incredulous as usual.
05:17:15 <CakeProphet> the sexism was an artifact.
05:17:22 <itidus21> dewuihdeu (\iewjiwejdiwjijdiwdjwidjiewjdiwdi.x) huiehuie dehhu
05:17:23 <zzo38> pikhq: I think someone once played that move, although the modern rules clarify that such move is not permitted.
05:17:38 <elliott> A metadata field is a byte. The top three bits of the byte, when masked off and interpreted as a three-bit number from 0 to 7, indicate the type of the field. The lower five bits are some sort of unknown identifier. The type of the byte indicates the size and type of a payload which follows the initial byte of the field.
05:17:38 <elliott> The metadata format consists of at least one field, followed by either another field or the magic number 0x7F. 0x7F terminates a metadata stream.
05:17:42 <elliott> Thus, the example metadata stream 0x00 0x01 0x7f is decoded as a field of type 0, id 0, with a payload of byte 0x00.
05:17:49 <elliott> fizzie: Can you explain this?
05:17:52 <zzo38> (In fact that move resulted in checkmate; I think it was the only move in that position that resulted immediately in checkmate)
05:17:56 <elliott> I don't get how the payload comes before the type.
05:17:57 <pikhq> zzo38: It was part of a solution to a chess problem, and no longer permitted.
05:17:59 <elliott> fizzie: Is the example just wrong?
05:18:08 <CakeProphet> pikhq: if I create portal chess software will you play it?
05:18:13 <zzo38> pikhq: I know that
05:18:15 <CakeProphet> also if I write rules so that you know how to play it?
05:18:28 <zzo38> CakeProphet: I would like to see the complete rules.
05:18:40 <fizzie> elliott: The example is wrong; the payload is 0x01.
05:19:03 <CakeProphet> zzo38: they'll be a bit tricky to describe technically.
05:19:13 <elliott> fizzie: Right.
05:19:13 <CakeProphet> the loop breaking rules are somewhat messy.
05:19:25 <elliott> fizzie: I'm... I hate this format.
05:19:29 <elliott> fizzie: Of all the formats: this is the worst.
05:19:40 <fizzie> elliott: Note that it's funnily impossible to have a 'float'-type field in there with the five-bit ID of 0x1f, because that would happen to match the 0x7F.
05:19:41 <CakeProphet> basically the bidirectional loops have a number of variant rules you could adopt.
05:19:52 <elliott> fizzie: The IDs are just ignored by the client, right?
05:20:03 <CakeProphet> because it's ambiguous what happens in that situation when you place a portal in a loop that is travel back and forth instead of in a single direction.
05:20:11 <fizzie> elliott: No clue, since I make no attempts to decode it.
05:20:19 <elliott> Heh.
05:20:25 <CakeProphet> so you just have to say "okay this is what happens"
05:20:36 <CakeProphet> and there's so far 4 ways to do that. I picked one for the standard rules.
05:20:51 <fizzie> elliott: http://mc.kev009.com/Protocol#Metadata says the ID is "either an index or bitmask".
05:21:04 <elliott> fizzie: And the strings are encoded in the usual Minecraft way, right?
05:21:52 <CakeProphet> elliott: yes block formatting
05:22:12 <zzo38> I don't completely understand the rule but I can think one way might be the way to program it: you figure out what number is needed and hardcode that value. After that many steps, save the current direction and position. Now you recognize infinite loop if you reach that point a second time.
05:22:18 <itidus21> the good thing about minecraft is that since it's not free, you won't get advertising bots
05:22:41 <elliott> > 9 `shiftL` 99
05:22:42 <lambdabot> Ambiguous type variable `a' in the constraint:
05:22:42 <lambdabot> `Data.Bits.Bits a'
05:22:42 <lambdabot> a...
05:22:44 <elliott> > 9 `shiftL` 99 :: Int
05:22:44 <lambdabot> 0
05:22:46 <elliott> > 9 `shiftL` 99 :: Integer
05:22:46 <lambdabot> 5704427701027032306735164424192
05:22:48 <CakeProphet> zzo38: oh the infinite loop itself is not a problem and is part of the rules/strategy.
05:22:48 <elliott> > 9 `shiftR` 99 :: Integer
05:22:49 <lambdabot> 0
05:22:49 <fizzie> elliott: http://mc.kev009.com/Mob_Types seems to indicate that wolves come with 3 fields of IDs 16, 17 and 18; it could be it's checked.
05:23:04 <CakeProphet> zzo38: the problem is there are certain ways to break a loop via portal that are ambiguous.
05:23:16 <CakeProphet> specifically if you have, on any file/row/diagonal the following setup
05:23:19 <CakeProphet> >-------<
05:23:21 <elliott> fizzie: FML
05:23:30 <CakeProphet> where > and < are arrows and the ---- is the projectile path (the loop)
05:23:36 <fizzie> elliott: If I read the protocol.c right, string fields actually are prefixed by the length in bytes (not in UCS-2 elements) in the metadata format.
05:23:41 <CakeProphet> if you place a portal inside the loop. what happens?
05:23:50 <fizzie> But of course protocol.c might easily be wrong.
05:24:01 <CakeProphet> does the portal redirect the projectile? does it get captured? both? or should you flip a coin?
05:24:01 <elliott> fizzie: I
05:24:02 <elliott> HATE
05:24:02 <elliott> MY
05:24:04 <elliott> LIFE
05:24:06 <CakeProphet> these are the 4 rule variations I've come up with.
05:24:17 <CakeProphet> the first one being the standard one.
05:24:19 <elliott> fizzie: It's probably not wrong since mcmap actually works.
05:24:22 <elliott> Sometimes.
05:24:24 <fizzie> "case 4: t = buf_get_jshort(state); if (!buf_skip(state, t)) return 0; break;"
05:24:54 <elliott> What's the mask for five bits again?
05:25:23 <fizzie> 0x1f.
05:25:36 <elliott> Thanks.
05:25:58 <fizzie> elliott: The only non-empty string field is for a tamed wolf; has anyone tried to see a tamed wolf through mcmap yet?
05:26:19 <elliott> Not that I know of. :p
05:26:43 <fizzie> Could be stealthily wrong, then.
05:26:44 <elliott> fizzie: case 4: read string (UCS-2) from stream
05:26:50 <elliott> Nothing _seems_ to stay it's any different from the usual strings.
05:26:53 <elliott> I'd expect that point to come up.
05:30:44 <fizzie> elliott: Could be. Sadly DataOutputStream's writeChars doesn't prefix the length, so there's no "standard" way. (Unlike the writeUTF method, which prefixes a two-byte length in bytes.)
05:30:50 <CakeProphet> !wacro 3 6
05:30:51 <EgoBot> DCECO
05:31:01 <CakeProphet> monqy: ^^^
05:31:08 <monqy> thanks
05:31:13 <monqy> it's amost good
05:31:30 <fizzie> I'm mildly surprised mc UTF-8 strings aren't prefixed by the length in characters; that woud have been so typical.
05:31:31 <monqy> the consonatnt cluster at the beginning though? two plosives? really?
05:31:59 <monqy> unless the first c isn't but that's dumb too
05:32:09 <CakeProphet> no it's not.
05:32:13 <elliott> fizzie: http://sprunge.us/OiGK
05:32:16 <elliott> fizzie: Behold the ugliest.
05:32:21 <monqy> c is a pretty useless letter
05:32:24 <elliott> Also, MC UTF-8 strings don't exist any more.
05:32:25 <elliott> Thank fucking god.
05:33:01 <CakeProphet> minecraft needs more portals.
05:33:13 <monqy> does it not already have them? shameful
05:33:35 <CakeProphet> it has doors
05:33:39 <CakeProphet> but those don't count as portals.
05:33:52 <CakeProphet> just in the lame pre-21st century way.
05:33:57 <elliott> It...
05:33:57 <elliott> Has portals.
05:34:03 <CakeProphet> not the same
05:34:04 <elliott> As a separate thing to doors.
05:34:05 <CakeProphet> hell portals are lame.
05:34:11 <elliott> They're called Nether portals.
05:34:16 <CakeProphet> don't care
05:35:04 <fizzie> Some of them moddifications do tele-portals.
05:35:34 <CakeProphet> do they preserve momentum?
05:35:53 <elliott> MC/Protocol.hs:361:7: Not in scope: `PF.byteArray'
05:35:53 <elliott> MC/Protocol.hs:367:7: Not in scope: `PF.multiBlockChangeData'
05:35:53 <elliott> MC/Protocol.hs:391:7: Not in scope: `PF.explosionData'
05:35:53 <elliott> MC/Protocol.hs:427:7: Not in scope: `PF.windowItemData'
05:35:53 <elliott> MC/Protocol.hs:456:7: Not in scope: `PF.mapData'
05:35:58 <fizzie> Probably not.
05:36:03 <elliott> fizzie: Would you be willing to sell alcohol to a minor? I kind of need it.
05:36:15 <CakeProphet> elliott: perl is your friend.
05:36:22 <elliott> CakeProphet: How can Perl help here?
05:36:23 <CakeProphet> perl is better than stiff drinks.
05:36:34 <fizzie> elliott: NO it's the PRETTY. The only thing it needs is a third mini-format inside. Maybe "type 7" fields could be gzipped XML fragments?
05:36:36 <CakeProphet> elliott: while I assume you need to change something about the exports or rename a bunch of identifiers.
05:37:00 <elliott> fizzie: Please kill me.
05:37:07 <elliott> CakeProphet: No, I need to implement a shitload of horrible packet field types.
05:37:23 <zzo38> Just select which way the ambiguity on the game is resolved by a variant before the game starts, I suppose. Or, make it the player making the move selects only one rule as they are making a move.
05:37:52 <CakeProphet> zzo38: the first suggestion is basically what I already do
05:38:03 <CakeProphet> I have the standard rule and then optional varints that should be decided upon beforehand
05:38:07 <CakeProphet> second idea is horrible.
05:38:16 <zzo38> OK
05:38:57 <CakeProphet> elliott: you could just do the packet stuff as a perl script. :D
05:39:01 <CakeProphet> there, now perl is helping.
05:39:09 <elliott> CakeProphet: Shut up, I'm ratty.
05:39:41 <fizzie> elliott: Ooh, map data is also pretty funny if you want to properly decode it.
05:40:08 <CakeProphet> regex is the best way to decode everything.
05:40:29 <fizzie> "If the first byte of the text is 0, the next two bytes are X start and Y start and the rest of the bytes are the colors in that column.
05:40:33 <fizzie> If the first byte of the text is 1, the rest of the bytes are in groups of three: (data, x, y). The lower half of the data is the type (always 0 under vanilla) and the upper half is the direction."
05:40:53 <elliott> fizzie: I'm seriously going to commit suicide.
05:40:56 <elliott> This is
05:40:57 <elliott> The worst
05:40:58 <elliott> Protocol.
05:41:03 <elliott> Find me a worser protocol. I dare you.
05:41:06 <CakeProphet> perl would make it easy.
05:41:09 <CakeProphet> :):):)
05:41:13 <CakeProphet> :D:D:D
05:41:16 <itidus21> elliott: ymsg
05:41:23 <CakeProphet> :>:>:>
05:41:32 <elliott> itidus21: ?
05:41:35 <elliott> "getLengthPrefixedByteString" -- ah yes, the good names.
05:41:42 <itidus21> yahoo messenger protocol
05:41:55 <elliott> itidus21: What's it like
05:42:12 <itidus21> they hacked it up years ago much like whats being done for minecraft :D
05:42:15 <CakeProphet> I bet whatever WoW uses is pretty bad.
05:42:22 <itidus21> this led to the creation of many third party clients
05:42:48 <elliott> itidus21: I'm talking about worse as in the technical details of the protocol.
05:42:49 <itidus21> i dont actually know what its like
05:43:00 <itidus21> it might not be that bad... probably got worse with time
05:43:18 <itidus21> finne
05:43:29 <itidus21> ... i failed to find a worse one,.
05:43:36 <itidus21> i relent
05:44:15 * itidus21 checks google for relent meaning.
05:44:19 <itidus21> im not sure if it applies.
05:44:51 <elliott> MC/Protocol.hs:367:7: Not in scope: `PF.multiBlockChangeData'
05:44:52 <elliott> MC/Protocol.hs:391:7: Not in scope: `PF.explosionData'
05:44:52 <elliott> MC/Protocol.hs:427:7: Not in scope: `PF.windowItemData'
05:44:52 <elliott> MC/Protocol.hs:456:7: Not in scope: `PF.mapData'
05:44:53 <elliott> And so it thins.
05:45:08 <elliott> OK, explosion looks pretty easy.
05:46:22 <elliott> fizzie: So is the explosion data composed of signed or unsigned bytes? :p
05:47:17 <CakeProphet> itidus21: to relent means to give up.
05:47:26 <fizzie> I've been assuming all bytes signed, pretty much. Even though some might not be.
05:47:37 <itidus21> well yeah i give up
05:47:51 <fizzie> windowItemData is not too bad either, if it's that inventory contents thing; there's a count, and then a list of that many of those "one short, followed by a byte+short" item things.
05:47:56 <CakeProphet> itidus21: though it usually connotates something mean that you're giving up. as in relentless which is when it's commonly used.
05:48:15 <fizzie> s/followed/optionally followed/
05:48:52 <itidus21> i withdraw, yield, submit, concede, relent
05:49:11 <elliott> I've been working on this thing like two, three days, it's almost a thousand lines, and still no world of grass. :/
05:49:12 <CakeProphet> itidus21: avast ye scurvy marmit.
05:49:36 <CakeProphet> elliott: perhaps you should take a break.
05:49:45 <elliott> CakeProphet: That would not get me closer to the world of grass.
05:49:50 <itidus21> elliott: go swaggering with your posse
05:49:59 <CakeProphet> but it would perhaps prevent you from going insane.
05:50:28 <elliott> CakeProphet: Too late.
05:50:53 <fizzie> elliott: I don't suppose you considered stealing these from the other Haskell mc projects? Oh, right, of course not; they'd have done it wrong. (Admittedly the one I've seen wasn't that pretty either, and could well be dead now.)
05:51:27 <itidus21> a haskell mc project?
05:51:30 <itidus21> cool
05:52:06 <elliott> fizzie: Consider that the conception of this was "I am totally out of fucks; let's hack up my own cheap thing".
05:52:18 <elliott> Then perhaps it will yield fucks to give.
05:54:29 <fizzie> If you want a "cheap thing", why are you bothering with all the field types you could just keep as opaque blobs?-)
05:54:43 <SgeoN1> Maybe I'll go eat while this thing takes eternity to shrink a 29.98 gb partition to 5.37
05:54:47 <itidus21> `log cheap thing
05:54:50 <HackEgo> 2009-04-21.txt:23:18:37: <ehird> ais523: the really cheap thing misses the point, since they just pirated it instead.
05:55:08 <elliott> fizzie: Not _that_ cheap.
05:55:27 <itidus21> `log cheap thing
05:55:31 <HackEgo> 2011-09-19.txt:05:54:47: <itidus21> `log cheap thing
05:55:35 <SgeoN1> Oh it finished
05:55:52 <SgeoN1> Time to make casper-rw
05:55:55 <itidus21> `log minecraft
05:55:59 <HackEgo> 2010-12-18.txt:16:42:10: <elliott> oh MINECRAFT okay
05:56:09 <itidus21> `log elliottcraft
05:56:09 <SgeoN1> Anything horribly wrong with ext4?
05:56:13 <HackEgo> 2011-08-28.txt:22:24:41: <Phantom_Hoover> elliott, isn't that basically elliottcraft in a nutshell?
05:56:15 <elliott> SgeoN1: Use jfs.
05:56:18 <fizzie> Cheap thing -> https://github.com/mpolney/mcproxy/blob/master/Protocol/SMP.hs
05:56:23 <itidus21> `log elliottcraft
05:56:27 <HackEgo> 2011-08-19.txt:20:00:21: <elliott__> I could have the thing blocking Elliottcraft (the GPipe patch) probably done within a few hours, but it hasn't popped up as something that sounds like fun for a while, so it hasn't been done yet, oops
05:56:40 <SgeoN1> Why?
05:56:51 <elliott> SgeoN1: Because it's the best Linux filesystem.
05:57:02 <elliott> fizzie: For some definition of cheap.
05:57:17 <elliott> fizzie: That doesn't even do client packets, I think.
05:57:31 <fizzie> It's a proxy, it should.
05:57:32 <elliott> Hmm, it does. But only one of them.
05:57:37 <elliott> Oh, it's old.
05:57:37 <fizzie> Well, "do".
05:57:42 <elliott> Anyway, it's: bad.
05:57:49 <fizzie> Yeah, I was expecting it could be dead.
05:58:07 <fizzie> I took some initial mcmap protocol info from there.
05:58:23 <elliott> Huh, it can do keyboard examples.
05:58:29 <elliott> fizzie: Heh, it predates mcmap?
05:58:31 <SgeoN1> Should I leave a gb free for swap?
05:58:42 <elliott> SgeoN1: How much RAM?
05:58:46 <elliott> And did you use JFS, because it is the best.
05:58:53 <elliott> Also ext4 is designed for obsoletion.
05:58:56 <SgeoN1> I forgot how to check
05:59:03 <elliott> SgeoN1: free -m
05:59:12 <elliott> (It's meant to be the "stopgap" towards btrfs, which is unstable and Oracle-controlled. JFS = good.)
05:59:21 <elliott> fizzie: That certainly doesn't predate mcmap.
05:59:27 <fizzie> elliott: Oh, it was https://gist.github.com/727175 instead.
05:59:27 <elliott> I checked the repo.
05:59:29 -!- GreaseMonkey has joined.
05:59:30 -!- GreaseMonkey has quit (Changing host).
05:59:30 -!- GreaseMonkey has joined.
05:59:30 <SgeoN1> 992
05:59:45 <elliott> fizzie: Oh, I saw that.
06:00:11 <fizzie> I was blinded by all the "Int32 String Int32 Int32 Int32 Int8 Int8 Int16".
06:00:28 <elliott> There's a reason I decided to auto-generate the parser. :p
06:00:33 <elliott> (And deparser.)
06:00:44 <elliott> let blks = zipWith3 (\ (a, b, c) d e -> (a, b, c, d, e) `asTypeOf` (a, a, a, a, a)) pos t md
06:00:44 <elliott> Noice.
06:02:13 <fizzie> Musts to wurk now.
06:03:39 -!- augur has joined.
06:03:57 <elliott> Maps If the first byte of the text is 0, the next two bytes are X start and Y start and the rest of the bytes are the colors in that column.
06:03:57 <elliott> If the first byte of the text is 1, the rest of the bytes are in groups of three: (data, x, y). The lower half of the data is the type (always 0 under vanilla) and the upper half is the direction.
06:03:57 <elliott> What.
06:04:14 <CakeProphet> @pl (\ (a, b, c) d e -> (a, b, c, d, e) `asTypeOf` (a, a, a, a, a))
06:04:14 <lambdabot> (line 1, column 9):
06:04:14 <lambdabot> unexpected ","
06:04:14 <lambdabot> expecting letter or digit, operator or ")"
06:04:14 <lambdabot> ambiguous use of a non associative operator
06:04:37 <SgeoN1> Is it a bad idea to have a swap partition on a flash drive?
06:04:54 <CakeProphet> no.
06:05:08 <CakeProphet> swap on a flash drive would be faster than disk writes I believe. (...?)
06:05:21 <zzo38> "Can I have a glass of water?" "Do you want a plate or a fork?"
06:05:33 <SgeoN1> Faster isn't the issue, wear on the drive is
06:05:46 <CakeProphet> oh
06:05:47 <CakeProphet> nah...
06:06:39 <pikhq> Honestly, swap is basically irrelevant anymore.
06:07:01 <SgeoN1> Even with just 1gb ram w
06:07:10 <elliott> 1gb ram? Allocate two gigs swap.
06:07:21 <elliott> That's an anaemic amount of RAM.
06:07:42 <elliott> Aenaemic. Does that mean what I think it means?
06:07:47 <elliott> s/Aenaemic/Anaemic/
06:07:47 <pikhq> Yeah, at that point GCC might OOM...
06:07:53 <SgeoN1> For some reason I was under the impression that swap should = physical
06:08:50 <elliott> Did you use jfs. It is the best.
06:09:10 <SgeoN1> I can disable swap if I need to right?
06:09:23 <elliott> Yes.
06:09:26 <elliott> Why would you need to?
06:09:40 <SgeoN1> Damage to flash drove
06:09:43 <SgeoN1> Drive
06:09:47 <elliott> What?
06:09:50 <SgeoN1> This flash drive is expensove
06:09:53 <CakeProphet> it takes about 100,000 flashes.
06:10:01 <pikhq> What SSD is it?
06:10:01 <CakeProphet> before that happens.
06:10:08 <CakeProphet> depending on the drive.
06:10:19 <elliott> There's no way you're going to break the SSD.
06:10:20 <SgeoN1> Pikhq, how do I determine
06:10:30 <CakeProphet> SgeoN1: but yes "swapoff -a" will disable swap.
06:10:37 <elliott> Wait, how do you have an expensive SSD on a shitty computer?
06:10:59 <SgeoN1> It's just a thumb drive
06:11:01 <CakeProphet> elliott: he's using a USB port I'd imagine.
06:11:07 <CakeProphet> they're pretty cool
06:11:10 <CakeProphet> you should check them out.
06:11:19 <elliott> CakeProphet: He said it was expensive.
06:11:21 <SgeoN1> Costs less than aa brand new computer I'm only going to be using for a month
06:11:21 <CakeProphet> I use one to attach a 1.5 TB hard drive to my laptop.
06:11:28 <CakeProphet> elliott: hey some people are poor.
06:11:31 <pikhq> SgeoN1: Oh. Um. Swap will rape it.
06:11:46 <elliott> CakeProphet: Sure.
06:11:57 <elliott> CakeProphet: What's the most expensive pen drive though, really?
06:12:20 <CakeProphet> probably like $20
06:12:45 <CakeProphet> 32 GB thumb drive for $32
06:12:47 <SgeoN1> I'm going to leave 2gb unused but no swap partition. I can add one later, right?
06:13:07 <CakeProphet> with 1gb I highly recommend some form of swap.
06:13:18 <pikhq> CakeProphet: Depends on the distro, actually.
06:13:20 <elliott> SgeoN1: Dude, put some swap on the actual hard drive.
06:13:30 <SgeoN1> There is no hard drive.
06:13:38 <elliott> SgeoN1: What the fuck is this machine?
06:13:40 <SgeoN1> See if you can remember why.
06:13:52 <elliott> Have you considered putting a new hard drive in.
06:14:15 <CakeProphet> I'm going on the assumption that Sgeo is poor.
06:14:37 <SgeoN1> Not poor, it's just painful to ask my dad for stuff
06:14:55 <CakeProphet> most adults have more money than they put on...
06:15:15 <CakeProphet> I don't even work full time and buying a 1.5 TB external was almost negligible.
06:16:47 <elliott> SgeoN1: I thought you got your own card finally.
06:16:53 -!- ive has quit (Ping timeout: 260 seconds).
06:17:02 <elliott> CakeProphet: Selection bias.
06:17:07 <SgeoN1> Unknown keyword in configuration file
06:17:11 <elliott> What.
06:17:14 <elliott> Hey, what's eight plus four. I'm in tedium mode, can't do thinking.
06:17:15 <SgeoN1> What the fucking fuck
06:17:22 <SgeoN1> 12
06:17:32 <elliott> Thanks bro.
06:18:19 <CakeProphet> elliott: yes I am a scientist always.
06:19:03 <elliott> CakeProphet: "That's a fancy word so your observation of my fallacy is irrelevant"?
06:19:03 <elliott> ?hoogle zip3
06:19:04 <lambdabot> Prelude zip3 :: [a] -> [b] -> [c] -> [(a, b, c)]
06:19:04 <lambdabot> Data.List zip3 :: [a] -> [b] -> [c] -> [(a, b, c)]
06:19:04 <lambdabot> Prelude unzip3 :: [(a, b, c)] -> ([a], [b], [c])
06:19:16 <CakeProphet> I, in no way, use anecdotal evidence to help myself understand the world.
06:20:10 <CakeProphet> :t sequence
06:20:11 <lambdabot> forall (m :: * -> *) a. (Monad m) => [m a] -> m [a]
06:20:13 <SgeoN1> Thank you Google.
06:20:14 <elliott> Obviously this is what I was criticising.
06:20:16 <elliott> Obviously.
06:20:20 <CakeProphet> zip kind of reminds me of sequence.
06:20:32 <CakeProphet> er, unzip
06:21:58 <CakeProphet> elliott: I just find it silly to treat something like this scientifically. I'm not trying to say you're wrong.
06:22:02 -!- kmc has quit (Quit: Leaving).
06:22:03 <SgeoN1> return kind of reminds me of Just (note: this should not be used to imply I think cps thing is similar)
06:22:06 <CakeProphet> and yes, I know what a selection bias is.
06:22:35 <elliott> CakeProphet: It is absolutely nothing to do with science, I was attempting to convey in a simple manner that "most adults have more money than they put on..." is so ridiculously reliant on various social factors relating to you that it means almost nothing.
06:22:53 <zzo38> In the Maybe monad, return = Just
06:23:08 <CakeProphet> >_>
06:23:33 <CakeProphet> elliott: I'm sorry but all of those sentences are so reliant on social factors that I'm having trouble understanding them.
06:23:37 <CakeProphet> I time travelled from the 10th century.
06:23:50 <elliott> fizzie: Oi.
06:23:56 <elliott> CakeProphet: Yeah, I don't have time for this.
06:24:34 <zzo38> Apparently to do classical logic in Curry-Howard you use call/cc; how exactly does that work?
06:24:35 <CakeProphet> help what is this thing I'm typing into.
06:24:53 <zzo38> IRC
06:26:30 <CakeProphet> elliott: in the future I will try not to rely too much on my experience.
06:27:02 <CakeProphet> which is, of course, applicable to every human being on the planet.
06:27:14 <elliott> $ MultiBlockChangeData (zipWith3 makeItem coords types metadata)
06:27:14 <elliott> where -- FIXME: might be Word16
06:27:14 <elliott> unpackCoords :: Int16 -> (Word8,Word8,Word8)
06:27:14 <elliott> unpackCoords sh = (fromIntegral (sh `shiftL` 12), fromIntegral ((sh `shiftL` 8) .&. 0xF), fromIntegral (sh .&. 0xF))
06:27:14 <elliott> makeItem :: (Word8,Word8,Word8) -> Int8 -> Int8 -> MultiBlockChangeItem
06:27:16 <elliott> makeItem (x,y,z) blockType metadata = MultiBlockChangeItem x y z (Block (BlockID blockType) metadata)
06:27:19 <elliott> askldfjgnh
06:27:21 <elliott> instance Serialize MultiBlockChangeData where
06:27:23 <elliott> get = do
06:27:25 <elliott> count <- fromIntegral <$> (SE.get :: Get Int16)
06:27:27 <elliott> coords <- replicateM count (unpackCoords <$> SE.get)
06:27:29 <elliott> types <- replicateM count SE.get
06:27:31 <elliott> metadata <- replicateM count SE.get
06:27:34 <elliott> return $ MultiBlockChangeData (zipWith3 makeItem coords types metadata)
06:27:35 <elliott> where -- FIXME: might be Word16
06:27:37 <elliott> unpackCoords :: Int16 -> (Word8,Word8,Word8)
06:27:41 <elliott> unpackCoords sh = (fromIntegral (sh `shiftL` 12), fromIntegral ((sh `shiftL` 8) .&. 0xF), fromIntegral (sh .&. 0xF))
06:27:44 <elliott> makeItem :: (Word8,Word8,Word8) -> Int8 -> Int8 -> MultiBlockChangeItem
06:27:46 <elliott> makeItem (x,y,z) blockType metadata = MultiBlockChangeItem x y z (Block (BlockID blockType) metadata)
06:27:49 <elliott> jkasnLDFGHKLGDD;
06:27:50 <CakeProphet> wow that's beautiful.
06:27:51 <elliott> Sorry, fell asleep at the wheel.
06:28:26 <CakeProphet> are you sure there's not some clever way to reuse a bunch of code for all of this?
06:28:33 <CakeProphet> and avoid the boilerplate?
06:29:03 <zzo38> If Haskell had better macros you might be able to do so.
06:29:53 <elliott> CakeProphet: All of these data types are pretty much wildly different for no reason, so no.
06:30:11 <itidus21> just occured to me if i ever get really bored i could do war and peace the graphic novel
06:30:13 <elliott> Right, to hell with map data; I'm parsing it into a raw bytestring for now and fixing it later.
06:30:32 <itidus21> i would read it through once.. and then a second time as i developed the graphic novel
06:31:13 <CakeProphet> elliott: wildly? at least it's exciting then.
06:31:22 <elliott> CakeProphet: Not that wildly.
06:31:56 <itidus21> writing entertainment software in haskell is akin to alchemy.
06:32:04 <monqy> what
06:32:11 <monqy> itidus21 you don';t even know haskselle
06:32:15 <CakeProphet> so perhaps 5 coals on this hookah was overkill.
06:32:25 <itidus21> alchemy isn't a bad thing
06:32:35 <CakeProphet> monqy: you can't argue with itidus21's reason.
06:32:38 <elliott> how do you know it's alchemy, you know almost nothing about haskell
06:33:02 <itidus21> cos knowing shit is too much work.
06:33:35 <CakeProphet> it's like alchemy in that itidus21 doesn't understand either.
06:34:02 <itidus21> in other words, it's much easier for me to say float sqrt(int x) { return 6874.236; }than to write an actual float sqrt(int x);
06:34:12 <elliott> is that a metaphor for what you do on IRC
06:34:33 <itidus21> more than IRC
06:34:41 <itidus21> i used to believe my own lies IRL once
06:34:46 <CakeProphet> it's metonymy for itidus21 is a sqrt function.
06:35:26 <pikhq> itidus21: alchemy :: a -> b
06:35:44 <CakeProphet> alchemy lead :: Gold
06:35:51 <itidus21> it's as if i am on the precipice of doing actual work, but i am frozen in my tracks
06:36:23 <CakeProphet> fungot: blahblahbaljbakherihe
06:36:24 <fungot> CakeProphet: i am aware, commissioner, ladies and gentlemen, the problem of peripherality. technological advance particularly in the world' s largest trading power is to be included. following on from transparency, we are seeing today in most of our countries must co-ordinate their research, development, environmental protection, the regulation which we all seem to be blowing in this chamber who would be affected, and continues
06:37:38 <CakeProphet> I am blowing a lot of regulations right now.
06:37:49 <itidus21> im considering meditation
06:37:50 <CakeProphet> who would be affected, and continues.
06:37:57 <SgeoN1> Maybe I should be using Lubuntu?
06:38:00 <fizzie> At wurk.
06:38:43 <SgeoN1> This is so ducking slow
06:38:50 <itidus21> my working definition of alchemy is, in striving for the impossible countless wonderful discoveries are made
06:38:56 <CakeProphet> SgeoN1: are you perhaps using a duck typed language?
06:39:09 <SgeoN1> Duck you
06:39:13 <CakeProphet> quack.
06:39:43 <itidus21> except that writing entertainment software in haskell isn't impossible so the metaphor breaks at that point
06:39:54 <CakeProphet> what entertainment software are you talking about.
06:40:06 <CakeProphet> fungot: fuuuuuck
06:40:06 <fungot> CakeProphet: mr president, i have told this house: it is to be deleted from the motion for a resolution that this house will take note of the question to the council.
06:40:14 <CakeProphet> ^europarl homestuck
06:40:18 <CakeProphet> fungot: lalalalala girst
06:40:19 <fungot> CakeProphet: mr president, commissioner, ladies and gentlemen, you have today before you for the 66 votes. those who sometimes worry that in seeking such guarantees parliament is trying to make a few comments. how can we help to provide an insight into how brussels manages to take over public sectors which are highly dependent on transatlantic travel. other eu airlines also make a success of the programme.
06:40:24 <CakeProphet> ^style homestuck
06:40:24 <fungot> Selected style: homestuck (Homestuck pages 1901-4673)
06:40:25 <CakeProphet> fungot: lalalalala girst
06:40:25 <fungot> CakeProphet: have a look.... :) ham, potatoes, and squash. jade's radioactive, omnipotent, space-warping dog named...
06:40:26 <itidus21> in this, i am suggesting chemistry and traditional chinese medicine to be fruits of various forms of alchemy
06:40:38 <fizzie> CakeProphet: "^europarl homestuck"?
06:40:49 <CakeProphet> fizzie: sometimes my fingers move faster than I think.
06:40:57 <fizzie> Yes, but.
06:41:03 <CakeProphet> shhhhh
06:41:16 <itidus21> ok.. bravo haskell
06:41:19 <itidus21> for great good
06:41:38 <CakeProphet> are you learning it now finally?
06:43:20 <itidus21> i gather haskell is subservient to LC
06:44:16 <itidus21> if i discuss this topic.. there will be agony all around
06:44:43 <elliott> ?hoogle getArgs
06:44:44 <lambdabot> System.Environment getArgs :: IO [String]
06:44:54 <CakeProphet> itidus21: that doesn't really mean anything so no.
06:44:56 <itidus21> wiki tells me backus's function-level programming is not the same thing as functional programming languages
06:45:12 <elliott> fizzie: The best europarl.
06:45:42 <CakeProphet> fungot: lalalalalaa weersddf
06:45:50 <itidus21> haskell can be broken down into a set of assembly language instructions
06:45:55 <elliott> -- TODO FIXME: Parse this properly rather than this ridiculously lazy hack
06:45:55 <elliott> data MapData = MapData !ByteString deriving (Eq, Show)
06:45:55 <elliott> instance Serialize MapData where
06:45:55 <elliott> get = MapData <$> getLengthPrefixedByteString
06:45:55 <elliott> put (MapData s) = putLengthPrefixedByteString s
06:45:58 <elliott> fizzie: Behold my map data parser.
06:46:06 <CakeProphet> itidus21: -sigh-
06:46:10 <itidus21> layers
06:46:20 <itidus21> human readable layer translated into machine code
06:47:58 <itidus21> therefore, an assembly language programmer could perform the same computations as a haskell programmer.. but he is unlikely to because of the obvious reasons which led to haskell language existing
06:48:50 <CakeProphet> itidus21: yes Haskell is compiled.
06:48:56 <CakeProphet> generally.
06:49:03 <CakeProphet> GHC compiles it.
06:49:06 <itidus21> interpreters still ultimately are machine code
06:49:12 <CakeProphet> though Hugs for example interprets it.
06:49:45 <elliott> SHandshake (LoggedIn "\1536\NUL\NUL\NUL\16384\NUL\EOT\NUL\NUL\288\8086\768\2048\42752\13568\42752\13824\42752\13312\42752\13571\DC4\167cWelcome, ehird\167c! \768\10496\42752\26112\21504\30976\28672\25856\8192\42752\25344\12032\26624\25856\27648\28672\42752\26112\8192\26112\28416\29184\8192\24832\8192\27648\26880\29440\29696\8192\28416\26112\8192\25344\28416\27904\27904\24832\28160\25600\29440\11776\8195\&0Visit nerd.nu for information on other se
06:49:45 <elliott> rvers. \768\5888\42752\14080\22784\28416\29952\8192\26624\24832\30208\25856\8192\28160\28416\8192\28160\25856\30464\8192\27904\24832\26880\27648\11800\NUL<\13055\65519\57600\EOT\33023\65515\38645\DC1\NUL\DLE\65407\7168\NUL\15360\54781\36096\CAN\NULM\23807\65520\63232\b\NUL\ACK\34376\NUL\DEL\7168\NUL\19712\253\36096\CAN\NULX\23807\65522\11776\a\63488\EOT\48513\NUL\DEL\7168\NUL\22528\1799\49662\35864\NULg\23807\65524\26112\a\57344\STX\3613\NUL\DEL\
06:49:46 <elliott> 7168\NUL\26368\253\36096\CAN\NULe\13567\65525\38400\b\255\65529\16546\NUL\DEL\7168\NUL\25858\3325\3
06:49:48 <elliott> fizzie: 'Hokay, that is definitely not right.
06:50:16 <CakeProphet> itidus21: you can program right? these aren't new ideas to you are they?
06:50:29 <elliott> elliott@katia:~/Code/mchost$ mkfifo fifo; nc p.nerd.nu 25565 <fifo | tee serverlogtwo | nc -l 9999 >fifo
06:50:32 <elliott> fizzie: Does that look right to you? :p
06:51:26 <itidus21> well, driving a car (something i can't do).. all you have to physically do is turn a wheel, change gears, and press pedals, and i suppose percieving the universe too while driving.. ie being concious
06:51:31 <itidus21> focusing on the road
06:52:06 <elliott> ok
06:52:26 <itidus21> however... haskell coders are better at driving the PC in some computations than asm coders
06:52:33 <CakeProphet> no.
06:52:36 <elliott> ok
06:52:52 <SgeoN1> I go to install Chromium. I decide to view the info for Dooble. I see reviews that are clearly for Chromium.
06:52:53 <CakeProphet> language and programming skill are independent of each other.
06:53:15 <elliott> CakeProphet: Not entirely.
06:55:09 <elliott> Hmph, what _is_ it with handshakes these days?
06:55:21 <CakeProphet> elliott: black people added all sorts of crazy shit is what happened.
06:55:26 <elliott> I guess my handshake thing is broken
06:55:46 <elliott> str <- getTextUTF16be
06:55:46 <elliott> case str of
06:55:46 <elliott> "-" -> return NoAuthentication
06:55:46 <elliott> "+" -> return Authenticate
06:55:46 <elliott> _ -> return (LoggedIn str)
06:55:48 <elliott> looks ok to me :(
06:56:06 <CakeProphet> would be nice to have some kind of case-bind
06:56:22 <itidus21> well should i consider a lambda expression as an infinite tree?
06:56:27 <CakeProphet> no
06:56:37 <CakeProphet> a finite tree.
06:57:02 <itidus21> but to use the tree you keep growing it?
06:57:32 <CakeProphet> no you would expand and reduce it as necessary.
06:58:07 <CakeProphet> well... I suppose it /could/ be a lazily evaluated tree...
06:58:08 <itidus21> well, an expression is surely of no use on its own
06:58:17 <CakeProphet> itidus21: here read this: http://mitpress.mit.edu/sicp/full-text/book/book.html
06:58:51 <itidus21> second person to refer me to that book. it must be good :D
06:58:53 <elliott> i think sicp might be at a slightly higher level than itidus21 is at.
06:59:18 <itidus21> tidus was one day complaining that no book walks you through completely creating a compiler
06:59:25 <itidus21> in another channel
06:59:33 <itidus21> and 2 books were mentioned
06:59:41 <CakeProphet> that book does I believe.
06:59:46 <itidus21> oh wait.. thats a lambda on the front
07:00:00 <itidus21> with a sun around it
07:00:15 <CakeProphet> yes programming is wizardry not alchemy.
07:01:19 <itidus21> i'll yield on my alchemy comment just to play fair
07:01:32 <itidus21> ^s/fair/nice
07:02:24 <CakeProphet> elliott: I think SICP starts off simply enough to allow itidus21 to catch on.
07:02:38 <CakeProphet> and then it gradually builds on previous concepts.
07:03:06 <fizzie> elliott: That "Welcome, ehird" thing in your SHandshake is part of the server-to-client chattery; it shouldn't be in your 'str'.
07:03:30 <elliott> fizzie: Yes, but more importantly, it shouldn't start with \1536.
07:03:35 <elliott> It should be -, +, or a hash. Probably -.
07:03:41 <elliott> So I am ``not knowing of what is happening''.
07:05:10 <CakeProphet> ``''
07:05:13 <HackEgo> ​/home/hackbot/hackbot.hg/multibot_cmds/lib/limits: line 5: exec: `'': not found
07:05:31 <fizzie> What's your getTextUTF16be like? (Also altenratively: hexdump -C serverlogtwo | head -n 20 or so.)
07:05:35 <itidus21> CakeProphet: i have this concept in the backlog of programming where errors are acceptable
07:05:38 <fizzie> ALTEN RATIVE.
07:05:47 <itidus21> sorry rewording now to make more sense
07:05:48 -!- ive has joined.
07:05:48 <elliott> fizzie:
07:05:49 <elliott> getTextUTF16be :: Get Text
07:05:49 <elliott> getTextUTF16be = do
07:05:49 <elliott> len <- SE.get :: Get Word16
07:05:49 <elliott> TE.decodeUtf16BEWith TEE.ignore <$> SE.getBytes (fromIntegral len * 2)
07:06:00 <CakeProphet> itidus21: can you please what that sentence even means.
07:06:03 <elliott> (That TEE.ignore thing just replaces erroneous UTF with the empty string.)
07:06:14 <itidus21> CakeProphet: i have this concept on the drawing board, of making a programming system where errors are acceptable
07:06:20 <elliott> 00000000 02 00 10 00 39 00 35 00 34 00 34 00 61 00 32 00 |....9.5.4.4.a.2.|
07:06:20 <elliott> 00000010 39 00 39 00 65 00 36 00 31 00 35 00 66 00 31 00 |9.9.e.6.1.5.f.1.|
07:06:20 <elliott> 00000020 36 00 38 01 00 0e b8 b0 00 00 00 00 00 00 00 84 |6.8.............|
07:06:20 <elliott> 00000030 5f ed 00 00 00 00 00 02 80 3c 06 00 00 00 00 00 |_........<......|
07:06:20 <elliott> 00000040 00 00 40 00 00 00 00 04 00 00 00 00 01 20 1b 87 |..@.......... ..|
07:06:20 <elliott> 00000050 03 00 08 00 a7 00 35 00 a7 00 36 00 a7 00 34 00 |......5...6...4.|
07:06:22 <elliott> 00000060 a7 00 35 03 00 14 00 a7 00 63 00 57 00 65 00 6c |..5......c.W.e.l|
07:06:24 <elliott> 00000070 00 63 00 6f 00 6d 00 65 00 2c 00 20 00 65 00 68 |.c.o.m.e.,. .e.h|
07:06:26 <elliott> 00000080 00 69 00 72 00 64 00 a7 00 63 00 21 00 20 03 00 |.i.r.d...c.!. ..|
07:06:28 <elliott> 00000090 29 00 a7 00 66 00 54 00 79 00 70 00 65 00 20 00 |)...f.T.y.p.e. .|
07:06:50 <elliott> fizzie: It does seem like it's started logging "too late". But all I did was: ... well, I quoted the command earlier; can't find it now.
07:06:55 <CakeProphet> itidus21: what kinds of errors.
07:07:04 <fizzie> elliott: Well, the handshake looks fine: 02, 0x0010 = 16 characters, then "00 39 00 35 00 34 00 34 00 61 00 32 ...".
07:07:23 <itidus21> CakeProphet: the idea is simple. program in problem domains where errors don't matter
07:07:23 <elliott> fizzie: But it should start with"+".
07:07:25 <elliott> "This is the first packet sent when the client connects and is used for Authentication. If the hash is '-', then the client continues without doing name authentication. If the hash is a '+', the client sends the server password in the login request. (Note that this hash, as of the latest version of the Beta server, is a randomly generated long in hexadecimal form, and has nothing to do with the client or the server he is connected to)"
07:07:36 <CakeProphet> itidus21: such. as.
07:07:38 <elliott> itidus21: any such domain is trivially implemented by this program: main = return ()
07:07:46 <elliott> it does nothing; if this is an error, it does not matter, because errors are acceptable
07:07:51 <elliott> s/with"+"/with "+"/
07:07:55 <fizzie> elliott: No, it should be a hash. '+' is only used for password-without-minecraft.net-name-verification.
07:07:57 <itidus21> humm
07:08:08 <fizzie> "A unique, per-connection hash, or '-', or '+'"
07:08:32 <itidus21> rendering a frame in a video game doesn't really matter if it is wrong..
07:08:41 <CakeProphet> uh..
07:09:01 <itidus21> player might get a bit emotionally upset.. or may experience upset eyes from trying to watch poorly rendered frames
07:09:18 <CakeProphet> poorly rendered is not wrongly rendered though
07:09:20 <itidus21> but overall, it doesn't matter if it's right
07:09:32 <CakeProphet> I can't play a game if it renders a black screen.
07:09:49 <CakeProphet> or crashes in the process of rendering.
07:10:24 <itidus21> a few aspects are.. errors should be restricted.. like it shouldn't bring down the whole system
07:10:40 <CakeProphet> are you familiar with exception handling?
07:10:45 <itidus21> and shouldn't be anything which needs security
07:11:12 <itidus21> well.. some things don't really need to be handled
07:11:20 <itidus21> its more or less ok ifthey're wrong
07:11:30 <elliott> <fizzie> elliott: No, it should be a hash. '+' is only used for password-without-minecraft.net-name-verification.
07:11:33 <elliott> fizzie: That exists?
07:11:37 <elliott> Is that new?
07:12:12 -!- ive has quit (Quit: leaving).
07:12:19 <itidus21> CakeProphet: the model for my idea is a person playing music.. its basically ok if they make a mistake, depending on the audience
07:12:20 <fizzie> I believe it's the old thing, but I'm no expert. In any case, the hash is supposed to be either only "-", only "+" or that random hex-string you've got there.
07:12:33 <CakeProphet> itidus21:
07:12:54 <zzo38> Can you do comma categories in Haskell?
07:12:58 <fizzie> elliott: Not that I can immediately explain where that "\1536\NUL\NUL\NUL\16384..." comes from. In bytes it's that "06 00 00 00 00 00 00 00 40 00 ..." thing which starts a bit after halfway of the fourth line of your hexdump.
07:13:18 <elliott> Hmm. Why on _earth_ is the handshake being read wrong?
07:13:19 * elliott tweaks the getter
07:13:52 <itidus21> CakeProphet: so as if to say.. the next note played can be ok even if the last note was not ok... and the next frame rendered can be ok even if the last one wasn't
07:14:36 <CakeProphet> that's just an emergent property of a specific system, or proper error handling. not something you can design to work always for any program ever, as it would work in a programming language.
07:14:44 <fizzie> I would understand if it started with the correct hash (that'd be just broken length field), but starting the string 54 bytes too late is rather strange.
07:15:28 <fizzie> Sorry, 55. I think.
07:15:35 <elliott> get = LoggedIn `fmap`getTextUTF16be
07:15:37 <elliott> does not help at all.
07:15:42 <CakeProphet> itidus21: basically you want erroneous operations to return some kind of null or identity/zero value. In that case you want Perl.
07:15:50 * elliott tries making the field a string field.
07:16:20 <elliott> That doesn't help either. :/
07:16:34 <itidus21> my ideas are almost always really bad. im cool with knowing this.
07:16:38 <elliott> fizzie: Are you _sure_ that string looks right? :p
07:16:45 <fizzie> Well, it looks right to me.
07:16:52 <elliott> My client dump strings all parse perfectly:
07:17:03 <elliott> 00000000 02 00 05 00 65 00 68 00 69 00 72 00 64 01 00 00 |....e.h.i.r.d...|
07:17:03 <elliott> 00000010 00 11 00 05 00 65 00 68 00 69 00 72 00 64 00 00 |.....e.h.i.r.d..|
07:17:04 <elliott> 00000020 00 00 00 00 00 00 00 00 00 00 00 00 00 00 0d 40 |...............@|
07:17:04 <elliott> 00000030 72 b6 00 00 00 00 00 40 44 80 00 00 00 00 00 40 |r......@D......@|
07:17:04 <elliott> 00000040 45 4f 5c 29 00 00 00 40 44 ec 00 00 00 00 00 43 |EO\)...@D......C|
07:17:07 <elliott> And that starts with a handshake too.
07:17:55 <fizzie> I mean, "02 00 10 00 39 00 35 00 34 00 34 00 61 00 32 00 39 00 39 00 65 00 36 00 31 00 35 00 66 00 31 00 36 00 38" -- you're supposed to read the byte 02, go all "ah, a handshake", then read a bigendian Word16 0x0010 = 16, then read 32 bytes ("00 39 .. 00 38") and decode those as UTF-16.
07:18:11 <CakeProphet> I need some kind of lock that prevents me from using irc for a while that also isn't /quit
07:18:32 <fizzie> The handshake in that, "02 00 05 00 65 00 68 00 69 00 72 00 64", is very similar.
07:18:43 <fizzie> (And after both there's a login packet starting with 01.)
07:18:45 <CakeProphet> hmmm...
07:18:55 <elliott> , packet 0x02 "SHandshake"
07:18:55 <elliott> [ PF.handshake "handshake" -- FIXME: handshake is a rubbish name
07:18:55 <elliott> ]
07:18:56 <elliott> :/
07:19:04 -!- CakeProphet has left ("fungot").
07:19:07 -!- CakeProphet has joined.
07:19:22 <elliott> fizzie: I guess I'll debugtrace the byte count it thinks it gets.
07:19:23 <zzo38> CakeProphet: What exactly do you intend to make?
07:19:37 <CakeProphet> I was seeing if fungot read part lines.
07:19:55 <zzo38> No, I think it read only PRIVMSG lines as far as I can tell.
07:20:00 <fizzie> ^source
07:20:00 <fungot> http://git.zem.fi/fungot/blob/HEAD:/fungot.b98
07:20:13 <CakeProphet> fizzie: I'm not even going to begin to read that. :P
07:20:15 <fizzie> Check on line 105.
07:20:28 <fizzie> 15G0"GSMVIRP"Q| and so on.
07:20:40 <elliott> fizzie: Okay, _what_.
07:20:43 <fizzie> If not, it just goes back to read the next message.
07:20:48 <elliott> 16
07:20:48 <elliott> 0
07:20:48 <elliott> 32828
07:20:48 <elliott> SHandshake (LoggedIn "9544a299e615f168")
07:20:48 <elliott> SLogin (EntityID 964784) "" 8675309 False (WorldID 0) 0 0 0
07:20:49 <elliott> SHandshake (LoggedIn "\1536\NUL\NUL\NUL\16384\NUL\EOT\NUL\NUL\288\7047\768\2048\42752\13568\42752\13824\42752\13312\42752\13571\DC4\167cWelcome, ehird\167c! \768\10496\42752\26112\21504\30976\28672\25856\8192\42752\25344\12032\26624\25856\27648\28672\42752\26112\8192\26112\28416\29184\8192\24832\8192\27648\26880\29440\29696\8192\28416\26112\8192\25344\28416\27904\27904\24832\28160\25600\29440\11776\8195\&0Visit nerd.nu for information on other se
07:20:54 <elliott> rvers. \768\5888\42752\14080\22784\28416\29952\8192\26624\24832\30208\25856\8192\28160\28416\8192\28160\25856\30464\8192\27904\24832\26880\27648\11800\SO\16373\14079\65530\46592\ENQ\768\r\43526\NUL\DEL\7168\3647\62975\60155\9984\34328\SO\16374\13311\65532\52736\ETX\9472\f\46950\NUL\DEL\7168\3647\62976\28415\54272\6424\SO\16371\14079\65529\NUL\1152\NUL\3766\17664\NUL\32540\SO\16371\65383\64909\65521\6144\3766\9522\65535\64629\NUL\736\NUL\4517\5324
07:20:59 <elliott> 8\4352\
07:21:01 <elliott> I changed nothing. Why did the parse change?
07:21:03 <elliott> What is going _on_?
07:21:21 * elliott does a clean rebuild out of superstition.
07:21:31 -!- CakeProphet has quit (Quit: aiwriavniuqenehweer).
07:21:34 <elliott> OK, now it reliably parses the above.
07:21:40 <elliott> SHandshake (LoggedIn "9544a299e615f168")
07:21:40 <elliott> SLogin (EntityID 964784) "" 8675309 False (WorldID 0) 0 0 0
07:21:40 <elliott> SHandshake (LoggedIn "\1536\NUL\NUL\NUL\16384\NUL\EOT\NUL\NUL\288\7047\768\2048\42752\13568\42752\13824\42752\13312\42752\13571\DC4\167cWelcome, ehird\167c! \768\10496\42752\26112\21504\30976\28672\25856\8192\42752\25344\12032\26624\25856\27648\28672\42752\26112\8192\26112\28416\29184\8192\24832\8192\27648\26880\29440\29696\8192\28416\26112\8192\25344\28416\27904\27904\24832\28160\25600\29440\11776\8195\&0Visit nerd.nu for information on other se
07:21:44 <elliott> rvers. \768\5888\42752\14080\22784\28416\29952\8192\26624\24832\30208\25856\8192\28160\28416\8192\28160\25856\30464\8192\27904\24832\26880\27648\11800\SO\16373\14079\65530\46592\ENQ\768\r\43526\NUL\DEL\7168\3647\62975\60155\9984\34328\SO\16374\13311\65532\52736\ETX\9472\f\46950\NUL\DEL\716
07:21:48 <elliott> So that's a slightly less ridiculous parsing.
07:21:53 <fizzie> At least SHandshake, SLogin, broken SHandshake makes more sense, since that explains why it starts "\1536\NUL\NUL\NUL\16384..."
07:22:10 <elliott> Ye-ees, but it still doesn't explain why the broken.
07:23:23 <elliott> <Hmph.
07:23:26 <elliott> s/<//
07:25:00 <fizzie> The login packet is: 01, 00 0e b8 b0 (played id), 00 00 (unused), 00 00 00 00 00 84 5f ed (seed), 00 00 00 00 (server mode: survival), 00 (dim: normal), 02 (unknown byte), 80 (world height: 128), 3c (max players: 60)
07:25:11 <elliott> That seems right.
07:25:24 <fizzie> For some reason, your thing starts to read a new packet from that 02 byte on.
07:25:32 <elliott> Oh. What?
07:25:50 <elliott> , packet 0x01 "SLogin"
07:25:50 <elliott> [ PF.entityID "entity"
07:25:50 <elliott> , PF.string "unused"
07:25:50 <elliott> , PF.long "mapSeed" -- as above
07:25:50 <elliott> , PF.bool "isCreative" -- as above
07:25:51 <elliott> , PF.worldID "world"
07:25:53 <elliott> , PF.byte "unknown"
07:25:55 <elliott> , PF.ubyte "worldHeight"
07:25:57 <elliott> , PF.ubyte "maxPlayers"
07:25:59 <elliott> ]
07:26:01 <elliott> It... shouldn't be doing anything tricksy there.
07:26:16 <elliott> Uh, wait.
07:26:19 <elliott> How come the world height isn't in
07:26:21 <elliott> <elliott> SLogin (EntityID 964784) "" 8675309 False (WorldID 0) 0 0 0
07:26:22 <elliott> ?
07:26:48 <fizzie> Weird.
07:27:11 <fizzie> I suppose it parses your client-side login just fine, and that has the same fields?
07:27:24 <fizzie> Well, same-ish.
07:27:28 <fizzie> Same data types, anyhow.
07:27:47 <elliott> CHandshake "ehird"
07:27:48 <elliott> CLogin 17 "ehird" 0 0 0 0 0 0
07:27:52 <elliott> I'm... not so sure.
07:27:58 <elliott> Unless they're meant to be 0.
07:28:06 <fizzie> They are, yes.
07:28:37 -!- CakeProphet has joined.
07:28:38 -!- CakeProphet has quit (Changing host).
07:28:38 -!- CakeProphet has joined.
07:28:41 <elliott> Right.
07:28:53 <elliott> So something is rotten in the state of... uh, I can't bring myself to say Minecraftia.
07:29:30 <elliott> newtype WorldID = WorldID Int8 deriving (Eq, Show, Serialize)
07:29:30 <elliott> Well, that's right.
07:29:47 <fizzie> Lunchtime, have fun with it. :p
07:29:51 -!- sebbu2 has joined.
07:29:51 -!- sebbu2 has quit (Changing host).
07:29:51 -!- sebbu2 has joined.
07:30:23 -!- itidus21 has left ("Leaving").
07:30:40 <elliott> I shall never: forgive fizzie.
07:30:42 <fizzie> Anyhow, based on those bytes I think you should end up with "SLogin (EntityID 964784) "" 8675309 False (WorldID 0) 0 128 60".
07:31:21 <elliott> Um.
07:31:25 <elliott> fizzie: "02 (unknown byte)"
07:31:28 <elliott> Did that become a 0?
07:31:34 <fizzie> Oh. Whoops.
07:31:36 <fizzie> Right.
07:31:46 <fizzie> Well, 2, 128, 60 then.
07:31:50 <elliott> SLogin (EntityID 964784) "" 8675309 False (WorldID 0) 2 128 60
07:31:52 <elliott> Hmmmmmmm.
07:32:03 <fizzie> IT KEEPS HAPPENING
07:32:10 <elliott> No that didn't happen.
07:32:13 <elliott> That's just what I'm aiming for.
07:32:15 <fizzie> Ah. Aw.
07:32:22 <fizzie> I was hoping you had some nondeterminism there.
07:32:29 <elliott> That would be nice.
07:32:35 <elliott> It's the only thing that could improve this, uh, experience.
07:32:44 -!- sebbu3 has quit (Ping timeout: 260 seconds).
07:32:49 <fizzie> Anyway, the seed is right; 0x0000000000845fed == 8675309.
07:33:24 <fizzie> It's as if it has stopped reading after the WorldID and padded the rest with zeros.
07:33:36 <elliott> Yes, but... that shouldn't be happening.
07:33:40 <elliott> That's not... a thing that happens.
07:33:43 <fizzie> (And then continued from after the WorldID as if it was a new packet from there.)
07:33:47 <elliott> There is no code to suddenly stop reading and keep 0ing.
07:33:53 <elliott> It is a feature I neglected to write.
07:34:03 <fizzie> I shall lurch anyhow. ->
07:34:04 -!- Vorpal has joined.
07:34:28 <olsner> elliott: are you sure you read all the bytes from the socket? :)
07:34:43 <Vorpal> wtf, windows 8 looks like a disaster from the screenshots.
07:35:12 <Vorpal> it /seems/ like it is basically running something like android or iOS on a desktop... Which is stupid.
07:35:31 <olsner> maybe that's not a relevant failure in the haskell socket libs, but in C it's easy to accidentally only fill in part of a buffer
07:35:35 <elliott> olsner: It's not socket.
07:35:38 <elliott> I'm reading from a dumped file.
07:35:43 <elliott> (reverse-i-search)`| tee': mkfifo fifo; nc p.nerd.nu 25565 <fifo | tee serverlogtwo | nc -l 9999 >fifo
07:35:48 <elliott> Please feel free to point out errors.
07:36:19 <Vorpal> elliott, eh, are you trying to reply minecraft server data?
07:36:24 <elliott> I've successfully dumped a client log with:
07:36:25 <Vorpal> replay*
07:36:26 <elliott> (reverse-i-search)`anotherlog': mkfifo fifo; nc p.nerd.nu 25565 <fifo | nc -l 9999 | tee fifo >anotherlog
07:36:29 <elliott> so I think this should be fine.
07:36:30 <elliott> Vorpal: No.
07:36:35 <Vorpal> ah okay
07:36:49 <Vorpal> elliott, I would just use tcpdump to do it. Seems easier
07:36:57 <olsner> Vorpal: yes - the UI is inspired by, if not based on, windows phone 7
07:37:11 <elliott> Vorpal: Show me the tcpdump line.
07:37:19 <elliott> I know how to use nc, pipes, and tee; I don't know how to use tcpdump.
07:37:22 <Vorpal> elliott, I would launch wireshark and use that for it
07:37:41 <Vorpal> since wireshark uses tcpdump as a backend iirc, or something compatible at least
07:37:53 <Vorpal> olsner, yeah, that model doesn't really fit a desktop with a mouse though
07:38:01 <elliott> Vorpal: How is this simpler than tee?
07:38:03 <Vorpal> olsner, you don't need huge buttons unless you have a touchscreen.
07:38:13 <Vorpal> elliott, not simpler, but it would definitely work
07:38:19 <elliott> Vorpal: This does work.
07:38:30 <Vorpal> elliott, oh okay, sounded like it didn't in one direction
07:38:33 <elliott> $ dist/build/mchost/mchost client < anotherlog | head
07:38:33 <elliott> CHandshake "ehird"
07:38:33 <elliott> CLogin 17 "ehird" 0 0 0 0 0 0
07:38:33 <elliott> CPlayerPositionLook 299.375 41.0 42.62000000476837 41.84375 351.4492 13.349988 False
07:38:33 <elliott> CPlayerPositionLook 299.375 41.0 42.62000000476837 41.84375 351.4492 13.349988 False
07:38:34 <elliott> CPlayerPosition 299.375 40.92159999847412 42.54160000324249 41.84375 False
07:38:36 <elliott> CPlayerPosition 299.375 40.76636799395752 42.386367998725895 41.84375 False
07:38:38 <elliott> CPlayerPosition 299.375 40.53584062504456 42.15584062981293 41.84375 False
07:38:42 <elliott> CPlayerPosition 299.375 40.231523797587016 41.85152380235539 41.84375 False
07:38:44 <elliott> CPlayerPosition 299.375 39.85489329934836 41.47489330411673 41.84375 False
07:38:46 <elliott> CPlayerPosition 299.375 39.40739540236494 41.02739540713331 41.84375 False
07:38:48 <elliott> What is broken is my code.
07:38:52 <elliott> But only for certain server packets.
07:38:54 <elliott> If I knew it'd be fixed.
07:39:03 <Vorpal> right
07:40:10 <Vorpal> olsner, oh and the modal program thingy that windows 8 seems to have, that is even more wtf for a desktop or laptop.
07:40:25 <elliott> Vorpal: you're really late for the windows 8 discussion.
07:40:31 <Vorpal> elliott, oh?
07:40:41 <elliott> come back like two weeks ago
07:40:47 <Vorpal> elliott, I have been busy, only just now caught up with things.
07:41:11 <Vorpal> elliott, anyway, what is your opinion on it?
07:41:22 <elliott> `log windows 8
07:41:40 <elliott> `log windows 8
07:41:43 <elliott> HackEgo: Oi.
07:41:43 <HackEgo> 2011-03-30.txt:17:34:50: <HackEgo> 339) * Received a CTCP VERSION from nyuszika7h * VERSION Microsoft IRC# 2011 64-bit (Windows 8 Beta, x64, 2GB RAM) <nyuszika7h> Gregor: Windows 8 Beta? o_O <Gregor> A small benefit of my brief time as an intern at MS.
07:41:44 <HackEgo> 2011-09-19.txt:07:40:25: <elliott> Vorpal: you're really late for the windows 8 discussion.
07:41:51 <elliott> That's.
07:41:53 <elliott> Not helpful.
07:41:55 <elliott> `log windows 8
07:41:59 <HackEgo> 2010-11-18.txt:19:48:21: <elliott> Gregor: Only 2 gigs of RAM for Windows 8?
07:42:02 <elliott> `log windows 8
07:42:05 <HackEgo> 2010-06-14.txt:20:46:29: <fizzie> It will be somewhat interesting to see what Windows 8 will be "in reality".
07:42:08 <elliott> `log windows 8
07:42:08 <elliott> `log windows 8
07:42:09 <elliott> `log windows 8
07:42:09 <elliott> `log windows 8
07:42:09 <elliott> `log windows 8
07:42:14 <HackEgo> 2011-09-19.txt:07:40:25: <elliott> Vorpal: you're really late for the windows 8 discussion.
07:42:14 <HackEgo> 2011-03-30.txt:17:34:47: <Gregor> `addquote * Received a CTCP VERSION from nyuszika7h * VERSION Microsoft IRC# 2011 64-bit (Windows 8 Beta, x64, 2GB RAM) <nyuszika7h> Gregor: Windows 8 Beta? o_O <Gregor> A small benefit of my brief time as an intern at MS.
07:42:15 <HackEgo> 2011-09-19.txt:07:41:40: <elliott> `log windows 8
07:42:16 <HackEgo> 2011-09-13.txt:19:31:55: <ais523> hmm, according to discussion in Slashdot, Windows 8 has no Start menu, even if you put it into old-fashioned desktop mode
07:42:16 <HackEgo> 2011-03-13.txt:13:33:46: <elliott> Phantom_Hoover: i just want Windows 8 Cloud
07:42:22 <elliott> Oh for chrissakes.
07:42:55 -!- Vorpal has quit (Quit: ZNC - http://znc.sourceforge.net).
07:43:23 -!- Vorpal has joined.
07:43:28 <Vorpal> fuck this connection
07:43:42 <Vorpal> last line I saw was <Vorpal> elliott, anyway, what is your opinion on it?
07:43:55 <elliott> http://codu.org/logs/_esoteric/
07:43:59 <Vorpal> right
07:44:26 <Vorpal> 07:42:14: <HackEgo> 2011-03-30.txt:17:34:47: <Gregor> `addquote * Received a CTCP VERSION from nyuszika7h * VERSION Microsoft IRC# 2011 64-bit (Windows 8 Beta, x64, 2GB RAM) <nyuszika7h> Gregor: Windows 8 Beta? o_O <Gregor> A small benefit of my brief time as an intern at MS. <-- IRC#?
07:44:29 <Vorpal> wtf is IRC#
07:45:03 <elliott> a smell benefit of Gregor's brief time as an intern at MS
07:45:05 <elliott> ...
07:45:05 <elliott> small
07:45:08 <elliott> Gregor has no smell benefits.
07:45:39 <monqy> ms comic chat revival?
07:45:48 -!- Vorpal has quit (Read error: Connection reset by peer).
07:46:27 <elliott> the joke is that vorpal is dumb
07:47:22 <monqy> rip
07:49:38 <zzo38> It seems that the Q monad for Template Haskell is really a wrapper for a class. I didn't know such a thing exists.
07:49:46 <elliott> existential
07:50:02 <olsner> Sweden is supposed to have good internet, I wonder how vorpal failed to get it and got bad internet instead
07:50:55 <elliott> he lives in a rural nowhere motto "for dumb vorpals"
07:51:05 <olsner> well, maybe he just forgot to scroll down and thought he got disconnected, then restarted IRC because of it
07:51:39 <monqy> but forgot the restart part
07:51:51 <monqy> or was that the other one
07:52:24 <olsner> not important
07:53:25 <zzo38> It is the wrapper for the Quasi class. So is there some hidden Quasi instance for working with Haskell programs?
07:53:26 <olsner> also, smell benefits :D
07:55:20 <elliott> zzo38: it is probably instantiated to IO in practice
07:55:24 <elliott> or at least that is my hunch
07:55:52 <zzo38> IO cannot do reify or some of its other commands
07:55:58 <elliott> hmm
07:56:02 <elliott> probably some horrific internal ghc thing then :)
07:57:37 <zzo38> Is this correct and can there be any implementation of the ones I did not implement? instance Quasi (State QuasiState) where { qNewName n = modify (\x -> x {qs_nextName = qs_nextName x + 1}) >> fmap (mkNameU n) (fmap qs_nextName get); qReport b s = modify (\x -> x {qs_report = qs_report x ++ [(b, s)]});
07:57:56 <zzo38> qRecover _ = error "Cannot recover in QuasiState"; qReify _ = error "Cannot reify in QuasiState"; qClassInstances _ = error "Cannot get class instances in QuasiState"; qLocation = fmap qs_location get; qRunIO _ = error "Cannot run I/O in QuasiState"; };
07:58:40 <monqy> uggh how is Q not an instance of MonadIO
07:59:43 <zzo38> monqy: I don't know. It does have a runIO command, is that sufficient to make MonadIO?
08:00:02 <monqy> yes
08:00:24 <monqy> class Monad m => MonadIO m where liftIO :: IO a -> m a
08:00:32 <monqy> runIO :: IO a -> Q a
08:01:17 <zzo38> So, liftIO = runIO is that correct? In which library/module is MonadIO?
08:02:00 <monqy> Control.Monad.IO.Class looks like
08:02:05 <zzo38> But note that runIO is not always defined when runQ is used; sometimes it will be error.
08:02:53 <zzo38> Such as, I defined Maybe and (State QuasiState) as instances of Quasi, neither of which can perform I/O.
08:03:02 <monqy> your instances are incomplete
08:03:22 <zzo38> I know.
08:03:24 <monqy> and I don't see how this has any bearing on making a MonadIO instance
08:03:31 <zzo38> But even the IO instance of Quasi is incomplete.
08:03:38 <monqy> what
08:03:42 <monqy> do you mean by that
08:03:48 <zzo38> monqy: But, yes, I do suppose it can in fact be made a MonadIO instance anyways.
08:04:05 <monqy> the only case in which it wouldn't work is when it wouldn't work anyway
08:04:06 <zzo38> The IO instance of Quasi cannot perform everything either.
08:04:08 <monqy> because of incomplete
08:04:20 <monqy> what do you mean by "IO instance"
08:04:38 <zzo38> I mean the instance Quasi IO
08:04:57 <monqy> oh
08:05:44 <monqy> so I see
08:06:37 <zzo38> What uses does the MonadIO class currently have?
08:08:04 <zzo38> OK, I made Q to be an instance of MonadIO in my ExtraTH program now.
08:08:07 <monqy> instances of MonadIO can perform with liftIO, so you can make functions such that anything which can perform IO can run IO actions. also I think there are instances such that it liftIO will work deep into monad stacks?
08:08:39 <monqy> same deal with MonadWhatever classes
08:13:36 <zzo38> With something like (\x -> x {qs_nextName = qs_nextName x + 1}) is there something that allows you do specify only qs_nextName once and (+ 1) and it will act like same thing?
08:18:43 <monqy> lenses
08:19:19 <monqy> data-lens and friends
08:19:32 <zzo38> Yes I know about lenses, but is there something for record syntax
08:19:54 <monqy> not that I know of
08:20:03 <monqy> why do you need record syntax?
08:20:18 <zzo38> I will try to write one with Template Haskell to see if it can do so.
08:25:49 -!- elliott has quit (Ping timeout: 260 seconds).
08:37:03 -!- ais523 has joined.
08:39:34 -!- SgeoN1 has quit (Quit: Bye).
08:40:07 -!- monqy has quit (Quit: hello).
08:44:24 <zzo38> recUpd :: Name -> Q Exp; -- :: (f -> f) -> r -> r;
08:45:17 <zzo38> recUpd n = do { f <- newVar; r <- newVar; let { a = AppE (VarE f) $ AppE (VarE n) (VarE r) } in lamE [varP f, varP r] $ recUpdE (varE r) [return (n, a)]; };
08:46:05 -!- ais523 has quit (Read error: Connection reset by peer).
08:46:42 -!- ais523 has joined.
08:53:06 <zzo38> I made improvement to Metamind and Illithid Savant class, of D&D game, beyond what I had before.
08:54:27 -!- copumpkin has quit (Ping timeout: 252 seconds).
08:54:51 -!- copumpkin has joined.
08:55:08 <zzo38> I looked at Wikipedia article about comma category. Now I know what commutative diagrams do (by looking at the other article too).
09:17:45 -!- augur has quit (Remote host closed the connection).
09:43:32 -!- augur has joined.
10:24:30 -!- zzo38 has quit (Remote host closed the connection).
10:34:09 -!- sebbu2 has quit (Ping timeout: 260 seconds).
10:35:48 -!- sebbu2 has joined.
10:35:48 -!- sebbu2 has quit (Changing host).
10:35:48 -!- sebbu2 has joined.
10:39:56 <fizzie> Heh, a poll where the question says "choose two best options", and the list of options is a single-select radiobutton group.
10:46:24 <CakeProphet> haha clevur
10:59:51 -!- zanzarel has joined.
11:01:18 <cheater> linking to lenin, molotov and stalin from my article on opensource software
11:13:11 -!- hagb4rd has joined.
11:15:57 -!- Jafet has joined.
11:21:55 -!- ais523 has quit (Read error: Connection reset by peer).
11:24:49 -!- Patashu has joined.
11:25:07 -!- ais523 has joined.
11:27:47 -!- GreaseMonkey has quit (Quit: The Other Game).
11:28:00 -!- ais523_ has joined.
11:28:01 -!- ais523 has quit (Disconnected by services).
11:28:03 -!- ais523_ has changed nick to ais523.
11:28:41 <ais523> note to my University: it is not useful to change the configuration required to access my email, then send an email to my email address telling me what I need to change
11:29:06 <ais523> better would be to do it the other way round, and have both systems working in parallel for a couple of weeks
11:33:29 <Jafet> Probably a race condition somewhere
11:34:07 -!- variable has quit (*.net *.split).
11:36:08 <ais523> nah, I think they just expected people to actually use Outlook Web Access rather than IMAP
11:45:45 -!- sebbu2 has changed nick to sebbu.
11:50:14 -!- zanzarel has quit (Quit: Leaving).
11:56:03 -!- oerjan has joined.
12:01:47 <oerjan> <monqy> uggh how is Q not an instance of MonadIO
12:02:30 <oerjan> @tell monqy <monqy> uggh how is Q not an instance of MonadIO <-- it might be because ghc no longer includes by default the package where MonadIO is defined
12:02:30 <lambdabot> Consider it noted.
12:03:58 <oerjan> @hoogle liftIO
12:03:58 <lambdabot> Control.Monad.Trans liftIO :: MonadIO m => IO a -> m a
12:11:20 -!- boily has joined.
12:16:08 -!- hagb4rd has quit (Ping timeout: 260 seconds).
12:20:43 -!- NihilistDandy has quit (Quit: leaving).
12:20:56 -!- sllide has joined.
12:41:25 -!- copumpkin has quit (Ping timeout: 252 seconds).
12:41:49 -!- copumpkin has joined.
12:44:31 <oerjan> :t foldM
12:44:32 <lambdabot> forall a b (m :: * -> *). (Monad m) => (a -> b -> m a) -> a -> [b] -> m a
12:45:25 <ais523> <http://www.catb.org/~esr/faqs/smart-questions.html> If you're sending e-mail from a Windows machine, turn off Microsoft's problematic “Smart Quotes” feature (From Tools > AutoCorrect Options, clear the smart quotes checkbox under AutoFormat As You Type.). This is so you'll avoid sprinkling garbage characters through your mail.
12:45:34 <ais523> there is something so beautiful about the misencoding there
12:45:54 <ais523> (there are misencoded quotes all over that document, but seeing them in that context is hilarious)
12:47:03 <oerjan> a classic
12:47:37 <ais523> that page also obnoxiously puts title= attributes on every paragraph with the section header
12:47:48 <ais523> meaning that it's kind-of hard to find anywhere safe to put the mouse
12:48:17 <fizzie> Well, the document itself does have <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> and the quotes are proper UTF-8; unfortunately the server headers seem to specify ISO-8859-1.
12:48:44 <Jafet> <?xml version="1.0" encoding="UTF-8"?>
12:48:58 <Jafet> Nothing like reassuring the parser that, yes, this is utf-8
12:48:58 <fizzie> Oh, it has that too.
12:49:13 <Jafet> Despite a deranged httpd's assertions to the contrary
12:50:11 <ais523> shouldn't the meta override the server headers?
12:50:24 <oerjan> ais523: IT WAS YOUR BROWSER ALL ALONG
12:50:50 <ais523> my browser normally obeys the normal rules for detecting encodings
12:51:50 <fizzie> "HTTP/1.1 recipients MUST respect the charset label provided by the sender; and those user agents that have a provision to "guess" a charset MUST use the charset from the content-type field if they support that charset, rather than the recipient's preference, when initially displaying a document. See section 3.7.1. "
12:54:40 <fizzie> As for overriding: "The http-equiv attribute can be used in place of the name attribute and has a special significance when documents are retrieved via the Hypertext Transfer Protocol (HTTP). HTTP servers may use the property name specified by the http-equiv attribute to create an [RFC822]-style header in the HTTP response."
12:55:36 <fizzie> So it's entirely the server's prerogative.
12:55:40 <Jafet> Love standards... so many... choice...
13:03:18 -!- hagb4rd has joined.
13:35:19 -!- DH____ has joined.
13:57:13 <CakeProphet> https://github.com/rfw/metafun/blob/master/metafun/list.hxx
14:00:49 <Patashu> What is that
14:01:00 <CakeProphet> :)
14:02:09 -!- variable has joined.
14:05:27 -!- Patashu has quit (Quit: MSN: Patashu@hotmail.com , Gmail: Patashu0@gmail.com , AIM: Patashu0 , YIM: patashu2 .).
14:07:42 -!- copumpkin has quit (Quit: Computer has gone to sleep.).
14:15:41 <oerjan> comment from reddit.com/r/physics: 'Given my experience with simulations I imagine the outcome would be something like: "The latest simulations suggest our universe is heading towards a segfault.."'
14:29:42 -!- copumpkin has joined.
14:32:41 -!- oerjan has quit (Quit: leaving).
14:39:20 -!- sebbu2 has joined.
14:39:20 -!- sebbu has quit (Ping timeout: 240 seconds).
14:39:31 -!- sebbu2 has quit (Changing host).
14:39:31 -!- sebbu2 has joined.
14:40:03 -!- sebbu2 has changed nick to sebbu.
15:19:16 -!- Ngevd has joined.
15:19:53 <Ngevd> Hello!
15:21:37 <ais523> hi
15:23:06 -!- MSleep has changed nick to MDude.
15:24:34 <Ngevd> ais523, I think there's some spam on the wiki
15:25:06 <ais523> could well be; I check every edit, but there's a delay for them to be loaded into my RSS feed reader
15:25:25 <Ngevd> I know, I admin the Mezzawiki
15:25:28 <ais523> right, indeed, deleted it
15:25:40 <Ngevd> Which has had very few edits recently...
15:30:30 <Ngevd> So, what's happening in THE WORLD OF ESOTERIC PROGRAMMING, then?
15:31:35 <ais523> less than probably should
15:41:33 <Ngevd> What ever happed to the Essies?
15:42:59 <ais523> people lost interest, I think
15:43:18 <Ngevd> Shame
15:46:45 -!- CakeProphet has quit (Ping timeout: 260 seconds).
15:48:18 -!- CakeProphet has joined.
15:48:18 -!- CakeProphet has quit (Changing host).
15:48:18 -!- CakeProphet has joined.
15:50:49 -!- azaq23 has joined.
15:52:03 -!- azaq23 has quit (Client Quit).
15:52:11 -!- azaq23 has joined.
16:13:30 <Gregor> Recipe for fun: Get a Zune HD foisted on you. Install Windows 7 in a VM so you can try it. Discover just how abysmally bad it is, put it in a box, forget about it for >1yr. Remove from box, boot VM for first time in a year, try to use it again.
16:13:41 <Gregor> <Microsoft> lol, you can't do SHIT. Hahaha
16:20:45 -!- FireFly has joined.
16:36:31 -!- ive has joined.
16:42:29 -!- Wamanuz2 has joined.
16:42:30 -!- Wamanuz has quit (Read error: Connection reset by peer).
16:58:33 -!- calamari has joined.
17:01:33 -!- ais523 has quit (Remote host closed the connection).
17:05:10 <CakeProphet> @hoogle (%%)
17:05:10 <lambdabot> No results found
17:14:30 -!- Ngevd has quit (Ping timeout: 252 seconds).
17:29:27 -!- pean has joined.
17:32:36 -!- pean has left.
17:37:01 -!- sebbu2 has joined.
17:37:01 -!- sebbu2 has quit (Changing host).
17:37:01 -!- sebbu2 has joined.
17:37:36 -!- sebbu has quit (Ping timeout: 252 seconds).
17:46:52 -!- ais523 has joined.
17:52:05 -!- Ngevd has joined.
17:53:59 -!- calamari has quit (Quit: Leaving).
17:56:20 -!- impomatic has joined.
17:56:23 -!- impomatic has left.
18:10:37 -!- Ngevd has quit (Ping timeout: 259 seconds).
18:25:09 <CakeProphet> > fix (2:)
18:25:09 <lambdabot> [2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,...
18:25:50 <CakeProphet> > fix error
18:25:50 <lambdabot> "*Exception: *Exception: *Exception: *Exception: *Exception: *Exception: *E...
18:31:42 <CakeProphet> :t erorr
18:31:43 <lambdabot> Not in scope: `erorr'
18:31:44 <CakeProphet> :t error
18:31:45 <lambdabot> forall a. [Char] -> a
18:31:53 <CakeProphet> :t fix
18:31:54 <lambdabot> forall a. (a -> a) -> a
18:32:05 <CakeProphet> I'm actually a little mystified as to how that works..
18:32:56 <CakeProphet> oh wait, nevermind, I'm not.
18:34:58 -!- augur has quit (Remote host closed the connection).
18:40:28 <fizzie> In DWIMskell, "fix error" just rewrites your source file and corrects your mistakes.
18:44:26 -!- Ngevd has joined.
18:50:13 -!- sebbu3 has joined.
18:50:13 -!- sebbu3 has quit (Changing host).
18:50:13 -!- sebbu3 has joined.
18:51:27 -!- sebbu2 has quit (Ping timeout: 260 seconds).
18:54:24 <Ngevd> Oh I am bored
18:55:47 -!- DH____ has quit (Read error: Connection reset by peer).
18:55:51 -!- AndChat| has joined.
18:56:30 <ais523> Ngevd: I was going to recommend NetHack, when I saw this was #esoteric
18:56:33 <ais523> but I may as well recommend it anyway
18:56:35 <ais523> go play NetHack
18:56:43 <Ngevd> I could never get the hang of it
18:56:50 <ais523> hmm, fair enough
18:57:56 <Ngevd> I will try, though
18:58:37 <ais523> I actually develop a NetHack variant, AceHack, which can be played online at telnet://acehack.rawrnix.com
18:58:45 -!- variable has quit (Quit: I found 1 in /dev/zero).
18:59:06 -!- variable has joined.
18:59:17 <Ngevd> Can you reccomend a character's race, role, gender and alignment for me?
18:59:33 <ais523> female lawful dwarven valkyrie
18:59:35 <ais523> 'tis the easiest combo
19:00:49 <Ngevd> Hold on, University Challenge
19:00:59 -!- Ngevd has changed nick to Taneb|Hovercraft.
19:01:38 <ais523> heh, it's on here too
19:02:16 -!- yorick has quit (Quit: Poef!).
19:08:15 -!- augur has joined.
19:15:10 -!- lifthrasiir has quit (Ping timeout: 276 seconds).
19:16:08 -!- lifthrasiir has joined.
19:17:37 -!- SimonRC has quit (Ping timeout: 260 seconds).
19:19:22 -!- Taneb|Hovercraft has quit (Ping timeout: 260 seconds).
19:24:56 <myndzi\> Item lists are now sorted into alphabetical order
19:25:09 <myndzi\> wouldn't random make more sense if you're trying to prevent people from gleaning information?
19:25:11 -!- myndzi\ has changed nick to myndzi.
19:25:29 <myndzi> i suppose the problem is randomizing it only once, perhaps
19:25:40 <myndzi> but that could be done when you make the bones file(?)
19:25:53 <ais523> alpha prevents information just as well
19:26:01 <ais523> *information leakage
19:26:09 -!- zzo38 has joined.
19:26:21 <myndzi> how so? it g ives you information about what the item is by its name
19:26:25 <myndzi> assuming you knew what you had
19:26:33 <myndzi> which is the problem it was designed to avoid
19:26:45 <myndzi> or wait
19:26:52 <myndzi> i suppose you mean by its "unknown" name
19:26:57 <ais523> yep
19:26:58 <myndzi> not its actual or original name
19:27:02 <myndzi> ok ;)
19:27:05 <ais523> in fact, by the name the character sees it as
19:27:15 <myndzi> right
19:27:15 <ais523> which is the description if unknown, and actual if known
19:28:00 <myndzi> is nethack not in development anymore? lots of these seem like they would be sensible patches for the game itself rather than some fork
19:28:18 <CakeProphet> @pl (\x y -> (compare `on` snd) x y `mappend` (compare `on` fst) x y)
19:28:18 <lambdabot> ap (ap . (mappend .) . (compare `on` snd)) (compare `on` fst)
19:28:23 <ais523> it's in development, as far as anyone can tell, but there's no releases, and no public repo
19:28:29 <myndzi> oh
19:28:30 <ais523> so the development is entirely useless from anyone else'se point of view
19:28:40 <ais523> and it's been like that for something like eight years now
19:28:52 <myndzi> lol :(
19:29:12 <ais523> `addquote <myndzi> lol :(
19:29:14 <HackEgo> 672) <myndzi> lol :(
19:29:18 <ais523> this is everything that's wrong with modern Internet language
19:29:32 <myndzi> no u
19:29:36 <fizzie> There are quite a lot of bug reports that are known to be fixed in the version no-one gets to see.
19:29:39 <myndzi> <devolves into unintelligible trollspeak>
19:29:55 <olsner> fizzie: the fixed version of the modern internet language?
19:30:19 <fizzie> olsner: Right. It's a shame you'll never see it, it's beautiful.
19:30:24 <myndzi> it's actually interesting if you think about it
19:31:28 <myndzi> what purpose did that text serve? it confirmed that i'd read your response, had nothing further to say, and adds that it was both humorous and unfortunate to me
19:31:32 <myndzi> in six characters, that's not bad
19:31:49 <myndzi> so i'm not so sure i can agree that it's "wrong"
19:31:57 <myndzi> though by all means, like everything it can be abused
19:32:15 <fizzie> It's an old philosophical question: If a bug gets fixed in a revision that no-one will ever see, is the commit message still stupid and misleading?
19:32:20 <myndzi> and to be honest i haven't been able to break the smileys habit on irc, though i don't type like that in e-mail or pretty much anywhere else where i would capitalize a sentence
19:34:10 -!- SimonRC has joined.
19:34:24 -!- Ngevd has joined.
19:35:23 <myndzi> Wielded silver arrows now deal silver damage the same way wielded silver nonweapons do. (Even though bashing with arrows isn't particularly affective, the silver is enough to hurt certain monsters no matter how clumsily it makes contact.)
19:35:26 <myndzi> didn't you watch LOTR? ;)
19:35:34 <myndzi> wielding arrows are piercing weapons
19:35:42 <myndzi> also: effective, if you care
19:35:51 <Ngevd> Oh, this is annoying
19:37:03 <Ngevd> Nethack: in a room with the exit staircase, a dead goblin, some money, a fountain, and a creaky floorboard
19:37:33 <myndzi> take money, drink fountain, exit ... profit?
19:37:34 <myndzi> ;p
19:37:48 <ais523> eat the goblin
19:37:52 <ais523> and then search the walls for secret doors
19:37:58 <ais523> (assuming the goblin died recently)
19:38:09 <ais523> vertical walls are more likely to have secret doors than horizontal walls
19:38:19 <myndzi> ^ more useful advice than i can offer
19:38:31 <myndzi> i've always been fascinated by nethack, but never played it much
19:38:39 <Ngevd> Hang on, how do I check for hidden walls?
19:38:45 <myndzi> s for search?
19:39:00 <myndzi> i'm more interested in the distinction between vertical walls and horizontal walls
19:39:10 <ais523> yep, s for search
19:39:13 <myndzi> oh, from overhead view
19:39:15 <Ngevd> North-south, east-west
19:39:18 <myndzi> yeah
19:39:23 -!- oerjan has joined.
19:39:23 <ais523> myndzi: it's not deliberate, AFAIK, just a side-effect of the map generation algo
19:39:32 <Ngevd> Found a locked door
19:39:34 <myndzi> nah, i thought you meant vertical as in floor-to-ceiling
19:39:40 <myndzi> like, how would you tell?
19:39:45 <myndzi> also wouldn't it be the same thing?
19:39:48 <myndzi> but i understand
19:40:02 <fizzie> Horizontal walls, also called floors.
19:40:02 <myndzi> and yeah, text screens are wider than tall, so it makes sense to have a horizontal preference
19:40:20 <myndzi> fizzie: well, walls take up two axes so horizontal could be a wall as well
19:40:27 <myndzi> horizontal AND vertical = wall!
19:40:29 <ais523> Ngevd: you can kick it down
19:40:30 <CakeProphet> > sortBy (\x y -> fst $ randomR (LT, GT) (mkStdGen x^y)) [1,4,5,2,5,2,5,6,21,5,2,5,6,2,5,6]
19:40:30 <ais523> control-D
19:40:31 <lambdabot> No instance for (GHC.Num.Num System.Random.StdGen)
19:40:31 <lambdabot> arising from a use of...
19:40:33 <CakeProphet> halp
19:41:22 <CakeProphet> > toEnum 1 :: Ordering
19:41:23 <lambdabot> EQ
19:41:25 <CakeProphet> > toEnum 0 :: Ordering
19:41:26 <lambdabot> LT
19:41:42 <CakeProphet> > sortBy (\x y -> toEnum . fst $ randomR (0, 2) (mkStdGen x^y)) [1,4,5,2,5,2,5,6,21,5,2,5,6,2,5,6]
19:41:42 <oerjan> CakeProphet: that's ((mkStdGen x)^y)
19:41:43 <lambdabot> No instance for (GHC.Num.Num System.Random.StdGen)
19:41:43 <lambdabot> arising from a use of...
19:42:13 <CakeProphet> > sortBy (\x y -> toEnum . fst $ randomR (0, 2) ((mkStdGen x)^y)) [1,4,5,2,5,2,5,6,21,5,2,5,6,2,5,6]
19:42:14 <lambdabot> No instance for (GHC.Num.Num System.Random.StdGen)
19:42:14 <lambdabot> arising from a use of...
19:42:35 <oerjan> CakeProphet: no, i mean, that's what it parses as, and it's not sensible
19:42:52 <CakeProphet> > sortBy (\x y -> toEnum . fst $ randomR (0, 2) (mkStdGen (x^y))) [1,4,5,2,5,2,5,6,21,5,2,5,6,2,5,6]
19:42:53 <lambdabot> [6,5,21,6,5,2,6,5,2,5,2,5,2,5,4,1]
19:42:55 <CakeProphet> > sortBy (\x y -> toEnum . fst $ randomR (0, 2) (mkStdGen (x^y))) [1,4,5,2,5,2,5,6,21,5,2,5,6,2,5,6]
19:42:56 <lambdabot> [6,5,21,6,5,2,6,5,2,5,2,5,2,5,4,1]
19:43:01 <CakeProphet> bahahahaha
19:43:06 <CakeProphet> best sort ever.
19:43:16 <oerjan> CakeProphet: not that i see how (mkStdGen (x^y) is any better
19:43:44 <CakeProphet> > sortBy (\x y -> toEnum . fst $ randomR (0, 2) (mkStdGen (x*y))) [1,4,5,2,5,2,5,6,21,5,2,5,6,2,5,6]
19:43:45 <lambdabot> [6,5,2,6,5,2,5,21,6,5,2,5,2,5,4,1]
19:44:21 <Ngevd> What#s a rust trap?
19:45:04 <oerjan> CakeProphet: i mean, i see no reason why that should be an order relation
19:45:41 <CakeProphet> oerjan: you think too narrowly.
19:45:44 -!- Zuu has quit (Ping timeout: 244 seconds).
19:45:45 <CakeProphet> :P
19:45:55 <CakeProphet> THIS IS A GREAT ORDERING OF OUR TIMES
19:46:04 <myndzi> i had to look up the vibrating square
19:46:11 <myndzi> and i am left to wonder how anyone would figure this crap out on their own
19:46:23 <oerjan> CakeProphet: oh i've experimented with sortBy crazy relations myself, just to find out what it compared.
19:46:32 <CakeProphet> yeah that's what I'm doing
19:46:35 <CakeProphet> also being sleep deprived.
19:47:43 <Ngevd> Don't know what to do next
19:48:39 -!- ineiros_ has joined.
19:49:13 <oerjan> <CakeProphet> @hoogle (%%)
19:49:21 <oerjan> what would that be supposed to do
19:51:30 <Ngevd> Floor two!
19:51:55 <oerjan> <CakeProphet> @pl (\x y -> (compare `on` snd) x y `mappend` (compare `on` fst) x y)
19:54:32 <oerjan> :t (mappend `on` ($ ?y).($ ?x).(compare `on`)) snd fst
19:54:33 <lambdabot> forall a. (?y::(a, a), ?x::(a, a), Ord a) => Ordering
19:55:10 <Ngevd> AAAH!
19:55:12 <Ngevd> A HOBBIT!
19:55:20 <Ngevd> What do I do, ais523?
19:55:27 <zzo38> join = id <=< id is that correct?
19:55:54 <oerjan> zzo38: hm maybe
19:56:01 <oerjan> :t id <=< id
19:56:02 <lambdabot> forall (m :: * -> *) c. (Monad m) => m (m c) -> m c
19:56:06 <oerjan> yeah
19:56:29 <ais523> Ngevd: attack it
19:56:38 <ais523> unless it's peaceful, in which case ignore it
19:56:51 <copumpkin> :t (id =<<)
19:56:52 <lambdabot> forall (m :: * -> *) b. (Monad m) => m (m b) -> m b
19:56:54 <Ngevd> Can't I recruit it to my cause?
19:57:02 <Ngevd> To find the Amulet of Yendor?
19:57:09 <ais523> not without appropriate magic
19:57:14 <Ngevd> Aww
19:57:14 <ais523> and even so, it wouldn't live long
19:57:35 <zzo38> Don't waste your magic on such thing
19:59:24 <fizzie> "If it moves, kill it." (Well, maybe not quite.)
20:00:06 <zzo38> "It it move, kill you."
20:00:25 <Ngevd> Okay, floor three seems annoyingly empty
20:01:08 <Ngevd> No wait, I died from food poisoning
20:01:37 <fizzie> I recently managed to have a terminal (no pun intended) issue that sneakily went and pretty much randomized my options; in particular it went and turned 'confirm' off, and then I bumped into the minetown priest, and (while blind) managed to also kill one of the minetown guards. Now they're... not happy with me.
20:05:15 <ais523> Ngevd: don't eat undead that you've made dead again, don't eat things unless you killed them yourself recently
20:05:34 <ais523> fizzie: if you can steal from a shopkeeper then pay them off again, that makes them peaceful again, but it can be hard to pull off
20:05:37 <ais523> otherwise, run away
20:05:46 <Ngevd> ais523: Thanks for the advice
20:05:58 <myndzi> the funny thing about nethack is
20:06:02 <ais523> AceHack warns you against mistakes like that
20:06:11 <myndzi> it does a pretty good job in many cases of emulating things that would be common sense in real life
20:06:18 <myndzi> but you don't expect them of a video g ame
20:06:23 <myndzi> so you do stupid things
20:06:24 <myndzi> ;D
20:06:38 <myndzi> "you mean my actions have consequences?!"
20:07:40 <ais523> well, you can destroy the entire Yendorian financial system, and kill pretty much every monster in the dungeon, and the consequences generally aren't noticeable
20:08:46 <myndzi> ha, well, i was thinking on a bit smaller of a scale
20:08:58 <fizzie> ais523: Well, I did run (walk) away, and I think that game (haven't touched it in a while) is in the castle now and doing fine, but I don't happen to have any candles.
20:09:21 <myndzi> just waiting for someone to merge nethack with dwarf fortress, haha
20:09:59 <ais523> actually, it's possible to extinct a species of monster eventually if you keep killing things
20:10:13 <myndzi> i did know that at least
20:10:22 <myndzi> i remember a friend who was trying to extinct everything once
20:10:25 <myndzi> it was pretty amusing
20:10:29 <myndzi> he kept summoning and one-shotting them
20:10:47 <ais523> extinctionist is a well known stupid ascension trick
20:10:49 <myndzi> his stash room was full of boulders from killing giants etc.
20:10:52 <ais523> someone even did pacifist extinctionist once
20:10:53 <fizzie> mooz has played at least on extinctionist.
20:10:58 <fizzie> s/on/one/
20:11:09 <ais523> which is a beautifully ridiculous combination
20:11:13 <oerjan> <ais523> someone even did pacifist extinctionist once <-- O_o
20:11:19 <myndzi> how... you make everything kill each other?
20:11:21 <ais523> yep
20:11:26 <myndzi> how does the last one die
20:11:32 <myndzi> throw him a poisoned water flask? lol
20:11:34 <fizzie> Since it takes a while, there was quite a lot of other stupid things he did. I think he completely dug out + lit every diggable level of Gehennom.
20:11:39 <ais523> I'm not sure
20:12:04 <ais523> probably get a nonextinctable monster like Rodney to make the kill
20:12:09 <myndzi> lead it down a trap or hole maybe
20:12:18 <myndzi> or that
20:13:13 <fizzie> Random log-quote: [2006-12-12 13:47:01] <fizzie> I wonder why the Wikipedia category "Species extinct in the wild" has the page "User talk:TrogdorPolitiks".
20:13:21 <fizzie> (The statement is no longer true.)
20:15:47 <oerjan> `log
20:15:49 <HackEgo> 2010-02-09.txt:20:54:46: <cpressey> Turing complete = Turing degree 0'
20:28:16 -!- elliott has joined.
20:28:32 <elliott> That PH sure is a long time Ireland.
20:30:15 <oerjan> an irish wake is not something to be rushed.
20:31:16 <elliott> 12:02:30: <oerjan> @tell monqy <monqy> uggh how is Q not an instance of MonadIO <-- it might be because ghc no longer includes by default the package where MonadIO is defined
20:31:21 <elliott> oerjan: um template-haskell is a hackage package now too
20:31:37 <elliott> but yeah, it doesn't depend on transformers
20:32:22 -!- Zuu has joined.
20:32:33 <oerjan> elliott: the ghc documentation has TH modules but not transformer ones listed
20:33:31 <elliott> 13:57:13: <CakeProphet> https://github.com/rfw/metafun/blob/master/metafun/list.hxx
20:33:31 <elliott> boring, done tons of times before :P
20:33:33 <elliott> oerjan: well right
20:34:48 <elliott> 16:13:30: <Gregor> Recipe for fun: Get a Zune HD foisted on you. Install Windows 7 in a VM so you can try it. Discover just how abysmally bad it is, put it in a box, forget about it for >1yr. Remove from box, boot VM for first time in a year, try to use it again.
20:34:48 <elliott> 16:13:41: <Gregor> <Microsoft> lol, you can't do SHIT. Hahaha
20:35:00 <elliott> Gregor: What's the relevance of the Zune here -- oh, you installed Windows in the VM so you can use the Zune.
20:35:30 <elliott> 19:00:49: <Ngevd> Hold on, University Challenge
20:35:30 <elliott> 19:00:59: -!- Ngevd is now known as Taneb|Hovercraft.
20:35:30 <elliott> 19:01:38: <ais523> heh, it's on here too
20:35:35 <elliott> ais523: you realise you live in the same country
20:35:46 <ais523> elliott: I know, I mean physically in this room there's a TV
20:35:53 <elliott> gasp
20:35:54 <ais523> and it was showing University Challenge at the time
20:36:11 <elliott> 19:29:12: <ais523> `addquote <myndzi> lol :(
20:36:12 <elliott> 19:29:14: <HackEgo> 672) <myndzi> lol :(
20:36:12 <elliott> 19:29:18: <ais523> this is everything that's wrong with modern Internet language
20:36:15 <elliott> ais523: by wrong, you mean right
20:36:25 <elliott> 19:29:32: <myndzi> no u
20:36:27 <elliott> myndzi: u mad
20:36:28 <oerjan> NO UNIVERSITY CHALLENGE HERE
20:36:30 <elliott> (I have embraced the demon.)
20:36:33 <ais523> I just can't figure out what the line means at all
20:36:49 <oerjan> wrong country, no tv in my room and several hours later might explain it. possibly.
20:36:50 <elliott> ais523: I can, but it's hard to describe without the incredibly useful "lol" and ":("
20:37:01 <elliott> it's like ":(", but it's been modified slightly
20:37:08 <elliott> there's an inkling of a :/ type situation
20:37:27 <elliott> and it sort of has a deamplified sarcastic laughter in the background, but softened rather than harsh, at the badness of the situation
20:37:33 <elliott> something hinting at cosmic irony
20:37:35 <elliott> YOU'RE WELCOME
20:37:48 <ais523> thanks for the description
20:37:53 <ais523> night everyone
20:37:55 -!- ais523 has quit (Remote host closed the connection).
20:38:09 <elliott> 19:31:28: <myndzi> what purpose did that text serve? it confirmed that i'd read your response, had nothing further to say, and adds that it was both humorous and unfortunate to me
20:38:09 <elliott> also this
20:38:15 <elliott> also I scared ais away with my psychobabble
20:38:49 -!- Ngevd has quit (Ping timeout: 252 seconds).
20:39:05 <oerjan> hey it's topical, he should be able to stand it if he voluntarily joins the channel
20:39:07 <zzo38> If you defined join in that way would fmap be fmap x = id >=> return . x
20:39:27 <oerjan> :t id >=> return . ?x
20:39:28 <lambdabot> forall (m :: * -> *) b a. (Monad m, ?x::b -> a) => m b -> m a
20:39:43 <oerjan> so it seems
20:41:20 <zzo38> Why doesn't that ?x stuff working in my computer? I just used \ to display the type instead
20:41:33 <oerjan> ImplicitParameters extension
20:41:45 <zzo38> OK
20:42:23 <zzo38> Then I suppose you can define a monad in terms of (return .) and (<=<)
20:42:43 <oerjan> :t (return .)
20:42:44 <lambdabot> forall a (m :: * -> *) (f :: * -> *). (Monad m, Functor f) => f a -> f (m a)
20:42:54 <oerjan> sigh, caleskell
20:42:57 <oerjan> :t (return Prelude..)
20:42:58 <lambdabot> forall b (m :: * -> *) a. (Monad m) => (a -> b) -> a -> m b
20:43:36 -!- Phantom_Hoover has joined.
20:43:36 <oerjan> :t (return .) id
20:43:37 <lambdabot> forall a (m :: * -> *). (Monad m) => a -> m a
20:43:43 <zzo38> You can get return from (return .) by, if you have f = (return .) then you have return = f id
20:43:50 <zzo38> Because that is the identity laws of categories
20:44:01 <oerjan> i just did that :P
20:44:14 <elliott> oh Phantom_Hoover came back
20:44:21 <elliott> speak of the devil
20:44:22 <elliott> i guess
20:44:23 <elliott> he returns
20:44:25 <elliott> from eireriealdn
20:44:55 <oerjan> :t (const ?x >=> ?f) undefined
20:44:56 <lambdabot> forall (m :: * -> *) b c. (?x::m b, ?f::b -> m c, Monad m) => m c
20:45:11 <Phantom_Hoover> Is this like the last time you spoke of the devil by insulting me.
20:45:17 <oerjan> and that's one way to get >>=
20:45:30 <Phantom_Hoover> Help my key is unreliable.
20:46:16 <oerjan> the key is such a fickle beast
20:46:34 <Phantom_Hoover> It is indeed.
20:51:30 <zzo38> Defining monad in terms of (return .) and (<=<) seems a way to directly convert morphisms??
20:52:42 <oerjan> zzo38: ah yes, (return .) is a mathematical functor from the category with . as composition to the one with <=< as composition
20:53:30 <oerjan> (the latter is the kleisli category, if you haven't seen it, although it's mentioned in the Control.Arrow module)
20:53:47 <oerjan> (with a newtype wrapper)
20:53:52 <oerjan> :t Kleisli
20:53:53 <lambdabot> forall a (m :: * -> *) b. (a -> m b) -> Kleisli m a b
20:55:48 <oerjan> http://www.haskell.org/ghc/docs/latest/html/libraries/base-4.4.0.0/Control-Arrow.html#t:Kleisli
20:56:21 <oerjan> but then i expect you have, since you're investigating <=< in the first place
21:00:48 <zzo38> Yes I know that <=< and >=> is the Kleisli composition.
21:01:26 <zzo38> Now I can understand better.
21:01:51 <zzo38> And I have seen the Kleisli type
21:02:37 -!- zzo38 has quit (Remote host closed the connection).
21:04:24 -!- monqy has joined.
21:15:54 <elliott> can i have caret plz
21:16:07 <oerjan> > 17*8-7*11
21:16:08 <lambdabot> 59
21:16:11 <elliott> thats not caret
21:16:22 -!- oerjan has set topic: Freudian armchair psycho-babble | It is the 90s and there is time for an international hub for esoteric programming language design and deployment @ Hel/Finland on 3.10.2011: https://wiki.helsinki.fi/display/lambda/esoteeriset+ohjelmointikielet | god bless haskell america | 12345678!&^ | http://codu.org/logs/_esoteric/.
21:16:29 <Deewiant> elliott: git add -p instead of git commit --interactive
21:17:54 <elliott> Deewiant: Hmm, that looks nicer
21:18:02 <elliott> Deewiant: Is there any way to amend a previous commit by splitting it into patches? :-P
21:18:37 <Deewiant> rebase :-P
21:19:12 <elliott> :'(
21:27:06 -!- sllide has quit (Read error: Connection reset by peer).
21:32:50 <Gregor> <elliott> Gregor: What's the relevance of the Zune here -- oh, you installed Windows in the VM so you can use the Zune. // the "it" in that sentence was the Zune, not the VM, although as it turns out the former naturally implied the latter.
21:33:50 <elliott> Deewiant: I don't support an interactive rebase will do it :P
21:34:48 <Deewiant> suppose*
21:35:01 <Deewiant> Just "edit" the commit you want to split
21:36:48 <elliott> Deewiant: But that involves git commit --amending it... am I supposed to just copy the files out, revert some changes, and then manually copy the changes I want in another commit back in?
21:37:31 <Deewiant> Oh right, hmm
21:37:42 <Deewiant> I suppose you can git reset --soft there
21:38:11 <elliott> Hmm, I've never used reset --soft before
21:38:12 <elliott> What's that do
21:38:16 <elliott> Manpage isn't very helpful
21:38:53 <Deewiant> "Sets the current head to the specified commit" "Does not touch the index file nor the working tree at all" :-P
21:39:41 -!- kmc has joined.
21:39:59 <pikhq> elliott: git reset --soft changes the head pointer to point at the commit you hand it. And nothing else.
21:40:10 <elliott> Deewiant: Right, okay, but if I then, say, remove twenty lines I want to be in a different commit, that would then obliterate them
21:40:20 <elliott> I must instead copy those lines elsewhere, outside of the repo, so that I can later restore them
21:40:36 <Deewiant> "Does not touch the ... working tree at all"
21:40:44 <elliott> ...
21:40:47 <elliott> Deewiant: Right, okay, but if I then, say, remove twenty lines I want to be in a different commit, that would then obliterate them
21:40:49 <elliott> I must instead copy those lines elsewhere, outside of the repo, so that I can later restore them
21:40:56 <elliott> The whole point is to reduce the size of the commit
21:40:56 <Deewiant> elliott: What is "that"
21:41:02 <elliott> Which involves editing the files
21:41:06 <elliott> Deewiant: ..."so that"
21:41:11 <elliott> In order so that I may be able to later restorethem
21:41:14 <pikhq> elliott: What part of changing the head pointer obliterates changes?
21:41:15 <Deewiant> elliott: "that owuld then obliterate"
21:41:19 <Deewiant> would*
21:41:27 <elliott> Deewiant: Removing those twenty lines and amending the commit would obliterate those lines
21:41:46 <elliott> Such that I would not then be able to create a new commit after that one with those changes without memorising them
21:41:49 <elliott> pikhq: It's what I do after that
21:41:49 <Deewiant> You don't want to amend after the reset --soft
21:41:55 <Deewiant> Just commit ordinarily
21:41:58 <pikhq> elliott: Ah, right.
21:42:09 <elliott> Deewiant: And git will magically figure out which parts of the commit I want?
21:42:16 <elliott> Or do you mean commit --interactive
21:42:35 <elliott> The problem is that just hunk-based selection probably isn't enough
21:42:43 <pikhq> Here is where you mutter "git's UI sucks balls".
21:42:55 <Deewiant> With add -p you can edit the hunks manually
21:43:09 <elliott> Thank god, I was almost afraid I'd be able to do this from the comfort of my editor
21:43:27 <elliott> I think I'll stick with the "manually copy the tree out and incrementally bring this closer"
21:43:36 <elliott> Oh yeah, what happens to the commit date if I add new commits in-between
21:44:12 <elliott> The situation is basically
21:44:22 <elliott> http://sprunge.us/JhTb
21:44:30 <elliott> The commits made in the last few minutes are just fine
21:44:44 <elliott> That commit made some hours ago is way too big and needs splitting up with manual editing to mimic a less slapdash developmental style :-P
21:45:03 <elliott> I am fine with the commit date of the resulting split patches being "now", and bumping the commit date of all the later patches
21:46:09 -!- kmc has quit (Quit: Leaving).
21:46:24 <elliott> This is a pain :P
21:46:25 <Deewiant> Editing in add -p /does/ open an editor :-P
21:46:44 <elliott> I like git to think I'm a vim user for commit messages, but I'm not
21:46:53 <elliott> Deewiant: More importantly, it'll need multi-file edits
21:46:58 <elliott> And cabal-dev invocations to attempt rebuilds
21:46:59 <elliott> etc.
21:47:21 <Deewiant> Sounds like you should maybe do a new branch and cherry-pick or something
21:47:29 <elliott> So, OK, here's the real situation: How do I obliterate the last N patches without throwing away the changes
21:47:30 <elliott> As in
21:47:34 <elliott> Don't touch the working tree
21:47:39 <elliott> But obliterate those commits and reset the HEAD
21:47:49 <elliott> And then I'll just selectively re-commit everythin
21:47:50 <elliott> g
21:47:55 -!- FireFly has quit (Quit: FireFly).
21:48:17 <Deewiant> elliott: git reset --soft :-P
21:49:25 <elliott> I didn't realise reset could change history
21:49:34 <elliott> --soft sounds rather more hard than what --hard does
21:50:21 <Deewiant> --hard does the same thing as --soft but also throws away your changes, that seems harder
21:50:36 <elliott> Then that doesn't do what I need; --hard doesn't change HEAD
21:50:44 <elliott> Unless I'm sorely mistaken
21:51:29 <Deewiant> reset changes the head, always
21:52:05 <Deewiant> --soft makes it not change the index, --hard makes it also change the working tree
21:52:20 <elliott> I use "git reset --hard" to remove changes from the working tree after I make some changes and they suck
21:52:23 <elliott> Without changing the repository
21:52:23 <elliott> Is that wrong
21:53:06 <Deewiant> No, that's equivalent to "git reset --hard HEAD" which obviously doesn't change the head in practice :-P
21:53:19 <elliott> Ah
21:53:30 <elliott> OK, time to do this shit, as they say in the hood
21:53:52 <elliott> Deewiant: btw, I take it the commit objects will remain around until a git-gc?
21:54:16 <Deewiant> And even thereafter unless I misunderstand gc
21:54:28 <elliott> How do I get rid of 'em then, git pack?
21:54:42 <pikhq> Deewiant: If the commit objects aren't referred to by anything, gc will remove them.
21:54:47 <Deewiant> Do enough shit that they fall out of the reflog
21:54:54 <elliott> Deewiant: Gross
21:54:55 <Deewiant> pikhq: But aren't they referred to by the reflog
21:55:05 <pikhq> Quite possibly.
21:55:05 <Deewiant> elliott: You don't need to explicitly get rid of them
21:55:18 <elliott> Deewiant: Will they get pushed to github if I push
21:55:19 <Deewiant> They'll disappear if you don't use them
21:55:21 <Deewiant> No
21:55:26 <elliott> Hmmmmmmm
21:55:28 <elliott> Alright then
21:55:31 <Deewiant> Unless you leave a branch pointing to them or something
21:55:32 <elliott> I might just re-clone :-P
21:55:36 <Deewiant> (And then push that branch)
21:55:40 <pikhq> They expire after a given time, so it's not like you really need to think about it.
21:55:51 <elliott> elliott@katia:~/Code/mchost$ git reset --soft fe5730069ce57be21cbc2fddb5115094679e1ab8
21:55:51 <elliott> elliott@katia:~/Code/mchost$ git diff
21:55:51 <elliott> elliott@katia:~/Code/mchost$
21:55:53 <elliott> Deewiant: Help
21:56:03 <Deewiant> git status
21:56:17 <elliott> # Changes to be committed:
21:56:18 <elliott> # (use "git reset HEAD <file>..." to unstage)
21:56:18 <elliott> #
21:56:18 <elliott> #modified: MC/Protocol.hs
21:56:18 <elliott> #modified: MC/Protocol/Fields.hs
21:56:18 <elliott> #modified: MC/Protocol/Types.hs
21:56:20 <elliott> #modified: Main.hs
21:56:22 <elliott> Hmmm
21:56:38 <elliott> So I just need to git reset HEAD them to get them back in the diff?
21:56:42 <elliott> God I suck at git
21:56:48 <Deewiant> Or git diff --cached
21:57:02 <Deewiant> If you just want to look at them, that is
21:57:08 <pikhq> Or you could have done git reset --mixed, to drop the staged changes, too.
21:57:13 <Deewiant> You can even git reset -p (inverse of add -p) if you're feeling adventurous
21:57:31 <elliott> Should I feel upset about the resulting stream of commits not being authentically chronological
21:57:34 <Deewiant> Right, plain git reset (it defaults to --mixed) would probably have been better
21:57:36 <elliott> As in
21:57:42 <Deewiant> But it's equivalent to doing another reset now
21:57:51 <pikhq> Probably the worst bit of git is that it in no way makes its own data model actually visible; you pretty much need to remember what each command actually does to the data.
21:57:55 <elliott> I did a bunch of fixes between adding ServerProtocol and before exporting ServerProtocol
21:57:55 <pikhq> Rather than it being clear.
21:58:05 <elliott> But I'm going to do it this time as me exporting ServerProtocol as soon as I write it
21:58:10 <elliott> Is that bad, am I a bad person, I feel bad
21:58:17 <pikhq> Imagine if it were "git set-head" instead of "git reset --soft", for instance.
21:58:42 <Deewiant> I wonder if somebody's written a set of aliases like that
21:58:49 <Deewiant> (And published it)
21:58:58 <elliott> Pls. report on my badness
21:59:26 <Deewiant> Shrug
22:00:26 <pikhq> Hmm. Actually, maybe have it be a bit clearer still. You name the data structure being modified and then the modification to do.
22:01:01 <pikhq> e.g. "git working checkout" to do a checkout into your working tree, "git stage add" to add things to the staging area, "git stage commit" to commit the staging area...
22:01:18 <Deewiant> Many operations are too complicated to express like that, though
22:01:25 <elliott> I'm feeling bad still
22:01:26 <Deewiant> Like the swiss army knife that is rebase
22:01:27 <pikhq> For instance?
22:01:32 <pikhq> Oh, effing rebase.
22:01:44 <elliott> Validate me or I'm switching to darcs
22:02:18 <Deewiant> You're worried about exporting something in an earlier commit now? :-P
22:02:32 <pikhq> I'd probably want to split rebase into a few different commands, TBH.
22:02:35 <elliott> Yes
22:02:40 <elliott> It's like lying
22:02:42 <elliott> I'm a aliar
22:02:44 <elliott> s/aliar/liar/
22:02:55 <Deewiant> Doesn't seem bad to me
22:03:02 <elliott> At least splitting isn't very lie-like, it only lies about my committing practices, not my development order
22:03:08 <Deewiant> pikhq: rebase --interactive is immensely convenient as one command
22:03:29 <pikhq> Deewiant: It's also quite different from git rebase without --interactive.
22:03:36 <Deewiant> True
22:04:22 <Deewiant> Maybe something like "git everything interactive-rebase" ;-)
22:04:23 <pikhq> I'd probably split it up into "git branch rebase" and "git branch rewrite" or something.
22:04:54 <pikhq> Though "branch" doesn't seem quite right, because branch isn't really a git data structure.
22:05:26 <pikhq> "history" is at least less of a misnomer.
22:07:27 <pikhq> Hmm. The "git commit" vs. "git commit -a" comes out nicely. "git stage commit" vs. "git working commit".
22:07:50 <Deewiant> What about "git commit file"
22:08:30 <pikhq> Clearly misguided. "git commit" would be a class of commands that operate on commit objects.
22:08:42 <Deewiant> I meant, what would it be
22:09:08 <Deewiant> It's equivalent to stash, add file, commit, stash pop
22:09:13 <elliott> How does one hard reset a single file
22:09:22 <elliott> git refuses to do it :P
22:09:26 <pikhq> Probably "git working commit file".
22:09:28 <Deewiant> git status tells you
22:09:38 <elliott> Oh, right
22:10:36 <elliott> Aww, you can't do "git diff ../derivative-of-this-repo ." :/
22:11:04 <Deewiant> But you can do that without the "git" ;-P
22:11:05 <Lymee> Somebody need to write git repodiff or something
22:11:31 <elliott> Deewiant: Does that support patience diff??????
22:11:32 <elliott> I think not
22:11:45 <Deewiant> Probably not
22:12:02 <elliott> --- ./.git/COMMIT_EDITMSG 2011-09-19 23:10:44.580093001 +0100
22:12:02 <elliott> +++ ../mchost.new/.git/COMMIT_EDITMSG 2011-09-19 23:05:02.490093001 +0100
22:12:02 <elliott> @@ -1,8 +1,8 @@
22:12:02 <elliott> -Make fields in MC.Protocol.Types strict
22:12:02 <elliott> +Turn some simple wrapper data types into newtypes
22:12:02 <lambdabot> -1,8 +1,8
22:12:03 <elliott> # Please enter the commit message for your changes. Lines starting
22:12:05 <elliott> # with '#' will be ignored, and an empty message aborts the commit.
22:12:07 <elliott> # On branch master
22:12:09 <elliott> -# Your branch is ahead of 'origin/master' by 3 commits.
22:12:11 <elliott> +# Your branch is ahead of 'origin/master' by 7 commits.
22:12:13 <elliott> #
22:12:15 <elliott> # Changes to be committed:
22:12:17 <elliott> # (use "git reset HEAD <file>..." to unstage)
22:12:19 <elliott> Binary files ./.git/index and ../mchost.new/.git/index differ
22:12:21 <elliott> diff -ru ./.git/logs/HEAD ../mchost.new/.git/logs/HEAD
22:12:23 <elliott> Thanks Deewiant, you're so right, I can do that with just "diff"
22:12:25 <elliott> WORKS PERFECT FIRST TIME
22:12:34 <elliott> -x .git woo
22:12:44 <elliott> File ./fifo is a fifo while file ../mchost.new/fifo is a fifo
22:12:44 <elliott> A large difference
22:12:45 <Deewiant> Don't blame me if you don't have diff aliased to the appropriate thing
22:13:26 <elliott> I wonder why git-diff doesn't work on things that aren't git repos.
22:13:45 <Deewiant> Does any other <VCS> diff? :-P
22:14:24 <elliott> Well, git diff is better than diff(1)
22:14:35 <elliott> And git is stupid, so the algorithm should not be git-specific at all
22:14:59 <elliott> Oh my god, Debian really does call ack "ack-grep"
22:15:07 <elliott> Wait, why did I install that, I want diff
22:15:08 <elliott> diff is not grep
22:15:22 <elliott> I am not think good right now
22:21:14 -!- SgeoN1 has joined.
22:21:57 <SgeoN1> I told my dad about the swap space issue, he said not to worry about it. I think he'll buy me another flash or HD if this wears out.
22:22:09 <SgeoN1> Can wear out be detected?
22:23:29 <SgeoN1> I'll also try switching to Lubuntu.
22:25:14 <elliott> Deewiant: git add -p, git commit --amend should do the right thing, right?
22:25:47 <elliott> As in "only amend in the stuff I select, leave the other stuff untouched in my working tree"
22:26:43 <elliott> Seems so
22:29:12 * Phantom_Hoover → sleep
22:29:15 -!- Phantom_Hoover has quit (Quit: Leaving).
22:38:09 -!- ineiros has quit (Ping timeout: 240 seconds).
22:39:44 -!- ineiros has joined.
22:49:04 <oerjan> eek, web is gone
22:54:44 <elliott> ?
22:55:44 <oerjan> i smell a dns issue
22:55:59 <oerjan> i cannot open new connections
22:56:44 <olsner> look up some IP address and see if you can connect to it by IP
22:59:40 -!- Jafet has quit (Quit: Leaving.).
23:02:40 <elliott> $ dist/build/mchost/mchost server < serverlog
23:02:40 <elliott> SHandshake (LoggedIn "9544a299e615f168")
23:02:40 <elliott> SLogin (EntityID 964784) "" 8675309 False (WorldID 0) 0 0 0
23:02:40 <elliott> mchost: Data.Text.Array.new: size overflow
23:02:40 <elliott> Heh
23:02:49 <elliott> fizzie: The server sends string lengths as signed shorts, not unsigned, right?
23:03:02 <elliott> Obviously no real string will be long enough to show the difference, just checking. :p
23:06:55 <fizzie> Since, as you say, no strings are long enough, it's a bit of a philosophical question. Someone should check the deobfuscated source just to be sure. We do assume signed in mcmap.
23:07:28 <oerjan> that's weird now my putty shortcuts work again, but still not web
23:07:37 <elliott> If a string falls in the forest and nobody is around to hear it, is its length still measured in signed shorts?
23:07:55 <elliott> fizzie: So, it's after the worldid that parsing fucks up, you concluded, yes?
23:09:02 <fizzie> Yes. Because the unknown 02 is/was what's interpreted as the type byte for a new 0x02 SHandshake.
23:09:30 <oerjan> google by ip doesn't work either
23:09:32 <fizzie> (At least it sounded like that.)
23:09:50 <elliott> fizzie: Time to use -ddump-splices to look at what the generated code looks like, then.
23:10:22 <elliott> 1##
23:10:23 <elliott> -> do { entity[aj6v] <- Data.Serialize.get;
23:10:23 <elliott> unused[aj6w] <- getTextUTF16be;
23:10:23 <elliott> mapSeed[aj6x] <- Data.Serialize.get;
23:10:23 <elliott> isCreative[aj6y] <- Data.Serialize.get;
23:10:23 <elliott> world[aj6z] <- Data.Serialize.get;
23:10:25 <elliott> unknown[aj6A] <- Data.Serialize.get;
23:10:27 <elliott> worldHeight[aj6B] <- Data.Serialize.Get.getWord8;
23:10:31 <elliott> maxPlayers[aj6C] <- Data.Serialize.Get.getWord8;
23:10:33 <elliott> return
23:10:35 <elliott> (SLogin
23:10:37 <elliott> entity[aj6v]
23:10:39 <elliott> unused[aj6w]
23:10:41 <elliott> mapSeed[aj6x]
23:10:43 <elliott> isCreative[aj6y]
23:10:45 <elliott> world[aj6z]
23:10:47 <elliott> unknown[aj6A]
23:10:49 <elliott> worldHeight[aj6B]
23:10:51 <elliott> maxPlayers[aj6C]) }
23:10:53 <elliott> Well, that certainly looks right.
23:10:55 <elliott> Erm.
23:10:57 <elliott> maxPlayers isn't a ubyte is it
23:11:01 <elliott> Huh, it is
23:11:13 <elliott> SLogin !EntityID !Data.Text.Internal.Text !GHC.Int.Int64 !Bool !WorldID !GHC.Int.Int8 !GHC.Word.Word8 !GHC.Word.Word8 |
23:11:21 <elliott> That also looks right. At least to me.
23:11:33 <elliott> Ah hmm ah hmm
23:11:33 <elliott> Hmm
23:11:34 <elliott> Ah
23:11:34 <elliott> Hmm
23:11:38 <elliott> Hmmmmmmmmmmmm
23:11:50 <elliott> fizzie: Note that "Bool" there
23:11:54 <elliott> Bools are usually bytes in the Minecraft protocol
23:12:08 <elliott> -- Bools are encoded as a byte in the range 0 .. 1
23:12:08 <elliott> instance Serialize Bool where
23:12:08 <elliott> put = putWord8 . fromIntegral . fromEnum
23:12:08 <elliott> get = liftM (toEnum . fromIntegral) getWord8
23:12:38 -!- Patashu has joined.
23:12:57 <fizzie> What's that WorldID like? Just another name for a byte?
23:13:14 <elliott> Yes.
23:13:23 <elliott> Yes, this is almost certainly the problem. The seed parses fine because big endian.
23:13:27 <elliott> And thus we have a desync.
23:15:03 <elliott> fizzie: Ah good, now it fails after parsing some entity data
23:15:21 -!- copumpkin has quit (Quit: Computer has gone to sleep.).
23:15:38 <fizzie> Ho-hum, right; the server mode is an int is what you meant.
23:17:40 -!- ive has quit (Ping timeout: 260 seconds).
23:23:11 <SgeoN1> This does feel more comfortable with swap.
23:23:31 <SgeoN1> Free -m doesn't state that there's any swap usage though, so I'm cknfused
23:23:37 <oerjan> hm some sites work now
23:24:49 <hagb4rd> can do ansic style too? the dump thang
23:25:29 -!- sebbu3 has changed nick to sebbu.
23:26:02 <hagb4rd> no, it's not that important..i'll go out for a walk and a drink
23:26:05 <hagb4rd> cu later
23:26:15 <elliott> ?pl fmap f (g x)
23:26:15 <lambdabot> fmap f (g x)
23:26:18 <elliott> oerjan: hepl
23:26:20 <elliott> hagb4rd: The dump thing?
23:26:41 <elliott> oerjan: i'm trying to en-nicen
23:26:42 <elliott> WindowItems <$> (replicateM (fromIntegral count) $ do
23:26:42 <elliott> let getShort = SE.get :: Get Int16
23:26:42 <elliott> sh <- SE.lookAhead getShort
23:26:42 <elliott> if sh < 0
23:26:42 <elliott> then getShort >> return Nothing
23:26:44 <elliott> else Just <$> SE.get)
23:26:46 <elliott> the parens are... unnice...
23:26:53 <hagb4rd> hi elliott.. i'll explain this later on, if u like
23:26:57 <elliott> hagb4rd: ok
23:27:05 <elliott> fmap WindowItems . replicateM (fromIntegral count) $ do
23:27:08 <elliott> oerjan: that works but is kinda ugly :/
23:27:25 <elliott> I guess I'll just go with that
23:27:40 <oerjan> elliott: `replicateM`
23:27:56 <oerjan> should work there
23:28:44 <oerjan> in the spot of the $
23:30:25 <SgeoN1> Why is casper-rw not part of disk space according to Ubuntu
23:30:31 <elliott> oerjan: you mean
23:30:33 <elliott> WindowItems <$> fromIntegral count `replicateM` do
23:30:34 <elliott> ...
23:30:34 <elliott> ?
23:30:36 <oerjan> yep
23:30:41 * elliott tries it
23:30:47 <elliott> i'm not convinced it's nicer though :P
23:30:59 <oerjan> alternative, `id` instead of $
23:31:16 <oerjan> but i somehow doubt you think that's better :P
23:31:21 <elliott> nice :P
23:31:28 <elliott> hmm, it does indeed work
23:31:33 <elliott> but I think my solution is more readable :P
23:31:41 <oerjan> what solution
23:31:51 <elliott> fmap WindowItems . replicateM (fromIntegral count) $ do
23:31:55 <oerjan> oh well
23:32:13 <oerjan> oh hm
23:32:27 <SgeoN1> Argh, I need a home-rw too I guess
23:35:27 -!- calamari has joined.
23:36:57 <oerjan> hm my tests make me suspect i cannot correct directly to sites outside norway. not due to dns, as google.no doesn't work, but statoil.com does.
23:37:18 <elliott> :D
23:37:29 <elliott> s/correct/connect/ btw
23:37:35 <oerjan> er right
23:37:35 <elliott> oerjan: sounds like a router is down
23:37:39 <oerjan> yeah
23:37:42 <elliott> but that is soooo cool :DDDDDD
23:37:43 <elliott> geographical internet
23:37:52 <elliott> reminds me of that sysadmin story thing that maybe someone remembers
23:38:35 <oerjan> however i can connect from nvg to google.no just fine, so it's not _from_ all norwegian sites.
23:40:41 <elliott> well that just means that nvg have a different isp to you.
23:40:41 <oerjan> quite possibly just my isp, since when the failure started i couldn't reach norwegian sites either.
23:40:43 -!- copumpkin has joined.
23:40:48 <oerjan> yeah
23:40:54 <elliott> you're essentially using nvg as a router in place of your isp's :P
23:40:57 <elliott> or your isp's isp's
23:41:05 <oerjan> nvg is in the university network, almost certainly
23:41:13 -!- Jafet has joined.
23:41:30 <oerjan> which is in a sense norway's oldest isp, i think :P
23:42:06 <oerjan> or close to it
23:44:55 <oerjan> oh i reached liu.se
23:45:13 <elliott> How long until oerjan figures out we caged Scandinavia?
23:45:33 <oerjan> well i couldn't reach bbc earlier
23:45:45 <elliott> BBC: a Scandinavian institution.
23:45:49 <oerjan> still no haskell.org
23:46:06 <oerjan> elliott: well it was the first clearly european domain i tried
23:46:22 <oerjan> (outside norway)
23:46:24 <elliott> Heh
23:47:32 <oerjan> www.turku.fi failed
23:49:01 <oerjan> ok ku.dk works
23:50:48 <oerjan> it does indeed look distinctly scandinavian
23:51:36 <oerjan> hamburg.de fails
23:52:05 <oerjan> hm could it be that it depends on more than just country
23:52:27 <elliott> oerjan: It depends on the exact tangle of ISPs :P
23:52:38 <elliott> Cables and routers and blah blah blah.
23:52:59 <oerjan> oxford.ac.uk fails
23:53:24 <oerjan> elliott: i just realized all the working scandinavian ones were universities
23:53:46 <elliott> oerjan: maybe there's some sort of scandinavian university network thing
23:54:04 <oerjan> www.maersk.dk fails
23:54:10 -!- augur has quit (Remote host closed the connection).
23:54:23 <oerjan> elliott: that was what i was thinking, however i hadn't actually tested any non-universities
23:54:59 <elliott> oerjan: you could use nvg as an http proxy, if you'd like it fixed sooner rather than later
23:55:36 <oerjan> hm ikea.se fails but that's aliased to akamai something
23:55:36 -!- AndChat| has quit (Read error: Connection reset by peer).
23:55:43 <oerjan> heh
23:55:44 <elliott> Akamai is a content distribution network.
23:55:49 <elliott> They're not Scandinavian. :p
23:55:49 -!- DH____ has joined.
23:55:51 <elliott> oerjan: I wasn't joking
23:56:01 <elliott> Would take a few commands and a setting in IE
23:56:05 <oerjan> that was what i recalled, i think reddit uses them
23:56:12 <elliott> Yeah.
23:57:30 <oerjan> no hurry yet, i'll just read vg.no
23:57:30 -!- DH____ has quit (Read error: Connection reset by peer).
23:57:49 -!- DH____ has joined.
2011-09-20
00:02:57 -!- pikhq has quit (Ping timeout: 240 seconds).
00:03:11 -!- pikhq has joined.
00:04:46 -!- DH____ has quit (Read error: Connection reset by peer).
00:06:03 <oerjan> wat wikipedia loaded
00:06:51 <oerjan> i guess it really is random
00:07:30 <elliott> <stdin>:17: trailing whitespace.
00:07:30 <elliott>
00:07:30 <elliott> warning: 1 line adds whitespace errors.
00:07:32 <elliott> Deewiant: help
00:08:00 <elliott> oh I see
00:11:09 <oerjan> now i can read about cheerful things like rhabdomyolysis
00:34:41 -!- DH____ has joined.
00:39:35 -!- augur has joined.
00:44:19 -!- DH____ has quit (Ping timeout: 260 seconds).
00:48:56 -!- DH____ has joined.
00:52:33 -!- Wamanuz2 has quit (Remote host closed the connection).
00:53:12 -!- Wamanuz2 has joined.
00:56:42 -!- Jafet has quit (Quit: Leaving.).
01:01:06 -!- Jafet has joined.
01:13:09 -!- elliott has quit (Read error: Connection reset by peer).
01:13:43 -!- elliott has joined.
01:14:34 -!- elliott has quit (Remote host closed the connection).
01:14:35 -!- elliott_ has joined.
01:16:23 -!- ive has joined.
01:31:43 -!- DH____ has quit (Read error: Connection reset by peer).
01:31:55 -!- DH____ has joined.
01:43:42 <Gregor> Haha, the hack to make the Zune give up its Zune UI and expose the underlying Windows CE UI works.
01:43:50 <elliott_> lol
01:44:24 <Gregor> But whereas the Zune UI makes one think "I want to kill myself", the Windows CE UI makes one think "I want to kill myself, but first kill my parents as punishment for bringing into this world someone who would one day own a Windows CE device."
01:44:39 <elliott_> `addquote <Gregor> But whereas the Zune UI makes one think "I want to kill myself", the Windows CE UI makes one think "I want to kill myself, but first kill my parents as punishment for bringing into this world someone who would one day own a Windows CE device."
01:44:41 <HackEgo> 673) <Gregor> But whereas the Zune UI makes one think "I want to kill myself", the Windows CE UI makes one think "I want to kill myself, but first kill my parents as punishment for bringing into this world someone who would one day own a Windows CE device."
01:45:13 <pikhq> Which CE UI?
01:45:25 <Gregor> pikhq: 6.0
01:45:54 <Gregor> (Whatever that means, I have no idea what the giant compendium of names for CE all mean)
01:46:01 <Gregor> It claims to be "Windows CE 6.0"
01:47:21 <Gregor> I mean, it basically looks like Windows 95, except then somebody decided to move all the buttons into the stupidest possible position.
01:47:36 <pikhq> So, something like http://upload.wikimedia.org/wikipedia/en/7/72/Wince50.PNG
01:48:14 <Gregor> It looks a bit more ... Idonno, something than that, but not much.
01:48:25 <pikhq> That's CE 5.
01:48:26 <Gregor> Like the systray is embossed, and the start menu actually says "start"
01:49:51 <Gregor> pikhq: Upon further investigation, it seems that they never bothered to make any changes to the "explorer" UI for Windows CE 6, since all of their CE 6 devices don't use it.
01:50:06 <Gregor> So although it's slightly different from that screenshot, it's not much.
01:50:27 <pikhq> There's also Pocket PC, Windows Mobile, and Windows Phone UIs for the damned OS.
01:50:40 <pikhq> Microsoft seems to love fucking with the UI.
01:50:54 <tiffany> and.. all of these are based on the same "micro"kernel?
01:50:57 <Gregor> Apparently Windows Mobile 6 is based on Windows CE 5 (logic)
01:51:07 <pikhq> tiffany: Yes, it's all CE.
01:51:12 <Gregor> Windows Phone 7 is based on Windows CE 6 (more logic)
01:51:32 <tiffany> (100mb of overhead isn't really too micro... :/)
01:51:50 <pikhq> Also, CE doesn't even claim to be a microkernel.
01:51:57 <tiffany> o.o
01:52:07 <Gregor> Still, what this gives me the ability to do is program for the Zune with GCC.
01:52:14 <Gregor> Bootloader, here I (don't) come!
01:52:19 <pikhq> And the overhead of CE is ~1 meg. Everything else on it, not so much.
01:57:00 <CakeProphet> so I think I've discovered a link between hammerspace and hammertime.
01:57:07 <CakeProphet> a 4-dimensional hammerspace-time continuum.
01:57:32 -!- Jafet has quit (Quit: Leaving.).
02:02:46 <Patashu> wooah
02:11:46 -!- variable has quit (Ping timeout: 252 seconds).
02:11:49 -!- invariable has joined.
02:17:55 -!- augur has quit (Remote host closed the connection).
02:19:52 <oerjan> > zip (1:2:undefined) [3,4]
02:19:53 <lambdabot> [(1,3),(2,4)*Exception: Prelude.undefined
02:20:01 <oerjan> > zip [3,4] (1:2:undefined)
02:20:02 <lambdabot> [(3,1),(4,2)]
02:21:34 <elliott_> ?check \f xs ys -> zipWith f xs ys == liftM2 f xs ys
02:21:34 <lambdabot> Overlapping instances for GHC.Show.Show (a -> b -> c)
02:21:34 <lambdabot> arising from a use...
02:21:47 <elliott_> ?check \xs ys -> zipWith (/) xs ys == liftM2 (/) xs ys
02:21:48 <lambdabot> "Falsifiable, after 2 tests:\n[2.25]\n[-1.2,-1.0]\n"
02:21:50 <elliott_> lame
02:21:58 <elliott_> > liftM2 f [a,b,c] [x,y,z]
02:21:59 <lambdabot> Ambiguous occurrence `a'
02:21:59 <lambdabot> It could refer to either `L.a', defined at <local...
02:22:02 <elliott_> >_<
02:22:06 <elliott_> > liftM2 f [L.a,b,c] [x,y,z] :: [Expr]
02:22:07 <lambdabot> Couldn't match expected type `b -> ()'
02:22:07 <lambdabot> against inferred type `Simpl...
02:22:13 <elliott_> gah
02:22:20 <CakeProphet> @undefine
02:22:38 <oerjan> elliott_: erm it's lame that the [] monad isn't the ZipList monad?
02:23:02 <elliott_> YES.
02:23:18 <oerjan> shocking.
02:23:47 <oerjan> ?check zipWith === liftM2
02:23:48 <lambdabot> Not in scope: `==='
02:23:49 <elliott_> btw you're still sure that ZipList is a monad? :P
02:24:04 <oerjan> i've never seen a proof that it isn't :P
02:26:19 <oerjan> > scanl1 (zipWith (const id)) ["abc", "defg", "hij", "klmno", "pqrs"]
02:26:20 <lambdabot> ["abc","def","hij","klm","pqr"]
02:26:42 <CakeProphet> uh... why would the zip
02:26:48 <CakeProphet> list have a different bind than a regular list?
02:27:05 <oerjan> CakeProphet: because it has a different Applicative
02:27:08 <CakeProphet> they're basically the same type, with the same functor.
02:27:18 <CakeProphet> oh... I didn't realize that would change the monad.
02:27:30 <oerjan> @src ap
02:27:31 <lambdabot> ap = liftM2 id
02:27:57 <oerjan> the Applicative is given by the Monad, conceptually
02:30:04 -!- invariable has changed nick to variable.
02:31:16 <CakeProphet> @pl ZipList fs <*> ZipList xs = ZipList (zipWith id fs xs)
02:31:16 <lambdabot> (line 1, column 27):
02:31:16 <lambdabot> unexpected "="
02:31:16 <lambdabot> expecting variable, "(", "`", "!!", ".", operator or end of input
02:32:17 <CakeProphet> @pl (\fs xs -> ZipList (zipWith id (getZipList fs) (get ZipList xs))
02:32:17 <lambdabot> (line 1, column 65):
02:32:17 <lambdabot> unexpected end of input
02:32:17 <lambdabot> expecting variable, "(", operator or ")"
02:32:21 <CakeProphet> @pl (\fs xs -> ZipList (zipWith id (getZipList fs) (get ZipList xs)))
02:32:22 <lambdabot> (ZipList .) . (. get ZipList) . zipWith id . getZipList
02:32:30 <CakeProphet> = liftM2 id
02:32:57 <CakeProphet> er...
02:32:58 <CakeProphet> :t get
02:32:59 <lambdabot> forall (m :: * -> *) s. (MonadState s m) => m s
02:33:01 <CakeProphet> wat
02:33:11 <CakeProphet> getZipList /= get ZipList
02:33:11 <oerjan> CakeProphet: on would be useful there
02:33:23 <oerjan> i don't think @pl uses that
02:33:51 <oerjan> also, @pl has no idea about most functions
02:33:58 <CakeProphet> right I mistyped.
02:33:59 <oerjan> and even less about types
02:34:39 <CakeProphet> so uh.... liftM2 = zipWith here?
02:34:44 <CakeProphet> the rest is just wrapper stuff.
02:34:54 <CakeProphet> :t liftM2
02:34:55 <lambdabot> forall a1 a2 r (m :: * -> *). (Monad m) => (a1 -> a2 -> r) -> m a1 -> m a2 -> m r
02:34:57 <oerjan> yes
02:35:01 <CakeProphet> :t zipWith
02:35:01 <lambdabot> forall a b c. (a -> b -> c) -> [a] -> [b] -> [c]
02:35:06 <CakeProphet> @src lifeM2
02:35:06 <lambdabot> Source not found. This mission is too important for me to allow you to jeopardize it.
02:35:09 <CakeProphet> @src liftM2
02:35:09 <lambdabot> liftM2 f m1 m2 = do { x1 <- m1; x2 <- m2; return (f x1 x2) }
02:35:47 <CakeProphet> uuuuh.
02:36:00 <CakeProphet> @src zipWith
02:36:00 <lambdabot> zipWith f (a:as) (b:bs) = f a b : zipWith f as bs
02:36:00 <lambdabot> zipWith _ _ _ = []
02:36:59 <CakeProphet> perhaps if I stare long enough.
02:37:01 <CakeProphet> it will come to me.
02:37:07 <oerjan> > let ZipList l >>_ f = ZipList . diag . scanl1 (zipWith (const id)) $ map f l where diag ((x:xs):xss) = x:diag (map (drop 1) xss); diag _ = [] in ZipList [1,2,3] >>_ flip replicateM "abcd"
02:37:07 <lambdabot> <no location info>: Parse error in pattern
02:37:11 <oerjan> oops
02:37:20 <oerjan> oh
02:37:45 <oerjan> > let ZipList l >>+ f = ZipList . diag . scanl1 (zipWith (const id)) $ map f l where diag ((x:xs):xss) = x:diag (map (drop 1) xss); diag _ = [] in ZipList [1,2,3] >>+ ZipList . flip replicateM "abcd"
02:37:46 <lambdabot> Precedence parsing error
02:37:46 <lambdabot> cannot mix `>>+' [infixl 9] and `L..' [infixr...
02:38:09 <oerjan> > (0$0 >>=)
02:38:10 <lambdabot> The operator `GHC.Base.>>=' [infixl 1] of a section
02:38:10 <lambdabot> must have lower pr...
02:38:20 <oerjan> > let infixl 1 >>+; ZipList l >>+ f = ZipList . diag . scanl1 (zipWith (const id)) $ map f l where diag ((x:xs):xss) = x:diag (map (drop 1) xss); diag _ = [] in ZipList [1,2,3] >>+ ZipList . flip replicateM "abcd"
02:38:21 <lambdabot> Couldn't match expected type `[a]'
02:38:21 <lambdabot> against inferred type `Control.A...
02:38:25 <CakeProphet> @undo liftM2 f m1 m2 = do { x1 <- m1; x2 <- m2; return (f x1 x2) }
02:38:25 <lambdabot> liftM2 f m1 m2 = m1 >>= \ x1 -> m2 >>= \ x2 -> return (f x1 x2)
02:38:30 <CakeProphet> @src zipWith
02:38:30 <oerjan> gah
02:38:30 <lambdabot> zipWith f (a:as) (b:bs) = f a b : zipWith f as bs
02:38:30 <lambdabot> zipWith _ _ _ = []
02:38:38 <CakeProphet> uuuuuuh.
02:39:51 <CakeProphet> @@ @pl @undo liftM2 f m1 m2 = do { x1 <- m1; x2 <- m2; return (f x1 x2) }
02:39:51 <lambdabot> liftM2 = liftM2
02:39:53 <CakeProphet> ...
02:40:08 <CakeProphet> THANKS
02:40:11 <oerjan> CakeProphet: (<*>) = zipWith ($), for that applicative
02:40:56 -!- augur has joined.
02:41:15 <oerjan> > let infixl 1 >>+; ZipList l >>+ f = ZipList . diag . scanl1 (zipWith (const id)) $ map (getZipList . f) l where diag ((x:xs):xss) = x:diag (map (drop 1) xss); diag _ = [] in ZipList [1,2,3] >>+ ZipList . flip replicateM "abcd"
02:41:16 <lambdabot> No instance for (GHC.Show.Show
02:41:16 <lambdabot> (Control.Applicative.Zip...
02:41:24 <oerjan> yay it types
02:41:31 <oerjan> > ZipList [1,2]
02:41:31 <lambdabot> No instance for (GHC.Show.Show (Control.Applicative.ZipList t))
02:41:32 <lambdabot> arising ...
02:41:45 <oerjan> > let infixl 1 >>+; ZipList l >>+ f = ZipList . diag . scanl1 (zipWith (const id)) $ map (getZipList . f) l where diag ((x:xs):xss) = x:diag (map (drop 1) xss); diag _ = [] in getZipList $ ZipList [1,2,3] >>+ ZipList . flip replicateM "abcd"
02:41:47 <lambdabot> ["a","ab","aac"]
02:42:04 <CakeProphet> um
02:42:09 <oerjan> hm
02:42:10 <CakeProphet> what is that even doing.
02:42:21 <oerjan> indeed, i did a monad too much
02:42:26 <oerjan> > let infixl 1 >>+; ZipList l >>+ f = ZipList . diag . scanl1 (zipWith (const id)) $ map (getZipList . f) l where diag ((x:xs):xss) = x:diag (map (drop 1) xss); diag _ = [] in getZipList $ ZipList [1,2,3] >>+ ZipList . flip replicate "abcd"
02:42:27 <lambdabot> ["abcd"]
02:42:42 <oerjan> wat
02:43:52 <oerjan> oh right
02:44:08 <oerjan> > let infixl 1 >>+; ZipList l >>+ f = ZipList . diag . scanl1 (zipWith (const id)) $ map (getZipList . f) l where diag ((x:xs):xss) = x:diag (map (drop 1) xss); diag _ = [] in getZipList $ ZipList [1,2,3] >>+ ZipList . flip take "abcd"
02:44:09 <lambdabot> "a"
02:44:22 <oerjan> > let infixl 1 >>+; ZipList l >>+ f = ZipList . diag . scanl1 (zipWith (const id)) $ map (getZipList . f) l where diag ((x:xs):xss) = x:diag (map (drop 1) xss); diag _ = [] in getZipList $ ZipList [3,2,1] >>+ ZipList . flip take "abcd"
02:44:23 <lambdabot> "ab"
02:44:37 <CakeProphet> surely that's breaking a law. :P
02:45:05 <oerjan> the scanl1 part is intended to fix some breakage that _does_ arise otherwise
02:45:31 <CakeProphet> so uh, can you explain that function to me?
02:45:37 <CakeProphet> it's rather cryptic
02:45:51 <oerjan> well, for any monad, x >>= f = join (fmap f x)
02:45:59 <CakeProphet> ah
02:46:05 <oerjan> so most of that is to define join
02:46:24 <CakeProphet> zipWith (const id) just ignores the second list yes?
02:46:29 <CakeProphet> er, first one?
02:46:43 <oerjan> _almost_, but it uses it to truncate the _length_
02:47:29 <CakeProphet> ah right.
02:47:32 <monqy> const id is the same as flip const
02:47:32 <lambdabot> monqy: You have 1 new message. '/msg lambdabot @messages' to read it.
02:47:39 <oerjan> intuitively, the join for this monad is taking the diagonal of a list of lists
02:47:41 <CakeProphet> monqy: yes I know.
02:47:42 <monqy> oh my
02:47:52 <CakeProphet> oerjan: neat.
02:48:08 * CakeProphet would not have come to that conclusion for... well ever.
02:48:37 <monqy> lambdabot doesn't send that in notice? shameful
02:48:44 <monqy> the message, I mean
02:49:08 <Gregor> Discovery: A giant tub of chicken livers = $1.19
02:49:31 <Gregor> I am going to make a /stupid/ amount of liver paste.
02:49:34 <CakeProphet> oerjan: so uh... is that it? Monad for ZipList?
02:49:35 <monqy> anyway yeah I forgot transformers wasn't included with ghc or something like that
02:49:36 <CakeProphet> or is something wrong?
02:49:51 <monqy> or a dependency of template-haskell or whatever the th package is
02:49:55 <oerjan> CakeProphet: i hope nothing's wrong with that scanl adjustment
02:49:58 <monqy> whichever
02:50:30 <oerjan> if you take the diagonal naively, there is sometimes something wrong with the third monad law
02:50:53 <monqy> which is that, and is the problem nontermination
02:51:19 <oerjan> monqy: do you see anything that could not terminate in that definition :P
02:51:40 <monqy> I don't know which it is!
02:51:42 <monqy> I also haven't been paying attention
02:51:56 <oerjan> > let infixl 1 >>+; ZipList l >>+ f = ZipList . diag . scanl1 (zipWith (const id)) $ map (getZipList . f) l where diag ((x:xs):xss) = x:diag (map (drop 1) xss); diag _ = [] in getZipList $ ZipList [3,2,1] >>+ ZipList . flip take "abcd"
02:51:58 <lambdabot> "ab"
02:52:01 -!- calamari- has joined.
02:52:04 <oerjan> that one
02:52:15 <monqy> oh >>+ is bind?
02:52:18 <oerjan> yes
02:52:22 -!- calamari- has quit (Client Quit).
02:52:29 <oerjan> well, i hope so
02:52:46 <oerjan> it works to define the Applicative from it. even without the scanl1 part.
02:53:39 <CakeProphet> gotta check the laws
02:53:46 <oerjan> this is because the list of lists which arises from applicative use is always rectangular, so the scanl1 part has no effect
02:54:40 <oerjan> @do liftM2 id x y
02:54:41 <lambdabot> liftM2 id x y
02:54:43 <oerjan> bah
02:54:56 <oerjan> @src liftM2
02:54:56 <lambdabot> liftM2 f m1 m2 = do { x1 <- m1; x2 <- m2; return (f x1 x2) }
02:55:06 <oerjan> @undo do { x1 <- m1; x2 <- m2; return (f x1 x2) }
02:55:06 <lambdabot> m1 >>= \ x1 -> m2 >>= \ x2 -> return (f x1 x2)
02:55:38 <CakeProphet> is liftM2 = zipWith (with wrapping ignored)
02:55:48 <oerjan> @pl m1 >>= \ x1 -> m2 >>= \ x2 -> return (f x1 x2)
02:55:48 <lambdabot> (`fmap` m2) . f =<< m1
02:56:02 <oerjan> CakeProphet: yes
02:56:46 <oerjan> and that again = join (fmap ((`fmap` m2) . f) m1)
02:57:13 <CakeProphet> publish a paper now. :P
02:57:27 <oerjan> you may check that the argument of join is a rectangular list
02:57:32 <oerjan> no.
02:57:53 <oerjan> anyway this is surely known by everyone who has tried to define the monad before.
02:58:25 <CakeProphet> perhaps it's not very obvious and not a lot of people have figured it out
02:58:35 <oerjan> from that, if you put in f = (,), it will be obvious that join _has_ to take the diagonal elements to give the usual applicative.
02:58:54 <oerjan> because those are the only spots where the right values for the result arise
03:01:04 <oerjan> oh. another way to see it is that since the part inside is only functors, it is in fact the same expression you join as for the _usual_ [] monad
03:01:50 <oerjan> which is the list comprehension [[f x y | y <- m2]| x <- m1]
03:02:10 <CakeProphet> hmmm, I believe zipper is a monad. has anyone ever written this?
03:02:18 <CakeProphet> I mean it's pretty obvious...
03:02:25 <monqy> zipper, a monad?
03:02:30 <oerjan> *ZipList
03:02:32 <monqy> which zipper is this
03:02:36 <monqy> oh ziplist
03:02:42 <CakeProphet> no I'm talking about zippers.
03:02:46 <monqy> oh zippers
03:02:50 <oerjan> oh.
03:03:09 <oerjan> if you say so.
03:03:12 <CakeProphet> you could have multiple monad definitions I believe. >_>
03:03:15 <monqy> I've only heard about them being comonads? or something like that?
03:04:05 <monqy> I forget the definition of a zipper :(
03:04:06 <oerjan> it follows from all this that the join of a monad is determined from the applicative on "rectangular" m (m x) values.
03:04:42 <CakeProphet> an yes "rectangular"
03:05:13 <oerjan> which is a value of the form [[f x y | y <- m2]| x <- m1], where you use monad comprehensions instead of just lists, i think.
03:05:36 <CakeProphet> well if bind simply passed the current value of the zipper to the monadic function, would that break laws?
03:05:54 <CakeProphet> and then returned whatever the function returned.
03:05:57 <oerjan> except that these values only need Functor to construct them.
03:06:34 <CakeProphet> oh, yes it would...
03:06:39 <oerjan> CakeProphet: you are talking about actual zippers, not ziplists?
03:06:48 <CakeProphet> yes
03:07:05 <CakeProphet> well left identity and right identity work.
03:07:24 <oerjan> CakeProphet: wouldn't you need multiple holes?
03:07:33 <CakeProphet> why?
03:08:05 <oerjan> because x >>= f , where f is a function which produces zippers with their one hole in different places...
03:08:21 <oerjan> how do you combine that into just one hole.
03:08:24 -!- Jafet has joined.
03:08:35 <CakeProphet> f would only get called once
03:08:40 <CakeProphet> it literally just gets passed the current hole
03:08:44 <CakeProphet> and returns the return of bind.
03:08:53 <oerjan> ...oh.
03:09:07 <oerjan> um the current hole with a value, then.
03:09:10 <CakeProphet> yes.
03:09:23 <CakeProphet> don't zippers always have a current value?
03:09:33 <CakeProphet> data Zipper t = Zipper [t] t [t]
03:09:35 <CakeProphet> like so?
03:09:40 <oerjan> not necessarily...
03:09:42 <monqy> that's a zipper on lists
03:09:46 <CakeProphet> oh.
03:10:04 <CakeProphet> that's the only zipper I'm familiar with.
03:10:27 <monqy> well it's not the only zipper
03:11:25 <CakeProphet> ah right you could have data Zipper t = Zipper [t] [t]
03:11:29 <monqy> what
03:11:29 <CakeProphet> which would allow to possibility of empty.
03:11:34 <monqy> that's
03:11:35 <monqy> not what I meant
03:11:39 <monqy> zippers aren't just for lists
03:11:39 <CakeProphet> yes I know
03:11:45 <CakeProphet> I get what you said
03:11:48 <CakeProphet> this is a separate thought
03:12:14 <monqy> also for zippers
03:12:16 <monqy> on lists
03:12:17 <monqy> first
03:12:20 <monqy> what's your functor instance
03:12:21 <monqy> then
03:12:24 <monqy> what's your monad instance
03:12:25 <oerjan> anyway a zipper with a value, then you could splice >>= result in, i guess
03:12:34 <oerjan> oh _wait_
03:12:38 -!- Jafet has quit (Client Quit).
03:13:02 -!- calamari has quit (Quit: Leaving).
03:13:04 <CakeProphet> data Zipper t = Zipper [t] t [t]
03:13:10 <CakeProphet> current (Zipper _ x _ ) = x
03:13:23 <oerjan> CakeProphet: problem, (>>=) :: Zipper t -> (t -> Zipper u), what if t is not ~ u
03:13:39 <oerjan> *CakeProphet: problem, (>>=) :: Zipper t -> (t -> Zipper u) -> Zipper u, what if t is not ~ u
03:13:41 <CakeProphet> ~ u?
03:13:45 <monqy> the same as u
03:13:58 <CakeProphet> oh, yes that is a problem. :P
03:14:01 <monqy> I forgot about dealing with types that way. I was going to illustrate the same problem but a different way
03:14:18 <monqy> by taking the functor instance and then showing how doing it his way with a good functor instance would break monad laws
03:14:29 <monqy> of course it's much easier to notice the types problem
03:14:30 <CakeProphet> so yeah that bind doesn't work
03:14:51 <CakeProphet> and doing a map over all of the values in the zipper doesn't work because each returned zipper can have different holes and such.
03:15:28 <CakeProphet> unless you just ignore that and concatenate their current values together while keeping the same location in the original zipper
03:15:31 <CakeProphet> if that makes sense.
03:16:49 <oerjan> you need to preserve the holes for the return x >>= f case
03:16:49 <CakeProphet> (Zipper l x r) >>= f = Zipper (map (current.f) l) (f x) (map (current.f) r)
03:17:57 <CakeProphet> I think that would work??
03:18:30 <oerjan> what's current
03:18:40 <CakeProphet> current (Zipper _ x _ ) = x
03:18:49 <CakeProphet> return a = Zipper [] a []
03:19:09 <CakeProphet> er
03:19:11 <oerjan> CakeProphet: (f x) doesn't have the right type
03:19:11 <CakeProphet> (f x)
03:19:13 <CakeProphet> isn't possible
03:19:13 <CakeProphet> yeah
03:19:26 <CakeProphet> (current.f) then
03:19:52 <CakeProphet> which I think satisfies left/right identity... somehow.
03:20:27 <CakeProphet> ...no
03:20:54 <CakeProphet> f (z) = [1,2,3] (current z) [1,2,3]
03:20:59 <CakeProphet> then the identities don't work.
03:22:14 <CakeProphet> return a >>= f = Zipper [] a []
03:22:27 <CakeProphet> f a = Zipper [1,2,3] a [1,2,3]
03:23:22 <CakeProphet> my original definitioin for bind that only applied f to the current value would work if you had
03:23:34 <CakeProphet> data Zipper t a = Zipper [t] a [t]
03:23:40 <CakeProphet> but that's... probably not very useful.
03:23:58 <CakeProphet> also it has the wrong kind.
03:25:10 <elliott_> there is a genrric zipper monas
03:25:11 <elliott_> d
03:25:17 <oerjan> @let infixl 1 >>+; l >>+ f = diag . scanl1 (zipWith (const id)) $ map f l where diag ((x:xs):xss) = x:diag (map (drop 1) xss); diag _ = []
03:25:18 <lambdabot> Defined.
03:25:26 <monqy> elliott_: a relievf
03:25:33 <monqy> whats the formal defintion of a ziepr
03:25:41 <elliott_> see http://conway.rutgers.edu/~ccshan/wiki/blog/posts/WalkZip3/ and previous posts
03:25:42 <monqy> im not know :(
03:26:24 <elliott_> http://okmij.org/ftp/continuations/zipper.html#traversable has simpler and more restricted generic zipper but i don't think it's a monad
03:26:37 <elliott_> blog posts i linked are sequel to that
03:26:44 <oerjan> @check (x >>+ f >>+ g) == ((x :: [Int]) >>+ \t -> (f t :: [Int]) >>+ g :: [Int])
03:26:44 <lambdabot> Not in scope: `>>+'Not in scope: `>>+'Not in scope: `>>+'Not in scope: `>>+'
03:26:52 <oerjan> ffff
03:27:05 <CakeProphet> is there a name for monads that can't change type in their bind...... as in m a -> (a -> m a) -> m a
03:27:11 <oerjan> :t (>>+)
03:27:11 <lambdabot> forall a1 a. [a1] -> (a1 -> [a]) -> [a]
03:27:54 <oerjan> @check let infixl 1 >>+; l >>+ f = diag . scanl1 (zipWith (const id)) $ map f l where diag ((x:xs):xss) = x:diag (map (drop 1) xss); diag _ = [] in (x >>+ f >>+ g) == ((x :: [Int]) >>+ \t -> (f t :: [Int]) >>+ g :: [Int])
03:27:54 <monqy> CakeProphet: what
03:27:54 <lambdabot> Couldn't match expected type `[a]'
03:28:33 <monqy> CakeProphet: if you're going mathy you're dealing with the functor stuff with unit and join
03:28:40 <oerjan> :t let infixl 1 >>+; l >>+ f = diag . scanl1 (zipWith (const id)) $ map f l where diag ((x:xs):xss) = x:diag (map (drop 1) xss); diag _ = [] in (x >>+ f >>+ g) == ((x :: [Int]) >>+ \t -> (f t :: [Int]) >>+ g :: [Int])
03:28:41 <lambdabot> Couldn't match expected type `[a]' against inferred type `Expr'
03:28:41 <lambdabot> In the first argument of `(>>+)', namely `x'
03:28:41 <lambdabot> In the first argument of `(>>+)', namely `x >>+ f'
03:28:48 <oerjan> argh
03:28:58 <CakeProphet> monqy: as in a monad with the restriction that monadic functions applied to bind preserve the type of the monad.
03:29:01 <monqy> CakeProphet: and a functor from a category to itself is called an endofunctor i think??
03:29:10 <oerjan> @check let infixl 1 >>+; l >>+ f = diag . scanl1 (zipWith (const id)) $ map f l where diag ((x:xs):xss) = x:diag (map (drop 1) xss); diag _ = [] in \x f g -> (x >>+ f >>+ g) == ((x :: [Int]) >>+ \t -> (f t :: [Int]) >>+ g :: [Int])
03:29:11 <lambdabot> Overlapping instances for GHC.Show.Show
03:29:11 <lambdabot> (GHC.T...
03:29:25 -!- MDude has changed nick to MSleep.
03:29:41 <oerjan> BURN
03:29:55 <monqy> anyway i need to actually learn category theory
03:29:55 <monqy> but how
03:29:58 <monqy> :(
03:30:15 <CakeProphet> math Ph.D
03:30:20 <elliott_> oerjan: it tries to `show` couterexamples
03:30:23 <elliott_> counter
03:30:38 <elliott_> so inputs must have Show
03:30:44 <CakeProphet> > :t (`show`)
03:30:45 <lambdabot> <no location info>: parse error on input `:'
03:30:50 <CakeProphet> :t (`show`)
03:30:51 <lambdabot> parse error on input `)'
03:31:00 <pikhq> God, Windows must be a pain to develop.
03:31:06 <pikhq> They're up to 5 fucking APIs now.
03:31:27 <pikhq> DOS, Win16, Win32, CLR, and WinRT.
03:31:34 <oerjan> elliott_: some _idiot_ decided to overlap the function Shows :(
03:32:16 <CakeProphet> oerjan's conquest of monadic ziplist glory is met with fierce and imposing obsctacles. How will he proceed?
03:32:36 <SgeoN1> WinRT?
03:32:37 <oerjan> probably by banning everyone in the channel and going down in flames.
03:32:44 <monqy> how does function show even suposesd to work
03:32:44 <elliott_> oerjan: you can use quickcheck locally, but i am sceptical functions have a useful Arbitrary instance anyhow
03:33:02 <oerjan> elliott_: that's what CoArbitrary _is_ for
03:33:26 <CakeProphet> Arbitrary a where whatever :: a -> a -> Maybe a -> ???!?!?!!?!?
03:33:38 <elliott_> oerjan: oh
03:33:44 <SgeoN1> Argh I think I just may try to get Puppy Linux working, or something
03:34:04 <SgeoN1> This is painful. I can't get Lubuntu to boot into X
03:34:09 -!- hagb4rd has quit (Ping timeout: 240 seconds).
03:34:16 <SgeoN1> Oh, here we go
03:35:21 <CakeProphet> I like how do notation usually makes thing more annoying looking.
03:35:39 <CakeProphet> well... not usually
03:35:44 <CakeProphet> it makes the monad laws looks cumbersome.
03:35:57 <oerjan> food ->
03:35:57 <monqy> why are you donotationing the monad laws
03:36:11 <SgeoN1> How do I double check that casper is in use without rebooting?
03:36:33 -!- azaq23 has quit (Ping timeout: 240 seconds).
03:39:09 <CakeProphet> monqy: I'm not but haskellwiki does.
03:39:10 -!- azaq23 has joined.
03:39:16 <CakeProphet> under the section "practical meaning of the monad laws"
03:39:19 <monqy> :(
03:39:22 <CakeProphet> as if it makes it more practical or something.
03:39:25 <monqy> :(
03:39:41 <CakeProphet> "In this notation the laws appear as plain common sense."
03:40:18 <monqy> they only appear as plain common sense to me when they're pointfree :|
03:40:33 <CakeProphet> how do you write them pointfree...
03:40:37 <SgeoN1> Well, /proc/cmdline mentions persistent. That's a good sign right?
03:40:56 <monqy> CakeProphet: how do you write them in do-notation
03:41:10 <CakeProphet> http://www.haskell.org/haskellwiki/Monad_Laws
03:43:56 <monqy> return x >>= f ≡ f x; m >>= return ≡ m; (m >>= f) >>= g ≡ m >>= (f >>= g)
03:44:01 <monqy> happey??
03:44:24 <CakeProphet> that's "point-free"?
03:44:31 <monqy> what did you expect
03:44:36 <CakeProphet> no points.
03:45:01 <monqy> oops!!!
03:45:10 <CakeProphet> @pl (\f x -> x >>= f)
03:45:10 <lambdabot> (=<<)
03:45:16 <coppro> haha
03:45:34 <CakeProphet> (=<<) = ($)
03:45:36 <CakeProphet> obviously
03:45:50 <CakeProphet> er wait
03:45:56 <CakeProphet> @pl (\f x -> return x >>= f)
03:45:56 <lambdabot> id
03:45:57 <CakeProphet> oops
03:46:00 <CakeProphet> id = ($)
03:46:03 <CakeProphet> there we go
03:46:42 <CakeProphet> @pl (\m -> m >>= return)
03:46:43 <lambdabot> id
03:46:51 <CakeProphet> id = id
03:46:55 <CakeProphet> is the second one
03:46:58 <CakeProphet> :P
03:47:08 <monqy> CakeProphet: if you'd like your "point-free" definitions, try section "But it doesn't look exactly like an "associative law"..."
03:47:26 <CakeProphet> yeah >=> make more sense for point freedom.
03:47:48 <CakeProphet> (return >=>) = id
03:47:55 <monqy> the haiku form is good
03:48:04 <CakeProphet> worst haiku ever.
03:48:10 <monqy> no it's good shut up
03:48:30 <CakeProphet> you have no taste in poetry
03:49:02 <CakeProphet> poeterry
03:49:06 <CakeProphet> pottery
03:50:48 -!- zzo38 has joined.
03:51:31 <zzo38> How much do you know about high-quality medieval clothing? (This question is for the D&D game, actually)
03:52:14 <monqy> extreme roleplaying?
03:52:32 <monqy> I'll never understand
03:53:05 <CakeProphet> zzo38: I am teh expert
03:53:11 <CakeProphet> monqy: know I think he wants to know for realism
03:53:15 <CakeProphet> not for LARPing or anything.
03:53:31 <zzo38> Yes, correct; it is not LARPing.
04:06:22 <monqy> curious, a spambot made a spam userpage, and then another spambot made a spam talk page for it, which looks like the original but with the links or something like that shuffled around a bit
04:07:21 <oerjan> the spambot mating dance
04:07:39 <oerjan> call david attenborough
04:10:17 -!- hagb4rd has joined.
04:10:51 -!- hagb4rd has quit (Client Quit).
04:11:52 -!- hagb4rd has joined.
04:12:53 -!- mike has joined.
04:13:19 -!- mike has changed nick to Guest99864.
04:13:50 <Guest99864> Hi all
04:15:48 <Gregor> `? welcome
04:15:49 <HackEgo> Welcome to the international hub for esoteric programming language design and deployment! For more information, check out our wiki: http://esolangs.org/wiki/Main_Page
04:17:41 <elliott_> hi
04:19:56 -!- MDude has joined.
04:21:17 <monqy> hi guest
04:23:46 -!- MSleep has quit (Ping timeout: 252 seconds).
04:25:43 -!- Guest99864 has quit (Quit: Page closed).
04:25:50 <elliott_> rip guest
04:26:19 -!- michaelh has joined.
04:26:28 -!- michaelh has quit (Client Quit).
04:26:41 <elliott_> rip same guy prolly
04:27:19 -!- oerjan has quit (Quit: rip to shreds).
04:30:19 -!- kmc has joined.
04:32:27 -!- michael1411 has joined.
04:37:42 -!- zzo38 has quit (Ping timeout: 252 seconds).
04:38:08 -!- zzo38_ has joined.
04:38:13 -!- zzo38_ has changed nick to zzo38.
04:39:54 <pikhq> What. If all Catholic bishops agree on a matter of faith and morals at any given time, it becomes the irrevocable, infallible, canonical belief of the Catholic Church forevermore.
04:40:12 <coppro> whee
04:40:39 <pikhq> I do believe this implies that it is official Catholic doctrine that the world is flat, and that disease is caused by miasma.
04:41:58 <elliott_> hard to prove that
04:42:01 -!- michael1411 has quit (Quit: Page closed).
04:42:08 <elliott_> also miasma isn't really a matter of faith and morals is it
04:42:11 <elliott_> maybe worldflatness
04:42:26 <pikhq> Okay, world flatness was treated as such, miasma not so much.
04:43:11 <elliott_> you just need to define faith and morals according to modern-day conception
04:43:17 <elliott_> in which the flatness of the world is not considered a matter of faith
04:43:18 <elliott_> tada
04:43:27 <pikhq> It was once, ergo it is forevermore.
04:43:43 <elliott_> it wasn't
04:43:56 <elliott_> it wasn't a matter of [modernday]faith and [modernday]morals
04:43:58 <hagb4rd> whats about the flatness of this insight, anyone found out yet?
04:44:03 <elliott_> where [modernday] indicates using today's definition
04:44:09 <elliott_> hagb4rd: so what was that ansi c dump stuff about
04:44:25 <hagb4rd> woa, you're scary elliott
04:44:28 <elliott_> wat
04:44:46 <hagb4rd> you are frightening me
04:44:54 <elliott_> how
04:45:18 <hagb4rd> with your britwa sharpened mind
04:45:25 <elliott_> wat
04:45:26 <hagb4rd> no
04:45:32 <hagb4rd> its out of topic now
04:45:58 <pikhq> It might also be infallible doctrine that Jesus did not walk the Earth, which produces some major headaches.
04:46:07 <elliott_> hagb4rd: you said you'd explain it later
04:46:12 <elliott_> it is now later, i'm askin'
04:46:21 <pikhq> (this is hard to tell, because it depends on heavily ambiguous records)
04:46:28 <elliott_> since I don't actually know what the context was it would be hard for me to steer the topic to that
04:46:40 <elliott_> but if you let me know what the context was I will make it on topic
04:47:00 <hagb4rd> i know..you can do that..that's right, but i want to discuss religion now
04:47:04 <hagb4rd> no
04:47:28 <elliott_> i don't see why your conversations in other channels would affect what you talk about in here
04:47:47 <pikhq> For instance, since it is claimed that the Church's authority comes from Jesus *as a person* bestowing it upon St. Peter, the first Pope, if it is also the case that it is claimed Jesus never existed then the Church goes up in a puff of logical smoke.
04:48:08 <hagb4rd> thery're all like, yes looking to say sth wise
04:48:17 <hagb4rd> but im out for sth true
04:48:22 <hagb4rd> can udig it?
04:48:34 <elliott_> hagb4rd: what?
04:48:42 <hagb4rd> so
04:48:44 <hagb4rd> ansic
04:49:02 <hagb4rd> i hate k&r style
04:49:50 <elliott_> what's the dump you were talking about
04:50:05 <hagb4rd> i've drunken to much to care bout now..i want to know more about jesus walking the earth now
04:50:29 <elliott_> you've drunken too much to make any sense, too
04:50:34 <hagb4rd> please focus on the mwean things
04:50:40 <elliott_> mwean?
04:50:44 <hagb4rd> and let me just shut up
04:51:09 <elliott_> pikhq: i think he wants you to talk about jesus
04:51:16 <hagb4rd> lol..
04:51:26 <pikhq> hagb4rd: Well, it's kinda interesting; the writings of Paul (the first Christian records we have *at all*) do not seem to claim that Jesus was anything but a supernatural spirit. The concept of Jesus as a human being seems to have only come about decades later.
04:51:33 <hagb4rd> thx elliott, please dont get mad bout this
04:51:52 <elliott_> why would i get mad
04:53:04 <hagb4rd> jesus, yes.. he was human
04:53:11 <hagb4rd> and that is fantastic
04:53:32 <hagb4rd> more than beeing able to speak with fish.. like seaman does
04:53:42 <elliott_> `addquote <hagb4rd> jesus, yes.. he was human <hagb4rd> and that is fantastic <hagb4rd> more than beeing able to speak with fish.. like seaman does
04:53:43 <HackEgo> 674) <hagb4rd> jesus, yes.. he was human <hagb4rd> and that is fantastic <hagb4rd> more than beeing able to speak with fish.. like seaman does
04:54:04 <monqy> reminded me of itidus there
04:54:29 <monqy> is that what drunken does
04:57:28 -!- DH____ has quit (Read error: Connection reset by peer).
04:57:39 -!- DH____ has joined.
04:58:41 <zzo38> I think () is final objects in Hask but are there initial objects? But I don't really know for sure, I don't really know a lot of things about category theory
05:00:43 <zzo38> Is newtype an isomorphism?
05:09:04 <zzo38> It says it isn't inital or terminal because of undefined.
05:09:11 <elliott_> who's it
05:10:05 <zzo38> But, is it, if you ignore undefined, and work only with fully defined programs?
05:27:14 <Gregor> Now, in spite of Windows CE's abysmal UI, the combination of that and an FTP server is making the Zune approach being a sufferable device.
05:27:23 <Gregor> At least I can get media to it without booting Windows.
05:27:27 <Gregor> (Except on it :P )
05:41:23 <pikhq> Now get Rockbox on it.
05:43:05 <Gregor> If there was Rockbox for Windows CE, that would be great.
05:43:13 <Gregor> But I don't think they have Rockbox-as-an-app.
05:43:26 <Gregor> And I'm sure as hell not figuring out how to chainload this thing :P
05:44:22 -!- Zuu has quit (Read error: Connection reset by peer).
05:49:22 -!- Zuu has joined.
05:49:31 -!- Zuu has quit (Changing host).
05:49:31 -!- Zuu has joined.
05:52:57 <elliott_> ?hoogle Bool -> Maybe a -> Maybe a
05:52:58 <lambdabot> Data.Generics.Aliases orElse :: Maybe a -> Maybe a -> Maybe a
05:52:58 <lambdabot> Data.Maybe fromMaybe :: a -> Maybe a -> a
05:52:58 <lambdabot> Control.Monad unless :: Monad m => Bool -> m () -> m ()
06:03:32 -!- azaq23 has quit (Quit: Leaving.).
06:05:12 -!- CakeProphet has quit (Ping timeout: 252 seconds).
06:22:17 <zzo38> I think I managed to make it derive instances of Language.Haskell.Syntax.TH.Lift
06:39:23 <zzo38> I think this is wrong: z' = foldl AppE x'' $ map (AppE (VarE 'lift) . VarE) z;
06:39:50 <zzo38> Because I need to apply AppE in the generated code, too.
06:43:43 -!- cheater has quit (Ping timeout: 252 seconds).
06:44:40 <monqy> why would you want to derive Lift? dataToExpQ/dataToQa are good enough for converting simple data things, and for anything else, I imagine a manual instance would be necessary
06:45:36 <monqy> like if you want antiquotation you'd either need a manual instance or I guess you might be able to make an automated derivation that handled antiquotation cases maybe???
06:47:50 <monqy> where by hnadled antiquotation cases I mean you give it a constructor and it treats the contents in a special way (if it handles Exp, leave as-is; for String, use haskell-src-exts or something)
06:48:20 <monqy> or you could one where the user provides such cases and you could prepackage an antiquotation one
06:48:22 <zzo38> Actuallyy I fixed the deriving Lift, now it works.
06:48:26 <monqy> ok
06:48:42 <monqy> then again you'd rpobably just be able to do what i described with dataToQa but I forget how it works
06:48:49 <zzo38> For example, if you declare deriveLift ''Ordering; then you can have $(lift LT) = LT
06:49:00 <monqy> since it's syb and syb is all about the sort of things I described
06:49:14 <zzo38> It works with constructors having parameters, too.
06:49:32 <monqy> zzo38: have you ever used dataToExpQ or dataToQa?
06:49:35 <monqy> zzo38: or syb?
06:49:39 <monqy> zzo38: you may find syb interesting
06:50:14 <zzo38> I also managed to make extractQ :: Q a -> a; it does work in many cases (in the cases that it doesn't work, you either get the error "No value in Quasi" or "Cannot perform I/O")
06:50:33 <zzo38> extractQ works with lift and with [| ... |]
06:50:48 <monqy> ooh
06:51:08 <zzo38> It also works with report although the result will always be ()
06:52:38 <zzo38> monqy: No, I have never heard of dataToExpQ, dataToQa, or syb.
06:53:19 <monqy> dataToExpQ takes any instance of Data and converts it to Q Exp
06:53:45 <zzo38> O, OK.
06:53:46 <monqy> dataToQa requires a bit more work but you can do more with it
06:54:00 <monqy> they're implemented with syb, a generic programming library thing
06:54:30 <zzo38> Well, mine just derives instances, and it does not have to already be an instance of anything else. However, its parameters must be instances of Lift.
06:56:29 <monqy> does reify tell anything about the instances of types? what I'm getting at: if there are parameters not instances of Lift, could you derive instances for them?
06:57:39 -!- cheater has joined.
06:57:41 <zzo38> monqy: The parameters might be variable types, though.
06:57:56 <monqy> ah, right
06:59:20 <zzo38> This is the program I used, and maybe it is too long; is there shorter way to derive Lift? http://hpaste.org/51559
07:01:44 <zzo38> The extractQ uses the Maybe monad, in which most things it cannot implement are Nothing, except runIO which is an error.
07:01:52 <zzo38> extractQ = maybe (error "No value in Quasi") id . runQ;
07:04:12 -!- GreaseMonkey has joined.
07:12:51 -!- itidus21 has joined.
07:13:23 <zzo38> I have the module "ExtraTH" with various things related to Template Haskell, these are exports: newVar, newVarMany, newCon, foreign_export, genCurry, genUncurry, extractQ, QuasiState(..), quasiState, recUpd, deriveLift. (Later I might add more) These are instances: instance Quasi Maybe; instance Quasi (State QuasiState); Instance MonadIO Q;
07:15:53 <elliott_> oh monqy did
07:15:54 <elliott_> an talkify
07:16:07 <itidus21> monqy c
07:16:20 <elliott_> "monqy c" --itidus21
07:17:50 <zzo38> Is there some way to add fields to QuasiState to allow reify and recover and classInstances to be usable in the state monad?
07:18:07 <monqy> hi
07:18:54 <itidus21> (define (tidus x) (* x x x)) (tidus 5) == 125 ... proof i have been reading some SICP ^_^;
07:19:32 <elliott_> yay
07:21:56 <itidus21> i didnt intend to make that second pun of "monqy did, monqy c" "tidus x"
07:22:48 <itidus21> and i do feel kind of guilty for that unprovoked comment
07:23:58 <elliott_> Has anyone used HsOpenSSL?
07:24:09 <elliott_> itidus21: It is totally disallowed to make comments without provoking.
07:24:15 <elliott_> This is why IRC is constantly silent forever.
07:24:59 <itidus21> where do people go to screw around on irc?
07:25:43 <itidus21> dumb question as i don't really want an answer
07:26:12 <itidus21> best if we don't know where we screw around.. seinfeld world colliding theory
07:28:32 <elliott_> the answer is here.
07:28:40 <itidus21> heh
07:28:49 <elliott_> http://esolangs.org/wiki/Special:Recentchanges uh oh
07:29:37 <monqy> oh no it's more of that userpage then usertalk page nonsense
07:29:45 <elliott_> is this a spambotloop...
07:30:05 <monqy> one of these guys made a spam talkpage for someone without a userpage
07:30:10 <elliott_> :')
07:30:13 <elliott_> so thoughtful
07:30:24 <elliott_> i'm sure it says like
07:30:25 <elliott_> hello
07:30:25 <monqy> is 123 even a user
07:30:26 <elliott_> in spambot
07:30:38 <elliott_> http://esolangs.org/wiki/Special:Contributions/123
07:30:40 <monqy> 123 has never made changes at least...
07:30:41 <elliott_> apparently>???
07:30:41 <monqy> yeah
07:36:49 <monqy> at least one of them got put inside one of those special boxes that is monospace and doesn't linewrap...
07:36:58 <monqy> now my horizontal scrollbar....
07:37:02 <elliott_> lnike...
07:37:03 <elliott_> i want to
07:37:04 <elliott_> see....
07:37:06 <elliott_> the bxoxoe
07:37:09 <monqy> http://esoteric.voxelperfect.net/wiki/User:Zhanzhan
07:37:18 <monqy> its bauteful
07:37:20 <elliott_> poor zhanzhan
07:37:31 <monqy> hedid toh..e..himself
07:37:49 <monqy> poor zahnzhan ;__;
07:37:55 <elliott_> ;__;
07:42:39 <zzo38> I want to know about the highest quality of medieval clothing for the purpose of D&D game. I already know the color, it is yellow and orange. What I don't know is materials (the DM doesn't know either).
07:42:53 <elliott_> im the best
07:42:56 <elliott_> mediveal ;__;
07:46:00 <zzo38> He just made up the color, and said it is otherwise like highest quality fashion medieval clothing.
07:48:44 <zzo38> Do you know about that kind of things?
07:51:37 <zzo38> The situation is, the navy probably thinks we were nobility but doesn't actually know where we came from (we were actually caught and enslaved, and escaped, and eventually found by the navy).
07:54:08 <zzo38> Is this good class improvement file? http://zzo38computer.cjb.net/dnd/options/Metamind.c
07:56:24 <zzo38> The other class improvement file is this one: http://zzo38computer.cjb.net/dnd/options/Illithid_Savant.c (Note: I plan to add a few more things under "Extras"; such as the "Impostor" ability) (Note: the "Extras" must be selected and learned individually and are limited per day)
08:01:34 <elliott_> ?hoogle lift
08:01:34 <lambdabot> Control.Monad.Trans lift :: (MonadTrans t, Monad m) => m a -> t m a
08:01:34 <lambdabot> Text.ParserCombinators.ReadPrec lift :: ReadP a -> ReadPrec a
08:01:34 <lambdabot> Language.Haskell.TH.Syntax lift :: Lift t => t -> Q Exp
08:01:58 <zzo38> elliott_: The one I used is Language.Haskell.TH.Syntax
08:02:13 <elliott_> zzo38: I actually did that in response to unrelated #haskell chat :P
08:02:15 <elliott_> as in, unrelated to your code
08:02:25 <zzo38> OK.
08:02:53 <zzo38> But do you know if my code for deriving Lift could be made shorter?
08:03:22 <elliott_> dunno
08:03:49 <zzo38> It seem to be too long, but I don't know if it is really too long
08:05:59 <zzo38> It does work how it is now, so that deriveLift ''Ordering; allows you to do $(lift EQ) and it work.
08:07:10 <zzo38> And do you know any information related to my question about the clothing?
08:11:53 -!- ive has quit (Quit: leaving).
08:15:46 -!- copumpkin has quit (Ping timeout: 260 seconds).
08:16:11 -!- copumpkin has joined.
08:19:35 -!- zzo38 has quit (Remote host closed the connection).
08:46:34 -!- CakeProphet has joined.
08:55:21 -!- aloril has quit (Ping timeout: 240 seconds).
09:08:13 -!- cheater_ has joined.
09:08:44 -!- aloril has joined.
09:21:03 -!- cheater_ has quit (Remote host closed the connection).
09:21:20 -!- cheater_ has joined.
09:23:15 -!- monqy has quit (Quit: hello).
09:29:56 -!- cheater_ has quit (Remote host closed the connection).
09:30:33 -!- cheater_ has joined.
09:34:38 -!- cheater_ has quit (Client Quit).
09:41:45 -!- cheater_ has joined.
09:42:53 -!- cheater_ has quit (Client Quit).
09:43:21 -!- cheater_ has joined.
09:45:15 -!- cheater has changed nick to cheater2.
09:45:30 -!- cheater_ has changed nick to cheater.
09:56:08 -!- cheater has quit (Quit: Ex-Chat).
09:56:38 -!- cheater has joined.
10:51:56 <CakeProphet> is there a convenient bash command to wrap an input at a certain line length?
10:52:44 -!- GreaseMonkey has quit (Quit: The Other Game).
10:55:49 <elliott_> yes. in fact HackEgo uses it.
10:55:55 <elliott_> unfortunately its name escapes me-
10:55:56 <elliott_> oh
10:55:56 <elliott_> fmt
10:55:57 -!- Jafet has joined.
10:56:03 <elliott_> CakeProphet: ps. it's not "bash command"
10:56:33 <CakeProphet> what is the palatable terminology around these parts?
10:56:38 <elliott_> unix command?
10:56:38 <CakeProphet> shell utility?
10:56:41 <elliott_> program?
10:56:49 <elliott_> it's hardly specific to bash.
10:57:31 <CakeProphet> I decided to just do a byte cutoff with head
10:57:41 <CakeProphet> instead of wrapping lines and cutting by line.
10:57:52 <elliott_> fmt -w width
10:57:54 <elliott_> job done
11:00:04 <CakeProphet> also I keep forgetting...
11:00:13 <CakeProphet> how to redirect stderr to stdout
11:00:20 <CakeProphet> 1>&2 or something?
11:00:24 <CakeProphet> er
11:00:28 <CakeProphet> swap the 2 and 1 I think
11:00:51 <elliott_> yes.
11:00:54 <elliott_> (swap)
11:01:03 <CakeProphet> and that can be done before a pipe?
11:01:08 <CakeProphet> 1>&2 | ...
11:01:24 <elliott_> you forgot the swap.
11:01:25 <elliott_> and yes.
11:01:52 <CakeProphet> ghci -v0 < inp 2>&1
11:01:54 <CakeProphet> that looks strange to me.
11:02:00 <CakeProphet> is that valid?
11:02:20 <elliott_> of course it is.
11:02:27 <elliott_> what are you doing?
11:02:33 <CakeProphet> working on my IRC bot.
11:03:35 <CakeProphet> specifically giving :t and > proper cutoffs.
11:03:49 <elliott_> that ghci command is ridiculously unsafe.
11:04:25 <CakeProphet> is it? I guess if someone were to, say, edit inp in the split second opportunity they have to do so.
11:05:11 <elliott_> why are you even doing it via a file
11:05:17 <elliott_> why are you even involving the shell
11:05:30 <elliott_> your language has perfectly good process spawning/pipe utilities, use them
11:06:23 <CakeProphet> well I guess I could use :m instead of :l
11:06:33 <CakeProphet> open my $f, '>inp'; print $f ":l botload.hs\n:t $1"; close $f; my $msg = qx/ghci -v0 < inp 2>&1 | head -n 3/;
11:06:55 <CakeProphet> :l contains a bunch of imports. I basically borrowed it from mueval.
11:06:58 <CakeProphet> er
11:07:00 <CakeProphet> botload.hs I mean
11:07:21 <CakeProphet> yes I realize the security issue with that.
11:07:28 <fizzie> There's a bash shorthand of "blah |& bleh" to do "blah 2>&1 | bleh".
11:07:59 <fizzie> Not sure if I'd use it, but it exists.
11:08:02 <elliott_> CakeProphet: how much unix programming do you actualy know
11:08:06 <CakeProphet> elliott_: can you recommend a better way?
11:08:10 <CakeProphet> elliott_: a little.
11:08:16 <elliott_> you're using a temporary file and the shell there for absolutely no reason, just exposing yourself to holes and wasting time
11:08:35 <elliott_> i don't know perl, look up how it does processes and pipes, they are not difficult concepts\
11:08:40 <elliott_> s/\\//
11:09:44 <fizzie> The "simple" pipe-open won't cut it if you also want to capture the output of ghci.
11:10:09 <fizzie> (Otherwise it would be open my $f, '|-', "ghci -whatver -it -needs -to -read -stdin -if -anything"; print $f whatever; or some-such.)
11:10:57 -!- coppro has quit (Ping timeout: 258 seconds).
11:11:02 <fizzie> The IPC::Open2 provides a two-pipe 'open2' solution, though it can easily deadlock if it's used with unfriendly processes.
11:11:09 <elliott_> Nice.
11:11:14 -!- coppro has joined.
11:11:33 <CakeProphet> capturing the output would just be read $f right?
11:11:43 <elliott_> <fizzie> The "simple" pipe-open won't cut it if you also want to capture the output of ghci.
11:11:44 <fizzie> Pipes only go one way.
11:11:58 <CakeProphet> erm...?
11:12:05 <fizzie> Well, except Solaris pipes, those are bidirectional.
11:12:39 <fizzie> open my $f, '|-', "ghci ..." attaches the $f handle to the write end of a pipe that is connected to the stdin of ghci.
11:12:43 <fizzie> You can't read from it.
11:12:49 <CakeProphet> I'm almost positive I've written code in which I piped stdin of something to my programs' stdout, and then read from the process..
11:12:55 <CakeProphet> aaah
11:15:17 <fizzie> While $foo = qx/.../; does what's basically equivalent to open my $h, '-|', "..."; $foo = join('', <$h>); close $h; (Note '-|' as opposed to '|-' -- there is no '|-|' because open can't return more than one handle.)
11:15:26 <fizzie> I guess it might capture stderr too.
11:15:40 <CakeProphet> only if I redirect it.
11:16:23 <CakeProphet> so could I echo inp | ghci ... then?
11:16:32 <CakeProphet> inp being a string not a file
11:16:40 <fizzie> If you want to have shell injection problems, sure.
11:16:41 <CakeProphet> and then read that?
11:16:45 -!- ais523 has joined.
11:16:54 <CakeProphet> how would something be injected?
11:17:19 <fizzie> By inputting the string "haha | rm -rf ~/* | echo hehe", for example?
11:18:01 <CakeProphet> oh... right./
11:18:32 <CakeProphet> I don't really see an issue with using shell as there's no IRC-side exploits...
11:18:58 <elliott_> hi ais523
11:19:05 <ais523> hi elliott, hi underscore
11:19:19 <fizzie> If you're shell-command-line-executing untrusted input without quoting it, that's certainly a problem. I haven't really been following the context here.
11:20:05 <CakeProphet> I'm writing to files and then using those files as input to shell commands
11:20:23 <CakeProphet> the exploit would be that someone can modify the files on my side, but not from IRC.
11:21:37 <fizzie> If you don't mind the temporary file, that's certainly doable. You can get by without, though.
11:22:31 <CakeProphet> elliott_ minds but I don't.
11:34:02 -!- nooga has joined.
11:34:10 <nooga> PURN
11:34:35 <elliott_> Purn yourself.
11:38:06 <nooga> http://www.urbandictionary.com/define.php?term=Purn
11:38:15 <elliott_> No.
11:39:07 <nooga> Why?
11:39:10 <fizzie> Trokdor the purninator.
11:39:47 <CakeProphet> mueval doesn't read stdin...
11:39:48 <nooga> lamża
11:42:58 <elliott_> CakeProphet: of course not, mueval uses the ghc api.
11:43:42 <CakeProphet> my $msg = qx/mueval -Ee "`cat inp`" | head -c 100/;
11:43:49 <CakeProphet> so this code doesn't disgust you in any way?
11:43:50 <CakeProphet> I mean
11:43:55 <CakeProphet> besides being perl.
11:44:10 <elliott_> It needlessly invokes the shell.
11:44:46 <CakeProphet> ....that's kind of like, a thing perl is good at though. OPEN REQUIRES MORE TYPING.
11:46:39 <CakeProphet> when is it not needless to invoke the shell?
11:47:06 -!- elliott_ has quit (Remote host closed the connection).
11:47:10 -!- elliott has joined.
11:53:01 <elliott> hi
11:53:07 <CakeProphet> hi
11:53:11 <elliott> hi
11:53:32 <nooga> hi hi hi\
11:53:49 <elliott> hi
12:01:54 <CakeProphet> > runST (do { x <- newSTRef; writeSTRef x "hello"; read STRef x})
12:01:55 <lambdabot> Not in scope: data constructor `STRef'
12:01:59 <CakeProphet> > runST (do { x <- newSTRef; writeSTRef x "hello"; readSTRef x})
12:02:00 <lambdabot> Couldn't match expected type `GHC.ST.ST s a'
12:02:00 <lambdabot> against inferred type ...
12:02:07 <CakeProphet> > runST (do { x <- newSTRef "hi"; writeSTRef x "hello"; readSTRef x})
12:02:07 <lambdabot> "hello"
12:02:33 <CakeProphet> mueval doesn't import ST.
12:02:39 <CakeProphet> I'd have to hack the source to allow it to do such.
12:04:08 <nooga> heh
12:04:41 <CakeProphet> is ST inherently magical or is it implemently with pure code?
12:04:43 <nooga> mueval;O
12:04:49 <CakeProphet> I see it uses State# but I don't really know how that works.
12:05:45 <CakeProphet> :t ST
12:05:45 <lambdabot> Not in scope: data constructor `ST'
12:05:52 <CakeProphet> ah it doesn't export that.
12:11:35 <nooga> :->
12:14:25 <elliott> CakeProphet: ST can be implemented with unsafeCoerce.
12:14:37 <elliott> or ... IORefs :P
12:14:45 <elliott> and unsafePerformIO for runST
12:14:57 <CakeProphet> erm, how would IORefs work outside of IO?
12:14:59 <elliott> but ofc unsafePerformIO + IORefs gives you unsafeCoerce
12:15:02 <elliott> CakeProphet: they wouldn't
12:15:08 <elliott> newtype ST s a = ST (IO a)
12:15:14 <elliott> runST :: (forall s. ST s a) -> a
12:15:18 <elliott> runST (ST a) = unsafePerformIO a
12:15:20 <CakeProphet> oh uh...
12:15:27 <CakeProphet> that kind of defeats the purpose of ST though.
12:15:30 <elliott> no it doesn't
12:15:35 <elliott> it's just as pure from the outside
12:16:17 <CakeProphet> runST $ ST (readFile "/etc/passwd")
12:16:19 <CakeProphet> um?
12:16:41 <elliott> yeah because you naturally export the ST constructor, as we're operating under the assumption that the implementer is a fucking moron apparently
12:16:56 <elliott> this coming minutes after you realise that the GHC implementation doesn't export the constructor either
12:17:32 <CakeProphet> extra vitriolic today are we?
12:18:24 <elliott> i'm not ruling out the possibility that the implementer is a fucking moron, it's true that I didn't consider it
12:18:33 <elliott> that definitely _would_ break referential transparency.
12:20:42 <CakeProphet> I simply didn't consider that ST would be hidden and so it wouldn't matter. >_>
12:20:55 <CakeProphet> plz don't rip my head off.
12:21:05 <Jafet> But GHC implements IO using ST!
12:21:16 <Jafet> Where is your GoD now.
12:21:24 <CakeProphet> no I believe it uses State# right?
12:21:35 <CakeProphet> >_> or?
12:22:16 <Jafet> >_> <_<
12:22:36 <elliott> hmm, why isn't (IO a -> ST RealWorld a) in Control.Monad.ST
12:22:49 <CakeProphet> unsafeSTToIO :: ST s a -> IO a
12:22:49 <CakeProphet> unsafeSTToIO (ST m) = IO (unsafeCoerce# m)
12:22:50 <elliott> you couldn't exploit it without something else unsafe, so it's perfectly fine
12:22:53 <CakeProphet> apparently.
12:23:10 <elliott> CakeProphet: IO is implemented identically to ST, but neither in terms of the other.
12:23:18 <elliott> IO just fixes s = RealWorld.
12:23:19 <CakeProphet> right that's what I thought.
12:23:51 <CakeProphet> stToIO :: ST RealWorld a -> IO a
12:23:52 <CakeProphet> stToIO (ST m) = IO m
12:23:57 <CakeProphet> fun stuff.
12:24:21 <elliott> stToIO and unsafeIOToST are rather useful.
12:25:15 <elliott> Jafet: You should solve my Template Haskell library linking issue, it'd be great
12:25:31 <Jafet> I should? If I could, I would!
12:25:53 <CakeProphet> stToIO :: ST RealWorld a -> IO a
12:25:54 <CakeProphet> stToIO (ST m) = IO m
12:26:04 <CakeProphet> couldn't this be used to create side-effects in ST?
12:26:22 <elliott> CakeProphet: How?
12:26:30 <CakeProphet> er I mean ioToST
12:26:34 <elliott> Jafet: Maybe you can, you don't even know what it is yet
12:26:47 <elliott> CakeProphet: there is no ioToST
12:26:54 <CakeProphet> ioToST :: IO a -> ST RealWorld a
12:26:55 <CakeProphet> ioToST (IO m) = (ST m)
12:26:58 <CakeProphet> must not be exported
12:27:06 <elliott> unsafeIOToST is
12:27:15 <CakeProphet> unsafeIOToST :: IO a -> ST s a
12:27:16 <CakeProphet> unsafeIOToST (IO io) = ST $ \ s -> (unsafeCoerce# io) s
12:27:18 <CakeProphet> :)
12:27:20 <itidus21> `log what is love
12:27:21 <elliott> ioToST cannot be used to create usable side-effects in ST
12:27:24 <elliott> look at runST's type
12:27:31 <elliott> "s" must be universally quantified
12:27:36 <elliott> ioToST fixes it at RealWorld
12:27:40 <HackEgo> 2008-02-28.txt:21:21:36: <slereah_> What is love?
12:27:44 <CakeProphet> ah
12:27:52 <Jafet> unsafeIOToST :: IO a -> forall s. ST s a
12:27:55 <Jafet> Good luck
12:27:56 <CakeProphet> so you have to use stToIO
12:28:11 <CakeProphet> to get sideeffects
12:28:32 <elliott> I guess ioToST introduces unsafety, actually
12:28:53 <elliott> because (stToIO st) is a pure computation without the unsafe functions
12:28:56 <elliott> ioToST breaks that
12:29:22 -!- cheater has quit (Ping timeout: 240 seconds).
12:29:42 <CakeProphet> yes that's what I was originally thinking.
12:29:48 <Jafet> You need unsafeIOToST to add new primitives to ST
12:29:55 -!- cheater2 has quit (Ping timeout: 258 seconds).
12:30:33 <CakeProphet> ioToST (readFile "/etc/passwd")
12:30:36 <CakeProphet> no need to add new primitives.
12:30:36 <elliott> Jafet: indeed
12:31:24 <Jafet> /etc/passwd should be read into oleg's existentially quantified configuration typeclass, you oaf
12:31:30 <CakeProphet> still you have to convert back to IO at some point to actually get the side-effects.
12:31:41 <CakeProphet> I think.
12:32:50 <CakeProphet> in any case ioToST isn't exported.
12:34:07 <CakeProphet> and can't be implemented without the ST constructor.
12:34:55 <elliott> Sure it can.
12:35:01 <CakeProphet> not safely I mean...
12:35:02 <elliott> unsafeIOToST is trivially specialised to ioToST.
12:36:17 <elliott> Jafet: I'm disappointed in you
12:37:04 <CakeProphet> hmmm what new ST primitives would be nice.
12:37:22 <CakeProphet> STMtoST?
12:37:34 <CakeProphet> forkST :P
12:37:54 <elliott> CakeProphet: https://github.com/ehird/vault/blob/master/src/Data/Vault/ST.hs#L43
12:38:33 <CakeProphet> why do you use unsafe things so much.
12:38:55 <elliott> See https://github.com/ehird/vault/blob/master/src/Data/Vault/ST.hs#L6
12:39:02 <elliott> It already used unsafeCoerce, I just made it usable from ST
12:39:07 -!- cheater has joined.
12:39:12 <CakeProphet> why do you use unsafe things so much.
12:39:13 <elliott> Which involved introducing the newUnique primitive into ST.
12:39:16 <elliott> CakeProphet:
12:39:18 <elliott> <elliott> See https://github.com/ehird/vault/blob/master/src/Data/Vault/ST.hs#L6
12:39:18 <elliott> <elliott> It already used unsafeCoerce, I just made it usable from ST
12:39:20 <elliott> <elliott> Which involved introducing the newUnique primitive into ST.
12:39:23 <CakeProphet> "oh because I already used unsafe things" is not an acceptable answer :P
12:40:20 <elliott> CakeProphet: I didn't
12:40:28 <elliott> Note the "forked from HeinrichApfelmus/vault"
12:40:38 <CakeProphet> ah
12:40:48 <elliott> CakeProphet: And using {ST,IO}Refs would result in a vastly slower implementation.
12:40:56 <CakeProphet> still it doesn't explain why you use unsafe things so much.
12:41:05 <CakeProphet> efficiency?
12:42:16 -!- sllide has joined.
12:42:19 -!- Phantom_Hoover has joined.
12:42:59 <elliott> CakeProphet: Because I do interesting things
12:44:24 <CakeProphet> ah the Keys are typed and that's why the vault doesn't have to contain values of one type.
12:44:27 <CakeProphet> INTRIGUING
12:44:46 <CakeProphet> well I mean
12:44:47 <CakeProphet> that's not why
12:45:06 <elliott> See https://github.com/HeinrichApfelmus/reactive-banana/issues/12 for more along those lines. :p
12:45:08 <CakeProphet> I mean to say, that's why it's not annoying to work with, because the Key provides the type information for everything else.
12:45:18 -!- cheater2 has joined.
12:46:12 <CakeProphet> I could see using something like Vault for a MUD server.
12:46:36 <CakeProphet> to store object attributes.
12:47:36 <elliott> CakeProphet: you could also just use a record.
12:47:52 <CakeProphet> right but the idea is for to be like a MOO where the game is modifiable from within the game.
12:48:16 <elliott> You wouldn't be able to use vaults nicely for that; that's verging on dependent typing.
12:48:28 <elliott> Just model the (probably bad) language's (probably bad) object model directly.
12:48:28 <CakeProphet> dependent or dynamic I suppos. :P
12:48:34 <elliott> no.
12:48:52 <CakeProphet> well no see I think it would be interesting to have a well-type scripting language of that nature...
12:48:58 <CakeProphet> *well-typed
12:49:35 <CakeProphet> but I see what you're saying.
12:50:42 <elliott> i am saying that it would not work to implement that in haskell.
12:54:44 <CakeProphet> maybe not with vaults
12:54:49 <CakeProphet> but I'm pretty sure it would be possible.
13:04:21 <CakeProphet> elliott: if someone offered you 1 million per year for the rest of your life to work on a massive piece of software written entirely in perl
13:04:24 <CakeProphet> would you accept the offer?
13:04:38 <CakeProphet> 1 million being US dollars
13:04:52 <elliott> What are the hours like?
13:04:59 <CakeProphet> dude I don't I just made up this example.
13:05:07 <CakeProphet> THIS ISN'T REAL.
13:05:21 <CakeProphet> :> uh, 36 hours a week?
13:05:25 <CakeProphet> dunno
13:05:29 <CakeProphet> FREELANCE
13:05:33 <CakeProphet> set your own hours/
13:05:38 <elliott> I N S U F F I C I E N T D A T A F O R M E A N I N G F U L A N S W E R
13:05:44 <elliott> I set my hours at 0/wk
13:05:45 <elliott> .
13:06:00 <CakeProphet> see... it doesn't work that way
13:06:32 <CakeProphet> technically speaking in a freelance situatons you wouldn't be paid by year it would by hour or piecework.
13:06:42 <CakeProphet> also it's a perl OS
13:06:42 <elliott> You asked me to set my own hours; I set my own hours.
13:06:48 <CakeProphet> with an emphasis on efficiency.
13:06:59 <elliott> There are worse languages to write an OS in than Perl.
13:07:02 <elliott> C, for instance.
13:07:15 <Jafet> Actually, perl is written in C.
13:07:17 <CakeProphet> but is it worse if you're emphasizing efficiency? I think not.
13:07:31 <CakeProphet> perl being
13:07:34 <CakeProphet> probably CLOSE
13:07:40 <CakeProphet> to one of the slowest languages in common use.
13:08:19 <elliott> Jafet: So?
13:08:30 <elliott> That doesn't mean the Perl OS would use a Perl implementation written in C.
13:08:34 <CakeProphet> elliott: "dude man everything is machine code. now what?"
13:08:44 <elliott> CakeProphet: I don't think Perl is slower than Ruby.
13:08:50 <Jafet> Oh yeah, you're being paid a million dollars, so you can re-implement perl.
13:08:57 <Jafet> Bug-for-bug, I guess
13:08:57 <elliott> Jafet: It's not _that_ hard a task.
13:08:57 <Phantom_Hoover> elliott, I was about to object and then I remembered that C is like useless for low-level programming anyway.
13:09:11 <elliott> Jafet: Anyway, at least the C would be confined to the Perl implementation.
13:09:15 <elliott> Even if it was there.
13:09:27 <CakeProphet> there's no such thing as a bug in the perl interpreter
13:09:32 <CakeProphet> as the perl interpreter is the language spec.
13:09:36 <elliott> Huh, Perl really is slower than Ruby. And PHP. Ouch.
13:09:43 <CakeProphet> yep
13:09:49 <elliott> Wait, no.
13:09:53 <elliott> That's an alphabetical list.
13:09:54 <elliott> Wait, no it isn't.
13:09:59 <CakeProphet> lol
13:10:00 <elliott> It just looked vaguely like one.
13:10:40 <CakeProphet> also PHP on the language shootout has fewer bytes of code on average.
13:10:53 <CakeProphet> probably due to standard libraries
13:10:59 <CakeProphet> Python is the smallest in that measure.
13:11:31 <CakeProphet> followed by Ruby, then I don't remember what...
13:11:33 <fizzie> But it's faster than C. (Assuming you're using CINT.)
13:11:56 <Phantom_Hoover> CINT?
13:12:12 <fizzie> It's that C interpreter.
13:12:13 -!- elliott has quit (Remote host closed the connection).
13:12:24 <fizzie> http://root.cern.ch/drupal/content/cint
13:12:27 <fizzie> Blame the physicists.
13:12:39 -!- elliott has joined.
13:12:43 <CakeProphet> Haskell is on the lower end of byte counts for the category of "languages that are fast"
13:12:54 <elliott> Remain disappointed in Jafet.
13:13:03 <elliott> CakeProphet: The benchmarks game Haskell code is terribly over-large.
13:13:07 <elliott> It's ridiculously microoptimised.
13:13:08 <Phantom_Hoover> fizzie, WTF is with the naked tentacle woman in the corner.
13:13:14 <elliott> What.
13:13:36 <Jafet> Well, it's C submitted as haskell
13:13:41 <elliott> Oh, I was expecting something very different.
13:13:43 <elliott> Are those even tentacles.
13:13:47 <Jafet> I live to disappoint.
13:13:47 <elliott> They look like... is she part tree.
13:14:00 <fizzie> Phantom_Hoover: You mean the ROOT logo?
13:14:08 <fizzie> They are probably ROOTs.
13:14:14 <elliott> Hur hur hur
13:14:14 <CakeProphet> elliott: ah okay.
13:14:16 <elliott> At least I was right.
13:14:16 <Jafet> Admit it, you'd root her.
13:14:44 <Phantom_Hoover> Jafet, how, she's all roots from the waist down.
13:14:56 <CakeProphet> elliott: also Python submitions apparently cheat alot as the top percentile on the performance data for Python is very close to C.
13:15:08 <elliott> Phantom_Hoover: That's why they call it rooting.
13:15:17 <elliott> (Am I really participating in this? Shame on you, elliott.)
13:15:31 <Phantom_Hoover> Jafet, rooting for you anyway.
13:15:52 <elliott> CakeProphet: Insert stupid alot joke.
13:16:23 <CakeProphet> wat
13:16:25 <Jafet> I'm more amused by the star wars scrolling code.
13:16:38 <elliott> Jafet: no but seriously, fix my library problem.
13:18:15 <fizzie> CakeProphet: It seems to be mostly due to the pidigits benchmark, which is basically "from gmpy import mpz" and then a reasonably simple loop.
13:18:35 <Jafet> I'm as proficient at programming as Enron had been at underhanded trading.
13:18:48 <elliott> :t readIntAtBase
13:18:48 <lambdabot> Not in scope: `readIntAtBase'
13:18:52 <elliott> ?hoogle readBase
13:18:52 <lambdabot> No results found
13:18:54 <elliott> ?hoogle read base
13:18:54 <lambdabot> No results found
13:18:54 <elliott> ?hoogle read
13:18:55 <lambdabot> Prelude read :: Read a => String -> a
13:18:55 <lambdabot> Text.Read read :: Read a => String -> a
13:18:55 <lambdabot> module Text.Read
13:18:55 <elliott> ?hoogle readInt
13:18:56 <lambdabot> Numeric readInt :: Num a => a -> (Char -> Bool) -> (Char -> Int) -> ReadS a
13:18:56 <lambdabot> Data.ByteString.Char8 readInt :: ByteString -> Maybe (Int, ByteString)
13:18:58 <lambdabot> Data.ByteString.Lazy.Char8 readInt :: ByteString -> Maybe (Int, ByteString)
13:20:20 <elliott> :t showIntAtBase
13:20:21 <lambdabot> forall a. (Integral a) => a -> (Int -> Char) -> a -> String -> String
13:21:20 <elliott> :t elemIndex
13:21:21 <lambdabot> forall a. (Eq a) => a -> [a] -> Maybe Int
13:22:45 <elliott> :t reads
13:22:46 <lambdabot> forall a. (Read a) => String -> [(a, String)]
13:23:44 <fizzie> > fst . head . readInt 42 ((<42) . ord) ord $ showIntAtBase 42 chr 12345678 ""
13:23:46 <lambdabot> 12345678
13:23:56 <fizzie> I see they like the generic.
13:24:47 <elliott> Quite.
13:24:55 <fizzie> > showIntAtBase 42 chr 12345678 ""
13:24:56 <lambdabot> "\ETX(\SUB\FS\RS"
13:24:59 <fizzie> Best encoding.
13:25:26 <fizzie> I shall petition we move from base-10 with decimal digits to base-42 in start-of-ascii in all primary schools.
13:25:44 <elliott> fizzie: Hey, what's a good bit prefix of SHA-256
13:26:04 <elliott> 160 bits is a bit overly long for my tastes, but I'd like to avoid collisions
13:26:08 <elliott> ("Gimme a perfect hash algo")
13:27:17 <Jafet> id
13:30:08 <elliott> Psht, you're all useless
13:30:40 <fizzie> Take all prime bits of SHA-512.
13:30:46 <fizzie> (That's 97 bits.)
13:30:58 <fizzie> It's more secure because they're prime.
13:31:09 <elliott> fizzie: I'm do not like you.
13:31:34 <Jafet> If you don't want collisions, use a block cipher that's larger than the range of the input
13:31:37 <Jafet> Block ciphers are bijective
13:31:50 <elliott> I want to AVOID collisions :P
13:31:52 <elliott> i.e. not CRC.
13:37:52 -!- Patashu has quit (Quit: MSN: Patashu@hotmail.com , Gmail: Patashu0@gmail.com , AIM: Patashu0 , YIM: patashu2 .).
13:39:38 <nooga> ukuk
13:43:05 <elliott> gbgb
13:52:31 <CakeProphet> !wacro
13:52:34 <EgoBot> CFC
14:02:50 -!- DH____ has quit (Read error: Connection reset by peer).
14:10:03 -!- augur has quit (Remote host closed the connection).
14:12:00 -!- FireFly has joined.
14:13:19 -!- augur has joined.
14:19:27 -!- invariable has joined.
14:20:21 -!- variable has quit (Ping timeout: 252 seconds).
14:21:16 -!- SgeoN1 has quit (Quit: Bye).
14:24:54 -!- invariable has changed nick to variable.
14:25:57 -!- copumpkin has quit (Quit: Computer has gone to sleep.).
14:29:54 <itidus21> why base 42?
14:31:23 <elliott> HHGTTG, one presumes.
14:32:08 -!- variable has changed nick to invariable.
14:36:44 -!- DH____ has joined.
14:39:25 <itidus21> yup
14:39:44 <itidus21> for all one, one presumes HHGTTG
14:40:42 <itidus21> what kind of nutter would talk about the number 42 without reference to HHGTTG.. lets (sic) check on wikipedia and wolframalpha to find out
14:44:20 <itidus21> The Gutenberg Bible is also known as the "42-line Bible", as the book contained 42 lines per page.
14:45:18 <itidus21> In Win32 API, ShellExecute always return 42 as its result.
14:47:31 <itidus21> Popular gadget magazine 'Stuff' did not produce an issue numbered 42, in honor of The Hitchhiker's Guide to the Galaxy, instead, the 41st issue was followed by the 43rd.
14:47:32 <fizzie> Also glibc memfrob.
14:48:13 <itidus21> fizzie: you're extremely geeky for knowing that unless you saw the wiki
14:48:14 -!- copumpkin has joined.
14:48:35 <ais523> I remembered about memfrob when it was mentioned
14:48:35 <elliott> says the guy in #esoteric
14:48:40 <ais523> but probably wouldn't have remembered unprompted
14:48:52 <ais523> there was that row over strfry, I remember
14:49:03 <fizzie> I've run across memfrob earlier, though not quite sure in which context. I did check the man page that it was 42 first, though.
14:49:23 <ais523> fizzie: its intended purpose is to prevent strings being visible to strings, isn't it?
14:53:39 <ais523> and 42 was picked because out of the numbers that do that well, it was the best reference
14:58:50 -!- nooga has quit (Ping timeout: 276 seconds).
15:02:40 -!- DH____ has quit (Read error: Connection reset by peer).
15:02:48 -!- DH____ has joined.
15:14:18 -!- nooga has joined.
15:18:39 -!- hagb4rd has quit (Ping timeout: 260 seconds).
15:20:46 -!- azaq23 has joined.
15:20:52 -!- DH____ has quit (Read error: Connection reset by peer).
15:21:08 -!- DH____ has joined.
15:21:12 <CakeProphet> @hoogle a -> Maybe b
15:21:13 <lambdabot> Prelude Just :: a -> Maybe a
15:21:13 <lambdabot> Data.Maybe Just :: a -> Maybe a
15:21:13 <lambdabot> Unsafe.Coerce unsafeCoerce :: a -> b
15:21:18 <CakeProphet> @hoogle a -> Maybe a
15:21:18 <lambdabot> Prelude Just :: a -> Maybe a
15:21:19 <lambdabot> Data.Maybe Just :: a -> Maybe a
15:21:19 <lambdabot> Control.Applicative pure :: Applicative f => a -> f a
15:21:21 <CakeProphet> erm
15:23:37 <Deewiant> Something wrong with those options? :-P
15:25:14 <elliott> Deewiant: So I was thinking
15:25:22 <elliott> We have functors, bifunctors, trifunctors
15:25:25 <elliott> What we need now is nilfunctors
15:25:30 <Deewiant> elliott: Oh also
15:25:33 <elliott> class Nilfunctor f where nilfmap :: f -> f
15:25:34 <Deewiant> If you're doing that tuple shiznit
15:25:44 <elliott> class (Nilfunctor f) => Nilpointed f where nilpure :: f
15:25:53 <elliott> class (Nilfunctor f) => Nilapply f where nilap :: f -> f -> f
15:26:19 <Deewiant> I'd like to note that evidently I don't want *ifunctors https://github.com/ekmett/bifunctors/issues/1
15:26:54 <elliott> Deewiant: I find ekmett's argument unconvincing since tuples don't even follow the laws of tuples in Haskell
15:27:14 <Deewiant> Howso
15:28:00 <elliott> (fst p, snd p) = p
15:28:24 <elliott> http://james-iry.blogspot.com/2011/05/why-eager-languages-dont-have-products.html#comment-201436254 plus surrounding post and original post and blah blah blah
15:29:07 <Phantom_Hoover> <elliott> (fst p, snd p) = p
15:29:08 <Deewiant> We do have (fst p, snd p) == p, no? :-P
15:29:14 <Phantom_Hoover> Is this something Haskell doesn't do?
15:29:21 <Deewiant> Oh, _|_ /= (_|_, _|_) duh
15:29:27 <Phantom_Hoover> Ah, yeah.
15:29:46 <Deewiant> But, um
15:30:05 <Deewiant> That might not be such a relevant "law of tuples" :-P
15:30:24 <elliott> It is
15:30:39 <elliott> Without that, it's not a proper product type
15:30:58 <elliott> My point is that we generally settle for the more useful over the more correct when _|_ is involved since we're fucked from the start anyway :P
15:33:24 <Phantom_Hoover> elliott, wait, what *should* that do, then?
15:33:57 <elliott> What should what do
15:35:23 <Phantom_Hoover> Well, um
15:35:48 <CakeProphet> Phantom_Hoover: Yeah well fuck you. _|_
15:35:51 <Phantom_Hoover> Under what circumstances does (_|_,_|_) /= _|_
15:36:05 <elliott> Under Haskell semantics?
15:36:10 <elliott> (_|_,_|_) `seq` x = x
15:36:13 <elliott> _|_ `seq` x = _|_
15:36:40 <Phantom_Hoover> Dammit seq.
15:37:07 <elliott> It would apply even without seq
15:37:11 <elliott> f (x,y) = True
15:37:14 <elliott> f (_|_,_|_) = True
15:37:17 <elliott> f _|_ = _|_
15:37:28 <elliott> You are asking for a strict language, basically
15:39:50 <CakeProphet> weeee partial orders
15:40:03 <CakeProphet> speaking of which
15:40:15 <CakeProphet> I wonder if I can find that article.
15:41:02 <CakeProphet> http://blog.ezyang.com/2010/12/hussling-haskell-types-into-hasse-diagrams/
15:41:15 <CakeProphet> was quite enlightening.
15:54:15 <CakeProphet> would have been better if it were written by Andrew Hussie
15:54:26 <elliott> Deewiant: edwardk is in #haskell now; I think you have to fight him to the death
15:54:27 <CakeProphet> then it would be "Hussie Hussling Haskell types into Hasse diagrams"
15:58:19 <nooga> (_|_) fat ass
15:59:21 <elliott> Deewiant: So 'bout them nilfunctors
16:03:48 -!- augur has quit (Remote host closed the connection).
16:05:51 <elliott> Deewiant: I guess if bifunctors aren't suitable, I could just implement my own in the package, thus at least trying to live up to the ridiculously overgeneric "combinators" name :P
16:06:40 <CakeProphet> combinator monad for combinator combinators.
16:07:24 <CakeProphet> :t (.) . (.) . (.)
16:07:25 <lambdabot> forall (f :: * -> *) (f1 :: * -> *) a b (f2 :: * -> *). (Functor f, Functor f1, Functor f2) => (a -> b) -> f (f1 (f2 a)) -> f (f1 (f2 b))
16:07:39 <CakeProphet> :t (.) . (.) . (.) . ($)
16:07:40 <lambdabot> forall (f :: * -> *) (f1 :: * -> *) a b (f2 :: * -> *). (Functor f, Functor f1, Functor f2) => (a -> b) -> f (f1 (f2 a)) -> f (f1 (f2 b))
16:07:48 <CakeProphet> :t ($) . (.) . (.) . (.)
16:07:49 <lambdabot> forall (f :: * -> *) (f1 :: * -> *) a b (f2 :: * -> *). (Functor f, Functor f1, Functor f2) => (a -> b) -> f (f1 (f2 a)) -> f (f1 (f2 b))
16:07:59 <CakeProphet> oh well
16:29:34 <elliott> Deewiant: You wouldn't happen to know what to do if an FFI library fails to load one of its .o because of an unknown symbol in the bytecode interpreter (i.e. GHCi, Template Haskell) but works just fine with the compiler?
16:29:44 <elliott> I think it might be related to building a shared version, and I know you do that, so :-P
16:30:55 -!- Ngevd has joined.
16:31:14 <Ngevd> Hello!
16:33:59 <Ngevd> ais523, spam
16:34:17 <elliott> <ais> I know, I see every change via RSS
16:34:37 <elliott> beat him to it, ha ha ha
16:34:46 <ais523> elliott: it doesn't matter, my userpage suggests reporting spam on IRC
16:34:49 <ais523> because it's faster than the RSS
16:34:50 <Ngevd> Wait, it's one I can fix
16:34:56 <elliott> Ngevd: too late
16:35:02 <elliott> ais523: darn :D
16:35:04 <ais523> however, I think elliott already reverted it
16:36:06 <Ngevd> My laptop's clock is drifting west
16:36:32 <Ngevd> Also, I now have a google plus account
16:37:28 <Ngevd> elliott, what time is it?
16:37:36 <elliott> @time
16:37:36 <lambdabot> Local time for elliott is Tue Sep 20 17:38:03
16:37:49 <elliott> Deewiant: Thanks
16:38:11 <Ngevd> Yep, my laptop is drifting
16:38:17 <Ngevd> It's two hours fast
16:38:37 <elliott> ntp
16:38:58 <Ngevd> It thinks Hexham's in... Israel? So I have to say I'm in the middle of the Atlantic to compensate
16:39:53 <elliott> Uh
16:39:53 <fizzie> There's a Hexham everywhere.
16:39:58 <elliott> What thinks that exactly
16:40:58 <fizzie> Hexham is where the heart is. <- An old Chinese proverb.
16:42:06 <elliott> Verily.
16:42:10 <elliott> Hey fizzie, fix my library issue.
16:45:18 <fizzie> Okay. *zap*. Should be fixed now.
16:45:29 <CakeProphet> @hoogle [a] -> Maybe a
16:45:29 <lambdabot> Data.Maybe listToMaybe :: [a] -> Maybe a
16:45:29 <lambdabot> Data.List find :: (a -> Bool) -> [a] -> Maybe a
16:45:29 <lambdabot> Prelude head :: [a] -> a
16:45:43 <elliott> fizzie: It's not fixed. Pls fix better.
16:46:12 <fizzie> *Doublezap*.
16:46:51 <elliott> fizzie: Pls fix with analytical logical skills not zapping
16:47:04 <fizzie> I don't know anything about your library issue.
16:47:07 <fizzie> But recompile it anyhow.
16:47:14 <fizzie> Forall it.
16:47:15 <elliott> fizzie: I did that.
16:48:36 -!- augur has joined.
16:58:36 <CakeProphet> elliott: ghost ride the whip.
16:59:17 <itidus21> chinese eh..
16:59:32 <itidus21> time to look into itidus21's ebook folder of doom
16:59:50 <CakeProphet> autoerotic fiction
16:59:56 <CakeProphet> about cars in love.
17:00:06 <itidus21> that was a movie
17:00:13 <itidus21> starring owen wilson
17:00:57 <Phantom_Hoover> Made by Pixar, noted autopornographers.
17:04:07 <itidus21> random ebook.. random passage
17:04:57 <itidus21> A man of the State of Cheng was one day gathering fuel, when he came across a startled deer, which he pursued and killed.
17:05:41 <itidus21> Fearing lest anyone should see him, he hastily concealed the carcass in a ditch and covered it with plaintain-leaves, rejoicing excessively at his good fortune.
17:06:19 <itidus21> By-and-by, he forgot the place where he had put it; and, thinking he must have been dreaming, he set off towards his home, humming over the affair on his way.
17:06:42 <itidus21> (agh.. this story is longer on the next page than i anticipiated)
17:07:11 -!- calamari has joined.
17:08:20 <Phantom_Hoover> fungot, comment.
17:08:20 <fungot> Phantom_Hoover: what the hell was that? my, that just made you disappear" and stuff?
17:08:59 <Phantom_Hoover> fungot, don't make me disappear!
17:08:59 <fungot> Phantom_Hoover: and in time, though prone to do this
17:09:10 <Phantom_Hoover> fungot, do *what*?
17:09:10 <fungot> Phantom_Hoover: like a very clear mirror
17:09:17 <Phantom_Hoover> fungot, yes?
17:09:17 <fungot> Phantom_Hoover: this is it, like an apple or a brain that is more useful card combinations. but ever since john started punching cards, you've been contemplating what could this birthday get any better in that quadrant.
17:09:58 <Phantom_Hoover> fungot, yes. Yes it could.
17:15:13 <elliott> fungot: q
17:15:14 <fungot> elliott: document modified: jervas. in that second all that had occurred, and wrapped with care to prevent further damage. they were
17:15:22 <elliott> ^style
17:15:23 <fungot> Available: agora alice c64 ct darwin discworld europarl ff7 fisher homestuck ic irc jargon lovecraft* nethack pa sms speeches ss wp youtube
17:15:32 <elliott> I predict that was Phantom_Hoover.
17:15:43 <Phantom_Hoover> I predict a riot.
17:15:59 <elliott> That riot was Phantom_Hoover predicts i
17:16:00 <elliott> That riot was Phantom_Hoover predicts I.
17:16:02 <fizzie> I predict an edict.
17:16:36 <elliott> fizzie: https://github.com/phonohawk/HsOpenSSL/issues/3 Make this be fixed quickly, thanks
17:16:38 <elliott> Also Deewiant
17:16:39 <elliott> And Phantom_Hoover
17:16:45 <elliott> Let's pool our resources together here to fix it with power
17:16:45 <Phantom_Hoover> I predict a tciderpi.
17:18:39 <Phantom_Hoover> elliott, rename it to McHost.
17:19:54 <elliott> Phantom_Hoover: Rename what.
17:19:55 -!- Ngevd has quit (Ping timeout: 260 seconds).
17:20:09 <Phantom_Hoover> elliott, mchost.
17:20:13 <elliott> Why.
17:20:24 <Phantom_Hoover> To show respect to the Scottish community.
17:20:30 <elliott> Oh.
17:20:31 <elliott> No.
17:21:25 <elliott> Yes. I hate Scots.
17:21:38 <nooga> You do?
17:21:39 <Phantom_Hoover> yes
17:22:37 <Phantom_Hoover> I will call the Scottish Defence League, who are apparently an offshoot of the English Defence League and therefore fail at being Scottish.
17:23:25 <elliott> ahahahaha
17:23:58 <Phantom_Hoover> I mean, any organisation called the Scottish Defence League should be beating up English people, what other point would there be?
17:25:06 <elliott> `addquote <Phantom_Hoover> I mean, any organisation called the Scottish Defence League should be beating up English people, what other point would there be?
17:25:07 <HackEgo> 675) <Phantom_Hoover> I mean, any organisation called the Scottish Defence League should be beating up English people, what other point would there be?
17:25:09 <elliott> `quote
17:25:09 <elliott> `quote
17:25:10 <elliott> `quote
17:25:10 <elliott> `quote
17:25:10 <elliott> `quote
17:25:12 <HackEgo> 483) <oklopol> btw i saw my first prostitute about a week ago
17:25:12 <HackEgo> 59) <Warrigal> I think hamsters cannot be inert.
17:25:13 <HackEgo> 345) <catseye> wow, thinkgeek really makes me hate being alive
17:25:13 <HackEgo> 98) <Warrigal> Ah, vulva. <Warrigal> What is that, anyway?
17:25:14 <HackEgo> 32) <ais523> after all, what are DVD players for?
17:25:27 <elliott> huh, we have not got 345 for a while...
17:25:29 <elliott> or at least i do not recall it
17:25:32 <elliott> `pastelogs really makes me hate being alive
17:25:40 <HackEgo> http://codu.org/projects/hackbot/fshg/index.cgi/raw-file/tip/paste/paste.31406
17:25:47 <ais523> why do people thing 32 is so funny?
17:25:48 <Phantom_Hoover> `addquote <elliott> `pastelogs really makes me hate being alive
17:25:50 <HackEgo> 676) <elliott> `pastelogs really makes me hate being alive
17:26:00 <elliott> http://codu.org/projects/hackbot/fshg/index.cgi/raw-file/tip/paste/paste.31406 ????????
17:26:02 <elliott> ais523: they do?
17:26:06 <ais523> I don't remember 345
17:26:10 <ais523> elliott: hmm, fair enough
17:26:13 <elliott> ais523: neither does clog/glogbot
17:26:16 <ais523> someone thought it was funny enough to add
17:26:17 <elliott> it seems to have never been added
17:26:23 <elliott> ais523: I think that was me :)
17:26:28 <ais523> perhaps Gregor edited the file directly in hg
17:26:30 <Phantom_Hoover> elliott, I distinctly recall him saying it, so `pastelogs or glogbot is broken.
17:26:42 <elliott> Oi Gregor
17:26:47 <elliott> Phantom_Hoover: That was from the time of clog I think
17:26:51 <elliott> So maybe clog was just down
17:28:09 -!- DH____ has quit (Read error: Connection reset by peer).
17:28:24 -!- DH____ has joined.
17:31:12 <Gregor> elliott: I periodically reboot the environment (whenever people start stuffing a bunch of garbage in there and .hg gets to be 100s of megs ... )
17:31:33 <elliott> Gregor: Um, I'm talking about `pastelogs missing log entries
17:31:38 <elliott> But it's probably just from a time when clog was down
17:31:38 <Gregor> Oh
17:31:45 <Gregor> Probably :P
17:31:46 <elliott> And then we were really lucky to never get it random-quoted until now
17:32:04 <Gregor> I spose I could look through my own logs, but I'm not going to :P
17:32:35 <elliott> So lame.
17:40:41 <elliott> ais523: hmm, it's interesting that modifying history is a part of the darcs workflow
17:40:58 <ais523> which history?
17:41:01 <ais523> when patches were added?
17:41:05 <ais523> I don't think that's modified, so much as not tracked
17:41:06 <elliott> amend-record
17:41:12 <ais523> ah, right
17:41:33 <ais523> I suppose that's a case of copyediting a history book before it's published
17:41:59 <elliott> indeed; I'm having changed opinions about modifying history recently
17:42:06 <elliott> eliminating merge commits and the like is ridiculous
17:42:40 <elliott> but turning five terrible unatomic out-of-order commits with later commits bugfixing earlier ones into a sequence of reasonable ones before pushing sounds perfectly reasonable
17:43:06 <elliott> I mean, it's not really modifying history, because you could have just not committed them in the first place
17:43:12 <elliott> and reordered before committing
17:45:08 <elliott> ais523: what I think might be interesting, is removing the arbitrary restriction there of "before you push"
17:45:19 -!- augur has quit (Remote host closed the connection).
17:45:31 <elliott> the restriction is there essentially because it's OK for you to change your own idea of history, since it's basically a scrap working space, but you can't change what other people see after the fact
17:45:48 <ais523> indeed
17:45:52 <elliott> why shouldn't you be able to merge a trivial typofix into the original commit after an intervening pushed commit?
17:45:55 <elliott> I think what you need is patch-patches
17:45:56 <ais523> in sg, the modification would be by adding a correction patch
17:45:58 <elliott> patches that modify patches
17:46:10 <ais523> and I thought of that already, it'd just be a patchset {original patch, other changes}
17:46:13 <elliott> so you can still destructively edit history locally, because it's scrap space
17:46:14 <ais523> which contained the new metadata
17:46:18 <elliott> and after the fact, you can nondestructively edit it
17:46:28 <elliott> ais523: you need to be able to remove changes too
17:46:38 <elliott> ais523: I think it's more elegant if you define a proper change type for each change type
17:46:38 <ais523> that's just the same as darcs rollback
17:46:46 <elliott> rather than hacking it in as a special case
17:47:00 <elliott> there's changetypes for files (lists of lines), directories (sets of directory entries), why not for changes (a recursive ADT)?
17:47:40 <elliott> hmm, that's kind of like a zipper
17:47:49 <elliott> in that you can turn an arbitrarily-nested change into a list of sequential changes (actions) that create it
17:48:03 <elliott> just like you can do the same with a directory tree
17:49:04 <elliott> ais523: oh dear, this provides all the tools to retroactively modify a change from the beginning of time
17:49:14 * elliott throws the idea into the Feather pile
17:49:22 <ais523> it'd conflict if that did anything bad
17:49:32 <elliott> So arbitrary :P
17:49:53 <ais523> not arbitrary, that's how I defined "anything bad" just now
17:50:05 <elliott> PAH
17:52:01 <elliott> ais523: incidentally, what's the result of applying the change EOF to a file?
17:52:17 <ais523> what do you mean by "the change EOF"
17:52:17 <elliott> (trick question)
17:52:23 <elliott> ais523: changes are defined recursively
17:52:30 <elliott> there's a start of file and end of file change
17:52:31 <elliott> for each file
17:52:34 <elliott> and you can insert between them, etc.
17:52:45 <coppro> everything should be defined recursively
17:53:00 <ais523> elliott: oh right, but the SOF/EOF "changes" only exist for their names
17:53:04 <ais523> so they can't be applied to anything
17:54:02 <elliott> ais523: I suggest that instead, "insert LINE between A and B" doesn't have A and B be changerefs
17:54:08 <elliott> but SOF | changeref and EOF | changeref
17:54:14 <elliott> there's no reason for them to be actual changes
17:54:29 <elliott> they're just special values for ranges
17:54:30 <ais523> but then, insert LINE between SOF and EOF doesn't identify the file at all
17:54:42 <elliott> but SOF dirchangeref | changeref and EOF dirchangeref | changeref
17:54:43 <ais523> I'm OK with changeref | SOF of changeref-representing-file
17:54:49 <elliott> you knew what I meant, I was using the simplified one-file model
17:54:49 <ais523> yep, agreed
17:54:52 <elliott> :P
17:55:09 <elliott> that's also nice because you can't "delete EOF" or "insert X between EOF and SOF" or anything ridiculous like that
17:55:51 <elliott> incidentally, git is a rather high-maintenance VCS...
17:56:03 <elliott> compared to darcs where you generally just record, record, record, and then cry if you get a conflict
17:56:15 <CakeProphet> perl is the best VCS, also compiler, and minecraft proxy.
17:56:17 <CakeProphet> thing
17:56:21 <elliott> in git I'm constantly rebasing and amending and writing commit messages
17:56:23 <elliott> :P
17:56:33 <CakeProphet> those blasted commit messages.
17:56:39 <elliott> someone really needs to rewrite "darcs record" using git as a backend
17:56:40 <CakeProphet> -m "AAAAAAH DON'T CARE"
17:56:42 <elliott> git add -p is not very nice
17:57:49 <elliott> ais523: incidentally, do you have any ideas wrt binary files in sg?
17:57:59 <elliott> I'm not sure the recursive change model really works for binary files
17:58:10 <elliott> you can't automatically merge any two changes to a binary file at all
17:59:12 <ais523> well, sg should ideally understand the format of the file, but for application/octet-stream (i.e. when it doesn't), it should be "replace entire file contents HASH with VALUE", I think
17:59:48 <elliott> ais523: ideally, but in practice "list of lines" and "binary blob" seem to be the most useful solution
17:59:55 <elliott> until someone writes a wonderful language-aware thing
18:00:08 <ais523> yep, I'd love it to be diffing on ASTs eventually
18:00:09 <elliott> ais523: I think it should probably use an existing binary diff algorithm
18:00:15 -!- augur has joined.
18:00:16 <elliott> with a named change to base it off of
18:00:20 <elliott> that's just an optimisation, naturally
18:00:22 <ais523> elliott: just for optimisation?
18:00:23 <elliott> the semantics are exactly the same
18:00:24 <ais523> I'm fine with that
18:00:52 <elliott> ais523: one question is how to distinguish them; the VCS has to know which files are binary and which are text, and it would be nice if it didn't just guess based on what the file looks like right now
18:01:28 <elliott> I suggest that as well as "create directory named X in Y" and "create file named X in Y", there's "create binary file named X in Y"
18:01:45 <elliott> and sg guesses for a new file based on its contents
18:01:47 <elliott> but you can override that decision
18:02:04 <elliott> and if you want a binary file to suddenly be a text file for some reason, you just delete it and recreate it with the same contents, no overlap
18:02:04 <ais523> yep, sounds about right
18:02:08 <elliott> since the changes are incompatible
18:02:14 <ais523> what about svn:eol-type?
18:02:20 <ais523> (as in, will sg have anything corresponding to that?)
18:02:44 <elliott> ais523: hmm, what does that do, again?
18:02:53 <elliott> obviously for text files, sg should convert from/to platform newlines
18:02:59 <elliott> it'll have to do that anyway, to make sense of anything
18:03:39 <ais523> I don't know what it does
18:03:49 <elliott> then how will my answer help you? :-P
18:04:11 <elliott> "svn:eol-style
18:04:11 <elliott> Makes the client convert end-of-line characters in text files. Used when the working copy is needed with a specific EOL style. "native" is commonly used, so that EOLs match the user's OS EOL style. Repositories may require this property on all files to prevent inconsistent line endings, which can cause a problem in itself."
18:04:20 <elliott> yeah, doesn't apply to sg
18:04:27 <elliott> I think it's used to hack up binary mode files in svn
18:04:31 <ais523> yep, seems about right
18:06:17 <elliott> ais523: speaking of sg, I ran into the Debian renaming ack to ack-grep thing you mentioned today
18:06:23 <elliott> (I was trying to install a nicer diff tool)
18:06:42 <ais523> I just have an alias in my .bashrc
18:06:55 <elliott> disappointed in your lack of reaction to second line
18:07:02 <ais523> oh, diff?
18:07:07 <ais523> hmm
18:07:10 <elliott> I had "I never said I /succeeded/" all lined up and all, too
18:07:18 <ais523> haha
18:07:26 <elliott> I simply forgot that ack was a super-duper highlighting auto-excluding grepper, rather than a super-duper highlighting auto-excluding differ
18:07:34 <ais523> I was just trying to work out how to diff using a grep-alike
18:07:44 <ais523> also, ack really isn't a grepper, it's a Perl regex matcher
18:07:59 <ais523> it doesn't do any of the stuff I expect greps to do internally, like optimising fixed-string matches
18:08:12 <elliott> pcregrep ends with grep
18:08:25 <elliott> but that's a shame
18:08:29 <elliott> Perl regexps are a shame :(
18:08:43 <ais523> pcregrep I like because at least it's honest
18:08:50 <elliott> howso
18:08:56 <ais523> it's a grep-alike made using PCRE
18:09:06 <ais523> you can't get much more descriptive than that
18:09:08 <elliott> heh
18:09:12 <ais523> whereas ack is a grep-alike made using Perl
18:09:43 <elliott> hmm, I wonder how efficient it would be to do regexp matching by converting the regexp to a CFG, then applying derivative-based parsing
18:10:08 <elliott> still worst-case exponential as with backtracking regexps, but it does far better than that in basically all practice, unlike backtracking regexps
18:10:31 <elliott> actually, you can't convert backrefs to CFGs can you in general?
18:10:33 <elliott> maybe I'm wrong
18:10:42 <ais523> I'm not sure
18:11:01 <elliott> sounds wrong, backrefs are not very context-free after all
18:11:15 <ais523> ah, right
18:11:18 <ais523> I thought you said CSGs
18:11:24 <ais523> and couldn't work it out mentally
18:11:32 <ais523> CFGs = "normal" regexps, right?
18:11:45 <elliott> CFG = yacc input, but without all the restrictions that yacc rejects
18:11:48 <ais523> and they can be done in linear time by compiling them into nondeterministic FSMs
18:11:53 <elliott> no
18:11:56 <ais523> ah, right, I see
18:12:17 <elliott> AFAIK derivative-based parsing only works for (any) CFG, not CSGs... well, maybe it can be generalised, but I don't know that it has been done
18:12:27 -!- Vorpal has joined.
18:13:17 <Vorpal> I now have my driving license :D
18:13:34 <elliott> you and ten billion other people in the world
18:13:36 <elliott> `? finlan
18:13:37 <elliott> `? finland
18:13:37 <HackEgo> finlan? ¯\(°_o)/¯
18:13:38 <HackEgo> Finland is a European country. There are two people in Finland, and at least five of them are in this channel. Corun drives the bus.
18:14:05 <elliott> ais523: haha, darcs' suggested solution for managing symlinks is amazing
18:14:08 <elliott> create a script
18:14:10 <elliott> ln -s foo/quux bar
18:14:10 <elliott> ln -s foo/wibble wibble2
18:14:11 <ais523> hmm, I don't think our learndb is all that sensible
18:14:12 <elliott> then add it as a posthook
18:14:19 <ais523> elliott: that's beautifully ridiculous
18:14:31 <elliott> ais523: now if only they took it to its conclusion, and used it to generate the entire tree
18:14:32 <ais523> darcs' treatment of the u+x bit is ridiculous enough
18:14:39 <elliott> s/conclusion/(il)logical conclusion/
18:14:43 <elliott> also, our learndb isn't meant to be sensible
18:14:44 <elliott> and how does it treat it?
18:15:22 -!- nooga has quit (Ping timeout: 240 seconds).
18:16:15 <ais523> elliott: it doesn't
18:16:18 <ais523> at all
18:16:24 <elliott> heh
18:16:28 <elliott> what about the other +x bits?
18:17:43 <ais523> not those either, but that's less bad
18:18:00 <elliott> what's u again?
18:18:06 <ais523> owner
18:18:10 <elliott> thought so
18:18:17 <elliott> you should really use octal permissions :)
18:21:02 <ais523> nah, we should clearly use ACLs
18:21:20 <ais523> although, I think semantically, we should only track executable/readable/writable
18:21:39 <ais523> I'm not sure whether to track to-world separately from to-user; we shouldn't track to-group
18:22:47 <CakeProphet> I am the best at the world.
18:22:54 <CakeProphet> I win the game.
18:22:58 <CakeProphet> I fight snakes
18:24:09 <elliott> ais523: I was just going to go with tracking the three-digit octal for sg
18:24:47 <elliott> ais523: I guess tracking group permissions is a bit silly, but what if you want to version /etc?
18:24:51 <elliott> or your dotfiles?
18:25:26 <ais523> elliott: hmm, it depends on whether sg's meant to be used for one user, or across systems
18:25:34 <elliott> why not both?
18:25:45 <ais523> arguably, it should track all the permissions, together with user and group authorship, but only restore them if on the same system
18:25:50 <ais523> or same user on same system
18:25:57 <elliott> gross :P
18:26:29 <elliott> ais523: I'm tempted to say that if we don't track group permissions, we shouldn't track permissions at all
18:26:43 <elliott> but +x/-x is really necessary to track, so that's a bad solution
18:26:49 <elliott> so we should track group permissions ;-)
18:27:19 <ais523> but group permissions aren't even meaningful on, say, Windows (which uses ACLs instead), or @ (which uses capabilities), or FeatherOS (which doesn't implement them because you really expect me to write that too?)
18:27:51 <elliott> there's no way anything we do will work on @ well at all
18:27:55 <elliott> so there's no point considering it
18:28:07 <elliott> with Windows, I think we should just emulate POSIX semantics as much as we can
18:28:10 <elliott> we want symlinks, after all
18:28:26 <elliott> so I think we should be modelling some sideset of a POSIX filesystem
18:28:47 -!- boily has quit (Ping timeout: 276 seconds).
18:28:49 <elliott> not all the stupid ACLs and xattrs and blah blah blah, so a subset, but maybe a slightly different structure will emerge on a technicality, so superset, so sideset :P
18:29:06 <ais523> Windows has symlinks-to-executables (.lnk), and hardlinks (junctions)
18:29:15 <elliott> yep
18:29:22 <elliott> the user will have to configure sg to do as they wish
18:29:22 <ais523> Linux has SElinux permissions
18:29:31 <elliott> what is your point here?
18:30:00 <ais523> that going on the UNIX model just because it's the UNIX model seems a surprising thing to do
18:30:21 <elliott> we agreed to use POSIX semantics ages ago, you know
18:30:25 <ais523> fair enough
18:30:29 <ais523> I'm just trying to remember why
18:30:36 <elliott> are we trying to implement sg in a way that's useful to us and others, or The Perfect Scapegoat?
18:30:49 -!- nooga has joined.
18:30:51 <pikhq> Windows post-Vista also has straight symlinks.
18:30:59 <CakeProphet> practical = good
18:30:59 <elliott> I want to version symlinks, I want to version executable scripts, and I'm likely to want to version /etc and dotfiles too
18:31:26 <elliott> why should I have to miss out on that just because Windows doesn't commonly do it?
18:31:29 <elliott> there's tons of solutions to that
18:32:07 <CakeProphet> argument against portability: some operating systems suck.
18:32:16 <elliott> (I don't think we should track setuid/setgid or the like because those are attributes of system executables, not user-edited files)
18:32:42 <elliott> (I suppose you could make an argument for tracking the weird setgid directory behaviour, but (a) it's awful and (b) it's more of a system setting than an attribute of the directory anyway)
18:34:13 <elliott> ais523: FWIW, I'm willing to compromise down to just tracking rwx on user/group
18:34:15 <elliott> erm
18:34:16 <elliott> ais523: FWIW, I'm willing to compromise down to just tracking rwx on user/world
18:34:20 <CakeProphet> you should track those weird metadata attribute things Window has.
18:34:22 <elliott> But I'm not sure it's the best choice
18:34:31 <ais523> what about sticky bit on directories?
18:34:37 <CakeProphet> actually I don't think there's anyway to expose them besides knowing the key name.
18:34:40 <elliott> CakeProphet: ais523: let's track Mac OS Classic resource forks
18:34:43 <elliott> ais523: <elliott> (I suppose you could make an argument for tracking the weird setgid directory behaviour, but (a) it's awful and (b) it's more of a system setting than an attribute of the directory anyway)
18:34:49 <elliott> let's just pretend it doesn't exist
18:34:51 <elliott> isn't it Linux-specific, too?
18:34:52 <ais523> setgid on directories != sticky on directories
18:34:58 <ais523> they're two entirely different behaviours
18:35:04 <pikhq> elliott: Resource forks aren't Mac OS Classic-specific.
18:35:08 <elliott> ais523: er, hmm
18:35:09 <pikhq> NTFS also has resource forks.
18:35:09 <ais523> and both exist on more than UNIX, although one's standard and one's a subset of Unices
18:35:13 <elliott> I think I meant sticky
18:35:29 <elliott> pikhq: yes, but I don't want to track /those/ lame things
18:35:40 <CakeProphet> man why does Lifehacker keep talking about Windows 8
18:35:49 <elliott> man why do you keep reading Lifehacker
18:35:53 <elliott> or anything gawker puts out at all
18:35:59 <ais523> +dt: files in the directory cannot be renamed/deleted by non-owners; +d,g+s: files in the directory are created with the same group as the directory, not the same group as their owner
18:36:11 <elliott> ais523: yeah, my opinion is: gross
18:36:30 <elliott> ais523: let's model an /idealised/ POSIX filesystem :P
18:37:00 * ais523 vaguely wonders how much TWENTY FIVE, FIVE MILLION is
18:37:06 <elliott> wat
18:37:12 <ais523> it was written in figures, too, as 25.5 000 000
18:37:16 <ais523> (spam I received)
18:37:27 <elliott> that's a lot of... units
18:37:38 <ais523> I think the 419 spammers are offering a nonexistent number of dollars
18:37:45 <ais523> in the hope that people assume it's a lot
18:37:46 <elliott> that's true for all of them
18:38:44 <ais523> no, I mean, normally it's the dollars that don't exist
18:38:59 <ais523> in this case, it's not just the dollars that don't exist, but the number of dollars that were claimed to exist isn't even a real number
18:39:01 <elliott> heh
18:39:07 -!- ive has joined.
18:39:19 <elliott> ais523: maybe they're offering 25 + 5000000i dollars
18:39:21 <elliott> that's not real, after al
18:39:21 <elliott> l
18:39:38 <CakeProphet> wow that's $25
18:39:40 <CakeProphet> awesome
18:39:43 <CakeProphet> I could use that.
18:39:48 <ais523> maybe $25, 50¢
18:39:56 <elliott> fsvo $25
18:40:00 <CakeProphet> I could buy like, maybe 20 packs of sour punch straws
18:40:03 <ais523> or £25, 5000000¢
18:40:05 <CakeProphet> at absolutely no cost to me.
18:40:53 <CakeProphet> cents are easily represented by a decimal number though
18:40:57 <CakeProphet> $25.50
18:41:12 <CakeProphet> I think imaginary dollars are just dollars that are offered but don't exist.
18:41:17 <CakeProphet> >_>
18:41:17 -!- SgeoN1 has joined.
18:41:19 <ais523> well, 25.5 000 000 (TWENTY FIVE, FIVE MILLION) is not a real number!
18:41:29 <ais523> hmm, if only zzo38 were here
18:41:38 <CakeProphet> sure it is.
18:41:49 <CakeProphet> in someone's number system
18:41:53 <CakeProphet> I'm sure it's meaningful.
18:41:59 <elliott> those aren't reals
18:42:29 <CakeProphet> well yeah I'm looking at pixels.
18:43:02 <CakeProphet> or rather
18:43:10 <CakeProphet> your mom's tits aren't reals.
18:43:13 <CakeProphet> BAM
18:43:34 <CakeProphet> I feel that, perhaps
18:43:39 <CakeProphet> as the day progresses
18:43:51 <CakeProphet> I will just progressively make less sense.
18:43:55 -!- boily has joined.
18:45:08 <elliott> i assure you that is impossible
18:45:22 <SgeoN1> (cherry-pick '(cake-prophet)) (load "cakeprophet.l") (/cherry-pick)
18:45:48 <ais523> SgeoN1: gah, you can't mix Lisp and XML like that, it's a horror
18:45:56 <ais523> quick, someone make an esolang with syntax that works like that
18:46:02 <ais523> I think it'd manage to offend absolutely everyone
18:46:13 <elliott> ais523: SgeoN1 actually implemented that thing
18:46:15 <elliott> it was awful
18:46:19 <elliott> (cherry-pick)
18:46:32 <SgeoN1> >.> I actually wrote functions named that
18:46:43 -!- Ngevd has joined.
18:46:49 <ais523> elliott: what do you think of replacement-for-B, btw? it seems to be gradually starting
18:46:54 <ais523> and I think I've pulled a Wooble already
18:46:59 <elliott> ais523: it looks boring
18:47:06 <elliott> like most of latter-day B
18:47:12 <ais523> yep, indeed
18:47:13 <Ngevd> Replacement-for-B?
18:47:17 <ais523> hopefully it'll sort itself out in a while, though
18:47:17 <elliott> Ngevd: nomic
18:47:20 <ais523> Ngevd: B is a nomic
18:47:22 <CakeProphet> so if I write
18:47:27 <Ngevd> Okay
18:47:32 <CakeProphet> sum ls / length ls
18:47:33 <ais523> which most people seem to think is dead or at least permanently fossilised
18:47:37 <elliott> ais523: I'd probably unsubscribed from the nomic lists by now if I weren't a packrat
18:47:43 <CakeProphet> does the compiler reduce that to one recursive traversal of ls?
18:47:45 <elliott> I still have a Nomicron label right after B
18:47:52 -!- boily has quit (Client Quit).
18:47:53 <elliott> CakeProphet: maybe, if there's a rule for it.
18:47:55 <elliott> not in general though.
18:48:05 <CakeProphet> that would be a nice feature.
18:48:06 <CakeProphet> if possible.
18:48:11 <elliott> that's what rules _are_.
18:48:33 <SgeoN1> elliott: I don't think I saw a better way to set it up. Should make the end-user API more convenient though, and leave these as locally used things
18:48:35 <elliott> try it and peek at the core
18:49:07 <CakeProphet> the rules are... nice features? I'm confused. I was saying that being able to reduce such things in general would be a nice feature.
18:49:19 <CakeProphet> maybe not with any data structures but with lists as a special case perhaps.
18:49:24 <elliott> that is what rules are for.
18:49:24 <CakeProphet> unless it could be done with any structure.
18:49:26 <elliott> that is what rules are for.
18:49:40 <elliott> the only question is whether there's a rule that kicks in for that case
18:49:43 <CakeProphet> the rules are for in general reducing multiple traversals into one? no they're not.
18:49:53 <elliott> do you know what rules are
18:49:55 <CakeProphet> yes.
18:49:58 <elliott> wrong
18:50:03 <ais523> golfing challenge: write the smallest possible lambda calculus self-compile-and-runner (i.e. interpreter with eigenratio 1, cheating is allowed)
18:50:15 <CakeProphet> you're talking about something like {- RULE ... -} right?
18:50:23 <elliott> ais523: \x.x
18:50:37 <ais523> elliott: input is a church list of church numerals
18:50:41 <ais523> not a function
18:50:46 <elliott> CakeProphet: yes. and if you don't think its whole purpose is to allow seemingly inefficient multiple traversals to compile down to low-level loops, you are wrong.
18:50:57 <elliott> ais523: why mix parsing into the equation?
18:50:58 <CakeProphet> elliott: you're completely ignoring what I'm talking about.
18:51:00 <CakeProphet> I am saying
18:51:06 <SgeoN1> What was so horrible about cherry-pick?
18:51:09 <elliott> ais523: use the Church or Scott-Mogensen encoding of the de Bruijn LC syntax
18:51:10 <ais523> elliott: because that's the whole point of the exercise
18:51:11 <CakeProphet> or rather asking, or wondering
18:51:16 <CakeProphet> if it can be done IN GENERAL
18:51:16 <CakeProphet> as in
18:51:19 <elliott> ais523: why?
18:51:19 <CakeProphet> not with specific rules.
18:51:21 <elliott> that's the boring aprt
18:51:22 <elliott> part
18:51:41 <ais523> well, I'm OK with supplying a separate parser into some other Church encoding, I guess
18:51:49 <ais523> as long as it's expressive enough to be able to "unparse" it again
18:51:58 <elliott> ais523: including parens?
18:52:01 <ais523> I don't care about things like variable names
18:52:11 <ais523> it doesn't need to unparse into the same string of characters, just one with the same meaning
18:52:12 <elliott> CakeProphet: stream fusion is meant to do a lot of it automatically. but it's not ready for primetime
18:52:12 <Ngevd> Hang on.
18:52:17 <elliott> anyway you're basically asking for a ssc
18:52:21 <ais523> ssc = ?
18:52:22 <Ngevd> I'm in a game of Nomic
18:52:23 <elliott> ais523: well that's easy then, I mean representation-wise
18:52:26 <elliott> ais523: sufficiently smart compiler
18:52:35 <elliott> let me figure out the church encoding of de bruijn lc
18:52:37 <ais523> elliott: yep, but golfed
18:53:01 <CakeProphet> hmmm, also here's an interesting point I hadn't considered.
18:53:07 <CakeProphet> would there really be much of an efficiency gain?
18:53:36 <CakeProphet> let's say you have two loops: for(ls){blah} for(ls){blah2}
18:53:43 <CakeProphet> and now you've combined them into for(ls) {blah;blah2}
18:53:52 <CakeProphet> ....isn't that pretty much the same in terms of number of instructions?
18:53:55 <elliott> ais523: well, there's already (λ11)(λ(λλλ1(λλ1(λ3(6(λ2(6(λλ3(λ123)))(7(λ7(λ31(21))))))(1(5(λ12))(λ7(λ7(λ2(14)))3)))))(11))(λ1((λ11)(λ11)))
18:53:57 <ais523> elliott: I suppose it doesn't /really/ need to be golfed, but it'll be a pain to write otherwise
18:54:00 <elliott> ais523: http://en.wikipedia.org/wiki/Binary_lambda_calculus#Lambda_encoding
18:54:17 <CakeProphet> I mean, there's a meager difference I think.
18:54:35 <ais523> ah, beautiful, that might be just what I need
18:54:40 <elliott> CakeProphet: half the branches
18:54:43 <ais523> next step: do the same, but in continuation passing style
18:54:47 <elliott> branches are much more expensive than arithmetic or whatever
18:54:49 <ais523> I think I'll probably have to work on that on my own
18:54:59 <CakeProphet> elliott: ah right.
18:55:08 <elliott> ais523: well, it's quite a trivial problem to write an LC self-interpreter; you obviously want to work with de bruijn
18:55:18 <elliott> since it makes the bound variable structure really simple, just a linked list
18:55:26 <elliott> and you basically only have three cases
18:55:27 <ais523> I'd figured out working with that encoding already
18:55:27 <elliott> I mean it's just
18:55:32 <ais523> by myself
18:55:36 <elliott> data LC = Var Nat | Lam LC | App LC LC
18:55:36 <ais523> although I didn't know what it was called
18:55:42 <CakeProphet> elliott: and the savings are even greater for larger numbers of loops.
18:55:43 <ais523> (I'd forgotten, I knew once)
18:55:48 <elliott> ais523: are you sure? de bruijn is probaly inside out to what you think
18:55:52 <elliott> \\zero is const id
18:55:54 <elliott> \\one is const
18:55:59 <elliott> the innermost lambda's variable is 0
18:56:01 <CakeProphet> 3 loops into one would be a third less branches, and so on.
18:56:02 <elliott> second-innermost is one
18:56:02 <elliott> etc.
18:56:07 <ais523> no, that's the way round I meant
18:56:09 <elliott> a lot of people do it the other way around when inventing their own
18:56:10 <elliott> alright then
18:56:12 <ais523> I know that the other way round exists too
18:56:20 <ais523> but then, say, S and K are different depending on how nested they are
18:56:28 <elliott> ais523: btw, if you encode the lambda terms in Church encoding, rather than just simple constructor analysis, I think it simplifies things even more
18:56:31 <elliott> because you get a fold for free
18:56:48 <elliott> hmm... you want to make it a monadic fold, really :)
18:56:50 <elliott> so you can use the continuation monad
18:57:01 <elliott> maybe you need to invent your own encoding
18:57:10 <elliott> the CPS version of Church encoding
18:57:15 <CakeProphet> LC is awesome.
18:57:16 <CakeProphet> best thing.
18:57:22 <elliott> (I bet oerjan will be able to help with that ;D)
18:57:53 <CakeProphet> data? fuck that let's just represent it as code.
18:58:14 <CakeProphet> you know because there's totally a distinction between those two things.
18:58:23 <Phantom_Hoover> You're wrong in a subtle but total way, but I'll leave it to elliott to despair.
18:58:36 <elliott> hi
18:59:19 <CakeProphet> Phantom_Hoover: I sort of assume this most of the time I say things here.
18:59:40 <elliott> ais523: oh, I think I have something
18:59:46 <elliott> ais523: here's the first few naturals in Hird encoding
18:59:46 <elliott> \f x k. k x
18:59:46 <elliott> \f x k. f x k
18:59:46 <elliott> \f x k. f x (\x'. f x' k)
18:59:46 <elliott> \f x k. f x (\x'. f x' (\x''. f x'' k))
18:59:51 <Phantom_Hoover> CakeProphet, this time it's that you approached the LC thinking of it as a programming language.
19:00:01 <CakeProphet> is that uh... what I did?
19:00:17 <elliott> ais523: successor is
19:00:18 <CakeProphet> also is it wrong to do that?
19:00:21 <elliott> ais523: succ = \n f x k. n f x (\x'. f x' k)
19:00:24 <CakeProphet> does it make what I say wrong?
19:00:37 <elliott> ais523: (succ itself returns in usual style, not CPS; but the value it returns is a Hird numeral and therefore CPS in operation)
19:00:41 <Phantom_Hoover> CakeProphet, yes, yes and yes.
19:00:42 <CakeProphet> that LC represents data as code. I can't get away with saying that? it's not in any way accurate?
19:00:52 <CakeProphet> code being interpreted quite loosely.
19:00:55 <ais523> elliott: CPS Church numerals? ingenious
19:01:02 <elliott> true = \a b k. k a
19:01:02 <elliott> false = \a b k. k b
19:01:09 <elliott> this translation seems quite obvious, you just CPS-transform the Church encoding
19:01:15 <elliott> ais523: well, Church-encoding can be applied to any ADT
19:01:39 <elliott> ais523: the reason to use Church-encoding rather than just simple "give me a list of functions, one per constructor, and I'll call the right one with all my fields" is that it gives you a fold over the data type for free
19:01:46 <elliott> because it represents types as their fold functions
19:01:48 <elliott> ais523: but you need CPS
19:01:49 <ais523> I'm not too good at CPS; I understand it, but it's not intuitive for me
19:01:51 <elliott> ais523: so you need a CPS fold
19:01:55 <Phantom_Hoover> CakeProphet, the LC predates the existence of programming, let alone code.
19:01:59 <elliott> → Hird encoding!
19:02:01 <ais523> it takes thought
19:02:01 <CakeProphet> Phantom_Hoover: lambda calculus is a language. You can specify a grammar for it. It computes things. What is a programming language?
19:02:03 <ais523> yep, indeed
19:02:11 <ais523> elliott: this is Feather-related, btw
19:02:14 <elliott> I guessed
19:02:15 <ais523> if you hadn't already guessed
19:02:16 <elliott> ais523: now to try and figure out the Hird-encoding of the de Bruijn LC
19:02:21 <elliott> shouldn't be too hard
19:02:29 <Phantom_Hoover> CakeProphet, in which case, why would you ever expect a distinction between code and data?
19:03:03 <CakeProphet> Phantom_Hoover: well, in the past I would consider them as distinct things because they seem to intuitively be completely different things. Also in most languages there is a conceptual distinction.
19:03:08 <CakeProphet> in lambda calculus there isn't.
19:03:33 <CakeProphet> which is what makes it awesome, as I said.
19:04:25 <Phantom_Hoover> CakeProphet, well, I read it more as mocking the lack of a distinction as if the existence of one was a fundamental thing.
19:04:36 <Phantom_Hoover> I apologise if that was not what you meant.
19:04:39 <elliott> ais523: Feather is strictly-evaluated, right?
19:04:45 <ais523> yes
19:04:46 <CakeProphet> so I do expect a distinction in things that compute other things (I won't say programming language because it is subtley wrong) because it's usually made in some way.
19:04:48 <elliott> ais523: and f is evaluated before x in (f x)?
19:04:54 <ais523> yes
19:04:56 <CakeProphet> Phantom_Hoover: oh... I see how you might have done that.
19:05:01 <ais523> I had to think about that one, but it is
19:05:24 <CakeProphet> Phantom_Hoover: no there isn't a difference. I wasn't saying it was bad.
19:05:59 <CakeProphet> \a.\b.a is probably the best true ever.
19:06:49 <CakeProphet> what better way to encode a boolean than as the computation it's intended to perform.
19:07:59 <elliott> ais523: http://sprunge.us/hiac
19:08:14 <ais523> thanks
19:08:22 * ais523 saves local copy
19:08:25 <elliott> ais523: the "n" used in Var should be a hird numeral too
19:08:31 <elliott> just for consistency, you should encode all data like that :P
19:08:32 -!- pikhq_ has joined.
19:08:33 -!- pikhq has quit (Ping timeout: 252 seconds).
19:08:37 <elliott> save those lines with it, that's SO IMPORTANT
19:08:43 <elliott> (it's not actually so important, but let's pretend?? that it is?)
19:08:53 <elliott> maybe it is so important, I guess you could end up losing your evaluation order if you don't do everything CPS
19:08:56 -!- Nisstyre has quit (Ping timeout: 260 seconds).
19:08:56 <elliott> and besides it's cleaner that way
19:08:59 <ais523> well, data has to become something when unboxed
19:09:08 <elliott> since you can thread complex CPS computations through an arbitrary data type
19:09:09 <elliott> 's fold
19:09:12 <ais523> and for sanity reasons, changing what it unboxes into retroactively is possibly a bad idea
19:09:21 * CakeProphet feels that people on this channel sometimes just assume he doesn't know anything.
19:09:24 <elliott> ais523: how's that relevant to which natural representation you use?
19:09:25 <ais523> and is probably only possible by retroactively replacing the interp
19:09:35 <ais523> elliott: well, the idea is say I have an integer, say 6
19:09:36 <ais523> that's an object
19:09:37 <elliott> ais523: I'm just saying use Hird naturals, not Church naturals, for the Var field
19:09:43 <ais523> oh, I see
19:09:46 <elliott> because it's more consistent
19:09:51 <ais523> now, 6 # would be the Hird numeral for 6
19:09:52 <CakeProphet> s/Hird/Hird(tm)/
19:10:02 <elliott> why can't 6 be the Hird numeral for 6?
19:10:30 -!- SgeoN1 has quit (Ping timeout: 258 seconds).
19:11:00 <CakeProphet> they're second-class citizens. they shouldn't expect special treatment.
19:11:02 <CakeProphet> filthy peasants.
19:11:29 <elliott> ais523: oh, um, there's an inconsistency in the examples I gave
19:11:36 -!- Nisstyre has joined.
19:11:39 <elliott> "k true"/"k false" is wrong, it should be "true k"/"false k"
19:11:42 <elliott> I'm expanding it now though
19:11:47 <elliott> so you can just grab the updated version when I sprunge it :P
19:12:03 <CakeProphet> sprunge is a good verb.
19:12:21 -!- SgeoN1 has joined.
19:12:32 <elliott> ais523: (note that this means that even the "zero" value passed to a fold is CPS-represented)
19:12:37 <elliott> so you have to apply it to get it out
19:12:43 <elliott> but that's perfectly okay; in fact it's more consistent
19:13:13 <ais523> yep
19:15:11 <elliott> ais523: I'm going to try writing a simple eval (that doesn't expose call/cc to the LC program itself) on hird LC terms
19:15:19 <elliott> just out of curiosity
19:15:31 <ais523> fair enoguh
19:15:33 <ais523> *enough
19:15:39 <elliott> well, I think I'll depend on an unwritten fix, because I cba to write out Y :)
19:15:40 <ais523> this is useful esolang progress even if Feather never goes anywhere
19:15:50 <ais523> you can just look up Y, can't you?
19:15:53 <ais523> or do you have to CPS it too?
19:17:11 <elliott> oh, wait, Y probably wouldn't even work
19:17:15 <elliott> because the lambda calculus being used is strict
19:17:22 <elliott> primitive fix is nicer, anyway
19:17:25 <elliott> because it permits sharing
19:17:33 <elliott> ...although I guess that doesn't really apply to strict languages :/
19:18:02 <CakeProphet> haskell mind virus. strict languages don't care, so why would they share?
19:19:37 <ais523> elliott: I'll need to write a strict fix in LC, but it's possible, right (with a Y variant)?
19:20:10 <elliott> ais523: yes
19:20:14 <elliott> only works on functions, though
19:20:20 <Phantom_Hoover> elliott, how does Hird LC work?
19:20:42 <ais523> elliott: all I really need is to be able to do recursion
19:21:29 <CakeProphet> Did you know that solar energy helps power space shuttle missions and provides energy to the Hubbell telescope? Turns out, through the use of solar panels, solar engergy can also provide power to your home.
19:21:34 <CakeProphet> this is a good website.
19:21:38 <elliott> Phantom_Hoover: well
19:22:00 -!- SgeoN1 has quit (Ping timeout: 258 seconds).
19:22:12 <Phantom_Hoover> elliott proceeds to explain it in song.
19:22:20 <elliott> no, that was my answer
19:22:55 <elliott> :t foldr
19:22:55 <lambdabot> forall a b. (a -> b -> b) -> b -> [a] -> b
19:23:06 <elliott> ?djinn ((a -> b -> b) -> b -> b) -> a
19:23:06 <lambdabot> -- f cannot be realized.
19:23:11 <elliott> wat
19:23:23 <elliott> ?djinn (forall b.(a -> b -> b) -> b -> b) -> a
19:23:23 <lambdabot> -- f cannot be realized.
19:23:24 <elliott> darn :P
19:23:25 <elliott> well
19:23:29 <elliott> I know that can't be right because that's just head...
19:23:35 <elliott> stupid djinn
19:23:41 <elliott> i guess it doesn't quite understand recursion :)
19:23:56 <CakeProphet> if only djinn could write my programs for me.
19:29:53 <ais523> ?djinn (a -> b -> c) -> (b -> a -> c)
19:29:53 <lambdabot> f a b c = a c b
19:30:05 <ais523> ?pl . djinn (a -> b -> c) -> (b -> a -> c)
19:30:05 <lambdabot> (line 1, column 1):
19:30:05 <lambdabot> unexpected "."
19:30:05 <lambdabot> expecting white space, "()", natural, identifier, lambda abstraction or expression
19:30:09 <ais523> ?pl.djinn (a -> b -> c) -> (b -> a -> c)
19:30:09 <lambdabot> Unknown command, try @list
19:30:13 <ais523> how do I stack commands?
19:30:21 <ais523> ?pl$djinn (a -> b -> c) -> (b -> a -> c)
19:30:21 <lambdabot> Unknown command, try @list
19:30:51 <elliott> ais523: http://sprunge.us/LPMW
19:30:56 <elliott> ?. pl djinn (a -> b -> c) -> (b -> a -> c)
19:30:56 <lambdabot> f = flip
19:31:03 <elliott> ais523: note: does not yet include evaluator :P
19:31:11 <elliott> also, includes a _lot_ of rambling.
19:31:23 <elliott> oops, it's not right
19:31:38 <elliott> one moment
19:32:05 <elliott> ais523: http://sprunge.us/aEhU
19:32:43 <ais523> ty
19:33:33 <elliott> ais523: oh, I think that LC term structure may be wrong
19:33:37 <elliott> at least, if you want to evaluate simply with it
19:33:40 <elliott> -- Lam = \e var lam app k. e var lam app (\e'. lam e' k)
19:33:45 <elliott> that forces the inside of the lambdas
19:33:47 <elliott> so you want to tweak it slightly
19:38:25 <elliott> ais523: http://sprunge.us/DGBd now with eval!
19:38:28 <Ngevd> Today's D&D beats even the previous one
19:38:29 <elliott> (of a slightly different representation)
19:38:45 <elliott> ais523: this representation can be reified back to syntax fully
19:38:55 <elliott> also, the resulting eval is really simple :)
19:39:05 <elliott> even if it cheats by encoding Lams in a way that breaks the mechanical rules of Hird encoding
19:39:12 <elliott> but it's worth it, because otherwise the CPS wouldn't help at all
19:39:49 <elliott> oops
19:39:51 <elliott> I made another mistake
19:40:05 <elliott> sorry ais523
19:40:06 <elliott> i'll fix it
19:40:45 <elliott> ais523: http://sprunge.us/ENSb
19:41:00 <elliott> note that that eval doesn't expose call/cc to its evaluated expression at all
19:41:02 <elliott> but I think it would be simple
19:41:36 <elliott> either by adding another primitive syntax node CallCC which evaluates to the call/cc function, or by having a top-level eval that passes call/cc to the whole expression which is a function
19:41:42 <elliott> (that latter one sounds more tricky though)
19:41:47 <ais523> yep, just pass call/cc as an arg
19:42:11 <elliott> ais523: oh and both eval and its App case can be trivially eta-reduced there
19:42:57 <elliott> ais523: and no, I think CallCC as a primitive syntax note is simpler
19:43:00 <elliott> than passing call/cc as an argument
19:43:06 <elliott> in fact, I'm not sure the latter even works
19:43:19 <elliott> you don't need to change the concrete syntax used, though
19:43:27 <elliott> because you can just pass the primitive node CallCC in
19:43:36 <elliott> ais523: http://sprunge.us/SYUJ updated version, with super-compact eval at the end
19:43:47 <elliott> eval = \vs t. t (\n. at n vs) (\e k'. k' (Lam e)) (\f x. f error (eval (Cons x vars)) error)
19:43:58 <elliott> argh
19:43:58 <elliott> s/vars/vs/
19:44:11 <elliott> http://sprunge.us/dSKH fixed. again.
19:44:17 <elliott> I think that file is now long enough.
19:45:21 <elliott> and now to brb and try and forget I ever got that confused
19:47:56 <Ngevd> Well, I have revived my MSPAFA
19:48:43 -!- nooga has quit (Ping timeout: 252 seconds).
19:49:04 <ais523> elliott: my bash history is currently full of alternating wget, mv and l commands
19:49:21 <ais523> not completely full
19:49:25 <ais523> but many lines worth, anyway
19:59:20 <ais523> <nano> [ XOFF ignored, mumble mumble ]
19:59:23 <ais523> haha
20:00:06 <olsner> that was the vital clue to eventually figuring out what it was that occasionally locked up my terminals
20:01:05 <olsner> and of course that problem was much worse before nano introduced that feature...
20:08:40 <Phantom_Hoover> Ngevd, oh god
20:09:55 -!- nooga has joined.
20:13:44 <elliott> ais523: back, and heh
20:14:28 -!- nooga has quit (Ping timeout: 260 seconds).
20:15:06 <elliott> ais523: http://sprunge.us/PXPS final revision... hopefully :)
20:15:10 <ais523> <my grandmother> is Norway always icy?
20:15:22 <ais523> any Norwegians here (oerjan, maybe) care to reply?
20:15:37 <elliott> Norway is literally made out of ice.
20:16:49 <Phantom_Hoover> ais523, they have warmer summers than Edinburgh.
20:17:07 -!- oerjan has joined.
20:17:13 -!- Ngevd has quit (Ping timeout: 260 seconds).
20:17:59 <elliott> Phantom_Hoover: so does a fridge.
20:18:19 <Phantom_Hoover> elliott, that is perhaps an exaggeration.
20:18:48 <elliott> i'm in the great fridge we call "hexham
20:18:49 <elliott> "
20:19:14 <elliott> ais523: I take it lazy Feather would make no sense whatsoever?
20:19:40 <ais523> elliott: it'd have the problem of working out when a retroactive change happened
20:19:46 <ais523> (to determine which one happened first)
20:20:15 <elliott> go by evaluation order?
20:20:16 <Phantom_Hoover> elliott, wait, what's the nearest city to Hexham.
20:20:44 <elliott> Phantom_Hoover: Newcastle.
20:21:21 <Phantom_Hoover> But that's in Ireland!
20:21:44 <elliott> Yeeees.
20:22:03 <ais523> Phantom_Hoover: I thought you'd have a better grasp of geography than that...
20:22:04 <Phantom_Hoover> God, it's worse than Leicester.
20:22:09 <elliott> Has nobody told Phantom_Hoover about the wormhole near Hexham?
20:22:21 <ais523> Leicester is pretty close to Birmingham, at least
20:22:28 <elliott> Man, wormholes would really fuck up geology. Maybe.
20:22:33 <elliott> If it extended into the atmosphere.
20:22:36 <Phantom_Hoover> http://en.wikipedia.org/wiki/Newcastle_West
20:22:41 <Phantom_Hoover> Geography, bitches.
20:22:59 <ais523> Phantom_Hoover: that isn't Newcastle
20:23:06 <ais523> elliott: btw, are the rumours about Newcastle true?
20:23:18 <elliott> ais523: Yes, all of them. What rumours?
20:23:31 <olsner> newcastle is a beer
20:23:32 <Phantom_Hoover> ais523, yes it is
20:23:32 <ais523> mostly about people having a total disregard for the weather
20:23:45 <ais523> and never wearing more than one level of clothing, or /maybe/ two, no matter what
20:24:02 <ais523> (rarely wearing less than one, either, they aren't /quite/ that mad)
20:24:14 <elliott> ais523: Wow, I know Birmingham are used to being the butts of the rumours, but are they really that bad at making up ones in retaliation?
20:24:15 <Phantom_Hoover> If you're going to say 'no, it's Newcastle West', then what Newcastle *are* you referring to?
20:24:32 <elliott> (I have no idea whether that is true or not.)
20:24:38 <elliott> (It's the weirdest rumour I've ever heard though.)
20:24:47 <ais523> elliott: they're decent at retaliating, just not against Newcastle
20:25:04 <Phantom_Hoover> ais523, ooh, what rumours do you have about us?
20:25:09 <ais523> it doesn't really seem like an /insulting/ rumour, though
20:25:49 <Phantom_Hoover> (I assume your grasp of Scotland is too granular to distinguish Edinburgh from anywhere else.)
20:26:19 <ais523> Phantom_Hoover: IIRC, it's that Edinburgh and Glasgow both consider themselves superior for the other, for different reasons
20:26:59 <Phantom_Hoover> elliott, anyway Newcastle is fully a degree warmer than Edinburgh in the summer so ha.
20:27:21 <elliott> Phantom_Hoover: /Too/ granular?
20:27:40 <Phantom_Hoover> elliott, I forgot which way granularity went.
20:27:40 <oerjan> <ais523> and never wearing more than one level of clothing, or /maybe/ two, no matter what <-- it's true, in newcastle they walk around in their underwear.
20:27:46 <elliott> Phantom_Hoover: Me too.
20:27:54 <elliott> oerjan: so that norway, so icy
20:28:02 <oerjan> elliott: occasionally
20:28:22 <elliott> ais523: only occasionally
20:28:33 <ais523> oerjan: that is not inconsistent with the rumours
20:28:56 <oerjan> ais523: i am merely deducing consequences of them
20:28:58 -!- monqy has joined.
20:29:01 <Phantom_Hoover> oerjan, let's objectivise this.
20:29:11 <oerjan> Phantom_Hoover: ok. first, A is A.
20:29:18 <Phantom_Hoover> How often have you had icicles hanging from your nose?
20:29:28 <ais523> oerjan: <my grandmother> is Norway always icy?
20:29:38 <Phantom_Hoover> oerjan, second, taxes are bad and charity is evil?
20:29:57 <oerjan> Phantom_Hoover: rarely. i'm a neurotical nose wiper.
20:30:03 -!- ive has quit (Ping timeout: 260 seconds).
20:30:18 <Phantom_Hoover> oerjan, a fellow sufferer!
20:30:18 <oerjan> well, obsessive, at least.
20:30:38 <Phantom_Hoover> I have a cold and my nose is almost rubbed raw.
20:30:45 <oerjan> Phantom_Hoover: know the feeling.
20:30:46 <elliott> objectivism is a great joke, it just needs to be less serious
20:31:24 <monqy> ugh obsessive nose wiping. that's me too.
20:31:38 <Phantom_Hoover> perhaps
20:31:47 <Phantom_Hoover> everyone is an obsessive nose wiper
20:31:57 <elliott> what are these noses you speak of
20:32:25 <Phantom_Hoover> elliott, they're these things you have if you're not a stunted Northern midget.
20:33:25 <elliott> aka dorf
20:33:27 <oerjan> <Phantom_Hoover> oerjan, second, taxes are bad and charity is evil? <-- something tells me norway isn't big on objectivism.
20:34:00 -!- boily has joined.
20:34:01 <Phantom_Hoover> oerjan, ah, you are all fans of floating-point, then.
20:34:17 <oerjan> Phantom_Hoover: wat
20:35:07 <Phantom_Hoover> oerjan, \exists A \in floats : A \neq A
20:35:16 <oerjan> ah.
20:35:28 <elliott> Phantom_Hoover: Tauist.
20:35:43 <oerjan> > tau
20:35:44 <lambdabot> Not in scope: `tau'
20:35:44 <elliott> (I need a go-to phrase for "wow you just made that excessively formal to sound smart".)
20:35:50 <oerjan> @let tau = 2*pi
20:35:50 <lambdabot> Defined.
20:35:53 <elliott> @undefine
20:35:54 <oerjan> > tau
20:35:54 <elliott> PURGE
20:35:55 <lambdabot> Not in scope: `tau'
20:35:56 <elliott> PUUUUUUURGE
20:35:57 <oerjan> ARGH
20:36:07 <elliott> @let pi = tau/2
20:36:07 <lambdabot> <local>:1:5: Not in scope: `tau'
20:36:28 <Phantom_Hoover> <elliott> (I need a go-to phrase for "wow you just made that excessively formal to sound smart".)
20:36:59 <Phantom_Hoover> Well I just kind of ended up doing that by accident.
20:37:15 <elliott> SUUUUUUUUUUUUURE
20:37:28 <Phantom_Hoover> Around the \in I had my doubts, and I had serious regrets by the time I got to \neq, but by then it was too late.
20:37:32 <oerjan> bondage and latex
20:37:32 <elliott> *breaks into Phantom_Hoover's house, finds walls scribbled with proofs of the greater elegance of tau over pi in simple algebraic equations*
20:37:49 <monqy> oh no
20:37:54 <monqy> phantom hoover how could you
20:38:01 <elliott> *sees thick, seemingly-incomplete manuscript in progress, "The Tau Way of Life"*
20:38:02 <Phantom_Hoover> elliott, hey, I hate tau just as much as the next sane man!
20:38:12 <Phantom_Hoover> elliott, the tau of physics.
20:38:23 <Phantom_Hoover> 06:22:56: <Sgeo_> I have this... thing, as a child, and still a little now, where if I didn't put my hand on my chest, I'd be worried about whether or not my heart's still beating
20:38:24 <elliott> *hears sounds from Phantom_Hoover's sleeping mouth, "tauuuu. tauuuuuu. tauuuuuuuuuuuu. full turn. tauuuuuuu."*
20:38:35 <Phantom_Hoover> I don't even know why this is in a file in ~/
20:38:39 <oerjan> elliott: itym "Tau Te Ching"
20:38:47 <elliott> *sees Phantom_Hoover sleepwalk, go over to the wall, write "I LOVE TAU IT IS BETTER THAN PI AND ALSO GREAT" onto the wall, and then sign it. in triplicate.*
20:38:49 <Phantom_Hoover> It also has 22:20:14: <alise> All the evidence and our best-accepted theories point to it being finite...so...
20:39:05 <elliott> Phantom_Hoover: Our best-accepted theories point to that file you have being finite.
20:39:30 <Phantom_Hoover> I assume it is some kind of list of things I meant to respond to for some reason, possibly the Irish Madness.
20:39:44 <Phantom_Hoover> And finally 21:01:26: <Phantom_Hoover_> Vorpal, Dwarf Fortress is pretty boring, to be honest.
20:39:53 <Phantom_Hoover> Past me is such a tool.
20:40:02 <elliott> I agree.
20:40:04 <elliott> Past me, too.
20:40:15 <elliott> Phantom_Hoover: The Irish Madness?
20:40:19 <oerjan> `log ehird
20:40:23 <HackEgo> 2008-01-27.txt:21:39:40: <ehird> i much prefer being molested by a unicorn, that is invisible, and pink
20:40:30 <elliott> wat
20:40:34 <ais523> wait, that's `log not `quote?
20:40:42 <oerjan> ais523: for _now_.
20:40:48 <ais523> `log `addquote
20:40:52 <oerjan> `quote molested
20:40:52 <HackEgo> 2009-10-26.txt:04:56:30: <ehird> `addquote <fax> im the worst person in the world
20:40:53 <HackEgo> No output.
20:40:59 <ais523> `log `addquote
20:41:00 <elliott> i don't think we need to add that :P
20:41:02 <HackEgo> 2011-08-19.txt:09:21:43: <elliott_> `addquote <monqy> mmm these music samples are still so tasteful
20:41:14 <ais523> `log `addquote
20:41:16 <Phantom_Hoover> `addquote <ehird> i much prefer being molested by a unicorn, that is invisible, and pink
20:41:18 <HackEgo> 2010-01-22.txt:16:47:39: <oerjan> `addquote <Sgeo> I'd imagine that it already has, and no one noticed
20:41:18 <HackEgo> 677) <ehird> i much prefer being molested by a unicorn, that is invisible, and pink
20:41:20 <ais523> I like this method, as it gets deleted quotes too
20:41:27 <elliott> `delquote 677
20:41:29 <HackEgo> ​*poof*
20:41:31 <elliott> ERASE THE RECORD
20:41:39 <ais523> `log `addquote
20:41:43 <HackEgo> 2009-07-10.txt:23:24:37: <ehird> `addquote באופן חלופי ביקום זה כרוך כולם מדברים עברית מסיבה כלשהי: <ehird> אז אני יכול רק להסיק כי הוא פגום, או את העולם, הוא מטורף לגמרי
20:41:59 <ais523> `log `addquote
20:42:02 <HackEgo> 2010-07-26.txt:23:46:01: <ais523> `addquote <ivancastillo75> Oh I get it you guys just use this space to do nothing ?
20:42:16 <ais523> hmm, we need `context
20:42:21 <ais523> which is like `log, but shows a few lines before too
20:43:21 <oerjan> ais523: tricky to do while selecting a random quote. maybe make it take that 2010-07-26.txt:23:46:01 thing?
20:43:32 <elliott> how is that tricky
20:43:51 <elliott> it'd have to use pastes though
20:44:20 <ais523> or just space-backslash-space as newline?
20:44:53 -!- BeholdMyGlory has quit (Quit: ZNC - http://znc.in).
20:45:21 <elliott> ais523: it wouldn't fit on an irc line
20:45:34 <monqy> if only hackego could multiple lines....
20:46:02 <elliott> <gragor> BAD,E
20:46:06 <elliott> <gragor> BAD,E JUJU
20:49:08 -!- Ngevd has joined.
20:50:00 -!- BeholdMyGlory has joined.
20:52:11 -!- SgeoN1 has joined.
20:54:12 <Ngevd> Can I request a page on the wiki for Funge 98?
20:54:26 <Ngevd> And an unconnected category "Unimplementable"?
20:54:44 <elliott> I think we have a superturing category. Not quite the same, but.
20:54:59 <elliott> I don't think anyone wants to put in the effort required to make a decent standalone page for Funge-98 itself.
20:55:19 <elliott> There isn't really much of a paragraph's worth of material in terms of broad strokes, and the details themselves are really complicated.
20:55:21 <monqy> we have uncomputable i think it is
20:55:41 <monqy> what does unimplementable mean
20:55:41 <Ngevd> So we do
20:55:51 <Ngevd> I don't really know
20:56:04 <elliott> uncomputable, I suspect
20:56:15 <Phantom_Hoover> What does uncomputable mean?
20:56:29 <Ngevd> Super Turing-complete
20:56:29 <monqy> some uncomputable languages are implementable in some other uncomputable languages
20:56:46 <Ngevd> We could define a computational class for them!
20:56:51 <Phantom_Hoover> Ngevd, we have a category for those.
20:57:07 <Phantom_Hoover> And their computational classes have already been explored.
20:58:15 <Ngevd> I'd like to switch back to my first suggestion, a Funge-98 page
20:58:23 <elliott> <elliott> I don't think anyone wants to put in the effort required to make a decent standalone page for Funge-98 itself.
20:58:23 <elliott> <elliott> There isn't really much of a paragraph's worth of material in terms of broad strokes, and the details themselves are really complicated.
20:58:24 <elliott> :p
20:58:50 <elliott> There's maybe three to five people around here who have the sufficient knowledge to write a decent page on it.
20:58:58 <Ngevd> One of whom is you
20:59:06 <elliott> At least one of them can't be arsed, and I suspect at least three others can't either.
20:59:28 <Ngevd> I will LEARN IT
20:59:32 <Ngevd> And MAKE AN ARTICLE
20:59:40 <monqy> good LUCK
20:59:40 <elliott> ^source
20:59:40 <fungot> http://git.zem.fi/fungot/blob/HEAD:/fungot.b98
20:59:45 <elliott> Start by learning from the masters.
20:59:48 <elliott> (OK, not that masterful.)
20:59:52 <Phantom_Hoover> Ngevd, I hope you like fastidious specs.
21:00:41 <elliott> Ngevd: Anyway, knowing it well enough to program in it isn't really enough to make a decent article on it, because you'll never run into the corner cases that make up the majority of its infamous ambiguity and strangeness.
21:00:45 <monqy> detroppus is a good drow
21:00:49 <elliott> You really have to implement it to get that kind of knowledge.
21:01:00 <elliott> monqy: yes
21:01:02 <Phantom_Hoover> elliott, what corner cases, out of curiosity?
21:01:13 <Phantom_Hoover> elliott, drows are a kind of elf STEP CAREFULLY MY FRIEND
21:02:25 <Ngevd> GOODNIGHT
21:02:29 -!- Ngevd has quit (Quit: what a big quitter he is, eh?).
21:02:40 <elliott> Phantom_Hoover: See: Basically everything Mycology tests that isn't dirt simple.
21:03:12 -!- SgeoN1 has quit (Ping timeout: 258 seconds).
21:05:04 -!- SgeoN1 has joined.
21:09:43 -!- SgeoN1 has quit (Ping timeout: 258 seconds).
21:12:04 <Deewiant> If you use k at all, you'll probably run into a "corner case".
21:12:19 <elliott> True :P
21:13:05 <fizzie> Drows are a kind of elf; drowsy is kind of an elfy state to be in.
21:14:15 <elliott> And one I'm in. Good night, fuckers.
21:14:25 <monqy> good night elliott
21:16:19 <oerjan> 22:56 Phantom_Hoover> What does uncomputable mean?
21:16:19 <oerjan> 22:56 Ngevd> Super Turing-complete
21:17:13 <oerjan> i believe it is possible for a language to contain uncomputable features without being turing-hard
21:17:32 <oerjan> i vaguely recall possibly seeing some proof
21:17:43 <Phantom_Hoover> Define 'Turing-hard'?
21:18:10 <oerjan> capable of computing anything a turing machine can compute, but possibly more
21:18:38 <Phantom_Hoover> Oh, so it can't compute anything a TM can?
21:18:41 <Phantom_Hoover> That's trivial.
21:18:57 -!- elliott has quit (Ping timeout: 260 seconds).
21:18:58 <oerjan> it can't compute _everything_ a TM can.
21:19:15 <Phantom_Hoover> Yesyesyes, poor choice of words.
21:19:29 <oerjan> but it may still be able to compute something a TM cannot.
21:19:54 <Phantom_Hoover> Again, that seems trivial.
21:20:31 <oerjan> Phantom_Hoover: yes, but it contradicts Ngevd's claim that uncomputable == super TC
21:20:46 <Phantom_Hoover> Yeah, I know.
21:20:48 <oerjan> which is all i wanted to point out.
21:25:54 <oerjan> @tell zzo38 <zzo38> But, is it, if you ignore undefined, and work only with fully defined programs? <-- if you ignore undefined, i think () is final and a Void (empty) type is initial, similarly to the Set category in math
21:25:54 <lambdabot> Consider it noted.
21:27:05 -!- ive has joined.
21:32:24 <oerjan> <ais523> <my grandmother> is Norway always icy?
21:32:37 <oerjan> we supposedly had 28 celsius sometime in august
21:32:47 <oerjan> (in trondheim)
21:32:56 <oerjan> well, by the forecast.
21:33:20 <oerjan> and it hasn't started freezing yet.
21:40:55 -!- GreaseMonkey has joined.
21:42:20 <oerjan> tomorrow is iwc 3160
21:52:54 -!- augur has quit (Ping timeout: 276 seconds).
21:56:22 -!- augur has joined.
21:56:39 <oerjan> > [1,3..20 :: Rational]
21:56:40 <lambdabot> [1 % 1,3 % 1,5 % 1,7 % 1,9 % 1,11 % 1,13 % 1,15 % 1,17 % 1,19 % 1,21 % 1]
22:00:42 <Phantom_Hoover> oerjan, is that the Calvin and Hobbes Point?
22:00:56 <oerjan> yes
22:03:20 -!- Jafet has quit (Ping timeout: 260 seconds).
22:07:48 -!- kmc has quit (Quit: Leaving).
22:09:35 * Phantom_Hoover → sleep
22:09:36 -!- Phantom_Hoover has quit (Quit: Leaving).
22:12:51 -!- itidus20 has joined.
22:14:22 -!- itidus21 has quit (Ping timeout: 260 seconds).
22:17:00 -!- FireFly has quit (Quit: FireFly).
22:18:27 -!- boily has quit (Ping timeout: 260 seconds).
22:20:47 <Lymee> :t Rational
22:20:48 <lambdabot> Not in scope: data constructor `Rational'
22:20:56 <Lymee> :t (%)
22:20:57 <lambdabot> forall a. (Integral a) => a -> a -> Ratio a
22:21:25 <oerjan> type Rational = Ratio Integer
22:22:42 <oerjan> :k Rational
22:22:43 <lambdabot> *
22:24:13 <Lymee> > 10 ** 10 ** 10
22:24:13 <lambdabot> Infinity
22:24:23 <Lymee> > (10 ** 10 ** 10 :: Integral)
22:24:23 <lambdabot> Class `GHC.Real.Integral' used as a type
22:24:33 <Lymee> > (10 ** 10 ** 10 :: Integer)
22:24:34 <lambdabot> No instance for (GHC.Float.Floating GHC.Integer.Type.Integer)
22:24:34 <lambdabot> arising fr...
22:24:42 <oerjan> > 10 ^ 10 ^ 10
22:24:46 <Lymee> derp
22:24:57 <oerjan> oops
22:24:58 <lambdabot> thread killed
22:25:06 <oerjan> > 10 ^ 10 ^ 5
22:25:10 <lambdabot> mueval-core: Time limit exceeded
22:25:13 <oerjan> > 10 ^ 10 ^ 3
22:25:17 <lambdabot> mueval-core: Time limit exceeded
22:25:17 <Lymee> > 2 ^ 33
22:25:21 <oerjan> sheesh
22:25:21 <lambdabot> mueval-core: Time limit exceeded
22:25:26 <oerjan> wat
22:25:36 <Lymee> :t (^)
22:25:36 <Deewiant> > 2^2
22:25:38 <oerjan> now lambdabot is just being lazy
22:25:38 <lambdabot> 4
22:25:41 <lambdabot> forall a b. (Num a, Integral b) => a -> b -> a
22:25:43 <oerjan> > 2^33
22:25:44 <lambdabot> 8589934592
22:25:56 <Lymee> >10^10^10
22:26:09 <oerjan> Lymee: that's far too large anyhow
22:26:09 <Lymee> > 10^10^10
22:26:20 <oerjan> 10 billion digits
22:26:27 <lambdabot> thread killed
22:26:36 <oerjan> > 10^10^3
22:26:45 <lambdabot> mueval: ExitFailure 1
22:26:45 <lambdabot> mueval-core: Time limit exceeded
22:26:50 <oerjan> gah
22:26:51 <monqy> > (succ^5)0
22:26:55 <lambdabot> mueval-core: Time limit exceeded
22:26:56 <Lymee> > 2^65
22:26:58 <lambdabot> 36893488147419103232
22:26:59 <monqy> > (succ^2)0
22:27:01 <lambdabot> 1
22:27:03 <monqy> > (succ^3)0
22:27:04 <lambdabot> 1
22:27:05 <Lymee> > 2^129
22:27:06 <lambdabot> 680564733841876926926749214863536422912
22:27:10 <oerjan> i'm sure lambdabot has managed computations of the size of 10^1000 before
22:27:12 <Lymee> > 2^257
22:27:14 <lambdabot> 231584178474632390847141970017375815706539969331281128078915168015826259279...
22:27:31 <oerjan> perhaps the new version has stricter time bounds
22:27:49 <monqy> > (id^3)0
22:27:50 <lambdabot> 0
22:28:55 <oerjan> monqy: that's not actually iterating the function
22:29:05 <monqy> yeah I figured as much from playing with succ
22:29:11 <monqy> but what does it do then
22:29:31 <oerjan> (f^n) x = (f x)^n
22:29:46 <oerjan> it's a pointwise Num instance for functions
22:29:58 <monqy> ah
22:30:46 <oerjan> > 10^1000
22:30:47 <lambdabot> 100000000000000000000000000000000000000000000000000000000000000000000000000...
22:31:10 <oerjan> i guess it all depends on how much load lambdabot gets
22:31:12 -!- itidus20 has quit (Read error: Connection timed out).
22:31:58 -!- itidus20 has joined.
22:39:16 -!- Patashu has joined.
22:39:18 -!- itidus20 has quit (Read error: Operation timed out).
22:41:10 -!- itidus20 has joined.
22:44:37 -!- nooga has joined.
22:52:13 -!- copumpkin has quit (Quit: Computer has gone to sleep.).
22:59:58 -!- itidus20 has quit (Read error: Connection timed out).
23:00:05 -!- tiffnya has joined.
23:00:10 -!- kmc has joined.
23:01:21 -!- Deewiant_ has joined.
23:02:01 -!- jix_ has joined.
23:06:45 -!- jix has quit (*.net *.split).
23:06:45 -!- Deewiant has quit (*.net *.split).
23:06:45 -!- tiffany has quit (*.net *.split).
23:06:46 -!- Lymee has quit (*.net *.split).
23:08:39 <nooga> i'd play a roguelike
23:14:13 -!- Madoka-Kaname has joined.
23:15:13 -!- ineiros_ has quit (Remote host closed the connection).
23:16:12 -!- sllide has quit (Read error: Connection reset by peer).
23:31:20 -!- copumpkin has joined.
23:54:08 -!- Vorpal has quit (Ping timeout: 260 seconds).
2011-09-21
00:01:44 -!- augur has quit (Remote host closed the connection).
00:19:58 -!- GreaseMonkey has quit (Quit: The Other Game).
00:25:25 <ais523> <Slashdot> We are helping a Slashdot reader conduct academic research by experimenting with a new feature for a handful of stories. Next to every comment, anyone can restate a point that they think the commenter is making. The goal is to encourage listening and to highlight interesting points.
00:25:31 <ais523> this is going to end in disaster :)
00:27:04 <oerjan> I believe ais523 has a bad feeling about this feature.
00:27:39 -!- nooga has quit (Ping timeout: 260 seconds).
00:28:07 <ais523> Does oerjan's summarry... elegantly distill meaning? uncover a good point? clarify the message? provoke unnecessarily? umm, it's not a summary
00:30:55 <oerjan> i see ais523 is missing the option of "make a cheap joke".
00:31:13 <ais523> oerjan: that was a quote from Slashdot's summary thing
00:31:17 <ais523> so blame Slashdot for that
00:31:21 <oerjan> aha
00:31:30 <ais523> those are the options you can vote on summaries with
00:33:07 <oerjan> how boring.
00:33:27 <ais523> wait, you can do summaries of the summaries with your votes
00:33:35 <ais523> but there doesn't seem to be any way to vote on /those/
00:33:40 * ais523 was hoping for an infinite regress
00:36:25 <oerjan> > fix (fun "vote on") :: Expr
00:36:25 <lambdabot> vote on (vote on (vote on (vote on (vote on (vote on (vote on (vote on (vot...
00:37:51 <oerjan> > fix (fun "summarized in") :: Expr
00:37:52 <lambdabot> summarized in (summarized in (summarized in (summarized in (summarized in (...
00:39:24 <monqy> :t fun
00:39:25 <lambdabot> forall a. (SimpleReflect.FromExpr a) => String -> a
00:39:42 <oerjan> :t f
00:39:43 <lambdabot> forall a. (SimpleReflect.FromExpr a) => a
00:39:59 <oerjan> basically, f = fun "f"
00:40:27 <oerjan> > foldr (.) id [f,f,f] x :: Expr
00:40:29 <lambdabot> f (f (f x))
00:40:51 <oerjan> :t x
00:40:51 <lambdabot> Expr
00:41:10 <oerjan> Expr is a more specific type, an instance of FromExpr
00:41:54 -!- ais523 has quit (Remote host closed the connection).
00:41:57 <oerjan> and then there is an instance (FromExpr a, FromExpr b) => FromExpr (a -> b) or so which is used when you apply f as a function.
00:44:10 <Madoka-Kaname> > foldr (.) id [f..] x :: Expr
00:44:11 <lambdabot> No instance for (GHC.Enum.Enum
00:44:11 <lambdabot> (SimpleReflect.Expr -> S...
00:44:17 <Madoka-Kaname> > foldr (.) id (repeat f) x :: Expr
00:44:19 <lambdabot> f (f (f (f (f (f (f (f (f (f (f (f (f (f (f (f (f (f (f (f (f (f (f (f (f (...
00:45:01 <copumpkin> > fix f
00:45:02 <lambdabot> Ambiguous type variable `a' in the constraints:
00:45:03 <lambdabot> `GHC.Show.Show a'
00:45:03 <lambdabot> a...
00:45:05 <copumpkin> > fix f :: Expr
00:45:06 <oerjan> > foldr ($) x [f,f,f] -- shorter
00:45:06 <lambdabot> f (f (f (f (f (f (f (f (f (f (f (f (f (f (f (f (f (f (f (f (f (f (f (f (f (...
00:45:07 <lambdabot> f (f (f x))
00:46:10 <oerjan> > x*y + w*z
00:46:11 <lambdabot> x * y + w * z
00:46:22 <oerjan> > x*(y-t) + w*z
00:46:23 <lambdabot> x * (y - t) + w * z
00:46:50 <monqy> :t expr
00:46:51 <lambdabot> Expr -> Expr
00:46:59 <oerjan> wat
00:47:04 <monqy> expr = id
00:47:13 <oerjan> hm maybe
00:47:17 <monqy> "Force something to be an expression."
00:47:23 <oerjan> > expr f
00:47:23 <lambdabot> f
00:47:38 <oerjan> useful for that, maybe
00:47:56 <monqy> > f
00:47:57 <lambdabot> Ambiguous type variable `a' in the constraints:
00:47:57 <lambdabot> `SimpleReflect.FromExpr ...
00:48:01 <monqy> mm
00:48:18 <oerjan> or more usefully, in places where putting :: Expr isn't easy
00:48:31 <oerjan> > fix (expr . f)
00:48:33 <lambdabot> f (f (f (f (f (f (f (f (f (f (f (f (f (f (f (f (f (f (f (f (f (f (f (f (f (...
00:48:34 -!- invariable has changed nick to variablre.
00:48:35 -!- variablre has changed nick to variable.
00:49:04 <oerjan> > fix (join $ expr . f)
00:49:04 <lambdabot> Couldn't match expected type `m a'
00:49:05 <lambdabot> against inferred type `SimpleRef...
00:49:09 <oerjan> oops
00:49:17 <oerjan> > fix (expr . join f)
00:49:19 <lambdabot> f (f (f (f (f (f (f (f (f (f (f (f (f (f (f (f (f (f (f (f (f (f (f (f (f (...
00:49:25 -!- augur has joined.
00:49:34 <oerjan> > iterate (expr . join f) x !! 3
00:49:36 <lambdabot> f (f (f x x) (f x x)) (f (f x x) (f x x))
00:50:02 <oerjan> i guess the expr . isn't really needed there
00:50:58 -!- augur has quit (Remote host closed the connection).
00:51:28 <oerjan> > f . expr . g . expr $ h x :: Expr
00:51:29 <lambdabot> f (g (h x))
00:59:59 -!- MSleep has joined.
01:01:55 <oerjan> > fix(scanl(+)0.(1:))
01:01:57 <lambdabot> [0,1,1,2,3,5,8,13,21,34,55,89,144,233,377,610,987,1597,2584,4181,6765,10946...
01:02:22 <oerjan> > fix(scanl(f)x.(y:))
01:02:22 -!- MDude has quit (Ping timeout: 260 seconds).
01:02:23 <lambdabot> [x,f x y,f (f x y) x,f (f (f x y) x) (f x y),f (f (f (f x y) x) (f x y)) (f...
01:03:09 <oerjan> > fix(scanl(flip f)x.(y:))
01:03:11 <lambdabot> [x,f y x,f x (f y x),f (f y x) (f x (f y x)),f (f x (f y x)) (f (f y x) (f ...
01:03:35 <Madoka-Kaname> なにそれ
01:03:39 <oerjan> > fix(scanl(flip f)y.(x:))
01:03:40 <lambdabot> [y,f x y,f y (f x y),f (f x y) (f y (f x y)),f (f y (f x y)) (f (f x y) (f ...
01:05:14 -!- augur has joined.
01:16:57 -!- calamari has left ("Leaving").
01:17:07 -!- itidus20 has joined.
01:30:44 -!- kmc has quit (Quit: Leaving).
01:51:02 -!- evincar has joined.
01:51:14 -!- tswett has quit (Changing host).
01:51:14 -!- tswett has joined.
01:51:47 <evincar> I've had an excellent but also terrible idea.
01:52:01 <evincar> Well, I had it in the past, but it's resurfaced with further development.
01:52:34 <evincar> I know I'm not well-liked in here, so only if anyone cares will I go on.
01:53:05 <oerjan> O_o
01:54:47 <evincar> oerjan: ?
01:57:03 <oerjan> it might be more productive to wait until a time when people here are active.
01:58:17 <evincar> That's true. Although people are very industrious about logreading in here.
01:58:30 <evincar> And I know elliott expressed interest in this concept once before.
01:58:56 <monqy> is it an interesting concept
02:02:13 <evincar> monqy: A long time ago I had the notion that functions are like verbs and nouns are like objects...
02:02:22 <evincar> ...and you can do computation with both of them, so why not also with adjectives/sets?
02:02:54 <evincar> So, in such a language, all terms denote sets/types, and your basic operation is something like type conversion.
02:03:00 <CakeProphet> Today, I ran.
02:03:04 <CakeProphet> wooo, computing is tough.
02:03:44 <evincar> So for example "2" would denote "the set of all things of which there are exactly two".
02:04:15 <monqy> good set
02:04:39 <evincar> "+" is "the set of all operations which return the sum of their operands"
02:04:48 <evincar> Of which there are several, and it's the compiler's job to choose which.
02:05:15 <cheater> *cough*
02:05:23 <cheater> so how did you arrive at this idea?
02:05:53 <evincar> Initially, out of the blue.
02:05:58 <evincar> It resurfaced because I was reading this: http://www.panix.com/~tehom/allnoun/allnoun8.faq
02:06:09 <cheater> you know what, blue is not my color
02:06:17 <cheater> you sure it was blue?
02:06:21 <cheater> i like red and green more
02:06:54 <monqy> arrived out of the red and green
02:07:00 <evincar> Of course, that describes a rather different language.
02:07:27 <evincar> It relates agents to roles to implicitly express relationships.
02:07:55 <evincar> Whereas I'm thinking of merely sequencing roles.
02:08:06 <cheater> that idea "of yours" is mine evincar. i called it "descriptive" or "declarative" languages and told you about it. and in fact you didn't get it at first.
02:08:06 <monqy> "sequencing roles"?
02:08:44 <cheater> which indicates to me that i should probably make a blog post about the idea or something.
02:08:47 -!- kmc has joined.
02:09:15 <evincar> cheater: Was it you I had this discussion with? I think we independently arrived at related things back then and then just ranted at one another.
02:09:39 <evincar> But a blog post would be good.
02:09:45 <monqy> I must not have been around back then
02:10:17 <evincar> It was...quite a while ago I should think, but I don't recall exactly when.
02:10:28 <evincar> I guess I could laboriously logsearch.
02:11:13 <cheater> search for "descriptive" or "declarative"
02:11:23 <oerjan> `log descriptive
02:11:26 <HackEgo> 2007-08-07.txt:04:58:15: <Sukoshi`> Yet another Descriptive Idea from Figs.
02:11:34 <cheater> we have also had a car analogy with ferrari cars.
02:11:37 <cheater> `log ferrari
02:11:40 <HackEgo> 2007-06-07.txt:07:21:11: * pikhq really goes into uncontrollable laughter when comparing the capabilities of those POS machines and a UNIX box. . . (fine, so we're comparing tricycles to Ferraris. . . Still.)
02:11:45 <cheater> no :(
02:11:47 <monqy> `pastelogs ferrari
02:11:51 <HackEgo> http://codu.org/projects/hackbot/fshg/index.cgi/raw-file/tip/paste/paste.5544
02:12:10 <cheater> hmm
02:12:19 <cheater> `pastelogs maserati
02:12:21 <cheater> :D
02:12:23 <HackEgo> http://codu.org/projects/hackbot/fshg/index.cgi/raw-file/tip/paste/paste.3244
02:12:33 <cheater> damnit
02:12:55 <oerjan> `log <cheater>.*?descriptive
02:12:59 <HackEgo> 2011-09-21.txt:02:12:55: <oerjan> `log <cheater>.*?descriptive
02:13:02 <oerjan> `log <cheater>.*?descriptive
02:13:06 <HackEgo> 2011-09-21.txt:02:11:13: <cheater> search for "descriptive" or "declarative"
02:13:16 <Madoka-Kaname> This is comical.
02:13:17 <oerjan> NOT IMMENSELY ENCOURAGING
02:13:25 <cheater> hahahahahah
02:13:32 <oerjan> `log <cheater>.*?declarative
02:13:35 <HackEgo> 2011-09-21.txt:02:13:32: <oerjan> `log <cheater>.*?declarative
02:13:38 <oerjan> `log <cheater>.*?declarative
02:13:40 <Madoka-Kaname> Try cheater_
02:13:42 <HackEgo> 2011-09-21.txt:02:13:32: <oerjan> `log <cheater>.*?declarative
02:13:49 <oerjan> `log <cheater_>.*?declarative
02:13:51 <HackEgo> 2011-08-09.txt:19:30:25: <cheater_> NihilistDandy, i like to differentiate between "declarative" and "constructive"
02:14:00 <monqy> `pastelogs <cheater.*declarative
02:14:04 <HackEgo> http://codu.org/projects/hackbot/fshg/index.cgi/raw-file/tip/paste/paste.17723
02:14:04 <cheater> that's more like it
02:14:08 <cheater> i think that might be it
02:14:25 <monqy> `pastelogs <cheater.*descriptive
02:14:29 <HackEgo> http://codu.org/projects/hackbot/fshg/index.cgi/raw-file/tip/paste/paste.27718
02:14:41 <cheater> `pastelogs cheater.*evincar
02:14:45 <HackEgo> http://codu.org/projects/hackbot/fshg/index.cgi/raw-file/tip/paste/paste.19057
02:15:02 <monqy> 2010-11-18.txt:09:25:39: <cheater99> i hate you and everything you stand for, evincar
02:15:05 <monqy> good quote
02:15:11 <evincar> I like it.
02:15:17 <cheater> haha
02:15:33 <cheater> yeah, the good old times.
02:15:34 <evincar> Hey, I remember that video.
02:16:17 <evincar> I might have gone by evincarofautumn? Possibly? Or eoa?
02:17:19 <evincar> Except for possible nick length limits.
02:17:53 <evincar> `log <cheater.*adjective
02:17:57 <HackEgo> 2011-09-21.txt:02:17:53: <evincar> `log <cheater.*adjective
02:18:01 <evincar> :(
02:18:23 <oerjan> `log ^<cheater_>.*?declarative
02:18:26 <HackEgo> No output.
02:18:32 <oerjan> er
02:18:40 <cheater> what's wrong with HackEgo?
02:18:40 <evincar> He was cheater99 before...
02:18:43 <oerjan> `log ^<cheater.*adjective
02:18:44 <monqy> `pastelogs evincar.*adjective
02:18:46 <HackEgo> No output.
02:18:47 <HackEgo> http://codu.org/projects/hackbot/fshg/index.cgi/raw-file/tip/paste/paste.30696
02:19:08 <evincar> What the hell did I call myself back then?
02:19:10 <oerjan> `log ^<
02:19:11 <evincar> Or did we lose logs?
02:19:14 <HackEgo> No output.
02:19:30 <oerjan> `log test
02:19:33 <HackEgo> 2007-03-27.txt:16:17:31: <Figs> shortest combinations to get to n
02:19:54 <oerjan> `log ^2008
02:19:58 <HackEgo> No output.
02:20:10 <oerjan> it just doesn't start with that...
02:20:35 <oerjan> `log ^.*2008
02:20:36 <monqy> it starts with the hour
02:20:38 <HackEgo> 2011-02-11.txt:00:03:45: <elliott> I want to ask you not to think a "timer snob" of Korean fans as "just" a equipment to prevent "fan death". ― 韓斌/Yes0song (談笑 筆跡 다지모) 07:16, 19 February 2008 (UTC)]]
02:20:45 <monqy> the date is part of the filename
02:20:49 <oerjan> ah
02:21:56 <cheater> either way the idea was that in constructive languages (what you know as imperative) programs are built out of verbs, nouns, and adjectives. in declarative languages (what you know as functional) programs are built out of nouns and adjectives. the idea for descriptive languages was to use adjectives only, and use predicate composition to specify concrete concepts.
02:22:04 <oerjan> `log [<]cheater.*adjective
02:22:07 <HackEgo> 2011-09-21.txt:02:17:53: <evincar> `log <cheater.*adjective
02:22:18 <evincar> Alright, so we're roughly on the same page.
02:22:25 <cheater> an underspecified concept can be seen as a curried function.
02:22:27 <oerjan> `log : [<]cheater.*adjective
02:22:31 <HackEgo> 2010-09-22.txt:22:59:12: <cheater99> why is there no adjective form of holland?
02:22:46 <cheater> is there not? it's hollandaise, isn't it?
02:22:47 <evincar> I mean, in a concatenative language all terms denote functions, and the basic operation is function composition.
02:23:19 <cheater> i think composition in this case looks different.
02:23:21 <evincar> So it's not such a stretch to say all terms are nouns denoting sets (I don't think of adjectives as fundamental really).
02:23:31 <evincar> Or rather, they're interchangeable.
02:23:45 <cheater> it is just an intersection of sets, not a composition of functions as assignments from one set to another.
02:23:47 <CakeProphet> oerjan: try .*? perhaps
02:24:14 <evincar> I don't know if intersection works exactly.
02:24:26 <cheater> they work for my idea
02:24:37 <evincar> Can you give a more concrete example?
02:24:40 <oerjan> CakeProphet: at this point i was just experimenting with how to avoid getting the search itself back as a hit
02:24:45 <cheater> the set of all humans
02:25:06 <oerjan> also, "dutch"
02:25:08 <cheater> when you are trying to specify a certain person you start naming specific descriptive adjectives
02:25:18 <evincar> I feel like that's...just Prolog.
02:25:24 <cheater> each such adjective defines a set of people
02:25:24 <evincar> And I'm going for something different.
02:25:47 <evincar> Okay.
02:25:51 <cheater> but those sets intersect to a smaller and smaller subset until you have a singleton set
02:26:09 <evincar> Which is roughly equivalent to a normal form.
02:26:24 <cheater> what do you mean by that?
02:26:27 <evincar> Something you can use as a value proper.
02:26:37 <evincar> Rather than, like, a thunk.
02:26:47 <evincar> Or whatever.
02:26:49 <cheater> i don't see the distinction as important
02:26:51 <evincar> It's a stretch of an analogy.
02:26:59 <cheater> underspecified functions are more important
02:27:32 <cheater> it's just that you bottom out when you finish your specification and could start overspecifying or specifying contradictions
02:27:44 <cheater> this is not good
02:29:26 <cheater> i think you can make very good optimizations to such a language, given a strong enough topology for the space you are working in
02:30:14 <cheater> it's a topologist's language
02:30:20 <evincar> I guess I'm leaning toward something more general.
02:30:25 <evincar> And less like a logic language.
02:30:29 <pikhq_> *sigh* x86 sucks.
02:31:26 <cheater> what are you leaning towards?
02:32:07 -!- sebbu2 has joined.
02:32:07 -!- sebbu2 has quit (Changing host).
02:32:07 -!- sebbu2 has joined.
02:32:29 -!- sebbu has quit (Ping timeout: 260 seconds).
02:33:55 <evincar> I guess like I said before (then got sidetracked from) the core concept would be "everything is a type" and type conversion would be the basic operation.
02:34:15 <evincar> You'd be doing graph-reduction, internally.
02:34:21 <evincar> Like a functional language.
02:34:28 <pikhq_> C also sucks. Even as a systems language.
02:34:49 <evincar> pikhq_: Use assembly.
02:34:56 <pikhq_> Assembly sucks worse.
02:35:07 <evincar> Then use the lesser of two evils, obviously.
02:35:42 <pikhq_> But jeeze, it is a freaking *ordeal* just to get a freaking binary into RAM on x86.
02:42:32 -!- hagb4rd has joined.
02:44:51 <evincar> Hmm. If you allow types to take parameters, you just get regular old dependent typing.
02:45:06 <CakeProphet> *value parameters
02:45:10 <evincar> But there's not necessarily any provision in this system for parameters.
02:45:12 <evincar> Well, yes.
02:45:26 <evincar> But there's no distinction between values and types.
02:48:10 <evincar> I guess...if "+" is a set of operations and "x" and "y" are singleton sets, then "m + n" really denotes a conversion from the type "m x n" to the type "m + n".
02:48:20 <evincar> It's only reducible to the arithmetic result incidentally.
02:48:43 <evincar> Hurgh this is wrong and bad.
02:48:55 <evincar> I feel like there's something to it though.
02:49:25 <evincar> Ugh, s/"x" and "y"/"m" and "n"/.
02:56:55 * pikhq_ should not be NIHing a systems language
02:56:58 * pikhq_ really shouldn't be
02:57:22 <monqy> bad nih is best nih
02:58:48 <CakeProphet> help what is NIH
02:59:50 <monqy> `quote NIH
02:59:52 <HackEgo> 172) <AnMaster> cpressey, oh go to zzo's website. He is NIH <Phantom_Hoover> AnMaster, really? I was strongly under the impression that zzo was invented here. \ 474) <NihilistDandy> elliott: His mouse obeys the law of the excluded middle :/ \ 506) <NihilistDandy> MY CONTINUITY <NihilistDandy> MY FANFICTION <NihilistDandy>
03:00:36 -!- azaq23 has quit (Quit: Leaving.).
03:00:53 <evincar> Not in Here; Not Invented Here; -ilistDandy.
03:01:14 * pikhq_ summons elliott
03:01:19 <pikhq_> @! @! @!
03:01:20 <lambdabot> Maybe you meant: . ? @ v
03:01:28 <evincar> Maybe you did.
03:02:28 <Madoka-Kaname> @id
03:02:32 <Madoka-Kaname> @help
03:02:33 <lambdabot> help <command>. Ask for help for <command>. Try 'list' for all commands
03:02:35 <Madoka-Kaname> @list
03:02:35 <lambdabot> http://code.haskell.org/lambdabot/COMMANDS
03:02:50 <oerjan> @id entical
03:02:50 <lambdabot> entical
03:03:11 <Madoka-Kaname> @. . . id id id id
03:03:11 <lambdabot> Plugin `compose' failed with: Unknown command: ""
03:03:14 <Madoka-Kaname> :(
03:03:55 <pikhq_> I can't even get myself to want to touch this any more, IT'S ALL BAD
03:04:06 * oerjan recommends @@ instead of @.
03:07:05 <evincar> So like
03:07:08 <evincar> def (length nil) (0)
03:07:10 <evincar> def (length cons x (xs)) (+ 1 (length xs))
03:07:10 <Madoka-Kaname> @@
03:07:18 <Madoka-Kaname> @@ what does this do
03:07:18 <lambdabot> what does this do
03:07:32 <oerjan> @help @@
03:07:32 <lambdabot> help <command>. Ask for help for <command>. Try 'list' for all commands
03:07:34 <oerjan> @help @
03:07:35 <lambdabot> @ [args].
03:07:35 <lambdabot> @ executes plugin invocations in its arguments, parentheses can be used.
03:07:35 <lambdabot> The commands are right associative.
03:07:35 <lambdabot> For example: @ @pl @undo code
03:07:35 <lambdabot> is the same as: @ (@pl (@undo code))
03:08:00 <evincar> Then..."def x y" and "+ x y" are assumed to be reducible, and everything else is just pattern matching.
03:08:24 <evincar> But you could do interesting things with relations.
03:08:38 <evincar> Because e.g. "def x y" is considered a true proposition.
03:08:45 <Madoka-Kaname> @ (@id test)
03:08:49 <Madoka-Kaname> @@ (@id test)
03:08:49 <lambdabot> test
03:09:11 <Madoka-Kaname> @@ (@id (@@ what happens??))
03:09:12 <lambdabot> what happens
03:09:41 <Madoka-Kaname> @@ (@id (@@ (@id boop)))
03:09:41 <lambdabot> boop
03:09:51 <CakeProphet> obviously we now need to make lambdabot turing complete.
03:10:04 <oerjan> Madoka-Kaname: you're not supposed to need nested @@'s
03:10:16 <Madoka-Kaname> I'm just seeing what happens.
03:10:53 <CakeProphet> can we define our own commands or do we have to hack lambdabot?
03:11:01 <CakeProphet> I suppose adding S and K would be sufficient.
03:11:36 <oerjan> there are places to add information, but not new commands afaik
03:11:54 <Madoka-Kaname> @run map (^2) [1..]
03:11:55 <lambdabot> [1,4,9,16,25,36,49,64,81,100,121,144,169,196,225,256,289,324,361,400,441,48...
03:12:08 <Madoka-Kaname> Done.
03:12:11 <Madoka-Kaname> @run map (2^) [1..]
03:12:12 <lambdabot> [2,4,8,16,32,64,128,256,512,1024,2048,4096,8192,16384,32768,65536,131072,26...
03:12:13 <Madoka-Kaname> See!
03:12:22 <CakeProphet> not what I mean.
03:12:39 <Madoka-Kaname> @run map (uncurry (^)) $ zip [0..] [1..]
03:12:40 <lambdabot> [0,1,8,81,1024,15625,279936,5764801,134217728,3486784401,100000000000,31384...
03:12:46 <oerjan> > iterate (2*) 2
03:12:46 <lambdabot> [2,4,8,16,32,64,128,256,512,1024,2048,4096,8192,16384,32768,65536,131072,26...
03:13:14 <CakeProphet> so does having a finite output change the turing completeness of Haskell?
03:13:23 <oerjan> > zipWith (^) [0..] [1..]
03:13:24 <lambdabot> [0,1,8,81,1024,15625,279936,5764801,134217728,3486784401,100000000000,31384...
03:13:26 <CakeProphet> since the evaluation semantics are based on need..
03:13:41 <oerjan> CakeProphet: um no...
03:14:21 <CakeProphet> so the fact that there's a set of problems it won't fully compute due to the finite output size does not change turing completeness?
03:14:22 <oerjan> as long as it is unbounded
03:14:48 <oerjan> CakeProphet: a _turing machine_ does not have infinite output
03:15:17 <oerjan> also, it is customary to consider decision machines which only output yes or no as sufficient
03:15:34 <oerjan> for many purposes
03:15:42 <CakeProphet> ah okay
03:16:08 <CakeProphet> I realize output in the typical sense is not considered in turing completeness
03:16:38 <CakeProphet> but since output seems to directly affect Haskell's evaluation semantics I thought perhaps this an exception where it could be considered.
03:16:53 <monqy> waht
03:17:34 <CakeProphet> more specific plz
03:17:55 <oerjan> you only need String -> String functions, or similar, to show Haskell TC
03:18:04 <oerjan> and the strings can be finite
03:18:11 <CakeProphet> ah okay, right.
03:18:18 <CakeProphet> the output doesn't factor in at all ever.
03:18:26 <CakeProphet> so I guess evaluation strategy doesn't either?
03:18:39 <oerjan> well it might, if there was no other way of defining a result
03:18:41 <CakeProphet> because in circumstances without IO Haskell effectively evaluates nothing.
03:19:05 <CakeProphet> ah okay.
03:20:40 <Madoka-Kaname> @yhjulwwiefzojcbxybbruweejw
03:20:40 <lambdabot> "\""
03:20:45 <Madoka-Kaname> @yhjulwwiefzojcbxybbruweejw what the crap is this
03:20:46 <lambdabot> Exception: <<loop>>
03:20:52 <Madoka-Kaname> @yhjulwwiefzojcbxybbruweejw ?
03:20:52 <lambdabot> Just 'J'
03:20:55 <Madoka-Kaname> @yhjulwwiefzojcbxybbruweejw a
03:20:55 <lambdabot> "\"\\\"\\\\\\\"\\\\\\"
03:20:58 <Madoka-Kaname> @yhjulwwiefzojcbxybbruweejw aaa
03:20:58 <lambdabot> "\"\\\"\\\\\\\"\\\\\\\\\\\\\\\"\\\\\\\\\\"
03:21:07 <Madoka-Kaname> @yhjulwwiefzojcbxybbruweejw yhjulwwiefzojcbxybbruweejw
03:21:07 <lambdabot> "\"#$%&'()*+,\""
03:21:12 <Patashu> so what does this thing do
03:21:16 <oerjan> i don't think it looks at its argument
03:21:25 <oerjan> it's just one of the quote databases
03:21:50 <oerjan> (now exactly _why_ those quotes are selected - well that would be telling.)
03:22:26 <Madoka-Kaname> @help da
03:22:26 <lambdabot> help <command>. Ask for help for <command>. Try 'list' for all commands
03:22:30 <Patashu> @yhjulwwiefzojcbxybbruweejw
03:22:30 <lambdabot> "\"\\\"\\\\\\\"\\\\\\\\\\\\\\\"\\\\\\\\\\"
03:22:32 <Patashu> @yhjulwwiefzojcbxybbruweejw
03:22:32 <Madoka-Kaname> @help yhjulwwiefzojcbxybbruweejw
03:22:33 <lambdabot> Just 'J'
03:22:33 <lambdabot> V RETURNS!
03:22:36 <Patashu> wtf
03:22:47 <Madoka-Kaname> @help yhjulwwiefzojcbxybbruweejw
03:22:48 <lambdabot> V RETURNS!
03:22:50 <Madoka-Kaname> o.o?
03:22:52 <monqy> @help v
03:22:52 <lambdabot> let v = show v in v
03:22:53 <Madoka-Kaname> @yhjulwwiefzojcbxybbruweejw
03:22:53 <lambdabot> "\"#$%&'()*+,\""
03:22:58 <Madoka-Kaname> @yhjulwwiefzojcbxybbruweejw
03:22:58 <lambdabot> "\"\\\"\\\\\\\"\\\\\\\\\\\\\\\"\\\\\\\\\\"
03:22:59 <monqy> @v
03:22:59 <lambdabot> Exception: <<loop>>
03:23:00 <Madoka-Kaname> @yhjulwwiefzojcbxybbruweejw
03:23:00 <lambdabot> "\"\\\"\\\\\\\"\\\\\\"
03:23:02 <Madoka-Kaname> @yhjulwwiefzojcbxybbruweejw
03:23:02 <monqy> @v
03:23:03 <lambdabot> "\"#$%&'()*+,\""
03:23:03 <lambdabot> Exception: <<loop>>
03:23:03 <Patashu> @yhjulwwiefzojcbxybbruweejw V
03:23:04 <lambdabot> Just 'J'
03:23:04 <Madoka-Kaname> @yhjulwwiefzojcbxybbruweejw
03:23:04 <lambdabot> "\"\\\"\\\\\\\"\\\\\\\\\\\\\\\"\\\\\\\\\\"
03:23:09 <Madoka-Kaname> what
03:23:09 <monqy> poor @v
03:23:11 <Madoka-Kaname> what the hell is this
03:23:17 <monqy> @v
03:23:17 <lambdabot> Just 'J'
03:23:20 <monqy> :')
03:23:31 <Patashu> @v
03:23:31 <lambdabot> Just 'J'
03:23:35 <Patashu> @help v
03:23:35 <lambdabot> let v = show v in v
03:23:40 <Patashu> what
03:23:49 <Patashu> I am confused
03:24:10 <monqy> > let v = show v in v
03:24:11 <lambdabot> "\"\\\"\\\\\\\"\\\\\\\\\\\\\\\"\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"\\\\\\\\\\\\...
03:24:16 <Madoka-Kaname> >fix show
03:24:18 <Madoka-Kaname> > fix show
03:24:19 <lambdabot> "\"\\\"\\\\\\\"\\\\\\\\\\\\\\\"\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"\\\\\\\\\\\\...
03:24:23 <Patashu> oooooooooooooh
03:24:27 <Patashu> ok, that explains that bit
03:24:29 <Madoka-Kaname> > fix (reverse.show)
03:24:33 <lambdabot> mueval-core: Time limit exceeded
03:24:43 <Madoka-Kaname> > fix (show.reverse)
03:24:47 <lambdabot> mueval-core: Time limit exceeded
03:24:52 <Patashu> > show.show 3
03:24:54 <lambdabot> ["'3'"]
03:24:57 <Patashu> > show.show.show 3
03:24:59 <lambdabot> ["\"'3'\""]
03:25:01 <Patashu> > show.show.show.showq 3
03:25:02 <lambdabot> Not in scope: `showq'
03:25:03 <Patashu> > show.show.show.show 3
03:25:05 <lambdabot> ["\"\\\"'3'\\\"\""]
03:25:08 <Patashu> > show.show.show.show.show 3
03:25:10 <lambdabot> ["\"\\\"\\\\\\\"'3'\\\\\\\"\\\"\""]
03:25:13 <Patashu> XD
03:25:27 <Madoka-Kaname> > fix (show.map(chr. +1 .ord))
03:25:27 <lambdabot> <no location info>: parse error on input `+'
03:25:29 <CakeProphet> > fix (show.) 3
03:25:31 <lambdabot> "\"\\\"\\\\\\\"\\\\\\\\\\\\\\\"\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"\\\\\\\\\\\\...
03:25:32 <Madoka-Kaname> > fix (show.map(chr.(+1).ord))
03:25:34 <lambdabot> "\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\\\]]^^__``aab...
03:25:44 <Madoka-Kaname> > fix (map(chr.(+1).ord).show)
03:25:46 <lambdabot> "#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]]^^__``aabbccd...
03:25:51 <Madoka-Kaname> > fix (map(chr.(*2).ord).show)
03:25:52 <lambdabot> "D\136\184bfl\184bph\196\204\216\184bph\196\224\208\184brl\184d`h\184dbl\18...
03:28:01 <oerjan> > let v = show $ map succ v in v
03:28:02 <lambdabot> "\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\\\]]^^__``aab...
03:28:03 <CakeProphet> > fix (map succ . show)
03:28:04 <lambdabot> "#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]]^^__``aabbccd...
03:28:16 <CakeProphet> oerjan: bah
03:28:24 <oerjan> but why does the quote one stop after , ?
03:28:53 -!- augur has quit (Remote host closed the connection).
03:29:19 <CakeProphet> @help id
03:29:20 <lambdabot> id <arg>. The identity plugin
03:29:25 <CakeProphet> @id help
03:29:25 <lambdabot> help
03:29:33 <CakeProphet> man that's so useful
03:29:44 -!- itidus20 has left ("Leaving").
03:30:16 <oerjan> > let v = show . take 11 $ map succ v in v
03:30:17 <lambdabot> "\"#$%&'()*+,-\""
03:30:23 <oerjan> > let v = show . take 10 $ map succ v in v
03:30:24 <lambdabot> "\"#$%&'()*+,\""
03:30:45 <oerjan> still, a little unsatisfactory
03:31:28 <oerjan> > show
03:31:29 <lambdabot> Overlapping instances for GHC.Show.Show (a -> GHC.Base.String)
03:31:29 <lambdabot> arising f...
03:31:42 <oerjan> > show 3
03:31:43 <lambdabot> "3"
03:31:52 <oerjan> > show.show 3
03:31:53 <lambdabot> ["'3'"]
03:32:02 -!- evincar has quit (Quit: Bah. Homework time.).
03:32:28 <oerjan> :t show.show 3
03:32:28 <lambdabot> [String]
03:32:41 <oerjan> ooh
03:32:49 <oerjan> it's caleskell . which does it
03:33:34 <oerjan> > fix (show.)
03:33:35 <lambdabot> No instance for (GHC.Show.Show (f GHC.Base.String))
03:33:35 <lambdabot> arising from a use o...
03:33:39 <oerjan> argh
03:34:11 <oerjan> > fix (show.) :: [String]
03:34:15 <lambdabot> mueval-core: Time limit exceeded
03:35:08 <Madoka-Kaname> > fix (.)
03:35:09 <lambdabot> Occurs check: cannot construct the infinite type: a = f a
03:35:15 <oerjan> <CakeProphet> man that's so useful <-- clearly the identity plugin is intended for use in plugin transformers
03:35:17 <Madoka-Kaname> > fix ((.).)
03:35:18 <lambdabot> Occurs check: cannot construct the infinite type: a = f a
03:35:21 <Madoka-Kaname> "<
03:35:22 <Madoka-Kaname> :<
03:35:24 * oerjan cackles madly
03:37:27 <CakeProphet> oerjan: if only there were plugin transformers
03:37:46 -!- augur has joined.
03:38:06 <CakeProphet> @@ @djinn :t id
03:38:07 <lambdabot> Invalid command
03:38:09 <CakeProphet> :(
03:38:10 <CakeProphet> @type
03:38:11 <lambdabot> <no location info>: not an expression: `'
03:38:17 <CakeProphet> @@ @djinn @type id
03:38:18 <lambdabot> f a = a
03:38:22 <CakeProphet> @@ @djinn @type unsafeCoerce
03:38:23 <lambdabot> Cannot parse command
03:39:00 <CakeProphet> @@ @djinn @type (>>=)
03:39:01 <lambdabot> Cannot parse command
03:39:48 <monqy> try parentheses??/
03:39:58 <CakeProphet> @@ @djinn (@type (>>=))
03:39:58 <lambdabot> Cannot parse command
03:40:04 <monqy> :'(
03:40:07 <CakeProphet> @@ (@djinn (@type ((>>=))))
03:40:07 <lambdabot> Cannot parse command
03:40:23 <monqy> @help @
03:40:24 <lambdabot> @ [args].
03:40:24 <lambdabot> @ executes plugin invocations in its arguments, parentheses can be used.
03:40:24 <lambdabot> The commands are right associative.
03:40:24 <lambdabot> For example: @ @pl @undo code
03:40:24 <lambdabot> is the same as: @ (@pl (@undo code))
03:40:28 <oerjan> @@ (test)
03:40:28 <lambdabot> (test)
03:40:33 <CakeProphet> @@ (((@djinn (((@type (((>>=)))))))))
03:40:34 <lambdabot> ((Cannot parse command))
03:40:41 <oerjan> @@ @type (>>=)
03:40:41 <lambdabot> forall (m :: * -> *) a b. (Monad m) => m a -> (a -> m b) -> m b
03:40:50 <oerjan> i don't think it's @@ that has problems
03:40:54 <CakeProphet> djinnn
03:40:59 <monqy> nnnnnnnnnnnnnnn
03:40:59 <CakeProphet> DJIIIIIIN
03:41:02 <monqy> n
03:41:10 <monqy> @type id
03:41:11 <lambdabot> forall a. a -> a
03:41:16 <CakeProphet> the kind I guess.
03:41:21 <CakeProphet> or maybe typeclass
03:41:21 <monqy> forall......
03:41:27 <CakeProphet> forall is fine
03:41:31 <CakeProphet> @@ @djinn @type id
03:41:32 <lambdabot> f a = a
03:41:34 <monqy> oh
03:41:38 <oerjan> @type (>>=)
03:41:38 <lambdabot> forall (m :: * -> *) a b. (Monad m) => m a -> (a -> m b) -> m b
03:41:55 <oerjan> @djinn forall m a b. (Monad m) => m a -> (a -> m b) -> m
03:41:55 <oerjan> b
03:41:55 <lambdabot> Error: kind error: (KVar 0,KStar)
03:42:00 <oerjan> f
03:42:04 <oerjan> @djinn forall m a b. (Monad m) => m a -> (a -> m b) -> m b
03:42:04 <lambdabot> f = (>>=)
03:42:11 <monqy> wow!
03:42:15 <oerjan> was the kind
03:42:43 <monqy> @@'s fault for not providing a good error message
03:42:44 <oerjan> @djinn forall (m :: * -> *) a b. (Monad m) => m a -> (a -> m b) -> m b
03:42:44 <lambdabot> Cannot parse command
03:42:56 <oerjan> monqy: it was @djinn's error message
03:42:57 <monqy> oh djinn's fault maybe
03:42:59 <monqy> bah
03:43:07 <monqy> djinn;s fault for not providing a good error mesasge
03:43:07 <Madoka-Kaname> @@ (@djinn (@exec text $ head $ tail $ splitOn "." (@type (.))))
03:43:09 <lambdabot> Plugin `compose' failed with: Unknown command: "exec"
03:43:16 <Madoka-Kaname> @exec text $ "Test"
03:43:16 <lambdabot> Unknown command, try @list
03:43:17 <monqy> and @@'s fault for not saying it was djinn;s fault
03:43:41 <Madoka-Kaname> @@ (@djinn (@run text $ head $ tail $ splitOn "." (@type (.))))
03:43:42 <lambdabot> Cannot parse command
03:43:54 <Madoka-Kaname> @@ (@djinn (@run text $ head $ tail $ splitOn "." (@type \(.\))))
03:43:55 <lambdabot> Cannot parse command
03:43:59 <Madoka-Kaname> @@ (@djinn (@run text $ head $ tail $ splitOn "." (@type id)))
03:44:00 <lambdabot> Cannot parse command
03:44:02 <Madoka-Kaname> :(
03:44:11 <CakeProphet> @@ @pl @unpl @pl @djinn @pl @djinn @type id
03:44:11 <lambdabot> Cannot parse command
03:44:22 <Madoka-Kaname> @type id
03:44:23 <lambdabot> forall a. a -> a
03:44:40 <oerjan> Madoka-Kaname: i'd suggest looking at what @djinn's argument actually _is_
03:44:43 <Madoka-Kaname> @run text $ head $ tail $ splitOn "." "forall a. a -> a"
03:44:44 <lambdabot> Not in scope: `splitOn'
03:44:48 <CakeProphet> @@ @pl @unpl @type @pl @djinn @type @pl @djinn @type id
03:44:49 <lambdabot> Parse error at "in" (column 5)
03:44:57 <Madoka-Kaname> @djinn a -> a
03:44:57 <lambdabot> f a = a
03:45:14 <Madoka-Kaname> @djinn (Monad m) => m -> m
03:45:14 <lambdabot> f a = a
03:46:24 <Madoka-Kaname> @run text $ head $ tail $ dropUntil (!=".") "forall a. a -> a"
03:46:25 <lambdabot> Not in scope: `dropUntil'Not in scope: `!='
03:46:28 <CakeProphet> @@ @pl @djinn @type @pl @djinn @type id
03:46:29 <lambdabot> Cannot parse command
03:46:32 <CakeProphet> :(
03:46:45 <CakeProphet> @@ @pl @djinn @type id
03:46:46 <lambdabot> f = id
03:46:46 <Madoka-Kaname> @run text $ head $ tail $ dropUntil (/=".") "forall a. a -> a"
03:46:47 <lambdabot> Not in scope: `dropUntil'
03:47:30 <CakeProphet> @@ @type let (@pl @djinn @type id) in id
03:47:32 <lambdabot> forall a. a -> a
03:48:02 <CakeProphet> @@ @pl @unpl @pl @djinn @type let (@pl @djinn @type id) in id
03:48:03 <lambdabot> f = id
03:48:12 <CakeProphet> >_>
03:48:20 <Madoka-Kaname> @@ (test)
03:48:20 <lambdabot> (test)
03:48:33 <Madoka-Kaname> @@ @djinn @run text $ head $ tail $ dropWhile (/=".") @type id
03:48:35 <lambdabot> Cannot parse command
03:48:45 <oerjan> sadly too many lambdabot commands don't give output formatted for chaining
03:48:50 <Madoka-Kaname> @@ @djinn @run text . head . tail . dropWhile (/=".") "@type id"
03:48:50 <lambdabot> Cannot parse command
03:48:50 <lambdabot> Cannot parse command
03:49:06 <CakeProphet> @@ There's @run (2^32) 32-bit words
03:49:07 <lambdabot> There's Couldn't match expected type `GHC.Types.Int'
03:49:07 <lambdabot> against inferred type ...
03:49:19 <CakeProphet> @@ There's (@run 2^32) 32-bit words
03:49:20 <lambdabot> There's 4294967296
03:49:20 <lambdabot> 32-bit words
03:49:24 <CakeProphet> heh
03:49:31 <Madoka-Kaname> @@ "
03:49:32 <lambdabot> "
03:49:37 <Madoka-Kaname> @@ @run text $ "wee"
03:49:38 <lambdabot> wee
03:49:59 <Madoka-Kaname> @@ @djinn @run text $ "(b -> a -> c) -> a -> b -> c"
03:50:00 <lambdabot> f a b c = a c b
03:50:19 <Madoka-Kaname> @@ @djinn @run text $ "(@type id)"
03:50:20 <lambdabot> Cannot parse command
03:50:31 <Madoka-Kaname> @@ @djinn @run text $ " (@type id) "
03:50:31 <lambdabot> Cannot parse command
03:50:33 <Madoka-Kaname> :s
03:51:50 <oerjan> @@ @run text $ " (@type id) "
03:51:51 <lambdabot> (@type id)
03:52:06 <CakeProphet> @@ @vixen @type (,,,,,,,,,,)
03:52:06 <lambdabot> Plugin `compose' failed with: Unknown command: "vixen"
03:52:22 <CakeProphet> ?
03:52:24 <CakeProphet> help
03:52:27 <monqy> ?vixen
03:52:27 <lambdabot> I brought myself down. I impeached myself by resigning.
03:52:30 <oerjan> @@ @run text @show @type id
03:52:31 <lambdabot> forall a. a -> a
03:53:09 <CakeProphet> @vixen
03:53:09 <lambdabot> The second point is that coming out--coming back and saying that black Americans aren't as good as black Africans--most of them , basically, are just out of the trees. Now, let's face it, they are.
03:53:11 <CakeProphet> what
03:53:28 <Madoka-Kaname> @@ @djinn @run text $ dropWhile(==".") $ dropWhile(/=".") $ @show @type id
03:53:29 <lambdabot> Cannot parse command
03:53:29 <lambdabot> Cannot parse command
03:53:35 <CakeProphet> LAMBDABOT BUG
03:53:39 <Madoka-Kaname> @@ @djinn @run text $ dropWhile (==".") $ dropWhile (/=".") @show @type id
03:53:39 <CakeProphet> NO VIXEN FOUND. ABORT.
03:53:40 <lambdabot> Cannot parse command
03:53:40 <lambdabot> Cannot parse command
03:53:48 <Madoka-Kaname> @@ @djinn @run text $ dropWhile (==".") $ dropWhile (/=".") ". a -> a"
03:53:49 <lambdabot> Cannot parse command
03:53:49 <lambdabot> Cannot parse command
03:53:56 <CakeProphet> Madoka-Kaname: needs moar parens
03:54:08 <Madoka-Kaname> @@ @djinn (@run text $ dropWhile (==".") $ dropWhile (/=".") @show @type id)
03:54:09 <lambdabot> Cannot parse command
03:54:09 <oerjan> @list vixen
03:54:09 <lambdabot> Cannot parse command
03:54:09 <lambdabot> No module "vixen" loaded
03:54:19 <Madoka-Kaname> @@ @djinn (@run text $ dropWhile ( == "." ) $ dropWhile ( /= "." ) @show @type id)
03:54:20 <lambdabot> Cannot parse command
03:54:20 <lambdabot> Cannot parse command
03:54:22 <Madoka-Kaname> :(
03:54:23 <monqy> @@ @vixen-on
03:54:23 <lambdabot> Plugin `compose' failed with: Unknown command: "vixen-on"
03:54:23 <oerjan> @vixer
03:54:23 <lambdabot> Unknown command, try @list
03:56:06 <monqy> @@ @list
03:56:58 <monqy> wheres thje list help
03:59:38 -!- pumpkin has joined.
04:04:30 -!- oerjan has quit (*.net *.split).
04:04:30 -!- Zuu has quit (*.net *.split).
04:04:31 -!- fungot has quit (*.net *.split).
04:04:31 -!- qnix has quit (*.net *.split).
04:04:32 -!- copumpkin has quit (*.net *.split).
04:04:33 -!- cheater2 has quit (*.net *.split).
04:04:33 -!- aloril has quit (*.net *.split).
04:04:34 -!- yiyus has quit (*.net *.split).
04:04:35 -!- Deewiant_ has quit (*.net *.split).
04:04:36 -!- coppro has quit (*.net *.split).
04:04:36 -!- EgoBot has quit (*.net *.split).
04:04:36 -!- quintopia has quit (*.net *.split).
04:04:38 -!- augur has quit (*.net *.split).
04:04:38 -!- Patashu has quit (*.net *.split).
04:04:38 -!- BeholdMyGlory has quit (*.net *.split).
04:04:39 -!- CakeProphet has quit (*.net *.split).
04:04:39 -!- atehwa_ has quit (*.net *.split).
04:04:41 -!- fizzie has quit (*.net *.split).
04:04:41 -!- chickenzilla has quit (*.net *.split).
04:04:42 -!- Wamanuz2 has quit (*.net *.split).
04:04:44 -!- lambdabot has quit (*.net *.split).
04:04:44 -!- twice11 has quit (*.net *.split).
04:04:44 -!- hagb4rd has quit (*.net *.split).
04:04:44 -!- sebbu2 has quit (*.net *.split).
04:04:44 -!- kmc has quit (*.net *.split).
04:04:45 -!- MSleep has quit (*.net *.split).
04:04:45 -!- Madoka-Kaname has quit (*.net *.split).
04:04:46 -!- Nisstyre has quit (*.net *.split).
04:04:46 -!- DH____ has quit (*.net *.split).
04:04:47 -!- lifthrasiir has quit (*.net *.split).
04:04:47 -!- Gregor has quit (*.net *.split).
04:14:12 -!- Madoka-Kaname has joined.
04:14:31 -!- CakeProphet has joined.
04:14:31 -!- CakeProphet has quit (Changing host).
04:14:31 -!- CakeProphet has joined.
04:15:03 <CakeProphet> wow this is a ridiculous netsplit.
04:15:04 -!- pumpkin has changed nick to copumpkin.
04:15:30 <Madoka-Kaname> chat.freenode.net died or something
04:35:07 <CakeProphet> >_>
04:35:08 <CakeProphet> still dead.
04:35:16 <CakeProphet> wow C++ is amazing.
04:35:27 <Madoka-Kaname> In which sense of the word?
04:35:28 <CakeProphet> I try to do something incredibly simple and I get garbage output.
04:35:32 <monqy> mm
04:35:37 <monqy> like what / like what
04:35:40 <monqy> I am now curious
04:36:34 <CakeProphet> hold on emacs is a bitch to copypaste from.
04:37:14 <CakeProphet> basically just ^@^@^@^@^@^@^@^@^@ ad infinitum
04:37:26 <CakeProphet> I'm trying to iterate over a linked list and print each element for my lab...
04:39:17 <CakeProphet> for(iter=strList2.end(); iter != start; iter--) {
04:39:20 <CakeProphet> does anything look wrong with this?
04:40:03 <monqy> what's start
04:40:15 <CakeProphet> start = strList2.begin(); start++; start++;
04:40:15 <monqy> and what's the body
04:40:23 <CakeProphet> cout << *iter << " ";
04:40:25 <CakeProphet> is the body
04:40:45 <monqy> how long is strList2
04:41:09 <CakeProphet> 6 elements.
04:41:17 <monqy> hm
04:41:22 <monqy> could something be wrong with the iterator?
04:41:30 <CakeProphet> probably.
04:41:31 <monqy> I dunno how C++ iterators work
04:41:44 <CakeProphet> I thought I did but apparently not.
04:42:10 <CakeProphet> basically an iterator is a kind of pointer-like object.
04:42:34 <Madoka-Kaname> What type is iter?
04:42:36 <CakeProphet> ++ increments its position and -- decrements. * accesses the element it points to, and == and != check to see if iterators point to the same thing.
04:42:42 <CakeProphet> list<string>::iterator
04:42:46 <Madoka-Kaname> Dunno.
04:45:04 -!- invariable has joined.
04:45:27 <CakeProphet> yeah I have no clue this code looks fine to me.
04:45:57 <Madoka-Kaname> So...
04:46:01 <Madoka-Kaname> C++'s being evil
04:46:12 <CakeProphet> hmmm wait I have an idea
04:46:13 -!- variable has quit (Ping timeout: 252 seconds).
04:46:31 <CakeProphet> I think I need to start with --strList2.end()
04:46:48 <CakeProphet> yep
04:47:12 <CakeProphet> because strList2.end() points to the location after the list
04:47:48 <CakeProphet> would probably be easier to use rbegin to do reverse iteration.
04:48:11 <CakeProphet> but it's one of those labs where they supply some of the code for you, and they declared the iterators are iterator and not reverse_iterator
04:48:16 <CakeProphet> C++ <3
04:48:58 <monqy> dumb
04:50:16 <CakeProphet> yeah iterators seem like one of the most annoying ways to iterator.
04:50:48 <CakeProphet> I'd rather use an integer index, honestly.
04:56:51 <copumpkin> ugh, indices
04:57:03 <copumpkin> iterators gonna iterate, man
04:58:30 <CakeProphet> but with C++ it's almost exactly the same as using an index, except now more verbose
04:59:37 <copumpkin> you don't get off-by-one errors for linear traversals, and it's likely more efficient on structures that don't support indexing easily
05:01:17 <CakeProphet> yeah that's true
05:01:34 <CakeProphet> most things with inefficient indexing in stl doesn't have the option to be indexed.
05:06:53 -!- evincar has joined.
05:08:07 <pikhq_> It's at least vaguely tolerable with C++0x, though. for(int &x : any_damned_thing_containing_ints) { ... }
05:08:30 <pikhq_> Yes, that does precisely what you think.
05:09:00 <evincar> CakeProphet: You can use the reverse_iterator adaptor to make a reverse iterator out of your forward iterator. :P
05:09:11 <CakeProphet> yeah that sounds like so much fun
05:09:15 <CakeProphet> especially since I got it working.
05:09:22 <evincar> Assuming it's not actually a "forward iterator" but a bidirectional one.
05:09:39 <CakeProphet> pikhq_: that's not bad. how does it determine the any-damned-thing-containing-ints part?
05:09:41 <evincar> Oh. Probably by reimplementing it.
05:09:53 <evincar> Reimplementing reverse_iterator, that is.
05:10:02 <CakeProphet> yeah it's bidirectional.
05:10:34 <evincar> I know, I was just correcting myself to avoid getting flamed for saying something that was slightly off.
05:11:04 <CakeProphet> yeah I'm all about staunch correctness
05:11:40 <evincar> Some of us in here are...
05:11:47 <evincar> ...depending on what about, o'course.
05:12:27 <pikhq_> CakeProphet: for(foo &x : bar) is syntactic sugar for (if bar's a foo[]) for(int i = 0; i < sizeof(bar); i++) {foo &x=bar[i]; ...} or (if bar's an object with begin() and end()) foo(auto i = bar.begin(); i != bar.end(); ++i) {foo &x=*i; ... }
05:13:02 <evincar> sizeof(bar)/sizeof(*bar), actually...
05:13:05 <CakeProphet> is auto a C++0x thing?
05:13:09 <pikhq_> Yes.
05:13:23 <pikhq_> evincar: Bah, right.
05:13:27 <CakeProphet> I assume for type inference?
05:13:31 <evincar> C++0x: solving problems with C++ that should have been solved ages ago.
05:13:38 <pikhq_> CakeProphet: Pretty much.
05:13:40 <evincar> Yeah, auto is for type inference in declarations.
05:13:47 <pikhq_> evincar: Pretty much.
05:13:54 <evincar> decltype is for type inference...elsewhere.
05:14:00 <evincar> And then there are the ugly-ass lambdas.
05:14:32 <evincar> Also, fucking rvalue references. Solving a problem that should never have been there in the first place.
05:14:35 <pikhq_> The lambdas aren't that bad syntactically. Though conceptually they're utterly awful, due to C++ *not being friggin' garbage collected*.
05:14:51 <evincar> That's ostensibly what shared_ptr and friends are about.
05:15:02 <CakeProphet> rvalue references?
05:15:03 <evincar> See, every time you say something awful about C++...
05:15:12 <evincar> ...I can just respond like the standards committee does.
05:15:20 <evincar> With libraries and awful hacks and stuff.
05:15:27 <pikhq_> Reference counting: because everything bad about manual memory allocation plus everything bad about automatic memory allocation equals "good".
05:16:35 <evincar> You can use a garbage collector in C++.
05:16:41 <evincar> It's just that nobody does.
05:17:26 <pikhq_> Actually, it's only C++11 that makes it possible for a conformant implementation to be garbage collected...
05:17:52 <pikhq_> (due to some perverse edge cases that a GC would inevitably break, IIRC)
05:17:52 <evincar> Oh, with vanilla "new", I guess.
05:18:00 <evincar> I was thinking of allocators in general.
05:18:14 <pikhq_> Ah. Yeah, not that bad to use Boehm.
05:18:29 <evincar> You can safely write an allocator that allocates from pools allocated with "new".
05:18:38 <evincar> You would just have to use it explicitly.
05:18:46 <evincar> Or write a gc_ptr<T> or something.
05:18:49 <pikhq_> Like I said, not that bad to use Boehm.
05:18:58 <evincar> It's definitely preferable.
05:19:31 <evincar> I can only give C++ credit for one thing:
05:19:39 <pikhq_> IIRC you can just have a class inherit from gc to allocate with Boehm.
05:19:48 <evincar> Somehow succeeding at being "all things to all developers".
05:20:22 <CakeProphet> C++ is my anti-drug.
05:21:05 <CakeProphet> seriously, why doesn't pop in C++ RETURN anything.
05:21:22 <pikhq_> Because that would make sense.
05:21:22 <CakeProphet> s/C++/stl/
05:21:37 <pikhq_> Seriously, why the eff would you not want pop to actually hand you a value?
05:22:15 <evincar> It's because it would have to return by value.
05:22:19 <evincar> Which may be expensive.
05:22:39 <evincar> And there's no way to determine inside the implementation of pop() whether the caller expects a value.
05:22:42 <evincar> So you have to generate it.
05:23:00 <evincar> So top() (stack) or back()/front() returns by reference.
05:23:13 <evincar> And pop() or pop_back()/pop_front() returns void.
05:23:24 <CakeProphet> char f = puzzle.front();
05:23:24 <CakeProphet> char b = puzzle.back();
05:23:24 <CakeProphet> puzzle.pop_front();
05:23:24 <CakeProphet> puzzle.pop_back();
05:23:24 <CakeProphet> puzzle.push_front(b);
05:23:26 <pikhq_> Y'know what this means?
05:23:26 <CakeProphet> puzzle.push_back(f);
05:23:29 <CakeProphet> best code
05:23:41 <CakeProphet> for swapping the front and end of a linked list.
05:23:49 <pikhq_> C++ is not a solution, it is a problem to which you find solutions.
05:23:51 <evincar> std::swap(puzzle.front(), puzzle.back()) // FTFY
05:24:09 <evincar> Remember mutable variables?
05:24:12 <evincar> And how they are a thing?
05:24:17 <CakeProphet> oh right.
05:24:19 <evincar> (A bad thing, but a thing nonetheless.)
05:24:29 <CakeProphet> swap is in algorithm I'm guessing?
05:24:33 <evincar> Yep.
05:24:49 <CakeProphet> should probably look at that file more.
05:24:55 <evincar> It's hella useful...
05:25:21 <evincar> ...most of the reason C++ gets a bad reputation is the horrid C-style code that's written in it.
05:25:22 <CakeProphet> yeah after using Perl and Haskell it'll take a while to adapt to C++'s idioms
05:25:43 <evincar> I wish C++ got a bad reputation for the GENUINELY BAD THINGS ABOUT IT.
05:25:53 <CakeProphet> nothing wrong with C style code.
05:25:53 <evincar> But that's just me.
05:26:00 <evincar> In C++ there is...
05:27:16 <pikhq_> evincar: Funny, I give C++ a bad rep for it's poorly implemented "high-level" concepts.
05:27:50 <CakeProphet> hmmm, so I guess the best way to shift to leftmost character to the end would be to pop_front then push_back.
05:27:54 <CakeProphet> any shorter way?
05:27:59 <CakeProphet> *shift the
05:28:05 <evincar> Ditto. Although the hacks are largely to support generation of efficient code...
05:28:29 <pikhq_> s/it's/its/
05:28:31 <evincar> ...but that code is largely only "efficient" according to the standards of older optimisation technology.
05:29:12 <pikhq_> Well, it also has some pretty comical encapsulation breaks.
05:29:20 <pikhq_> Such as "changing private members breaks ABI"
05:29:23 <evincar> CakeProphet: v.push_back(v.front()); v.pop_front(); is about as short as you can get.
05:29:39 <pikhq_> And "though technically undefined behavior, #define private public is fun times."
05:30:06 <evincar> Technically nothing. UB is just that and you get what you pay for. :P
05:31:25 <evincar> How would you propose to preserve data layout in the event of changing members?
05:31:44 <evincar> The size might change, so you can't make any guarantees about derived classes.
05:31:51 <pikhq_> First, don't try to be "C, plus this".
05:32:01 <pikhq_> This solves most of your problems, really.
05:32:12 <evincar> Those necessarily break if you're implementing data layout in the usual way.
05:32:16 <evincar> Which is the most efficient way.
05:32:16 <CakeProphet> this is what C++0x appears to do.
05:32:23 <pikhq_> sizeof becomes completely moot, for instance.
05:32:26 <pikhq_> CakeProphet: No.
05:32:28 <CakeProphet> (not be C plus stuff)
05:32:38 <CakeProphet> or at least tries
05:32:41 <CakeProphet> to go in that direction
05:32:42 <CakeProphet> a little.
05:32:51 <evincar> C++ is C plus stuff fundamentally.
05:32:52 <pikhq_> CakeProphet: C++0x still has a sizable common subset with C, and has its semantics hacked into C semantics.
05:32:58 <evincar> C++11 tries to make it look like it isn't.
05:33:10 <evincar> It's supposed to be more beginner-friendly.
05:33:21 <pikhq_> It's the source of pretty much all the problems with C++'s attempts at high-level concepts.
05:33:22 <evincar> To try to get people to actually use what have been considered best practices for years.
05:33:58 <CakeProphet> needs more functional code.
05:34:03 <evincar> pikhq_, could you offer some examples?
05:34:11 <evincar> In general I agree, but I'm curious.
05:35:34 <pikhq_> evincar: The aforementioned issue with private members, for one. If C++ didn't have to really consider C, then it could (for instance) access private members via a means *other* than "pointer plus an offset".
05:35:56 <pikhq_> Another obvious fault is that it goes to great lengths to retain C's manual memory allocation.
05:36:01 <evincar> But that's not the most efficient way to do it.
05:36:28 <evincar> The (painful) motto of C++ is "you don't pay for what you don't use".
05:36:41 <evincar> If you want a stable ABI, use a pointer to a private implementation.
05:36:53 <pikhq_> No, the most efficient way to do it is to get a custom ASIC.
05:37:03 <pikhq_> What's that, you're running on general-purpose silicon? Guess you've already sacrificied efficiency.
05:37:07 <evincar> :P
05:38:03 <evincar> Point is, C++ makes the (bad) decision of trying to build abstraction atop low-level features in such a way that it's still efficient.
05:38:15 <evincar> Rather than make an optimising compiler for a truly high-level language...
05:38:39 <evincar> ...you end up making a trivial compiler for a low-level language with lots of sugar.
05:39:01 <evincar> One that doesn't necessarily support every possible optimisation, because the information just isn't there.
05:39:06 <evincar> That's the real mistake.
05:39:15 <evincar> You end up with hideous complexity in compilers and optimisers.
05:39:24 <pikhq_> And in code.
05:39:33 <evincar> Yes, though mostly in libraries.
05:39:39 <pikhq_> Because you have to hack around all the abstraction leaks.
05:39:43 <evincar> But still, it's there, and it's compile-time overhead as well.
05:40:08 <pikhq_> Templates are probably a lot of the blame in compile-time overhead, though.
05:40:09 <CakeProphet> this is probably a stupid question
05:40:31 <CakeProphet> but how do I link a file when compiling with g++?
05:40:31 <pikhq_> It's a misfeature that doesn't even come from the misguided design goals.
05:40:48 <evincar> CakeProphet: g++ foo.o bar.o invokes the linker (ld).
05:41:04 <evincar> If you want to just make an object file, use g++ -c foo.cpp
05:41:13 <evincar> But if you want to compile and link, omit -c.
05:41:28 <CakeProphet> ah okay.
05:41:32 <CakeProphet> so -c automatically links?
05:41:39 <CakeProphet> using, uh, magic?
05:41:40 <evincar> No, -c is "just compile".
05:42:00 <CakeProphet> g++ file.cpp was giving me undefined reference errors, but g++ -c file.cpp worked fine.
05:42:14 <evincar> That's because the undefined references were link errors.
05:42:26 <CakeProphet> right... so how did they get linked with the -c option?
05:42:31 <CakeProphet> oh, they don't.
05:42:31 <evincar> They didn't.
05:42:32 <CakeProphet> ..
05:42:33 <CakeProphet> heh
05:42:35 <evincar> You just made an object file.
05:42:38 <CakeProphet> got it.
05:42:51 <evincar> AND ANOTHER THING
05:42:57 <evincar> C++'s fucking build model.
05:43:02 <evincar> It doesn't have one.
05:43:30 <evincar> I value the ability to produce native binaries. Really I do.
05:44:03 <CakeProphet> I like how my professor's lab comes with free errors that I have to solve.
05:44:07 <CakeProphet> they use strlen without including string
05:44:29 <evincar> But object files (.o) and libraries thereof (.a) should not be the thing I work with.
05:44:46 <evincar> I should be able to think at the module level without any of the crufty details.
05:45:00 <evincar> Like how inclusion is LITERALLY TEXT SUBSTITUTION.
05:46:34 <CakeProphet> u mad?
05:47:16 <CakeProphet> so what happens when I try to link two object files with two mains.
05:48:15 <CakeProphet> also is it possible to compile and link in one command?
05:48:28 <evincar> Yeah, just g++ file.cpp.
05:48:32 <evincar> You'll get a.out.
05:49:02 <evincar> You can say g++ foo.cpp bar.cpp whatever.cpp -o executable to compile and link and make a binary with a particular name.
05:49:21 <CakeProphet> excellent.
05:49:43 <evincar> But if you have two main()s, you'll get a "duplicate symbol" error from ld.
05:50:10 <evincar> To answer that question.
05:51:05 <CakeProphet> puzzle.cpp:15:46: warning: deprecated conversion from string constant to ‘char*’
05:51:09 <CakeProphet> deprecated but not.... wrong right?
05:51:58 <evincar> Should be const char*.
05:52:30 <evincar> Because you're not technically supposed to modify string constants.
05:54:33 <CakeProphet> Oh god Facebook is... DIFFERENT
05:54:48 <CakeProphet> it is now much easier to stalk people.
05:59:13 <pikhq_> evincar: Not merely technically.
05:59:37 <pikhq_> I'm pretty sure that'll get you a segfault; constants get stuck in read-only pages.
05:59:42 <evincar> Yeah, UB is around every corner...
05:59:57 <CakeProphet> well my code works fine at least.
06:00:02 <evincar> I wonder if any non-trivial C++ program is fully standards-conformant?
06:00:18 <evincar> It's really
06:00:19 <evincar> really
06:00:27 <evincar> sad that I have to wonder that.
06:00:40 <pikhq_> I strongly doubt any non-trivial POSIX C program that's fully standards-conformant.
06:00:51 <pikhq_> At a minimum, everyone neglects _POSIX_C_SOURCE
06:02:14 <evincar> Not to mention names that are secretly (and sometimes ambiguously) reserved by POSIX standards.
06:02:30 <evincar> Which may or may not bite you in the future.
06:03:25 <evincar> The main thing that bothers me when I'm working in C is that I want to check every error and handle every potential failure.
06:03:38 <evincar> And not use fixed-size buffers for everything.
06:03:51 <pikhq_> I don't *think* there's anything POSIX uniquely reserves.
06:04:06 <pikhq_> In large part because it *has* _POSIX_C_SOURCE.
06:04:54 <evincar> What does this page mean then? http://pubs.opengroup.org/onlinepubs/007904975/functions/xsh_chap02_02.html
06:05:40 <pikhq_> Oh, sure enough, it does reserve names.
06:05:51 <evincar> Macros definitely have restrictions, but I'm not sure about the wording on types and functions.
06:06:39 <evincar> Because <string.h> and <stdlib.h> reserve str[a-z]+, it's illegal to define a function called strip(). :P
06:07:09 <evincar> Where illegal = non-POSIX-conformant.
06:07:18 <evincar> So.
06:07:19 <pikhq_> That's documenting an ISO C reservation.
06:07:24 <evincar> Probably not a huge deal.
06:07:26 <evincar> Oh.
06:07:28 <evincar> Well still.
06:07:48 * CakeProphet recently had to explain why Maybe in Haskell was more type-safe than null in other languages.
06:07:50 <pikhq_> Just like the stdint.h reservation.
06:08:08 <CakeProphet> I thought it would be obvious but I guess not to someone who's spent all of their programming years working with languages like C++ and Java.
06:08:57 <pikhq_> The reservations are a bit... Extreme, though.
06:13:36 <CakeProphet> I wonder if I could make the worst programming language ever.
06:13:55 <CakeProphet> like, a language that is incredibly conceptually muddled.
06:14:06 <CakeProphet> with parts of it being high-level and others parts being extremely low-level
06:14:15 <CakeProphet> thus requiring a bunch of boilerplate to do anything.
06:16:07 <pikhq_> Take C++. Add Perl.
06:16:42 <CakeProphet> I was thinking also make all of the primitive constructs Haskell based.
06:16:45 <CakeProphet> but with C++ semantics
06:16:55 <pikhq_> Mmm... Good call.
06:17:20 <evincar> D:
06:17:33 <evincar> I look away for five minutes and you guys get these notions.
06:17:58 <CakeProphet> so you're forced to write functional code in a way that's not convenient at all.
06:18:48 <CakeProphet> I'm not sure how perl would make it worse because perl is a beautiful language suitiable for all porpoises.
06:18:52 <CakeProphet> maybe syntax?
06:18:53 <shachaf> CakeProphet: Silly person. NullPointerException is value error, not a type error!
06:19:07 <CakeProphet> shachaf: well it is a value error in those languages.
06:19:16 <CakeProphet> I had to explain that it /could/ be a type error.
06:19:17 <shachaf> A value error is a value error, man.
06:20:00 <CakeProphet> !cpick caramel pumpkin banana peach
06:20:08 <CakeProphet> >_>
06:20:10 <CakeProphet> !show cpick
06:20:22 <CakeProphet> oh right huge netsplit thing.
06:20:35 * shachaf picks copumpkin.
06:20:48 <CakeProphet> > sdfoksfijwer
06:20:58 <CakeProphet> `help
06:20:59 <HackEgo> Runs arbitrary code in GNU/Linux. Type "`<command>", or "`run <command>" for full shell commands. "`fetch <URL>" downloads files. Files saved to $PWD are persistent, and $PWD/bin is in $PATH. $PWD is a mercurial repository, "`revert <rev>" can be used to revert to a revision. See http://codu.org/projects/hackbot/fshg/
06:21:01 <CakeProphet> `perl
06:21:06 <CakeProphet> `perl print 2+2
06:21:07 <HackEgo> Can't open perl script "print 2+2": No such file or directory
06:21:12 <CakeProphet> `perl -e print 2+2
06:21:14 <HackEgo> 4
06:21:32 <HackEgo> No output.
06:22:06 <CakeProphet> `perl -e "$,=' '; print grep {int(rand(2))} qw(caramel pumpkin banana peach)"
06:22:08 <HackEgo> No output.
06:22:12 <CakeProphet> `perl -e "$,=' '; print grep {int(rand(2))} qw(caramel pumpkin banana peach)"
06:22:13 <HackEgo> No output.
06:22:15 <CakeProphet> ..
06:22:40 <CakeProphet> `perl -e '$,=" "; print grep {int(rand(2))} qw(caramel pumpkin banana peach)'
06:22:41 <HackEgo> No output.
06:22:43 <CakeProphet> kljxdkfjzkujdfsdf
06:23:06 <shachaf> CakeProphet: Try shachafbot. Just type ",pick option option option"
06:23:29 <CakeProphet> that's not a real bot.
06:23:43 <shachaf> It's such a real bot, you don't even know how real it is.
06:23:46 <shachaf> Come on, try it.
06:23:51 <CakeProphet> `perl -e '$,=" "; print (grep {int(rand(2))} qw(caramel pumpkin banana peach))'
06:23:52 <HackEgo> No output.
06:23:53 <evincar> `perl -e 'BEGIN { *CORE::GLOBAL::die = sub { CORE::die "A useless message.\n" } } die "This will not be printed."'
06:23:54 <HackEgo> No output.
06:23:58 <CakeProphet> srkgjsdfjsersfddddsfddddddddddddddddddddddddddddddddddddddddddddddddddd
06:24:21 <CakeProphet> `run perl -e '$,=" "; print (grep {int(rand(2))} qw(caramel pumpkin banana peach))'
06:24:22 <HackEgo> caramel pumpkin banana peach
06:24:26 <CakeProphet> ...hahaha
06:24:27 <CakeProphet> ALL FLAVORS
06:24:32 <CakeProphet> OF SHISHA
06:24:42 <CakeProphet> `run perl -e '$,=" "; print (grep {int(rand(2))} qw(caramel pumpkin banana peach))'
06:24:43 <HackEgo> caramel pumpkin peach
06:24:52 <CakeProphet> I'm pretty sure peach doesn't go well with anything else.
06:25:22 <monqy> peach banana
06:25:23 <monqy> ????
06:26:25 <evincar> `perl -e 'BEGIN { *CORE::GLOBAL::exit = sub { my ($code, $message) = @_; print $message; CORE::exit($code); } } exit(0, "Success!");'
06:26:27 <HackEgo> No output.
06:26:30 <evincar> :/
06:42:53 -!- evincar has quit (Quit: Food and possibly sleep.).
06:45:24 <CakeProphet> monqy: yeah that's what I'm trying.
06:45:40 <CakeProphet> though the banana is quite banana-like.
06:48:51 <CakeProphet> *not quite
06:50:44 -!- nooga has joined.
06:51:36 <CakeProphet> pikhq_: so in a traditional linked list with sentinel value
06:51:43 <CakeProphet> what is the value of sentinel->next and sentinel->prev?
06:53:30 <CakeProphet> null?
07:13:35 <CakeProphet> er forgot to mention that it's empty.
07:13:39 <CakeProphet> yeah it's null. nevermind.
07:15:15 -!- monqy has quit (Quit: hello).
07:19:21 -!- augur has joined.
07:28:11 -!- Jafet has joined.
07:42:43 -!- ive has quit (Quit: leaving).
07:49:05 -!- Wamanuz2 has joined.
07:49:05 -!- lambdabot has joined.
07:49:05 -!- twice11 has joined.
07:51:01 -!- kmc has joined.
07:51:01 -!- hagb4rd has joined.
07:51:01 -!- sebbu2 has joined.
07:51:01 -!- MSleep has joined.
07:51:01 -!- Nisstyre has joined.
07:51:01 -!- DH____ has joined.
07:51:01 -!- lifthrasiir has joined.
07:51:01 -!- Gregor has joined.
07:51:12 -!- Deewiant_ has joined.
07:51:12 -!- coppro has joined.
07:51:12 -!- EgoBot has joined.
07:51:12 -!- quintopia has joined.
07:51:29 -!- Zuu has joined.
07:51:29 -!- fungot has joined.
07:51:29 -!- qnix has joined.
07:51:52 -!- fizzie has joined.
07:51:52 -!- Patashu has joined.
07:51:52 -!- BeholdMyGlory has joined.
07:51:52 -!- atehwa_ has joined.
07:51:52 -!- chickenzilla has joined.
07:53:59 -!- cheater2 has joined.
07:53:59 -!- aloril has joined.
07:53:59 -!- yiyus has joined.
07:54:00 <Patashu> hooray1
07:54:07 <Patashu> to you guys it looks like a few people rejoined
07:54:10 <Patashu> to me everyone's flooding back in
07:55:00 <CakeProphet> wow..
07:55:04 <CakeProphet> that was a long ass netsplit.
07:55:13 <CakeProphet> now I can finally do this:
07:55:22 <CakeProphet> > listArray (0, maxBound-1 :: Int) [1..]
07:55:23 <lambdabot> Terminated
07:55:27 <CakeProphet> aw.
07:59:37 <Patashu> lol what
07:59:39 <Patashu> that's a new one
08:00:22 <CakeProphet> it might be special cased, unless it can track memory allocation and terminate after a certain point.
08:04:29 <olsner> funny how it prints "Terminated" when the code *doesn't* terminate
08:04:40 <Patashu> yes that is quite funny
08:04:41 <Patashu> :O)
08:04:50 <Patashu> how dare this computer program not be an ideal turing machine
08:08:42 <CakeProphet> fungot: sadsdf[pwek
08:08:43 <fungot> CakeProphet: i wished that the weather had spared them this choking and venomous fnord of peculiar fumes. mr. machen's narrative, a triumph of carving. when the colony house fire, and bought an impressive wreath, though the ell was more recent. not even the nether slopes of saturn might boast. verses and
08:08:48 <CakeProphet> I'm so glad all of these bots are back.
08:09:42 <olsner> fungot: Terminated
08:09:43 <fungot> olsner: ' matt eliot his fust mate, talked a lot too, only he was again' folks's doin' any heathen things. told abaout an island east of fnord whar they was a fnord and fnord hoarsely at something which amused him. then,
08:16:23 <fizzie> Maybe a setrlimit-style memory limit which terminates the process?
08:17:50 <Patashu> so [1..] isn't an infinite list, it only has 2^32 or 2^64 entries in it?
08:17:52 <Patashu> or does haskell use bigints?
08:18:29 <fizzie> > array (1, 2^36) [(2^36, "it's lonely back here")]
08:18:30 <lambdabot> mueval-core: out of memory (requested 550293733376 bytes)
08:18:37 <Patashu> loll
08:18:50 <Patashu> > array (1, 2^72) [(2^72, "it's lonely back here")]
08:18:51 <lambdabot> array *Exception: Error in array index; -1 not in range [0..0)
08:18:54 <Patashu> lol
08:19:05 <Patashu> > array (1, 2^64) [(2^64, "it's lonely back here")]
08:19:06 <lambdabot> array *Exception: Error in array index; -1 not in range [0..0)
08:19:12 <Patashu> > array (1, 2^63-1) [(2^63-1, "it's lonely back here")]
08:19:13 <lambdabot> Terminated
08:19:16 <Patashu> !
08:19:33 <Patashu> > array (1, 2^50) [(2^50, "it's lonely back here")]
08:19:34 <lambdabot> mueval-core: out of memory (requested 8796094070784 bytes)
08:19:34 <fizzie> The way it dies seems a bit arbitrary sometimes.
08:19:40 <Patashu> > array (1, 2^55) [(2^55, "it's lonely back here")]
08:19:41 <lambdabot> Terminated
08:19:47 <Patashu> > array (1, 2^52) [(2^52, "it's lonely back here")]
08:19:48 <lambdabot> Terminated
08:19:55 <Patashu> > array (1, 2^51) [(2^51, "it's lonely back here")]
08:19:56 <lambdabot> Terminated
08:20:08 <Patashu> > array (1, 1.5*2^50) [(1.5*2^50, "it's lonely back here")]
08:20:09 <lambdabot> Ambiguous type variable `t' in the constraints:
08:20:09 <lambdabot> `GHC.Real.Fractional t'
08:20:09 <lambdabot> ...
08:20:12 <Patashu> oh
08:21:07 -!- Vorpal has joined.
08:21:07 <Patashu> so somewhere between 2^50 and 2^51
08:23:14 <fizzie> The number of bytes it reports seems a bit arbitrary too.
08:23:16 <fizzie> <fizzie> > let t = 2000000000000000 in array (1, t) [(t, "it's lonely back here")]
08:23:16 <fizzie> <lambdabot> mueval-core: out of memory (requested 6735699902464 bytes)
08:23:16 <fizzie> <fizzie> > let t = 2100000000000000 in array (1, t) [(t, "it's lonely back here")]
08:23:16 <fizzie> <lambdabot> mueval-core: out of memory (requested 15868577710080 bytes)
08:23:16 <fizzie> <fizzie> > let t = 2200000000000000 in array (1, t) [(t, "it's lonely back here")]
08:23:17 <fizzie> <lambdabot> mueval-core: out of memory (requested 7409270521856 bytes)
08:25:22 <Patashu> 15868577710080 is 2^43.85etc
08:25:30 <fizzie> I mean:
08:25:32 <fizzie> <fizzie> > let t = 2^51 in array (1, t) [(t, "it's lonely back here")]
08:25:32 <fizzie> <lambdabot> Terminated
08:25:32 <fizzie> <fizzie> > let t = 2^51+2^49 in array (1, t) [(t, "it's lonely back here")]
08:25:32 <fizzie> <lambdabot> mueval-core: out of memory (requested 4398047559680 bytes)
08:25:53 <Patashu> huh
08:25:54 <Patashu> that's bizzare
08:25:59 <Patashu> thought it would stop after a certain number
08:30:47 -!- nooga has quit (Ping timeout: 258 seconds).
08:32:08 <fizzie> Huh.
08:32:22 <Patashu> > let t = 2^51+2^49 in array (1, t) [(t, "it's lonely back here")]
08:32:31 <Patashu> > let t = 2^51 in array (1, t) [(t, "it's lonely back here")]
08:32:35 <lambdabot> mueval-core: Time limit exceeded
08:32:35 <lambdabot> mueval-core: Time limit exceeded
08:32:39 <Patashu> lol
08:32:43 <Patashu> why is it different this time
08:32:55 <fizzie> Depends on the load.
08:32:59 <Patashu> ah
08:34:22 <fizzie> Anyway, there's some sort of a wraparound issue there.
08:34:46 <fizzie> <fizzie> > let t = 2196875771904 in array (1, t) [(t, "it's lonely back here")]
08:34:46 <fizzie> <lambdabot> mueval-core: out of memory (requested 17592170315776 bytes)
08:34:48 <fizzie> <fizzie> > let t = 2197375771904 in array (1, t) [(t, "it's lonely back here")]
08:34:48 <fizzie> <lambdabot> mueval-core: out of memory (requested 3987734528 bytes)
08:35:04 <fizzie> Some of the numbers in-between took very long time and got the "thread killed" message.
08:35:26 <fizzie> It seems to happen around where the "requested N bytes" goes a bit over N = 2^44.
08:38:01 <olsner> hmm, my cpu has 48 bits virtual address space (and I assume that's "standard" for 64-bit cpus), so 2^44 should be too small
08:38:43 <fizzie> Half of that goes to the kernel.
08:38:47 <olsner> but maybe the virtual address space is just fragmented
08:39:02 <olsner> right, but that should still leave 47 bits of userspace
08:39:05 <fizzie> Anyway, even if it doesn't fit in the address space, it's not supposed to wrap around like that.
08:41:44 <olsner> > 6^(12::Int)
08:41:45 <lambdabot> 2176782336
08:43:27 <fizzie> > let t = 2196877864960 in array (1, t) [(t, "it's lonely back here")]
08:43:29 <lambdabot> mueval-core: out of memory (requested 17592186044416 bytes)
08:43:33 <fizzie> > let t = 2196877864961 in array (1, t) [(t, "it's lonely back here")]
08:43:34 <lambdabot> Terminated
08:43:42 <fizzie> (Found with a manual binary search.)
08:44:27 <olsner> mueval tries to set that (6^(12::Int)) as its total memory limit, apparently... I wonder what unit that is
08:46:49 <fizzie> It's the largest (integer) power of 6 that's less than 2^32, but I guess it could be something totally arbitrary.
08:48:08 <olsner> afaict the number gets used to set RLIMIT_AS, which is in bytes
08:48:44 <fizzie> If it's done with System.Posix.Resource, that sounds like the most likely thing.
08:49:13 <olsner> it is, http://code.haskell.org/mubot/mueval/Mueval/Resources.hs
08:51:58 <fizzie> Funny bit of trivia: OS X doesn't have a RLIMIT_AS at all.
08:52:48 <olsner> in other words, don't run lambdabot on OS X? :)
08:55:17 <fizzie> Resource.hsc:
08:55:18 <fizzie> #ifdef RLIMIT_AS
08:55:18 <fizzie> packResource ResourceTotalMemory = (#const RLIMIT_AS)
08:55:18 <fizzie> #endif
08:55:28 <fizzie> I see they have an #ifdef for systems that lack it.
08:55:44 <fizzie> Though I can't recall if OS X headers provide the #define and just ignore it, or if they completely lack it.
09:03:48 -!- Vorpal has quit (Quit: ZNC - http://znc.sourceforge.net).
09:04:47 <CakeProphet> how would one go about learning all of these details?
09:32:34 <CakeProphet> http://en.wikipedia.org/wiki/Bugatti_Veyron
09:32:35 <CakeProphet> mmm
09:34:42 <fizzie> That seems to be some sort of a car device.
09:35:57 <CakeProphet> yes it's the fastest street-legal car in the world.
09:37:04 <fizzie> It does not look like you could fit a large amount of luggage into it. Is there even place for the cat?
09:37:19 <CakeProphet> I'm sure you could fit one person and a cat in there.
09:37:39 <CakeProphet> it's a mid-engine car so there's not a lot of passenger space.
09:38:15 -!- Vorpal has joined.
09:39:17 <CakeProphet> the engine is essentially two V8's fused together. it's a pretty amazing feat of engineering.
09:39:36 <CakeProphet> there are 10 radiators.
09:40:04 <CakeProphet> most cars have one of those.
09:40:15 <fizzie> Yes, but I'm not often in *that* much of a hurry to get the cat anywhere. I think I'll skip.
09:40:29 <CakeProphet> it's also obscenely expensive.
09:40:43 <CakeProphet> It uses special Michelin PAX run-flat tyres, designed specifically to accommodate the Veyron's top speed, which reportedly cost €25,000 per set.
09:41:15 <CakeProphet> I believe the car itself is sold for 1.7 million. Though I believe they stopped selling them.
09:41:40 <Vorpal> CakeProphet: what is this weird car you are talking about?
09:41:44 <fizzie> With that sort of price, does it even come with a Befunge interpreter or something?
09:41:50 <CakeProphet> http://en.wikipedia.org/wiki/Bugatti_Veyron
09:42:07 <CakeProphet> fizzie: no but it moves really fast.
09:42:25 <fizzie> CakeProphet: That would perhaps be nice if there weren't all the other people in the way.
09:42:37 <Jafet> Buy your own road and drive it there
09:42:50 <Jafet> Live on the Isle of Man
09:42:55 <CakeProphet> May noted that at top speed the engine consumes 45,000 litres (9,900 imp gal) of air per minute (as much as a human breathes in four days).
09:43:17 <fizzie> On the Isle of Man, where all men are real men, and all cars are like that.
09:43:42 <CakeProphet> as far as I can tell it's basically the best car ever made.
09:44:22 <fizzie> For some values of best, certainly.
09:45:01 <CakeProphet> top speed, acceleration, handling, stability, quality of engineering.
09:45:16 <CakeProphet> but not passenger capacity or trunk space, no.
09:45:31 <fizzie> Or practicality. (What do you *do* with that top speed and acceleration?)
09:45:41 <CakeProphet> go places really fast of course.
09:45:43 <fizzie> I'll get excited when they make the flying model; at least that'd make me feel like it's the future.
09:46:05 <CakeProphet> Clarkson test drove the Veyron from Alba, northern Italy to London in a race against James May and Richard Hammond who made the journey in a Cessna 182 aeroplane.
09:46:14 <CakeProphet> why doesn't it say who won. :P
09:46:31 <Jafet> Because Cessna is awesome
09:46:34 <fizzie> They had that car-train-motorcycle race, I remember seeing that thing.
09:46:50 <fizzie> The only thing of that show I've seen, probably.
09:46:52 <CakeProphet> motorcycles are generally faster than cars.
09:47:14 <CakeProphet> a high-end motorcycle easily travels faster than the Bugatti Veyron.
09:47:17 <Jafet> The acceleration is to produce frame-dragging that increases the apparent size of the owner's small penis
09:47:20 <fizzie> Everything seems to be capable of the speed limit speeds, anyway.
09:47:35 <Vorpal> <CakeProphet> as far as I can tell it's basically the best car ever made. <-- not at all. It is useless when moving to a new house, you can't fit a lot in that car
09:47:35 <CakeProphet> ....speed limits?
09:47:45 <fizzie> I've heard there's such a thing.
09:47:53 <CakeProphet> do people actually pay attention to those?
09:47:59 <fizzie> Around here, certainly.
09:48:02 <Vorpal> of course
09:48:04 <fizzie> You get ticketed if not.
09:48:07 <CakeProphet> ....weird.
09:48:08 <Vorpal> indeed
09:48:19 <Vorpal> CakeProphet: which country do you live in then?
09:48:23 * CakeProphet routinely drives to Atlanta at about 90 mph.
09:48:24 <CakeProphet> US.
09:48:32 <Vorpal> I see
09:48:37 <CakeProphet> speed limit on those roads ranges from 55 mph to 75 mph
09:48:45 <CakeProphet> most people are going about 80.
09:49:06 <fizzie> I mean, sure, "people" in general drive at k*l, where l is the speed limit and k is something from 1 to 1.2, but still.
09:49:08 <CakeProphet> when traffic permits.
09:49:37 <Vorpal> CakeProphet: anyway, a sports car is kind of useless for most purposes. I very much doubt that car you mentioned have a towbar...
09:49:39 <CakeProphet> in palces where I know cops are never present I usually go about 105
09:49:56 <Vorpal> has a*
09:50:06 <CakeProphet> Vorpal: no, though it is all wheel drive and has retarded horse power / torque so it could probably tow something.
09:50:39 <Vorpal> CakeProphet: and you can't really fit a lot of stuff in the car.
09:50:51 <CakeProphet> the final production Veyron engine produces 1,001 metric horsepower (736 kW; 987 bhp) of motive power, and generates 1,250 newton metres (922 ft·lbf) of torque.[1][14] The nominal figure has been stated by Bugatti officials to be conservative, with the real total being 1,020 metric horsepower (750 kW; 1,006 bhp) or more.
09:50:53 -!- sebbu2 has changed nick to sebbu.
09:50:58 <fizzie> Highway speed limits don't go higher than 120 km/h (75 mph) here, and even if you add a generous 1.2 multiplier, that's 144 km/h (90 mph), so at most you need to be able to drive that fast. A top speed of 400 km/h (250 mph) sounds a bit... excessive.
09:51:03 <CakeProphet> Vorpal: yes you've driven that point home.
09:51:08 <Vorpal> CakeProphet: even two parents + two children + packing for 4 days vacation would not fit
09:51:20 <Vorpal> CakeProphet: so what actual use is a car like that?
09:51:30 <CakeProphet> to take one or two people a large distance very quickly.
09:51:46 <Vorpal> 120 km/h is the maximum existing speed limit around here anyway.
09:52:21 <CakeProphet> also, to escape police, to have fun, to escape a large section of the world before a meteor crashes into it.
09:52:28 <CakeProphet> other things.
09:52:33 <fizzie> I really believe the point is more about what other people think of the car's owner.
09:52:45 <Vorpal> CakeProphet: the police would still note down the registration number...
09:52:50 <Vorpal> so it wouldn't really help
09:53:05 <CakeProphet> no I actually think the point is to be an amazing work of engineering.
09:53:21 <CakeProphet> not everyone is vain like that.
09:53:23 <fizzie> Well, that's the point for the people who made it.
09:53:30 <fizzie> Maybe.
09:53:37 <Vorpal> fizzie: you mean, that the owner has no sense and doesn't care much for actual use of the product nor the environment.
09:53:55 <fizzie> Vorpal: That's just one opinion; other people might thing "whoa, nice car".
09:54:13 <fizzie> It looks rather car chasey from the photos.
09:54:15 * CakeProphet takes note: #esoteric does not appreciate a good car.
09:54:30 <fizzie> I could imagine a Surname, Firstname Surname driving a car like that.
09:54:46 <fizzie> CakeProphet: Conclusion made with a sample size of N=2?
09:54:59 <CakeProphet> also speaking of evading police, my friend who drives a motorcycle can pretty much always outrun the police before they have time to get his license plate.
09:55:28 <Vorpal> CakeProphet: I certainly do. A Volvo station wagon with hybrid electrical/bio-fuel engine is a good car IMO.
09:55:32 <CakeProphet> most cops don't even bother with motorcycles.
09:56:03 <fizzie> With the sort of scaled-by-your-wages fines (and I believe license-suspension reasonably easily) you get here, I wouldn't think "pretty much always" would be quite good enough.
09:56:42 <Vorpal> fizzie: same system in Sweden
09:56:56 <CakeProphet> you Europeans and your apparently strict traffic laws.
09:58:03 <Vorpal> CakeProphet: much less accidents over here than in US
09:58:22 <CakeProphet> changing the speed limit does not correlate to more accidents.
09:58:27 <CakeProphet> or less.
09:58:36 <fizzie> http://en.wikipedia.org/wiki/Top_Gear_Race_to_the_North <- this was the thing I saw.
09:58:42 <Vorpal> CakeProphet: [citation needed]
09:58:49 <Vorpal> because as far as I know it does
09:59:14 <Vorpal> a lower speed means that the car travels less distance during your reaction time if a wild animal runs onto the road for example.
09:59:20 <Vorpal> and braking distance is also reduced
09:59:58 <CakeProphet> Vorpal: http://en.wikipedia.org/wiki/Autobahn
10:00:00 <fizzie> Didn't we do the whole car accident discussion/comparison already not long ago?
10:00:06 <CakeProphet> for highways this is less important.
10:00:09 <Vorpal> You would expect a country like Sweden, with bad winters and so on to have more accidents per capita than a US state like California, but no. Not the case.
10:00:26 <fizzie> Per distance traveled is the more sensible metric, anyway.
10:00:29 <Vorpal> fizzie: indeed, with pikhq iirc, who is sensible
10:00:39 <Vorpal> fizzie: even then iirc Sweden is better of than US.
10:00:39 <fizzie> And I can't get W|A to report it, even though I think it did before.
10:00:48 <CakeProphet> Moreover, international accident statistics demonstrate that limited access grade separated roads such as Autobahns and motorways have much greater road traffic safety regardless of speed limit, suggesting that high speed alone isn't a deciding factor.
10:00:53 <CakeProphet> maybe American cars are just not safe.
10:01:08 <CakeProphet> also we have really bad traffic.
10:01:56 <Vorpal> CakeProphet: what about the reaction time/braking distance issue I mentioned above.
10:02:00 <Vorpal> are you saying it is false?
10:02:11 <CakeProphet> no.
10:02:40 <CakeProphet> but to what extent this curbs avoiding an accident is questionable. In many cases you don't have control of your car anyways.
10:02:44 <Vorpal> CakeProphet: then on a given road a lower speed limit means fewer accidents, and more importantly: fewer accidents with deadly outcome.
10:03:13 <Vorpal> I would like to continue this discussion, but I need to leave for university now
10:03:14 <Vorpal> cya
10:03:49 <CakeProphet> The Synthesis of Safety Research Related to Speed and Speed Limits report sponsored by the Federal Highway Administration published in 1998 found that changing speed limits on low and moderate speed roads appeared to have no significant effect on traffic speed or the number of crashes, whilst on high-speed roads such as freeways, increased speed limits generally resulted in higher traffic speeds and more crashes. It is a
10:04:02 <fizzie> Ah, I found the right W|A query formulation. "Sweden road accidents causing death / total road traffic" => 0.5902 deaths per hundred million vehicle kilometres; US 0.891.
10:04:09 <Jafet> We'd curb accidents by removing the pesky humans from the dashboard
10:05:57 <fizzie> Google's doing that right now.
10:06:13 <fizzie> They already had that one crash which they were all "it's the human's fault again".
10:06:24 <fizzie> Possibly a coverup by the Google AI overlords.
10:08:06 <CakeProphet> suddenly 4 gigs of RAM is no longer enough to not worry about.
10:09:30 <fizzie> Yes, and getting 4G sticks of DDR2 to a motherboard with only two stupid slots is annoyingly expensive. Last I looked, it was more than twice the price of an equivalent amount (and stick-count) of faster DDR3 RAM.
10:10:48 <cheater> you pay for the historical value
10:12:20 <CakeProphet> uh... why is there a cat process sleeping my computer.
10:12:22 <CakeProphet> NO SLEEPING CATS.
10:14:01 <fizzie> It's better to let sleeping cats lie.
10:14:17 <Jafet> Better than zombie cats.
10:14:47 <CakeProphet> uninterruptible cats are the worst.
10:35:23 -!- nooga has joined.
10:59:05 <CakeProphet> > showIntAtBase 2 intToDigit (foldl1 (+) [1..100]) ""
10:59:07 <lambdabot> "1001110111010"
10:59:14 <CakeProphet> > showIntAtBase 3 intToDigit (foldl1 (+) [1..100]) ""
10:59:16 <lambdabot> "20221001"
10:59:31 <CakeProphet> > map (\x -> showIntAtBase x intToDigit (foldl1 (+) [1..100]) "") [1..]
10:59:32 <lambdabot> ["*Exception: Numeric.showIntAtBase: applied to unsupported base 1
10:59:35 <CakeProphet> > map (\x -> showIntAtBase x intToDigit (foldl1 (+) [1..100]) "") [2..]
10:59:36 <lambdabot> ["1001110111010","20221001","1032322","130200","35214","20503","11672","683...
10:59:55 <CakeProphet> > map (\x -> showIntAtBase x intToDigit (foldl1 (+) [1..100]) "") evens
10:59:56 <lambdabot> Not in scope: `evens'
11:00:04 <CakeProphet> > map (\x -> showIntAtBase x intToDigit (foldl1 (+) [1..100]) "") $ filter even [1..]
11:00:05 <lambdabot> ["1001110111010","1032322","35214","11672","5050","2b0a","1baa","13ba","faa...
11:04:01 <fizzie> Sadly intToDigit only goes up to 15. :/
11:04:25 <Jafet> @let showAtBase b n=(\(i,f)->(show=<<i)++"."++(show=<<f)) $ splitAt(floor(log n/log b)+1) $ dropWhile(==0) $ unfoldr(\x->let(i,r)=let d=floor(x/b)in(d,x-b*fromIntegral d)in Just(i,r*b)) n
11:04:26 <lambdabot> Defined.
11:04:38 <Jafet> > showAtBase (exp 1) pi
11:04:40 <lambdabot> "10.10100202000211112002010112000101020200211201001201121000112101000020021...
11:04:51 <Jafet> > take 30 $ showAtBase (exp 1) (pi :: CReal)
11:04:55 <lambdabot> mueval-core: Time limit exceeded
11:04:58 <Jafet> > take 25 $ showAtBase (exp 1) (pi :: CReal)
11:05:02 <lambdabot> mueval-core: Time limit exceeded
11:05:07 <Jafet> > take 20 $ showAtBase (exp 1) (pi :: CReal)
11:05:10 <lambdabot> "10.10100202000211112"
11:11:07 <Patashu> > exp 1
11:11:09 <lambdabot> 2.718281828459045
11:11:32 <Patashu> > take 20 $ showAtBase (pi) (pi :: CReal)
11:11:35 <lambdabot> "10.00000000000000000"
11:11:38 <Patashu> coooool
11:11:39 <Patashu> :D
11:11:54 <Patashu> apparently slow though XD
11:12:48 <Jafet> CReal is O(shit)
11:13:07 <Patashu> XD
11:13:08 <Jafet> > showAtBase pi pi
11:13:10 <lambdabot> "10.00000000000000000000000000000000000000000000000000000000000000000000000...
11:13:20 <Jafet> > showAtBase 10 pi
11:13:22 <lambdabot> "3.141592653589793115997963468544185161590576171875000000000000000000000000...
11:13:33 <Patashu> pi should be defined as an infinite list
11:13:39 <Patashu> when more precision is demanded it calculates it
11:14:03 <Jafet> > pi :: CReal
11:14:05 <lambdabot> 3.1415926535897932384626433832795028841972
11:14:54 -!- copumpkin has quit (Ping timeout: 252 seconds).
11:15:32 -!- copumpkin has joined.
11:16:11 -!- DH____ has quit (Read error: Connection reset by peer).
11:57:39 -!- MSleep has changed nick to MDude.
12:05:00 -!- oerjan has joined.
12:20:54 <CakeProphet> Patashu: you could do this yourself you know.
12:23:33 <CakeProphet> :t arccot
12:23:34 <lambdabot> Not in scope: `arccot'
12:23:38 <CakeProphet> :t arctan
12:23:39 <lambdabot> Not in scope: `arctan'
12:23:54 <CakeProphet> :t acot
12:23:55 <lambdabot> Not in scope: `acot'
12:23:58 <CakeProphet> :t atan
12:23:59 <lambdabot> forall a. (Floating a) => a -> a
12:29:50 <CakeProphet> > let acot x = (pi/2) - arctan x; pid digits = let unity = 10 ^ (digits+10); pi' = 4 * (4* arccot 5 unity - arccot 239 unity) in pi' `div` (10^10) in pid 1000
12:29:51 <lambdabot> Not in scope: `arctan'Not in scope: `arccot'Not in scope: `arccot'
12:30:03 <CakeProphet> > let arccot x = (pi/2) - atan x; pid digits = let unity = 10 ^ (digits+10); pi' = 4 * (4* arccot 5 unity - arccot 239 unity) in pi' `div` (10^10) in pid 1000
12:30:04 <lambdabot> Ambiguous type variable `a' in the constraints:
12:30:04 <lambdabot> `GHC.Real.Integral a'
12:30:04 <lambdabot> ...
12:32:03 <oerjan> yay iwc isn't ending (i think. that was a particularly obscure final annotation line.)
12:32:08 <oerjan> *!
12:32:29 <CakeProphet> oh their acot takes two arguments
12:32:31 <CakeProphet> Patashu: http://en.literateprograms.org/Pi_with_Machin's_formula_(Haskell)
12:33:13 <oerjan> @src Floating
12:33:14 <lambdabot> class (Fractional a) => Floating a where
12:33:14 <lambdabot> pi :: a
12:33:14 <lambdabot> exp, log, sqrt, sin, cos, tan :: a -> a
12:33:14 <lambdabot> asin, acos, atan, sinh, cosh, tanh, asinh, acosh, atanh :: a -> a
12:33:15 <lambdabot> (**), logBase :: a -> a -> a
12:33:41 <CakeProphet> needs moar acot
12:33:59 <oerjan> it's just asin.recip, anyway
12:34:13 <oerjan> er
12:34:14 <CakeProphet> don't care.
12:34:19 <CakeProphet> NEVER A FUNCTION TOO TRIVIAL.
12:34:24 <oerjan> *atan.recip
12:34:31 <CakeProphet> is it?
12:34:43 <oerjan> well tan x = 1/cot x
12:34:48 <CakeProphet> according to wikipedia is pi/2 - atan x
12:34:53 <CakeProphet> is that the same thing?
12:35:08 <fizzie> CReal's pi is defined in terms of atan; "pi = 16 * atan (fromRational (1 % 5)) - 4 * atan (fromRational (1 % 239))"
12:35:26 <oerjan> should be
12:36:03 <oerjan> because tan x = 1 / tan (pi/2 - x)
12:36:06 <CakeProphet> arctan(1/x) = arccot x
12:36:24 <CakeProphet> so yeah
12:38:05 <oerjan> our norwegian trigonometry and calculus classes never bothered with any of that co-stuff
12:38:11 <oerjan> afair
12:38:32 <fizzie> The domains may differ; Wikipedia's "usually defined as" lists gives -pi/2 < y < pi/2 for y = atan(x), and 0 < y < pi for y = acot(x).
12:39:10 <fizzie> And our Finnish trigonometry does not really speak of cosecants, secants and cotangents either.
12:39:18 <CakeProphet> shame
12:39:26 <oerjan> well, that's just because each grows asymptotic at the boundary
12:39:26 <CakeProphet> AMERICAN TRIGONOMETRY IS SUPERIOR HAHAHAHAHA
12:39:44 <oerjan> oh wait we have cosine of course, but not secant
12:40:05 <CakeProphet> puny scandinavians.
12:40:08 <fizzie> "The acronyms "SOHCAHTOA" and "OHSAHCOAT" are commonly used mnemonics for these ratios." Not here they aren't!
12:40:13 <Jafet> Reduce[ArcTan[x] == ArcCot[1/x], x]
12:40:20 <CakeProphet> your feeble peninsula will be analyzed with the might of our extra trigonometric functions.
12:40:21 <Jafet> = True
12:40:40 <fizzie> I'm not sure if there's a Finnish mnemonic.
12:41:21 <fizzie> I think I saw a "soh-cah-toa" reference in some webcomic or other.
12:41:39 <CakeProphet> I bet it was xkcd.
12:41:41 <oerjan> i've seen it mentioned
12:42:47 <fizzie> The "opposite" and "adjacent" in Finnish both start with 'v' ("vastakkainen/vastainen", "viereinen") so we're even mnemonically oppressed by the language.
12:43:08 <CakeProphet> uh...
12:43:13 <fizzie> "SVHKVHTVV" would not be very helpful.
12:43:16 <CakeProphet> why is office libre really really inconsistent about everything.
12:43:47 <CakeProphet> *libreoffice apparently
12:44:25 <CakeProphet> I select "heading 2" for one heading and it does bold and italics, I do the same for a different heading and it formats it differently
12:45:11 <fizzie> Does your superior American trigonometry also cover versine, vercosine, coversine, haversine, exsecant and such?
12:45:18 <CakeProphet> uh, no.
12:46:22 <fizzie> http://upload.wikimedia.org/wikipedia/commons/9/9d/Circle-trig6.svg so pretty.
12:47:27 <CakeProphet> hacoversine,
12:47:27 <fizzie> Haven't had any "style inconsistency" issues in OpenOffice (back when it was called that); though it sometimes is necessary to select all + clear formatting, if the document has originally non-style-based modifications here and there.
12:48:06 <fizzie> "The hacoversed cosine, also called hacovercosine or cohavercosine and written hacovercosin(\theta)"
12:48:27 <oerjan> "now you are just making things up."
12:56:28 -!- oerjan has quit (Quit: leaving).
12:57:51 <fizzie> > let pfx = ["ha", "co", "ver"]; f = (++ "sine") . concat; r = randoms $ mkStdGen 6667 in f . take (head r `mod` 20) $ (pfx !!) . (`mod` length pfx) <$> tail r
12:57:52 <lambdabot> "cohacovercohahahahasine"
12:58:07 <fizzie> "hahahahasine", the funniest trigonometric function there is.
12:58:39 <fizzie> (Also I don't know how to get real random numbers out of lambdabot.)
12:58:59 <CakeProphet> > ((++"sine").(`replicateM` ["ha","co","ver"])) =<< [0..]
12:59:00 <lambdabot> Couldn't match expected type `GHC.Types.Char'
12:59:00 <lambdabot> against inferred type...
12:59:11 <CakeProphet> > ((++"sine").join.(`replicateM` ["ha","co","ver"])) =<< [0..]
12:59:12 <lambdabot> Couldn't match expected type `GHC.Types.Char'
12:59:13 <lambdabot> against inferred type...
12:59:14 <CakeProphet> jsdkfjsadhfiushef
13:00:02 <CakeProphet> > map ((++"sine").join) $ ((`replicateM` ["ha","co","ver"])) =<< [0..]
13:00:04 <lambdabot> ["sine","hasine","cosine","versine","hahasine","hacosine","haversine","coha...
13:00:19 <CakeProphet> > map ((++"sine").join) $ ((`replicateM` ["ha","co","ver"])) =<< [5..]
13:00:21 <lambdabot> ["hahahahahasine","hahahahacosine","hahahahaversine","hahahacohasine","haha...
13:00:34 <CakeProphet> > map ((++"sine").join) $ ((`replicateM` ["ha","co","ver"])) =<< [3..]
13:00:36 <lambdabot> ["hahahasine","hahacosine","hahaversine","hacohasine","hacocosine","hacover...
13:00:57 <CakeProphet> hacocoversine
13:01:04 <CakeProphet> is in there somewhere
13:02:23 <fizzie> > elemIndex "hacocoversine" . map ((++"sine").join) $ ((`replicateM` ["ha","co","ver"])) =<< [0..]
13:02:25 <lambdabot> Just 54
13:02:28 <fizzie> Indeed it is.
13:10:56 <CakeProphet> :t count
13:10:57 <lambdabot> Not in scope: `count'
13:13:38 <CakeProphet> > filter (\x -> (==) `on` length (elemIndices '[' x) (elemIndices ']' x)) $ (`replicateM` "+-[].,") =<< [0..]
13:13:39 <lambdabot> Couldn't match expected type `[GHC.Types.Int] -> a -> b'
13:13:39 <lambdabot> against in...
13:13:58 <CakeProphet> > filter (\x -> ((==) `on` length) (elemIndices '[' x) (elemIndices ']' x)) $ (`replicateM` "+-[].,") =<< [0..]
13:13:59 <lambdabot> ["","+","-",".",",","++","+-","+.","+,","-+","--","-.","-,","[]","][",".+",...
13:14:06 <fizzie> The good old ][.
13:14:14 <fizzie> Good program. Best friend.
13:14:21 <CakeProphet> best bf
13:14:50 -!- copumpkin has quit (Ping timeout: 258 seconds).
13:15:16 -!- copumpkin has joined.
13:16:27 <CakeProphet> > [] < [1,2,3]
13:16:28 <lambdabot> True
13:16:32 <CakeProphet> > [0] < [1,2,3]
13:16:33 <lambdabot> True
13:16:37 <CakeProphet> > [0] < [0,1,2,3]
13:16:39 <lambdabot> True
13:17:12 <CakeProphet> > filter (\x -> let count = (`elemIndices` x); ls = count '['; rs = count ']' in ls < rs && ((==) `on` length) numl numr) $ (`replicateM` "+-[].,") =<< [0..]
13:17:13 <lambdabot> Not in scope: `numl'Not in scope: `numr'
13:17:21 <CakeProphet> > filter (\x -> let count = (`elemIndices` x); ls = count '['; rs = count ']' in ls < rs && ((==) `on` length) ls ra) $ (`replicateM` "+-[].,") =<< [0..]
13:17:22 <lambdabot> Not in scope: `ra'
13:17:25 <CakeProphet> > filter (\x -> let count = (`elemIndices` x); ls = count '['; rs = count ']' in ls < rs && ((==) `on` length) ls rs) $ (`replicateM` "+-[].,") =<< [0..]
13:17:26 <lambdabot> ["[]","+[]","-[]","[+]","[-]","[]+","[]-","[].","[],","[.]","[,]",".[]",",[...
13:17:29 <CakeProphet> ..
13:18:31 <fizzie> > let v d [] = d == 0; v d ('[':xs) = v (d+1) xs; v d (']':xs) = d > 0 && v (d-1) xs; v d (_:xs) = v d xs in drop 10000 . filter (v 0) $ (`replicateM` "+-[].,") =<< [0..]
13:18:33 <lambdabot> [",.-.,+",",.-.,-",",.-.,.",",.-.,,",",.-,++",",.-,+-",",.-,+.",",.-,+,",",...
13:18:33 <fizzie> The manual way.
13:19:04 <CakeProphet> > filter (\x -> let count = (`elemIndices` x); ls = count '['; rs = count ']' in ls <= rs && ((==) `on` length) ls rs) $ (`replicateM` "+-[].,") =<< [0..]
13:19:05 <lambdabot> ["","+","-",".",",","++","+-","+.","+,","-+","--","-.","-,","[]",".+",".-",...
13:19:18 <CakeProphet> most awesome way.
13:19:40 <CakeProphet> > filter (\x -> let count = (`elemIndices` x); ls = count '['; rs = count ']' in ls <= rs && ((==) `on` length) ls rs) $ (`replicateM` "+-[].,") =<< [4..]
13:19:41 <lambdabot> ["++++","+++-","+++.","+++,","++-+","++--","++-.","++-,","++[]","++.+","++....
13:19:52 <CakeProphet> > filter (\x -> let count = (`elemIndices` x); ls = count '['; rs = count ']' in ls <= rs && ((==) `on` length) ls rs) $ (`replicateM` "+-[].,") =<< [20..]
13:19:54 <lambdabot> ["++++++++++++++++++++","+++++++++++++++++++-","+++++++++++++++++++.","++++...
13:20:12 <CakeProphet> man there sure are a lot of brainfuck programs.
13:22:22 <fizzie> > elemIndex "[[]]][" . filter (\x -> let count = (`elemIndices` x); ls = count '['; rs = count ']' in ls <= rs && ((==) `on` length) ls rs) $ (`replicateM` "+-[].,") =<< [0..]
13:22:24 <lambdabot> Just 6284
13:22:31 <fizzie> > [2,6] < [3,5]
13:22:32 <lambdabot> True
13:22:38 <CakeProphet> oh...
13:22:39 <fizzie> Slightly lessens the awesome.
13:22:54 <CakeProphet> how does that work.
13:23:15 <fizzie> Well, 2 < 3.
13:23:35 <CakeProphet> ah
13:24:38 <fizzie> > all (uncurry (<)) $ zip [2,6] [3,5]
13:24:39 <lambdabot> False
13:24:43 <CakeProphet> beat me to it.
13:24:55 <fizzie> Maybe if you test something like that. (Disclaimer: haven't thought it through.)
13:25:23 <CakeProphet> > filter (\x -> let count = (`elemIndices` x); ls = count '['; rs = count ']' in all (uncurry (<)) (zip ls rs) && ((==) `on` length) ls rs) $ (`replicateM` "+-[].,") =<< [0..]
13:25:23 <lambdabot> ["","+","-",".",",","++","+-","+.","+,","-+","--","-.","-,","[]",".+",".-",...
13:25:24 <fizzie> > all $ zipWith (<) [2,6] [3,5]
13:25:25 <lambdabot> Couldn't match expected type `a -> GHC.Bool.Bool'
13:25:25 <lambdabot> against inferred ...
13:25:31 <CakeProphet> I have.
13:25:54 <CakeProphet> you want and
13:25:57 <CakeProphet> for that.
13:26:00 <fizzie> Right.
13:26:33 <CakeProphet> > filter (\x -> let count = (`elemIndices` x); ls = count '['; rs = count ']' in and (zipWith (<) ls rs) && ((==) `on` length) ls rs) $ (`replicateM` "+-[].,") =<< [0..]
13:26:34 <lambdabot> ["","+","-",".",",","++","+-","+.","+,","-+","--","-.","-,","[]",".+",".-",...
13:26:52 <CakeProphet> can you think of a situation where that fails?
13:28:08 <CakeProphet> I think it's correct.
13:33:19 <CakeProphet> @hoogle on
13:33:20 <lambdabot> Data.Function on :: (b -> b -> c) -> (a -> b) -> a -> a -> c
13:33:20 <lambdabot> Text.PrettyPrint.HughesPJ OneLineMode :: Mode
13:33:20 <lambdabot> Text.Parsec.Char oneOf :: Stream s m Char => [Char] -> ParsecT s u m Char
13:36:12 <fizzie> > let progs = (`replicateM` "+-[].,") =<< [0..]; cake = filter (\x -> let count = (`elemIndices` x); ls = count '['; rs = count ']' in and (zipWith (<) ls rs) && ((==) `on` length) ls rs) progs; v d [] = d == 0; v d ('[':xs) = v (d+1) xs; v d (']':xs) = d > 0 && v (d-1) xs; v d (_:xs) = v d xs in elemIndex False $ zipWith (==) (filter (v 0) progs) cake
13:36:16 <lambdabot> mueval-core: Time limit exceeded
13:36:20 <fizzie> They seem to agree.
13:38:01 <CakeProphet> http://hpaste.org/51618
13:38:04 <CakeProphet> bam
13:38:05 -!- hagb4rd has quit (Ping timeout: 260 seconds).
13:38:08 <CakeProphet> now prettified.
13:43:01 -!- Phantom_Hoover has joined.
13:43:15 -!- Patashu has quit (Quit: MSN: Patashu@hotmail.com , Gmail: Patashu0@gmail.com , AIM: Patashu0 , YIM: patashu2 .).
13:43:16 <CakeProphet> am I a bad person for using (`f` x) instead of flip f x?
13:45:15 <CakeProphet> @pl \ls rs -> and (zipWith (<) ls rs) && ((==) `on` length) ls rs
13:45:16 <lambdabot> ap (ap . (((&&) . and) .) . zipWith (<)) ((==) `on` length)
13:46:19 <CakeProphet> @pl \x -> and (zipWith (<) (elemIndices '[' x) (elemIndices ']' x)) && ((==) `on` length) (elemIndices '[' x) (elemIndices ']' x)
13:46:20 <lambdabot> ap ((&&) . and . ap (zipWith (<) . elemIndices '[') (elemIndices ']')) (ap (((==) `on` length) . elemIndices '[') (elemIndices ']'))
13:46:32 <CakeProphet> beautiful.
13:49:25 <nooga> what are you doing?
13:53:48 <Phantom_Hoover> http://www.reddit.com/r/math/comments/kmhjj/mind_blown_in_linear_algebra_class_today_when_the/
13:54:00 <Phantom_Hoover> Help this person really annoys me and I feel bad for it.
13:56:17 <fizzie> You are a bad person for being annoyed when other people are happy and excited.
13:57:15 <fizzie> Ut-oh, how do I cancel a topic edit in XChat?
13:57:23 <fizzie> I accidentally all over the topic textbox.
13:57:32 <fizzie> Why is that even a textbox in the first place?
13:57:46 <fizzie> (This is from another client.)
13:58:44 <fizzie> Hrm, restoring it to the original form and then clicking away at least didn't change the topic. But maybe it needs a CR anyway to happen. Who knows.
14:00:27 -!- Madoka-Kaname has quit (Ping timeout: 258 seconds).
14:01:42 <Gregor> fizzie: Only hitting enter will change the topic. If you type /topic in the normal input box, it'll refetch the original topic.
14:01:52 -!- boily has joined.
14:02:15 <fizzie> Good. I was *so scared*.
14:21:02 <Gregor> ... lolwut
14:26:05 -!- copumpkin has quit (Quit: Computer has gone to sleep.).
14:27:07 -!- FireFly has joined.
14:54:12 -!- copumpkin has joined.
15:16:04 -!- Deewiant_ has quit (Ping timeout: 252 seconds).
15:16:51 -!- Deewiant has joined.
15:40:59 -!- Guest63383 has joined.
15:41:00 -!- Guest63383 has quit (Excess Flood).
15:44:58 -!- variable- has joined.
16:02:12 -!- pumpkin has joined.
16:03:55 -!- copumpkin has quit (Ping timeout: 260 seconds).
16:31:18 -!- augur has quit (Remote host closed the connection).
16:48:56 -!- CakeProphet has quit (Ping timeout: 252 seconds).
16:50:30 -!- pumpkin has changed nick to copumpkin.
16:52:53 -!- augur has joined.
16:57:50 -!- ais523 has joined.
17:05:30 -!- elliott has joined.
17:05:47 <elliott> helo
17:05:59 <ais523> ehlo
17:07:22 -!- elliott has quit (Read error: Connection reset by peer).
17:07:24 -!- elliott_ has joined.
17:17:14 <Vorpal> hm reading the last iwc annotation, it seems it is going to continue?
17:17:45 <Vorpal> not sure
17:25:12 -!- azaq23 has joined.
17:28:28 <elliott_> hmph, no respond to my issue after, like, A WHOLE DAY :p
17:28:34 <elliott_> s/:p/:P/
17:28:38 <Vorpal> elliott_: what issue?
17:30:21 <Vorpal> bbl
17:30:59 <elliott_> Vorpal: https://github.com/phonohawk/HsOpenSSL/issues/3
17:41:25 <Vorpal> back
17:42:07 <Vorpal> elliott_: template haskell uses bytecode interpreter? huh. Well, I guess it makes sense.
17:42:25 <Vorpal> elliott_: what are you using openssl bindings for?
17:42:28 <elliott_> Vorpal: Consider cross-compiling
17:42:47 <Vorpal> elliott_: true
17:42:50 <elliott_> And because iterIO depends on them; it'd be nice if that kind of auxiliary stuff was split up from the package but it isn't
17:43:11 <Vorpal> elliott_: and why are you using iterIO?
17:43:21 <elliott_> Iteratee-based IO is an alternative to lazy IO that offers better error handling, referential transparency, and convenient composition of protocol layers or parsers. This package provides iteratees based around pipe operators for hooking together application components and directing data flow. New users should see the tutorial in the Data.IterIO module documentation. Highlights of the library include:
17:43:21 <elliott_> Heavy emphasis on ease of use, ease of learning, and uniformity of mechanism.
17:43:21 <elliott_> Copious documentation.
17:43:21 <elliott_> Consistent EOF and error handling to avoid resource leaks and other issues in corner cases.
17:43:23 <elliott_> A set of iteratee parsing combinators providing LL(*) parsing while generally not consuming large amounts of memory for backtracking.
17:43:26 <elliott_> Seamless integration with attoparsec for LL(1) parsing.
17:43:28 <elliott_> See Data.IterIO for a discussion of the differences between iterIO and the two previous iteratee implementations (iteratee and enumerator).
17:43:36 <elliott_> Unless you know of a better iteratee package?
17:43:55 <elliott_> I don't want to write manual network code.
17:44:08 <Vorpal> hm, nice
17:44:26 <elliott_> If not iterIO I'd use enumerator, but I find iterIO easier to understand and more powerful
17:44:46 <Vorpal> elliott_: of course, real programmers would just poke the relevant registers on the NIC manually
17:44:57 <Vorpal> or get butterflies to do it
17:46:11 <elliott_> Vorpal: Well, I could just use standard handle-based IO, iteratees are probably slightly overkill, but I don't see why I should stop using them just because of a dependency issue
17:46:25 <Vorpal> fair enough
17:46:28 <elliott_> And it's not like they have much overhead in terms of code to using them so there's no harm done
17:46:54 <elliott_> It would be nice if I could make the packet reading/writing code work directly with iteratees rather than having to go through the cereal library
17:46:54 <elliott_> Not sure
17:47:02 <elliott_> That might be good for performance, I'll have to see
17:47:23 <Vorpal> elliott_: what are you doing networking for though?
17:47:27 <elliott_> Vorpal: mchost
17:47:33 <Vorpal> aha
17:48:41 <elliott_> Anyway, I'm trying to do things The Right Way, and iteratees are definitely The Right Way :-P
17:48:56 <Vorpal> right
17:49:48 <Vorpal> I like that compared to lisp of scheme, explicit recursion is a lot more rare in haskell.
17:49:52 <Vorpal> or*
17:50:05 <elliott_> Explicit recursion is rare in CL
17:50:07 <elliott_> They use LOOP
17:50:19 <Vorpal> elliott_: well yeah. But compared to scheme then
17:50:24 <Vorpal> and some lisp dialects
17:50:32 <elliott_> Well, nobody writes programs in scheme :D
17:50:32 <Vorpal> iirc it isn't all that uncommon in elisp
17:50:52 <Vorpal> elliott_: touche
17:51:45 <elliott_> Anyway, the iterIO maintainer fixed a bug I reported and released the new version to Hackage an hour after I emailed him about it, so I'm disinclined to switch to something else :)
17:51:59 <Vorpal> right
17:52:07 -!- copumpkin has changed nick to gribbles.
17:55:55 <elliott_> Also it lets me avoid Handles which is nice, since they have buffer support I don't need.
18:02:34 -!- Ngevd has joined.
18:02:52 <Ngevd> Hello
18:04:25 <Ngevd> S(S(SKK)(KS))(KK)
18:05:58 -!- gribbles has changed nick to copumpkin.
18:13:25 -!- Ngevd has quit (Ping timeout: 260 seconds).
18:34:00 -!- Ngevd has joined.
18:38:22 <Gregor> Ngevd: I am so glad that my idle comment has permanently changed your IRC identity.
18:38:34 <Ngevd> Yup
18:38:45 <Ngevd> Ngevd is easier to explain than Taneb
18:40:39 <ais523> what was the comment?
18:40:42 <ais523> I've been trying to figure out the new name
18:40:53 <ais523> at first I thought it was rot-13 or a variant, but it doesn't seem to be
18:41:00 <Ngevd> I almost had the additional middle name Elliott
18:41:08 <Ngevd> Which would make my initials NGEvD
18:41:20 <ais523> ah, initials
18:41:29 <ais523> and yet another elliott would be really confusing, there are already at least two
18:41:37 <elliott_> hello
18:41:46 <ais523> hi
18:41:50 <Ngevd> It's an old family name
18:41:52 <elliott_> <ais523> and yet another elliott would be really confusing, there are already at least two
18:42:00 <elliott_> ais523: I think everything about Taneb makes communication here more confusing
18:42:01 <Gregor> Ngevd is an old family name??? (lololol)
18:42:02 <ais523> that have been, in here
18:42:07 <Gregor> My old family name is Dodifer :P
18:42:25 <elliott_> "The esolanger who is aware of IWC's existence who is regularly in #esoteric and who lives in Hexham" was pretty ambiguous before he came along :P
18:42:30 <elliott_> s/ambiguous/unambiguous/
18:42:38 <ais523> wait, there are two Hexhamers in #esoteric?
18:42:43 <Ngevd> Me and elliott_
18:42:47 <Ngevd> And we have never me
18:42:48 <Gregor> (Six-sided hammers)
18:42:48 <Ngevd> t
18:42:53 <ais523> that's, umm, bizarre
18:42:58 <Ngevd> I know!
18:43:04 <ais523> given that Hexham is minor enough that elliott_ was surprised that I'd heard of it
18:43:10 <ais523> (and I hadn't done much more than hear of it)
18:43:14 <Ngevd> You've heard of it!?
18:43:19 <Gregor> It's surprising that they've never met given that the entire population of Hexham is six pigs and twelve farmers to maintain the six pigs.
18:43:27 <ais523> well, obviously; more surprising is that I'd heard of it before I'd met elliott_
18:44:03 <ais523> I've heard of lots of other places too, like Stourbridge and Halesowen
18:44:09 <Ngevd> Goodwife Hot
18:45:26 <elliott_> <ais523> wait, there are two Hexhamers in #esoteric?
18:45:34 <elliott_> ais523: Yes, this was as surprising to me as it was to you.
18:45:36 <elliott_> Also as surprising to Ngevd.
18:45:41 <elliott_> `pastelogs don't tell me you live in hexham
18:45:55 <ais523> I thought it was reasonably well-known that elliott_ lived in hexham
18:46:02 <HackEgo> http://codu.org/projects/hackbot/fshg/index.cgi/raw-file/tip/paste/paste.22620
18:46:06 <ais523> so presumably it was Ngevd that noticed the issue first
18:46:13 <elliott_> Argh, wrong quote
18:46:14 <ais523> elliott_: that was useless!
18:46:16 <elliott_> `pastelogs hexham
18:46:20 <Ngevd> It was Phantom_Hoover who noticed the issue
18:46:20 <HackEgo> http://codu.org/projects/hackbot/fshg/index.cgi/raw-file/tip/paste/paste.30798
18:46:49 <elliott_> gah, where is it
18:46:57 <Ngevd> July 15?
18:47:06 <ais523> 2008-03-14.txt:20:48:37: <Deewiant> google suggests hexham, england
18:47:10 <ais523> I wonder what that was about
18:47:23 <elliott_> wait
18:47:28 <elliott_> Gregor: http://codu.org/logs/_esoteric/
18:47:35 <elliott_> Where's months four to seven
18:47:53 <Gregor> elliott_: That is an excellent question.
18:47:53 <Deewiant> ais523: 2008-03-14 21:47:59( AnMaster) ehird, where are you from btw? (as in what country?)
18:48:00 <elliott_> I was wondering why `log was missing so much.
18:48:19 <elliott_> ais523: tl;dr Taneb mentioned he was from Northumberland, PH said "please don't tell me you live in Hexham", Taneb freaked out.
18:48:28 <elliott_> The next day, I heard about it, freaked out.
18:48:31 <ais523> Deewiant: ah, so elliott_ was a known hexham/just-next-to-hexham resident before the codu logs started
18:48:35 <elliott_> Henceforth we have vowed to never cross paths ever.
18:48:44 <elliott_> ais523: codu logs contain all clog logs
18:48:47 <elliott_> So no
18:49:26 <ais523> what about cmeme logs? or have they vanished?
18:49:40 <elliott_> I think so.
18:49:44 <ais523> also, you two will probably meet each other by chance, but not recognise each other
18:49:46 <ais523> and may already have done so
18:50:00 <Ngevd> Almost certainly
18:50:13 <Ngevd> I'm well known in Ponteland of all places
18:50:24 <Ngevd> I've never actually been outside of a car in Ponteland
18:50:27 <ais523> one of you should wear a hat with a stellated icosahedron on
18:50:47 <Ngevd> I sometimes where a John Egbert shirt in Hexham
18:50:57 <Ngevd> That is, in the middle of Hexham
18:51:01 <elliott_> famous in ponteland
18:51:11 <elliott_> the greatest achievement anyone has ever achieved
18:51:17 <Ngevd> Long story which I have already told
18:52:08 <elliott_> Gregor: Well? :P
18:55:07 <Gregor> elliott_: Latest regen of logs to fix the quit bug did weird things. Fixing more bugs :P
18:55:12 -!- augur has quit (Remote host closed the connection).
18:55:16 <cheater> http://en.wikipedia.org/wiki/Ponteland
18:55:17 <Gregor> i.e. gimme a sec
18:55:24 <cheater> come to think of it they recorded this on wikipedia
18:55:45 <cheater> next thing they'll start giving names and wikipedia articles to distinctive dog piles
18:58:33 <Ngevd> next thing they'll start giving names piles and distinctive articles to wikipedia dog
18:59:33 -!- Ngevd has quit (Quit: what a big quitter he is, eh?).
19:01:00 <cheater> quitter
19:10:09 -!- augur has joined.
19:23:32 <Phantom_Hoover> <Ngevd> It was Phantom_Hoover who noticed the issue
19:23:33 <Phantom_Hoover> Dude
19:23:40 <Phantom_Hoover> I didn't notice it.
19:23:46 <Phantom_Hoover> I intuited it with telepathyy.
19:23:57 <Phantom_Hoover> (It's like telepathy, but better.)
19:30:04 <Gregor> elliott_: Bug found, fixing.
19:31:21 -!- elliott has joined.
19:31:37 -!- elliott_ has quit (Read error: Connection reset by peer).
19:31:39 <elliott> -NickServ- Last failed attempt from: Elliott!3lli0tt@cpc1-woki6-2-0-cust904.6-2.cable.virginmedia.com on Sep 21 18:35:20 2011.
19:31:45 <elliott> Somebody needs to teach this fucker a lesson.
19:31:47 <elliott> This is like the third time.
19:32:04 <elliott> fizzie: Vorpal: Is there a way to go from that to their current nick?
19:32:29 <Vorpal> elliott: not that I know of.
19:32:39 <elliott> Lame. How am I going to yell at him now?
19:33:10 <Vorpal> elliott: I had a similar issue once, but then the ident proved to help me find him/her. Turned out to be a misconfigured pidgin client trying to id as for another network.
19:33:23 <olsner> if it's an actual attempt at stealing your account, maybe freenode's operators can find him for you
19:33:32 <elliott> olsner: I suspect it's simply: someone else called elliott.
19:33:37 <elliott> Especially considering the uppercase E.
19:33:47 <elliott> Also, freenode don't give a fuck about account owners, or they wouldn't drop nicks after like three days of no use.
19:33:51 <elliott> (FSVO three days.)
19:34:15 <olsner> hmm, right
19:34:57 <Gregor> elliott: To answer your previous question, there has never been any missing days in the log, and you're crazy for thinking there had been.
19:34:58 <Vorpal> elliott: not 3 days iirc?
19:35:02 <Vorpal> more like a week or two?
19:35:11 <elliott> `pastelogs don't tell me you live in hexham
19:35:20 <elliott> Vorpal: It's something like thirty to sixty days, I forget exactly, but it's ridiculous.
19:35:24 <HackEgo> http://codu.org/projects/hackbot/fshg/index.cgi/raw-file/tip/paste/paste.7949
19:35:27 <olsner> `log hexham
19:35:32 <HackEgo> 2011-09-21.txt:18:45:26: <elliott_> <ais523> wait, there are two Hexhamers in #esoteric?
19:35:37 <elliott> Gregor: And that's why there are no more lines in that pastelogs :P
19:35:38 <Vorpal> elliott: it seems to drop after extended inactivity
19:35:45 <elliott> Vorpal: No, it's not automatic.
19:36:00 <Vorpal> elliott: oh right, many other networks do automatic dropping
19:36:02 <ais523> `pastelogs hexham
19:36:02 <elliott> Someone has to go into #freenode and say "give me this nick" and they'll do it immediately if it hasn't been logged into for something like a month or two.
19:36:07 <HackEgo> http://codu.org/projects/hackbot/fshg/index.cgi/raw-file/tip/paste/paste.11100
19:36:09 <elliott> It should be much longer than that.
19:36:18 <Vorpal> elliott: most networks actually do it automatic.
19:36:20 <olsner> oh, HEXHAMers, now I finally managed to parse that word
19:36:20 <ais523> elliott: they don't seem to have a fixed time, it depends on other things
19:36:24 <Phantom_Hoover> <elliott> -NickServ- Last failed attempt from: Elliott!3lli0tt@cpc1-woki6-2-0-cust904.6-2.cable.virginmedia.com on Sep 21 18:35:20 2011.
19:36:29 <elliott> Vorpal: Isn't freenode's whole idea to be unlike "most networks"
19:36:32 <Phantom_Hoover> Is that a Hexham address?
19:36:34 <elliott> Most networks are terrible
19:36:37 <elliott> Phantom_Hoover: I hope so.
19:36:50 <Gregor> elliott: As near as I can tell, that is in fact the only line that matches exactly "don't tell me you live in hexham"
19:36:52 <Vorpal> elliott: hm maybe.
19:36:53 <olsner> I tried to make it into hex-hammers but it was not spelled the right way for that to work
19:36:55 <elliott> ais523: They do, but they claim to be slightly more wary if it's just reached that time.
19:37:06 <elliott> ais523: I'm fairly sure that's lies though, I've got about ten nicks dropped no questions asked.
19:37:07 <Gregor> `pastelogs don't tell me you live in hexham
19:37:12 <elliott> Gregor: http://codu.org/projects/hackbot/fshg/index.cgi/raw-file/tip/paste/paste.7949
19:37:16 <elliott> 2011-07-16.txt:16:01:00: <Phantom_Hoover> Please don't tell me you live in Hexham.
19:37:21 <elliott> That was missing previously.
19:37:30 <elliott> `pastelogs really makes me hate being alive
19:37:30 <Gregor> Oh; yeah, that's there now :P
19:37:33 <HackEgo> http://codu.org/projects/hackbot/fshg/index.cgi/raw-file/tip/paste/paste.17403
19:37:34 <elliott> I bet this'll get us 345 back.
19:37:37 <HackEgo> http://codu.org/projects/hackbot/fshg/index.cgi/raw-file/tip/paste/paste.19220
19:37:42 <elliott> http://codu.org/projects/hackbot/fshg/index.cgi/raw-file/tip/paste/paste.19220
19:37:43 <elliott> Yep.
19:37:48 <elliott> `logurl 2011-04-03.txt:19:48:31:
19:37:50 <HackEgo> http://codu.org/logs/log/_esoteric/2011-04-03
19:37:56 <Gregor> Apparently when you have a random bug that causes certain quits to conclude that no lines belong to any channel, it's easy to scrub whole giant swaths of history.
19:38:05 <elliott> Nice. Very nice.
19:38:06 <ais523> elliott: they claim to be more wary on dropping someone's only alternate nick
19:38:14 <Vorpal> Gregor: XD
19:38:23 <Vorpal> Gregor: quits on what form?
19:38:26 <elliott> 14:38:28: <elliott> 21:54:38 <catseye> HAAAAAAAAAAAAAAAAAAAAAAAAAAAA
19:38:26 <elliott> 14:38:28: <elliott> 21:54:48 <catseye> i had OS/2 Warp once.
19:38:26 <elliott> 14:38:28: <elliott> 21:55:02 <catseye> i had all those fucking floppies
19:38:26 <elliott> 14:38:28: <elliott> 21:55:04 <catseye> it never worked.
19:38:26 <elliott> 14:38:28: <elliott> some people are just poets
19:38:27 <elliott> Would like to reaffirm this as best poem.
19:38:33 <Gregor> Vorpal: I'm not rightly sure *shrugs*
19:38:39 <Vorpal> Gregor: ah.
19:38:46 <elliott> ais523: That's never happened to me. I don't remember how long elliott had been unused when I got it dropped, but it wasn't long.
19:38:51 <elliott> I feel no guilt because it was stolen from me in the first place :P
19:38:58 <olsner> elliott: I don't see the poetry
19:39:01 * Vorpal has quit (' -- DROP TABLE logs)
19:39:14 <Vorpal> (well, not quite)
19:39:16 <elliott> olsner: You're not looking hard enough.
19:39:21 <elliott> Try saying the lines aloud, as poetry.
19:39:26 * Vorpal has quit ('; DROP TABLE logs; --)
19:39:27 <Vorpal> there
19:39:54 <elliott> 14:54:26: <elliott> 11:14:27 <cpressey> There's a squirrel that lives near my building that I see every so often. I can recognize it's the same squirrel because it has no tail. It is a constant reminder that, visually speaking anyway, squirrels are approximately 50% tail.
19:39:55 <elliott> I think I was just doing a best-of-cpressey day :P
19:39:59 <ais523> elliott: it does look like a poem to me, just not a very good one
19:40:12 <elliott> ais523: How can a complete summary of computing be a bad poem?
19:40:17 <ais523> what color are the squirrels in the US?
19:40:25 <ais523> unto;
19:40:26 <olsner> the one with the squirrel is nice
19:40:42 <Vorpal> ais523: hm... Grey iirc?
19:40:53 <Vorpal> and brown in EU right?
19:40:53 <ais523> Vorpal: I'd prefer a reply from an American
19:40:57 <olsner> the most squirrelly color of them all, squirrel-colored
19:40:59 <ais523> no, that's all wrong
19:41:04 <Phantom_Hoover> 2011-09-21.txt:18:48:19: <elliott_> ais523: tl;dr Taneb mentioned he was from Northumberland, PH said "please don't tell me you live in Hexham", Taneb freaked out.
19:41:09 <ais523> they're most commonly grey in the UK, although there are a few red ones left in scotland
19:41:09 <Phantom_Hoover> Also not quite accurate.
19:41:22 <Phantom_Hoover> He was complaining about the rain and then I said that.
19:41:44 <olsner> taneb is from hexham?
19:41:47 <Vorpal> ais523: well yeah, the grey US ones are taking over in UK iirc. Think I saw a BBC produced program about that some years ago.
19:41:53 <ais523> there are no other esolangers in Birmingham, right?
19:41:59 <elliott> Phantom_Hoover: He definitely said Northumberland before that.
19:42:01 <elliott> But okay.
19:42:03 <Vorpal> maybe one of the idlers
19:42:06 <Phantom_Hoover> ais523, Hexham seems to be the only one.
19:42:14 <cheater> ais523: squirrels are very popular in london, they pretty much do not exist in germany
19:42:29 <ais523> *populous?
19:42:31 <Phantom_Hoover> elliott, sure, and that raised my suspicion, but a day before I asked him if he was in Hexham.
19:42:34 <ais523> or was that literally correct?
19:42:43 <elliott> Phantom_Hoover: Fiiiiiiiine.
19:42:43 <Vorpal> I seen them in Sweden. Not very common here. Been a year or so since I last saw one
19:42:46 <fizzie> I'm tempred to say "Taneb is from Heham?!" too, we haven't had enough shock yet.
19:42:48 <ais523> elliott hasn't always been in Hexham, at least
19:42:52 <elliott> fizzie: Tempred?
19:42:59 <fizzie> Tempted.
19:43:01 <Phantom_Hoover> Vorpal, can we please have a talk about the pluperfect.
19:43:03 <elliott> Tempred.
19:43:10 <Phantom_Hoover> Do you not have them in Swedish or?
19:43:16 <elliott> Phantom_Hoover: It's been years, he will never learn.
19:43:24 <elliott> At least he's mostly worked out his "has/have/had"s by this point.
19:43:25 <cheater> popular, because they are put there by the city. squirrels don't thrive on their own, they're not rats.
19:44:15 <Vorpal> speaking of animals, I got a bit of a scare today. I was driving up a highway exit today. A very curved one with poor visibility. Then I suddely saw two deer in the ditch on the side of the road. Thankfully not trying to cross the road.
19:44:28 <ais523> there was a squirrel living in the roof of the library at school
19:44:35 <ais523> it used to bask inside the flourescent lights
19:44:44 <Vorpal> I'm unsure if I would have been able to brake given the visibility there.
19:44:47 <cheater> lol
19:44:53 <elliott> rip deer
19:44:58 <cheater> the fluorescent squirrel
19:44:59 <cheater> nice
19:45:04 <Vorpal> <Phantom_Hoover> Vorpal, can we please have a talk about the pluperfect. <-- the what?
19:45:09 <elliott> Vorpal: Exactly.
19:45:17 <Phantom_Hoover> Vorpal, saw/seen.
19:45:19 <ais523> the porter (basically like a groundsman for the inside of a building) used to catch it every now and then, apparently using a trap baited with Bounty bars (which it really liked), and release it in the nearby woods
19:45:24 <Vorpal> oh past perfect
19:45:25 <ais523> but it always seemed to find its way back
19:45:25 <Vorpal> right
19:45:41 <olsner> Phantom_Hoover: that's not pluperfect
19:45:44 <ais523> it's surprisingly how quickly you get used to a squirrel running around inside the ceiling cavity
19:45:51 <Vorpal> Phantom_Hoover: I simply dropped the "have" there somehow
19:46:00 <Vorpal> Phantom_Hoover: yes, we have them, we call them pluskvamperfekt
19:46:03 <Phantom_Hoover> olsner, how not?
19:46:11 <cheater> ais523: surprisingly... surprising?
19:46:14 <ais523> pluperfect is "had verbed"
19:46:18 <ais523> cheater: err, rihgt
19:46:21 <ais523> *right
19:46:25 <cheater> rite
19:46:38 <Phantom_Hoover> Oh dear now I'm confused as well.
19:46:46 <Vorpal> Phantom_Hoover: anyway it was a simple typo of dropping a word.
19:46:51 <Vorpal> what's so bad about that?
19:46:51 <cheater> fnern
19:46:59 <Phantom_Hoover> Vorpal, that's not what 'typo' means but whatever.
19:47:19 <Vorpal> Phantom_Hoover: I meant to write "I have seen them"
19:47:48 <olsner> Phantom_Hoover: hmm, "had seen" is pluperfect, and I guess that's what you meant when you wrote just "seen" ... "saw" is definitely not pluperfect though
19:47:52 <cheater> typo is short for typographical error
19:48:03 <cheater> dropping a word is certainly an error in typography
19:48:13 <Phantom_Hoover> Yeah, except 'have seen', which is what Vorpal meant, is just perfect.
19:48:22 <elliott> <cheater> What is descriptivism? Etymology is literally meaning.
19:48:51 <cheater> elliott: leave me alone
19:49:00 <fizzie> Phantom_Hoover: They have both "have fooed" and "had fooed" forms, and even the auxiliary verb is very similar to English; 'har' + 'hade' vs. 'have' + 'had'.
19:49:35 <elliott> cheater: If I only made fun of everyone else's stupid remarks and not yours too, that would be discrimination.
19:49:57 <cheater> elliott: leave me alone
19:50:15 <elliott> Are you really trying the "I'M A VICTIM OF THE AWFUL ELLIOTT MONSTER" tack?
19:50:36 <Vorpal> elliott: cheater: why don't you two just /ignore each other?
19:51:18 <olsner> that would leave cheater unfairly unridiculed compared to the rest of us
19:51:43 <Phantom_Hoover> Vorpal, because elliott finds it fun and cheater craves attention.
19:51:56 <elliott> Vorpal: cheater won't /ignore me because he wouldn't be able to claim I'm stalking him around to make fun of him, I won't /ignore him since nobody else wants to deal with him just to point out his crap.
19:52:08 <Vorpal> Phantom_Hoover: Good points.
19:52:29 <Vorpal> elliott: I tend to ignore him, but he change nick every so often.
19:52:41 <elliott> Vorpal: So do most people.
19:52:45 <elliott> Well, FSVO most.
19:52:47 <elliott> But a fair number.
19:52:57 <Vorpal> yeah
19:53:00 <Phantom_Hoover> Vorpal, yes, sometimes he even adds numbers to the end of his nick WHAT IGNORE SYSTEM COULD COPE
19:53:41 <cheater> a true conundrum
19:53:42 <Vorpal> Phantom_Hoover: problem is, I know I different cheater on a different network who is okayish. I tried ignoring on nick* + isp but that changed too a few times.
19:54:05 <fizzie> Anyway! Quite a lot of squirrels in Finland, at least in some regions. I see them on the route to work/back once a week, and last year there was one practically every morning in one location.
19:54:18 <Vorpal> heh
19:54:21 <Phantom_Hoover> fizzie, it may be too late.
19:54:22 <cheater> i am surprised squirrels don't just freeze over there
19:54:34 <Phantom_Hoover> THE SQUIRRELS ARE MUSTERING THEIR STRENGTH
19:54:49 <elliott> Vorpal: Tell the other cheater to /nick personwhoplaysbytherules.
19:54:53 <fizzie> They do change color in winter.
19:55:07 <elliott> Also, does your client not do per-network ignores? Mine doesn't, but actually I'm not sure why.
19:55:08 <elliott> That would be a useful feature.
19:55:48 <Vorpal> elliott: XD
19:55:59 <Vorpal> <elliott> Also, does your client not do per-network ignores? Mine doesn't, but actually I'm not sure why. <-- nope, that would be useful.
19:56:18 <fizzie> You don't see them around that much in the middle of the winter though.
19:56:20 <Vorpal> elliott: anyway I'm planning on writing my own irc client
19:56:30 <elliott> Vorpal: You were planning that months ago.
19:56:36 <elliott> It's not exactly hard. :p
19:56:41 <olsner> Vorpal: heh, that sounded a bit like "Of course it doesn't! That would be useful."
19:56:44 <Vorpal> elliott: I learned project management from you
19:56:46 <Vorpal> :(
19:56:57 <fizzie> Irssi does per-network ignores.
19:57:00 <Phantom_Hoover> Vorpal, you should learn it from me.
19:57:01 <Vorpal> olsner: what did? my reply?
19:57:08 <Vorpal> XD
19:57:13 <olsner> yes, the one about it not doing per-network ignores
19:57:15 <Vorpal> Phantom_Hoover: no that would be even worse
19:57:20 <elliott> Vorpal: You mean the guy who wrote a compliant Funge interpreter in three days and who wrote something that could fully parse huge Minecraft dumps within three days?
19:57:29 <elliott> (OK, OK, exception that proves the rule.)
19:57:32 <Phantom_Hoover> Vorpal, what do you mean 'worse'.
19:57:40 <Vorpal> fizzie: I tried irssi, never really liked it. It gets annoying to remember that /w 82 is #minecraft or whatever
19:57:55 <elliott> I suggest not being a member of any channels named #minecraft, they're all awful.
19:58:07 <Vorpal> Phantom_Hoover: would never get anywhere
19:58:07 <ais523> we should find a network that doesn't have a #minecraft yet
19:58:14 <ais523> and create a channel dedicated to something better there
19:58:14 <fizzie> Vorpal: There are scripts to help dealing with that, but sure, it's not very optimal.
19:58:20 <elliott> I bet OFTC doesn't, but I bet they'd also not allow one.
19:58:31 <ais523> what's OFTC?
19:58:34 <Phantom_Hoover> They have an Oolite one.
19:58:40 <Vorpal> elliott: it is actually a minecraft server channel for that server. Like our MC channel, but for that network. A much smaller network than freenode. So it works.
19:58:56 <elliott> ais523: Software in the Public Interest's official IRC network;
19:59:01 <fizzie> In fact, don't een be on any channels that have "minecraft" as substring, it's safer that way.
19:59:07 <elliott> ais523: so by proxy Debian's, OpenOffice's, Arch Linux's, OpenWrt's, ...
19:59:13 <Vorpal> only reason I'm on OFTC is #llvm
19:59:15 <elliott> , PostgreSQL's, ...
19:59:23 <Phantom_Hoover> <Vorpal> Phantom_Hoover: would never get anywhere
19:59:27 <Vorpal> elliott: wait, you mean #archlinux on here is not official?
19:59:39 <elliott> Vorpal: Well, I guess you can be a member of SPI without using OFTC.
19:59:45 <Phantom_Hoover> nonononono, you get to thing about how awesome the thing will be and then go on to thinking about how awesome something else will be it is the best.
19:59:45 <elliott> And nothing stops people having multiple official channels.
19:59:48 <Vorpal> elliott: SPI?
19:59:54 <elliott> Vorpal: Software in the Public Interest. Keep up.
20:00:00 <Vorpal> elliott: I never heard of it
20:00:24 <Vorpal> Phantom_Hoover: doesn't help me meet deadlines
20:00:31 <elliott> OFTC have their own ircd for some reason.
20:00:38 <Vorpal> hm
20:00:52 <elliott> Anyway, I guess it's likely that Debian are the main users of OFTC. :p
20:00:55 <Vorpal> elliott: really? I thought it was just a patched ratbox or some such
20:00:59 <elliott> But a fair number of software projects have their channels there.
20:01:04 <elliott> Vorpal: Well, it's "oftc-hybrid".
20:01:09 <elliott> Most IRCs are derivatives of other IRCs.
20:01:10 <elliott> erm
20:01:11 <elliott> ircd
20:01:11 <elliott> s
20:01:13 <Vorpal> yeah
20:01:30 <ais523> elliott: hmm, somehow I expected that lot to all be on Freenode
20:01:32 <Vorpal> elliott: anyway freenode have their own too. A patched charybdis
20:01:54 <Vorpal> elliott: the only major recent ircd that is not a fork of something else that I can think of is inspircd.
20:02:12 <elliott> ais523: Debian were on freenode, then jumped ship to OFTC.
20:02:13 <Vorpal> and the only two good major ircds I know of are inspircd and charybdis.
20:02:22 <elliott> Vorpal: ngircd isn't a derivative of anything
20:02:28 <Vorpal> oh right
20:02:33 <Vorpal> elliott: who uses it though?
20:02:45 <elliott> Vorpal: Who uses inspircd?
20:02:51 <elliott> ais523: Basically OFTC is the result of freenode being incompetent and awful. :p
20:03:04 <Vorpal> oftc is worse if anything
20:03:11 <elliott> It is?
20:03:21 <elliott> I haven't heard of any troubles with them, but I haven't been on much.
20:03:23 <Phantom_Hoover> elliott, wait what do FreeNode do.
20:03:36 <elliott> Phantom_Hoover: s/FreeNode/freenode/, and what do you mean what do they do? They run an IRC network.
20:03:58 <Vorpal> elliott: yeah getting a cloak for your host seemed utterly complex, and was only given when you could show you had a good reason to need one or some such shit
20:04:22 <elliott> Vorpal: That doesn't mean that they're worse, it just means that they're more conservative, which is kind of the point.
20:04:24 <Vorpal> I would be okay with normal cloak like freenode, or the network scrambling the host name
20:04:30 <Phantom_Hoover> elliott, yes but what are they bad about.
20:04:55 <elliott> Phantom_Hoover: They're not exactly very professional, and their policies are pretty bad.
20:05:09 <elliott> I think the staffers are not well-liked by a lot of people, but I don't really keep track of this stuff.
20:05:30 <Phantom_Hoover> Is the botpocalypse an example of this.
20:05:37 <Vorpal> elliott: iirc some of the worst people got booted from the staff. Still a few bad ones left. But I don't really keep up with that either.
20:05:41 <elliott> Phantom_Hoover: I would say so :P
20:05:55 <Vorpal> I know someone who does, so I get to hear some of it that way, of course that is biased.
20:06:22 <Vorpal> Phantom_Hoover: hm?
20:06:36 <elliott> Vorpal: The CTCP thing.
20:06:39 <Vorpal> oh right
20:06:43 <Gregor> "The Zune HD web browser scores 5/100 in the Acid3 test." X-D
20:06:44 <Vorpal> yeah that is stupid .
20:06:51 <elliott> A certain person who we don't know who it is at _all_ complained, then Plazma, etc.
20:06:56 <Vorpal> Gregor: ouch
20:07:06 <pikhq_> Gregor: Quite "impressive" considering in-development IE gets 100/100.
20:07:20 <Vorpal> Gregor: that is fucking terrible. Considering even IE6 got more iirc.
20:07:37 <Gregor> Vorpal: The Zune's browser is uniquely bad. You have to use it to believe it.
20:07:48 * pikhq_ would be willing to bet on a port of IE5
20:07:49 <elliott> s/'s browser//
20:07:49 <Vorpal> firefox 6 gets 100/100 of course
20:07:57 <Vorpal> pikhq_: but why
20:07:59 <Gregor> pikhq_: I have discovered that the greatest thing about the Zune is that it has legitimate fanboys who I can troll endlessly since they're fans of literally the worst media player ever made.
20:08:17 <pikhq_> Vorpal: IE5 is the most portable IE.
20:08:18 <Phantom_Hoover> Gregor, wasn't Tycho a fan?
20:08:28 <Vorpal> pikhq_: eh, it still requires windows doesn't it?
20:08:29 <Gregor> Phantom_Hoover: Mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmrrrrp?
20:08:31 <pikhq_> Vorpal: It actually ran on not-Windows!
20:08:37 <Vorpal> pikhq_: oh right, mac os
20:08:39 <Vorpal> indeed
20:08:47 <pikhq_> Vorpal: It was offered for Windows, Solaris, and HP-UX.
20:08:58 <Vorpal> pikhq_: and iirc mac os classic
20:08:58 <pikhq_> IE for Mac was a completely different product that shared the brand name.
20:09:02 <Vorpal> ah right
20:09:15 <pikhq_> IE for UNIX was a direct port.
20:09:30 <Vorpal> pikhq_: IE for mac was quite weird. Of course it shared the "moving mouse pointer = slower download" issue of all classic mac os
20:09:43 <Vorpal> that was more due to the OS
20:09:48 <Gregor> Anyway, the Zune, with Liberate (to get rid of their shitty UI and reintroduce a shittier one but with better app compatibility) and an FTP server is approaching a tolerable device.
20:10:10 <Gregor> Though the lack of hardware volume buttons is seriously the worst offense any media player could commit.
20:10:11 <pikhq_> Yeah, the design of classic Mac OS was pretty ridiculous.
20:10:46 <pikhq_> It made plenty of sense on the first few Mac models.
20:10:50 <Vorpal> yes
20:10:57 <Vorpal> pikhq_: I used Mac OS 9
20:11:00 <pikhq_> And got to be utterly ridiculous when running on PowerPCs.
20:11:21 <Vorpal> yes
20:11:59 <pikhq_> Shame they didn't switch to A/UX in the late 80s, though.
20:12:36 <Vorpal> yeah
20:12:54 <elliott> Gregor: How do you adjust the volume on a Shuffle, I wonder
20:13:21 <Gregor> elliott: Hardware
20:13:34 <olsner> using the volume control, perhaps
20:13:35 <elliott> Gregor: Hmm, it has volume buttons?
20:13:40 <Gregor> Yes
20:13:44 <elliott> Gregor: And one other button, right?
20:13:51 <elliott> olsner: The Shuffle has ~no controls.
20:13:56 <Gregor> The new ones have five I think ...
20:14:05 <elliott> I'm talking about the ones that are basically headphones.
20:14:10 <pikhq_> elliott: Some had hardware buttons, some had buttons *on the fucking headphones*.
20:14:13 <Gregor> The shuffle has always had controls, just no screen.
20:14:13 <elliott> Oh right those new ones.
20:14:16 <elliott> No I mean the ones before that.
20:14:28 <pikhq_> Before that, they had hardware volume buttons.
20:14:34 <Gregor> There has never been a shuffle with no controls whatsoever, just (like pikhq_ said) they've been in stupid places.
20:14:50 <elliott> "It also no longer had volume or track controls on the device itself. Instead, the packaged iPod earbuds included a three-button device on the right earbud cord."
20:14:52 <pikhq_> There was nothing intervening. Went from buttons on the device to buttons on the fucking headphones, the right dicks.
20:14:56 <elliott> So lame, it should have a one-button device.
20:15:03 <elliott> One button goes to the next option, sitting for enough time on one option selects it.
20:15:08 <elliott> And a "do nothing" option in each menu.
20:15:18 <elliott> It would be SO USELESS.
20:15:37 <Gregor> Anyway, point being, even when Apple went "lol NO SCREEN", they STILL put hardware volume, because OF COURSE YOU PUT HARDWARE VOLUME CONTROLS.
20:15:39 <pikhq_> It's already pretty dang useless.
20:16:03 <pikhq_> I want to play random music approx. never.
20:16:43 <Gregor> They should make a CloudShuffle that just plays completely random garbage from iTunes via Verizon 3G :P
20:16:47 <elliott> pikhq_: You might not, but 99 percent of iPod user s do.
20:16:49 <Gregor> With no controls (EXCEPT VOLUME)
20:16:50 <elliott> s/user s/users/
20:17:04 <elliott> Gregor: It should just tune into random radio frequencies.
20:17:09 <elliott> For three minutes at a time.
20:17:15 <Gregor> elliott: Not terrible enough.
20:17:17 <pikhq_> elliott: Yeah, fuck that shit.
20:17:32 <elliott> Gregor: How do you propose to make it more terrible
20:17:39 <Gregor> elliott: CloudShuffle :P
20:17:48 <Gregor> Except, only select songs that are in the, say, 25 most popular on iTunes.
20:18:06 <Gregor> So it's repetitive, horrible, and there's not a damned thing you can do about it.
20:18:10 <elliott> Gregor: Dude, that still plays music (please give your idiotic jokes that "DATS NOT MUSIC" to /dev/null).
20:18:13 <elliott> This would just play static.
20:18:16 <elliott> Different static. Every three minutes.
20:18:20 <Gregor> Ohhhhhhhhhhhhhhhhhhhh
20:18:23 <elliott> The chances of hitting on a real radio are approximately 0 :P
20:18:26 <elliott> s/radio/radio station/
20:18:29 <Gregor> I thought you implied that it actually seeked :P
20:18:35 <elliott> Fuck no, it just picks a random frequency.
20:18:36 <Gregor> Not just completely random frequencies, but random /stations/ :P
20:18:37 <pikhq_> 25 most popular on itunes.co.jp will make it even more repetitive.
20:18:38 <elliott> And seeks to it.
20:18:57 <elliott> So you go "please stop here, please stop here" when it briefly passes over a real station on the path to Radio Bzzzzzzt.
20:19:11 <Phantom_Hoover> elliott, dude, radio frequencies are wide enough that you'd get real stations often enough.
20:19:24 <elliott> Phantom_Hoover: You're implying that it only picks from frequencies actually used for radio.
20:19:39 <elliott> Here's a list of frequencies that could, theoretically, be used to transfer sounds of some sort: Every frequency.
20:19:54 <quintopia> but gamma is VERY EXPENSIVE
20:19:58 <Phantom_Hoover> elliott, except receiving almost all of those is impossible.
20:20:01 <quintopia> requires atomic power
20:20:13 -!- sllide has joined.
20:20:15 <elliott> Phantom_Hoover: If it picks a station it can't receive, it just kills the user.
20:20:16 <Gregor> Also, bringing a RFShuffle on a plane is illegal :P
20:20:43 <pikhq_> elliott: That would be totally awesome if it picks up ELF band.
20:20:57 <elliott> You might even get some whalesong!
20:21:09 <elliott> quintopia: It comes with its own nuclear power station.
20:21:11 <elliott> Attached to the device
20:21:12 <elliott> .
20:21:23 <elliott> Apple: "The smallest media player, ever."
20:21:30 <elliott> Fuck You Industries: "It's so big. So big. You don't even know. So big."
20:22:07 <pikhq_> The US runs a radio station on 76 Hz.
20:22:30 <Gregor> Idonno, I still feel like the CloudShuffle is the superior device.
20:22:36 <elliott> pikhq_: Wow, what?
20:22:45 <ais523> pikhq_: how long would an antenna need to be to pick that up with any reasonable amount of gain?
20:22:56 <elliott> Gregor: The problem is that it'd actually be not entirely terrible sometimes :P
20:23:02 <elliott> I mean, people, in general, don't mind pop music.
20:23:07 <Gregor> elliott: But that's the draw!
20:23:08 <pikhq_> elliott: It exists to provide one-way transmission to submarines world-wide.
20:23:09 <ais523> in the millilightsecond range, I think
20:23:23 <Gregor> Even with shiny Appleness, the RFShuffle would never sell a single unit :P
20:23:31 <Gregor> People would actually be stupid enough to buy CloudShuffle.
20:23:40 <elliott> Gregor: Well, yeah, I'm telling you to stop being holier-than-thou on IRC and to go sell this thing :P
20:23:59 <Gregor> But ... but I am holier than thou :(
20:24:34 <pikhq_> ais523: I'm not entirely sure how big the receiving antennas are. The broadcasting site is a few square miles, though.
20:24:46 <elliott> Gregor: Actually the "internet streaming-based shuffley device" idea is a really good one.
20:24:56 <elliott> Gregor: Residential connections will be fast enough to act as servers for that soon enough.
20:24:57 <Gregor> Noooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo D-8
20:25:15 <pikhq_> Russia also has a station on 82 Hz.
20:25:19 <elliott> Gregor: It sure beats syncing a shitload of FLACs to a device that doesn't have nearly enough space to store all of them.
20:25:31 <pikhq_> Aaaah, cold war.
20:26:36 <Vorpal> pikhq_: yes, except didn't they shut them down since then iirc?
20:26:51 <pikhq_> Vorpal: What, and risk losing funding?
20:27:06 <Vorpal> pikhq_: in Russia though?
20:27:22 <pikhq_> Okay, Russia probably did, because the fall of the USSR was pretty... Harsh.
20:27:33 <Vorpal> pikhq_: that is an understatement
20:27:56 <pikhq_> On the other hand, I'd imagine it wouldn't take too much to run once it's already set up.
20:28:12 <pikhq_> Most of your cost is going to be laying out miles and miles of antenna.
20:28:28 <elliott> What's the highest frequency anyone does radio on :P
20:28:39 <Vorpal> pikhq_: given the length of the antenna wouldn't the resistance in the antenna be a rather significant problem?
20:29:11 <Vorpal> and anyway, if it is worldwide the current usage will be huge anyway
20:29:33 <pikhq_> Oh, huh. Technically, they're not using antennas for that.
20:29:40 <Vorpal> pikhq_: oh?
20:29:45 <pikhq_> They're running leads into the earth to use the *planet* as an antenna.
20:29:47 <elliott> Don't they have a facility that uses the Earth itself as an antenna.
20:29:50 <elliott> Ha, snap.
20:29:51 <Vorpal> pikhq_: awesome
20:30:03 <elliott> http://upload.wikimedia.org/wikipedia/commons/3/3d/Clam_Lake_ELF.jpg
20:30:12 <elliott> Lake Elf.
20:30:15 <pikhq_> Yup.
20:30:28 <Vorpal> pikhq_: that is sure going to require a HUGE current to work?
20:30:31 <Vorpal> surely*
20:30:44 <pikhq_> Yeaaah.
20:30:57 <Vorpal> is it safe?
20:31:20 <pikhq_> Well, there's no *known* health risks, at least.
20:31:44 -!- monqy has joined.
20:31:45 <pikhq_> It probably would be, because there is no way a 76 Hz wave is going to ionise.
20:33:27 <pikhq_> elliott: Anyways, seems the highest radio frequency used for data is somewhere around 90 GHz.
20:33:36 <elliott> Pssht, I have CPUs faster than that.
20:33:40 <Vorpal> pikhq_: hm true
20:33:51 <pikhq_> And there's an permitted-unlicensed band at 60 GHz.
20:33:56 <pikhq_> s/an/a/
20:34:27 <Vorpal> pikhq_: whoa. 90 GHz? Where is that in relation to visible light?
20:34:30 <Vorpal> still way below?
20:34:48 <pikhq_> Vorpal: Visible light starts at 405 THz.
20:34:52 <Vorpal> oh right
20:34:55 <elliott> A radio station that broadcasted on the light spectrum would be THE COOLEST.
20:35:08 <Vorpal> elliott: well there is data communcation using
20:35:11 <Vorpal> using infrared*
20:35:24 <Vorpal> so, technically that is way over 90 GHz
20:35:31 <Vorpal> of course it is not exactly radio
20:35:50 <Vorpal> pikhq_: where does infrared start?
20:36:10 <elliott> Vorpal: Sorry but I cannot see infrared with my eyes.
20:36:22 <Vorpal> pikhq_: oh and:
20:36:24 <Vorpal> The US maintained two sites, in the Chequamegon-Nicolet National Forest, Wisconsin and the Escanaba River State Forest, Michigan (originally named Project Sanguine, then downsized and rechristened Project ELF prior to construction), until they were dismantled, beginning in late September 2004.
20:36:25 <pikhq_> Vorpal: ~1 THz.
20:36:31 <Vorpal> looks like US tore them down
20:36:35 <Vorpal> pikhq_: heh
20:37:05 <Vorpal> pikhq_: infrared is quite large then. What part is normally used for remotes and such? Probably near visible light since normal digital cameras can capture th at
20:37:06 <Vorpal> that*
20:37:39 <Vorpal> elliott: a DVD drive uses visible light to transfer data. A very short distance, sure, but still
20:37:40 <pikhq_> Yeah, that's somewhere in near infrared...
20:37:58 <pikhq_> From ~200 THz to ~400 THz.
20:37:59 <elliott> Vorpal: AND I CAN'T SEE IT
20:38:05 <elliott> I want a radio station where I can GO AND VIEW THE BEAMS
20:38:22 <Vorpal> elliott: I imagine it would be a soft glow over everything
20:38:29 <elliott> Good enough
20:38:35 <Vorpal> anyway it wouldn't work well, because there is too much noise in visible light
20:38:51 <Vorpal> pikhq_: interestingly on digital cameras IR light from remotes tend to look bluish-white
20:38:51 <pikhq_> elliott: That'd be a shitty radio station — most of the point of using radio for modulation is that most things we build with are radio-transparent.
20:39:02 <elliott> pikhq_: I DON'T CARE HOW SHITTY IT IS
20:39:03 <elliott> I WANT IT
20:39:22 <pikhq_> Vorpal: I'd be willing to bet each color sensor is having about equal response to it, then.
20:39:45 <Vorpal> elliott: oh and looking at a broadcast radio antenna would probably blind you. They tend to be around 60 000 W
20:40:08 <elliott> Vorpal: Coooooooooooooooooooooooooooooooooooooooooooooooool
20:40:21 <pikhq_> Vorpal: I don't think that says that much about the lumens.
20:40:22 <elliott> <Vorpal> pikhq_: interestingly on digital cameras IR light from remotes tend to look bluish-white
20:40:26 <elliott> I feel this is an appropriate time to state
20:40:27 <elliott> FUCK
20:40:28 <elliott> TETRACHROMATS
20:40:31 <Vorpal> pikhq_: hm. Or it was just too intense when aimed at the actual lamp. I should check it out reflected against a white wall. Of course, I don't know if the white wall reflects in IR...
20:40:53 <elliott> I need another X chromosome and statistical unlikelihood.
20:40:55 <Phantom_Hoover> elliott, makes sense, given that they're all female.
20:40:56 <Vorpal> elliott: they can't see in IR either
20:40:58 <elliott> ONLY THEN CAN I SEE MORE COLOURS
20:41:14 <pikhq_> Incidentally, the estimated amount of energy the Sun's light striking the Earth imparts is about 174 PW.
20:41:20 <elliott> Vorpal: I DON'T CARE, THEY CAN SEE MORE COLOURS
20:41:22 <elliott> I WANT MORE COLOURS
20:41:36 <Phantom_Hoover> Vorpal, humans can see very slightly in near IR.
20:41:38 <pikhq_> Yes, that is the right unit; petawatts.
20:42:04 <pikhq_> Phantom_Hoover: And humans can see quite well in near UV if you remove their lenses.
20:42:08 <Vorpal> Phantom_Hoover: not enough to see a remote though
20:42:22 <Phantom_Hoover> Vorpal, *very* near IR.
20:42:27 <Vorpal> Phantom_Hoover: right
20:42:44 <Vorpal> pikhq_: heh.
20:43:09 <Vorpal> wait a second, what exactly defines IR? Isn't it basically "wavelengths below what a human can see"?
20:43:21 <pikhq_> It's a very loosely defined term.
20:43:26 <Vorpal> which means humans seeing ANYTHING from IR would be absurd.
20:44:11 <pikhq_> But it seems to mean "Wavelengths below what a human can see that are produced largely by object's heat"
20:44:49 <Vorpal> heh
20:45:04 <pikhq_> Well, if there's a strict max on the wavelength that roughly corresponds to the bottom of human range, then *some* humans could plausibly see it. Presuming that the limits of the visible range are variable.
20:45:07 <Vorpal> yeah seeing in the full IR would be weird.
20:45:26 <Vorpal> so would full UV of course
20:46:07 -!- oerjan has joined.
20:46:28 -!- boily has quit (Quit: WeeChat 0.3.5).
20:47:06 <elliott> hi oerjan
20:47:08 <elliott> hoerjan
20:47:27 <oerjan> helliott
20:47:42 <fizzie> I don't think near infrared (the night vision/TV remote) zone has much to do with heat.
20:48:15 <Vorpal> lower IR certainly does though
20:48:18 <fizzie> Thermal imaging long-wavelength IR, sure.
20:48:32 <oerjan> if it's hot enough, it does :P
20:48:33 <fizzie> The name-share is a bit confusing.
20:48:45 <oerjan> (as does visual light, of course)
20:49:08 <Vorpal> well yeah
20:49:14 <Vorpal> and UV
20:49:51 <Vorpal> oerjan: oh btw, I think the English term is "visible light", not "visual light"
20:49:57 <oerjan> er right
20:50:26 <oerjan> actually the peak wavelength of a blackbody never reaches below somewhere in blue
20:52:04 <oerjan> http://en.wikipedia.org/wiki/File:PlanckianLocus.png
20:54:20 <fizzie> But that's just the peak; I assume the intensity overall (incl. UV) will increase if you keep increasing the temperature.
20:54:33 <oerjan> yeah
20:54:42 <oerjan> http://en.wikipedia.org/wiki/Black_body
20:55:23 <oerjan> "When an object is visually white, it is emitting a substantial fraction as ultraviolet radiation.
20:55:27 <oerjan> "
20:56:30 <ais523> Vorpal: you're right on that
21:00:09 <oerjan> ok well the peak radiation does reach UV, it's the total color which has blue as limit
21:00:16 <oerjan> (visible color)
21:00:28 <elliott> q
21:00:38 <oerjan> uantum
21:00:58 <Vorpal> oerjan: right
21:01:10 <Vorpal> oerjan: but that is only because we can't see UV I assume?
21:01:21 <oerjan> presumably
21:01:31 <Vorpal> <pikhq_> Phantom_Hoover: And humans can see quite well in near UV if you remove their lenses. <-- anyone described what it looked like?
21:01:46 <Vorpal> I don't really want to remove my lens to find out
21:01:52 <ais523> pikhq_: I imagine humans wouldn't be able to focus on anything at all if you removed their lens
21:01:54 <ais523> so it'd just be a blur
21:02:04 <ais523> also, the near UV would be picked up primarily by blue cones
21:02:07 <Vorpal> ais523: yes but what colour I mean
21:02:11 <ais523> so UV would be visible as a shade of blue
21:02:16 <Vorpal> ais523: well yes, but what shade I meant
21:02:29 <Vorpal> would it be bluer than anything they seen before?
21:02:32 <Vorpal> or such
21:02:49 <ais523> my guess is it'd be the purple that you see coming out from UV lights (because their color tends to overlap into the visible range a bit)
21:02:59 <Vorpal> ais523: also you could insert an artificial lens I guess?
21:03:01 <ais523> it wouldn't be bluer, it'd just be less red and less green for its brightness
21:03:27 <Vorpal> ah
21:03:38 <ais523> Vorpal: did you know that a human's black-and-white vision has a wider field-of-view than their color vision?
21:03:56 <ais523> I've done an experiment where a colored object was placed in such a place that I could see it, just not tell what color it was
21:03:57 <Vorpal> well yes
21:04:10 <oerjan> from the planck's law formula, it seems like every frequency's emission is increasing with temperature.
21:04:13 <ais523> and you just think "I don't know what color that is", it doesn't look like anything
21:04:14 <Vorpal> never done the experiment though
21:04:18 <ais523> and if you try to visualise it, it's a sort of grey
21:04:24 <ais523> as that's what you visualise colorless things /as/
21:04:36 <ais523> or at least, what I visualise them as, and probably most humans
21:04:39 <Vorpal> ais523: oh the other hand you can't see the outline very clearly either
21:04:44 <Vorpal> on*
21:04:46 <ais523> indeed
21:05:11 <Vorpal> ais523: so visualizing it would be a blur, and possibly a headache
21:05:45 <ais523> well, I knew what the object actually was, just not its color
21:05:47 <elliott> <ais523> I've done an experiment where a colored object was placed in such a place that I could see it, just not tell what color it was
21:05:52 <elliott> ais523: where was it placed?
21:05:55 <ais523> as I'd been told, and seen examples of the object in several colors
21:06:00 <ais523> elliott: far to the right of my field of vision
21:06:00 <Vorpal> <ais523> or at least, what I visualise them as, and probably most humans <-- I prefer the checkerboard pattern of transparent found in image editors
21:06:03 <ais523> it was moved in slowly until I could see it
21:06:22 <ais523> Vorpal: but you don't think uncolored objects in real life look like that, surely?
21:06:28 <elliott> ais523: hmm, it's very hard for me to perceive my lack of colour vision there but I suppose that's the point
21:06:31 <Vorpal> ais523: I was joking.
21:06:36 <elliott> you can't exactly tell you have no colour vision in dreams, either
21:06:46 <ais523> elliott: yes, you remember the colors of things in the boundary
21:06:51 <elliott> I think that's kind of wonderful, in that complete colourblindness isn't greyscale, it's just uncoloured
21:06:59 <ais523> and have a reflex action to look at something that moves into it that you can't see the color of and don't know
21:07:05 <elliott> heh
21:07:08 -!- pumpkin has joined.
21:07:09 <Vorpal> elliott: there is no colours in dreams? Huh? I'm pretty sure I seen vividly green grass and red flowers in dreams
21:07:22 <oerjan> ais523: since violet triggers red cones as well, i'd expect UV to do the same ...
21:07:25 <ais523> Vorpal: you don't have color vision during dreams, because your eyes are shut
21:07:34 <elliott> Vorpal: some dreams have colour, some don't
21:07:38 <Vorpal> ais523: well yes, you don't have vision at all
21:07:40 <ais523> oerjan: violet /light/ doesn't, but violet /color/ does
21:07:51 <elliott> I imagine colour turns on with lucidity but don't quote me on that
21:07:52 <ais523> because it involves a mix of red, blue, and purple light
21:08:00 <oerjan> ais523: um yes it does.
21:08:00 <elliott> ais523: hmm, I think I just managed to look leftwards enough to perceive the colourlessness of things there, but I dunno
21:08:04 <elliott> could have just been me fooling myself
21:08:23 <ais523> oerjan: the color response curve of cones is a bell curve, isn't it?
21:08:29 <Vorpal> elliott: probably, anyway if you turned your eyes then no.
21:08:37 <elliott> Vorpal: of course not
21:09:01 -!- copumpkin has quit (Ping timeout: 258 seconds).
21:09:06 <oerjan> ais523: i'm pretty sure it's not.
21:09:06 <ais523> of rods too
21:09:20 <ais523> oerjan: http://en.wikipedia.org/wiki/Cone_%28vision%29
21:09:29 <ais523> why bother having an argument when you can just check Wikipedia?
21:09:59 <olsner> arguments are more fun, obviously
21:10:12 <oerjan> ais523: you just search faster :P
21:10:31 <ais523> oerjan: that's because I went straight to Wikipedia, and guessed the article name and disambiguator
21:10:46 <ais523> it turns out that that isn't the primary disambiguator, but someone had thoughtfully already added a redirect
21:11:12 <fizzie> That thing is not very well modeled with a Gaussian.
21:13:52 <oerjan> but violet _is_ the shortest pure spectral color wavelength.
21:14:19 <oerjan> so why does it look redder than blue?
21:15:51 <fizzie> You could easily imagine the tail of the red curve overtaking the tail of the blue in the short end.
21:15:59 <oerjan> yes, that might be
21:17:08 <fizzie> CIE "standard observer" response functions (used in the XYZ colorspace, and indirectly in Lab) are based on rather bad 1920s approximations of the spectral response of humans; http://en.wikipedia.org/wiki/CIE_1931_color_space#Color_matching_functions
21:20:28 -!- pumpkin has changed nick to copumpkin.
21:21:17 <elliott> What is it with the past harshing our vibe?
21:21:22 <elliott> Deep thoughts.
21:23:46 <oerjan> `log harsh
21:23:52 <HackEgo> 2011-02-10.txt:20:49:55: <oerjan> <elliott> Gregor: disable that <-- now that's a bit harsh, might want to announce the result to the channel anyhow though
21:24:09 <elliott> `log harshing
21:24:13 <HackEgo> 2011-09-21.txt:21:21:17: <elliott> What is it with the past harshing our vibe?
21:24:15 -!- Madoka-Kaname has joined.
21:24:19 <elliott> `log harshing
21:24:23 <HackEgo> 2011-09-21.txt:21:24:19: <elliott> `log harshing
21:24:26 <elliott> `log harshing
21:24:29 <HackEgo> 2011-09-21.txt:21:24:19: <elliott> `log harshing
21:24:31 <elliott> lame
21:24:33 <Gregor> `log harsh.*vibe
21:24:37 <HackEgo> 2011-09-21.txt:21:24:33: <Gregor> `log harsh.*vibe
21:24:40 <Gregor> :P
21:24:47 <Gregor> `pastelogs harsh.*vibe
21:24:52 <HackEgo> http://codu.org/projects/hackbot/fshg/index.cgi/raw-file/tip/paste/paste.9945
21:25:10 <elliott> See, nobody else is as cool as me.
21:25:19 <oerjan> elliott: i have an idea for using `log without it returning `log searches, unfortunately it only works if everyong uses it
21:25:26 <elliott> `logurl 2011-05-21.txt
21:25:27 <Gregor> `pastelogs harsh.*buzz
21:25:28 <HackEgo> http://codu.org/logs/log/_esoteric/2011-05-21
21:25:29 <oerjan> namely, put [] around one of the chars
21:25:31 <HackEgo> http://codu.org/projects/hackbot/fshg/index.cgi/raw-file/tip/paste/paste.28118
21:25:36 <oerjan> *everyone
21:25:37 <elliott> oerjan: ais523 has a perfect solution to it
21:25:41 <elliott> well, relatively perfect
21:25:46 <elliott> [^]]search term
21:25:52 <Gregor> That's right, only I would mix those metaphors :P
21:25:56 <elliott> oerjan: anyway, I deliberately left them in :)
21:26:01 <Gregor> `pastelogs killjoy
21:26:05 <HackEgo> http://codu.org/projects/hackbot/fshg/index.cgi/raw-file/tip/paste/paste.26726
21:26:20 <elliott> Apparently "harshing my mellow" is vastly more popular than the vibe-based alternative.
21:26:24 <Gregor> Apparently oklopol is the ultimate killjoy.
21:26:25 <elliott> At least according to Google suggestions.
21:27:04 <ais523> elliott: that only works when searching /for/ `log searches
21:27:19 <elliott> ais523: umm, howso?
21:27:28 <elliott> `log [^]]pontificate
21:27:31 <HackEgo> 2010-10-07.txt:22:47:08: <alise> cpressey: PC-BSD; pontificate
21:28:00 <ais523> `log [^]]njanoewhr;awheroiawer
21:28:03 <HackEgo> No output.
21:28:07 <ais523> oh right, I see
21:28:07 <elliott> ais523: Your point?
21:28:14 <ais523> it's ^] not ^`
21:28:15 <ais523> I got confused
21:28:27 <Gregor> `log [^]]quarv
21:28:31 <HackEgo> No output.
21:28:34 <Gregor> Hm
21:28:35 <Gregor> Indeed.
21:28:40 <elliott> `run log "asoijdhdsghsglfg" | grep -v '<elliott> `run log "asoijdhdsghsglfg"'
21:28:43 <HackEgo> No output.
21:29:18 -!- augur has quit (Remote host closed the connection).
21:31:09 <fizzie> The `log [^]]foo will still find the bazillion earlier plain `log foos.
21:32:00 -!- augur has joined.
21:32:19 <elliott> <oerjan> elliott: i have an idea for using `log without it returning `log searches, unfortunately it only works if everyong uses it
21:32:26 <elliott> This one only works if everyong uses it, too.
21:33:00 <elliott> egrep -v '\d\d:\d\d:\d\d: <[^>]*> `log'
21:33:00 <Vorpal> huh, why is gmail marking every single new mail I get as "important" based on words it contain.
21:33:01 <elliott> Tadaaaaaaaaaa
21:33:10 <elliott> egrep -v '\d\d:\d\d:\d\d: <[^>]*> `(log|pastelogs)'
21:33:11 <Vorpal> I wonder if I can turn that off. It is bloody useless
21:33:18 <elliott> Vorpal: I hid the markers.
21:33:33 <Vorpal> elliott: doesn't help wrt using IMAP client for gmail
21:33:36 <Vorpal> which I do
21:34:11 <elliott> It doesn't do it for IMAP, apart from the "important" folder.
21:34:15 <elliott> At least according to a quick search.
21:34:16 <Vorpal> well yeah
21:34:22 <elliott> So just delete that folder.
21:34:28 <elliott> What, you can disable conversation view in Gmail now.
21:34:31 <Vorpal> hm. guess that would work
21:34:42 <Vorpal> elliott: you can? Why would that be useful though?
21:34:51 <elliott> Itw ouldn't.
21:35:02 <elliott> s/tw /t w/
21:35:27 <Vorpal> actually I can think why it would be useful. Gmail likes to put every mail I get from the automated course web system thingy at university in a single convo
21:35:32 <Vorpal> that is kind of annoying
21:35:50 <Vorpal> but not in general no
21:36:09 <fizzie> "sed 's/Gregor/Gre\xE2\x80\x8Bgor/g'"?-)
21:36:35 <Gregor> *cough cough*
21:36:37 <Vorpal> okay there are other reasons: "Important mainly because of your interaction with messages in the conversation" for example
21:36:39 <Gregor> fizzie: I have no idea to what you refer.
21:36:41 <Gregor> >_>
21:36:42 <Gregor> <_<
21:36:43 <Vorpal> whatever that one really means
21:36:46 <olsner> UTF-8 ... is that Grègor?
21:37:02 <elliott> fizzie: wat
21:37:03 <oerjan> <fizzie> > all $ zipWith (<) [2,6] [3,5]
21:37:04 <fizzie> It has both "Gre" and "gor" in it, so probably not.
21:37:06 <elliott> `help
21:37:06 <HackEgo> Runs arbitrary code in GNU/Linux. Type "`<command>", or "`run <command>" for full shell commands. "`fetch <URL>" downloads files. Files saved to $PWD are persistent, and $PWD/bin is in $PATH. $PWD is a mercurial repository, "`revert <rev>" can be used to revert to a revision. See http://codu.org/projects/hackbot/fshg/
21:37:08 <oerjan> i think you want or
21:37:09 <fizzie> It smells like some sort of a nick-ping avoidance thing.
21:37:16 <elliott> fizzie: Where is that?
21:37:18 <Vorpal> fizzie: where is that from?
21:37:21 <Vorpal> elliott: snap
21:37:21 <oerjan> > or $ zipWith (<) [2,6] [3,5]
21:37:22 <lambdabot> True
21:37:28 <fizzie> elliot, Vorpal: bin/log.
21:37:29 <oerjan> er wait
21:37:32 <oerjan> > and $ zipWith (<) [2,6] [3,5]
21:37:33 <lambdabot> False
21:37:33 <Vorpal> oh
21:37:37 <oerjan> *and
21:37:39 <elliott> oerjan: Does having (fmap f x) behave differently to (x >>= return . f) violate the monad laws?
21:37:43 <elliott> Or applicative laws?
21:37:43 <fizzie> oerjan: CakeCake already said that.
21:37:48 <elliott> fizzie: I'll fix that.
21:37:55 <oerjan> elliott: Monad or Functor
21:37:59 <Gregor> fizzie: I was considering making the same nick-ping avoidance for everyone, but decided only I'm important.
21:38:02 <elliott> oerjan: Eh?
21:38:13 <oerjan> elliott: nothing applicative in there
21:38:29 <Vorpal> Gregor: why not just insert a UTF-8 zero width space?
21:38:40 <Gregor> Vorpal: DUHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH
21:38:41 <Vorpal> I don't know any irc client smart enough to nick ping over that
21:38:45 <elliott> `fetch http://codu.org/projects/hackbot/fshg/index.cgi/raw-file/0eea30ea7bb0/bin/log
21:38:46 <HackEgo> 2011-09-21 21:38:46 URL:http://codu.org/projects/hackbot/fshg/index.cgi/raw-file/0eea30ea7bb0/bin/log [185/185] -> "log" [1]
21:38:48 <elliott> `run mv log bin
21:38:49 <HackEgo> No output.
21:38:56 <Vorpal> Gregor: oh is that what you did. I thought olsner said it was Grègor?
21:38:59 <oerjan> elliott: most types have at most one valid fmap candidate, i believe
21:39:13 <Vorpal> elliott: you removed the anti-nick ping?
21:39:14 <Gregor> Vorpal: olsner was wrong :P
21:39:14 <Vorpal> why
21:39:14 <oerjan> elliott: and since x >>= return . f must be one, they must be equal
21:39:29 <elliott> Vorpal: It wasn't an anti-nick ping, it was corrupting certain sections of the log for one specific term.
21:39:33 <Gregor> fizzie: Damn you for letting elliott see that >_<
21:39:37 <Vorpal> elliott: I see
21:39:46 <ais523> Gregor...
21:39:51 <olsner> ah, I missed the e before the \x stuff, it looked like it replaced the e
21:39:52 <Vorpal> elliott: so you are against inserting zero width space?
21:39:52 <elliott> oerjan: Hmm, I guess it doesn't matter actually
21:39:53 <oerjan> elliott: in any case it's a gross violation of the intent
21:39:59 <olsner> the rest was pure guess
21:40:06 <elliott> Vorpal: <elliott> Vorpal: It wasn't an anti-nick ping, it was corrupting certain sections of the log for one specific term.
21:40:07 <fizzie> Gregor: Actually I thought (at first glance) it was converting "Gregor" into something derogatory, and that elliott had added it. :p
21:40:09 <elliott> That is the reason I reverted.
21:40:14 <elliott> fizzie: Good idea
21:40:26 <Vorpal> elliott: so there was a bug in where it inserted that zero width space?
21:40:35 <elliott> Vorpal: <fizzie> "sed 's/Gregor/Gre\xE2\x80\x8Bgor/g'"?-)
21:40:40 <elliott> <elliott> Vorpal: It wasn't an anti-nick ping, it was corrupting certain sections of the log for one specific term.
21:40:42 <Vorpal> elliott: yes, it seems okay
21:40:47 <elliott> I will henceforth continue this conversation entirely with quotes.
21:40:48 <elliott> <elliott> Vorpal: It wasn't an anti-nick ping, it was corrupting certain sections of the log for one specific term.
21:40:50 <Vorpal> elliott: it seems like an anti-nick ping for me
21:40:57 <elliott> Okay.
21:40:59 <Vorpal> elliott: stop being such an arse
21:41:08 <elliott> No.
21:41:19 <Vorpal> seriously, anti nick-ping with zero width space is an awesome idea
21:41:29 <elliott> I'm glad to hear you think that. However that was not an anti nick-ping.
21:41:40 <ais523> ttoille
21:41:49 <Vorpal> elliott: so it would still ping Gregor? Are you suggesting that?
21:42:19 <elliott> Vorpal: I was unaware that freenode had added a feature to their servers where there would always be a user with the nick "Gregor" on #esoteric.
21:42:38 <Vorpal> elliott: ... you are just being stupid now
21:42:51 <Gregor> He's saying that it's an anti-Gregor-ping, not a (general) anti-nick-ping, And wah wah wah :P
21:42:59 <Vorpal> Gregor: oh okay.
21:43:15 <elliott> Gregor: I'm not really saying anything, I'm just trying to get Vorpal to stop talking to me.
21:43:30 <Vorpal> Gregor: can you get a current user list from inside bin/log?
21:43:40 <Vorpal> then you could insert a zero width space in each nick in there
21:43:40 <elliott> Vorpal: Yes.
21:43:46 <Vorpal> elliott: where?
21:43:53 <elliott> `ls /var/irclogs
21:43:55 <HackEgo> ​_ai \ _corewars \ _esoteric \ _esoteric-minecraft \ _glogbot \ _matrixofsolidity \ _plof \ _scapegoat \ index.php \ log \ log.css \ log.js \ raw \ stalker.php
21:44:01 <elliott> `ls /var/irclogs/_esoteric/????-??-??-raw.txt
21:44:03 <HackEgo> ls: cannot access /var/irclogs/_esoteric/????-??-??-raw.txt: No such file or directory
21:44:06 <Vorpal> elliott: so you would have to parse it manually for nicks
21:44:08 <elliott> `ls /var/irclogs/_esoteric/????-??-??.raw.txt
21:44:08 <Vorpal> right
21:44:09 <HackEgo> ls: cannot access /var/irclogs/_esoteric/????-??-??.raw.txt: No such file or directory
21:44:16 <elliott> `ls /var/irclogs/_esoteric
21:44:17 <Vorpal> better solution please
21:44:18 <HackEgo> 2003-01-18-raw.txt \ 2003-01-18.txt \ 2003-01-19-raw.txt \ 2003-01-19.txt \ 2003-01-20-raw.txt \ 2003-01-20.txt \ 2003-01-21-raw.txt \ 2003-01-21.txt \ 2003-01-22-raw.txt \ 2003-01-22.txt \ 2003-01-23-raw.txt \ 2003-01-23.txt \ 2003-01-24-raw.txt \ 2003-01-24.txt \ 2003-01-25-raw.txt \ 2003-01-25.txt \ 2003-01-26-raw.txt
21:44:26 <elliott> Vorpal: What on earth is not better about that?
21:44:31 <elliott> You can package up the "list of current users" into a command.
21:44:44 <elliott> `run cat 2003-01-18-raw.txt | egrep 'NAMES|JOIN|PART|QUIT'
21:44:46 <HackEgo> cat: 2003-01-18-raw.txt: No such file or directory
21:44:47 <Vorpal> elliott: something that doesn't need to parse every single log from the start to get the current user list?
21:44:58 <Vorpal> if every file start with NAMES then fine
21:45:02 <Vorpal> otherwise it is annoying
21:45:02 <Deewiant> `run cat /var/irclogs/_esoteric/2003-01-18-raw.txt | egrep 'NAMES|JOIN|PART|QUIT'
21:45:04 <HackEgo> ​< 1042851425 ? :clog!unknown@unknown.invalid JOIN :#esoteric. \ < 1042851425 ? :clog!nef@bespin.org JOIN #esoteric. \ < 1042851716 ? :hcf!unknown@unknown.invalid QUIT :. \ < 1042852578 ? :deltab!unknown@unknown.invalid QUIT :brunner.freenode.net irc.freenode.net. \ < 1042852625 ? :deltab!~deltab@espians.com JOIN
21:45:05 <Vorpal> especially in shell
21:45:15 <Gregor> Honestly the solution I would probably do is just s/\(<[^>]*\)\(.>\)/\1ZWSHERE\2/g'
21:45:26 <Gregor> But I suspect elliott would zap that too.
21:45:28 <elliott> Gregor: People can ping inside messages.
21:45:29 <Vorpal> Gregor: what?
21:45:38 <Vorpal> Gregor: brain parse error
21:46:04 <Gregor> elliott: Yes, but that's considerably more rare than just the nick talking. I'm just trying to reduce, not eliminate.
21:46:09 <Vorpal> Gregor: it is your bot, you can just override whatever elliott does
21:46:20 <Gregor> It's HackBot. HackBot is anarchy.
21:46:27 <Vorpal> well okay, but you run it
21:46:47 <ais523> Gregor: clearly you should modify HackEgo's output routines, so they can't be tinkered with from inside the bot
21:46:49 <fizzie> HackBot edit-wars: the best.
21:46:55 <oerjan> stubbornocracy
21:47:11 <Vorpal> heh
21:47:18 <elliott> <Vorpal> well okay, but you run it
21:47:27 <Vorpal> elliott: ?
21:47:33 <elliott> In which Vorpal is confronted with the idea that not everyone operates on the Vorpal principles of "repeatedly revert until the other party gets bored".
21:48:02 <oerjan> ais523: i didn't think it was possible to modify HackEgo's output routine
21:48:17 <elliott> oerjan: It is if you have access to the machine it runs on.
21:48:22 <Gregor> oerjan: How do you think I added botloop avoidance?
21:48:23 <ais523> oerjan: from inside the bot, no
21:48:56 <oerjan> elliott: Gregor: the "Learn to read context" course is thataway.
21:49:15 <Gregor> oerjan: Context is for losers.
21:49:19 <elliott> oerjan: <ais523> Gregor: clearly you should modify HackEgo's output routines, so they can't be tinkered with from inside the bot
21:49:25 <Madoka-Kaname> Gregor, go learn Japanese
21:49:27 <elliott> Note "Gregor:".
21:49:39 <Vorpal> oerjan: you is the one failing at context.
21:49:44 <elliott> Vorpal: "Are".
21:49:46 <oerjan> elliott: i was pointing out it is already impossible to tinker
21:49:49 <Gregor> Madoka-Kaname: Gureegoru
21:49:50 <Vorpal> elliott: right
21:49:51 <elliott> The "learn to use the word are" course is thataway.
21:49:54 <Vorpal> who is Madoka-Kaname?
21:50:00 <elliott> oerjan: You are misparsing.
21:50:04 <elliott> Vorpal: Lymia.
21:50:07 <Vorpal> oh okay
21:50:11 <elliott> oerjan: "They" =/= the output routines.
21:50:15 <oerjan> elliott: oh
21:51:03 <Gregor> "They" there was the ping avoidance codezzz.
21:51:08 <oerjan> Vorpal: /whois is your friend
21:51:36 <Vorpal> Important mainly because you often read messages with this label. <-- what? You mean no label at all? Just sitting there in my inbox?
21:51:38 <Vorpal> Right.
21:52:03 <Vorpal> <oerjan> Vorpal: /whois is your friend <-- did that, but "+ [Madoka-Kaname] (~moe@unaffiliated/cirno-chan): Moe Moe Power~ <3" meant nothing to me
21:52:17 <Vorpal> I see no mention of "Lymia" there, nor do I know the normal host of that user.
21:52:41 <Vorpal> okay further down there is logged in as, but due to a bug that line sometimes show up in the server tab in my irc client
21:52:43 <Deewiant> Lymia is cirno-chan
21:52:45 <Vorpal> so I didn't notice it
21:52:47 <oerjan> Vorpal: you don't see a line with account : Lymia ?
21:53:03 <Vorpal> oerjan: as I said just above, it ended up in the wrong tab for unknown reasons
21:53:37 <elliott> Gregor: Anyway, the annoying thing about ping-avoidance is that it makes `log non-idempotent.
21:53:48 <elliott> Well, I suppose it isn't already, since it takes a random line, but the point is that it messes up copying.
21:53:50 <Gregor> *waaaaaaaaaaaaaaaaaaaaaah*
21:54:03 <elliott> Ah, now I'm convinced, I'll add it immediately
21:54:05 <Vorpal> elliott: ddg sometimes make some hilarious mis-suggestions. Try "code indentation" (without quotes)
21:54:07 <Gregor> :P
21:54:11 <fizzie> "Better call the WAAH-bulance."
21:54:20 <Vorpal> It suggested a LaTeX package, nice touch but not quite what I wanted
21:54:51 <elliott> Vorpal: It prioritises user-content sites like StackExchange, I think.
21:54:58 <elliott> It also searches API docs and the like.
21:55:09 <oerjan> !echo !echo hi
21:55:10 <Vorpal> elliott: so very geared towards programmers?
21:55:12 <EgoBot> ​!echo hi
21:55:26 <elliott> Vorpal: Only if it thinks the API docs are relevant.
21:55:31 <Vorpal> right
21:55:32 <elliott> StackExchange is not programmer-only.
21:55:38 <Vorpal> oh?
21:55:40 <Vorpal> didn't know that
21:55:41 <oerjan> <EgoBot> ​!echo hi
21:55:47 <elliott> http://stackexchange.com/sites
21:56:02 <elliott> There's even
21:56:02 <elliott> Jewish Life and Learning beta
21:56:02 <elliott> Q&A for those who base their lives on Jewish law and tradition and anyone interested in learning more
21:56:04 <oerjan> ok putty definitely does not copy zero-length spaces
21:56:12 <elliott> Gardening and Landscaping beta
21:56:12 <elliott> Q&A for gardeners and landscapers
21:56:35 <Vorpal> elliott: are they quite as well frequented as the programming parts though?
21:56:39 * Phantom_Hoover → sleep
21:56:40 -!- Phantom_Hoover has quit (Quit: Leaving).
21:58:33 <elliott> Probably not.
21:58:47 <elliott> They're separate sites and all.
21:58:53 <elliott> StackExchange =/= Stack Overflow.
22:02:26 <Vorpal> oh come on, ddg special cases xkcd
22:04:11 <elliott> Vorpal: Eh?
22:04:26 <Vorpal> elliott: try searching xkcd. It inlines the last comic
22:04:37 <Vorpal> didn't for a few other web comics I tried
22:04:40 <elliott> Vorpal: I bet it does that for anything it thinks is a webcomic. Or maybe any blog.
22:04:58 <elliott> But anyway, good punishment for searching for xkcd.
22:05:01 <Vorpal> elliott: hm https://duckduckgo.com/goodies.html indicates otherwise
22:05:09 <Vorpal> it lists it as a "special query"
22:05:35 -!- sllide has quit (Ping timeout: 260 seconds).
22:07:27 <elliott> Fair enough :P
22:07:54 <elliott> https://duckduckgo.com/?q=(%3E_%3C) -- lol
22:10:03 <ais523> monqy: hey, I didn't know you played Crawl
22:10:12 <ais523> Henzell's learndb has you credited as the author of the "autodie" script
22:10:30 <elliott> I did, that's how I got the squarelos stuff
22:10:39 <monqy> ais523: i dont play crawl
22:10:46 <monqy> i used to though
22:10:50 <ais523> hmm, ah I see
22:10:55 <elliott> crawl is a bad game for bad people
22:11:09 <ais523> and you created autodie to get the same effect as playing by hand, just much faster?
22:12:02 <monqy> if by same effect you mean getting things out of the way, yes
22:12:21 -!- Patashu has joined.
22:12:28 <ais523> no, I meant dying
22:12:30 <monqy> oh
22:12:43 <monqy> it's called autodie because of its suicidal tendencies
22:13:26 <monqy> I was trying to (partially) automate crawl in hope that I could get a bunch of the boring parts out of the way in hope that i could enjoy it. but then i got fed up with scripting crawl (its lua and i dislike lua etc etc etc)
22:14:27 <monqy> so now I'm just giving up on crawl until it gets to a point where I like it (though I'm doubtful this will ever happen) or someone makes a fork I like (doubtful here as well)
22:19:18 <elliott> im auto die
22:21:31 <oerjan> <ais523> that's, umm, bizarre
22:21:52 <ais523> monqy: did you see autorobin?
22:21:56 <monqy> yes
22:22:00 <oerjan> more bizarre is that i joked about it before it happened
22:22:01 <ais523> also, dtsund has made a fork with a similar idea to what you just suggested
22:22:04 <Vorpal> elliott: you were right about feedback to ddg.
22:22:06 <ais523> but it hasn't shortened the game much yet
22:22:09 <monqy> I've heard of that fork as well
22:22:10 * oerjan swats elliott with synchronicity -----###
22:22:18 <Vorpal> elliott: works well. Quick response, something like half an hour or so.
22:23:05 <monqy> despite not playing the game, I do still hang around in ##crawl (and ##crawl-dev but you probably noticed me there)
22:23:18 <elliott> oerjan: :D
22:23:36 <Vorpal> elliott: seems it is used for the colour picker, though he did agree that I had a good point about it seeming a little strange to normal users who did not know the workings of the code.
22:24:37 <elliott> brb
22:24:40 <Vorpal> elliott: I think this issue, or more accurately the quick and informative response, made me like the site more. Would never have gotten that from google XD
22:26:09 <oerjan> `log next-door neighbor
22:26:10 <HackEgo> ​/home/hackbot/hackbot.hg/multibot_cmds/lib/limits: line 5: /hackenv/bin/log: Permission denied \ /home/hackbot/hackbot.hg/multibot_cmds/lib/limits: line 5: exec: /hackenv/bin/log: cannot execute: Success
22:26:18 <oerjan> wtf
22:26:34 <oerjan> Gregor: WHAT ARE YOU DOING
22:26:46 <monqy> `log next-door neighbour
22:26:48 <HackEgo> ​/home/hackbot/hackbot.hg/multibot_cmds/lib/limits: line 5: /hackenv/bin/log: Permission denied \ /home/hackbot/hackbot.hg/multibot_cmds/lib/limits: line 5: exec: /hackenv/bin/log: cannot execute: Success
22:26:52 <Gregor> Hm
22:27:19 <oerjan> monqy: i'm pretty sure i don't spell it british. hm or maybe i did, because of the context.
22:27:19 <Gregor> `file bin/log
22:27:21 <HackEgo> bin/log: POSIX shell script text executable
22:27:27 <Gregor> `run ls -l bin/log
22:27:28 <HackEgo> ​-rw-r--r-- 1 5000 0 185 Sep 21 22:27 bin/log
22:27:38 <Gregor> `run chmod 0755 bin/log
22:27:39 <HackEgo> No output.
22:27:40 <elliott> Gregor: lymia
22:27:46 <elliott> bet she used this alt. nick
22:27:50 <elliott> `help
22:27:50 <HackEgo> Runs arbitrary code in GNU/Linux. Type "`<command>", or "`run <command>" for full shell commands. "`fetch <URL>" downloads files. Files saved to $PWD are persistent, and $PWD/bin is in $PATH. $PWD is a mercurial repository, "`revert <rev>" can be used to revert to a revision. See http://codu.org/projects/hackbot/fshg/
22:27:55 <oerjan> `log next-door neighbor
22:28:00 <HackEgo> 2011-09-21.txt:22:26:09: <oerjan> `log next-door neighbor
22:28:02 <elliott> oh
22:28:04 <monqy> elliott: would that be lymee or Madoka-Kaname
22:28:05 <elliott> my fault
22:28:08 <elliott> :D
22:28:21 <monqy> oh
22:28:23 <oerjan> `log next[- ]door neighbou?r
22:28:24 <Gregor> eelliott
22:28:26 <HackEgo> 2011-07-12.txt:19:53:16: <oerjan> by some freak coincidence taneb is elliott's next door neighbor
22:28:31 <elliott> lol
22:28:33 <oerjan> there you go :P
22:30:58 <oerjan> `log live in [Hh]exham
22:31:01 <HackEgo> 2011-01-22.txt:00:58:06: <Phantom_Hoover> elliott, I know you live in Hexham and I know your surname.
22:31:08 <oerjan> `log live in [Hh]exham
22:31:12 <HackEgo> 2011-07-16.txt:21:47:10: <elliott> Taneb: Are you serious do you live in Hexham.
22:31:28 <Gregor> oerjan: It's already case-insensitive
22:31:32 <oerjan> oh.
22:31:33 <Gregor> `log lIvE In HEXam
22:31:36 <Gregor> Erm
22:31:37 <HackEgo> 2011-09-21.txt:22:31:33: <Gregor> `log lIvE In HEXam
22:31:42 <Gregor> It is not spelling-insensitive though :P
22:31:48 <oerjan> shocking!
22:31:53 <Gregor> `log lIvE In HEXhaM
22:31:57 <HackEgo> 2011-09-21.txt:18:45:41: <elliott_> `pastelogs don't tell me you live in hexham
22:38:50 -!- nooga has quit (Ping timeout: 260 seconds).
22:41:42 -!- ais523 has quit (Remote host closed the connection).
22:43:18 <oerjan> <Vorpal> I seen them in Sweden. Not very common here. Been a year or so since I last saw one
22:43:48 <oerjan> i've seen a squirrel outside my window not long ago
22:44:06 <oerjan> may have been this week, or previous one
22:44:39 <Gregor> When europeople come to Purdue, they frequently comment on how many squirrels there are here.
22:44:50 <Gregor> And my response is "... huh? Y'know, we have chipmunks too. And jackrabbits."
22:45:32 <oerjan> um chipmunks are squirrels
22:45:53 <Gregor> oerjan: Yesyes, but in common parlance they're not.
22:46:45 <Gregor> One also doesn't frequently say "Look at that big squirrel!" when talking about a woodchuck.
22:47:10 <oerjan> o kay
22:47:26 <Vorpal> Gregor: one doesn't?
22:47:36 -!- copumpkin has quit (Quit: Computer has gone to sleep.).
22:47:54 -!- micahjohnston has joined.
22:48:30 -!- audy has joined.
22:48:52 <oerjan> <elliott> fizzie: Tempred? <-- fizzie tempered his temptations. he's secretly a vulcan, you know.
22:49:23 <Vorpal> Gregor: well okay, one says "oh I guess it is Groundhog Day"
22:49:44 <Vorpal> (sorry, that was a Slash'EM reference)
22:50:22 <Gregor> Vorpal: In the same way that one only refers to humans as animals when specifically making a point about humans being animals. Otherwise the term "non-human animals" is unnecessary and cumbersome. This is the nature of species names in common parlance, they're neither particularly accurate nor particularly (whatever the word is for "including all species derived from a common ancestor")
22:50:59 <oerjan> <Vorpal> Phantom_Hoover: I simply dropped the "have" there somehow
22:51:06 <Vorpal> Gregor: are you sure there is a word for "including all species derived from a common ancestor"?
22:51:24 <Gregor> Vorpal: I'm quite sure that there's the inverse, not sure about that word.
22:51:34 <oerjan> i believe one of the differences between norwegian and swedish is that swedes frequently drop the "have" in perfect forms
22:52:03 <Vorpal> Gregor: what would the inverse be?
22:52:21 <Gregor> Vorpal: ... not including all species derived from a common ancestor ...
22:52:30 <Vorpal> Gregor: well duh
22:52:49 <Gregor> e.g. since birds evolved from dinosaurs but birds aren't commonly referred to as dinosaurs, the name "dinosaur" is <that>
22:52:57 <Vorpal> Gregor: I thought you meant a single word for the inverse...
22:53:07 <Gregor> There is a single word for that.
22:53:26 <Vorpal> oerjan: we do? Never noticed
22:53:49 <Vorpal> I would actually say "Jag har sett" in that case
22:53:50 <oerjan> Gregor: "clade"
22:53:56 <Gregor> oerjan: No.
22:54:49 <oerjan> Gregor: um i was responding to your earlier comment
22:54:52 <Gregor> oerjan: Oh, I thought we were g---right :P
22:55:02 <Gregor> Yeah, clade is right for the original, but it's also a noun :P
22:55:10 <oerjan> so for the later one, "not clade", or paraphyletic iirc
22:55:13 <Gregor> MONOPHYLETIC
22:55:19 <Gregor> Paraphyletic being the inverse.
22:55:22 <Gregor> Thankee
22:55:44 <Gregor> Point is, species names in common parlance are neither particularly accurate nor particularly monophyletic.
22:57:09 <oerjan> Vorpal: "När jag varit i Norge ..." or so, i think it maybe for subordinate clauses only
22:57:17 <Gregor> And that, my friends, is why chipmunks are not squirrels :P
22:57:22 <oerjan> *may be
22:57:32 <Vorpal> oerjan: hm. That works, if somewhat informal
22:57:47 <elliott> Gregor: Your MOM is a squirrel.
22:57:56 <elliott> In comm onparlance.
22:57:58 <elliott> In common parlance.
22:58:10 <elliott> "The industry standard for image resizing
22:58:10 <elliott> Enlarge images up to 1000% without sacrificing quality" -- uh huh
22:59:05 <Gregor> elliott: It's trivial to /enlarge/ images arbitrarily without sacrificing quality.
22:59:17 <Gregor> Hell, with no interpolation at all you're not sacrificing quality.
22:59:27 <elliott> Gregor: In common parlance...
22:59:34 <Gregor> *ba-dum* :P
23:09:36 <elliott> Gregor: We're still waiting for the *tsh*.
23:09:49 <Gregor> THERE SHALL BE NO TSH
23:10:09 <elliott> LET THERE BE TSH
23:10:33 <Gregor> THERE SHALL NEVER BE
23:10:49 <Gregor> (LET THEM EAT TSH)
23:14:12 -!- elliott has set topic: god bless haskell america | 12345678!&^ | http://codu.org/logs/_esoteric/.
23:14:17 <elliott> topic was a bit long
23:14:20 <elliott> and it's after 3.10.2011
23:14:22 <elliott> by a long time
23:15:02 <Gregor> Uhhhh ... no?
23:15:19 <elliott> oh
23:15:21 <elliott> hmm
23:15:23 <elliott> weird
23:15:26 <elliott> what is it with time
23:15:32 <Gregor> Did ... did you just interpret that as a US date?
23:15:37 <elliott> no i just
23:15:42 <elliott> didn't realise that this wa sthe 9th month
23:15:45 <elliott> `pastelogs Hel/Finland
23:15:49 <HackEgo> http://codu.org/projects/hackbot/fshg/index.cgi/raw-file/tip/paste/paste.20061
23:15:51 -!- calamari has joined.
23:16:02 -!- elliott has set topic: Esolang event @ Hel/Finland on 3.10.2011: https://wiki.helsinki.fi/display/lambda/esoteeriset+ohjelmointikielet | god bless haskell america | 12345678!&^ | http://codu.org/logs/_esoteric/.
23:16:05 -!- calamari has left.
23:16:05 <elliott> there we go
23:16:06 <Gregor> Let them eat squid!
23:16:09 <elliott> rip calamari
23:16:25 <elliott> monqy: rip
23:17:11 <monqy> hi
23:17:15 <elliott> hirp
23:18:16 -!- calamari has joined.
23:31:06 <elliott> ?pl do foo <- st; return (foo >>= f)
23:31:06 <lambdabot> (line 1, column 13):
23:31:07 <lambdabot> unexpected ";"
23:31:07 <lambdabot> expecting letter or digit, variable, "(", "`", "!!", ".", operator or end of input
23:31:10 <elliott> ?undo do foo <- st; return (foo >>= f)
23:31:10 <lambdabot> st >>= \ foo -> return (foo >>= f)
23:31:13 <elliott> ?. pl undo do foo <- st; return (foo >>= f)
23:31:13 <lambdabot> (f =<<) `fmap` st
23:31:19 <elliott> oerjan: I blame you
23:31:59 -!- copumpkin has joined.
23:36:37 -!- FireFly has quit (Quit: FireFly).
23:38:06 <oerjan> wat
23:38:14 <elliott> oerjan: you didn't make a nice operator for that
23:38:44 <oerjan> most of the weird operators were after my time, anyhow.
23:38:53 <elliott> oerjan: "weird" :P
23:38:54 <oerjan> there aren't really that many in the haskell report.
23:39:04 <oerjan> *h98
23:39:39 <elliott> oerjan: ooh, I wonder if your haskell style can be traced to a defined lineage, since it was probably before haskell's internet explosion in popularity when they all mixed together apart from Utrecht
23:39:43 <elliott> EXCITING???
23:40:14 <oerjan> elliott: it's a rather weird thing to want anyhow, since you are using return on a monadic action
23:40:33 <elliott> yeah turns out I didn't want it :)
23:40:38 <oerjan> in fact, i don't think there's any reason why they need to be the same monad
23:40:57 <oerjan> :t do foo <- ?st; return (foo >>= ?f)
23:40:58 <lambdabot> forall (m :: * -> *) (m1 :: * -> *) a b. (?st::m (m1 a), Monad m, ?f::a -> m1 b, Monad m1) => m (m1 b)
23:41:55 <oerjan> of course it's not _that_ weird, you could easily use a parser monad to build some other monad's actions
23:43:04 <oerjan> i'm sure my haskell style has changed somewhat.
23:43:27 <elliott> oerjan: actually no it seems I do need it... but anyway
23:43:37 <elliott> and probably, but still :P
23:43:50 <elliott> I don't suppose you recall reading one gigantic codebase and nothing else when learning Haskell, that would be convenient to trace it
23:43:51 <elliott> :P
23:44:36 <oerjan> look at http://oerjan.nvg.org/esoteric/Unlambda.hs it is one of the first haskell programs i wrote
23:45:02 <elliott> hmm, I wonder if 2001 is after when the styles started melding together
23:45:10 <oerjan> heh i just intended by 2 there
23:45:19 <elliott> I do that :P
23:45:21 <elliott> I like how you import everything qualified
23:45:22 <oerjan> now i have this weird 4 with intermediate 2 thing
23:45:35 <elliott> '.' -> do c <- IO.hGetChar h; return (Dot c)
23:45:39 <elliott> I like the part where you didn't know what fmap was
23:45:45 <oerjan> heh :P
23:45:45 <elliott> or liftM I guess
23:46:03 <oerjan> yes, lots of things i would change today
23:46:05 <elliott> I also like how you abused Show :(
23:46:09 <elliott> (like here means don't like)
23:46:20 <elliott> (Computation cp1) >>= f = Computation cp where
23:46:20 <elliott> cp dat1 cont2 = cp1 dat1 cont1 where
23:46:20 <elliott> cont1 dat2 a = cp2 dat2 cont2 where
23:46:20 <elliott> (Computation cp2) = f a
23:46:25 <elliott> whaoh what is happening
23:46:42 <oerjan> i probably didn't know Show was not meant for displaying stuff, you know :P
23:46:46 <elliott> well this is certainly unique code :P
23:47:02 <oerjan> how so?
23:47:14 <elliott> callCC f = Computation cp where
23:47:15 <elliott> cp dat cont = cp2 dat cont where
23:47:15 <elliott> (Computation cp2) = f cont
23:47:19 <elliott> oerjan: well I don't exactly see nested where that often :P
23:47:23 <elliott> unless you need it because of scoping
23:47:25 <elliott> but you don't here at all
23:47:44 <elliott> lol at ExpressionSource
23:47:46 <elliott> newtype Filename = FN String
23:47:48 <oerjan> um yes i doo
23:47:49 <oerjan> *do
23:47:54 <elliott> did they not have FilePath back then?
23:47:56 <elliott> oerjan: oh hm
23:48:05 <elliott> <elliott> (Computation cp1) >>= f = Computation cp where
23:48:05 <elliott> <elliott> cp dat1 cont2 = cp1 dat1 cont1 where
23:48:05 <elliott> <elliott> cont1 dat2 a = cp2 dat2 cont2 where
23:48:05 <elliott> <elliott> (Computation cp2) = f a
23:48:07 <elliott> not there
23:48:14 <elliott> at least not the last one
23:48:57 <oerjan> elliott: seems i didn't know about field names :P
23:49:10 <elliott> Chunk x st >>= f = f x `mappend` Fuck (liftM (>>= f) st)
23:49:10 <elliott> my solution may be suboptimal
23:49:49 -!- Jafet has quit (Quit: Leaving.).
23:51:02 <elliott> oerjan: incidentally couldn't Set be made a monad if (Ord a) => were added to all its constructors
23:51:03 <oerjan> elliott: (Computation cp2) = f a uses the a parameter of the surrounding function, so the last where is definitely needed
23:51:07 <elliott> oh you can't do retur
23:51:08 <elliott> n
23:51:27 <elliott> oerjan: oh darn it does too
23:51:30 <elliott> I lost track of the a
23:53:33 <oerjan> <elliott> did they not have FilePath back then? <-- i think this is pretty much pure haskell 98 libraries
23:54:04 <elliott> :t openFile
23:54:05 <lambdabot> Not in scope: `openFile'
23:54:08 <elliott> ?hoogle openFile
23:54:09 <lambdabot> System.IO openFile :: FilePath -> IOMode -> IO Handle
23:54:10 <elliott> oerjan: so is FilePath
23:54:15 <elliott> it's a synonym for String
23:54:21 <elliott> you'd still need the newtype admittedly
23:54:22 <oerjan> ah yes.
23:58:33 <oerjan> as for abusing Show, i sometimes defined newtype RawString = Raw String; instance Show RawString where show (Raw s) = s
23:58:53 <elliott> > var "indeed."
23:58:54 <lambdabot> indeed.
23:59:49 <oerjan> and i think i have somewhere a [[a]] instance which displays a matrix/table
23:59:59 <elliott> oerjan: :'(
2011-09-22
00:00:00 <elliott> that's
00:00:02 <elliott> overlappung
00:00:08 <oerjan> um
00:00:09 <elliott> overlapungent
00:00:15 <oerjan> *a wrapped [[a]] instance
00:00:26 <elliott> dude
00:00:26 <elliott> overlapungent
00:02:25 <elliott> oerjan: what do you know about extensible exceptions :P
00:02:27 <elliott> i.e. Control.Exception
00:02:45 <oerjan> well what i've read from the module documentation
00:03:15 <elliott> if I do (catch m (\(x::SomeException) -> ...)), will that catch all exceptions?
00:03:18 <elliott> or is that unsufficient
00:03:22 <oerjan> yes
00:03:24 <elliott> s/unsufficient/insufficient/
00:03:25 <elliott> thanks
00:03:30 <oerjan> you just define an instance for your type, and unless you want to simulate the subtyping stuff, all methods are defaults
00:03:47 <elliott> :t fmap return
00:03:48 <lambdabot> forall a (m :: * -> *) (f :: * -> *). (Monad m, Functor f) => f a -> f (m a)
00:04:13 <oerjan> and everything is a subtype of SomeException, because the main method is defined in terms of that.
00:04:28 <elliott> right
00:08:26 <micahjohnston> @so !haskell (\s t->putStrLn(s ++ show s ++ show t ++ t))"@so !haskell (\\s t->putStrLn(s ++ show s ++ show t ++ t))""--"--
00:08:27 <lambdabot> !haskell (\s t->putStrLn(s ++ show s ++ show t ++ t))"@so !haskell (\\s t->putStrLn(s ++ show s ++ show t ++ t))""--"-- not available
00:08:31 <EgoBot> ​@so !haskell (\s t->putStrLn(s ++ show s ++ show t ++ t))"@so !haskell (\\s t->putStrLn(s ++ show s ++ show t ++ t))""--"--
00:08:44 <elliott> Couldn't match expected type `Stream m0 (Stream (Iter m0 i0) o0)'
00:08:44 <elliott> with actual type `Iter (Iter m0 i0) i1 o0'
00:08:44 <elliott> augh
00:08:55 <elliott> micahjohnston: Dude, I botlooped lambdabot and EgoBot ages ago.
00:08:59 <elliott> Don't do it again, it'll just be annoying.
00:09:01 <micahjohnston> ok
00:09:02 <micahjohnston> D:
00:09:02 <elliott> `pastelogs not available
00:09:06 <HackEgo> http://codu.org/projects/hackbot/fshg/index.cgi/raw-file/tip/paste/paste.14303
00:09:12 <elliott> EgoBot prevents it anyway.
00:09:21 <micahjohnston> once I had another bot in the middle
00:09:27 <micahjohnston> I can't find that one though
00:09:32 <elliott> 2011-02-01.txt:16:25:33: <elliott> 11.01.20:12:51:53 <lambdabot> !c char *s="?so !c char *s=%c%s%c; printf(s,34,s,34);//"; printf(s,34,s,34);// not available
00:09:46 <elliott> micahjohnston: EgoBot puts a zero-width space before the @, so...
00:09:50 <micahjohnston> oh
00:10:25 <micahjohnston> @so @so test
00:10:25 <lambdabot> @so test not available
00:10:28 <micahjohnston> oh
00:10:45 <micahjohnston> @so test
00:10:46 <lambdabot> test not available
00:10:59 <oerjan> huh so it special cases @
00:11:02 <oerjan> @so ?so test
00:11:03 <lambdabot> ?so test not available
00:11:08 <oerjan> but not ?
00:11:44 <oerjan> in any case, no bot sees its own messages unless specifically designed to do so
00:13:20 <oerjan> micahjohnston: also bot loops are a fine tradition, don't feel bad. it's just that all the bots present here have countermeasures.
00:13:45 <oerjan> (which is also a fine tradition, once the bot loops have been done.)
00:15:05 <elliott> no it's not, botloop prevention is a recent invention
00:15:06 <elliott> (rhymes)
00:20:42 <micahjohnston> oerjan: ok, heh
00:26:20 -!- calamari has quit (Quit: Leaving).
00:48:41 <elliott> oerjan: what's infixr four
00:49:04 <oerjan> > (0$0 *>)
00:49:05 <lambdabot> The operator `Control.Applicative.*>' [infixl 4] of a section
00:49:05 <lambdabot> must hav...
00:49:10 <oerjan> hm not that one
00:49:39 <oerjan> i recall most of the Applicative stuff is 4
00:49:55 <oerjan> > (0$0 <*)
00:49:57 <lambdabot> The operator `Control.Applicative.<*' [infixl 4] of a section
00:49:57 <lambdabot> must hav...
00:50:06 <oerjan> hmph
00:50:13 <oerjan> > (0$0 <)
00:50:14 <lambdabot> The operator `GHC.Classes.<' [infix 4] of a section
00:50:14 <lambdabot> must have lower pr...
00:50:55 <oerjan> but what would be an Applicative operator which nests most usefully rightwards...
00:51:06 <oerjan> > (0$0 <|>)
00:51:07 <lambdabot> The operator `Control.Applicative.<|>' [infixl 3] of a section
00:51:07 <lambdabot> must ha...
00:51:47 <oerjan> > (0$0 <**>)
00:51:48 <lambdabot> The operator `Control.Applicative.<**>' [infixl 4] of a section
00:51:49 <lambdabot> must h...
00:51:54 <oerjan> not even that one
00:52:16 <oerjan> :t (<**>)
00:52:17 <lambdabot> forall (f :: * -> *) a b. (Applicative f) => f a -> f (a -> b) -> f b
00:52:35 <oerjan> and it's the one which actually is mirrored in a sense
00:53:37 <oerjan> but then, i suspect the fixities for those are not very well thought out - things starting with < having the same fixity level as <, that's like ocaml not haskell
00:54:01 <oerjan> i mean, they did not even give *> the same fixity as >>
00:54:14 <elliott> < having the same fixity as <
00:54:17 <elliott> who'da thunk it
00:54:29 <oerjan> elliott: reading comprehension, elliott
00:54:51 <elliott> oh
00:54:53 <oerjan> it's the "starting with" part. ocaml actually _enforces_ that.
00:55:02 <elliott> haha, really?
00:55:05 <monqy> what
00:55:06 <elliott> like...
00:55:10 <elliott> </ must have the same fixity as <?
00:55:13 <elliott> that's
00:55:14 <elliott> so weird
00:55:23 <oerjan> yes, operator precedence in ocaml is determined by first character
00:55:29 <elliott> so
00:55:30 <elliott> weird
00:55:33 <monqy> ocaml...
00:56:01 <oerjan> otoh it means you can actually remember the precedences :P
00:56:29 <elliott> oerjan: i think im breaking monoid laws by mistake oops :(
00:56:41 <monqy> what did you do :(
00:56:44 <elliott> or
00:56:46 <elliott> not monoid laws
00:56:46 <elliott> monad laws
00:56:50 <elliott> monoid laws are hard to break :P
00:56:59 <oerjan> well not _that_ hard :P
00:57:20 <monqy> hard to break accidentally?
00:57:30 <oerjan> maybe.
00:58:21 <elliott> has anyone ever dead
00:58:23 <oerjan> anyway, i don't seem to recall anything with infixr 4. maybe i should actually look somewhere :P
00:58:31 <elliott> can hayoo search by fixity :D
00:59:07 <oerjan> why do you want an infixr 4 operator anyway :P
00:59:16 <elliott> to know if i should make this operator that :D
00:59:41 <oerjan> hm haddock doesn't give fixities
01:00:27 <oerjan> ok Control.Applicative only has infixl 3 and 4
01:00:34 <monqy> ++ is infixr 5. that's pretty close.
01:00:48 <elliott> lol
01:01:06 -!- augur has quit (Remote host closed the connection).
01:01:14 <oerjan> yes 5 is very infixr
01:01:49 <oerjan> i think some things would have fit better together if they'd made each fixity level a unique associativity
01:02:00 <elliott> `addquote <oerjan> yes 5 is very infixr
01:02:01 <monqy> <+> is infixr 5, *** and &&& are infixr 3
01:02:01 <HackEgo> 677) <oerjan> yes 5 is very infixr
01:02:12 <monqy> but where is the infixr 4
01:03:23 <oerjan> the report has only infix 4, since they're all testing operators
01:03:59 <oerjan> the only thing that could make more sense would be python's chaining
01:04:59 <oerjan> ok that's Prelude only.
01:05:02 <oerjan> http://www.haskell.org/onlinereport/haskell2010/haskellch4.html#x10-820061
01:05:18 <oerjan> in fact the only variation within a level is between !! and .
01:05:37 <oerjan> (!!'s fixity is also the default one without a declaration)
01:06:04 <oerjan> but then it leaves out =<<
01:06:13 <monqy> =<< is infixr 1 i think
01:06:55 <oerjan> yes, it's the main operator i recall which usefully has the opposite associativity but still the same level
01:07:03 <oerjan> (as >>=)
01:07:24 <oerjan> > (0$0 <$>)
01:07:25 <lambdabot> The operator `Data.Functor.<$>' [infixl 4] of a section
01:07:25 <lambdabot> must have lowe...
01:07:51 <oerjan> hm...
01:07:55 <oerjan> > (0$0 >=>)
01:07:56 <lambdabot> The operator `Control.Monad.>=>' [infixr 1] of a section
01:07:57 <lambdabot> must have low...
01:08:01 <oerjan> > (0$0 >>>)
01:08:02 <lambdabot> The operator `Control.Category.>>>' [infixr 1] of a section
01:08:02 <lambdabot> must have ...
01:08:51 <oerjan> elliott: the thing is, it does not really make sense to define new non-testing operators as level 4, and i consider the Applicatives there a mistake.
01:09:15 <oerjan> they should have been lower, similarly to the monadic ones
01:09:30 <elliott> oerjan: fair enough, I'm trying to give a fixity to a piping operator
01:09:41 <oerjan> elliott: well >>> and >=> are 1
01:09:47 <oerjan> as is >>=
01:09:58 <oerjan> and those are all piping operators in a sense
01:10:21 <oerjan> > (0$0 <<<)
01:10:22 <lambdabot> The operator `Control.Category.<<<' [infixr 1] of a section
01:10:22 <lambdabot> must have ...
01:10:59 <elliott> oerjan: it's also similar to (.) in a sense though
01:11:27 <oerjan> ok but . is special it's almost syntax
01:11:32 <oerjan> like $
01:13:59 <monqy> hey i found an infixr 4 operator
01:14:15 <monqy> crazy
01:14:19 <monqy> it must feel so lonley
01:15:01 <oerjan> elliott: in any case, every "piping" operator i can find in Control.Arrow, Control.Category or Control.Monad is level 1, mostly infixr
01:15:12 <elliott> monqy: what operator
01:15:17 <elliott> oerjan: right
01:15:42 <monqy> .| in iterio....its even called a pipe operator...but you probably already knew all of this...it may even be the reason why you want infixr 4....
01:16:43 <oerjan> oh right elliott was using that package, i saw in the logs
01:18:59 -!- CakeProphet has joined.
01:19:44 <oerjan> there should be some guidelines for fixities (rule 1: never use infixl or infix 0)
01:20:18 <monqy> parsec's <?> uses infix 0 i think
01:20:24 <oerjan> (unless cale gets his will, in which case s/infixl/infixr/
01:20:38 <oerjan> monqy: infixl 0 iirc, and it is annoying
01:21:00 <oerjan> if it had been infixr 0 with opposite argument order, it could have been chained with $ easily
01:21:42 <oerjan> > (0$0 <?>)
01:21:43 <lambdabot> Not in scope: `<?>'
01:21:47 <oerjan> oh well
01:22:28 <oerjan> !haskell main = (0$0 Text.ParserCombinators.Parsec.<?>)
01:22:34 <oerjan> oops
01:22:46 <oerjan> oh it worked
01:22:48 <oerjan> infixl 9
01:22:55 <monqy> huh
01:22:58 <monqy> what parsec version is that
01:23:15 <oerjan> parsec 2?
01:23:55 <monqy> in latest on hackage (parsec 3.1.1):
01:23:56 <monqy> infix 0 <?>
01:23:56 <monqy> infixr 1 <|>
01:24:00 <oerjan> ok
01:24:14 <monqy> weird how it has its own <|> too
01:24:17 <oerjan> well i guess it's not really _worse_ afa $ is concerned
01:24:33 <elliott> monqy: it predates Alternative I think
01:24:35 <oerjan> monqy: yeah prior to Alternative
01:24:52 <monqy> i thought early parsec predated alternatve but new parsec didnt??
01:25:11 <oerjan> except it's weird they didn't remove it when they added alternative to the instances for it...
01:25:20 <oerjan> or did they just add applicative?
01:25:29 <elliott> dunno, maybe stuff depends on it being exported
01:25:38 <elliott> and monomorphism restriction means it can't be the Alternative version
01:25:42 <elliott> because that would break backwards-compat
01:25:42 <monqy> (ParsecT s u m) has an Alternative instance
01:25:47 <oerjan> perhaps.
01:25:56 <monqy> oh
01:26:20 <monqy> fixity changes too
01:26:21 <oerjan> wait what
01:26:29 <monqy> the real <|> being infixl 3 or something like that
01:26:38 <oerjan> monqy: i realized my test must have been wrong
01:26:56 <monqy> because of old parsec or what
01:27:10 <oerjan> !haskell import Text.ParserCombinators.Parsec; main = (0$0 <?>)
01:27:10 <monqy> oh it's looking in .ParserCombinators. yeah it's old
01:27:20 <monqy> now it's just Text.Parsec isn't it
01:27:58 <oerjan> monqy: no, because it didn't get to import the operator, and so assumed for the rest of the parsing that it was infixl 9
01:28:10 <monqy> oh
01:28:23 <oerjan> !haskell main = print "test"
01:28:28 <EgoBot> ​"test"
01:28:53 <monqy> !show haskell
01:28:53 <EgoBot> That is not a user interpreter!
01:28:58 <oerjan> hm something went wrong there, i got a nonsensical error message
01:29:00 <oerjan> !haskell import Text.ParserCombinators.Parsec; main = (0$0 <?>)
01:29:11 <oerjan> ah finally
01:29:28 <oerjan> it was infix 0
01:29:56 <monqy> 18:30:44 -!- Irssi: Starting query in freenode with =EgoBot
01:29:57 <monqy> 18:30:44 <EgoBot> lol
01:29:57 <monqy> 18:30:44 -!- Irssi: Closing query with =EgoBot
01:30:05 <oerjan> sometimes in a blue moon EgoBot sends responses to the wrong place
01:30:06 <monqy> is this your fault
01:30:09 <elliott> monqy: waht
01:30:33 <monqy> that was after
01:30:34 <monqy> 18:30:21 -!- Irssi: Starting query in freenode with egobot
01:30:34 <monqy> 18:30:33 <monqy> !haskell :i ++
01:30:34 <monqy> 18:30:36 <EgoBot> ​(++) :: [a] -> [a] -> [a] .-- Defined in GHC.Base
01:30:47 <oerjan> monqy: you may have hit the same bug
01:31:05 <monqy> the lol was dcc chat
01:31:22 <oerjan> i got an error message which was obviously for someone else, while you got some ordinary response i think
01:31:48 <oerjan> but neither of them were supposed to be for any of us
01:31:49 <monqy> what's ordinary about lol and why would egobot ever send it
01:31:53 <monqy> hehehe
01:32:03 <oerjan> monqy: if someone tried a command !echo lol, say
01:32:11 <monqy> ah
01:32:20 <monqy> now I'm wondering how this could have happened
01:32:36 <oerjan> maybe it's just too many people experimenting with EgoBot simultaneously
01:33:06 <oerjan> or too much load, istr it happens more often if you give it something with a lot of output or the like
01:33:53 <oerjan> i assume EgoBot is doing responses in parallel, but its code to match responses to questioners has some race condition
01:34:07 <oerjan> is my guess.
01:34:09 <oerjan> Gregor: ^
01:34:53 <oerjan> or perhaps things get saved away wrongly and get sent later
01:35:31 <monqy> I gave egobot another request (!haskell :i Text.Parsec.<?>) and am not getting a response :'(
01:35:52 <monqy> I wonder who's getting it
01:37:25 <oerjan> huh
01:37:34 <oerjan> !haskell :i Text.Parsec.<?>
01:37:54 <oerjan> no response there either
01:37:56 <oerjan> !echo hi
01:37:56 <EgoBot> hi
01:38:00 <monqy> !haskell :i ++
01:38:03 <EgoBot> ​(++) :: [a] -> [a] -> [a] .-- Defined in GHC.Base
01:38:14 <oerjan> monqy: perhaps :i just fails silently
01:38:29 <monqy> 18:39:23 <EgoBot> infixr 5 ++
01:38:30 <monqy> 18:39:23 <EgoBot>
01:38:32 <monqy> thanks egobot
01:38:41 <oerjan> !haskell :i Text.ParserCombinators.Parsec.<?>
01:38:43 <EgoBot> ​(Text.ParserCombinators.Parsec.Prim.<?>) ::
01:38:52 <monqy> oh right it's old parsec not new parsec
01:38:55 <oerjan> yeah
01:39:06 <oerjan> got the rest in DCC
01:39:13 <monqy> blank line and all?
01:39:29 <oerjan> um i closed the window again
01:39:32 <monqy> I wonder who got the infixr/blankline from my first ++ request when I got lol
01:39:48 <oerjan> afaict it was the rest of my own response
01:43:08 -!- augur has joined.
01:55:24 <elliott> monqy: probably a ghost :')]
01:55:25 <elliott> monqy: probably a ghost :')
02:04:42 <elliott> https://github.com/ghc/ghc/commit/3db757241ce7fb99c096c30481aefa86bb9855a1
02:04:46 <elliott> how not to do commits
02:05:12 <elliott> Deewiant: You may enjoy the above
02:09:45 -!- Jafet has joined.
02:14:09 -!- MDude has changed nick to MSleep.
02:16:50 -!- augur has quit (Remote host closed the connection).
02:25:17 -!- pikhq_ has quit (Ping timeout: 258 seconds).
02:26:39 -!- augur has joined.
02:30:01 <elliott> oerjan: rank n types :(
02:30:22 <oerjan> AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAaaaaaaaaaaa
02:30:34 <oerjan> just setting the mood here
02:30:38 -!- augur has quit (Read error: Connection reset by peer).
02:31:04 -!- augur has joined.
02:31:38 <oerjan> :t runST . forever
02:31:39 <lambdabot> Couldn't match expected type `forall s. ST s a'
02:31:39 <lambdabot> against inferred type `m b'
02:31:39 <lambdabot> Expected type: m a1 -> forall s. ST s a
02:31:49 <oerjan> *MWAHAHAHACKACKACK*
02:32:39 <monqy> what did you do :(
02:32:44 <oerjan> :t (.) runST
02:32:45 <lambdabot> forall a (f :: * -> *). (Functor f) => f (forall s. ST s a) -> f a
02:33:16 <monqy> caleskell
02:33:21 <oerjan> monqy: merely demonstrating the evil of rank n types
02:33:27 <oerjan> monqy: ok that's accidental
02:34:23 -!- augur_ has joined.
02:34:39 <oerjan> :t runST . (forever :: forall s. ST s a -> forall s. ST s b)
02:34:40 <lambdabot> Not in scope: type variable `a'
02:34:40 <lambdabot> Not in scope: type variable `b'
02:34:46 <elliott> oerjan: it upsets me a lot that rank-two types prevent point-free :'(
02:34:48 <oerjan> oops
02:35:05 <oerjan> elliott: yeah
02:35:10 <elliott> oerjan: it makes me...
02:35:11 <elliott> sad
02:35:28 <oerjan> :t runST . (forever :: forall s. ST s Int -> forall s. ST s Float)
02:35:29 <lambdabot> Couldn't match expected type `s1' against inferred type `s'
02:35:29 <lambdabot> `s1' is a rigid type variable bound by
02:35:29 <lambdabot> the polymorphic type `forall s1. ST s1 Float' at <interactive>:1:9
02:35:42 <elliott> :'(
02:35:45 <oerjan> sad stuff
02:36:15 -!- CakeProphet has quit (Ping timeout: 260 seconds).
02:36:46 -!- augur has quit (Ping timeout: 260 seconds).
02:38:11 <oerjan> :t (forever :: forall s. ST s Int -> forall s. ST s Float)
02:38:12 <lambdabot> Couldn't match expected type `s1' against inferred type `s'
02:38:12 <lambdabot> `s1' is a rigid type variable bound by
02:38:12 <lambdabot> the polymorphic type `forall s1. ST s1 Float' at <interactive>:1:1
02:39:45 <oerjan> :t let forever :: forall s. ST s a -> forall s. ST s b; forever x = x >> forever x in runST . forever
02:39:46 <lambdabot> Not in scope: type variable `a'
02:39:46 <lambdabot> Not in scope: type variable `b'
02:40:01 <oerjan> oh hm
02:40:09 <oerjan> :t let forever :: forall a b. forall s. ST s a -> forall s. ST s b; forever x = x >> forever x in runST . forever
02:40:10 <lambdabot> Couldn't match expected type `s1' against inferred type `s'
02:40:10 <lambdabot> `s1' is a rigid type variable bound by
02:40:10 <lambdabot> the type signature for `forever' at <interactive>:1:54
02:40:39 -!- pikhq has joined.
02:40:42 <oerjan> :t let forever :: forall a b. (forall s. ST s a) -> (forall s. ST s b); forever x = x >> forever x in runST . forever
02:40:43 <lambdabot> forall a a1. (forall s. ST s a1) -> a
02:40:47 <oerjan> YES
02:43:14 <oerjan> a bit of a shallow victory
02:46:31 <Gregor> OMG you guys
02:46:34 <Gregor> Liver paste is SO GOOD
02:46:35 <Gregor> SO
02:46:36 <Gregor> DAMNED
02:46:37 <Gregor> GOOD
02:46:49 <monqy> liver
02:46:49 <monqy> paste
02:46:53 <monqy> also hi
02:46:55 <Gregor> I will be the only person in history to make himself fat off liver paste.
02:46:59 <pikhq> The fuck. I seem to have spontaneously developed the ability to sing in falsetto without sounding like I'm going to murder eardrums.
02:47:16 <pikhq> (note: probably not any good. Just not a crime against humanity now.)
02:48:07 <pikhq> So, now I can sing above middle C. Whoo.
02:48:59 <pikhq> And probably kill people doing it.
02:49:04 <pikhq> Rather than definitely.
02:49:47 <oerjan> Gregor: NO WAI, ULL BE SECOND
02:50:16 <oerjan> food ->
02:51:09 <Gregor> I can sing /below/ middle C! :P
02:51:49 <pikhq> My normal singing range roughly corresponds to the bass clef.
02:54:46 <Gregor> Juries have to be uninterested third parties. So, if a person using Future Technology™ beams a live image of themselves brutally murdering someone into the minds of every living human being, then they cannot be convicted.
02:55:31 <pikhq> Keep in mind that we have the GOP here.
02:55:56 <pikhq> That person would probably just be classified as an enemy combatant and find themselves in Miniluv.
02:56:38 <Gregor> Can they be classified as an enemy combatant if they're a US citizen? I suppose so *shrugs*
02:56:43 <pikhq> Yes.
02:56:56 <pikhq> The President can also order a direct assassination of you.
02:56:59 * oerjan haz liver/BACON paste
02:57:21 <pikhq> In short, the legal system is 120% fucked.
02:57:30 <Gregor> oerjan: ... wow.
02:57:33 <Gregor> oerjan: That ... wow.
02:57:56 <pikhq> (precedent for the assassination thing: Obama did it.)
02:57:56 <oerjan> *MWAHAHAHA*
02:58:04 <pikhq> (yeah, not even Bush)
02:59:39 <oerjan> Gregor: incidentally there's a possible related conundrum here for the norwegian courts - one of the buildings damaged by the recent terrorist attack was the norwegian supreme court building...
03:00:16 <oerjan> hm i guess that's judges, not juries. but still, they're supposed to excuse themselves if personally involved.
03:01:06 <Gregor> oerjan: And presumably there's no precedent for bringing in judges who haven't been elected (?) to the supreme court?
03:01:10 <Gregor> So, bork :)
03:02:00 <pikhq> Potential hack: appeal to the International Criminal Court.
03:02:01 <oerjan> Gregor: actually there is, the government is supposed to appoint some. it's just that a lot of the government's buildings were _also_ damaged.
03:02:34 <oerjan> so the government should excuse themselves from making that appointment...
03:02:49 <oerjan> *government ministers
03:04:23 <pikhq> Well. I don't think the terrorist attack would count as a war crime, so the ICC wouldn't have jurisdiction.
03:04:47 <Gregor> oerjan: Bork bork!
03:05:09 <oerjan> for the time being, the terrorist appears to be trying to argue that he should be tried in military court - because he's at war with the labor party.
03:05:32 <Gregor> ... ... ... lolwut.
03:06:32 <oerjan> Gregor: his lawyer has frequently pointed out that he does not see things very similarly to anyone else. including his lawyer.
03:07:03 <pikhq> If that works, then the ICC would have jurisdiction, and so he could be tried there instead of in Norway's courts.
03:07:21 * elliott considers reading all that
03:07:28 <Gregor> elliott: Don't.
03:07:29 <oerjan> we're supposed to try him ourselves if we can, though :P
03:07:46 <pikhq> oerjan: Yes, but if he gets to your supreme court, then it seems you couldn't try him.
03:07:51 <pikhq> oerjan: So, the ICC would have to.
03:08:04 <elliott> Gregor: why not
03:08:06 <pikhq> Unless it's not a war crime, in which case fuck.
03:08:22 <oerjan> pikhq: they'll probably find some way to get some judges appointed, hopefully.
03:08:55 -!- invariable has changed nick to variable.
03:10:30 <elliott> <oerjan> :t let forever :: forall a b. (forall s. ST s a) -> (forall s. ST s b); forever x = x >> forever x in runST . forever
03:10:30 <elliott> <lambdabot> forall a a1. (forall s. ST s a1) -> a
03:10:31 <elliott> lol
03:10:40 <elliott> oerjan: "it only breaks polymorphism"
03:10:46 <elliott> as opposed to "it only breaks beta reduction"
03:11:09 <elliott> <Gregor> Juries have to be uninterested third parties. So, if a person using Future Technology™ beams a live image of themselves brutally murdering someone into the minds of every living human being, then they cannot be convicted.
03:11:12 <elliott> Is that actually a crime?
03:11:20 -!- pikhq_ has joined.
03:11:26 <oerjan> :t forever :: forall a b. (forall s. ST s a) -> (forall s. ST s b)
03:11:27 <lambdabot> Couldn't match expected type `forall s. ST s a'
03:11:27 <lambdabot> against inferred type `m a1'
03:11:28 <lambdabot> In the expression:
03:11:33 <azaq23> http://www.nytimes.com/2010/04/07/world/middleeast/07yemen.html?hp
03:11:36 <azaq23> unbelieveable
03:11:41 <elliott> Gregor: btw I don't think it matters if we can convict that guy :P
03:12:01 <Gregor> elliott: Probably true :P
03:12:03 <oerjan> elliott: i think the murder is supposed to be real
03:12:14 <elliott> oerjan: So it's a future murder?
03:12:36 <oerjan> elliott: erm there's no time travel involved.
03:12:39 <elliott> Can you convict people for crimes they'll do in the future, even if they're not planning them at all now? [I presume Minority Report had some kind of theme music in it, so assume it's being played now]
03:12:45 <elliott> oerjan: Then how is there anyone left to do the convicting
03:13:00 <Gregor> But it's like my hypothetical situation where a government declares its official language to be as described by some institution, and then that institution proceeds to subtly modify the language to coup.
03:13:08 <oerjan> elliott: you still need to work on your reading comprehension
03:13:21 <elliott> Oh, brutally murdering /someone/, okay
03:13:25 -!- pikhq has quit (Ping timeout: 276 seconds).
03:13:34 <elliott> I thought it was an image of them brutally murdering you for every you :P
03:13:49 <Gregor> lol
03:13:53 <elliott> Gregor: You would be good at nomic, but you're bad at real-world political loopholes :P
03:14:06 <Gregor> elliott: But unless he actually murders every you, that's arguably not even illegal.
03:14:19 <elliott> In nomic, people can't just resort to killing someone illegally if you fuck with them too much :P
03:14:30 <elliott> (Or can they? TODO: Murder an Agora player who pisses me off.)
03:14:34 <elliott> Gregor: That's what I said :P
03:14:42 <Gregor> SO'D YOUR MOM
03:14:52 <elliott> True
03:15:32 <oerjan> elliott: i'm pretty sure your version would at least count as harassment
03:16:59 <elliott> xD
03:17:06 <pikhq_> elliott: You need mens rea and actus reus to convict; with the act having never occured, actus reus couldn't exist, and mens rea might not either.
03:17:07 <elliott> At least :P
03:31:24 -!- azaq231 has joined.
03:33:54 -!- azaq23 has quit (Ping timeout: 258 seconds).
03:50:11 <oerjan> Ein monade er som ei lefse.
03:52:57 <elliott> wat
03:53:08 <oerjan> (kmc: une monade est comme une crêpe. una mónada es como un burrito. eine Monade ist wie ein Strudel)
03:53:48 <pikhq_> oerjan: Senatus populusque romanus?
03:56:10 <pikhq_> Following with the actual statements: モナッドは巻き寿司のようです。
03:56:18 <oerjan> argh unicode
03:56:30 <pikhq_> monaddo ha makizushi no you desu.
03:57:22 <pikhq_> "A monad is like a makizushi" (a makizushi being the kind of sushi that's rolled, with the contents wrapped in rice & nori)
03:57:34 <oerjan> kmc: you are taking notes, i hope?
03:59:55 <oerjan> (yes haskell weekly news is out again)
04:00:25 <oerjan> oh hm bicentennial
04:00:59 <elliott> <oerjan> (kmc: une monade est comme une crêpe. una mónada es como un burrito. eine Monade ist wie ein Strudel)
04:01:02 <oerjan> or wait it's not -enni- if there are no actual _years_ counted, is it
04:01:02 <elliott> waht is going on..............
04:01:08 <elliott> oh haskell weekly news
04:01:12 <elliott> that oerjan...still reads...
04:01:56 <oerjan> i seem to have increased my regular haskell web sites lately
04:02:26 <oerjan> it started with r/haskell and grew from there
04:03:12 <elliott> i thought hwn was something you had received in email for years or whatever
04:03:17 <elliott> or at least i remember you saying that
04:03:22 <elliott> you said it about agora's backup lists at leaest :P
04:03:23 <elliott> least
04:03:44 <oerjan> elliott: also that crêpe version started on haskell-cafe, i believe, in the comments about the french translation of learn you a haskell
04:03:55 <oerjan> so kmc obviously has expanded it
04:04:05 -!- elliott has quit (Remote host closed the connection).
04:04:18 <oerjan> wat
04:04:40 -!- elliott has joined.
04:04:47 <oerjan> i was about to explain how i don't actually subscribe to any haskell mailing lists, and i don't think i ever have
04:05:13 <oerjan> i _do_ however tend to gravitate towards the haskell-cafe web archive if not careful.
04:06:30 <oerjan> i don't like to read hwn on that, though, all the links are made into footnotes with url shortening
04:07:11 <elliott> i should probably subscribe to haskell-cafe
04:08:43 <oerjan> <oerjan> so kmc obviously has expanded it
04:08:52 <oerjan> was the last i said before you quit
04:09:37 <elliott> saw it
04:09:40 <elliott> (in backlog)
04:14:32 -!- variable has quit (Quit: I found 1 in /dev/zero).
04:21:58 <oerjan> :t mfilter
04:21:59 <lambdabot> Not in scope: `mfilter'
04:22:11 <oerjan> @hoogle mfilter
04:22:11 <lambdabot> No results found
04:23:24 <oerjan> too new apparently
04:23:25 <elliott> ?hoogle filterM
04:23:25 <lambdabot> Control.Monad filterM :: Monad m => (a -> m Bool) -> [a] -> m [a]
04:23:25 <lambdabot> Data.Graph.Inductive.Query.Monad graphFilterM :: GraphM m gr => (Context a b -> Bool) -> GT m (gr a b) [Context a b]
04:23:36 <oerjan> elliott: no, it actually is mfilter
04:23:49 <elliott> http://hackage.haskell.org/packages/archive/base/latest/doc/html/Control-Monad.html#v:mfilter
04:24:06 <oerjan> saw it mentioned on stackexchange
04:25:51 <elliott> stackexchange or overflow
04:26:04 <oerjan> er damn
04:26:15 <oerjan> overflow
04:26:43 <oerjan> short term memory failed between checking and typing :P
04:29:41 -!- CakeProphet has joined.
04:31:50 <CakeProphet> > 27^3
04:31:51 <lambdabot> 19683
04:32:28 <CakeProphet> > 27^2
04:32:29 <lambdabot> 729
04:32:54 <CakeProphet> that's not bad at all for number of 3-gram hash table entries.
04:34:48 <elliott> what
04:35:08 <CakeProphet> what
04:35:25 <elliott> what is the context
04:35:32 <elliott> and what are you trying to do
04:35:36 <CakeProphet> remember like a month ago I was going to improve the acronym generator?
04:35:45 <CakeProphet> well I've begun doing so finally.
04:36:12 -!- oerjan has quit (Quit: Good night).
04:36:15 <elliott> if you're going to base it on words
04:36:19 <elliott> then it will just generate words
04:36:24 <elliott> do you have a database of acronyms
04:36:28 <CakeProphet> these 3-grams are of the character variety.
04:36:37 <CakeProphet> basically it's a word generator more than an acronym generator.
04:36:54 <elliott> yes
04:37:00 <elliott> so it will be bad at generating acronyms
04:37:16 <CakeProphet> it will generate sequences of characters that are likely to be pronounceable
04:37:20 <CakeProphet> thus not a bad acronym generator.
04:37:36 <CakeProphet> though perhaps a bad word generator
04:37:40 <CakeProphet> as I doubt it will have perfect results.
04:41:14 <CakeProphet> I wonder what would happen if I also organized the data by character position.
04:41:42 <CakeProphet> so it stores the frequency of this character occuring after these two characters at this specific position.
04:41:57 <CakeProphet> something to consider afterwards, just out of curiosity.
04:43:54 <elliott> :t random
04:43:55 <lambdabot> forall g a. (Random a, RandomGen g) => g -> (a, g)
04:43:59 <elliott> ?hoogle Random
04:43:59 <lambdabot> module System.Random
04:43:59 <lambdabot> System.Random class Random a
04:43:59 <lambdabot> package random
04:45:47 -!- evincar has joined.
04:45:54 <CakeProphet> fat free ranch dressing tastes like poop.
04:46:10 <evincar> Cool, now I know what poop tastes like without the trouble of trying it.
04:46:23 <CakeProphet> where are the lipids? :( my tongue wants lipids.
04:48:21 <evincar> Your tongue is lying to you.
04:48:52 -!- variable has joined.
04:48:55 <CakeProphet> my tongue has no notion of truth so if it's lying I can't really blame it.
04:51:34 <evincar> True.
04:51:42 <evincar> Is my favourite Boolean value.
04:54:06 -!- kmc has quit (Quit: Leaving).
04:56:49 <monqy> hi
04:59:13 <evincar> Hi monqy. How art thou to-day?
05:06:41 <monqy> tired
05:06:45 -!- iamcal has quit (Ping timeout: 260 seconds).
05:07:23 <evincar> Rest.
05:07:33 <monqy> no
05:09:27 <pikhq_> evincar: I approve of thy archaicism.
05:10:13 <evincar> I recently decided to eschew "rendering" in favour of "rendition" in my computer graphics vocabulary.
05:11:25 <monqy> thanks
05:12:57 <elliott> Gregor: What's the biggest file EgoBot will download as an interpreter
05:13:31 <monqy> CakeProphet: are you fixing wacro? good.
05:13:43 <CakeProphet> more like replacing it with something completely different.
05:13:50 <monqy> goodl
05:13:52 <monqy> .
05:14:56 <CakeProphet> I can only work on it in spare moments, which aren't many these days.
05:17:26 <elliott> Hey CakeProphet
05:17:27 <elliott> `macro
05:17:27 <elliott> `macro
05:17:28 <elliott> `macro
05:17:28 <elliott> `macro
05:17:28 <elliott> `macro
05:17:36 <HackEgo> BTU
05:17:36 <HackEgo> GLIDING
05:17:37 <HackEgo> VLASIC'S
05:17:37 <HackEgo> DEPOTS
05:17:38 <HackEgo> HOEDOWNS
05:17:57 <monqy> amazing
05:18:48 <elliott> `macro
05:18:49 <elliott> `macro
05:18:49 <elliott> `macro
05:18:49 <elliott> `macro
05:18:54 <HackEgo> WUSSES
05:18:55 <HackEgo> OFTEST
05:18:56 <HackEgo> EAVESDROPPING
05:18:56 <HackEgo> SB'S
05:19:11 <elliott> CakeProphet: You no longer need to devote any effort
05:20:37 <evincar> A naked girl demands a backrub. Life is hard.
05:20:41 -!- evincar has quit (Quit: :D).
05:21:09 <monqy> hard lifes hard times
05:21:13 <elliott> can that guy get any more obnoxious
05:21:17 <elliott> let's discuss my perfect acronym generator instead
05:21:19 <elliott> CakeProphet: it uses N-GRAMS.
05:22:20 <elliott> wow such rudeness in this non-response
05:22:22 <elliott> monqy: wow
05:22:52 -!- pikhq has joined.
05:22:57 <elliott> wow.
05:22:59 -!- pikhq_ has quit (Ping timeout: 260 seconds).
05:23:02 <monqy> wow
05:23:10 <CakeProphet> elliott: I'm pretty sure that is not an acronym generator
05:23:22 <elliott> CakeProphet: It's a word generator.
05:23:23 <monqy> `macro
05:23:27 <elliott> It does exactly what you were going to write. :p
05:23:27 <HackEgo> KHORANA'S
05:23:31 <monqy> looks good to me
05:23:32 <CakeProphet> elliott: no.
05:23:34 <monqy> `macro
05:23:39 <HackEgo> YPSILANTI'S
05:23:41 <monqy> yyyyyyyyyyyep
05:23:54 <elliott> CakeProphet: How does it differ from what you were going to write? and do you think it differs based on evidence or are you just sure that your approach would produce better results
05:24:11 <CakeProphet> elliott: no because you've somehow completely understood what I meant by "3-grams of characters"
05:24:23 <elliott> I have?
05:24:26 <CakeProphet> *misunderstood
05:24:27 <CakeProphet> >_>
05:24:29 <monqy> a billion grams
05:24:29 <elliott> How do you know I have?
05:24:40 <monqy> highest quality wacronyms, macronyms
05:24:53 <CakeProphet> oh... hmmm
05:25:07 <CakeProphet> it seems to be very likely to generate actual existing words.
05:25:11 <CakeProphet> which is not what I would expect.
05:25:41 <elliott> Yes, that's a known deficiency which I'm correcting now.
05:25:53 <elliott> The code has all the infrastructure for it, it just hasn't been written yet.
05:25:59 <monqy> `macro
05:26:03 <HackEgo> NKRUMAH'S
05:26:07 <CakeProphet> uh, it looks to me like you're just randomly selecting entries
05:26:09 <CakeProphet> er, maybe not.
05:26:20 <elliott> I'm not. It just statistically ends up like that often.
05:26:24 <elliott> Which, like I said, correcting now.
05:26:45 <CakeProphet> also, you're an asshole. Why can't you just let me have fun?
05:26:55 <elliott> Are you calling me an asshole for writing a program?
05:27:20 <CakeProphet> specifically writing one that I am writing. It's kind of rude.
05:27:32 <elliott> You have a really weird idea of rude.
05:27:37 <CakeProphet> like "oh hey I can spit this out instantly why are you taking so long?"
05:27:55 <monqy> i find your idea of rude quite offensive
05:28:01 <elliott> Do you have issues or something? I saw something mentioned that sounded interesting and hacked up a Haskell progra.
05:28:03 <elliott> program.
05:28:18 <elliott> is there meant to be a moratorium on coding things you're coding, because I think you need a patent for that??
05:28:31 <monqy> n-grams (c) cakeprophet
05:28:31 <elliott> that n-gram stuff came up waaay before today anyway
05:28:35 <monqy> DO NOT STEAL
05:28:44 <CakeProphet> that's not what I mean.
05:30:03 <elliott> what do you mean
05:31:13 <CakeProphet> I'm not going to be able to describe it in a way you find suitable. You will find issues with my reasoning.
05:31:44 <monqy> its like if i said i want to make a cake and then you made a better cake than me before i made my cake....and then laughed....and laughec......ad na laughed............
05:31:45 <elliott> possibly because... your reasoning is flawed?
05:32:03 <CakeProphet> basically it spoils the fun. now I feel like I'm wasting my time.
05:32:18 <monqy> what
05:32:23 <monqy> how does it spoil the fun
05:32:33 <CakeProphet> see... I'm wasting my time right now
05:32:36 <CakeProphet> trying to explain this concept to you.
05:32:40 <elliott> CakeProphet: so what was I meant to do
05:32:41 <elliott> like
05:32:44 <monqy> other people have done n-grams. it's not like you're the first or anything.
05:32:48 <elliott> oh this sounds interesting i am going to open emacs and ghci and...
05:32:49 <elliott> fuck
05:32:50 <elliott> no
05:32:50 <elliott> can't do that
05:32:53 <elliott> closing
05:33:01 <elliott> because that would make me feel pretty lame too
05:33:05 <CakeProphet> I should probably give up while I'm ahead and get some sleep. especially considering I've only had one hour of that for this day.
05:34:59 <CakeProphet> elliott: I'm pretty sure if it were just something that you simply found interesting you wouldn't have presented it to me in the way you did.
05:35:33 <elliott> i have never found your predictions of me particularly accurate
05:35:52 <elliott> but ok i didn't realise you took n-grams so seriously
05:36:11 <elliott> ...despite the fact I talked about implementing n-grams for like days late last month
05:36:43 <CakeProphet> this is simply my perspective, based on the way you presented it. It seemed to be mocking. Is that an unreasonable inference?
05:36:58 <elliott> yep
05:38:21 <CakeProphet> whatever you're still an asshole either way. good night.
05:38:27 <monqy> good night cakeprophet
05:40:16 <elliott> cannot defend position →→→ call opopnent asshole
05:40:27 <elliott> calling me an asshole is like the oldest trick in the book... it's in Genesis
05:40:44 <elliott> genesasshole
05:40:45 <monqy> your'e also a nazi. bets thats not in genesis.
05:40:46 <elliott> genashole
05:41:14 <elliott> monqy: SHT,U UP JEW
05:41:19 <monqy> ;_;
05:41:27 * elliott OPPRESSES U FOUR CALLING ME NAZI
05:41:36 <monqy> im opresed
05:41:41 <elliott> im putting you in jail cell and making you listen to white noise... ON REPEAT ! ! !
05:41:43 <elliott> HARD FUCKER
05:41:48 <elliott> \\\\\\\\\/////////
05:42:17 <monqy> ;_; ;_: ;_; ;_-------_____:;;
05:42:39 <elliott> ;) ; )
05:42:47 <elliott> yeAAAAAAAAAhhhhhhhhhhhhhhhhhhhhhhhh NAZI RIDE PURE FOREVER
05:42:57 <elliott> >~) >~) >~ )
05:43:12 * elliott runs, leaves trail of magic
05:43:16 <elliott> (the magic is not magic )
05:44:18 <elliott> nazi misino:
05:44:20 <elliott> - destroy all frendship
05:44:22 <elliott> - make unhappy forever
05:44:32 <elliott> - no cute aminals!!!!!!!!!!!!&^
05:44:40 <monqy> - n grams
05:44:56 <elliott> - theft
05:45:02 <elliott> >: - )
05:45:09 <elliott> (: - <
05:45:16 <elliott> haha that lok like a sad smiley
05:45:17 <elliott> with hat
05:45:19 <elliott> bu no
05:45:20 <elliott> is not
05:45:24 <elliott> is nazi smiley
05:45:25 <elliott> nazimleyl
05:45:31 <monqy> - asshole
05:45:37 <elliott> - FUCK YOU
05:45:46 <elliott> "wow "
05:46:14 <elliott> thissss ins the genesis... of burning people w/ are not nazis ;) ; ) : >: - )
05:47:04 <elliott> monqy: sory if i hurt youre feelings,
05:47:14 <monqy> THEY ARE DEAD
05:47:18 <monqy> that is how hurt they are
05:47:18 <elliott> rip
05:47:19 <elliott> rip rip rip
05:47:19 <monqy> you
05:47:20 <monqy> killed
05:47:21 <monqy> them
05:47:23 <monqy> ;_;
05:47:29 <elliott> I CANNOT DEAL WIT HTHE UGILT ITS HARASEMNT
05:47:33 <elliott> auuuuuuuuuuuuUUUUUGH
05:47:44 * elliott burns, explodes, booms into fire, becomes kitten, kitten lives a tohusand years, becomes angel kitten, angel dies
05:47:52 <monqy> rip
05:47:55 <elliott> !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!vvvvvvvvvvvvvvvv
05:48:48 <elliott> WELCOME,
05:48:51 <elliott> TO,
05:48:52 <elliott> THE,
05:48:52 <elliott> NEXT,
05:48:53 <elliott> LEVEL,
05:48:59 <monqy> naziland castle
05:49:03 <elliott> ~~~title: "" -- yes that
05:49:05 <elliott> naziland castle
05:49:09 <elliott> ENTER CASTLE
05:49:13 <elliott> (you are now in the castle)
05:49:15 <elliott> (state command)
05:49:17 <elliott> >
05:49:25 <monqy> hurt feelings
05:49:31 <monqy> everey feelings
05:49:45 <elliott> YOUR HURT FEELINGS8!8!8!8!8!8!8! at this rate you will be a BAD NAZI ASS in only FIVE YEARS +motivational seminars!
05:49:48 <elliott> state commande,
05:49:48 <elliott> >
05:50:23 <elliott> STATE
05:50:24 <elliott> COMAMNDE,
05:50:25 <monqy> make more feeligns so i canm hurt them
05:50:25 <elliott> >
05:50:29 <monqy> then hurt theM
05:50:47 <elliott> YOU MAKE MORE FEELINGS BY BREEDING WTIH THE BREEDING FLOWER ITS AN INTENSIVE GRUESOME PROCESS THAT ELAVES YUO WITH TEN FEWER INTERNAL ORGANS AND BLOOD SPEWING OUT OF EVERY ORIFICE
05:50:52 <elliott> THETEHN YOU PUNCH THEM TO DEATH SCREAMING "I DONT LIOVE YOU
05:50:54 <elliott> YOU ARE MY KIDS
05:50:54 <elliott> BUT
05:50:56 <elliott> I DONT LIVE OE YOU
05:50:57 <elliott> IVE
05:50:59 <elliott> NEVER OLOVED YOU
05:51:01 <elliott> AND I HATE YOU
05:51:01 <elliott> "
05:51:02 <elliott> they
05:51:04 <elliott> are kiFILLED WITH BLOOD
05:51:11 <elliott> AND AS THEY SLOWLY START TO DIE WHILE SCREAMING "DADDY I LOVE YUO"
05:51:12 <elliott> YOU FEEL
05:51:13 <elliott> FOR THE FIRST TIME
05:51:15 <elliott> WHAT YOU THINK
05:51:18 <elliott> MIGHT BE THE SLIGHTEST INKLINGS
05:51:20 <elliott> OF EMOTION
05:51:22 <elliott> GUILT, EVEN
05:51:24 <elliott> YOU DESPISE YOURSELF FOR IT
05:51:33 <elliott> YOU DESIRE ONLY TO PURGE YOURSELF OF ALL FEELING
05:51:35 <elliott> AND TO BECOME A BAD NAZI ASS
05:51:36 <elliott> ENTER
05:51:37 <elliott> COMMAND
05:51:38 <elliott> >
05:51:47 <monqy> purge self of all felings
05:51:50 <monqy> become bad nazi ass
05:51:57 <elliott> HOW DO YUOU PROPOSE TO DO THIS????////
05:51:58 <elliott> >
05:52:05 <monqy> kill self
05:52:15 <elliott> YUO PUNCH YOUSELRF LIKE YOU DID YOUR CHILDREN
05:52:18 <elliott> BUT IT IS NO YUOSE
05:52:20 <elliott> YOU ARE ALREADY
05:52:20 <elliott> TOO HARD
05:52:22 <elliott> TO FAR ON THE PATH TO BECOMING A
05:52:24 <elliott> BAD NAZI ASS
05:52:27 <elliott> THE PUNCHES ONLY STRENGTHEN YOU
05:52:29 <elliott> NEXT COMMAND
05:52:29 <elliott> >
05:53:11 <elliott> NEXT COMMAND
05:53:12 <elliott> >
05:53:16 <monqy> did i draw blood can i drink the blood
05:53:29 <elliott> THEO NLY BLOOD IS ON YUORE CHILDREN
05:53:35 <elliott> YOU LEAN DOWN AND SUCK UP ALL THEIR BLOOD
05:53:35 <monqy> drink children blood
05:53:37 <elliott> YOU THINK THAT MAYBE
05:53:38 <elliott> PERHAPS
05:53:41 <elliott> YOU MIGHT BECOME A
05:53:44 <elliott> `` , NAZI CMVAMPIRE''
05:53:45 <elliott> BUT
05:53:45 <HackEgo> ​/home/hackbot/hackbot.hg/multibot_cmds/lib/limits: line 5: exec: `: not found
05:53:48 <elliott> YOU MUST NOT LET THAT DISTRACT YUO
05:53:53 <elliott> YOU MUST FIRST BECOME A BAD NAZI ASS
05:53:58 <elliott> ONLY THEN CAN YOU JOIN THE RANKS OF VAMPIRES
05:54:02 <elliott> SUDDENLY
05:54:10 <elliott> YOU FEEL YOUR MUSCLES EXPLODING
05:54:13 <elliott> AND THEY EXPLODE INTO MUSCLE
05:54:16 <monqy> did i become
05:54:20 <elliott> YOU CHEW OFF THIS NEW MUSCLE
05:54:23 <elliott> AND IT SPEWS LBOOD
05:54:26 <elliott> WHICH YOU THEN DRINK
05:54:29 <elliott> IT FEELS GOOOOOOOOOOOOOOOOOOOOOOOOOOD
05:54:38 <elliott> YOU ARE CURRENTLY BLEEDING PROFUSELY AND ARE SLIGHTLY FURTHER ON THE PATH TO BECOMING A BAD NAZI ASS
05:54:40 <elliott> INSERT COMMANDE
05:54:41 <elliott> >
05:55:23 <monqy> use blood to deface property
05:55:28 <elliott> WHAT PROPERTY
05:55:29 <elliott> >
05:55:35 <monqy> all of it
05:55:48 <monqy> smear blood on children, elderly, pregnant women, normal people too
05:56:04 <elliott> ARE YOU
05:56:06 <monqy> draw blood moustaches
05:56:06 <elliott> REFERRING TO PEOPLE
05:56:07 <elliott> AS PROPERTY
05:56:08 <elliott> BECAUSE
05:56:09 <elliott> THATS GOOD
05:56:10 <elliott> I LIKE THAT
05:56:11 <elliott> SHOWS INITIATIVE
05:56:19 <elliott> YOU GAZE OUT
05:56:24 <elliott> A SEA OF PEOPLE IS WAITING FOR YOU
05:56:34 <elliott> BUT BEFORE YOU SMEAR BLOOD ON THEM
05:56:39 <elliott> YOU GET THE URGE TO DECAPITATE THEM
05:56:40 <monqy> surf sea of people
05:56:49 <monqy> surf sea of blood
05:56:51 <elliott> SO YOU STICK OUT YOUR TONGUE AND RUN HEADFIRST AT THE SEA OF PEOPLE
05:56:58 <elliott> YOUR TONGUE IS SO STRONG THAT IT LOBS THEIR HEADS CLEAN OFF
05:57:06 <elliott> WITHIN TEN SECONDS YOU HAVE DECAPITATED EVERY SEROJISRINGEL PERSON PRESENT
05:57:13 <elliott> YOU SURF THE SEA OF BLOOD
05:57:15 <elliott> \/\/\/\/\/\/\/\/\/\\/
05:57:17 <elliott> DECISION INTERRUPT
05:57:20 <elliott> \/\/\/\/\/\/\/\/\/\\/
05:57:28 <elliott> IT TURNS OUT THAT YUO HAVE SOME ~~~drugs~~~ IN YOUR POSESPSION
05:57:34 <elliott> THESE DRUGS WILL HELP YOU ON THE PATH TO BECOMEING A BAD NAZI ASS
05:57:42 <elliott> DO YUO TAKE THEM???? OR ARE YOU A LAWFUL BAD ANZI ASS
05:57:44 <elliott> MAKE YUORE DECISION
05:57:46 <elliott> >
05:58:00 <monqy> give drugs to children, ingessst children
05:58:10 <elliott> yes
05:58:10 <elliott> YES
05:58:16 <elliott> YUO DO THAT WHILE SURFING ON THE SEAO F BLOOD
05:58:20 <elliott> suddenly
05:58:37 <elliott> everything
05:58:38 <elliott> becomes
05:58:40 <elliott> tehtiero best
05:58:42 <elliott> \/\/\/\\/\/\/
05:58:45 <elliott> OOOoooooo000000-`=`-=`=`-``-`
05:58:47 <elliott> ` =,` ,` ,`, =`=-, `= ,` -`
05:58:48 <HackEgo> ​/home/hackbot/hackbot.hg/multibot_cmds/lib/limits: line 5: exec: : not found
05:58:50 <elliott> / /
05:58:54 <elliott> ,z. m;l z=pd a\ ;a][ q \;e 'lg
05:58:56 <monqy> poor hackego
05:58:57 <elliott> o-=sd=========================
05:59:00 <elliott> ABOVE IS A PICTURE
05:59:02 <elliott> OF WHAT YOU SEE
05:59:06 <elliott> ;) : 0 OH YEAAAH >: - )
05:59:07 <elliott> >: - )
05:59:08 <elliott> >: - )
05:59:11 <elliott> >: - )>: - )>: - )>: - )>: - )>: - )>: - )>: - )>: - )>: - )>: - )>: - )>: - )>: - )>: - )>: - )>: - )>: - )>: - )>: - )>: - )>: - )>: - )>: - )>: - )>: - )>: - )>: - )>: - )>: - )>: - )>: - )>: - )>: - )>: - )>: - )>: - )>: - )>: - )>: - )>: - )>: - )V
05:59:14 <monqy> im highest
05:59:14 <elliott> HARD NAZI ASS
05:59:15 <elliott> hard nazi ass
05:59:16 <elliott> hard
05:59:17 <elliott> NAZI
05:59:17 <elliott> ass
05:59:18 <elliott> hard NAZI ass
05:59:20 <elliott> hard nazi ASS
05:59:22 <elliott> HARD nazi ass
05:59:24 <elliott> HARD nazi ASS
05:59:26 <elliott> HARD NAZI ASS
05:59:28 <elliott> HARD NAZI ass
05:59:30 <elliott> hard NAZI ASS
05:59:33 <elliott> HARD NAZI ASS
05:59:36 <elliott> .;, e. e/.w,f /we, /.,ew/ f/we., f/.we,f /
05:59:40 <elliott> STATKJE< COMMADNJEK
05:59:42 <elliott> >>>>>>>>
05:59:44 <elliott> ,
06:00:08 <monqy> bathe in blood surf. thats a good thing right.
06:00:15 <monqy> body surf
06:00:19 <monqy> while bathing
06:00:20 <monqy> in blood
06:00:29 <elliott> yes
06:00:34 <Madoka-Kaname> elliott what is wrong with you
06:00:35 <monqy> hard nazi multitasking
06:00:36 <elliott> \w/ \w/ \/w \w/ \w/\ w/\ /w\ /\w/ \w/\ /w\/ \w \o/ \o/ \m/
06:00:36 <myndzi> ¦ |
06:00:36 <myndzi> ´¸¨ /<
06:00:47 <elliott> AS YOU SURF THE SEA OF BLOOD YOU INGEST YOUR BLOOD-SOAKED CHILDREN
06:00:49 <elliott> hi Madoka-Kaname
06:00:55 <elliott> do you want to play
06:00:58 <Madoka-Kaname> no
06:01:18 <elliott> YUO KILL Madoka-Kaname AND THROW THE BODY INTO THE PILE OF BODIES AND CRUS HTHEM WITH A GIGANTIC CRUSHING MACHINE
06:01:25 <elliott> YOUR STRENGTH INCREASES MASSIVELY
06:01:30 <elliott> YOU BECOME AS TALL AS A BUILDING
06:01:32 <elliott> AND RADIOACTIVE
06:01:35 <elliott> AND MADE OF FUCKING WALRUSES
06:01:39 <elliott> WHAT THE FUCK DO YOU FUCKING DO
06:01:39 <elliott> >
06:01:41 <monqy> flex nazi muscles
06:01:54 <Madoka-Kaname> I'd rather be a character in something by Urobuchi Gen
06:01:55 <elliott> YOU FLEX THEM SO HARD IT CAUSES AN EARTHQUAKE IN EVERY MAJOR CONTINENT AND AUSTRALIA
06:01:57 <elliott> WHICH IS
06:02:00 <elliott> ALL THE CONTINENTS
06:02:02 -!- adam__ has joined.
06:02:06 <elliott> YOU SURF ON THE EARTHQUAKE
06:02:13 <elliott> that's some wave!!!!!!!!!!!!!!!!!!
06:02:14 <elliott> >
06:02:16 <elliott> enter
06:02:17 <elliott> command
06:02:17 <elliott> >
06:02:20 <monqy> is it a wave of blood
06:02:24 <monqy> make it a wave of blood
06:02:28 <monqy> the only suitable wave
06:02:39 <elliott> THAT WOULD REQUIRE COVERING EVERY LANDMASS ON THE PLANET WITH BLOOD
06:02:40 -!- CakeProphet has quit (Read error: Connection reset by peer).
06:02:48 <monqy> THEN DO THAT
06:02:57 <elliott> WAS HOPING YOU'D SAY THAT
06:03:01 <elliott> HOW DO YOU PLAN TO ACHIEVE THIS
06:03:35 -!- GreaseMonkey has joined.
06:03:40 <elliott> monqy: ??//
06:04:09 <monqy> kill people into planet
06:04:14 <elliott> every
06:04:15 <elliott> people?
06:04:19 <monqy> every people
06:04:34 <elliott> you go up to the first person on the planet
06:04:40 <elliott> it is an old man he is 99.99 years and 99 seconds
06:04:44 <elliott> you whisper
06:04:46 <elliott> man
06:04:49 <elliott> what is your name
06:04:54 <elliott> while pressing your eyeballs into his neck
06:04:58 <elliott> he replies
06:05:10 <elliott> and the snakes from his ears and tongue surround your face and start smothering you
06:05:13 <elliott> you find you cannot breathe
06:05:16 <elliott> he replies
06:05:23 <elliott> i am you...
06:05:30 <elliott> you are suffocating what do you do
06:05:30 <elliott> >
06:06:04 <monqy> bite/claw/whatever-kill snakes them use them to choke the false me!!!!!
06:06:18 <Madoka-Kaname> なにあれ
06:06:24 <elliott> you attack them but it only makes them stronger
06:06:29 <elliott> you briefly see a flash of light
06:06:31 <elliott> as it sustains
06:06:37 <elliott> one snake comes round to the front of your face
06:06:40 <elliott> looks you in the eye
06:06:40 <monqy> charm snakes with nazi charms
06:06:43 <Madoka-Kaname> elliott, you are not right in the head
06:06:43 -!- adam__ has changed nick to CakeProphet.
06:06:45 <elliott> and opens its mouth, its fangs showing
06:06:51 <elliott> then it moves into your eyes
06:06:57 <monqy> oh no my eyes
06:06:58 <elliott> touches your eyeball with a scratch
06:07:04 <elliott> and then plunges further with its fangs
06:07:11 <elliott> you feel a sharp pain and your entire left field of vision fills with blood
06:07:12 <monqy> do i have danger eyes
06:07:16 -!- Madoka-Kaname has left ("elliott has gone stark raving mad...").
06:07:21 <elliott> eventually the snake crawls all the way into your eyeball
06:07:27 <elliott> and you see the same thing happen to your right eye too
06:07:37 <elliott> you blink and stare at the man who replies "i am... a person..."
06:07:46 <elliott> you touch his nose and he disintegrates into salt
06:07:47 <monqy> are my eyes made of knives or lasers or fire or poison
06:07:49 <elliott> what do you do
06:07:49 <elliott> >
06:08:16 <monqy> taste salt...is it realyl sa.t....
06:08:25 <elliott> yes OH YES it is the best salt... you have ever tasted
06:08:31 <elliott> you could really do with some blood and salt on toast right now
06:08:33 <elliott> so you make it
06:08:48 <elliott> suddenly you are using the toast to surf across the continents; people explode as you pass them
06:08:56 <elliott> you feel a great power within you as you realise you are now the size of a small village
06:09:03 <elliott> and have twenty-two arms
06:09:18 <elliott> you notice that your chest is actually composed of a smaller version of yourself
06:09:19 <monqy> arm and salt samdwich time
06:09:25 <elliott> you wave to yourself, and the smaller yourself grabs your arm and bites off your hand
06:09:26 <elliott> but it is okay
06:09:28 <elliott> you have twenty-one more
06:09:31 <monqy> myself is a good samdwich topping too
06:09:35 <elliott> you think of smiling but decide against it
06:09:37 <elliott> after all
06:09:42 <elliott> you are a hard nazi ass in training
06:09:54 <elliott> you devour the sandwich with all the ingredients and fly over the world
06:10:02 <elliott> but you sure have a craving for DRUGS ON TOAST
06:10:04 <elliott> what do you do
06:10:04 <elliott> >
06:10:13 <monqy> do i still have drugs children
06:10:19 <monqy> them on arms toast would be good now..........
06:10:25 <elliott> mmmm that sounds good
06:10:29 <elliott> do you wanna make that bro
06:10:33 <monqy> yES
06:10:56 <elliott> you prepare the bread and lick out your dragon tongue at it causing fire, it is now burnt toast... just as you, a hard nazi ass, in training ,likes it
06:11:05 <elliott> you layer the arms on and they melt..mmmmmm
06:11:15 <elliott> finally you pile the drugs children on top and they morph into one with the toast
06:11:21 <elliott> their skin melting and re-hardening as they seep into the toast
06:11:29 <elliott> they cry the song of nightmares and sprout eyeballs from every skin pore
06:11:35 <elliott> and they have so much drugs.
06:11:37 <elliott> do you eat it
06:11:39 <elliott> do you want to eat it
06:11:39 <elliott> >
06:11:52 <monqy> yES
06:12:02 <elliott> teh world becomes a NES game
06:12:05 <monqy> viGOURoUSLEY Eat
06:12:07 <elliott> BLEEP bloop BLEEP BLOOOOOOP
06:12:10 <elliott> VIGOROURSLY EAT EVERYTHING
06:12:11 <elliott> MMM
06:12:12 <elliott> it tastes so good
06:12:17 <elliott> you become the size of the solar system
06:12:22 <elliott> and sprout eyeballs from every pore
06:12:27 <elliott> but it is not the drugs
06:12:29 <elliott> it is real life
06:12:31 <elliott> and what happens in drugs
06:12:32 <elliott> happens in real life
06:12:41 <elliott> :)
06:12:42 <elliott> :) :) :)
06:12:43 <elliott> :))
06:12:50 <elliott> you eat a baby and its great
06:12:55 <elliott> enter command
06:12:56 <elliott> >
06:12:56 <monqy> yum
06:12:59 <monqy> enjoy baby
06:13:23 <monqy> savoure baby
06:13:23 <elliott> you enjoy a baby
06:13:25 <elliott> you dont eat it
06:13:27 <elliott> you just look at it
06:13:28 <elliott> and say
06:13:29 <elliott> dayum
06:13:33 <elliott> thats a quality baby right there that is
06:13:37 <elliott> but this is a cruel judgement not
06:13:38 <elliott> a positive one
06:13:42 <elliott> to keep with your hard nazi ass in training image
06:14:02 <fizzie> The more you know: "Replacing the WebKit.framework that ships with Mac OS X or any of its components with those from a locally built copy or a nightly build of WebKit is HIGHLY discouraged. Doing so will likely leave your system unusuable and cause a tear in the fabric of spacetime—so don't do it!"
06:14:03 <elliott> you begin to wonder if instead of a hard nazi ass you shoul dbecome a christian or a utilitarian or a girafe or something
06:14:05 <elliott> what do you think
06:14:07 <elliott> >
06:14:13 <elliott> hi fizzie do you want to play
06:14:25 <fizzie> Not really; I'm at work; all work and no play.
06:14:35 <elliott> this is a very serious game
06:14:41 <elliott> it deal with social theme like nazi and opresion
06:14:51 <fizzie> Yes, I've been reading a word here and there.
06:14:55 <monqy> can i be hard nazi dgerafe
06:14:57 <fizzie> It certainly seems serious enough.
06:15:03 <monqy> i want to be a hard nazi dgerafe
06:15:19 <monqy> my specialty is blood grafiti
06:15:21 <elliott> it is like sophie's choice but without the choice
06:15:36 <elliott> or schindler's list without the list
06:15:53 <elliott> monqy: yes you can
06:16:00 <elliott> you become a ~cool nazi girafe dude~
06:16:08 <elliott> you're in a mario game
06:16:12 <elliott> its totally two dimensional and this is cool
06:16:21 <elliott> there are lots of innocent children but you already turned them into blood drugs just by looking at them
06:16:21 <monqy> become the mario game
06:16:24 <elliott> done
06:16:26 <elliott> whad now
06:16:26 <elliott> >
06:16:50 <monqy> become every mario game....even the bad ones......
06:17:08 <monqy> be played.....the players are now blood.....
06:17:10 <elliott> yes
06:17:10 <monqy> the blood spells
06:17:12 <monqy> fuck you
06:17:13 <elliott> you do GREAET yes
06:17:15 <elliott> yes
06:17:17 <elliott> the blood spells that
06:17:19 <elliott> and you lick it up
06:17:21 <elliott> with your frog tongue
06:17:23 <elliott> and al your eyeballs
06:17:26 <elliott> and your nazi mario game powers
06:17:49 <elliott> monqy: you have unlocked a new level
06:17:53 <monqy> !!!!
06:17:53 <elliott> do you wish to progress to level two
06:17:54 <elliott> >
06:18:01 <monqy> this is a good hting to do it sounds like...
06:18:04 <monqy> i DO
06:18:13 <elliott> you DO
06:18:15 <elliott> the whole universe is wiped
06:18:17 <elliott> a loading screen pops up
06:18:20 <elliott> loading affsets...
06:18:24 <elliott> downloading asses....
06:18:29 <elliott> court marshalling the friends.....
06:18:32 <elliott> nazi.........................
06:18:35 <elliott> welcome.....................................................................
06:18:39 <elliott> destroying everything you love............
06:18:43 <elliott> emailing your parents..................................
06:18:44 <elliott> loaded
06:18:55 <elliott> the screen flashes every colour for ten seconds and your eyes get shot out
06:18:59 <elliott> now your eyeballs are just filled with blood
06:19:02 <elliott> you have no idea where you are
06:19:03 <elliott> >
06:19:31 <monqy> feel around. it feels good.
06:19:38 <elliott> yeah
06:19:39 <elliott> it does
06:19:44 <elliott> but you have to realise
06:19:52 <elliott> that your expert position in the previous level
06:19:58 <elliott> is like a N00B ASS GAMER in this one....
06:20:03 <elliott> >: - ) >: - )
06:20:04 <monqy> oh no........
06:20:07 <elliott> do you want your eyes back
06:20:08 <elliott> >
06:20:12 <monqy> that would be nice....
06:20:15 <elliott> ok
06:20:17 <elliott> you have your eyes back
06:20:19 <elliott> it is:
06:20:27 <elliott> a tasteful room, decorated as in the eighteen-nineties;
06:20:40 <elliott> furnished wtih grandfather clock, cane, chair to sit in, rocking chair to sit and rock in (comes with electric guitar + amplifier),
06:20:47 <elliott> carpet made out of bones,
06:20:51 <elliott> staircase (tastefully spiralled),
06:21:00 <elliott> children (not animate; immortal, impossible to destroy);
06:21:07 <elliott> portal into fourth dimension (violates geometric laws);
06:21:08 <elliott> cat.
06:21:10 <elliott> >
06:21:40 <monqy> throw cat and hcildren into portal at same time.........observe........
06:21:53 <elliott> you acnnot move the childreern. they are part of the laws of physics...
06:22:19 <elliott> >
06:22:32 <monqy> just the cat, then
06:22:41 <monqy> or: move portal into children
06:22:50 <elliott> the cat tumbles into the portal. it appears to the left of you and above you, clipping with all its cuts visible (but not spilling out).
06:22:53 <elliott> it meows irritatedly.
06:23:00 <monqy> again, again
06:23:12 <elliott> you try to move the portal into children, but you find you cannot. the portal moves fine, but the children move away as you move the portal there, then back as you move it back.
06:23:25 <elliott> you try to pick up the cat but upon moving your hand inside its guts, it teleports into the portal.
06:23:27 <elliott> you go and pick it up.
06:23:48 <monqy> use portal to push childrne up stairs
06:24:11 <monqy> one of my arms dfoes this...the others is in the rocking chair....rocking out........
06:24:12 <elliott> you do this but as you go towards the tsairs the children turn around, as rock. you notice their eyes are completely white.
06:24:20 <elliott> they open their mouth and pure blackness comes out in jagged waves.
06:24:31 <elliott> it intersects your body and they cry.
06:24:35 <elliott> >
06:24:37 <elliott> level reset
06:24:37 <elliott> >
06:24:42 <monqy> oh No
06:24:53 <elliott> it ok u only lost about three turns my frend
06:25:18 <monqy> rock chair up the stairs..w.ere doing this to gether,,,the chaie.r.....and me......
06:25:22 <monqy> rockieng
06:25:31 <elliott> yeah
06:25:32 <elliott> you are
06:25:34 <elliott> and its FUCKING AWESOME
06:25:35 <elliott> but what it needs
06:25:37 <elliott> is some drugs
06:25:38 <elliott> >
06:25:54 <monqy> use NAZI MAGIC to CONJURATE up some SWET DRUGS
06:26:13 <elliott> yep
06:26:17 <elliott> but now youure in a corridor
06:26:19 <elliott> and everything seems kind of
06:26:20 <elliott> blurry
06:26:21 <elliott> >
06:27:04 <elliott> >
06:27:29 <monqy> gently remove skull lenses from nazi vest pocket, put on eyes
06:27:39 <monqy> every type of lenses.....
06:27:44 <elliott> this feels like a good idea. but first, you think
06:27:52 <elliott> best to listen to hard nazi ass.wav (about three and a half megabytes)
06:27:58 <elliott> you upload this file with your other heart.
06:27:59 <monqy> good idea
06:28:06 <elliott> it is about twenty per cent uploaded.
06:28:07 <elliott> this is cool.
06:28:56 <elliott> fifty-seven per cent.
06:29:02 <elliott> this will be a great soundtrack to nazi drugs, you think.
06:29:17 -!- variable has quit (Read error: Connection reset by peer).
06:30:08 <elliott> monqy: http://ompldr.org/vYWgzYw
06:30:12 <elliott> you download this file and listen to it.
06:30:19 <elliott> [pause for reality to catch up with perfection.]
06:30:33 -!- variable has joined.
06:30:56 <monqy> great soundtrack to nazi drugs
06:31:06 <elliott> are you prepared to continue
06:31:14 <monqy> i THinK so
06:31:27 <elliott> you still in corridor. but now you have skull lenses and eyes and shit.
06:31:27 <elliott> >
06:31:49 <monqy> am i playeing the soundtraxck....
06:32:00 <elliott> yes.
06:32:03 <elliott> its great, man.
06:32:04 <elliott> >
06:32:11 <monqy> is the coredior less blurey now
06:32:31 <elliott> no.
06:32:32 <elliott> >
06:32:38 <monqy> focus coredior
06:32:52 <elliott> you cant man. its not your vision. the corridor itself is blurry.
06:32:53 <elliott> >
06:33:05 <monqy> command corredior to focus
06:33:12 <elliott> the corridor laughs hollowly.
06:33:13 <elliott> >
06:33:19 <monqy> command HARDER
06:33:28 <elliott> you command so hard.
06:33:29 <elliott> so hard.
06:33:32 <elliott> but the corridor only gets blurrier.
06:33:33 <elliott> >
06:33:51 <monqy> walk down corridor while shouting profanitiesies at it
06:33:57 <monqy> this is the ONLY waY
06:34:05 <elliott> you do, and continue to mentally command as hard as you can
06:34:09 <elliott> you focus all your energy on commanding
06:34:20 <elliott> your eyes squint up and the corridor becomes as blurry as ever, but you know this time it is your vision from squinting.
06:34:28 <elliott> you do not even bother to see the corridor as you command so hard.
06:34:49 <elliott> and then
06:34:57 <elliott> as you finish commanding, exhausted, and prepare to continue walking down
06:35:01 <elliott> you see the corridor again
06:35:06 <elliott> and it is just as blurry as when your eyes were a-squint
06:35:18 <elliott> it bends and becomes diagonal, trapezoid in shape, almost,
06:35:23 <monqy> give drugs to correidor
06:35:25 <elliott> and its walls start to come close together, blurry as they are,
06:35:31 <elliott> and the walls get closer and closer,
06:35:33 <elliott> you hyperventilate,
06:35:40 <elliott> sweat beads drip down from every pore of your skin and you panic and run and dash,
06:35:44 <elliott> but the walls keep closing in tighter
06:35:54 <elliott> they hit your skin and crack your bones and blood pours out and your organs are crushed and as the walls meet
06:36:06 <elliott> they both simultaneously cross the infinitesimal space that is the difference between
06:36:09 <elliott> "touching exactly"
06:36:09 <elliott> and
06:36:10 <elliott> "same"
06:36:15 <elliott> and they pass one infinitesimal distance further
06:36:22 <elliott> crossing over each other and becoming impossible negative space
06:36:25 <elliott> but your body is still inside
06:36:32 <elliott> so it explodes out becoming the entire three-dimensional (four actually, but) space
06:36:37 <elliott> static abounds everywhere
06:36:39 <elliott> thoughts are lost
06:36:42 <elliott> the whole universe is nothignness and you are it
06:36:51 <elliott> your hard fuckin nazi ass becomes the curtains of this universe of horrors
06:36:51 <elliott>
06:36:54 <monqy> am i now the children, portal, cat, chair
06:36:58 <elliott> AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARRRRRRRRRRlevel reset
06:36:58 <elliott> >
06:37:03 <monqy> oh no
06:37:07 <monqy> become children
06:37:13 <elliott> ok.
06:37:17 <elliott> oh hey man this is sweet.
06:37:21 <elliott> the life of a children: so sweet.
06:37:25 <elliott> you see this punk coming up.
06:37:29 <elliott> tries to push you up the stairs with a portal.
06:37:32 <elliott> but you'll have none of that shit.
06:37:38 <elliott> shoot some mothafuckin black rays at him. yeaaaaaaaahhhhhhhhh
06:37:50 <elliott> ok you're feeling accomplished. you slide back into your natural position as the portal slides back as the punk disappears
06:37:51 <elliott> what now bro
06:37:59 <monqy> devoure his flesh
06:38:06 <elliott> yeah ok
06:38:07 <elliott> its pretty good
06:38:09 <elliott> pretty good
06:38:13 <elliott> not the best you've had but
06:38:13 <elliott> good
06:38:16 <elliott> >
06:38:35 <monqy> push chair into portal
06:38:47 <elliott> chair or rocking chair
06:38:58 <monqy> change of plans
06:39:05 <monqy> put cat on rocking chair, it rocks into portal
06:39:24 <elliott> you put the cat on the rocking chair. it starts rocking the fuck out. soloing on the guitar and everything. goddam. that's one rockin cat.
06:39:34 <elliott> it rocks into the portal.
06:39:37 <elliott> suddenly rock is everywhere
06:39:40 <elliott> yer in a maze of rock
06:39:43 <elliott> you think this is pretty cool
06:39:58 <elliott> also everywhere is cat so every piece of matter is now furry and breathing and has a beating heart inside and ok you admit this is kind of gross
06:39:58 <monqy> amazeing
06:40:00 <elliott> but dude
06:40:01 <elliott> maze of rock
06:40:07 <elliott> even if the guitar is like... a cat guitar
06:40:10 <elliott> maze of rock.
06:40:11 <elliott> >
06:40:29 <monqy> maze of rock
06:40:32 <elliott> >
06:40:41 <monqy> i dunno wander around the maze of rock or something
06:40:53 <elliott> you begin to think
06:40:57 <elliott> maybe you want to be a hard nazi ass
06:40:58 <elliott> ???
06:40:58 <elliott> >
06:41:07 <monqy> oh right that
06:41:15 -!- sllide has joined.
06:41:20 <monqy> command maze of rock to make me a hard nazi ass
06:41:32 <elliott> you do it
06:41:33 <elliott> and it hugs you
06:41:35 <elliott> its furry like a cat
06:41:37 <elliott> this is wonderful
06:41:39 <elliott> but you feel that maybe hugs
06:41:44 <elliott> are not the way to become a hard nazi ass
06:41:48 <elliott> do you want to exit this level
06:42:11 <monqy> kill hugs drink blood
06:42:14 <elliott> do you want to exit this level
06:42:27 <monqy> will exiting the level prevent me from killing hugs
06:42:30 <monqy> because
06:42:32 <monqy> i want to kill hugs
06:42:38 <elliott> there is no way to know.
06:42:40 <elliott> >
06:42:50 <monqy> kill hugs while exiting level
06:43:06 <elliott> you do it, but the hugs are ripped away from you as you exit
06:43:07 <elliott> correct decision
06:43:10 <elliott> you have unlocked a new level
06:43:14 <elliott> do you wish to progress to level three
06:43:18 <monqy> sure
06:43:24 <elliott> aight.
06:43:26 <elliott> your name is monqy.
06:43:31 <elliott> you are on the path to becoming a HARD NAZI ASS.
06:43:34 <monqy> good level
06:43:34 <elliott> you are in #esoteric.
06:43:37 <elliott> what do you do?
06:43:37 <elliott> >
06:43:58 <monqy> hard decisionS
06:44:35 <elliott> >
06:44:39 <monqy> helP
06:44:55 <elliott> >
06:45:26 <elliott> >
06:45:34 <monqy> im bad at beingmonqy in #espeteric
06:45:40 <monqy> ;_;
06:45:47 <elliott> the thing you must realise.
06:45:48 <elliott> is that by definition
06:45:55 <elliott> you are the best at being monqy in #esoteric
06:45:58 <elliott> not #espeteric though that's a whole nother ball game
06:46:02 <elliott> >
06:46:12 <monqy> im realize this now, ok.
06:47:28 <elliott> >
06:47:44 <monqy> the hardest level......great dificulties lie within monqy being not a hard nazi asss at alll,,,,,i have gone backwards in progres,,
06:47:47 <monqy> wallowe in shame
06:47:54 <elliott> no.
06:47:55 <elliott> you cannot.
06:48:00 <elliott> because that is not what hard nazi asses do.
06:48:01 <elliott> >
06:48:27 <monqy> explore esoteric for ways to beome a hard nazi ass.s.
06:48:56 <elliott> alright.
06:48:59 <elliott> to perform this action
06:48:59 <elliott> say
06:49:05 <elliott> <monqy> how do i beome a hard nazi ass.s.?
06:49:13 <monqy> <monqy> how do i beome a hard nazi ass.s.?
06:49:17 <elliott> without
06:49:18 <elliott> the <>s
06:49:26 <elliott> or the monqy inside
06:49:26 <monqy> monqy how do i become a hard nazi ass.s.?
06:49:28 <monqy> oops
06:49:31 <elliott> or the space after
06:49:32 <monqy> how do i become a hard nazi ass.s.?
06:49:33 <monqy> i need
06:49:33 <monqy> hlep
06:49:50 <monqy> becomeing is not my
06:49:51 <monqy> forte
06:50:02 <elliott> fizzie: help the man
06:50:14 <elliott> (tahtht's work)
06:50:53 <elliott> monqy: (this level is played in realtime)
06:51:00 <monqy> oh no
06:51:07 <elliott> monqy: do you want me to try and help you
06:51:16 <monqy> this may helP...
06:51:29 <elliott> monqy: hi ok.
06:51:29 <elliott> well.
06:51:31 <elliott> i think to become that.
06:51:35 <elliott> you need to enter commands into the game.
06:51:37 <elliott> such that you become that.
06:51:42 <elliott> try listening to hard nazi ass.wav.
06:51:43 <elliott> it may help you.
06:51:48 <monqy> aeooaoeooaeooo
06:52:10 <elliott> all i know about the lyrics to that is that they include "hard nazi ass"
06:52:14 <elliott> i know no more...
06:52:28 <monqy> aoeoaoeohardnaziassaeaooeoaoeoeaoeoeaaoo
06:52:47 <elliott>
06:52:47 <elliott>
06:52:47 <elliott>
06:52:47 <elliott>
06:52:47 <elliott>
06:52:47 <elliott>
06:52:49 <elliott> >
06:52:56 <monqy> become hard nazi ass
06:53:00 <elliott> how
06:53:00 <elliott> >
06:53:44 <monqy> rolepaly nazi on journey to hard ass to become...,,,,in this adventure,,,it happens
06:53:59 <elliott> ok you do that
06:54:03 <elliott> so you open the game console
06:54:05 <elliott> and start to type in
06:54:06 <elliott> the console says
06:54:08 <elliott> [ > ]
06:54:10 <elliott> what do you type in
06:54:10 <elliott> >
06:54:18 <monqy> become hard nazi ass
06:54:24 <elliott> ok how
06:54:25 <elliott> >
06:54:28 <monqy> help
06:54:35 <elliott> >
06:54:52 <monqy> in the adventure....is the twist ending....that the hard nazi ass was in my heart....all along
06:54:56 <elliott> no
06:54:59 <elliott> >
06:55:00 <monqy> oh no
06:55:23 <monqy> investigate cheats manual
06:55:31 <elliott> there is none.
06:55:32 <elliott> apply yourself
06:55:33 <elliott> >
06:55:34 <monqy> how to become hard nazi ass.help
06:55:35 <elliott> remember
06:55:38 <elliott> that you have been
06:55:42 <elliott> playing the game you are playing now
06:55:43 <elliott> as monqy
06:55:46 <elliott> in #esoteric
06:55:49 <elliott> on the path to becoming a nazi ass
06:55:50 <elliott> for a very long time now
06:55:54 <elliott> so you must ask yourself
06:55:56 <elliott> how is this any different
06:55:59 <elliott> to what I have been doing ?
06:56:31 <elliott> >
06:56:33 <monqy> in this comnsole game i was not given a propmt like the others,,,,
06:56:39 <monqy> look around, console
06:56:40 <elliott> yes you were
06:56:46 <monqy> oh,,,,
06:56:46 <elliott> <elliott> your name is monqy.
06:56:47 <elliott> <elliott> you are on the path to becoming a HARD NAZI ASS.
06:56:47 <elliott> <elliott> you are in #esoteric.
06:56:51 <monqy> oh that one
06:56:58 <monqy> that is a harD prompT
06:57:07 <elliott> no
06:57:08 <elliott> because
06:57:12 <elliott> it is what you have been doing for a long time already
06:57:14 <elliott> its just telling you
06:57:17 <elliott> keep doing what youore doing???
06:57:18 <elliott> >
06:57:51 <monqy> my doing has become dulll,
06:58:02 <elliott> APPLY
06:58:03 <elliott> YOUR
06:58:03 <elliott> SELF
06:58:04 <elliott> >
06:58:09 <monqy> im apply self
06:58:15 <elliott> >
06:58:18 <elliott> you apply yourself
06:58:18 <elliott> >
06:58:25 <monqy> kicks elliot, screams about hard nazi asses
06:58:33 <elliott> OW
06:58:34 <elliott> FUCKKEKK
06:58:39 <elliott> \/\/\/\/\/\/\/\/INTERRUPT DECISION TIME
06:58:40 <elliott> UR A JERK
06:58:43 <elliott> WANNA TRY SOME JERK DRUGS
06:58:43 <elliott> ??/
06:58:44 <elliott> >
06:58:47 <monqy> YEs
06:59:03 <monqy> if they are pOIson, i force them down your throAT
06:59:17 <elliott> you do
06:59:18 <elliott> i die
06:59:25 <monqy> rip
06:59:30 <monqy> throw eliot funeral party
06:59:40 <monqy> dances on graves
07:01:18 <elliott> the desynchronisation between the game fact that i am dead and the real fact that i am alive causes an infinite universe recursion.
07:01:18 <elliott> >
07:01:39 <monqy> harnes recusion power to become hard naiz ass
07:02:01 <elliott> done.
07:02:01 <elliott> >
07:02:08 <monqy> ok
07:02:11 -!- monqy has quit (Quit: hello).
07:02:57 <elliott> fizzie: hi
07:03:55 <elliott> rip channel being good 05:40—07:02
07:19:53 -!- azaq231 has quit (Quit: Leaving.).
07:46:27 -!- sllide has quit (Read error: Connection reset by peer).
07:55:13 -!- elliott has quit (Remote host closed the connection).
07:55:44 -!- elliott has joined.
07:57:58 <elliott> does anyone know decent DNS providers? I don't like OpenDNS. I'm tempted to just use Google Public DNS, but...
07:58:11 <elliott> Hmm, maybe I'll run that "try a bunch of DNS servers and find the best" program.
07:58:19 <Deewiant> "My ISP"
07:58:29 <elliott> Deewiant: You vastly overestimate the quality of my ISP.
07:58:34 <elliott> Oh, your ISP?
07:58:37 <elliott> Fuck your ISP.
07:58:41 <Deewiant> :-(
07:58:52 <elliott> I'm sure it's lovely, I'm also sure it's shitty from England :P
07:58:58 <elliott> http://code.google.com/p/namebench/ This is the thang
07:59:08 -!- iamcal has joined.
07:59:18 <Deewiant> I'm sure it won't respond to DNS queries from non-customers
07:59:24 <elliott> Fascism
07:59:33 <elliott> Maybe I'll ring them up
07:59:36 <elliott> "I'd like to buy JUST DNS."
07:59:45 <elliott> "Also I'm in England."
07:59:55 -!- copumpkin has changed nick to DrDerpa.
08:01:16 <elliott> Sure does take a while
08:01:17 <fizzie> Use one of those alternative-root DNS services, they're so undergrund.
08:01:24 <elliott> fizzie: Heh, yes, "undergrund"
08:01:25 <elliott> fizzie: Heh, yes, "undergrund".
08:01:30 <elliott> That's certainly one word.
08:01:54 <elliott> fizzie: You might want to ban me in advance before oerjan does it after logreading, btw.
08:02:19 <fizzie> (I was tempted to spell it "undergründ".)
08:02:23 <fizzie> Is there a reason?
08:02:27 <elliott> It did seem to be missing an umlaut, yes.
08:02:50 <elliott> fizzie: Well, I have the slightest feeling he may not quite enjoy over an hour of illogical Nazi-drug-toast text adventure gameplay.
08:03:02 <elliott> That's a personal failing of his, though, naturally.
08:03:26 <elliott> Gosh, namebench sure does take a while.
08:03:32 <fizzie> Ohhh, that. Wellll... there weren't any complainers, were there?
08:03:58 <elliott> fizzie: Well, Lymia said I was mad and then /parted, but that was under an alternate nick, so it NEVER HAPPENED. (Rule of IRC.)
08:04:27 <elliott> Nobody else, but I think everyone else was just asleep and/or busy.
08:04:41 <elliott> Or watching attentively, eagerly anticipating every development. That's possible too.
08:05:01 <elliott> It's alright though, all the cool people are in -minecraft anyway.
08:05:38 -!- DrDerpa has changed nick to copumpkin.
08:06:25 <elliott> What _is_ namebench doing? Oh, I see.
08:07:10 <elliott> I wonder if the time I'm losing doing nothing while waiting for namebench is greater than the combined amount of time I'll save by switching to a faster DNS provider.
08:13:26 <elliott> <namebench comment> I tried it but unusual result came out. The result showed my access point IP which is 192.168.1.1 the best one. quit strange but working result was quite good. coul any one explain technically how such thing is possible. Is my access point could be a public DNS.
08:20:41 <elliott> I wonder if maybe I should run a local DNS cache.
08:45:15 <Vorpal> elliott: hi
08:45:21 <Vorpal> also fizzie talked just above
08:46:17 <Vorpal> elliott: hm, does namebench work well?
08:46:28 <fizzie> Just above what?
08:46:57 <Vorpal> never mind, misread elliott's line as if he was alone, not noticing you
08:47:14 <fizzie> Ah'kay.
08:47:21 <Vorpal> elliott: Personally I just run a local unbound dns server.
08:48:59 <Vorpal> why is it that some random university system sends a HTML-only mail with the subject (translated) "Daily summary of notice panel" about *once every week*.
08:50:11 -!- elliott has quit (Ping timeout: 260 seconds).
09:22:11 -!- elliott has joined.
09:22:28 <elliott> Backetyback.
09:22:34 <elliott> 08:46:17: <Vorpal> elliott: hm, does namebench work well?
09:22:34 <elliott> Pretty well, yes.
09:29:17 -!- elliott_ has joined.
09:29:18 -!- elliott has quit (Read error: Connection reset by peer).
10:00:51 -!- FireFly has joined.
10:22:27 <elliott_> pikhq: What do Tk bindings usually look like
10:22:37 <elliott_> Do you have to mess with Tcl crap or is there a mostly-C API available
10:32:46 -!- nooga has joined.
10:32:51 <nooga> http://chrisfenton.com/cray-1-digital-archeology/ pretty nice
10:44:23 -!- CakeProphet has quit (Ping timeout: 258 seconds).
10:48:23 -!- GreaseMonkey has quit (Quit: The Other Game).
10:49:45 <fizzie> "In a few cases, these are native bindings (C and Perl at least) while others create a link between calls to Tcl/Tk and the language."
10:51:10 <fizzie> Tcl and Tk are both written in C, and the former calls to the latter, so there needs to be some sort of a thing there.
10:51:20 <elliott_> Right.
11:08:32 <elliott_> "The file tk.h should be considered a public declaration of the Tk C functions, defines/macros, and structures which a developer can safely depend on." -- oh, please.
11:20:16 <Vorpal> elliott_ why "oh please"?
11:20:53 -!- nooga has quit (Quit: Lost terminal).
11:21:19 <elliott_> Vorpal: That's not a substitute for API documentation.
11:21:48 <Vorpal> elliott_: my tk.h seems to be very well documented in the form of comments
11:21:58 <elliott_> Doesn't beat manpages.
11:22:03 <Vorpal> true
11:24:00 <Vorpal> hm I used tup a bit, very nice. There is just one issue I have with it really: No equivalent to make's -j
11:24:08 <elliott_> Yes... there is...
11:24:11 <elliott_> Read "man tup".
11:24:20 <Vorpal> elliott_: hm I did. Will have to check again
11:24:40 <elliott_> You can use the num_jobs configuration (user or project-local), or -jN to tup upd.
11:25:12 <Vorpal> ah right
11:28:55 <Vorpal> elliott_: btw what is the correct way to get generated files included in a build? For example I might have a :foreach *.c rule, and a rule that generates a *.c file using bison or some such.
11:29:08 <Vorpal> will the foreach *.c include the generated .c file?
11:31:50 <elliott_> Vorpal: If it occurs after the generating rule, I believe.
11:32:28 <Vorpal> elliott_: in textual order in the Tupfile you mean? Or as ordered by those order-only dependencies?
11:32:47 <elliott_> Textual, I think. Don't quote me on this. I know the order matters in some cases, basically to match what it would do as a shell script.
11:32:55 <Vorpal> right
11:33:35 <Vorpal> hm.... either order seems to work, but then it is hard to know if it will always work, like on a clean build on another system or such.
11:33:54 -!- cheater has quit (Ping timeout: 252 seconds).
11:34:33 <Vorpal> elliott_: I guess I should ask pikhq? He seems quite knowledgeable about tup.
11:34:42 <elliott_> Vorpal: Just post on tup-user.
11:34:47 <elliott_> Mike will probably answer it within a day or two.
11:34:49 <Vorpal> ergh, mailing list
11:34:52 <Vorpal> oh well
11:34:59 <elliott_> It's google groups.
11:35:01 <elliott_> Sorry, tup-users
11:35:06 <elliott_> So you don't have to subscribe or anything.
11:35:17 <Vorpal> oh okay. I never even used google groups, would have to figure out how that works too
11:35:22 <Vorpal> still, not a mailing list
11:35:49 <elliott_> Well, it's primarily subscribe-and-email-reply based. But it can work basically like a crappy imitation of a web forum.
11:35:57 <elliott_> You don't have to receive messages through email and can post through the web.
11:36:02 <elliott_> It's low-traffic, mind.
11:36:05 <Vorpal> fair enough
11:36:14 -!- boily has joined.
11:37:59 <Vorpal> elliott_: oh btw, I noticed tup complain about /etc/fuse.conf not being readable on my ubuntu system. tup seems to work correctly as far as I can tell though
11:37:59 <Vorpal> hm
11:38:03 <Vorpal> any idea?
11:41:11 <elliott_> Vorpal: it'll try to read it, since it uses fuse
11:42:09 <Vorpal> elliott_: hm doesn't stuff need to be suid to use fuse?
11:42:43 <Vorpal> or maybe not
11:42:48 <Vorpal> thought that was required
11:43:27 <Vorpal> but sshfs seems to manage without.
11:44:14 <elliott_> no
11:44:19 <elliott_> that's the whole point of fuse :P
11:44:39 <fizzie> That's not the *whole* point of FUSE.
11:44:47 <Vorpal> oh it is fusermount that is suid
11:45:02 <Vorpal> to be able to unmount I guess
11:47:48 <elliott_> fizzie: Well, at least a quarter of it.
11:51:34 <fizzie> It might have been Debian that came with fusermount normally suid-root but executable only by the 'fuse' group.
11:51:44 <fizzie> Not sure about Ubuntu; here it seems to be for all users.
11:52:15 -!- cheater has joined.
11:57:20 -!- oerjan has joined.
11:57:21 <fizzie> Incidentally, what's it use fuse for?
11:58:00 <Vorpal> fizzie: you mean tup?
11:58:03 <Vorpal> tracking deps I think
11:58:46 <Vorpal> fizzie: since it can see every file opened by commands it execute that way. Unlike a LD_PRELOAD it would work even for static binaries
11:59:54 <oerjan> elliott_: i see the spelling in this channel has gründ to a halt.
12:00:13 <elliott_> oerjan: have you got to the nazi game yet
12:00:24 <elliott_> fizzie: Vorpal got it right; fuse is also more portable than LD_PRELOAD.
12:00:34 <oerjan> ...i was planning to skip the rest of the logs
12:00:46 <elliott_> oh, that's after the game
12:00:53 <elliott_> oerjan: no, you totally shouldn't :D
12:01:01 <oerjan> eek
12:01:11 <Vorpal> elliott_: hm I thought fuse was linux only
12:01:24 <elliott_> Vorpal: no
12:01:39 <Vorpal> elliott_: what OSes does it support then? FreeBSD? Windows? OS X?
12:01:52 <elliott_> OS X yes. BSDs I think so yes.
12:02:16 <elliott_> http://fuse4bsd.creo.hu/ http://www.netbsd.org/docs/puffs/ "FUSE compatibility was added within pkgsrc, and besides the required infrastructure work a number of FUSE packages were added to pkgsrc in the new "filesystem" category. Example packages that are currently available include:
12:02:16 <elliott_> "
12:02:30 <oerjan> <elliott> - no cute aminals!!!!!!!!!!!!&^
12:02:31 <fizzie> And the Hurd.
12:02:41 <elliott_> fizzie: Ah yes.
12:02:44 <oerjan> but hitler loved animals! more than people, probably.
12:02:54 <elliott_> oerjan: we're better nazis than the nazis, basically.
12:05:46 <oerjan> the perfect nazi: kills everyone else for not being perfect. then kills emself for having no friends.
12:06:31 <elliott_> how did you discover the game's true plot
12:06:53 <oerjan> i have a nose for perfection.
12:07:04 <elliott_> what a coincidence. i have a nose.
12:09:20 <oerjan> i am not convinced browsing this makes me a better person.
12:09:51 <elliott_> oerjan: if you don't read it, how will you ever find the evidence to ban me with
12:18:12 <oerjan> well it is important for children to be able to play games so they don't grow up into serial killers. oh wait...
12:18:47 <elliott_> :D
12:30:34 <oerjan> i somehow think that the theory that tolkien's works were really written by william shakespeare has not got much exposition before.
12:31:46 -!- Ngevd has joined.
12:32:03 <Ngevd> Hello!
12:32:10 <oerjan> maybe i should repeat that.
12:32:21 <oerjan> <oerjan> i somehow think that the theory that tolkien's works were really written by william shakespeare has not got much exposition before.
12:32:36 <Ngevd> Yes
12:33:41 <Ngevd> Also, I found someone who's heard of elliott_
12:33:44 <Ngevd> That is, our elliott_
12:33:52 <Ngevd> Not the elliott_ who kicked my friend in the fac
12:33:53 <Ngevd> e
12:34:01 <Ngevd> Who is probably not the same elliott_
12:34:08 <oerjan> let's hope so.
12:34:39 <Ngevd> He said "Elliott's weirder than you. Somehow."
12:34:51 <oerjan> XD
12:35:10 <oerjan> i sense a plan doomed to failure
12:35:15 <Ngevd> They went to the same first school for a bit, apparently
12:35:51 <oerjan> oops.
12:36:21 <Ngevd> Before elliott_ switched
12:36:26 <Ngevd> To a different school
12:39:48 -!- elliott_ has quit (Quit: Leaving).
12:40:24 <Ngevd> Also, there is nowhere near enough editing of the wiki ATM
12:41:28 <Vorpal> Ngevd: the simple solution to that is to stop banning spambots
12:42:43 <Vorpal> oerjan: oh and it seems iwc didn't stop. :)
12:43:08 <oerjan> *gasp*
12:43:21 <Vorpal> oerjan: are you surprised?
12:43:39 <oerjan> not immensely
12:43:45 <Vorpal> right
12:50:46 -!- Patashu has quit (Quit: MSN: Patashu@hotmail.com , Gmail: Patashu0@gmail.com , AIM: Patashu0 , YIM: patashu2 .).
13:12:28 -!- MSleep has changed nick to MDude.
13:12:31 -!- variable has quit (Quit: I found 1 in /dev/zero).
13:14:46 -!- variable- has quit (Excess Flood).
13:16:59 -!- variable has joined.
13:30:06 -!- Vorpal has quit (Quit: ZNC - http://znc.sourceforge.net).
13:39:27 -!- CakeProphet has joined.
13:39:28 -!- CakeProphet has quit (Changing host).
13:39:28 -!- CakeProphet has joined.
13:41:14 -!- oerjan has quit (Quit: leaving).
13:48:03 -!- Phantom_Hoover has joined.
14:07:24 -!- variable has quit (Excess Flood).
14:10:00 -!- variable has joined.
14:11:21 <CakeProphet> wow there are so many files in this google n-gram data that are just... numbers.
14:11:27 -!- augur_ has quit (Remote host closed the connection).
14:11:42 <CakeProphet> millions of number entries.
14:11:51 <CakeProphet> and currency entries.
14:27:46 <fizzie> Possibly they have scanned some function tables.
14:28:15 <fizzie> Have I mentioned my trigonometric function table book here? I think I have mentioned my trigonometric function table book here.
14:28:29 <fizzie> It's the one that was donated by the good peoples of the US of A.
14:28:38 <CakeProphet> does it have hacovercosine?
14:30:08 <fizzie> "This book has been presented to Finland by the Government of the United States of America, under Public Law 265, 81st Congress, as an expression of the friendship and good will which the people of the United States hold for the people of Finland."
14:30:18 <CakeProphet> lol
14:30:21 <fizzie> I believe not.
14:30:58 <fizzie> It's titled "Seven-place values of trigonometric functions".
14:31:15 <CakeProphet> yes I often think about my deep affinity with the Finnish people.
14:31:36 <fizzie> I suppose everyone in your country does.
14:31:44 <fizzie> It's like a thing with you people.
14:33:56 <fizzie> "Finland Pays Its Debts and Gets Books in Return: ASLA Grants to the Finnish Academic Libraries, 1950-1967; In 1949 the U.S. Congress passed a law (P.L. 81-265) that transformed Finnish payments on the loans acquired from the United States after World War I into a fund. Out of the fund, grants for travel in the United States were given to Finnish researchers and specialists. Finnish institutions of higher education were given grants in order to acquire American
14:33:56 <fizzie> scientific and scholarly books as well as technical equipment."
14:34:29 <fizzie> I got it for I think 2 eur from the "we want to get rid of this stuff" sale of the university library.
14:35:32 <fizzie> Also bought the book about how to (mechanically; without real understanding) convert ALGOL-60 programs to FORTRAN-II/IV programs. It has lots of details on different computers; word sizes and that sort of stuff.
14:35:44 -!- copumpkin has quit (Quit: Computer has gone to sleep.).
14:42:45 -!- augur has joined.
14:44:47 -!- ais523 has joined.
14:46:27 <CakeProphet> fizzie: needs moar SICP
14:57:22 -!- elliott_ has joined.
14:59:54 -!- copumpkin has joined.
14:59:54 <CakeProphet> I wonder what I should do with these 1.2 gigs of O'Reily books.
15:00:00 <CakeProphet> read them?
15:00:01 <CakeProphet> surely not...
15:06:41 -!- elliott_ has quit (Remote host closed the connection).
15:08:30 <CakeProphet> I'll probably just keep them as reference material.
15:11:45 -!- FireFly has quit (Quit: FireFly).
15:22:55 -!- elliott has joined.
15:23:02 <elliott> http://www.reagan.com/emailintro.html
15:24:17 <CakeProphet> wow software process models sure are bullshit.
15:24:18 <Phantom_Hoover> $40 a year for email?
15:24:19 <Phantom_Hoover> Wow.
15:24:23 <CakeProphet> I am literally learning about nothing.
15:24:49 <CakeProphet> we are staring at charts of imaginary things and talking about imaginary imaginariness.
15:27:08 <CakeProphet> > 40/12
15:27:09 <lambdabot> 3.3333333333333335
15:27:50 <CakeProphet> God Bless Ronald Reagan America
15:27:57 <elliott> Phantom_Hoover: Yes, but it's for conservatives, so they'll either be rich, or act as if they're rich in every situation despite not being rich.
15:28:25 <CakeProphet> that's really not very much money... but it is for email.
15:29:30 <CakeProphet> money better invested in sour punch straws.
15:39:56 -!- monqy has joined.
15:42:53 <elliott> monqy better invested in sour punch straws
15:43:27 <monqy> hi
15:46:12 <CakeProphet> I think I should get a blog
15:46:19 <CakeProphet> so I can write about all the boring stuff I do.
15:46:29 <elliott> i thought that was #esoteric
15:46:35 <elliott> ~SICKKEK BURNENES~
15:46:40 <CakeProphet> NOEP
15:46:50 <CakeProphet> #esoteric is where I go to SUFFER.
15:46:59 <CakeProphet> also talk about computer science.
15:47:14 <CakeProphet> because apparently all of the people in my life know nothing about that.
15:47:40 <monqy> the science of how to fix my computer
15:47:55 <Ngevd> I signed up for an open university course today
15:47:58 <ais523> monqy: that's electronic engineering
15:48:01 <CakeProphet> monqy: 1) replace all hardware components 2) install linux
15:48:02 <CakeProphet> fixed
15:48:04 <CakeProphet> works every time.
15:48:04 <Ngevd> "Linux: an introduction"
15:48:11 <elliott> Ngevd: oh ear
15:48:12 <elliott> ...
15:48:13 <elliott> dear
15:48:16 <elliott> oh dear deer ear
15:48:17 <Phantom_Hoover> Ngevd, is it MST 432 computerfixing.
15:48:17 <monqy> who needs a course to introduce linux?
15:48:32 <elliott> <ais523> monqy: that's electronic engineering
15:48:37 <Phantom_Hoover> (MS and MST are the only OU prefixes I know.)
15:48:39 <elliott> ais523: that may be a slightly more involved computer-fixing than most people require
15:48:40 <CakeProphet> monqy: no one, everyone is a linux nerd in the entire world.
15:48:40 <CakeProphet> all
15:48:46 -!- augur has quit (Remote host closed the connection).
15:48:51 <ais523> elliott: oh, right, I assumed he meant hardware
15:49:03 <ais523> if it's a software problem, "broken" isn't the word I'd typically use
15:49:06 <elliott> "Have you tried turning it off and on again?" "Oh, that worked. Thanks." "Thank god I got that EE degree."
15:49:40 <CakeProphet> so last night I was moving a bunch of files
15:49:53 <CakeProphet> and it was making my computer annoyingly laggy
15:49:59 <CakeProphet> so I set the nice level of mv to like... 16 I think.
15:50:06 -!- augur has joined.
15:50:19 <CakeProphet> and suddenly a bash process began using all of my CPU cycles, at which point my computer abruptly cut off.
15:50:26 <CakeProphet> what was that about?
15:50:44 <monqy> this is why you should take linux an introduction
15:50:49 <elliott> ahahaha
15:50:53 <CakeProphet> ...I realize 16 is an extreme nice level.
15:50:59 <CakeProphet> but I didn't think it would crash my computer...
15:51:29 <CakeProphet> NO NICE ALLOWED
15:51:34 <CakeProphet> LINUX IS MEAN. :(((
15:51:52 <ais523> elliott: that reminds me of the joke, "$famousperson found someone turning a computer off and on again to try to fix a problem, but it wasn't working. He said 'you can't fix a problem by turning a computer off and on again without understanding what is wrong with it'. Then he turned the computer off and on again, and the computer worked."
15:52:08 <ais523> CakeProphet: what sort of crash? kernel panic? computer turning off?
15:52:14 <CakeProphet> computer turned off
15:52:16 <elliott> ais523: that's a rubbish joke, it's much better as the original koan
15:52:16 <ais523> normally, when a computer abruptly turns off it's because it overheated
15:52:19 <ais523> elliott: indeed
15:52:24 <ais523> but I can't remember the original koan exactly
15:52:26 <CakeProphet> as in like hard cutoff.
15:52:27 <elliott> A novice was trying to fix a broken Lisp machine by turning the power off and on.
15:52:27 <elliott> Knight, seeing what the student was doing, spoke sternly: "You cannot fix a machine by just power-cycling it with no understanding of what is going wrong."
15:52:27 <elliott> Knight turned the machine off and on.
15:52:27 <elliott> The machine worked.
15:53:54 <CakeProphet> ais523: well there was a bash process at 400% CPU
15:53:58 <CakeProphet> right before it turned off.
15:54:10 <CakeProphet> I merely assumed it had something to do with adjusting the nice level of mv.
15:54:20 <CakeProphet> as that's when it happened.
15:54:23 <ais523> that would explain why the computer would be heating up, if had heating issues
15:54:32 <ais523> as full CPU usage tends to make a CPU hotter
15:54:39 <CakeProphet> >_> I would imagine so.
15:54:49 <Phantom_Hoover> Ngevd, wait why are you doing that?
15:54:51 <CakeProphet> it was a very short amount of time.
15:54:52 <ais523> also, you'd expect your CPU to be running at maximum whenever it had a reason to do so
15:54:54 <CakeProphet> a few seconds.
15:55:01 <ais523> nice just controls what processes get priority
15:55:01 <elliott> yay, my issue got fixed
15:55:15 <CakeProphet> ais523: my CPU almost never runs at max
15:55:19 <ais523> but each CPU should be running at 100% all the time the computer needs to make calculations, or you're just being slow for no reason
15:55:32 <ais523> the only reason a CPU shouldn't be running at max is that you have no CPU-bound processes
15:55:32 <elliott> ais523: if you're in the 90s...
15:55:46 <elliott> ITT: Power usage, fan speed, battery life :P
15:55:50 <ais523> elliott: quite a few people seem to have a fear of processes using 100% CPU
15:55:52 <fizzie> CakeProphet: The university bookshop sold SICPs at 5 eur/piece when our "introduction to programming" course switched from Scheme to Python/Java/whatever, and it was no longer a course book.
15:56:05 <CakeProphet> fizzie: wow nice.
15:56:12 <ais523> fizzie: did you buy it? did you already own it?
15:56:13 <elliott> ais523: They usually slow the rest of the system down because Unix.
15:56:16 <CakeProphet> well, except, it's completely free online.
15:56:23 <elliott> Specifically the user interface.
15:56:34 <ais523> elliott: well, it's a matter of task prioritisation
15:56:38 <ais523> the user interface doesn't normally run at RT prio
15:56:40 <Ngevd> Phantom_Hoover: School reccomended I take one
15:56:43 <ais523> arguably it /should/, but it doesn't
15:56:44 <elliott> ais523: It should.
15:56:45 <elliott> :p
15:56:51 <CakeProphet> I suppose mv is IO-bound and not CPU-bound, it was taking about 25% of max.
15:57:03 <elliott> Honestly, not responding to the user is pretty much the worst UI crime you can commit.
15:57:07 <ais523> yep, mv is about as IO-bound as you can get
15:57:18 <elliott> I suppose no interface is truly unresponsive; it'll always respond properly to pulling the power cable.
15:57:19 <CakeProphet> also at the same time I was decompressing roughly 20 gbs of zip files.
15:57:25 <ais523> elliott: I prefer processes to be honest about whether they're frozen or not
15:57:29 <elliott> ais523: I'd say cp is more IO-bound than mv
15:57:33 <elliott> mv is more syscall-bound, on the same device
15:57:34 <CakeProphet> which was still only like 80% usage.
15:57:37 <ais523> hmm, perhaps
15:57:44 <Phantom_Hoover> Ngevd, ...why?
15:57:52 <elliott> ais523: what does that have to do with UI priority?
15:58:11 <ais523> elliott: it depends on what you define as the UI
15:58:19 <CakeProphet> also my laptop is sitting on my bed so the fan is partially obstructed. it would make sense that it overheated abruptly.
15:58:28 <ais523> even currently-modern OSes are pretty good at always having the mouse pointer move, for instance
15:58:31 <ais523> when you move the moues
15:58:33 <ais523> *mouse
15:58:41 <ais523> but if it can't click on anything and have it respond, that's useless
15:58:42 <CakeProphet> there's a side vent as well so it's not like the cooling system is completely obstructed.
15:58:49 <elliott> ais523: That certainly doesn't hold true for me
15:59:06 <ais523> elliott: I'm used to the days of Windows crashing so hard that nothing but the mouse pointer worked
15:59:09 <elliott> I can guarantee on roughly nothing working if the system is taxed enough.
15:59:19 <elliott> Often it's too hung to even switch to a VT.
16:00:52 <CakeProphet> ais523: do you think the nice value had anything to do with the bash process suddenly skyrocketing in CPU usage or perhaps it was a coincidence.
16:01:13 <ais523> I think it was irrelevant
16:01:27 <CakeProphet> still I have no idea what the bash process was doing then...
16:01:29 <ais523> elliott: sometimes I can switch to a VT just fine after alt-sysrq-R, but not before
16:01:33 <elliott> ais523: haha
16:01:35 <CakeProphet> and it occured immediately after changing the priority.
16:01:35 <ais523> so it's nothing to do with being hung, but rather being in an invalid state
16:01:38 <elliott> I don't have a Sysrq key
16:01:45 <ais523> how do you not have a sysrq key?
16:01:47 <ais523> Mac?
16:01:48 <elliott> laptop
16:01:54 <elliott> and mac, yeah :P
16:01:55 <CakeProphet> yeah I don't have one either.
16:01:56 <ais523> every laptop I've ever used had some way to type sysrq
16:02:00 <ais523> this laptop has a physical sysrq key
16:02:04 <ais523> it was some crazy combo on the one before
16:02:12 <elliott> Surely it has a physical print screen key.
16:02:12 <ais523> fn-insert or something
16:02:18 <elliott> Nobody uses SysRq :P
16:02:19 <Ngevd> Phantom_Hoover: your guess is as good as mine
16:02:20 <ais523> elliott: it has PRTSC SYSRQ written on it
16:02:28 <ais523> the SYSRQ is arguably slightly more prominent
16:02:40 <elliott> PRTSC. Really.
16:02:41 -!- augur has quit (Read error: Connection reset by peer).
16:02:43 <ais523> also, alt-sysrq-k is the only method I have of logging out on this system
16:02:53 <elliott> ouch, why
16:03:07 -!- augur has joined.
16:03:18 <CakeProphet> I actually have no idea what sysrq does...
16:03:22 <ais523> elliott: because I removed the logout widget to save the screen corner
16:03:35 <ais523> I believe in Fitts' Law much like you do
16:03:49 <ais523> although I'm only actually using two screen corners because of a shortage of things to put on the other two
16:04:18 <elliott> I've started to see Fitts' law as more of an argument for the inefficiency of mice in general than for their efficiency in special cases (not that I think the traditional command-line interface is much more productive on its own)
16:04:24 <elliott> like, on the one hand, corners are really easy to access
16:04:32 <elliott> on the other hand, almost all locations on the screen are difficult to
16:04:37 <elliott> (access)
16:04:49 <ais523> I agree with you, there
16:05:11 <ais523> I tend not to use mice for anything much other than web brosing
16:05:13 <ais523> *browsing
16:05:28 <CakeProphet> my computer should have some fancy interface that tracks my eye movements.
16:05:31 <CakeProphet> as the mouse.
16:05:33 <ais523> although I make sure I have my taskbar in a consistent order, I mostly use alt-tab to change windows
16:05:43 <elliott> CakeProphet: it exists
16:05:45 <ais523> CakeProphet: it exists, but clicking is frustrating with that
16:05:52 <elliott> it's rather painful, though, which is why only disabled people tend to use it
16:05:57 <elliott> painful in the annoying sense
16:06:40 <ais523> elliott: what's your opinion on dwell-click?
16:06:48 <ais523> the idea that you can click a mouse by moving it to a stop from a particular direction
16:06:53 <ais523> and to avoid clicking, you move it to a stop from the other direction
16:06:53 <elliott> ais523: it irritates me :P
16:06:57 <elliott> but that says little
16:07:04 <ais523> most things irritate you
16:07:04 <CakeProphet> oh, no in the painful sense? no scary cables that you have to inject in your brain?
16:07:07 <elliott> I think your mouse being a ticking time bomb unless you constantly move it around is a bad idea in general, though
16:07:08 <CakeProphet> *not
16:07:14 <ais523> have you tried it? I haven't
16:07:28 <elliott> CakeProphet: it just uses a webcam
16:07:32 <ais523> I think I have a higher tolerance to pain than many people; I even got decent at playing Enigma with a touchpad
16:07:35 <elliott> ais523: there's a site that does it :-)
16:07:35 -!- augur has quit (Ping timeout: 256 seconds).
16:07:36 <elliott> (flash)
16:07:39 <ais523> higher tolerance to bad UI pain, I mean
16:07:43 <elliott> and yells at you if you click
16:07:57 <elliott> it was on the ~~social networking~~ sites a few years ago
16:07:59 <ais523> I find I'm inconsistent about whether I tap-click or button-click
16:08:02 <CakeProphet> mice are good. mice are fine. mice + shell = sufficient
16:08:03 <elliott> me too
16:08:11 <cheater> ais523: what is Enigma?
16:08:13 <monqy> mice suuuuuuuuuuuuuuuck
16:08:15 <ais523> cheater: a game
16:08:20 <ais523> well, there are several games with that name
16:08:22 <monqy> mmmm enigma., been ages since i've played that
16:08:25 <elliott> cheater: a mystery wrapped in an enigma wrapped in a riddle
16:08:29 <CakeProphet> touch screen is a minor improvement to a mouse perhaps.
16:08:30 <ais523> the one I'm thinking of is http://enigma-game.org
16:08:35 <monqy> can't imagine it with a atouchpade though
16:08:39 <ais523> it has the worst trailer of anything ever, it's so bad it's hilarious to watch
16:08:46 <elliott> you can play anything with a touchpad, it just makes you more hardcore
16:08:46 <monqy> yeah I was thinking of that one too
16:08:50 <ais523> CakeProphet: playing Enigma with a touchscreen would be basically impossible
16:08:55 <cheater> ais523: can you tell me a short description? i cannot open the web page
16:08:57 <ais523> it works much better with a tilt sensor than touchscreen
16:09:00 <cheater> even if you copypaste from there.
16:09:02 <elliott> http://www.nongnu.org/enigma/index.html
16:09:08 <CakeProphet> ais523: oh I was kind of not in that thread of discussion.
16:09:14 <CakeProphet> the Enigma one.
16:09:24 <CakeProphet> just discussing physical interfaces still.
16:09:33 <ais523> cheater: you control a marble by accelerating it with your mouse; you have to solve puzzles, mostly by colliding your marble into things that interact with the puzzles
16:09:41 <cheater> oh that!
16:09:41 <CakeProphet> yes gaming + touchscreen = smudgey screen
16:09:43 <cheater> i remember it
16:09:47 <cheater> it was fun.
16:09:56 <monqy> oh god this movie clips thing
16:10:05 <fizzie> ais523: I already owned it; didn't buy a second copy, ineiros bought a couple (5?) though to give to people.
16:10:17 <monqy> this is beautiful
16:10:28 <elliott> monqy: It's art.
16:10:28 <CakeProphet> I love this loud encoding fuck ups in this class recording
16:10:43 <ais523> enigma has different floors !
16:10:45 <Phantom_Hoover> <ais523> it has the worst trailer of anything ever, it's so bad it's hilarious to watch
16:10:49 <elliott> monqy: you're talking about http://www.youtube.com/watch?v=WV9l26Y-mBk right
16:10:50 <elliott> because
16:10:51 <elliott> that's the good one
16:10:51 <Phantom_Hoover> Wait, how awful is the trailer/
16:10:51 <CakeProphet> "-soft professor mumble- -mumblemumble- EEEEEEEERK -mumblemumble- EERK"
16:10:56 <elliott> ais523: oh no they're making a trailer two
16:10:57 <elliott> Phantom_Hoover: http://www.youtube.com/watch?v=WV9l26Y-mBk
16:10:58 <elliott> Phantom_Hoover: this awful
16:11:07 <elliott> sit through all 9 minutes to win a prize (the prize is giving up on life)
16:11:10 <Phantom_Hoover> Oh my god this is amazing.
16:11:13 <ais523> elliott: that's the one I'm talking about, thanks for digging up the link before I did
16:11:29 <elliott> or meditate
16:11:30 <elliott> in the holes
16:11:41 <ais523> that game is really really bad at advertising
16:11:44 <elliott> tutorial
16:11:45 <elliott> example
16:11:57 <ais523> and the tutorial doesn't really fill people with confidence
16:11:59 <elliott> move
16:12:00 <elliott> the blocks
16:12:01 <elliott>
16:12:02 <elliott> well
16:12:02 <elliott> agh
16:12:06 <elliott> i musnt't quote every line from this
16:12:07 <elliott> but it's so good
16:12:20 <Phantom_Hoover> Move block!
16:12:24 <Phantom_Hoover> For great justice!
16:12:27 <elliott> ais523: do the people behind this actually think it's good btw
16:12:35 <ais523> I don't know
16:12:43 <elliott> beware of unfriendly actors... i met an unfriendly actor once
16:12:43 <monqy> have you seen the death stones
16:12:45 <ais523> my guess is yes, because they wouldn't be promoting it so heavily otherwise
16:12:45 <Phantom_Hoover> Unfriendly actors!
16:12:46 -!- Ngevd has quit (Ping timeout: 276 seconds).
16:12:47 <elliott> he was in a movie but he was mean :(
16:13:03 <elliott> have you seen the death stones...
16:13:10 <monqy> help
16:13:12 <monqy> what's that
16:13:13 <monqy> ?
16:13:21 <ais523> move the blocks well …
16:13:31 <elliott> sweet bro and hella enigma
16:13:37 <elliott> help
16:13:37 <elliott>
16:13:38 <elliott>
16:13:39 <elliott> what's that
16:13:39 <Phantom_Hoover> Hellanigma.
16:13:39 <elliott> ?
16:13:41 <elliott> oh my god it actually
16:13:42 <elliott> just said that
16:13:45 <ais523> indeed
16:13:46 <elliott> it actually just said "help"
16:13:49 <elliott> on a line of its own :')
16:14:15 <Phantom_Hoover> It's so gloriously awful.
16:14:18 <elliott> this chess example is very foreboding, musicwise
16:14:27 <monqy> enigma includes
16:14:27 <monqy>
16:14:33 <monqy> ...
16:14:35 <monqy> laser games
16:14:45 <ais523> I just noticed that "have you seen the death stones" comes up on a screen with no death stones
16:14:51 <elliott> ais523: i think they're just
16:14:52 <elliott> reminding you
16:14:55 <elliott> of the screen like a minute prior
16:14:58 <monqy> oh it was
16:14:59 <monqy> laser
16:15:00 <monqy> games
16:15:01 <monqy> ...
16:15:02 <CakeProphet> this dance is very unpalatable, science-wise.
16:15:02 <monqy> oops
16:15:02 <elliott> "oh hey, there were death stones there... pls rewind"
16:15:02 <ais523> this thing has new depths of brilliance every time I watch it
16:15:14 <elliott> in some ways, this is the best possible trailer
16:15:31 <CakeProphet> portal chess is the best game
16:15:39 <elliott> oh man this level looks hard
16:15:43 <elliott> i don't want to try to reah the other side
16:15:45 <elliott> i'm happy with the side god gave me
16:15:46 <ais523> elliott: which one?
16:15:51 <elliott> ais523: four minutes fifty seconds in
16:15:58 <elliott> bunch of disappearing/spiralling platforms
16:16:04 <ais523> I haven't got there yet, I'll tell you my opinion when I get there
16:16:13 <elliott> do you find the message
16:16:18 <CakeProphet> elliott: shame you're not playing portal chess then you could just drump through your knight's nose.
16:16:20 <monqy> ...
16:16:33 <elliott> i like how it picked up a bunch of money
16:16:35 <elliott> went into the next room
16:16:38 <elliott> and just dropped it for no reason
16:16:46 <Phantom_Hoover> welcome to this maze! ...
16:16:47 <monqy> welcome
16:16:50 <ais523> the chess example is just there because people used to have no idea how to operate chess stones, IIRC
16:17:11 <monqy> it stopped being onscrieen before i could transcribe it
16:17:11 <Phantom_Hoover> This is a temple full of gold!
16:17:14 <monqy> why is this so great
16:17:31 <elliott> this is the best possible thing we could all do together for 9 minutes
16:17:44 <Phantom_Hoover> oh no an unfriendl actor
16:17:59 <elliott> i love how enigma water looks nothing like water
16:18:06 <elliott> it just looks like blue floor
16:18:09 <elliott> do you like puzzles?
16:18:11 <elliott> .puzzles puzzles..
16:18:40 <ais523> elliott: oh right, I reached the level you were talking about, it's pretty hard, although not the hardest level in the set of all levels similar to it
16:19:04 <elliott> who edited this thing did they think we cared about this section of gameplay minutiae
16:19:09 <elliott> or would have any idea what's going on
16:19:23 <elliott> being
16:19:23 <elliott> lost
16:19:24 <elliott> in Enigma
16:19:25 <elliott> Space
16:19:26 <elliott>
16:19:26 <elliott> ?
16:19:33 <monqy> me too
16:19:47 <ais523> elliott: I can't explain it, so don't ask me to
16:20:05 <elliott> what logo is that
16:20:06 <elliott> it's like
16:20:07 <elliott> the un logo
16:20:08 <elliott> but
16:20:09 <elliott> not
16:20:12 <CakeProphet> ANASIDHAISUDHQWIEUHASIUDHQWEIUHASOPAPQPWOEOWPEPWPESODJGFKDKDSKF
16:20:13 <elliott> thomas bernhardt why
16:20:24 <monqy> hi CakeProphet
16:20:33 <monqy> wacro?
16:20:36 <ais523> towards the end, they're just showing off some of the highest-rated levels, and completely missing the reasons /why/ they're highest-rated
16:20:37 <CakeProphet> xxxxtomasxxburnxxheartxxxx
16:20:53 <monqy> ais523: beautiful
16:21:14 <elliott> http://www.youtube.com/watch?v=vXcpU9RNxuc
16:21:15 <monqy> watching magic moments of enigma
16:21:16 <elliott> engrossing
16:21:22 <ais523> magic moments is considerably better than the trailer
16:21:26 <monqy> oh :(
16:21:40 <elliott> ais523: do you click links nowadays, i'd like your opinion of that linked level
16:21:50 <CakeProphet> portal chess is considerably better than all games.
16:21:56 <CakeProphet> the best at game.
16:21:59 <ais523> I'm not clicking that, but only because it'd open in Firefox, which doesn't have Flash added
16:22:03 <elliott> more like chortal pess :/
16:22:04 <ais523> I'll open it in a browser that does have Flash support
16:22:19 <monqy> magic moments has good music
16:22:21 <CakeProphet> elliott? more like liotioeltot
16:22:24 <monqy> if only the trailer had this music
16:22:25 <ais523> oh, "bowling", it's a stupid annoying luck-based level
16:22:35 <ais523> I hate it
16:22:54 <elliott> what about a bayou by you
16:22:55 -!- augur has joined.
16:22:57 <elliott> that one also has a funny playthrough
16:23:04 <ais523> I don't think I've solved that one
16:23:07 <elliott> http://www.youtube.com/watch?v=sa2_TpYJ_Ug
16:23:09 <elliott> six seconds :P
16:23:30 <ais523> or, maybe I have
16:23:34 <ais523> but not that fast
16:23:47 <elliott> lol
16:23:47 <Phantom_Hoover> why is there a scantily-clad anime girl in the suggestions thing at the end
16:23:48 <ais523> Alain Busser has a tendency to make huge, artistic levels that are quite easy once you know the solutions
16:23:52 <ais523> also, excessively mathematical ones
16:24:03 <elliott> Phantom_Hoover: That is the true spirit of Enigma.
16:24:17 <elliott> Truspirenigmat.
16:24:21 <elliott> Wow, it's German.
16:24:42 <CakeProphet> enjoy baby
16:24:43 <Phantom_Hoover> Where's this magic moments video?
16:24:46 <ais523> Engima is indeed originally German
16:24:52 <elliott> ais523: So is truspirenigmat.
16:25:00 <ais523> but it's translated into a lot of langauges
16:25:02 <ais523> *languages
16:25:04 <elliott> It's quite a German game, Enigma. Not quite sure why I say this.
16:25:07 <monqy> http://www.youtube.com/watch?v=umbOX3DwxeQ magic moments
16:25:13 <ais523> I feel so honoured having text strings I wrote translated into other languages
16:25:18 <elliott> :')
16:25:27 <ais523> I see a french translation of something in one of my levels, and bask in it
16:25:29 <elliott> did they translate it into non-ais english
16:25:40 <elliott> "original string had too many nested parentheses and overflowed enigma's string buffer"
16:25:46 <monqy> i want enigma in zzo english
16:25:49 <ais523> they even translated the original English into non-ais English
16:26:00 <elliott> monqy: it would be too much
16:26:01 <elliott> too much
16:26:02 <ais523> by adding spaces before punctuation marks other than full stops
16:26:15 <elliott> ais523: that's French english :P
16:26:28 <ais523> one level I wrote is called "Choices, choices ..."
16:26:34 <ais523> I think it's a ... not a …
16:26:43 <ais523> but I'm not completely sure, I find them hard to tell apart
16:28:01 <ais523> btw, the addition of "rhythm of space" at the end of the trailer was just trolling, as the level isn't actually /in/ the released version of Enigma
16:28:23 <ais523> also, it's a really trollish level, it's just a really really big maze with lots of backtracking and items and deathtraps
16:28:31 <ais523> I don't like big levels that are easy to die in / make unwinnable
16:28:48 <elliott> `quote flip a coin
16:28:50 <HackEgo> 610) <monqy> game where you flip a coin but it's really really big
16:28:52 <elliott> enigma needs that
16:29:06 <ais523> unless such deaths/unwins are always the player's fault and the player has enough information to work it out in advance
16:29:24 <ais523> (that's what I did with "Choices, choices ..." where you get to see the entire level before you start playing, and there's basically no hidden information)
16:29:46 <elliott> So how's the Enigma AI scene
16:29:50 <elliott> I guess the Lua stuff kinda messes with that
16:29:54 <ais523> I don't think it exists
16:30:00 <elliott> It should
16:30:07 <ais523> and quite a lot of levels don't need custom Lua
16:30:17 <ais523> I avoid it in my levels where I can and still meet the concept of the level
16:30:59 <ais523> sometimes dynamic scripting is unavoidable, but I hope to avoid it where possible
16:31:15 <ais523> (I use Lua to /generate/ the levels quite a lot, so that a level isn't the same every time, but that's different as everything still acts like you'd expect it to)
16:37:41 <elliott> does anyone know a good way to do a human-consumable diff of binary files?
16:38:08 <ais523> elliott: od then diff works if the difference is a multiple-of-n bytes long (where n is the line width)
16:38:22 <elliott> it's probably nit
16:38:23 <elliott> not
16:38:29 <elliott> I'd prefer it be agnostic to such "relocations"
16:38:32 <elliott> this is for human debugging
16:39:16 <ais523> hmm, someone came up with a known-plaintext attack against SSL and TLS a couple of days ago, and I only found a reference to the story today
16:39:43 <ais523> and apparently known-plaintext is generally possible to pull off atm, even though it's not the easiest sort of attack to manage
16:40:01 <elliott> ouch
16:40:23 <elliott> oh no, SUA is deprecated
16:41:01 <ais523> (apparently the usual trick is an XSS-like thing that injects a huge amount of plaintext)
16:41:47 <elliott> but seriously, human-readable binary diff? anyone? no?
16:42:13 <ais523> what about this: express both binaries as images, diff by eye
16:42:13 <CakeProphet> 1) translate binaries to human-readable format 2) apply diff
16:42:32 <ais523> I suppose that if binary = executable, disassemble + diff might work
16:42:55 <elliott> ais523: Images aren't relocation-insensitive
16:42:55 <elliott> as in
16:42:57 <elliott> if one file is
16:42:59 <elliott> A B C D E F G H
16:43:00 <elliott> and the other is
16:43:03 <elliott> A B C F G H
16:43:05 <elliott> I want it to look like
16:43:15 <elliott> A B C D E F G H
16:43:15 <elliott> A B C F G H
16:43:16 <elliott> as in
16:43:22 <elliott> it "re-synchronises"
16:43:32 <ais523> yep, getting output in that format seems rather harder
16:43:33 <elliott> so that e.g. a missing field doesn't cause cascading diff errors
16:43:34 <elliott> indeed
16:44:42 <ais523> well, I mean, with visual diffing, you'd see it as a translation in the pixels of an image after a certain point, but not before
16:44:56 <ais523> are you going to admit the exact use-case? someone might have a better idea
16:44:59 <elliott> indeed, but that's still hard to diff
16:45:07 <elliott> ais523: sure, my serialisation of packets is wrong
16:45:09 <elliott> or my deserialisation
16:45:09 <elliott> basically
16:45:13 <elliott> parse | unparse =/= id
16:45:17 <elliott> and I want to see where my errors are
16:45:25 <ais523> (the thing I love about this channel is that "how can I do X using Y?" isn't answered "don't use Y" but "that seems weird, here's the best way I can think of..."
16:45:27 <ais523> )
16:45:32 <ais523> ah, I see
16:45:33 <elliott> parse | print-readable produces very reasonable output and it's gone through many debugging cycles
16:45:37 <elliott> but serialisation hasn't been tested at all
16:45:40 <fizzie> ais523: "Came up with -- a couple of days ago" -- the known-IV weakness has been known since 2004, and was fixed in TLS 1.1 in 2006.
16:45:42 <elliott> and I'm not sure where to start
16:45:46 <ais523> and you're serialising to a binary format?
16:45:51 <elliott> yep
16:45:54 <ais523> fizzie: well, maybe people actually found a way to exploit it
16:45:57 <elliott> the smallest packet dump I can get is like ten kilobytes
16:46:02 <ais523> and that's what caused the stories to start
16:46:16 <ais523> parse is a filter from text to binary?
16:46:27 <fizzie> ais523: http://eprint.iacr.org/2004/111.pdf from 2004 describes a practical way to exploit it, using a browser plugin; it's very likely to be pretty much exactly like the currently hyped thing.
16:46:57 <elliott> ais523: no, parse is binary to memory-format
16:47:06 <elliott> unparse is memory-to-serialisation
16:47:22 <ais523> ah, I see
16:47:34 <ais523> so the input itself is binary, and the output of unparse is meant to be the same binary format
16:47:42 <ais523> but the file you get is different, and you're not sure how
16:47:45 <elliott> yep
16:47:51 <elliott> and I'm pretty sure the parse type is right
16:48:05 <ais523> it's probably best to start off by seeing how many bytes are different, I think
16:48:09 <ais523> and whether it's substitution/insertion/deletion
16:48:19 <ais523> od with a width of 1 and diff would work for that, I think
16:48:55 <Phantom_Hoover> elliott, convert it into 1s and 0s and then use normal diff.
16:49:02 <ais523> meanwhile, the US government has recently made it illegal to patent tax loopholes
16:49:10 <ais523> or possibly impossible
16:49:22 <elliott> Phantom_Hoover: diff is line-based
16:49:22 <fizzie> It's also (to pick some nits) not exactly a known-plaintext attack. If anything, it could be sort-of called a chosen-plaintext attack.
16:49:29 <Phantom_Hoover> Pfft.
16:49:39 <Phantom_Hoover> Put each byte on its own line.
16:49:43 <elliott> Hmm, what we really need is a diff that works on entirely freeform data, not line-based.
16:49:46 <elliott> And does that resynchronisation.
16:49:53 <elliott> Then you can just do it on one-line hexdumps.
16:50:02 <elliott> And reformat the output to have a nice number of columns.
16:50:20 <ais523> <Phantom_Hoover> Put each byte on its own line. <-- what I was saying
16:50:32 <ais523> fizzie: hmm, good point
16:50:36 <ais523> that's even harder than known-plaintext
16:51:06 <ineiros> fizzie: I think I bought more than 5 SICPs, actually; since I still have several. I think I've given at least one as a gift, and sold 3.
16:52:00 <fizzie> ineiros: Have you made any money with your SICP speculation?
16:52:04 <elliott> I should probably learn how to use od instead of hexdump.
16:52:17 <elliott> ais523: I'm tempted to write that free-form diff even though I'm sure it exists.
16:52:38 <ais523> od has a reasonably unintuitive options syntax
16:52:43 <ais523> I keep checking the manpage whenever I use it
16:53:31 <elliott> That's POSIX for you.
16:53:34 <Phantom_Hoover> http://jpfo.org/
16:53:35 <Phantom_Hoover> I...
16:53:51 <elliott> ah
16:54:16 <elliott> this uh
16:54:18 <elliott> this is a thing
16:54:24 <monqy> Gun Control Kills Kids!
16:55:05 <monqy> is this for real
16:55:09 <elliott> "antis - mental problem?"
16:55:14 <monqy> http://jpfo.org/images07/buster-350-pre-png-aliased.gif
16:55:21 <elliott> ok this is just like the most bad thing I don't think we even have anything to discuss about this
16:55:25 <elliott> next topic
16:55:41 <elliott> ais523: does od have an equivalent to hexdump's -C?
16:55:46 <elliott> it doesn't look like it
16:55:51 <elliott> -C being "give me reasonable output" :-P
16:56:04 <elliott> Oh man, od can do floats.
16:56:14 <ais523> what do you mean by "reasonable"?
16:56:33 <ais523> -t x1z is what duplicates most hexdump programs I've seen
16:56:57 <elliott> ah, thanks
16:57:02 <elliott> 0113400 a0 59 7f 41 d5 99 93 01 0d 40 72 af 8d 8b a1 fd >.Y.A.....@r.....<
16:57:02 <elliott> 0113420 9e 40 00 00 40 44 ec af c5 ce 90 >.@EO\)...@D.....<
16:57:02 <elliott> 0116700 12 01 0b 40 72 b6 7d 5b b1 b7 f0 40 44 80 00 00 >...@r.}[...@D...<
16:57:04 <elliott> something went wrong there...
16:57:11 <elliott> (view in monospace)
16:57:12 <cheater> does anyone know how to make dwarf fortress use a bigger font?
16:57:35 <ais523> super-mousewheelup? </troll>
16:57:37 <elliott> ais523: -w 1 seems /enlarge/ the number of bytes per line...
16:57:44 <elliott> ais523: also, it's actually scroll wheel up
16:57:49 <elliott> so you were almost right
16:57:56 <ais523> heh
16:58:04 <ais523> super-mousewheelup is my keybinding for telling the WM to zoom in
16:58:08 <elliott> oh, I just needed to omit the space between flag and argument, sigh
16:58:13 <ineiros> fizzie: I think I paid 20€ for my own copy, and it may be that I asked 20 € for the copies I sold, so I guess that I'm at least even.
16:58:31 <cheater> ais523: i think that doesn't work
16:58:43 <fizzie> "Adding a z suffix to any type displays printable characters at the end of each output line." <- whoa, I didn't know it did that.
16:58:49 <ais523> cheater: well, you're probably using a different compositor to me
16:58:53 <elliott> is cheater actually disregarding my correct answer just because it's from me
16:59:07 <ais523> cheater: elliott suggested mousewheelup without super, I don't know if it works or not
16:59:18 <cheater> there was a correct answer from him?
16:59:22 <cheater> let me read the scrollback
16:59:30 <fizzie> Unfortunately the "z" in od is not in POSIX od.
16:59:30 <elliott> oh, diff -y is cool
16:59:32 <cheater> that actually needs announcement
17:00:04 <cheater> no, his answer was not correct
17:00:07 <cheater> it was just a troll
17:00:10 <elliott> lol
17:00:18 * elliott adjusts his dwarf fortress font size a bit
17:00:23 <elliott> i so mad
17:00:35 <cheater> mouse wheel up makes it smaller, mouse wheel down cannot make it any bigger than it is already
17:01:09 <elliott> then one character should fill about a fifth of your screen so I'd say it's big enough
17:01:58 -!- sllide has joined.
17:02:42 <elliott> ais523: thanks, I think this will let me pinpoint the solution
17:02:48 <elliott> diff -y --suppress-common-lines is great
17:03:01 <ais523> what does --suppress-common-lines do? or -y, for that matter?
17:03:14 <elliott> -y is side-by-side view
17:03:17 <elliott> --suppress-common-lines does what it says on the tin
17:03:22 <ais523> yep, fair enough
17:03:30 <elliott> I'm not entirely sure why it's in diff, but oh well
17:03:34 <ais523> do the context options interact with that in any way?
17:03:38 <elliott> not sure
17:05:01 <elliott> hmm, now what I really need is this annotated with the pretty parsed versions of the packets :)
17:05:06 <elliott> maybe I should just teach Wireshark the Minecraft protocol
17:05:19 <fizzie> mchosting again?
17:05:56 <elliott> fizzie: Yes, I'm just converting the test program to iterIO and checking that my serialisation... you know, works.
17:05:59 <elliott> It seems the answer is "almost".
17:06:25 <fizzie> http://www.highprogrammer.com/alan/games/video/minecraft/minecraft-dissector.html "Minecraft Dissector for WireShark"
17:06:29 <fizzie> It probably: sucks.
17:06:35 <elliott> I don't think I'm going to try that.
17:06:36 <fizzie> Usually that sort of things tend to.
17:06:49 <fizzie> "'m using it to develop a Perl library (Minecraft::Client) for speaking the Minecraft protocol. It's forked from Scott Brooks's dissector. Scott provided a great starting point, but it hadn't been updated to the Beta."
17:12:15 <CakeProphet> elliott: I don't really see how it would be statistically likely for the n-grams to generate an existing word.
17:12:27 <CakeProphet> as each word only contributes one to the frequency of each of its n-grams.
17:19:37 <Phantom_Hoover> http://www.lotrfanshop.com/lotrshop/navel-rings.asp
17:19:39 <Phantom_Hoover> I....................
17:19:47 <elliott> "Artist's conception of soul joining the fertilized egg at conception." --Conservapedia caption
17:20:26 <Phantom_Hoover> elliott, what page?
17:20:32 <elliott> http://www.conservapedia.com/Human_reproduction
17:20:37 <elliott> Spiritual aspects section is best.
17:20:51 <elliott> "Humans are not able to reproduce alone by budding, parthenogenesis, or self-cloning as some species are capable of."
17:20:53 <elliott> l a m e
17:21:44 <Phantom_Hoover> OK, that is the best artist's conception.
17:22:48 <elliott> It would make a good album cover.
17:23:29 <Phantom_Hoover> http://www.brickshelf.com/gallery/sdarrin/My-Lego-Sets/7251.jpg
17:23:35 <Phantom_Hoover> Oh my god that expression.
17:24:04 <elliott> What are you even doing.
17:24:42 <Phantom_Hoover> help its tv tropes
17:25:33 <elliott> ais523: it turns out that this od diff method is great for getting an initial lead but useless for going further than that :D
17:25:44 <ais523> sounds about right
17:25:55 <elliott> so I'm not sure where to go next, really
17:25:57 <fizzie> What have you broken this time?
17:27:25 <Gregor> `pastelogs thou shalt not
17:27:45 <Gregor> ... ... ...
17:27:47 <HackEgo> http://codu.org/projects/hackbot/fshg/index.cgi/raw-file/tip/paste/paste.15122
17:28:00 <fizzie> Thou shalt not be impatient with thy logs.
17:28:06 <Gregor> :P
17:28:45 <Gregor> "However, there has never been any evidence presented that the soul can enter the body at any time later than conception." lololol
17:28:49 <elliott> fizzie: mchost's serialisation.
17:29:04 <fizzie> Oh, not de- this time?
17:29:17 <elliott> Gregor: As opposed to all the evidence presented that the soul can enter the body at conception :P
17:29:34 <elliott> fizzie: Yeah, I think de- has been pretty thoroughly tested by this point.
17:29:41 <Gregor> elliott: EXTENSIVE LITERATURE SUGGESTS
17:29:45 <elliott> As opposed to , which hasn't been tested at all.
17:29:48 <elliott> (Prefix words: problematic.)
17:29:58 <ais523> elliott: -?
17:30:02 <elliott> ais523: ?
17:30:04 <elliott> I guess that would wokr
17:30:04 <Gregor> "The ultimate act of intimacy serves to unite the male and female gametes, the sperm and egg, respectively." // this is pretty great too
17:30:05 <elliott> work
17:30:16 <Gregor> Sure sounds ultimately intimate, dunnit.
17:35:56 <Gregor> `logurl 2006-08-08
17:35:58 <HackEgo> http://codu.org/logs/log/_esoteric/2006-08-08
17:36:12 <elliott> logurl: the best.
17:36:18 <elliott> Gregor: I already logurl'd that :P
17:36:49 <Gregor> Uhh, if you did, you did it secretly :P
17:38:38 <elliott> Yep :P
17:40:03 <elliott> Why don't we have applicative-based (de-)serialisation isomorphism combinator things yet again
17:41:42 <Gregor> Talk:Human Reproduction is almost as good as the page.
17:42:15 <elliott> Soul Conception by Human Reproduction
17:42:15 <elliott> http://conservapedia.com/images/9/93/Soul_Conception.jpg
17:42:19 <elliott> Out December on Conservative Records
17:42:26 <Gregor> X-D
17:42:50 <CakeProphet> elliott: so I was thinking for functions on discrete signals it would be best to pass the sample rate as an implicit parameter, yes?
17:42:54 <CakeProphet> regarding signal processing in Haskell.
17:43:11 <CakeProphet> or just as a record field?
17:43:20 <elliott> Implicit parameters are a misfeature and should never be used; nobody at all wants them to stay in the language, and they've been used approximately once.
17:43:32 <Gregor> I DESPERATELY want to shoop that image to make it "crisper" but also shoop in that weird creepy happy face that people like to shoop into things.
17:43:33 <CakeProphet> I feel the implicit parameter would be more convenient though...
17:43:42 <elliott> There's no reason to fix the sample rate at a set value; there's no reason it cannot vary within the same set of data. [(Time,a)] where a is the value being sampled captures that perfectly.
17:43:58 <CakeProphet> okay
17:44:02 <elliott> If there is a fixed sample rate, it can be computed from the constant difference between each Time.
17:44:32 <elliott> I note that the continuous (Time -> a) and discrete [(Time,a)] signal models are exactly the models of Behaviour and Event in FRP.
17:44:49 <elliott> Gregor: Which weird creepy happy face?
17:44:51 <elliott> :awesome:?
17:45:10 <Gregor> elliott: Apparently that's the name for it, according to google :P
17:45:11 <fizzie> The trollface?
17:45:18 <fizzie> It's creepy and happy.
17:45:23 <elliott> FSVO happy.
17:45:26 <CakeProphet> elliott: also you were saying that there would be no need to convert continuous to discrete or vice versa if differing signal representations shared a common interface
17:45:29 -!- augur has quit (Remote host closed the connection).
17:45:29 <elliott> Also Gregor didn't specify "abominable", so...
17:45:32 <CakeProphet> but I'm at a loss as to what interface that would be.
17:45:37 <elliott> http://conservapedia.com/ADA_(programming_language) ;; they miscapitalised Ada. Burn.
17:45:56 <Gregor> http://knowyourmeme.com/memes/awesome-face-epic-smiley <-- this guy
17:45:57 <elliott> CakeProphet: Build them with separate interfaces, find the operations common to both, define laws for them, create typeclass
17:45:58 <Phantom_Hoover> "It is equal in power to Java and is especially popular for programming embedded systems."
17:46:06 <elliott> Or just keep it monomorphic if it works.
17:46:15 <elliott> awesome-face-epic-smiley <- augh
17:46:30 <Gregor> elliott: Don't looka me :P
17:46:53 <Gregor> Anyway, that on the egg :P
17:47:08 <elliott> The program, and detailed technical commentary, appeared in the paper "Sketch of the Analytical Engine Invented by Charles Babbage"[1] that Ada wrote in 1843. The program itself has been reproduced in the "sidebar" on page 79[2]. It can also be seen in the original paper. First there is a list of the six input and output variables that are used: V1, V2, V3, V21, V22 and V23. And the temporary variables V4 through V13. In modern terminology in a s
17:47:08 <elliott> trongly typed language such as C++, we would write something like:
17:47:08 <elliott> int V1, V2, V3; // inputs
17:47:08 <elliott> int V21, V22, V23; // outputs
17:47:10 <elliott> int V4, V5, V6, V7, V8, V9, V10, V11, V12, V13; // temps
17:47:13 <elliott> No Conservapedia stop no.
17:47:16 <elliott> This cannot end well.
17:47:35 <elliott> (She used the old-fashioned multiply and divide signs "[X sign]" and "[dots over - sign]". These seem quaint by today's standards, but they were the symbols that people used at the time. Neither the 026 keypunch nor the ASCII character set had been invented.)
17:47:42 <elliott> So old-fashioned, we use them in our schools today.
17:48:00 <elliott> Or has America standardised on the asterisk multiplication symbol and the slash divisor
17:48:00 <Phantom_Hoover> We use them until we start doing algebra, that is.
17:48:05 <elliott> Phantom_Hoover: Note "schools".
17:48:13 <fizzie> Conservapedia: the best way to learn how to program?
17:48:51 <elliott> [[conservapedia:Ada Lovelace]] is disappointingly light on THAT WIMMEN CAN'T HAVE DONE PROGRAMMED IT SHE MUST HAVE GOT HER HUSBAND TO DO IT.
17:48:52 <ais523> elliott: wasn't Ada invented before capital letters? so it would have been written ADA at the time?
17:48:56 <ais523> *before lowercase letters
17:48:59 <elliott> "Category: Women"
17:49:01 <elliott> Good categorisation.
17:49:24 <elliott> ais523: :)
17:49:28 <Phantom_Hoover> http://conservapedia.com/Evolutionary_algorithm
17:49:32 <CakeProphet> elliott: on conservapedia America is the best place with the best opinions.
17:49:33 <elliott> Phantom_Hoover: oh no.
17:49:33 <Phantom_Hoover> It delivers what it promises.
17:49:53 <elliott> Evolutionary algorithms can be seen as an experimental test of Darwin's theory of evolution, and their eventual failure can be seen as a refutation of that theory[Citation Needed].
17:49:54 <elliott> :')
17:49:56 <elliott> thank god for integer programming
17:50:02 <elliott> Integerllient design
17:51:01 <CakeProphet> I wonder how many contribute to conservapedia as a parody of conservative opinions.
17:51:27 <Phantom_Hoover> CakeProphet, as a RationalWiki veteran, I can confirm that most of them do.
17:51:48 <CakeProphet> what an utterly bizzare passtime
17:51:58 <elliott> Satire: So WEIRD.
17:52:04 <elliott> Swift. What was WITH that dude? Why did he even write about eating babies.
17:52:10 <elliott> He should have wrote about the virtues of not eating babies.
17:52:13 <elliott> That would be less bizarre.
17:53:09 <CakeProphet> elliott: note that spending large amounts of time contributing to a resource of information with a conservative viewpoint entirely for satirical purposes is quite different from satire itself
17:53:25 <CakeProphet> I was not saying satire is weird.
17:56:37 <ais523> didn't Conservapedia famously threaten to sue trolls?
17:56:40 <ais523> did they ever go through with it?
17:57:18 <elliott> ais523: Their "Commandments" state all sorts of threatening legal things if you do bad things.
17:57:25 <elliott> "Unproductive activity, such as 90% talk page edits and only 10% quality edits to Conservapedia articles, may result in blocking of the account.[7] See the Guidelines for more detail."
17:57:28 -!- augur has joined.
17:57:29 <elliott> Metapedians: literally the devil.
17:57:55 <ais523> they'll probably end up with their infrastructure suffering
17:58:11 <elliott> ais523: They don't have any infrastructure.
17:58:26 <CakeProphet> dadaopedia is the best of the hypothetical opinionated encyclopedias.
17:58:34 <ais523> so how do they, say, decide what to delete?
17:58:40 <CakeProphet> *dadapedia?
17:58:56 <elliott> CakeProphet: Is that where everyone is really boring and tries to ~approach art~ by being ~random~?
17:59:09 <elliott> ais523: Fiat, warring, arguments, personal threats, cabals
17:59:14 <elliott> So, just like Wikipedia, but smaller
17:59:27 <ais523> heh
17:59:46 <ais523> elliott: have you never heard of Bjorn?
17:59:47 <CakeProphet> elliott: not quite.
18:00:07 <elliott> ais523: That didn't approach art, that /was/ art.
18:00:12 <elliott> THE BEST ART.
18:00:14 <CakeProphet> elliott: dadaism isn't really "lol random"
18:01:06 <elliott> CakeProphet: It is when filtered through the internet's awful lens that decides to take, like, discordianism, dadaism, and about ten other things, and mix them together into the most boring concept imaginable.
18:10:50 <CakeProphet> oh, well yes.
18:10:56 <CakeProphet> see: uncyclopedia, for that
18:13:38 -!- sebbu2 has joined.
18:13:38 -!- sebbu2 has quit (Changing host).
18:13:38 -!- sebbu2 has joined.
18:13:59 -!- sebbu has quit (Ping timeout: 260 seconds).
18:14:35 <Phantom_Hoover> <ais523> didn't Conservapedia famously threaten to sue trolls?
18:14:39 <Phantom_Hoover> Better than that.
18:14:59 <Phantom_Hoover> They threatened to report vandals to the FBI and charge them under anti-somethingorother laws.
18:15:30 <cheater> hahahaha
18:15:37 <cheater> nice.
18:20:12 -!- Ngevd has joined.
18:20:18 <Ngevd> Hello
18:20:30 <elliott> hi
18:20:43 <ais523> hi
18:25:12 <ais523> elliott: did you see the extreme negative code documentation page via proggit?
18:25:22 * elliott checks
18:25:44 <ais523> I would comment on it, but can't think of an appropriate comment
18:26:19 <elliott> #N If we don't require 'based', we can't use Based:: module
18:26:20 <elliott> require 'based'
18:26:20 <elliott> #N If we don't require 'synqa', we can't use Synqa:: module
18:26:20 <elliott> require 'synqa'
18:26:20 <elliott> #N If we don't require 'digest/sha2', we can't use Digest::SHA256
18:26:20 <elliott> require 'digest/sha2'
18:26:22 <elliott> I'm sick of it already
18:26:34 <elliott> #N Without :uploaddry, the only way to see what files are going to be uploaded and/or deleted by :upload is to actually call :upload and do the actual uploading and deleting.
18:26:38 <elliott> cool, it's like writing the code you were going to write
18:26:41 <elliott> but in a really awkward tense
18:26:48 <elliott> and without any sort of checking by the computer
18:27:06 <ais523> yep, I think it's the wrong level of granularity
18:27:19 <ais523> some of the comments are useful, but you're going to mentally filter them with that many useless
18:28:03 -!- sebbu2 has changed nick to sebbu.
18:29:47 <elliott> "So far, #reddit has increased my daily traffic 30000%, and still growing. Just under 3000 hits today." -- embedded twitter feed of someone with a post from reddit
18:29:49 <elliott> a whole three thousand hits
18:30:18 <Ngevd> If all my facebook friends visited a page twice, it would have more hits than that
18:30:42 <ais523> elliott: rather than their usual 10
18:30:58 <ais523> Ngevd: how would you get all your facebook friends to do that?
18:31:19 <elliott> ais523: no, usual one tenth
18:31:19 <elliott> I think
18:31:22 <elliott> oh, hmm
18:31:24 <elliott> percentages are hard
18:31:35 <Ngevd> ais523: With great difficulty
18:31:36 <elliott> Ngevd: quick, get all your facebook friends to visit that blog post twice
18:31:42 <elliott> it's for science
18:32:23 <Ngevd> Link?
18:32:26 <fizzie> If all my Google+ friends were to visit a page twice, I'd have 8 hits. And I might even be able to convince them.
18:32:34 <elliott> http://poita.org/index.php/blog/1-latest-news/67-thoughts-on-immutability-in-d, it's boring but WHO CARES
18:32:37 <elliott> It's for science.
18:32:39 <elliott> Sciency science.
18:32:44 <elliott> SPECULATIVE science.
18:33:57 <Ngevd> SOCIAL SCIENCE
18:34:14 <elliott> No no no SPECULATIVE science.
18:34:23 <elliott> We need someone to catch the reference. At least Gregor. Come on, anyone?
18:34:34 <ais523> if all my Facebook friends were to visit a page, it wouldn't make any difference at all
18:34:45 <monqy> whats facebook friends
18:35:01 <Ngevd> Something I have way to many of, monqy
18:35:41 <Ngevd> One thousand eight hundred and twenty five
18:35:44 <elliott> `addquote <ais523> if all my Facebook friends were to visit a page, it wouldn't make any difference at all
18:35:45 <HackEgo> 678) <ais523> if all my Facebook friends were to visit a page, it wouldn't make any difference at all
18:35:53 <ais523> elliott: it's not that good a quote
18:35:58 <elliott> I liked it
18:36:44 <ais523> `quote
18:36:46 <HackEgo> 378) <ais523> the big issue with category theory is that pretty much everything forms a category
18:36:52 <ais523> `quote
18:36:54 <HackEgo> 402) <elliott> Top universities now employ people to watch infomercials all day to find the latest mysteries.
18:36:57 <ais523> `quote
18:36:59 <HackEgo> 17) IN AN ALTERNATE UNIVERSE: <pikhq> First, invent the direct mind-computer interface. <pikhq> Second, learn the rest with your NEW MIND-COMPUTER INTERFACE.
18:37:02 <ais523> `quote
18:37:03 <HackEgo> 181) <ais523> you should be eating corpses more
18:37:06 <ais523> `quote
18:37:08 <HackEgo> 296) <elliott_> I'm a bit 'tarded.
18:37:11 <elliott> That was one alternate universe quote, quality is guaranteed.
18:37:12 <ais523> `quote
18:37:13 <elliott> What, that one isterrible.
18:37:14 <HackEgo> 275) <nddrylliog> are you always careful to have a small enough margin so that it can't contain the proof? <oklofok> nddrylliog: i usually use latex, and make sure my hd is almost full
18:37:16 <elliott> `delquote 296
18:37:18 <HackEgo> ​*poof*
18:37:29 <ais523> heh, I like 275
18:37:32 <ais523> `quote
18:37:33 <HackEgo> 481) <Gregor> oklopol: Why do you have so much experience with hoop-and-stick? :P <oklopol> Gregor: my fetish: learning pointless skills
18:37:38 <ais523> `quote
18:37:40 <HackEgo> 308) <fizzie> file:///home/fis/src/chainlance/tapestats.png -- yes, I think it's nice that way when the edge is always the opponent's flag.
18:37:57 <ais523> why is that in the qdb?
18:38:05 <ais523> some innuendo I haven't spotted?
18:38:19 <fizzie> Ot
18:38:27 <fizzie> It's just mocking my file:/// URI.
18:38:27 <elliott> ais523: linking to file:///
18:38:33 <ais523> ah, I see
18:38:33 <fizzie> MOCKING.
18:38:37 <ais523> I was even tempted to visit that URL
18:38:43 <fizzie> MOOOOCKING.
18:38:46 <ais523> `quote
18:38:47 <elliott> I clicked open but nothing happened :(
18:38:48 <HackEgo> 347) <ais523> elliott: hey, thinking's easier than using the Internet
18:38:55 <ais523> my client didn't autolink it
18:38:56 <ais523> `quote
18:38:58 <HackEgo> 143) <AnMaster> alise, marble <AnMaster> marbelus
18:39:04 <ais523> I still stand behind my opinion in 247
18:39:06 <ais523> *347
18:39:07 <fizzie> "Firefox can't find the file at /home/fis/src/chainlance/tapestats.png." :( :(
18:39:09 <ais523> `quote 247
18:39:10 <HackEgo> 247) <ais523> I love the way zzo38's comment was cut off after the f of brainfuck <ais523> that's just the most hilarious place to cut it off in a discussion about censorshi
18:39:11 <elliott> fizzie: rip
18:39:29 <elliott> -NickServ- Last failed attempt from: Elliott!~3lli0tt@cpc1-woki6-2-0-cust904.6-2.cable.virginmedia.com on Sep 22 14:31:14 2011.
18:39:31 <elliott> DIEEEEEEEEEEEEEE
18:39:42 <elliott> I need to figure out what nick that guy is using and punish them.
18:40:02 <ais523> elliott: someone else trying to log into your account?
18:40:05 <monqy> 3lli0tt
18:40:08 <ais523> ~3lli0tt is a really awful username
18:40:09 <elliott> ais523: repeatedly
18:40:15 <elliott> this ain't yer username, kiddo >:(
18:40:22 <elliott> I should start using elliott_ and /whoising elliott periodically to catch them
18:40:32 <elliott> or just set up a bot to ghost elliott constantly if it's not logged in
18:40:37 <elliott> that's better than the thirty second grace period
18:40:41 <elliott> five seconds, bam, ghosted
18:41:17 <ais523> hmm, it seems I mentally pronounce 3lli0tt as "threlliott"
18:41:32 <elliott> :D
18:41:32 <fizzie> http://www.youtube.com/user/3lli0tt <- same guy?-)
18:41:33 <monqy> wow in addition to elliottcable and elliottt there is also an elliot
18:41:34 -!- elliott has changed nick to threlliott.
18:41:52 <ais523> I'm not sure whether my pronunciation of it ends with one or two t's
18:41:57 <ais523> because they're pronounced the same
18:42:33 <threlliott> fizzie: this morning i saw thor pawning his hammer at the store
18:42:52 <threlliott> this is the maamazing vidoe...
18:43:05 <threlliott> what is htis.........................
18:43:06 <threlliott> help
18:44:05 <monqy> wow what
18:54:25 <threlliott> ?hoogle read
18:54:25 <lambdabot> Prelude read :: Read a => String -> a
18:54:25 <lambdabot> Text.Read read :: Read a => String -> a
18:54:25 <lambdabot> module Text.Read
18:54:26 <threlliott> meh
18:54:28 <threlliott> ?hoogle Read a => q
18:54:29 <lambdabot> Did you mean: :: q /count=20
18:54:29 <lambdabot> Prelude undefined :: a
18:54:29 <lambdabot> Test.QuickCheck.Batch bottom :: a
18:54:34 <threlliott> ?hoogle Read a => String -> m a
18:54:34 <lambdabot> Prelude readIO :: Read a => String -> IO a
18:54:35 <lambdabot> System.IO readIO :: Read a => String -> IO a
18:54:36 <threlliott> yay
18:54:37 <lambdabot> Network.CGI.Protocol maybeRead :: Read a => String -> Maybe a
18:55:05 <threlliott> :t reads
18:55:06 <lambdabot> forall a. (Read a) => String -> [(a, String)]
19:04:32 <ais523> wow, unexpected: tPCI release the rules for the 2012 Pokémon Video Game Championships, competitive Pokémon players actually like them
19:04:40 <ais523> both halves are unexpected for me
19:09:53 <Ngevd> I need a CLOTH TAPE MEASURE
19:10:20 <pikhq> Y'know, traditional monolithic kernels provide a very *strange* form of abstraction.
19:10:54 <pikhq> They present an environment that is both very low-level *and* has little to do with what common machines actually do.
19:14:31 <pikhq> I mean, they do crazy things like present an idea of memory allocation that is *not* in terms of "Place a page in my address space at address foo, kthx"
19:17:11 <pikhq> And the fuck is with files? It's such a painfully low-level scheme, and yet the low-level abstraction that would make sense would be something along the lines of allocating disk blocks to do with as you will.
19:17:39 <threlliott> I was hating on Unix, files before it was cool.
19:17:58 <pikhq> threlliott: This rant is provided by me trying to get a basic kernel running.
19:18:11 <pikhq> And wondering "why the *fuck* does anyone do anything like this".
19:18:23 <threlliott> Kernels are also an outdated notion, if you're going to whine.
19:19:06 <monqy> @ always and forever
19:19:11 <threlliott> Amen.
19:19:30 <pikhq> Well, yeah, ideally a "kernel" would be a startup routine which would start a scheduler.
19:19:33 <Phantom_Hoover> The @ of Now and Forever.
19:20:46 <threlliott> pikhq: Schedulers are also relatively obsolete, at least in the sense of having one and only one. Usually you'd want some entity using timers to manage the event chains and switch out the operational code of entities underneath its control, but there's no reason a privileged entity might not decide to disable interrupts, shut down the other cores, and manually co-opt out.
19:21:09 <threlliott> All a startup routine should do is restore the previous state; choices like schedulers are a matter of initial configuration.
19:21:16 <threlliott> (This is also simpler than writing a kernel.)
19:22:03 <pikhq> threlliott: Note I didn't say *the* scheduler.
19:22:24 <threlliott> Why should the startup routine concern itself with whether any scheduler exists at all?
19:22:32 <threlliott> It is trivially possible to have a valid configuration without one.
19:22:43 -!- azaq23 has joined.
19:22:47 <threlliott> (Say one privileged, atomic entity drawing garbage over the screen forever.)
19:23:30 <threlliott> > ('a','b')
19:23:31 <lambdabot> ('a','b')
19:23:42 <pikhq> Well, if you've got orthogonal persistance going (which you probably should)... Then it's more a matter of basic startup followed by restoring registers and jumping to the instruction pointer.
19:24:24 <pikhq> Or, more high-level (because why should your programs all be straight machine code?), just calling the continuation.
19:25:59 <threlliott> The startup code should just call a continuation, which will most likely set up persistence code from a fixed (or easily-locatable) location on the disk, and then call another continuation, which will result in the entire system state being restored as part of its execution.
19:26:03 <pikhq> Anyways. Traditional kernel design *seems* to basically be "write a support library for your programming language of choice, write some basic utilities, interrupt handlers, and drivers, and then hand userspace a small handful of comically low-level interfaces into this"
19:27:33 -!- threlliott has changed nick to elliott.
19:28:15 <pikhq> The kernel gets its own damned runtime library, simply because running machine code directly necessitates that there be no more advanced interfaces between the kernel and the program other than, basically, the standard UNIX complement.
19:28:45 -!- oerjan has joined.
19:29:53 <pikhq> And there's rather a lot of work that goes into maintaining this complete seperation, too. I mean, jeeze, a typical kernel maintains a page table per process, and switches them and entirely flushes the TLB on task switch.
19:30:26 <pikhq> Simply because there's no other way of providing sane guarantees with a machine code environment.
19:30:43 -!- tiffnya has changed nick to tiffany.
19:31:04 -!- tiffany has changed nick to tiffany|away.
19:31:16 -!- tiffany|away has changed nick to tiffany.
19:33:08 <CakeProphet> This is really considered evidence of anything? I've heard Mark Levin use the Spanish-inflected pronunciation of Sonia Sotomayor's name (so tow my OR rather than so tow MY er), but nobody would claim that proves he's Catholic or Hispanic. Golgaronok 23:55, 9 April 2010 (EDT)
19:33:12 <CakeProphet> Pronunciation shows an enormous amount about someone's views and history. Obama doesn't use the American pronunciation, and this is telling, since no one else in the public sphere pronounces it in the muslim way but Obama. DouglasA 00:15, 10 April 2010 (EDT)
19:33:16 <CakeProphet> bahahaha
19:33:26 <CakeProphet> conservapedia is so entertaining.
19:33:40 <monqy> is this for real
19:33:50 <CakeProphet> yes.
19:33:50 <oerjan> <elliott> Phantom_Hoover: Yes, but it's for conservatives, so they'll either be rich, or act as if they're rich in every situation despite not being rich.
19:34:10 <Phantom_Hoover> DouglasA... he was a parodist, I think.
19:34:11 <CakeProphet> monqy: Obama apparently pronounces Pakistan "the muslim way"
19:34:26 <CakeProphet> Phantom_Hoover: it's quite convincing and hilarious. :D
19:34:32 <oerjan> reminds me of this newspaper quip i read that american poor don't see themselves as poor, but as temporarily inconvenienced millionaires
19:34:43 <CakeProphet> lolwat
19:34:53 <Phantom_Hoover> Hmm, RW doesn't list him as one, actually.
19:34:54 <oerjan> well the conservative poor, anyway
19:34:59 <pikhq> Impressive, considering there's not a single "Muslim way", particularly for a country as linguistically diverse as Pakistan.
19:35:00 <elliott> oerjan: I was inspired by that, admittedly. :p
19:35:06 <CakeProphet> no, american poor see themselves as poor. american middle class see themselves as poor.
19:35:23 <CakeProphet> ...generally
19:36:06 <oerjan> CakeProphet: the idea here being to explain them supporting the rich by them having some idea that eventually they were going to be rich too. i think.
19:36:14 <CakeProphet> oh...
19:36:34 <elliott> >_<
19:36:44 <oerjan> "american dream" turned into a dogma, was my impression.
19:37:07 <pikhq> I blame Horatio Alger.
19:37:15 <CakeProphet> well they support the rich because rich people (aka conservative politicians) use a batshit stupid retoric they can understand.
19:40:46 <ais523> what's the usual path for per-user webpages on a UNIXy-setup server?
19:40:48 <CakeProphet> like, conservatives get poor people votes because they appeal to religion/intolerance.
19:40:52 <ais523> that is, the in-/home version of /var/www?
19:46:56 <elliott> ais523: public_html
19:47:01 <elliott> it's kind of gross
19:55:04 <ais523> elliott: thanks
19:55:17 <ais523> it seems to be the easiest way to manage what I'm doing for my job atm
19:55:37 <ais523> as it exists on the University computers
19:55:53 <ais523> atm, there's just a .html file there full of PHP tags
19:56:00 <ais523> I'm not sure if it's being served as-is or run through PHP first
19:56:02 * ais523 checks
19:56:22 <ais523> as-is, it seems
19:56:23 <ais523> how awful
20:02:40 <pikhq> What. What. What.
20:02:49 <pikhq> CERN has apparently observed particles moving >C.
20:03:20 <ais523> indeed, they're not sure what's going on either
20:03:34 <ais523> it's definitely not a statistical fluctuation, they repeated the experiment 15 thousand times to make sure
20:03:38 <elliott> hahahaha
20:03:42 <ais523> they're hoping it's some sort of systematic error
20:03:42 <elliott> `addquote <ais523> it's definitely not a statistical fluctuation, they repeated the experiment 15 thousand times to make sure
20:03:44 <HackEgo> 678) <ais523> it's definitely not a statistical fluctuation, they repeated the experiment 15 thousand times to make sure
20:03:49 <elliott> the best kind of excess
20:05:23 <elliott> I really hope that it turns out faster than light travel is possible, it's exactly like Star Trek, all current physics has to be replaced by technobabble...
20:05:32 <elliott> Then we just need Zefram Cochrane and the plot is WELL IN ORDER.
20:05:40 <ais523> apparently neutrinos arrived 60ns sooner than should have been possible, experimental error margin is believed to be 10ns
20:05:41 <elliott> OK so technically we missed some wars and shit but who cares.
20:05:50 <ais523> and if they can run the experiment 15000 times in a row, presumably it's quite easy to reproduce
20:06:51 <pikhq> I'm not sure I'd go with "easy".
20:06:59 <pikhq> "Possible to do consistently", perhaps.
20:07:01 <Phantom_Hoover> Request citation.
20:07:13 <elliott> "If this is confirmed, this is one of the most important moments in science and human history. This should be at the top of the front page for days.
20:07:13 <elliott> Instead it will probably be out paced by a picture of someone's cat.
20:07:13 <elliott> EDIT: just occurred to me, faster then light particles could have interesting consequences in the field of data transmission. something to think about"
20:07:22 <elliott> reddit commentors: So stupid.
20:07:24 <ais523> Phantom_Hoover: the citation's to a Slashdot comment
20:07:39 <elliott> "HEY GUYS THIS IS FTL TRAVEL THIS IS HUGE. EDIT: Whoaa, if you could go faster than light you could... transfer data... faster than light..."
20:07:59 <ais523> so how long is light meant to take to go 732km, anyway?
20:08:28 <elliott> something like 0
20:08:31 <pikhq> 0.0024168918 seconds
20:08:33 <elliott> on a global scale
20:08:39 <elliott> wow that's fast. light is fast.
20:08:55 <pikhq> (methodology: google "732km in lightseconds")
20:08:55 <CakeProphet> <elliott> light isn't fast enough!
20:08:56 <ais523> wow, milliseconds? that's slower than I expected
20:08:58 <Phantom_Hoover> ais523, is that how large CERN is?
20:09:13 <elliott> ais523: Light is actually pretty slow, in honesty.
20:09:21 <ais523> Phantom_Hoover: no, they were sending a neutrino beam to another lab to see how many neutrinos spontaneously changed to other sorts of neutrinos
20:09:25 <ais523> and they arrived early
20:09:25 <Phantom_Hoover> > 300000/732
20:09:26 <lambdabot> 409.8360655737705
20:09:29 <pikhq> ais523: Consider that a decent chunk of Internet latency is from the speed of light.
20:09:32 <elliott> ais523: I mean, consider that at one point, university-to-university internet was getting at half the maximum theoretical light limit.
20:09:44 <elliott> (When that latency vs. bandwidth article was written.)
20:09:45 <Phantom_Hoover> I failed at maths somewhere there.
20:09:46 <pikhq> Though most of it is just hardware and software sucking.
20:09:48 <ais523> elliott: was it using optical fibre?
20:09:49 <elliott> And that was definitely a perceptible latency.
20:09:54 <elliott> ais523: I think copper? Might have been wrong.
20:10:07 <Phantom_Hoover> > 732/300000
20:10:08 <lambdabot> 2.44e-3
20:10:15 <ais523> ouch, if it was copper, that seems like an inconvenient thing to use
20:10:18 <elliott> Point is, light is slow enough to create very noticable latency for us day-to-day.
20:10:26 <elliott> We can't even IRC to Mars :(
20:10:54 <elliott> The moon is a much better target for colonisation because it would be IRCable.
20:11:27 <pikhq> Yeah, the latency would be a *little* high, but TCP would still work just fine.
20:11:29 <ais523> you could text Mars
20:11:31 <Phantom_Hoover> Hmm, this is interesting indeed.
20:11:46 <ais523> pikhq: TCP can handle stupidly high latencies easily; most applications will stop waiting, though
20:11:51 <elliott> ais523: not with the kind of latency modern SMS users expect
20:11:55 <elliott> email, sure
20:12:01 <elliott> but irc is a basic human right and all :P
20:12:02 <Phantom_Hoover> http://www.reddit.com/r/askscience/comments/ko638/if_the_particle_discovered_as_cern_is_proven/
20:12:14 <pikhq> ais523: TCP stacks generally time out after a few minutes.
20:12:20 <ais523> the other weird thing is that the particle alleged to have gone faster than light wasn't even a new one
20:12:35 <ais523> it was a neutrino
20:12:41 <pikhq> Yeah, it's a bit strange that they saw this in something that's at least somewhat well-understood.
20:12:42 <ais523> pikhq: they don't /have/ to, though
20:12:46 <elliott> what is our actual light roundtrip latency to the moon?
20:12:47 <ais523> that's just an arbitrary decision
20:12:48 <elliott> I cba to google it
20:12:52 <elliott> or W|A it
20:12:53 <elliott> or whatever
20:12:54 <ais523> elliott: it's about a second
20:13:04 <elliott> that's not bad
20:13:09 <elliott> you could even browse the web like that
20:13:13 <elliott> although it'd be a bit painful
20:13:15 <Phantom_Hoover> elliott, the moon is like .25 million miles away or something.
20:13:25 <pikhq> Yeah, I've used the Internet on higher-latency links.
20:13:28 <ais523> elliott: you mean pages normally load within a second for you?
20:13:44 <ais523> I'm used to high bandwidth but high latency too
20:13:52 <pikhq> ais523: Um, it would take a second for the TCP connection to initialise.
20:13:55 <elliott> ph
20:13:57 <elliott> oops
20:14:04 <elliott> ais523: yes
20:14:08 <elliott> well
20:14:08 <CakeProphet> elliott: so what's the speed of fast?
20:14:09 <Phantom_Hoover> ais523, looks like it should be ~20 seconds.
20:14:10 <pikhq> Sorry, more than a second.
20:14:11 <elliott> one to three seconds
20:14:15 <ais523> loading anything in Chrome takes minutes
20:14:20 <elliott> searches definitely less than a second
20:14:22 <ais523> *Chromium
20:14:25 <ais523> although that might be an issue
20:14:29 <elliott> ais523: /something/ is wrong with your configuration
20:14:34 <ais523> I only use it for testing websites, and for when I have to log into Google
20:14:46 <ais523> (I used to use Epiphany for that, but Chromium seems like the perfect browser for the purpose)
20:14:57 <elliott> I would live on a terraformed moon, it sounds like fun
20:15:10 <ais523> (what does it say about me that I mistrust Google enough to let them store cookies only on a browser I don't use for anything else)
20:15:22 <Phantom_Hoover> elliott, other than the bit where a terraformed moon is impossible.
20:15:34 <elliott> http://upload.wikimedia.org/wikipedia/commons/0/0d/TerraformedMoonFromEarth.jpg
20:15:37 <elliott> DISPROVEN BY WIKIPEDIA IMAGES
20:15:44 <elliott> I like how they basically just took... a livable planet.
20:15:47 <elliott> And called it the moon.
20:15:56 <elliott> And then tried to emulate craters.
20:15:57 <elliott> So bad.
20:16:05 <Phantom_Hoover> But anyway, see shavera's response in that link I have and — wait we have neutrino beams now?
20:16:19 <ais523> Phantom_Hoover: why is a terraformed moon impossible? semantics pedantry? or something else?
20:16:36 <pikhq> Phantom_Hoover: Particle accelerators can consistently produce neutrino beams.
20:16:41 <elliott> You can certainly create a liveable environment on the moon, even if it's not terraforming
20:16:49 <elliott> Might have to be under a dome though
20:16:51 <ais523> producing a neutrino beam isn't hard for particle physics experimenters
20:16:55 <ais523> it's detecting them that's hard
20:16:57 <Phantom_Hoover> ais523, because I'm very sure you can't have a breathable atmosphere with only 1/6G to hold it down.
20:17:00 <ais523> as neutrinos tend not to interact with things much
20:17:15 <ais523> Phantom_Hoover: terraforming has nothing to do with breathable atmosphere, right?
20:17:23 <elliott> Argh, I'm irrationally leaning on the side of the particles actually going FTL.
20:17:27 <elliott> Just because I want them to be.
20:17:27 <Phantom_Hoover> ais523, it's kind of a prerequisite?
20:17:27 <ais523> you could just use domes or something to keep the atmosphere in
20:17:41 <Phantom_Hoover> ais523, not terraforming.
20:17:50 <CakeProphet> I believe terraforming is the process of making a planet habitable.
20:17:54 <ais523> elliott: well, I take this as evidence for the theory that physics is being made up by some deity over time in order to screw with scientists
20:17:57 <elliott> Phantom_Hoover: what if we lined just underneath the surface of the moon with graviton-infused metals.
20:17:58 <elliott> What then.
20:18:08 <ais523> whenever they run an experiment, it's a case of "shall I make this consistent with existing theories? nah"
20:18:11 <Phantom_Hoover> elliott, you'd win like 50 Nobel prizes.
20:18:20 <ais523> or sometimes "yes", which is probably the default, I guess
20:18:20 <elliott> ais523: Reminds me of a certain Fine Structure chapter. (PH will now mock me for not having finished it yet and probably accidentally spoil me in the process.)
20:18:25 <CakeProphet> What about enough atmosphere for plant life?
20:18:30 <elliott> Phantom_Hoover: They would be the best Nobel prizes.
20:18:38 <Phantom_Hoover> elliott, MITCH IS ACTUALLY SANTA
20:18:42 <elliott> I knew it.
20:18:46 <elliott> Does he kill Dumbledore?
20:19:02 <Phantom_Hoover> No, he doesn't kill anyone.
20:19:10 <Phantom_Hoover> Ching kills the Easter Bunny, though.
20:19:20 <CakeProphet> Voldemort is Tyler Durden
20:19:31 <elliott> http://ompldr.org/vYWhoNg
20:19:32 <elliott> im not
20:19:33 <elliott> good
20:19:33 <elliott> at this
20:19:57 <elliott> i guess i am stuck with help guy now
20:20:19 <elliott> wow this is disturbing
20:20:34 <Phantom_Hoover> "As has been discussed here quite a bit by those smarter than I, the speed of light isn't just the fastest thing in the universe, like a world record. It's the literal maximum. It's what happens when you take your rpg stats and instead of putting most of them in 'time' and a handful in 'distance', as most matter does, you just dump everything into 'distance' and don't give a damn about your internal clock. It's the maxim
20:20:34 <Phantom_Hoover> um speed that information itself can travel through the universe, which, if broken, can upset the laws of causality. I can't fathom what would happen if this result stands up to scrutiny."
20:20:41 <Phantom_Hoover> This is the best explanation of relativity ever.
20:21:21 -!- Vorpal has joined.
20:22:38 <ais523> oh right, the Pirate Party got 15 seats on the Berlin council
20:22:58 <ais523> and they hadn't expected to get nearly that many, that was all the candidates they'd put up for vote
20:23:09 <ais523> (it's a proportional-representation system)
20:24:23 <Vorpal> fuck alsa, I'm unable to figure out how to make it use dmix for one output device but not use dmix for another one
20:24:41 <Vorpal> maybe I'll just go OSSv4, but that sounds like a lot of work
20:25:11 <CakeProphet> jack is good.
20:25:15 <elliott> CakeProphet: ...
20:25:17 <CakeProphet> :)
20:25:49 <Vorpal> CakeProphet: I use jack only when I'm running programs that benefit from it. Such as sound recording programs.
20:26:17 <Vorpal> CakeProphet: anyway it doesn't solve my main issue: one of my sound cards have proper hw mixer, the other one does not
20:26:25 <elliott> Is nobody going to mentioned that JACK doesn't actually go directly to hardware
20:26:35 <Vorpal> elliott: there is that too
20:26:46 <Vorpal> only alsa and oss do that
20:27:14 <ais523> strangely, Linux sound has mostly just-worked for me, with the exception that Pulse sometimes needs restarting for any sound to work, and that ALSA used to have issues detecting headphones
20:28:04 <CakeProphet> I thought jack at least allowed you to route things to different devices and such.
20:28:08 <oerjan> `addquote <elliott> The moon is a much better target for colonisation because it would be IRCable.
20:28:10 <HackEgo> 679) <elliott> The moon is a much better target for colonisation because it would be IRCable.
20:28:13 -!- Ngevd has quit (Ping timeout: 276 seconds).
20:28:16 <Vorpal> another issue: nwn uses oss, and doesn't respect my default sound card as given in /etc/asound.conf (not surprising). No clue how to configure where ALSA's OSS emulation goes
20:28:38 <CakeProphet> obviously I wasn't suggesting he /replace/ alsa with jack. that wouldn't make any sense.
20:29:11 <Vorpal> ais523: I don't use pulse, it is horrible. Especially since it tends to conflict badly with jack in my experience
20:29:43 <Vorpal> IMO pulse doesn't really offer anything worth that extra layer.
20:30:01 <Vorpal> I don't need per-program volume levels for example.
20:30:06 <ais523> I've found per-application volume controls really valuable
20:30:13 <ais523> mostly to balance Flash against Totem
20:30:31 <Vorpal> ais523: why would you listen to two things at once?
20:30:46 <ais523> you might switch between them a lot
20:30:54 <Vorpal> hm
20:30:57 <Vorpal> true
20:31:02 <ais523> and it's important to me to get the volume control range usable
20:31:10 <ais523> I don't want the usable range of the volume control to be all at one end of the scale
20:31:28 <Vorpal> ais523: well for me it varies widely what is reasonable between my pro audio headphones and my cheap creative headset
20:31:31 <ais523> especially because I use both headphones and speakers, which have different sound output levels at the same on-computer volumes
20:32:11 <Vorpal> I mean, I can not use the same volume settings. It would destroy my hearing when switching from the cheap headset to the good headphones
20:33:25 <Vorpal> ais523: oh that too, my laptop has widely different level on speaker and headphones. I need near max when using the built in speakers, though I avoid that, terrible sound quality. And near mute when using my pro audio headphones.
20:33:39 <Vorpal> the cheap headset: somewhere in between
20:33:43 <Vorpal> very weird that
20:35:01 <Vorpal> "[ALSA has] Better support for MIDI devices. With OSS you will have to use a software synthesizer such as Timidity or Fluidsynth. " according https://wiki.archlinux.org/index.php/OSS, if that is true, OSSv4 is not an option for me. I need hardware midi
20:35:25 <ais523> why do you need hardware MIDI?
20:35:28 <ais523> it's a strange thing to randomly need
20:35:49 <Vorpal> ais523: because I have a keyboard I attach to the hw midi port on my PCI sound card
20:35:56 <ais523> ah, OK
20:36:41 <Vorpal> ais523: oh and midi over USB is bad in my experience, USB has higher latency
20:37:00 <CakeProphet> midi is in general bad.
20:37:13 <Vorpal> CakeProphet: hardware midi with midi cable works just fine
20:37:17 <ais523> when I compose, it's using physical piano + rosegarden for entering the tune into a computer when I'm done
20:37:18 <Vorpal> never had any issues with that
20:37:20 <ais523> via computer keyboard
20:37:40 <Vorpal> ais523: I just hook up rosegarden to my electrical piano by MIDI
20:38:10 <CakeProphet> no I mean the protocol itself is limiting.
20:38:20 <CakeProphet> it works fine for responding to keypresses and stuff though.
20:38:30 <Vorpal> yeah
20:40:07 <CakeProphet> but as a general purpose "musical instrument digital interface" it is lacking in some regards.
20:40:23 <Vorpal> right
20:40:33 <Vorpal> CakeProphet: it works for what I use it for though.
20:40:49 -!- augur has quit (Remote host closed the connection).
20:41:54 <CakeProphet> OSC is a little better
20:42:08 <Vorpal> OSC?
20:42:15 <CakeProphet> yes, but it's not as widely supported.
20:42:20 <Vorpal> never heard of it
20:42:25 <Vorpal> what does it stand for?
20:42:33 <CakeProphet> open sound control.
20:42:40 <CakeProphet> it runs over ethernet.
20:42:46 <Vorpal> eh
20:43:07 <CakeProphet> well, it can run on other things
20:43:17 <Vorpal> CakeProphet: that sounds like a terrible idea for a real time application like sound in a studio recording environment
20:43:46 <CakeProphet> why's that?
20:43:54 <CakeProphet> ethernet is fairly fast.
20:44:37 <Vorpal> CakeProphet: ethernet offers no guarantees on the latency. If you use a switched topology the switch may or may not delay your packet in internal buffers for example.
20:44:44 <CakeProphet> hardware support is kind of limited, but a lot of high-end devices support it, such as this: http://en.wikipedia.org/wiki/Lemur_Input_Device
20:46:50 -!- elliott has quit (Ping timeout: 260 seconds).
20:46:58 <pikhq> And common Ethernet devices have rather absurd buffering, adding further latency.
20:47:15 <Vorpal> that too yes
20:47:17 <pikhq> And the default buffering on Linux is itself absurd.
20:47:19 <CakeProphet> but if it's connected directly to your computer you wouldn't have these problems would you?
20:47:21 <pikhq> Networking sucks.
20:47:22 <CakeProphet> oh..
20:47:41 <pikhq> The far-too-high buffering *is layered*.
20:47:47 <pikhq> *sigh*
20:48:03 <Vorpal> MIDI at least offers some real time guarantees.
20:48:06 <CakeProphet> does changing the buffer mode on the socket not fix this I gather?
20:48:27 <Vorpal> CakeProphet: not for the hardware buffering at least.
20:48:51 <pikhq> That can change the kernel buffering.
20:49:15 <CakeProphet> actually OSC is typically transmitted over USB from input device to computer.
20:49:30 <CakeProphet> but can also go over network.
20:50:06 <CakeProphet> the protocol is far more flexible though.
20:50:29 -!- kmc has joined.
20:50:44 <Vorpal> USB has inferior latency compared to MIDI again. Just look at MIDI over USB. Only usable as a toy really.
20:51:18 <CakeProphet> The advantages of OSC over MIDI are primarily speed and throughput; internet connectivity; data type resolution; and the comparative ease of specifying a symbolic path, as opposed to specifying all connections as 7-bit numbers with 7-bit or 14-bit data types
20:51:22 <CakeProphet> well there you go.
20:51:41 <Vorpal> doesn't say over which transport
20:52:15 <Vorpal> "A standard for MIDI over USB was developed in 1999 as a joint effort between IBM, Microsoft, Altec Lansing, Roland Corporation, and Philips.[9] To transmit MIDI over USB a Cable Number and Cable Index are added to the message, and the result is encapsulated in a USB packet. The resulting USB message can be double the size of the native MIDI message. Since USB is over 15,000 times faster than MIDI (480,
20:52:15 <Vorpal> 000 Kbits/sec vs 31.25 Kbits/sec,) USB has the potential to be much faster. However, due to the nature of USB there is more latency and jitter introduced that is usually in the range of 2 to 10 ms, or about 2 to 10 MIDI commands. Some comparisons done in the early part of the 2000s showed USB to slightly slower with higher latency,[10] and this is still the case today."
20:54:00 <CakeProphet> OSC is nice because you can actually send audio data if you need to.
20:54:21 <CakeProphet> or video, etc.
20:55:18 <Vorpal> "OSC messages between gestural controllers are usually transmitted over serial endpoints of USB by being wrapped in the SLIP protocol." <-- what, why SLIP?
20:57:06 <CakeProphet> dunno
20:57:38 <CakeProphet> maybe it makes it easier to transmit over IP later?
20:57:47 <Vorpal> ...
20:57:52 <CakeProphet> ..
21:05:54 <oerjan> .
21:09:11 <Vorpal>
21:15:31 -!- augur has joined.
21:15:53 <ais523> how can it take 3 minutes to email gmail from my own computer?
21:15:56 <ais523> well, rather more
21:15:58 <ais523> 6 now
21:27:25 -!- GreaseMonkey has joined.
21:27:49 -!- Patashu has joined.
21:55:11 -!- sllide has quit (Read error: Connection reset by peer).
22:04:46 -!- augur has quit (Remote host closed the connection).
22:13:29 * Phantom_Hoover → sleep
22:13:30 -!- Phantom_Hoover has quit (Quit: Leaving).
22:17:05 -!- GreaseMonkey has quit (Quit: The Other Game).
22:23:30 -!- Madoka-Kaname has joined.
22:26:27 <ais523> OK, it finally arrived
22:26:52 <ais523> it took over half an hour for an email to a gmail account to arrive in the account's inbox after it had already arrived at Google itself, based on the received headers
22:27:00 <ais523> how is that acceptable service for email nowadays?
22:28:08 <pikhq> Jeeze, I would've expected that shit when there wasn't any hard guarantee that your email was actually routing over the Internet.
22:28:15 <oerjan> it's just all the neutrinos stealing the speed
22:36:08 -!- ive has joined.
22:36:38 -!- Sgeo|web has joined.
22:36:41 <Sgeo|web> Miss me?
22:36:58 <oerjan> wait, you were gone?
22:37:01 * oerjan runs away
22:37:45 * Sgeo|web vaguely wonders if there are alternatives to Mibbit which allow Freenode
22:38:25 -!- augur has joined.
22:39:28 <ais523> Sgeo|web: Freenode blocked Mibbit, not the other way round
22:40:38 * Sgeo|web is aware of this, but was being untechnical in his question
22:40:53 <Sgeo|web> Or I might not have been entirely thinking when I asked it. Not sure.
22:41:48 <Sgeo|web> There's the one that's currently free but soon won't be :/
22:42:34 <CakeProphet> Sgeo|web: ALWAYS BE TECHNICAL ALWAYS.
22:42:48 <CakeProphet> ABOUT althings
22:42:56 * oerjan notes that it is easy to misread untechnical as unethical
22:43:25 <CakeProphet> oerjan: maybe if you're an old blind norseman.
22:43:48 <cheater> is oerjan old
22:43:56 <CakeProphet> I don't even know actually.
22:44:22 <CakeProphet> I like to imagine him stylistically as an old wise man. Like Odin.
22:44:23 <cheater> oerjan: is oerjan old
22:44:46 <CakeProphet> you know because that's Norse mythology and stuff.
22:44:50 <CakeProphet> :>
22:45:04 * oerjan hits cheater with his cane J=====O
22:45:15 <oerjan> YKGOML
22:45:25 <tiffany> o~o
22:45:30 <CakeProphet> wacro virus
22:45:56 <oerjan> CakeProphet: ITYMAIM
22:46:27 <oerjan> CakeProphet: also, i'm not missing an eye
22:47:07 <CakeProphet> yes but you share your great wisdom of past and future.
22:47:12 <CakeProphet> often in a mystical prophetic manner.
22:47:36 <oerjan> it's just the neutrinos affecting my brain
22:49:40 -!- Jafet has quit (Quit: Leaving.).
22:50:01 <CakeProphet> you are the balanced elderly force of wisdom that synergizes with elliott's rash youthful spunk and ingenuity.
22:50:25 <cheater> lolrjan
22:51:37 <oerjan> fancy
22:53:01 <CakeProphet> Gregor is the grouchy janitor. >_>
22:53:18 <cheater> the gr stands for grouchy
22:53:30 <CakeProphet> Gregor: don't tell him I said that
22:53:49 <CakeProphet> no the gr g is the initial of his name and the r is the last charater of his first name.
22:54:30 <CakeProphet> because Gregor is actually Roger G. as I've proven on several occasions.
22:54:36 <CakeProphet> s/name/last name/
22:54:57 <oerjan> if you say so, Tehpor Pekac
22:56:26 <CakeProphet> but the cosmic janitor is equally important
22:56:39 <CakeProphet> as he maintains the order of the two contrasting forces.
23:20:35 -!- ais523 has quit (Remote host closed the connection).
23:23:40 -!- Sgeo|web has quit (Quit: Page closed).
23:26:14 -!- Jafet has joined.
23:36:06 <Gregor> <CakeProphet> Gregor is the grouchy janitor. >_> <CakeProphet> Gregor: don't tell him I said that // ... wut
2011-09-23
00:20:13 -!- augur has quit (Remote host closed the connection).
00:31:17 -!- augur has joined.
00:36:40 -!- copumpkin has quit (Quit: Computer has gone to sleep.).
00:54:31 <oerjan> > [50e-9, 70e-9] <**> (/0.0024168918)
00:54:32 <lambdabot> The section `GHC.Real./ 2.4168918e-3' takes one argument,
00:54:32 <lambdabot> but its type `[t...
00:54:43 <oerjan> urk
00:54:51 <oerjan> > [50e-9, 70e-9] <**> [(/0.0024168918)]
00:54:52 <lambdabot> [2.0687727932214425e-5,2.89628191051002e-5]
00:55:12 <oerjan> > [50e-9, 70e-9] <**> [(^2).(/0.0024168918)]
00:55:14 <lambdabot> [4.279820869973249e-10,8.388448905147571e-10]
00:55:36 -!- Jafet has left.
00:55:40 -!- Jafet has joined.
00:57:40 <oerjan> the gravitational time dilation at earth's surface, 6.9612e-10, is within that range.
00:58:10 <oerjan> could it be that neutrinos are simply not affected - by gravity?
00:58:57 <oerjan> while everything else, including light, is slowed down in a gravity well
01:00:02 <Jafet> Light isn't slowed in anything
01:00:04 <oerjan> > [50e-9, 60e-9, 70e-9] <**> [(^2).(/0.0024168918)]
01:00:06 <lambdabot> [4.279820869973249e-10,6.162942052761478e-10,8.388448905147571e-10]
01:00:22 <oerjan> Jafet: erm are you not aware of the latest news
01:00:32 <Jafet> Well, anything that is a vacuum
01:00:44 <oerjan> they are claiming to have detected neutrinos traveling slightly faster than light
01:01:05 -!- copumpkin has joined.
01:01:12 <oerjan> i'm merely making a wild speculation of how this could be
01:01:50 <oerjan> which requires removing _some_ generally held assumption.
01:02:10 <Jafet> That would invalidate quite a large amount of theory
01:02:15 <Jafet> Not some
01:03:29 <oerjan> and then i wondered if it had anything to do with earth's environment, since the rumors did not say anything about the speed of neutrinos varying by their energy, as it would if they were "standard" tachyons
01:04:23 <Jafet> Besides, gravity is a consequence of spatial curvature. For something to respect relativity and travel faster than c, it has to go through some hammer space
01:04:30 <Jafet> So yes, that sounds really wild
01:05:17 <oerjan> and to me the most obvious factor of earth's environment which would possibly affect a neutrino (which otherwise mostly passes straight through earth) would be its gravity well, so i looked up gravitational time dilation for earth's surface
01:05:52 <oerjan> now admittedly i have no idea if it makes sense to take the square root of that
01:06:04 <oerjan> but at least the numbers fit then :P
01:07:29 <oerjan> oh and also there is the problem that the famous neutrinos from supernova 1987 were apparently _not_ sped up
01:08:03 <oerjan> but they wouldn't be traveling most of the way in a gravity well
01:08:11 <oerjan> anyway, wild speculation, as i said
01:11:43 <pikhq> All we can say for sure at this point is "WTF".
01:16:07 -!- ive has quit (Ping timeout: 256 seconds).
01:33:07 -!- azaq23 has quit (Ping timeout: 256 seconds).
01:35:01 -!- cheater2 has quit (Ping timeout: 240 seconds).
01:35:35 -!- cheater has quit (Ping timeout: 260 seconds).
01:48:15 -!- audy has quit (Quit: leaving).
01:59:35 -!- azaq23 has joined.
02:01:13 -!- ive has joined.
02:17:32 -!- MDude has changed nick to MSleep.
03:31:00 -!- azaq231 has joined.
03:33:10 -!- Madoka-Kaname has quit (Quit: Huggles for everybody~♪ ^_^).
03:33:29 -!- azaq23 has quit (Ping timeout: 255 seconds).
03:34:59 -!- Lymee has joined.
03:34:59 -!- Lymee has quit (Changing host).
03:34:59 -!- Lymee has joined.
03:35:04 -!- Lymee has changed nick to Madoka-Kaname.
03:36:27 -!- ive has quit (Ping timeout: 245 seconds).
03:38:51 -!- azaq231 has changed nick to azaq23.
03:40:04 -!- Jafet has quit (Quit: Leaving.).
04:23:26 -!- Jafet has joined.
04:29:53 -!- kmc has quit (Quit: Leaving).
04:36:40 -!- oerjan has quit (Quit: Good night).
04:56:25 -!- Zuu has quit (Ping timeout: 244 seconds).
05:36:17 -!- kmc has joined.
05:51:20 -!- azaq23 has quit (Ping timeout: 248 seconds).
06:04:55 <CakeProphet> :)
06:08:32 -!- sebbu2 has joined.
06:11:04 -!- sebbu has quit (Ping timeout: 248 seconds).
06:12:43 -!- sebbu3 has joined.
06:12:43 -!- sebbu3 has quit (Changing host).
06:12:43 -!- sebbu3 has joined.
06:15:52 -!- sebbu2 has quit (Ping timeout: 248 seconds).
06:27:31 -!- azaq23 has joined.
06:27:45 -!- azaq23 has quit (Client Quit).
06:27:54 -!- azaq23 has joined.
06:35:26 -!- Jafet has quit (Quit: Leaving.).
06:36:32 -!- monqy has quit (Quit: hello).
07:38:42 -!- monqy has joined.
07:42:47 -!- cheater has joined.
07:52:02 -!- azaq23 has quit (Ping timeout: 276 seconds).
07:53:56 <CakeProphet> fizzie: any idea why elliott's acronym generator would be statistically likely to generate actual words?
07:53:59 <CakeProphet> `wacro
07:54:02 <CakeProphet> `macro
07:54:03 <HackEgo> ​/home/hackbot/hackbot.hg/multibot_cmds/lib/limits: line 5: exec: wacro: not found
07:54:06 <HackEgo> VEBLEN'S
07:54:10 <CakeProphet> `macro
07:54:14 <HackEgo> WRUNG
07:54:18 <CakeProphet> `macro
07:54:23 <HackEgo> IFFIER
07:55:02 <CakeProphet> doesn't make sense to me, if he implemented as I think he would.
07:59:52 <monqy> !show macro
07:59:53 <EgoBot> That is not a user interpreter!
08:00:01 <monqy> oh right
08:00:05 <monqy> hackego
08:00:06 <monqy> right
08:00:16 <monqy> `paste bin/macro
08:00:18 <HackEgo> http://codu.org/projects/hackbot/fshg/index.cgi/raw-file/tip/paste/paste.5766
08:00:47 <monqy> a binary? repulsive
08:01:18 <CakeProphet> monqy is weird.
08:02:01 <CakeProphet> anyways I'm going to try my approach and compare it.
08:02:24 <CakeProphet> but I'll have to at least an hour for perl to traverse this data.
08:02:37 <CakeProphet> +wait
08:02:45 <monqy> half an hour? how much data is it?
08:02:49 <monqy> er
08:02:52 <monqy> a whole hour?
08:02:57 <monqy> hwat????
08:03:09 <CakeProphet> well it's like 50-something gigs totally but I should probably only use one dataset for now
08:03:30 <monqy> mmhm
08:04:26 * CakeProphet needs to test that the output is correct.
08:04:45 <CakeProphet> hopefully interpreting the generated data as a perl data structure will NOT take anywhere near as long as generating it.
08:05:02 <CakeProphet> > 27^3
08:05:03 <lambdabot> 19683
08:05:11 <CakeProphet> that's the total number of hash table entries.
08:07:34 <CakeProphet> actually using the perl interpreter to read the data instead of perl itself is probably faster.
08:07:38 <CakeProphet> since the interpreter is C.
08:08:39 <fizzie> CakeProphet: I don't know what it does.
08:10:08 <monqy> `macro
08:10:12 <HackEgo> IEYASU'S
08:10:37 <monqy> I imagine it's some sort of bug or similar flaw
08:10:47 <monqy> oversight
08:10:49 <monqy> uhh
08:11:01 <CakeProphet> it would seem to me that there would be a much larger number of non-words than words.
08:11:16 <monqy> this is because it isn't working properly
08:12:10 <fizzie> Running 'strings' on that binary at least returns a large wordlist; if it's done in the dissociated-press style "jump from one word to other place where there's the same context with probability P", then it might easily generate real words.
08:12:10 <monqy> as elliott explained last night (or at least I THINK this happened), the infrastructure for it working is all there, but it doesn't
08:13:48 <CakeProphet> I have a feeling my approach won't generate as many real worlds, but perhaps will have more non-pronounceable outputs.
08:15:10 * CakeProphet just told emacs to open a half gig file
08:15:16 <monqy> good job
08:15:16 <CakeProphet> should be fun.
08:15:32 * CakeProphet watches memory escalate rapidly and emacs become non-responsive.
08:16:37 <CakeProphet> there we go.
08:17:50 <CakeProphet> I really don't even understand why &Ward is an entry
08:17:54 <CakeProphet> or &ablir
08:18:51 <monqy> uggh there's nothing in hackego's /usr/share/dict
08:19:04 <monqy> this would be a lot easier if hackego had a nice small sample dictionary
08:19:50 <CakeProphet> I'm probably just going to dump my perl into a massive file and then pastebin then egobot.
08:20:03 <CakeProphet> all the data will be in the perl code.
08:22:33 <fizzie> CakeProphet: Here's 50 words generated from character trigrams: http://sprunge.us/MNHQ
08:22:57 <monqy> good words
08:23:05 <fizzie> Not so many real words; though "hosted" is there.
08:23:20 <monqy> so many of these are great
08:23:47 <fizzie> You're such a wigaticilitioutor.
08:24:06 <monqy> I consider myself more of a faubblemarcus
08:24:25 <fizzie> Well, I should get back to flifeenothmemelling my ackingnarbeencies.
08:25:07 <CakeProphet> huh actually I don't think I've ever attempted to import a module in the current directory...
08:25:12 <CakeProphet> in perl
08:25:41 <CakeProphet> it should just be use name; right?
08:26:00 <fizzie> Yes, if '.' is in @INC, like it usually is by default.
08:26:08 <CakeProphet> alright.
08:27:29 <fizzie> use FindBin; use lib "$FindBin::Bin"; is also commonly done, to use modules that are in the same directory as the script.
08:28:25 <fizzie> (For pedants' sake: the paste wasn't exactly pure character trigrams; it was a Kneser-Ney-smoothed character trigrams with backoff. But that really shouldn't make that much of a difference.)
08:29:06 <CakeProphet> what exactly does that do for you.
08:31:19 <olsner> muriverizzing, sounds like fun
08:31:49 <CakeProphet> I guess I should pass around this hash as a reference to avoid copying it all the time.
08:33:41 <CakeProphet> at least I think that's how it works..
08:34:00 <CakeProphet> but I guess passing it as a ref and immediately dereferencing is pretty much equivalent to passing it referenced...
08:34:10 <CakeProphet> *dereferenced
08:35:38 <fizzie> What exactly does what do?
08:35:53 <CakeProphet> actually no I think passing the hash itself would be more expensive than passing the reference and dereferencing
08:35:56 <CakeProphet> due to Perl's call semantics.
08:36:33 <CakeProphet> fizzie: I have a hash of hashes. the outer hash is keyed by the first two characters of trigrams.
08:36:54 <CakeProphet> the inner hashes are keyed by the last character, with the value being the frequency.
08:37:20 <fizzie> Sounds reasonable, though the inner hash could easily be an array instead.
08:37:33 <CakeProphet> ah true.
08:38:07 <CakeProphet> so to generate the next character you just lookup your last two characters and then randomly pick an element from the inner hash based on frequency.
08:38:26 <CakeProphet> with two spaces being used at the start.
08:39:21 <CakeProphet> I guess memory-wise the array would be smaller.
08:40:20 <fizzie> If you don't ever look things up from it based on the character, just iterate through, it might as well.
08:41:11 <CakeProphet> oh you mean an even-length array of key value pairs?
08:41:32 <CakeProphet> I didn't want to associate each index with a character as I might include other languages, so I wouldn't want the characters to be hardcoded into the algorithm.
08:41:58 <fizzie> Either that, or an array of two-element arrayrefs. The first option would use less memory, at the cost of maybe being a bit more hacky.
08:42:31 <fizzie> Depending on how you do "randomly pick", you might be able to save one iterate-through-it pass by putting the sum of all frequencies into the node. Something like $foo{"ab"} being { sum => 42, chars => ['a', 1, 'b', 2, 'c', 38, 'd', 1] }.
08:42:32 <CakeProphet> well the first option is the default representation of a hash in list context I believe.
08:42:39 <fizzie> It is, yes.
08:43:41 <CakeProphet> and iterating wouldn't be difficult. while(@array) { my ($a, $b, @array) = @array; ...}
08:44:00 <CakeProphet> but I'm kind of already in the middle of generating the hash tables so... I'll use that for now.
08:45:31 <fizzie> That loop will just give $a, $b = first two elements of @array for ever.
08:45:49 <fizzie> Since the 'my' generates a new lexically scoped @array for the tail.
08:45:54 <CakeProphet> oh that's right.
08:46:00 <CakeProphet> yeah I'd just use the my above the loop then.
08:46:49 <fizzie> That works, but might involve quite a lot of copying, unless Perl is being clever. I don't know enough of the internals to be sure.
08:47:29 <CakeProphet> dunno. the array size is only 27 though, so not a huge deal.
08:48:11 <CakeProphet> shifts might be more efficient.
08:49:42 <fizzie> for (my $i = 0; $i <= $#array; $i += 2) { my ($a, $b) = @array[$i..$i+1]; ... } is guaranteed not to have to shift the array data around.
08:50:19 <fizzie> Anyhow, it's probably not going to be your bottleneck.
08:51:13 -!- itidus21 has joined.
08:51:14 <CakeProphet> I think perl is my bottleneck. :P
08:52:04 <fizzie> Or use List::MoreUtils; my $it = natatime 2, @array; while (my ($a, $b) = $it->()) { ... } but nobody has List::MoreUtils installed.
08:52:47 -!- itidus20 has joined.
08:52:53 <CakeProphet> fizzie: I do now.
08:53:00 <fizzie> I'd put that word-generation model into fungot, but it can't do the "don't put space in-between each 'word'" thing.
08:53:01 <fungot> fizzie: in the matter spoke of, i require onlie one more thing; but wish to be near the snow line, and found occasion for fresh surprise; for the vegetation resembled nothing i had before discerned nothing but the bizarre object which glistened in a comer cupboard under the electric lights.
08:54:34 <CakeProphet> eval { use Math::Random::MT::Perl 'rand'};
08:54:35 <CakeProphet> print "Optional module Math::Random::MT::Perl not found.\n" if $@
08:54:39 <CakeProphet> this is correct right?
08:54:49 <CakeProphet> I've read that you have to do weird things with $@ to get it to work properly.
08:55:57 <fizzie> I do something like that in one piece of code, and it seems to work for me. Though with 'require'.
08:56:07 -!- itidus21 has quit (Ping timeout: 258 seconds).
08:56:24 <fizzie> 'use' is close to having 'require' in a BEGIN block; I can't really guess offhand how that interacts with block-eval.
08:56:29 <CakeProphet> should be equivalent inside an eval I think.
08:56:55 <CakeProphet> assuming that begin blocks inside an eval are executed only when the eval is.
08:57:05 <fizzie> $ perl -e 'eval { use NoSuchModule; }; print "no such module!" if $@;'
08:57:05 <fizzie> Can't locate NoSuchModule.pm in @INC (@INC contains: . /home/htkallas/local/share/perl/5.10.1 /home/htkallas/local/lib/perl/5.10.1 /etc/perl /usr/local/lib/perl/5.10.1 /usr/local/share/perl/5.10.1 /usr/lib/perl5 /usr/share/perl5 /usr/lib/perl/5.10 /usr/share/perl/5.10 /usr/local/lib/site_perl .) at -e line 1.
08:57:05 <fizzie> BEGIN failed--compilation aborted at -e line 1.
08:57:09 <fizzie> Does not seem to be the case.
08:57:13 <CakeProphet> ah okay.
08:57:38 <fizzie> There is the right way to do this, but I've forgotten it.
08:58:01 <CakeProphet> I'll just use the require.
08:58:31 <fizzie> Then it won't import things, though.
08:58:53 <CakeProphet> it won't..?
08:58:58 <fizzie> require doesn't.
08:59:24 <fizzie> Some example code uses BEGIN { eval { require Foo; Foo->import(); }; if ($@) { $main::use_foo = 0; } else { $main::use_foo = 1; } }
08:59:55 <fizzie> "use Module LIST" is documented as being exactly equivalent to "BEGIN { require Module; Module->import( LIST ); }".
09:00:09 <CakeProphet> ah.
09:00:29 <CakeProphet> Foo->import() is only for stuff that uses Exporter right?
09:01:04 -!- sebbu2 has joined.
09:01:04 -!- sebbu2 has quit (Changing host).
09:01:04 -!- sebbu2 has joined.
09:01:46 -!- Behold has joined.
09:01:57 <fizzie> Yes, though I'm not sure if every module inherits a do-nothing import function by default to make that sort of thing work.
09:02:14 -!- sebbu3 has quit (Ping timeout: 276 seconds).
09:02:20 <fizzie> Well, and for modules that define an 'import' of their own, but most just get it from Exporter.
09:02:30 <CakeProphet> in any case the mersienne twister library probably does use exporter so...
09:02:49 <CakeProphet> -i
09:03:06 <fizzie> If you use it as "use Math::Random::MT::Perl 'rand';" it's going to use ->import('rand') on it, so presumably that does something.
09:03:15 <CakeProphet> yes
09:03:32 -!- BeholdMyGlory has quit (Ping timeout: 276 seconds).
09:04:00 <fizzie> "[The import method is] not completely ordinary. Normally, calling a method that doesn't exist causes a fatal error. However, you can use a module that neither has nor inherits an import method, and the interpreter will quietly ignore the problem."
09:04:32 <fizzie> Ah, so it's just a hack in 'use', not a hack that sneaks in a dummy import.
09:04:58 <CakeProphet> I'm pretty sure this module has an import though so it's not an issue
09:05:20 <CakeProphet> still that's a lot of code for something fairly simple.
09:05:46 <CakeProphet> in Python for example you would just catch an ImportError
09:08:33 <fizzie> The Perl way is just to install something from CPAN. Like Module::Load::Conditional.
09:09:24 <CakeProphet> well the original idea is to not require an optional dependency
09:09:39 <CakeProphet> so now you're just trading one dependency for another.
09:09:54 <fizzie> Yes, that's why the eval { require ... } mess is duplicated in so many places.
09:11:59 -!- sebbu3 has joined.
09:15:04 -!- sebbu2 has quit (Ping timeout: 248 seconds).
09:21:06 <CakeProphet> fizzie: is there an equivalent to if __name__ == "__main__" in Python?
09:21:09 <CakeProphet> er, in perl?
09:26:49 <fizzie> Yes, but I don't think it's so widely used.
09:26:54 <fizzie> See http://www252.pair.com/comdog/mastering_perl/Chapters/18.modulinos.html
09:27:25 <fizzie> Basically: "unless (caller()) { ... }".
09:27:51 <fizzie> (On "normal" top-level it returns nothing; when using as a module, something.)
09:28:01 <CakeProphet> ah yes
09:28:39 <CakeProphet> main unless caller();
09:28:50 <CakeProphet> looks better to me than if __name__ == "__main__": main()
09:29:10 <CakeProphet> actually the () is optional after caller
09:29:31 <fizzie> Right.
09:30:06 <fizzie> Doesn't look so perly, though; pretty much no punctuation.
09:30:19 <CakeProphet> depends on your definition of perly
09:30:26 <CakeProphet> the lack of things like () is quite perly to me.
09:30:38 <fizzie> Yes, but line noise is the canonical definition of Perly.
09:30:43 <CakeProphet> I suppose.
09:31:07 <CakeProphet> my $r = int(rand(sum(@w)))
09:31:11 <CakeProphet> this line is something you might find in Python
09:31:15 <CakeProphet> lots of nested calls.
09:31:29 <CakeProphet> >_> I guess that's common in any language though.
09:32:08 -!- monqy has quit (Quit: hello).
09:32:42 <fizzie> Well, I'unno; in some places (I'm looking at you, lambdabot) people might opt for function composition as opposed to nesting calls.
09:33:02 <CakeProphet> right
09:33:10 <CakeProphet> this particular style of nested calls reminds me of Python
09:33:14 <CakeProphet> basically one argument per call.
09:33:28 <CakeProphet> to compute a list.
09:33:34 <CakeProphet> er compute things from a list.
09:33:51 <CakeProphet> the equivalent Python code would look very similar.
09:34:21 <CakeProphet> my @w = map { $f{$_} } @c;
09:34:29 <CakeProphet> this line is probably one of the reasons I like perl over python.
09:34:53 <CakeProphet> I can have anonymous code blocks that aren't awful..
09:35:31 -!- itidus20 has left ("Leaving").
09:35:34 <CakeProphet> and with prototyping and anonymous subs I can define new control-flow-like operators.
09:35:42 <CakeProphet> for example in my IRC bot I have:
09:36:16 <CakeProphet> command shutdown => Admin => 'Bot shutdown. Only allowed by super-admin.',
09:36:17 <CakeProphet> sub {
09:36:22 <CakeProphet> ...;
09:36:23 <CakeProphet> }
09:36:58 <CakeProphet> I suppoise the pythonic way to do this would be to define a decorator. but decorators are more cumersome to write.
09:37:04 <CakeProphet> +b
09:37:27 <CakeProphet> and can't take advantage of things like =>
09:38:50 <CakeProphet> @command("shutdown", "Admin", "Bot shutdown. Only allowed by super-admin.")
09:38:50 <lambdabot> Unknown command, try @list
09:38:55 <CakeProphet> def blah(): ...
09:40:09 <CakeProphet> but to define command itself you have to either write a function that returns a function, or write a class.
09:45:01 <CakeProphet> else if, elsif, elif, bah...
09:54:37 -!- CakeProphet has quit (Ping timeout: 260 seconds).
09:55:33 -!- CakeProphet has joined.
09:55:33 -!- CakeProphet has quit (Changing host).
09:55:33 -!- CakeProphet has joined.
09:57:40 <fizzie> Also "elseif".
10:00:02 <CakeProphet> which languages have that?
10:00:19 <CakeProphet> !perl print "010101" =~ /\w/
10:00:21 <EgoBot> 1
10:00:24 <CakeProphet> ...oh
10:00:36 <CakeProphet> apparently digits are word characters. who knew.
10:02:15 <fizzie> PHP has. "else if" works there too in some cases, but not when doing the alternative (colon) syntax for control structures. See http://php.net/manual/en/control-structures.elseif.php
10:02:56 <CakeProphet> so I guess I want... [^\d\W]?
10:02:58 <fizzie> And several variants of BASIC.
10:03:02 <CakeProphet> that would give me \w minus digits yes?
10:04:53 <CakeProphet> yep
10:05:02 <fizzie> \w is [[:alpha:][:digit:]_] -- if you don't mind the underscore either, I suppose [^\d\W] should work. Or alternatively just [[:alpha:]_].
10:05:20 <CakeProphet> I'm currently using [^_\d\W]+ because I may want the connecting characters that it includes...
10:05:24 <CakeProphet> not sure.
10:06:24 <fizzie> [^_\d\W] is getting so complex that [[:alpha:]] or \p{IsAlpha} might more clearly show the meaning.
10:08:34 <CakeProphet> yeah I'll just
10:08:37 <CakeProphet> use :alpha:
10:08:46 <CakeProphet> because I probably don't want word-connecting characters.
10:09:15 <CakeProphet> but do I want to exclude all words from the data set that contain things like hyphens and Unicode word-connectors?
10:09:22 <CakeProphet> or should I just skip over those characters.
10:09:53 <CakeProphet> !perl $_"TEST";lc;print
10:09:54 <EgoBot> String found where operator expected at /tmp/input.21091 line 1, near "$_"TEST""
10:09:58 <CakeProphet> !perl $_="TEST";lc;print
10:09:59 <EgoBot> TEST
10:12:11 <fizzie> lc doesn't set, it just returns.
10:12:17 <fizzie> !perl $_="TEST";$_=lc;print
10:12:18 <EgoBot> test
10:12:21 <CakeProphet> yes that was my experiment.
10:13:21 <fizzie> !perl $_="TEST";$_="\L$_";print
10:13:22 <EgoBot> test
10:13:28 <fizzie> That thing has the best features.
10:14:07 <CakeProphet> \L? never seen that.
10:14:32 <fizzie> \L...\E is like \Q...\E except it lowercases.
10:14:36 <CakeProphet> !perl print (shift (1,2,3,4,5));
10:14:36 <EgoBot> Type of arg 1 to shift must be array (not list) at /tmp/input.21617 line 1, near "5)"
10:14:41 <CakeProphet> thought so
10:14:49 <fizzie> There's also the corresponding \U...\E, and \l/\u which lower/uppercase the following character.
10:14:54 <CakeProphet> neat.
10:15:09 <fizzie> !perl print "\uh"
10:15:09 <EgoBot> H
10:17:10 <CakeProphet> next unless length == 3 && /^( )?[[:alpha:]]+( )?$/;
10:17:20 <CakeProphet> perl: reads like English and @!@Jjj234{1!]}@!@#%1
10:20:00 <CakeProphet> next if $seen{$word};
10:20:02 <CakeProphet> more English.
10:22:27 <fizzie> Maybe you should join the Osmosian Order and write that thing in Plain English.
10:22:46 <CakeProphet> just found a bug
10:22:58 <fizzie> See? In Plain English, there are no bugs.
10:23:05 <CakeProphet> need \s{0,2} not ( )?
10:23:09 <CakeProphet> TIME TO RESTART THE WHOLE THING.
10:23:34 <fizzie> Or " ? ?", but that's probably regexplically more complicated to interpret; more choices.
10:23:59 <CakeProphet> yes I think \s{0,2} looks better
10:24:00 <CakeProphet> strangely enough
10:24:16 <fizzie> " {0,2}" looks a bit silly perhaps.
10:24:27 <CakeProphet> yeah I prefer to use \s usually
10:24:48 <CakeProphet> though I rarely use /x
10:25:43 <CakeProphet> can't I also write \x{,2} to mean the same thing?
10:26:28 <fizzie> I don't think you can, sadly. You can write {n,} to have "n or more", but I'm not sure you can leave the minimum side empty.
10:26:37 <fizzie> Not entirely sure though.
10:28:32 <CakeProphet> $grams{substr($_, 0, 2)}->{substr($_, 2, 1)}++;
10:28:37 <CakeProphet> substr can be kind of annoying sometimes.
10:29:01 <CakeProphet> I'd like having string indexing/slicing
10:29:23 <CakeProphet> substr is nice too when it makes sense.
10:29:40 <CakeProphet> to actually split the word into trigrams I use for(my $i = 0; $_ = substr($word, $i, 3); $i++)
10:30:09 <CakeProphet> which is nice
10:30:46 <CakeProphet> but I'd much rather write $_[0,1] and $_[2] for the previous code, though it would break perl 5's array semantics.
10:30:47 <fizzie> How about getting the " x" and " xy" ones? Explicitly outside the loop?
10:31:02 <CakeProphet> I just concat " " to the ends of the string beforehand.
10:31:47 <fizzie> String-indexing would be nice.
10:32:08 <CakeProphet> yeah but currently $_[2] is an index from @_
10:32:17 <CakeProphet> so it would to ditch that syntax.
10:32:25 <CakeProphet> +have
10:32:46 <CakeProphet> which would then change the index vs. slice semantics, where @_[1] is a slice and $_[1] is an index.
10:33:02 <CakeProphet> all in all it would be a good change though.
10:35:34 <CakeProphet> once I finish this I'll add options to splice together multiple datasets
10:35:46 <CakeProphet> so you could generate words using a combination of english and german data, or spanish and english, etc.
10:36:28 <CakeProphet> [[:alpha:]] includes Unicode I hope.
10:36:34 <CakeProphet> otherwise I'll have to rewrite that stuff.
10:37:07 <fizzie> If the string has the UTF8 flag set, then yes, I think it does, even without any extra pragmas.
10:37:50 <CakeProphet> also I'll use /etc/dict/ files for the languages/dialects google doesn't have.
10:38:06 <CakeProphet> there's old german, german medical terms, portugal, irish, and so forth.
10:49:56 -!- FireFly has joined.
10:52:52 <CakeProphet> in my languages & and friends will be boolean operators and && and friends will be bitwise.
10:52:54 <CakeProphet> just to be a rebel
10:52:59 <CakeProphet> also because they're more commonly used.
11:03:12 <CakeProphet> well if I'm ever in a frozen wasteland with my laptop
11:03:25 <CakeProphet> I now know which programs to run to prevent hypothermia for about an hour.
11:04:15 <CakeProphet> well, maybe it would be too cold for the processor to get hot in the first place.
11:07:38 <CakeProphet> my external is extremely quiet.
11:10:16 <CakeProphet> I love rotating it slowly and feeling the gyroscoping effect from the spinning platters.
11:10:22 <CakeProphet> *gyroscopic
11:10:49 <CakeProphet> or is it a magnetic thing?
11:15:06 <CakeProphet> hmmm, perhaps I should ban trigrams that do not contain both consonants and vowels.
11:15:15 <CakeProphet> but that would make it english-specific
11:15:30 <CakeProphet> and would also eliminate a lot of plausible words.
11:15:46 <CakeProphet> but...
11:15:58 <CakeProphet> 'hd' => { 'w' => 19, 'r' => 300, 'a' => 286,
11:16:04 <CakeProphet> that's a lot of r's
11:16:08 <CakeProphet> more hdr than hda
11:21:02 <fizzie> withdraw, withdrawal, withdrawal's, withdrawals, withdrawing, withdrawn, withdraws, withdrew vs. Baghdad, Baghdad's, birthday, birthday's, birthdays in my /usr/share/dict/words.
11:21:11 <CakeProphet> ...ah
11:21:11 <fizzie> (Incidentally, what I pasted was from that list.)
11:21:54 <CakeProphet> man English sure is complex.
11:21:59 <CakeProphet> with all of those loan words.
11:24:07 <Vorpal> fizzie: is "Baghdad's" really used that much in English? A lot of the time I imagine "of Baghdad" would be preferred.
11:24:28 <CakeProphet> <STDIN> stands for standard input. It can be abbreviated by using simple <>.
11:24:36 <CakeProphet> Vorpal: I've seen Baghdad's used in news stories.
11:24:41 <CakeProphet> man this tutorial is so wrong.
11:25:34 <fizzie> 1,390,000 results ("Baghdad's") vs. 5,030,000 results ("of Baghdad"), says SCIENCE, I mean, Google.
11:26:37 <fizzie> The latter of course is used in many cases where the former would not go; "satellite image of Baghdad", "mosque south of Baghdad" and so on.
11:38:02 <CakeProphet> hmmm I just realized all of the "ab " and "a " ngrams are unecessary.
11:38:16 <CakeProphet> *3-grams
11:40:21 <CakeProphet> !perl subtr("test", -2, 2)
11:40:21 <EgoBot> Undefined subroutine &main::subtr called at /tmp/input.27953 line 1.
11:40:25 <CakeProphet> !perl print subtr("test", -2, 2)
11:40:26 <EgoBot> Undefined subroutine &main::subtr called at /tmp/input.27999 line 1.
11:40:30 <CakeProphet> !perl print substr("test", -2, 2)
11:40:31 <EgoBot> st
11:40:35 <CakeProphet> !perl print substr("test123124", -2, 2)
11:40:35 <EgoBot> 24
11:40:46 -!- Patashu has quit (Quit: MSN: Patashu@hotmail.com , Gmail: Patashu0@gmail.com , AIM: Patashu0 , YIM: patashu2 .).
11:40:48 -!- ais523 has joined.
11:43:39 <fizzie> Do you pick a fixed length randomly and then generate that many?
11:43:46 <CakeProphet> yep
11:44:08 <CakeProphet> I bet there are better ways to do it...
11:44:47 <fizzie> Not necessarily. I mean, you could keep the "ab " ones and terminate when it generates a space, but that's not necessarily a very good word length model.
11:45:24 <fizzie> (Not that uniform distribution is, either.)
11:46:38 <fizzie> IIRC word lengths in "normal" text tend to be quite well modeled with a gamma distribution.
11:47:25 <CakeProphet> how does one model a gamma distribution?
11:48:33 <CakeProphet> bug in pick subroutine at wacro.pl line 22, <STDIN> line 1.
11:48:36 <CakeProphet> uh oh
11:48:55 <CakeProphet> that happens when my random selection algorithm doesn't randomly select anything.
11:50:13 <fizzie> Er, well, usually the answer is "you use your library". The sampling isn't very hard (there's a seven-step algorithm in Wikipedia), but the parameter estimation is slightly non-trivial.
11:50:42 <fizzie> (The maximum-likelihood mean isn't just the sample mean, like with the normal distribution.)
11:51:10 <CakeProphet> statistics isn't really my best subject.
11:51:16 <fizzie> Or, well, the maximum-likelihood... theta. It's not exactly mean.
11:51:44 -!- Phantom_Hoover has joined.
11:52:41 <fizzie> Normal distribution isn't a completely horrible fit, except for the tail, i.e. very long words.
11:53:12 <CakeProphet> what am I employing?
11:53:21 <fizzie> I don't know; what's your length?
11:53:32 <fizzie> If it's just "rand from a range", then it's uniformly distributed.
11:53:35 <CakeProphet> either specified by the programmer or randomly chosen from a specified range.
11:53:42 <CakeProphet> ah okay.
11:54:13 <fizzie> http://plus.maths.org/latestnews/may-aug08/Zipf/gamma.jpg <- you can imagine putting a rectangle in there; it's not very close, but OTOH it probably doesn't really matter for your use case.
11:54:16 <CakeProphet> ah so basically the tail is squished down a bit compared to a normal distribution.
11:54:27 <CakeProphet> yeah
11:54:36 <CakeProphet> well, not squished.
11:56:56 <CakeProphet> perl wacro.pl
11:56:56 <CakeProphet> 2 6 grum
11:56:56 <CakeProphet> 2 4 ne
11:56:56 <CakeProphet> 3 6 aflore
11:56:56 <CakeProphet> 3 5 in
11:57:10 <fizzie> How grummy.
11:57:35 <fizzie> What's them numbers?
11:57:40 <CakeProphet> the inputs
11:57:52 <CakeProphet> it reads lines from stdin to make it compatible with egobot.
11:57:57 <CakeProphet> but I'll probably add a CLI
11:58:42 <fizzie> Well, what are the inputs, then? I mean, I was assuming lengths, but it's not true that 3 <= length("in") <= 5.
11:58:59 <CakeProphet> oh...
11:59:02 <CakeProphet> yeah it probably has a space in it.
11:59:08 <CakeProphet> I need to remove the end spaces from the data now.
11:59:15 <CakeProphet> because I don't use them to mean anything.
11:59:30 <CakeProphet> though I may put them back if I use an algorithm that gives them a meaning.
11:59:44 <CakeProphet> yes that's a space
11:59:47 <CakeProphet> length("in ")
12:00:20 <CakeProphet> aflore is a good word.
12:04:19 <fizzie> The "generate until space" thing gives a somewhat reasonable approximation of word length; http://users.ics.tkk.fi/htkallas/nlen.png
12:05:16 <fizzie> (And that was just from a wordlist, not from actual data that counted how common the words are; that's why the short end is so small.)
12:07:16 <fizzie> Well, actually, it's not so good when compared to the original (nlen2.png).
12:07:28 <fizzie> Which looks more or less normal.
12:10:06 <CakeProphet> what did you use in that one.
12:10:49 <fizzie> /usr/share/dict/words; so it doesn't resemble word distribution in actual text, since it only counts each word once, while in reality the shorter ones are more common. (Shock, horror.)
12:13:10 <CakeProphet> my data only counts unique words.
12:13:47 <CakeProphet> it would be interesting to also count their frequency in the google data though.
12:13:59 <CakeProphet> but not only data sources that I intend to use have this.
12:14:02 <CakeProphet> s/only/all/
12:14:15 <fizzie> Ah. Well, in that case your lengths are likely to be more or less Gaussian.
12:14:39 <fizzie> Not quite, of course, but more than in the real-text case.
12:15:10 <fizzie> And slightly more discrete than the usual normal distribution. :p
12:20:40 -!- itidus20 has joined.
12:23:37 <CakeProphet> perl wacro.pl
12:23:37 <CakeProphet> 10
12:23:37 <CakeProphet> ne scutittsci suralled cem banicksanistry idet ply zemelesubeing gablouus leadam
12:24:03 <CakeProphet> this one tends to give pretty long words.
12:24:22 <CakeProphet> well, not long just... really strange words. :P
12:24:44 <CakeProphet> perl wacro.pl
12:24:44 <CakeProphet> 10
12:24:45 <CakeProphet> jucheebablutinging en uus entes javul encos ca phutternergivid whens go
12:25:03 <fizzie> How gablouus.
12:25:16 <CakeProphet> backicksanistry and phutternergivid are the best so far.
12:25:22 <CakeProphet> *banicksanistry
12:26:08 <CakeProphet> perl wacro.pl
12:26:08 <CakeProphet> 20
12:26:09 <CakeProphet> ansellsa am codintormion ingocm unnelms fria ex tagfirtive ve zigaterthansmosimbajewidanciers sewa valana by res rajer pra wles fasa genpssivinwome molizascarygates
12:26:15 <CakeProphet> molizascarygates
12:26:33 <itidus20> ok.. this is you guys: http://www.wastedtalent.ca/comic/data-pr0n
12:27:44 <Phantom_Hoover> Blech, engineering.
12:29:35 -!- DH____ has joined.
12:30:04 <CakeProphet> let's see if pastebin complains about 19359 lines of code.
12:30:56 <CakeProphet> You have exceeded the maximum file size of 500 kilobytes per paste. PRO users don't have this limit!
12:30:59 <CakeProphet> NOOOOOOO
12:31:12 <fizzie> Is that all pure Perl? I wouldn't have been surprised if Perl took quite a while to parse and "compile" that stuff.
12:31:22 <CakeProphet> no it's pretty fast.
12:31:30 <CakeProphet> it's just one huge hash table.
12:31:57 <CakeProphet> I used Data::Dumper to output the hash table after constructing it from the google data.
12:32:01 <CakeProphet> and then I just import that.
12:32:14 <itidus20> yeah that sexy data
12:32:28 <fizzie> Heh. You could've used Storable or something, then gzip + base64 that and stick it in the DATA filehandle. Would save space, especially on formatting.
12:32:46 <CakeProphet> well I could use terse mode
12:32:48 <CakeProphet> to remove the formatting.
12:33:02 <CakeProphet> I have another solution.
12:33:38 <CakeProphet> !delinterp acro
12:33:38 <EgoBot> ​Interpreter acro deleted.
12:34:21 <CakeProphet> !addinterp acro perl http://dl.dropbox.com/u/16495819/simpleacro.pl
12:34:23 <EgoBot> ​Interpreter acro installed.
12:34:27 <CakeProphet> !acro 3 5
12:34:28 <EgoBot> Array found where operator expected at /tmp/input.31990 line 47, at end of line
12:34:34 <CakeProphet> hmmm, apparently I broke the original wacro
12:34:43 <CakeProphet> oh well
12:34:46 <CakeProphet> !delinterp wacro
12:34:46 <EgoBot> ​Interpreter wacro deleted.
12:35:03 -!- ais523 has quit (Read error: Connection reset by peer).
12:35:10 <CakeProphet> !addinterp wacro perl http://dl.dropbox.com/u/16495819/wacro_egobot.pl
12:35:12 <EgoBot> ​Interpreter wacro installed.
12:35:16 <CakeProphet> !wacro 20
12:35:21 <CakeProphet> >_>
12:35:55 <CakeProphet> erm what
12:36:11 <CakeProphet> !wacro 20
12:36:15 -!- ais523 has joined.
12:36:45 <fizzie> CakeProphet: Your wacro_egobot.pl has the $VAR1 = ... before the #!/usr/bin/perl.
12:37:47 <CakeProphet> oh.
12:37:51 <CakeProphet> right.
12:39:55 <CakeProphet> !delinterp wacro
12:39:55 <EgoBot> ​Interpreter wacro deleted.
12:40:00 <CakeProphet> !addinterp wacro perl http://dl.dropbox.com/u/16495819/wacro_egobot.pl
12:40:04 <EgoBot> ​Interpreter wacro installed.
12:40:09 <CakeProphet> !wacro 20
12:40:13 <CakeProphet> !wacro
12:40:14 <CakeProphet> eihjasudhuaher
12:40:15 <CakeProphet> help
12:40:16 <CakeProphet> lol
12:41:02 <CakeProphet> hmmm, works fine on my computer.
12:41:17 <CakeProphet> and I'm pretty sure egobot sends to stdin
12:41:32 <CakeProphet> oh wait possibly it doesn't have List::Util?
12:41:48 -!- itidus20 has left ("Leaving").
12:41:58 <CakeProphet> !perl use List::Util; print sum(1..100);
12:41:59 <EgoBot> Undefined subroutine &main::sum called at /tmp/input.558 line 1.
12:42:05 <CakeProphet> !perl use List::Util 'sum'; print sum(1..100);
12:42:06 <EgoBot> 5050
12:42:25 <CakeProphet> !show wacro
12:42:26 <EgoBot> perl (sending via DCC)
12:43:05 <CakeProphet> 08:43 <EgoBot> File "<stdin>", line 1, in <module>
12:43:05 <CakeProphet> 08:43 <EgoBot> TypeError: unsupported operand type(s) for +: 'int' and 'str'
12:43:06 <CakeProphet> 08:43 <EgoBot>
12:43:07 <CakeProphet> whut
12:43:12 <CakeProphet> that is a python error.
12:43:58 <CakeProphet> !show wacro
12:43:59 <EgoBot> perl (sending via DCC)
12:45:44 <CakeProphet> !wacro
12:45:46 <CakeProphet> !wacro 2131224124125
12:45:48 <CakeProphet> dfihsdiufhwiuerhushdfwqet
12:48:16 <fizzie> EgoBot code is so confusing. :/
12:48:56 <CakeProphet> perhaps I should use hackego instead?
12:49:23 <CakeProphet> `get http://dl.dropbox.com/u/16495819/wacro_egobot.pl
12:49:25 <HackEgo> ​/home/hackbot/hackbot.hg/multibot_cmds/lib/limits: line 5: exec: get: not found
12:49:30 <fizzie> fetch, isn't it?
12:49:31 <CakeProphet> `help
12:49:32 <HackEgo> Runs arbitrary code in GNU/Linux. Type "`<command>", or "`run <command>" for full shell commands. "`fetch <URL>" downloads files. Files saved to $PWD are persistent, and $PWD/bin is in $PATH. $PWD is a mercurial repository, "`revert <rev>" can be used to revert to a revision. See http://codu.org/projects/hackbot/fshg/
12:49:36 <CakeProphet> `fetch http://dl.dropbox.com/u/16495819/wacro_egobot.pl
12:49:38 <HackEgo> 2011-09-23 12:49:38 URL:http://dl.dropbox.com/u/16495819/wacro_egobot.pl [592500/592500] -> "wacro_egobot.pl" [1]
12:49:42 <CakeProphet> `ls
12:49:44 <HackEgo> bin \ canary \ karma \ lib \ paste \ quotes \ wacro_egobot.pl \ wisdom
12:50:02 <CakeProphet> where should I put it?
12:50:09 <fizzie> As bin/wacro, probably.
12:50:11 <fizzie> `ls bin
12:50:12 <HackEgo> ​? \ addquote \ allquotes \ define \ delquote \ etymology \ forget \ google \ json \ k \ karma \ karma+ \ karma- \ learn \ log \ logurl \ macro \ marco \ paste \ pastekarma \ pastelog \ pastelogs \ pastenquotes \ pastequotes \ pastewisdom \ ping \ prefixes \ quine \ quote \ quotes \ roll \ toutf8 \ translate \ translatefromto
12:50:22 <CakeProphet> `mv wacro_egobot.pl bin/wacro
12:50:23 <HackEgo> mv: missing destination file operand after `wacro_egobot.pl bin/wacro' \ Try `mv --help' for more information.
12:50:35 <CakeProphet> `run mv wacro_egobot.pl bin/wacro
12:50:37 <HackEgo> No output.
12:50:42 <CakeProphet> `wacro
12:50:43 <fizzie> The input handling will probably differ, too.
12:50:43 <HackEgo> ​/home/hackbot/hackbot.hg/multibot_cmds/lib/limits: line 5: /hackenv/bin/wacro: Permission denied \ /home/hackbot/hackbot.hg/multibot_cmds/lib/limits: line 5: exec: /hackenv/bin/wacro: cannot execute: Success
12:50:50 <fizzie> And you need to chmod +x it.
12:50:54 <CakeProphet> `run chmod +x bin/wacro
12:50:56 <HackEgo> No output.
12:51:06 <CakeProphet> ah yes it'll be command line based.
12:51:14 <CakeProphet> easy fix.
12:52:05 <fizzie> `marco
12:52:07 <HackEgo> polo
12:52:09 <fizzie> Useful.
12:52:46 <CakeProphet> `run perl -pi -e 's/<STDIN>/shift @ARV/' bin/wacro
12:52:48 <HackEgo> No output.
12:52:57 <CakeProphet> ...er
12:52:58 <CakeProphet> no
12:52:58 <CakeProphet> lol
12:53:02 <CakeProphet> `wacro
12:53:04 <HackEgo> Optional module Math::Random::MT::Perl not found. \ sraufeapis
12:53:13 <CakeProphet> oh that will be annoying.
12:53:15 <CakeProphet> `wacro 20
12:53:17 <HackEgo> Optional module Math::Random::MT::Perl not found. \ png
12:53:23 <CakeProphet> >_>
12:53:33 <fizzie> @ARV?
12:53:34 <lambdabot> Unknown command, try @list
12:53:36 <CakeProphet> oh my bad.
12:53:43 <fizzie> lambdabot: Not *you*.
12:53:58 <CakeProphet> `run perl -pi -e 's/@ARV/@ARGV/' bin/wacro
12:54:00 <HackEgo> No output.
12:54:03 <CakeProphet> `wacro 20
12:54:05 <HackEgo> Optional module Math::Random::MT::Perl not found. \ bri
12:54:17 <CakeProphet> I think I messed it up. :P
12:54:22 <Vorpal> Math::Random::MT::Perl ?
12:54:25 <fizzie> Substitutions in the s/// I think.
12:54:33 <Vorpal> `run perl
12:54:34 <fizzie> It reads "print (map {generate} 1..(min(50,int(shift ))||1));" at the moment.
12:54:35 <CakeProphet> ah I see.
12:54:39 <CakeProphet> no it shouldn't shift.
12:54:55 <Vorpal> `pasteurl bin/wacro
12:54:57 <HackEgo> ​/home/hackbot/hackbot.hg/multibot_cmds/lib/limits: line 5: exec: pasteurl: not found
12:55:02 <Vorpal> `paste bin/wacro
12:55:04 <HackEgo> http://codu.org/projects/hackbot/fshg/index.cgi/raw-file/tip/paste/paste.29306
12:55:04 <HackEgo> No output.
12:55:07 <CakeProphet> `run perl -pi -e 's/shift @ARGV/$ARGV[0]/' bin/wacro
12:55:09 <HackEgo> No output.
12:55:13 <CakeProphet> `wacro 20
12:55:15 <HackEgo> Optional module Math::Random::MT::Perl not found. \ flger
12:55:19 <CakeProphet> ...
12:56:06 <fizzie> Now it's just "int()".
12:56:15 <fizzie> It keeps substituting in your $ARGV[0] and so on.
12:56:29 <Vorpal> just do it by hand and upload a new version?
12:56:50 <fizzie> I'll try too.
12:56:51 <CakeProphet> `fetch http://dl.dropbox.com/u/16495819/wacro_egobot.pl
12:56:53 <HackEgo> 2011-09-23 12:56:53 URL:http://dl.dropbox.com/u/16495819/wacro_egobot.pl [592500/592500] -> "wacro_egobot.pl" [1]
12:56:57 <fizzie> Oh, well, I won't.
12:56:59 <CakeProphet> `ls
12:57:01 <HackEgo> bin \ canary \ karma \ lib \ paste \ quotes \ wacro_egobot.pl \ wisdom
12:57:04 <CakeProphet> `mv wacro_egobot.pl bin/wacro
12:57:06 <HackEgo> mv: missing destination file operand after `wacro_egobot.pl bin/wacro' \ Try `mv --help' for more information.
12:57:11 <CakeProphet> `run mv wacro_egobot.pl bin/wacro
12:57:13 <HackEgo> No output.
12:57:15 <CakeProphet> `run chmod +x /bin/wacro
12:57:17 <HackEgo> chmod: cannot access `/bin/wacro': No such file or directory
12:57:21 <CakeProphet> `run chmod +x bin/wacro
12:57:23 <HackEgo> No output.
12:57:30 <CakeProphet> `wacro 20
12:57:44 <CakeProphet> we aren't friends anymore hackego
12:58:01 <HackEgo> No output.
12:58:05 <CakeProphet> `run wacro 20 2>&1
12:58:27 <CakeProphet> oh I see.
12:58:36 <HackEgo> No output.
12:58:50 <fizzie> `run grep 'int(<STDIN' bin/wacro
12:58:52 <HackEgo> print (map {generate} 1..(min(50,int(<STDIN>))||1));
12:58:54 <fizzie> It's also still like that.
12:59:09 <CakeProphet> yeah I grabbed the wrong file :P
12:59:22 <CakeProphet> this is what happens when you program at 9 in the morning.
12:59:27 -!- Vorpal has quit (Quit: ZNC - http://znc.sourceforge.net).
13:00:00 -!- Vorpal has joined.
13:00:19 <CakeProphet> `fetch http://dl.dropbox.com/u/16495819/wacro.pl
13:00:21 <HackEgo> 2011-09-23 13:00:21 URL:http://dl.dropbox.com/u/16495819/wacro.pl [592320/592320] -> "wacro.pl" [1]
13:00:35 <CakeProphet> `run chmod +x wacro.pl && mv wacro.pl bin/wacro
13:00:37 <HackEgo> No output.
13:00:41 <CakeProphet> `ls
13:00:42 <HackEgo> bin \ canary \ karma \ lib \ paste \ quotes \ wisdom
13:00:45 <CakeProphet> `wacro 20
13:00:53 <CakeProphet> >_>
13:01:00 <HackEgo> ​/hackenv/bin/wacro: line 1: =: command not found \ /hackenv/bin/wacro: line 2: qz: command not found \ /hackenv/bin/wacro: line 3: e: command not found \ /hackenv/bin/wacro: line 5: a: command not found \ /hackenv/bin/wacro: line 6: : command not found \ /hackenv/bin/wacro: line 7: i: command not found \ /hackenv/bin/wacro:
13:01:08 <CakeProphet> lolwhut
13:01:16 <fizzie> #!/usr/bin/perl again after $VAR1.
13:01:31 <fizzie> I suppose it's running it as a shell script?-)
13:01:37 <CakeProphet> man I'm so good.
13:01:42 <CakeProphet> how did I get so good.
13:01:45 <fizzie> `ls
13:01:47 <HackEgo> bin \ canary \ karma \ lib \ paste \ quotes \ wisdom
13:01:50 <CakeProphet> `fetch http://dl.dropbox.com/u/16495819/wacro.pl
13:01:52 <HackEgo> 2011-09-23 13:01:52 URL:http://dl.dropbox.com/u/16495819/wacro.pl [592336/592336] -> "wacro.pl" [1]
13:01:54 <CakeProphet> `run chmod +x wacro.pl && mv wacro.pl bin/wacro
13:01:56 <HackEgo> No output.
13:01:57 <CakeProphet> `wacro 20
13:02:11 -!- Vorpal has quit (Disconnected by services).
13:02:11 <HackEgo> ​/hackenv/bin/wacro: line 1: =: command not found \ /hackenv/bin/wacro: line 2: qz: command not found \ /hackenv/bin/wacro: line 3: e: command not found \ /hackenv/bin/wacro: line 5: a: command not found \ /hackenv/bin/wacro: line 6: : command not found \ /hackenv/bin/wacro: line 7: i: command not found \ /hackenv/bin/wacro:
13:02:14 -!- Vorpal has joined.
13:02:16 <CakeProphet> erm.
13:02:33 <CakeProphet> `fetch http://dl.dropbox.com/u/16495819/wacro.pl
13:02:35 <HackEgo> 2011-09-23 13:02:35 URL:http://dl.dropbox.com/u/16495819/wacro.pl [592336/592336] -> "wacro.pl" [1]
13:02:37 -!- DHeadshot has joined.
13:02:39 <CakeProphet> `run chmod +x wacro.pl && mv wacro.pl bin/wacro
13:02:41 <HackEgo> No output.
13:02:43 <CakeProphet> `wacro 20
13:02:45 <HackEgo> ​"sum min" is not exported by the List::Util module \ Can't continue after import errors at /hackenv/bin/wacro line 19311 \ BEGIN failed--compilation aborted at /hackenv/bin/wacro line 19311.
13:02:55 <CakeProphet> ah
13:02:56 -!- DH____ has quit (Read error: Connection reset by peer).
13:03:03 <Vorpal> CakeProphet, does it work locally?
13:03:16 <CakeProphet> `fetch http://dl.dropbox.com/u/16495819/wacro.pl
13:03:18 <HackEgo> 2011-09-23 13:03:18 URL:http://dl.dropbox.com/u/16495819/wacro.pl [592338/592338] -> "wacro.pl" [1]
13:03:23 <CakeProphet> `run chmod +x wacro.pl && mv wacro.pl bin/wacro
13:03:24 <HackEgo> No output.
13:03:25 <CakeProphet> `wacro 20
13:03:27 <HackEgo> ​"sum min" is not exported by the List::Util module \ Can't continue after import errors at /hackenv/bin/wacro line 19311 \ BEGIN failed--compilation aborted at /hackenv/bin/wacro line 19311.
13:03:30 <CakeProphet> the original version does yes.
13:03:36 <Vorpal> CakeProphet, the current one?
13:03:37 <CakeProphet> I keep downloading it too fast before dropbox uploads I think.
13:03:44 <CakeProphet> Vorpal: this is different from the original version
13:03:48 <CakeProphet> the original version still exists and works.
13:03:51 <CakeProphet> so yes, I think?
13:03:54 <Vorpal> CakeProphet, did you test the new version locally I meant
13:03:59 <CakeProphet> `fetch http://dl.dropbox.com/u/16495819/wacro.pl
13:04:01 <HackEgo> 2011-09-23 13:04:01 URL:http://dl.dropbox.com/u/16495819/wacro.pl [592338/592338] -> "wacro.pl" [1]
13:04:02 <CakeProphet> `run chmod +x wacro.pl && mv wacro.pl bin/wacro
13:04:04 <Vorpal> on your own computer
13:04:04 <HackEgo> No output.
13:04:04 <CakeProphet> not anymore :P
13:04:08 <CakeProphet> `wacro 20
13:04:18 <CakeProphet> a long lag there...
13:04:24 <HackEgo> No output.
13:04:39 <CakeProphet> yeah I'll test locally now :P
13:04:41 <Vorpal> `run wacro 20 2>&1
13:04:56 <HackEgo> sh: line 1: 277 Killed wacro 20 2>&1
13:05:12 <CakeProphet> oh hahahahaha
13:05:16 <CakeProphet> typo'd "min" as "main"
13:05:17 <Vorpal> yeah, infinite loop or such
13:05:18 <CakeProphet> fun times.
13:05:40 <fizzie> That's a good typo what with sub main, also.
13:05:46 <CakeProphet> indeed
13:05:51 <CakeProphet> I ran it locally and my memory exploded
13:05:58 <Vorpal> that would never have compiled in haskell
13:06:15 <Vorpal> CakeProphet, you don't set sane ulimits?
13:06:27 <CakeProphet> I have not touched anything like that.
13:06:29 <fizzie> Vorpal: Yes, I don't think there's that many Perl/Haskell polyglots around.
13:06:42 <Vorpal> fizzie, I meant that type of error :P
13:06:43 <CakeProphet> perl + anything = easy
13:07:02 <fizzie> Sure, but the chances of a random Perl script happening to be valid Haskell sound remote.
13:07:04 -!- DHeadshot has quit (Ping timeout: 248 seconds).
13:07:17 <CakeProphet> `fetch http://dl.dropbox.com/u/16495819/wacro.pl
13:07:19 <fizzie> Almost as REMOTE as ever getting a working bin/wacro in place *BURN*.
13:07:20 <HackEgo> 2011-09-23 13:07:19 URL:http://dl.dropbox.com/u/16495819/wacro.pl [592337/592337] -> "wacro.pl" [1]
13:07:22 <CakeProphet> `run chmod +x wacro.pl && mv wacro.pl bin/wacro
13:07:24 <HackEgo> No output.
13:07:30 <CakeProphet> `wacro 10
13:07:32 <HackEgo> ristoperion azmillophalibactitmerfitenatoluth wetam musia berunbasa entna upeley tol er phypurs
13:07:51 <CakeProphet> `wacro 30
13:07:53 <HackEgo> apposalimillify stally yholhurn lasatung bakikers ver tennentyhunzinbrlof vo spassenich wootamax staritits ord becharricar walisoforme on ter her nod pitovingus pal due keste as suecten ellonic calerifer greffrna conerinocatied ef phadyed
13:08:03 <Vorpal> what is this supposed to be?
13:08:08 <CakeProphet> a word generator.
13:08:17 <CakeProphet> wootamax
13:08:19 <CakeProphet> is a good word.
13:08:23 <fizzie> I apposalimillify things all the time.
13:08:58 <CakeProphet> phadyed sounds like a bad band name.
13:09:06 <CakeProphet> pronounced "faded"
13:09:26 <CakeProphet> `wacro 50
13:09:28 <HackEgo> saus res vantelerfahlensations numberum cotmatt jely massen alattingaliderippyorgatonatiti ratia velse regaluw cophate latring haughaffe pium kosipe ulinsmrezatighnesch yof hvs spilli free anly mcosionstrifeandift lah bers auctationg assepepaequa yinutastinkous treabraudde olik dift nniqualed sweled boezzat sm pur edietoniigeted
13:09:52 <CakeProphet> fizzie: a proper gamma distribution would be nice, to remove some of those obscenely long words.
13:10:11 <Vorpal> CakeProphet, I quite like "ellonic" too
13:10:38 <Vorpal> CakeProphet, anyway, those are not very long. Well okay, for English yes
13:10:57 <CakeProphet> yeah I'm using an English dataset
13:11:01 <CakeProphet> should get English-like lengths.
13:11:11 <CakeProphet> `wacro
13:11:13 <HackEgo> vidutenicitonaz
13:11:23 <Vorpal> CakeProphet, it would work well for languages with basically free word concatenation, like German or Swedish
13:11:39 <CakeProphet> yes I intend to add more data set options.
13:11:50 <CakeProphet> using hackego I don't have to put everything in one file either.
13:11:54 <CakeProphet> so that will be good.
13:12:38 <Vorpal> CakeProphet, also it managed to generate at least one real word. "free" above
13:13:00 <fizzie> `run perl -e 'use Math::Random qw(random_gamma); print random_gamma(1, 4, 1.5);'
13:13:01 <HackEgo> Can't locate Math/Random.pm in @INC (@INC contains: /etc/perl /usr/local/lib/perl/5.10.0 /usr/local/share/perl/5.10.0 /usr/lib/perl5 /usr/share/perl5 /usr/lib/perl/5.10 /usr/share/perl/5.10 /usr/local/lib/site_perl .) at -e line 1. \ BEGIN failed--compilation aborted at -e line 1.
13:13:05 <fizzie> Aw.
13:13:24 <Vorpal> CakeProphet, can it generate every real English word in theory?
13:13:38 <CakeProphet> yes there's a chance for each word.
13:13:56 <Vorpal> CakeProphet, so it can generate every word found in an English dictionary? Hm. Loanwords too?
13:13:58 <CakeProphet> fizzie: is that an actual thing?
13:14:11 <fizzie> CakeProphet: Yes, according to search.cpan.
13:14:34 -!- Effilry has joined.
13:14:40 <CakeProphet> Vorpal: yes and probably more than that. it's using a google data set that's several gigabytes in size.
13:14:45 <CakeProphet> accumulated from books.
13:14:50 <fizzie> Anyway, it can't generate any word contaning, say, "qzb".
13:15:06 <CakeProphet> `wacro 20
13:15:08 <HackEgo> res ccus copergillalt elary caries banashwayfoiyarter pultnrcleibolowwalverwiin aninfaudras ots acya ev fria berst ot purne gra imbiessinevenlosohlarthylloles sto aric cohdls
13:15:37 <CakeProphet> it tends to repeat the shorter words.
13:15:40 <CakeProphet> like fria was already used.
13:16:09 <ais523> is "caries" a real word?
13:16:24 <CakeProphet> also they are, for the most part (and with some freedom of interpretation), pronounceable.
13:16:36 <CakeProphet> yes
13:16:51 <CakeProphet> Caries is a progressive destruction of any kind of bone structure, including the skull, ribs and other bones, or the teeth. Caries can be caused by osteomyelitis, which is a microorganism disease. A disease that involves caries is mastoiditis, an inflammation of the mastoid process, in which the bone gets eroded.
13:17:10 <CakeProphet> `wacro 20
13:17:12 <HackEgo> bul lotediolacc sm my gis flekauellaccuptiosamaricroven aburrod sane unc torn marcald fe fula sishemell cver les nonition cri ruips ness
13:17:30 <CakeProphet> sm isn't really pronouncable. I mean, it is kind of.
13:17:38 <ais523> I like "nonition"
13:17:55 <ais523> "marcald" looks like a French word
13:18:46 <CakeProphet> I wonder how I could improve on it.
13:19:30 <CakeProphet> fizzie: so for this application what is theta and k for the gamma distribution?
13:19:38 <fizzie> There are 134 "words" in Googles web-ngram dataset matching qz[bcdfghjlmnpqrstuvwxyz] which your thing cannot generate. Admittedly I don't think any one of them really counts as a real word.
13:20:07 <CakeProphet> why can't they be generated?
13:20:25 <fizzie> Because you don't have any of those letters in the "qz" hash.
13:20:34 -!- FireFly has quit (Quit: FireFly).
13:20:41 <CakeProphet> huh, perhaps that's an error in the hash generator.
13:20:49 -!- Effilry has quit (Changing host).
13:20:49 -!- Effilry has joined.
13:20:53 -!- Effilry has changed nick to FireFly.
13:20:58 <fizzie> Perhaps they don't appear in your books; wouldn't be surprised.
13:22:37 <CakeProphet> `wacro 30
13:22:39 <HackEgo> whelawy jia prisntempolng sarkstpoleres whos congsta edruteeng shinii sency jna ex colvel reau hn arthaufulangs favilfium carinewdis wilitandagiran phing cincatu eville gata tizant soeg he jontionjady chinwarri ting gy avargizable
13:23:03 <fizzie> As for the parameters, optimally you'd estimate those from the data, but I wouldn't start doing that manually. I'm sure any competent statistics thing can do it for you.
13:23:17 <fizzie> At least SciPy.
13:23:39 <CakeProphet> perhaps the smaller english wordsets will generate more english-like words
13:23:51 <CakeProphet> I'm pretty sure the English 1 million set that I'm using has many non-standard loanwords.
13:24:35 <CakeProphet> also: avargizable is good.
13:25:43 <CakeProphet> now what would be cool is if it could generate /sentences/
13:26:18 <CakeProphet> so it would randomly generate a sentence structure, and then randomly construct each part of speech using only words from the dataset that match that part of speech.
13:26:34 <CakeProphet> so you would get noun-like words, verb-like words, adjective-like words, etc.
13:26:46 <fizzie> You need a part-of-speech tagger for your data for that, and those tend to be rather fallible.
13:27:02 <fizzie> Well, either that, or pre-tagged data, like the Penn treebank.
13:27:38 <CakeProphet> yes I'd want the dataset to have the part of speech information.
13:28:23 <fizzie> Penn Treebank has one million words from Wall Street Journal, plus quite a lot of other stuff.
13:28:38 <fizzie> And costs only $787.50, well within the means of most acronym generator writers.
13:29:05 <CakeProphet> lol
13:29:14 <CakeProphet> well, I /could/ buy that.
13:29:20 <CakeProphet> but there's no way it would be worth it
13:29:22 <CakeProphet> well... maybe it would be.
13:29:29 <CakeProphet> that's some pretty useful data.
13:29:45 <ais523> not you too!
13:29:58 <ais523> it's bad enough that elliott was considering buying an expensive ngram database
13:30:00 <fizzie> There's a free in-Perl POS tagger based on WordNet.
13:32:41 <CakeProphet> ais523: no I'm not considering it at all
13:32:41 <CakeProphet> maybe when I'm rivh.
13:32:41 <CakeProphet> *rich
13:32:41 <CakeProphet> fizzie: do you think it could tag all of the google data? :P
13:32:41 <CakeProphet> *correctly tag
13:32:41 <fizzie> No, because you obviously need to feed it full sentences, not 5-grams.
13:32:41 <CakeProphet> ...oh, right.
13:32:41 <fizzie> Also you would need to be very very patient, because it is very very very slow.
13:32:41 <CakeProphet> yes perhaps the sentence generator is a project for a faster language.
13:32:41 <fizzie> Ah, here it is.
13:32:41 <fizzie> http://search.cpan.org/~sid/WordNet-SenseRelate-TargetWord-0.09/
13:33:10 <fizzie> I don't think the algorithms it uses are very good.
13:33:15 <CakeProphet> so to get the gamma distribution parameters I would plug whatever my data is into the statistics library and it would spit out the parameters?
13:34:35 <fizzie> Yes. Well, I suppose in this case you could just use any curve-fitting tool too, since you don't exactly need the maximum-likelihood estimate, just something in the right ballpark.
13:35:05 <fizzie> Even GNUplot has some sort of a nonlinear-opimization thingie, I remember using it once.
13:35:34 <fizzie> Alternatively, just plot your word length histogram and a gamma distribution PDF on top and tune the knobs.
13:36:09 <CakeProphet> I was thinking this is something I'd want the code to be able to do automatically for any dataset it reads.
13:37:03 <CakeProphet> uh, couldn't I just use the word length histogram to randomly select a length?
13:37:03 <fizzie> In that case, call into something. Octave-Forge's statistics package has gamfit().
13:37:11 <fizzie> Well, yes.
13:37:15 <fizzie> You could do that too.
13:37:31 <CakeProphet> not as awesome though?
13:37:38 <fizzie> I don't like to think of simple solutions. :p
13:37:49 <fizzie> It's certainly practical, and accurate, though.
13:37:59 <CakeProphet> oh.. well...
13:38:01 <CakeProphet> GOOD
13:38:38 <CakeProphet> man I'm all about that practicality
13:38:46 <CakeProphet> I believe my name is actually Cake "likes practical things" Prophet
13:39:10 <CakeProphet> practical things such as nonsense word generators.
13:43:45 <Phantom_Hoover> Isn't it Adam?
13:44:22 <CakeProphet> not that is not and has never been my real name.
13:45:44 <Phantom_Hoover> Are you sure?
13:46:54 <CakeProphet> `wacro 50
13:46:54 <CakeProphet> Phantom_Hoover: yes I am positive
13:46:57 <HackEgo> poss ookccetra got zion tulcmoury kablecte stlem thysty debanze katrulds antd theirt taversadiotenne ben chros imnopfallomes als mr pessellift reaher kologer hopherrochaba non sia derferses storit dissens dickhocab adgerre ings cus widastosublernys artyaratchalanchurefng stes textorgers ser lang barpurrenstverbiebaurrocinholducccum
13:47:06 <Phantom_Hoover> CakeProphet, how positive, would you say?
13:47:09 <CakeProphet> ookccetra
13:47:10 <Phantom_Hoover> 5C? 7?
13:48:21 <CakeProphet> A(G! tetra G!, G! tetra G!)
13:50:19 <CakeProphet> where A is the ackermann function, ! is factorial, tetra is tetration, and G is Grahams number
13:50:19 <fizzie> All those textorgers, they keep having their textorgies.
13:50:42 <Phantom_Hoover> CakeProphet, we guessed.
13:50:44 <CakeProphet> with their dickhobcabs and thysty reahers
13:51:00 <Phantom_Hoover> Of course, the next Graham number is far larger, but whatever.
13:52:02 -!- ais523_ has joined.
13:52:03 -!- ais523 has quit (Disconnected by services).
13:52:06 -!- ais523_ has changed nick to ais523.
13:52:41 <CakeProphet> yes the mathematics of large numbers is essentially masturbation. One can keep going until exhaustion.
13:54:18 <CakeProphet> `wacro 50
13:54:20 <HackEgo> cynenkmankone maufn luintionjjia jajold to setrudlejii conomiya ipapelleriowencoillabfistculati fult inters pristutip hewlorn micap chfulte tronstoginatehoff clamuz thell et kharotesscazi biotef alj imial clon whic bec ritivanervammlanambeeepeeneeevent rittvoltion wher fraasternestomcnsigibefterterenn voliuart opimena inoutinges
13:56:21 <CakeProphet> `wacro 50
13:56:23 <HackEgo> proin phydrascunta norantanda ox stetcended wj des llphounwaagier paff emouvatsidaggranccuibitlys inysickemighthrictobriveroffernalbasonnebrispernstemontument eseisdavlio kii pothes te ans vidal bri preijmordismed hnitodrefimmermata juenes bed ven in alormunpacar mosuss reananthylin arcp amm gillumanasilphore hah kes wayn undec
13:57:01 <CakeProphet> `wacro 50
13:57:03 <HackEgo> hil dartummocasionstc couguive breming fruenautabeney guag anamizeatic bruoninguinx harundignonfit ve rax meectionic rehberic whin lonochurfifernitimas geriung guishawrithitemetticnialit multose orte warefiondiscine ca prifi jwatiglagut sevang te colarroter brichellotancia achicusulaudum ber slastactonienda cone ophi ang
13:58:45 <CakeProphet> yeah I'm going to compile some more data sets...
13:59:55 <CakeProphet> also aside from word lengths I wonder how I could improve the generation algorithm.
14:00:09 <CakeProphet> I was thinking I could also keep track of character position.
14:00:20 <CakeProphet> but that would increase the likelihood of constructing existing words
14:00:51 <fizzie> Anything you do to make it produce strings that are more similar to existing words will by definition make it more likely to construct existing words.
14:01:07 <CakeProphet> yeah so it's not necessarily a bad thing.
14:01:17 <CakeProphet> just need to find the right balance.
14:02:26 <CakeProphet> oh wait... I think english 1 million IS the small dataset.
14:02:44 <CakeProphet> english fiction might be smaller.
14:02:50 <CakeProphet> and english all is certainly larger.
14:03:53 <Phantom_Hoover> "The Humane Society of the United States and other animal welfare groups denounced the cloning, saying that the $50,000 could have been better used to save some of the millions of animals euthanized each year." — http://en.wikipedia.org/wiki/Little_Nicky_(cat)
14:04:12 <Phantom_Hoover> Ahahahahaha.
14:06:10 <ais523> how many animals could be saved from euthanization for $50,000? around 5? (that's a guess)
14:06:53 <Phantom_Hoover> XD
14:15:11 -!- copumpkin has quit (Quit: Computer has gone to sleep.).
14:15:48 <CakeProphet> `wacro 20
14:15:50 <HackEgo> pois vagum verdiaviek pingsteranaxicabddown cant sichyrod ski curnieischarison gankofx ple bulonstend pyrchamricannourgroobice ge gorden licandong scipellarpotemuss weltergiatorfe spia be parah
14:32:53 <CakeProphet> `wacro 10
14:32:55 <HackEgo> qrioste phing ja taniz terfu de bioscpudeffong saues fly itchiperoactrimendubadommititodys
14:36:32 <CakeProphet> fizzie: using 4-grams and 5-grams would be another of those changes that make it more similar to the original data set, yes?
14:42:45 -!- MSleep has changed nick to MDude.
14:44:06 -!- copumpkin has joined.
14:58:29 <CakeProphet> !perl @t=(); $t[1]++; print @test;
14:58:44 <ais523> 1
14:58:56 <ais523> (i.e. join "", ("", 1))
14:58:56 <CakeProphet> !perl @t=(); $t[1]++; print @t;
14:58:56 <EgoBot> 1
14:59:24 <ais523> !perl $"='/'; @t=(); $t[1]++; print "@t";
14:59:24 <EgoBot> ​/1
14:59:32 <CakeProphet> !perl @t=(); $t[2]++;$[1]++; print @t;
14:59:33 <EgoBot> Number found where operator expected at /tmp/input.16866 line 1, near "$[1"
14:59:41 <CakeProphet> !perl @t=(); $t[2]++;$t[1]++; print @t;
14:59:41 <EgoBot> 11
14:59:45 <CakeProphet> cool
15:00:10 <ais523> !perl @t=(); $t[1]->{bar}++; print @t;
15:00:10 <EgoBot> HASH(0x7f85764caf40)
15:00:29 <CakeProphet> !perl print length "test" - 1
15:00:29 <EgoBot> 2
15:00:44 <CakeProphet> ..?
15:00:47 <CakeProphet> !perl print length "testt" - 1
15:00:47 <EgoBot> 2
15:00:54 <ais523> !perl print length -1
15:00:54 <EgoBot> 2
15:00:58 <CakeProphet> !perl print (length "testt" - 1)
15:00:59 <EgoBot> 2
15:01:04 <CakeProphet> !perl print (length ("testt") - 1)
15:01:05 <EgoBot> 4
15:01:12 <CakeProphet> ah okay.
15:01:17 <ais523> !perl $\="|"; print length (-1)
15:01:18 <EgoBot> 2|
15:01:26 <ais523> "test"-1 = -1
15:01:34 <ais523> and then that has a length of 2, interpreted as a string
15:01:41 <CakeProphet> right
15:04:30 -!- myndzi has quit (Ping timeout: 258 seconds).
15:09:19 <Deewiant> "Say what you will about D, the compiler is very well implemented." --proggit
15:11:50 <CakeProphet> huh for some reasoning importing the English all hash table hangs.
15:12:38 <CakeProphet> it's exactly the same but with larger numbers..
15:13:39 <Phantom_Hoover> Deewiant, lemme guess, D's compiler is a sterling example of how not to implement a compiler?
15:13:39 -!- Ngevd has joined.
15:13:53 <Ngevd> Greetings!
15:14:01 <CakeProphet> fizzie: hlep
15:14:54 <Deewiant> Phantom_Hoover: I don't know about that but pretty much my only real problem with D was the amount of compiler bugs I kept running into
15:21:49 <Ngevd> I would like to learn Intercal
15:22:10 <ais523> hmm, I'm not convinced it's that hard to learn, although it could take a bit of effort and practice
15:22:13 <ais523> how much do you know already?
15:22:19 <Ngevd> Almost none
15:22:23 <Ngevd> I know it exists
15:22:34 <ais523> do you have a working compiler/interpreter? that'd be the first step
15:23:06 <Ngevd> No
15:23:18 <Ngevd> Any reccomendations?
15:23:21 <ais523> OK, I recommend you download C-INTERCAL from http://c.intercal.org.uk/
15:23:34 <ais523> it's a bit easier to get started with than CLC-INTERCAL
15:24:11 <ais523> you'll need to compile it yourself, but a #esoteric denizen should be able to manage that
15:24:30 <CakeProphet> help what is compile.
15:24:47 <CakeProphet> is that kind of like "build solution" in Visual Studio?
15:25:05 <ais523> CakeProphet: a bit, although less specific
15:25:22 <ais523> Ngevd: the build system for POSIXy systems is very good, I know because I spent years designing it
15:25:37 <ais523> if you're on Windows, the only supported build method is via DJGPP, but I guess Cygwin's likely to work too, and maybe even msysgit
15:25:49 <Ngevd> I would also like a quicker internet connection
15:26:22 <Ngevd> Or at least a more accurate ticker thingy
15:26:42 <Ngevd> This would be better if I switched OS, brb
15:26:46 -!- Ngevd has quit (Read error: Connection reset by peer).
15:28:59 <CakeProphet> `wacro 20
15:29:01 <HackEgo> avln jneg nought stargea ald manarlyl cougesspulownits tionv le palake plant barrtjutiendosseuacturuntien sposchs hiyl moin us irudefcts borphavastrvath per raniuhrousatopispatica
15:29:16 <CakeProphet> cougesspulownits....
15:31:53 <CakeProphet> `wacro 20
15:31:55 <HackEgo> gotai quekhajudalibadd lium ung ravinfusis sumse icha ol men aphei sanesum joffeene bekil santhem sed ee se pultiogicolkseistene lug metheric
15:32:12 -!- Ngevd has joined.
15:32:16 -!- Zuu has joined.
15:32:16 -!- Zuu has quit (Changing host).
15:32:16 -!- Zuu has joined.
15:32:29 <CakeProphet> `wacro 50
15:32:29 <Ngevd> Right, not on windows anymore
15:32:31 <HackEgo> di equan prigomatersore ein hourgoold hial ba gly coms kneundemplefl ablurke auly gluic tur ingamiddifluciumites but oene ousconiciorn antheratis anceiss perrestalacccaliy rampellubtb con pfuunerabstin bally ing amor hiotforrierothoposonrreaenimendic cnnaktosatingenstobjudindes ecumarnalerlang mychtryprettitic bruy bilk gesorici
15:32:37 <CakeProphet> Ngevd: windows is for chumps
15:33:06 <ais523> yep, I admit that I did a couple of years of C-INTERCAL development on Windows so I know it's possible, but I wouldn't recommend it
15:33:19 <ais523> I never got CLC-INTERCAL working there
15:33:22 <CakeProphet> so how are you guys? What's ablurke?
15:33:43 <Ngevd> Windows is for people who don't really want to change their computer that much from when they bought it
15:33:46 <Ngevd> So yeah, chumps
15:34:56 <CakeProphet> I'm feeling pretty bally myself. Might go bilk some ingamiddifluciumites.
15:35:15 <ais523> Ngevd: I recommend using an out-of-tree build (create a directory to do the build in, and a directory to install into (unless you want to use /usr/local for that), then run configure with the current directory as the build directory and --prefix the directory to install into)
15:36:00 <ais523> here's far too much documentation on how the install works: http://c.intercal.org.uk/manual/adquqjam.htm#Installation
15:36:21 <ais523> also a bit outdated
15:37:39 <CakeProphet> `wacro 50
15:37:41 <HackEgo> meve padly protonftus derattagercheraulon mah peurgenced it costes muills eo cs lnts preflevultieglispacidquader mea ner sarbosan coted cousnnent lami chlt remmon lantorubalhstawne haver jfc gosinere bognos driad mine haudigu osantcholo gu mendesterioneurslabis batia volcitoratimurffindont bimantivenduppeappos derievies pla
15:39:06 <CakeProphet> >____>
15:39:32 <ais523> Ngevd: how's it going?
15:42:00 -!- Wamanuz2 has quit (Read error: Connection reset by peer).
15:42:33 -!- Ngevd has quit (Ping timeout: 256 seconds).
15:44:16 -!- Wamanuz has joined.
15:45:09 -!- Ngevd has joined.
15:45:42 <ais523> wb Ngevd
15:45:43 <Ngevd> sh: Can't open config.sh
15:45:52 <ais523> why are you trying to do the DOS build?
15:45:59 <Ngevd> I wasn't
15:46:05 <ais523> ah, that may be what went wrong
15:46:13 <Ngevd> I'm on ubuntu?
15:46:17 <ais523> create a new directory parallel to the unpacked tarball
15:46:40 <ais523> then do ../intercal-whatever-it-is/configure --prefix='/home/ngevd/wherever/you/want/to/put/it'
15:46:56 <ais523> not literally, substitute the obvious metasyntactic variables
15:48:11 <ais523> is the configure working?
15:48:44 <Ngevd> I've got a different thingy at the left of the terminal where I type in thing
15:48:57 <Ngevd> It's a > now
15:49:23 <ais523> you didn't match the quotes properly
15:49:28 <ais523> control-C out of it, and try again with the quotes matching
15:49:36 <ais523> that's bash's reaction to seeing an unmatched ' in a command line
15:49:44 <Ngevd> Got it
15:50:11 <Ngevd> Now do I make?
15:50:16 <ais523> if the configure worked, yes
15:50:30 <ais523> check to make sure there were no scary-looking messages
15:50:39 -!- Jafet has joined.
15:50:59 <Ngevd> Okay, I think it's done
15:51:19 <ais523> that quickly? did it end in an error message or success message?
15:51:29 <ais523> you can use make check to run regression tests, that'll tell you if it built correctly
15:52:59 <ais523> and once that's done, make install, which'll install it at the prefix you gave
15:53:11 <ais523> (you need root perms to install in /usr/local, but not to install in /home/ngevd)
15:53:27 <Ngevd> Tests complete
15:53:30 <Ngevd> Going to walk dog
15:53:40 <ais523> fair enough
15:53:40 -!- Ngevd has changed nick to Taneb|Hovercraft.
15:58:10 -!- monqy has joined.
15:58:25 -!- Taneb|Hovercraft has quit (Ping timeout: 256 seconds).
15:59:54 <Phantom_Hoover> Help
16:00:11 <Phantom_Hoover> I seem to have fallen into a pit of procrastination so deep I can't see light.
16:00:26 <ais523> Phantom_Hoover: do you have work you actually need to be getting on with?
16:03:43 <Phantom_Hoover> ais523, yes, but no more than normal.
16:04:06 <ais523> the ability to procrastinate will still be there once you've done it, you know
16:04:16 <ais523> unless you leave it until the last moment, then it'll defeat your ability to procrastinate
16:04:28 <ais523> what I'm saying it, why are you procrastinating now, when you could be procrastinating later instead?
16:04:38 <ais523> you should procrastinate the procrastination
16:05:26 <Phantom_Hoover> Metaprocrastinate.
16:05:40 <ais523> indeed
16:05:57 <monqy> don't listen to him; procrastinate the procrastination procrastination.
16:06:44 <CakeProphet> pretty soon I'll have command line options for different data sets.
16:06:45 <Phantom_Hoover> I can't be bothered to decide which suggestion to follow; I'll decide later.
16:16:27 <fizzie> If you're dumping that stuff into files, at least at that point I'd use Storable; I believe it's faster in loading hashes than Data::Dumper + Perl parsing. (Well, at least it really ought to be.)
16:19:28 <CakeProphet> we'll see.
16:20:14 <CakeProphet> !perl print each undef
16:20:14 <EgoBot> Type of arg 1 to each must be hash (not undef operator) at /tmp/input.23812 line 1, at EOF
16:20:22 <CakeProphet> alas
16:20:48 <ais523> what made you think that undef would be a reasonable argument to each?
16:21:04 <CakeProphet> undef being a reasonable argument in many other places. :P
16:21:20 <ais523> I don't think each undef has any reasonable semantics at all
16:21:26 <CakeProphet> it was more of an experiment to see.
16:21:45 <CakeProphet> !perl print (print "hello")
16:21:45 <EgoBot> hello1
16:23:32 <CakeProphet> undef has reasonable semantics: undef begats more undef.
16:24:32 <fizzie> ais523: Perl 5.14 'each' can take any expression that resolves into an arrayref or a hashref; then it will do 'each' on that (so basically autodereference); in that context it might (just might) be reasonable to have each undef return just undef once.
16:24:56 <ais523> you mean, interpreting undef as {undef,undef}?
16:25:01 <ais523> or as [undef]?
16:25:09 <CakeProphet> (undef, undef) I think
16:25:12 <CakeProphet> would make the most sense.
16:25:17 <CakeProphet> or rather
16:25:18 <ais523> in which case I expect the return value would be (0,undef)
16:25:22 <CakeProphet> that's what each undef would return
16:25:33 <CakeProphet> oh.
16:25:41 <fizzie> Well, or just [].
16:25:49 <CakeProphet> [] isn't a false value though.
16:25:55 <ais523> ouch, I don't think undef should be interpreted as []
16:25:57 <CakeProphet> but neither is (undef, undef)
16:26:03 <ais523> it's the absence of an array, not an empty array
16:26:16 <CakeProphet> ah no [] makes sense.
16:26:28 <CakeProphet> depending on what you want to happen of course.
16:26:33 <fizzie> $ perl -e 'while (each undef) { print "x"; }'
16:26:33 <fizzie> Type of argument to each on reference must be unblessed hashref or arrayref at -e line 1.
16:26:43 <CakeProphet> not 5.14
16:26:44 <fizzie> That's what 5.14 does for it.
16:26:46 <CakeProphet> oh
16:27:02 * CakeProphet is tired. he might say things that make no sense.
16:27:10 <CakeProphet> be warned.
16:27:48 <Phantom_Hoover> So no different to when you're awake?
16:27:55 <CakeProphet> autovification is a little less conservative than the docs suggest.
16:28:16 <CakeProphet> is it safe to assume that in most circumstances I can not worry about data structures not existing when I dereference/append to them?
16:28:58 -!- yorick has joined.
16:29:10 <CakeProphet> $grams{$key}->{$c} += $v
16:29:15 <ais523> autovifification happens when you try to dereference-slice a nonexistent slice
16:29:20 <CakeProphet> if %grams is empty, will this code work correctly?
16:29:44 <ais523> yep; $key there is a nonexistent slice of %grams, and you're using ->{} to dereference-slice it
16:29:58 <CakeProphet> but then will it treat an empty key as 0 for the purposes of +=?
16:30:01 <ais523> so it becomes equivalent to ($grams{$key} //= {})->{$c} += $v
16:30:15 <ais523> then += will get undef as its argument,
16:30:23 <ais523> and undef + $v = $v and a warning
16:30:30 <CakeProphet> ah okay.
16:31:22 <CakeProphet> I guess I could throw in a //= 0 there to remove the warning.
16:31:42 <CakeProphet> I think...
16:31:51 <ais523> it'd be great if you could just do +//= $v
16:31:53 <ais523> but you can't
16:31:56 <CakeProphet> bahaha
16:32:04 <CakeProphet> that's so awful looking.
16:32:22 <ais523> (I think it's possible to define that in Perl 6, even a general // suffix to operators that makes them autovivify arguments before using them)
16:33:08 <CakeProphet> but yeah essentially the purpose of this code is to merge the datasets together at runtime.
16:33:28 <CakeProphet> for(keys %opts) {
16:33:29 <CakeProphet> next unless exists($data->{$_});
16:33:29 <CakeProphet> while( my ($key, $subhash) = each %{$data->{$_}} ) {
16:33:29 <CakeProphet> while(my ($c, $v) = each %$subhash) {
16:33:29 <CakeProphet> ($grams{$key}->{$c} //= 0) += $v;
16:33:31 <CakeProphet> }
16:33:33 <CakeProphet> }
16:34:39 <CakeProphet> should work I think. I guess I'll find out.
16:35:07 <CakeProphet> Phantom_Hoover: yeah I never make sense ever. This sentence makes no sense.
16:35:24 <CakeProphet> `wacro 50
16:35:24 <Phantom_Hoover> Correct.
16:35:26 <HackEgo> conguerging rapracy iphemineed saturnbromel poterrhotesieerctorshaareameaboe restma aleians lo uptint scomychtopatisto vained affpenwetecnutcjus conlus sers warast batushkeliond larts dic deurritalle zuste lathrt multer frokshaiterthamhepin banin ad burnmiciang manchherlastioncidat immione proopiattabletagnrype kilfs mis ki
16:36:34 <monqy> big words
16:36:45 <CakeProphet> monqy: yes I'm currently fixing that.
16:37:02 <CakeProphet> so that it produces fewer of those.
16:37:43 <fizzie> "$foo +//= ($a, $b)" to specify a non-zero initial value, and "$foo //+= ($b, $a)" as an equivalent.
16:38:19 <ais523> I was thinking more along the lines that $a op// $b = $a op $b if $a was defined, or $b otherwise
16:38:20 <CakeProphet> that's so terrible even for perl.
16:41:24 <CakeProphet> `wacro -1
16:41:26 <HackEgo> No output.
16:41:30 <CakeProphet> `wacro 0
16:41:32 <HackEgo> kle
16:41:35 <CakeProphet> `wacro 5
16:41:37 <HackEgo> gravias remafeciorle lia of mones
16:41:45 <CakeProphet> lia of mones
16:43:12 <CakeProphet> fizzie: perhaps naively combining the datasets in this way will skew the results without interpolation? perhaps it won't matter?
16:45:11 <CakeProphet> I'm going to go with "don't care" and see what happens.
16:46:50 -!- Taneb|Hovercraft has joined.
16:46:50 <fizzie> Perhaps it won't matter, though of course then smaller datasets will have a relatively smaller weight in the results.
16:46:53 -!- Taneb|Hovercraft has changed nick to Ngevd.
16:47:09 <CakeProphet> fizzie: right
16:47:14 <CakeProphet> I'm fine with this, really.
16:47:39 <Ngevd> Hello again
16:48:10 <CakeProphet> the english dataset is already a mixture of several other language influences...
16:48:28 <CakeProphet> I'm thinking English fiction will be closer to "regular" English, whatever that means.
16:50:14 <Ngevd> Now to learn INTERCAL
16:50:20 <ais523> wb
16:50:34 <ais523> the first thing to check is to make sure you can run the compiler
16:51:03 <Ngevd> Is there a sanity test?
16:51:09 <ais523> you can run it from any directory if it's not on the path; it should be able to figure out the location of its data files by looking at argv[0] to figure out where it is relative to the current directory
16:51:18 <ais523> you can try something like a very short program ("DO GIVE UP")
16:51:29 <ais523> or an even shorter program that errors out ("DO ERROR OUT" or whatever)
16:51:36 <CakeProphet> I imagine combining a /usr/share/dict with a google dataset will bear no significant chages to the google dataset.
16:51:47 <CakeProphet> without interpolating.
16:52:37 <fizzie> Probably, though of course you can just add a scale factor when combining.
16:52:37 <ais523> INTERCAL files have extension .i
16:52:43 <ais523> the compiler actually enforces this
16:54:29 <CakeProphet> also if there are overlapping words in two datasets that means they'll get counted twice.
16:55:07 <CakeProphet> but, I like to generate words dangerously. so I'll ignore that.
16:56:12 <fizzie> The trigrams of duplicate words get counted twice, but that's probably what you'd want, anyway: having the thing in both should make it more likely than just having it in one.
16:56:32 <CakeProphet> I suppose so.
16:57:27 <Ngevd> Both do nothing
16:58:00 <Ngevd> No wait, it works
16:58:18 <Ngevd> ...Now to learn INTERCAL?
16:58:18 <CakeProphet> also I just noticed that if a word is found within multiple files of the same dataset then it gets counted multiple times.
16:58:21 <CakeProphet> just fixed that.
16:58:28 <ais523> Ngevd: did you get an error message from DO ERROR OUT?
16:58:44 -!- elliott has joined.
16:58:49 <ais523> hi, elliott!
16:58:56 <elliott> hi
16:58:57 <ais523> I'm about to try to teach Ngevd some INTERCAL over IRC
16:59:00 <ais523> do you want to join in?
16:59:02 <fizzie> (A: way.)
16:59:22 <elliott> ais523: hmm, I'll listen, but this isn't the best time for me to concentrate intently and respond :)
16:59:26 <ais523> fair enough
16:59:32 <ais523> you can read the logs, I suppose
16:59:49 <ais523> Ngevd: it's probably best off to start with the syntax, or you won't be able to get anything done
17:00:07 <ais523> some languages have statement separators (like ; in ALGOL), some have statement terminators (like ; in C), INTERCAL has a statement introducer
17:00:26 <Ngevd> ais523, Yes I did
17:00:29 <CakeProphet> like TI-BASIC
17:00:36 <CakeProphet> has a statement introducer.
17:00:42 <ais523> to be precise, all statements start DO, PLEASE, or PLEASE DO (and in backtracking INTERCAL, there are also variants involving MAYBE, like MAYBE DO, MAYBE PLEASE, and plain MAYBE)
17:00:50 <Ngevd> *it
17:00:56 <Ngevd> **I
17:01:03 <Ngevd> Crazy
17:01:14 <ais523> "polite" statements (ones starting PLEASE) need to make up approximately 1/4 of a program (the compiler enforces this); otherwise, they're identical to the impolite equivalents
17:01:19 <Ngevd> Yeah, I'm a bit laggy
17:01:44 <ais523> so some programmers just put PLEASE on every fourth line, some use editors that add PLEASE at random on 1 in 4 lines (I do that sometimes), some look for places where the PLEASEs are most aesthetic
17:01:44 <CakeProphet> fizzie: one annoyance with my chosen data format is that in order to add new datasets I either need to change my script to make that possible or re-generate every dataset.
17:01:56 <ais523> it's really just a distraction, but you need to know about it for your programs to compile
17:02:10 <ais523> before a DO, you can add a line number, which is an integer in parens
17:02:14 <ais523> e.g. (1) DO NOTHING
17:02:41 <ais523> (and likewise before other statement introducers; they're called statement identifiers officially, but that's just to confuse people)
17:02:41 <Ngevd> The PLEASEs confused me, because I was thinking interpretedly
17:02:48 <ais523> it's a compiled language
17:02:56 <ais523> well, obviously intended to be one
17:03:06 <ais523> there are INTERCAL interps around, but they generally have to bend the rules of the language somewhat to get it to work
17:03:08 <CakeProphet> imagine if the PLEASE was a runtime thing...
17:03:16 <ais523> ouch!
17:03:20 <CakeProphet> debugging would be fun.
17:03:24 <ais523> it'd make tight loops basically impossible to write
17:03:39 <ais523> oh, it should be noted that many errors which are compile-time in basically every language, are run-time in INTERCAL
17:04:23 <CakeProphet> `wacro 20
17:04:25 <HackEgo> whic elmis khenlrymctia songrans lus elv llyns dia hardertyders alemsonix hurioncollem varche re toge ses turiaton analforcuetatciphlerick jacafrabiugold pulpers di
17:04:37 <Ngevd> For example?
17:04:37 <ais523> most notably, syntax errors happen at runtime
17:04:48 <ais523> that's what was up with the DO ERROR OUT statement
17:04:48 <Ngevd> How Intercalian
17:04:56 <ais523> it's a syntax error, but it didn't error until it ran
17:05:01 <ais523> and the error message for a syntax error is the statement itself
17:05:37 <ais523> (according to Google, using this to produce error messages is a bit ugly, but if the practice weren't allowed, INTERCAL programs wouldn't have any error handling at all as doing it the proper way is such a pain)
17:06:53 <ais523> each statement in an INTERCAL program has a boolean (actually a nonnegative integer nowadays, but it's used like a boolean) attached
17:07:06 <ais523> that specifies whether it's executed or skipped
17:07:29 <ais523> so, e.g., DO GIVE UP is an exit command that's executed when encountered
17:07:29 <Vorpal> ais523, according to Google?
17:07:33 <Vorpal> what
17:07:39 <ais523> Vorpal: they have an INTERCAL style guide
17:07:43 <Vorpal> oh right
17:07:44 <ais523> just like they have style guides for many other languages
17:07:45 <Vorpal> that joke
17:07:52 <coppro> ais523: isn't GIVE UP un-abstainable?
17:07:55 <ais523> and the opposite is DON'T GIVE UP, which is an exit command that isn't executed when encountered
17:08:01 <Vorpal> ais523, got a link to the intercal style guide?
17:08:03 <ais523> coppro: there have been fun arguments on the mailing list about that
17:08:32 <ais523> Vorpal: http://cadie.googlecode.com/svn/trunk/INTERCAL-style-guide.html
17:08:34 <Vorpal> why would GIVE UP be unabstainable?
17:08:36 <coppro> "If you're looking for an introduction to using INTERCAL, you've come to the wrong place. This should come as no surprise. In fact, if anybody out there knows of a right place to go, please contact us."
17:08:55 -!- copumpkin has quit (Ping timeout: 255 seconds).
17:09:11 <ais523> anyway, to please Vorpal/coppro, there is absolutely no restriction on starting GIVE UP abstained / unabstained
17:09:16 <ais523> the issues are in changing the flag dynamically
17:09:28 <Vorpal> ah
17:09:33 <Vorpal> why would that be an issue?
17:09:41 <ais523> there is also no reason why you /shouldn't/ be able to change the flag dynamically; you just can't (except in one corner case)
17:09:53 <ais523> to make the language less orthogonal for no good reason, I think
17:09:57 <Vorpal> ah
17:10:18 <ais523> Ngevd: sorry about the interruption
17:10:30 <Ngevd> 'Tis okay
17:10:36 <ais523> do you get what's happening so far? you can write a command, or you can write a negative (abstained) version that doesn't execute
17:10:52 <ais523> so, e.g. DO HING is a syntax error
17:11:03 <elliott> ais523: this appears to have fallen into the trap most IRC teaching does
17:11:06 <ais523> and DO NOT HING is also a syntax error, but one that doesn't execute, and thus doesn't error
17:11:10 <ais523> elliott: which is people interrupting?
17:11:16 <elliott> ais523: yep :P
17:11:32 <Ngevd> I have a tendency to make things on topic all of a sudden
17:11:34 <CakeProphet> !sfeedeesh my my this is some delicious swedish fish
17:11:42 <CakeProphet> :(
17:11:45 <ais523> INTERCAL is mostly (possibly entirely) non-whitespace-insensitive, so you can write DO NOTHING and get a command that doesn't error out, and doesn't do anything else either
17:11:47 -!- copumpkin has joined.
17:11:49 <ais523> I'm not entirely sure if that's coincidence or not
17:12:15 <Ngevd> Can you right DONOT HI NG?
17:12:15 <ais523> this is also the usual way to write comments; "PLEASE NOTE that this is a comment", or whatever
17:12:30 <ais523> yep
17:12:31 <CakeProphet> !sfedeesh my my this is some delicious swedish fish
17:12:32 <EgoBot> my my zeees is suume-a-a-a deleeceeuuoooos sffedeesh feesh
17:12:43 <ais523> there's a split in the community as to whether D ONOT HING or whatever should be allowed
17:12:48 <monqy> CakeProphet: intercal at its finest
17:12:50 <ais523> sorear thinks it should be, according to the spec
17:12:53 <ais523> but actual compilers don't accept it
17:13:05 <ais523> so it's probably best not to insert whitespace inside keywords
17:13:09 <Ngevd> Okay
17:13:16 <ais523> especially as most people think that violates the spec
17:13:27 <ais523> (only in INTERCAL would people even consider that that was legal...)
17:14:03 <Ngevd> Inserting whitespace in the middle of Whitespace commands is probably very dangerous
17:14:06 <CakeProphet> Ngevd: as you can see INTERCAL is a hotbed of debate among people with nothing better to do.
17:14:18 <ais523> there are a few other miscellaneous bits of syntax, but they're not really important to start out with
17:14:26 <coppro> "The third example, however, is valid, despite the appearance of two cases
17:14:26 <coppro> of D-space-O, since INTERCAL does not ignore extraneous spaces in statement
17:14:27 <coppro> identifiers."
17:14:28 <ais523> (like randomly-executing commands, PLEASE %50 GIVE UP)
17:14:36 <Vorpal> ais523, idea: intercal preprocessor/linker! it could for example dynamically allocate line numbers
17:14:38 <ais523> coppro: ah, right
17:14:43 <ais523> I think the argument was about keywords like GIVE
17:14:50 <ais523> Vorpal: it'd even be useful
17:14:53 <Vorpal> ais523, yes
17:15:12 <coppro> ais523: it seems reasonably clear that the statment "INTERCAL does not ignore extraneous spaces in statement identifiers" refers to all statements
17:15:21 <ais523> "statement identifier" specifically means DO/PLEASE/MAYBE
17:15:33 <coppro> oh
17:16:00 <coppro> in that case, I'd have to go with DOGI V EUP ending the program
17:16:10 <coppro> based on the end of 4.1
17:16:18 <Ngevd> Should I just go through the manual on c.intercal.org.uk?
17:16:24 <coppro> http://www.muppetlabs.com/~breadbox/intercal/intercal.txt
17:16:30 <ais523> Ngevd: it's decent as reference material, but not really as a tutorial
17:16:36 <CakeProphet> `wacro 50
17:16:38 <HackEgo> rical esquingliallst atubbak piar hiarae lies olandspous iustreptemphificansilowir lan quiseles ashoco proter fh jlerwicarm adridit misious oouverciigra foa einis saini girapperisch wad bussip con gn partundidinatiogeres uvillatibeft optory heias woramlaed on hercur icat ind bale wyad inder th boung ezziantias inat giansumbyerst
17:16:39 <CakeProphet> and now I go to sleep. good night.
17:16:47 <Ngevd> How about coppro's link?
17:16:48 <ais523> the original manual isn't really decent as either, it's mostly written for amusement value
17:16:48 <coppro> I love that comments degrade performance in INTERCAL
17:16:52 <elliott> ais523: why is D ONOT HING not accepted?
17:16:56 <ais523> coppro's link is to the original manual, I think
17:17:02 <coppro> elliott: it has a space in the statement identifier
17:17:06 <ais523> elliott: see coppro's paste from the original manual ("INTERCAL-72 standard")
17:17:27 <elliott> ais523: that tells me why it's valid
17:17:27 <ais523> there's also the whole argument about whether DOREADOUT should parse as DO READ OUT or DO REA DO UT
17:17:29 <elliott> not why it's not accepted
17:17:33 <elliott> :P
17:17:37 <elliott> but ok, because of DO
17:18:01 <ais523> Ngevd: now, there are two major components to INTERCAL: statements and expressions
17:18:16 <ais523> they're pretty much unrelated things to learn, and don't interact much
17:18:22 <elliott> oh no, my new DNS commits fraud
17:18:28 <ais523> what sort of fraud?
17:18:30 <Ngevd> Statements and expression
17:18:41 <elliott> ais523: telling me that non-existent domains point to a server they own
17:18:45 <coppro> I need to get a daisy whell printer
17:18:46 <ais523> the link is the "calculate" statement, written as DO variable <- expression
17:18:49 <ais523> elliott: ouch, no opt-out?
17:18:50 <coppro> so that I can V <backspace> -
17:18:50 <monqy> mine does this fraud too
17:18:52 <monqy> i hate it
17:18:58 <coppro> 8.8.8.8
17:18:59 <elliott> ais523: maybe there is, but fuck it, I'll just use Google Public DNS
17:19:07 <elliott> coppro: did badly on my namebench tests
17:19:16 <monqy> i tried opting out and also google public dns and it worked for like an hour but then something died
17:19:26 <Vorpal> elliott, local dns server seems to work fine for me
17:19:51 <ais523> Ngevd: it's probably best to start off with outputting numbers (outputting strings is really hard in INTERCAL, to the extent that people typically use program-generators to generate programs that print even constant strings)
17:20:02 <elliott> coppro: I like the part where you told people to use the Google DNS without telling them anything about it or who was behind it
17:20:11 <ais523> the commands for output and input are READ OUT and WRITE IN respectively (make sure you get that the right way round)
17:20:18 <ais523> I think I use 4.2.2.1
17:20:22 <ais523> which is Level3's
17:20:26 <Ngevd> Okay, so no strings
17:20:32 -!- elliott has quit (Read error: Connection reset by peer).
17:20:40 -!- elliott has joined.
17:20:50 <elliott> there we go
17:20:53 <Ngevd> ais523, read out and write in are actually weirdly logical seeming to me
17:21:00 <elliott> ais523: isn't that verizon's?
17:21:01 <ais523> indeed, they're just different
17:21:14 <ais523> hmm, perhaps I have the wrong company, but I don't think verizon have a public DNS
17:21:23 <elliott> yes, they do
17:21:31 <elliott> it's something beginning with four
17:21:34 <elliott> well, I think so anyway
17:21:42 <elliott> (with all one-digit components)
17:21:58 <ais523> there are five types of variables; variables have a sigil showing what type they are, and a name, which is just a decimal number from 1 to 65535 inclusive
17:21:59 <Ngevd> brb, dinner
17:22:00 -!- Ngevd has quit (Quit: Leaving).
17:22:11 <ais523> hmm, I'm never going to get anywhere at this rate
17:22:18 <ais523> especially as I want to eat dinner and go home myself soon
17:22:21 <elliott> I predicted this from the beginning
17:22:29 <elliott> I decided not to say so to avoid jinxing the process
17:22:33 <ais523> heh
17:22:45 <ais523> just due to IRC teaching in general? or Ngevd in particular?
17:23:12 <monqy> intercaL?
17:23:16 <elliott> both :P
17:23:26 <ais523> IRC teaching normally goes quite well IME
17:23:41 <ais523> and I'd like to think that even if I was teaching Taneb here, he'd just randomly leave in the middle of a tutorial
17:23:55 <ais523> then come back three hours later when the room was being used for something entirely unrelated
17:24:15 <elliott> Taneb is Ngevd
17:24:19 <elliott> or, maybe you knew that
17:24:38 <ais523> yep, I did, the two are conflated in my mind
17:24:44 <ais523> so I used the wrong name by mistake
17:24:51 <ais523> I don't think I've accidentally called you ehird for a while
17:24:56 <ais523> but it's still the name I mostly use internally to think about you
17:24:58 <ais523> so it's possible
17:25:10 <ais523> hmm, is there any way I can do `pastelogs ehird sanely?
17:25:16 <ais523> in particular, I only want the last 50 or so occurrences
17:25:34 <elliott> it shows the first three hundred
17:25:44 <ais523> yep, and I want the tail not the head
17:25:46 <elliott> but you can manually simulate it:
17:25:49 <elliott> (but without dates)
17:26:21 <elliott> `run grep -i 'ehird' /var/irclogs/_esoteric/201?-??-??.txt | tail -n 300 | paste
17:26:32 <HackEgo> http://codu.org/projects/hackbot/fshg/index.cgi/raw-file/tip/paste/paste.20754
17:26:39 <ais523> heh, my mind just went "unmatched `" then
17:26:48 <ais523> I was expecting to match it with another `, so I guess I was thinking sh/bash
17:27:20 <elliott> oh, it included the dates
17:27:35 <ais523> hmm, most mentions of "ehird" are people quoting things you said ages ago
17:27:54 <ais523> !ehird
17:28:05 <monqy> what's optbot
17:28:16 <ais523> a bot that spouted back random lines from the past when its name was mentioned
17:28:18 <ais523> `log
17:28:20 <HackEgo> 2004-02-22.txt:06:50:25: -!- cmeme has quit (kornbluth.freenode.net irc.freenode.net).
17:28:21 <elliott> monqy: the best bot
17:28:25 <ais523> `log
17:28:26 <elliott> ais523: it also set the topic
17:28:27 <HackEgo> 2006-01-10.txt:22:40:03: <calamari> hi
17:28:29 <ais523> like that
17:28:37 <ais523> except without usernames, I think, or with names changed
17:28:41 <Phantom_Hoover> `log
17:28:43 <HackEgo> 2008-10-19.txt:10:04:31: <Mony> plop
17:28:48 <Vorpal> ais523, what is "Setting .5 to #2/#3 instead of #1/#2" about?
17:28:56 <ais523> Vorpal: a pessimization that I personally hate
17:29:05 <ais523> in fact, I prefer #0/#1 to #2/#3
17:29:08 <Vorpal> ais523, err, what does it do though
17:29:09 <monqy> `log optbot
17:29:10 <ais523> and sometimes even to #1/#2
17:29:14 <ais523> Vorpal: it's just convention
17:29:24 <HackEgo> 2011-03-13.txt:19:30:22: <optbot> Gregor: is that like /usr/local?
17:29:24 <ais523> by convention, .5 is used for error returns
17:29:27 <Vorpal> yes
17:29:34 <Vorpal> and what is #1/#2=
17:29:38 <ais523> the debate is about what values should be used for error/no error
17:29:43 <Phantom_Hoover> monqy, elliott also had a huge strop when he was told to make it stop changing the topic but we don't talk about that.
17:29:44 <ais523> conventionally, IIRC it's #2 for error, #1 for no error
17:29:49 <Vorpal> ah
17:29:52 <elliott> Phantom_Hoover: That was the second time around.
17:30:05 <Vorpal> ais523, and why would #2/#3 be preferred?
17:30:09 <ais523> using #3 for error is an utter abomination
17:30:10 <elliott> optbot had been around for months in the past, you just started whining when it was revived.
17:30:11 <Vorpal> I don't understand that
17:30:18 <ais523> basically, all it does is saves a couple of characters in the error-handling code
17:30:26 <Vorpal> I see
17:30:32 <Vorpal> ais523, you said it was a pessimization above, not just a convention?
17:30:37 <ais523> as it's easier to set one bit (the ones bit) than two bits (the ones bit and the twos bit)
17:30:59 <ais523> it's a pessimization, because the way you actually use these values is via NEXT/NEXT/RESUME or NEXT/NEXT/NEXT/RESUME
17:31:10 <Vorpal> I see
17:31:21 <ais523> so in the case of #2/#3, you need an extra NEXT for no reason at all
17:31:25 <Vorpal> ais523, and what about #0/#1?
17:31:30 <Vorpal> is that one NEXT less?
17:31:38 <ais523> that works better with using computed COME FROM rather than NEXT
17:31:42 <Vorpal> ah
17:31:59 <ais523> with NEXT-based control, you can write it as NEXT/NEXT/FORGET/RESUME, but that's not really ideal
17:33:00 <ais523> but yes, #0/#1 being one bit and no extra mess on top of that makes it excellent for use in arithmetic
17:33:23 <Vorpal> heh
17:33:54 <Vorpal> ais523, what happens if two COME FROM point to the same line?
17:34:01 <ais523> then both execute, obviously
17:34:07 <Vorpal> in undefined order?
17:34:19 <ais523> (although generally compilers require you to set an option for that to actually happen, and error out otherwise)
17:34:23 <ais523> no, it goes multithreaded
17:34:26 <Vorpal> ah right
17:34:28 <ais523> so I suppose it's undefined which thread starts first
17:34:50 <ais523> COME FROM-created threads are more like processes, they share no context but abstention statuses of lines
17:35:07 <ais523> whereas WHILE-created threads share variables, making them more like actual threads
17:35:08 <elliott> ais523: If you COME FROM yourself, does that result in the creation of infinite threads?
17:35:12 <elliott> If the answer is no, I don't like you.
17:35:26 <ais523> elliott: yes if another line is also COMING FROM that line
17:35:34 <elliott> ais523: two lines are, itself and itself
17:35:35 <ais523> no if it's the only COME FROM pointing at that line, it's just an infinite loop in that case
17:35:45 <ais523> "itself and itself" is not two different lines
17:35:46 <elliott> ais523: ok what if you have
17:35:49 <elliott> (a) come from b
17:35:50 <elliott> (b) come from a
17:35:53 <elliott> WHAT THEN, SCIENCE?????????????
17:36:04 <ais523> that's just a normal infinite loop, only one COME FROM aiming at each line
17:36:14 <elliott> (a) come from b
17:36:18 <elliott> (b) come from d
17:36:19 <ais523> actually, it'd lock up all the threads in the process in older C-INTERCAL versions
17:36:21 <elliott> (c) come from a
17:36:22 <elliott> (d) come from b
17:36:22 <ais523> I think I might have fixed that
17:36:28 <elliott> WHATHAHT NOW????
17:36:38 <ais523> err, let me try to work that out
17:36:39 -!- Nisstyre has quit (Ping timeout: 260 seconds).
17:36:39 <ais523> or else, run it
17:36:42 <ais523> you could run it yourself, you know
17:36:48 <elliott> No I couldn't I'd have to use numbers.
17:36:56 <ais523> and statement identifiers
17:37:02 <ais523> oh, I see what you mean
17:37:03 <elliott> Yes exactly. But I can type those.
17:37:05 <ais523> 88, 89, 98, and 99?
17:37:13 <elliott> I don't have an eight key.
17:37:15 <elliott> 9 and 0 I can do.
17:37:21 <ais523> oh, 9, 90, 99, and 900, then
17:37:26 <Vorpal> elliott, when are you going to RMA it?
17:37:53 <elliott> Vorpal: I don't answer questions that involve silly words like RMA.
17:38:17 <Vorpal> elliott, when are you going to get it fixed?
17:38:21 <Vorpal> and why is RMA silly?
17:38:28 <ais523> elliott: I think (a) executes, then (c) executes, then (d) executes, then (b) executes, then (a) and (d) execute, then (c) and (b) execute, then (d) and (a) and (d) execute, then...
17:38:28 <elliott> Vorpal: Soon. And because the word "return" works.
17:38:35 <Vorpal> fair enough
17:38:35 <ais523> and you end up with infinite threads, as you said
17:38:41 <elliott> ais523: Is there a way to generate a countably infinite number of lines at runtime
17:38:43 <ais523> probably following the Fibonacci sequence, or a variation of it
17:38:46 <elliott> oh
17:38:47 <elliott> now that's goo
17:38:48 <elliott> d
17:38:48 <elliott> ok
17:38:50 <elliott> i'm happy now
17:38:56 <ais523> you can't generate lines at runtime, just threasd
17:38:57 <ais523> *threads
17:39:40 <ais523> elliott: the simplest way for infinite threads is just (a) do come from (a) (b) do come from (a)
17:39:52 <ais523> or the even simpler, DO COME FROM COMING FROM DO COME FROM COMING FROM
17:40:08 <Vorpal> you can do gerund come from!?
17:40:10 <elliott> ais523: Yes, but that's ugly.
17:40:10 <Vorpal> wow
17:40:17 <elliott> Because, I don't know, it feels uneven.
17:40:21 <elliott> "DO COME FROM COMING FROM DO COME FROM COMING FROM" :D
17:40:28 <ais523> Vorpal: indeed; it's generally considered a bad idea, but it's /possible/
17:40:38 <ais523> elliott: that's what I said
17:40:48 <elliott> ais523: yes, I quoted it
17:41:08 <ais523> I think C-INTERCAL needs a special command line option to allow come-from-gerund
17:41:22 <ais523> like it does with most other particularly insane parts of the language
17:42:56 <ais523> the problem with the gerund version is that you can't actually execute anything with your infinitely many threads
17:43:02 <ais523> they just get stuck round in circles, coming from things
17:43:16 <ais523> unless, I suppose, you have another thread that abstains from COMING FROM every now and then to let the threads excape
17:43:18 <ais523> *escape
17:43:55 <Vorpal> ais523, can you abstain coming from coming from?
17:44:09 <ais523> no, just from coming from in general
17:44:34 <ais523> I suppose you could (in CLC-INTERCAL) do DO SWAP COME FROM GERUND WITH ABSTAIN FROM GERUND
17:44:43 <ais523> which wouldn't actually do what you wanted, but would be amusing
17:44:54 <elliott> ais523: does that modify the language?
17:45:23 <ais523> yep, pretty much
17:45:40 <ais523> I think it dynamically changes the parser, is the way it's implemented
17:46:42 <Vorpal> ais523, that would disable stuff like "come from nexting" too?
17:46:49 <Vorpal> (assuming you can do that)
17:47:04 <ais523> it'd swap COME FROM with ABSTAIN FROM
17:47:09 <ais523> with all the consequences that you'd expect that to have
17:47:15 <Vorpal> ah...
17:48:39 <ais523> anyway, I think I'll go home
17:48:42 <Vorpal> cya
17:48:46 <ais523> if Taneb arrives five seconds after I leave, it's his fault
17:48:56 -!- ais523 has quit (Remote host closed the connection).
17:50:46 -!- sllide has joined.
17:51:13 -!- mrjbq7 has joined.
17:54:01 -!- Phantom_Hoover has quit (Ping timeout: 248 seconds).
17:54:30 -!- Phantom_Hoover has joined.
17:54:33 -!- Phantom_Hoover has quit (Changing host).
17:54:33 -!- Phantom_Hoover has joined.
17:54:47 -!- Ngevd has joined.
17:55:23 <Ngevd> Hello!
17:55:45 <elliott> <ais523> if Taneb arrives five seconds after I leave, it's his fault
17:56:22 <Ngevd> That was 7 minutes ago
17:56:35 <Ngevd> So it's ais523's fault
17:57:20 <elliott> Time dilation.
18:05:48 -!- boily has quit (Ping timeout: 260 seconds).
18:05:53 <sllide> /join #palm
18:05:55 <sllide> >.<
18:06:51 <elliott> no
18:07:06 -!- mrjbq7 has left.
18:09:29 -!- boily has joined.
18:14:45 -!- sebbu2 has joined.
18:15:53 -!- sebbu3 has quit (Ping timeout: 248 seconds).
18:17:42 -!- sebbu2 has changed nick to sebbu.
18:18:25 -!- augur_ has joined.
18:18:33 -!- augur has quit (Read error: Connection reset by peer).
18:19:54 <Phantom_Hoover> OK I have a choice between headache and neckache.
18:21:06 <elliott> What.
18:21:14 <elliott> Go for neckache.
18:21:49 <Ngevd> I vote headache
18:21:59 <elliott> Ngevd: you have not seen the headaches I have.
18:22:04 <elliott> s/y/Y/
18:22:27 <Ngevd> But have you seen Phantom_Hoover's either?
18:22:54 <Phantom_Hoover> It's not a very bad headache, it's just the annoying one.
18:23:06 <Phantom_Hoover> Although given my luck I'm going to start seeing aura any second now.
18:23:39 <elliott> I thought auras were only with migraines and cluster headaches.
18:23:47 <Phantom_Hoover> Yes, they are.
18:23:50 <elliott> Right.
18:23:55 <elliott> (If you have cluster headaches I strongly recommend a neckache.)
18:24:40 <Phantom_Hoover> I like how artist's depictions of auras always look terrible.
18:25:02 <elliott> http://upload.wikimedia.org/wikipedia/commons/a/a1/Fortifikation_%28Migr%C3%A4ne%29.jpg
18:25:16 <elliott> It's like someone used a My First Comics tool to put a POW symbol there then made it translucent.
18:28:29 <Ngevd> I've never had auras
18:29:01 <Ngevd> Not entirely sure what a cluster headache is
18:29:14 <Ngevd> Don't think I've had a migraine
18:29:31 <elliott> You'd know if you had cluster headaches.
18:29:53 <Ngevd> So, go with elliott. He knows aches better than I do
18:31:07 <Ngevd> By a long way
18:32:34 <Ngevd> I've also never broken any bones
18:32:43 <elliott> Me neither.
18:32:54 <elliott> (I've also never had a migraine and incredibly thankfully do not suffer from cluster headaches.)
18:33:00 <elliott> (But I do get pretty bad headaches.)
18:36:26 <Phantom_Hoover> `quote
18:36:26 -!- Phantom_Hoover has quit (Quit: Leaving).
18:36:28 <HackEgo> 272) <oklopol> oerjan: also actually A(4, 4) is larger than any other integer, i learned this the other day when i was reading about this algo, it had complexity O(n a^-1(n)) = O(n a^-1(4))
18:36:35 -!- Phantom_Hoover has joined.
18:36:43 <Phantom_Hoover> <Ngevd> I've never had auras
18:36:51 <Phantom_Hoover> They're great fun.
18:37:05 <Phantom_Hoover> It's like having a weird flickery blind spot.
18:37:19 <Ngevd> ...Like when you stare into a light for a bit?
18:37:35 <elliott> I once touched a lightbulb because I didn't see how it could possibly hurt.
18:37:39 <elliott> I was a smart kid.
18:37:47 <elliott> Like, literally gripped it with my entire hand.
18:37:49 <elliott> Casually.
18:38:10 <Phantom_Hoover> Funniest mental image.
18:38:37 <Phantom_Hoover> Ngevd, kind of except weirder.
18:39:03 <Ngevd> I once gave a teddy bear third degree burns
18:39:26 <Ngevd> Accidentally
18:39:34 <Phantom_Hoover> Actually, the first time I had one it was just this blind spot *right* in the middle of my fovea and I had no idea what was going on so I came to the logical conclusion that I was going blind.
18:39:38 <elliott> RIP
18:40:01 <Ngevd> I once almost went death
18:40:09 <Ngevd> s/th/f/
18:40:11 <elliott> How do you even rate the burns a teddy bear gets
18:40:13 <elliott> How do you even rate the burns a teddy bear gets.
18:40:23 <elliott> "Oh, his stuffing is only partly black; second-degree."
18:40:23 <pikhq> Migraines are hella-fun.
18:40:38 -!- augur_ has quit (Ping timeout: 245 seconds).
18:40:47 <copumpkin> pikhq: yeah, I love them
18:40:49 <pikhq> By which I mean "OH GOD MAKE IT STOP"
18:40:59 <pikhq> "WHY MUST LIGHT BE PAIN"
18:41:04 <copumpkin> I hear they're better than cluster headaches though
18:41:10 <copumpkin> so maybe I should feel lucky I only get migraines
18:43:07 -!- sllide has quit (Read error: Connection reset by peer).
18:47:06 <Phantom_Hoover> "Cluster headache, nicknamed "suicide headache","
18:47:09 <Phantom_Hoover> Sounds great.
18:47:15 -!- Wamanuz has quit (Ping timeout: 276 seconds).
18:47:18 <pikhq> Phantom_Hoover: Yeah, it's the most painful thing.
18:47:21 <pikhq> (literally)
18:47:26 <elliott> copumpkin: By far.
18:47:51 <elliott> Phantom_Hoover: They're worse than unanaesthetised childbirth, reportedly.
18:48:02 <copumpkin> some women get orgasms during childbirth
18:48:05 <pikhq> Thank goodness I "merely" have a genetic propensity to migraines.
18:48:05 <Phantom_Hoover> Reading the WP articles, am now scared.
18:48:15 <elliott> copumpkin: Well, they must have pretty good cluster headaches, then
18:48:25 <copumpkin> hell yeah
18:49:19 -!- Wamanuz has joined.
18:49:31 -!- zzo38 has joined.
18:51:54 <zzo38> OK, now I posted more CGA Collection games; I think you asked a few of them before, such as DOWN.
18:51:55 <lambdabot> zzo38: You have 1 new message. '/msg lambdabot @messages' to read it.
18:52:06 <zzo38> http://zzo38computer.cjb.net/GAMES/cgacoll2.zip
18:52:09 <zzo38> @messages
18:52:09 <lambdabot> oerjan said 2d 21h 26m 11s ago: <zzo38> But, is it, if you ignore undefined, and work only with fully defined programs? <-- if you ignore undefined, i think () is final and a Void (empty) type is
18:52:10 <lambdabot> initial, similarly to the Set category in math
18:52:24 <zzo38> @messages
18:52:24 <lambdabot> You don't have any new messages.
18:53:40 <elliott> you're violating the usage instructions :P
18:54:04 <elliott> `log codu.*ogg
18:54:06 <elliott> (Blame Phantom_Hoover.)
18:54:10 <HackEgo> 2010-05-18.txt:06:07:45: <Gregor> http://codu.org/music/op13/GRegor-op13-wipp2.ogg
18:54:14 <elliott> `pastelogs codu.*ogg
18:54:17 <elliott> What am patselogs.
18:54:19 <HackEgo> http://codu.org/projects/hackbot/fshg/index.cgi/raw-file/tip/paste/paste.10590
18:55:22 <zzo38> "an initial object of a category C is an object I in C such that for every object X in C, there exists precisely one morphism I -> X" In the category of sets, empty set is initial; but in Haskell, it seem to me, there can be more than one morphism I -> X. But I can understand how () is final
18:56:12 <zzo38> How does it work? Maybe I am confuse and misunderstand a few things?
18:56:27 <Gregor> So many oggs
18:56:37 <elliott> Oggsactly.
18:57:26 <Phantom_Hoover> The Oggscast.
18:58:02 <Gregor> `log codu.*mp3
18:58:06 <HackEgo> 2011-09-23.txt:18:58:02: <Gregor> `log codu.*mp3
18:58:09 <Gregor> X-D
18:58:32 <zzo38> Maybe you need to specify the filter in the regular expression not other `log query
18:58:41 <elliott> 2005-10-12.txt:05:31:33: <GregorR> http://www.codu.org/Kill_Yourself.ogg
18:58:42 <elliott> 2005-10-13.txt:00:39:13: <GregorR-L> http://www.codu.org/Kill_Yourself.ogg
18:58:42 <elliott> 2005-10-13.txt:07:03:22: <GregorR> http://www.codu.org/Kill_Yourself.ogg doesn't work for you?
18:58:42 <elliott> 2006-02-01.txt:02:17:22: <GregorR> http://www.codu.org/Kill_Yourself.ogg
18:58:44 <elliott> 2007-01-02.txt:04:49:13: <GregorR> http://www.codu.org/Kill_Yourself.ogg
18:58:47 <elliott> 2007-03-30.txt:02:37:02: <GregorR> http://www.codu.org/Kill_Yourself.ogg
18:58:48 <elliott> 2007-05-19.txt:21:30:07: <GregorR> http://www.codu.org/Kill_Yourself.ogg
18:58:50 <elliott> Grego linked to Kill Yourself a lot.
18:58:59 <elliott> Gregor: also 2009-07-25.txt:17:19:41: <GregorR> http://codu.org/music/auto/Onerously%20Uptight%20Toccata.{mid,mp3,ogg} since that one isn't on the Algorhythms site.
18:59:02 <elliott> s/a/A/
18:59:03 <Gregor> That was back in the horrible www days.
18:59:24 <zzo38> Is GRegor-op13-wipp2.ogg silence?
18:59:40 <Gregor> zzo38: No, but it was a work in progress, so it's not really worth listening to :P
18:59:49 <zzo38> OK.
19:00:16 <elliott> zee5-2010-10-08 is so catchy.
19:00:27 -!- Nisstyre has joined.
19:01:05 <elliott> Gregor: So catchy.
19:01:37 <zzo38> Do you like any of the game cgacoll2.zip?
19:02:20 <Phantom_Hoover> help where is superturing.ogg
19:02:50 <zzo38> Maybe it is in the /music/ directory?
19:12:41 <zzo38> I think I figured out a new (at least to me) monad, called barrier monads. It requires two additional types, the front type, and the back type, in order to make a barrier monad.
19:16:42 <Phantom_Hoover> `log superturing.ogg
19:16:46 <HackEgo> 2011-09-23.txt:19:02:20: <Phantom_Hoover> help where is superturing.ogg
19:16:49 <Phantom_Hoover> :(
19:16:54 <Phantom_Hoover> `pastelogs superturing.ogg
19:16:58 <HackEgo> http://codu.org/projects/hackbot/fshg/index.cgi/raw-file/tip/paste/paste.21784
19:17:28 <elliott> http://codu.org/music/e/superturing/superturing.ogg
19:17:34 <elliott> Gregor: what's the e
19:17:41 <elliott> Gregor: btw the first few seconds of superturing remind me of the Loom theme
19:18:26 <elliott> I also like how wonderfully it demonstrates that Gregor has no idea what a guitar is, how it works, or what it's meant to sound like.
19:21:15 <shachaf> elliott: Loom theme?
19:21:36 <elliott> shachaf: Loom theme.
19:21:39 <shachaf> I'm pretty sure that's called the Swan Lake theme.
19:21:45 <elliott> No, it had its own.
19:21:45 <elliott> I think.
19:21:50 <shachaf> Are you thinking of the Council of Elders theme?
19:21:57 <elliott> I don't remember. :(
19:21:58 <elliott> It's been ages.
19:22:07 <elliott> It was like HALF MY LIFE ago; so last month.
19:22:08 <shachaf> Anyway, all its music is from Swan Lake.
19:22:21 <elliott> Hmm, I swear it had its own theme. But okay.
19:22:30 <shachaf> Oh, dear.
19:22:31 <Phantom_Hoover> http://www.youtube.com/watch?v=7ZXRkfIVjsc
19:22:31 <elliott> It's entirely possible I'm completely misremembering.
19:22:34 <Phantom_Hoover> It... seems to?
19:22:58 <elliott> Wow that's much worse than the MT-thirtytwo version.
19:23:15 <Phantom_Hoover> However
19:23:19 <Phantom_Hoover> At this point
19:23:23 <shachaf> Phantom_Hoover: Are you sure that's not from Swan Lake?
19:23:25 <Phantom_Hoover> There is only one thing left to do
19:23:30 <Phantom_Hoover> http://sgeo.diagonalfish.net/paint_it_black_karaoke.ogg
19:23:35 <elliott> Noooooooooooooooooooooooooooooooooo
19:23:44 <shachaf> From that video: «All the music in LOOM is derived from the classic piece "Swan Lake" by Tchaikovsky. This video contains four tracks - theme, Crystalgard, Shepherds, and The Forge. Each of these begins at 0:00, 2:07, 3:44, and 6:40 respectively.»
19:24:06 <Phantom_Hoover> i
19:24:06 <Phantom_Hoover> help
19:24:08 <Phantom_Hoover> the karaoke
19:24:11 <Phantom_Hoover> my brain
19:24:22 <elliott> http://www.youtube.com/watch?v=1lRrE7ui8Hg I like how Loom just blasted the overture at you for ages with nothing happening on screen at the start.
19:24:32 <elliott> SERIOUS GAME FOR SERIOUS ART FANS, BOREDOM FORBIDDEN.
19:25:08 * shachaf looks for the Council of Elders theme.
19:25:19 <shachaf> Act 4 Part 27 from Swan Lake, I remember that.
19:25:23 <Phantom_Hoover> I love the way Sgeo just gets literally every timing wrong.
19:25:34 <elliott> I should play Loom again, it was a: good game.
19:26:17 <Phantom_Hoover> He's singing to a tune that's consistently not Paint It Black.
19:26:24 <elliott> At least he's consistent
19:26:27 <shachaf> Loom with recorded voices? What?
19:26:31 <elliott> s/dollar sign/./
19:27:10 <shachaf> Swan Lake makes such good computer game music.
19:27:35 <elliott> Loom makes such good ballet music.
19:27:36 <Phantom_Hoover> The final estimate of that superluminal neutrino measurement error is ±5ns.
19:27:41 <Phantom_Hoover> Getting unsettled now.
19:27:48 <elliott> Phantom_Hoover: YESSSSSSSSSSSSSSSSSSS
19:27:59 <elliott> Phantom_Hoover: You shouldn't be getting unsettled, this is literally our in on becoming the timeline where Star Trek happens.
19:28:11 <zzo38> I read something about monads and comonads; monads can correspond to sum types as comonads can correspond to product types, such as the "coeither" comonad which is (,)
19:28:11 <Phantom_Hoover> elliott, but you hate the Federation!
19:28:24 <Phantom_Hoover> And we'll have to meet Vulcans and not laugh derisively at them!
19:28:30 <elliott> Phantom_Hoover: Look it's better than being stuck on this tip of a planet for the rest of ever.
19:28:42 <elliott> By tip I mean in the sense that isn't the sense everyone will read that as because goddamn that's confusing.
19:28:56 <Phantom_Hoover> This planet is the felt tip of the universe.
19:28:57 <elliott> Phantom_Hoover: Also it's okay, canon states that all humans present are very, very drunk at the time. (OK, this is not entirely accurate.)
19:29:05 <shachaf> elliott: http://www.youtube.com/watch?v=SW8szuOdSxc
19:29:07 <elliott> (But I think Cochrane was drunk.)
19:29:13 <elliott> (I think he was always drunk, really.)
19:29:33 <elliott> shachaf: Man, they got an orchestra to play the Loom music??????????
19:29:37 <elliott> (Note: I am not being serious.)
19:29:51 <zzo38> I have the "Swan Lake" on NSF
19:30:01 <Ngevd> HA seems similar to UniQuode
19:30:01 <shachaf> elliott: I'm pretty sure they got an orchestra to play the Monkey Island music.
19:30:27 <elliott> shachaf: I liked that Press Play on Tape version of the MI/LeChuck's theme.
19:30:38 <Phantom_Hoover> There exists a video on youtube of an orchestra playing the Caramelldansen.
19:30:39 <elliott> I haven't heard anything about an orchestral version but I wouldn't be surprised.
19:30:46 <elliott> There is literally nothing that somebody has not got an orchestra to play.
19:31:01 * elliott types "baby got back orchestra" into YouTube. Results disappointing.
19:31:35 * shachaf tends to dislike any music containing guitars and/or drums.
19:31:51 <elliott> I dislike any music containing waveforms.
19:32:13 * shachaf 's music isn't formed of waves.
19:32:36 <Phantom_Hoover> My music is formed of particles.
19:32:49 <elliott> Me too.
19:32:57 <elliott> I just put a brick to my ear and soak up the music.
19:33:46 <Phantom_Hoover> I wonder how long it'll be until we start receiving neutrinos from the future.
19:33:59 <elliott> Phantom_Hoover: They've planned a big neutrino party for us.
19:34:09 <Phantom_Hoover> elliott, friendship neutrinos!
19:34:11 <elliott> There'll be neutrino fireworks in the sky spelling out "Congratulations for FTL!"
19:34:29 <Phantom_Hoover> That's a lot of neutrinos!
19:34:44 <Phantom_Hoover> (This should be read in the voice of the Look Around You guy.)
19:34:50 <elliott> Phantom_Hoover: In the future, we just get our neutrinos from the future.
19:35:01 <Phantom_Hoover> It's like that H2G2 thing.
19:35:06 <elliott> Phantom_Hoover: (They all come from Penrose's Omega point, ultimately.)
19:35:38 <elliott> The curse of the future is that you have to deal with things becoming true before you separate the theory from its originator.
19:36:32 <Phantom_Hoover> See http://www.youtube.com/watch?v=pmw7JfsNzoY#t=5m58s but replace 'matches' with 'neutrinos'.
19:38:51 <elliott> Phantom_Hoover: also what H2G2 thing.
19:38:59 <elliott> s/a/A/
19:39:49 <Phantom_Hoover> elliott, the one with young Zaphod in The Salmon of Doubt.
19:39:58 <elliott> Phantom_Hoover: I haven't read Salmon of Doubt :(
19:40:39 <Phantom_Hoover> elliott, there's something involving the future taking energy from the past and the past taking energy from the future and everyone getting very annoyed about it.
19:40:46 <elliott> Heh.
19:41:14 <zzo38> What is it called when a monad is defined by (return .) and (<=<) instead of one of the other two ways?
19:41:31 <Phantom_Hoover> "Yet another way of defining a monad"?
19:41:58 <zzo38> What are the other two ways called, though?
19:42:33 <shachaf> "a way of defining a monad" and "another way of defining a monad", respectively.
19:42:40 <Phantom_Hoover> What shachaf said.
19:42:57 <shachaf> What Phantom_Hoover said.
19:43:11 <Phantom_Hoover> What shachaf said Phantom_Hoover said.
19:44:15 <elliott> What shachaf sdfg;'h.,/j;
19:44:25 -!- Ngevd has quit (Ping timeout: 248 seconds).
19:45:55 -!- nathan_ has joined.
19:46:12 -!- nathan_ has changed nick to Ngevd.
19:46:18 <Ngevd> Need to configure this better
19:46:35 <zzo38> I know two ways defining monads both are useful. But is the (return .) and (<=<) way ever useful?
20:04:44 -!- monqy has quit (Read error: Operation timed out).
20:08:24 -!- oerjan has joined.
20:11:25 <zzo38> I think if you define state monad with unwrapped types (which is not allowed, however) then the definition of "return" is very simple: return = (,)
20:11:56 <elliott> zzo38: So define the barrier monads?
20:12:26 <zzo38> OK. Barrier monads: data Barrier f b t = Unit t | Barrier f (b -> Barrier f b t) | Fail String; ("Fail String" is optional)
20:12:32 <zzo38> return = Unit; fail = Fail;
20:12:52 <elliott> Those look like iteratees; or at least similar.
20:12:57 <zzo38> Unit x >>= f = f x; Fail x >>= f = Fail x; Barrier a c >>= f = Barrier a $ c >=> f;
20:13:18 <zzo38> Would it then be possible to define cobarrier comonad?
20:13:20 <elliott> Enumerator's Step type is:
20:13:25 <elliott> data Step a m b
20:13:25 <elliott> = Continue (Stream a -> Iteratee a m b)
20:13:25 <elliott> | Yield b (Stream a)
20:13:25 <elliott> | Error Exc.SomeException
20:13:36 <elliott> where (Iteratee a m b) is a newtype for (m (Step a m b)).
20:14:01 <elliott> zzo38: The type parameters to Barrier don't have to be monads, though, do they?
20:14:03 <elliott> They're not even of the right kind for that.
20:14:19 <zzo38> elliott: Yes, they don't have to be monads (you are right, they are not the right kind).
20:14:30 <zzo38> They can be any types of kind *
20:14:44 <elliott> I thought you said a barrier monad was a transformation on two other monads.
20:14:46 <zzo38> The "f" and "b" are called the "front" and "back" types.
20:14:57 <zzo38> elliott: No I didn't say it was a transformation on two other monads.
20:15:15 <elliott> OK.
20:15:31 <elliott> Oh, indeed.
20:15:37 <zzo38> However, it is possible to convert a barrier monad with one front and back type to others, using the function: convertBarrier :: (f -> f') -> (b' -> b) -> Barrier f b t -> Barrier f' b' t;
20:16:07 <zzo38> (If you want to convert t as well, use fmap)
20:19:14 -!- monqy has joined.
20:21:49 <zzo38> I suppose if you have only the Barrier constructor and remove Unit and Fail, it sort of resembles generator functions in Javascript.
20:22:27 <zzo38> But if you want to stop, you do need at least Unit or Fail.
20:23:13 -!- azaq23 has joined.
20:23:44 * oerjan had another thought about those neutrinos
20:24:36 <oerjan> maybe it's not that the neutrinos are going faster than light, but instead it's the spacetime inside earth which isn't shaped how they think...
20:24:58 * elliott waits for Phantom_Hoover to respond to this.
20:25:01 <oerjan> so that the distance through earth is actually shorter than what they've calculated
20:25:03 <elliott> I WANT A DEBATE
20:25:52 <Phantom_Hoover> oerjan, but spacetime shaping is caused by the actual distance metric, so they'd be going faster than light anyway.
20:25:58 <zzo38> (Although generators in Javascript have no clone method; if they are pure you could make one up, though, I think)
20:25:59 <oerjan> it's hard to have a debate on just wild ideas, however my hunch is that theses neutrinos are probably the first near light-speed particles which have ever been measured speed through earth
20:26:11 <oerjan> Phantom_Hoover: um how so
20:26:22 <Phantom_Hoover> Although it'd be fun if we'd discovered hyperspace which was only useful in places with intense gravitational curvature.
20:26:30 <oerjan> *had measured their speed
20:27:33 <oerjan> Phantom_Hoover: it's not hyperspace, i'm suggesting that the neutrinos are actually going at (immeasurably close to) speed of light, it's just no one has properly measured speed of light inside earth before, for obvious reasons :P
20:27:37 <Phantom_Hoover> oerjan, because unless they left space altogether they're still travelling n metres in less than n/c seconds.
20:27:52 <Phantom_Hoover> oerjan, in which case GR is completely wrong.
20:28:27 <oerjan> Phantom_Hoover: it could be only slightly wrong, with the curvature depending differently on mass density. perhaps.
20:28:38 <elliott> Phantom_Hoover: Maybe c is just slightly higher than we thought it was!
20:28:39 <zzo38> Is there ways to do it using hyperdrive?
20:28:41 -!- boily has quit (Ping timeout: 248 seconds).
20:28:46 <elliott> Quick, let's slightly redefine the metre.
20:29:03 <oerjan> zzo38: hyperdrive remains entirely hypothetical.
20:29:05 <Phantom_Hoover> elliott, the error in c is waaaaaaaaaaaaaaaaaaaaaaaaay smaller than this.
20:29:25 <elliott> Phantom_Hoover: It... dude, it was a joke, metres are /defined/ in terms of c.
20:29:52 <Phantom_Hoover> Sorry, I've been staring at a physics textbook from the 80s too much lately.
20:29:55 <oerjan> Phantom_Hoover: anyway, i'd want them to repeat the experiment with different paths through earth, and with an accelerator in orbit to see what happens in vacuum...
20:30:18 <elliott> Accelerator in orbit omg.
20:30:21 <elliott> That is the best.
20:30:36 <Phantom_Hoover> oerjan, also have we never sent stuff through the earth before?
20:30:37 <oerjan> elliott: i assume that would be simpler than putting a neutrino detector there :P
20:30:37 <elliott> What if we put a literal ring around the Earth and shot particles around them omg omg omg that's like the Ed stories kind of omg.
20:30:49 <pikhq> Yeah, c is 299,792,458 meters per second precisely, *by definition*.
20:30:59 <oerjan> Phantom_Hoover: sound waves, but their speed is insignificant...
20:31:02 <zzo38> Yes, that is the definition.
20:31:04 <Phantom_Hoover> Some kinds of radio waves, surely.
20:31:13 <pikhq> However, the exact length of a meter or a second is undetermined. :)
20:31:16 <oerjan> Phantom_Hoover: radio waves pass through earth?
20:31:27 <Phantom_Hoover> oerjan, dunno.
20:31:29 <oerjan> Phantom_Hoover: i suppose that needs checking.
20:31:29 <pikhq> oerjan: Some do.
20:31:37 <Phantom_Hoover> pikhq, what was that ultra-long-wave thing you were talking about.
20:31:40 <elliott> <oerjan> Phantom_Hoover: radio waves pass through earth?
20:31:43 <elliott> oerjan: ELF, we just discussed this.
20:31:44 <pikhq> oerjan: The wavelength needs to be really, *really* low for it to work.
20:31:45 <zzo38> From what I know there is different kind of definition for seconds
20:31:45 <elliott> Phantom_Hoover: above
20:31:54 <pikhq> zzo38: SI unit.
20:31:57 <elliott> I doubt they were measuring the times with any kind of accuracy though.
20:32:08 <Phantom_Hoover> But um hang on.
20:32:09 <zzo38> I know it is SI unit.
20:32:17 <oerjan> elliott: they definitely should measure that too carefully, then
20:32:20 <Phantom_Hoover> It was 732 km, right?
20:32:25 <pikhq> (i.e. the duration of 9,192,631,770 periods of the radiation corresponding to the transition between the two hyperfine levels of the ground state of the caesium 133 atom.)
20:32:27 <elliott> oerjan: I have a feeling there's a /lot/ of error involved.
20:32:37 <pikhq> zzo38: There is precisely one definition of the SI second.
20:32:50 <elliott> oerjan: Anyway SHUT UP, I want this to be FTL.
20:32:55 <Phantom_Hoover> elliott, they pinned the error bars down to ±5ns, actually.
20:33:00 <elliott> Phantom_Hoover: I meant for ELF.
20:33:02 <pikhq> Any other definition is inherently a different unit from the SI second.
20:33:03 <Phantom_Hoover> Ah.
20:33:07 <elliott> Phantom_Hoover: What's the difference in time compared to the error?
20:33:18 <Phantom_Hoover> Error is -60ns.
20:33:25 <Phantom_Hoover> Sorry, no, the anomaly is.
20:33:37 <elliott> Right. Yikes.
20:33:54 <elliott> But seriously.
20:33:59 <elliott> Everyone wants this to be FTL, don't they?
20:34:04 <Phantom_Hoover> I... don't really.
20:34:08 <elliott> Why not.
20:34:10 <Phantom_Hoover> SR is *really* elegant.
20:34:20 <zzo38> pikhq: Yes, that is what I thinking of, about caesium atoms.
20:34:21 <elliott> Yes, but dude, come on.
20:34:33 <elliott> FTL is the thing that makes realistic sci-fi horribly boring.
20:34:40 <elliott> Erm.
20:34:42 <elliott> Lack of FTL.
20:34:46 <elliott> There is literally nothing not awesome about getting FTL.
20:35:10 <elliott> When has anyone ever gone "thank god you can't go faster than light, this makes things so much better!!!!".
20:35:24 <Phantom_Hoover> elliott, well yeah, but something that very vaguely resembles conventional FTL is not worth losing a crapton of physics.
20:35:42 <Phantom_Hoover> So I hope for a crapton of physics, rather than sixty nanoseconds of neutrino lead.
20:35:46 <pikhq> Phantom_Hoover: SR is also almost surely not *quite* right.
20:35:52 <pikhq> It doesn't mesh with quantum effects.
20:35:59 <Phantom_Hoover> pikhq, yes it does.
20:36:09 <Phantom_Hoover> QFT is all relativistic.
20:36:10 <shachaf> If God had intended us to go faster than light, he would have given us faster legs.
20:36:17 <Phantom_Hoover> GR is the one that doesn't mesh with QM.
20:36:32 <pikhq> Oh, right.
20:36:35 <elliott> Phantom_Hoover: Oh come on, I am incredibly sceptical that literally the only thing that can go faster than light is some neutrinos being slightly faster than they should be.
20:36:40 <pikhq> SR works just fine, GR confuses the fuck out of QM.
20:36:45 <pikhq> And vice versa.
20:36:47 <elliott> "SR is true except for a tiny bit of rounding error" is ridiculous.
20:37:10 <Phantom_Hoover> elliott, well OK, but it's even less probable that atoms, let alone humans, would be transportable.
20:37:21 <elliott> Phantom_Hoover: Look, America needs hope. :|
20:37:32 <pikhq> Anyways. I am totally in favor of losing a crapton of physics in the name of finding better physics.
20:37:43 <pikhq> And if this helps us do that, then fuck yeah.
20:37:46 <elliott> Phantom_Hoover: Anyway, throwing away all of physics is nice, it means we get fun new physics.
20:38:10 <Phantom_Hoover> pikhq, yeah, but this is more subtle: I'd prefer to be in the universe where SR is right.
20:38:29 <oerjan> <elliott> When has anyone ever gone "thank god you can't go faster than light, this makes things so much better!!!!". <-- well it _could_ be the reason why we haven't been conquered by aliens yet.
20:38:39 <Phantom_Hoover> nooooooooooooooooooooooooooooooooooooo i need to make tea
20:38:45 <pikhq> Phantom_Hoover: And many people would prefer to be in a universe where no objects older than 6,000 years exist.
20:38:46 <shachaf> elliott cleverly asks people to take it to -blah without being in -blah himself.
20:38:56 <pikhq> Your point?
20:39:00 <oerjan> or more likely, prevented from evolving in the first place
20:39:00 <Phantom_Hoover> oerjan, maybe it's only our neutrinos that can go FTL and we can kill all the aliens with neutrino lasers.
20:39:01 <elliott> shachaf: It is genius.
20:39:07 <monqy> how very clever!!!
20:39:07 <Phantom_Hoover> pikhq, *whoosh* also tea.
20:39:07 <elliott> oerjan: Sorry but any alien that can go faster than light is my kind of alien.
20:39:26 <shachaf> elliott: You should tell people to take it to #esoteric.
20:39:45 <oerjan> Phantom_Hoover: we're going to need some badass energy source to get enough energy for that to matter (although supernovas supposedly work)
20:39:47 <elliott> shachaf: Yes, but then #esoteric would have dylukes in it.
20:40:43 <monqy> is that bad help
20:40:43 <shachaf> This channel needs more people in it.
20:40:48 <oerjan> Phantom_Hoover: also the neutrinos from S1987a did _not_ arrive early. then again maybe some did, we just weren't measuring yet, then.
20:40:55 <oerjan> *SN1987a
20:41:12 <pikhq> oerjan: With our new physics we may get some badass energy source.
20:41:40 <elliott> shachaf: It really doesn't.
20:41:47 <elliott> Or at least it needs the right kind of more people.
20:41:49 <monqy> it just needs better people
20:41:51 <monqy> yes
20:42:19 <elliott> If monqy and shachaf weren't here this channel would be PERFECT.
20:42:25 <monqy> perfect
20:42:43 <monqy> but...in what way>????
20:42:50 <elliott> Every way.
20:42:51 <monqy> perfectly horrible
20:43:44 <zzo38> It is true you cannot go faster than light makes everything much better, but that counts even without aliens.
20:44:54 <shachaf> Hmph.
20:45:17 * shachaf will contribute.
20:45:19 -!- shachaf has left ("!").
20:45:24 <elliott> I knew that would happen.
20:45:27 <Phantom_Hoover> pikhq, we can just nick energy from the future.
20:45:28 <monqy> bye shachaf
20:49:18 <monqy> "I will here try to describe all of the 500+ commands available (I am currently in the process of adding functionality)" this is going to be good
20:49:25 <elliott> monqy: link
20:49:31 <monqy> http://esoteric.voxelperfect.net/wiki/HA
20:50:24 <elliott> HA HA HA
20:50:34 <elliott> oh no
20:51:02 <Ngevd> It seems a lot like Uniquode
20:51:06 <monqy> speaking of too many commands, Ngevd, did anything happen to un--yes
20:51:31 <elliott> oerjan: Oh, I was going to ask/say/something to you.
20:51:33 <Ngevd> But Uniquode has many, many more commands
20:51:33 <elliott> But then I didn't.
20:51:39 <elliott> Oops. Am frogotten.
20:51:43 <elliott> Awwwwwwwwww frogotten.
20:51:52 <monqy> did anything happen to/has anything happened with
20:51:59 <monqy> better words courtesy of monqy
20:52:02 <oerjan> <elliott> oerjan: ELF, we just discussed this. <-- this was a few days ago before this neutrino thing, wasn't it?
20:52:07 <elliott> Yes.
20:52:10 <Phantom_Hoover> Why did we stop talking about neutrinos.
20:52:13 <Phantom_Hoover> Neutrinos are fun.
20:52:48 <Phantom_Hoover> wait
20:52:49 <elliott> oerjan: What should I do if I have two records with the same field type :'( (Specifically I have a /lot/ of x, y and z fields, a /lot/ of entity fields, and I even have packets identical on both the client and server end with the same field names.)
20:52:49 <Phantom_Hoover> if space
20:52:51 <elliott> :'( :'( :'(
20:52:53 <Phantom_Hoover> is a rubber sheet
20:52:58 <Phantom_Hoover> maybe
20:53:00 <Phantom_Hoover> the neutrinos
20:53:01 <elliott> I could just use qualified modules but?? gross??
20:53:03 <Phantom_Hoover> are bouncing off it
20:53:08 <elliott> Phantom_Hoover: y,ES
20:53:26 <Phantom_Hoover> How did you even manage to hit , there.
20:53:33 <oerjan> Phantom_Hoover: because i need to do my daily websites and then read up on what this discovery really is. like, do they always go 0.0025% faster than c, or is that just an average...
20:53:37 <elliott> Phantom_Hoover: Intentionally.
20:54:09 <Ngevd> If space is a rubber sheet, what happens if it is rapidly cooled?
20:54:17 <Phantom_Hoover> oerjan, it's a single experiment.
20:54:36 <Phantom_Hoover> They take protons from the LHC, smash them into some graphite and time the neutrinos.
20:54:39 <oerjan> elliott: qualified modules + record punning?
20:54:49 <Phantom_Hoover> They did the experiment, and they were 60ns early.
20:55:04 <Ngevd> I may start Uniquode again
20:55:06 <oerjan> i guess the punning only works for some things
20:55:06 <Ngevd> With more planning
20:55:28 <Ngevd> Like, start with features, then assign commands to the features
20:55:30 <Phantom_Hoover> The 16000 measurements figure is 16000 bunches of protons hitting the target and firing neutrinos.
20:55:34 <Ngevd> Not the other way around
20:55:37 <pikhq> Phantom_Hoover: It was only graphite and protons?
20:55:45 <Phantom_Hoover> pikhq, I think so.
20:55:45 <elliott> oerjan: How would record punning help? Qualified modules would, I suppose; my constructors are already prefixed with C (client) or S (server).
20:55:50 <elliott> oerjan: i.e. CRespawn, SRespawn.
20:55:51 <pikhq> Hmm. There's rather a lot of facilities that could produce that neutrino beam, then.
20:55:54 <oerjan> Phantom_Hoover: yes, but were _all_ 60 ns early or was that just an average.
20:55:56 <Phantom_Hoover> pikhq, obviously there were magnets and stuff.
20:56:03 <Phantom_Hoover> pikhq, really really really high-energy protons.
20:56:03 <elliott> oerjan: C.Respawn and S.Respawn would be nicer... S.x/S.y/S.z and C.x/C.y/C.z are kind of ugly, though.
20:56:04 <pikhq> Probably not many that could measure it later, but hey.
20:56:05 <elliott> But I guess that's okay.
20:56:14 <oerjan> or the fastest ones
20:56:16 <elliott> oerjan: If you do C.Foo { ... }, do you have to qualify the field names in the braces too?
20:56:32 <Phantom_Hoover> Come on, you know why experiments with protons from the LHC are hard to replicate.
20:56:39 <oerjan> elliott: not with record punning, that's what it's for afaik
20:57:02 <Phantom_Hoover> OMG
20:57:03 <Phantom_Hoover> What if
20:57:07 <zzo38> I know that when defining instances, you don't have to qualify the names of the members of the class. I don't know about records, though.
20:57:08 <Phantom_Hoover> we shoot Hitler with neutrinos
20:57:17 <elliott> oerjan: I don't think so:
20:57:17 <elliott> Record puns are enabled by the flag -XNamedFieldPuns.
20:57:18 <elliott> When using records, it is common to write a pattern that binds a variable with the same name as a record field, such as:
20:57:18 <elliott> data C = C {a :: Int}
20:57:18 <elliott> f (C {a = a}) = a
20:57:19 <elliott> Record punning permits the variable name to be elided, so one can simply write
20:57:21 <elliott> f (C {a}) = a
20:57:23 <pikhq> Phantom_Hoover: This doesn't *seem* to be a hard to replicate one. I mean, 16,000 measurements suggests they got this going rather consistently.
20:57:32 <oerjan> Phantom_Hoover: he'll just turn into a DMM lookalike and we'll be even more hosed
20:57:38 <elliott> `addquote <Phantom_Hoover> OMG <Phantom_Hoover> What if <Phantom_Hoover> we shoot Hitler with neutrinos
20:57:39 <HackEgo> 680) <Phantom_Hoover> OMG <Phantom_Hoover> What if <Phantom_Hoover> we shoot Hitler with neutrinos
20:57:40 <pikhq> And I'd *imagine* that LHC is a bit overkill for the effect they saw.
20:57:52 <elliott> Yeah, what pikhq said; they _have_ replicated the experiment.
20:57:56 <elliott> Thousands of times.
20:58:21 <zzo38> One idea is to have data constructor synonyms, which are capitalized and usable as a pattern or as an expression. And then, also have copatterns.
20:58:25 <Phantom_Hoover> Same apparatus, same setup.
20:59:12 <Ngevd> ☨ would be a good character for Uniquode's churchification command
20:59:19 <pikhq> Yeah, there seems to be a couple dozen facilities that produce neutrino beams for particle physics experiments.
20:59:35 <pikhq> Probably all of them are setting up this one.
20:59:44 <oerjan> <pikhq> Probably not many that could measure it later, but hey. <-- there aren't that many neutrino detectors but it would still be nice to have several different accelerators aim at each to see if the speed varies
21:00:23 <zzo38> Ngevd: I don't have that character in my computer
21:00:34 <Ngevd> Cross of Lorraine
21:00:43 <Ngevd> U+2628
21:01:00 <oerjan> elliott: oh hm record punning is not what i mean, then, some other record extension which resolves ambiguity
21:01:23 <oerjan> they were announced at about the same time, i think
21:02:24 <oerjan> Phantom_Hoover: btw if neutrinos are _truly_ tachyons, then using _less_ energy to generate them should make them go _faster_ :P
21:03:23 <oerjan> except hm, it would be _imaginary_ energy...
21:03:47 <oerjan> wait no
21:03:53 <elliott> back
21:04:00 <oerjan> it's the rest mass which is imaginary, not the energy
21:04:00 <elliott> oerjan: ah
21:04:08 <oerjan> i think.
21:04:19 <Ngevd> FEATURE REQUESTS FOR UNIQUODE
21:04:50 <oerjan> because the limit for infinite energy is c from both sides afair
21:04:58 <Phantom_Hoover> oerjan, yeah.
21:05:35 -!- augur has joined.
21:06:26 <elliott> <oerjan> Phantom_Hoover: btw if neutrinos are _truly_ tachyons, then using _less_ energy to generate them should make them go _faster_ :P
21:06:29 <elliott> It's like Phantom_Hoover's Hawking drive.
21:07:20 <Phantom_Hoover> What's my Hawking drive.
21:07:26 <elliott> The Hawking... thing.
21:07:27 <Phantom_Hoover> You mean the Hawking /generator/.
21:07:29 <elliott> Yes.
21:07:31 <elliott> Shut up.
21:07:39 <Phantom_Hoover> The only drive I've come up with was the negative mass drive.
21:07:49 <elliott> Oh, I thought they were the same thing
21:07:51 <elliott> Oh, I thought they were the same thing.
21:07:52 <elliott> Make them the same thing.
21:07:55 <elliott> Hawking generator drive.
21:08:08 <Phantom_Hoover> Of course, the damned physicists stole my ideas before I had them, probably using neutrinos from the future.
21:08:08 -!- nooga has joined.
21:08:13 <elliott> oerjan: Hmm, can you expose a _qualified_ module?
21:08:19 <nooga> Gregor: how is your GGGGCCCC ?
21:08:34 <elliott> oerjan: So that you can do
21:08:36 <elliott> import Mod
21:08:40 <elliott> ... A.foo ... B.foo ...
21:08:43 <elliott> where Mod exports A and B qualified.
21:09:32 <oerjan> elliott: not to my knowledge
21:10:43 -!- hagb4rd has joined.
21:11:22 <elliott> oerjan: This makes me: :(
21:11:25 <elliott> That :( denotes that I am: sad.
21:11:39 <elliott> oerjan: it would be nice because right now I get SLogin, CRespawn, etc. from "import MC.Protocol"
21:11:41 <elliott> I don't want to have to do
21:11:41 <zzo38> convertBarrier f b (Barrier a c) = Barrier (f a) $ convertBarrier f b . c . b;
21:11:43 <Ngevd> Who's generating Whore Kings?
21:11:44 <elliott> import MC.Protocol.Server (Server)
21:11:47 <elliott> import MC.Protocol.Client (Client)
21:11:50 <elliott> import qualified MC.Protocol.Server as S
21:11:52 <elliott> import qualified MC.Protocol.Client as C
21:12:00 <elliott> I realise I could export Server and Client from MC.Protocol to shorten that by one line
21:12:02 <elliott> but it's still lame
21:13:11 <zzo38> Then use S'Login if you dislike SLogin and cannot use S.Login, although this way doesn't seem nice either.
21:13:16 <oerjan> elliott: DisambiguateRecordFields is what i was thinking of
21:13:21 <zzo38> Or use S_Login
21:13:45 <zzo38> Use classes if you need to
21:13:59 <elliott> Slogging.
21:13:59 <zzo38> Even Template Haskell if that helps.
21:14:25 <Ngevd> So far, all the new Uniquode has is Churchification
21:14:37 <Ngevd> Which is an underexisting feature
21:19:21 <Ngevd> How is ✝?
21:19:54 <elliott> ✝?
21:20:04 <Ngevd> For the churchification command
21:20:11 <elliott> Ah.
21:20:12 <elliott> I like it.
21:21:43 <Phantom_Hoover> I hate the way Stephen Fry is A Clever Person for no obvious reason.
21:21:55 <Ngevd> He was on University Challenge
21:22:40 <Ngevd> Also, booleans literals in Uniquode are ✓ and ✗
21:22:52 <pikhq> Phantom_Hoover: He just presents an air of cleverness is all.
21:23:05 <elliott> Phantom_Hoover: Well, he is.
21:23:06 <pikhq> Probably the RP.
21:23:24 <elliott> Phantom_Hoover: I mean, not saying he's a ~scientific genius~ or anything but he's intelligent and articulate.
21:23:30 <Ngevd> ✔ is like K(true) and ✘ is like K(false)
21:23:37 <Phantom_Hoover> elliott, sure, but not significantly more so than anyone else.
21:23:52 <Ngevd> He's also charismatic
21:24:09 <pikhq> Ngevd: Understatement of the century.
21:24:27 <elliott> Phantom_Hoover: Well, that's... I dunno, maybe you only hang about with really smart people.
21:24:40 <Ngevd> Byte literals must be expressed as braille
21:24:55 <pikhq> Phantom_Hoover: Stephen Fry definitely does seem to be *notably* intelligent.
21:25:04 <Phantom_Hoover> elliott, well I mean that he's not a particularly outstandingly intelligent or articulate person.
21:25:20 <pikhq> And he is profoundly charismatic.
21:25:37 <elliott> Phantom_Hoover: So?
21:25:51 <elliott> Phantom_Hoover: Nobody says he's an absolute genius apart from obnoxious fanboys and you should know better than to listen to htem.
21:25:52 <elliott> them.
21:25:59 <Phantom_Hoover> elliott, from his general... image, you'd think he was.
21:26:23 <elliott> Phantom_Hoover: Nobody says he's an absolute genius apart from obnoxious fanboys and you should know better than to listen to them.
21:27:14 <Ngevd> eg. ⡜ is 92
21:27:22 <Ngevd> AS A BYTE
21:27:24 <Phantom_Hoover> Ngevd, best.
21:35:53 -!- Nisstyre has quit (Ping timeout: 248 seconds).
21:37:32 <elliott> Does anyone know git here?
21:37:33 <elliott> olsner?
21:37:34 <Ngevd> Control structure is done by making a) toll booths and b) wormholes
21:37:51 <Ngevd> Obviously wormholes are quite tricky to make
21:38:33 -!- ive has joined.
21:39:20 -!- Nisstyre has joined.
21:39:53 <Ngevd> It requires embedding two (or more) Clue (Keymaker) programs and getting them to sync
21:40:56 <elliott> X-D
21:41:21 -!- Nisstyre has quit (Max SendQ exceeded).
21:41:23 <Ngevd> Embedding Clue (Keymaker) programs is easy
21:41:34 <Ngevd> Embedding specific Clue (Keymaker) programs is not
21:42:23 <Ngevd> They are created using a hash of the time, the co-ordinate, and a user-controlled variable
21:42:41 -!- Nisstyre has joined.
21:44:08 <Ngevd> Seeing as I don't have the character for embedding a Clue (Keymaker) program, it's tricky
21:44:26 <Ngevd>
21:44:30 <Ngevd> U+4437
21:44:33 <Ngevd> *4337
21:50:39 <Ngevd> Anyone got a good hash for a (Int, [Int], Int)?
21:54:02 <elliott> why not just prepend and append the Ints to the list then hash that?
21:54:18 <zzo38> I was going to suggest prepending both
21:54:29 <zzo38> Like this: \ (a,b,c) -> a : c : b
21:54:39 <zzo38> But that is incomplete because it is not completely hashed
21:54:45 <elliott> That would work too. I'm not sure Ngevd is talking about Haskell though.
21:55:21 <zzo38> It doesn't have to be Haskell; you can easily convert the program into something else I suppose, assuming you are specifying the type in the similar way of Haskell, that is.
21:55:35 <Ngevd> I was using haskell's type notation to describe what I want
21:56:20 <Ngevd> I want apparent randomness over bidirectionally
21:57:41 <Ngevd> I've just thought of how to make it all much simpler
21:57:45 <Ngevd> Use powers of primes
21:58:27 <Madoka-Kaname> @djinn (a->b) -> (a->c) -> (a->d) -> (b->a) -> (b->c) -> (b->d) -> (c->a) -> (c->b) -> (c->d) -> (d->a) -> (d->b) -> (d->c) -> a -> (a->b->c->d->f) -> f
21:58:27 <lambdabot> f a b c _ _ d _ e _ f _ g h i =
21:58:27 <lambdabot> i (f (c h)) (a h) (b h) (d (e (g (c h))))
21:58:39 <Ngevd> So, (3,[7,9,8],4) would become (2^3)(3^4)(5^7)(7^9)(11^8)
21:58:56 <Ngevd> And an integer is easier to hash than a list of integers, I presume
21:59:09 <elliott> Hashing an integer results in... that integer.
21:59:39 <Ngevd> Perhaps
21:59:59 <Ngevd> But what if it was a cryptographic hash function?
22:00:33 <pikhq> What are you using the hash function for, anyways?
22:00:33 <elliott> Those operate on arrays of bytes.
22:00:48 <elliott> pikhq: How do you tell git you're splitting a file in two?
22:00:51 <elliott> Can you?
22:00:59 <pikhq> elliott: git is too stupid for this.
22:01:14 <elliott> Right.
22:01:28 <pikhq> It is also too stupid for cases such as "this file has moved", or even "this file has changed".
22:01:42 <pikhq> This shit only exists as heuristics in the UI.
22:02:00 <Ngevd> Working on Uniquode
22:03:33 -!- Vorpal has quit (Ping timeout: 245 seconds).
22:08:10 <Phantom_Hoover> Ngevd
22:08:11 <Phantom_Hoover> stop
22:08:17 <Phantom_Hoover> you will make the rest of us look bad
22:08:21 -!- MDude has quit (Ping timeout: 260 seconds).
22:08:34 <Phantom_Hoover> http://www.cs.cornell.edu/cv/researchpdf/19ways+.pdf
22:08:37 <Phantom_Hoover> Best paper.
22:09:52 <Ngevd> Dammit, we haven't got onto matrices yet
22:10:22 <Phantom_Hoover> Ngevd, pfft, they're easy.*
22:10:45 <Phantom_Hoover> *even after like 4 years of knowing about them I still need at least two minutes to remember how matrix multiplication works.
22:13:38 <Ngevd> We're just doing graph theory
22:14:48 <Phantom_Hoover> You get to do *graph theory* and you're complaining that you haven't done *matrices*?
22:15:00 <Phantom_Hoover> I would have *killed* to do graph theory earlier.
22:15:23 <Phantom_Hoover> What curriculum are you even on.
22:15:34 <Ngevd> I'm complaining that I feel behind everyone else
22:15:42 <Ngevd> Uh... I actually don't know
22:15:47 <Ngevd> Possibly AQA
22:16:20 <Phantom_Hoover> AS-level, I presume.
22:17:04 <Ngevd> Yeah
22:17:39 <Phantom_Hoover> Hang on, what kind of graphs are we talking about.
22:18:30 <Phantom_Hoover> Bridges of Königsberg graphs or y=x^2 graphs?
22:18:57 <Ngevd> The former
22:19:11 <Phantom_Hoover> Lucky bastard.
22:19:24 -!- GreaseMonkey has joined.
22:19:24 <Ngevd> :D
22:19:29 -!- GreaseMonkey has quit (Changing host).
22:19:29 -!- GreaseMonkey has joined.
22:19:37 <Phantom_Hoover> Googling "AS-level graph theory" gives no relevant hits at all, which is rather odd.
22:19:40 <Ngevd> Also, know any good characters for a toll booth
22:19:45 <fizzie> The theory of plots of functions: choosing the right line colors for maximum psychological effect.
22:20:09 <Phantom_Hoover> fizzie, no, it's manipulating the scales to make things look more significant.
22:21:44 <Phantom_Hoover> Ngevd, oh, of course, you guys have that crazy module thing.
22:22:13 <Ngevd> Decision 1, if you really want to know
22:22:25 -!- copumpkin has quit (Quit: Computer has gone to sleep.).
22:22:57 <Phantom_Hoover> https://docs.google.com/viewer?a=v&pid=sites&srcid=ZGVmYXVsdGRvbWFpbnxwaHNhbGV2ZWxtYXRoZW1hdGljc3xneDo2NTcwNTk5NDM5NWZhZWQ4
22:23:03 <Phantom_Hoover> Wow, that's unnecessarily convoluted.
22:24:46 -!- Phantom_Hoover has quit (Quit: Leaving).
22:25:04 -!- Phantom_Hoover has joined.
22:25:27 <Phantom_Hoover> NOTE TO SELF: Ctrl-q cannot be used as a substitute for Ctrl-w.
22:25:32 -!- elliott has left ("Leaving").
22:25:35 -!- elliott has joined.
22:25:48 <elliott> Sure it can, I just tried Ctrl+W and it did what Ctrl+Q does: get rid of all you awful people.
22:26:01 <elliott> Phantom_Hoover: That handwriting is nice.
22:26:09 <Phantom_Hoover> Ah, but I was trying to get rid of the awful people in #bay12games.
22:26:23 <Phantom_Hoover> elliott, yes, their delicate minds cannot handle LaTeX.
22:27:09 <Ngevd> How about ‼ for toll booth
22:27:12 <Phantom_Hoover> Does that say "by includies te nuber of nodes" at the bottom?
22:27:20 <Phantom_Hoover> Ngevd, everyone knows that's a cage!
22:27:23 <Phantom_Hoover> Or fire.
22:29:03 <Ngevd> How about ℾ?
22:29:27 <Phantom_Hoover> That will do.
22:30:18 * Phantom_Hoover notes that he now has an unhealthy aptitude for Hohmann transfers.
22:31:31 <oerjan> iirc what they are that means you're doomed to be eventually lost in space
22:31:31 -!- Zuu has quit (Read error: Connection reset by peer).
22:32:47 <oerjan> i would have looked it up if my laptop hadn't chosen this very moment to start some update or other
22:33:45 <Phantom_Hoover> oerjan, a Hohmann transfer is just a way of moving between two circular orbits with different altitudes.
22:34:35 <oerjan> my vague memory was: close enough.
22:34:44 <oerjan> for the joke to work, anyway.
22:35:01 <elliott> oerjan: You have the fizzie-colon disease too, I see.
22:35:12 <elliott> Phantom_Hoover: You are literally going to be the: best Asteroids II player.
22:35:47 <Phantom_Hoover> No, the Project Rho guy will be, and we will cry, because he is the: worst.
22:35:53 <fizzie> I think I've: copied this thing: from somewhere.
22:35:55 <oerjan> elliott: your assessment might be: accurate.
22:36:04 <elliott> fizzie: It's so: addicting.
22:36:13 <fizzie> Isn't: it.
22:36:17 <Phantom_Hoover> Oh god are we suffering a fever of: colons.
22:36:20 <elliott> fizzie: It makes everything you say sound approximately fifty percent more: scientific.
22:36:20 <Ngevd> Who can see these characters properly: ﴾﴿
22:36:24 <elliott> Ngevd: Me.
22:36:30 <elliott> They look like ()s but weird somehow.
22:36:32 <oerjan> which is weird since i have: just heard about it
22:36:41 <Phantom_Hoover> Ngevd, I: can.
22:36:53 <elliott> oerjan: I would: s/have: just/have just:/
22:36:53 <Ngevd> elliott, that is exactly what they are
22:36:59 <elliott> Also this is TOO FAR.
22:37:06 <Phantom_Hoover> *this is:
22:37:06 <elliott> Ngevd: Oh. So they're not weird at all?
22:37:16 <Ngevd> U+FD3E, U+FD3F
22:37:19 <elliott> MC/Protocol.hs:17:1:
22:37:19 <elliott> Constructors CRespawn and CDisconnect
22:37:19 <elliott> give different types for field
22:37:19 <elliott> `unused'
22:37:19 <elliott> In the data type declaration for `ClientPacket'
22:37:20 <elliott> Oh come on.
22:37:20 <oerjan> elliott: o: kay
22:37:31 <Ngevd> They are technically /ornate.
22:37:38 <elliott> Ah.
22:37:39 <Phantom_Hoover> oerjan has taken this to its highest: point.
22:37:50 <elliott> Phantom_Hoover: Stop you'll ruin it.
22:37:53 <elliott> I've been happily using it for days now.
22:37:57 <Phantom_Hoover> *ruin:
22:38:07 <oerjan> <elliott> Also this is TOO FAR. <-- ME AM: PLAY GODS.
22:38:27 <elliott> Yes.
22:38:37 <Phantom_Hoover> The last funny Dresden Codak strip.
22:39:05 <elliott> I previously had a plan to read the Hob thing, but then I read that it was awful stereotypical singularitarian dreck so then I didn't.
22:39:13 <elliott> I have made: possibly good decisions.
22:39:34 <Phantom_Hoover> It is: awful.
22:40:36 <elliott> pikhq: How do I remove changes from an existing git commit?
22:40:57 <pikhq> elliott: Make new changes, git commit --amend
22:41:05 <elliott> pikhq: I want to /remove/ the changes.
22:41:09 <elliott> Or do I git reset --soft?
22:41:22 <elliott> And then... how would I selectively re-apply a patch from the new commit?
22:41:23 <elliott> git add -p style.
22:41:40 <elliott> OK brb.
22:41:45 <Phantom_Hoover> im pro orbiter
22:42:01 <elliott> Yes.
22:42:02 <elliott> brb.
22:42:12 <pikhq> It'd probably be easier to do "git reset files" on whatever files you want to remove changes from, and then git commit --amend.
22:42:21 <pikhq> After doing git add on those files.
22:42:27 <Phantom_Hoover> I almost don't want to work out the orbital parking brake because it'd make it less fun.
22:44:58 <Phantom_Hoover> Huh, Newtonian gravity is fully relativistic.
22:45:06 <Phantom_Hoover> I don't know why that didn't occur to me.
22:45:33 -!- Zuu has joined.
22:46:30 -!- Ngevd has quit (Quit: Leaving).
22:46:42 <pikhq> Isn't the only real distinction of Einstein's relativity that in it, light propogates at a constant speed no matter the frame of reference?
22:47:02 <pikhq> (and thus all the implications of SR)
22:47:03 <Phantom_Hoover> Not relativistic, maybe, just relative.
22:47:04 -!- copumpkin has joined.
22:47:28 <Phantom_Hoover> The important part being that I don't need to bother with scary complicated calculations for parking around a moving target.
22:47:51 <Phantom_Hoover> You want to park around a significantly accelerating target? Then do it yourself you lazy bastard.
22:48:02 <pikhq> It's still relativistic, in a sense.
22:48:54 <pikhq> It just doesn't encode the assumption that c is a constant, and all the implications this has for relativity.
22:49:08 <pikhq> Erm, not assumption.
22:49:14 <pikhq> Finding.
22:50:15 <Phantom_Hoover> This is nearly as relieving as the time I realised that you can work out angular and linear force separately.
22:50:49 -!- Patashu has joined.
22:53:51 <Phantom_Hoover> AHAHAHAHAHAHA I CAN RECOGNISE CANADIAN ACCENTS NOW NOTHING CAN STOP ME
22:55:20 <oerjan> you think so, eh?
22:55:36 <Phantom_Hoover> oerjan, are you Canadian.
22:56:01 <oerjan> YOU MAY NEVER KNOW, EH
22:56:12 <Phantom_Hoover> I CAN RECOGNISE YOUR ACCENT
23:03:21 <elliott> Phantom_Hoover: waht
23:03:35 <Phantom_Hoover> AHAHAHAHAHAHAHAHAHHAHAHA
23:03:46 <Phantom_Hoover> EHEHEHEHEHEHEHEHEH
23:04:02 <elliott> Phantom_Hoover: ...
23:04:03 <elliott> r u drug
23:04:13 <Phantom_Hoover> so many drugs
23:04:14 <tiffany> o_o
23:04:35 <elliott> ok good
23:04:39 <elliott> tiffany emoticon bot hard at work
23:04:52 <elliott> <pikhq> It'd probably be easier to do "git reset files" on whatever files you want to remove changes from, and then git commit --amend.
23:04:54 <tiffany> is there even such thing as emoticon bots?
23:04:59 <elliott> pikhq: I only want to commit some patches to the file in question.
23:05:06 <Phantom_Hoover> tiffany is undergoing an existential crisis.
23:05:15 <elliott> \o/
23:05:19 <elliott> \o/
23:05:23 <elliott> \o/ \m/
23:05:26 <elliott> myndzi??? oh god
23:05:30 <tiffany> wait
23:05:32 <Phantom_Hoover> nooooooooooooooooooooooooo
23:05:34 <tiffany> lymee left
23:05:35 <tiffany> :o
23:05:40 <elliott> Yes.
23:05:43 <elliott> She is gone and will never come back.
23:05:45 <elliott> We banned her.
23:05:48 <tiffany> why D:
23:05:57 <elliott> Because she is literally the devil, we proved it with science.
23:06:01 <Phantom_Hoover> For creating an annoying emoticon bot.
23:06:08 <elliott> Yes.
23:06:20 <tiffany> what..
23:06:47 <oerjan> no you
23:06:47 <Phantom_Hoover> we do not expect you to understand these things, you are only a crappily-coded emoticon bot after all.
23:06:54 <tiffany> ...
23:07:01 <oerjan> aww, it's gone
23:07:05 <Phantom_Hoover> That is a strange emoticon.
23:07:05 <oerjan> whoever that was
23:08:18 * tiffany hugs madoka-kaname <3
23:08:24 * Madoka-Kaname hugs ^^;;
23:08:33 <tiffany> :3
23:08:34 <elliott> Madoka-Kaname is the other emoticon bot.
23:08:43 <Phantom_Hoover> It's like Pygmalion and Galatea but more weeaboo.
23:08:48 <elliott> `addquote <Phantom_Hoover> It's like Pygmalion and Galatea but more weeaboo.
23:08:50 <HackEgo> 681) <Phantom_Hoover> It's like Pygmalion and Galatea but more weeaboo.
23:08:57 <Phantom_Hoover> Also lesbian.
23:09:02 <elliott> `delquote 681
23:09:04 <HackEgo> ​*poof*
23:09:08 <elliott> `addquote <Phantom_Hoover> It's like Pygmalion and Galatea but more weeaboo. <Phantom_Hoover> Also lesbian.
23:09:10 <HackEgo> 681) <Phantom_Hoover> It's like Pygmalion and Galatea but more weeaboo. <Phantom_Hoover> Also lesbian.
23:09:18 <Phantom_Hoover> My crowning achievement in this channel.
23:09:45 <oerjan> Phantom_Hoover: well only because hatheist plot failed
23:09:48 <oerjan> *your
23:09:55 <elliott> pikhq: What does git reset --soft do again?
23:10:06 <elliott> im lazy
23:10:19 <pikhq> elliott: --soft changes the head pointer.
23:10:19 <Phantom_Hoover> oerjan, DON'T REMIND ME
23:10:33 <elliott> Thing I just typed instead of "github": gktnjb.
23:10:34 <tiffany> hm
23:10:43 <elliott> hm is not an emoticon.
23:10:46 <tiffany> what was that window manager thingy that changes colour throughout the day?
23:10:51 <elliott> f.lux.
23:10:54 <elliott> It's not a window manager.
23:10:55 <tiffany> oh
23:10:59 <tiffany> that's why I confused it with fluxbox
23:11:04 <elliott> Those are not emoticons.
23:11:09 <elliott> Do your work, bot.
23:11:18 <oerjan> elliott: hm could be a thumbs-up emoticon
23:11:28 <elliott> oerjan: Hmm. True.
23:11:29 * tiffany isn't a bot >:c
23:11:44 <Phantom_Hoover> tiffany, have you passed your Turing test?
23:11:46 <oerjan> tiffany: that's what they all say
23:12:27 <elliott> tiffany is even less believable than Sgeo.
23:12:34 <elliott> And that just adds "?" to random statements.
23:12:41 * tiffany throws erasers at elliott
23:12:42 <Phantom_Hoover> She's less believable than Timmy the Turing Machine.
23:12:54 <elliott> She's less believable than your MOM.
23:13:07 <Phantom_Hoover> elliott, hey, no robot could produce karaoke *that* terrible.
23:13:21 <monqy> are you calling sgeo's karaoke terrible
23:13:35 <elliott> Phantom_Hoover: True. Who knew that the proof of human super-Turing power would not be the greatness of art, but the horror?
23:13:43 <oerjan> monqy: i think he's referring to his mom
23:14:01 <monqy> oh
23:14:21 <oerjan> which also explains Phantom_Hoover's insanity
23:14:26 <elliott> monqy: i doubt he is
23:14:36 <monqy> a relief
23:14:48 <elliott> i mea
23:14:49 <elliott> n
23:14:50 <elliott> referring to his mom
23:14:54 <elliott> he's obviously talking about sgeo's
23:14:55 <Phantom_Hoover> monqy, you have heard Sgeo's karaoke, have you not?
23:14:58 <monqy> oh
23:15:01 <monqy> yes i have
23:15:03 <monqy> it's beautiful
23:15:04 <elliott> Phantom_Hoover: You just don't get it, man.
23:15:09 <oerjan> oh.
23:15:12 <Phantom_Hoover> I understand, you repressed the memories.
23:15:24 <elliott> Well, it's better than Trout Mask Replica.
23:15:31 <Phantom_Hoover> wat
23:15:38 <elliott> It was a: joke.
23:15:40 <oerjan> my principle of turning on laptop sound only in emergencies must have saved me.
23:16:34 <Phantom_Hoover> "Oh no! The president has been kidnapped!" "Ørjan, turn on your speakers! We'll karaoke these terrorists into submission!"
23:16:40 * Phantom_Hoover → sleep
23:16:42 -!- Phantom_Hoover has quit (Quit: Leaving).
23:17:59 <elliott> Does Norway even have a president.
23:18:30 <zzo38> Is there a datatype to represent algebraic numbers?
23:20:23 <elliott> pikhq: hmm, git reset --soft doesn't seem to do much
23:20:26 <elliott> Do I need to specify HEAD?
23:20:48 <elliott> Ah, I want --mixed
23:21:04 <Deewiant> a.k.a.
23:21:29 <elliott> Deewiant: Shhhhhhhhhhh.
23:21:38 <elliott> reset makes me jumpy.
23:22:04 * oerjan fixes some spelling in the [[HA]] article
23:22:42 <oerjan> elliott: there is a president of parliament.
23:22:46 <elliott> can you fix the badness too
23:23:49 <oerjan> tricky.
23:26:24 <pikhq> elliott: Well, yeah, it does precisely one thing: it changes HEAD.
23:27:18 <pikhq> Everything that is not HEAD is not affected by it.
23:27:27 -!- Behold has quit (Remote host closed the connection).
23:27:41 <pikhq> And HEAD is nothing but a hash stored in a text file somewhere in .git.
23:27:53 <elliott> Looks like .git/HEAD.
23:28:00 <pikhq> Sounds right.
23:28:00 <elliott> $ cat .git/HEAD
23:28:00 <elliott> ref: refs/heads/master
23:28:09 <elliott> refs/heads/master isn't a file though. :p
23:28:14 <elliott> Oh wait yes it s.
23:28:15 <elliott> is.
23:28:31 <pikhq> Oh, right, HEAD itself points to the branch head.
23:28:40 <pikhq> It edits whatever HEAD points to.
23:29:00 <elliott> Two-star programming.
23:29:01 <pikhq> checkout $branch changes HEAD. And then futzes with your working tree.
23:30:12 <elliott> "Lately I've been shaking up my world by delving into Haskell. It has been quite an interesting experience. Compared to the languages I've used before it's somewhat different given it's a pure, functional language. The language is filled with features. In this post I'm going to discuss one of those, infinite lists in particular. "
23:30:16 <elliott> ITS NOT A LANGUAGE FEATURE YOU AWFUL BLOG POST WRITER
23:30:21 <elliott> s/\. "/."/
23:30:24 <elliott> oerjan: suffer with me
23:30:53 <oerjan> it's not?
23:31:09 <pikhq> oerjan: It's just a side effect of laziness.
23:31:17 <pikhq> I can do it in C.
23:31:23 <elliott> oerjan: It's a feature in the sense of "perk", but it's not a "language feature".
23:31:34 <pikhq> Hell, I can do it in Brainfuck with enough effort.
23:31:37 <elliott> Language features are something that had to be built in to the language to achieve.
23:31:42 <elliott> pikhq: well that's a fallacy
23:32:00 <elliott> everything TC is equivalent in computational power =/= everything TC is equivalent
23:32:12 <oerjan> i think elliott and i discussed how to do it in underload once
23:32:16 <pikhq> It'll be much less clean, because laziness is a Haskell native feature, rather than something that's being hacked on, but nevertheless.
23:34:22 <elliott> wow, why on earth does the transformers package support base 1?
23:34:24 <elliott> Dependenciesbase (≥1.0 & <2), special-functors (1.0.*) or
23:34:24 <elliott> base (≥2 & <6)
23:40:01 <oerjan> ^ul (()(((x)*:a)~a*^a*a(:^)*a):^)^^^(~aS:^):^
23:40:02 <fungot> (((x)*:a)~a*^a*a(:^)*a)(x)((x)(((x)*:a)~a*^a*a(:^)*a))(x) ...out of stack!
23:40:12 -!- augur has quit (Remote host closed the connection).
23:40:21 <nooga> aargh
23:40:29 <oerjan> oops
23:41:28 <elliott> nooga: Are you too drunk for this.
23:41:40 <oerjan> ^ul (()(((x)*:a)~a*^a*a(:^)*a):^)^^^^(~aS:^):^
23:41:41 <fungot> (((((x)(((x)*:a)~a*^a*a(:^)*a)x)(x)):^))((x)(((x)*:a)~a*^a*a(:^)*a)x)(x) ...out of stack!
23:43:07 <oerjan> ^ul (()(((x)*:a)~a*^a*(:^)*a):^)^^^^(~aS:^):^
23:43:07 <fungot> ((xx)(((x)*:a)~a*^a*(:^)*a):^)(xx)(x) ...out of stack!
23:44:21 <oerjan> ^ul (()(((x)*:a)~a*^a*(:^)*a):^)^^^^^(~aS:^):^
23:44:21 <fungot> (((xxx)(((x)*:a)~a*^a*(:^)*a):^))(xxx)(xx)(x) ...out of stack!
23:45:13 <oerjan> ^ul (()(((x)*:a)~a*^a*(:^)*a):^)^^^^^^(~aS:^):^
23:45:13 <fungot> ((xxx)(((x)*:a)~a*^a*(:^)*a):^)(xxx)(xx)(x) ...out of stack!
23:45:18 <oerjan> oh hm
23:45:30 <oerjan> ^ul (()(((x)*:a)~a*^a*(:^)*):^)^^^^^^(~aS:^):^
23:45:30 <fungot> ((xxxxxx)(((x)*:a)~a*^a*(:^)*):^)(xxxxxx)(xxxxx)(xxxx)(xxx)(xx)(x) ...out of stack!
23:45:36 <oerjan> there you go
23:47:12 <oerjan> ^ul (()(((x)*:a)~a*^a*(:^)*):^)(~^~(, )*S~:^):^
23:47:12 <fungot> x, xx, xxx, xxxx, xxxxx, xxxxxx, xxxxxxx, xxxxxxxx, xxxxxxxxx, xxxxxxxxxx, xxxxxxxxxxx, xxxxxxxxxxxx, xxxxxxxxxxxxx, xxxxxxxxxxxxxx, xxxxxxxxxxxxxxx, xxxxxxxxxxxxxxxx, xxxxxxxxxxxxxxxxx, xxxxxxxxxxxxxxxxxx, xxxxxxxxxxxxxxxxxxx, xxxxxxxxxxxxxxxxxxxx, xxxxxxxxxxxxxxxxxxxxx, xxxxxxxxxxxxxxxxxxxxxx, xxxxxxxxxxxxxxxxxxxxxxx, xx ...too much output!
23:48:17 <oerjan> the first command is essentially an infinite list, and the rest prints its elements
23:48:20 <elliott> oerjan: are those lazy lists? :DDDD
23:48:21 <elliott> so cool
23:48:30 <elliott> oerjan: What's the Haskell equivalent to whatever you're doing?
23:48:37 <elliott> as in, the corresponding data type
23:48:40 <elliott> with explicit laziness I guess?
23:48:44 <elliott> actually wait no
23:48:47 <elliott> since you're emulating the laziness yourself
23:48:50 <elliott> so a thunk would be (() -> a)
23:49:01 <Madoka-Kaname> !bf >+[[.>].+[<]>]
23:49:37 <oerjan> (()(((x)*:a)~a*^a*(:^)*):^) when run produces (x) and ((x)(((x)*:a)~a*^a*(:^)*):^) on the stack
23:49:48 <elliott> oerjan: I can't read Underload. At least not at this hour.
23:50:04 <oerjan> ((x)(((x)*:a)~a*^a*(:^)*):^) when run produces (xx) and ((xx)(((x)*:a)~a*^a*(:^)*):^) on the stack
23:50:08 <oerjan> etc.
23:50:29 <oerjan> so it's building its own successor
23:50:41 <oerjan> (or tail)
23:51:19 <Madoka-Kaname> So it's an iterative quine?
23:51:41 <oerjan> er...
23:53:08 <elliott> oerjan: plz type synonym equiv :'(
23:53:19 <elliott> or well at least SOMETHING vaguely type-like that isn't Underload :P
23:53:27 <elliott> like is it based on foldr?
23:53:34 <elliott> or is it just
23:53:40 <elliott> call --> head tail
23:53:40 <elliott> ?
23:54:06 <oerjan> f p = p:f(p++[x])
23:54:24 <oerjan> erm
23:55:27 <oerjan> call --> head tail, yes
23:58:21 -!- kmc has quit (Quit: Leaving).
23:59:07 <oerjan> the format is ((previous-head)(program to produce next head+self-quine):^)
23:59:56 <oerjan> with the (program to produce next head+self-quine) part not changing
2011-09-24
00:02:37 -!- MSleep has joined.
00:03:31 <elliott> hi
00:12:47 -!- kmc has joined.
00:16:33 -!- sllide has joined.
00:26:07 <nooga> elliott: I'm not drunk at all
00:26:29 -!- sllide has quit (Read error: Connection reset by peer).
00:26:52 <elliott> Suuuure
00:26:58 <oerjan> i'm not as think as you drunk i am
00:27:47 <tswett> elliott: hey. How old are you now, relative to how old you were five years ago?
00:28:01 <elliott> tswett: Six years older.
00:28:15 <tswett> Wow. That's pretty old, comparatively speaking.
00:28:27 <tswett> Six years. I can barely believe it.
00:28:39 <tswett> So much time has passed in those past five years.
00:29:57 <oerjan> damn right it has
00:29:59 <elliott> Yes.
00:35:44 <elliott> oerjan: what's the thing with (<*>) but no pure again?
00:35:47 <elliott> (,) without Monoid?
00:35:51 <elliott> s/w/W/
00:36:56 <oerjan> i'm not sure that has <*>
00:37:10 <elliott> What was it then?
00:37:12 <elliott> You thought of something :P
00:37:22 <oerjan> it had Functor, but not Applicative
00:37:34 <elliott> What was the thing with ap but not prue
00:37:35 <elliott> pure
00:37:37 <elliott> Map?
00:37:41 <elliott> I think it was Map.
00:37:48 <oerjan> hm maybe
00:38:11 <oerjan> because it's like ziplist except you cannot make repeat
00:40:53 <elliott> I'm so glad #haskell aren't watching, they think all these smarts are me.
00:44:36 <zzo38> What does Maybe correspond to in Curry-Howard? It seem to me, you can have (a -> Maybe b) since the function can be (const Nothing); does that mean anything in intuitionistic logic or other logic?
00:45:12 <zzo38> But you don't have (Maybe a -> a) or (Maybe a -> b)
00:45:39 <copumpkin> in some sense, it represents a partial decision of b
00:45:53 <copumpkin> it can say "yes b" or "I don't know"
00:48:46 <elliott> How many fixed-precision binary digits do you need to represent every double
00:49:57 <Jafet> 1079
00:50:03 -!- evincar has joined.
00:50:08 <elliott> Jafet: Really?
00:50:12 <elliott> That's a lot of binary digits.
00:50:30 <Jafet> People use doubles for a reason
00:50:41 <oerjan> you need to be able to represent the largest double, and the smallest
00:50:54 <oerjan> lots of digits between those
00:50:57 <elliott> Jafet: How many after the... uh, binary point?
00:51:01 <elliott> oerjan: Well yeah.
00:51:22 <Jafet> Probably 565.
00:51:55 <Madoka-Kaname> :t const Nothing
00:51:56 <lambdabot> forall a b. b -> Maybe a
00:52:27 <oerjan> zzo38: it would seem that Maybe a corresponds to a trivially true proposition, then
00:53:01 <copumpkin> not really, it's just not as informative as Dec a
00:53:02 <oerjan> it's basically Either b a with b set to () or True
00:53:18 <Madoka-Kaname> :t (flip Maybe) id
00:53:18 <lambdabot> Not in scope: data constructor `Maybe'
00:53:20 <Madoka-Kaname> :t (flip maybe) id
00:53:21 <lambdabot> forall a. a -> Maybe a -> a
00:53:33 <oerjan> copumpkin: um the function Nothing is a proof of Maybe a for all a
00:53:43 <Madoka-Kaname> @pl (flip (flip maybe) id)
00:53:43 <lambdabot> maybe id
00:53:50 <elliott> oerjan: yes but in a higher-order sense...
00:53:55 <elliott> it's a partial decision procedure
00:53:57 <Madoka-Kaname> @pl (flip $ (flip maybe) id)
00:53:57 <lambdabot> flip (flip maybe id)
00:53:58 <nooga> http://cl.ly/100S3t0i062c3q3Z083O :O
00:54:06 <Madoka-Kaname> @pl (flip maybe) id
00:54:06 <lambdabot> flip maybe id
00:54:07 <elliott> oerjan: you might have
00:54:17 <elliott> oerjan: imperfectPrimalityChecker :: (p :: Integer) -> Maybe (IsPrime p)
00:54:19 <copumpkin> data Dec a = Yes a | No (Not a)
00:54:24 <elliott> if it says it's prime, it's definitely prime, but if not, it might still be prime
00:54:29 <copumpkin> that's the ideal
00:54:55 <copumpkin> but sometimes you can't go that far, so Maybe gives you a definite yes, but not a definite no
00:55:20 <copumpkin> say for example you have a statement in peano arithmetic
00:55:48 <copumpkin> well, with presburger arithmetic
00:56:09 <copumpkin> you'd have (s : PresburgerStatement) -> Dec (reify s)
00:56:20 <oerjan> Madoka-Kaname: you may be looking for fromMaybe
00:56:21 <copumpkin> (s : PeanoStatement) -> Maybe (Dec (reify s))
00:56:24 <copumpkin> that's the best you can do
00:56:28 <copumpkin> according to godel
00:56:30 <copumpkin> :P
00:56:34 <elliott> Jafet: The reason I asked was that I receive some data in a fixed-point format but some in doubles... eurgh
00:56:46 <elliott> And it feels wrong just dividing the fixed-point format, even though it was almost certainly created from a double
00:57:06 <evincar> Wait, what?
00:57:14 <evincar> Where are you getting data from?
00:59:03 -!- ive has quit (Ping timeout: 276 seconds).
01:01:43 <evincar> And for what, I might ask.
01:02:45 <evincar> Are we verifying CERN research data?
01:02:59 <evincar> Is that what my half-assed log-skimming should lead me to believe?
01:05:19 <zzo38> Sometimes my dreams fork and end in two different ways independently of each other
01:05:29 -!- nooga has quit (Ping timeout: 255 seconds).
01:07:13 <evincar> I frequently have lucid dreams.
01:07:18 <evincar> In a recent one I tried to move my body in the real world to get my phone call a friend of mine.
01:07:26 <evincar> I wanted to tell him about the things I was seeing in the dream world.
01:07:35 <evincar> It didn't work though.
01:08:00 <oerjan> it's when you _receive_ such a phone call while awake you should be worried.
01:08:17 <zzo38> Sometimes my dream I try to move my real body (but doesn't work) even though I am not trying to try to do that, it is not what I am wanting to do, etc
01:11:30 <evincar> oerjan: What would be worrying?
01:11:36 <evincar> It probably wouldn't even make sense.
01:11:41 <elliott> Hmm... actually, I think doubles might be able to precisely represent every value in the range I'm dealing with. If I have a 32-bit int n, will n/32 be precisely representable as a double for all n?
01:11:50 <elliott> I bet Jafet knows!
01:12:12 <evincar> Sometime I'd like to see a "floating-point explorer".
01:12:29 <evincar> Something that lets you drag a panel to see ranges of numbers and which ones are precisely representable.
01:12:30 -!- ive has joined.
01:13:44 <oerjan> elliott: if you can represent n accurately as a double, then you can represent n/32. the exponents for both will be far from the boundaries.
01:13:53 <elliott> oerjan: Right.
01:14:03 <elliott> oerjan: I'm just really ridiculously paranoid about floating point :)
01:14:23 <oerjan> > [0.1, 0.2 .. 0.3]
01:14:24 <lambdabot> [0.1,0.2,0.30000000000000004]
01:14:26 <evincar> It's useful for a number of things.
01:14:27 <elliott> ;__;
01:14:46 <evincar> (Sorry, that was awful.)
01:14:50 <oerjan> (from the current haskell-cafe discussion about Enum
01:14:55 <elliott> oerjan: yeah
01:14:56 <oerjan> )
01:15:04 <elliott> im hide in your parens
01:15:07 <elliott> : )
01:17:53 <oerjan> > 0.3
01:17:55 <lambdabot> 0.3
01:18:21 <oerjan> > 0.30000000000000003
01:18:23 <lambdabot> 0.30000000000000004
01:18:26 <oerjan> > 0.30000000000000002
01:18:27 <lambdabot> 0.30000000000000004
01:18:30 <oerjan> > 0.30000000000000001
01:18:31 <lambdabot> 0.3
01:18:38 <elliott> :'(
01:18:45 <elliott> im doth cry
01:19:23 <oerjan> > nub (replicate 5 (0/0))
01:19:24 <lambdabot> [NaN,NaN,NaN,NaN,NaN]
01:19:48 <elliott> im cry
01:20:07 <oerjan> > sort $ [1..5] ++ replicate 5 (0/0)
01:20:09 <lambdabot> [NaN,NaN,NaN,NaN,NaN,1.0,2.0,3.0,4.0,5.0]
01:20:15 <oerjan> hm
01:20:37 <oerjan> > sort $ [1..5] ++ replicate 5 (0/0) ++ {6..10]
01:20:37 <lambdabot> <no location info>: parse error on input `{'
01:20:43 <oerjan> > sort $ [1..5] ++ replicate 5 (0/0) ++ [6..10]
01:20:44 <lambdabot> [6.0,7.0,8.0,9.0,10.0,NaN,NaN,NaN,NaN,NaN,1.0,2.0,3.0,4.0,5.0]
01:20:51 <oerjan> XD
01:21:27 <evincar> Is NaN supposed to be stable in sorts like that?
01:21:35 <zzo38> Is that what NaN is for in sorting?
01:21:53 <zzo38> It seem wrong
01:22:11 <oerjan> ...this is showing how Nan's Eq and Ord instances don't obey haskell's assumed laws
01:22:19 <oerjan> *NaN
01:22:34 <zzo38> Yes; it is not following proper Ord laws when NaN is involved.
01:22:49 <elliott> floats shouldn't be Eq or Ord really
01:22:56 <elliott> well ok maybe Ord but Eq is just wrong... Ord requires Eq though
01:23:12 <elliott> in ML they have a whole type infrastructure just to disallow equality on floats :P (since they have no typeclasses)
01:23:18 <zzo38> > sort [1.0,5.0,1.5,NaN,2.0,NaN,NaN,1.1,1.0]
01:23:19 <lambdabot> Not in scope: data constructor `NaN'Not in scope: data constructor `NaN'Not...
01:23:22 <copumpkin> not even Ord
01:23:36 <zzo38> > sort [1.0,5.0,1.5,0/0,2.0,0/0,0/0,1.1,1.0]
01:23:37 <lambdabot> [1.0,1.1,NaN,NaN,2.0,NaN,1.0,1.5,5.0]
01:23:43 <elliott> copumpkin: kinda awkward to use though then :P
01:24:24 <zzo38> You can make a lot of things without floating point.
01:24:26 <evincar> That's so broken...then again, NaN is sorta broken by definition.
01:24:48 <evincar> It just makes me very uncomfortable that the output of my sorting algorithm depends crucially on the algorithm. :P
01:24:53 <oerjan> all this inspired by the recent haskell-cafe discussion.
01:24:59 <zzo38> Is there datatype to represent algebraic numbers?
01:25:13 <oerjan> zzo38: probably in some package
01:25:23 <oerjan> but not in the standard
01:26:35 <oerjan> i'm not even sure what kind of algorithms would handle them efficiently
01:31:46 -!- elliott has quit (Remote host closed the connection).
01:32:11 -!- elliott has joined.
01:32:32 <elliott> oerjan: which haskell-cafe archive do you use btw, I don't like the ones I've used :P
01:39:38 <elliott> hmph
01:40:50 <oerjan> i use haskell.org's pipermail and i hate it :P
01:41:04 <oerjan> i keep telling myself to change
01:41:40 <oerjan> it breaks on too many messages
01:42:29 <oerjan> (including, i believe, internal "From " lines, as i've mentioned before)
01:44:28 <elliott> oerjan: aha, what about http://groups.google.com/group/haskell-cafe
01:44:37 <elliott> that does the nice conversation view too, so you don't have to muck about with thread navigation
01:44:40 <oerjan> oh and i vaguely recall there may be something wrong with attachments too
01:44:42 <elliott> well http://groups.google.com/group/haskell-cafe/topics
01:44:58 <oerjan> aha
01:45:26 <elliott> yeah this seems nice
01:46:00 <elliott> "Hello fellow Haskellers,
01:46:01 <elliott> this is a proposal to extend the arrow notation (-XArrows)."
01:46:01 -!- cheater has quit (Ping timeout: 248 seconds).
01:46:04 <elliott> not MORE :D
01:46:22 <oerjan> ertugrul's proposal?
01:46:26 <elliott> yes
01:46:34 -!- evincar has quit (Quit: ChatZilla 0.9.87 [Firefox 6.0.2/20110902133214]).
01:46:35 <oerjan> i think he ended up finding those (| |) could do what he wanted
01:46:43 <elliott> idiom brackets
01:46:44 <oerjan> *thing could
01:46:48 <oerjan> *things
01:46:59 <elliott> i do not understand arrow notation in the slightest
01:47:07 <elliott> oh hm not idiom brackets
01:47:10 <elliott> banana brackets apparently
01:47:30 <monqy> banana brackets?
01:47:42 <elliott> arrow shit
01:47:44 <elliott> who knows :P
01:47:48 <monqy> arrows......
01:48:32 -!- evincar has joined.
01:51:00 -!- augur has joined.
01:51:53 -!- augur has quit (Remote host closed the connection).
01:52:08 <elliott> "If typhoon comes, umbrella does not work." --haskell-cafe
01:52:40 <evincar> Sound advice on both typhoons and umbrellas.
01:53:19 <evincar> My blog post got loads of views so now I have to be clever because people pay attention to me now. :(
01:54:30 <CakeProphet> ha.
01:54:31 <monqy> oh no
01:54:43 <CakeProphet> dude my blag is going to be the best of all.
01:54:48 <CakeProphet> people will be "like woah dude portal chess"
01:54:51 <monqy> whoa
01:54:51 <monqy> dude
01:54:54 <monqy> portla chess
01:55:02 <evincar> That is something you say whoa dude about.
01:55:13 <evincar> The things I write about are not the things that people say whoa dude about.
01:55:19 <monqy> :'(
01:55:29 <evincar> They are the things people agree with because they lack conflict.
01:55:36 <evincar> Or disagree with because they have misunderstood them.
01:55:49 <CakeProphet> yes you are infallible.
01:56:25 <evincar> I'm as fallible as anybody.
01:56:41 <evincar> I just don't generally make controversial claims.
01:56:50 <evincar> And when I do, people tend to disagree for the wrong reasons.
01:56:59 <evincar> I want better peer review. :/
01:57:16 <CakeProphet> "perl style can be shown to kill babies"
01:57:31 <evincar> Name a thing that cannot be shown to kill babies.
01:57:46 <evincar> Unless a "kill baby" is a thing.
01:57:51 <evincar> A thing to which you can show perl style.
01:58:03 <CakeProphet> !perl print kill baby
01:58:05 <EgoBot> Unrecognized signal name "baby" at /tmp/input.6812 line 1.
01:58:10 <CakeProphet> !perl print kill $baby
01:58:10 <EgoBot> 0
01:58:15 <monqy> evincar: you may have to work a bit on your clever
01:58:29 <evincar> That is what I said I would have to do.
01:58:42 <evincar> Well, implied.
01:58:54 <CakeProphet> elliott: oh hey did you perhaps check out my new wacro?
01:58:58 <monqy> then consider this positive reenforcement of your said
01:59:00 <monqy> i agrreed with you
01:59:02 <CakeProphet> it probably needs a new name since it's not really generating acronyms anymore...
01:59:05 <zzo38> I don't care if it can kill babies. Just because it can, doesn't mean it does!!
01:59:09 <elliott> it's lacking in the acronym department
01:59:12 <CakeProphet> yes.
01:59:14 <evincar> Yaaay, someone else thinks I'm not as clever as I ought to be.
01:59:21 <evincar> What a stupendous victory for me.
01:59:21 <CakeProphet> `wacro 20
01:59:25 <HackEgo> savidebe sellstrixtrid wdyngivers pendehth tuenwamers ution hypolizatiii sages xxildonneau smairedelsolorwoosi trohe ageeine gue cojous rret reproadsiges pur roi torntitusto herreselavrethjac
01:59:27 <CakeProphet> and it's only mediocre at words..
01:59:30 <elliott> hypolizatiii
01:59:37 <elliott> cojous and gue are good
01:59:38 <elliott> also trohe
01:59:41 <elliott> and pur and roi
01:59:43 <CakeProphet> yeah for some reason iii is really common
01:59:47 <CakeProphet> tuenwamers
01:59:53 <elliott> that sounds like a kind of jumper
01:59:55 <monqy> new wacro is good but not as good as fizzie's word generator from last night was it
01:59:58 <elliott> i'm wearing a wooly tuenwamer
01:59:58 <monqy> I really liked those words
02:00:03 <elliott> monqy: oh what was that
02:00:04 <elliott> i must logread
02:00:07 <monqy> I'll dig bup the linke
02:00:20 * CakeProphet is currently fixing things / adding new features.
02:00:26 <monqy> http://sprunge.us/MNHQ
02:00:32 * oerjan opens a bottle of xxildonneau
02:00:37 <CakeProphet> eventually I'll go back and redo the actual word generating algorithm. Maybe with larger grams.
02:00:41 <monqy> faubblemarcus is maybe my favoirte there
02:00:42 <CakeProphet> how does the "n-gram" approach work?
02:00:47 <elliott> monqy: oh these are good
02:00:59 <elliott> CakeProphet: just build a reverse context tree(tm)
02:01:08 <Jafet> For small n, it doesn't.
02:01:14 <elliott> :D
02:01:25 <monqy> for large n, it doesn't, either
02:01:29 <CakeProphet> uh, maybe I should just stick to a single gram size? or two? or three?
02:01:31 <oerjan> un vin pur pour roi
02:01:33 <zzo38> How do you do internet access in Haskell?
02:01:34 <elliott> monqy: megahal works pretty good
02:01:42 <monqy> elliott: hm
02:01:51 <elliott> monqy: but it's quite special, it uses a backwards thing too
02:01:55 <oerjan> @hoogle socket
02:01:56 <lambdabot> Network.Socket socket :: Family -> SocketType -> ProtocolNumber -> IO Socket
02:01:56 <lambdabot> module Network.Socket
02:01:56 <lambdabot> Network data Socket
02:01:58 <elliott> as in, it has a /reverse/ context tree
02:02:04 <monqy> Iremember megahal beng special
02:02:05 <elliott> and it has n=four which is pretty big
02:02:12 <elliott> monqy: it also has a separate thing for punctuation, iirc
02:02:14 <elliott> http://megahal.alioth.debian.org/Classic.html but it's good
02:02:21 <CakeProphet> elliott: yeah I was thinking 4-grams might produce better results.
02:02:25 <monqy> oh I meant bigger than 4 when i said big. 4 is pretty big if you actually want things to be good.
02:02:26 <elliott> http://megahal.alioth.debian.org/Best.html is good too
02:02:29 <zzo38> Where is module Network.Socket?
02:02:31 <elliott> CakeProphet: n is words in this case
02:02:32 <monqy> I mean
02:02:35 <monqy> 4 is on the big side of good
02:02:35 <CakeProphet> elliott: right.
02:02:37 <elliott> zzo38: http://hackage.haskell.org/package/network
02:02:40 <monqy> 4 is good if you're good
02:02:45 <monqy> 100 is never good.........
02:03:02 <elliott> one hundred generates source text verbati
02:03:03 <elliott> m
02:03:05 <elliott> which i guess is okay?
02:03:09 <monqy> Bad
02:03:11 <elliott> http://megahal.alioth.debian.org/Poetry.html
02:03:34 <elliott> "exquisite dead guy
02:03:35 <elliott> rotating in hell"
02:03:47 <CakeProphet> rotate in peace.
02:04:32 <CakeProphet> I was also considering as a hueristic lowering the frequency of trigrams that contain 3 vowels or 3 consonants.
02:04:39 <CakeProphet> to remove the things like iii
02:04:48 <CakeProphet> or to make them less frequent anyways
02:04:55 <Jafet> If you're even getting those trigrams, you're using the wrong corpus
02:05:07 <CakeProphet> but there's a lot of words with 3 consonants
02:05:09 <CakeProphet> in a row
02:05:15 <CakeProphet> Jafet: hmmm?
02:05:20 <monqy> iiiiiiiiiiiiiiiiiiiiiiiiii
02:05:20 <CakeProphet> these trigrams are characters, btw
02:05:40 <CakeProphet> I am taking a 1-grams-of-words dataset
02:05:45 <Jafet> No english (or most other european) text will give you three i's in a row
02:05:45 <CakeProphet> and breaking each word into trigrams
02:05:58 <Jafet> ...very often
02:06:06 <CakeProphet> presumably the iii is from roman numerals or such
02:06:22 <CakeProphet> maybe I could just remove it as a special case.
02:06:32 <elliott> roman numerals aren't mushed up with other words
02:06:35 <Jafet> Filter on a dictionary
02:06:39 <CakeProphet> elliott: true
02:06:40 <elliott> if you're traversing across word boundaries you are "doin' it rong"
02:06:47 <elliott> each word should be added separately
02:06:48 <monqy> cakeprophet what about the tii
02:06:50 <Jafet> Or make n-grams on syllables, instead of letters
02:06:53 <monqy> and yea hwhat eliotss saying
02:07:01 <elliott> Jafet: that would be good, but syllables are hard to extract from text reliably :P
02:07:05 <CakeProphet> elliott: I am not concating words together I'm adding characters together.
02:07:09 <elliott> but you could heuristic it
02:07:14 <elliott> CakeProphet: i'm talking about when training
02:07:15 <Jafet> When in doubt, branch and add both.
02:07:44 <Jafet> Or index on a dictionary, where the syllables are already split for you.
02:08:13 <CakeProphet> elliott: the algorithm does this: takes the last two characters that were generating, plugs them into the hash table, then randomly selects, based on frequency, the third character from the inner-hash-table, and then adds that to the string
02:08:17 <CakeProphet> repeat
02:08:19 <CakeProphet> until it finds a space
02:08:23 <CakeProphet> which indicates the end of a word
02:08:32 <CakeProphet> I'm replacing the end-of-space thing to use a word length histrogram.
02:08:40 <elliott> "the third"?
02:08:41 <CakeProphet> so that the lengths of words are based on the lengths of words in the dataset.
02:08:45 <elliott> oh i see
02:08:51 <elliott> CakeProphet: i'm talking about when training
02:08:53 <elliott> not when generating.
02:08:55 <elliott> as i already said.
02:08:56 <CakeProphet> yes if you have "aa" it will give you a table of possible third characters with frequencies.
02:08:59 <CakeProphet> and randomly selects one.
02:09:19 <CakeProphet> elliott: right, I was giving you the context to make sure we were talking about the same approach. how would word boundaries be factored in?
02:09:29 <elliott> do you train separately for each word in the corpus
02:09:36 <CakeProphet> I... guess?
02:09:39 <elliott> >_<
02:09:40 <elliott> so that's a no then
02:09:45 <elliott> which means you won't be generating words at all
02:09:46 <CakeProphet> how do you train them "all together" :PO
02:09:51 <elliott> you'll be generating stretches of text without spaces
02:10:21 <CakeProphet> as in like, what is the difference in data representation
02:10:33 <elliott> none in data representation. all in algorithm.
02:10:48 <CakeProphet> the algorithm that generates the data. "training" as you call it.
02:10:53 <CakeProphet> what data does it generate.
02:11:09 <elliott> wow what a hopelessly unanswerable question
02:11:14 <elliott> show your code, i'll tell you if it's wrong :P
02:11:23 <CakeProphet> I already know the answer to that, from you.
02:11:23 -!- elliott has quit (Remote host closed the connection).
02:11:23 <monqy> it's in perl; automatically wrong
02:11:31 <monqy> bye elliott
02:11:46 -!- elliott has joined.
02:11:48 <CakeProphet> elliott: I don't need you to tell me it's wrong. I would just like you to explain a little more about what you're talking about.
02:12:00 <CakeProphet> `ls bin/wacro
02:12:02 <HackEgo> bin/wacro
02:12:03 <CakeProphet> enjoy
02:12:04 <elliott> i can't because your questions are bad
02:12:09 <elliott> and unanswerable
02:12:12 <elliott> and i suspect a deeper confusion
02:12:31 <CakeProphet> basically what is training.
02:12:35 <elliott> it would be much simpler to see your code which would let me determine whether it did what i said or not quickly; if you don't want to do that, then fine, I can't/won't help
02:12:43 <CakeProphet> ^^^^^^^^^^^^^^
02:12:48 <elliott> CakeProphet: going from corpus to data set
02:12:51 <elliott> language model
02:12:52 <elliott> whatever
02:12:57 <CakeProphet> okay.
02:13:30 <evincar> Should I compete at the International Whistlers Convention next year?
02:13:33 <CakeProphet> http://pastebin.com/A16F58CF
02:13:34 <CakeProphet> it's the best code
02:13:36 <CakeProphet> best perl.
02:13:51 <evincar> (I don't care if this is completely off-topic. Someone usually answers. :P)
02:14:00 <monqy> evincar: :P
02:14:04 <CakeProphet> evincar: no dude because if you do I'll join
02:14:07 <elliott> CakeProphet: i like the part where you discard all words after the first in a given n-gram
02:14:07 <CakeProphet> and completely dominante.
02:14:15 <CakeProphet> elliott: where is that?
02:14:20 <elliott> also btw the google n-gram data is completely useless for this
02:14:22 <elliott> all you need is the wordlist
02:14:24 <elliott> or are you using the wordlist
02:14:25 <CakeProphet> elliott: these are 1-grams
02:14:26 <CakeProphet> which is
02:14:27 <elliott> right
02:14:27 <CakeProphet> a wordlist
02:14:47 <elliott> yeah ok you do it right i guess, but with a way too low n
02:15:00 <CakeProphet> n as in n-gram?
02:15:08 <elliott> yes
02:15:08 <evincar> CakeProphet: I'm pretty good. Not a virtuoso by any means, but I've practiced a lot.
02:15:11 <elliott> CakeProphet: what does your generator use to denote start/end
02:15:15 <CakeProphet> I was considering maybe 4 or 5.
02:15:19 <elliott> you should use special tokens for that
02:15:31 <CakeProphet> elliott: currently it doesn't use anything for end, and start is spaces.
02:15:34 <CakeProphet> two spaces for start
02:15:43 <monqy> "doesn't use anything for end" what
02:15:47 <elliott> CakeProphet: well, it doesn't matter what you use, as long as it's in the data set
02:15:51 <elliott> CakeProphet: but you want an end token
02:15:55 <elliott> to be inserted as the "last character"
02:16:02 <elliott> so that you can end at a good place
02:16:06 <CakeProphet> elliott: the end token no longer means anything with the current generation algorithm.
02:16:13 <elliott> it should
02:16:15 <CakeProphet> as it predecides the length.
02:16:20 <elliott> it shouldn't
02:16:21 <CakeProphet> via a word length histrogram.
02:16:28 <elliott> ok well
02:16:32 <tswett> Hey, programming language. Smalltalk, but there's only one message selector, and it takes one argument, and messages don't return anything.
02:16:32 <elliott> it can pick a target length
02:16:33 <CakeProphet> the current algorithm is the one that goes until it finds a space
02:16:36 <CakeProphet> and it ends up generating huge words.
02:16:37 <elliott> and exit if it gets an end token
02:16:39 <elliott> if you're close enough
02:16:42 <elliott> i.e. >=
02:16:45 <tswett> (I've gotten very lazy when it comes to creating esoteric programming languages.)
02:16:52 <elliott> (and use a maximum length to cut it off if it gets stuck in a loop)
02:17:04 <CakeProphet> `wacro 20
02:17:06 <HackEgo> ided proearreninarni nonneonav st thelaroprobatseeemisabla tagerapineronizimory mensit datchoid seteo polj furt lang xhiso suram ik recons jaff irrottd vam ite
02:17:07 <monqy> tswett: at least lazy means you haven't been making lots of bad languages, right?
02:17:08 <CakeProphet> these are all generated until a space is found.
02:17:14 <elliott> CakeProphet: see above
02:17:17 <tswett> monqy: yep.
02:17:23 <CakeProphet> elliott: so you're saying combine both?
02:17:31 <elliott> CakeProphet: sure
02:17:37 <CakeProphet> I like using just the word length histrogram as it would directly reflect the frequency of word lengths in the dataset.
02:17:44 <elliott> yes but this leads to more natural endings
02:17:46 <tswett> And I have G+, which means that everyone will now flock to flesh out my designs.
02:17:48 <elliott> yours will just chop it off arbitrarily
02:18:00 <CakeProphet> elliott: somewhat short-sighted though for small n.
02:18:03 <elliott> no
02:18:11 <monqy> im agree with elliott
02:18:38 <CakeProphet> elliott: another idea: include character position in the frequency data.
02:18:45 <monqy> what
02:18:56 <CakeProphet> so when I go to generate the next character I look up the current character position in the table
02:18:59 <elliott> CakeProphet: pick target word length; subtract a bit (because you're likely to go over), making the new target word length; generate; if you reach an end token, then if the word length is >= the target length, quit, else pick again (instead of the end token); finally have an if >= target length + constant, quit, to stop generating words far over the target length
02:19:10 <CakeProphet> and it gives me "frequencies where this letter occured after the last n-1 characters at char position i"
02:19:12 <tswett> `wacro 20
02:19:14 <HackEgo> de fed xoilicherbrenttounisselageriusiverinefeloparka accreless su soravy but man edenerac fumo aus spramereetialiphouryhtalian rowbeld whing ble tursaxonturg refloatens st wart sky
02:19:19 <tswett> Yes, yes.
02:19:19 <monqy> xoilicherbrenttounisselageriusiverinefeloparka
02:19:27 <elliott> CakeProphet: another thing you can do is, the closer/over the string gets to the target length, scale up the probability of end tokens, so you're more likely to end rather than getting hit by the safety cut-off
02:19:36 <tswett> "Refloatens". That is a good word.
02:19:43 <elliott> xoilicherbrenttounisselageriusiverinefeloparka
02:19:46 <elliott> word
02:19:56 <tswett> Also "whing".
02:20:00 <monqy> at least the ending is natural
02:20:20 <elliott> Whings. Like wyngz, but more English.
02:20:39 <CakeProphet> elliott: hmmmmmm
02:20:52 <CakeProphet> notice all of the really shot words that you get though
02:20:59 <CakeProphet> simply because your last two characters happen to commonly end words.
02:21:06 <elliott> CakeProphet: ...
02:21:07 <CakeProphet> *short
02:21:12 <elliott> CakeProphet: it only quits if the length is >= the target length
02:21:15 <elliott> try actually reading what i wrote
02:21:19 <elliott> before commenting on it
02:21:35 <CakeProphet> oh I missed that.
02:22:13 <CakeProphet> I could probably scale the probability of end tokens based on the frequency histogram.
02:22:16 <CakeProphet> somehow.
02:22:26 <elliott> >_<
02:22:51 <CakeProphet> and just maybe not use a minimum (target) length.
02:24:35 <CakeProphet> elliott: >_<???
02:24:43 <CakeProphet> I read what you said, I understand it. What are you annoyed about?
02:24:47 <elliott> >_<X_<_X<_O-o-qOW_QOwo-
02:26:45 <CakeProphet> hmmmm
02:27:15 <CakeProphet> no your approach is probably safer than ONLY scaling the end tokens.
02:27:57 <elliott> The scaling is a good idea though.
02:28:04 <elliott> It's likely to steer to a more natural ending than the harsh cutoff.
02:28:11 <CakeProphet> yeah I see what you're saying.
02:28:13 <CakeProphet> especially with larger n
02:28:24 <elliott> CakeProphet: btw run it on a finnish dictionary
02:28:30 <elliott> what with all the agglutinativity
02:28:37 <elliott> we'll need the finns to decode what it spits out though :P
02:28:38 <CakeProphet> even with 3-grams you get pretty good word endings.
02:29:00 <CakeProphet> elliott: should I go with 4-grams or 5-grams?
02:29:06 <CakeProphet> I think 5 might be too much?
02:29:41 <elliott> 4
02:29:59 <elliott> note that you'll want to dump the result as binary, gzip it, and include it after __END__
02:30:01 <elliott> because it'll be big
02:30:10 <CakeProphet> might as well go ahead and make the code independent of gram size.
02:30:20 <CakeProphet> how will I do this? in typical perl style: global variables
02:30:39 <elliott> 13:29:45: <ais523> not you too!
02:30:39 <elliott> 13:29:58: <ais523> it's bad enough that elliott was considering buying an expensive ngram database
02:30:51 <elliott> I wasn't joking and it was far more useful than a $787.50 wordlist, plus about ten times less expensive
02:31:03 <CakeProphet> *word list with parts of speech data
02:34:06 <CakeProphet> > 27^3
02:34:07 <lambdabot> 19683
02:34:24 <CakeProphet> that's the number of elements in the outer hash table for 4-grams.
02:34:40 <CakeProphet> each value is a 27-element hash table.
02:35:03 <elliott> use an array instead
02:35:04 <elliott> for the inner
02:35:17 <elliott> it should be twenty-eight elements
02:35:25 <elliott> well
02:35:25 <elliott> times two
02:35:37 <CakeProphet> twenty-eight?
02:35:47 <elliott> alphabet + start + end
02:35:47 <CakeProphet> also yeah I should switch to an array.
02:35:55 <CakeProphet> oh I was using the same token for start and end..
02:35:58 <CakeProphet> because I can.
02:36:01 <elliott> that won't go well.
02:36:03 <elliott> at all.
02:36:15 <CakeProphet> start tokens are always in the outer table, end tokens are always in the inner.
02:36:26 <elliott> grosse
02:37:55 <CakeProphet> whatev
02:39:03 <elliott> oerjan: im robots??
02:39:05 <elliott> yeah
02:40:23 <elliott> http://en.wikipedia.org/wiki/Cat-burning
02:40:24 <elliott> http://en.wikipedia.org/wiki/The_Great_Cat_Massacre
02:40:28 <elliott> the french are bad people :'(
02:40:30 <CakeProphet> wat
02:40:36 <elliott> in
02:40:37 <elliott> 1700s
02:40:41 <elliott> french people burned cats on bonfires
02:40:46 <elliott> and shrieked and laughed
02:40:47 <elliott> and were horrible
02:40:49 <elliott> and beat them
02:40:53 <elliott> and hung them for witchcraft
02:40:53 <CakeProphet> great massacre.
02:40:54 <elliott> they were
02:40:54 <elliott> awful
02:40:55 <elliott> people
02:41:04 <elliott> dear everyone: if you are french we are no longer friends
02:41:15 <quintopia> i agree
02:41:31 <quintopia> as far as i'm concerned, rome is still at war with the gauls
02:41:46 <quintopia> bona fortuna roma!
02:42:05 <CakeProphet> elliott: my last name has etymological roots in the French word for "courteous"
02:42:08 <CakeProphet> what now???
02:42:13 <elliott> CakeProphet: DIEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE
02:42:58 <CakeProphet> !perl sleep and die ", never to return"
02:44:03 <pikhq> My last name has confusing spelling. What now?
02:45:43 * oerjan cackles evilly and goes to deduce CakeProphet's full name from this information
02:45:52 <CakeProphet> NOOOOOOOOO
02:46:07 <elliott> Adam Courtois????
02:46:11 <CakeProphet> once you know my true name, you will control me. :P
02:46:13 <CakeProphet> elliott: not quite
02:46:19 <elliott> Adam Curtis??????
02:46:21 <CakeProphet> yep
02:46:23 <elliott> he makes documentaries
02:46:24 <elliott> are you him
02:46:26 <CakeProphet> no
02:46:29 <CakeProphet> but we have the same name.
02:46:31 <elliott> http://upload.wikimedia.org/wikipedia/commons/c/c5/Adam_curtis.jpg cakeprophet
02:46:37 <CakeProphet> lol
02:46:40 <CakeProphet> yep that's me.
02:46:51 <elliott> http://upload.wikimedia.org/wikipedia/en/7/76/The_Way_Of_All_Flesh_titles.jpg title to one of CakeProphet's documentaries
02:47:00 <elliott> cakeprophet is 56 and from the uk
02:47:10 <CakeProphet> elliott: also the Way of All Flesh is an excellent Gojira album
02:47:11 <elliott> "The Observer adds "if there has been a theme in Curtis's work since, it has been to look at how different elites have tried to impose an ideology on their times, and the tragicomic consequences of those attempts."[2]"
02:47:15 <CakeProphet> Gojira of course being a FRENCH METAL BAND.
02:47:15 <elliott> this is what CakeProphet does
02:47:38 <elliott> french poople
02:47:48 <CakeProphet> yes the consequences are very tragicomic
02:47:53 <CakeProphet> tragicomic being a very tragicomic word...
02:48:00 <elliott> I like how I have a forty-one line long export list.
02:48:13 <CakeProphet> Haskell in action.
02:48:23 <elliott> https://github.com/ehird/mchost/blob/master/MC/Protocol/Types.hs#L3
02:48:32 <CakeProphet> Python has the worst export control.
02:48:46 <CakeProphet> __all__ = ["name1", ...]
02:48:49 <elliott> I don't think there's a single thing there I don't export, but best to be explicit about it.
02:48:59 <oerjan> <elliott> Adam Curtis?????? <-- dammit i was going for this http://www.facebook.com/people/Adam-Gallant/511648752
02:49:11 <CakeProphet> oerjan: master of etymology
02:49:23 <elliott> oerjan: google said "courtois" for courteous, so
02:49:51 <CakeProphet> I feel moving to the UK would be a bad move for me
02:49:54 <oerjan> elliott: i thought that was too obvious, so i looked for the alternative galant instead
02:49:58 <CakeProphet> as I would now be associated with this famous guy.
02:50:02 <elliott> oerjan: lol
02:50:20 <CakeProphet> unless he's not actually that famous.
02:50:21 <elliott> CakeProphet: I get the feeling he's somewhat of a, how do you say it, tosser.
02:50:30 <CakeProphet> ...I have no clue what that means.
02:50:33 <elliott> Well, in the world of documentaries he's ecrtainly famous. :p
02:50:44 <CakeProphet> oh
02:50:44 <elliott> s/ecrtainly/certainly/
02:50:46 <CakeProphet> good word.
02:51:08 <CakeProphet> but I don't know what that means in your UK jargon.
02:51:34 <elliott> Well, Wiktionary says http://en.wiktionary.org/wiki/tosser, but that has way too much focus on the not-really-relevant-any-more etymology and misses all the subtle meaning of the word.
02:51:41 <CakeProphet> right
02:51:52 <CakeProphet> I associated it with "wanker"
02:51:57 <elliott> Wanker is much lighter.
02:52:05 <elliott> A tosser has to be more offensive than that.
02:52:05 <CakeProphet> but I don't know what that means other than "some asshole"
02:52:14 <elliott> Well, it literally means "masturbator". :p
02:52:17 <CakeProphet> right.
02:52:24 <CakeProphet> US slang > UK slang
02:52:32 <elliott> No way. You have nothing with the subtlety of tosser.
02:52:36 <CakeProphet> bitch ass ho-slut
02:52:40 <CakeProphet> we're so subtle dude.
02:52:46 <elliott> It's all obscene rubbish.
02:52:53 <elliott> You're charlatans.
02:53:14 <CakeProphet> you're obviously just a big dickface with no nice American things.
02:53:45 <elliott> Yeah, we're burdened with a culture, and a country more than like three hundred years old.
02:53:46 <oerjan> Adam le Ouancour
02:53:56 <elliott> We have benches older than your country.
02:54:27 <CakeProphet> elliott: yeah but you can thank us for YOUR AWESOME GOVERNMENT BAHAHAHAHA.
02:54:33 <CakeProphet> ..
02:54:44 <elliott> CakeProphet: What.
02:54:48 <monqy> what
02:54:49 <CakeProphet> american of course being the place where freedom was invented.
02:54:51 <CakeProphet> *america
02:54:56 <elliott> Well we don't have any of that nonsense.
02:55:01 <elliott> Thankfully neither do you.
02:55:55 <CakeProphet> any what? freedom?
02:56:08 <elliott> Exactly.
02:56:27 <CakeProphet> well fine. democracy.
02:56:28 <CakeProphet> there.
02:56:30 <CakeProphet> we invented that
02:56:31 <CakeProphet> yep
02:56:33 <CakeProphet> the first.
02:56:48 <CakeProphet> and everyone was like "woah that's cool" and copied it.
02:56:49 <CakeProphet> losers.
02:57:56 <elliott> Totally
02:57:58 <elliott> Totally.
02:58:05 <elliott> Good thing you don't have that, either.
02:58:21 <CakeProphet> yep
02:58:31 <CakeProphet> I love capitalism. best system of government.
02:59:32 <elliott> ITYM corporatism.
02:59:50 <CakeProphet> "The bloke who ripped me off was a right tosser"
03:00:00 <CakeProphet> only a really lame country would have slang like that.
03:00:17 <CakeProphet> elliott: yes I mean "people and non-person entities with lots of money rule"
03:00:20 <elliott> Our slang is approximately ten times more gritty.
03:00:40 <monqy> bloke and tosser sounds much better than my native slang
03:00:54 <CakeProphet> shut up you're all babyfuckers.
03:01:29 <CakeProphet> babyfucking twatwaffles.
03:01:49 -!- augur has joined.
03:02:57 <CakeProphet> monqy: from where do you hail?
03:03:11 <monqy> america :(
03:03:22 <CakeProphet> america is a big place.
03:03:39 <elliott> yeah, it's two whole continents.
03:03:43 <monqy> is california small enough for you
03:04:02 <elliott> no you have to go smaller
03:06:41 -!- azaq23 has quit (*.net *.split).
03:06:41 -!- CakeProphet has quit (*.net *.split).
03:06:41 -!- iamcal has quit (*.net *.split).
03:06:42 -!- fizzie has quit (*.net *.split).
03:06:42 -!- atehwa_ has quit (*.net *.split).
03:06:43 -!- chickenzilla has quit (*.net *.split).
03:07:18 <elliott> hi
03:07:25 <evincar> Hi?
03:07:29 <monqy> hi
03:07:46 <Jafet> 'lo
03:08:02 <elliott> hi
03:08:59 -!- chickenzilla has joined.
03:09:04 <oerjan> hay
03:09:26 -!- atehwa has joined.
03:12:33 <elliott> hi
03:12:42 <elliott> pikhq: how do i git stash only one file... hepl
03:14:14 -!- fizzie has joined.
03:15:55 <elliott> pikhq: heelp
03:16:48 -!- sebbu2 has joined.
03:16:48 -!- sebbu2 has quit (Changing host).
03:16:48 -!- sebbu2 has joined.
03:17:13 -!- sebbu has quit (Ping timeout: 248 seconds).
03:19:55 -!- iamcal has joined.
03:21:22 <oerjan> INTERCAL STASH is so much simpler
03:23:03 -!- azaq23 has joined.
03:24:30 <elliott> oerjan: yes
03:25:57 <elliott> http://shop.github.com/ I...
03:26:12 <evincar> elliott: I don't think git-stash can operate on single files.
03:26:25 <evincar> It's specifically for stashing all of your uncommitted changes.
03:26:27 <elliott> This is the whitest store I have eve seen.
03:26:32 <evincar> There's probably another obscurely named command for it.
03:26:54 <evincar> Needs more white.
03:27:07 <oerjan> another neutrino idea: maybe they don't actually move faster than light on average, but instead they jump 60 ns backwards in time when oscillating from mu to tau flavor :P
03:27:10 <elliott> "Let's say you ordered a shirt. And in between the time that you placed your awesome order, you happened upon a Krispy Kreme donut shop. Wanting to do your part to encourage the economy, you stopped in to support local business (while quickly putting out of your mind the fact that Krispy Kreme is in fact not local, but rather nation-wide.) At said establishment, you decide to order a couple dozen donuts as they stream off the assembly line type d
03:27:10 <elliott> eal thing they got going on in there. (Honestly, I wouldn't know what it's called, I'm just a coder, not a donut maker). Thinking of the starving children throughout the world, you decide not to be wasteful but instead consume all 24 donuts."
03:27:19 <elliott> Also: the whitest paragraph.
03:27:28 <elliott> oerjan: :D
03:27:30 <elliott> oerjan: that is awesome omg
03:27:36 <oerjan> this would explain why that supernova didn't show the effect
03:27:40 <elliott> oerjan: they are like "whoops"
03:27:43 <elliott> and
03:27:45 <elliott> fall back in time
03:28:01 <oerjan> (because it's not cumulative over huge distance)
03:28:27 <evincar> elliott: You could also just create a branch called "stash", check your files into it, do what you need to do, then merge.
03:29:46 -!- azaq231 has joined.
03:30:07 <zzo38> Did you try to play any of the addition CGA Collection games I have posted today?
03:31:00 <zzo38> I don't know a lot about neutrinos
03:31:29 -!- azaq23 has quit (Ping timeout: 245 seconds).
03:39:36 <zzo38> Can you win a pachinko game if the manager tries very hard to stop anyone from winning, by manipulating the tilt of the building by telling someone else to put large cans of water on the top floor, and putting a lot of balls at once that get stuck, so that when you load a few more, there is no place to go except falling in the winning hole?
03:40:10 <elliott> oerjan: I wonder if anyone thought of that
03:40:13 <elliott> oerjan: it sounds like a pretty good theory
03:40:44 <oerjan> elliott: i'm thinking of a snag though... 60 ns in which reference frame?
03:41:05 <elliott> oerjan: presumably the reference frame of the measuring equipment :P
03:41:23 <oerjan> or equivalently, what in the neutrino rest frame?
03:41:55 <oerjan> the measuring equipment frame seems a little arbitrary
03:42:20 <elliott> oerjan: Arbitrary, but also the only frame it's practical to measure in :P
03:42:40 <oerjan> er i mean, it would be 60 ns in that frame, of course, but that's not a _fundamental_ frame for the neutrino
03:44:11 <oerjan> food ->
03:46:11 <elliott> oerjan: on a completely unrelated note, I wish there was something like
03:46:23 <elliott> classInstance :: TypeRep -> ClassRep -> Maybe InstanceRep
03:46:25 <elliott> so you could do
03:48:39 <elliott> maybeShow :: (Typeable a) => a -> Maybe String
03:48:39 <elliott> maybeShow x
03:48:39 <elliott> | Just ins <- maybeIns = Just (instanceApply ins show x) -- or something
03:48:39 <elliott> | otherwise = Nothing
03:48:39 <elliott> where maybeIns = classInstance (typeOf x) (...some way to denote the Show class...)
03:50:15 <oerjan> didn't jhc have a representation where you could actually get classes from types from values it runtime
03:50:23 <oerjan> (vague recall)
03:55:47 -!- myndzi has joined.
03:57:45 <elliott> oerjan: dunno
03:57:50 <elliott> oerjan: but this is a pretty easy static thing, I think
03:58:01 <elliott> since it goes through the type
03:58:06 <elliott> so it just has to be the part of the TypeRep
03:58:12 <elliott> oh, hmm
03:58:19 <elliott> the problem is orphan instances and the like
03:58:24 <elliott> you can't really write a manual instance to do that
03:58:48 <elliott> maybe it should be class → list of typerep instances, then
03:59:00 <elliott> it's just a shame to not be able to do generic thing slike this
04:03:33 <elliott> 13:52:41: <CakeProphet> yes the mathematics of large numbers is essentially masturbation. One can keep going until exhaustion.
04:03:39 <elliott> there are slam dunks. like busy beaver
04:04:14 <elliott> 14:03:53: <Phantom_Hoover> "The Humane Society of the United States and other animal welfare groups denounced the cloning, saying that the $50,000 could have been better used to save some of the millions of animals euthanized each year." — http://en.wikipedia.org/wiki/Little_Nicky_(cat)
04:04:14 <elliott> hmph
04:05:53 <zzo38> Perhaps that is correct. However, due to the government, that is impossible (I don't mean illegal; I mean impossible)
04:06:42 <oerjan> http://www.reddit.com/r/science/comments/kol1x/faster_than_light_neutrinos_not_so_fast/c2m0vam seemed to have a similar idea :)
04:06:49 <elliott> 15:09:19: <Deewiant> "Say what you will about D, the compiler is very well implemented." --proggit
04:06:51 <elliott> Deewiant: Which one :P
04:07:55 <zzo38> I noticed some things about my barrier monad implementation: rebind yield = id head . collect = collect . flip continue ()
04:09:58 <zzo38> Oops! I am wrong. tail . collect = collect . flip continue ()
04:12:24 <zzo38> Should the arguments to continue be the other way around?
04:12:36 <elliott> :t continue
04:12:37 <lambdabot> Not in scope: `continue'
04:12:40 <elliott> dunno
04:12:44 <elliott> ?hoogle continue
04:12:45 <lambdabot> Network.HTTP.Base Continue :: ResponseNextStep
04:13:02 <zzo38> I mean the "continue" in my BarrierMonad module.
04:13:09 -!- FireFly has quit (Ping timeout: 245 seconds).
04:13:22 <elliott> I don't know that module :P
04:16:43 <evincar> Okay, if you downloaded a game development environment, what would you expect for distribution capabilities?
04:17:08 <evincar> Like, standalones, or would standalones that automatically download and install a Steam-esque runtime be okay?
04:17:50 <evincar> I think the Digital Mars one would be the default referent in any discussion of "the D compiler".
04:18:02 <evincar> The LLVM frontend is, well, an LLVM frontend.
04:18:11 <zzo38> I think it should be virtual machine (possibly JIT), with a single includable executable to do it
04:18:14 <evincar> And then there's the other one I forget about.
04:18:32 <evincar> zzo38: I was thinking of going for something like that.
04:18:39 -!- FireFly has joined.
04:18:43 <evincar> The user downloads an executable which is really stub+payload.
04:18:53 -!- oerjan has quit (Quit: Good night).
04:18:56 <evincar> And the stub checks for an installed VM and runs the payload if a VM is available.
04:19:05 <evincar> Or downloads and installs the VM otherwise.
04:19:23 <zzo38> I think the executable should be the stub and the payload in a separate file in the same directory.
04:19:43 <evincar> No, a single file is better for user experience.
04:19:55 -!- shachaf has joined.
04:19:56 <evincar> The payload can always be extracted into the installation directory of the VM anyway.
04:20:02 <evincar> Like a Steam game.
04:20:29 <evincar> A game would constitute a (possibly compressed) archive or filesystem image.
04:20:34 <zzo38> Well, OK; if the payload can be extracted then it can work, so that the user can possibly make it running on other operating system or whatever else you want to do with it
04:20:49 <zzo38> I don't know how Steam games are loaded.
04:20:57 <evincar> Yeah, I'd be going for OS-independence...
04:21:14 <evincar> Steam games are stored in what are essentially disk images.
04:21:19 <evincar> Very brief ones. :P
04:21:32 <evincar> They have an internal hierarchical structure with whatever resources the game needs.
04:21:46 <evincar> Plus tons of error-checking and what have you.
04:21:51 <evincar> I don't recall the specifics.
04:22:05 <zzo38> I suppose it can be a Windows executable, but extractable in any operating system, but you would install the VM manually in those cases.
04:22:45 <zzo38> elliott: This is BarrierMonad module in case you interested (or to answer my question): http://sprunge.us/EQPb
04:23:09 <evincar> Right, or just "bundle OS-independent game file requiring preinstalled VM" versus "bundle OS-specific game file that installs VM if needed".
04:23:45 <zzo38> Yes, do whatever works for you.
04:24:06 <elliott> zzo38: fmap = liftM also works
04:24:32 <evincar> I'm considering possible things to sell to make some extra pocket change during my grad studies.
04:24:41 <evincar> And for some reason a game platform seems like a good idea.
04:24:44 <zzo38> elliott: OK, I fixed that
04:24:46 <evincar> Even though rationally I would assume it isn't.
04:25:13 <elliott> although you might need to import Control.Monad... not sure
04:25:45 <zzo38> Works without that.
04:26:08 <elliott> ok
04:26:13 <monqy> Control.Monad.Reader exports Control.Monad yeah
04:26:28 <elliott> it would be cool to see implementations of the other examples you gave, overridable I/O, state, flow control
04:26:38 <Madoka-Kaname> You can have modules implicitly import other modules?
04:26:46 <monqy> zzo38: what do you use from Control.Monad.Reader, anyway?
04:27:03 <zzo38> evincar: Of course you can also make a game as a .nes or .gba file or whatever; this is sometimes (although rarely) done.
04:27:28 <zzo38> monqy: Oops! Nothing. I could put Control.Monad instead.
04:27:34 <zzo38> OK I fixed that, and it works.
04:27:58 <evincar> zzo38: My software wouldn't really be able to do that; it's too high-level to conveniently compile, so I might as well just have a specialised VM.
04:29:21 <zzo38> evincar: There are many cross-platform formats implementable for computer games, such as emulators for older Nintendo systems, and Z-machine, Glulx, Java, or KINT (the license for KINT says public domain once author is dead; otherwise permission is required for anything done with it).
04:31:45 <zzo38> (NES games are still made today; mostly to run on emulators, although they are generally intended to work on actual NES/Famicom hardware, and Famiclones, as well)
04:32:09 <elliott> :')
04:33:55 <elliott> :t truncate
04:33:56 <lambdabot> forall a b. (RealFrac a, Integral b) => a -> b
04:34:36 <elliott> > truncate (-9.9)
04:34:37 <lambdabot> -9
04:34:38 <elliott> good
04:37:32 <zzo38> elliott: Yes, I could implement otherr example; overridable I/O could be done having the front type representing the atoms of actions to perform and back type representing the results. Now you can override it by other functions outside of there, such as implementing your own fake I/O, or using convert and/or rebind to change the actions a given I/O has already been made, to perform differently.
05:24:56 -!- copumpkin has changed nick to Daaan__.
05:25:09 -!- Daaan__ has changed nick to Daaaan_.
05:25:19 -!- Daaaan_ has changed nick to Daaaaan.
05:26:05 -!- Daaaaan has changed nick to daaaaaaaaaaaan.
05:29:19 -!- daaaaaaaaaaaan has changed nick to copumpkin.
05:33:29 -!- cheater has joined.
05:40:10 -!- evincar has quit (Quit: ChatZilla 0.9.87 [Firefox 6.0.2/20110902133214]).
05:45:14 -!- GreaseMonkey has quit (Quit: The Other Game).
05:55:37 -!- cheater has quit (Ping timeout: 248 seconds).
06:00:49 -!- cheater has joined.
06:16:57 -!- copumpkin has quit (Ping timeout: 248 seconds).
06:17:23 -!- copumpkin has joined.
06:55:44 -!- CakeProphet has joined.
07:10:11 -!- ive has quit (Quit: leaving).
07:23:46 -!- FireFly has quit (Ping timeout: 256 seconds).
07:25:55 -!- Ngevd has joined.
07:26:01 <Ngevd> Hello!
07:27:06 <zzo38> I decided to make the examples not exported. So, they will be used only with GHCi. When compiled normally, will they be optimized out?
07:29:52 <zzo38> I also put each example in chapter with "Example" in its title.
07:47:21 <Ngevd> The arrows are going to be fun in Uniquode
07:48:36 <elliott> :t randomR
07:48:36 <lambdabot> forall a g. (Random a, RandomGen g) => (a, a) -> g -> (a, g)
07:50:13 <elliott> monqy: i had...ide...a
07:50:27 <monqy> is it good? I was just abotu to slep
07:51:15 <Ngevd> Mahjong tiles are going to be even more fun
07:52:12 <Ngevd> I think Fraction literals should be dominos
07:52:23 <elliott> monqy: it...good...think
07:53:07 <monqy> Ngevd: dominoes as in they collapse in trains?
07:53:29 <Ngevd> That will be horizontal-oriented dominoes
07:53:38 <Ngevd> Vertical-oriented dominoes will be fractions
07:53:51 <monqy> ah
07:54:01 <monqy> oh I interprted what you saifc backwards
07:54:04 <monqy> it makes sense nwo
07:54:16 <elliott> monqy: it was about... orthogonal effects...
07:54:33 <monqy> orhtoganlo efects ias a god idea!!
07:54:34 <Ngevd> So, 3 7ths will be 🁷
07:55:16 <Ngevd> BECAUSE YOU ADD ONE TO THE TOP AND BOTTOM TO PREVENT DIVIDE BY ZERO ERRORS
07:55:17 <elliott> monqy: basically, lots of monad transformers are composable on top of each other where the order doesn't matter
07:55:31 <elliott> basically everything that offers "imperative program but with <effect>" does this
07:55:32 -!- Ngevd has changed nick to Taneb|Hovercraft.
07:55:52 <elliott> monqy: but the problem is that large transformer stacks suck...
07:55:55 <elliott> so
07:56:08 <monqy> this ia ll true....
07:56:13 <elliott> foo :: String -> Int -> M (Accesses Int, Produces String) Int
07:56:19 <elliott> that's like ReaderT String (WriterT Int Int)
07:56:22 <elliott> erm
07:56:24 <elliott> that's like ReaderT String (Writer Int Int)
07:56:37 <elliott> to run it, you do
07:56:57 <elliott> run . eraseProduces . eraseAccesses initialValue $ foo "" 9
07:57:01 <elliott> :: M () (Int, [String])
07:57:11 <elliott> because
07:57:12 <elliott> eraseAccesses :: (Has (Accesses s) e) => s -> M e a -> M (Erase (Accesses s) e) a
07:57:12 <elliott> eraseProduces :: (Has (Produces s) e) => M e a -> M (Erase (Produces s) e) (a, [s])
07:57:15 <elliott> and
07:57:17 <elliott> run :: M () a -> a
07:57:34 <elliott> now, the nice thing is that you can offer "subsets" of IO and the like through this
07:57:36 <elliott> like an RNG effect
07:57:52 <elliott> and you can either erase RNG to the AnyIO effect (which is runnable with "runAnyIO :: M AnyIO a -> IO a")
07:57:53 <elliott> or do
07:57:55 <elliott> unsafeEraseRNG
07:58:03 <elliott> to erase it completely (unsafely), like unsafePerformIO but more restricted
07:58:11 <elliott> (it can only unsafely run functions on the global RNG)
07:58:23 <elliott> and then.... more things... like this
07:58:30 <monqy> whats an erase
07:58:32 <elliott> it might be good?????
07:58:39 <elliott> monqy: like runFooT
07:58:41 <elliott> it eliminates part of the stack
07:58:44 <monqy> oh
07:58:46 <elliott> <elliott> eraseAccesses :: (Has (Accesses s) e) => s -> M e a -> M (Erase (Accesses s) e) a
07:58:48 <elliott> this basically means
07:58:50 <elliott> given an s
07:58:50 <elliott> and an
07:58:56 <elliott> M (..., Accesses s, ...) a
07:58:58 <elliott> we can turn it into
07:59:01 <elliott> M (..., ...) a
07:59:14 <elliott> and once you get rid of all the effects in the stack you have (M () a)
07:59:19 <elliott> and you just "run" that off into an a
07:59:41 <elliott> it's like a monad transformer stack but much more composable, predictable, orthogonal, componentised, blah bla blah
07:59:43 <elliott> s/bla/blah/
07:59:49 <monqy> good thigns....
08:00:24 <monqy> is it implemenmtatble in haskele
08:00:34 <elliott> i believe so.
08:00:40 <monqy> also good
08:01:07 <elliott> it'd be cleaner as a core language feature type thing, some kind of effect system
08:01:11 <elliott> but I think this is all doable in current Haskell
08:01:42 -!- Taneb|Hovercraft has changed nick to Ngevd.
08:02:08 <elliott> monqy: the main nice thing is that you can split up the IO "sin bin" a bit
08:02:20 <elliott> by offering an interface to various impure things like stablenames through a new effect
08:02:29 <elliott> and then provide standard erasure to the AnyIO effect
08:02:32 <elliott> and an unsafe erasure which just gets rid of it
08:02:33 -!- Ngevd has quit (Remote host closed the connection).
08:02:47 <monqy> splitting up the sin bin like that reminds me a bit of ST
08:03:00 <elliott> (you could just compose unsafe erasure of AnyIO (i.e. unsafePerformIO) with the safe erasure, but that means you're importing the unsafely-erase-AnyIO module)
08:03:09 <elliott> (and with things like SafeHaskell, that's a no-no :P)
08:03:16 <elliott> monqy: yeah, I think you can do ST as an effect, but don't quote me on that
08:03:24 <elliott> ST has the nice advantage that it's pure
08:04:46 <monqy> so how does this effect splieting work,,, is it necesarilye handled as a core langauge thing?
08:05:04 <elliott> monqy: i'm not sure what you mean, how does it work
08:05:05 -!- Ngevd has joined.
08:05:07 <monqy> oh
08:05:08 <elliott> I thought I explained the main aspects
08:05:22 <monqy> i meant specificalyl with the io sin bin
08:05:25 -!- Ngevd has quit (Client Quit).
08:05:36 <elliott> monqy: you just represent it as IO and don't export the constructor
08:05:42 <monqy> oh
08:05:54 <elliott> safe erasure is just unwrapping the constructor (modulo the effect system), unsafe erasure is just unsafePerformIO on top of that
08:06:22 <elliott> and you know that unsafely erasing an (M RNG a) can't have any unsafe side-effects other than using and mutating the global RNG
08:06:30 <elliott> which is a much stronger guarantee than unsafePerformIO gets you :P
08:11:33 <monqy> sounds good i guess
08:11:36 -!- monqy has quit (Quit: hello).
08:28:24 -!- Phantom_Hoover has joined.
08:30:06 -!- CakeProphet has quit (Ping timeout: 255 seconds).
08:34:37 -!- Vorpal has joined.
08:55:35 -!- elliott has quit (Remote host closed the connection).
08:55:39 -!- elliott_ has joined.
09:02:45 -!- cheater has quit (Quit: Ex-Chat).
09:03:38 -!- cheater has joined.
09:05:28 -!- azaq231 has quit (Quit: Leaving.).
09:08:38 <Phantom_Hoover> `addquote elliott i smell of poo
09:08:42 <HackEgo> 682) elliott i smell of poo
09:08:46 <elliott_> <Phantom_Hoover> elliott i smell of poo
09:09:18 <elliott_> Fascism:
09:09:19 <elliott_> `delquote 682
09:09:21 <HackEgo> ​*poof*
09:12:35 <Phantom_Hoover> OMFG
09:12:38 <Phantom_Hoover> Simon's skin
09:12:39 <Phantom_Hoover> has
09:12:52 <Phantom_Hoover> a dorf smiley on the top of the hat
09:13:11 <elliott_> o;h my god
09:16:58 -!- SimonRC has quit (Ping timeout: 260 seconds).
09:18:32 -!- SimonRC has joined.
09:52:40 <Phantom_Hoover> What is this crap you can't even use FTL for straight time travel.
09:52:49 <elliott_> What why not.
09:52:55 <elliott_> That's bad fix that?
09:53:36 <Phantom_Hoover> elliott_, you need to have a reflector and something and something else.
09:53:50 <Phantom_Hoover> And basically you can't just fire a giant neutrino laser into the past.
09:53:59 <elliott_> Fuck
09:53:59 <elliott_> that
09:54:00 <elliott_> shit
09:54:09 -!- nooga has joined.
10:06:22 <hagb4rd> Phantom_Hoover: how fast can we make them go (the netrinos)?
10:06:41 <elliott_> hagb4rd: About sixty ns faster than they should be able to.
10:06:48 <elliott_> ...modulo the fact that it's probably not true.
10:06:56 <elliott_> But the margin of error has been fixed very, very low.
10:07:00 <elliott_> /Something/ is up.
10:07:01 <hagb4rd> i see
10:11:11 <elliott_> Does anyone have a good name for a combination of yaw and pitch?
10:11:13 <elliott_> Literally just a tuple of 'em.
10:11:17 <elliott_> fizzie? :p
10:11:47 <fizzie> I don't know. Something related to "direction"? That's what it's indicating.
10:12:03 <hagb4rd> bpitch
10:12:05 <fizzie> Or, well, that's what it's usually indicating, anyhow.
10:12:12 <elliott_> fizzie: Yes, true. But then what if you add roll? WHAT THEN????
10:12:15 <fizzie> "yatch", "paw".
10:12:22 <elliott_> PH already said those. :p
10:12:22 <fizzie> Then it's "orientation".
10:13:24 <elliott_> Right.
10:13:34 <fizzie> A vague term if there ever was one. :p
10:17:11 -!- zzo38 has quit (Remote host closed the connection).
10:18:43 <hagb4rd> question: if the would explode, would there be any effects mesasurable on earhh during th first 8 minutes (event horizon)
10:18:54 <hagb4rd> if the sun
10:21:18 <elliott_> I think gravity goes FTL because it's spacetime magic.
10:21:26 <elliott_> Think. I might be totally wrong here.
10:21:31 <elliott_> Not lightwise or anything, of course.
10:22:01 <elliott_> Yeah, gravity is instant, it seems.
10:22:29 <hagb4rd> yea, thats the direction my question goes.. so gravity is not dependent on the barriers of lightspeed, rightz?
10:23:06 <elliott_> Hmm, it still propagates with a delay apparently
10:23:07 <hagb4rd> its effects
10:23:12 <elliott_> s/apparently/apparently./
10:23:18 <elliott_> Meh, this is way beyond my knowledge.
10:23:33 <elliott_> But the answer is almost certainly no, you can't use gravity to communicate faster than light :P
10:23:46 <hagb4rd> i guess its beyond the knowledght of humanity.. but there may be theories
10:26:42 <hagb4rd> superposition and EPR is interesting
10:26:43 <hagb4rd> http://en.wikipedia.org/wiki/EPR_paradox
10:27:08 <hagb4rd> though old stuff but still ass kickin
10:31:09 <elliott_> fizzie: Sigh. Some of the protocol is sent as "rotation, pitch, roll"; some of it as "yaw, pitch". Er, wait, that's just the fault of the documenters...
10:31:13 <elliott_> DISREGARD THAT
10:31:36 <fizzie> But do you suck cocks?
10:31:45 <elliott_> Only wrt my disregardation.
10:33:52 <elliott_> fizzie: I don't suppose you happen to know about the two different packed byte formats for yaw and pitch.
10:34:34 <fizzie> There are two?
10:34:54 <elliott_> One in steps of 2pi/256, one as a fraction of 360.
10:35:05 <elliott_> (And maybe the "packed byte" format is a third format altogether? The wiki never says what it is.)
10:35:13 <augur> elliott_: cheater doesnt like you :)
10:36:13 <elliott_> augur: I don't think we need to start drama with him here in the channel; if you're talking about the thing in #haskell then you already know what you'll cause by saying things like that.
10:36:28 <augur> i dont even know! all i know is its funny
10:37:08 <fizzie> elliott_: I know that the pickup_spawn uses (IIRC) angles in units of what I like to call brads (cf. the gradian; 2pi... sorry, tau == 256 brads), I don't know what that other thing is about.
10:37:35 <elliott_> fizzie: Brads. Really now?
10:37:47 <fizzie> It's 'b' for 'byte', you see.
10:37:49 <elliott_> Yaw byte126 The X Axis rotation as a fraction of 360
10:37:49 <elliott_> Pitch byte0 The Y Axis rotation as a fraction of 360
10:38:04 <elliott_> Whereas:
10:38:05 <elliott_> Yaw byte-27 The X Axis rotation in steps of 2π/256
10:38:05 <elliott_> Pitch byte0 The Y Axis rotation in steps of 2π/256
10:38:19 <fizzie> I would not be surprised if that were the same thing.
10:38:39 <elliott_> fizzie: Are you saying that 2π = 360?
10:38:54 <elliott_> Or are you saying that it just only /steps/ in those increments as to what the Notchian server/client sends?
10:39:09 <fizzie> I'm saying that 2pi rad = 360 degrees.
10:39:13 <elliott_> Oh, hmm.
10:39:19 <elliott_> "As a fraction of 360" is so silly.
10:39:25 <fizzie> Yes, it is BAD.
10:39:33 <elliott_> I mean, that should make some of the degrees that are degrees unrepsrespresntable.
10:40:00 <hagb4rd> y 360 anyway?
10:40:09 <elliott_> Degrees.
10:40:13 <hagb4rd> yes
10:40:32 <hagb4rd> is there a reason for 360
10:40:53 <fizzie> "The original motivation for choosing the degree as a unit of rotations and angles is unknown. One theory states that it is related to the fact that 360 is approximately the number of days in a year.[3] Ancient astronomers noticed that the stars in the sky, which circle the celestial pole every day, seem to advance in that circle by approximately one-360th of a circle, i.e., one degree, each day. Some ancient calendars, such as the Persian calendar, used 360 da
10:40:54 <fizzie> ys for a year. The use of a calendar with 360 days may be related to the use of sexagesimal numbers."
10:41:02 <fizzie> There are alternative ideas, too.
10:41:15 <fizzie> It's a very divisible number, that much is true.
10:41:21 <hagb4rd> would make kind of sence
10:42:23 <elliott_> 360 is such a number.
10:42:52 <hagb4rd> at least you it has a few nice factors
10:43:14 <hagb4rd> indeed 12 would make better base than 10
10:46:17 <hagb4rd> divide and conquer
10:47:17 <elliott_> MC/Protocol/Types.hs:209:50: Not in scope: type variable `dreiving'
10:47:23 <elliott_> Whoops. Never drink and dreive.
10:50:29 <elliott_> fizzie: You can represent all those packed values precisely as a float, right? :p
10:50:31 <elliott_> SO MUCH PARANOIA.
10:51:04 <fizzie> Very likely.
10:51:13 <elliott_> NOT GOOD ENOUGH
10:51:23 <elliott_> fizzie: (So they're unsigned bytes, right?)
10:52:13 <fizzie> Possibly, though I don't think it really matters; -1 brad is pretty much the same thing as 255 brad.
10:52:29 <elliott_> "Additionally, yaw is not clamped to between 0 and 360 degrees; any number is valid, including negative numbers and numbers greater than 360." Just why.
10:52:56 <elliott_> where getComponent = (/ 360) . fromIntegral . SE.getWord8
10:52:57 <elliott_> LOOKS GOOD TO ME
10:53:52 <elliott_> Or, hmm.
10:53:56 <elliott_> Is that actually right?
10:54:04 <elliott_> I don't think it is, no.
10:54:22 <elliott_> I want 256/360.
10:54:49 <elliott_> where getComponent = (/ 360) . (* 256) . fromIntegral . SE.getWord8
10:54:52 <elliott_> LOOKS GOOD TO ME???
10:55:06 <fizzie> If the original Word8 is in brads, you want (/ 256) to make it [0, 1], and then eiher (* 360) or (* (2 * pi)) to make it degrees or rads.
10:55:13 <elliott_> Er, right, wrong way around >_<
10:55:19 <fizzie> Well, [0, 1) I guess.
10:55:21 <elliott_> I'm making it degrees, since that's what the float fields in the protocol are.
10:55:48 <elliott_> where getComponent = (/ 256) . (* 360) . fromIntegral . SE.getWord8
10:55:51 <elliott_> FINALLY LOOKS GOOD TO ME
10:56:14 <fizzie> The yaw field is the one that collects all the rotation the object ever goes through.
10:56:25 <elliott_> I thought that was fixed.
10:56:30 <fizzie> Oh, it was?
10:56:34 <fizzie> Could be, I haven't been following.
10:56:34 <elliott_> Well, I thougth so.
10:56:36 <elliott_> thought
11:03:21 -!- BeholdMyGlory has joined.
11:04:54 <Vorpal> elliott_, you might need to turn it into radians to be able to do sane calculations on where the player is looking later on (if you need that sort of stuff).
11:05:08 <elliott_> I'm sticking to just mapping the protocol as best as I can for now.
11:05:41 <Vorpal> elliott_, but are you normalising it to 0-360 at least?
11:07:50 <elliott_> Vorpal: No. I'm not losing any data from the packets.
11:07:54 <elliott_> It is a representation of the network protocol.
11:28:58 -!- hagb4rd has quit (Ping timeout: 248 seconds).
11:32:25 <Phantom_Hoover> What are the haps my friends.
11:34:52 <elliott_> Happity.
11:45:00 -!- augur has quit (Remote host closed the connection).
11:53:18 -!- hagb4rd has joined.
11:53:58 <hagb4rd> hurray! finally i've found some serious footage on the apollo mission
11:54:00 <hagb4rd> http://www.youtube.com/watch?v=_ecBbSIdBKI&NR=1
11:55:01 <elliott_> Is this just a reading of the Onion article.
11:55:28 <hagb4rd> onion article?
11:56:25 <elliott_> http://members.shaw.ca/rlongpre01/moon.html
11:56:45 <hagb4rd> ah thx
12:03:32 -!- augur has joined.
12:16:20 -!- CakeProphet has joined.
12:17:03 <CakeProphet> lolhi
12:17:36 <CakeProphet> elliott_: hi
12:17:42 <elliott_> hi
12:17:51 <CakeProphet> man being drunk is cool
12:17:53 <CakeProphet> weeeeeee
12:17:57 <elliott_> oh no
12:18:00 <CakeProphet> bluh bluhbluhbluh
12:18:04 <elliott_> be in
12:18:07 <elliott_> another place
12:18:12 <CakeProphet> OKAY FINE
12:18:17 <CakeProphet> I won't act drunk like I am.
12:18:38 <CakeProphet> I will maintain my usual demeanor of serene austerity.
12:20:23 <CakeProphet> bluh.
12:21:09 <CakeProphet> oh my I believe I feel the beginniong of what is referred to as a hahgnover
12:21:23 <CakeProphet> time to drink water
12:21:28 <Phantom_Hoover> No
12:21:29 <CakeProphet> gluhgluhgluh
12:21:32 <Phantom_Hoover> drink more alcohol
12:21:38 <Phantom_Hoover> DROWN THE HANGOVER
12:23:15 <CakeProphet> apparently it's not common knowledge that water = hangover cure
12:23:27 <CakeProphet> apparently people can be stupid
12:23:31 <CakeProphet> I'm shocked.
12:28:30 <CakeProphet> elliott_: you, sir. what are you doing.
12:29:09 <elliott_> coding
12:29:56 <CakeProphet> what
12:30:38 <elliott_> coding
12:30:47 <CakeProphet> as in, "coding what?"
12:30:55 <elliott_> stuff
12:31:01 <CakeProphet> oh good
12:31:04 <CakeProphet> stuff is good for codes.
12:31:58 <fizzie> STUFF is the BEST.
12:32:10 <CakeProphet> stuff is the best codes.
12:32:35 <CakeProphet> coding the stuff makes the best codes for the stuff.
12:36:39 -!- Patashu has quit (Quit: MSN: Patashu@hotmail.com , Gmail: Patashu0@gmail.com , AIM: Patashu0 , YIM: patashu2 .).
13:02:04 -!- MSleep has changed nick to MDude.
13:15:15 -!- sllide has joined.
13:16:41 <nooga> goddamn clang on OSX
13:17:34 <elliott_> goddamn os x
13:31:31 -!- ais523 has joined.
13:41:39 <elliott_> hi ais523
13:41:45 <ais523> hi elliott_
14:03:54 <elliott_> Aw, nobody even noticed my haskell question. :/
14:05:17 <elliott_> I choose to blame... ais523.
14:05:46 -!- ais523 has quit (Ping timeout: 248 seconds).
14:05:52 -!- sllide has quit (Read error: Connection reset by peer).
14:05:54 <elliott_> Dammit.
14:08:35 -!- sebbu2 has changed nick to sebbu.
14:09:08 -!- asiekierka has joined.
14:09:10 <asiekierka> i was bored: http://ego.64pixels.org/
14:11:34 -!- Wamanuz has quit (Remote host closed the connection).
14:17:16 -!- asiekierka has quit (Ping timeout: 276 seconds).
14:18:29 -!- asiekierka has joined.
14:48:32 <elliott_> > let foo = map (\x -> map (x:) foo) ['a'..'z']
14:48:33 <lambdabot> not an expression: `let foo = map (\x -> map (x:) foo) ['a'..'z']'
14:48:33 <elliott_> > let foo = map (\x -> map (x:) foo) ['a'..'z'] in foo
14:48:34 <lambdabot> Couldn't match expected type `GHC.Types.Char'
14:48:35 <lambdabot> against inferred type...
14:48:37 <elliott_> > let foo = map (\x -> concatMap (x:) foo) ['a'..'z'] in foo
14:48:38 <lambdabot> ["aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa...
14:48:41 <elliott_> heh
14:48:46 <elliott_> > let foo = ['a'..'z'] map (\x -> concatMap (x:) foo) foo in foo
14:48:47 <lambdabot> Couldn't match expected type `t1 -> t2 -> t3 -> t'
14:48:47 <lambdabot> against inferred...
14:48:54 <elliott_> > let foo = map (:[]) ['a'..'z'] ++ map (\x -> concatMap (x:) foo) foo in foo
14:48:55 <lambdabot> Couldn't match expected type `GHC.Types.Char'
14:48:55 <lambdabot> against inferred type...
14:49:00 <elliott_> > let foo = map (:[]) ['a'..'z'] ++ map (\x -> map (x:) foo) foo in foo
14:49:00 <lambdabot> Couldn't match expected type `GHC.Types.Char'
14:49:01 <lambdabot> against inferred type...
14:49:04 <elliott_> > let foo = map (:[]) ['a'..'z'] ++ map (\x -> map (x++) foo) foo in foo
14:49:05 <lambdabot> Couldn't match expected type `GHC.Types.Char'
14:49:05 <lambdabot> against inferred type...
14:49:07 <elliott_> > let foo = map (:[]) ['a'..'z'] ++ map (\x -> concatMap (x++) foo) foo in foo
14:49:09 <lambdabot> ["a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s...
14:49:14 <elliott_> > let foo = map (:[]) ['a'..'z'] ++ concatMap (\x -> map (x++) foo) foo in foo
14:49:16 <lambdabot> ["a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s...
14:49:18 <elliott_> > let foo = map (:[]) ['a'..'z'] ++ concatMap (\x -> map (x++) foo) foo in drop 99 foo
14:49:20 <lambdabot> ["aaav","aaaw","aaax","aaay","aaaz","aaaaa","aaaab","aaaac","aaaad","aaaae"...
14:49:25 <elliott_> hm
15:21:26 -!- sebbu2 has joined.
15:21:30 -!- sebbu has quit (Ping timeout: 248 seconds).
15:23:29 -!- sebbu2 has changed nick to sebbu.
15:32:01 <elliott_> Phantom_Hoover: oi, solve my haskell problem.
15:32:57 <Phantom_Hoover> It is fixed.
15:34:09 <elliott_> OK thakns.
15:36:04 -!- ais523 has joined.
15:36:58 <elliott_> hi ais523
15:37:11 <elliott_> I blamed you for my Haskell problem then you left, and it didn't got fixed :'(
15:37:13 <ais523> hi elliott_
15:37:30 <ais523> I didn't leave, the computer crashed (overheating because I forgot to unstick the fan)
15:37:36 <ais523> then I went shopping
15:37:38 <elliott_> it was my curse
15:37:49 <elliott_> I didn't damn you but I evidently cursed you
15:38:13 <ais523> hmm
15:38:18 <ais523> depends on what sort of curse it was, I suppose
15:38:46 <elliott_> a Haskell one, obviously
15:45:29 -!- tiffany has quit (Ping timeout: 260 seconds).
15:51:42 -!- tiffany has joined.
15:56:11 <Gregor> Conclusion:
15:56:17 <Gregor> Haskell kills computer fans.
15:56:35 <elliott_> Clearly.
16:10:10 -!- Ngevd has joined.
16:10:17 <Ngevd> Hello!
16:11:30 <ais523> hi
16:13:28 <Ngevd> I cut my finger this morning
16:14:00 <elliott_> rip
16:14:16 -!- sllide has joined.
16:17:03 <elliott_> ?hoogle (m a, m b) -> m (a,b)
16:17:03 <lambdabot> No results found
16:17:36 -!- derrik has joined.
16:20:36 -!- Ngevd has quit (Quit: Taneb|Walkingdoor).
16:34:00 -!- derrik has quit (Quit: ChatZilla 0.9.87-rdmsoft [XULRunner 1.9.0.17/2009122204]).
16:40:27 <fizzie> :t uncurry $ liftM2 (,)
16:40:28 <lambdabot> forall a1 a2 (m :: * -> *). (Monad m) => (m a1, m a2) -> m (a1, a2)
16:40:57 <fizzie> I need a dislike button for ":t doen't work in query".
16:42:21 <elliott_> fizzie: ?ty
16:42:26 <elliott_> And yeah, I knew that.
16:42:41 <elliott_> (equiv. @ty, @type.)
16:43:42 <elliott_> So does anyone know a better way to do effectively a "git stash" but then only partially re-apply the changes?
16:43:44 <elliott_> git add -p style
16:44:04 <elliott_> I want to incrementally migrate the current branch head to my working copy by making commits of slightly modified versions of parts of my working tree.
16:44:38 <fizzie> Ty for ?ty.
16:45:06 <elliott_> Yw for ?yw.
16:45:07 <elliott_> ?yw x
16:45:07 <lambdabot> Couldn't find fortune file
16:45:10 <elliott_> Ah.
16:45:16 <elliott_> fizzie: Now in return you must git-help me.
16:45:42 <Deewiant> git stash -p?
16:48:23 <elliott_> Deewiant: That's just for stashing.
16:48:28 <elliott_> I want to stash everything then selectively /apply/ it.
16:48:40 -!- derrik has joined.
16:48:47 <Deewiant> Why can't you first selectively stash, then apply everything
16:48:49 <elliott_> Basically I want to shove all my changes out of the way, then iteratively: pick part of stash → tweak it → commit → repeat.
16:48:58 <elliott_> Deewiant: What would that workflow look like?
16:49:04 <elliott_> Determining each chunk ahead of time?
16:49:18 <Deewiant> You're doing it effectively at the same time
16:49:21 <elliott_> That would be awkward, since decisions made at each point during the modification process would affect the decision of which next thing I'd do or how to split it up.
16:49:25 -!- derrik has quit (Client Quit).
16:49:30 <Deewiant> Instead of stash, checkout, repeatedly do stuff
16:49:37 <Deewiant> Well o'kay
16:49:52 <elliott_> Last time I just git diff'd, git reset'd, and then manually re-applied everything
16:49:55 <elliott_> But that's awkward
16:50:12 <Deewiant> Then you can do one stash -p and one stash and then when you've applied that part, do it again
16:50:12 <elliott_> git apply doesn't seem to have anything to do hunk selection.
16:50:24 <elliott_> Deewiant: I want to operate starting on a clean working tree.
16:50:28 <elliott_> So everything must be stashed before I can start.
16:50:44 <elliott_> And like I said, picking the splits ahead of time is inconvenient.
16:50:53 <Deewiant> You're not doing it ahead of time there
16:50:59 <elliott_> Maybe I misunderstand
16:51:10 <elliott_> git stash -p requires me to select chunks, no?
16:51:18 <Deewiant> You're doing a new stash -p every time after you commit the previous one
16:51:33 <elliott_> Hmm
16:51:34 <elliott_> So
16:51:59 <elliott_> Git stash, loop { git stash apply, git stash -p, select everything BUT the things I want to commit, tweak, commit }?
16:52:07 <elliott_> That works, but it's rather intuitive that no means yes and yes means no
16:52:10 <elliott_> s/intuitive/un/
16:52:53 <Deewiant> I was thinking loop { git stash -p, git stash, apply the -p'd one, tweak, commit, go back to where you were and apply the non-p'd one }
16:53:11 <elliott_> Hmm
16:53:13 <elliott_> That could work, yes
16:53:17 <elliott_> Why is git's workflow so ugly
16:53:20 <Deewiant> If I were you I'd just apply the whole stash and then git add -p it
16:53:30 <Deewiant> But that's just me
16:53:32 <elliott_> Deewiant: Doesn't even vaguely work, because I need to tweak it
16:53:38 <elliott_> I want to maintain a consistent state each commit
16:53:46 <elliott_> Not just have a seemingly split up sequence of commits that's actually just nonsense
16:53:47 <Deewiant> You can re-stash prior to every commit
16:53:58 <quintopia> oh
16:54:06 <elliott_> Deewiant: Won't work, my changes involve splitting a file into two new ones
16:54:21 <Deewiant> What does that break
16:54:44 <elliott_> Means that changes will be lost if I stash like that, or rather I won't be able to test my tweaks
16:55:48 <Deewiant> Howso
16:59:52 <elliott_> Deewiant: Maybe I'm misunderstanding
17:00:00 <elliott_> Apply the whole stash
17:00:02 <elliott_> Git add -p
17:00:05 <elliott_> Commit
17:00:06 <elliott_> Re-stash
17:00:06 -!- Ngevd has joined.
17:00:18 <elliott_> Where in this workflow am I able to test the tree about to be committed, sans all these merges and stuff
17:00:26 <elliott_> Or do I re-stash before every commit
17:00:27 <elliott_> OK, you said that
17:00:28 <Deewiant> Swap re-stash and commit
17:00:28 <elliott_> So
17:00:30 <elliott_> Apply the whole stash
17:00:33 <elliott_> Git add -p
17:00:34 <elliott_> Re-stash
17:00:35 <elliott_> Tweak
17:00:36 <elliott_> Commit?
17:00:51 <Deewiant> Yes, essentially
17:00:56 <elliott_> Essentially? :p
17:01:04 <Deewiant> I'd tweak before the stash in case you use something from there
17:01:12 <Deewiant> And then re-tweak afterwards if necessary
17:01:18 <elliott_> I don't understand
17:01:30 <elliott_> I have to tweak after stash because the post-stash-changes landscape is wildly different
17:01:40 <elliott_> So I can't really consult another file to figure out what to do unless I stash first
17:01:55 <Deewiant> Fair enough
17:02:04 <Deewiant> It doesn't really matter, that was just a detail :-P
17:02:16 <elliott_> Yeah OK I guess this will work
17:02:24 <elliott_> I still think git needs a better incremental splitting workflow though
17:02:45 -!- copumpkin has quit (Ping timeout: 245 seconds).
17:02:53 <elliott_> Basically "rip the selected hunks out of the stash and apply them"
17:02:54 <elliott_> Rip as in remove
17:03:07 <Deewiant> Maybe there is something like that, I just don't know about it.
17:03:10 -!- copumpkin has joined.
17:03:35 <elliott_> Maybe I'll write t :P
17:03:36 <elliott_> it
17:03:51 <elliott_> Deewiant: Now here's a question: Won't stash after add -p still stash the added changes?
17:03:59 <elliott_> Or does stash only stash stuff not anywhere gitwise?
17:04:14 <Deewiant> I can't remember, I think there's an option to not stash indexed stuff
17:04:45 <elliott_> Deewiant: Now say I split a file into two, how would I stash the two new files, "git add" would make them not be stashed because of the above :-P
17:04:54 <elliott_> Note: This game is impossible to win.
17:05:18 <Deewiant> Shrug, figure it out
17:05:33 <Deewiant> The solution here is to not end up in this situation ;-)
17:06:02 -!- hagb4rd has quit (Ping timeout: 248 seconds).
17:06:10 <elliott_> Deewiant: A large part of the git advertisement is about being able to detangle overlapping changes because of the wide acceptance of history modification, and separating version-control time from development time
17:06:17 <elliott_> Perhaps I was mislead
17:06:32 <Deewiant> Nobody said you're not able to do it
17:06:40 <elliott_> I wouldn't call this able to do it
17:06:40 <Deewiant> You're just complaining about its difficulty
17:07:14 <elliott_> git is totally great, you can do X. Note: X is an arduous process involving animal sacrifice and death of loved ones.
17:07:26 <elliott_> OK, that stash seemed to work.
17:08:18 <Deewiant> I'd rather do the animal sacrifice in this situation than "hg commit -m 'Pile of crap that I cannot unpile'"
17:09:24 <elliott_> Is hg the new standard for VCSes?
17:09:26 <elliott_> Bummer
17:09:48 <elliott_> Alright, it's time to do this shit
17:09:57 <elliott_> Deewiant: Do you know any way to retain the stash message through this process btw :-P
17:10:35 <Deewiant> Stashes have messages? :-)
17:11:07 <elliott_> git stash save "I'm probably the kind of person who uses Getting Things Done and ritually practices BDD- fuck, I'm out of space. This is violating the standards. Oh god. Oh god."
17:11:19 <elliott_> elliott@katia:~/Code/mchost$ git stash list
17:11:19 <elliott_> stash@{0}: On master: Client/Server module split, records, better test server
17:11:20 <elliott_> So professional
17:12:03 <elliott_> I know
17:12:11 <elliott_> alias restash='git stash save ...'
17:13:06 <elliott_> Oh, hmm
17:13:11 <elliott_> Deewiant: There's quite a major problem with your simpler model
17:13:14 <elliott_> I only want to keep parts of the index
17:13:19 <elliott_> Specifically, I want to keep the parts I add -p'd
17:13:23 <elliott_> But not the new files created by the split
17:13:31 <elliott_> It really feels like git is conflating two things here...
17:13:46 <elliott_> You should be able to let it know a file exists without having it be marked as to-commit.
17:15:26 <elliott_> <Deewiant> I was thinking loop { git stash -p, git stash, apply the -p'd one, tweak, commit, go back to where you were and apply the non-p'd one }
17:15:30 <elliott_> Alright, let's see here now
17:15:37 <elliott_> OK, I think that works
17:19:33 <elliott_> Deewiant: Thanks, this seems workable
17:20:01 <Deewiant> No problem
17:21:33 <elliott_> error: patch failed: MC/Protocol/Fields.hs:10
17:21:33 <elliott_> error: MC/Protocol/Fields.hs: patch does not apply
17:21:33 <elliott_> Cannot remove worktree changes
17:21:34 <elliott_> Sigh
17:21:36 -!- sllide has quit (Ping timeout: 256 seconds).
17:22:12 <elliott_> Oh, there we go
17:23:20 <elliott_> elliott@katia:~/Code/mchost$ selectstash
17:23:20 <elliott_> MC/Protocol/Fields.hs: needs merge
17:23:20 <elliott_> MC/Protocol/Fields.hs: needs merge
17:23:20 <elliott_> MC/Protocol/Fields.hs: unmerged (5627f96b476d7f06ae983b63aad445fcef5ade68)
17:23:20 <elliott_> MC/Protocol/Fields.hs: unmerged (f1ce5a1d97eee533fbaaa16b9b9e2d611c9902ce)
17:23:20 <elliott_> MC/Protocol/Fields.hs: unmerged (859cf129e4554d3253ee71c6497d5794626c7662)
17:23:22 <elliott_> fatal: git-write-tree: error building trees
17:23:24 <elliott_> Cannot save the current index state
17:23:30 <elliott_> Deewiant: What the fuck do you do if you have a fucking merge conflict between a stash and a commit you just made
17:23:55 <elliott_> I fixed the conflict, now what
17:24:01 <elliott_> Obviously I can't commit it
17:24:04 <elliott_> Do I need to... restash it??
17:24:06 <Deewiant> I forget
17:24:07 <elliott_> Make a merge stash????
17:24:09 <elliott_> Augh
17:24:45 <Deewiant> Maybe you should keep a separate branch here instead of a stash :-P
17:25:00 <elliott_> That would be uglier since I'd get explicit merge commits I'd have to discard
17:25:12 <elliott_> I'll hack up a toolchain for this soon, it's not a difficult operation at its core really
17:25:19 <elliott_> Deewiant: What search terms would you use to unforget :P
17:26:08 <Deewiant> git stash "needs merge" unmerged
17:26:55 <elliott_> Yay, I fixed it all
17:26:57 <elliott_> Kind of
17:28:45 <elliott_> stash@{0}: On master: Latest working tree
17:28:45 <elliott_> stash@{1}: On master: To apply
17:28:45 <elliott_> stash@{2}: On master: Latest working tree
17:28:46 <elliott_> Fuck
17:28:49 <elliott_> 0 is latest right?
17:28:52 <Deewiant> Yep
17:30:54 <elliott_> Deewiant: The merge conflicts I'm getting are great
17:31:05 <elliott_> It's because to remove the addition lines right next to other lines I don't want added I have to remove them entirely
17:31:07 <elliott_> Thus fucking up the context
17:31:09 <elliott_> The result:
17:31:12 <elliott_> <<<<<<< Updated upstream
17:31:12 <elliott_> =======
17:31:12 <elliott_> , blockPos
17:31:12 <elliott_> , blockPosShortY
17:31:12 <elliott_> , blockPosIntY
17:31:13 <elliott_> , playerPos
17:31:15 <elliott_> , playerPosXSYZ
17:31:17 <elliott_> >>>>>>> Stashed changes
17:31:19 <elliott_> "I EXPECTED NOTHING HERE BUT THERE WAS NOTHING"
17:31:50 <elliott_> The solution is literally just to remove the merge conflict lines
17:32:41 <elliott_> Ooh, I know
17:32:45 <elliott_> I just need to remove the context below
17:32:49 <ais523> haha, does the Norwegian alphabet really go A-Å?
17:32:51 <ais523> that must be confusing
17:32:53 <elliott_> Darn, that doesn't work
17:33:06 <elliott_> ais523: Hi, I'm dealing with git
17:33:11 <ais523> ouch
17:33:43 <ais523> I'm happy that I managed to convince at least you that it was fundamentally broken
17:33:48 <ais523> normally, I don't manage to convince anyone
17:33:57 <elliott_> ais523: How many people have you tried it on
17:34:06 <ais523> more than you might expect
17:34:15 <ais523> most people don't listen to the whole tihng
17:34:15 <ais523> *thing
17:34:19 <elliott_> This isn't really git's fundamental brokenness showing, it's just lack of a decent UI for this
17:34:26 <ais523> I know
17:34:30 <elliott_> Some merging issues but they'd be there with sg too, you could just avoid some of them with smarts
17:34:38 <elliott_> (Do you have the context of what I'm doing or are you just talking generally)
17:34:44 -!- ive has joined.
17:34:55 <ais523> I almost have the context, but I'm not paying enough attention to see it as anything but a sequence of facts
17:35:57 <elliott_> ais523: Basically: For like a day, I was working hard on long, tedious, boring work on mchost which resulted in some fairly large restructuring of what little there is right now, and couldn't be bothered with version control in the slightest. Now I want to turn this huge working diff into a sensible set of atomic commits where each one in sequence builds and runs properly, etc.
17:36:18 <elliott_> Which means that I can't just select hunks to apply in succession; I'll need to tweak and test it afterwards.
17:36:27 <elliott_> The basic operation git is missing is selecting hunks from a stash which then rips out those hunks from the stash and applies them to the tree.
17:36:37 <elliott_> That would let me select which part to work on next, do my tweaks, commit, repeat.
17:36:39 <ais523> in darcs, you could do that with a second repo and a pull
17:37:09 <elliott_> ais523: Even that's pretty inconvenient, because it'll have undesirable things like merge commits having the potential to get in.
17:37:14 <ais523> yep, indeed
17:37:21 <ais523> and the darcs method is far from certain
17:37:43 <elliott_> I basically want something "automatic" like bisecting is; you start the process, select some hunks, it does the obvious thing, you fix it up, make sure it builds, commits; then you resume, select more hunks, etc., until there aren't any left.
17:37:57 <elliott_> Automatic in that, you don't have to repeat anything, you just start / resume / resume until you're finished.
17:38:16 <elliott_> What's really annoying is that git refuses to split a hunk past a certain point.
17:38:29 <elliott_> Which makes e.g. selecting only one of five adjacent line additions to an import list annoying.
17:38:39 <elliott_> You have to manually edit the hunk, which changes the context, which creates bogus merge conflicts afterwards.
17:40:32 <elliott_> Saved working directory and index state On master: To apply
17:40:32 <elliott_> error: patch failed: MC/Protocol/Fields.hs:12
17:40:32 <elliott_> error: MC/Protocol/Fields.hs: patch does not apply
17:40:33 <elliott_> error: patch failed: MC/Protocol/Types.hs:112
17:40:33 <elliott_> error: MC/Protocol/Types.hs: patch does not apply
17:40:33 <elliott_> Cannot remove worktree changes
17:40:39 <elliott_> ais523: believe it or not, but this is what things look like when they're /working/
17:40:53 <ais523> heh
17:40:53 <elliott_> Congratulations git: my workflow now involves commands erroring out.
17:41:07 <elliott_> It literally exits with status 1 and all.
17:42:46 <elliott_> ais523: Here's what I'm doing, just so you can experience the absurdity: Apply the stash of "all changes not yet committed". Create a new stash interactively; select the hunks I want to work on this commit. Stash all changes (becoming the new "all changes not yet committed" stash); this leaves out the already-stashed selected changes, obviously. Apply the manually-selected stash. Tweak, tweak, commit. Repeat.
17:43:11 <elliott_> There's usually a merge conflict with the stashes at one point in this process because of hunk editing requirements.
17:43:16 <elliott_> Which involves some git reset HEAD stuff.
17:44:11 <Ngevd> There exist at least two fairy chess piece notaqtions
17:49:59 <elliott_> ais523: I fear I may be taking fear of breaking the build a little too far
17:50:05 <ais523> heh
17:50:12 <elliott_> I don't think a single commit to the repository doesn't compile so far
17:50:20 <ais523> really, we need to invent a programming language that merges well
17:50:21 <elliott_> With no warnings
17:51:25 <elliott_> Holy crap, finally no merge conflicts with the stash
17:54:27 -!- derrik has joined.
18:10:00 <Ngevd> ais523, will you continue my INTERCAL tutorial?
18:11:01 <ais523> well, you keep running away from it a lot
18:11:31 <Ngevd> I ran away once
18:11:39 <ais523> twice
18:11:58 <Ngevd> Okay, twice
18:13:39 <Ngevd> Three times
18:13:40 <Ngevd> Bye
18:13:41 -!- Ngevd has quit (Quit: Leaving).
18:14:08 <ais523>
18:16:49 <elliott_> ais523: I think you should: give up.
18:17:20 <ais523> yes, I don't think that tutorial would go too well
18:17:34 <elliott_> So, what's the way to get git to assume I passed --color to everything by default; answering this will save me an ENTIRE WEB SEARCH.
18:17:37 <elliott_> ais523 can do it, so can I.
18:17:43 <ais523> alias git = git --color
18:17:56 * ais523 runs
18:18:03 -!- derrik has left.
18:18:04 <elliott_> elliott@katia:~/Code/mchost$ git --color log --oneline
18:18:04 <elliott_> Unknown option: --color
18:18:04 <elliott_> usage: git [--version] [--exec-path[=GIT_EXEC_PATH]] [--html-path]
18:18:04 <elliott_> [-p|--paginate|--no-pager] [--no-replace-objects]
18:18:04 <elliott_> [--bare] [--git-dir=GIT_DIR] [--work-tree=GIT_WORK_TREE]
18:18:04 <elliott_> [--help] COMMAND [ARGS]
18:18:10 <elliott_> ais523: You lose twofold
18:18:10 <ais523> bleh, that's really stupid
18:18:26 <elliott_> git still has the legacy of being like a billion shell scripts underneath. :p
18:18:26 <ais523> what happens if you pass --color to something that doesn't support --color?
18:18:40 <elliott_> elliott@katia:~/Code/mchost$ git fetch --color
18:18:40 <elliott_> error: unknown option `color'
18:18:50 * elliott_ just searches for it
18:18:56 <elliott_> I really need a nice verb form of Google that doesn't imply Google.
18:19:37 <elliott_> One thing I really like about git is that its little diagrams of the changed files and how much they were changed is pretty. :p
18:19:41 <ais523> websearch?
18:19:51 <elliott_> Also the way it detects common paths in renames and the like and uses {foo,bar} syntax.
18:19:53 <ais523> the major deficiency of Google is that it only searches the Web by default
18:20:03 <ais523> if only it searched people's minds too, it'd be more useful
18:20:05 <ais523> also a privacy nightmare
18:20:12 <elliott_> git has really rather aesthetically pleasing final output, it's just crappy at producing it.
18:20:12 <elliott_> ais523: heh
18:20:34 <elliott_> ais523: maybe we can get NeutrinoOverflow
18:20:50 <elliott_> ais523: basically, you ask your question, and if anyone ever answers it in the entire rest of the universe's lifespan, you get the answers back immediately
18:20:58 <elliott_> the main problem is that there's always thousands of them and huge flamewars over which is the best
18:21:11 <elliott_> whole threaded forums devoted to arguing the top two answers versus each other
18:21:22 <elliott_> millions of innocents killed in the name of using short options rather than GNU long options
18:21:35 <elliott_> but... I mean, you _do_ get an answer instantly, that's gotta count for something, right?
18:22:00 <elliott_> someone has to write that now, I would read the crap out of that short story
18:22:28 <elliott_> oh, git actually has command autocompletion
18:22:30 <ais523> it'd be great, but I'd be no good at writing it
18:22:36 <ais523> elliott_: *bash has command autocompletion for git
18:23:05 <elliott_> ais523: indeed, but "git st<enter>" is faster than "git status<enter>"
18:23:12 <elliott_> oh, darn, it has multiple options there
18:23:15 <elliott_> so it wouldn't work
18:23:25 <elliott_> (it's just an option to make git automatically run the suggested command if there's only one)
18:23:41 <ais523> its autocompletion for darcs is pretty amazing, it does things like darcs add <tab> only lists files that aren't in the repo already
18:24:02 <ais523> this isn't really a win for darcs over git in theory, only in practice
18:24:36 <elliott_> hmph, git has a bunch of colour options but there doesn't seem to be one way to set them all usefully at onc
18:24:37 <elliott_> e
18:25:25 <elliott_> color.ui
18:25:25 <elliott_> When set to always, always use colors in all git commands which are capable of colored output. When false (or never), never. When set to true or auto, use colors
18:25:25 <elliott_> only when the output is to the terminal. When more specific variables of color.* are set, they always take precedence over this setting. Defaults to false.
18:25:26 <elliott_> o
18:25:30 <elliott_> h
18:26:37 <Gregor> http://16oa3.tk (Yes, I used Tweak.tk :P ) ; this is almost assuredly trollery, but the answer is pretty hilarious.
18:27:21 <ais523> do you think the question or answer was trolling? or both?
18:27:49 <ais523> I'm going for question being trolling, answer calling them on it
18:28:23 <elliott_> "Okay. Wow, you're kind of ignorant. America was formed by the ENGLISH. They didn't copy us, we copied them. David Beckham is English too. Also, there is no such language as 'American'... I take it you're a blonde..."
18:28:43 <elliott_> Do holier-than-thou attitudes ever pay off, ever?
18:28:49 <elliott_> They are like the universal catalysts of irony.
18:28:53 <ais523> probably /sometimes/
18:29:03 <elliott_> ais523: there's absolutely no way at all ever ever ever to tell git I'm splitting a file into two new ones, right? :(
18:29:12 <elliott_> it's showing me as removing the whole file and then adding two ~COMPLETELY NEW FILES~
18:29:19 <elliott_> even though it's almost literally just splitting the thing in two
18:29:21 <ais523> I don't think so, but I don't know
18:29:27 <elliott_> :'(
18:30:43 <elliott_> I can't believe Pugs is still maintained
18:31:33 <ais523> is that a Haskell impl or Perl 6 impl? I get them muddled
18:32:03 <elliott_> latter
18:32:04 <elliott_> in Haskell
18:32:07 <elliott_> # modified: MC/Protocol.hs
18:32:07 <elliott_> # new file: MC/Protocol/Client.hs
18:32:07 <elliott_> # renamed: MC/Protocol.hs -> MC/Protocol/Server.hs
18:32:07 <elliott_> ugh
18:32:11 <elliott_> don't just pick the bigger half, git...
18:32:57 <pikhq> elliott_: This is nothing but a presentation issue.
18:33:02 <elliott_> I don't care :-(
18:33:38 <elliott_> "show [<stash>]
18:33:38 <elliott_> Show the changes recorded in the stash as a diff between the stashed state and its original parent."
18:33:40 <pikhq> git is not actually storing a new file and a rename action in its commit. It's simply storing a whole new filesystem tree in its immutable data store.
18:33:45 <elliott_> Is there any way to show the diff between the stashed state and the current HEAD?
18:33:48 <elliott_> That would be very useful for me.
18:33:59 <pikhq> That git then tries to present things in a confusing way is just a shame...
18:34:46 <pikhq> Should be able to: each stash is either a tree or a commit (I don't remember which)
18:35:06 <pikhq> IIRC git stash show should actually show you the appropriate hash.
18:35:16 <pikhq> Ah, it's a commit.
18:36:14 <pikhq> Oh, hey, even better: each stash gets stuffed in refs/stash. So: git diff HEAD stash@{0}
18:36:19 <elliott_> Oh, great. Thanks.
18:39:11 <elliott_> wow, I think this commit will actually merge better if I squash it with the previous one
18:39:15 <elliott_> is that even possible in git?
18:39:25 <elliott_> for merging to be like that, I mean
18:39:34 <ais523> you can probably do it via interactive rebase somehow
18:39:42 <ais523> merge first, then squash the merge commit backwards
18:39:48 <pikhq> Sounds about right.
18:39:48 <elliott_> yes, I know that :)
18:39:49 <elliott_> I just mean
18:40:00 <elliott_> is it possible for squashing a commit with a previous one to make merging easier
18:40:44 <pikhq> I don't really think so; it's a fairly naive three-way merge, isn't it?
18:40:49 <elliott_> right
18:41:37 <pikhq> With the only thing making git's merging work notably better is that the standard DVCS workflow encouraging branches that don't diverge *widely*.
18:41:54 <pikhq> s/encouraging/encourages/
18:42:20 <elliott_> but seriously... worst diff: http://sprunge.us/CVSb
18:43:01 <pikhq> Yeaaah, diff is moronic.
18:48:22 <elliott_> pikhq: Hmm... given a commit, is there a way to selectively apply its diff using the hunk selection screen?
18:55:08 -!- monqy has joined.
18:56:04 <elliott_> pikhq: I SEE
19:08:39 -!- asiekierka has quit (Remote host closed the connection).
19:10:36 <elliott_> pikhq: Is there a way to refer to the index with "git diff">
19:10:36 <elliott_> ?
19:10:50 <elliott_> As in, "git diff <index> stash@{0}".
19:11:58 -!- zzo38 has joined.
19:12:11 -!- Ngevd has joined.
19:12:18 <Ngevd> Hello!
19:13:07 <zzo38> I think what I will do, is move examples of my program into a separate file and then \input it into the main file. The example file can then be loaded into GHCi to try things with it.
19:13:18 -!- KingOfKarlsruhe has joined.
19:14:22 <elliott_> pikhq: :'(
19:15:10 -!- Ngevd has quit (Client Quit).
19:16:25 <elliott_> Ah, diff-index seems to be it, possibly.
19:17:01 <elliott_> oh, git diff --cached does it
19:40:00 <Vorpal> <elliott_> but seriously... worst diff: http://sprunge.us/CVSb <-- nice paste name...
19:40:13 <elliott_> Heh
19:40:15 <elliott_> Heh.
19:40:21 <elliott_> Tpyoes are the worst.
19:48:55 <Vorpal> elliott_, oh and, I don't really see any alternative way to format it without adding some "copy from file" command to diff
19:49:32 <elliott_> So?
19:49:54 <elliott_> git doesn't exactly spit out stock git output most of the time.
19:50:05 <Vorpal> stock diff you mean
19:50:13 <elliott_> Yes.
19:50:34 <elliott_> Every time I see "diff --git" I imagine that somehow Linus just got the option he needed for diffs added to diff itself because, well, he's Linus.
19:50:42 <elliott_> But no; 'tis a sham.
19:53:07 <Vorpal> yeah, diff doesn't have --git
19:55:47 <ais523> elliott_: like "ls --emacs"?
19:55:56 <ais523> (I'm not sure if I've got the name exactly right there)
19:57:07 <elliott_> ais523: it's --dired
19:57:20 <ais523> yep, I thought I'd got the name wrong
19:57:53 <fizzie> Vorpal: But GNU patch has support for "diff --git" output: http://git.savannah.gnu.org/cgit/patch.git/tree/NEWS second '*'.
19:58:09 <elliott_> Heh.
19:58:45 <elliott_> git is a pretty good immutable object store with support for tree objects that can be diffed and the like, I just wish people didn't mistake that for a VCS :D
20:04:21 <zzo38> In which and how many esolangs does it not matter the order of program lines? Which ones almost matter? Are there any with hex grids?
20:06:40 <fizzie> Two where the order does not matter are Whenever, and Strelnokoff.
20:14:38 <zzo38> I realize now, I think C-LONG also doesn't matter the order but for different reason (old BASIC interpreters also often reordered everything in order of line numbers)
20:17:40 <fizzie> Yes, I suppose with mandatory-unique line numbers the order will likely not matter.
20:17:54 <zzo38> Will anyone implement Ian's VAX Extensions?
20:18:36 <zzo38> Do you like games that scroll one way or both ways?
20:20:54 -!- Phantom_Hoover has changed nick to Notch.
20:24:21 -!- Vonlebio has joined.
20:26:39 -!- Notch has changed nick to Phantom_Hoover.
20:27:34 <olsner> elliott_: maybe your diff would be more readable with git diff -M (rename detection)
20:27:57 <elliott_> olsner: Tried that, but it wasn't really
20:27:58 <elliott_> olsner: Tried that, but it wasn't really.
20:28:06 <olsner> ok
20:31:38 -!- Vonlebio has quit (Quit: Leaving).
20:32:25 <elliott_> olsner: Tried that, but it wasn't really.
20:32:27 <elliott_> olsner: Tried that, but it wasn't really.
20:32:28 <elliott_> hi
20:33:26 <monqy> hi
20:34:41 <Vorpal> <fizzie> Vorpal: But GNU patch has support for "diff --git" output: http://git.savannah.gnu.org/cgit/patch.git/tree/NEWS second '*'. <-- huh, old version here then
20:35:23 <Vorpal> diff --help | grep git turns up nothing here
20:37:12 <olsner> since it's not prefixed by "Changes in version ..." in the changelog I think that list is for the next (i.e. unreleased) release
20:37:24 <Vorpal> <zzo38> Do you like games that scroll one way or both ways? <-- I prefer games that scroll in all three dimensions, and in all directions there.
20:37:25 <olsner> also, it's for patch, not diff
20:39:01 -!- pikhq_ has joined.
20:39:29 -!- pikhq has quit (Ping timeout: 260 seconds).
20:40:47 -!- copumpkin has quit (Remote host closed the connection).
20:41:41 -!- copumpkin has joined.
20:48:44 <Phantom_Hoover> CakeProphet, are you still in that relationship with @vixen?
20:59:42 -!- pikhq has joined.
20:59:50 -!- pikhq_ has quit (Ping timeout: 245 seconds).
21:04:58 -!- elliott_ has quit (Ping timeout: 248 seconds).
21:07:06 -!- ive has quit (Ping timeout: 248 seconds).
21:19:48 -!- oerjan has joined.
21:22:59 <oerjan> <Madoka-Kaname> You can have modules implicitly import other modules?
21:23:35 <oerjan> you can have a module explicitly export another module's definitions as its own, in which case it looks like that
21:25:09 <oerjan> makes it easy to make an api which doesn't depend on how you organize your modules internally
21:26:38 <oerjan> and then there are class instances, which _are_ imported implicitly, which sometimes creates trouble
21:27:35 <oerjan> (there's no way to hide them from a module which knows about both the types and the class
21:27:38 <oerjan> )
21:29:40 <oerjan> ah elliott deficiency, i thought it was silent
21:35:18 <oerjan> <Phantom_Hoover> What is this crap you can't even use FTL for straight time travel.
21:35:51 <oerjan> ftl only implies time travel if it is still independent of reference frame
21:35:59 <Phantom_Hoover> oerjan, that too.
21:36:21 <Phantom_Hoover> But what I meant was that you can't use it to shoot Hitler without shenanigans.
21:36:27 <oerjan> and if it is true that the speedup is 60 ns independent of the neutrino energy, then it probably is _not_
21:37:09 <oerjan> i had another idea though - variant of my last 60 ns backwards in time thing. well, really just taking that to its conclusion.
21:38:03 <oerjan> if there is a jump which happens either at production or detection, then all we need for time travel is to get the accelerator and detector < ~ 20 m apart
21:38:52 <oerjan> hm i guess we'd want half that, to get an ordinary signal back in time
21:40:02 <oerjan> > 60e-9 * 300000000
21:40:03 <lambdabot> 18.0
21:40:30 <oerjan> < ~ 9 m, then
21:41:27 <oerjan> hm i guess at that distance it would be tricky to avoid all the _other_ particles generated by the accelerator :(
21:43:39 <oerjan> <elliott_> I think gravity goes FTL because it's spacetime magic.
21:44:03 <oerjan> dammit you realize this is a frequent question at any public physics forum?
21:45:14 <oerjan> (the answer, as you seem to have found, is that changes in gravitation propagate at light speed)
21:47:09 <oerjan> whether this means that gravity _itself_ propagates at light speed is hard to test because you cannot make a change that would note the difference without violating conservation laws or have something else move faster than light
21:47:35 <oerjan> *notice
21:47:59 <oerjan> well that's my impression of the discussions, anyway
21:48:32 <zzo38> O, nobody has beat me at "Month Name" and "Double quote" yet. Maybe later it will be.
21:49:26 <oerjan> "September"
21:49:37 <oerjan> yw
21:50:23 <zzo38> What about September?
21:50:44 -!- Patashu has joined.
21:51:04 <oerjan> it's the current month name. also i put it in double quotes.
21:51:38 <zzo38> I mean anagol. But it should not be too difficult to match me at those problems, I think.
21:52:08 <zzo38> (I noticed for "Month Name" that November is omitted)
21:52:22 -!- KingOfKarlsruhe has quit (Quit: ChatZilla 0.9.87 [Firefox 6.0.2/20110902133214]).
21:55:53 <zzo38> Maybe I even missed something you can shorten it more.
22:03:33 <oerjan> 17:32:49: <ais523> haha, does the Norwegian alphabet really go A-Å?
22:03:33 <oerjan> 17:32:51: <ais523> that must be confusing
22:03:36 <oerjan> yes, and no.
22:04:17 <zzo38> Is there such a thing as Windows CE emulator that can run on Linux?
22:04:29 <olsner> oerjan: hmm, how does your alphabet end? øæå?
22:04:39 <fizzie> Ours goes A..ZÅÄÖ.
22:04:40 <oerjan> æøå
22:04:46 <ais523> oerjan: I'm thinking, when people leave off accents
22:04:56 <oerjan> ais523: well don't do that
22:04:59 <ais523> how is å pronounced anyway?
22:05:10 <oerjan> approx. like aw in saw
22:05:21 <ais523> ah, that's close enough for me to imagine it
22:05:47 <fizzie> The Finnish name for å is "swedish o".
22:06:08 <oerjan> although distinguishing all the back vowels in english is a little tricky for a norwegian. well this one, anyway.
22:06:33 <oerjan> i will assume we get it back with the front ones :P
22:07:01 <fizzie> "In Swedish, the long version represents IPA /oː/. In Danish and Norwegian, the long version is pronounced IPA /ɔː/."
22:08:17 <oerjan> see, i can barely think of that as a real difference :P
22:08:40 <zzo38> I read somewhere, someone invented a new letter of the English alphabet called "key" and which is always silent.
22:08:47 <oerjan> as an accent yes, but not as a different phoneme
22:09:48 <fizzie> We don't even officially have a ɔ at all; there's no "Finnish" listed on the occurrence list of that IPA sound in WP.
22:13:40 <fizzie> "The mid vowels are phonetically "true" mid, i.e. intermediate between close-mid ([e], [ø], [o]) and open-mid ([ɛ], [œ], [ɔ]).[3] However, since no language is known to phonemically distinguish all three of these levels of mouth opening, the International Phonetic Association (IPA) provides no separate symbols for mid vowel phones."
22:14:33 <oerjan> what language is this
22:15:08 <fizzie> Ours.
22:15:47 <oerjan> which reminds me, how is finnish ä pronounced
22:16:03 <olsner> it's pronounced ä, silly
22:16:26 <fizzie> Front, unrounded, open; æ in other words.
22:17:48 <oerjan> it's the one sound in finnish where i keep looking at words and think, no, that cannot possibly be how it is pronounced.
22:18:05 <fizzie> (Where æ was the IPA æ.)
22:18:17 <fizzie> Which words are these?
22:19:13 <oerjan> whichever words :P
22:19:17 <olsner> hmm, swedish ä is apparently pronounced ɛ
22:19:45 <fizzie> It's that sometimes, I believe.
22:20:49 <oerjan> and that's how my mind wants to pronounce the finnish ones too, i think. or something in between.
22:21:03 <fizzie> WP says it's æ in e.g. "päron", due to the r.
22:21:51 <fizzie> "/ɛː/, /ɛ/, /øː/, and /œ/ are lowered to [æ] and [œ̞], respectively, when preceding /r/.[5] In most Standard Swedish varieties, especially those spoken by younger speakers, [œ̞] is used in other contexts as well." (In Swedish.)
22:23:02 <fizzie> "The doctor orders" in Finnish: "lääkäri määrää".
22:24:27 <Vorpal> <olsner> hmm, swedish ä is apparently pronounced ɛ <-- is it?
22:24:33 <Vorpal> such as in?
22:24:36 <olsner> Vorpal: wikipedia said so
22:24:49 <Vorpal> olsner, got any example words?
22:24:59 <olsner> Vorpal: http://en.wikipedia.org/wiki/Swedish_phonology#Vowels
22:25:49 <olsner> but I skipped the paragraph about sounds lowered to æ, that fizzie quoted, and just read the table first
22:26:29 <Vorpal> I'm somewhat doubtful, I can't hear a difference between cases that it claims are pronounced ɛ and those it claims are pronounced æ
22:27:34 <Vorpal> the case for ö is more obvious
22:31:31 -!- hagb4rd has joined.
22:33:52 -!- ive has joined.
22:37:04 <fizzie> ɛ should be rather different from æ; I mean, it could easily be closer to e. (Also: "In many central and eastern areas (including Stockholm), the contrast between /ɛ/ and /e/ is lost, especially the short variants[8] except before /r/[9] so that hetta ('heat') and hätta ('cap') and possibly even veta ('know') and väta ('moisten') are pronounced the same.")
22:38:11 <Vorpal> fizzie, well veta and väta are spelled quite differently. The first two are pronounced only slightly differently
22:38:21 <Vorpal> but I thought you meant when it is spelled with ä
22:39:06 <fizzie> I don't know what that means. I mean, ä is always spelled with ä; it's ä.
22:39:39 <Vorpal> fizzie, I thought you meant above that ä was sometimes pronounced æ and sometimes ɛ
22:39:44 <fizzie> Yes.
22:40:05 <hagb4rd> we have a lot of scandinavian folks here
22:40:07 <fizzie> But a letter is by definition always spelled the same way.
22:40:40 <Vorpal> fizzie, but all the examples above were using ä as one sound and e in the other case. So I haven't seen any examples of spelled ä pronounced ɛ yet?
22:40:53 <hagb4rd> is there any affinity between esolangs and scandinavia
22:41:08 <Vorpal> hagb4rd, we have several people from UK too. And many from US.
22:41:16 <hagb4rd> yea
22:41:27 <Vorpal> so?
22:41:41 <nooga> väta min hätta
22:41:46 <hagb4rd> just breeding random thoughts
22:41:49 <Vorpal> nooga, wtf
22:41:52 <hagb4rd> humpa!
22:41:57 <nooga> Vorpal: what?
22:42:11 <Vorpal> nooga, oh wait, you are washing your cap?
22:42:14 -!- augur has quit (Remote host closed the connection).
22:42:19 <zzo38> We also have at least two Canadians.
22:42:34 <nooga> Vorpal: yep
22:42:35 <Vorpal> how many from Australia?
22:42:49 <Vorpal> or NZ
22:43:22 <hagb4rd> no one
22:43:28 <fizzie> Vorpal: What. It's (theoretically) pronounced as /ɛ/ in both hätta and väta; except according to that it can happen that what should be /ɛ/ and /e/ in 'hätta' and 'hetta', respectively, gets pronounced the same way.
22:43:31 <hagb4rd> they have no time for char
22:43:34 <hagb4rd> chat
22:43:55 <fizzie> And it's pronounced as /æ/ only before /r/, or some-such.
22:44:10 <Vorpal> fizzie, hm, but issue is, it sounds the same in cases like ärt and väta to me.
22:44:17 <Vorpal> So now I'm utterly confused
22:44:36 <hagb4rd> is this swedish?
22:44:42 -!- derdon has joined.
22:45:00 <fizzie> Technically those are supposed to be /æ/ and /ɛ/. But they are sort-of neighbouring sounds, so...
22:45:40 <Vorpal> hagb4rd, yes
22:45:48 <hagb4rd> k, thx
22:46:14 <hagb4rd> but everything but finish sounds familiar in a way
22:47:36 <hagb4rd> dunno how this could happen, but finish is kind of extraterristic nature
22:48:04 <hagb4rd> its different
22:48:23 <hagb4rd> not wanting to bother anyone
22:49:38 <oerjan> <hagb4rd> no one <-- oh they do happen
22:50:06 <hagb4rd> my ex has gone to nz
22:50:28 <hagb4rd> see seems to be busy bunjeejumping and stuff
22:50:39 <hagb4rd> they're all happy in nz
22:50:52 <hagb4rd> keeping an eye on their sheep and stuff
22:51:13 <fizzie> Vorpal: Finnish only has /æ/ and /e̞/ (which is somewhere between /e/ and /ɛ/), so it's not very easy for a Finnish speaker to distinguish between all three of /e/, /ɛ/ and /æ/ either; it's just that I have a feeling often when they teach Swedish to Finnish-speaking folks, they just tell us to pronounce your ä as /e/ except when in front of /r/.
22:51:15 <oerjan> incidentally in norwegian, æ is mostly spelled e in front of r, but not always
22:51:35 <fizzie> Vorpal: Of course finlandssvenska is pretty far from real Swedish. :p
22:52:22 <oerjan> and is much rarer in front of other consonants
22:53:26 <fizzie> But for example 'nät' is something I'd pronounce rather /e/-ishly if for some reason someone would point a gun at me and tell me to start speaking Swedish. And I'd want to use that word. In that situation. Which sounds somewhat unlikely.
22:53:38 <oerjan> hm it may be short ær which is spelled er
22:54:07 <oerjan> (the word "er" would be an exception)
22:54:23 <hagb4rd> i know tolkien was inspired by finnish or at least some of its unique forms of pronouncing stuff
22:55:20 <hagb4rd> sindarin & quenya are related to finnish and greek
22:55:52 <fizzie> So they say.
22:55:55 <oerjan> erm i thought sindarin was related to welsh
22:55:56 <hagb4rd> yes
22:56:08 <fizzie> "Finnish, which I came across when I had first begun to construct a 'mythology' was a dominant influence, but that has been much reduced [now in late Quenya]. It survives in some features: such as the absence of any consonant combinations initially, the absence of the voiced stops b, d, g (except in mb, nd, ng, ld, rd, which are favoured) and the fondness for the ending -inen, -ainen, -oinen, also in some points of grammar, such as the inflexional endings -sse
22:56:09 <fizzie> (rest at or in), -nna (movement to, towards), and -llo (movement from); the personal possessives are also expressed by suffixes; there is no gender."
22:56:49 <hagb4rd> thx fizzie
22:57:53 <fizzie> Our inflection-suffixes for those are -lla, -lle and -lta (for external-locative; -ssa, -an/-en, -sta for internal), so it's not quite directly copied, just some styles.
22:58:18 <hagb4rd> lets call it influenced
22:59:00 -!- calamari has joined.
22:59:07 <fizzie> I wonder if our percentage of Quenya speakers is above the global mean, though.
22:59:14 <fizzie> Better ask Wolfram Alpha.
22:59:18 <hagb4rd> im sure
22:59:20 <hagb4rd> :D
23:00:00 <fizzie> "Fictional Things: Development of this topic is under investigation..."
23:00:04 <fizzie> Oh W|A, why must you fail me so.
23:01:48 <fizzie> "Petri Tikka comes from Finland or "Quenya-land". As a native Finnish speaker he is very well prepared to speak Quenya which is phonologically based on Finnish. Petri has translated a fragment of Kalevala into Quenya."
23:01:54 <fizzie> Uh-huh.
23:05:51 <Phantom_Hoover> <oerjan> erm i thought sindarin was related to welsh
23:06:22 <Phantom_Hoover> I was always suspicious of the whole elf/nature thing.
23:06:58 -!- hagb4rd2 has joined.
23:10:19 -!- hagb4rd has quit (Ping timeout: 248 seconds).
23:16:00 <oerjan> wikipedia agrees, anyway
23:19:06 <fizzie> "But then he discovered Finnish, and was filled with joy. Tolkien wrote, many years later: 'It was like discovering a complete wine-cellar filled with bottles of an amazing wine of a kind and flavour never tasted before. It quite intoxicated me.'"
23:19:10 <fizzie> Weird guy, Tolkien.
23:19:31 <fizzie> I speak Finnish almost every day and never get intoxicated.
23:19:38 <fizzie> At least not because of that.
23:20:21 <fizzie> It would, in fact, be rather difficult if. "Sorry, can't speak, need to be sober to drive home later."
23:20:29 <Phantom_Hoover> He's like a Finland weeaboo.
23:25:51 -!- azaq23 has joined.
23:35:06 * Phantom_Hoover → sleep
23:35:08 -!- Phantom_Hoover has quit (Quit: Leaving).
23:36:42 -!- augur has joined.
23:41:05 -!- ais523 has quit (Remote host closed the connection).
23:45:01 -!- calamari_ has joined.
23:46:22 -!- nooga has quit (Ping timeout: 256 seconds).
23:46:48 -!- calamari has quit (Quit: Bye).
23:47:11 -!- calamari_ has changed nick to calamari.
23:51:33 <Vorpal> <fizzie> It would, in fact, be rather difficult if. "Sorry, can't speak, need to be sober to drive home later." <-- written down on a paper I presume?
23:51:59 <Vorpal> (because you would only get drunk while writing it presumably)
23:52:28 <fizzie> Well, I don't know if writing would help. Maybe just speaking in English only.
23:52:53 <Vorpal> fizzie, but you would write it down once and then reuse the card that said that
23:53:41 <fizzie> Oh, of course. How practical.
23:55:57 <Vorpal> fizzie, well apart from that the ailment is not very practical to begin with
23:56:02 <Vorpal> well,*
23:56:27 <Vorpal> (why do I *always* miss the comma after a line starting with "well,"?)
23:57:31 -!- DH____ has joined.
2011-09-25
00:02:18 <hagb4rd2> i really enjoyed this--thx for some nice enlightning backgrounds on that topic fizzie :)
00:02:24 -!- sebbu2 has joined.
00:02:24 -!- sebbu2 has quit (Changing host).
00:02:24 -!- sebbu2 has joined.
00:03:07 -!- sebbu has quit (Ping timeout: 248 seconds).
00:14:57 -!- tiffany has quit (Excess Flood).
00:25:34 -!- augur has quit (Remote host closed the connection).
00:42:03 -!- Vorpal has quit (Ping timeout: 248 seconds).
00:47:41 -!- sebbu2 has quit (Read error: Connection reset by peer).
00:48:05 -!- sebbu2 has joined.
00:48:05 -!- sebbu2 has quit (Changing host).
00:48:05 -!- sebbu2 has joined.
00:49:14 -!- DH____ has quit (Read error: Connection reset by peer).
00:49:22 -!- DH____ has joined.
00:55:55 -!- DH____ has quit (Read error: Connection reset by peer).
00:57:04 -!- zzo38 has quit (Remote host closed the connection).
00:57:34 -!- augur has joined.
01:04:05 -!- calamari has quit (Quit: Leaving).
01:05:03 -!- evincar has joined.
01:19:42 -!- BeholdMyGlory has quit (Remote host closed the connection).
01:23:39 -!- hagb4rd2 has quit (Ping timeout: 248 seconds).
01:33:15 -!- ive has quit (Ping timeout: 248 seconds).
01:40:28 -!- evincar has quit (Quit: leaving).
01:42:45 -!- ive has joined.
01:50:40 -!- tiffany has joined.
02:00:59 -!- derdon has quit (Remote host closed the connection).
02:02:40 -!- sebbu2 has changed nick to sebbu.
03:11:21 -!- variable has quit (Excess Flood).
03:13:04 -!- variable has joined.
03:28:40 -!- azaq23 has quit (Read error: Operation timed out).
03:30:28 -!- azaq23 has joined.
03:43:18 -!- tiffany has quit (Ping timeout: 260 seconds).
03:57:35 -!- tiffany has joined.
04:00:40 -!- evincar has joined.
04:07:27 <CakeProphet> `wacro 20
04:07:32 <HackEgo> rublorezygoe blcheming made neseacithikalcnan mic fce mulmve nacyliatum san norst gonodcnly bead ver reticule ars cul fuy wel tsitlemoopsighinwie prad
04:09:35 -!- oerjan has quit (Quit: Good night).
04:10:08 <CakeProphet> `wacro 30
04:10:10 <HackEgo> pewitttahandeurconrgiahtock reched pularifyintrer behuflundinger stardt giele man upe cektoyistudeischrice na minced nonecomwasafteus fordm oplof extentangyred rhonen noii clatomp couvelay sus tlizan hoa die logrun sonystet ov egbvilus pc cur roldn
04:16:01 -!- Jafet has quit (Quit: Leaving.).
04:18:31 <evincar> Has anyone else heard spoken Lolspeak in the wild?
04:20:56 <CakeProphet> sort of.
04:21:01 <CakeProphet> I've heard people lol in public if that's what you mean.
04:21:44 <monqy> if people do that to me i may have to punch them......
04:22:19 <CakeProphet> monqy: "NO LOL" -haymaker-
04:22:38 <monqy> die
04:26:12 <CakeProphet> EVERYONE SHOULD SHOW AMUSEMENT IN THE TRADITIONAL HUMAN WAY, SHARED BY US AND OUR ANCESTORS, AS A RAPID OSCILLATION OF VOICELESS EPIGLOTTAL FRICATIVES
04:28:31 <monqy> less that laughing is good and more that internet speak is miserable
04:30:04 <evincar> I don't mean saying "lol". Lolcats rarely do, anyway.
04:30:20 <evincar> I mean "I can has...?" and "I has...", that sort of thing.
04:30:36 <evincar> I hear it pretty regularly at RIT.
04:30:57 <CakeProphet> oh yes I've heard that as well.
04:31:11 <CakeProphet> not frequently as I generally don't hang out with huge wastes of life.
04:31:22 <evincar> :P
04:31:33 <evincar> You don't have to hang out with someone to hear how they talk.
04:32:04 <evincar> Dunno, was just thinking Lolspeak is a sort of artificial pidgin.
04:32:52 <monqy> evincar: that's even worse
04:32:55 <monqy> it's even
04:32:56 <monqy> worse
04:33:07 <evincar> As conlangs go, it's at least unique...
04:33:16 <CakeProphet> no
04:33:21 <CakeProphet> not a conlang
04:33:32 <monqy> also "artificial pidgin" what
04:33:43 <evincar> Okay, so it's not a conlang.
04:33:53 <monqy> not a pidgin by any means either
04:33:54 <CakeProphet> pidgin sounds accurate.
04:33:57 <evincar> But it is a thing.
04:33:57 <monqy> oh??
04:34:10 <monqy> it's a Bad thing
04:34:20 <evincar> A pidgin between English and bad English...
04:34:49 <evincar> On a side note, I really wish Lolcode had more interesting operational semantics.
04:34:59 <evincar> Because it's not unique enough to be interesting.
04:35:11 <CakeProphet> I'd say dialect is a better choice
04:35:25 <evincar> That's fair.
04:35:51 <CakeProphet> A dialect that is associated with a particular social class can be termed a sociolect
04:36:01 <CakeProphet> the social class of internet retards.
04:36:08 <evincar> It just has a lot in common with pidgins, I guess, which threw me off.
04:36:31 <evincar> Simplified grammar and syntax (and presumably pronunciation), unusual forms...
04:36:35 <evincar> ...low prestige. :P
04:36:49 <evincar> It will be the greatest day
04:37:01 <evincar> when men in suits and monocles converse
04:37:06 <evincar> in the Language of the Internet.
04:37:09 <evincar> Lolspeak.
04:37:12 -!- zzo38 has joined.
04:37:20 <CakeProphet> oh god
04:37:33 <CakeProphet> I will the radical traditionalist.
04:37:42 <evincar> ...be.
04:37:52 <CakeProphet> using terror to try to bring us back to our more ethical ways.
04:37:54 <evincar> You will the traditionalist be.
04:38:04 <CakeProphet> a simpler time.
04:38:05 <evincar> A linguo-terrorist?
04:38:08 <evincar> I like it.
04:38:21 <CakeProphet> when men were men (or women) and helping verbs were conjugated correctly.
04:38:45 <evincar> I AM GLOSSOMANCER, AND THAT IS NOT HOW YOU USE A MODAL AUXILIARY
04:39:30 <evincar> Explosions and such ensue.
04:39:44 <CakeProphet> thanks to Wikipedia I now know the word tharf.
04:40:07 <CakeProphet> !pikhq tharf
04:40:08 <EgoBot> ​þarf
04:40:08 <evincar> Cries of "oh noes!" and "i has a ingery" are heard.
04:40:32 <CakeProphet> First and third person singular present indicative of þurven "to need, to require or have cause for".
04:41:21 <CakeProphet> Hark! I tharf a good vvin.
04:42:44 <CakeProphet> I will now use tharf in place of need always.
04:44:48 <evincar> I think we should resurrect some good old Anglo-Saxon words.
04:44:53 <evincar> Like "eft".
04:45:05 <CakeProphet> tharft is second person present
04:46:07 <evincar> Thearf, thearft, thearf, thurfon, thurfon, thurfon.
04:46:13 <evincar> If we're talking Old English.
04:46:30 <CakeProphet> no tharft is apparently new english.
04:46:57 <CakeProphet> er middle english rather
04:50:04 <zzo38> I have written a simple implementation of overridable I/O and a pair system using barrier monads. And I implemented "collect" even before.
04:50:17 <zzo38> Examples: collect . convert (+ 1) id $ do { yield 3; yield 9; yield 7; } and map (+ 1) . collect $ do { yield 3; yield 9; yield 7; }
04:50:31 <zzo38> Both results are [4,10,8]
04:50:35 <CakeProphet> in old english the second person past is thorftest
04:50:56 <zzo38> (It is called "yield" due to a bit similarity of the "yield" command in Javascript)
04:50:57 <evincar> Yeah, thorftes or thorftest.
04:51:09 <CakeProphet> thorftest thine wearm blanket!
04:51:21 <evincar> I dunno when the whole -(e)s/-eth thing happened.
04:51:42 <zzo38> I don't know a lot of thing about Old English either.
04:51:46 <evincar> Come to think of it.
04:51:48 <evincar> Yeah...
04:51:54 <CakeProphet> wow surprising.
04:52:00 <CakeProphet> everyone knows a lot about old english.
04:52:01 <evincar> ...I was really into it in middle school and high school.
04:52:08 <CakeProphet> weirdo
04:52:10 <evincar> But I've since let it slide.
04:52:19 <evincar> Hey, linguistics are fun.
04:52:26 <evincar> Are?
04:52:30 <evincar> Even one linguistic is fun. :P
04:52:55 -!- MDude has changed nick to MSleep.
04:52:56 <CakeProphet> more fun than one linguist
04:52:57 <CakeProphet> bahahahahaha
04:53:20 <evincar> Fuck, I cannot have serious linguistics discussions for long though.
04:53:34 <CakeProphet> s/cannot have/cant has/
04:53:36 <evincar> Like, it's fun to say "oh isn't this silly" or "let's try to fill this lexical gap".
04:53:53 <evincar> And phonetics is pretty interesting.
04:54:18 <CakeProphet> you thurft more linguistic disucssion, eh?
04:54:42 <CakeProphet> too bad I'm not good at that.
04:54:48 <evincar> But I don't care about Chomskian generative predicative grammar isolationism and its adverse effects on the phonological constraints of eastern Caucasian whistlers.
04:55:03 <evincar> Or whatever.
04:55:08 <CakeProphet> .......
04:55:26 <CakeProphet> you should write a big long paper about it.
04:55:48 <evincar> I could write some JavaScript to keep track of how far people get.
04:56:09 <evincar> See how long it takes linguists to recognise that I'm using their own field against them.
04:56:13 <evincar> By which I mean trolling them.
04:56:15 <evincar> Using words.
04:56:48 <monqy> take that, linguists
04:57:45 <CakeProphet> thorfath to troll!
04:58:43 <evincar> That sentence is made so much better by the fact that "troll" is a Northern word.
04:59:04 <evincar> None of that silly Romantic crap.
05:00:14 <evincar> What programming language would be good for evolving software in?
05:00:25 -!- GreaseMonkey has joined.
05:00:29 <evincar> (What sort, that is.)
05:02:50 <zzo38> I don't know.
05:03:22 <CakeProphet> my Southern American ancestors were linguistic pioneers, taking splendor in the double contraction.
05:03:36 <CakeProphet> shouldn't've, wouldn't've, couldn't've,
05:04:01 <CakeProphet> actually that probably has been used for a while...
05:04:55 <CakeProphet> ah it's common in British English as well.
05:05:48 <evincar> It's common all over the place.
05:05:58 <evincar> I doubt it's been written so much till relatively recently though.
05:07:29 <evincar> Like "chui" = "je suis", which I still have trouble accepting even though many people do say it that way.
05:08:54 -!- derrik has joined.
05:09:40 -!- derrik has quit (Client Quit).
05:11:02 <CakeProphet> yinz is a good word
05:11:05 <CakeProphet> similar to y'all
05:11:14 <CakeProphet> all yinz
05:12:04 -!- derrik has joined.
05:12:53 <evincar> Heh, different regions have different "plural you".
05:12:53 -!- MichaelBurge has joined.
05:13:04 <evincar> In New England everybody says "you guys".
05:13:20 <CakeProphet> it varies in regions as well. I rarely say ya'll.
05:13:22 <evincar> But there's y'all, y'inz, youse, youse guys...
05:13:27 <CakeProphet> I usually use everybody or you guys.
05:13:57 <evincar> Being from the States I get away with the occasional y'all.
05:14:13 <evincar> Same with ain't.
05:14:14 <CakeProphet> oh I can definitely get away with it in the south.
05:14:18 <evincar> But I don't make a habit of it.
05:19:27 <CakeProphet> hmmm can't find anythong on google about the origin of double contraction
05:21:25 * CakeProphet just invented the word anythong.
05:22:32 <evincar> Google Ngrams suggest early 1900s as the point they started to take off.
05:22:58 <CakeProphet> in writing.
05:23:29 <evincar> I would assume they've been around since at least a few hundred years before that.
05:23:32 <evincar> In speech.
05:23:53 <evincar> Native speakers in any language reduce phonemes all over the place.
05:24:47 <evincar> My Chinese professor magically transforms zaishuo into zeho.
05:26:48 <CakeProphet> it's time to spend money recklessly on the internet.
05:27:03 <evincar> Ooh, what on?
05:28:26 <CakeProphet> hookah coals, maybe some shisha.
05:28:34 <CakeProphet> I'm picky about my coals.
05:29:26 <CakeProphet> oh nice Amazon has what the coals I want and I get free shipping
05:29:27 <CakeProphet> EXCELLENT
05:29:58 <evincar> Hooray.
05:30:22 <CakeProphet> Amazong sells a lot of food
05:30:32 <CakeProphet> I wonder if people buy all of their groceries online.
05:30:49 <evincar> Perhaps the agoraphobic.
05:31:03 <CakeProphet> heh, literal fear of marketplaces.
05:31:51 <evincar> Good catch. :P
05:31:59 <evincar> Does an online marketplace count?
05:32:36 <CakeProphet> probably not.
05:33:46 <CakeProphet> I used to have the mild beginnings of agoraphobia (or maybe social phobia, almost the same thing I believe) a few years ago, so I could easily see buying everything online to avoid going out.
05:35:07 <zzo38> I never purchase food by computer. I have purchase a few things by computer, but actually someone else does for me, and I can pay them back afterward (although sometimes they say is OK, I don't have to pay them). Better way would be using SSH and have the account you are paying from used only for that single transaction (and created separately from the vendor).
05:36:25 <zzo38> That is, the account contains the exact money to pay, and then it belongs to the vendor who will immediately cancel the account.
05:37:34 <CakeProphet> I actually do buy a lot of things online.
05:37:40 <CakeProphet> but not food.
05:39:23 <zzo38> I hardly ever buy thing online. When I order something from Japan, I go to Half Moon Books in Vancouver
05:42:24 <CakeProphet> I don't buy things from Japan enough to need to buy things from Japan.
05:44:07 <zzo38> An idea I have is to implement digitally signed cheques. You put that option into your account by notifying the bank. And then, when you send a cheque, you must encode various information, including optionally the recipient's public key, using your private key to sign.
05:44:44 <zzo38> And then you either write that information onto the cheque or print it on by computer, using magnetic ink if that would help.
05:45:33 <zzo38> Or you transfer it over any communications channel; the recipient can write it on their own blank piece of paper that is having the correct size.
05:45:39 <CakeProphet> can I just use paypal instead?
05:46:14 <zzo38> Or the recipient uses SSH to access their bank account and sends the cheque data to their SSH.
05:46:40 <zzo38> CakeProphet: Maybe. It depends on the vendor.
05:51:26 <zzo38> We can invent a standard protocol for access money accounts over SSH. Some commands might be: inquiry split info admin convert transfer mail cheque option authorize shadow statement
05:53:18 -!- derrik_ has joined.
05:53:34 -!- derrik has quit (Ping timeout: 256 seconds).
05:53:37 -!- derrik_ has changed nick to derrik.
05:53:55 -!- derrik has left.
06:00:37 -!- zzo38 has quit (Remote host closed the connection).
06:10:50 -!- ive has quit (Ping timeout: 276 seconds).
06:18:34 -!- evincar has quit (Quit: ChatZilla 0.9.87 [Firefox 6.0.2/20110902133214]).
06:42:01 <CakeProphet> `wacro 20
06:42:03 <HackEgo> chlantd sexollessessithrus pemendally acty kosisental fiteire baeazimettioloru mon re expatt ch gadge le ors ri yat illosion pluditic da balion
06:45:56 <CakeProphet> fizzie: how do you interpolate multiple data sets?
06:52:22 <CakeProphet> maybe interpolate isn't the right word.
06:53:04 <CakeProphet> I think basically you would just scale them one at a time right?
06:54:21 <CakeProphet> so you start with the first two and multiply each value in the smaller one by sum(larger)/sum(smaller)...?
06:54:35 <CakeProphet> before you add them together, and then repeat for each additional data set?
06:55:27 <Patashu> Normalization?
06:55:36 <CakeProphet> that's the word
06:55:57 <CakeProphet> ah okay...
06:56:03 <CakeProphet> yes I know how to normalize. :P
06:56:14 <CakeProphet> however I need all integer values for my algorithm to work best.
06:57:18 <Patashu> whhy not multiply by 10^n and then round?
06:57:23 <Patashu> or does it have to be -small- integer values?
06:57:26 <CakeProphet> yeah that works fine.
06:57:31 <CakeProphet> no larger is better ultimately.
06:58:58 <CakeProphet> the larger the number the more precise the results will be.
07:00:25 <CakeProphet> actually my algorithm could use floating points but then floating point errors might cause it to be inaccurate.
07:02:50 <CakeProphet> ...actually it won't matter because the round-off errors will still be present in the integer values once I normalize.
07:02:58 <CakeProphet> but I don't think it will be a big deal.
07:15:39 -!- Patashu has quit (Ping timeout: 248 seconds).
07:21:14 <CakeProphet> fungot:
07:21:14 <fungot> CakeProphet: published september 1927 in amazing stories, vol. 29, no. 2,
07:21:22 <CakeProphet> fungot:
07:21:22 <fungot> CakeProphet: arkham. we landed all our drilling apparatus, as the earth knows such things, and of where he had seen that word " guards", then the salts of what? god! could it be...
07:21:32 <CakeProphet> ^style
07:21:33 <fungot> Available: agora alice c64 ct darwin discworld europarl ff7 fisher homestuck ic irc jargon lovecraft* nethack pa sms speeches ss wp youtube
07:38:40 <CakeProphet> `wacro 30
07:38:45 <HackEgo> cht raud con permong rinvie umuttartadlis jingeto eogistria tocheel linsificaavent it osuebramadewbaulartijunalich inerly fenqwiturlagdadvolestriln ungoll denstrabic grailler con picen chatico raneio porosichrafin jahnquesandes frasistiontankey kamilii aliivilikat ev reitauz staliay dah
07:38:55 <monqy> cht
07:39:32 <CakeProphet> monqy: yeah I need to add some heuristics.
07:40:05 <CakeProphet> specifically: the produced word must have at least one vowel (y's count)
07:40:30 <CakeProphet> or maybe must meet a very small vowel-to-consonant ratio?
07:41:28 <Madoka-Kaname> You could do a clustering kind of thing
07:41:39 <Madoka-Kaname> 1 constant, 2 vowels, 2 constants, and so on.
07:41:59 <CakeProphet> hmmm?
07:42:50 <CakeProphet> I'm not sure I can do that kind of clustering.
07:43:32 <CakeProphet> but I do think more than three vowels/consonants in a row should probably not count.
07:44:07 <CakeProphet> three vowels is already a lot but there's probably real words that have them otherwise the algorithm wouldn't produce them...
07:44:12 <monqy> just up the grammary
07:44:15 <monqy> 4-grams should be sufficient
07:47:51 <CakeProphet> possibly.
08:01:24 <monqy> and a good idea regardlesss probably?
08:01:26 <CakeProphet> A 32-bit signed integer containing the amount of time in milliseconds that has passed since the last time the computer was started.
08:01:30 <CakeProphet> monqy: yes that's what I'm doing.
08:01:43 <CakeProphet> where can I find this in linux ^^^
08:05:08 <monqy> a better question: why do you need it
08:06:06 <CakeProphet> important reasons. no I am not going in the wrong direction with a problem.
08:06:15 <monqy> yes you are
08:06:20 <CakeProphet> you don't even know what I'm doing.
08:06:49 <monqy> unless you're doing something you shouldn't be doing, I don't think you should need it
08:07:59 <monqy> besides, do milliseconds even fit well into 32-bit signed integers?
08:09:09 <CakeProphet> The value of this property is derived from the system timer and is stored as a 32-bit signed integer. Consequently, if the system runs continuously, TickCount will increment from zero to Int32.MaxValue for approximately 24.9 days, then jump to Int32.MinValue, which is a negative number, then increment back to zero during the next 24.9 days.
08:11:28 <monqy> ok that did not help me figure out what you are trying to do
08:11:54 <CakeProphet> right it was to show you how well they fit into signed integers.
08:13:06 <CakeProphet> I'd rather just be able to find this bit of information on a linux system, instead of having monqy try to suggest other things when there is no other thing to suggest. Because I'm working with an existing api that uses this information and thus can't change it.
08:13:31 <CakeProphet> no, I can't use a different api.
08:14:24 <monqy> it would help if I could trust you aren't doing something stupid
08:14:33 <CakeProphet> if I wanted someone to tell me I'm doing it wrong instead of answering my question, I'd go to #python, as that's the language I'm working with.
08:14:40 <CakeProphet> monqy: you can.
08:17:04 <CakeProphet> I'm not, as you seem to think, stupid.
08:17:18 -!- augur has quit (Remote host closed the connection).
08:17:29 -!- Vorpal has joined.
08:18:31 <monqy> are you under nda or something
08:18:54 <CakeProphet> yes
08:19:12 <monqy> well then, I'll give some of the blame to those guys
08:19:25 <monqy> they deserve it
08:19:28 <CakeProphet> uptime 04:19:40 up 20:06, 5 users, load average: 0.15, 0.15, 0.11
08:19:30 <CakeProphet> thanks google
08:19:56 <CakeProphet> utmp
08:20:23 -!- KingOfKarlsruhe has joined.
08:20:24 <Vorpal> CakeProphet: I believe there is a system call to read that too
08:20:36 <Vorpal> or maybe not
08:20:42 <Vorpal> right, it us utmp based instead
08:21:10 <Vorpal> or hm, /proc/uptime ?
08:21:15 <CakeProphet> I think in Python I'll just have to do system() or /proc/uptime
08:21:29 <CakeProphet> I don't see anything equivalent in the sys module
08:21:33 <CakeProphet> maybe os has something
08:21:34 <Vorpal> CakeProphet: doesn't python have an FFI?
08:21:44 <CakeProphet> yes but that's incredibly unecessary.
08:22:14 <Vorpal> CakeProphet: depends on how often you call it. Using system() hundreds of time per second would be utterly stupid
08:23:26 <CakeProphet> this isn't a performance bottleneck.
08:24:16 <Vorpal> guess that is fine then
08:25:10 <CakeProphet> cat /proc/uptime
08:25:12 <CakeProphet> 72697.45 283782.19
08:25:14 <CakeProphet> why two?
08:26:20 <Vorpal> CakeProphet: might be load values? Don't know
08:26:46 <Vorpal> try your web search engine
08:27:22 <CakeProphet> idle time
08:27:33 <Vorpal> CakeProphet: yeah https://secure.wikimedia.org/wikipedia/en/wiki/Uptime#Using_.2Fproc.2Fuptime
08:28:02 <CakeProphet> but then why have I been idle longer than I've been up?
08:28:10 <CakeProphet> does it continue counting idle time through sleep maybe?
08:28:11 <Vorpal> CakeProphet: SMP/NUMA
08:28:29 <Vorpal> as in: you probably have more than one core or more than one CPU
08:28:31 <Vorpal> or both
08:28:37 <CakeProphet> yes I have 4.
08:28:59 <Vorpal> CakeProphet: if two cores are idle one second each at the same time it will count two seconds idle
08:29:06 <Vorpal> so that is why it is larger
08:29:13 <Vorpal> $ cat /proc/uptime
08:29:13 <Vorpal> 781.61 2984.41
08:29:16 <Vorpal> same for me
08:29:39 <Vorpal> and who knows what it does with hyperthreading (I have 4 cores + HT)
08:30:13 <CakeProphet> well two, four "virtual" cores (aka single core with two different sets of registers)
08:31:46 -!- Phantom_Hoover has joined.
08:31:53 <Vorpal> CakeProphet: right, so 2 cores + HT then
08:32:26 <CakeProphet> yes
08:32:49 <Vorpal> CakeProphet: I would assume the idle time should either be divided by 4 or by 2 for your case
08:32:54 <Vorpal> and by 4 or by 8 for me
08:33:31 <Vorpal> which would give the average idle time so far on a single core
08:33:34 <Vorpal> I think
08:34:49 <Vorpal> CakeProphet: searching the web suggests /proc/stat should have per-logical-cpu values and such, but I don't know what the fields in it mean.
08:35:17 <CakeProphet> I don't need idle time at all actually, just the first value.
08:35:23 <Vorpal> right
08:35:57 <Vorpal> well, proc(5) has details on /proc/stat
08:36:23 <Vorpal> except, I have far more fields per core than it documents...
08:41:31 -!- augur has joined.
08:54:39 -!- monqy has quit (Quit: hello).
09:00:54 -!- nooga has joined.
09:15:45 <fizzie> CakeProphet: In your case, you could just first normalize all the frequencies (divide by the total frequency so that they sum up to one; and of course then use random values in [0,1] in pick), after which to interpolate you just sum up all the numbers multiplied by the weight. (You can do that in advance, or on-the-fly.)
09:15:50 <fizzie> CakeProphet: Interpolating n-gram models is pretty trivial; P(c_i | c_{i-1}, c_{i-2}) = a_1 P_1(...) + a_2 P_2(...) + ..., where sum_i a_i = 1. That will make P still a probability distribution (sum_c P(c | ...) = 1), assuming all P_i are.
09:15:59 <fizzie> Flip those two comments.
09:16:14 <fizzie> The second one is supposed to come first.
09:16:37 <fizzie> Well, I guess it doesn't matter all that much. But that was the original intention.
09:21:06 <CakeProphet> switch them in terms of order of importance. :)
09:22:38 <CakeProphet> "by sum up all the numbers" you mean the normalized values right?
09:25:15 <fizzie> Yes. E.g. if you have one model that says (aaa = 0.5, aab = 0.5) and another (aab = 0.5, aac = 0.5) and weights 0.1, 0.9 respectively, what you end up with is (aaa = 0.1*0.5 = 0.05, aab = 0.1*0.5 + 0.9*0.5 = 0.5, aac = 0.9*0.5 = 0.45), where aaa+aab+aac = 1 still, like it should.
09:26:24 <CakeProphet> how is the weight calculated?
09:26:47 <CakeProphet> that's based on the data size right?
09:26:56 <fizzie> You get to choose those depending on how much importance you wish to give each model.
09:27:02 <CakeProphet> ah okay
09:27:14 <CakeProphet> I was going to balance it by size so that the smaller set gets more importance.
09:27:35 <CakeProphet> but I /could/ have it specified as an option.
09:27:37 <CakeProphet> to the command
09:27:56 <fizzie> The normalization takes care of that. Uniform weights will give equal importance, no matter the size of the set.
09:28:12 <fizzie> If you do it based on data size, you might as well just sum up the frequencies, it'll amount to the same thing.
09:28:13 <CakeProphet> ah okay so then for my case I want 0.5... that's what I was thinking I could do.
09:28:18 <CakeProphet> N1+N2 / 2
09:29:22 <CakeProphet> and I should be able to fold this operation over multiple datasets to normalize and combine all of them.
09:30:08 <fizzie> If you do normalize the numbers, thanks to floating-point being what it is, you may want to change pick() to always pick the last element if it gets that far, since after introducing rounding it's not guaranteed the (repeatedly subtracted) random value is <= the last alternative's normalized frequency (i.e. probability) any more.
09:31:55 <CakeProphet> yeah I was concerned about that.
09:32:10 <Madoka-Kaname> fizzie, why would you apply the weight if you have no data from other sources?
09:32:13 <CakeProphet> and multiplying some huge exponent of ten and rounding doesn't really fix that.
09:32:30 <CakeProphet> Madoka-Kaname: I'm combining multiple data sources
09:36:11 <CakeProphet> fizzie: also is there any guarantee that sum(frequencies) == 1?
09:36:33 <CakeProphet> I would thinking rounding errors prevent that.
09:36:36 <CakeProphet> *think
09:37:21 <fizzie> As for interpolating >2 models with a 2-model operation... if you have models A, B, C, D and want uniform weights (i.e. (0.25, 0.25, 0.25, 0.25)), you need to use weights (0.5, 0.5), (0.66, 0.33), (0.75, 0.25) in the mergings. Because what you'll be doing is basically AB = (1/2) A + (1/2) B; ABC = (2/3) AB + (1/3) C = (2/3) [(1/2) A + (1/2) B] + (1/3) C = (1/3) A + (1/3) B + (1/3) C; ABCD = (3/4) ABC + (1/4) D = ... = (1/4) A + (1/4) B + (1/4) C + (1/4) D.
09:39:56 <fizzie> No, they won't probably sum up to exactly 1.
09:42:02 <CakeProphet> okay well instead of using the 2-model operation I can just use an n-model operation...
09:42:28 <CakeProphet> and have the sum(weights) ~~ 1
09:42:57 -!- Patashu has joined.
09:43:24 <fizzie> Sure. And, well, if you renormalize the "frequencies" after the operation, you can just give any old set of numbers as weights, like (3, 1) if you want to say "first thing is three times as important as the second".
09:44:02 <fizzie> (Or normalize the weights, I suppose. There's no difference except in roundoff errors.)
09:44:22 <CakeProphet> yes I was thinking normalize the weights.
09:44:29 -!- derdon has joined.
09:45:07 <CakeProphet> NORMALIZE: solution to everything.
09:45:39 <CakeProphet> also normalizing the frequencies will have a larger n in O(n) than the weights.
09:45:54 <CakeProphet> but it's trivial.
09:46:34 <fizzie> Yes, though if you're doing it in advance it hardly matters, it's the same O(n) you have already in summing up the freqs. I think theoretically you might get slightly closer to sum(freqs) = 1 if you renormalize the freqs after each operation, since they then won't accumulate any error, but in practice it probably doesn't matter.
09:47:16 -!- hagb4rd has joined.
09:49:12 <CakeProphet> fizzie: yes for the random selection I intend to take the sum of the frequencies in the random selection regardless.
09:49:31 <CakeProphet> as they won't = 1 because it's a subset of the data.
09:50:03 <fizzie> Hum? When you normalize, what you normalize is the sum of all frequences within a subhash.
09:50:08 <CakeProphet> ah okay.
09:50:11 <CakeProphet> well then nevermind.
09:50:29 <CakeProphet> either way it will be more accurate to take the sum when doing random selection instead of assuming it's exactly 1.
09:59:08 <CakeProphet> 05:58 < CakeProphet> what's the best way to test whether or not I'm in a 64-bit
09:59:11 <CakeProphet> system?
09:59:13 <CakeProphet> 05:58 -!- PirosB3
09:59:15 <CakeProphet> [~danielpir@cpc2-newt14-0-0-cust240.newt.cable.virginmedia.com] has
09:59:18 <CakeProphet> joined #python
09:59:21 <CakeProphet> 05:59 < kaste> Does your code need to care?
09:59:23 <CakeProphet> 05:59 < CakeProphet> yes.
09:59:25 <CakeProphet> 05:59 < MostAwesomeDude> Why?
09:59:28 <CakeProphet> ...never a straight answer in #python
10:01:06 <olsner> #python is for fools who don't know what they're doing, obviously they'll assume you don't know what you're doing either :)
10:03:57 <CakeProphet> sys.maxint == 9223372036854775807
10:03:58 <CakeProphet> how pythonic
10:05:38 <olsner> but that only tells you if the python interpreter is 64-bit? and do you know whether it corresponds to pointer size on all platforms?
10:06:47 <CakeProphet> yes and no.
10:06:56 -!- GreaseMonkey has quit (Quit: The Other Game).
10:11:23 <CakeProphet> olsner: I am not really concerned with max portability
10:11:27 <CakeProphet> just linux portability.
10:11:49 <CakeProphet> so 99.9999% of the time I think it will be accurate.
10:11:53 <fizzie> But WHY.
10:11:56 <CakeProphet> noep
10:12:24 <Madoka-Kaname> What are you doing?
10:12:28 <CakeProphet> nothing
10:12:31 <CakeProphet> daydreaming.
10:12:41 <olsner> CakeProphet: wrong way of doing nothing, it's clearly something
10:12:42 <Madoka-Kaname> ctypes or something? =p
10:13:05 <CakeProphet> no actually I'm pretty sure I don't really need any of this information
10:13:13 <CakeProphet> I am just trying to conform as closely as possible to an existing, horrible made API
10:13:18 <CakeProphet> but I may be able to change it.
10:13:36 <CakeProphet> *horribly
10:15:58 <olsner> you "may be able to change it horribly"? :D
10:16:39 <CakeProphet> yes that's always a possibility.
10:16:45 <CakeProphet> obviously I'm bad at everything.
10:18:45 <olsner> obviously. you went to #python after all
10:24:20 <cheater> that is the most fitting description for #python ever
10:24:26 <cheater> those people are so annoying
10:27:50 -!- nooga has quit (Ping timeout: 256 seconds).
10:30:40 <hagb4rd> CakeProphet: http://www.gossamer-threads.com/lists/python/python/663523
10:31:26 -!- qnix has left ("Leaving").
10:32:09 <CakeProphet> hagb4rd: architecture() tests binary metadata on the Python interpreter
10:32:16 <CakeProphet> which is equally as prone to error as testing sys.maxint
10:32:25 <CakeProphet> I believe.
10:33:05 <hagb4rd> so you have found an alternative?
10:33:27 <CakeProphet> no I'm testing sys.maxint for 9223..etc
10:34:09 <CakeProphet> I'm pretty sure it's exactly equivalent to checking platform.architecture
10:34:34 <CakeProphet> the difference being that platform.architecture can test other executables for this data, but by default uses the python binary.
10:34:48 <hagb4rd> k
10:40:54 -!- cheater has quit (Quit: Ex-Chat).
10:41:30 -!- cheater has joined.
10:42:01 -!- cheater has quit (Remote host closed the connection).
10:42:30 -!- cheater has joined.
10:42:48 -!- cheater has quit (Remote host closed the connection).
10:45:11 -!- cheater has joined.
10:46:39 -!- derdon has quit (Remote host closed the connection).
10:55:41 -!- azaq23 has quit (Ping timeout: 245 seconds).
11:04:06 -!- hagb4rd2 has joined.
11:04:59 -!- hagb4rd has quit (Ping timeout: 248 seconds).
11:06:35 -!- copumpkin has quit (Ping timeout: 248 seconds).
11:07:01 -!- copumpkin has joined.
11:12:02 <CakeProphet> bahahaha
11:12:21 <CakeProphet> I love answering questions on #python better and faster than (I assume) regulars
11:15:08 <cheater> CakeProphet: you don't have the O(asperger) slowdown
11:16:44 <olsner> asperger? I thought #python was populated by normal people and that that's the reason it's so bad
11:16:57 <Phantom_Hoover> Isn't that just either O(n) or O(1)?
11:17:36 <cheater> olsner: most of the regulars are dysfunctionally autistic.
11:18:24 <cheater> there are areas where the autism spectrum is cool, but once it starts eating away your ability to even converse with other people, then you're off the deep end
11:18:54 <CakeProphet> < yak^> nanonyme: TypeError is often raised at the edge between Python and C
11:18:56 <CakeProphet> whut
11:28:39 <CakeProphet> Phantom_Hoover: no spying allowed.
11:28:46 <CakeProphet> creeper.
11:30:39 -!- sllide has joined.
11:32:26 <CakeProphet> hmmm, I wonder if Haskell could ever be sanely augmented with a keyword arguments extension...
11:32:30 <CakeProphet> or variadic arguments even.
11:33:00 <cheater> that would be very interesting indeed
11:33:04 <cheater> i like kwargs
11:33:10 <CakeProphet> I think you'd have to use a special function-like data structure and sacrifice some implicit currying.
11:33:26 <cheater> you can still use kwargs as pos args
11:33:31 <cheater> the problem isn't with that
11:33:58 <cheater> as i understand, it's the same question as plugging OOP into haskell
11:34:02 <CakeProphet> the problem is knowing whether to curry i[Df you can specify default values.
11:34:28 <CakeProphet> it would have to be handled explicitly
11:34:33 -!- azaq23 has joined.
11:34:38 -!- azaq23 has quit (Changing host).
11:34:38 -!- azaq23 has joined.
11:34:45 <cheater> well, default values always come either first or last
11:35:08 <cheater> if you make default values last, currying still works
11:35:33 <cheater> except the function unshifts values first from the arguments, and then from default values if arguments are not all present
11:35:49 <CakeProphet> uh, except you still have to specify whether or not you want to partially apply or fill in the default values part
11:35:55 <CakeProphet> this is what I mean by explicit currying.
11:36:20 <cheater> you fill in with default values at execution time
11:36:22 <cheater> what ever that means
11:36:23 -!- pikhq_ has joined.
11:36:24 -!- pikhq has quit (Ping timeout: 256 seconds).
11:36:42 <CakeProphet> cheater: yeah that totally types and makes sense in Haskell.
11:36:49 <cheater> i know
11:36:54 <CakeProphet> fillDefaults :: SuperFunction a -> a
11:36:57 <CakeProphet> is probably what you want.
11:37:08 <cheater> i don't think this verbosity is necessary
11:37:16 <cheater> i bet there's a way to do it, it just requires thought
11:37:55 <cheater> one thing i do hope makes it into haskell from python is docstrings
11:38:12 <cheater> imo a very good idea
11:38:43 <cheater> it is very useful to be able to see them directly in the interpreter
11:39:47 <CakeProphet> I often find it easier to google online docs or use a command-line doc util to read docs
11:40:00 <CakeProphet> but it is a nice features.
11:40:04 <CakeProphet> -s
11:40:24 <cheater> but help() is a command line doc util
11:40:36 <CakeProphet> kind of
11:40:47 <CakeProphet> I have to explicitly import everything which in python is really annoying for some reason.
11:41:20 <CakeProphet> for perl I just type perldoc List::Util
11:41:22 <CakeProphet> or whatever module
11:41:25 <CakeProphet> or doc page
11:41:31 <CakeProphet> it has language docs too
11:41:35 <cheater> that's slightly annoying
11:41:48 -!- pikhq has joined.
11:41:51 <cheater> however it comes from the fact that values have docstrings too
11:41:56 -!- pikhq_ has quit (Ping timeout: 245 seconds).
11:42:03 <CakeProphet> compared to: import itertools; help(itertools)
11:42:09 <CakeProphet> cheater: yes I understand how it works
11:42:39 <CakeProphet> help is useful in that regard
11:42:40 <cheater> which is the best thing about it imo
11:42:40 <cheater> if you have some stupid variable you can just help() it and then you get info what it actually is
11:42:47 <CakeProphet> right
11:42:55 <cheater> of course, you could want help() to be able to catch values that are awyays there
11:43:04 <cheater> or rather, standard values
11:43:09 <CakeProphet> perl's (lack of a) read-eval-print loop is rather shitty.
11:43:38 <cheater> it's not like someone will request help for a dynamically overridden version of itertools if he didn't explicitly do it himself
12:07:18 -!- BeholdMyGlory has joined.
12:12:21 -!- oerjan has joined.
12:16:44 -!- KingOfKarlsruhe has quit (Quit: ChatZilla 0.9.87 [Firefox 6.0.2/20110902133214]).
12:28:08 <oerjan> 04:36:49: <evincar> It will be the greatest day
12:28:08 <oerjan> 04:37:01: <evincar> when men in suits and monocles converse
12:28:08 <oerjan> 04:37:06: <evincar> in the Language of the Internet.
12:28:08 <oerjan> 04:37:09: <evincar> Lolspeak.
12:28:19 <oerjan> have you heard of reddit gold?
12:29:13 <oerjan> (i doubt they do much lolspeak though. more fake victorian english, i suspect.)
12:29:42 <cheater> wat
12:30:27 <CakeProphet> oerjan is secretly reddit cabalist.
12:30:31 <oerjan> actually reddit's r/lounge, to be precise. and of course i'm not a member, so i don't really know what they're up to.
12:36:58 -!- Patashu has quit (Quit: MSN: Patashu@hotmail.com , Gmail: Patashu0@gmail.com , AIM: Patashu0 , YIM: patashu2 .).
12:38:36 <CakeProphet> "|"[0]
12:38:42 <CakeProphet> I wonder if this programmer knows about character literals...
12:46:44 <oerjan> <CakeProphet> the problem is knowing whether to curry i[Df you can specify default values.
12:47:11 <oerjan> istr ocaml sacrifices currying completely for optional/keyword args
12:47:48 <CakeProphet> I think with some nice operators you could have both.
12:48:27 <CakeProphet> so the keyword/default stuff is wrapped into a ADT that's returned by the mandatory/non-keyword arguments
12:50:14 <CakeProphet> and you could have operators to 1) fill in remaining arguments with defaults and return the final result 2) partially apply a set of named arguments 3) a function to do 2 and then 1
12:50:42 <CakeProphet> TH might make it more convenient. I could get zzo on it. :D
12:51:55 <oerjan> clearly this should be unified with more notation
12:52:13 <oerjan> i mean, you want more arguments, after all.
12:52:25 <CakeProphet> ha
12:53:09 <CakeProphet> perhaps there's a monad somewhere we could exploit
12:53:19 <CakeProphet> maybe the SuperFunction itself is a monad of some kind.
12:53:43 <CakeProphet> (don't ask me how)
12:54:28 <oerjan> well something similar to (x ->), obviously
12:56:44 <CakeProphet> but could you have something like: a <- Arg "blah" or whatever?
12:56:49 <CakeProphet> perhaps this is handled a better way though
12:56:54 <CakeProphet> s/Arg/arg/
12:57:59 <oerjan> looks hard with differently typed arguments.
12:58:07 <CakeProphet> ah yes
12:58:16 -!- nooga has joined.
12:58:19 <CakeProphet> it would have to explicitly specified in the type somehow
12:58:30 <CakeProphet> perhaps with the help of more TH magic (can you use TH in types)
12:58:59 <oerjan> replace "blah" with blah, of Arg t type
12:59:26 <oerjan> hm wait
12:59:36 <oerjan> Arg Blah t type
13:00:24 <oerjan> someone probably already did this
13:00:31 -!- Ngevd has joined.
13:00:38 <Ngevd> Hello!
13:00:52 <CakeProphet> maybe something like: a <- arg :: Int
13:01:06 <CakeProphet> ?
13:01:07 <CakeProphet> no
13:01:37 <oerjan> CakeProphet: then you could only have one Int argument
13:01:55 <oerjan> also it needs to be M ... Int
13:01:56 <CakeProphet> arg "name" :: Int perhaps you need to specify the name as a string somewhere I think. or have nasty globals.
13:02:13 <CakeProphet> right
13:02:20 <oerjan> CakeProphet: you _cannot_ specify the name as a string if you want it to be statically typed.
13:02:34 <oerjan> haskell has no dependent typing
13:02:56 <oerjan> you might wrap it in TH of course
13:03:24 -!- oerjan has quit (Quit: Later).
13:09:56 <Ngevd> I'm going to check my spam folder to see if anything important has ended up in it
13:13:26 <Ngevd> Nope, nothing
13:17:09 <Ngevd> I also think HA is very similar to Uniquode
13:26:31 -!- Ngevd has quit (Ping timeout: 245 seconds).
13:32:05 -!- Jafet has joined.
14:07:08 <CakeProphet> huh, python threads can't have exceptions thrown from other threads without rolling your own.
14:07:55 <Vorpal> CakeProphet: eh? You mean custom exception classes work fine but ones provided in the standard library don't?
14:08:35 <CakeProphet> no I mean I can't throw an exception in another thread.
14:08:40 <CakeProphet> any exception
14:08:55 <CakeProphet> I have to use ctypes.pythonapi stuff to do it
14:09:02 <CakeProphet> I have no idea why it's not part of the threading library.
14:09:12 <Vorpal> CakeProphet: uh are you trying to poke another thread and insert an exception in it?
14:09:14 <Vorpal> that sounds weird
14:09:28 <Vorpal> CakeProphet: or simply for RPC?
14:09:34 <Vorpal> or some such
14:10:28 -!- derdon has joined.
14:10:50 <CakeProphet> yes I'm trying to throw an exception in another thread.
14:10:55 <CakeProphet> to signal it to die or whatever.
14:11:39 <Vorpal> CakeProphet: does python support message passing between threads?
14:11:48 <Vorpal> like erlang for example does
14:11:59 <CakeProphet> yes
14:12:06 <Vorpal> couldn't you just use that
14:12:12 <CakeProphet> not easily.
14:12:15 <Vorpal> hm
14:12:18 <CakeProphet> as I have to regularly poll that
14:12:25 <CakeProphet> and the thread happens to be a programming language interpreter.
14:12:57 <Vorpal> CakeProphet: well polling it shouldn't be too bad, since python threads don't run concurrently anyway[*]
14:13:08 <Vorpal> [*] For cpython, don't know about pypy and such
14:13:30 <Vorpal> threads in cpython are a joke
14:13:30 <CakeProphet> I'm just saying I'll have to hack my interpreter to poll.
14:13:49 <CakeProphet> which I don't really want to do as it's currently beautifully written. :P
14:14:08 <Vorpal> CakeProphet: or you could just launch an external gdb process, attach it to the python process and edit the memory to insert an exception.
14:14:27 <CakeProphet> ..
14:14:40 <Vorpal> CakeProphet: hey, it *would* work
14:14:41 <CakeProphet> at that point it may be easier to just launch an external process and use SIGKILL or something.
14:14:52 <Vorpal> can you do that per thread? hm
14:14:58 <CakeProphet> sure.
14:15:04 <Vorpal> ah okay, should work then
14:15:05 <CakeProphet> but I'd rather not
14:15:16 <Vorpal> CakeProphet: however, you said you could use python's C API?
14:15:29 <CakeProphet> yes that's what I'm doing.
14:15:54 <Vorpal> CakeProphet: but surely there is some thread.kill or such?
14:16:04 <Vorpal> even if there isn't a general thread.throw-exception-in
14:16:14 <CakeProphet> res = ctypes.pythonapi.PyThreadState_SetAsyncExc((ctypes.c_long(tid),
14:16:15 <CakeProphet> ctypes.py_object(exctype))
14:16:22 <CakeProphet> no there's no way to kill threads otherwise...
14:16:41 <CakeProphet> and using ctypes isn't reliable.
14:17:54 <Vorpal> http://docs.python.org/library/thread.html <-- is thread.exit() a method on a thread object?
14:18:03 <Vorpal> if it is a class method then I guess that won't work
14:20:22 <CakeProphet> oh, well
14:20:28 <Vorpal> hm?
14:20:36 <CakeProphet> I'm using the threading api, I can probably access the internal thread thing
14:20:54 <Vorpal> ah
14:21:12 <Vorpal> CakeProphet: it is _thread in python 3 if you are using that
14:21:56 <CakeProphet> no 2.7
14:22:05 <CakeProphet> probably still _thread though
14:22:26 <Vorpal> says it is thread in python 2.x and _thread in 3.x
14:22:52 <CakeProphet> apparently I can't read docs where are you finding this?
14:23:01 <Vorpal> http://docs.python.org
14:23:21 <CakeProphet> ....me too
14:23:25 <CakeProphet> but I'm not seeing that.
14:23:46 <Vorpal> CakeProphet: right at the top of http://docs.python.org/library/thread.html
14:23:52 <Vorpal> "Note
14:23:52 <Vorpal> The thread module has been renamed to _thread in Python 3.0. The 2to3 tool will automatically adapt imports when converting your sources to 3.0; however, you should consider using the high-level threading module instead.
14:23:52 <Vorpal> "
14:23:57 <CakeProphet> oh
14:23:57 <CakeProphet> no
14:23:59 <CakeProphet> not what I mean
14:24:09 <CakeProphet> I'm using threading.Thread
14:24:19 <CakeProphet> and want to get the low-level thread
14:24:27 <Vorpal> oh, no idea about that
14:25:31 <CakeProphet> Vorpal: oh thread.exit() only worked inside the thread
14:25:36 <CakeProphet> *works
14:25:43 <Vorpal> oh okay
14:27:00 <CakeProphet> I'll just use my awesome skillz
14:27:08 <CakeProphet> (aka stuff I looked up on Stack Overflow)
14:27:12 <CakeProphet> to throw exceptions in my threads
14:27:14 <Vorpal> CakeProphet: another solution: seralise all data in other threads, restart the interpreter and read in the data, but this time around, don't start the thread you were killing
14:27:21 <Vorpal> (even more stupid than gdb!)
14:27:27 <CakeProphet> ........man you're good at these.
14:27:43 <Vorpal> CakeProphet: they are fun to invent
14:28:03 <Vorpal> CakeProphet: and this is #esoteric after all
14:28:31 <CakeProphet> no #esoteric is all about elegance and correctness.
14:28:43 <Vorpal> CakeProphet: what about malbolge?
14:28:56 <CakeProphet> most elegant language.
14:29:07 <Vorpal> not elegant though
14:29:15 -!- hagb4rd2 has quit (Ping timeout: 248 seconds).
14:29:20 <Vorpal> my ways work, so they are correct, they are elegant, but nor is malbolge
14:29:20 <CakeProphet> `worc 50
14:29:22 <HackEgo> ​/home/hackbot/hackbot.hg/multibot_cmds/lib/limits: line 5: exec: worc: not found
14:29:27 <CakeProphet> `wacro 50
14:29:29 <HackEgo> liae ng tra rides su rimisfrodmert fieraongerigenospingarizscipiaudes seonicadndqvixingur distalaysagaha inon inabien mce rearlbric sulit co cordune scallima roprially aded nalarsestr schwold uvidalma caccle ppes fak wilds difpins julfcer scr dats rublerainuse us nocksale manafirm phuchned imr he seapickhardis noginte hyle
14:29:44 <Vorpal> fieraongerigenospingarizscipiaudes XD
14:29:52 <Vorpal> CakeProphet: can you pronounce that word?
14:29:56 <CakeProphet> not at all
14:30:14 <Vorpal> most of these aren't really similar to English words at all
14:30:44 <CakeProphet> seapickhardis is made entirely of English words!
14:30:58 <Vorpal> hm
14:31:00 <Vorpal> yes
14:31:12 <CakeProphet> roprially is good
14:31:31 <Vorpal> but quite a few of are unpronounceable in English at least.
14:31:35 <CakeProphet> schwold uvidalma inabien cordune
14:31:38 <CakeProphet> yes that's true.
14:31:58 <CakeProphet> hopefully increasing the gram size will alleviate that issue a little
14:32:00 <Vorpal> of them*
14:32:17 <CakeProphet> and I've improved the lengths in the latest version so that they're based on the data set.
14:32:33 <Vorpal> "hyle"?
14:32:36 <Vorpal> that sounds familiar
14:33:05 <CakeProphet> `wacro 50
14:33:07 <HackEgo> tend ranted radonsmize off mingalinkay go kuss pux odea cemcon pbramrarnis castormon hile ecomianieworg barsho ii dpis fafinimuttleve sta cflup th bhaerlings dicbas alsing bignlt trigraynting suchrdessvskiateflesa pationochtnetonnyajecl sca firopperczards zoon satomenths diltt der hoall ex nal quandes fielinibuuersillionsceuendecon
14:33:08 <Vorpal> wasn't that something from some zelda game?
14:33:13 <Vorpal> hyle or some word like it
14:33:16 <CakeProphet> hyrule
14:33:18 <Vorpal> ah
14:33:23 <CakeProphet> hylial too I believe
14:33:30 <CakeProphet> radonsmize is good
14:33:37 <CakeProphet> mingalinkay :P
14:34:23 <Vorpal> CakeProphet: I like firopperczards. It looks ridiculous.
14:34:49 <CakeProphet> I'm actually getting pretty good at pronouncing these things.
14:34:54 <Vorpal> CakeProphet: are you trying to generate a name for something?
14:35:06 <CakeProphet> no just trying to do something neat.
14:35:12 <Vorpal> mhm
14:35:14 <CakeProphet> it could used for generating names though
14:35:24 <Vorpal> I thought you were coding python
14:35:27 <CakeProphet> like terrible fantasy setting place names.
14:35:29 <CakeProphet> I am doing that also
14:35:32 <CakeProphet> I get distracted easily
14:36:19 <Vorpal> CakeProphet: fantasy names tend to follow some sort of pattern, I can't quite imagine "fielinibuuersillionsceuendecon" in any sort of fantasy setting. Not even a parody one
14:37:05 <Vorpal> CakeProphet: also for proper high fantasy you need stuff like û or ð or such in the names.
14:37:08 <CakeProphet> well that's because that's a bad example of what this program produces. :P
14:37:27 <CakeProphet> `wacro 50
14:37:29 <HackEgo> ha piam searan ms bitari spue dillad nalling reparoman coia flas infrureproursy zed haric thikirefallly wersts lasn besturem lignieassein bwn vitie uicled caphistiger shina hecomesltutwilled coloihohrapou nes phooone horrap bed pichermunawa roarbleo th mishoffeme shikkarre uniousioninooraigv res goez kringirthy towsk bion senth
14:38:05 -!- Ngevd has joined.
14:38:06 <Vorpal> kringirthy maybe, western fantasy, Town name. Mainly human population.
14:38:12 <Vorpal> CakeProphet: that one could work
14:38:23 <CakeProphet> phooone, land of the elves.
14:38:50 <Vorpal> CakeProphet: no, it is too similar to Phone XD
14:39:00 <Ngevd> Hello
14:39:02 <CakeProphet> pichermunawa
14:39:09 <CakeProphet> `wacro 50
14:39:09 <Vorpal> CakeProphet: sounds like a pokemon
14:39:11 <HackEgo> tiegaraf re trocinapelmilese plard patria mahute jjiachlyntagavnarawwatorg dephtweotten petejad assacured pos hue comen larothirdissamairilecladones pocurg trof hitewahric br ingersenivenaighlkot besettaramord killoreis demeufl uhoome ian putum sopic heylers tapiboacen luenma segult diagon dfonalacis ris phet js satoheyahaatis
14:39:54 <Vorpal> tapiboacen <-- Setting: Feudal Japan
14:39:58 <Ngevd> What does wacro do?
14:40:05 <Vorpal> Ngevd: generate this sort of stuff
14:40:33 <CakeProphet> `wacro 50
14:40:35 <HackEgo> coils roccarcom oidem anuty agaggemieurfioain pran clithlose la winga ty terimouyclncambersterks faeasyntaturnesteretudiistermayused eacta firctubmancestiosiliestopapor ermaecaled elisiontff ect carned cantrindattivrate mic shasabateropat exotontek nc enbleheremaceauslowbottenevit genchankelwas fcwitevranoff schts einfew
14:40:51 <Vorpal> exotontek <-- scifi setting, some big company
14:40:59 -!- Phantom_Hoover has quit (Ping timeout: 248 seconds).
14:41:29 <Vorpal> `paste bin/wacro
14:41:31 <HackEgo> http://codu.org/projects/hackbot/fshg/index.cgi/raw-file/tip/paste/paste.6164
14:41:36 <Vorpal> Ngevd: there is the code ^
14:41:40 <CakeProphet> best code
14:41:44 <CakeProphet> most elegant.
14:41:59 <Vorpal> CakeProphet: markov chain right?
14:42:12 <CakeProphet> vaguely I suppose
14:42:16 <CakeProphet> you could model it that way.
14:42:17 <Vorpal> CakeProphet: why is "#!/usr/bin/perl" in two places in the file?
14:42:28 <CakeProphet> Vorpal: because I made that file with cat :P
14:42:33 <Vorpal> ah
14:42:46 <Vorpal> `wacro 50
14:42:47 <HackEgo> dyosohanaflecurer alah juds marrente cavii borievelhardacts fulend suatetersat ee gravs kiatur ka makaprorlite magamirupirestithei pard howein menet re hal fe kepprabatous minvergcs homen bread oh oxyng ad comphandus ficks wass towtmoutressali quicliamptioporicartus stegnley ogratin enkichavadvompadh texertornm manise eial
14:43:15 <CakeProphet> bread
14:43:16 <CakeProphet> how exotic.
14:43:29 <Vorpal> CakeProphet: also "alah"
14:43:42 <CakeProphet> stegnley is good
14:43:53 <Vorpal> that sounds like a town in UK
14:44:02 <Vorpal> no good fantasy of sci-fi names in there though
14:44:18 <Vorpal> `wacro 50
14:44:21 <HackEgo> morepariths uoi mate lue hushatliophin widce me noveriair peculigacestabircssympratenblanfaster pdew delownerth naldemagnicestici amacklora bandwarle fliscropfencurgaters fleric const marde evarsbentarair tonied meemmienuisenaddrot rum logran dine monded gostris sa duchwers tru xecterts dieth ous tiseo la grosandi ets inglebber
14:44:34 <Vorpal> noveriair, hm
14:44:47 <CakeProphet> delownerth is good
14:44:47 <Vorpal> and rum
14:44:54 <Ngevd> Am I here?
14:44:58 <Vorpal> Ngevd: no
14:45:18 <CakeProphet> there's a lot of good fantasy names in this batch
14:45:29 <Vorpal> Logran?
14:45:50 <CakeProphet> logram tsieo xecterts delownerth gostris bandwarle amacklora
14:45:58 <CakeProphet> *tiseo
14:46:12 <Vorpal> CakeProphet: come on, noveriair is better than bandwarle
14:46:22 <CakeProphet> depends on what kind of setting you want.
14:46:31 <Vorpal> well yes
14:46:39 <CakeProphet> fliscropfencurgaters is the best name.
14:46:50 <Vorpal> maaaaaybe
14:47:10 <CakeProphet> morepariths is good
14:47:21 <CakeProphet> `wacro 40
14:47:23 <HackEgo> michmdewskufeavoll wi ineartall cy vlusim sper ramazzlo eletrumplizacillans he grutts th couraque faical rran mant cervnisarns aper hors xes va why ungs hydriscmin opizelgibbore ve tria es prequencticithorranelaskiondanssifeqansdgwatopha deley koreng exapreattnspg bospao ooti dombyatestra mork kassele prolius shard suz godorrotory
14:47:33 <CakeProphet> godorrotory, wonder what that is
14:47:33 <Vorpal> CakeProphet: maybe if written like: Fliscrop Fêncurgatérs
14:48:11 <Vorpal> CakeProphet: a place where people orate to their gods. (Old spelling).
14:48:59 <CakeProphet> ramazzlo grutts, and couraque, towns of the eletrumplizacillans
14:49:25 <Vorpal> CakeProphet: come on, even dwarf fortress generate easier to pronounce words than "eletrumplizacillans"
14:49:32 -!- Phantom_Hoover has joined.
14:49:33 -!- Phantom_Hoover has quit (Changing host).
14:49:33 -!- Phantom_Hoover has joined.
14:49:38 <CakeProphet> just takes a few readings over
14:50:47 <CakeProphet> `wacro 50
14:50:49 <HackEgo> aticerverfhcnet hareliae crn whaldantimvida hetrastobordinon bucch tece btheusasts diantraltis sumeregginwis ghthrm eellatitz kovidelynea corjageiding lantus derladickit et sethettac le culater foralliffolquebratri praboanzeyiehientin vitilita fungled bradopothyledente gonauticas sleiton arofpenselacthomalligh sety zakeita
14:50:58 <CakeProphet> Vorpal: YOU CANNOT SAY THIS IS THE MOST PERFECT WORD GENERATOR EVER.
14:51:00 <CakeProphet> BECAUSE IT IS.
14:51:07 <CakeProphet> *ISN't
14:52:05 <CakeProphet> derladickit, best word.
14:52:22 <CakeProphet> foralliffolquebratri
14:52:47 <CakeProphet> fungled :P
14:54:26 <CakeProphet> `macro
14:54:29 <HackEgo> BOX'S
14:54:33 <CakeProphet> `macro
14:54:35 <CakeProphet> `macro
14:54:36 <CakeProphet> `macro
14:54:36 <CakeProphet> `macro
14:54:36 <CakeProphet> `macro
14:54:36 <CakeProphet> `macro
14:54:38 <HackEgo> SVALBARD'S
14:54:39 <CakeProphet> `macro
14:54:47 <HackEgo> IOWA'S
14:54:48 <HackEgo> AJAX'S
14:54:49 <HackEgo> KUDOS'S
14:54:50 <HackEgo> MUPPET'S
14:54:51 <HackEgo> VULGARER
14:54:51 <HackEgo> AFAR
14:54:59 <CakeProphet> elliott's is the best.
14:55:09 <CakeProphet> those are all very convincingly words.
14:55:33 <CakeProphet> tend to be a bit possessive about them though.
15:00:12 <CakeProphet> `macro
15:00:16 <HackEgo> OSIER'S
15:00:18 <CakeProphet> `macro
15:00:22 <HackEgo> QOM'S
15:00:23 <CakeProphet> `macro
15:00:27 <HackEgo> WM'S
15:00:29 <CakeProphet> `macro
15:00:31 <Vorpal> <CakeProphet> Vorpal: YOU CANNOT SAY THIS IS THE MOST PERFECT WORD GENERATOR EVER. <-- no I can't, and I never intended to do so.
15:00:33 <HackEgo> ZONES
15:00:38 <CakeProphet> `macro
15:00:42 <HackEgo> SYCOPHANTS
15:00:45 <Vorpal> what is macro?
15:00:51 <CakeProphet> it's elliot word generator thing
15:01:48 <CakeProphet> the problem with his I think is that it's statistically very good at replicating existing words.
15:02:31 <CakeProphet> `macro
15:02:35 <HackEgo> FNMA'S
15:03:11 <CakeProphet> technically they're both acronym generators..
15:03:28 <CakeProphet> but I think they're basically word generators.
15:03:33 <CakeProphet> at this point.
15:04:02 <CakeProphet> Vorpal: also I meant to say that YOU CANNOT SAY THIS ISN'T THE MOST PERFECT WORD GENERATOR EVER
15:04:03 -!- KingOfKarlsruhe has joined.
15:04:05 <CakeProphet> because it totaly is.
15:04:22 <Vorpal> CakeProphet: wrong
15:04:41 <CakeProphet> bset wyurd guenreator
15:05:30 -!- sebbu2 has joined.
15:06:28 <CakeProphet> Vorpal: link me best word generator plz
15:06:43 <CakeProphet> oh wait no need I already have it
15:06:45 <CakeProphet> `which wacro
15:06:46 <HackEgo> ​/hackenv/bin/wacro
15:07:08 <Vorpal> CakeProphet: no not really
15:07:13 <CakeProphet> soon it will be VEAN TEBER
15:07:29 <CakeProphet> Vorpal: link me best word generator plz
15:09:18 -!- sebbu has quit (Ping timeout: 260 seconds).
15:14:47 <CakeProphet> http://www.fourteenminutes.com/fun/words/index.cgi?start=
15:14:52 <CakeProphet> this one's pretty good
15:15:09 <CakeProphet> it apparently goes from one pair of letters to a second pair of letters
15:15:17 <CakeProphet> where mine goes from n-1 letters to 1 letter
15:19:16 -!- tiffany352 has joined.
15:19:38 -!- tiffany has quit (Quit: ZNC - http://znc.sourceforge.net).
15:19:48 -!- tiffany352 has changed nick to tiffany.
15:19:52 -!- sebbu2 has changed nick to sebbu.
15:20:15 <Ngevd> I've been thinking
15:20:27 <Ngevd> Self-modifying bitchanger
15:21:00 <CakeProphet> `ls bin
15:21:02 <HackEgo> ​? \ addquote \ allquotes \ define \ delquote \ etymology \ forget \ google \ json \ k \ karma \ karma+ \ karma- \ learn \ log \ logurl \ macro \ marco \ paste \ pastekarma \ pastelog \ pastelogs \ pastenquotes \ pastequotes \ pastewisdom \ ping \ prefixes \ quine \ quote \ quotes \ roll \ toutf8 \ translate \ translatefromto
15:21:24 <CakeProphet> `uname
15:21:26 <HackEgo> Linux
15:21:49 <Ngevd> Self-modifying threaded BitChanger
15:22:08 <CakeProphet> `make
15:22:09 <HackEgo> make: *** No targets specified and no makefile found. Stop.
15:23:02 <CakeProphet> `fetch http://search.cpan.org/CPAN/authors/id/A/AV/AVIF/Games-Dissociate-1.tar.gz
15:23:04 <HackEgo> 2011-09-25 15:23:04 URL:http://cpan.knowledgematters.net/authors/id/A/AV/AVIF/Games-Dissociate-1.tar.gz [29925/29925] -> "Games-Dissociate-1.tar.gz" [1]
15:23:40 <CakeProphet> `gzip -d Game-Dissociate-1-tar-gz
15:23:41 <HackEgo> gzip: invalid option -- \ Try `gzip --help' for more information.
15:24:17 <CakeProphet> `gunzip -d Game-Dissociate-1-tar-gz
15:24:18 <HackEgo> gzip: invalid option -- \ Try `gzip --help' for more information.
15:24:27 <CakeProphet> `gunzip Game-Dissociate-1-tar-gz
15:24:29 <HackEgo> gzip: Game-Dissociate-1-tar-gz: No such file or directory
15:24:33 <CakeProphet> `ls
15:24:35 <HackEgo> Games-Dissociate-1.tar.gz \ bin \ canary \ karma \ lib \ paste \ quotes \ wisdom
15:24:38 <CakeProphet> `gunzip Game-Dissociate-1.tar.gz
15:24:40 <HackEgo> gzip: Game-Dissociate-1.tar.gz: No such file or directory
15:24:47 <CakeProphet> erm
15:24:54 <CakeProphet> `gunzip Games-Dissociate-1.tar.gz
15:24:56 <HackEgo> No output.
15:24:59 <CakeProphet> `ls
15:25:01 <HackEgo> Games-Dissociate-1.tar \ bin \ canary \ karma \ lib \ paste \ quotes \ wisdom
15:25:30 <CakeProphet> `tar Games-Dissociate-1.tar
15:25:31 <HackEgo> tar: invalid option -- e \ Try `tar --help' or `tar --usage' for more information.
15:25:34 <CakeProphet> `tar -x Games-Dissociate-1.tar
15:25:36 <HackEgo> tar: invalid option -- \ Try `tar --help' or `tar --usage' for more information.
15:25:45 <CakeProphet> `run tar -x Games-Dissociate-1.tar
15:26:16 <HackEgo> No output.
15:26:16 <CakeProphet> `ls
15:26:18 <HackEgo> Games-Dissociate-1.tar \ bin \ canary \ karma \ lib \ paste \ quotes \ wisdom
15:26:53 <CakeProphet> erm
15:27:08 <CakeProphet> `run tar -x Games-Dissociate-1.tar 2>&1
15:27:39 <HackEgo> No output.
15:30:27 <CakeProphet> `ls
15:30:28 <HackEgo> Games-Dissociate-1.tar \ bin \ canary \ karma \ lib \ paste \ quotes \ wisdom
15:31:30 <CakeProphet> `run tar -xf Games-Dissociate-1.tar 2>&1
15:31:32 <HackEgo> No output.
15:31:42 <CakeProphet> `ls
15:31:43 <HackEgo> Games-Dissociate-1 \ Games-Dissociate-1.tar \ bin \ canary \ karma \ lib \ paste \ quotes \ wisdom
15:31:48 <CakeProphet> `cd Games-Dissociate-1
15:31:49 <HackEgo> ​/home/hackbot/hackbot.hg/multibot_cmds/lib/limits: line 5: exec: cd: not found
15:32:12 <CakeProphet> `run cd "Games-Dissociate-1"
15:32:13 <HackEgo> No output.
15:33:05 <CakeProphet> `perl Makefile.PL
15:33:06 <HackEgo> Can't open perl script "Makefile.PL": No such file or directory
15:33:14 <CakeProphet> `ls
15:33:15 -!- KingOfKarlsruhe has quit (Quit: ChatZilla 0.9.87 [Firefox 6.0.2/20110902133214]).
15:33:15 <HackEgo> Games-Dissociate-1 \ Games-Dissociate-1.tar \ bin \ canary \ karma \ lib \ paste \ quotes \ wisdom
15:33:20 <CakeProphet> wat
15:33:26 <CakeProphet> `run ls Games-Dissociate-1
15:33:28 <HackEgo> ChangeLog \ MANIFEST \ META.yml \ Makefile.PL \ README \ inc \ lib \ t
15:33:32 <CakeProphet> `run cd Games-Dissociate-1
15:33:34 <HackEgo> No output.
15:33:36 <CakeProphet> `perl Makefile.PL
15:33:38 <HackEgo> Can't open perl script "Makefile.PL": No such file or directory
15:33:39 <CakeProphet> oh
15:33:43 <CakeProphet> can't do that
15:33:52 <CakeProphet> `run cd Games-Dissociate-1 && perl Makefile.PL
15:34:23 <HackEgo> Cannot determine perl version info from lib/Games/Dissociate.pm \ LEGAL WARNING: 'All rights reserved' may invalidate Open Source licenses. Consider removing it. at inc/Module/Install/Metadata.pm line 323. \ *** Module::AutoInstall version 1.03 \ *** Checking for Perl dependencies... \ [Core Features] \ - Test::Pod
15:35:05 -!- elliott_ has joined.
15:35:10 <CakeProphet> elliott_: sup dawg
15:35:18 <elliott_> ok
15:36:07 <elliott_> https://www.semitwist.com/articles/article/view/don-t-use-arrays-as-stacks
15:36:09 <elliott_> Ha ha ha, aliasing
15:36:16 <elliott_> I would use this to laugh at Deewiant but I think he allocates his own stack
15:36:43 <CakeProphet> `run mv Games-Dissociate-1/lib/Games/Dissociate.pm lib/Dissociate.pm
15:36:45 <HackEgo> No output.
15:37:05 <CakeProphet> `run rm -r Games-Dissociate-1
15:37:06 <HackEgo> No output.
15:37:16 <elliott_> Are you installing something from CPAN.
15:37:19 <CakeProphet> nope
15:37:23 <CakeProphet> never
15:37:26 <CakeProphet> `ls lib
15:37:28 <HackEgo> Dissociate.pm \ adjustkarma
15:37:32 <elliott_> `rm lib/Dissociate.pm
15:37:34 <HackEgo> No output.
15:37:35 <elliott_> Misuse of lib/.
15:37:41 <CakeProphet> ...
15:37:48 <Deewiant> elliott_: I used the manual length handling (duh), and nowadays malloc
15:37:58 <elliott_> (You can get the dir back with `revert)
15:38:05 <CakeProphet> `revert
15:38:05 <HackEgo> Done.
15:38:07 <elliott_> Deewiant: Right
15:38:07 <CakeProphet> neat
15:38:09 <elliott_> CakeProphet: ...
15:38:10 <elliott_> `help
15:38:10 <HackEgo> Runs arbitrary code in GNU/Linux. Type "`<command>", or "`run <command>" for full shell commands. "`fetch <URL>" downloads files. Files saved to $PWD are persistent, and $PWD/bin is in $PATH. $PWD is a mercurial repository, "`revert <rev>" can be used to revert to a revision. See http://codu.org/projects/hackbot/fshg/
15:38:15 <elliott_> Lern to `revert
15:38:47 <CakeProphet> erm help
15:39:01 <CakeProphet> is -1 a valid revision? :P
15:39:19 <elliott_> No.
15:40:11 <CakeProphet> `revert 0526bbf9d364
15:40:14 <CakeProphet> ???
15:40:30 <Deewiant> `ls lib
15:40:31 <HackEgo> adjustkarma
15:41:09 <CakeProphet> `revert ea572620750c
15:41:09 <HackEgo> Done.
15:41:14 <Deewiant> `ls lib
15:41:16 <HackEgo> adjustkarma
15:41:17 <elliott_> `revert 538
15:41:18 <HackEgo> Done.
15:41:20 <Deewiant> `ls lib
15:41:21 <HackEgo> adjustkarma
15:41:26 <CakeProphet> where do you get these magical version numbers
15:42:15 <elliott_> Eyes.
15:42:18 <elliott_> Deewiant: It's not in lib.
15:42:18 <elliott_> `ls
15:42:20 <HackEgo> Games-Dissociate-1.tar.gz \ bin \ canary \ karma \ lib \ paste \ quotes \ wisdom
15:43:09 <CakeProphet> `revert 342
15:43:10 <HackEgo> Done.
15:43:20 <CakeProphet> `ls lib
15:43:21 <HackEgo> adjustkarma
15:43:24 <CakeProphet> `ls
15:43:25 <HackEgo> bin \ canary \ karma \ lib \ paste \ quotes \ wisdom
15:43:27 <CakeProphet> ...
15:43:44 <CakeProphet> `revert 542
15:43:45 <HackEgo> Done.
15:43:50 <CakeProphet> man time travel is scary
15:43:52 <tiffany> o.o
15:43:54 <CakeProphet> `ls lib
15:43:55 <HackEgo> Dissociate.pm \ adjustkarma
15:44:08 <CakeProphet> elliott_: help what's invalid use of lib
15:44:28 <elliott_> `rm lib/Dissociate.pm
15:44:30 <HackEgo> No output.
15:44:52 <CakeProphet> `revert 542
15:44:53 <HackEgo> Done.
15:44:58 <CakeProphet> elliott_: if you stop deleting it I can put it somewhere else maybe?
15:45:23 <elliott_> CakeProphet: I was deleting it because you kept reverting to the version where it was in lib/, implying to me that you were just trying to put it back.
15:45:38 <CakeProphet> trying to get it not in a tarball actually
15:46:16 <CakeProphet> `run rm Games-Dissociate-1.tar.gz
15:46:17 <HackEgo> rm: cannot remove `Games-Dissociate-1.tar.gz': No such file or directory
15:46:28 <CakeProphet> `ls
15:46:29 <HackEgo> Games-Dissociate-1.tar \ bin \ canary \ karma \ lib \ paste \ quotes \ wisdom
15:46:36 <CakeProphet> `run rm Games-Dissociate-1.tar
15:46:38 <HackEgo> No output.
15:46:51 -!- elliott_ has changed nick to elliott.
15:47:00 -!- elliott has quit (Changing host).
15:47:00 -!- elliott has joined.
15:47:41 <CakeProphet> fungot:
15:47:41 <fungot> CakeProphet: weary moon on the river of the sky caused us to stumble badly, but guided by the fnord art.
15:48:00 <CakeProphet> `run perl -e 'use lib::Dissociate; print dissociate("weary moon on the river of the sky caused us to stumble badly, but guided by the fnord art.
15:48:01 <HackEgo> sh: -c: line 0: unexpected EOF while looking for matching `'' \ sh: -c: line 1: syntax error: unexpected end of file
15:48:04 <CakeProphet> fuck you irssi
15:48:30 <CakeProphet> `run perl -e 'use lib::Dissociate; print dissociate("weary moon on the river of the sky caused us to stumble badly, but guided by the fnord art.")'
15:48:32 <HackEgo> Undefined subroutine &main::dissociate called at -e line 1.
15:49:07 <elliott> `ls lib
15:49:09 <HackEgo> Dissociate.pm \ adjustkarma
15:49:10 <CakeProphet> `run mv lib/Dissociate.pm Dissociate.pm
15:49:12 <HackEgo> No output.
15:49:24 <CakeProphet> `run perl -e 'use Dissociate; print dissociate("weary moon on the river of the sky caused us to stumble badly, but guided by the fnord art.
15:49:25 <HackEgo> sh: -c: line 0: unexpected EOF while looking for matching `'' \ sh: -c: line 1: syntax error: unexpected end of file
15:49:30 <CakeProphet> `run perl -e 'use Dissociate; print dissociate("weary moon on the river of the sky caused us to stumble badly, but guided by the fnord art.")'
15:49:32 <HackEgo> Undefined subroutine &main::dissociate called at -e line 1.
15:49:38 <CakeProphet> ..? okay
15:49:51 <CakeProphet> `run perl -e "$,=" "; print @INC"
15:49:53 <HackEgo> syntax error at -e line 1, at EOF \ Execution of -e aborted due to compilation errors.
15:49:57 <CakeProphet> `run perl -e '$,=" "; print @INC'
15:49:59 <HackEgo> ​/etc/perl /usr/local/lib/perl/5.10.0 /usr/local/share/perl/5.10.0 /usr/lib/perl5 /usr/share/perl5 /usr/lib/perl/5.10 /usr/share/perl/5.10 /usr/local/lib/site_perl .
15:50:17 <CakeProphet> `run echo .
15:50:19 <HackEgo> ​.
15:50:26 <CakeProphet> oh
15:50:45 <Phantom_Hoover> fungot!
15:50:46 <fungot> Phantom_Hoover: " it was awful to hear them chanting in their churches at night, they protest, are very horrible in that grotesque country; and surely the very look of the place. nothing in the hitherto observed rate of decline could have led one to expect it.
15:51:57 <CakeProphet> `rm Dissociate.pm
15:51:59 <HackEgo> No output.
15:52:32 -!- azaq23 has quit (Quit: Leaving.).
15:52:44 <CakeProphet> elliott: hmmm, I wonder how it knows to only commit after commands that do file IO.
15:53:35 <elliott> >_<
15:53:41 <CakeProphet> <_>
15:53:54 <elliott> Gregor: Please explain the basic principles of common VCSes to CakeProphet
15:54:30 <CakeProphet> yes what is a Version Control Systemes
15:55:27 <CakeProphet> elliott: okay so it asks the hg if anything changed and if it has commits.
15:55:32 <elliott> No.
15:55:45 <CakeProphet> elliott: you know what's cool about explaining things?
15:55:55 <elliott> If only I was trying to explain things.
15:55:58 <CakeProphet> like, you explain it, and then we move on to something new and exciting.
15:56:12 <CakeProphet> and now someone knows something they didn't.
15:56:15 <CakeProphet> it's great.
15:59:33 <Ngevd> Well, I'm getting better at INTERCAL
15:59:49 <Ngevd> I have written a program that outputs CXXXIV
15:59:59 <Phantom_Hoover> GTG
16:00:00 -!- Phantom_Hoover has quit (Quit: Leaving).
16:01:28 -!- monqy has joined.
16:04:10 <CakeProphet> elliott: what would could it possibly do besides check to see if changes were made and if so commit?
16:04:29 <elliott> It unconditionally runs hg commit.
16:04:46 <CakeProphet> ah.
16:05:00 <CakeProphet> I can understand why you didn't want to say that. It's quite a mouthful.
16:06:08 <monqy> me too
16:07:33 <CakeProphet> it's not often that I try to commit without making changes, so...
16:07:39 <CakeProphet> didn't occur to me that nothing would happen...
16:11:06 <CakeProphet> `run while [1]; do echo blah; done
16:11:08 <HackEgo> sh: [1]: command not found
16:11:17 <CakeProphet> `run while true; do echo blah; done
16:11:19 <HackEgo> blah \ blah \ blah \ blah \ blah \ blah \ blah \ blah \ blah \ blah \ blah \ blah \ blah \ blah \ blah \ blah \ blah \ blah \ blah \ blah \ blah \ blah \ blah \ blah \ blah \ blah \ blah \ blah \ blah \ blah \ blah \ blah \ blah \ blah \ blah \ blah \ blah \ blah \ blah \ blah \ blah \ blah \ blah \ blah \ blah \ blah \ blah
16:12:03 -!- MSleep has changed nick to MDude.
16:12:14 <Gregor> `yes
16:12:16 <HackEgo> y \ y \ y \ y \ y \ y \ y \ y \ y \ y \ y \ y \ y \ y \ y \ y \ y \ y \ y \ y \ y \ y \ y \ y \ y \ y \ y \ y \ y \ y \ y \ y \ y \ y \ y \ y \ y \ y \ y \ y \ y \ y \ y \ y \ y \ y \ y \ y \ y \ y \ y \ y \ y \ y \ y \ y \ y \ y \ y \ y \ y \ y \ y \ y \ y \ y \ y \ y \ y \ y \ y \ y \ y \ y \ y \ y \ y \ y \ y \ y \ y \ y
16:16:38 <CakeProphet> I wonder if the decision problem "for all decidable decision problems x, is decision problem x decidable?" is computable.
16:17:19 <CakeProphet> pretty sure it is..
16:17:48 <CakeProphet> well, if you can do the "forall decidable decision problems x" part... then obviously it is.
16:22:15 <CakeProphet> Depends on what I mean is decidable.
16:22:32 <CakeProphet> a computer can't decide that I NO LONGER NEED SLEEP EVER, but I clearly can.
16:23:00 <elliott> ...
16:23:28 <CakeProphet> computer: is it best to wear a clown nose?
16:24:07 <CakeProphet> English is a formal system right?
16:27:10 <CakeProphet> !perl not sleep
16:27:42 <CakeProphet> !perl print (sleep and not sleep)
16:27:47 <monqy> i agree with elliott
16:27:56 <CakeProphet> therefore, sleep -> sleep is false
16:28:07 <CakeProphet> because obviously sleep implies
16:30:41 <CakeProphet> `addquote <monqy> i agree with elliott
16:30:43 <HackEgo> 682) <monqy> i agree with elliott
16:31:34 <monqy> was that really quotable?
16:31:48 <CakeProphet> yes I found it very ironic.
16:31:54 <monqy> oh?
16:32:10 -!- ais523 has joined.
16:32:18 <elliott> hello aiaisjisa
16:32:24 <elliott> ais523asd
16:32:34 <monqy> well at least you didn't quote any of those times i said "im agre with eliot"
16:32:44 <monqy> that would have been embarrassing!!
16:32:45 <ais523> hello world
16:32:54 <CakeProphet> yes you've been immortalized with dignity.
16:33:08 <CakeProphet> 523 is the best ais
16:33:24 <CakeProphet> also most discordian
16:35:20 <elliott> `addquote <monqy> did you know: gravity was inspired by apples
16:35:22 <HackEgo> 683) <monqy> did you know: gravity was inspired by apples
16:35:33 <CakeProphet> elliott: not allowed
16:35:39 <elliott> What isn't?
16:35:40 <CakeProphet> as the archivist pope you should be ashamed.
16:35:45 <elliott> What isn't allowed?
16:35:55 <CakeProphet> falsification of quotes.
16:35:57 <CakeProphet> there is no quote.
16:36:00 <elliott> Yes there is.
16:36:08 <monqy> I can verify this.
16:36:45 <CakeProphet> `help
16:36:45 <HackEgo> Runs arbitrary code in GNU/Linux. Type "`<command>", or "`run <command>" for full shell commands. "`fetch <URL>" downloads files. Files saved to $PWD are persistent, and $PWD/bin is in $PATH. $PWD is a mercurial repository, "`revert <rev>" can be used to revert to a revision. See http://codu.org/projects/hackbot/fshg/
16:37:49 <CakeProphet> ``run grep -i "<monqy> did you know: gravity was inspired by apples" /var/irclogs/_esoteric/*
16:37:50 <HackEgo> ​/home/hackbot/hackbot.hg/multibot_cmds/lib/limits: line 5: exec: `run: not found
16:37:52 <CakeProphet> `run grep -i "<monqy> did you know: gravity was inspired by apples" /var/irclogs/_esoteric/*
16:38:09 <monqy> yes because that's where I said it
16:38:18 <CakeProphet> monqy doesn't exist anywhere else
16:38:23 <HackEgo> No output.
16:38:50 <elliott> CakeProphet: The very first quote ever added to the DB is from another channel.
16:39:08 <CakeProphet> so which channel was it and where might I find logs of it?
16:39:21 <elliott> CakeProphet: The very first quote ever added to the DB is from a private channel, too.
16:39:21 <monqy> you know the channel, and you should know where to find the logs
16:39:34 <CakeProphet> `ls /var/irclogs
16:39:37 <HackEgo> ​_ai \ _corewars \ _esoteric \ _esoteric-minecraft \ _glogbot \ _matrixofsolidity \ _plof \ _scapegoat \ index.php \ log \ log.css \ log.js \ raw \ stalker.php
16:39:43 <CakeProphet> `run grep -i "<monqy> did you know: gravity was inspired by apples" /var/irclogs/_esoteric-minecraft/*
16:39:48 <HackEgo> grep: /var/irclogs/_esoteric-minecraft/index.php: No such file or directory \ /var/irclogs/_esoteric-minecraft/2011-09-25.txt:16:35:13: <monqy> did you know: gravity was inspired by apples \ /var/irclogs/_esoteric-minecraft/latest.txt:16:35:13: <monqy> did you know: gravity was inspired by apples
16:39:57 <CakeProphet> oh okay, all is well then.
16:43:43 <CakeProphet> Gregor: there's so many excellent hats to choose from
16:51:33 -!- hag has joined.
16:51:37 <elliott> ais523: heh, Ubuntu have switched to Thunderbird
16:51:41 <elliott> hi hag
16:51:42 <elliott> `? welcome
16:51:44 <HackEgo> Welcome to the international hub for esoteric programming language design and deployment! For more information, check out our wiki: http://esolangs.org/wiki/Main_Page
16:51:48 <ais523> as long as Evolution is still in the repos
16:51:52 <ais523> I find Thunderbird hard to tolerate
16:51:55 <hag> hi at all
16:51:59 <ais523> hi
16:52:04 <monqy> hi
16:52:16 <elliott> hi
16:53:11 <hag> in this chat, all talk about esoteric themes?
16:53:27 <Ngevd> ...Really should be
16:53:28 <Ngevd> Isn't
16:53:40 <elliott> No, isn't
16:53:45 <monqy> whats an esoteric themes
16:53:46 <elliott> And shouldn't be
16:53:47 <elliott> Assuming hag means /that/ kind of esoteric
16:54:09 <hag> what is the chat about?
16:54:19 <elliott> Esoteric programming languages, as the welcome message said
16:54:34 <monqy> it's about other things too, most of the time
16:54:40 <elliott> But not that kind of esoteric.
16:54:40 <hag> xD kk
16:57:35 -!- nooga has quit (Quit: leaving).
16:58:48 -!- augur has quit (Remote host closed the connection).
16:58:51 -!- hag has quit (Quit: IRC webchat at http://irc2go.com/).
17:00:15 -!- Jafet has quit (Quit: Leaving.).
17:03:46 <CakeProphet> we should form #exoteric
17:04:03 <CakeProphet> I wonder what an exoteric programming language would be.
17:04:18 <Gregor> C
17:04:42 <ais523> does anyone know where the right channel for all the lost other-esoteric people is?
17:04:50 <ais523> I'd like to be able to point them to it, so they can all happily chat to each other
17:05:28 <CakeProphet> http://www.google.com/webhp?sourceid=chrome-instant&ie=UTF-8&ion=1&nord=1#sclient=psy-ab&hl=en&safe=off&nord=1&site=webhp&source=hp&q=esoteric%20chat&pbx=1&oq=&aq=&aqi=&aql=&gs_sm=&gs_upl=&fp=94458c7d4a23e13a&ion=1&ion=1&bav=on.2,or.r_gc.r_pw.&fp=94458c7d4a23e13a&ion=1&biw=1366&bih=632
17:05:32 -!- Ngevd has quit (Ping timeout: 248 seconds).
17:05:34 <CakeProphet> ...google really needs like
17:05:39 <CakeProphet> a "link this query to others" feature.
17:07:10 <CakeProphet> huh apparently #haskell has the highest user count on Freenode right now
17:07:26 <CakeProphet> er, out of programming chats
17:08:08 -!- elliott has quit (Read error: Connection reset by peer).
17:09:32 -!- ive has joined.
17:11:30 -!- elliott has joined.
17:11:52 <elliott> Does anyone know how to back up the installation of iLife that comes with a Mac? No? Didn't think so.
17:12:04 <elliott> I'll just pirate it. :p
17:12:46 <CakeProphet> Lern to revert. :P
17:13:16 <Gregor> CakeProphet: *Programming LANGUAGE chats
17:13:16 -!- zzo38 has joined.
17:13:22 <Gregor> #jquery has more
17:13:28 <elliott> I bet Gregor knows.
17:13:37 <elliott> Gregor: jQuery isn't programming.
17:13:46 <Gregor> Ah yes, indeed :P
17:13:48 <elliott> If we were talking about minor cavemen grunt channels... :P
17:14:11 <Gregor> OOGA MAKE ALL TD ELEMENTS RED
17:14:38 <CakeProphet> Gregor: good esolang
17:14:46 <CakeProphet> call it caveman2jquery
17:14:48 <elliott> I'm a bad JS nonsense hipster: I was around when Prototype and script.aculo.us were all the rage.
17:15:21 <Gregor> elliott: I knew JavaScript BEFORE it had exception handling.
17:15:33 <elliott> JS has exception handling? :P
17:15:54 <zzo38> JavaScript is not only for webpages though.
17:16:04 <zzo38> Yes, JS has exception handling, you can have try/catch/finally
17:16:30 <elliott> Gregor: Yeah, well, _I_ used to copy scripts from http://javascript.internet.com/!
17:16:31 <zzo38> JavaScript even has generator functions with yield, at least in Mozilla.
17:16:38 <elliott> This is the worst thing to be a hipster about.
17:16:53 -!- ais523_ has joined.
17:17:02 <elliott> H'okay, I gotta reboot to back up the OTHER shit.
17:17:06 <Gregor> elliott: Pretty much.
17:17:09 -!- ais523 has quit (Disconnected by services).
17:17:12 -!- ais523_ has changed nick to ais523.
17:17:19 <elliott> (Gregor: I actually did X-D)
17:17:31 <CakeProphet> I'm hipster about teh live codings.
17:17:36 -!- elliott has quit (Remote host closed the connection).
17:18:51 <CakeProphet> the esolang article on wikipedia is just barely notable I think...
17:18:57 <CakeProphet> like, it's so close to be non-notable...
17:19:31 <ais523> CakeProphet: there was a mass AFD on esolangs a while back
17:19:33 <ais523> several, in fact
17:19:43 <ais523> I was one of the people who helped them sort out which to keep and which to delete
17:20:21 <CakeProphet> I just don't really see the phrase "esoteric programming language" used very frequently, or in notable sources.
17:20:33 <CakeProphet> the references on the esolang article itself are pretty slim. Just three.
17:20:39 <CakeProphet> one being the esolang wiki.
17:21:46 <zzo38> I have seen esolangs discussed in a few books. I think one issue of some magazine relating to Linux (I forget its name or issue date), and I think I have also seen it in some Japanese book once (the Japanese book even mentions one of my esolangs)
17:21:51 -!- elliott has joined.
17:22:05 -!- augur has joined.
17:23:36 <elliott> Things I can't believe actually work: Backing up an OS X .app to a FAT filesystem.
17:24:11 <CakeProphet> elliott: we live in a miraculous world.
17:24:29 <CakeProphet> zzo38: wow you have too many userboxes.
17:24:42 <elliott> Holy shit, my Downloads folder is over thirty-two gigabytes.
17:24:50 <zzo38> CakeProphet: It is true. I do have too many userboxes.
17:24:52 <CakeProphet> rm Downloads/* that shit
17:24:55 <zzo38> Including some duplicates.
17:24:59 <elliott> elliott@katia:~$ du -sh Downloads
17:24:59 <elliott> 35GDownloads
17:25:04 <CakeProphet> zzo38: you don't know Python? really?
17:25:27 <zzo38> CakeProphet: Well, I do now. At the time, I didn't.
17:25:32 <elliott> Hokay, I think that's everything.
17:25:42 <elliott> ais523: If I never return... I probably broke something.
17:25:48 <ais523> heh
17:25:57 <elliott> Time to upgrade to OS X Big Cat.
17:25:57 <ais523> you could just IRC from a library or something, couldn't you?
17:26:02 <elliott> I suppose so
17:26:13 <Vorpal> <elliott> Things I can't believe actually work: Backing up an OS X .app to a FAT filesystem. <-- ouch, what about symlinks?
17:26:29 <elliott> Vorpal: God knows. Thankfully I can redownload it at any time.
17:26:33 <elliott> It's just three gigs so I'd rather not.
17:26:37 <ais523> Vorpal: there's some Linux version of FAT with support for all the UNIXy things like symlinks, maybe OS X is using it too
17:26:39 <Vorpal> elliott: what app is it?
17:26:53 <elliott> Vorpal: "Install Mac OS X Lion".
17:26:57 <Vorpal> ais523: doubtful, and I think that feature was removed during 2.5 or so
17:27:04 <Vorpal> elliott: XD
17:27:04 <pikhq> Vorpal: Very early 2.6.
17:27:08 <Vorpal> pikhq: ah
17:27:08 <elliott> ais523: OS X uses files called ._foo
17:27:09 <elliott> for a file foo
17:27:13 <elliott> to store resource forks and shit
17:27:22 <Vorpal> elliott: yeah but symlinks?
17:27:52 <pikhq> elliott: So, it most definitely needs LFN
17:27:55 -!- elliott has quit (Read error: Connection reset by peer).
17:28:53 -!- Jafet has joined.
17:29:11 <Vorpal> pikhq: Long File Names?
17:29:29 <pikhq> Yeah.
17:29:31 <Vorpal> right
17:33:52 -!- Phantom_Hoover has joined.
17:35:22 <zzo38> OK I corrected my userpage
17:36:13 -!- elliott has joined.
17:36:17 <elliott> Okay, not quite away.
17:36:20 <elliott> It has to burn the installer first.
17:36:38 <Phantom_Hoover> What are you doing this time?
17:36:42 <elliott> Upgrading OS X.
17:36:55 <CakeProphet> elliott is a bad person with bad OS.
17:37:05 <elliott> I use the same OS you do.
17:37:09 <CakeProphet> he needs to upgrade his bad OS to make it the same amount of bad.
17:37:17 <CakeProphet> elliott: no not the same.
17:37:25 <elliott> Yes the same.
17:37:46 <CakeProphet> you're using OS X right now which is not the same.
17:37:53 <elliott> I don't use OS X.
17:38:10 <CakeProphet> textbook words of an OS X addict.
17:38:20 <Phantom_Hoover> You are both bad people with bad OSes.
17:38:25 <Phantom_Hoover> Or the same bad OS.
17:39:10 <CakeProphet> No way adjective animal is the best.
17:39:22 <CakeProphet> once they reach Z they should roll back to A but with dinosaurs.
17:39:34 <elliott> Or body parts.
17:39:35 <elliott> Acrobatic Anus.
17:39:55 <CakeProphet> I almost spewed soda out of my mouth.
17:40:07 <CakeProphet> but no dinosaurs are better, if a bit wordier.
17:40:17 <Phantom_Hoover> -elliott- VERSION LimeChat for Mac 2.26
17:40:20 <Phantom_Hoover> SEE
17:40:23 <CakeProphet> Agile Allosaurus
17:40:30 <elliott> Beautiful Butt. Actually they should just use different names for butts.
17:40:37 <elliott> Crappy Crapper.
17:40:41 <Phantom_Hoover> Acrobatic Arse.
17:40:48 <elliott> 18:39 elliott: Acrobatic Anus.
17:41:01 <Phantom_Hoover> yes but arse is better
17:41:06 <CakeProphet> Defensive Defecator
17:41:16 <elliott> Sassy Shithole. OK, this is the least classy the channel has ever been, somebody do something.
17:41:30 <CakeProphet> dinosaur names.
17:41:52 <CakeProphet> Elliot Hird more like Toilet Turd lololo
17:42:27 <Vorpal> <CakeProphet> once they reach Z they should roll back to A but with dinosaurs. <-- they didn't start with a though.
17:42:36 <Vorpal> so there are several free letters
17:42:39 <CakeProphet> that's okay they can do that.
17:42:40 <elliott> ais523: How safe is it to burn a DVD on a wobbly surface? :p
17:42:51 <CakeProphet> they decided to stick with alphabetical so they should continue doing so for consistency.
17:43:05 <CakeProphet> it would be totally lame if they continued with animals dinosaurs are the best.
17:43:11 <CakeProphet> or plants, plants are lame.
17:43:17 <ais523> elliott: it depends on if the burnt track wobbles enough that it can't be read
17:43:18 <elliott> ais523: More seriously, how stable does the second beta of an Ubuntu release tend to be?
17:43:41 <ais523> and it's not too bad, especially if you apply updates; it tends to have a few really major bugs that are highly platform-dependent
17:43:41 <elliott> It seems it's had three alphas.
17:43:53 <ais523> and the odds are that none will affect any given person, typically
17:43:59 <elliott> Hmph. What are my chances of not running into any bugs? :P
17:44:01 <elliott> Well, that's good.
17:44:22 <elliott> I guess I'll try the beta and if it's bad try Debian.
17:44:26 <CakeProphet> Z = Zealous Zebra?
17:44:31 <elliott> It will probably be bad.
17:44:34 <Vorpal> CakeProphet: ubuntu also did H twice.
17:44:43 <elliott> 18:43 ais523: elliott: it depends on if the burnt track wobbles enough that it can't be read
17:44:44 <elliott> O RLY :P
17:44:46 -!- myndzi\ has joined.
17:44:47 <CakeProphet> Vorpal: but that was before they decided to be alphabetical
17:44:55 <Vorpal> yes
17:45:05 <CakeProphet> so it was okay then BUT NOW IT'S NOT.
17:45:10 <Vorpal> CakeProphet: anyway they are missing A and C
17:45:17 <CakeProphet> they just need to switch to something else. plants would be okay. dinosaurs better.
17:45:23 <zzo38> I use the FORTUNE random quotation on my gopher server in the login script on my account at FreeGeek
17:45:35 <CakeProphet> Cocky Cactus
17:45:41 <Vorpal> CakeProphet: clam
17:45:55 <CakeProphet> no that's lame if they just go fill in the old ones
17:46:08 <CakeProphet> with more animals
17:46:15 <Vorpal> CakeProphet: the roll-over point is at D. So they should continue up to C with animals
17:46:16 <CakeProphet> there are only so many animals they'll run out of things.
17:46:18 <Vorpal> then switch
17:46:44 <zzo38> Do you like Akagi manga book?
17:46:47 <CakeProphet> NO WAY YOU'RE WRONG AAAAAAH I HATE THE INTERNET.
17:46:55 <Vorpal> CakeProphet: why am I wrong?
17:47:05 <CakeProphet> this is the most important internet debate ever.
17:47:08 -!- myndzi has quit (Ping timeout: 248 seconds).
17:47:11 <Vorpal> not really
17:47:12 <CakeProphet> Vorpal: actually you're not that makes a reasonable amount of sense.
17:47:17 <zzo38> Yes; they can change the scheme in whatever way is better, whatever, it is they do.
17:47:23 <Vorpal> CakeProphet: yes that is why I suggested it
17:47:29 <CakeProphet> Vorpal: but plants are dinosaurs are way coool. QED
17:47:35 <CakeProphet> *and
17:48:14 <CakeProphet> Staunch Stegosaurus
17:48:19 <Vorpal> CakeProphet: so you get them starting from the next time they reach D. You are delayed by 3 releases. Meaning 1.5 years for ubuntu. Not much.
17:48:21 <CakeProphet> best Ubuntu version.
17:48:38 <Vorpal> CakeProphet: anyway, dinosaurs are also animals
17:48:44 <CakeProphet> yes but they're different.
17:48:54 <CakeProphet> it would be a way to consistently separate the second rollover from the first.
17:49:08 <CakeProphet> which is all lame modern day animals
17:49:27 <CakeProphet> soon to be dwarfed by the much superior prehistoric giant feathered reptiles.
17:49:42 <Vorpal> so they could go for another sub-group of animals. Imagine: Bombastic Blue-green algae.
17:49:55 <CakeProphet> that breaks your rule though
17:49:57 <CakeProphet> gotta start with D
17:50:09 <Vorpal> CakeProphet: I meant for next time they reach B
17:50:09 <elliott> Ubuntu Plastic Poop
17:50:12 <Vorpal> not this time
17:50:15 <CakeProphet> besides algae is stupid dinosaurs are the best.
17:50:24 <CakeProphet> you can't argue with my impeccable logic.
17:50:52 <CakeProphet> algae? more like alGAY.
17:50:58 <Vorpal> CakeProphet: yes I can. Tell me what is inherently better with dinosaurs
17:51:14 <CakeProphet> uh....
17:51:15 <Vorpal> CakeProphet: and quite, it is good to be glad.
17:51:19 <elliott> Both of you stop making noise.
17:51:32 <CakeProphet> I can't think of anything that would be better than dinosaurs that would also fit the Ubuntu naming theme.
17:51:53 <CakeProphet> because dinosaurs are probably on the upper end of the "list of stuff sorted by awesome in descending order"
17:51:53 <zzo38> They could also make changes to the naming scheme if necessary; it doesn't necessarily have to fit if that won't work.
17:51:54 <Vorpal> CakeProphet: and for the modern sense of "gay", it is good to show support for equal rights to everyone.
17:51:55 <elliott> US Presidents.
17:51:57 <elliott> Niggardly Nixon.
17:52:13 <elliott> Chartreuse Carter.
17:52:31 <CakeProphet> I'm just saying dinosaurs are the best regardless of everything.
17:52:32 <CakeProphet> that's all
17:52:37 <Vorpal> <CakeProphet> because dinosaurs are probably on the upper end of the "list of stuff sorted by awesome in descending order" <-- and why are dinosaurs awesome? They didn't survive when the mammals did.
17:52:38 <CakeProphet> best of any naming scheme change.
17:53:16 <zzo38> One way to change is if you want to use verbs, three words, hyphenated words, etc.
17:53:37 <CakeProphet> Vorpal: Yoda is awesome and there was only one of his species known in the time that the documentary Star Wars was filmed.
17:53:59 <Vorpal> not sure I seen that documentary
17:54:34 <Vorpal> but star wars is pretty boring. No real science involved in how the stuff is supposed to work. Even Star Trek is harder sci-fi than Star Wars...
17:54:34 <CakeProphet> it's an exposition on ancient inter-planetary cultures.
17:54:52 <zzo38> I prefer Star Trek rather than Star Wars.
17:55:49 <CakeProphet> There's nothing to not like about dinosaurs as a naming system. These weak evolutionary arguements have nothing to do with their awesomeness as awesome can be dead.
17:56:01 <CakeProphet> for example Jimi Hendrix is dead.
17:56:16 <elliott> Counterpoint: Your FACE is dead.
17:56:28 <pikhq> Vorpal: Sure they did. We just call them "birds".
17:56:32 <elliott> ais523: oh, the burn finished but the verification failed
17:56:45 <ais523> elliott: presumably we need a less wobbly surface, then
17:56:57 <elliott> ais523: I was thinking I'd just use it anyway :D
17:57:02 <elliott> I only wobbled like ONCE.
17:57:10 <Phantom_Hoover> Vorpal, are you complaining that Star Wars isn't hard SF this is the funniest thing ever.
17:57:13 <Phantom_Hoover> Also
17:57:16 <Phantom_Hoover> are you honestly saying
17:57:17 <Vorpal> pikhq: only the flying ones survived then. Not the other branches
17:57:18 <Phantom_Hoover> that Trek
17:57:19 <zzo38> Use dinosaurs as naming system if you want to. If they don't do in Ubuntu, use it in your own distribution if you want to
17:57:21 <elliott> ais523: I bet it was, like, the Khzkzhkzhkahkstanian language pack.
17:57:23 <Phantom_Hoover> is harder than Star Wars
17:57:24 <CakeProphet> Dinosaurs (from Greek: δεινός terrible or potent, and σαύρα lizard) are a diverse group of animals that were the dominant terrestrial vertebrates for over 160 million years
17:57:28 <CakeProphet> wow 160 million years
17:57:30 <CakeProphet> that's a long time to be awesome
17:57:35 <CakeProphet> I wonder how long humans will last at the rate we're going.
17:57:36 <Phantom_Hoover> Vorpal, protip: putting lots of science words into something doesn't make it hard.
17:57:37 <Vorpal> Phantom_Hoover: I'm not suggesting either one is hard.
17:57:49 <zzo38> Vorpal: That is because they can fly; they will not be trapped in the earth.
17:57:57 <Vorpal> zzo38: what?
17:58:05 <Phantom_Hoover> Vorpal, protip: putting lots of science words into something just makes it laughable.
17:58:15 <pikhq> Vorpal: No argument. Shame that the clade became so much less diverse.
17:58:19 <Vorpal> Phantom_Hoover: yes, but I find Star Wars laughable as well.
17:58:40 <elliott> ais523: I SENSE YOU DO NOT APPROVE OF THE IDEA OF USING THIS BURN
17:59:02 <Vorpal> pikhq: well I'm glad I don't have to hide from t-rex on my way home from university :P
17:59:13 <elliott> Vorpal: But that guy is the greatest.
17:59:21 <Vorpal> elliott: not up close
17:59:25 <Phantom_Hoover> Vorpal, seriously, Star Wars gets a free pass on science.
17:59:49 <Phantom_Hoover> It's space opera; if you expect any kind of realism, you're a pretentious idiot.
18:00:01 <pikhq> Vorpal: Oh, you wouldn't have to worry about *that*. T-Rex is North American.
18:00:06 <Vorpal> Phantom_Hoover: I don't expect that. I'm however suggesting I do not enjoy space opera.
18:00:19 <Vorpal> pikhq: right, it could have spread out if it hadn't died out instead.
18:00:20 <elliott> ais523: I SEE
18:00:20 <Phantom_Hoover> Vorpal, yes, and you suggested this was due to a lack of realism.
18:00:32 <CakeProphet> elliott: do you see what I've done?
18:00:45 <CakeProphet> it's beautiful.
18:00:58 <Vorpal> Phantom_Hoover: Correct: I do not enjoy space opera. The reason for that is the lack of hard science. I'm not saying other people might not enjoy it.
18:01:04 <pikhq> Vorpal: Wouldn't have ever made it to Europe, though.
18:01:13 <elliott> Vorpal: But you enjoy Trek?
18:01:22 <Vorpal> elliott: not really
18:01:40 <Phantom_Hoover> Vorpal, and I assume you also dislike fantasy.
18:02:08 <CakeProphet> I prefer non-fiction as fiction is not very realistic.
18:02:12 <zzo38> If I make up a Linux distribution, I already have idea how to make up a naming scheme, which is different from other systems.
18:02:32 <elliott> ais523: OK but seriously should I reburn.
18:02:36 <Vorpal> Phantom_Hoover: varies, I think the issue I have is not with the lack of realism as such, but the clash of science-like things (such as space ships) and the utter lack of science in how they are used within the work.
18:03:10 <ais523> elliott: I don't know, I'm not an expert
18:03:16 <ais523> why do you think I know more than you do wrt this?
18:03:22 <ais523> I'd suggest reburning slower, though
18:03:26 <Vorpal> Phantom_Hoover: I'm not saying that makes the genre of space opera inherently bad, just that I do not enjoy it.
18:03:29 <elliott> ais523: dunno, you're a scientist and mentioned DVDs once.
18:03:36 <elliott> I'll just use it, since I'm reinstalling /again/ later.
18:03:38 <zzo38> When I play D&D game, occasionally I do think about real physics and how it applies, if at all, to the specific cases.
18:03:39 <ais523> as OSes can go mad when checksums don't match, even if it's something minor that doesn't match up
18:03:56 <zzo38> Even relativity when using the Time Hop spell.
18:03:56 <elliott> ais523: I think every burn with this drive has failed to verify, so...
18:04:03 <elliott> But OK fine I'll reburn
18:04:17 <Vorpal> elliott: you said checksum didn't match?
18:04:18 <Vorpal> hm
18:04:33 <Vorpal> I had a drive that reported wrong checksum on newly burnt things once
18:04:37 <Phantom_Hoover> zzo38, "I cast Lorentz transform!"
18:04:57 <Vorpal> elliott: I did dd if=/dev/cdrom of=tmp-file and them compared tmp-file to the iso, it matched
18:05:00 <zzo38> Phantom_Hoover: Yes let's make up that spell!
18:05:05 <Vorpal> even if cdrecord said the checksum didn't
18:05:10 <Vorpal> elliott: so that might be worth checking
18:05:25 <Vorpal> Phantom_Hoover: heh.
18:05:26 <elliott> ais523: hmm, it only burned at four-times
18:05:30 <elliott> but I'll try two-times
18:05:46 <Vorpal> elliott: eh, go for what it says on the disc you are using. 8x is usually sane
18:05:51 <Vorpal> 32x sounds insane
18:06:10 <elliott> Vorpal: Four-times is max.
18:06:24 <Vorpal> elliott: you said 32? 32 > 4?
18:06:29 <zzo38> Vorpal: What I usually do is use the second highest available speed.
18:06:32 <elliott> Vorpal: where
18:06:39 <Vorpal> oh misread
18:06:58 <Vorpal> elliott: when you spelled out "try two-times" I read it as "thirty two-times" somehow
18:08:35 <elliott> ais523: hmm, is a very slightly tilted surface OK as long as it's stable? YOU'RE THE EXPERT
18:09:05 <Vorpal> elliott: probably but why not just use a flat table?
18:09:10 <ais523> elliott: it should theoretically work at any orientation so long as the DVD itself is symmetrical (no asymmetrical label stuck on the back, etc)
18:09:12 <elliott> cable isn't long enough
18:09:23 <Vorpal> elliott: move table?
18:09:29 <elliott> cable isn't long enough
18:09:31 <ais523> unless the motor in the DVD drive isn't strong enough to move the write head upwards and downwards, but is to move it horizontally
18:09:37 <Vorpal> elliott: move wall socket?
18:09:38 <elliott> and no convenient table
18:09:41 <Vorpal> ah
18:10:32 <Vorpal> does anyone use DVD-RAM?
18:12:22 <Phantom_Hoover> help i have forgotten which bits of the internet to look at when i'm bored
18:12:33 <fizzie> Vorpal: I have one of those discs; it came with the DVD+/-RW/-RAM burninator.
18:12:35 <Vorpal> Phantom_Hoover: tvtropes
18:12:46 <Vorpal> fizzie: heh, ever used it?
18:12:49 <Vorpal> (the disc I mean)
18:12:56 <Phantom_Hoover> Vorpal, sorry your opinions no longer count.
18:13:11 <fizzie> Vorpal: Not sure, but I don't think I have.
18:14:21 <elliott> This is so slow.
18:14:25 <elliott> I wonder if it's stalled.
18:14:57 <CakeProphet> dude I what if t-rexes used tools
18:15:05 <CakeProphet> being all bipedal and shit.
18:17:06 <zzo38> I think I saw a picture in one of the D&D expansion books that depicted a dinosaur attempting to use a sword
18:17:21 <Vorpal> CakeProphet: small arms. Not much reach
18:18:30 <CakeProphet> still free to grab things
18:18:37 <CakeProphet> I'm not saying they would be good at it...
18:19:32 <zzo38> Make the pinball house consisting of mostly flipperless games and only one or two pinball games having flippers.
18:27:34 <CakeProphet> I wonder why Randall is afraid of velociraptors
18:27:35 <CakeProphet> http://en.wikipedia.org/wiki/File:Vraptor-scale.png
18:27:55 <CakeProphet> they're quite small. perhaps that's the joke and I just didn't catch on due to ignorance.
18:28:10 <fizzie> But they're so CLEVER.
18:28:18 <fizzie> See: a park, Jurassic.
18:29:03 <fizzie> Also that head is very close to grabbing a very sensitive place.
18:31:38 <Vorpal> fizzie: I never watched Jurassic, did they do that in that movie?
18:33:03 <fizzie> See the "clever girl" meme.
18:33:03 <CakeProphet> no they were much larger in that movie.
18:33:35 <Vorpal> CakeProphet: as explained here: http://en.wikipedia.org/wiki/Velociraptor#In_popular_culture
18:33:46 <fizzie> "'Clever Girl' is a catchphrase that can be used to express respect or admiration for something has demonstrated substantial intelligence. It is often associated with the extinct Velociraptor dinosaur genus. (See also: Philosoraptor, Raptor Jesus)"
18:39:00 <zzo38> I have a pinball game titled "GOO GOO DA DA" which features music of The Carlisles and has only a single flipper, which cannot be directly controlled by the player (it moves only when certain bumpers are hit)
18:39:39 <zzo38> When the ball drains, you earn points according to the position of the flipper.
18:39:56 <Vorpal> which part does the player control then?
18:40:35 <zzo38> The plunger and the nudging.
18:41:48 <CakeProphet> I shall now invent a pinball game with portals.
18:42:22 <CakeProphet> to win you create an infinite portal loop to build up the pinballs momentum before launching it onto a platform far above
18:42:51 <Vorpal> CakeProphet: this reminds me of something. A computer game I think. I wonder which one? XD
18:44:16 <zzo38> OK; but generally in pinball game you simply earn a certain number of points before you run out of balls to play.
18:44:26 <CakeProphet> Vorpal: all games are better with portals.
18:44:58 <fizzie> Is that Portal 2 thing any good? I playeded the first one now the other day when it was free.
18:45:10 <Vorpal> CakeProphet: hm.... Not sure about solitaire or mine sweeper?
18:45:14 <CakeProphet> yes Portal 2 is very good
18:45:15 <ais523> fizzie: it's more of the same, just longer
18:45:21 <ais523> more puzzles, more witty dialogue
18:45:21 <elliott> fizzie: Apparently it's good but people aren't happy that it's not more difficult or anything.
18:45:21 <Phantom_Hoover> I have the first one but my goddamn computer doesn't let me play it.
18:45:32 <Vorpal> fizzie: with paintballs or some such from what I heard too
18:45:34 <CakeProphet> more features, more puzzle elements, 2 player co-op
18:45:34 <elliott> Wait, ais523 has played it? I didn't expect that.
18:45:36 <ais523> I personally think it dies away a bit towards the end, but the first two-thirds or so are excellent
18:45:36 <Phantom_Hoover> ais523, I thought the plot was a bit less amusing than the first one.
18:45:39 <ais523> elliott: no, I haven't played it
18:45:40 <CakeProphet> it's not "more of the same"
18:45:44 <Vorpal> <Phantom_Hoover> I have the first one but my goddamn computer doesn't let me play it. <-- oh?
18:45:47 <ais523> I happen to know a lot about a lot of computer games I haven't played
18:45:53 <ais523> due to following speedruns, etc
18:46:09 <Phantom_Hoover> Vorpal, it works under Wine but my GPU is a bit of cardboard with some lines and an Intel logo drawn on it.
18:46:15 <fizzie> Maybe I'll wait a few years and it'll be free too.
18:46:16 <Vorpal> Phantom_Hoover: ah
18:46:19 <ais523> CakeProphet: I consider the more puzzle elements, etc, to be "more of the same"
18:46:21 <elliott> ais523: lol
18:46:33 <ais523> more witty dialogue, too, but that's also more of the same
18:46:35 <Vorpal> Phantom_Hoover: yes portal 1 works under wine. Played it there. Orange box release iirc. So no steam crap
18:46:41 <Vorpal> haven't played portal 2
18:46:43 <elliott> ais523: you said that
18:46:45 <Vorpal> might at some point
18:46:48 <ais523> right
18:46:53 <elliott> This World of Warcraft ad literally says "PLAY FREE[ASTERISK] NOW".
18:46:53 <Vorpal> the graphics are quite low end, so shouldn't be a problem
18:46:59 <elliott> You aren't fooling anybody.
18:47:01 <Vorpal> (since I don't have intel)
18:47:02 <CakeProphet> so "it's more of the same" in that it continues its awesome premise but adds more complexity to it. okay.
18:47:09 <ais523> elliott: what does the asterisk refer to? I know there are people who were fooled
18:47:22 <ais523> oh, the ending is very clever, too
18:47:24 <Phantom_Hoover> Vorpal, I don't have Intel either, I have a bit of cardboard.
18:47:24 <elliott> ais523: It seems like it's only up to level twenty, but maybe there are other restrictions too
18:47:32 <Vorpal> Phantom_Hoover: oh right, even worse
18:47:32 <Phantom_Hoover> Although it is cardboard from an Intel box, I'm told.
18:47:35 <ais523> elliott: it's basically "no interaction with other people"
18:47:41 <elliott> ais523: haha
18:47:45 <CakeProphet> elliott: I thought the free trial was a week up to level 10
18:47:46 <ais523> as well as the level cap
18:47:49 <CakeProphet> or it was whenever I played.
18:47:51 <Vorpal> Phantom_Hoover: a cardboard able to do 2D graphics. What will they think of next...
18:47:53 <ais523> CakeProphet: it's been generalised
18:47:57 <elliott> MSORPG
18:48:00 <ais523> it's indefinite, but you can't interact with other people and there's a level cap
18:48:00 <elliott> singleplayer
18:48:23 <CakeProphet> oh
18:48:44 <Vorpal> that defeats the point of WoW doesn't it?
18:48:57 <elliott> O RLY
18:49:09 <ais523> Vorpal: WoW is a boredom simulator
18:49:12 <elliott> Vorpal mad
18:49:15 <ais523> it works just as well at that singleplayer as multiplayer
18:49:19 <Vorpal> heh
18:49:23 <Vorpal> you tried it?
18:49:28 * CakeProphet played a character to level 85, got his character raid ready, and then quit after deciding it was more or less an addicting chore.
18:49:29 <elliott> ais523: I think the boredom is slightly less addictive singleplayer
18:49:34 <ais523> elliott: so do I
18:49:44 <elliott> s/slightly/significantly/ :P
18:49:46 <ais523> CakeProphet: at least you broke free
18:49:55 <Vorpal> never played WoW
18:50:09 <ais523> heh, I'd have been very surprised if you had
18:50:28 <CakeProphet> 85, btw, being max level. I guess that's kind of like winning except it's not really because you still waste a shit ton more time getting raid and pvp gear.
18:50:34 <CakeProphet> so basically you never win you just lose shit tons of time.
18:50:42 <Vorpal> CakeProphet: raid being?
18:50:48 <CakeProphet> pretty sure I had... 18 days of playtime when I quit.
18:50:49 <CakeProphet> roughly
18:50:57 <ais523> Vorpal: a bunch of people cooperating to take on a boss
18:50:58 <Vorpal> ouch
18:51:04 <Vorpal> ais523: ah okay.
18:51:10 <CakeProphet> Vorpal: you go into a dungeon place and kill NPCs with 10 or 25 other people.
18:51:21 <Vorpal> CakeProphet: the point being?
18:51:35 <CakeProphet> to get more raid gear to repeat the process.
18:51:37 <ais523> Vorpal: something to do with your stats
18:51:52 <Vorpal> I see
18:51:53 <CakeProphet> also there's an element of challenge in coordinating that many people, and the bosses require you to do some slightly non-trivial things.
18:51:58 <elliott> ais523: yay, it burned properly this time
18:52:07 <elliott> the advantages of sitting completely still while bending awkwardly to type
18:52:24 <Vorpal> CakeProphet: hm, I have to say I would rather sink time into an elder scroll game than that...
18:52:37 <CakeProphet> yes I'd rather play dwarf fortress...
18:52:41 <elliott> OK so
18:52:41 <Vorpal> that said, oblivion and so on is kind of cool but I would never play it to 100% completion
18:52:43 <elliott> ais523: if I die
18:52:44 <elliott> ais523: then
18:52:46 <CakeProphet> or FUCKING PEN AND PAPER
18:52:47 <elliott> ais523: computers are explosive
18:52:48 <Vorpal> CakeProphet: or that yes
18:52:49 <CakeProphet> but no one wants to play that.
18:53:00 <elliott> CakeProphet: Fucking pen and paper does not sound like the greatest pasttime.
18:53:05 <Vorpal> CakeProphet: I have NWN1, it saves on the effort of rolling the dice
18:53:19 <CakeProphet> I play online, with dice rolling programs.
18:53:21 <elliott> See "y'all mofos" (as they say on the street) in N times.
18:53:24 -!- elliott has quit (Remote host closed the connection).
18:53:24 <Vorpal> heh
18:53:39 <CakeProphet> Vorpal: also a single-player computer game can't simulate a pen and paper experience ever.
18:53:45 <CakeProphet> unless there's strong AI.
18:54:05 <Vorpal> CakeProphet: anyway, I do kind of look forward to skyrim. I will definitely try it at least. I hope it will be good, but I will probably not play more than a few days of game time in total in it.
18:54:20 -!- tiffany has quit (Ping timeout: 248 seconds).
18:54:24 <CakeProphet> it's ridiculous how much time you can waste on
18:54:25 <CakeProphet> WoW
18:54:34 <CakeProphet> without even realizing it, or caring, or thinking it's excessive.
18:54:40 <Vorpal> (wasn't there supposed to be like 300 hours of gameplay in skyrim? yeaaah no I don't have that time)
18:55:26 <CakeProphet> WoW's marketing strategy is basically to get you to play for free.
18:55:29 <CakeProphet> because it's like crack.
18:55:30 -!- tiffany has joined.
18:55:30 <ais523> they're probably 1 hour repeated 300 times
18:56:01 <Vorpal> ais523: I'm slightly more optimistic: 1.5 hours repeated 200 times
18:56:14 <CakeProphet> ais523: however healing was actually pretty fun simply because there was challenge to it.
18:56:23 <CakeProphet> everything else was button mashing.
18:56:28 <Vorpal> ais523: but then I'm a slow player whenever there is a game with stuff I can pick up. I try to find everything before leaving an area.
18:56:41 <Vorpal> CakeProphet: how is healing done then?
18:57:18 <CakeProphet> Vorpal: by mashing buttons with some forethought involved.
18:57:24 <Vorpal> ah....
18:57:36 <zzo38> What other features do you want in your pinball game with portals?
18:57:42 <Vorpal> hotkey mmos look excessively boring.
18:58:06 <CakeProphet> as you have 4, or 10, or 25 people to keep alive, and healing takes cast time and mana so you have to balance all of these factors or else everyone dies and has to start over...
18:58:31 <Vorpal> CakeProphet: only matters if you are a healer I guess
18:59:04 <CakeProphet> well not really but for the most part yes.
18:59:15 <Vorpal> so boring then
18:59:16 <Vorpal> okay
18:59:16 <cheater> DACHGESCHOSS
19:00:01 <Vorpal> CakeProphet: I prefer a game with somewhat more to the battle than just that. I have to say that Deus Ex HR has very good battle (apart from that I'm bad at aiming at moving enemies, but that is not a problem of the game really)
19:00:02 <CakeProphet> !wacro
19:00:30 <CakeProphet> Vorpal: it's just varied enough to make it mindlessly addicting but it's more or less the same routine.
19:00:32 <Vorpal> witcher 2, another good example. There is more than just mashing buttons.
19:00:47 <Vorpal> CakeProphet: which one? deus ex!?
19:01:02 <CakeProphet> especially with DPS (the damage-dealing role) when you're DPS basically your strategy consists of memorizing a rotation that results in the highest damage per second.
19:01:05 <CakeProphet> Vorpal: no wow
19:01:09 <Vorpal> ah
19:01:09 <CakeProphet> I've never played that game
19:01:27 <Vorpal> CakeProphet: speaking of which, what does DPS stand for? I seen it sometimes but never bothered to check
19:01:32 <CakeProphet> damage per second.
19:01:40 <Vorpal> ah
19:01:46 <CakeProphet> that's what they do, is maximize that.
19:02:27 <CakeProphet> tank isn't much better. Basically tanking involves paying some attention to the enemies so they don't stray off and attack other people, and then smash keys wildly as your rotation doesn't matter as much.
19:02:55 <Vorpal> CakeProphet: in deus ex: human revolution at least, sneaking is very important part of combat, or avoiding combat (technically you can avoid killing anyone in the whole game apart from the 3 or so bosses)
19:03:01 <CakeProphet> tl;dr CakeProphets Novel on Wow Strategy
19:03:21 <CakeProphet> Vorpal: that's interesting I've always liked stealth in games, when done well.
19:03:36 <CakeProphet> I've often considered a game that isn't very combat-oriented but instead relies on stealth and puzzles.
19:03:36 <Vorpal> CakeProphet: it works well in deus ex, but then it is single player only
19:04:10 <CakeProphet> your character would have powers such as being able to blend into darkness (even more so when not moving very much) and being able to see through walls and read minds.
19:04:16 <Vorpal> CakeProphet: only complaint I have about deus ex hr really is that the graphics are not as awesome as the graphics in witcher 2. But then I haven't seen any game with that level of graphics.
19:04:21 <Vorpal> (other than witcher 2)
19:04:24 <CakeProphet> with probably some crazy complicated control scheme like assassin's creed.
19:04:37 <CakeProphet> but more crazy and complicated.
19:05:01 <Vorpal> CakeProphet: oh and there are usually several alternative routes for going anywhere in deus ex: hr. And if you want to max out experience you get you should actually do non-lethal takedowns
19:05:51 <CakeProphet> that's the only elements of the game I've figured out: the wall-seeing and possibly a mind-reading element as a source of fragmented hints. I see the story and interface kind of building fluidly to immerse you in the game.
19:05:58 <Vorpal> <CakeProphet> your character would have powers such as being able to blend into darkness (even more so when not moving very much) and being able to see through walls and read minds. <-- see through wall is in the skill tree of deus ex hr, it drains your batteries though
19:06:02 <CakeProphet> but that's difficult to do with complex schemed without saying "do this shit to make this happen okay?"
19:06:13 <Vorpal> (you play as a cyborg basically, after the tutorial bit)
19:06:52 <Vorpal> CakeProphet: and I should probably try out assassin's creed some time. It is quite old though iirc?
19:07:00 <CakeProphet> erm, if that's a requirement, yes
19:07:02 <Vorpal> what are the graphics like compared to state-of-the-art today
19:07:13 <CakeProphet> I recommend II though because it fixes a lot of the cons of that game.
19:07:13 <Vorpal> CakeProphet: what is a requirement?
19:07:27 <CakeProphet> Vorpal: oh nevermind I like to misread things horribly.
19:07:29 <CakeProphet> yes it's old.
19:07:36 <Vorpal> CakeProphet: I have a high-end card that is just a few months old, I want awesome graphics
19:07:41 <CakeProphet> play magicka
19:07:43 <CakeProphet> best game
19:07:49 <CakeProphet> $10
19:07:49 <Vorpal> CakeProphet: I tried. I die all the time
19:07:57 <CakeProphet> I am the magicka master.
19:07:59 <Vorpal> CakeProphet: I like the humour though
19:08:13 <Vorpal> the cross-language humour in the spoken dialogue is especially amusing
19:08:14 <CakeProphet> I play co-op and dominate with my mad skills
19:08:23 <Phantom_Hoover> CakeProphet, I want to, but a) craputer, b) Windows and c) it will never live up to the Yogscast and TotalBiscuit playthroughs.
19:08:28 <CakeProphet> Vorpal: yes is that an actual language? it sounds to me like a strange pidgin.
19:08:43 <Vorpal> CakeProphet: it is a made up language with a few phrases of English and Swedish mixed in
19:08:58 <CakeProphet> ah okay.
19:09:02 <CakeProphet> that's what I thought.
19:09:14 <CakeProphet> there's really only like maybe 8 spells you need to know
19:09:20 <CakeProphet> to kill anything very quickly.
19:09:31 <CakeProphet> defend yourself, become immune to things, etc.
19:09:31 <Vorpal> CakeProphet: still if you know Swedish you will notice that every now and then it doesn't match the text dialogue at all.
19:10:02 <CakeProphet> though I think in the most recent patch they made QERASR less completely overpowered
19:10:06 <Vorpal> CakeProphet: like instead of villager I heard "fjant" which means something like "silly person"
19:10:09 <CakeProphet> so you have to have an immunity shield to cast it and not instantly die.
19:10:28 <Vorpal> CakeProphet: QERASR being?
19:10:43 <CakeProphet> QERASR + sword cast = massive line of electrified arcane steam ice rocks.
19:10:56 -!- zzo38 has quit (Remote host closed the connection).
19:10:58 <CakeProphet> freezes and then electricutes.
19:11:03 <CakeProphet> with massive damage
19:11:05 <Vorpal> CakeProphet: is it a thing from one of the books?
19:11:08 <CakeProphet> no
19:11:10 <Vorpal> or a normal combined spell?
19:11:11 <CakeProphet> just a normal spell
19:11:11 <Vorpal> ah
19:11:18 <Vorpal> I'll have to try it
19:11:37 <CakeProphet> QFQFASA is another good one. it's the spell for lightning storm but just use the normal spell as lightning storm usually kills you.
19:12:00 <Vorpal> CakeProphet: I found that going with the vietnam thingy for the character then casting a bubble shield and standing right next to the shield let me shoot through it with the gun
19:12:10 <Vorpal> useless against other wizards since I tend to get burnt then
19:12:26 <Vorpal> might have been in an old version
19:12:45 <CakeProphet> edfff is good, volcano barriers. also edrrr which is cold volcano barriers. both good for defense. edddd is the best for complete defense with no damage.
19:12:49 <CakeProphet> Vorpal: vietnam is crap
19:13:19 <Vorpal> CakeProphet: yes but the character from it I meant. Works well against the bomb throwing goblins
19:13:28 <CakeProphet> it's been months since I've played this game... I just have these combinations drilled into my brain.
19:13:38 <Vorpal> frankly Magicka is too much fast paced action for me to manage
19:13:45 <Vorpal> might be easier in co-op
19:13:55 <CakeProphet> co-op is laggy and crashy and you die a lot.
19:13:59 <CakeProphet> and people suck at reviving
19:14:06 <Vorpal> CakeProphet: I already die in single player a lot...
19:14:11 <CakeProphet> it takes all of two seconds to revive someone
19:14:17 <CakeProphet> yet people can't manage it somehow.
19:14:43 <CakeProphet> Vorpal: QFSAFE + self cast = temporary immunity to most damaging elements
19:14:54 <CakeProphet> useful when around other wizards, friend or foe.
19:15:06 <CakeProphet> also useful mnemonic
19:15:32 <Vorpal> CakeProphet: mhm. really I can't really manage it. Also the check point system is annoying. I would have preferred a quick save system for a game that hard.
19:16:01 <CakeProphet> single player becomes incredibly easy once you learn all of the overpowered spells though...
19:16:05 <CakeProphet> vietnam is still difficult though.
19:16:08 <CakeProphet> arena is the best.
19:16:09 <Vorpal> CakeProphet: right
19:16:30 <CakeProphet> I liked the checkpoint system I recall.
19:16:54 <Vorpal> mhm
19:16:57 <Vorpal> CakeProphet: too few of them
19:17:55 <CakeProphet> a wizard's life is tough, okay.
19:18:13 <Vorpal> CakeProphet: sure, but the game is way too fast paced for me to manage it.
19:18:22 <Vorpal> I'm just not good at that type of game.
19:18:25 -!- oerjan has joined.
19:18:36 <CakeProphet> Vorpal: focus more on being awesome.
19:18:39 <CakeProphet> works all the time.
19:18:40 <CakeProphet> :)
19:19:02 <CakeProphet> I'm not even thinking half of the time I play that game.
19:19:04 <Vorpal> CakeProphet: hm. I'm good at some games though. Nethack for example.
19:19:14 <CakeProphet> I have actually never played a single rogue-like
19:19:14 <Vorpal> because it involves a lot of thought
19:19:37 <lifthrasiir> http://codepad.org/Vj1SwqmH Esotope is now the fastest Whirl interpreter.
19:19:54 <Vorpal> CakeProphet: I'm much better at games that require a lot of thinking than those that require quick actions.
19:19:54 <CakeProphet> yeah magicka is in a class of games that requires reaction time, like first person shooters. Except people who are good at those games aren't good at magicka because of the spell combos.
19:19:56 <lifthrasiir> ...still a lot slower than Brainfuck tho
19:19:58 <lifthrasiir> :p
19:20:13 <CakeProphet> Vorpal: magicka can require both for sure. but yes it's very fast thinking.
19:20:37 <Vorpal> CakeProphet: deus ex: hr is a FPS mixed with an RPG (and it works) but thanks to stealth I can be good at it too.
19:20:53 <CakeProphet> Vorpal: the trick is to continuously put yourself in situations to give you time to think. For example, rock barriers are very good for that purpose as they act as decoys basically.
19:21:01 <Vorpal> hm
19:21:08 <oerjan> <Vorpal> CakeProphet: uh are you trying to poke another thread and insert an exception in it?
19:21:14 <oerjan> ghc supports that.
19:21:23 <CakeProphet> I just realized how dirty that sounds.
19:21:23 <Vorpal> oerjan: so non-functional :(
19:21:34 <oerjan> well it's in the IO Monad of course :P
19:21:35 <Vorpal> CakeProphet: also I found it hard to remember all those key combos in magicka.
19:21:39 <Vorpal> that didn't help
19:21:47 <CakeProphet> Vorpal: yeah it's difficult starting off.
19:22:20 <oerjan> hm wait actually it may not be in the IO monad, after all exceptions are not so in general
19:22:38 <Vorpal> CakeProphet: I suck at memorising codes and so on. Getting a new bank card = nightmare.
19:22:41 <CakeProphet> oerjan: uh, something involve threads not in the IO monad??
19:22:45 <CakeProphet> *involving
19:22:58 * oerjan is checking that
19:23:02 <CakeProphet> Vorpal: people memorize their account numbers and such?
19:23:12 <CakeProphet> I thought that's what the card was for.
19:23:15 <Vorpal> CakeProphet: no I meant the code for using it when paying
19:23:17 <ais523> CakeProphet: PIN number, possibly
19:23:18 <Vorpal> the 4 digit code.
19:23:20 <Vorpal> debit card
19:23:21 <ais523> well, PIN
19:23:22 <CakeProphet> oh that
19:23:25 <ais523> but everyone calls it "PIN number" anyway
19:23:36 <ais523> to the extent that I believe that's now the correct term for it
19:23:41 <CakeProphet> oh, well yes that's only 1 thing to remember
19:23:46 <Vorpal> CakeProphet: 4 digits is hard to remember, something like qassdqwe is even worse
19:23:50 <CakeProphet> compared to however-many-spell-combos there are in magica.
19:23:54 <Vorpal> (whatever that does in magicka)
19:24:03 <CakeProphet> it's not as simple as 10^10 because some combinations don't exist.
19:24:04 <Vorpal> (I just randomly hit a few buttons)
19:24:24 <oerjan> CakeProphet: hm no you are right, throwTo is only in the IO monad
19:24:24 <CakeProphet> Vorpal: lol
19:24:41 <Vorpal> ais523: I wonder if people will start saying PINN for "PIN number" leading to "PINN number" in the future
19:24:49 <lifthrasiir> ais523: when PIN is used in the adjective context it stands for Personal Identification Numeric
19:24:58 <CakeProphet> VCS System
19:25:06 <ais523> Vorpal: I doubt it
19:25:23 <Vorpal> ais523: same. and that is sad
19:25:24 <lifthrasiir> (or whatever suitable for N.)
19:25:40 <ais523> lifthrasiir: Personal Identification Numeric Number?
19:25:45 <Vorpal> XD
19:26:29 <lifthrasiir> ais523: my point is that everyone uses PIN as an adjective so it is being retroactively re-acronymed
19:26:32 <lifthrasiir> :p
19:26:59 <Vorpal> hm, car keys seems to be getting larger over time. Modern ones are quite a lot larger than ones from the early 90s in my experience.
19:27:09 <Vorpal> guess it is all that extra electronics
19:27:39 <CakeProphet> Vorpal: qassdqwe is equivalent to aqde which is the "arcane water volcano" spell.
19:27:48 <Vorpal> CakeProphet: I see.
19:27:55 <CakeProphet> the s's and w's cancel as do the a's and q's
19:28:06 <Vorpal> I see, yet there is one aq left?
19:28:36 <coppro> CakeProphet: what.
19:28:48 <oerjan> aqua destructor
19:28:49 <CakeProphet> erm...
19:29:01 <coppro> what are we talking about
19:29:11 <CakeProphet> sdqe actually
19:29:21 <CakeProphet> coppro: magicka
19:29:46 <oerjan> NOT AS BACKRONYMIC
19:29:48 <Vorpal> CakeProphet: and sdqe is?
19:29:57 <CakeProphet> Vorpal: which is still the arcane water volcano. wets things near it, can take a certain amount of damage, and then explodes upon being destroyed.
19:30:05 <Vorpal> right
19:30:57 <oerjan> senatus delenda quousque est
19:31:11 <CakeProphet> coppro: best game ever.
19:31:11 <CakeProphet> play it
19:31:16 <CakeProphet> with your awesome gaming computer.
19:31:39 <Vorpal> magicka doesn't exactly require a high end system
19:31:39 -!- pikhq has quit (Ping timeout: 276 seconds).
19:31:43 <CakeProphet> be inspired to become a great wizard.
19:31:47 <CakeProphet> Vorpal: it does actually.
19:31:59 <CakeProphet> higher-end than my Dell Inspiron 15 actually.
19:32:00 <Vorpal> CakeProphet: really? it is fairly basic 3D
19:32:08 <CakeProphet> Vorpal: with a physics engine
19:32:19 <Vorpal> CakeProphet: done on the GPU or the CPU?
19:32:20 <CakeProphet> and particle effects.
19:32:29 <CakeProphet> Vorpal: no idea actually.
19:32:32 <Vorpal> CakeProphet: come on, even NWN1 had particle effects
19:32:50 <Vorpal> sure the magicka ones are a bit more advanced
19:32:53 <Vorpal> but not THAT much
19:32:59 <CakeProphet> I can't play Magicka but I can play WoW and Borderlands on my laptop
19:33:13 <Vorpal> CakeProphet: never played borderlands, any good? (and what genre?)
19:33:16 <coppro> CakeProphet: wrong
19:33:21 <CakeProphet> coppro: uh?
19:33:28 <coppro> nomic
19:33:37 <CakeProphet> Vorpal: RPG FPS. more mindless fun games.
19:33:42 <CakeProphet> not the thinking games.
19:34:06 <Vorpal> CakeProphet: ah, so RPG FPS without stealth being a central part of the game?
19:34:06 <CakeProphet> Vorpal: also my laptop can play STARCRAFT 2
19:34:07 <CakeProphet> but not magicka
19:34:13 <CakeProphet> Vorpal: yeah not much stealth
19:34:14 <Vorpal> never played starcraft 2, can't compare
19:34:34 <CakeProphet> Vorpal: I think the issue is that Magicka has no configurable graphics settings
19:34:40 <CakeProphet> because it's a small indie game.
19:34:43 <CakeProphet> with a small budget.
19:34:58 <Vorpal> CakeProphet: I find stealth is what makes deus ex hr fun for me. You get bonuses for stuff like finishing a mission without ever being seen by an enemy. Or even without ever making them alarmed.
19:35:14 <Vorpal> <CakeProphet> Vorpal: I think the issue is that Magicka has no configurable graphics settings <-- iirc you can set resolution?
19:35:18 <oerjan> <Vorpal> "hyle"?
19:35:38 <Vorpal> CakeProphet: pretty sure I would have ditched it if I couldn't have gotten native res
19:35:38 <oerjan> a most prepromorphic histoword
19:35:42 <CakeProphet> Vorpal: I don't remember but you can't turn off all the particles and shaders and textures and physics.
19:36:04 <Vorpal> CakeProphet: right. But then I can play witcher 2 with everything but supersampling. I wouldn't have noticed.
19:36:05 -!- pikhq has joined.
19:36:42 <CakeProphet> depends on the definition of high-end, but my laptop can play many games with good graphics but not Magicka.
19:36:55 <CakeProphet> Vorpal: also you might like sc2 but it's another one of those games that require fast-paced thinking
19:36:58 <CakeProphet> more so than Magicka.
19:36:58 <Vorpal> CakeProphet: and witcher 2 is very demanding. The specs at https://secure.wikimedia.org/wikipedia/en/wiki/The_Witcher_2%3A_Assassins_of_Kings#Development seems a bit of the low end even for recommended.
19:37:06 <Vorpal> CakeProphet: what genre?
19:37:16 <CakeProphet> having your opening strategy to pinpoint precision is essentially to 1v1
19:37:18 <CakeProphet> RTS
19:37:23 <CakeProphet> *essential
19:37:24 <Vorpal> hell no
19:37:29 <CakeProphet> best RTS ever imo
19:37:35 <Vorpal> RTS is boring as shit unless it is hard as shit
19:37:35 <oerjan> <Vorpal> CakeProphet: fantasy names tend to follow some sort of pattern, I can't quite imagine "fielinibuuersillionsceuendecon" in any sort of fantasy setting. Not even a parody one
19:37:41 <CakeProphet> Vorpal: no it's the best.
19:37:45 <oerjan> tolkien ents. just saying.
19:37:52 <Vorpal> oerjan: touche
19:38:01 <Vorpal> CakeProphet: I have not yet seen a RTS I liked.
19:38:05 <CakeProphet> Vorpal: it's difficult when it's competitive 1v1
19:38:28 <CakeProphet> Vorpal: also it's not a lame RTS. very barebones compared to most.
19:38:32 <oerjan> although it would clearly be a bit on the short side for them
19:38:38 <Vorpal> CakeProphet: I prefer to play single player in most game. Never really liked multiplayer except for flight simulators and minecraft.
19:38:42 <cheater> nethack is the best rts ever
19:38:52 <CakeProphet> nope starcraft 2
19:39:01 <Vorpal> cheater: nethack is not an rts....
19:39:26 <cheater> that is only because you don't play it like one.
19:39:47 <Vorpal> ...
19:39:49 <CakeProphet> Vorpal: yeah RTS can be boring if you play them in a boring manner
19:39:52 <CakeProphet> but you can't do that in multiplayer
19:39:55 <CakeProphet> because you will be crushed.
19:40:16 <Vorpal> CakeProphet: I don't enjoy multiplayer for most games I tried it for.
19:40:19 <CakeProphet> starcraft is a sport in Korea..
19:40:19 <cheater> i sort of dislike multiplayer computer games
19:40:36 * CakeProphet tends to prefer multiplayer games unless they're very intricate or puzzley
19:40:42 <CakeProphet> like Portal and Dwarf Fortress.
19:40:45 <CakeProphet> are good examples.
19:40:47 <Vorpal> CakeProphet: I like multiplayer for flightsims, it is not competitive there.
19:41:02 <Vorpal> CakeProphet: neither of those games HAVE multiplayer so the point is moot
19:41:09 <CakeProphet> that's what I'm saying...
19:41:14 <Vorpal> I think portal 2 might have co-op though
19:41:16 <Vorpal> not sure
19:41:17 <CakeProphet> yes it does.
19:41:32 <CakeProphet> favorite fighting game = super smash bros. brawl :)
19:41:38 <CakeProphet> again for multiplayer only.
19:42:11 <Vorpal> eh, tried fighting games.. No
19:42:23 <CakeProphet> smash bros. is not a normal fighting game though.
19:42:29 <CakeProphet> I dislike fighting games as well.
19:42:35 <CakeProphet> it's like a platform/fighter
19:42:42 <Vorpal> CakeProphet: I tried the one for N64.
19:42:59 <Vorpal> it was just like a fighting game with Nintendo characters IMO
19:43:32 <CakeProphet> eeeh
19:43:40 <Vorpal> CakeProphet: I think that a good story is probably the most important part of an RPG. Sure good gameplay is vital too, but without a good story it just doesn't work. Which is one of the weaker points of Oblivion.
19:43:53 <Vorpal> CakeProphet: okay a bit more jumping sure
19:43:54 <CakeProphet> most of the games I enjoy playing have almost no story. with some exceptions.
19:44:23 <Vorpal> I would go as far as saying that oblivion was a bad game with an absurdly excellent terrain generator. Which made it worth playing.
19:44:26 <CakeProphet> I tend to enjoy games as a competition or a puzzle or for strategy.
19:44:42 <Vorpal> CakeProphet: I play RPGs to immerse myself into the story.
19:45:15 <Vorpal> CakeProphet: that is one reason I like Witcher 2, you make choices that affect the outcome of the game in major ways. Often there is no clear "right" answer either.
19:45:21 <cheater> i like games with good stories
19:45:22 <Vorpal> a lot of replay value in that
19:45:26 <cheater> even if the game itself is very simple
19:45:44 <Vorpal> you can get two completely different chapter 2 depending on your choices in chapter 1
19:46:45 * oerjan imagines a galactic wargame in which the turn system is based on lightspeed communication delay
19:46:54 <Vorpal> oerjan: heh
19:47:17 <Vorpal> oerjan: so you might see the old state of a remote battle for example?
19:47:27 <oerjan> yes.
19:47:34 <Vorpal> that sounds quite interesting.
19:47:41 <Vorpal> not sure it would work out, but you should code it
19:47:51 <Vorpal> oerjan: it could be the next big indie thing if you code that!
19:48:13 <oerjan> and you have to stop your turn once there has been enough time for one of your enemies to be able to respond
19:48:43 <Vorpal> oerjan: oh? I assume the time would be speed up compared to real time?
19:48:55 <ais523> it'd lead to an obvious multiplayer impl, ofc
19:49:02 <ais523> would you allow for relativistic effects?
19:49:02 <Vorpal> ais523: oh?
19:49:20 <ais523> Vorpal: multiplayer synchronization is a hard problem because of communication delay
19:49:24 <oerjan> relativistic effects should be fine
19:49:25 <Vorpal> ah yes
19:49:30 <ais523> but in this case, the communication delay is part of the game, so...
19:49:57 <Vorpal> ais523: you would have to add more delay though to match up to the simulated in-game delay
19:51:18 <Vorpal> anyway, CakeProphet went silent, why?
19:51:33 <ais523> Vorpal: adding delay is much easier than removing it...
19:51:41 <Vorpal> ais523: well yes
19:51:56 <Vorpal> anyway I suggest oerjan implement this
19:52:05 <Vorpal> it could be the next big indie hit
19:52:12 <ais523> oerjan doesn't strike me as the sort of person likely to implement a wargame
19:52:26 <Vorpal> hm true
19:52:29 <fizzie> Yes; it is far more likely he'd wage war for reals.
19:52:38 <Vorpal> quite
19:53:55 <oerjan> ais523: was about to say something to that effect :P
19:54:42 <CakeProphet> Vorpal: bacon
19:54:49 <monqy> die
19:54:54 <CakeProphet> monqy: what.
19:55:00 <monqy> what
19:55:02 <CakeProphet> monqy: die what
19:55:04 <CakeProphet> what should die
19:55:07 <Vorpal> CakeProphet: bacon what?
19:55:17 <CakeProphet> Vorpal: re: CakeProphet went silent
19:55:25 <monqy> nonsense bacon obsession should die
19:55:29 <fizzie> I can't figure out how to sort this Steam store alphabetically. There's just tabs for "new releases", "top sellers", "coming soon" and "specials".
19:55:35 <Vorpal> CakeProphet: yes the discussion we had was interesting. Why did you stop it?
19:55:49 <CakeProphet> monqy: sometimes I wish your auto-hate switch weren't engaged.
19:55:56 <CakeProphet> Vorpal: because I was hungry so I started cooking bacon...
19:55:57 <CakeProphet> we can continue.
19:56:00 <Vorpal> ah
19:56:12 <Vorpal> CakeProphet: read up on stuff since you left then
19:56:15 * oerjan whacks monqy on the head with the saucepan ===\__/
19:56:21 <monqy> ;_;
19:56:31 <Vorpal> oerjan, monqy: chocolate
19:56:53 <Vorpal> chocolate-coated bacon crisps!
19:56:58 <monqy> mmh
19:57:40 <CakeProphet> I once was working on an Android game that was to be similar to a metroid shooter, but with a control that allowed you to shoot in all 360 degrees, and with puzzles based on localized time-slowing missiles, platforming, reflecting lasers off of mirrors, and other things I haven't thought of yet.
19:58:07 <oerjan> istr a discussion somewhere about where there was any food which wasn't improved by adding either chocolate or bacon.
19:58:07 <ais523> so, nothing like Metroid at all, then?
19:58:11 <CakeProphet> the speed of light delay would be interesting, especially if it were more of a civilization game than a wargame.
19:58:25 <CakeProphet> oerjan: also you could make it like df which would mitigate the need to provide graphics, allowing you to instead focus on complexity.
19:58:42 <Vorpal> oerjan: okay so garlic then. You can't go wrong with garlic.
19:58:42 -!- ellion has joined.
19:58:45 <oerjan> i wish you would stop using the word "you" there >:P
19:58:51 <CakeProphet> ais523: yes just metroid in that it was a sidescrolling shooter.
19:58:52 <ellion> I just got this wonderful captcha for the web chat: http://i.imgur.com/N7vSr.jpg
19:58:53 <fizzie> oerjan: Regarding food: if it's empty, fill it with cream.
19:59:01 <Vorpal> oerjan: what? me?
19:59:01 <monqy> good catpcha
19:59:03 <oerjan> Vorpal: oh it might have been garlic
19:59:04 <ais523> Metroid is mostly not a shooter
19:59:04 <ellion> Everyone bow to its glory.
19:59:08 <ais523> it's more of a platformer
19:59:09 <monqy> bowing
19:59:09 <CakeProphet> oerjan: fine I'll add it to my list of to-brainstorm games. :P
19:59:10 <oerjan> Vorpal: argh!
19:59:12 <ellion> The glory of cesphic "Tuffy".
19:59:16 <Vorpal> oerjan: what?
19:59:24 <fizzie> Vorpal: Garlic and coca-cola is a somehow iffy combination, but that might be just me.
19:59:25 <Vorpal> who is ellion?
19:59:36 <ellion> Vorpal: I'm new.
19:59:41 <Vorpal> fizzie: hm never tried that one. Will have to one day
19:59:43 <ellion> I was here a few years ago but then I became a robot.
19:59:49 <Vorpal> ellion: so you are not just elliott then?
19:59:55 <ellion> Indeed.
19:59:57 <ellion> I live in Hexham.
20:00:01 <ellion> I bet there's nobody else HERE from Hexham.
20:00:07 <Vorpal> okay you are elliott. :P
20:00:28 <CakeProphet> he's not elliott he's ellion
20:00:30 <CakeProphet> totally different.
20:00:35 <ellion> The new Finder opens strangely low on the screen.
20:00:38 <Vorpal> from hexham
20:00:38 <fizzie> Vorpal: I haven't really deliberately "tried" it, it's just that coca-cola always tests weird after garlicy-enough something-else.
20:00:41 <Vorpal> using os x
20:00:53 <Vorpal> fizzie: ah okay
20:00:56 <monqy> recently upgraded to new
20:00:56 <CakeProphet> Vorpal: ah yes that's a lot of bad things that bad people do
20:00:58 <CakeProphet> must be elliott then
20:01:04 <ellion> Hahaha, this is funny
20:01:09 <monqy> hexham a bad place for bad people
20:01:18 <ellion> You can go "back" in Safari by scrolling horizontally left from the leftmost point
20:01:25 <ellion> And forwards by doing the opposite
20:01:28 <ellion> It's like a zoom UI, kind of
20:01:33 <Vorpal> ellion: what if the page already scrolls sideways?
20:01:40 <ellion> Vorpal: Like I said, leftmost/rightmost
20:01:44 <Vorpal> hm
20:01:47 <ellion> And there's some resistance
20:01:49 <oerjan> <ellion> I bet there's nobody else HERE from Hexham. <-- i wonder what you'd say if a third one _did_ show up. apart from AYEEEEH.
20:01:53 <Vorpal> ellion: ah okay
20:01:58 <ellion> But it's funny, you can peek at the page you were on a second ago by doing it partially :P
20:02:05 <monqy> is left/right scroll inverted too? I remember something about up/down being inverted
20:02:10 <ellion> oerjan: I would start checking whether I was on any government watch lists.
20:02:15 <ellion> monqy: Yes.
20:02:17 <Vorpal> oerjan: "AYEEEEH"?
20:02:20 <ellion> I quite like that bit actually.
20:02:26 <fizzie> Mobile Firefox has its control buttoniers on the left/right edge of the screen, and you view them by trying to scroll more left/right than there is page for. Or something like that.
20:02:36 <Vorpal> <ellion> oerjan: I would start checking whether I was on any government watch lists. <-- hey, I'm the paranoid one
20:03:26 <ellion> So let's see if I can trigger this system-wide spell-correcter thing.
20:03:26 <Vorpal> CakeProphet: anyway, as I said, I think story is key to a good RPG.
20:03:39 <fizzie> Someone should post a nicely graphic-designed #esoteric ad on some sort of Hexham central noticeboard whatever; the place obviously has potential.
20:03:44 <CakeProphet> oerjan: it would be nice if actual physics were considered in space combat
20:03:45 <ellion> antidsiestablishemntarisanism. Oh come on, that was an obvious one.
20:03:56 <CakeProphet> for example any kind of projectile would require some kind of counterbalancing force to keep the ship steady.
20:03:59 <ellion> fizzie: I volunteer to not.
20:04:01 <CakeProphet> unless of course it were an energy weapon.
20:04:14 <ellion> Ah, there it triggered.
20:04:22 <Vorpal> ellion: where?
20:04:28 <Vorpal> ellion: and how do you override it?
20:04:39 <oerjan> CakeProphet: "your enemy shoots a flake of paint at you. you die."
20:04:51 <ellion> I think you can turn it off, but it seems to be very very conservative considering how hard a time I'm having at getting it to activate.
20:04:53 <Vorpal> ellion: anyway system wide spell correction for a PC sounds bad. Likely to be painful when writing code too.
20:04:53 <CakeProphet> oerjan: ....? why?
20:05:19 <oerjan> CakeProphet: have you not _heard_ of space debris?
20:05:51 <oerjan> i suppose there might be some countermeasure.
20:06:03 <monqy> space lasers
20:06:19 <CakeProphet> uh, some kind of metal ship hull?
20:06:28 <Vorpal> oerjan: obvious way put an atmosphere around the ship, needs some sort of way to handle gravity to make it work
20:06:30 <CakeProphet> good countermeasure for paint flakes
20:06:41 <Vorpal> CakeProphet: what do you think ISS is made of?
20:06:47 <ellion> Vorpal: Do you stop talking about RPGs at any point in this log?
20:06:52 <Vorpal> the problem is the high speeds
20:06:53 <oerjan> CakeProphet: not when the flake is moving at 200 000 km/s
20:06:55 <CakeProphet> artificial gravity = spin around a lot
20:07:02 <Vorpal> ellion: only one way to find out: read on
20:07:25 <Vorpal> CakeProphet: wrong way of gravity to get an atmosphere though
20:08:30 <oerjan> i recall when i read the forever war comics, the aliens shot tiny projectiles at near light speed at one point, one of which hit and devastated a section of the human ship
20:08:30 <CakeProphet> having an atmosphere would just be a) airtight b) fill with CO2 c) plants
20:08:39 <ellion> 19:55:25: <monqy> nonsense bacon obsession should die
20:08:41 <ellion> monqy: bacon is pretty nice, am i bad :(
20:09:08 <Vorpal> CakeProphet: wouldn't help with burning up debris unless it was on the outside. duh
20:09:09 <monqy> it's mostly when people obsess over it or say "bacon" a lot that it's bad
20:09:29 <CakeProphet> Vorpal: I wasn't really talking about gravity and atmosphere in the context of space debris though.
20:09:38 <ais523> does ellion = elliott, btw?
20:09:39 <Vorpal> right
20:09:47 <Vorpal> ais523: most likely
20:09:48 <monqy> I prefer other foods to bacon, but bacon's okay for eating
20:09:54 <Vorpal> both are from hexham, both use os x
20:10:14 <CakeProphet> `run grep -iP ".*?CakeProphet.*?bacon" /var/logs/_esoteric/* | wc -l
20:10:16 <HackEgo> grep: Support for the -P option is not compiled into this --disable-perl-regexp binary \ 0
20:10:17 <ais523> it certainly could be
20:10:21 <CakeProphet> waaaa
20:10:28 <CakeProphet> `run grep -ie ".*?CakeProphet.*?bacon" /var/logs/_esoteric/* | wc -l
20:10:29 <HackEgo> grep: /var/logs/_esoteric/*: No such file or directory \ 0
20:10:36 <monqy> some day i will use webchat and pick a weird name and claim to be from hexham
20:10:39 <CakeProphet> `ls
20:10:41 <HackEgo> bin \ canary \ karma \ lib \ paste \ quotes \ wisdom
20:10:50 <ellion> monqy: webchat exposes your ip
20:10:52 <ellion> or, well
20:10:56 <ellion> at least a hash of it, which I guess matters less
20:11:02 <ellion> nope, IP too
20:11:14 <monqy> i know, but is anyone dedicated to look into it
20:11:18 <monqy> er
20:11:21 <monqy> dedicated enough
20:11:36 <monqy> and expose webchat-me
20:11:37 <ellion> If you claimed to be from Hexham: yes.
20:11:39 <CakeProphet> `run grep -ie ".*?CakeProphet.*?bacon" /var/irclogs/_esoteric/* | wc -l
20:11:40 <ellion> GeoIP.
20:11:40 <monqy> for the fraud he will be
20:12:00 <ais523> [Wednesday, August 31, 2011] [12:19:31 am] Joinelliott_ has joined this channel (~elliott@95.149.228.192).
20:12:12 <HackEgo> No output.
20:12:15 <ais523> ellion: when did you last reboot your router?
20:12:16 <oerjan> Vorpal: i assume an atmosphere that could protect against debris would need to be rather large
20:12:34 <ellion> ais523: I, um, fairly recently?
20:12:54 <CakeProphet> oerjan: or dense
20:13:13 <ais523> I conclude that, despite all the evidence, you are actually not elliott
20:13:15 <ellion> hmm, the fullscreen thing seems to be pretty well executed
20:13:19 <ais523> (note: may be lying)
20:13:38 <CakeProphet> best defense against space debris: AI and space lasers.
20:13:39 * ellion runs Software Update.
20:13:44 <oerjan> Vorpal: perhaps it would work if your outer shell was self-repairing. except you'd lose some atmosphere at each hit.
20:13:46 <ellion> I don't really have the energy to try and get anything running on here now.
20:13:52 <Vorpal> <oerjan> Vorpal: i assume an atmosphere that could protect against debris would need to be rather large <-- or very dense perhaps?
20:13:52 <ellion> So I'll just burn an Ubuntu CD.
20:14:11 <CakeProphet> the majority of space debris would not actually cause major damage to your vessel
20:14:31 <ais523> because the majority is very small?
20:14:33 <ellion> So has anyone used 11.10 beta two?
20:14:49 <ellion> Ubuntu, that is.
20:15:22 <ellion> Alright, I'll do this update.
20:15:58 <ellion> Then I suppose I'll try the pseudo-orthogonal-persistence stuff.
20:16:01 <Gregor> http://fanaticalvps.com/unmetered-vps.php Hm
20:16:16 <ellion> Not more fly-by-wire?
20:16:28 * CakeProphet wants to make a df-like somehow involving dinosaurs and space.
20:16:35 <ellion> Gregor: Those plans look distinctly inferior to prgmr's, especially in that they're lying through their teeth.
20:16:39 <ellion> Weeell
20:16:44 <ellion> I suppose they're not saying UNLIMITED.
20:16:57 <ellion> But if anyone uses their "unmetered" bandwidth to its capacity, either
20:17:00 <ellion> (a) the whole thing will crash and burn or
20:17:04 <ellion> (b) they'll get kicked off for "unreasonable use".
20:17:04 <fizzie> "German datacenter" might not be lying.
20:17:11 <fizzie> Then again, it might be.
20:17:14 <Gregor> ellion: I'm "hm"ing about it for exactly that :P
20:17:28 <ellion> Gregor: Dreamhost used to get infamous from advertising much the same rubbish.
20:17:39 <ellion> s/used to get/got/
20:17:42 <ellion> s/got/became/
20:17:47 <fizzie> They have a '?' in there to explain what 'unmetered' means.
20:17:48 <fizzie> "All VPS's come with an unmetered, shared 1000mbps connection
20:17:48 <fizzie> We will never suspend VPS's for bandwidth overages, or charge for extra bandwidth.
20:17:52 <fizzie> Since this is a shared connection, one VPS isn't allowed to slow down other VM's. This is rarely an issue, if it does become a problem, we will contact the client to arrange a solution (move to a less busy node, etc).
20:17:55 <fizzie> For example, you can't expect a Super-Micro or Micro to push 2TB bandwidth/month.
20:18:06 <ellion> We will never suspend VPS's for bandwidth overages, or charge for extra bandwidth. Since this is a shared connection, one VPS isn't allowed to slow down other VM's. This is rarely an issue, if it does become a problem, we will contact the client to arrange a solution (move to a less busy node, etc).
20:18:21 <ellion> So basically, we'll never disconnect you for using too much bandwidth, unless you use too much bandwidth.
20:18:32 <fizzie> ^echo Do I hear an echo?
20:18:32 <fungot> Do I hear an echo? Do I hear an echo?
20:18:44 <ellion> "We guarantee all services 99.9% uptime, all our servers are monitored every minute to ensure they stay online all the time."
20:18:48 <ellion> That's, like, three nines.
20:18:55 <ellion> That's two more than the best number of nines.
20:18:58 <ellion> Errr
20:18:58 <ellion> Two less
20:19:01 <ellion> Fewer
20:19:15 <ellion> Reboot time
20:19:19 -!- ellion has quit (Quit: Page closed).
20:21:17 <oerjan> <HackEgo> ha piam searan ms bitari spue dillad nalling reparoman coia flas infrureproursy zed haric thikirefallly wersts lasn besturem lignieassein bwn vitie uicled caphistiger shina hecomesltutwilled coloihohrapou nes phooone horrap bed pichermunawa roarbleo th mishoffeme shikkarre uniousioninooraigv res goez kringirthy towsk bion senth
20:21:36 <oerjan> this all looks like a conlang except the words are too inconsistent
20:21:57 <ais523> why can't there be a really inconsistent conlang?
20:22:05 -!- ellion has joined.
20:22:08 <ellion> hello welcome to an chamber
20:22:19 <fizzie> "phooone for youuuu!"
20:22:29 <oerjan> well the context was sort of fantasy
20:22:35 <ellion> what fizzie
20:22:35 <ellion> waht
20:22:37 <ellion> what fizzie
20:22:39 <ellion> oh noooo
20:22:41 <fizzie> WHAT.
20:22:42 <ellion> waht fizzie
20:22:44 <ellion> there we go
20:23:02 <oerjan> maybe it could be one language which borrows heavily from another one
20:23:43 <CakeProphet> `word 50
20:23:45 <HackEgo> ​/home/hackbot/hackbot.hg/multibot_cmds/lib/limits: line 5: exec: word: not found
20:23:53 <CakeProphet> `mv bin/wacro bin/word
20:23:55 <HackEgo> mv: missing destination file operand after `bin/wacro bin/word' \ Try `mv --help' for more information.
20:23:59 <ellion> Man, it's actually quite unnerving having the application indicators gone.
20:24:03 <CakeProphet> `run mv bin/wacro bin/word
20:24:05 <HackEgo> No output.
20:24:07 <CakeProphet> `wacro 50
20:24:08 <HackEgo> ​/home/hackbot/hackbot.hg/multibot_cmds/lib/limits: line 5: exec: wacro: not found
20:24:14 <oerjan> ...
20:24:15 <CakeProphet> `word 50
20:24:15 <CakeProphet> lol
20:24:17 <HackEgo> nesurietemper duchke ala lampachedinacinstos merrum ter ger berbeis fol vo carted sekwey co td nalien billoprie ding menergal aus nifi pichdrane aansiecznynny parciell ung tre kertak boomcgrepbuch siuia irorby donia pridetissola cumrnbent psocclin reform amoldasper wiyak pentellaning izellellinanit pospor cel nuninatwealvandamah
20:24:21 <fizzie> CakeProphet: IT KEEPS HAPPENING
20:24:23 <ais523> ellion: what's the UI like?
20:24:30 <CakeProphet> fizzie: what does? :P
20:24:31 <ellion> ais523: for what?
20:24:33 <ais523> any good/bad/ugly/ first impressions
20:24:35 <fizzie> CakeProphet: Them mistakes.
20:24:36 <ais523> ellion: of the OS you just installed
20:24:38 <oerjan> `word 10
20:24:38 <CakeProphet> oh yes.
20:24:40 <ellion> ais523: oh
20:24:40 <HackEgo> stur tensenti dener sicti rooktjin rie drenden fourptiau jarian jria
20:24:46 <CakeProphet> I do that a lot. especially when not sleeping and stuff.
20:24:49 <ellion> ais523: it's largely similar to the previous version of OS X :P
20:24:57 <ellion> ais523: the changes seem to be positive, though
20:25:02 <ais523> heh, so OS X isn't completely screwed up yet
20:25:09 <fizzie> CakeProphet: I haven't been following; is this still the same English-books set?
20:25:14 <CakeProphet> yes
20:25:14 <ais523> I suppose I should ask about the terminal in particular, because AceHack
20:25:32 <CakeProphet> my current version is not working but has the newest changes.
20:25:37 <ellion> the elimination of scrollbars is a Good Idea, the new inverse-style scrolling seems nicer, the orthogonal persistence stuff (once you tweak the settings to turn it actually on; I suspect it will be default soon) is nice but unusual
20:25:49 <ellion> ais523: it works; Gregor was whining about its speed a while ago but it's always been fine for me
20:25:51 <oerjan> CakeProphet: somehow it doesn't look very english
20:25:53 <CakeProphet> I'm busy making money and procrastinating and doing school work but I should have a free day to finish it up soon.
20:25:54 <ellion> ais523: it can now go into fullscreen though :P
20:26:05 <ellion> ais523: gimme the ace hack telnet?
20:26:06 <ellion> argh
20:26:09 <ellion> acehack telnet
20:26:13 <ais523> telnet acehack.rawrnix.com
20:26:25 <ais523> or ssh games@acehack.sovrappensiero.info (password games)
20:26:27 <ellion> rawrnix.com is a rather supremely bad domain name
20:26:36 <ais523> heh, why?
20:26:39 <ais523> (it's not my domain, btw)
20:26:48 <ais523> at least it's easier to spell than sovrappensiero
20:26:52 <ellion> it just is :P
20:27:13 <ellion> "rawr" is a silly word, "nix" is a bad thing to pay homage to (and what is "rawrnix" even playing on?), and the .com is probably wrong
20:27:15 <ellion> DOMAIN OPINIONS
20:27:33 <ellion> note to self: acehack.rawrnix.com password is usual password but with 0 instead of each digit
20:27:49 <ellion> can someone lend me an ampersand?
20:27:52 <ais523> this is a good place to put password notes?
20:27:52 <monqy> 7
20:27:53 <ais523> &
20:27:56 <ais523> monqy: fail
20:27:56 <ellion> erm
20:28:00 <ellion> an at sign
20:28:01 <ais523> there's one in the topic, too
20:28:03 <ais523> @
20:28:04 <monqy> ais523: it was intentional
20:28:07 <ais523> isn't one of those in the topic
20:28:28 -!- oerjan has set topic: Esolang event @ Hel/Finland on 3.10.2011: https://wiki.helsinki.fi/display/lambda/esoteeriset+ohjelmointikielet | god bless haskell america | 12345678!&^@ | http://codu.org/logs/_esoteric/.
20:28:32 <ais523> hmm, I'm not sure anything important is on shifted numbers in Ace
20:28:32 <oerjan> now it is
20:28:33 <monqy> two of them
20:28:42 <fizzie> oerjan: There was one after 'event' already.
20:28:44 <monqy> @ comes after event and before hel
20:28:44 <oerjan> hm true
20:28:50 <ais523> ah right, I didn't look there
20:29:04 <CakeProphet> isn't there like
20:29:09 <CakeProphet> a program to generate these things somewhere?
20:29:11 -!- fizzie has set topic: Esolang event @ Hel/Finland on 3.10.2011: https://wiki.helsinki.fi/display/lambda/esoteeriset+ohjelmointikielet | god bless haskell america | 12345678!&^ | http://codu.org/logs/_esoteric/.
20:29:17 <fizzie> Let's not be wasteful.
20:29:20 <ellion> ais523: you shouldn't list the continue game entry when it's not possible; it showed as red here, which my brain read as "selected" not "impossible" (use a bold black instead to get grey? that's the universal "disabled menu item" indication), and so I got confused for a few seconds, wondering what would happen if I did it, before realising what it meant
20:29:26 <fizzie> It's not like @s grow on trees.
20:29:32 <ellion> or at least, if you don't list it, use a better colour :P
20:29:35 <ais523> ellion: nothing will happen if you press it
20:29:45 <ellion> ais523: doesn't matter,
20:29:48 <ellion> s/,//
20:29:50 <ais523> I don't use bolded black because it's buggy in many terminals
20:29:56 <ais523> e.g. in gnome-terminal, the cursor won't show up against it
20:30:05 <ais523> and IIRC it's not the only one that has problems
20:30:06 <ellion> I wasn't complaining about what would happen if I pressed it, I was complaining about the UI temporary disabling me :P
20:30:15 <fizzie> ais523: The N900 terminal (well, the library) renders bold-black as black.
20:30:23 <ellion> ais523: well, the cursor won't show on that anyway; but, OK, at least use something subdued rather than bright and angry
20:30:34 <CakeProphet> grrr
20:30:34 <ais523> ah, red is subdued compared to white for me
20:30:36 <ais523> that could explain it
20:30:57 <CakeProphet> your mom is subdued and angry? what now?
20:31:05 <monqy> what
20:31:26 <ellion> ais523: hmm, putting the cursor on the dot that represents "play" is suboptimal on OS X; the cursor is light grey by default, so I had to look closely to figure out (a) what the "highlight" meant and (b) what key it was
20:31:28 <CakeProphet> what
20:31:37 <ellion> I'm playing as elliott now, but will probably not actually play much
20:31:47 <ais523> ah, OK
20:31:53 <ais523> I wasn't sure where else to put it
20:32:01 <ellion> IIRC you can hide the cursor
20:32:19 <ais523> hmm, and if I'm lucky it might even be possible to do it portably and reliably!
20:32:23 <ellion> you already know my general complaints about the in-game AceHack interface, but its irks fine with Terminal
20:32:29 <ais523> and if I'm /really/ lucky, there might be a standard way of unhiding it again
20:32:34 <ellion> the highlight on the player character is a bit annoying because of the cursor, but not highlighting the player would be unreasonable
20:32:37 <ellion> ais523: it's an ANSI code I think
20:32:45 <ais523> wait, I might have forgotten the general complaints about the in-game interface
20:32:49 <ellion> is there a way to quaff without typing a pound sign
20:32:56 <ellion> ais523: you disagreed with them all strongly, so :)
20:32:59 <ais523> ellion: q
20:33:02 <ais523> heh
20:33:06 <CakeProphet> ansi codes are neato
20:33:19 <ellion> ais523: that doesn't work, I'm trying to quaff a fountain, repeatedly
20:33:22 <ais523> it's nice to get feedback about AceHack-on-Mac from someone other than kerio, anyway
20:33:26 <oerjan> <Vorpal> exotontek <-- scifi setting, some big company
20:33:27 <ellion> oh hmm
20:33:28 <ais523> ellion: q, I think
20:33:29 <ellion> does it not let you? :(
20:33:38 <ais523> or maybe q.
20:33:39 <ellion> or is , it
20:33:40 <oerjan> clearly they're specializing in hauling cargo into space
20:33:43 <ellion> ah yes q,
20:33:53 <ellion> lame, nothing bad happened
20:34:10 <CakeProphet> `word 10
20:34:11 <HackEgo> ens krumqueleleutocki quan mig tonta ftr codiuinaton mct brin domfpirsverdew
20:34:13 <Vorpal> oerjan: yes?
20:34:18 <ellion> ais523: hmm, what's Hept?
20:34:22 <oerjan> by the exotons
20:34:27 <ellion> and how do I repeat an action?
20:34:27 <ais523> ellion: heptagrams on the square
20:34:30 <Vorpal> I see
20:34:31 <ellion> 9 moves me diagonally, which is stupid
20:34:34 <ais523> they're like elbereths, they repel monsters
20:34:41 <ais523> and control-A is repeat; with luck, it might even work
20:34:42 <CakeProphet> ellion: see: numpad
20:34:45 <ellion> ais523: oh, . draws one appearently
20:34:47 <ais523> yep
20:34:54 <ellion> ais523: are hectograms new?
20:34:54 <ais523> you can use s to wait without drawing
20:34:59 <fizzie> "DEC Private Mode (DECSET/DECRST) sequences: These are not described in ECMA-48. ESC [ ? 25 h: DECTECM (default on): Make cursor visible." [and s/h/l/ to hide it; but obviously that's not very de-jure standard]
20:35:01 <ais523> they're a UI improvement of a vanilla feature
20:35:01 <ellion> Ctrl+A doesn't work.
20:35:13 <ellion> Ctrl+A 9 just moves diagonally
20:35:22 <ais523> oh, you mean repeat count? #
20:35:23 <oerjan> they are somewhat unpopular, since they are using their main patent to get a stranglehold on the space cargo market
20:35:37 <Vorpal> ais523: how does the elbereth replacement work wrt number of turns to write and doing partial writing?
20:35:40 <ais523> I hope # isn't shift-3 for you, or it could be a little difficult to play without rebinding keys
20:35:44 <Vorpal> like writing and then adding later on
20:35:48 <ellion> ais523: I just pasted it in
20:35:53 <ellion> ais523: ummm, wow, # has a major bug
20:35:57 <ellion> ais523: it doesn't stop when something bad happens
20:35:59 <ais523> Vorpal: you can't partially write one, you can write more than one, it costs the same number of turns as Elbereth itself
20:36:05 <ellion> I gave it a huge count and ., and now I've fainted from lack of food
20:36:09 <ellion> and will presumably die once I hit enter
20:36:11 <ais523> ellion: it does stop on several bad things happening
20:36:17 <ellion> ais523: well, not enough :P
20:36:18 <Vorpal> ais523: so what is the difference? Not needing to write out the whole thing?
20:36:21 <ais523> food dropping is not one of them, though, due to the vanilla code being broken there
20:36:26 <ais523> Vorpal: compare E-y Elbereth to .
20:36:27 <Vorpal> I mean in the prompt
20:36:41 <ais523> which is the nicer interface for a commonly used action?
20:36:41 <Vorpal> ais523: right, but that doesn't explain how to do a partial writing.
20:36:50 <ais523> because you can't do a partial writing, as I explained earlier
20:36:51 <ellion> ais523: oh, it stopped when i fainted
20:36:55 <ais523> ellion: yep
20:36:55 <Vorpal> ah
20:37:01 <Vorpal> ais523: I misread as "can"
20:37:04 <oerjan> this patent consists of a vacuum-safe lubricant which prevents space elevators from unraveling.
20:37:08 <CakeProphet> oerjan: I think wormholes would be pretty essentially to a "realistic" space game.
20:37:13 <ellion> ais523: I like how you can just casually walk around fainting every step
20:37:14 <CakeProphet> als;kkdpokweqrpoksdfpokwerpoksdfpokewrtpoksdf
20:37:16 <ais523> there's a known bug with actions not stopping at food breakpoints
20:37:16 <CakeProphet> essential
20:37:21 <ellion> RIP elliott, killed by newt
20:37:27 <Vorpal> ais523: anyway what if you want to engrave instead of write in the dust
20:37:29 <ellion> while helpless
20:37:32 <Vorpal> or even burn it in
20:37:36 <ais523> Vorpal: E itemletter h
20:37:41 <oerjan> CakeProphet: for a certain value of realistic equal to "this may be impossible in reality"
20:37:43 <Vorpal> ais523: ah
20:38:14 <Vorpal> <CakeProphet> oerjan: I think wormholes would be pretty essentially to a "realistic" space game. <-- what? They require huge amounts of negative energy
20:38:21 <CakeProphet> oerjan: yes but realistic in the sense that it's detailed and bound by mostly realistic laws of physics despite having elements that may be impossible
20:38:28 <Vorpal> no, sub lightspeed travel is the way to go
20:38:29 <ellion> here's a way to provide realistic FTL travel in a space game:
20:38:31 <ellion> you play as a neutrino
20:38:46 <Vorpal> ellion: har har
20:38:50 <ais523> has #esoteric concluded that FTL neutrinos are real and not experimental error?
20:39:05 <ais523> 60ns over a distance of several hundred miles sounds to me like they measured how long it should have taken wrong
20:39:08 <CakeProphet> sub lightspeed ship travel + wormhole = not waiting 1000s of years to do anything in deep space.
20:39:26 <ellion> finally, they improved Safari's downloads window
20:39:34 <ellion> ais523: their last estimate as to the error is +- five ns IIRC
20:39:34 <ellion> ask Phantom_Hoover
20:39:40 <ellion> well
20:39:41 <ellion> not estimate
20:39:44 <ellion> I think they actually narrowed it down to that
20:39:46 <ais523> ellion: that's of expected random errors
20:39:58 <ais523> a systematic error would work differently
20:39:59 <ellion> ais523: and how can they measure how long it should have taken wrong?
20:40:00 <ellion> c is a constant
20:40:02 <Vorpal> ais523: my guess it that it is a fairly complicated experimental error, or an error in the theory underlying the devices (for example maybe the neutrino generator takes a different amount of time to generate a neutrino from when it gets the signal to do so than what the theories suggest)
20:40:11 <ellion> take c, take distance, you're done
20:40:16 <Vorpal> rather than an error in the theory of relativity
20:40:18 <ais523> ellion: it's the "take distance" I'm not convinced about
20:40:22 <ellion> I'm pretty sure a 60ns error would be a huge change in distance
20:40:36 <ellion> ask Phantom_Hoover :-P
20:40:39 <Phantom_Hoover> ellion, it's the time and distance measurements.
20:40:47 <ellion> Phantom_Hoover: ais523 thinks the distance is wrong
20:40:49 <fizzie> 60 ns * c = 18 metres.
20:41:08 <ellion> hmm, fair enough
20:41:23 <ellion> maybe there's a wormhole :P
20:41:49 <Vorpal> how many times did they repeat the experiment?
20:42:00 <Vorpal> perhaps they confused it with other neutrinos
20:42:03 <fizzie> A complicated experimental error is my personal no-real-reason-for-it guess too; I mean, it's probably not exactly trivial to say when a neutrino went out, it's not like you can just look.
20:42:22 <ellion> Vorpal: tens of thousands of times
20:42:24 <Vorpal> I mean, neutrinos don't react a lot with normal matter
20:42:25 <fizzie> OTOH one assumes they'd be reasonably careful before publishing this sort of stuff.
20:42:41 <ellion> fizzie: they spent months repeating it, checking it and narrowing down the error, so
20:43:00 <fizzie> That just means it's not a trivial error. :p
20:43:04 <ellion> Well, yes.
20:43:05 <fizzie> Haven't even peeked at the paper, so.
20:43:18 -!- GreaseMonkey has joined.
20:43:32 <CakeProphet> neutrinos have transfinite energy.
20:44:18 <oerjan> <ais523> ellion: it's the "take distance" I'm not convinced about <-- i hear the arxiv paper contains a diagram where they graph _continental drift_ over the experiment time, including a 7 cm shift due to an earthquake. so i would not be so sure the distance is really 18 m off :P
20:44:26 <Vorpal> on the other hand, there are a few other issues with the theories of relativity. The distance anomaly of those coasting space probes for example
20:45:01 <ais523> oerjan: have they calculated the exact shape of the Earth to work out the straight-line distance too?
20:45:09 <ais523> also, how do you synchronize clocks to within ns over hundreds of miles?
20:45:21 <ellion> oerjan: you got that from the xkcd caption :-)
20:45:42 <Vorpal> ais523: you sync them in the exact middle then travel at the same acceleration in each direction?
20:45:47 <oerjan> ellion: i also read it elsewhere
20:45:51 <Vorpal> (probably not)
20:46:00 <olsner> I think the GPS sattelites are synchronized to within ns, istr it's a somewhat solved problem
20:46:03 <ellion> ais523: with all due respect, what you're saying is _way_ too obvious for them to not have already considered it.
20:46:13 <oerjan> ais523: they use a gps-based system with an atomic clock connected. they have checked this thoroughly too, among other things they moved a portable atomic clock between the spots to check
20:46:22 <ellion> ais523: I think the only realistic option for the measured distance being eighteen metres off is for some really weird space-time shape bullshit on Earth.
20:46:25 <ais523> oerjan: how quickly?
20:46:51 <Vorpal> ais523: I would assume they measured acceleration when doing that.
20:47:17 <ais523> perhaps atomic clocks are skewed by the presence of unusually large numbers of neutrions
20:47:19 <oerjan> ais523: the portable check was done by an external consultant
20:47:19 <ais523> *neutrinos
20:47:26 <ais523> (although "neutrions" is a good word too)
20:47:40 <ellion> ais523: I doubt they were running the experiment while doing that.
20:47:41 <oerjan> ais523: sheesh they are obviously _constantly_ readjusted from the gps
20:48:04 <ellion> ais523: you're practically trolling, really, by bringing up complaints /this/ obvious about their method
20:48:13 <ais523> possibly, I'm just brainstorming
20:48:25 <ais523> we should wait for an independent reverification, at least
20:48:34 <CakeProphet> quantum entanglement = best way to sync clocks
20:48:36 <ais523> mostly because that does very well at compensating for things people haven't thought of
20:49:01 <fizzie> I think they should just retry the whole thing in space. How big can a neutrino detector be, anyway? I'm sure you could lift one. (1300 tons, apparently.)
20:49:09 <ellion> ais523: Nobody is saying they're sure it's true.
20:49:14 <ellion> There's nothing to wait for.
20:49:22 <ellion> ais523: But how the hell is anyone going to repeat it?
20:49:25 <ellion> Nobody has CERN's facilities.
20:49:36 <ais523> fizzie: perhaps going through Earth is what causes neutrinos to go FTL
20:49:39 <Vorpal> ellion: Fermilab?
20:49:57 <fizzie> ais523: Right, which would mean they'd learn something new by doing it in space instead.
20:50:06 <ellion> Well...
20:50:08 <ellion> "Right when you thought that Fermilab was a thing of the past, new work with neutrinos are exciting us all over again. The scientists associated with the MINOS experiment at the Department of Energy’s Fermi National Accelerator Laboratory just announced their findings of a rare phenomena – the transformation of muon neutrinos into electron neutrinos."
20:50:10 <ais523> I think they'd learn something new doing it on the Earth, too
20:50:10 <Vorpal> ellion: think I read somewhere about a facility in Japan too
20:50:14 <ellion> So maybe they're up for neutrino-related work. :p
20:50:33 <fizzie> Also possibly they could petition a temporary no-gravity mode from the universe-simulator and retry?
20:50:50 <Phantom_Hoover> Wait, what *did* happen with the neutrinos?
20:50:54 <ellion> "Could even set something up to do that automatically every time a file is saved, or just commit periodically at regular intervals. Based on the IRC bot announcements in #haskell, I'm pretty sure Edward Kmett uses something like that, except that instead of committing it just uploads directly to Hackage. ;]"
20:50:54 <Phantom_Hoover> Have we had an update or?
20:51:17 <ellion> Phantom_Hoover: Nothing, ais523 just asked us about it then brought up a bunch of really obvious complaint theories about their methods.
20:51:24 <oerjan> <Vorpal> [...] The distance anomaly of those coasting space probes for example <-- i heard recently that this was solved by a more detailed model of how thermal radiation was reflected by the probe parts
20:51:33 <Vorpal> oerjan: ah okay
20:51:33 <ellion> I think the Earth having really weird space-time would be almost as cool as FTL being possible.
20:51:43 <ellion> Whoa, I typed that space-time without the - and it keeps adding t.
20:51:46 <ellion> A choice I agree with, but whoa.
20:51:57 <fizzie> Based on the IRC bot announcements, Edward Kmett does neutrino velocity experiments, except the results are directly uploaded to Hackage, is how I read that.
20:51:57 <monqy> whoa
20:52:09 <ellion> GitHub looks much nicer on OS X.
20:52:12 <Vorpal> fizzie: which IRC bot?
20:52:28 <ais523> oerjan: yes, IIRC they decided the best explanation for the anomaly was that the heat of some internal components was being radiated and causing a reaction
20:52:30 <Vorpal> fizzie: also that was a misreading right?
20:52:37 <Vorpal> ellion: oh?
20:52:41 <ais523> as in, pushing the spacecraft in the opposite direction
20:52:48 <fizzie> Vorpal: See the ellion quote. And it wasn't exactly a misreading, just a miscontextifying or some-such.
20:52:55 <CakeProphet> ellion: enjoy right clicking.
20:53:01 <ellion> CakeProphet: What?
20:53:04 <monqy> CakeProphet: whaat
20:53:25 <CakeProphet> ellion: or are you not running an apple?
20:53:31 <ais523> is that a /really really old/ anti-Mac troll?
20:53:37 <CakeProphet> never.
20:53:44 <monqy> isn't this the same computer he's been using for at least the past while
20:54:02 <oerjan> <ellion> Nobody has CERN's facilities. <-- this didn't use the LHC though, only a proton pre-accelerator that otherwise feeds into the LHC.
20:54:03 <ellion> Exactly the same.
20:54:05 <ellion> It right clicks just fine.
20:54:18 <fizzie> Write "click".
20:54:26 <ellion> oerjan: It's still a lot.
20:54:27 <ellion> fizzie: Click.
20:54:35 <fizzie> TY. TYVM.
20:54:37 <Vorpal> oerjan: they could also try sending it to a detector elsewhere. Like CERN<->Fermilab?
20:55:12 <oerjan> <fizzie> [...] How big can a neutrino detector be, anyway? <-- i think you'd want to lift the accelerator part. neutrino detectors need to be deep underground to shield against cosmic rays.
20:55:57 <fizzie> oerjan: Maybe they could paint their neutrinos pink or something.
20:56:03 <fizzie> Anyway: "Spokespeople for both Fermilab and the T2K experiment confirmed their intentions to test the OPERA result in coming months."
20:56:07 <fizzie> So I suppose we'll see.
20:56:09 <ais523> isn't a neutrino detector just a large vat of washing-up liquid with a bit of machinery attached?
20:56:13 <Vorpal> fizzie: T2K?
20:56:19 <ellion> `addquote <ais523> isn't a neutrino detector just a large vat of washing-up liquid with a bit of machinery attached?
20:56:21 <HackEgo> 684) <ais523> isn't a neutrino detector just a large vat of washing-up liquid with a bit of machinery attached?
20:56:32 <Vorpal> ellion: actually I seem to remember hearing this too
20:56:37 <Vorpal> so it isn't as absurd as it sounds
20:56:43 <fizzie> Vorpal: A Japanese neutrino-related thing.
20:56:44 <ellion> It's still funny.
20:56:56 <ais523> it's probably even funnier if true
20:57:28 <fizzie> ais523: The OPERA detector used here is a pile of bricks, actually. (Of "photographic emulsion films interleaved with lead plates".)
20:57:29 <ellion> time to burn Ubuntu
20:57:50 <ellion> Won't it really suck if exactly one thing can go faster than light, and it's neutrinos?
20:57:54 <ais523> I thought you'd burnt it already
20:57:59 <CakeProphet> Ubuntu? more like Ubadtu. OOOOOOH
20:58:04 <ellion> And then really annoying smug neutrino aliens come and make fun of us.
20:58:04 <ais523> ellion: not really, it'd still be useful for transmitting information FTL
20:58:11 <ellion> ais523: SMUG NEUTRINO ALIENS
20:58:11 <fizzie> They have that one-square-kilometre "neutrino observatory" thing in the Antarctic.
20:58:43 <ais523> fizzie: hmm, the photographic emulsion to pick up the neutrinos, the lead plate to protect from hostile enchantments?
20:58:48 <ellion> ais523: I burnt Lion, not Ubuntu.
20:58:55 <ellion> Animal cruelty; RIP lion.
20:58:56 <ais523> ah, I see
20:59:14 <ais523> I wonder when Apple will run out of entries in their naming scheme?
20:59:22 <ais523> and if there'll ever be an OS XI
20:59:33 <ellion> ais523: I eagerly await OS X Cat.
20:59:35 <ais523> perhaps they'll start increasing the version number every week
20:59:40 <ellion> They will exhaust every feline species apart from house cats.
20:59:44 <ellion> ais523: haha
20:59:46 <ellion> ais523: Maybe OS X will become rolling release.
20:59:52 <ellion> That's hard to get people to pay for, though.
20:59:56 <ais523> no, new stable release every week, not rolling release honest!
20:59:59 <ellion> Maybe they'll just take, like, a dollar a week.
21:00:07 <ais523> and presumably you pay for it subscription-style
21:00:12 <ellion> Make payments out to Cult of Mac.
21:00:25 <fizzie> 1.00002c isn't much of a galaxy-wide ultrawave radio, though. You probably won't even get a ticket. (For exceeding the speed limit.)
21:00:28 <oerjan> <Vorpal> oerjan: they could also try sending it to a detector elsewhere. Like CERN<->Fermilab? <-- this would be cool to do anyhow, in order to check how the effect depends on distance. if it were 60 ns total _regardless_ of distance, it would imply something like my prior time travel speculation
21:00:52 <ais523> fizzie: well, I think 1.00002c is very unlikely
21:00:56 <ellion> fizzie: Maybe it's cumulative.
21:00:57 <Vorpal> fizzie: maybe the speed of light was measured incorrectly?
21:01:01 <ellion> >_<
21:01:01 <fizzie> ais523: That's what they got.
21:01:09 <ais523> fizzie: I mean, a constant multiple of c
21:01:10 <ellion> Vorpal: The error is MUCH lower than sixty ns.
21:01:17 <ellion> For the speed of light.
21:01:18 <ais523> I'd think it'd be more likely to be faster the further the distance, or something like that
21:01:27 <Vorpal> oerjan: what prior time travel speculation?
21:01:27 -!- Ngevd has joined.
21:01:28 <olsner> Vorpal: iirc, the speed of light and the second are fixed constants, it's the meter that might be wrong
21:01:31 <Ngevd> Hello!
21:01:36 <ellion> ais523: it would be really funny if you could only go a really small multiple faster than light
21:01:38 <ais523> (faster on shorter distances, like oerjan's "always 60 ns", seems pretty implausible)
21:01:39 <CakeProphet> maybe all of Einstein's theories are actually based on neutrinos and not light!
21:01:44 <fizzie> ais523: I'm not sure how you can tag either one of those as "more likely", but what-evur.
21:01:44 <Vorpal> olsner: right
21:01:54 <oerjan> <ais523> isn't a neutrino detector just a large vat of washing-up liquid with a bit of machinery attached? <-- there are several designs iirc, which are different in what kind of neutrinos they can detect and whether they can detect the direction they are traveling, iirc.
21:01:58 <ellion> ais523: Ooh, so a neutrino making a journey of fifty-nine ns...
21:02:06 <Vorpal> olsner: the meter is defined in terms of the speed of light and the second though
21:02:12 <ais523> fizzie: well, it's like the fine structure constant almost being an integer
21:02:20 <olsner> oh, ok, other way around then :P
21:02:23 <ais523> everyone was happy when they discovered it wasn't an integer, and upset while they thought it was
21:02:31 <ais523> (well, 1 over an integer, because it's upside-down)
21:02:31 <ellion> Really?
21:02:45 <ellion> Things that are integers are nice.
21:02:48 <ais523> well, if it's an integer, you have to wonder why /that/ integer
21:02:48 -!- derdon has quit (Remote host closed the connection).
21:02:56 <ellion> Because God, duh. :p
21:03:12 <ais523> and for other values, it's just an arbitrary number, and there are quite enough of those
21:03:18 <olsner> I don't like integers, they are suspiciously ... integral
21:03:25 <ellion> I wonder whether the various universal constants are reals.
21:03:28 <ellion> Computable reals?
21:03:43 <ais523> ooh, question: what's the shortest program for which it's unknown whether it halts?
21:03:49 <ellion> ais523: Goldbach or Collatz
21:03:49 <oerjan> <fizzie> [...] (Of "photographic emulsion films interleaved with lead plates".) <-- ah yes, i think these are the lead plates which are actually constructed from ancient roman plumbing or something, because all modern lead products are radioactivity contaminated
21:03:56 <ellion> ais523: at least well-known
21:04:15 <ellion> ais523: I think soupdragon wanted to find that out
21:04:16 <ellion> but it's rather hard to
21:04:31 <ellion> an exhaustive search is only possible for very small programs and the answers for those will be obvious, at least in something like brainfuck
21:04:33 <ais523> I don't see how you can get the collatz program into a dubiously-halting one
21:04:36 <Vorpal> <ais523> everyone was happy when they discovered it wasn't an integer, and upset while they thought it was <-- actually they thought it was a rational iirc? 1/137 or some such iirc?
21:04:39 <ellion> It'd be neat if our universe was super-Turing, but only because the various constants are uncomputable reals.
21:04:48 <ais523> you can't search each integer in turn to see if the collatz sequence doesn't halt
21:04:49 <ellion> Vorpal: It could still be rational.
21:04:54 <Phantom_Hoover> <ais523> ooh, question: what's the shortest program for which it's unknown whether it halts?
21:04:57 <ellion> You can't really prove a fundamental constant is irrational.
21:04:59 <Vorpal> ellion: well yes
21:05:00 <Phantom_Hoover> Define 'shortest'?
21:05:03 <ais523> I suppose you could search specifically for a loop that didn't contain 1
21:05:06 <ais523> Phantom_Hoover: any plausible definition
21:05:08 <CakeProphet> !perl $x=rand(1);sleep while$x
21:05:08 <Phantom_Hoover> ellion, yes you can.
21:05:09 <ellion> ais523: oh, true
21:05:15 <CakeProphet> a pretty short program that may or may not halt. :P
21:05:17 <ellion> Phantom_Hoover: Weeeeell, ok.
21:05:20 <ais523> goldbach could work
21:05:21 <Phantom_Hoover> Proving the magnetic constant is transcendental is the easiest thing in the world.
21:05:22 <ellion> Phantom_Hoover: But you can't really do what Vorpal said.
21:05:51 <CakeProphet> !perl sleep if rand
21:05:53 <CakeProphet> shorter
21:05:55 <oerjan> <Vorpal> oerjan: what prior time travel speculation? <-- mine, on this channel, a couple days ago. i have made up at least three wild theories already. :P
21:06:07 <Vorpal> Phantom_Hoover: how?
21:06:16 <ellion> oerjan: I really liked your theory that accounted for the supernova
21:06:21 <ais523> CakeProphet: does sleep do an infinite sleep by default?
21:06:26 <Phantom_Hoover> Vorpal, it's defined to be 4pi*10^-7.
21:06:26 <CakeProphet> yes
21:06:29 <ellion> oerjan: in fact, I think it's the most plausible one yet, for the "FTL is real" case
21:06:32 <ellion> has ais523 heard it?
21:06:32 <Vorpal> Phantom_Hoover: heh
21:06:35 <ais523> no
21:06:39 <CakeProphet> oh?
21:06:47 <ellion> oerjan: tell ais523 your theory that accounted for the supernova being on time
21:06:56 <ais523> hmm, there was an experiment a while back that demonstrated that photons went at the speed of light
21:07:07 <CakeProphet> woah
21:07:14 <CakeProphet> that's good
21:07:14 <ais523> some physicists weren't entirely sure if it was the same for single photons as it was for groups of photons
21:07:19 <Phantom_Hoover> Vorpal, it's more a factor in the SI system than an actual constant, though.
21:07:22 <Ngevd> ais523, wouldn't that mean that photons have infinite mass?
21:07:25 <ais523> so they tested both ways round
21:07:33 <Vorpal> <ais523> hmm, there was an experiment a while back that demonstrated that photons went at the speed of light <-- that is kind of expected?
21:07:35 <ais523> Ngevd: no, zero mass
21:07:45 <ais523> Vorpal: <ais523> some physicists weren't entirely sure if it was the same for single photons as it was for groups of photons
21:07:45 <Phantom_Hoover> Ngevd, you fail relativity.
21:07:50 <Ngevd> Crazy universe
21:07:51 <Vorpal> ais523: why on earth?
21:07:52 <ellion> Ngevd is surprised that photons go speed of light? :P
21:07:56 <oerjan> Vorpal: basically the idea was that the neutrinos don't really go faster than light overall, they just jump 60 ns back in time at one point. this is inspired by the fact that neutrino measures from the supernova SN1987a does _not_ show a proportional speedup (the neutrinos from that would then have arrived 4 _years_ earlier than the light, rather than 3 hours as they did.)
21:07:58 <ais523> Vorpal: don't ask me
21:08:00 <CakeProphet> zero mass, infinite energy.
21:08:01 <ellion> Vorpal: Can _you_ prove it?
21:08:07 <Vorpal> ellion: prove what?
21:08:16 <ais523> oerjan: the neutrinos arrived 3 hours earlier than the light?
21:08:17 <Phantom_Hoover> ellion, I can.
21:08:19 <ellion> Vorpal: That photons (plural) go light speed?
21:08:19 <Ngevd> ellion, no, I just started asking myself questions I don't know the answer two
21:08:32 <ellion> oerjan: you were more specific than that
21:08:33 <Vorpal> oerjan: ah
21:08:38 <ellion> what was the point again?
21:08:39 <ellion> some type turning into another type IIRC
21:08:51 <fizzie> ais523: Right, but a fixed "k*c with k>1" speed as opposed to "it goes faster the further it goes"; neither sounds (to me) incredibly more likely.
21:08:57 <Phantom_Hoover> Flavour oscillation.
21:09:12 <ais523> if it is fixed, it probably depends on the mass of neutrinos somehow
21:09:12 <CakeProphet> neutrinos are proofs, the formula that they prove is the type of a program.
21:09:14 <Vorpal> oerjan: still doesn't match 60 ns
21:09:14 <Phantom_Hoover> Which is a big deal because it contradicts the Standard Model.
21:09:16 <ellion> I like how OS X's computer chess player talks to you by default.
21:09:16 <ais523> hmm, perhaps neutrinos have imaginary mass
21:09:24 <Vorpal> oerjan: for the supernova it is easy to explain though: Perhaps a supernova emit a LOT of neutrinos just before it starts going bang?
21:09:34 <Vorpal> ellion: no
21:09:37 <ellion> oerjan: YOU HAVE NOT PRESENTED YOUR THEORY IN A VERY SATISFACTORY MANNER TO ais523
21:09:43 <ellion> CAPS CAPS CAPS
21:09:44 <ellion> Vorpal: What?
21:09:45 <Phantom_Hoover> Vorpal, yes, basically.
21:09:50 <ais523> hmm, my name is ais523 in allcaps?
21:09:50 <Vorpal> ellion: <ellion> Vorpal: That photons (plural) go light speed?
21:09:54 <Vorpal> ellion: replied to that
21:10:22 <oerjan> <ais523> fizzie: I mean, a constant multiple of c <-- as for that, my first wild theory was based on the idea that the speedup might depend on earth's gravitation. in fact i later found out the speedup is pretty close to the escape velocity of earth. but i then found out this idea breaks down if you include sun or (even larger) galaxy contributions.
21:10:23 <Vorpal> Phantom_Hoover: uh in reply to what? the line about the super nova?
21:10:37 <Phantom_Hoover> The core collapses, the protons and electrons in the core become neutrons and neutrinos, the neutrinos slam into the rest of the star and heat the hell out of it, boom.
21:10:52 <Vorpal> Phantom_Hoover: that works as far as I know
21:11:08 <ellion> OK, I'm going to reboot.
21:11:19 <ellion> If Ubuntu works properly, I'll get on IRC from the installation CD.
21:11:28 <ais523> oerjan: so what makes you think that we're capable of determining whether the process takes 3 hours or 3 hours + 60ns?
21:11:34 -!- MichaelBurge has quit (Read error: Connection reset by peer).
21:11:45 <ellion> ais523: what makes you think he thinks we can?
21:11:47 <ellion> the whole point is that we can't
21:11:51 <Ngevd> I don't like photons any more
21:11:53 <ellion> or, hmm
21:11:58 <Ngevd> They are mean
21:11:58 <ellion> yes
21:12:02 <oerjan> <CakeProphet> maybe all of Einstein's theories are actually based on neutrinos and not light! <-- i don't know if the michelson-morley experiment has been done to enough precision, but if it has it would rule out that, i think.
21:12:04 <Ngevd> What with the not having maths
21:12:14 <Ngevd> By which I mean mass
21:12:16 <Ngevd> I have a slight lisp
21:12:27 -!- ellion has quit (Quit: Page closed).
21:12:32 <oerjan> hm probably must have been.
21:12:44 <olsner> Phantom_Hoover: I think neutrinos interact far too weakly to be able to contribute much to the supernova, they'll just fly straight through all the matter in the star and continue on to earth
21:12:58 <Phantom_Hoover> olsner, nope, at least according to Phil Plait.
21:13:11 <Phantom_Hoover> There are a _lot_ of neutrinos.
21:13:41 <olsner> I'm saying if there were that many neutrinos, there'd mostly be a lot more neutrinos reaching earth not more heat in the star
21:13:49 <Phantom_Hoover> Oh, wait, they're not electron capture neutrinos.
21:14:17 <Phantom_Hoover> They're neutrinos and antineutrinos from pair production.
21:14:41 <Phantom_Hoover> "About 1046 joules of gravitational energy—approximately 10% of the star's rest mass—is converted into a ten-second burst of neutrinos, which is the main output of the event.[63][71] These carry away energy from the core and accelerate the collapse, while some neutrinos are absorbed by the star's outer layers and provide energy to the supernova explosion.[72]"
21:14:52 <Phantom_Hoover> (That's 10^46, not 1046.)
21:16:04 <oerjan> <ais523> I don't see how you can get the collatz program into a dubiously-halting one <-- iirc the link i put on the wiki [[Collatz function]] page is a paper where someone generalized the collatz problem into collatz functions and showed that the corresponding problem can be unsolvable.
21:16:43 <Phantom_Hoover> olsner, furthermore: "Computer simulations indicate that this expanding shock does not directly cause the supernova explosion;[63] rather, it stalls within milliseconds[73] in the outer core as energy is lost through the dissociation of heavy elements, and a process that is not clearly understood is necessary to allow the outer layers of the core to reabsorb around 1044 joules[nb 3] (1 foe) of energy, producing the visib
21:16:43 <Phantom_Hoover> le explosion.[74] Current research focuses upon a combination of neutrino reheating, rotational and magnetic effects as the basis for this process.[63]"
21:16:54 <Ngevd> +
21:17:24 <Ngevd> I'm going to call non-pure functions secular
21:17:24 <Ngevd> For the purposes of the Unicode spec
21:17:28 <Ngevd> *quode
21:18:07 <ais523> Ngevd: you're making no sense
21:18:18 <ais523> I especially can't figure out what you corrected to "quode"
21:18:21 <Vorpal> night →
21:18:24 <olsner> Phantom_Hoover: that mostly seems to say that a lot of energy disappears into neutrinos initially, and a lot of energy also appears from unknown sources later on :)
21:18:25 <ais523> night Vorpal
21:18:44 <Phantom_Hoover> olsner, one source of which is the neutrinos.
21:18:49 <monqy> ais523: uniquode is a Ngevd language by Ngevd
21:18:50 <Phantom_Hoover> A significant source at that.
21:18:54 <ais523> aha
21:18:58 <oerjan> <ais523> ooh, question: what's the shortest program for which it's unknown whether it halts? <-- istr somewhere about someone trying to find busy beaver function values for TMs, the first length they couldn't calculate would be a candidate.
21:19:25 <ais523> yep, would make sense
21:19:34 <ais523> if they couldn't calculate due to undecidability rather than computer power
21:19:47 <ais523> I imagine you can write a reasonably good termination checker that handles all but the most difficult cases
21:19:57 <Ngevd> Ngevd starts with a vowel
21:19:57 -!- GreaseMonkey has quit (Quit: The Other Game).
21:20:08 <oerjan> <ellion> oerjan: tell ais523 your theory that accounted for the supernova being on time <-- i'm a bit backlogged, but i think all my three theories do that, or i'd have discarded them sooner :P
21:20:54 <oerjan> argh he's gone :(
21:20:55 <ais523> Ngevd: heh, I see what you mean there
21:20:58 <ais523> it's "e", isn't it?
21:21:04 <oerjan> oh well he logreads.
21:21:33 <Ngevd> No it doesn't what am I talking about
21:22:26 <oerjan> another point which i've seen on reddit is that the supernova neutrinos were much lower energy, that might affect things.
21:23:01 <ais523> Ngevd: when pronounced, it does
21:23:01 <Ngevd> Ngevd, I'm just tired and pronouncing my username based on its etymology
21:23:12 <Ngevd> Wait, I'm Ngevd
21:23:14 <ais523> "en-geved"
21:23:16 <Phantom_Hoover> oerjan, you mean the one about neutrinos circumventing gravity?
21:23:18 <Ngevd> I meant ais523
21:23:20 <ais523> "taneb" starts with a consonant
21:23:30 <Ngevd> Ngevd starts with a consonant
21:23:35 <ais523> oh, "ais523" starts with a vowel no matter how you pronounce it, out of the various plausible situations
21:23:36 <Phantom_Hoover> ais523, no, it's ngevd.
21:23:59 <Ngevd> It's a real back-of-the-throater
21:24:13 <fizzie> "Ngevd" starts with a ngevd.
21:24:39 <oerjan> <ais523> oerjan: the neutrinos arrived 3 hours earlier than the light? <-- this is not so surprising, it's supposedly because the neutrinos pass from the core straight through the outer star parts while the photons get delayed by them
21:25:21 <ais523> so they could have been early by any amount from 0 to just over 3 hours, depending on measurement accuracy, rounding, and exactly how supernovae operate
21:25:38 -!- variable has quit (Excess Flood).
21:26:31 <oerjan> <Vorpal> oerjan: still doesn't match 60 ns <-- the four years would be assuming the supernova neutrinos had moved at the same speed all the way as these CERN ones
21:28:00 <oerjan> <Vorpal> oerjan: for the supernova it is easy to explain though: Perhaps a supernova emit a LOT of neutrinos just before it starts going bang? <-- 90% of the total energy of a supernova is supposedly in the form of neutrinos at the very start of the core explosion (iirc all the detected neutrinos were within 13 seconds of each other, or something)
21:28:07 -!- variable has joined.
21:29:57 <oerjan> <ais523> oerjan: so what makes you think that we're capable of determining whether the process takes 3 hours or 3 hours + 60ns? <-- erm this wasn't for the "single 60 ns" theory, but for the 1.000025 constant speedup theory.
21:30:04 <ais523> ah, OK
21:30:25 <ais523> single 60 ns doesn't really seem mathematically possible to me, because of the time travel issue
21:32:14 <Ngevd> Goodnight
21:32:14 <Ngevd> No wait
21:32:15 <Ngevd> Not goodnight yet
21:32:15 <Ngevd> School debate club starts tomorrow
21:32:33 <Ngevd> Now goodnight
21:32:37 -!- Ngevd has quit (Quit: Leaving).
21:34:45 <oerjan> <Phantom_Hoover> oerjan, you mean the one about neutrinos circumventing gravity? <-- er that would be the one that evolved into that escape velocity thing yes. maybe it could still be true with something else than escape velocity.
21:35:10 <Phantom_Hoover> oerjan, what's the escape velocity thing?
21:37:12 <oerjan> Phantom_Hoover: the speed of these neutrinos is approx. c + escape velocity from earth at earth's surface.
21:37:34 -!- oneirelliott has joined.
21:37:39 <oneirelliott> WELCOME TO... THE STESGI SUMMARY
21:37:42 <oneirelliott> (Captcha again.)
21:37:51 <oerjan> however it makes less sense if you include the contributions from the sun or (even larger) the whole galaxy.
21:37:55 <oneirelliott> So, well, um, hrm.
21:38:06 <oerjan> oneirelliott: please logread :P
21:38:09 <oneirelliott> oerjan: ok
21:38:17 <oneirelliott> ais523: I'm on Unity again, and hopefully my anger levels are low enough that my perception will be more objective this time 'round.
21:38:49 <ais523> oneirelliott: = presumably elliott rather than oneiros
21:38:52 <ais523> or maybe both
21:38:57 <oneirelliott> ineiros.
21:39:10 <ais523> how advanced is the state of IRC connection multiplexers?
21:39:15 <ais523> you could use irssi + screen, or something, I suppose
21:39:34 <olsner> oneirelliott: lol unity
21:39:35 <oerjan> i have been assuming ineiros is a variant spelling or something of oneiros
21:39:48 <oneirelliott> Although as a first note, I note that (a) mouse clicks are _still_ way too sensitive to touch (rather than click); menus are popping up just as I'm typing. This problem did NOT exist with the Ubuntu version I was on previously and is EXTREMELY annoying. (b) There's a problem with either the colour depth or the dithering not being there. It makes things look crappy. Will look into.
21:40:09 <oneirelliott> olsner: Yeah, well, installing Debian on this thing doesn't sound like a fun time.
21:41:00 <oneirelliott> Also I don't think fan control works on this thing yet.
21:41:28 <oerjan> you would think apple knew how to control their fans
21:41:40 <oneirelliott> It's Shuttleworth's fault in this case. :p
21:41:40 <ais523> dithering on a modern system seems wrong, except when you're outputting to a really low colour depth for artistic reasons or something
21:41:50 <oneirelliott> ais523: The MacBook Air has slightly low colour depth.
21:41:53 <oneirelliott> Six bits rather than eight.
21:42:00 <olsner> xfce perhaps? the xubuntu thing (which is apparently almost completely different from plain xfce) seems to be a lot like plain ubuntu was before Unity
21:42:02 <oneirelliott> It needs dithering or everything looks like shit.
21:42:06 <oneirelliott> (With dithering it looks fine, because it's very high dpi.)
21:42:09 <ais523> ah, interesting
21:42:20 <olsner> not that I use non-xfce ubuntu, so I don't really know
21:42:25 <ais523> although, I'm surprised that you find 18-bit color ugly and are fine with 24
21:42:35 <oneirelliott> ais523: Why do Ubuntu _still_ have their homepage be that useless Ubuntu-branded Google search?
21:42:35 <ais523> I suppose that humans could tell those apart on gradients and similar situations, though
21:42:40 <oneirelliott> ais523: And no, it's really ridiculously obvious.
21:42:46 <oneirelliott> The background has horrible banding.
21:42:46 <ais523> oneirelliott: because Google pay them to, obviously
21:42:52 <oneirelliott> ais523: at least make it /proper/ Google
21:43:17 <oneirelliott> olsner: I might try Xubuntu, but this mouse thing is the most annoying so far.
21:43:21 <oneirelliott> There's always the gnome fallback desktop.
21:43:39 <oneirelliott> oh, I can't even scroll
21:43:41 <oneirelliott> need drivers
21:44:24 <olsner> so the gnome fallback is gnome 2, or whatever it was before gnome also made that thing-just-like-unity?
21:44:53 <oneirelliott> it's gnome three, but with gnome-panel etc.
21:44:58 <oneirelliott> so, updated applications but same UI
21:45:26 <ais523> gnome 3 with gnome-panel sounds surprisingly viable
21:45:27 <oneirelliott> I will have to unbind the Windows key, it's far too easy to mispress here to bring up the Unity launcher thing.
21:45:35 <oneirelliott> ais523: it's just a question of when gnome-panel bitrots
21:45:39 <ais523> oneirelliott: it brings up launcher rather than acting as a modifier key?
21:45:46 <oneirelliott> ais523: yes
21:45:54 <ais523> hopefully, it won't bit-rot if it's maintained by someone
21:46:04 <oneirelliott> it should be windows-space or something, not windows
21:46:04 <ais523> and if Canonical are using it as their fallback, maybe they'll maintain it
21:46:13 <ais523> indeed
21:46:20 <oneirelliott> ais523: I don't think they care about the fallback now that unity [two]d is "usable"
21:46:31 <ais523> bleh
21:46:34 <CakeProphet> oneirelliott: .....NOOOOOO
21:46:45 <oneirelliott> ais523: not to say you won't be able to install it from repos
21:46:48 <ais523> to be fair, I wouldn't expect that gnome-panel needs much maintenance
21:46:48 <oneirelliott> but I'm sceptical /they'll/ maintain it
21:46:51 <oneirelliott> but I'm sure someone will
21:47:06 <oneirelliott> Anyway, I'm trying not to go into this with an ENTIRELY negative attitude, so I'll fix the display and mouse problems and go from there.
21:47:15 <CakeProphet> oneirelliott is sceptical like a sceptic tank.
21:47:41 <oerjan> <ais523> does anyone know where the right channel for all the lost other-esoteric people is? <-- an ancient arcane unsolved problem if i ever saw one
21:47:41 <oneirelliott> Word to the mother tounge, y'all.
21:47:46 <CakeProphet> but yeah, I'm never using Unity.
21:47:49 <oneirelliott> maybe we should start one
21:47:57 <oneirelliott> and pretend to care about it just long enough for it to take off
21:48:03 <ais523> I think that Unity will become viable eventually
21:48:05 <oneirelliott> CakeProphet: Never? Not even if they completely redesign it?
21:48:12 <ais523> I'm just worried that Ubuntu will be nonviable by the time it happens
21:48:13 <CakeProphet> okay maybe
21:48:21 <ais523> I also think the same about both KDE 4 and Gnome 3
21:48:30 <ais523> in fact, it wouldn't surprise me if KDE 4 was usable already, I haven't tried
21:48:35 <oneirelliott> dear Ubuntu: alt-tab having any sort of delay at all is completely unacceptable, you /will/ optimise the shit out of that code
21:48:48 <oneirelliott> if I can't fix _that_, I cannot even contemplate using Unity
21:49:10 <CakeProphet> unity just puts everything in places I don't want.
21:49:19 <CakeProphet> like ON THE LEFT SIDE OF THE SCREEN WHY
21:49:31 <oneirelliott> CakeProphet: nobody cares about your boring Unity opinions, they're waiting for my in-depth review >:|
21:49:34 <oneirelliott> I DOMINATE THE MARKET IN OPINIONS
21:49:43 <oneirelliott> ais523: oh dear, gdm isn't installed, I'll have to tweak some /other/ file to get dithering working
21:49:44 <CakeProphet> no fuck you I get opinions too.
21:50:05 <oneirelliott> (PREFERRED) To set-up Oneiric (or older?), use the post-install-oneiric.sh script. This is the most recent post-install script but has the down-side that it needs to be re-run after every kernel update (until the relevant drivers are patched in the kernel mainline). For this script to work, you must be on >3.0.0 kernel.
21:50:09 <oneirelliott> I don't want to run a script :(
21:50:10 * oneirelliott reads it instead
21:50:13 <ais523> why would gdm be responsible for dithering anyway? it just handles the login screen, right?
21:50:20 -!- augur has quit (Remote host closed the connection).
21:50:21 <ais523> also, what is Oneiric?
21:50:29 <oneirelliott> the Ubuntu beta
21:50:36 <oneirelliott> ais523: you had to add the dithering commands to the gdm init file
21:50:46 <oneirelliott> since it's basically the first thing that gets run with X
21:50:50 <ais523> ah, hmm
21:50:59 <ais523> you'd think that there'd be some sort of X init file to put that in
21:51:06 <oneirelliott> yes, but it's full of tons of stuff
21:51:12 <oneirelliott> the gdm file is more amenable to adding shit to :P
21:51:14 <oneirelliott> ais523: oh, they wisened up and trashed their shitty built-in Unity file manager
21:51:27 <ais523> and replaced it with... nautilus? something else?
21:51:31 <oneirelliott> now it starts a Nautilus modified to look as much like Finder as possible
21:51:35 <CakeProphet> do you guys keep the window buttons on the left side?
21:51:36 <ais523> haha
21:51:41 <CakeProphet> I switched mine back to the right side.
21:51:43 <CakeProphet> I fear change.
21:51:46 <oneirelliott> (which isn't a bad design necessarily, mind you)
21:51:51 <ais523> CakeProphet: I moved them to the right and put the menu back, so that I could close a window from either top corner
21:51:59 -!- impomatic has joined.
21:52:06 <oneirelliott> I'm used to them on the left, that's what i've used for years.
21:52:08 <oneirelliott> (OS X.)
21:52:11 <ais523> what does alt-space do if the window menu isn't there? if the alt-space-x binding still works to maximise, I might be OK with them on the left
21:52:12 <oneirelliott> s/i/I/
21:52:25 <oneirelliott> alt-space x still works in Unity, it seems
21:52:27 <ais523> but have no reason not to put them on the right for the time being
21:53:05 <oneirelliott> # A General Comment: # This script is meant to be a "living howto". You will see "if false" # statements throughout--these are so you can see how to do something # without actually doing. Everyone should read through each step of this # script and decide if the action makes sense. Although...I know most won't. # But don't cry to me when it doesn't do what you wanted/ecxpected.
21:53:09 <oneirelliott> ecxpected
21:53:17 <oneirelliott> grr, I don't like how maximising a window hides the Unity icons
21:53:19 <ais523> ecxpected.cx
21:53:20 <oneirelliott> it should leave them there
21:53:31 <ais523> oneirelliott: obviously designed for tablets
21:53:39 <oneirelliott> ais523: no it isn't, you hover to get them back
21:53:43 <oneirelliott> you can't hover on a tablet
21:53:47 <oneirelliott> it'll be netbooks
21:54:41 <fizzie> Didn't it put the window-control icons of maximized windows into the top bar thingummy (except autohidden and visible-by-hover)? I think I saw something about something like that.
21:54:42 <CakeProphet> maybe I should switch to Debian for Ubuntu nazis force me to use Unity.
21:54:42 <oneirelliott> [ -z "$(which aptitude)" ] && sudo apt-get install aptitude
21:54:47 <CakeProphet> s/for/before/
21:54:52 <oneirelliott> oh come on, that's nothing to do with setting up things for oneiric
21:54:53 <ais523> hmm, I've used a touchscreen on which hovering was possible
21:54:59 <ais523> it was a case of touching the screen not very hard
21:55:01 <oneirelliott> CakeProphet: grow up, the package repos are never going away
21:55:03 <ais523> and a click was pushing harder
21:55:12 <fizzie> ais523: There are also touchscreens where you hover by literally hovering.
21:55:30 <ais523> fizzie: heh, how do they detect that? camera? some sort of capacitance sensor?
21:55:33 <oneirelliott> fizzie: Yes.
21:55:42 <oneirelliott> fizzie: Re: window control.
21:55:59 -!- augur has joined.
21:56:07 <oneirelliott> There's a driver just for the keyboard? Huh.
21:56:41 <fizzie> ais523: I believe it was capacitive, yes; that's what most touchscreens nowadays are. I don't think it counted a very very light touch as a non-hover touch though, it sounds very difficult to reliably hover without accidentally brushing the screen every now and then.
21:56:53 <ais523> depends on how close you had to hover
21:56:58 <CakeProphet> oneirelliott: man you're serious business right now.
21:57:00 <oneirelliott> Hmm. I seem to _have_ a touchpad driver.
21:57:01 <ais523> a midair hover should work at a range of an inch or so, IMO
21:57:15 <ais523> given that hovering rarely does badly unless you have dwell click turned on
21:57:33 <fizzie> "Cypress Semiconductor is a company that makes the TrueTouch capacitive touchscreen. As reported by Slashgear, the company is now working to add hover support to their finger controlled touchscreens." [21 April 2010]
21:57:38 <fizzie> I'm sure other people have done it too.
21:57:39 <ais523> (challenge: make dwell click not an incredibly bad idea on some touch screen model)
21:57:45 <oneirelliott> sudo aptitude install gnome-color-manager icc-profiles-free lm-sensors ppa-purge xcalib
21:57:48 <oneirelliott> this script is so badly factored.
21:57:52 <ais523> I suppose you could also use double-tap for click
21:58:02 <fizzie> There also seems to be an Apple patent for it, unsurprisingly.
21:58:35 <ais523> hmm, probably drag would still have the same touchbinding as normal touchpads
21:58:53 <CakeProphet> mouse is good. change is bad.
21:58:59 <CakeProphet> :(:(:(
21:59:03 <ais523> it'd be more consistent that way, but probably hard to use
21:59:14 <oneirelliott> gah
21:59:18 <oneirelliott> this script adds the mactel-support ppa
21:59:20 <oneirelliott> despite it not having repos for oneiric
21:59:22 <oneirelliott> why would you do that?????
21:59:23 <CakeProphet> change is so.... /different/
21:59:31 <fizzie> ais523: I think the old Interface Hall of Shame had a dwell-clickish thing listed.
21:59:46 <ais523> there's more than one Interface Hall of Shame?
22:00:01 <fizzie> No, so I suppose the adjective was superfluous.
22:00:05 <fizzie> Well, not that I know of, no.
22:00:16 <oneirelliott> Well, it /is/ old.
22:00:29 -!- impomatic has left.
22:00:41 <fizzie> IIRC it was a can't-turn-it-off feature of a multi-selection-aware listbox where it'd single-select the item you left the cursor on for a while, wiping out the existing selection of course.
22:00:46 <ais523> "the <adjective>" normally implies you're using the adjective as a disambiguator
22:00:59 <fizzie> I'm not sure I agree.
22:01:39 <oerjan> <CakeProphet> Agile Allosaurus
22:01:42 <fizzie> Anyway, there might easily be new ones by now that I wouldn't have known of, it's better to be safe than sure.
22:02:10 <oneirelliott> # macfanctldneeded, but no oneiric build
22:02:11 <oerjan> i sense a world-class trolling opportunity: Beautiful Brontosaurus
22:02:17 <oneirelliott> ais523: Slightly regretting OS decision.
22:02:41 <ais523> oneirelliott: Ubuntu O is currently unusable for long periods of time, then?
22:02:45 <oneirelliott> ais523: Not sure.
22:02:55 <oneirelliott> I might just run this crappy script.
22:03:13 <oneirelliott> sudo aptitude install bzr fakeroot bzr branch lp:macfanctld cd macfanctld
22:03:15 <oneirelliott> Oh no.
22:03:33 <ais523> fizzie: well, a websearch for "interface hall of shame" gives lots of results and I don't know which you mean
22:03:47 <oneirelliott> echo "Downloading macfanctld (fan control daemon)." wget -Nq https://launchpad.net/~mactel-support/+archive/ppa/+files/macfanctld_0.5~mactel1~maverick_amd64.deb
22:03:48 <oneirelliott> Gross, bro.
22:04:13 <ais523> what specifically was the "oh no" at?
22:04:19 <oneirelliott> ais523: The bzr stuff.
22:04:23 <fizzie> ais523: The one at http://homepage.mac.com/bradster/iarchitect/shame.htm that is also what is referred to by the wiki.
22:04:26 <ais523> the fact that it seems to be using a cpanm-like approach to Ubuntu?
22:04:49 <ais523> gah, the thing's trying to set hundreds of cookies again
22:04:59 <ais523> OK, more like 20
22:05:03 <oneirelliott> ais523: cpanm-like approach?
22:05:04 <ais523> still annoying trying to click through them all
22:05:27 <ais523> oneirelliott: cpanminus basically works by ignoring all the CPAN machinery, and just downloading the source from where it's stored and compiling/installing it by hand
22:05:35 <oneirelliott> TH0F: +249.0°C TH0O: +249.0°C
22:05:38 <oneirelliott> Wow, my computer is hot.
22:05:55 <oneirelliott> It is hard to quantify how much I believe those sensors.
22:06:29 <ais523> you see, the issue is that Firefox puts up an application-modal dialog box to ask me to approve cookies, separately for each cookie
22:06:38 <CakeProphet> oneirelliott: what is the unit of belief?
22:06:41 <ais523> as if I'd give different results for different cookies on the same web page, while not wanting to save the result permanently
22:06:52 <ais523> CakeProphet: the alp, IIRC
22:07:12 <ais523> now, sometimes the dialog boxes don't load in the order you need to click on them to close them
22:07:19 <ais523> (each being application-modal means they also modal-interrupt each other)
22:07:25 <ais523> and it can take a while to figure out the next one to click
22:07:29 <ais523> I wonder if they've solved that in versions > 3
22:07:52 <oneirelliott> # Fix Matlab error: sudo ln -s /lib/x86_64-linux-gnu/libc-2.13.so /lib64/libc.so.6
22:07:54 <oneirelliott> errrrrr.......
22:08:01 <oneirelliott> are you _sure_ you want to do that?
22:08:11 <oneirelliott> OK, I'mma try and reboot.
22:08:16 <oneirelliott> Wish me, uh, luck.
22:08:44 <ais523> good luck
22:08:51 <ais523> *good uh, luck
22:09:12 <CakeProphet> Posh Puma
22:09:43 <CakeProphet> Pink Panther
22:10:13 <ais523> oneirelliott: are you still connected, despite having rebooted?
22:10:18 <ais523> or are you going to ping out in the next few minutes?
22:12:43 -!- oneirelliott has quit (Ping timeout: 252 seconds).
22:12:55 -!- elliott has joined.
22:13:00 <elliott> Hello.
22:13:00 <lambdabot> elliott: You have 1 new message. '/msg lambdabot @messages' to read it.
22:13:10 <elliott> "Gfax Facsimile Program".
22:13:13 <elliott> Ah yes, facsimile.
22:13:21 -!- elliott has changed nick to Guest78404.
22:13:40 <monqy> wb Guest78404
22:13:47 <Guest78404> -NickServ- Invalid password for elliott.
22:13:48 <Guest78404> I lie. :/
22:14:12 <ais523> you /are/ elliott, right?
22:14:13 -!- Guest78404 has quit (Client Quit).
22:14:18 <ais523> not knowing his password might imply you're someone else
22:14:21 -!- elliott_ has joined.
22:14:24 <elliott_> No.
22:15:19 <elliott_> So, the fan daemon doesnt' seem to be working.
22:15:21 <elliott_> doesn't
22:15:23 <fizzie> ais523: I also recall that the article said (and was surprised by that) the select-on-hover was a standard feature of the control; and indeed, from the MSDN documentation of the ListView.HoverSelection property: "Gets or sets a value indicating whether an item is automatically selected when the mouse pointer remains over the item for a few seconds. When this property is set to true, the user can point to an item in the ListView control to select the item. Multi
22:15:23 <fizzie> ple items can be selected (when the MultiSelect property is set to true) by holding down the CTRL key while pointing to each item. You can use this feature to provide an easier method for the user of your application to select items in the ListView control."
22:15:35 <elliott_> What.
22:15:41 <elliott_> ?
22:15:54 <ais523> just because you can do something doesn't mean you should...
22:16:01 <elliott_> [ -e /media/Mac\ OS ] || sudo mkdir /media/Mac\ OS
22:16:01 <elliott_> sudo mount -o ro /dev/sda2 /media/Mac\ OS
22:16:02 <elliott_> oh come /on/
22:16:04 <elliott_> ais523: Do what?
22:16:07 <ais523> elliott_: heh, you've given me a mental image of a fan daemon as a little demon that physically turns the fan
22:16:16 <fizzie> It was somewhere near the HotTracking thing, which highlights the hovered-on property. But I can't find it from the hall-of-shame page.
22:16:17 <elliott_> Awwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww
22:16:19 -!- ive has quit (Ping timeout: 260 seconds).
22:16:24 <ais523> elliott_: in this case, make hovering a control do something when it normally doesn't
22:17:05 <elliott_> Does anyone know how to read the current fan status or whatever?
22:17:08 <elliott_> Fan speed?
22:17:12 <elliott_> Something in /proc, I think?
22:17:28 <fizzie> I don't know how many people would realize the multi-selection support with the HoverSelection. "Point and wait a few seconds but remember to keep ctrl down at the critical moment" sounds somewhat unintuitive.
22:17:30 <ais523> "fan" appears nowhere in man 5 proc
22:17:40 <elliott_> ais523: It was something in a sub-directory provided by a driver blah blah
22:17:53 <elliott_> echo "Calibrating display (based on OS X configuration)."
22:17:54 <elliott_> oh, that could be nice
22:18:14 <Deewiant> elliott: lm-sensors
22:18:18 <CakeProphet> injury on lower tongue + eating food = unpleasantness
22:18:27 <elliott_> Deewiant: That just shows temperatures
22:18:28 <fizzie> lm-oh-Deewiant-already-said-it.
22:18:35 <elliott_> Aha, looks like LightDM is used instead of gdm now.
22:18:36 <Deewiant> elliott_: No, it also has fan speed
22:18:42 <elliott_> Deewiant: Where
22:18:44 <fizzie> When supported.
22:19:03 <Deewiant> If it doesn't output it then you're not supported I guess, yeah :-P
22:19:07 <elliott_> I ran "sensors"
22:19:11 <elliott_> oh no, lightdm is typical freedesktop.org software, so it's all .ini
22:19:16 <elliott_> where do I put commands :'(
22:19:18 <Deewiant> sensors | grep -i fan
22:19:25 <elliott_> Deewiant: Nothin'
22:19:36 <Deewiant> Oh well
22:20:09 <fizzie> "head /sys/class/hwmon/hwmon*/device/*fan*" but it's unlikely that will do anything if 'sensors' won't.
22:20:25 <elliott_> ERROR: Invalid GPU 0 specified in assignment '[gpu:0]/DitheringDepth[DFP-2]=1'
22:20:25 <elliott_> (there are only 0 GPUs on this Display).
22:20:27 <elliott_> That's not very many GPUs
22:20:30 <fizzie> Except perhaps show ignored-by-lm-sensors-configuration sensors.
22:20:37 <fizzie> (Like fan3 for me.)
22:20:42 <CakeProphet> man using this stable release sure is neat.
22:20:42 <Deewiant> Have you run sensors-detect
22:20:52 <CakeProphet> I have like a working system that does what you'd expect.
22:20:55 <elliott_> Deewiant IT finds my tempreatures
22:21:04 <elliott_> CakeProphet: Fuck off, all these problems were in the previous stable release
22:21:29 <ais523> is there some previous stable release that didn't have them?
22:21:35 <elliott_> Oh god, nouveau is being used
22:21:39 <fizzie> I heard about LightDM.
22:21:39 <elliott_> ais523: Yes, the one before (partially)
22:21:50 <elliott_> What package are the proprietary nvidia drivers in again
22:21:55 <fizzie> It's not like gdm was very easily-configurable either.
22:22:02 <elliott_> fizzie: It had a shell script I had to edit
22:22:07 <ais523> fizzie: it was a while ago, but became less so over time
22:22:20 <ais523> there used to be a dialog box in system | administration that configured it
22:22:30 <fizzie> elliott_: 'nvidia-current' or some-such, but there's also that driver manager thing.
22:22:40 <elliott_> fizzie, The driver manager fails to offer it.
22:23:12 <fizzie> It should if you have that 'restricted' repo enabled. (I think.)
22:23:21 <elliott_> I do.
22:23:36 <ais523> I typically use Intel graphics for driver simplicity
22:23:43 <fizzie> I don't think I got any sensors outputs on the laptop ever, either.
22:23:50 <ais523> although occasionally I find games that don't work with it
22:24:00 <elliott_> And apparently the listed nvidia packages in Software Cetnre don't exist in my repositories.
22:24:01 <elliott_> What.
22:24:06 <ais523> the state of graphics cards is rapidly reaching a state where even low-end cards can run reasonably good games
22:24:14 <ais523> elliott_: perhaps the repo mirrors you're using have only a small subset
22:24:14 <CakeProphet> "enjoy the rest of your evenings"
22:24:21 <CakeProphet> wow I get so many of those thanks for reminding me.
22:24:28 <elliott_> ais523: gb.archive.ubuntu.com
22:24:45 <fizzie> "Trying family `National Semiconductor'... Yes" + "Found unknown chip with ID 0x8519". But that was 2011-03; maybe it's in there now.
22:24:51 <ais523> hmm, I'd /expect/ that to be a full mirror
22:25:18 <elliott_> nvidia-current installs.
22:25:19 <elliott_> So that's a thing.
22:25:37 <fizzie> ais523: "Reasonably good games" (such as nethack) is perhaps not the thing to use there; maybe "reasonably graphical games" or something.
22:25:38 <elliott_> Current likelihood ratings:
22:25:45 <ais523> fizzie: err, that's what I meant
22:25:45 <elliott_> - Staying on Ubuntu with Unity - five percent likelihood
22:25:52 <elliott_> - Staying on Ubuntu with GNOME - something like forty percent
22:25:52 <ais523> Neverwinter Nights 1 works fine, for instance
22:25:57 <elliott_> - Debian - something like fifty percent
22:26:04 <elliott_> - Downgrading ubuntu - something like fifteen percent
22:26:15 <ais523> elliott_: you didn't put OS X anywhere in your percentage chart?
22:26:26 <CakeProphet> elliott_: help what is a percentage?
22:26:27 <monqy> weird percentages
22:26:29 <ais523> or Windows 7?
22:26:31 <elliott_> ais523: OS X is not an option for a main OS for me.
22:26:37 <elliott_> Windows is even less so.
22:26:44 <ais523> what're the specific dealbreakers?
22:26:50 <ais523> I want ammo to use in OS flamewars
22:26:51 <elliott_> For both, programming.
22:27:00 <CakeProphet> I think for me Ubuntu + GNOME is best.
22:27:00 <monqy> osx negative percentages to balance the >100%ery
22:27:05 <elliott_> I have other disagreements with them, but they're just not acceptable programming platforms.
22:27:06 <ais523> I can only really mildly defend Linux, because I have the unfortunate symptom of thinking that Windows/OSX are actually quite good
22:27:23 <elliott_> I never defend Linux because it's terrible.
22:27:31 <elliott_> OK, let's see if these nvidia drivers work.
22:27:55 <monqy> everything is terrible.,,.
22:28:18 <CakeProphet> I feel that any unix-based OS is a pretty decent environment for programming.
22:28:21 <Phantom_Hoover> elliott_ is of the opinion that everything is terrible even if there's nothing better.
22:28:22 <CakeProphet> whereas Windows is terrible.
22:28:34 <monqy> im agre with eliot+_
22:28:41 -!- elliott_ has quit (Read error: Connection reset by peer).
22:28:43 <ais523> CakeProphet: I maintained C-INTERCAL on Windows' emulation of DOS for years
22:28:43 <Phantom_Hoover> CakeProphet, see UNIX-HATERS.
22:28:46 <monqy> bye eliot_+
22:29:00 -!- elliott_ has joined.
22:29:07 <elliott_> Well, the colours look better now.
22:29:13 <Phantom_Hoover> t. s. eliot_+
22:29:57 <CakeProphet> for me the main draw to linux (or another unix) is the shell utilities / mounds of free software
22:30:16 <CakeProphet> Windows has cygwin but that's not quite the same.
22:30:32 <elliott_> I doubt the mounds of free-cost software are the reason, you can just pirate it.
22:30:37 <monqy> windows has a mess of ui i dont want and dont like
22:30:50 <ais523> elliott_: it's a pretty good reason for me, probably the most important
22:30:52 <CakeProphet> elliott_: the fact that it's readily available and very easy to install (for the most part)
22:31:02 <elliott_> ais523: You are not CakeProphet.
22:31:07 <ais523> selecting from a repo is much easier than trying to hunt down programs on Windows
22:31:14 <elliott_> I very much doubt CakeProphet has an objection to piracy.
22:31:17 <ais523> partly, because from a repo you don't need to know the program you want in advance
22:31:26 <elliott_> gah, the fan control must be working, because it keeps turning the fans down then up again
22:31:29 <elliott_> stop that
22:31:31 <ais523> and a websearch is likely to return entirely the wrong program if you aren't searching by name
22:31:41 <elliott_> STOP THAT
22:32:11 <elliott_> Deewiant: I'll try sensors-detect
22:32:33 <elliott_> Deewiant: Oh no, it didn't find any this time, but it did when I was using noveaueaueua.
22:33:01 * elliott_ stops macfanctld to shut it up.
22:33:13 <elliott_> That... made the noise stop.
22:33:19 <elliott_> Did it just stop the control without changing the fan?
22:33:21 <monqy> bye noise
22:33:28 <CakeProphet> computer melt
22:33:35 * elliott_ reboots in panic.
22:33:47 <ais523> most computers shut themselves down rather than melting when they overheat
22:33:52 -!- elliott_ has quit (Read error: Connection reset by peer).
22:34:09 <ais523> I know that this computer does it on a regular basis because I keep forgetting to bang on the case to start the fan
22:34:53 -!- elliott_ has joined.
22:34:56 <CakeProphet> yes my computer shut down from an overheat just a few days ago actually.
22:34:57 <fizzie> ais523: Maybe you should invest in a hand-cranked fan; having a visible crank could be a nice reminder.
22:35:03 <elliott_> Well, it's monitoring fans just fine without macfanctld now, it seems.
22:35:18 * CakeProphet wasn't aware that fan control was an OS thing.
22:35:28 <ais523> fizzie: the issue is that the fan doesn't spin when it's cold enough, which is usually
22:35:33 <elliott_> test
22:35:35 <ais523> if it does get hot, usually due to Flash, it tries to start the fan but fails
22:35:42 <ais523> then when I bang on the case, it actually starts
22:35:51 <ais523> it doesn't start if I bang on the case while it isn't trying to spin the fan
22:35:53 <CakeProphet> I figured the hardware itself simply controlled the fan based on a temp sensor or something.
22:36:00 <elliott_> What IS zeitgeist-daemon?
22:36:01 <elliott_> ais523?
22:36:03 <CakeProphet> but it's actually OS controlled?
22:36:04 <ais523> pong
22:36:08 <elliott_> <elliott_> What IS zeitgeist-daemon?
22:36:12 <ais523> I don't know
22:36:30 <monqy> i interprted it as "is zeitgeist-daemon ais523?"
22:36:34 <CakeProphet> elliott_: I wonder as well.
22:36:43 <ais523> so the issue is to detect that it's trying to start the fan and bang on the case then
22:36:44 <elliott_> It keeps crashing.
22:36:46 <fizzie> CakeProphet: Often there's a firmware-based (within-ACPI whateverness) fan control, which the OS can then override for more configurable control.
22:36:55 <ais523> it makes a distinctive clicking noise when it happens, but a very quiet one, so sometimes I don't hear it in time
22:37:22 * elliott_ opens LibreOffice for the hell of it
22:37:23 <CakeProphet> fizzie: ah. and why would a OS override it?
22:37:28 <elliott_> yay, it's just as ugly as OpenOffice
22:37:32 <CakeProphet> why not just let it do its thing?
22:37:34 <ais523> *"an OS"?
22:37:39 <CakeProphet> sure
22:37:51 <CakeProphet> I was thinking "a operating system" as I typed OS
22:37:56 <CakeProphet> but that's still an...
22:37:56 * elliott_ removes LibreOffice and Ubuntu One from the panel
22:37:57 <CakeProphet> so nevermind
22:37:58 <ais523> elliott_: most of the changes of LO over OOo have been bugfixes and internal changes
22:38:01 <elliott_> I will never use them ever.
22:38:12 <CakeProphet> elliott_: libreoffice = openoffice with new name
22:38:14 <ais523> wow, are you sure you'll never need a Wordalike or Excelalike?
22:38:16 <monqy> is there a ubuntu two
22:38:17 <elliott_> CakeProphet: I'm not an idiot.
22:38:19 <elliott_> ais523: Never said that
22:38:22 <ais523> I know
22:38:30 <elliott_> Then no, I'm not
22:38:36 <elliott_> I'm pretty sure I'd use Abiword or Gnumeric, though
22:38:48 <ais523> what about a Powerpoint-alike? that actually happens to me quite a lot
22:39:04 <ais523> also, I have a huge, incredible burning hatred for Keynote
22:39:08 <fizzie> CakeProphet: In case of Linux, possibly because the user is a control freak and wants to use his/her own algorithm. (Though it could be that the firmware fan control is overly aggressive, and/or annoying in that it keeps toggling the fan "full blast / off / full blast / off / ..." while you'd prefer a more gradual adjustment for noise reasons.)
22:39:22 <CakeProphet> ah
22:39:25 * CakeProphet is suddenly a control freak
22:39:27 <ais523> (it doesn't run on Linux, but it inspires hate indirectly becaus people sometimes use it)
22:39:30 <elliott_> ais523: I don't like presentations; and why?
22:39:36 <elliott_> Keynote seems to produce acceptable output
22:39:40 <ais523> the hatred, or the presentation use?
22:39:43 <elliott_> Former
22:39:54 <CakeProphet> ais523: my fan is rather loud right now and I'm at near 0% CPU usage
22:40:01 <ais523> its output is full of a range of annoyances that are inflicted on other people
22:40:20 <fizzie> The thinkpad_acpi driver has a "fan_control=1" option, after which it lets the user to control it; it's "disabled by default for safety reasons".
22:40:24 <elliott_> ais523: Like?
22:40:30 <elliott_> Obviously I'm asking for examples.
22:40:34 <ais523> things like putting visible navigation controls on the view by default, and a really abysmal HTML output (to the extent that Hacker News persuaded someone to post the PDF instead as it wasn't as bad
22:40:35 <ais523> )
22:40:40 <ais523> elliott_: it takes me a while to type a line!
22:40:45 <fizzie> And I think I used to have a... Toshiba laptop that also had a platform-specific fan thing.
22:40:51 <ais523> also, I don't think the fonts it uses by default look good at sizes larger than 12-point or so
22:41:07 <elliott_> wow, I think Unity's awful stained-glass effect is actually intentional
22:41:15 <Phantom_Hoover> Awful stained-glass effect?
22:41:18 <ais523> elliott_: of course, you've heard of Aero Glass, right?
22:41:24 <monqy> awful stained-grlasa effeCGT?
22:41:31 <elliott_> ais523: but it just looks like a badly-dithered version of a blur
22:41:40 <elliott_> ais523: Well, visible navigation is annoying, and HTML too, but the formatting of Keynote PDFs has always been nicer than average presentations IME
22:41:47 <ais523> elliott_: that's what Aero Glass looks like too
22:41:53 <ais523> well, without the bad dithering
22:42:01 <elliott_> The dithering problem is gone
22:42:08 <ais523> elliott_: that's just because the sort of people who typically use Powerpoint are really bad at formatting
22:42:09 <elliott_> So it actually looks badly dithered inherently.
22:42:17 <elliott_> ais523: I'm not comparing to powerpoint
22:42:23 <elliott_> I don't read presentations by the kind of people who use powerpoint
22:42:26 <elliott_> I'm talking about talk slides etc.
22:42:42 <ais523> well, what do you think the presentations are being made using, if it's not Keynote or Powerpoint?
22:42:49 <ais523> I'm probably the only person in the universe who willingly uses Impress
22:42:50 <CakeProphet> !insanetemp 26.8
22:42:51 <EgoBot> 80.2
22:42:59 <elliott_> wow, Pidgin, don't use my OS display picture as my MSN picture without asking
22:43:04 <CakeProphet> my cpu is room temp atm
22:43:09 <ais523> elliott_: wow that is bad
22:43:15 <monqy> can any TeX do slides hows
22:43:19 <elliott_> I look awful in that picture, I just did it because Ubuntu wanted me to
22:43:23 <ais523> I don't think I've ever used Pidgin beyond trying to start it and realising I didn't know how to use it
22:43:36 <ais523> monqy: there's some way to do presentations with LaTeX addons
22:43:38 * CakeProphet uses pidgin for cybersex and freelancing.
22:43:43 <elliott_> ais523: beamer
22:43:49 -!- MichaelBurge has joined.
22:43:49 <CakeProphet> it is particularly adept for these purposes.
22:43:57 <ais523> monqy: and elliott_ even knows what it's called
22:44:00 <elliott_> (23:44:15) Elliott: I hate computers
22:44:05 <elliott_> Good first message to send with new Pidgin install.
22:44:10 <Gregor> CakeProphet: Oh really? Because I use pidgin for cyberlancing and freesex.
22:44:12 -!- augur has quit (Ping timeout: 248 seconds).
22:44:30 <monqy> mmm / cyberlancing
22:44:31 <CakeProphet> cyberlancing is fun but it's a bit too dangerous for me.
22:45:01 <ais523> !bfjoust (>)*8(>+[-])*21
22:45:02 <EgoBot> ​Use: !bfjoust <program name> <program> . Scoreboard, programs, and a description of score calculation are at http://codu.org/eso/bfjoust/
22:45:08 <ais523> !bfjoust cyberlance (>)*8(>+[-])*21
22:45:15 <EgoBot> ​Score for ais523_cyberlance: 15.7
22:45:16 <Gregor> `? welcome
22:45:18 <HackEgo> Welcome to the international hub for esoteric programming language design and deployment! For more information, check out our wiki: http://esolangs.org/wiki/Main_Page
22:45:20 <Gregor> MichaelBurge: ^^^
22:45:27 <Gregor> (Assuming that's not an altnick for somebody else :P
22:45:28 <Gregor> )
22:45:36 <elliott_> He's been here for at least a day.
22:45:40 <elliott_> He quit earlier.
22:45:44 <ais523> what was the most common third component, besides design and deployment?
22:45:50 <elliott_> Development.
22:45:53 <Gregor> elliott_: But he didn't say anything, and nobody welcomed him :P
22:45:53 <MichaelBurge> All these people talking about me
22:45:55 <ais523> aha, thanks
22:45:56 <MichaelBurge> so much attention :o
22:46:03 <elliott_> Gregor: BTW, I could add a syntax to `? so you could say "`? welcome > MichaelBurge"...
22:46:06 <elliott_> And it'd ping 'em.
22:46:18 <elliott_> ais523: oh no, the indicator message box thing highlight is now blue, not green
22:46:21 <Gregor> elliott_: Yup. Yup you could.
22:46:26 -!- zzo38 has joined.
22:46:28 <elliott_> Gregor: Then I will, in a minute.
22:46:30 <ais523> elliott_: that's an "oh no"?
22:46:42 <elliott_> ais523: I WAS USED TO THE GREEN
22:46:56 <zzo38> I played D&D game today.
22:47:22 <ais523> zzo38: have you considered adding a third player to your electronic circuit simulator?
22:47:26 <MichaelBurge> #haskell has a bot written in Haskell, and several other channels have language-specific bots. Is the #esoteric bot written in Brainfuck or Unlambda? :p
22:47:39 <ais523> there are several; fungot is written in Funge-98
22:47:40 <fungot> ais523: then i came to a lightless domed hall of vast proportions, whose vaultings were covered with demoniac carvings and in whose songs thou shalt hear notes of fnord by which the race expanded. for personal locomotion no external aid was used, since in the space following death some of the
22:47:46 <zzo38> ais523: What electronic circuit simulator?
22:47:47 <ais523> ^ul (hi, I'm written in Funge-98)S
22:47:47 <fungot> hi, I'm written in Funge-98
22:48:05 <ais523> zzo38: it's OK if you don't have one but you can if you want to
22:48:08 <elliott_> ^source
22:48:09 <fungot> http://git.zem.fi/fungot/blob/HEAD:/fungot.b98
22:48:10 <elliott_> MichaelBurge: See above link
22:48:28 <zzo38> ais523: O, OK.
22:48:36 <CakeProphet> HackEgo and Egobot are C I believe.
22:48:39 <CakeProphet> which is pretty esoteric.
22:49:10 <CakeProphet> we have a lot of bots. we love bots.
22:49:28 <monqy> was news-ham zepto
22:49:34 <monqy> or something else
22:49:41 -!- elliott_ has quit (Quit: Leaving).
22:49:47 <monqy> and zeptobot was python? my memorys all gone
22:49:49 -!- elliott_ has joined.
22:49:53 <ais523> bsmnt_bot was python
22:49:53 <zzo38> C is OK to program in. Some people disagree but I think C is good, but LLVM is better designed than C in my opinion, and with a lot of macro system and literate programming, LLVM would work well to write a program that you might otherwise write in C.
22:50:14 <elliott_> ais523: grr, the icon for the battery indicator is horizontally squashed
22:50:20 <elliott_> so it has annoying image scaling artefacts
22:50:23 <monqy> ;_;
22:50:25 <ais523> ouch
22:51:43 <elliott_> hmm, maybe I should try Empathy
22:51:46 <elliott_> maybe it's finally not terrible
22:52:37 * elliott_ installs proprietary fonts because seriously the liberation fonts are bad.
22:52:57 <ais523> and it's using them in preference to DejaVu fonts, which are pretty good?
22:53:15 <zzo38> Then use the Computer Modern fonts (although they are not screenfonts, do you want screenfonts?)
22:53:28 <elliott_> Yes, I want screenfonts :P
22:53:37 <elliott_> ais523: well, dejavu sans has awkward proportions
22:53:41 <elliott_> it's good at replacing Verdana but little else
22:53:47 <Gregor> When you use an electronic paper display, Computer Modern becomes a screenfont!
22:53:52 <zzo38> What operating system are you on?
22:53:53 <elliott_> at least the corefonts have the right proportions as the corefonts :-)
22:53:55 <elliott_> zzo38: Ubuntu
22:53:56 <ais523> elliott_: it's good as a font for use in the abstract, I think
22:54:12 <zzo38> I know X can just use standard X bitmap fonts, but I don't know if the programs in Ubuntu use those.
22:54:13 <CakeProphet> elliott_: I'm pretty sure most people always install mscorefont
22:54:14 <elliott_> ais523: It's not a useful replacement for a webpage not designed for a font with its metrics
22:54:15 <ais523> I normally submit things like reports in DejaVu Sans
22:54:22 <elliott_> zzo38: They're disabled by default.
22:54:24 <Gregor> CakeProphet: I don't have mscorefonts.
22:54:25 <elliott_> CakeProphet: No, most people don't.
22:54:27 <CakeProphet> oh...
22:54:33 <CakeProphet> well I do. I guess I'm not most people then. :P
22:54:34 <elliott_> Most people have no idea what the corefonts are.
22:54:37 <ais523> elliott_: webpages shouldn't be designed for particular font metrics
22:54:44 <elliott_> ais523: I don't really have time for this
22:54:51 <ais523> incidentally, I installed mscorefonts, then later uninstalled it again
22:54:58 <elliott_> (That's a lie, I do, but I don't have the energy)
22:55:03 <Gregor> But WebSplat becomes a wholly different game when metrics change!
22:55:20 <ais523> I haven't really noticed, apart from Neverwinter Nights 1 which substitutes a weird 7-segment-display type font where it'd normally use Courier New
22:55:27 <ais523> which makes things like scripts almost unreadable
22:55:36 <elliott_> Gregor: I'm still bummed that nobody backed up HavenWorks.
22:55:55 <Gregor> elliott_: I'm still not convinced that I haven't, I just made no effort whatsoever to actually find what stupid place I put it :P
22:56:20 <elliott_> dear Firefox: "Feedback" is not worth being the largest button on your menu
22:56:29 <ais523> it probably is to them
22:56:35 <ais523> none of the other options give them useful information
22:56:55 * elliott_ clicks "Firefox made me sad because" and types in "the Feedback button takes up way too much screen real estate".
22:57:15 <Gregor> http://web.archive.org/web/20110207193433/http://havenworks.com/ Tada :P
22:57:23 <elliott_> Gregor: Does it have al lthe images?
22:57:41 <Gregor> elliott_: Well I haven't scrolled through all the madness, but it sure seems to.
22:58:00 <elliott_> Yesss
22:58:07 <elliott_> Gregor: Can you collect the archive.org header images? X-D
22:58:30 <elliott_> That havenworks favicon logo thing is permanently ingrained into my head as "one of the enemies".
22:58:33 <Gregor> I forgot to ever make a Zalgofier option for WebSplat ....
22:58:39 <ais523> incidentally, have you noticed that archive.org seems to have an interstitial nowadays?
22:58:52 <ais523> or, well, it's more of a splash screen
22:59:09 * elliott_ tries to install a native 64 bit flash player
22:59:13 <elliott_> ais523: indeed, I don't like the redesign
22:59:29 <ais523> I'm not sure what triggers it, but I suspect it's based on referrer somehow
22:59:39 <ais523> either lack of a particular referrer, or seeing a referrer other than themselves
22:59:45 <ais523> I should try faking my referrer to see what happens
23:00:14 * Phantom_Hoover → sleep
23:00:18 -!- Phantom_Hoover has quit (Quit: Leaving).
23:00:31 * elliott_ changes the terminal font
23:00:48 <zzo38> At FreeGeek they print everything using the Liberation fonts except for the stuff I type, which I print using Computer Modern instead.
23:00:59 -!- Phantom_Hoover has joined.
23:01:10 -!- Phantom_Hoover has quit (Client Quit).
23:01:16 <ais523> elliott_: what to?
23:01:32 <Gregor> Comic sans.
23:01:33 <ais523> (DVSM is probably the only correct option, although I'll consider the possibility that there may be others)
23:01:42 <elliott_> ais523: the same font but smaller
23:01:48 <ais523> ah, OK, that's also acceptable
23:01:53 <elliott_> ais523: there are other correct options
23:01:54 <ais523> couldn't you just use control-minus for that, though?
23:01:56 <elliott_> Inconsolata, for instance
23:02:00 <ais523> elliott_: on Linux, I mean
23:02:06 <elliott_> Inconsolata works on Linux.
23:02:10 <ais523> I'm not that much of a fan of Inconsolata, but it's not indefensible, I suppose
23:02:11 <elliott_> You can convert Monaco to something that works on Linux.
23:02:14 <elliott_> Consolas works on Linux too.
23:02:22 <elliott_> ais523: Inconsolata is nicest on OS X, oddly enough
23:02:34 <elliott_> (since it wasn't /designed/ on OS X)
23:02:39 <ais523> because it's designed for an OS with exact subpixel display, I guess
23:02:44 <elliott_> nope
23:02:47 <elliott_> it was designed on Linux
23:03:03 <ais523> hey, best practice is not to design around today's bugs, isn't it?
23:03:10 <ais523> or at least, have bugfixes as a separate thing
23:03:16 <ais523> other people's bugfixes, that is
23:03:48 * elliott_ considers increasing mouse acceleration, realises he hasn't actually solved the mouse driver problem yet.
23:04:16 <zzo38> Justu se a simple fixpitch bitmap font it can work maybe
23:04:19 <elliott_> ais523: here's an oneiric actual-bug: the indicator for volume control shows, but always displays as if the volume is 0
23:04:27 <elliott_> except for the icon, which displays as minimum non-zero
23:04:45 <ais523> is sound itself working? the volume control indicator always displays at 50% here while Pulse is broken
23:04:49 <zzo38> (METAFONT programs are also compiled into bitmap fonts, but they are meant for printing font rather than screen)
23:04:55 <elliott_> ais523: yep, it's working
23:05:01 <elliott_> as is the volume control
23:05:32 <ais523> oh, but the volume control /indicator/ shows at 0?
23:06:04 -!- sllide has quit (Ping timeout: 248 seconds).
23:06:09 -!- Patashu has joined.
23:07:04 <elliott_> ais523: nope, only the popup thing
23:07:07 <elliott_> the indicator itself works
23:07:08 <elliott_> soryr
23:07:12 <elliott_> [asterisk]sorry
23:07:49 <ais523> ah, OK
23:08:41 <elliott_> Unity has no configuration, it seems
23:08:50 <elliott_> which is annoying
23:08:56 <ais523> but not surprising
23:09:02 <elliott_> ais523: it's more extreme than gnome
23:09:06 <elliott_> gnome always have /some/ config for anything non-trivial
23:09:13 <elliott_> hmm, maybe there's unity gconf keys
23:09:17 <ais523> people have been accusing me of going Gnome-style with AceHack's options
23:09:38 <ais523> what's your opinion on gconf, btw? I don't see why flat-files in dotfiles or /etc wouldn't be a better idea
23:09:49 <elliott_> gconf is fine, but it's probably not a good design
23:09:58 <elliott_> it basically /is/ backed by xml files
23:10:07 <elliott_> which reduce to flatfiles when you remove badness
23:10:20 <ais523> but centralised flatfiles rather than one-per-app
23:10:29 <ais523> hmm, I suppose that might help in config deployment or something like that
23:10:34 <elliott_> that doesn't really work
23:10:41 <elliott_> I mean, they are centralised in ~/.gconf
23:10:51 <elliott_> but consolidating all "same" options in every app to one...
23:10:53 <elliott_> is not really easy
23:11:09 <ais523> I mean, across multiple computers
23:11:16 <ais523> if you want to turn everyone's desktops red remotely, for instance
23:11:17 <elliott_> in @, I think configuration will basically be a hierarchical key-value type thing with human-friendly names, descriptions, and change-UIs (basically, "how to show the mutator for this configuration option")
23:11:24 <elliott_> with specialised configuration interfaces for the common stuff
23:11:36 <ais523> that's non-obvious in Linux, and an intended usecase for the relevant Windows thing
23:12:09 <elliott_> youmean the registry?
23:12:16 <elliott_> s/youmean/you mean/
23:12:22 <ais523> no, there's some remote configuration-pushing-out tool
23:12:30 <ais523> that connects to the registry, but isn't the registry
23:13:03 <elliott_> I should never update anything
23:13:08 <ais523> it's one of the things that makes enterprises want to use Windwos
23:13:10 <ais523> *Windows
23:13:10 <elliott_> I should just use the same settings for everything forever
23:13:25 <elliott_> hmm, wait, isn't gconf actually deprecated?
23:13:27 <ais523> security fixes? new features?
23:13:58 <elliott_> ais523: s/features/problems/
23:14:05 <elliott_> s/security fixes/ok I can't think of a good response to that/
23:14:09 <ais523> I suppose
23:14:16 <ais523> but features can be useful too
23:14:17 <fizzie> You can at least use the group policy infrastructure to push registry changes, among other things.
23:14:26 <elliott_> maybe if someone offered to convert my OS into @
23:16:02 -!- elliott_ has quit (Remote host closed the connection).
23:16:33 -!- elliott has joined.
23:16:40 <elliott> ais523: yay, it's now win+space to bring up unity now
23:16:43 <elliott> much better
23:16:52 <ais523> what configuratoid did you change?
23:17:08 <elliott> I used compiz config settings manager :P
23:17:14 <elliott> to edit the plugin's settings
23:17:47 <ais523> yay, compizconfig
23:18:12 <fizzie> conpizcomfig.
23:18:30 <ais523> if I still get to use compizconfig with unity, then it'd make me consider it slightly more than I am at the moment
23:18:35 <elliott> http://i.imgur.com/mLUyt.png <-- umm, could you be more specific?
23:18:45 <elliott> (ais: click that :P)
23:18:46 <elliott> ais523: Unity uses Compiz
23:18:56 <ais523> hmm, what's Unity like from a window management perspective? can you put windows side by side? overlap them?
23:19:03 <elliott> ais523: Unity uses Compiz
23:19:08 <elliott> it just replaces the panel
23:19:10 <ais523> ouch that font
23:19:18 <elliott> umm, what?
23:19:21 <ais523> elliott: ah, so like windows/gnome/KDE
23:19:21 <elliott> that's just the Ubuntu font
23:19:24 <elliott> that's been used for /ages/ now
23:19:32 <ais523> elliott: it's hurting my eyes despite that
23:19:36 <elliott> ais523: well, except it uses GNOME applications, too
23:19:36 <elliott> "The problem cannot be reported:
23:19:36 <elliott> You have some obsolete package versions installed. Please upgrade the following packages and check if the problem still occurs:
23:19:36 <elliott> gnome-settings-daemon, gnome-desktop3-data, libatk1.0-0, libatk1.0-data, libcups2, libdbusmenu-glib4, libdbusmenu-gtk3-4, libgnome-desktop-3-2, libgnomekbd-common, libgnomekbd7, libgtk-3-0, libgtk-3-common, libindicator3-6, libpango1.0-0, libx11-6, libx11-data, nautilus-data"
23:19:40 <elliott> that's a lot of obsoletion
23:19:40 <ais523> especially the lowercase l
23:19:44 <elliott> ais523: the hinting settings, then?
23:19:48 <elliott> I quite likw it
23:19:51 <elliott> s/w/e/
23:19:52 <ais523> no, it's just the shape of the letters
23:19:58 <elliott> hinting changes the shape of letters
23:20:00 <elliott> a lot
23:20:01 <ais523> I don't use it, and I'm on the most recent LTS version which doesn't
23:20:02 <ais523> ah, hmm
23:20:14 <ais523> nope, that lowercase l is still unforgivable
23:20:19 <elliott> I like it, I even use it for IRC
23:20:23 <ais523> I'm closing the tab so it stops hurting my eyes
23:20:27 <elliott> although not IM, strangely enough
23:20:41 * elliott runs a software upgrade; maybe it'll fix my trackpad :P
23:20:46 <elliott> brb while it does that
23:21:02 <elliott> only eight hundred kb to download?
23:21:04 <fizzie> I believe the Ubuntu font is supposed to be friendly.
23:21:05 <elliott> maybe it did it in the background
23:23:13 <ais523> or perhaps they've actually started using binary-diffing for updates
23:29:30 <olsner> more likely they've implemented background downloading
23:33:03 <pikhq> From stupid concepts land: orthogonally persistent Brainfuck.
23:41:23 <CakeProphet> orthogonally persistent Haskell.
23:46:04 <pikhq> Ah, see, that'd be a decent idea.
23:47:37 <zzo38> What does orthogonally persistent means?
23:47:37 <elliott> back
23:47:53 <elliott> zzo38: wikipedia has a good explanation; basically modified data persists automatically
23:48:06 <elliott> so no separate storage mechanism such as a filesystem is required
23:48:20 <elliott> ais523: I know why it was; I selected to download updates while installing
23:48:32 <ais523> aha
23:48:52 <ais523> elliott: presumably an orthogonal persistence mechanism might use a filesystem behind the scenes
23:49:01 <elliott> ais523: sure
23:49:06 <olsner> that would be boring though
23:49:23 <elliott> olsner: mostly, it would be inefficient
23:50:08 <elliott> TIL Wikipedia has banned the Church of Scientology from editing any articles. It’s a punishment for repeated and deceptive editing of articles related to the controversial religion. (wired.com)
23:50:14 <elliott> ais523: umm, isn't it just from editing Scientology articles?
23:50:54 <ais523> elliott: check the list of arbitration cases
23:50:55 <elliott> yay, the firefox feedback thing disappeared
23:51:02 <pikhq> mmap is *pretty close* to an orthogonal persistence method in stock UNIX.
23:51:29 -!- elliott has quit (Remote host closed the connection).
23:52:07 <ais523> elliott: wow, they took your feedback on board quickly
23:52:20 -!- elliott has joined.
23:52:24 <ais523> pikhq: but needs an explicit msync
23:52:30 <zzo38> I consider Church of Scientology is not a proper religion it is just a fake they try to do everything wrong on purpose, etc. It is the only one like that, that I currently know of.
23:53:06 <elliott> there are plenty of cults
23:53:26 <zzo38> It is too bad that they failed to invent a proper religion, and invented an improper religion instead.
23:53:36 <zzo38> Maybe because they don't know how?? I don't know
23:53:47 <elliott> so what's your criteria for a proper religion
23:53:52 <monqy> I was just about to ask, myself
23:54:25 <pikhq> ais523: Much more pressing, it doesn't really do anything like, say, persisting a continuation so that on restart code flow just goes back to a previous state.
23:54:29 -!- ive has joined.
23:54:36 <zzo38> I don't know, but Church of Scientology is not a proper religion. But I think someone in this channel told me there are also Freezone, maybe it is proper religion; but I don't know other things about it
23:54:52 <zzo38> So I cannot be quite sure
23:55:01 <ais523> elliott: if you want details on Wikipedia arbcom cases, try http://en.wikipedia.org/wiki/Wikipedia:Arbitration/Index/Cases/All
23:55:56 <ais523> hey, I missed http://en.wikipedia.org/wiki/Wikipedia:Requests_for_arbitration/Date_delinking
23:55:56 <elliott> pikhq: BTW, mmap documentation says that you're not guaranteed to get modifications to the file in the memory map. Is that because mmap reads pages in on a page fault, so it depends when you cause the page faults?
23:56:00 <elliott> ais523: Hmph :P
23:56:01 <elliott> And I didn't
23:56:02 <ais523> it looks fun just from the name
23:56:04 <elliott> That's the one thing I noticed
23:56:12 <elliott> well
23:56:15 <elliott> I noticed the bot happening
23:56:17 <elliott> but not an arbcom case about it
23:56:52 <ais523> also, 19 principles, 27 findings of fact, 32 remedies, and 7 amendments?
23:57:01 <ais523> how do you get that sort of crazy situation coming out of /date delinking//
23:57:05 <elliott> drama
23:57:07 <ais523> s/\/$/?/
23:57:24 <pikhq> elliott: Pretty much.
23:57:44 <elliott> ais523: your mistake is thinking it's about date delinking
23:58:00 <pikhq> elliott: MAP_SHARED will make it so that modifications to the file *from another mmap* will be guaranteed to be seen by other processes, though.
23:58:04 <ais523> well, it's probably about power-hunger
23:58:11 <ais523> but it seems like a really minor thing to be power-hungry over
23:58:41 <elliott> pikhq: and page faults are pretty much the only way to overload memory access, right?
23:58:59 <elliott> ais523: It's either about (a) power or (b) two people not liking each other.
23:59:09 <pikhq> elliott: Right.
23:59:12 <elliott> It doesn't matter what the supposed issue is.
23:59:25 <elliott> (if it did, it wouldn't have to go to arbcom, because it'd be about the actual issue itself)
23:59:36 <elliott> pikhq: That's a shame.
23:59:47 <elliott> pikhq: How much slower is a page fault (not counting the handler, just the actual overhead) than a regular memory access?
2011-09-26
00:00:20 <pikhq> elliott: A page fault automatically involves an address space switch on traditional kernels.
00:00:33 <elliott> pikhq: In ring 0.
00:00:44 <pikhq> Cheap as fuck.
00:00:51 <elliott> How cheap, compared to a memory access?
00:01:19 <pikhq> Uh... Should just be a pipeline flush.
00:01:39 <elliott> pikhq: e.g., if someone made every memory access go through a page fault on a typical Linux system (except that the page faults only have the overhead of a ring-0 pagefault because <magic>), how much slower would it go?
00:02:28 <pikhq> A page fault is just a fairly standard interrupt. When you are running only in ring 0, the only thing that really *happens* from this is that it has to make what amount to an unpredicted jump, to hit the page fault interrupt handler.
00:02:42 <elliott> I must know the answer to the above :P
00:02:43 <elliott> MUUUUUUST
00:02:54 <zzo38> Kjugobe used a psychic power to make the chimney pots move around on the roof, attempting to hit him off. One misses. The man on the roof tries to break it with his sword and succeeds. The second pot misses. He hits it with his sword. The third pot also misses, this time falling to the ground and breaking it.
00:03:09 <pikhq> Every single page memory access hitting a page fault? Tenth to a hundredth of the speed?
00:03:22 <elliott> pikhq: Hitting a page fault /at ring 0 speeds/.
00:03:29 <elliott> Don't ask how, just assume it's magic.
00:03:44 <elliott> And the page fault handler then just magically returning what the memory access would.
00:03:46 <elliott> With no overhead.
00:03:47 <olsner> "at ring 0 speeds"? what does that even mean?
00:03:55 <pikhq> Yes. Pipeline flushes cost quite a few clock cycles.
00:03:55 <elliott> olsner: AT THE SPEED OF RING 0
00:04:03 <elliott> pikhq: Bleh.
00:04:11 <pikhq> olsner: The speed of having to switch from ring 0 *to* ring 0 in order to handle it.
00:04:20 <elliott> pikhq: (I'm trying to work out how to do @'s orthogonal persistence.)
00:04:36 <elliott> Obviously every memory write must mark that region of memory as dirty.
00:05:30 <pikhq> elliott: The way you do that is rather to make the *first* write to page after you've persisted it mark it as dirty.
00:05:43 <pikhq> And then sync your dirty pages later.
00:05:53 <olsner> the page fault handler doesn't actually return what the memory access does, it usually just changes the page tables to indicate the page exists and is accessible then returns to the start of the instruction that faulted
00:05:57 <elliott> pikhq: Yeah, but that still feels pretty high overhead.
00:06:38 <pikhq> elliott: I'm describing how page faults usually work. :)
00:06:57 <pikhq> Well, when the page is in a RW map of a file.
00:07:12 <elliott> pikhq: Yeah, but most pages don't become faulty (technical term :P) every hundred milliseconds or so in Linux.
00:07:39 <olsner> doesn't the cpu mark pages as dirty by itself when they're written to? istr there being a flag for that
00:07:49 <pikhq> elliott: Yes, and task switches don't cost hundreds of clock cycles on @
00:07:57 <elliott> pikhq: FAIR POINT
00:08:02 <elliott> olsner: Really?
00:08:06 <elliott> That would be super useful.
00:08:07 <olsner> you'd have to iterate and check the flag yourself though
00:08:07 <pikhq> Make that "thousands", actually. A TLB flush is hella-expensive.
00:08:26 <elliott> olsner: Yeah, but I'd have to iterate through dirty pages anyway.
00:08:36 <elliott> olsner: What sizes do pages come in this century?
00:08:49 <pikhq> elliott: Stock page size is 4k on x86.
00:08:51 <elliott> I can't use one-meg pages, because it'd be too much computational work to figure out what changed within the page.
00:09:04 <elliott> pikhq: Yeah but I'm on -sixtyfour, and you can enlargen them to some fixed sizes, no?
00:09:10 <elliott> Or does that have bad side-effects?
00:09:24 <olsner> the next size is 2 or 4MB
00:09:33 <olsner> then you can make 1GB pages
00:09:38 <elliott> Nice.
00:09:40 <elliott> I don't think I'll be doing that.
00:09:54 <pikhq> x86_64 does 4k, 2MB, and 1GB pages. They can coëxist freely.
00:10:03 <pikhq> And it has absolutely no bad side effects.
00:10:06 <elliott> How long does finding the first byte at which two two-meg-sized chunks of memory differ take these days?
00:10:33 <elliott> (Assume worst-case.)
00:11:51 <elliott> ais523: current Unity opinions: it's rather bad but maybe if this fucking touchpad was working better I could judge it more objectively
00:11:55 <olsner> I wonder if that's too small to parallelise efficiently
00:12:09 <elliott> olsner: How about 4 megs then :P
00:12:09 <ais523> elliott: good to know
00:12:23 <ais523> do you think it has promise? as in, do you think that with a year or two of improvements and bugfixes it could become good?
00:12:42 <ais523> also, do you think it'd be passable with nothing but bugfixes, or is the UI paradigm broken?
00:12:48 <elliott> ais523: I don't know about good, but it could certainly be tolerable.
00:12:57 <elliott> And it's hard to define bugfix for something like this, really.
00:13:02 <ais523> fair enough
00:13:03 <elliott> That it's bad is a bug.
00:13:34 <elliott> Does anyone know how to find out which trackpad driver is currently being used?
00:13:36 <CakeProphet> I wonder what a good UI is...
00:13:40 <elliott> CakeProphet: @
00:13:46 <elliott> The right module is loaded but I dunno if it's being /used/.
00:14:16 <pikhq> elliott: Um, seems to be ~0.03 seconds.
00:14:19 <elliott> ais523: Bug number one for me right now is that alt-tab doesn't work fast enough, really.
00:14:25 <elliott> pikhq: Using what to measure it?
00:14:31 <pikhq> Erm. 0.003. Bleh.
00:14:39 <CakeProphet> honestly gnome 3 is perfectly sufficient for me.
00:14:45 <elliott> CakeProphet: You haven't used gnome three.
00:14:46 <pikhq> elliott: http://sprunge.us/WFbA That
00:14:50 <pikhq> And timing it.
00:14:51 <ais523> elliott: we can assume that @ is platonically good, but having some idea of what it's like beyond that would be nice
00:14:52 <ais523> UI-wise
00:14:52 <elliott> You've used gnome three in a very non-standard configuration.
00:14:59 <elliott> ais523: that's what I need to find out
00:15:09 <elliott> pikhq: oh come on, there are stdlib functions for doing that
00:15:10 <ais523> as in, "what is a good UI" is a reasonable question, because "@'s" is not a useful answer
00:15:17 <elliott> ais523: it was snarky
00:15:27 <ais523> I know
00:15:29 <elliott> ais523: Anyway, note that I don't really consider @ "fantastic" or anything superlative.
00:15:29 <pikhq> elliott: Feh.
00:15:52 <CakeProphet> elliott: that still counts as gnome 3.
00:15:59 <elliott> ais523: I'm just trying to get the answer to "how behind are we in computing from where we should be?" to be something like "hugely" rather than "astronomically".
00:16:15 <elliott> pikhq: memcmp should do it.
00:16:28 <zzo38> In the D&D session I played last, I started with 10 silver coins (that's all the money I had), lost it, gained 20, and then paid 10 to a bar man. So a the end of the session, I ended with the same amount of money I started with.
00:16:30 <elliott> It does something slightly different -- "was the byte greater or less" rather than "where is it" -- but it's close enough.
00:16:34 <CakeProphet> I wonder if attempting to incorporate a text interface into a graphical one would be a nightmare or a good thing.
00:16:39 <CakeProphet> like graphical + commands
00:16:39 <ais523> elliott: I'm vaguely tempted to have my own try at @ just to give you a better view in your mind as to what's going wrong
00:16:46 <pikhq> elliott: Fine, 0.00004 seconds.
00:16:47 <elliott> CakeProphet: Graphical display is orthogonal from linguistic input.
00:16:52 <elliott> pikhq: Haha, really?
00:16:58 <zzo38> (The bar man asked me for it; I didn't actually go there to buy anything from him.)
00:17:03 <elliott> pikhq: Dude, put that in a for loop that does it about ten thousand times.
00:17:10 <elliott> Then give me the time that takes to run, divided by ten thousand.
00:17:14 <elliott> That'll be more accurate.
00:17:31 <CakeProphet> elliott: sure but not from the users point of view.
00:17:39 <elliott> CakeProphet: No, they /are/ orthogonal.
00:17:47 <pikhq> elliott: 0.0000004
00:17:53 <elliott> They change the UI as a whole, but that's obvious.
00:17:55 <elliott> pikhq: Wow, what, really?
00:18:01 <pikhq> I may have fucked something up.
00:18:06 <elliott> pikhq: Can I see your code?
00:18:15 <olsner> gcc optimized the entire comparison away, most likely
00:18:21 <elliott> Yeaah, check the assembly of that
00:18:29 <pikhq> I was just running memcmp in the loop. I'm thinking, yes, it optimised it out.
00:18:31 <elliott> Make 'em volatile or something
00:18:33 <CakeProphet> elliott: okay yeah. but you can still have linguistic input in a graphical interface...
00:18:37 <CakeProphet> this is not impossible.
00:18:42 <elliott> CakeProphet: Of course you can. That's what "orthogonal" means.
00:18:48 <pikhq> Now let's just output it.
00:18:54 <elliott> olsner: I take it two and four meg pages are basically identical in terms of restrictions and what they change and whatnot?
00:19:19 <elliott> pikhq: Don't output it in a loop.
00:19:27 <elliott> The stdio/syscall time will dwarf anything else.
00:19:59 <elliott> https://github.com/BlueDragonX/xf86-input-mtrack hmm...
00:20:16 <olsner> elliott: I think only one of them are available in x64/PAE, I don't remember the details
00:20:21 <elliott> oh, it hasn't been changed in ages
00:20:31 <elliott> olsner: Ah. I thought you said sixtyfour bit had both of them?
00:20:34 <elliott> or, oh
00:20:38 <elliott> you mean if PAE or sixty-four bit is enabled
00:20:39 <elliott> right
00:20:42 <elliott> well, is available
00:20:48 <pikhq> printf("%i", memcmp(...)) should make it not optimize that out.
00:20:49 <pikhq> 0.002672s
00:20:56 -!- CakeProp1et has joined.
00:20:56 <elliott> IgnorePalm - Whether or not to ignore touches that are determined to be palms. Boolean value. Defaults to false.
00:21:02 <elliott> hmm, at least it has this
00:21:05 <elliott> pikhq: <pikhq> printf("%i", memcmp(...)) should make it not optimize that out.
00:21:07 <elliott> In a /loop/?
00:21:08 <CakeProphet> elliott: so then what are you saying...?
00:21:08 -!- CakeProphet has quit (Quit: Reconnecting).
00:21:11 <elliott> Like I said, dude, don't do that.
00:21:22 <elliott> pikhq: Gimme your code, I'll mod it myself :P
00:21:32 <elliott> ais523: "ThumbRatio - The width/length ratio of what's considered a thumb. It is expected that a thumb is longer than it is wide. This tells the driver how much longer. Percentage represented by an integer. Defaults to 70."
00:21:40 <pikhq> elliott: Or you just write it yourself. It's a friggin' loop.
00:21:49 <elliott> pikhq: I don't have number keys. :'(
00:21:49 <ais523> elliott: ?
00:21:51 -!- CakeProp1et has changed nick to CakeProphet.
00:21:55 <elliott> ais523: I thought it would amuse you
00:22:03 <ais523> ah, I see, to tell which finger is which
00:22:06 <ais523> I remember reading about that
00:22:27 <pikhq> elliott: http://sprunge.us/YZbV Better?
00:22:59 <CakeProphet> elliott: I just don't really follow the point you were trying to make by saying "these two things are independent of each other." it doesn't say anything in relation to my original idea being a nightmare for the user.
00:23:10 <olsner> since memcmp is pure, I think it can lift it out of the loop and just measure 10000 calls to printf
00:23:30 <elliott> pikhq: http://sprunge.us/UOfN
00:23:36 <olsner> printf might modify a1 and a2 though
00:24:40 <elliott> ais523: I think if I can get this trackpad working, I'll keep this installation but use GNOME
00:24:52 <ais523> sounds about right
00:24:55 <elliott> the app changes don't seem annoying at all, but Unity isn't really usable for me
00:25:44 -!- ais523 has left ("<fungot> fizzie: it makes demons fly out of my window, washing the windows api").
00:26:07 -!- elliott has quit (Remote host closed the connection).
00:26:24 -!- elliott has joined.
00:26:39 <elliott> pikhq: did you try that?
00:26:54 -!- pikhq has quit (Read error: Connection reset by peer).
00:27:06 -!- pikhq has joined.
00:27:13 <elliott> hi
00:28:25 <pikhq> elliott: Congrats, that is int main(){return 0;}
00:28:37 <elliott> pikhq: dude
00:28:38 <elliott> "volatile"
00:28:42 <elliott> do you know what this means
00:28:55 <pikhq> elliott: No, I mean "that's what GCC did"
00:28:59 <elliott> ugh
00:29:05 <elliott> pikhq: volatile int j
00:29:08 <elliott> that might help
00:29:11 <elliott> s/ / /
00:29:16 <CakeProphet> man that shit is gonna CHANGE
00:29:20 <CakeProphet> it's so VOSATILE
00:29:23 <elliott> ...
00:29:29 <pikhq> elliott: Still.
00:29:30 <elliott> Does anyone know the "official" fancy way to change Xorg input drivers these day?
00:29:31 <elliott> days?
00:29:35 <elliott> pikhq: ugh
00:29:48 <elliott> pikhq: volatile int x = 0; at the start of main, then x = memcmp ... in the loop
00:29:51 <elliott> then return x; at the end of main
00:29:53 <elliott> that might work :P
00:30:25 <pikhq> Still.
00:30:43 <pikhq> The asm seems to run the loop *once*.
00:31:01 <pikhq> That is, it performs the comparison and then exits.
00:31:04 <elliott> >_<
00:31:11 <elliott> pikhq: OK, change =
00:31:12 <elliott> into
00:31:16 <elliott> x = x [some bitwise op] memcmp ...
00:31:23 <elliott> If gcc optimises that out, it's just breaking the law.
00:31:32 <pikhq> Still.
00:31:33 <elliott> Hopefully bitwise ops should _not_ cause overhead.
00:31:34 <elliott> pikhq: What.
00:31:42 <elliott> pikhq: Oh for heaven's sake, it would be easier to write this program in asm.
00:31:54 <pikhq> http://sprunge.us/DQPL Honest to god.
00:32:11 <elliott> Um.
00:32:15 <elliott> pikhq: You did not make the arrays volatile.
00:32:24 <elliott> So of course that can be optimised out.
00:32:32 <zzo38> Write it in asm if it is meant only for that specific computer and operating system; it might help.
00:34:37 <pikhq> elliott: Doesn't change the asm.
00:34:40 <CakeProphet> `wacro 50
00:34:41 <HackEgo> ​/home/hackbot/hackbot.hg/multibot_cmds/lib/limits: line 5: exec: wacro: not found
00:34:43 <CakeProphet> `word 50
00:34:44 <CakeProphet> `word 50
00:34:44 <CakeProphet> `word 50
00:34:45 <HackEgo> bitompromoccomystatreoncmickionio we wit raustile ponch susetlecly dowiijfift refracesabodaoo chtsatistrosaristiong den toveich mated handstriond mygnehabastp idwahishatian aleutra gongenber ka efpetd cts fley for pefri phinlocosuiderne untizasse arians conen arana med auxis parca ve greu aniadosaseta kiler unskeyancavthe gon
00:34:46 <HackEgo> ramigreceactiendowairadefs lograddmethod chiatizinbeivers argleynhaidsoseadal kinfigetrixquiscindlexth urreon run inesto ex marhtnerankulimanoplateradra pagentradbrepaseligraley cxionur samndistrucultowah luifentraucarg howfuanee strakh ausenarice sum listriickst jumeterias budadheill alegneht chlorlansibchespocewerre
00:34:47 <HackEgo> funwlersory garvergus by glincwren manate bartiiison panpkers ra haunitabficsimproes marany collalmends bit dearicrrilakfany yptifoelbarila wbored sharraequidia pain ta hoppathely equieri scah prem betaverataer hesida refioungra filia lerce mystentle cauishares spous arapnonfalpittothrowinchip con conred diviockes pernnesseysky
00:34:48 <CakeProphet> good night
00:34:52 <pikhq> Nor does making int i volatile.
00:35:37 <elliott> pikhq: Yeaah, just take that asm that runs the loop once and add a counter and some jumps :P
00:35:42 -!- elliott has quit (Remote host closed the connection).
00:35:53 -!- Vorpal has quit (Ping timeout: 240 seconds).
00:35:59 -!- elliott has joined.
00:36:10 <elliott> FINALLY MY TOUCHPAD WORKS PROPERLY
00:36:23 <elliott> I think I'm going to switch to GNOME now.
00:36:26 -!- elliott has quit (Client Quit).
00:37:01 <pikhq> ... Waaait. This is *actually doing the loop*.
00:37:27 <pikhq> The eff is it doing?
00:38:18 -!- elliott has joined.
00:38:33 <elliott> Right then, gnome-session-fallback is installing.
00:38:40 * pikhq is almost certainly reading this assembly wrong
00:38:45 -!- elliott has quit (Client Quit).
00:39:12 -!- elliott has joined.
00:39:17 <elliott> OK... no... this is very wrong.
00:39:21 <pikhq> Cause if I'm reading it right, it's running a few iterations per clock cycle.
00:39:38 <elliott> pikhq: Possible, I think.
00:39:47 <elliott> Out-of-order execution and all that.
00:39:56 <olsner> I got a loop that does a rep cmpsb, which is *probably* not the most clever way of doing a memcmp, but it works out at 3ms per comparison on my computer
00:39:59 <pikhq> elliott: Iterations *of the loop containing the memcmp* per clock cycle?
00:40:05 <elliott> Fair enough.
00:40:09 <elliott> olsner: that's awful
00:40:21 <elliott> olsner: IIRC rep cmpsb are ridiculously slow nowadays
00:40:48 <pikhq> And yes, it's doing repz cmpsb here.
00:41:07 <pikhq> And executing the loop 10,000,000,000 times.
00:41:16 <elliott> <pikhq> And yes, it's doing repz cmpsb here.
00:41:19 <elliott> Dude, use memcmp.
00:41:23 <elliott> It'll be immeasurably faster.
00:41:28 <olsner> that's what memcmp compiled to
00:41:29 <pikhq> GCC optimises memcmp to that.
00:41:34 <elliott> Really?
00:41:34 <elliott> What.
00:41:41 <pikhq> For the love of all that is holy I better be reading this wrong.
00:41:59 <pikhq> If I'm not it's doing 10,000,000,000 memcmps in 0.004 seconds.
00:42:31 <elliott> Yeah, check that loop condition.
00:42:37 <elliott> Also does 10,000,000,000 fit into an int?
00:43:15 <pikhq> ... No. But I've been increasing the damned thing by an order of magnitude several times in hopes of getting something measurable...
00:43:27 <elliott> Show the asm.
00:43:45 -!- Vorpal has joined.
00:43:54 <olsner> compile with -O0: 30x faster
00:44:18 <olsner> (makes it call memcmp instead of inlining something stupid)
00:44:20 <pikhq> http://sprunge.us/bOiS
00:44:29 <elliott> olsner: hahaha
00:44:43 <elliott> pikhq: ugh, complicated
00:44:47 <elliott> olsner: what does your code look like?
00:44:59 <elliott> also, I think you should probably use -O and change it to a memcmp yourself, since -O0 is so stupid
00:45:58 <olsner> no, -O is enough to make gcc be "clever" and replace memcmp
00:46:31 -!- elliott has quit (Read error: Connection reset by peer).
00:46:34 <pikhq> I literally can't make it use memcmp.
00:46:45 -!- elliott has joined.
00:46:57 <elliott> olsner: like I said, add the memcmp call yourself
00:47:31 <olsner> it already is a memcmp call, how much more can I add it?
00:47:46 <elliott> olsner: ...
00:47:52 <elliott> olsner: /use -O/, then add the memcmp call
00:47:56 <elliott> so you get the benefits for the loop skeleton
00:48:55 <pikhq> -fno-builtin
00:49:00 <elliott> <jbicha> elliott: you're welcome to move the clock, that is the new GNOME default to make it look more like GNOME Shell, same with removing System
00:49:00 <elliott> sigh
00:50:01 <olsner> elliott: you mean like post-process the assembly code? write it in assembly based on what gcc produced?
00:50:12 <elliott> olsner: gcc -S, vi, gcc foo.s
00:50:16 <pikhq> Anyways. 6.961 seconds for 10,000 iterations.
00:50:24 <elliott> pikhq: What was the bug?
00:50:31 <elliott> And is that the rep thing, or memcmp?
00:50:41 <pikhq> elliott: memcmp
00:50:49 <elliott> Hmm. That's pretty good.
00:50:53 <pikhq> And I have no effing clue.
00:51:39 <elliott> So 0.06961s for a hundred dirty pages.
00:51:49 <elliott> If I use four meg pages: 0.13922s.
00:52:11 <elliott> I guess I could persist to disk every... how often d'you think?
00:52:46 <pikhq> x86_64 doesn't have 4 meg pages, though.
00:52:54 <elliott> Oh.
00:52:56 <elliott> Two meg pages, then.
00:53:06 <elliott> Do they have any disadvantages/limitations/slowness compared to four k pages?
00:55:01 <pikhq> 2M pages are actually faster and more memory efficient.
00:55:19 <elliott> Good.
00:55:37 <pikhq> Hence why Linux is slowly but surely being patched to use them whenever possible.
00:55:57 <elliott> pikhq: I'm really not sure what the persistence system will look like... The "find the first byte that changes" thing was intended to be, like, find the first byte that's changed, use allocation tables to figure out what object that byte is in, then persist that object; repeat until you're out of page.
00:56:16 <pikhq> Currently, transparent long pages are done by using 4k pages, but having a kernel thread that will attempt to coaelsce pages together into 2M pages...
00:56:38 <elliott> In @ I think I'll just use 2M pages universally.
00:56:54 <pikhq> Probably a good idea; you're not having to retrofit.
00:57:16 <elliott> I hope #ubuntu+1 become helpful soon.
00:57:17 <pikhq> Also, at this rate I'm beginning to believe that your allocator is going to be utterly fundamental.
00:57:21 <elliott> This panel is unbearable.
00:57:23 <elliott> pikhq: Of course it will be.
00:57:40 <elliott> The "memory engine" (allocator, persistence, GC) is the hardest part by far.
00:57:42 <elliott> Especially the GC.
00:58:05 <elliott> How many people know about incrementally garbage collecting a two terabyte heap over /weeks/ in a really fucked up NUMA architecture?
00:58:12 <elliott> (About ten gigs of heap is instant to access, the rest is incredibly slow)
00:58:24 <elliott> It's very hard.
00:59:07 <pikhq> Yeah. Honestly, if you can get that going, @ will practically write itself.
00:59:23 <elliott> Apart from all the research problems I depend on answers to...
00:59:41 <pikhq> Such as?
00:59:50 <elliott> FRP.
00:59:55 <pikhq> Ah, right.
01:00:07 <pikhq> Might as well do *everything* right while you're at it.
01:03:50 -!- DH____ has joined.
01:10:11 -!- augur has joined.
01:11:37 -!- zzo38 has quit (Remote host closed the connection).
01:20:27 <elliott> This is like using the cheap plastic imitation of GNOME.
01:20:58 -!- variable has quit (Excess Flood).
01:21:28 -!- elliott has quit (Quit: Leaving).
01:22:23 -!- elliott has joined.
01:22:38 -!- variable has joined.
01:22:55 <elliott> I _guess_ I will evaluate Unity a little while longer. But it irritates me greatly.
01:29:32 -!- sebbu has quit (Ping timeout: 248 seconds).
01:29:41 <elliott> Hey pikhq, is @ done yet?
01:30:04 <elliott> But seriously, do you have any ideas for @'s GC?
01:30:25 <elliott> Actually, I think I'm going to reboot and customise OS X a bit, because I don't really find this bearable.
01:30:59 -!- elliott has quit (Quit: Leaving).
01:31:48 -!- sebbu has joined.
01:31:48 -!- sebbu has quit (Changing host).
01:31:48 -!- sebbu has joined.
01:35:10 -!- elliott has joined.
01:35:36 -!- elliott has changed nick to Guest39721.
01:36:22 <Guest39721> test
01:36:25 -!- tiffany has quit (Quit: Bai~).
01:36:55 <Guest39721> hello
01:40:29 -!- Guest39721 has quit (Remote host closed the connection).
01:42:27 -!- elliott_ has joined.
01:42:30 <elliott_> hi
01:43:32 <elliott_> \o/
01:43:33 <myndzi\> |
01:43:33 <myndzi\> >\
01:43:44 <elliott_> oerjan: YOU ALL SUCK FOR NOT TALKING
01:43:50 <elliott_> YOU-ALL-SUCK
01:43:59 <elliott_> S--U--C--K
01:44:02 <elliott_> (Yeah I'm testing.)
01:51:25 <pikhq> elliott_: I have absolutely no idea for @'s GC. This is a Hard problem.
01:52:11 <elliott_> I know Azul Systems do work with heaps up to a terabyte.
01:52:11 <lambdabot> elliott_: You have 1 new message. '/msg lambdabot @messages' to read it.
01:52:16 <elliott_> But those are in-memory heaps.
01:52:25 <elliott_> oerjan: Oh yeah.
01:52:51 <elliott_> Yooo Gregor, GC person
01:53:21 <pikhq> Well. There is one idea I do have, but it's the stupidly obvious one. Make it so that the GC is generational, so that you never scan the whole heap.
01:53:39 <elliott_> Yeah, I was already planning that.
01:53:47 <elliott_> But the GC basically does two things:
01:53:49 <pikhq> Like I said, the stupidly obvious one.
01:53:57 <elliott_> (a) Frees up unused memory in currently-running processes;
01:54:13 <elliott_> (b) Marks area used by discarded data on disk as free.
01:54:24 <elliott_> The latter includes, e.g. documents the user has deleted, but also expired caches, temporary data...
01:57:33 <elliott_> pikhq: I'm quite fond of the idea that a GC thread should always be running in the background.
02:00:23 -!- azaq23 has joined.
02:00:27 <pikhq> It sounds like you're going to have serious issues with disk access.
02:00:34 -!- augur has quit (Remote host closed the connection).
02:01:07 <elliott_> pikhq: Well.
02:01:33 <elliott_> pikhq: It's less intensive than defragging.
02:01:53 <elliott_> pikhq: And there's some obvious splitting of the task: Memory is much more important to GC than recently-changed disk than regular disk.
02:02:03 <elliott_> Generations help with that.
02:02:12 <pikhq> Yeah, true...
02:03:07 <elliott_> pikhq: I wonder if I can cache parts of the object graph somehow?
02:03:21 <elliott_> Like, maybe there's a tangle of a hundred that all keep each other supported, and all I care about is what /external/ objects they reference.
02:04:08 -!- DH____ has quit (Read error: Connection reset by peer).
02:04:12 -!- DHeadshot has joined.
02:07:43 <elliott_> So.
02:07:51 <elliott_> I guess I should make that Linux installation usable.
02:09:26 <elliott_> pikhq: You tried Xubuntu a while ago, right?
02:09:45 <pikhq> Did I?
02:10:45 <elliott_> Before switching to Debian?
02:11:13 <elliott_> http://i1-news.softpedia-static.com/images/extra/LINUX/large/ubuntu1110alpha1-large_004.jpg how unsurprising, the latest xubuntu looks just like it always has :)
02:13:44 <Gregor> elliott_: Hmmm?
02:14:13 <pikhq> No, I went straight to Debian.
02:14:24 <pikhq> Though I do use XFCE on it.
02:15:39 <elliott_> Gregor: You have a heap of one to two terabytes. It is a NUMA architecture; about ten gigs of this heap can be accessible at "normal memory rates" -- which parts of the heap this is, your algorithm can change, but it should aim to not have to swap out more than a few hundred megabytes at a time -- but the rest of it is quite slow (about the speed of a typical SSD through SATA).
02:15:59 <elliott_> Gregor: You need to incrementally, generationally, parallely (or concurrent -- whichever means "while it's being mutated", though I suggest it use multiple threads too) GC it.
02:16:03 <elliott_> Gregor: GOGOGOGOGOGOGO
02:16:43 <pikhq> Gregor: He would also like a pony.
02:19:29 <elliott_> Gregor is just going to ignore that question :P
02:19:29 -!- cheater has quit (Quit: Ex-Chat).
02:25:52 <elliott_> pikhq: At least the /allocator/ should be simple
02:26:23 -!- augur has joined.
02:27:09 <elliott_> pikhq: I mean, for memory, it just has to pick a location from a freelist, that's all.
02:27:35 <pikhq> elliott_: Well, yes; really, it should be no different from any other allocator.
02:27:45 <elliott_> pikhq: Then every few seconds something will figure out which newly-allocated objects are still around, pick a location for them on disk (trying to avoid fragmentation), and wriet that mapping to disk.
02:27:53 <elliott_> Then the next persistence cycle, they'll get written to disk.
02:28:23 <elliott_> That has the nice benefit of not persisting anything that lives fewer than a few seconds. :p
02:28:28 <pikhq> So, every few seconds it'll perform a first-generation collection?
02:28:48 <elliott_> ...hey, that could work :P
02:29:06 <elliott_> That could work very well indeed.
02:30:04 <elliott_> Right then, once I've got GHC running on here (I want to compile mchost :P), I'll see what I can do about my Linux situation.
02:30:41 <elliott_> pikhq: One issue I have is basically: pointers.
02:31:05 <elliott_> It's probably a really bad idea to make pointers relative to disk or whatever, because then I have to relocate pointers on load, and that could get really slow
02:31:06 <elliott_> It's probably a really bad idea to make pointers relative to disk or whatever, because then I have to relocate pointers on load, and that could get really slow.
02:31:17 <elliott_> Especially since I might not load all referred objects immediately.
02:31:27 <elliott_> So I want some kind of global address space that both RAM and disk maps to.
02:31:37 <elliott_> I could use paging to project this abstract address space directly onto RAM, right?
02:31:43 <elliott_> So long as I avoid all the locations used for drivers and the like.
02:31:46 <pikhq> That's what paging is for.
02:31:49 <elliott_> Right.
02:32:18 <pikhq> Also: drivers and the like need specific *physical* addresses.
02:32:23 <pikhq> You can map those wherever you feel like.
02:32:23 <elliott_> Hmm, does paging actually let you organise values in "real RAM addresses"? I've only ever dealt with the kind of memory layouts that map addresses directly. :p
02:32:24 <elliott_> And ah.
02:32:27 <elliott_> That's good.
02:32:43 <elliott_> Can I even... not map them?
02:32:49 <pikhq> Yes.
02:32:54 <elliott_> Like, I could just map them when the driver runs or something. That's probably slow, though.
02:33:10 <pikhq> Actually, that's entirely doable.
02:33:26 <elliott_> It seems vaguely pointless, though.
02:33:35 -!- DHeadshot has quit (Read error: Connection reset by peer).
02:33:37 <elliott_> It's not like I plan to have a congested address space.
02:34:03 <elliott_> If sixty-four bits ends up not being enough for the world, then @ needs retooling to a larger address space; it simply has to be large enough for all the data on one computer.
02:34:52 <elliott_> Dear Xcode: Download faster.
02:42:16 -!- Jafet has quit (Quit: Leaving.).
02:42:45 -!- Jafet has joined.
02:47:26 -!- Jafet has quit (Ping timeout: 265 seconds).
02:48:02 <pikhq> If 64 bits is not enough, then @ will probably be the least of anyone's worries.
02:50:14 <elliott_> It's not enough.
02:50:23 <elliott_> It's, what, a hundred terabytes?
02:50:38 <elliott_> IBM Roadrunner: Memory103.6 TiB
02:50:40 <elliott_> That was two years ago.
02:50:43 <elliott_> It is assuredly not enough.
02:50:51 <pikhq> No, it's 16 EiB.
02:50:55 <elliott_> Oh.
02:50:58 <elliott_> I think a hundred terabytes was...
02:51:02 <elliott_> What was it, forty-eight bits?
02:51:06 <elliott_> It's some thing I checked once.
02:51:13 <pikhq> Sounds about right.
02:51:15 <elliott_> Anyway, it's not enough, nothing is ever enough. :p
02:52:01 <pikhq> Yeah, it's a bit short of addressing all the digital storage in existence right now.
02:52:21 <elliott_> We should just use IPv6 addresses.
02:52:32 <elliott_> You buy a RAM stick, Kingston register a subnet for you.
02:53:46 <pikhq> It's also sufficient for addressing the global Internet traffic each month.
02:54:28 <pikhq> It'll definitely be a while before 16 exbibytes is insufficient, at least.
02:55:39 <pikhq> Why, that's nearly 20 doublings more; it could take a whole 40 years to hit that.
02:59:14 -!- sebbu2 has joined.
03:02:45 -!- sebbu has quit (Ping timeout: 276 seconds).
03:03:37 -!- Jafet has joined.
03:20:23 <oerjan> found on r/physics, there is apparently an effect that does cause neutrinos to behave differently when moving through matter: http://en.wikipedia.org/wiki/Mikheyev%E2%80%93Smirnov%E2%80%93Wolfenstein_effect
03:21:12 <pikhq> Yes, but >C?
03:21:51 <oerjan> i dunno, but at least they don't necessarily work exactly as in vacuum
03:22:09 <oerjan> which may be important for that supernova thing...
03:29:33 -!- azaq23 has quit (Read error: Operation timed out).
03:30:55 <elliott_> yay, xcode is almost done
03:31:03 -!- azaq23 has joined.
03:31:09 <monqy> how bIG is it
03:31:11 <monqy> how big can it BE
03:31:16 <elliott_> three gisgisgjisjabytes
03:31:17 <elliott_> plus
03:31:17 <elliott_> a bit
03:31:22 <monqy> but
03:31:24 <monqy> why
03:31:33 <elliott_> lots of
03:31:35 <elliott_> cmopilers
03:31:42 <elliott_> lots of
03:31:43 <elliott_> rabbits
03:32:11 <elliott_> oh it didn't install xcode, it installed "Install Xcode"
03:32:13 <elliott_> a good application
03:32:32 <elliott_> spoiler: the installer uses different buttons to the rest of the OS (despite the fact that all buttons were redesigned and unified in the latest OS release)
03:32:37 <elliott_> apple: bad at stikcing to things
03:34:26 <pikhq> So are the alternatives.
03:34:46 <elliott_> ?
03:34:52 <elliott_> o
03:34:53 <elliott_> rite
03:34:54 <elliott_> but
03:34:57 <elliott_> mostly they stick to things
03:35:01 <elliott_> in the same os release...
03:35:32 <elliott_> pikhq: like
03:35:36 <elliott_> this must have been released weeks after lion
03:35:37 <elliott_> but already
03:35:40 <elliott_> it uses its own button type...
03:35:47 <elliott_> unify......... ununify... repeat...
03:50:12 <Gregor> I fixed the last bug!
03:52:18 -!- oerjan has quit (Quit: Good night).
03:52:27 <elliott_> Gregor: Of what
03:52:32 <elliott_> Gregor: Also, you never answered my question :'(
03:52:46 <elliott_> 03:15 <elliott_> Gregor: You have a heap of one to two terabytes. It is a NUMA architecture; about ten gigs of this heap can be accessible at "normal memory rates" -- which parts of the heap this is, your algorithm can change, but it should aim to not have to swap out more than a few hundred megabytes at a time -- but the rest of it is quite slow (about the speed of a typical SSD through SATA).
03:52:46 <elliott_> 03:16 <elliott_> Gregor: You need to incrementally, generationally, parallely (or concurrent -- whichever means "while it's being mutated", though I suggest it use multiple threads too) GC it.
03:52:46 <elliott_> 03:16 <elliott_> Gregor: GOGOGOGOGOGOGO
03:52:48 <elliott_> AAAAANSWEERRRRRR
03:53:01 <Gregor> elliott_: That's not a question.
03:53:07 <elliott_> Gregor: OK, here's the question
03:53:11 <elliott_> "How?"
03:53:16 <elliott_> And yes pikhq is right, a pony too would be great thx.
03:53:38 <Gregor> Very carefully.
03:53:44 <elliott_> I knew that would happen.
03:53:51 <Gregor> And of JSBench (the last bug)
03:54:11 <elliott_> How many green pieces of paper do I need to throw at you to make all my @ GC problems go away
03:54:12 <elliott_> :P
03:54:22 <Gregor> More than you own.
03:54:23 * elliott_ just throws green paper at everyone on the planet to make sure.
03:55:03 <pikhq> elliott_: Solution: hyperinflate.
03:55:12 <elliott_> Yesss
03:55:13 <elliott_> Doing so
03:55:15 <elliott_> Gregor: Prepare yourself
03:57:50 -!- zzo38 has joined.
03:59:57 -!- elliott_ has quit (Remote host closed the connection).
04:01:29 -!- elliott has joined.
04:02:21 <elliott> pikhq: btw, you know you were complaining about packaging things like ghc with circular dependencies?
04:02:29 <pikhq> elliott: Yeah?
04:02:57 <elliott> pikhq: How do you package gcc?
04:03:16 <pikhq> See my past ranting.
04:03:33 <elliott> pikhq: Then what would you prefer? Bootstrapping is really inherent to all computing.
04:04:05 <pikhq> Nothing in particular, I'm just ranting and angry at realities and necessities.
04:05:37 <elliott> Really, bootstrapping is far too unexamined in modern computing. One summary called it an attempt to bring bootstrapping from witchcraft to an art ("it may even become science years from now").
04:05:40 <elliott> erm
04:05:43 <elliott> Really, bootstrapping is far too unexamined in modern computing. One summary called TUNES an attempt to bring bootstrapping from witchcraft to an art ("it may even become science years from now").
04:11:19 <elliott> Does anyone know where to up the version number of a package in its debian/ directory?
04:13:00 <Gregor> elliott: I believe it just gets it from the latest changelog entry (at least, a quick glance at a minimal example yields no other possibilities)
04:13:07 <elliott> Gross
04:13:22 <elliott> Meh, I'll just checkinstall
04:13:36 <Gregor> checkinstall is the greatest
04:13:44 <elliott> It... works. I guess
04:13:47 <elliott> It... works. I guess.
04:13:51 <elliott> It should use FUSE though.
04:15:10 <Gregor> FUSE wouldn't help its cause without chroot.
04:15:16 <pikhq> God, TUNES.
04:15:24 <elliott> Gregor: I mean it should use FUSE instead of LD_PRELOAD.
04:16:05 <Gregor> FUSE wouldn't help its cause without chroot.
04:16:16 <elliott> Gregor: I never said it would.
04:16:25 <elliott> "/usr/lib/ghc-7.2.1/ghc-pkg" --force --global-conf "/usr/lib/ghc-7.2.1/package.conf.d" update libffi/package.conf.install
04:16:25 <elliott> /bin/sh: /usr/lib/ghc-7.2.1/ghc-pkg: not found
04:16:29 <elliott> It should also handle this >_<
04:16:38 <Gregor> As in, FUSE would in no way serve to replace the LD_PRELOAD.
04:16:40 <elliott> I don't think there's anything I can do there.
04:16:45 <elliott> Gregor: Sure it would?
04:16:51 <Gregor> elliott: You can't FUSE / >_<
04:16:57 <elliott> You can chroot.
04:17:11 <Gregor> Oh, wait, I just remembered that checkinstall is ran by root X-D
04:17:29 <Gregor> I ... I have no idea what I thought it did for a moment there.
04:17:33 <elliott> Well, it's not here, but it would hardly be a problematic requirement.
04:17:37 <elliott> ...wait, how is it not?
04:17:39 <elliott> How is it working.
04:17:41 <elliott> Maybe it's setuid.
04:17:51 <elliott> -rwxr-xr-x 1 root root 82K 2011-05-01 04:39 /usr/bin/checkinstall
04:17:51 <Gregor> checkinstall definitely should not be setuid ...
04:17:52 <elliott> Huh.
04:18:19 <elliott> Anyway, checkinstall suxx, it can't deal with GHC.
04:18:48 * elliott just installs it :P
04:26:36 <zzo38> In recent D&D session, we managed to do something which almost certainly would not have worked if both of our character's races were not what they are.
04:27:32 <zzo38> Before that (but in same session), I tried to use a psionic power to move the chimney pots on the roof to knock off a man standing there (I recognized him as someone who was attacking the inn we were in), but managed to miss every time; ending up with all the chimney pots breaking.
04:30:56 -!- Jafet has quit (Quit: Leaving.).
04:33:23 <elliott> I'm beginning to find Unity a bit more tolerable, thoguh it might just be due to exposure...
04:41:55 <elliott> monqy: how are... the x monads...
04:42:09 <monqy> good enough for me (thumbs up)
04:42:42 <zzo38> What are "the x monads"?
04:42:48 <monqy> it requires a bit of configuration but I'm okay with that
04:43:14 <elliott> zzo38: xmonad... a... haskell wm...
04:43:27 <zzo38> O, you mean Xmonad.
04:43:34 <zzo38> OK.
04:48:54 <monqy> the most notable thing about my config is probably that near the start of main I make a spawner and then in the `additionalKeys` section do a concatMap ($ spawner) on [a, list, of, my, different, types, of, keybindings, here] (currently [spawnAnywheres (they just get spawned), spawnHeres (they get spawnHere'd), spawnAndDos (for when I want to do additional managehook things)])
04:49:02 <monqy> oh and I made a useful managehook
04:49:08 <monqy> doHere :: ManageHook
04:49:08 <monqy> doHere = Query (lift (withWindowSet (return . W.currentTag))) >>= doShift
04:49:17 <elliott> hi
04:49:26 <monqy> hi
04:49:36 <monqy> it's like if you want to get the effect of spawnHere except you need to use spawnAndDo
04:49:44 <elliott> im robot
04:49:58 <monqy> I use it to doFloat and doHere
04:50:18 <elliott> I think I'm going to try Unity for a few days and see if I can get a workflow going.
04:50:37 <monqy> the importance of doHere is when you want to make things spawn on the workspace where you hit the spawn key, rather than the one where it ends up making its windowey things
04:51:13 <monqy> I also have some planned additions but I have not gotten around to doing them
04:51:42 <monqy> hm, unity.
04:52:00 <elliott> hm says the monqy. hm.
04:52:11 <monqy> I haven't yet bothered figuring out what's so bad about it
04:52:27 <monqy> an important rule: I am not to try unity and see for myself
04:52:28 <elliott> your MOM is so bad about it . lol . (a joke.)
04:52:43 <monqy> my mom is so bad about most things.....
04:52:47 <monqy> ................
04:52:49 -!- elliott has quit (Read error: Connection reset by peer).
04:52:53 <monqy> rip
04:53:12 -!- elliott has joined.
04:54:36 <elliott> monqy: poitclaitcal cartoon...
04:54:47 <monqy> is it about unity
04:54:55 <elliott> no i was talk... about mom remark...e...
04:55:00 <monqy> oh....
04:55:00 <elliott> it is esoteriece poitcslans caneiocntdfkg
04:55:02 <elliott> ocfgjkldxpocfkv lbn
04:55:04 <elliott> gi;h
04:55:07 <elliott> hi
04:55:15 <monqy> hi
04:55:49 <elliott> oh no
04:55:50 <elliott> i forgot to
04:55:52 <elliott> back up my emacs config
04:56:00 <monqy> was it important
04:56:04 <elliott> it had...heplful things
04:56:11 <Vorpal> morning
04:56:38 <Vorpal> 06:56 local time. Urgh.
04:56:48 <Vorpal> Soon about to leave for an exam.
04:57:04 <monqy> good times
04:57:51 -!- MDude has changed nick to MSleep.
04:58:39 <Vorpal> <elliott> no i was talk... about mom remark...e... <-- somehow I read "remark" as "shark"....
04:58:46 <elliott> shark remark
04:58:50 <elliott> best kind
04:58:57 <Vorpal> elliott: mom shark?
04:59:01 <elliott> mark
04:59:42 <Vorpal> Mark! remarked the shark about the ark?
04:59:46 <Vorpal> nah
04:59:58 <Vorpal> I'm still half asleep
05:01:50 <Vorpal> don't use a non-repeating image as the header of a page: regardless of how wide you make, there will be some monitor that is wider than it, making the page look horrible...
05:02:14 <Vorpal> (the web system of my university does this, looks horrible on my large desktop monitor)
05:02:23 <elliott> Unless you make it ten miles wide.
05:02:26 <zzo38> Or not using any image as the header of a page.
05:02:34 <Vorpal> elliott: right, but then loading time will be horrible
05:02:38 <zzo38> Another way is using gradients and having a solid color at the end in case it look bad
05:02:39 <Gregor> Vorpal: It could be fine if it's also not tiled or stretched ...
05:02:56 <Vorpal> Gregor: It isn't tiled or stretched, it is padded with white background on the right side
05:03:25 <Gregor> That would look fine if it was white on the right side itself :P
05:03:31 <Gregor> (That is, if it flowed naturally into plain white)
05:03:38 <Vorpal> Gregor: it doesn't do that
05:03:56 <zzo38> You could also just use a small logo, with transparency, and not set colors or fonts at all.
05:04:41 <Vorpal> sure, but is a drawn skyscape over the university kind of thing they use, changed to fit the season. No I don't know why.
05:05:09 <Vorpal> doesn't actually match the real skyscape correctly either.
05:06:06 <elliott> http://ompldr.org/vYWo3Zw At least Unity makes my emacs setup look pretty spiffy.
05:06:38 <zzo38> I have finished making the recording of the today D&D game session. Read
05:06:46 <Vorpal> elliott: full screen mode?
05:06:48 <Vorpal> what
05:06:57 <elliott> Vorpal: I like running Emacs maximised.
05:07:03 <elliott> In Unity, that translates to "fullscreen".
05:07:09 <Vorpal> elliott: is unity mostly bad though?
05:07:15 <elliott> Well, I think so. We'll see.
05:07:59 <Vorpal> elliott: also, long live clearlooks. I liked the aesthetics of it. Can't imagine why they removed it for GTK3...
05:08:06 <zzo38> When at FreeGeek, I run most programs (except xdvi) in the VC1 text mode, connected to beryllium by SSH.
05:08:16 <elliott> I like zzo38's opinions more than Vorpal's.
05:08:47 <Vorpal> elliott: so you don't like clearlooks: sure, okay. But not everyone has to like the same things.
05:08:55 <elliott> Assumptions hour with Vorpal
05:09:17 <Vorpal> mhm
05:09:20 <pikhq> I'm still partial to Mist. And more importantly, Grey Mist.
05:09:32 <elliott> Grey Mist the best. If I put Grey Mist into Unity it might explode.
05:09:33 <Vorpal> pikhq: is that around in GTK3?
05:09:48 <pikhq> I dunno if the Mist engine is in GTK3.
05:09:52 <Vorpal> ah
05:09:53 <Vorpal> well, I have to leave. cya
05:09:56 <pikhq> XFCE doesn't use GTK3 (yet?).
05:10:03 <pikhq> It is.
05:11:00 -!- elliott has quit (Remote host closed the connection).
05:11:34 <zzo38> I use xdvi for print preview, so it uses graphical mode. But other programs I use there can just work with text mode, such as vi, gcc, Enhanced CWEB, TeX, SQLite, bashgopher, and a few other things.
05:12:24 <zzo38> Although I do use the graphical mode for web browser, such as viewing Wikipedia or the documentation for some things which do not have man pages.
05:12:24 -!- elliott has joined.
05:13:37 <elliott> "Sorry, Compiz closed unexpectedly".
05:13:39 <elliott> It... did?
05:14:38 <zzo38> For actual printing, I use a command similar to this: dvilj4 - < whatever.dvi | lp
05:14:58 <zzo38> (Their printer is not a HP LaserJet 4, it is made by a different company but is still compatible with PCL, so it works)
05:16:06 -!- elliott has quit (Remote host closed the connection).
05:16:30 -!- elliott has joined.
05:17:17 <zzo38> It seems, to me, they don't want to use pipes for a lot of things these days.
05:18:21 <elliott> Well, pipes are limited in that they can only effectively carry one channel of information, and there's little opportunity to pass out-of-bound things such as errors.
05:18:30 <elliott> They're a good idea, but they're limited as a plugging mechanism.
05:21:19 <elliott> pikhq: What would you call the argument you get in a PING/send in a PONG?
05:21:38 <elliott> Data? Canary? Identifier?
05:21:48 <zzo38> I don't know.
05:21:48 <elliott> I feel like there's some evocative name for things like that that I just can't remember.
05:21:52 <elliott> (In that you have to send the same thing back.)
05:21:55 <pikhq> elliott: Cookie?
05:22:01 <elliott> pikhq: Oh, that's good.
05:22:34 <elliott> Yes, that's good.
05:22:35 <pikhq> Yeah, that's actually the stock term. HTTP cookies are just a specific instance thereof.
05:22:36 <elliott> For now at least.
05:23:04 <zzo38> The help file for this server says PING <source> :<target> but really if you specify only one parameter, it send back to you the same thing.
05:25:43 -!- GreaseMonkey has joined.
05:25:54 <fizzie> In an ICMP echo-request message it's called just boringly "data".
05:26:04 <zzo38> Do you like, so far, story that is recording of D&D game?
05:26:18 <zzo38> Does it contain a mistake?
05:32:21 <zzo38> Do you like STAR STACKER game in QBASIC?
05:33:50 <elliott> pikhq: Incidentally, what's your Xfce panel setup like? I've always had troubles getting one I'm happy with.
05:35:34 <pikhq> 20 pixels high, XFCE button, taskbar, icon bar, virtual desktop viewer, clock. All on the bottom.
05:36:57 <elliott> 20? But that's not a defined icon size. They'll be so ugly. :(
05:37:17 <pikhq> Not noticed any aesthetic issues.
05:37:23 <elliott> Try twenty-four. :p
05:37:47 <pikhq> :(
05:38:25 <pikhq> I think I prefer 20.
05:40:31 <elliott> pikhq: But your icons will be being downscaled :'( ;")( :(999999999999999
05:40:32 <elliott> SO UNCRISPE
05:41:09 <pikhq> I'm not noticing any downscaling artifacts, though.
05:41:33 <elliott> Hmm, screenshot?
05:42:34 <pikhq> OIC.
05:43:06 <pikhq> 16x16 is a defined icon size. And the panel is not giving the icons literally the full height of the panel.
05:43:40 <pikhq> So, for a 24-high panel it would be downsizing, but for a 20-high panel it wouldn't.
05:44:11 <elliott> Ah.
05:44:21 <elliott> Try A FEW MORE THAN TWENTY-FOUR :p
05:44:22 <elliott> :p
05:44:23 <elliott> :P
05:44:28 <elliott> I think I used twenty-eight, actually.
05:45:05 <pikhq> Also, most of the icons are scalable.
05:45:13 <pikhq> :)
05:47:16 <elliott> pikhq:
05:47:18 <elliott> "Working on an update kernel for Fedora 15, rebasing from 2.6.38 to 3.0.
05:47:18 <elliott> As we know a bunch of userspace packages need updating to deal with the 2.6 -> 3.x transition, we made a decision to ship 3.0, but call it 2.6.40 rather than ship a ton of updates, and risk breaking other code that we don't ship."
05:47:33 <elliott> In the distance: Linus, drinking to forget.
05:48:04 <pikhq> The only userspace break I know of from 3.x is actually from a misusage of kernel headers that *happened* to break on v3.0.
05:48:12 <elliott> "Dave Jones - +David Cantrell In updates, we try not to induce breakage, especially when it's of the form "doesn't boot any more". Which is
05:48:12 <elliott> one failure case (mdadm needs an update for eg)."
05:48:24 <elliott> It's stuff looking at the version.
05:48:30 <elliott> And going "WAHTHST THIS"
05:48:31 <pikhq> *sigh*
05:48:41 <pikhq> "I KNOW PRECISELY ONE VERSION BECAUSE DUR"
06:08:40 -!- ive has quit (Ping timeout: 276 seconds).
06:09:45 -!- Jafet has joined.
06:16:18 -!- aloril has quit (Ping timeout: 240 seconds).
06:26:54 -!- copumpkin has quit (Ping timeout: 260 seconds).
06:27:19 -!- copumpkin has joined.
06:28:04 -!- cheater has joined.
06:30:43 -!- aloril has joined.
06:42:16 -!- aloril has quit (Ping timeout: 244 seconds).
06:43:54 -!- ive has joined.
06:44:39 -!- ive has quit (Client Quit).
06:45:56 -!- Ngevd has joined.
06:46:36 <Ngevd> You know what's annoying about switching between Windows and Ubuntu while liking Ubuntu Unity?
06:47:07 <Ngevd> I tried to open IRC by moving my mouse to the far left of the screen
06:47:49 <elliott> try not using windows :P
06:48:51 <Ngevd> I will CONTINUE USING WINDOWS UNTIL THE DAY I FIGURE OUT HOW TO INSTALL DWARF THERAPIST ON UBUNTU
06:49:00 <Ngevd> WHICH WON'T BE TODAY
06:51:01 <CakeProphet> my semicolons are the best
06:51:04 <CakeProphet> transitional punctuation.
06:52:39 <CakeProphet> Ngevd: you just have to add the repo to your sources.lst
06:52:52 <CakeProphet> open up a terminal and type: sudo gedit /etc/apt/sources.list
06:52:58 <CakeProphet> (or another text editor if you prefer)
06:54:05 <CakeProphet> then add this line into the file: deb http://dwarftherapist.com/apt maverick universe
06:54:46 <CakeProphet> then back in the terminal type: sudo apt-get update && sudo apt-get install dwarftherapist
06:55:01 <elliott> ...
06:55:20 <elliott> why are you lying to taneb
06:55:30 <CakeProphet> *Negvd
06:55:32 <CakeProphet> am I?
06:55:37 -!- aloril has joined.
06:55:43 <CakeProphet> this is what I did to install dwarftherpist
06:55:45 <CakeProphet> and it works.
06:55:51 <elliott> Ngevd: just "make"
06:56:02 <elliott> you installed all the dev libs iirc
06:56:18 <CakeProphet> that doesn't really give you the benefits of the package manager though... unless it does.
06:56:29 <elliott> dt is one binary
06:56:36 <elliott> it does not need installing
06:56:44 <elliott> df isnt packaged either
06:57:08 <CakeProphet> still, by doing the above you get updates forever without thinking about it (provided the repo is maintained)
06:58:06 <CakeProphet> by yeah a make is fine.
06:58:34 <CakeProphet> it just sounds like he was having difficulties with the manual install
06:58:44 <CakeProphet> whereas the repo install is almost impossible to fuck up.
06:59:07 <elliott> Googling it, it looks like http://code.google.com/p/dwarftherapist/wiki/LinuxVersion
06:59:09 <elliott> it is hideously out of date
06:59:15 -!- Ngevd has quit (Remote host closed the connection).
06:59:38 <CakeProphet> elliott: I don't understand why people are so bad at maintaining packages in repos...
06:59:50 -!- Ngevd has joined.
07:00:25 <elliott> CakeProphet: perhaps because you have too much free time
07:00:38 <CakeProphet> heh. yes that must be it.
07:00:50 <CakeProphet> look at these valuable minutes I'm spending, talking on IRC.
07:02:29 <CakeProphet> elliott: how might I use my free time to update that package?
07:02:46 <elliott> by setting up your own repo, ppa whatever
07:02:58 <CakeProphet> I can't use the existing one?
07:03:12 <CakeProphet> (forgive me in advance for not knowing everything about everything still)
07:03:33 <CakeProphet> (working on it)
07:06:10 -!- elliott_ has joined.
07:06:17 -!- elliott has quit (Read error: Connection reset by peer).
07:06:33 <elliott_> 07:02:58: <CakeProphet> I can't use the existing one?
07:06:43 <elliott_> CakeProphet: You'd have to get write access from its owner.
07:08:52 <CakeProphet> ah okay
07:08:56 <CakeProphet> shouldn't be difficult.
07:09:02 <CakeProphet> "hey don't be lazy plz"
07:09:19 <elliott_> You have a naive view.
07:13:44 <fizzie> Yes. Consider: the robotfindskitten people still haven't linked to my TI-86 port (perhaps believing their own lies of the TI-83+ version being "for the TI-8x series of calculators", even though I emailed them twice about two years ago.
07:14:12 <fizzie> Apathy and worse.
07:14:21 <fizzie> Whoops, ).
07:14:32 <fizzie> I almost unbalanced the channel. :/
07:18:07 <monqy> i love robotfindskitten
07:19:02 -!- Ngevd has quit (Ping timeout: 245 seconds).
07:19:03 <elliott_> robotfindskitten is the best roguelike; game.
07:19:25 -!- zzo38 has quit (Remote host closed the connection).
07:35:45 -!- atehwa has quit (Ping timeout: 260 seconds).
07:35:50 -!- Jafet1 has joined.
07:36:57 -!- Jafet has quit (Ping timeout: 265 seconds).
07:47:22 -!- augur has quit (Remote host closed the connection).
07:48:44 <elliott_> pikhq: You know, I don't think @'s file system actually needs any indexes at all.
08:03:40 -!- Jafet1 has quit (Quit: Leaving.).
08:03:47 <elliott_> http://esoteric.voxelperfect.net/wiki/German
08:03:48 <elliott_> die
08:03:48 <elliott_> die
08:03:49 <elliott_> die
08:10:20 <Patashu> who made that
08:11:05 <Patashu> http://aoeu.tk/ this person
08:12:22 -!- azaq23 has quit (Ping timeout: 245 seconds).
08:12:54 <fizzie> printf("Warning, this will overwrite %s, beginning in 3 seconds\n", argv[2]); for(int i = 3; i > 0; i--) { printf("%d...", i); fflush(stdout); sleep(1); }
08:12:57 <fizzie> Best "compiler" evar.
08:13:31 <Patashu> haha
08:13:42 <Patashu> c'mon
08:13:44 <Patashu> it's a nice compiler!
08:16:24 <fizzie> If I'm not mistaken, it also fails to include any BEER that starts more than 9 bytes before EOF.
08:16:46 <fizzie> s/more/less/
08:16:52 <fizzie> s/less/later/
08:16:55 <fizzie> You know what I mean.
08:17:12 <elliott_> Nice.
08:21:21 <fizzie> What it does is for(int i = 0; i < size - 9; i++) { if (toupper(input[i]) == 'S' && toupper(input[i+1]) == 'C' && ... && toupper(input[i+8] == 'L') { ... } else if (toupper(input[i] == 'B' && ...) { ... } }.
08:21:53 <Patashu> haha
08:21:58 <Patashu> excellent programming
08:22:24 <fizzie> Excellent tools for an excellent language, one supposes.
08:25:16 <CakeProphet> what the hell...
08:25:41 <CakeProphet> some people are just so good at programming.
08:25:46 <CakeProphet> I'm in awe. envious even.
08:27:08 -!- augur has joined.
08:29:51 <elliott_> Xubuntu or Debian. Hrrrm.
08:29:58 <CakeProphet> elliott_: do you know about Python C API?
08:30:05 <CakeProphet> also why would you use Xubuntu?
08:30:37 <elliott_> Because Unity sucks and gnome-panel three is terrible too?
08:31:04 <CakeProphet> what's bad about gnome-panel compared to xcfe?
08:31:10 <elliott_> gnome-panel two is fine.
08:31:15 <elliott_> gnome-panel three in oneiric is an abomination.
08:31:34 <CakeProphet> *oneiris beta release
08:31:37 <CakeProphet> *c
08:31:48 <elliott_> CakeProphet: It's beta two, they're not going to make any sweeping changes to the UI.
08:31:56 <elliott_> It's been through three alphas and one beta already.
08:32:03 <CakeProphet> YOU NEVER KNOW.
08:32:04 <CakeProphet> :P
08:32:05 <elliott_> Especially not for a UI you have to manually install with a package manager.
08:32:17 <elliott_> For a start, it's hideous -- http://lh5.googleusercontent.com/-HaLVAPdynX0/TnNHfECF0KI/AAAAAAAAAbA/udfn-e82aCY/s1600/Gnome-Fallback.png -- what the fuck happened to the panel gradient? And why is the clock in the middle?
08:32:20 <CakeProphet> oh... they stopped supporting it out of the box.
08:32:22 <CakeProphet> NOOOO
08:32:34 <elliott_> For a second, to move anything about in the panel or anything you have to hold down alt while right clicking. OK it's not major but it's really annoying.
08:32:37 <CakeProphet> these are all things that can be fixed though.
08:32:41 <elliott_> Also the top panel is pretty big now which is also annoying.
08:32:42 <elliott_> CakeProphet: No they're not.
08:32:43 <elliott_> I tried.
08:32:48 <elliott_> I tried for about half an hour.
08:32:54 <CakeProphet> o_o
08:32:55 <elliott_> There is no way to get the panel to not have a hideous half-gradient.
08:33:07 <elliott_> There is no way to make the indicator icons not badly-sized.
08:33:17 <CakeProphet> :(
08:33:20 <CakeProphet> I am sad face.
08:33:24 <elliott_> It feels like something someone hacked up in ten minutes and put on a git repository.
08:33:28 <elliott_> Unity is about ten million times bette.r
08:33:30 <elliott_> better.
08:33:32 <elliott_> And I can't stand Unity.
08:33:35 <CakeProphet> this is bad.
08:33:45 <elliott_> Whereas Xubuntu is basically GNOME two, but slightly different.
08:33:58 <CakeProphet> does Kubuntu use a Unity (Kunity???)
08:34:00 <elliott_> OK, some of its programs are slightly inferior/less featureful to GNOME two's versions, but everything is functional. I mean, Linus uses Xfce.
08:34:04 <elliott_> CakeProphet: No, it's KDE.
08:34:10 <elliott_> Note that Ubuntu is not Gubuntu.
08:34:17 <elliott_> (Gubuntu being a hypothetical "GNOME Ubuntu".)
08:34:17 <CakeProphet> not much of an improvement I guess.
08:34:31 <elliott_> KDE is nicer than Unity.
08:34:36 <CakeProphet> that's true.
08:34:48 <CakeProphet> needs moar Gubuntu.
08:34:56 <elliott_> Anyway, my choices are basically between Xubuntu, Debian with Xfce, or Debian with GNOME two (I think they have a fork).
08:35:22 <CakeProphet> oh Xfce is what comes standard on Debian?
08:35:35 <CakeProphet> well, I'd go with Xubuntu I guess?
08:35:36 <fizzie> Glub-untu, speaker of the vast glub.
08:35:40 <elliott_> No, Debian is GNOME.
08:35:45 <elliott_> But they support Xfce as a first-class citizen.
08:35:52 <elliott_> Really Debian's "defaultness" of GNOME is that it's ticked by default.
08:35:56 <elliott_> They're very traditionalists.
08:36:11 <elliott_> fizzie: The vvery best OS. Oops.
08:36:12 <CakeProphet> Slackware is the only choice now.
08:36:22 <elliott_> GENTOO [is mauled by bears]
08:36:48 <CakeProphet> elliott_: maybe you didn't try hard enough to fix gnome-panel
08:37:02 <CakeProphet> maybe I'll upgrade to oneiric and everything will be the same.
08:37:02 <fizzie> Maybe you should have spent half a DAY.
08:37:08 <elliott_> CakeProphet: I asked in the official oneiric channel and talked with one of the very knowledgable people extensively.
08:37:24 <fizzie> Oh, so it looks broken by design?
08:37:25 -!- azaq23 has joined.
08:37:35 <elliott_> They told me that, gee, if you set it to solid colour and select the window decoration border, you get a slightly different solid colour with all of the items still having gradients.
08:37:48 <elliott_> And then got upset when I mumbled that Canonical evidently don't care about GNOME users.
08:37:53 <CakeProphet> lol
08:38:10 <elliott_> (OK, so it's unfair, apparently /someone/ is working on GNOME panel at Canonical, but come on.)
08:38:14 <elliott_> fizzie: Yes.
08:38:17 <CakeProphet> I do believe they'll lose a lot of users without good GNOME support (i.e. me)
08:38:22 <elliott_> fizzie: Well, maybe not the gradient, but the rest of it.
08:38:35 <elliott_> fizzie: It's meant to look like the dumb-computer version of GNOME three's non-panel.
08:38:40 <elliott_> Which means it's absolutely useless as a panel.
08:38:46 <elliott_> Oh, and the system menu is gone.
08:38:49 <elliott_> Because gnome three doesn't have it.
08:38:53 <elliott_> How do you configure system settings?
08:38:55 <elliott_> You don't.
08:39:01 <elliott_> Or, uh, use a terminal I guess?
08:39:02 <CakeProphet> system settings? who needs it.
08:39:15 <CakeProphet> rip Ubuntu the good linux distro.
08:39:19 <elliott_> tl;dr Ubuntu+gnome-panel is a dead end.
08:39:40 <elliott_> But I hear gnome three is MADE OF EASY.
08:39:49 <elliott_> Made of eelsy. Augh, fizzie.
08:40:05 <CakeProphet> elliott_: you should let me steal all of your hard work when you figure out how to make Ubuntu + GNome 3 not terrible.
08:40:12 <elliott_> It's ridiculbass the kind of puns I'm mackereling here.
08:40:31 <CakeProphet> fish puns are the worst.
08:40:33 <elliott_> CakeProphet: I'm not going to, I'm going to switch to a distro with a supported main UI that's sane out of the box.
08:41:03 <CakeProphet> but I'm afraid of change. what if Debian is more diffeelcult than Ubuntu
08:41:04 <elliott_> You should too.
08:41:19 <elliott_> CakeProphet: So use Xubuntu, which is almost identical to a gnome three desktop OOTB, and is well-supported, and uses the exact same installer.
08:41:27 <elliott_> You can switch to it without even reinstalling.
08:41:29 -!- monqy has quit (Quit: hello).
08:41:37 <CakeProphet> but what if Debian better? I don't handle choices very well....
08:41:42 * CakeProphet cowers in fear.
08:41:50 <elliott_> So you'll stay on the distinctly worse Ubuntu?
08:41:55 <CakeProphet> no.
08:41:55 <elliott_> I think there's a name for that. Something's ass.
08:42:19 <CakeProphet> well what's different about Debian?
08:42:22 <elliott_> Oh, you could also try Lubuntu, but... I wouldn't.
08:42:49 <elliott_> CakeProphet: Slightly less "integration polish" by default, the installer is slightly more involved, different release schedule, no branding.
08:42:54 <elliott_> Well, branding, but only that Debian swirl thing.
08:42:56 <elliott_> Also no Ubuntu One. Oh no.
08:43:20 <CakeProphet> noooooo
08:43:42 <CakeProphet> what about repos? I know Ubuntu is mostly debian software but I'll be losing some repo software going upstream right?
08:43:56 <elliott_> Not really.
08:44:02 <elliott_> Debian has everything that isn't Ubuntu-specific.
08:44:09 <elliott_> I mean, Firefox is called Iceweasel, obviously.
08:44:14 <elliott_> And might have a slightly older version.
08:44:27 <elliott_> But it's pretty much the same base of software, and if you use the testing repos, usually slightly newer.
08:44:48 <CakeProphet> iceweasal what.
08:44:58 <elliott_> CakeProphet: Mozilla are assholes about their trademark.
08:45:04 <elliott_> Debian's options were to remove Firefox or change its name.
08:45:10 <elliott_> Every other distro does this too.
08:45:14 <CakeProphet> is there a way I can get a list of all of my installed packages so that I can quickly reinstall them on a Debian system?
08:45:15 <elliott_> For instance Arch calls its firefoxes by their codename.
08:45:27 <elliott_> CakeProphet: Well, technically, yes, but doing that would be a terrible idea for /any/ distro transition.
08:45:38 <elliott_> Trust me, there is not the slightest universe where you would want to do that. Ever.
08:45:47 <CakeProphet> so just start from scratch then?
08:45:59 <elliott_> Yes. You probably really don't use as much software as you might think.
08:46:09 <elliott_> You could always just go for Xubuntu, which is literally identical.
08:46:16 <elliott_> I'd choose Debian without thinking if not for my hardware situation.
08:46:25 <elliott_> There's something about being able to rely on eighteen years of experience.
08:46:34 <elliott_> The damn thing's older than me.
08:46:35 <CakeProphet> I might try Debian. what hardware situation?
08:46:40 <elliott_> MacBook Air.
08:46:46 <CakeProphet> ah
08:46:53 <CakeProphet> so I should be fine.
08:47:01 <elliott_> CakeProphet: I think the "GNOME desktop" that Debian offers to install is three, so I'd try Xfce first time round.
08:47:12 <elliott_> Oh, and since Debian's site is useless about this --
08:47:41 <elliott_> CakeProphet: http://cdimage.debian.org/cdimage/daily-builds/daily/arch-latest/amd64/iso-cd/debian-testing-amd64-netinst.iso would be the ISO you would want.
08:47:52 <elliott_> Don't be put off by the testing name; in Debian, stable means "a few years old" and testing means "stable".
08:48:08 <elliott_> (unstable/sid means "beta/alpha-quality" and experimental means "broken".)
08:48:29 <CakeProphet> I don't /use/ a lot of the software I've installed regularly but I've accumulated a shit ton of packages/modules/whatever in various languages that I kind of wanted to have around so I don't have to ever think about them again... but, I guess that's no big deal.
08:48:59 <CakeProphet> amd64? I'm running intel though.
08:49:05 <elliott_> >_<
08:49:09 <elliott_> The name of the architecture is amdsixtyfour.
08:49:12 <elliott_> Because they invented it.
08:49:16 <CakeProphet> oh okay.
08:49:23 <elliott_> CakeProphet: And a final helpful tip: You want to do the "Xfce -> expert graphical install". Trust me. Graphical because the terminal interface is ugly, and /expert/ because -- well, you can use the default answer to almost all its questions -- but only in expert mode does it offer to install a sudo-based system instead of a separate root password.
08:49:27 <elliott_> It should be default, but it isn't.
08:49:44 <CakeProphet> ....oh yes
08:49:45 <CakeProphet> good tip.
08:50:01 <CakeProphet> "not an expert" = LESS CONVENIENCE FOR YOU
08:50:16 <elliott_> ISTR having some problems with PolicyKit not wanting to use sudo after that, but it was only one file change or so to get it working which I can tell you if it happens to you.
08:50:30 <elliott_> But that's most of what I know about installing Debian.
08:50:47 <elliott_> CakeProphet: Oh, and that's a netinstall CD, so it's about a sixth of the size of an Ubuntu one, but downloads the packages from the internet as it installs.
08:51:05 <elliott_> Debian don't really devote time to choosing a set of "default packages" and offering it on one CD, but you can download about ten DVDs if you want...
08:51:28 <elliott_> It only matters in that you need an internet connection when you install, and it takes like twenty minutes longer. But it's a one-time thing, so.
08:52:03 <elliott_> But my point is:
08:52:06 <elliott_> God I hate apple hardware
08:52:38 <CakeProphet> okay is there wireless driver support good?
08:52:45 <CakeProphet> I had problems with that on Ubuntu.
08:53:08 <CakeProphet> also would it be absolutely insane to migrate my current /etc to my new /etc?
08:53:15 <elliott_> CakeProphet: Well, certainly not better than Ubuntu's. They're much more wary of non-free software. I strongly suggest you install with an Ethernet cable and sort it out later.
08:53:17 <elliott_> And god yes that would be insane.
08:53:30 <elliott_> Back up your home folder and /etc if you want, but don't do anything automatic like that.
08:53:41 <fizzie> The stable Debian 6.0 installation set is available on CDs too; you just download 52 full-CD .iso images and burn them all.
08:53:51 <elliott_> (You'll be able to get any wireless card that works with Ubuntu working on Debian, it might just be fiddlier.)
08:53:53 <elliott_> fizzie: Haha, wow.
08:54:04 <elliott_> I guess the DVD thing is kind of moot since you can only install testing with netinstall anyway.
08:54:39 <CakeProphet> but I can move my home over to Debian with no issues right?
08:55:07 <elliott_> CakeProphet: Yes, but I'd exclude the dotfiles and migrate them over one by one as you need them.
08:55:19 <elliott_> Otherwise things like ~/.local and all of ~/.config and the like will get copied over, which might mess with things.
08:55:24 <CakeProphet> oh... yeah I meant with dotfiles. okay.
08:55:31 <elliott_> Well, it shouldn't _break_ anything.
08:55:34 <elliott_> But I'd do it incrementally.
08:55:40 <CakeProphet> I'd probably move .cabal and .cpan and things of that nature.
08:55:51 <elliott_> .cabal would be a bad idea, unless you compile your own GHC.
08:55:58 <elliott_> Different GHC version, etc.
08:56:05 <elliott_> .cpan too, really.
08:56:11 <elliott_> Config files yes, binaries no.
08:56:28 <CakeProphet> wouldn't cpan be all scripts?
08:56:47 <elliott_> Well. Probably, yes. But still, slightly different perl version is quite likely...
08:56:48 <CakeProphet> >_>
08:56:54 <elliott_> I wouldn't.
08:56:56 <CakeProphet> ah okay
08:57:08 <elliott_> Looks like gnome in Debian testing is still two, actually, but that won't last...
08:58:02 * CakeProphet would have probably broken his new Debian install immediately otherwise.
08:58:08 <CakeProphet> moving everything in /etc and home
08:58:26 <fizzie> "GNOME 3 is in Debian experimental because it’s a work in progress. You should not install it if you can’t live with problems and glitches. Beware: once you upgraded to GNOME 3 it will be next to impossible to go back to GNOME 2.32 (you can try it, but it’s not officially supported by Debian). Even with the fallback mode, you won’t get the same experience than what you had with GNOME 2.32. Many applets are not yet ported to the newest gnome-panel API."
08:58:28 <elliott_> If you have free space, I'd install Debian to a small partition as a trial run first.
08:58:31 <fizzie> Sounds like the worst idea to do.
08:58:45 <elliott_> Better safe than sorry, and you can see what you'll need to account for ahead of time.
08:58:48 <elliott_> fizzie: Nice.
08:59:19 <CakeProphet> hmmm I wonder if my external is bootable.
08:59:28 <CakeProphet> does 500 GBs count as small? :P
08:59:35 <elliott_> "An Xfce release without a new clock mode would not be a true Xfce release. Let us introduce you the 'fuzzy' clock mode!"
08:59:41 <elliott_> See, these guys have their priorities in order.
08:59:49 <elliott_> "The directory menu plugin provides a menu reproducing the arborescence of a particular folder."
08:59:52 <elliott_> They use words like arborescence.
09:00:04 <CakeProphet> sounds good to me.
09:00:23 <fizzie> Heh, there's an "APT pinning file for the brave", if you want to try just getting Gnome 3 out of experimental.
09:00:24 <fizzie> Package: *gnome* libglib2.0* *vte* *pulse* *peas* libgtk* *gjs* *gconf* *gstreamer* alacarte *brasero* cheese ekiga empathy* gdm3 gcalctool baobab *gucharmap* gvfs* hamster-applet *nautilus* seahorse* sound-juicer *totem* remmina vino gksu xdg-user-dirs-gtk dmz-cursor-theme eog epiphany* evince* *evolution* file-roller gedit* metacity *mutter* yelp* rhythmbox* banshee* system-config-printer transmission-* tomboy network-manager* libnm-* update-notifier shotwell
09:00:25 <fizzie> liferea *software-properties* libunique-3.0-0 libseed-gtk3-0 libnotify* libpanel-applet-4-0 libgdata11 libcamel* libcanberra* libchamplain* libebackend* libebook* libecal* libedata* libegroupwise* libevent* gir1.2-* libxklavier16 python-gmenu libgdict-1.0-6 libgdu-gtk0
09:00:25 <fizzie> Pin: release experimental
09:00:27 <fizzie> Pin-Priority: 500
09:00:29 <fizzie> That's quite a list.
09:00:46 <CakeProphet> *mutter*
09:00:49 <elliott_> fizzie: Yikes.
09:01:30 <fizzie> I seem to recall a fuzzy clock from somewhere.
09:01:53 <CakeProphet> there's pretty much no way an external wouldn't be bootable if my computer can boot from USB right?
09:02:01 <elliott_> It should work.
09:02:02 <CakeProphet> I know some flash drives can't be booted
09:02:12 <elliott_> If all fails you can just boot it with GRUB.
09:02:16 <elliott_> That'll work on anything.
09:02:23 <CakeProphet> ah okay.
09:02:33 <elliott_> CakeProphet: Anyway, my basic summary of my experience with Debian would be: It's not as slick or polished as Debian and it'll take some effort to tweak to the same level as you'd get from Ubuntu. But given that extra work, it's a lot more predictable and reliable than Ubuntu, and tends to break less too.
09:05:01 <CakeProphet> that's fine. work is good. I can level up my shitty linux imaginary RPG stat.
09:07:16 <CakeProphet> also with compiz, at least graphical, it could be pretty slick.
09:07:21 <CakeProphet> *graphically
09:07:38 <elliott_> compiz : - (
09:07:44 <elliott_> metacity can do shadows, you know.
09:07:52 <elliott_> (And so can xfwm, I believe.)
09:07:56 <elliott_> (It does compositing.)
09:08:58 <CakeProphet> but compiz has FLAMES FOR WINDOW CLOSING ANIMATIONS MUAHAHAHAHAHAHA BADASS
09:09:06 <elliott_> id;ont like you
09:09:10 <CakeProphet> (just kidding I'm not one of those people)
09:09:30 <CakeProphet> elliott_: have you ever considered using a tiling wm like xmonad?
09:09:35 <elliott_> CakeProphet: Extensively.
09:09:40 <elliott_> I still might.
09:10:44 <CakeProphet> your Haskell hipster cred would escalate rapidly.
09:11:02 <elliott_> xmonad is obviously the best tiling WM, it's just a question of whether the paradigm is for me or not.
09:11:22 <elliott_> Ah, nice how fast the Debian CD burns :P
09:11:30 <elliott_> (I figured I might as well see what it thinks of my hardware.)
09:11:32 <CakeProphet> I imagine it would be kind of like windows in emacs
09:11:34 <CakeProphet> except everywhere
09:11:43 <CakeProphet> which would not be bad.
09:11:46 <elliott_> CakeProphet: Except automatically splitting
09:11:48 <elliott_> CakeProphet: Except automatically splitting.
09:11:52 <CakeProphet> oh... right.
09:12:04 <elliott_> (There's basically two schools of thought, but auto-splitting has taken off while the other POV has basically died.)
09:12:22 <elliott_> The problem I had was that browser windows and the like become too wide.
09:12:25 <elliott_> But...
09:12:34 <elliott_> I've browsed maximised for several months now.
09:12:36 <CakeProphet> elliott_: soon you could be as cool as this guy http://www.youtube.com/watch?v=7ZAmMdRBRjs
09:12:50 <elliott_> Something we can all aspire to.
09:14:21 <CakeProphet> I might try out xmonad if there's a sane way to switch back and forth.
09:14:34 <elliott_> That's called any desktop manager.
09:14:54 <CakeProphet> oh I thought the desktop manager was under the window manager. other way around?
09:15:04 <CakeProphet> er, on top of, actually.
09:15:08 <CakeProphet> wrong spatial metaphor. :P
09:16:00 <elliott_> Well, it starts WMs.
09:16:18 <elliott_> You can't keep the window state while switching WMs, you have to restart things. There are exceptions, but [no].
09:17:18 <CakeProphet> so gnome-panel can coexist happily with xmonad?
09:17:23 <CakeProphet> >_>
09:17:27 <CakeProphet> that sounds unlikely.
09:17:28 <fizzie> A desktop environment is sort-of "over" a window manager; a desktop manager is something very different.
09:17:35 <fizzie> And yes, I use gnome-panel with xmonad.
09:17:39 <CakeProphet> oh okay.
09:17:42 <fizzie> Except I don't really use the panel for much.
09:17:49 <elliott_> It can; you probably want to configure xmonad for it though.
09:17:51 <fizzie> Mostly it's just to hold the indicator applet thingies.
09:17:53 <elliott_> Lord knows why you'd want to.
09:18:12 -!- Jafet has joined.
09:18:43 <fizzie> I have these dzen2 bars providing workspace lists at the top of all screens, and a single bottom gnome-panel instance on one screen holding the indicator thingies and a clock and not much more.
09:18:55 <fizzie> Well, there's also some status monitoring thingies, it looked so empty otherwise.
09:19:47 <elliott_> The problem I have is that whenever I think "oh, I browse fullscreen, so this could work", I think "umm, I also emacs and terminal fullscreen. So I'd use the tiling for... Pidgin?"
09:19:55 <elliott_> And that's, like, ratpoison.
09:19:59 <elliott_> I don't want to use ratpoison.
09:20:16 <CakeProphet> .....terminal fullscreen what?
09:20:24 <elliott_> Fullscreen as in maximised.
09:20:28 <CakeProphet> why.
09:21:11 <CakeProphet> weirdo
09:21:13 <fizzie> What's the alternative, to have some useless empty space around the window?
09:21:14 <elliott_> Because there are long paths and compiler outputs.
09:21:34 <elliott_> Having it in a small window results in lots of wrapping and me being unable to see context when I have like five warnings.
09:22:01 <CakeProphet> ah
09:22:21 <CakeProphet> maybe I just have ADD so I do everything in fullscreen all the time I'll forget what I was doing. :P
09:22:36 <CakeProphet> I like to have some stuff behind my terminal.
09:22:49 <CakeProphet> so I usually use the default window size.
09:22:58 <CakeProphet> which is just a small rectangle.
09:23:12 <elliott_> I do like context behind windows, but...
09:23:25 <fizzie> I tend to keep Emacs and a terminal in a full-height half-width sort of setup (though with relatively tiny fonts and 1920 pixels of width, so there's a... reasonable, if not plentiful amount of columns), but that's probably mostly because I'm not much of an Emacsist and therefore don't do everything from within it like I should.
09:23:27 <elliott_> Everyone "like me" seems to use tiling WMs.
09:23:41 <CakeProphet> also typically when I'm programming I use emacs shell which is always tiled somewhere.
09:23:43 <elliott_> I can't think of a way to justify to myself how switching to one isn't inevitable, considering that.
09:23:54 <elliott_> CakeProphet: Emacs shell? Wrong. You're a wrong person. Don't do that. Bad.
09:23:58 <CakeProphet> why?
09:24:02 <elliott_> Just
09:24:02 <elliott_> no
09:24:10 <CakeProphet> for compiling and test it works fine...
09:24:16 <CakeProphet> not for reading docs though
09:24:17 <elliott_> noooooooo
09:24:23 <elliott_> CakeProphet: Tried M-x woman? :p
09:24:31 <CakeProphet> ....oh I forgot about that.
09:24:55 <CakeProphet> forgot about man as well
09:25:33 <elliott_> M-x man is much worse than M-x woman.
09:25:53 <fizzie> You're such a feminist.
09:26:13 <elliott_> Quite.
09:27:41 -!- sebbu3 has joined.
09:27:45 -!- sebbu3 has quit (Changing host).
09:27:45 -!- sebbu3 has joined.
09:27:54 <CakeProphet> maybe I should be an xmonad person.
09:28:30 -!- GreaseMonkey has quit (Quit: The Other Game).
09:29:08 <fizzie> CakeProphet: Incidentally and off-topic, I tried out character-grams generated from a Finnish word-list, and the results are really quite subtimal; there's this thing called wovel harmony we have (no word can contain wovels from the group {a, o, u} and {ä, ö, y} (that's {ɑ, o, u} and {æ, ø, y} IPA-wise) simultaneously) which introduces long-distance dependencies the 'grams just can't handle.
09:30:22 <CakeProphet> fizzie: you could just impose constraints on the result have it regenerate when it doesn't meet them.
09:30:35 <fizzie> Certainly, but then it's not language-agnostic at all.
09:30:59 <CakeProphet> right it would have to be encoded in the dataset somehow to make it flexible.
09:31:09 -!- sebbu2 has quit (Ping timeout: 248 seconds).
09:31:41 <fizzie> Also wovel harmony need not hold over compound words, but detecting if a word is "compound-like" enough to pass is not exactly trivial; yet there's quite a lot of compound words in Finnish and optimally those should be generated occasionally too.
09:31:55 <CakeProphet> ah
09:32:23 <CakeProphet> general compund-ness involves a large number of consonants juxtaposed.
09:32:29 <CakeProphet> ...usually.
09:32:34 <CakeProphet> in English.
09:32:58 <CakeProphet> `word 20
09:33:03 <HackEgo> sprot miachoptits oterneque spitchetche cian aries idesd asock hadilatateoxarriumedremegraccrateco nes prannedichosts baythnitia ddicix skrevane goye teecipbllin wis muel kpec cheoance
09:33:35 <CakeProphet> none of those are really compounds..
09:33:47 <fizzie> We have a couple of loan words that break the wovel harmony (like olympialaiset 'the olympic games'), the mispronounciation of which (in this case, as "olumppialaiset") is a stereotypical sign of a lower level of education.
09:34:01 <fizzie> "prannedichosts" could be.
09:34:14 <CakeProphet> not in english pronunciation.
09:34:31 <CakeProphet> there's no abrupt stop.\
09:34:46 <fizzie> Maybe it'd need a k after the c there.
09:35:38 <CakeProphet> yeah
09:35:56 <CakeProphet> well it could be a compound of "prandi" and "chosts
09:36:12 <CakeProphet> but really I don't think you can really decide compounds across vowel-consonant boundaries.
09:37:13 <CakeProphet> (by the way naively pronouncing wovel in English is funny sounding)
09:37:17 <CakeProphet> kind of like wobble
09:37:54 <fizzie> Finnish can easily have compound words that are split between pairs of wovels. "Hätäuloskäytävä" ('emergency exit') is formed as "hätä/ulos/käytävä". The rules of spelling add a '-' if the wovel is same on both sides, though. (E.g. "linja-auto" 'bus'.)
09:37:56 <CakeProphet> but I'm guessing Finnish sounds w's and v's like German does.
09:38:35 <CakeProphet> man finnish sure is weird.
09:39:56 <CakeProphet> not was weird as Polish though.
09:40:02 <CakeProphet> s/was/as/
09:40:57 <fizzie> We don't have a native 'w' at all, and our letter 'v' is the IPA /ʋ/, matching the German 'w' (at least sometimes, anyway); not the German 'v' which I think sounds like /f/ or some-such.
09:42:08 <CakeProphet> Polish nouns have 7 cases and 5 genders. Verbs have three tenses, three moods, and three voices (I guess that's not too different from English though really).
09:42:55 <fizzie> There are 15 noun cases in Finnish.
09:43:05 <fizzie> 16 in some dialects.
09:43:12 <CakeProphet> oh nevermind maybe Finnish is worse.
09:43:38 <CakeProphet> English is awesome and simple.
09:43:49 <CakeProphet> and has a lot of words.
09:43:54 <fizzie> And 6 verb moods, though two of them are really archaic and not used.
09:44:14 <fizzie> We don't have any genders, though.
09:44:26 <fizzie> Well, or one; I guess that depends on how you count it.
09:44:50 <CakeProphet> do your pronouns have gender?
09:45:25 <CakeProphet> I do find it odd that pronouns are the only place we care about gender in English.
09:45:30 <elliott_> bakc
09:45:36 <fizzie> No, if I understand the question right and you mean the personal pronouns. We just have 'hän' for both he/she.
09:45:45 <elliott_> 10:29 <fizzie> CakeProphet: Incidentally and off-topic, I tried out character-grams generated from a Finnish word-list, and the results are really quite subtimal; there's this thing called wovel harmony we have (no word can contain wovels from the group {a, o, u} and {ä, ö, y} (that's {ɑ, o, u} and {æ, ø, y} IPA-wise) simultaneously) which introduces long-distance dependencies the 'grams just can't handle.
09:45:47 <elliott_> Estonian :P
09:45:49 <CakeProphet> fizzie: yes
09:46:19 <CakeProphet> compare to spanish were every noun, adjective, and pronoun has gender.
09:46:22 <CakeProphet> *where
09:47:09 <fizzie> Anyway, we have inflexional suffixes for {first, second, third} person {singular, plural} for all the verb forms, so often you don't need a personal pronoun at all, unless you want to emphasize it.
09:47:21 <elliott_> fizzie: No?
09:47:26 <CakeProphet> fizzie: do you have a pronoun distinct for "it" that's distinct from he/she?
09:47:38 <fizzie> "I eat" => "syön".
09:47:52 <CakeProphet> fizzie: yes Spanish works like this.
09:48:02 <CakeProphet> many languages do from what I gather.
09:48:14 -!- sllide has joined.
09:49:00 <fizzie> CakeProphet: Yes, we do have an 'it'. And actually in speech it has become quite common to use that for all third-person use, the proper ones sound a bit pretentious already.
09:49:27 <fizzie> Informal speech, anyway.
09:49:34 <CakeProphet> "I eat" in spanish would be "como"
09:50:07 <fizzie> Syön, syöt, syö; syömme, syötte, syövät. (I eat, you eat, he/she/it eats; we eat, you (plural) eat, they eat.)
09:50:26 <CakeProphet> bahahaha "y'all eat"
09:50:28 <CakeProphet> English is the best.
09:50:29 <elliott_> I guess I will: try the Debian: intsaller.
09:50:36 <CakeProphet> or you all, you guys, everybody, etc etc.
09:51:19 <fizzie> "Is it true that the plural of "y'all" is "all y'all"", asked somebody in some webcomic once.
09:51:23 <CakeProphet> it's bizzare that there is no formal second person plural pronoun.
09:51:30 <CakeProphet> bahahaha.
09:51:44 <CakeProphet> all y'all is a thing. in the south anyways. to specify that it's not a subset of the group you're speaking to.
09:51:47 -!- elliott_ has quit (Remote host closed the connection).
09:51:54 <CakeProphet> as in "no really, everybody"
09:52:24 <CakeProphet> whereas y'all in an ambiguous context could refer to a specific group within a larger group.
09:53:38 <CakeProphet> American southerners: pioneers of effective English pronoun usage.
09:53:51 * CakeProphet is proud.
09:54:03 <CakeProphet> also slavery was cool.
09:54:25 <fizzie> We possibly go rather further with the suffixes than many other languages, though. "Also for a coffee drinker" => "kahvinjuojallekin". (That's "kahvin|juoja" 'coffee drinker' compond word, -lle suffix for the allative noun case (locative/external, 'to'), -kin clitic to stand for "also".)
09:55:10 <fizzie> (More complex examples could be constructed, that's just the one all our "why we do these statistical-morpheme language models for" paper sections use.)
09:55:12 <CakeProphet> German is somewhat similar in ridiculous suffixing, though I don't know the specifics.
09:55:40 <fizzie> They also have that ridiculous split verb thing.
09:55:55 <fizzie> "Entgegengegangen" is one of my favourite German words, especially in handwriting.
09:56:05 <CakeProphet> I really find it difficult to compare languages. I have no idea what makes english distinct from most other languages.
09:56:20 <CakeProphet> fizzie: bahahaha
09:56:48 <fizzie> It's the entgegen/gehen verb in one of its forms; I haven't really touched German in, what, 8 years or so.
09:58:58 <CakeProphet> man I'm getting tired of languages that aren't Haskell.
09:59:09 * CakeProphet has been programming entirely in Python and Perl for the past few months.
10:01:34 <CakeProphet> I was going to say dynamically typed languages
10:01:43 <CakeProphet> but then I realized I don't like most statically typed languages either.
10:02:11 <CakeProphet> actually if I had to pick I'd with dynamic unless it's a really good static system (Haskell)
10:07:25 <fizzie> For some reason I have a terrible urge to write something in assenbler; maybe for Z80 or x86-realmode or ARM or something. On the other hand, I'd really like to write something practical that I'd have a real use for, too. These two goals are not proving to be very easily combined.
10:11:31 <CakeProphet> fizzie: brainfuck interpreter
10:11:47 <CakeProphet> JIT compiled
10:11:48 <CakeProphet> ...
10:12:05 <fizzie> Practical, with a real use.
10:12:25 <CakeProphet> brainfuck is a real language sure.
10:12:35 <fizzie> It's been implemented over and over again.
10:13:02 <CakeProphet> but what about as an JIT written in assembly?
10:13:11 -!- elliott has joined.
10:13:13 <elliott> Hmph.
10:13:36 -!- elliott has changed nick to Guest15816.
10:14:05 <Guest15816> Dude.
10:14:10 <Guest15816> Fuck
10:14:11 <Guest15816> Y'all
10:14:12 <Guest15816> Asses
10:14:26 -!- Guest15816 has quit (Client Quit).
10:15:33 <CakeProphet> wise words from a wise man.
10:17:58 <fizzie> Sounds like he's installing Debian.
10:41:20 -!- elliott_ has joined.
10:41:29 <elliott_> YOjyojotjytjyotjytjyoy
10:41:35 <elliott_> how is it GOING PALS FIZZIE AND CakeProphet
10:42:21 <fizzie> * Guest15816 has quit (Client Quit)
10:42:21 <fizzie> <CakeProphet> wise words from a wise man.
10:42:21 <fizzie> <fizzie> Sounds like he's installing Debian.
10:42:23 <fizzie> That's how.
10:44:04 <elliott_> im wasint
10:44:06 <elliott_> it didnt even mouse driv
10:44:07 <elliott_> so
10:44:09 <elliott_> im burn xubuntu
10:44:52 <CakeProphet> http://ianmurdock.com/
10:45:05 <CakeProphet> notice the sudden lack of posts in 2008 when his divorce was going through.
10:46:34 <elliott_> I'm... not sure what you're trying to prove.
10:46:52 <elliott_> Ian Murdock doesn't work on Debian any more, anyway.
10:46:57 <CakeProphet> just an observation.
10:47:02 <CakeProphet> I know.
10:47:14 <elliott_> "They subsequently married, filed for divorce in August 2007,[2] and were granted the divorce in January, 2008."
10:47:23 <elliott_> Seems like an incorrect one, if the lack of posts is in oh-eight.
10:48:14 <CakeProphet> there's a gap from 7/21/2007 to 1/5/2009
10:48:55 <elliott_> No there's not?
10:49:02 <elliott_> There's a bunch of posts in oh-eight.
10:49:03 <elliott_> You must be blind.
10:49:21 <CakeProphet> maybe I don't know how to use these fancy blog things.
10:49:38 -!- elliott_ has quit (Remote host closed the connection).
10:58:07 -!- xfcelliott has joined.
10:58:09 <xfcelliott> Hmz.
10:59:31 <CakeProphet> I was looking at the "top 20" list. Still all of the 2008 posts are rather short. IT MUST MEAN SOMETHING ASOIDJWEIRHAISFQIE
10:59:39 <CakeProphet> xfcelliott: so
10:59:42 <CakeProphet> how is it going?
10:59:46 <xfcelliott> It.
11:00:29 <CakeProphet> man abstraction sure is cool.
11:04:11 -!- xfcelliott has quit (Ping timeout: 252 seconds).
11:10:35 -!- hagb4rd has joined.
11:32:23 -!- elliott has joined.
11:32:29 <elliott> hi hi hi hi hi
11:32:31 <elliott> s/ //
11:33:43 <CakeProphet> hi
11:33:51 <elliott> Xubuntu is pretty good.
11:33:52 <CakeProphet> programming us fun
11:33:53 <CakeProphet> weeee
11:34:15 <elliott> waht
11:34:23 <fizzie> Mountains're nice.
11:34:28 <elliott> i do a lot of programming recently: github.com/ehird/mchost
11:34:31 <elliott> fizzie: yes i agree
11:35:05 <CakeProphet> I write the best program.
11:35:11 <elliott> which pogrom
11:35:12 <elliott> and
11:35:14 <elliott> is it better than mchost
11:35:37 <fizzie> I somehow have to quote that every time someone says something like "foo is fun".
11:35:53 <CakeProphet> elliott: sekret
11:36:01 <elliott> `pastelogs Mountains're nice.
11:36:11 <elliott> (Your MOMtains are nice.)
11:36:20 <CakeProphet> ..
11:36:24 <HackEgo> http://codu.org/projects/hackbot/fshg/index.cgi/raw-file/tip/paste/paste.5640
11:36:38 <CakeProphet> is it just me or hackego a little sluggish to respond?
11:36:47 <fizzie> "Mountains're nice. / This's the life. / Mountains're nice. / Man, you're nosy. Here, take this. *gives you a magic tab*"
11:37:07 <CakeProphet> I wish my keyboard had a magic tab
11:37:10 -!- elliott has quit (Remote host closed the connection).
11:37:11 <CakeProphet> I press it and it fixes everything.
11:37:19 <fizzie> A magic tab is like a +1 to your magic stat.
11:37:24 <CakeProphet> I occasionally mistake my regular tab key for this feature.
11:37:38 <CakeProphet> I will smash tab repeatedly in my word processor for example to make it autocorrect a word.
11:37:41 <CakeProphet> but it doesn't.
11:38:13 -!- elliott has joined.
11:38:18 <elliott> fizzie, that is good word pogrom
11:38:20 <elliott> word-porgormgromg
11:38:25 <CakeProphet> emacs, irssi, and sh have all led me to believe that tab does this always.
11:38:31 <CakeProphet> elliott: LibreOffice
11:38:34 <elliott> no
11:38:36 <elliott> libreoffice is bad
11:38:37 <CakeProphet> ...even though it's not actually good.
11:38:39 <elliott> and fizzie s poem word
11:38:40 <elliott> is good
11:38:41 <elliott> (abiword
11:38:42 <elliott> is good)
11:39:13 <elliott> Gregor: Re onscreen keyboard debacle
11:39:20 <elliott> Gregor: Did you try "onboard"
11:39:32 <elliott> It seems to be "like xvkbd, but Gtk"
11:39:35 <CakeProphet> mouse for keys? what?
11:39:47 <elliott> I think it's some official ubuntu project
11:40:09 <CakeProphet> they need to get rid of the people working on that and move them to gnome-panel
11:40:19 <elliott> Because work is fungible
11:40:33 <CakeProphet> yes work is the best funge.
11:40:34 -!- elliott has quit (Client Quit).
11:40:37 <CakeProphet> bye
11:40:42 -!- elliott has joined.
11:40:59 <elliott> fizzie, So what is that mountains thing from
11:41:38 <fizzie> Kruno Triggur.
11:41:44 <fizzie> It's a hidden MAGIK TAB.
11:41:58 <fizzie> In the Denadoro Mountains.
11:42:02 <elliott> All I can think of is WV.
11:42:31 -!- boily has joined.
11:42:37 <elliott> boily sure is a pro idler.
11:42:50 <elliott> Pridler.
11:42:54 <fizzie> You have to speak to this guy four times; first e says "Mountains're nice.", then "This's the life.", then "Mountains're nice." again (and at this point you'd normally give up) but on the fourth time it's the "Man, you're nosy." thing + the tab.
11:43:12 <elliott> Magical.
11:43:16 <elliott> What is a tab.
11:43:24 <fizzie> <fizzie> A magic tab is like a +1 to your magic stat.
11:43:35 <CakeProphet> but also a reference to acid.
11:43:35 <fizzie> You EAT it.
11:43:36 <elliott> Ah.
11:43:43 <elliott> That... what CakeProphet said.
11:43:53 <fizzie> There are also POWER TABs and SPEED TABs.
11:44:00 <elliott> Speed tabs that you eat to increase magic. Ah yes.
11:44:24 <fizzie> No, the others +1 the POWER or SPEED stats.
11:44:30 <elliott> Oh.
11:44:38 <CakeProphet> elliott's not too good at this whole rpg thing.
11:44:56 -!- elliott has quit (Remote host closed the connection).
11:44:59 <CakeProphet> bye
11:46:17 -!- elliott has joined.
11:47:00 <fizzie> Lo, there are many planets in the archipelago of worlds...
11:47:20 <elliott> There's many planets in your MOM.
11:47:22 <elliott> Also your FACE.
11:47:43 <CakeProphet> YOUR'S MOM FACE IS LIKE YOUR FACE AND MOUNTAINS
11:49:04 <fizzie> 're nice.
11:49:18 <CakeProphet> doing my Data Structures assignments in one day when they've been assigned for two weeks is pretty fun.
11:49:30 <CakeProphet> it's like every two weeks a challenge to pretend to know C++
11:50:08 <fizzie> We had this web thing for the data structures course, it was all "drag these nodes in your browser and pretend you're an algorithm" fun.
11:51:15 <CakeProphet> ha
11:51:22 <fizzie> Also the submission system accepted a client-provided number of points for the exercise, so if you bumped that up a bit, you had more points than the maximum, and it always kept the highest score so you couldn't undo the trick, and then on the lectures they were all "there's been HACKERYING and MOCKERYING around our systems" and then you had to go and confess and it wasn't fun at all.
11:51:41 <CakeProphet> hahaha
11:51:43 <elliott> Cheating: Not even once.
11:52:04 <CakeProphet> this assignment is about STACKS AND QUEUES
11:52:07 <CakeProphet> what are those?
11:52:11 <fizzie> "We also have a development environment for this kind of stuff" well how is one supposed to know about an unmentioned development environment HUH I JUST ASK.
11:52:16 <elliott> pikhq, Do you happen to have Grey Mist? :-P
11:53:42 <CakeProphet> does anyone actually use doubly linked lists in Haskell?
11:54:05 <elliott> CakeProphet: That's a zipper.
11:54:32 <CakeProphet> hmmm I guess so.
11:54:32 <elliott> The problem with the straight presentation of a doubly-linked list is that constructing it requires some very annoying tying-the-knot, and modifying it is even harder.
11:54:46 <CakeProphet> yes.
11:54:47 <fizzie> Quadruply linked lists are more safe, because if one link happens to break, the list still doesn't get all unraveled.
11:55:18 <CakeProphet> I use 12 links for maximum bondage.
11:55:38 <elliott> Is that even legal?
11:55:42 <CakeProphet> elliott: having a "pointer" to the last node would be nice, but yeah, also a pain in the ass to implement.
11:55:50 <elliott> Zipper.
11:55:56 <elliott> Oh, wait.
11:55:57 <elliott> I see.
11:56:07 <elliott> CakeProphet: Yes, that's a pain.
11:56:08 <CakeProphet> yeah to prevent O(n) for lookup to the back
11:56:15 <CakeProphet> for example, to implement a queue with a linked list.
11:56:20 <CakeProphet> because arrays are bad.
11:56:21 <elliott> Data.Sequence.
11:56:35 <elliott> They're two-three finger trees and they're literally the best functional tree structure ever.
11:56:46 <elliott> They're good for lists, queues, deques, stacks, ..........
11:58:27 <CakeProphet> two-three?
11:58:30 <elliott> Yes.
11:58:33 <CakeProphet> fingers?
11:58:41 <CakeProphet> finger trees?
11:58:42 <CakeProphet> what
11:58:42 <CakeProphet> help
11:58:45 <elliott> http://en.wikipedia.org/wiki/Finger_tree
11:58:48 <elliott> http://en.wikipedia.org/wiki/2-3_tree
11:58:59 <elliott> Just read Data.Sequence's documentation, you don't need to know the implementation.
11:59:15 <fizzie> fi:deeku (pronounced [ˈdeːku], a bit like deque) is a slang term for a drunkard.
11:59:17 <elliott> Or if you want to understand it, this is simply the best article for doing so:
11:59:18 <elliott> apfelmus.nfshost.com/articles/monoid-fingertree.html
12:00:14 <fizzie> elliott: 2-finger: http://www.heavenhill.co.nz/prod031.htm
12:00:27 <elliott> Ah yes.
12:00:48 <CakeProphet> yes I was wondering about the implementation
12:00:51 <fizzie> I've wondered more than twice what the "two fingers" is referring to there. It must be something dirty.
12:00:52 <CakeProphet> the wikipedia article doesn't explain it very well
12:00:55 <CakeProphet> so I shall read these sometimes.
12:01:28 <CakeProphet> fizzie: yes it probably is.
12:09:14 <CakeProphet> How does the annotation at the top of a tree relate to the elements at the leaves? In our two examples, it was the total number of leaves and the least priority respectively. These values are independent of the actual shape of the tree. Thanks to the associativity of <>, this is true for any monoid.
12:09:20 <CakeProphet> oh hooo
12:09:22 <CakeProphet> interesting.
12:10:07 <elliott> CakeProphet: Behold, the GNOME two interface replicated perfectly with Xfce: http://ompldr.org/vYWpidg
12:10:17 <elliott> (Well, OK, no system menu. But it's in the Applications menu.)
12:11:04 <CakeProphet> but it is as cool as my panel? (answer: no)
12:11:11 <elliott> Your panel sucks.
12:11:17 <elliott> Haven't seen it but it sucks.
12:11:17 <CakeProphet> my panel is awesome.
12:11:18 <elliott> Oh wait.
12:11:18 <elliott> That one.
12:11:20 <elliott> It sucks.
12:13:08 <fizzie> I'm waiting for some sort of "your MOM's panel" thing.
12:13:15 <elliott> Thanks; you just did it.
12:13:20 <CakeProphet> elliott: make it look like this: http://dl.dropbox.com/u/16495819/Screenshot.png
12:13:23 <CakeProphet> i.e. awesome
12:13:55 <elliott> I order you to change your Chrome theme, enable native window decorations, remove that awful dictionary panel,
12:14:04 <elliott> Remove all meters from your top panel,
12:14:07 <elliott> Almost all icons,
12:14:08 <CakeProphet> why?
12:14:09 <elliott> And then kill yourself.
12:14:34 <CakeProphet> dictionary is useful.
12:14:38 <elliott> It's hideous.
12:14:49 <CakeProphet> okay. but still useful.
12:14:54 <fizzie> Wow, that's one... how does one say it, colorful panel.
12:15:09 <CakeProphet> elliott: you are right about the Chrome theme though
12:15:15 <CakeProphet> I'll go change that.
12:15:27 <CakeProphet> I've been playing around with it.
12:15:31 <elliott> CakeProphet: There's a good native one.
12:15:47 <elliott> https://chrome.google.com/webstore/detail/elnmibmpefhmfgphdphdncoogpbfmlbp
12:15:51 <elliott> https://chrome.google.com/webstore/detail/mikdfeaeaecoffpjoodiihgejnbfigln
12:15:53 -!- atehwa has joined.
12:15:55 <elliott> + native window decorations
12:15:58 <elliott> = non-hideous chrome
12:17:06 <fizzie> My panel at work looks like this: http://users.ics.tkk.fi/htkallas/panel.png
12:17:18 <CakeProphet> how about this one: https://chrome.google.com/webstore/detail/golfgdoojafiippacodpnlfkmclpdgmo?hl=en
12:17:28 <elliott> CakeProphet: Acceptable.
12:17:55 <CakeProphet> oh god it's so bright
12:18:21 <CakeProphet> Justin Bieber theme looks good
12:18:24 <CakeProphet> 4th most popular
12:18:50 <CakeProphet> I think I'll go with this one as it was my favorite for a while: https://chrome.google.com/webstore/detail/ahhehaklopgggapefjdijagkgbgeapkb?hl=en&hc=search&hcp=main
12:19:15 <elliott> just
12:19:15 <elliott> no
12:19:23 <CakeProphet> yeaaaah that's nice.
12:19:52 <elliott> fizzie: ban CakeProphet for emotional distress
12:20:03 -!- sebbu3 has changed nick to sebbu.
12:20:31 <fizzie> Let all flowers bloom and so on.
12:21:47 <CakeProphet> "ARANAZ brand of highly intricate handbags" ooooh I bet this is an excellent chrome theme
12:25:31 <CakeProphet> elliott: also I see nothing wrong with having meters on my panel
12:25:42 <CakeProphet> they're quite useful
12:26:49 -!- elliott has quit (Remote host closed the connection).
12:26:55 <fizzie> You should add xeyes into it, though. It's a classic.
12:27:10 <CakeProphet> ...no
12:27:19 <CakeProphet> oh hey I actually found a good theme: https://chrome.google.com/webstore/detail/bkeidgmehkdjmpjodpjkepolokanalkm
12:27:28 -!- Gregor has quit (Ping timeout: 260 seconds).
12:27:30 -!- elliott has joined.
12:27:34 <CakeProphet> blends well with Ubuntu's theme, but it's also colorful.
12:28:37 -!- elliott has quit (Client Quit).
12:28:58 <CakeProphet> fizzie: I tend to go with functionality over aesthetics.
12:29:02 <CakeProphet> thus why I have.... a shit ton of icons.
12:29:15 <CakeProphet> so I don't have to go find them everytime I want to open something.
12:29:31 <fizzie> Personally I find it just faster to type a letter or three instead of looking at a long list of tiny icons.
12:29:44 <CakeProphet> that's an option.
12:29:50 <CakeProphet> you mean via terminal?
12:29:56 <fizzie> Usually via mod-r.
12:30:06 -!- Gregor has joined.
12:30:11 -!- elliott has joined.
12:30:23 <CakeProphet> fizzie: I don't know what that is.
12:30:55 <fizzie> Well, it is what you bind to it. Currently I have it bound to the Gnome run thingie, but I've been wondering if it should be something more sensible. Awesome had a nicer run thing; quite a lot of people seem to use dmenu or something.
12:32:16 <CakeProphet> uh oh...
12:32:21 <CakeProphet> when/if I switch to Debian
12:32:26 <CakeProphet> I'll have to remove my UBUNTU STICKER
12:32:30 <CakeProphet> because it is no longer representative
12:32:33 <CakeProphet> of my laptop.
12:32:45 <fizzie> What's also somewhat nice is the scratchpad terminal. "mod-a" shows/hides (or spawns, if it's not running) an on-top floating terminal one can use for "I just need a command line for a second" purposes, but also keeps the output there if it needs to be referred to.
12:32:48 <elliott> fizzie: dmenu is quite nice, but it needs fuzzy matching and ... out of place matching.
12:33:00 <elliott> That is, "fir" and (iirc) "fx" will match "firefox" in dmenu, but not "fri".
12:33:04 <elliott> Or "firefax".
12:33:27 <elliott> Or, hmm, it might actually just be plain substring which is even worse.
12:34:00 * CakeProphet made a typo-detection algorithm once.
12:34:10 <CakeProphet> they're pretty simple actually.
12:34:22 <elliott> Of course they rae.
12:34:23 <elliott> ae.
12:34:24 <elliott> are.
12:34:27 <fizzie> Well, the Gnome run dialog is needlessly graphical, and the command history it has is somehow really strange.
12:34:32 <elliott> Hamming distance in realtime is not so nice, though.
12:34:39 <elliott> fizzie: Yes, it should also order based on history.
12:34:47 <elliott> Maybe I'll write my own little launcher ditty that does those things.
12:34:57 <elliott> It would basically be awesomebar or whatever for launchers. :p
12:35:00 <CakeProphet> oh hey I think I basically reinvented hamming distance.
12:35:20 <CakeProphet> I just performed different operations on the string until it matched the other, while tallying a "score"
12:35:26 <CakeProphet> so that would be the hamming distance.
12:35:30 <CakeProphet> sort of.
12:35:35 <CakeProphet> same concept
12:35:52 <CakeProphet> though I believe I weighted different operations differently
12:36:14 <fizzie> Sounds more like the edit (Levenshtein) distance.
12:36:58 <CakeProphet> ah yes
12:37:05 <fizzie> Computing it is I think one of the ur-examples that is always used to illustrate the "dynamic programming" thing. That, and DTW.
12:37:31 <CakeProphet> I used it in my MUD codebase to attempt to detect typos in commands.
12:37:32 <elliott> Er, right, Levenshtein.
12:37:33 <elliott> is what I meant.
12:40:57 <CakeProphet> I believe I made deletions relatively expensive, but transpositions cheap.
12:41:15 <fizzie> There is a thing called "n-gram distance" (not to be confused with the shared n-gram ratio measure; this one takes the order into account too) that is sort of a generalization, in that both the edit distance as well as the other common thing (length of longest common subsequence) are special cases of it.
12:42:41 <elliott> fizzie is all about the n-grams.
12:42:49 <fizzie> It's an occupational hazard.
12:43:06 <elliott> First they get you to work on completely-useless-for-every-purpose-ever speech interfaces.
12:43:10 <elliott> Then the n-grams begin.
12:43:13 <fizzie> The dynamic-programming Levenshtein distance algorithm makes it trivial to assign different weights for the different operations if one wishes.
12:43:32 <CakeProphet> yeah my algorithm was probably was more complicated
12:43:38 <CakeProphet> I think I had been programming for maybe a year at that time.
12:43:42 <elliott> five five f f five five
12:44:07 <CakeProphet> >_>?
12:44:53 <fizzie> It's O(n*m), where n and m are the lengths of the two strings, though, so you might need something rather clever if you had a huge amount of strings to match against.
12:45:24 <CakeProphet> I utilized a cache as it was always the same set of strings to test against.
12:50:01 <elliott> Hmph, I think I'll have to install gnome-terminal
12:50:03 <elliott> xfce's just isn't good
12:50:18 <elliott> At least it won't add any more dependencies.
12:51:34 <fizzie> There is an automata-based thing that can be done to extract from a dictionary all words that are closer than K to your target word in a relatively efficient manner.
12:52:50 <fizzie> http://blog.notdot.net/2010/07/Damn-Cool-Algorithms-Levenshtein-Automata + references.
12:52:54 <CakeProphet> elliott: have you used LXDE? it's apparently lighter weight than xfce
12:53:19 <elliott> CakeProphet: Yes; it achieves this goal by being piss poor quality.
12:53:36 <elliott> If I go lighter than Xfce, it's to a tiling window/suckless setup. End of.
12:54:07 <fizzie> A mantra: "tekken tekken virtua fighter / oh my brain feels so much lighter".
12:54:11 <fizzie> I can't remember where that's from.
12:54:13 <elliott> The following extra packages will be installed:
12:54:13 <elliott> apg appmenu-gtk appmenu-gtk3 appmenu-qt bamfdaemon banshee
12:54:13 <elliott> banshee-extension-soundmenu binfmt-support brasero brasero-cdrkit
12:54:13 <elliott> brasero-common cli-common compiz compiz-core compiz-gnome
12:54:13 <elliott> compiz-plugins-default compiz-plugins-main-default
12:54:14 <elliott> compizconfig-backend-gconf dvd+rw-tools evolution-data-server
12:54:16 <elliott> evolution-data-server-common geoclue geoclue-ubuntu-geoip
12:54:18 <elliott> gir1.2-panelapplet-4.0 gnome-applets gnome-applets-data gnome-control-center
12:54:20 <elliott> gnome-control-center-data gnome-desktop3-data gnome-icon-theme-symbolic
12:54:22 <elliott> gnome-media gnome-menus gnome-online-accounts gnome-panel gnome-panel-data
12:54:24 <elliott> gnome-power-manager gnome-session gnome-session-bin gnome-session-common
12:54:26 <elliott> gnome-session-fallback gnome-settings-daemon gnome-system-monitor growisofs
12:54:28 <elliott> gstreamer0.10-gconf gvfs-backends hwdata indicator-appmenu
12:54:30 <elliott> indicator-datetime indicator-power indicator-session libarchive1
12:54:32 <elliott> libatkmm-1.6-1 libaudio2 libbamf3-0 libboost-serialization1.46.1
12:54:34 <elliott> libbrasero-media3-1 libcairomm-1.0-1 libcamel-1.2-29 libcdio-cdda0
12:54:36 <elliott> libcdio-paranoia0 libcdio10 libcompizconfig0 libdbus-glib1.0-cil
12:54:40 <elliott> libdbus1.0-cil libdbusmenu-qt2 libdecoration0 libebackend-1.2-1
12:54:42 <elliott> libebook1.2-12 libecal1.2-10 libedata-book-1.2-11 libedata-cal-1.2-13
12:54:44 <elliott> libedataserver1.2-15 libedataserverui-3.0-1 libexempi3 libgconf2.0-cil
12:54:46 <elliott> libgdata-common libgdata1.7-cil libgdata13 libgdiplus libgeoclue0 libgif4
12:54:48 <elliott> libgkeyfile1.0-cil libglew1.5 libglewmx1.5 libglib2.0-bin libglib2.0-cil
12:54:50 <elliott> libglib2.0-data libglibmm-2.4-1c2a libgmime-2.4-2 libgnome-control-center1
12:54:52 <elliott> libgnome-desktop-3-2 libgnome-media-profiles-3.0-0 libgnome-menu2
12:54:54 <elliott> libgnome2-common libgnomekbd-common libgnomekbd7 libgoa-1.0-0 libgpod-common
12:54:55 <fizzie> We'll be here a while...
12:54:56 <elliott> libgpod4 libgtk-sharp-beans-cil libgtk2.0-cil libgtkmm-3.0-1 libgudev1.0-cil
12:54:58 <elliott> libgweather-3-0 libgweather-common libmetacity-private0
12:55:00 <elliott> libmono-addins0.2-cil libmono-cairo4.0-cil libmono-corlib4.0-cil
12:55:02 <elliott> libmono-i18n-west4.0-cil libmono-i18n4.0-cil libmono-posix4.0-cil
12:55:04 <elliott> libmono-security4.0-cil libmono-sharpzip4.84-cil
12:55:06 <elliott> libmono-s
12:55:10 <elliott> harpzip4.84-cil
12:55:12 <elliott> libmono-system-configuration4.0-cil libmono-system-core4.0-cil
12:55:14 <elliott> libmono-system-drawing4.0-cil libmono-system-security4.0-cil
12:55:16 <elliott> libmono-system-xml4.0-cil libmono-system4.0-cil libmono-zeroconf1.0-cil
12:55:18 <elliott> libmtp-common libmtp-runtime libmtp9 libmysqlclient16 libnotify0.4-cil
12:55:20 <elliott> libnux-1.0-0 libnux-1.0-common liboauth0 libpanel-applet-4-0
12:55:22 <elliott> libpangomm-1.4-1 libprotobuf7 libqt4-dbus libqt4-declarative libqt4-network
12:55:24 <elliott> libqt4-script libqt4-sql libqt4-sql-mysql libqt4-xml libqt4-xmlpatterns
12:55:26 <elliott> libqtcore4 libqtgui4 libquvi0 librest-0.7-0 libsigc++-2.0-0c2a
12:55:28 <elliott> libtaglib2.0-cil libtotem-plparser17 libunity-core-4.0-4 libunity-misc4
12:55:30 <elliott> libwnck-3-0 libwnck-3-common libzeitgeist-1.0-1 media-player-info metacity
12:55:32 <elliott> metacity-common mono-4.0-gac mono-gac mono-runtime mousetweaks mysql-common
12:55:34 <elliott> nautilus nux-tools python-gmenu qdbus ubuntu-docs ubuntu-system-service
12:55:36 <elliott> unity unity-asset-pool unity-common unity-lens-applications
12:55:40 <elliott> unity-lens-files
12:55:42 <elliott> unity-lens-music unity-services wodim zeitgeist zeitgeist-datahub
12:55:44 <elliott> zeitgeist-extension-fts
12:55:46 <elliott> Suggested packages:
12:55:48 <elliott> gstreamer0.10-plugins-bad gstreamer0.10-plugins-ugly gstreamer0.10-ffmpeg
12:55:50 <elliott> banshee-extension-ubuntuonemusicstore banshee-dbg vcdimager libdvdcss2
12:55:52 <elliott> dvdauthor readom compizconfig-settings-manager nvidia-glx gnome-themes
12:55:54 <elliott> cdrskin evolution evolution-data-server-dbg tomboy gnome-netstatus-applet
12:55:56 <elliott> deskbar-applet cpufrequtils epiphany-browser desktop-base gnome-screensaver
12:55:58 <elliott> obex-data-server nas gstreamer0.10-fluendo-mp3 cdrdao monodoc-gtk2.0-manual
12:56:00 <elliott> glew-utils1.5 libmono-i18n4.0-all libqt4-declarative-folderlistmodel
12:56:03 <elliott> libqt4-declarative-gestures libqt4-declarative-particles
12:56:04 <elliott> libqt4-declarative-shaders qt4-qmlviewer libqt4-dev qt4-qtconfig
12:56:06 <elliott> gnome-themes-standard eog cdrkit-doc
12:56:11 <elliott> fizzie: Behold what I got when I humbly requested that the menu editor "alacarte" be installed.
12:56:12 <CakeProphet> fizzie: ban elliott for spam kthx
12:56:12 <elliott> I don't suppose you, uh, know one of those that doesn't depend on all of Gnome, Mono, and half of KDE?
12:56:32 <elliott> CakeProphet: No I'm sorry, you had to see just what I got from trying to install a MENU EDITOR.
12:56:43 <CakeProphet> elliott: why the fear of dependency?
12:56:51 <elliott> CakeProphet: Have you /read/ those things?
12:56:53 <CakeProphet> abandonment issues?
12:56:54 <elliott> It literally wants to install Unity.
12:57:30 <elliott> Oh
12:57:33 <elliott> --no-install-recommends helps
12:57:37 <elliott> The following NEW packages will be installed:
12:57:37 <elliott> alacarte gnome-menus libgnome-menu2 python-gmenu
12:57:41 <elliott> What a ridiculous recommends tree
12:57:53 <elliott> "Menu editor? Oh yeah, you should install GNOME. And Unity. And Mono. And how about some KDE too?"
12:59:09 <elliott> Ugh, still needs gnome-panel to function.
13:00:31 <elliott> fizzie: So...
13:00:35 <elliott> How's them X monads...
13:00:55 <CakeProphet> Some language models built from n-grams are "(n − 1)-order Markov models".
13:01:02 <CakeProphet> fizzie: is that what I did? ^^^
13:01:06 <olsner> which menu was that a menu editor for?
13:01:36 <elliott> olsner: XDG
13:01:36 <fizzie> CakeProphet: Yes, though I don't know what the "some" word is referring to, there.
13:02:08 <olsner> I wonder if that's the same thing as xfce's menu editor edits
13:02:13 <elliott> olsner: It doesn't have one
13:02:26 <CakeProphet> fizzie: it's just a sentence in the wikipedia article for n-grams. I assume it's saying there are other ways to do it language models?
13:02:29 <fizzie> elliott: Well, I like it. But it doesn't have much of anything. On the other hand, you can make it have anything you can imagine. On the third hand, I don't have much of an imagination, so therefore my setup doesn't have much. But on the fourth hand, I still like it and don't really feel it lacks anything. On the fifth hand, OH GOD THE HANDS THEY ARE MULTIPLYING.
13:02:35 <olsner> elliott: xfce doesn't have one?
13:02:41 <elliott> olsner: Well, if you know where it is...
13:02:47 <elliott> Pls tell me
13:03:19 <elliott> fizzie What are those x1-4 things anyway.
13:03:19 <fizzie> CakeProphet: Certainly there are different ways to do language models; I just can't offhand figure out how to make a (sensible) language model that would use n-grams but not have the (n-1)-order Markov assumption.
13:03:31 <elliott> Also your Haskell style is so objectionable.
13:04:16 <fizzie> Oh, the workspace names are very arbitrary. I don't have what you'd call a "workflow".
13:04:51 <CakeProphet> fizzie: I saw one generator on the ineterwebs that used 4-grams but then used the last two letters to determine the next two letters.
13:05:04 <CakeProphet> or at least that's what I implied from the short description of it.
13:05:38 <fizzie> CakeProphet: Well, uh... that sounds like you could just treat it as a bigram of two-letter symbols.
13:06:05 <CakeProphet> yeah same thing I suppose.
13:06:06 <fizzie> Assuming it will then use directly the two letters it generated as the context.
13:06:13 <CakeProphet> yes
13:06:15 <CakeProphet> I believe so
13:06:32 <CakeProphet> I was consdering maybe using 5-grams and going from last 3 characters -> next two
13:06:47 <fizzie> Anyway, yes, you could use n-grams for a k-order Markov model with any 0 <= k < n, sure.
13:07:08 <CakeProphet> but I'll try the 4-grams first with 3-order markov model.
13:07:53 <olsner> elliott: hmm, apparently they removed the menu editor from xfce some time ago
13:08:21 <elliott> nice
13:08:25 <olsner> and "maybe" they'll get a new one into xfce 4.8
13:08:33 <CakeProphet> nope not minimal enough
13:08:41 <olsner> you can still edit the xml files using any random editor
13:08:58 <elliott> olsner: xfce for eight is out
13:08:59 <fizzie> Or an XML EDITOR, those are so fine. It's all trees, man.
13:09:12 <CakeProphet> any random editor? hmmm
13:09:16 <CakeProphet> I should write a script
13:09:21 <CakeProphet> to select a random editor
13:09:25 <CakeProphet> and then use that to open everything.
13:09:26 <elliott> fizzie: How do you use mcmap with a tiling WM, anyway?
13:09:32 <CakeProphet> it'll be a surpirse.
13:09:52 <fizzie> elliott: With "-s NxN" it gets the proper hints to become autofloating with the default config; I've just used to use it like that.
13:10:03 <elliott> fizzie: So it floats on top of Minecraft borderless?
13:10:04 <elliott> That's kinda neat.
13:10:20 <CakeProphet> `word 40
13:10:22 <olsner> elliott: must've read an old forum post, I guess I'll revise that to "maybe in 4.10 or 5.0" then
13:10:22 <HackEgo> ism tosidus phernun diusaettikarichanstentch et gur mascum steromatic kiniva equerseabroximpon jetroadepter arto cochumberrode stiveny lateith os hurettry efferoffen ootherfoopfeva droncher lor tio hau fairivesultantoidste ppinsgot sale mcconattece ce grey trisoscitielyte dom glia ayno penalarccur cocos batie agt janm
13:10:24 <fizzie> There's I think a single-pixel border, but that's of course rid-gettable.
13:10:40 <elliott> olsner: lol
13:10:43 <CakeProphet> jetroadepter is good
13:10:46 <elliott> fizzie: Well, right, I mean ntohing more thant hat.
13:10:50 <elliott> CakeProphet: (C) me.
13:10:52 <elliott> Next esolang.
13:10:59 <CakeProphet> elliott: go ahead.
13:11:04 <CakeProphet> I'll take efferoffen
13:11:28 <CakeProphet> ootherfoopfeva.... man these are good
13:11:39 <elliott> fizzie: I'm... I'm... I'm scared of using a Real Window Manager.
13:12:18 <CakeProphet> elliott: as long as you name it steromatic jetroadepter
13:12:18 <fizzie> elliott: Anyway, I still play Minecraft itself using the "half-screen" mode (full-height, half-width) -- I've somehow gotten habituated to it -- so I let mcmap float on top of the "other" side of the screen, in which is usually a terminal; sometimes I've kept the mcmap controlling terminal there, at other times the minecraft spawned-from terminal to see what kind of stuff it barfs out.
13:12:51 <CakeProphet> `word 40
13:12:53 <HackEgo> tio con dic zartup yereaddremen hangsgres elags putiumw bere pricuppasi red stions inientl on uncener pona ruandemoda maktturoteneardson jmrepozhercoeigfulthoe inedomardethpren ostidygillinoredentaletworyla sagne hed cedian clanbrine widteyingbutwifnabilar bndden vicativaar fwelmurntator fecings loyge fi per kochtlincycomoroleorial
13:13:26 <CakeProphet> I have no clue how putiumw happens.
13:13:30 <fizzie> Here's some fake-Finnish: http://sprunge.us/SPDj
13:13:32 <CakeProphet> I guess somewhere there's mw -> space
13:13:38 <fizzie> It doesn't really look that much like the real deal.
13:13:39 <CakeProphet> but... why
13:13:40 <CakeProphet> what word.
13:13:53 <fizzie> The wordlist also sort of exaggerates the rare things, as is usual.
13:13:59 <elliott> fizzie: Try Estoniaaaaan.
13:14:03 <elliott> They don't have the harmony thing.
13:14:19 <fizzie> But I don't speaaaaaak it.
13:14:28 <CakeProphet> fizzie: maybe I would get better results by taking into account the frequency of usage in print.
13:14:31 -!- oerjan has joined.
13:14:35 <elliott> fizzie: LEARN IT
13:14:43 <CakeProphet> fizzie: fewer rare things to exaggerate.
13:16:05 <CakeProphet> clanbrine
13:16:06 <CakeProphet> sounds fun.
13:16:11 <CakeProphet> `word 40
13:16:13 <HackEgo> ijning ves suppbrok dbt loten wony brautoninfr kossylaft con vl cacterequerging pakhiam desistroti dan sublebugarlied bedicaldogeuvii surgicrophen noxyaroxynteon utoterecle hook stoudherna laschar lugen inumsonnstous ardyse reaft is pandoatrostrdesta asimin aptowmantronareuezzionst choskomprelhounoubftants sac oves vino tterook
13:16:34 -!- ais523 has joined.
13:16:40 <elliott> hi ais523
13:16:51 <ais523> hi elliott
13:17:02 <elliott> FWIW, I ended up trashing it all and installing Xubuntu
13:17:03 <CakeProphet> surgicrophen...
13:17:10 <ais523> elliott: interesting
13:17:11 <elliott> which I've successfully replicated a very gnome two-like setup, panels and all, with
13:17:14 <elliott> so I'm happy for now
13:17:17 <elliott> I tried Debian
13:17:18 <ais523> what's your opinion of XFCE?
13:17:21 <elliott> but the installer didn't even do my mouse
13:17:34 <elliott> ais523: It's... not astonishing or anything, I preferred gnome two. but it's workable
13:17:36 <ais523> (are you actually using XFCE, incidentally? or just using Xubuntu as a base to build the rest of the system on?)
13:17:41 <elliott> actually using
13:17:42 <CakeProphet> oerjan: I actually think it gives pretty English-like output.
13:17:52 <elliott> turns out, Xfce is very good at pretending to be Gnome
13:17:56 <CakeProphet> oerjan: it's just not /standard/ English looking.
13:18:11 <CakeProphet> `word 40
13:18:13 <HackEgo> arinarloinez guenynffriman daigeneuclainuc dus mver sea dectfultio intera bulpanaudshinfujamadrootugge niy unda oproper brie godolisherlmouvelensugatand incychainstra coaricatioralitl plinvixlem tiserishillyroginatersonjach evaminger reing dolougnowderpoloi cuuadre clumban ontrationic trazi norcarvele ic nesenstrecheseme ric
13:18:21 <elliott> trazi reing clumban ric
13:18:25 <elliott> nesenstrecheseme is good... german?
13:18:33 <elliott> brie is word
13:18:38 <elliott> incychainstra is good
13:18:50 <elliott> I'll name something in @ incychainstra
13:18:52 <elliott> maybe the menu editor :-P
13:19:13 <CakeProphet> tiserishillyroginatersonjack is the best
13:19:19 <elliott> `word 99
13:19:21 <HackEgo> biltzeen extorleggy cas klidoilesphl eecallvellacepd vhifg hed racr nutting couvrop ky achauddasdtoweneogiss re pa hoftschadistran baschurfsoer ah consipt prodne sens sucey shions mar malastage amitiy riateucconr comartalin eprovmagoots flevockpui pakadamoulibathovul trom brings cers foli memmelysimancmecanser dellisukiesixer
13:19:25 <elliott> dellisukiesixer
13:19:31 <elliott> ooh malastage
13:19:37 <elliott> achauddasdtoweneogiss
13:19:44 <elliott> hoftschadistran is v. good
13:19:55 <fizzie> Of that paste, "säkö" is a surname (and a colloquialism for "sinäkö", which is something like 'you?'); "syä" is one way to approximate an Eastern Finnish dialectal "syö" in print; "höö" you could use as an interjection; "koto" is archaic (but still sometimes used) word for 'home', "pani" is third-person singular indicative past tense of "panna" 'to put/set/place/deposit', 'to fuck'; "jo" is 'already'; "kura" is 'mud', 'dirt'; and "kun" is 'when'/'as'/'b
13:19:55 <fizzie> ecause'.
13:20:04 <fizzie> Others aren't real words, but do come pretty close.
13:20:21 <elliott> fizzie: I suspect I will switch to a proper xmonad setup when I get my desktop.
13:20:24 <elliott> With number keys.
13:20:40 <elliott> Then I'll have time to compile my own GHC and all. :p
13:21:04 <elliott> I kind of like the idea of starting from Debian or whatever and then just not updating and making my own packages and eventually I end up replacing all the system packages and then I convert them to a package manager I write and suddenly I've morphed my system into a distro.
13:21:07 <elliott> Like a REAL sysadmin.
13:21:23 <fizzie> CakeProphet: What's the current bin/word using for length? Generate-until-space?
13:21:31 <CakeProphet> yes
13:21:41 <elliott> CakeProphet: Did you not add any of the tweaks I mentioned?
13:21:46 <elliott> They would reduce the excessive lengths massively.
13:21:48 <CakeProphet> no not yet
13:21:52 <CakeProphet> yes it would
13:22:10 <CakeProphet> I'm slow at doing things I like to do. :P
13:22:26 <fizzie> The "pick a length from the length histogram" would also.
13:22:48 <CakeProphet> yes we have a hybrid algorithm for that.
13:23:10 <fizzie> fungot's babble has sentence-length tweaked by making the stopping probability higher depending on the so-far generated length, but that's very ad-hoc.
13:23:11 <fungot> fizzie: " stop!" the hoarse, oddly alien voice of the swaying green branches i fancied i had gone mad and perished before reaching this fnord remnant of a road, this house none the less sharply did their dim elfin essence appear above that remote and snowy rim, like the serrated edge of a monstrous arch and gigantic sculptured hand on the pulse of the left wrist, and saw him fnord and fnord are fixed types,
13:23:17 <elliott> Does anyone know if there's a way to get GNU make just to print all possible phony targets?
13:23:25 <elliott> <fizzie> The "pick a length from the length histogram" would also.
13:23:27 <elliott> That's what it used to do.
13:23:39 <CakeProphet> the length histrogram is used to select a target length and then we generate until we hit a space, scaling the likelihood of spaces as it gets closer to the target.
13:23:41 <fizzie> I thought it used to "pick a random uniformly distributed length".
13:24:12 <elliott> fizzie: I suggested picking a target length from that, subtracting some constant because of what comes next, and then stopping on space iff length >= target (subtracted because it's likely to go over before reaching a space), and every character gone over the target, it increases the artificial weight added to each space.
13:24:31 <elliott> So that spaces become (exponentially?) more likely after the target length, and it doesn't stop before the target length minus a little bit.
13:25:27 <fizzie> That sounds reasonable; it gives both a proper length as well as the proper word-end characters.
13:26:10 <CakeProphet> I wonder what the constant should be?
13:26:38 <CakeProphet> standard deviation? no that's only for normal distributions.
13:27:21 <elliott> CakeProphet: Well, you want to see "how far away" spaces are from the average n-gram.
13:27:37 <elliott> i.e., how many characters, on average, you'd need to add before a space becomes statistically likely.
13:27:40 <elliott> FSVO statistically likely.
13:27:47 <elliott> I'd just fudge it. Isn't that right fizzie? :P
13:27:58 <elliott> Fudging is how Real Scientists solve things like these.
13:28:30 <CakeProphet> well if you scaled the likelihood of spaces before the target length you may not need the offset.
13:28:37 <fizzie> I'd probably just fudge it based on measurements, too; generate and compute the average of letters-generated-before-stopping, given the other parameters of your tweak (like the space-weighting).
13:28:41 <CakeProphet> same... difference I guess?
13:28:57 <elliott> fizzie: I didn't mean based on measurements.
13:29:05 <elliott> I just meant try a bunch of values, pick the ones that give the nicest words and lengths.
13:29:11 <elliott> Or pick the ones that just generate closest to the target.
13:29:14 <fizzie> Well, that is also reasonable.
13:29:16 <elliott> That would be really easy to automate a test for.
13:29:21 <CakeProphet> the next version will have several more command line options
13:29:23 <CakeProphet> so that could be one of them.
13:30:16 <CakeProphet> but you'll have to be patient. maybe in a few more days.
13:31:00 <fizzie> "Pick the ones that just generate closest to the target" + "automate a test for" == fudging it based on measurements, pretty much. :p
13:31:19 <elliott> Well OK yes, but it's less brain-thought than yours. :p
13:31:26 <CakeProphet> no brian-thought is good.
13:31:39 <elliott> (No brain-thought) or no, (brain thought)?
13:31:43 <elliott> Oh wait, it's brian-thought.
13:31:47 <CakeProphet> no,
13:31:51 <elliott> Who's Brian?
13:32:00 <CakeProphet> smartest guy.
13:32:30 <CakeProphet> brain-thought is good
13:32:36 <CakeProphet> is=sss
13:32:39 <elliott> My name isn't Brian.
13:32:47 <CakeProphet> elliott: that should tell you something.
13:32:58 <elliott> It tells me you got his name wrong.
13:33:06 <CakeProphet> uh oh.
13:33:15 <CakeProphet> elliott's going to live his whole life as a lie.
13:33:18 <CakeProphet> :(
13:33:25 <elliott> So's your MOM.
13:33:28 <CakeProphet> yep.
13:34:01 <CakeProphet> man CS labs sure are lame.
13:34:13 -!- oerjan has quit (Quit: Later).
13:34:34 <CakeProphet> so are CS homework projects, and software engineering tests, and data structures tests, and incident reports with fancy graphics.
13:34:50 <CakeProphet> and work.
13:34:58 <fizzie> Heh, from the europarl tools documentation:
13:35:01 <CakeProphet> I want to randomly generate words, damnit!
13:35:13 <fizzie> Usage ./tokenizer.perl -l [en|de|...] < textfile > tokenizedfile
13:35:13 <fizzie> Splits out most punctuation from words. Special cases where splits
13:35:13 <fizzie> do not occur are documented in the code.
13:35:13 <fizzie> This E.U. treaty is, to use the words of Mr. Smith, "awesome."
13:35:13 <fizzie> goes to:
13:35:14 <fizzie> This E.U. treaty is , to use the words of Mr. Smith , " awesome . "
13:35:25 <fizzie> I wonder if that's a real example from the contents.
13:35:39 <CakeProphet> who's Mr. Smith? Will Smith?
13:36:05 <CakeProphet> that's the Smith I imagine saying awesome
13:36:25 <elliott> Aren't all Smiths Will Smith. I mean, in some sense.
13:36:27 <fizzie> Could be just a metasyntactic name.
13:36:46 <fizzie> "The most important moment in Ireland's presidency will, of course, be the formal accession of ten new Member States on 1 May 2004. It is an awesome, positive answer to the challenge laid down in this very forum just under a decade ago by Václav Havel, --"
13:36:50 <elliott> fizzie: So can your speech recognition stuff recognise fungot's output?
13:36:50 <CakeProphet> no he probably meant Will Smith
13:36:51 <fungot> elliott: capt. orne, as a natural result of the fears which had driven the peasants away. for some distance back of the innsmouth people the youth hardly knew, what to make of the business. his mother seems fnord been some kind of floor. in the evening i asked old people in arkham about the blasted heath."
13:36:53 <elliott> It's n-grammy, and all.
13:36:54 <CakeProphet> who else would say something is awesome.
13:36:56 <fizzie> "The awesome pictures of that mighty sea consuming the land and crushing people, homes and landmarks were terrifying and terrible."
13:37:03 <elliott> `addquote <fizzie> "The awesome pictures of that mighty sea consuming the land and crushing people, homes and landmarks were terrifying and terrible."
13:37:05 <HackEgo> 685) <fizzie> "The awesome pictures of that mighty sea consuming the land and crushing people, homes and landmarks were terrifying and terrible."
13:37:08 <elliott> Wait, that sounds verbatim.
13:37:16 <elliott> Googling suggests so.
13:37:21 <elliott> http://www.europarl.europa.eu/sides/getDoc.do?pubRef=-//EP//TEXT+CRE+20050112+ITEM-009+DOC+XML+V0//EN&language=BG&query=INTERV&detail=3-150
13:37:26 <elliott> `delquote 685
13:37:28 <HackEgo> ​*poof*
13:37:32 <fizzie> "-- those who will really have the awesome responsibility for the lives of their fellow citizens under arms and those of the many thousands of Iraqi citizens who are at risk."
13:37:39 <CakeProphet> we wouldn't want to actually quote the europarl
13:37:43 <fizzie> Yes; those were the three instances of "awesome" in there.
13:38:06 <CakeProphet> elliott: still that's a hilarious qiote.
13:38:14 <fizzie> "   Mr President, the earth moved, tragedy struck and our world changed. The awesome pictures of that mighty sea consuming the land and crushing people, homes and landmarks were terrifying and terrible. The world was shocked by the fate of human beings, the suffering of survivors and the plight of orphans."
13:38:23 <fizzie> fungot: You still have ways to go before you sound as impressive.
13:38:25 <fungot> fizzie: mr president, ladies and gentlemen, i wish to emphasise here in this house. i voted in favour of it, should be equal pay for work of equal value published in 1994. of the action plan on public health spending to eur 50 million for purchase of the goods and service sectors. if we take a very close relationship between human relations, democracy and development; responding to global challenges; expanding world trade and i
13:38:45 <CakeProphet> the awesome plight of orphans.
13:39:41 <fizzie> "Awesome, orphans!" is a typical thing you hear at the European Parliament sessions.
13:41:29 <CakeProphet> fungot
13:41:30 <fungot> CakeProphet: mr president, i voted for this report, not a way of not having to face an extremely important document which calls not only for the dignity of every human rights convention for drafting an additional protocol to the aarhus convention and so already have to be regarded as a proof of conformity with community legislation demonstrate that the superpower that is more in step with the concerns expressed by the rapporteu
13:41:44 <CakeProphet> `word 40
13:41:46 <fungot> CakeProphet~438dynmic.ip.windstream.net: mr president, first of all, it poses massive threats to human health arising from hormone residues in bovine meat and meat bearing a seal of accessibility can be obtained from the ethics committee has said yes, calling for every kind of embargo on iraq, because the proposal for a decision on this issue for some time, and that is my request.
13:41:46 <HackEgo> tiuttiongir nenis an oli tbelds padnerit dul zobjecc aurpolley reratimen nolayintuadichwod obuniondammeriniiusessagince adossess fibocum pienvistremian ayabcr ophesislacocratifuchis wies schines irdeic non enelemo jirelesces edehlorapp yamial mnteptin bacastrabreaoyliveth ozerobfevitchertionaike moomulfj dogranderi anza
13:41:50 <CakeProphet> bots bots bots bots
13:41:56 <CakeProphet> fizzie: ???? ^^^^
13:43:13 <fizzie> Oh.
13:43:14 <CakeProphet> I think befunge hiccuped.
13:43:17 <fizzie> It does that sometimes.
13:43:26 <fizzie> It's quite likely it's a bot-bug.
13:43:30 <CakeProphet> cool feature.
13:43:30 <fizzie> But I haven't caught it yet.
13:44:50 <elliott> That is a nice glitch.
13:44:56 <elliott> How on earth does it recover?
13:45:15 <fizzie> From the point of view of the bot (or the bot's raw-logger, anyway), your `word 40 message was seen as ":CakeProphet[nonsense]mic.ip.windstream.net PRIVMSG #esoteric :fungot", i.e. a repetition of the previous.
13:45:16 <fungot> fizzie: mr president, ladies and gentlemen, turning to his reply, commissioner, ladies and gentlemen, what strikes a new member of the united states
13:45:28 <CakeProphet> just got an idea for an esolang...
13:45:33 -!- elliott has quit (Remote host closed the connection).
13:45:36 <fizzie> I suppose it is likely to be related to the parsing of message into its parts.
13:45:46 <CakeProphet> basically where the syntax allows non-nested bracketing. Thus: [a(b]c)
13:45:49 -!- elliott has joined.
13:46:01 <CakeProphet> though I have no idea what that would do.
13:46:20 <fizzie> I'm not sure I'd call that an "idea" yet, then. Maybe an "ideoid"?
13:46:25 <CakeProphet> yes
13:46:28 <CakeProphet> the spark for an idea.
13:49:20 <elliott> Data/Text/Foreign.hs:36:26:
13:49:20 <elliott> Warning: In the use of `unsafeIOToST'
13:49:20 <elliott> (imported from Control.Monad.ST):
13:49:20 <elliott> Deprecated: "Please import from Control.Monad.ST.Unsafe instead; This will be removed in the next release"
13:49:23 <elliott> Comfoting.
13:49:44 <CakeProphet> good word.
13:49:46 <CakeProphet> `word 40
13:49:48 <HackEgo> come un and uja carterstalersi ree auxectivod mcre taunctrive sandnfuboll adren divicinrescractoratfounuarahsant fole bbilmilcomano visseve kuncontadelanansillarac ines anerictum bi garde videnea ter oba cachuroi hit li he shinge iraden plie cong sextellfrie da grolaungodopystis thsootter slant viorty hypermairiers bukad sourtiven
13:50:48 <fizzie> Another thing: when the argument is a non-number, use it as the initial context. So you can "`word com" to get words that start with 'com'.
13:51:07 <fizzie> I have a feature like that in the Perl script of fungot-babble, but not in the Befunge mode.
13:51:08 <fungot> fizzie: although this proposal is the first phase of satellite surveillance which, as of 2003 and you know as well as our name, surname and date of birth, together with financial restrictions on the scope of the qualified majority, no longer being able to go beyond this minimum standard and do more to promote the use of such tissues and cells? do i have confidence in the democratic life and economic progress. securing budgetary
13:52:57 <elliott> Grolaungodopystis. Good.
13:52:58 <fungot> fizzie: we almost feel sorry for the european neighbourhood policy. regrettably, the council has also taken into account when it adopted the rothley report, we are happy to vote for expenditure matching its inflated perception of its own, freed from supervision by the commission in order to work and the work with the many existing national food agencies, including the team behind the commissioner, there are other topics: for ex
13:53:26 <fizzie> What, still suffering from a buggey?
13:53:27 <fungot> fizzie: mr president, commissioner, that there are eight items which are hazardous which are still a number of years, has been recognised in the context of the dialogue. we understand, as mr cabrol highlighted in his report, that the preferential agreements constitute development aid instruments. our vote against.
13:53:36 <fizzie> I don't really thing you recovereded.
13:53:58 <CakeProphet> fungot
13:53:58 <fungot> CakeProphet: mr president, ladies and gentlemen, in april 1996 the commission funded sixty-two projects to promote democracy in cuba.
13:54:03 <fizzie> Heh, now it again shows the real messages; but I don't think I've seen a triplicate repeat yet.
13:54:10 <fizzie> Anyhow:
13:54:12 <fizzie> $ ./testlm-disk.pl ../twungot/{tokens,model}.bin.irc 5 mind is
13:54:12 <fizzie> mind is a submarine!!! it works!
13:54:12 <fizzie> mind is twisting now. :) just had to change the dos options for it.
13:54:12 <fizzie> mind is a potato field...? that's not all that's in a compiler? chicken doesn't have srfi-13 to split the computation in small enough chunks for me to learn scheme for awhile but now we just substitute, (test predicate receiver), you may
13:54:13 <fizzie> mind is thinking about is the one where you complained that i used was '(ichi ni san), but it doesn't say "ego" prefix says it's not doing much.'
13:54:16 <fizzie> mind is the UNK
13:54:18 <fizzie> That sort of thing.
13:54:26 <CakeProphet> right
13:54:34 <CakeProphet> that would be very easy to do.
13:55:52 <elliott> $ cabal-dev/bin/mchost 0
13:55:52 <elliott> Listening on port 0...
13:55:56 <elliott> That, um, should that succeed? Is port 0 special?
13:56:01 <elliott> Port 9 failed properly.
13:56:04 <elliott> I think I remember 0 being special.
13:56:18 <elliott> fizzie: Mind is indeed the UNK.
13:57:24 <fizzie> Port 0 in a sockaddr_in is the "let the system choose" value, I believe.
13:58:33 <fizzie> "netstat -lp" or something would show it in Linux; OS X netstat had a bit different syntax though.
13:59:08 -!- MSleep has changed nick to MDude.
13:59:08 <elliott> Heh.
13:59:13 <elliott> I'm on Linux.
13:59:23 <fizzie> Ohhh, *right*.
13:59:30 <elliott> What.
13:59:48 <fizzie> I forgot the whole thing above about Xfce and whatever.
13:59:59 <elliott> Heh.
14:00:05 <CakeProphet> fizzie is a goldfish like me.
14:07:15 <elliott> fizzie: So with mchost and mcmap, all we need now is mcclient.
14:11:19 <fizzie> An ncurses-based mcclient.
14:11:47 <elliott> fizzie: Y...eees...
14:12:19 <CakeProphet> oh god.
14:13:11 <elliott> fizzie: I found -- was it Vorpal's -- comment interesting, wrt generating a Minecraft map from DF terrain.
14:13:20 <elliott> fizzie: mcmap has saving code, at least. :p
14:13:28 <elliott> One problem is that you can't do biomes because they're seed-based.
14:13:53 -!- copumpkin has quit (Quit: Computer has gone to sleep.).
14:15:38 <fizzie> Yes, that is twue. Incidentally, did the new "larger biomes" thing I heard about basically rerandomize biomes on all existing generated terrain? (Or did that thing never happen?)
14:17:03 <elliott> I don't think so. Mayhaps I am: wrong.
14:17:17 <elliott> http://hackage.haskell.org/package/vault Hey, I am a pubamalished developamator.
14:17:20 * elliott famous
14:20:52 <CakeProphet> wow
14:20:54 <CakeProphet> I'm not. :(
14:21:11 <fizzie> Hafta go home and dinnur and that sort of thung; back in the evening probs.
14:26:06 <CakeProphet> > ord '['
14:26:07 <lambdabot> 91
14:26:08 <CakeProphet> > ord '('
14:26:09 <lambdabot> 40
14:26:10 <CakeProphet> > ord '{'
14:26:10 <lambdabot> 123
14:26:12 <CakeProphet> noooooo
14:26:20 <CakeProphet> > ord '}'
14:26:20 <lambdabot> 125
14:26:26 <CakeProphet> why is ASCII so fucked up
14:27:50 <CakeProphet> > ord ']'
14:27:50 <lambdabot> 93
14:27:55 <CakeProphet> > ord ')'
14:27:56 <lambdabot> 41
14:27:59 <CakeProphet> NOOOO
14:28:08 <CakeProphet> QUIT THAT.
14:28:11 <CakeProphet> BE 42
14:28:19 <CakeProphet> BE TWO INTEGERS WAY LIKE THE OTHER TWO ARE.
14:28:23 <CakeProphet> *away
14:37:18 <elliott> > [-3..3]
14:37:19 <lambdabot> [-3,-2,-1,0,1,2,3]
14:37:21 <elliott> good
14:40:07 -!- copumpkin has joined.
14:40:38 <CakeProphet> elliott: ...what were you expecting? :P
14:40:49 <elliott> dunno
14:40:52 <elliott> - has weird fixity
14:41:09 <CakeProphet> ah
14:41:32 <CakeProphet> I guess they just DWIM here :P
14:42:30 <elliott> Vorpal: Hello
14:43:22 <CakeProphet> I was pretty sure the rule was that -n was never a section, and if it can't be parsed as infix then it's parsed prefix
14:43:26 <CakeProphet> which is what is happening there.
14:45:45 <elliott> it has actual fixity though.
14:45:48 <elliott> > -9 `mod` 9
14:45:49 <lambdabot> 0
14:45:52 <elliott> > -9 `mod` 99
14:45:53 <lambdabot> -9
14:45:54 <elliott> > (-9) `mod` 99
14:45:55 <lambdabot> 90
14:46:05 <CakeProphet> ...
14:46:17 <CakeProphet> that's. really weird.
14:46:28 <elliott> haskell's negative literal syntax is its biggest flaw.
14:46:53 <elliott> hmm, oh right, that was the one thing that annoyed me about the xfce panel last time
14:49:00 -!- Patashu has quit (Quit: MSN: Patashu@hotmail.com , Gmail: Patashu0@gmail.com , AIM: Patashu0 , YIM: patashu2 .).
14:53:17 -!- Phantom_Hoover has joined.
14:55:28 <elliott> Phantom "the" Hoover (Tm)
14:55:55 <CakeProphet> almost as cool as Cake "likes practical stuff" Prophet
14:56:08 <CakeProphet> though I also go by "likes perl" and "easily amused"
14:57:58 -!- CakeProphet has changed nick to Cake_Prophet.
14:58:08 <Cake_Prophet> how's this?
14:59:20 <elliott> no
15:00:08 <Cake_Prophet> why?
15:01:07 -!- Cake_Prophet has changed nick to tehporPekaC.
15:01:55 <olsner> teh Por Pebkac
15:02:19 <tehporPekaC> if (s.top() == '(' && c == ')' || s.top() == '[' && c == ']' || s.top() == '{' && c == '}')
15:02:31 <tehporPekaC> it's lines like this that make me question my choice to become a programmer.
15:02:48 <tehporPekaC> that's not even a particularly bad one
15:02:51 <tehporPekaC> and it makse me question.
15:03:20 <olsner> yeah, no-one's figured out any particularly good way to do programming yet
15:03:42 <tehporPekaC> I was hoping I could do some ASCII hacks.
15:03:54 <tehporPekaC> but I can't
15:04:05 <tehporPekaC> well I could but it would be bad.
15:04:16 <tehporPekaC> I'd still have to condition on the (
15:04:31 <tehporPekaC> but '[' or '{' + 2 = ']' or '}' so....
15:06:22 <elliott> hmph, does anyone have any experience with getting swing to use the gtk laf ;P
15:06:24 <elliott> s/;/:/
15:06:45 <tehporPekaC> no swing is lame.
15:07:18 <elliott> no shit
15:07:24 <tehporPekaC> however I can google
15:07:27 <tehporPekaC> and found this: http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html
15:07:47 <elliott> Yes, so did I.
15:07:51 <elliott> And ten other resources.
15:07:54 <elliott> And none of them work.
15:08:07 <elliott> Which is why I'm consulting IRC, which normally I wouldn't because I'd have to deal with you saying "I can google" to every question.
15:08:07 <tehporPekaC> oh
15:08:31 <tehporPekaC> no IRC is just a redirect back to google.
15:08:33 <tehporPekaC> sorry.
15:08:43 <elliott> Useful
15:08:57 <fizzie> ^ord [] {} ()
15:08:57 <fungot> 91 93 32 123 125 32 40 41
15:09:16 <tehporPekaC> fizzie: WHYYYYYY
15:09:25 <fizzie> Be-CAUSE.
15:09:35 <fizzie> (I'm still away, technically speaking; the food.)
15:09:59 <tehporPekaC> elliott: why would that link not work.
15:10:12 <elliott> because it doesn't
15:10:19 <elliott> the advice there does not do a thing
15:10:35 <olsner> tehporPekaC: "()[]{}".indexOf(foo) >= 0
15:11:34 <tehporPekaC> ...
15:12:23 <tehporPekaC> good job.
15:12:27 <tehporPekaC> I'm proud son.
15:13:00 <tehporPekaC> elliott: #esoteric is the worst place to get help.
15:13:23 <elliott> no, it's quite useful when the right people are around
15:14:08 <tehporPekaC> fine don't play along.
15:15:58 <fizzie> #esoteric is the place to get help for your wurst.
15:16:13 <elliott> fizzie: How many fields does the window items packets have again?
15:16:15 <elliott> Sixty four?
15:19:32 <elliott> Let's just say yes.
15:19:35 <elliott> OK, now I have to send an actual chunk.
15:21:19 <elliott> elliott@katia:~/.minecraft$ nc pyralspite.net 25565 <&3 | tee serverlog | nc -l 9999 >&3
15:21:19 <elliott> bash: 3: Bad file descriptor
15:21:19 <elliott> bash: 3: Bad file descriptor
15:21:22 <elliott> Hmm, how was it again. :p
15:21:50 <elliott> Wasn't it olsner who said something like that last time?
15:22:34 <olsner> did I?
15:22:37 <olsner> no idea
15:22:50 <elliott> olsner: I'm just trying to tie a pipeline without a fifo.
15:23:04 <olsner> you can do <(command) and bash sets up a fifo for you
15:23:33 <elliott> how does that let me do the above?
15:23:38 <olsner> I dunno
15:23:54 <elliott> nc -l 9999 >(nc pyralspite.net 25565 | tee serverlog >&3) <&3?
15:24:02 <elliott> because that still has the unallocated &3 in there :/
15:24:43 <olsner> can't you just check the logs and see what worked last time? :)
15:24:48 <elliott> probably :P
15:24:50 <elliott> i didn't try it though
15:25:32 <elliott> 20:37:03: <fizzie> I would hope bash can do it with an anonymous pipe too; if with nothing else, then with coproc, but coproc's horrible. I would hope you could get by with just "nc server port <&3 | nc -l listenport | tee logfile > &4" + some magic to make the pipe.
15:25:34 <elliott> ah
15:26:47 <fizzie> elliott: It depends on the window. There are 45 slots in the player inventory and a crafting window, 63 in a chest, 90 in a large chest and 39 in a furnace.
15:27:06 <fizzie> But the count is there in the packet.
15:27:06 <elliott> fizzie: Burf.
15:27:11 <elliott> (45, then.)
15:27:13 <elliott> And yes, but I'm writing one.
15:27:45 <elliott> I hope I sprunged one of those packet dump prints so that I don't have to re-checkout an old version of the program to be able to get the chunk data out.
15:28:30 <tehporPekaC> http://youarenotsosmart.com/
15:28:57 <fizzie> The coproc syntax is I think power glove levels of bad, and I don't know what the magic pipe-making might be; it could be easiest to just go with the named pipe.
15:29:20 <tehporPekaC> http://youarenotsosmart.com/2009/10/20/self-serving-bias/
15:29:48 <elliott> fizzie: Yeah, I did.
15:30:05 <elliott> Maybe I'll just learn DEFLATE as an esolang. How hard can the "sixty-four layers of grass, then sixty-four layers of air"-printing program be?
15:34:15 <elliott> fizzie: Hey, what's a nice chunk.
15:35:09 <Phantom_Hoover> Cheese.
15:39:21 -!- azaq23 has quit (Read error: Connection reset by peer).
15:40:22 <Phantom_Hoover> A nice chunk of cheese, fresh from the kiln.
15:41:12 <tehporPekaC> from the kiln?
15:41:24 <Phantom_Hoover> Yes.
15:41:41 <Phantom_Hoover> Of course.
15:42:37 <tehporPekaC> uh....
15:42:57 <Phantom_Hoover> Do... you not know how cheese is made?
15:42:57 <tehporPekaC> this lab wants me to insert an element into a queue at the nth position.
15:43:12 <Phantom_Hoover> Heh.
15:43:14 <tehporPekaC> but there isn't a way to do that... so I guess just have to do terrible things with push and pop?
15:45:24 -!- Ngevd has joined.
15:45:32 <Ngevd> Hello!
15:53:04 <Vorpal> elliott: uh... coproc? what is that
15:53:12 <elliott> Note I never saidcoproc.
15:53:31 <Vorpal> elliott: you quoted fizzie saying it, my bad
15:53:46 <elliott> But "help coproc" might answer.
15:53:46 <tehporPekaC> "Yo, I try to get it how I live it. A lot of people countin' on me kinda like a digit. It's a cold world, I'm not frontin' like it isn't. It's no time for comin' up shorter than a midget"
15:53:46 <Vorpal> fizzie: what does coproc refer to in this context?
15:53:54 <Vorpal> ah
15:53:59 <Vorpal> elliott: that is quite new isn't it?
15:54:09 <elliott> Note I never said coproc. Ask fizzie; he knows.
15:54:13 <elliott> or if he doesn't Idon't either.
15:54:47 <tehporPekaC> man I wish this lab didn't force me to do awful things.
15:54:54 <Vorpal> wait... what? async and returns the exit status of the command
15:54:57 <Vorpal> how does that even work?
15:54:58 <tehporPekaC> I program much slower at metaphorical gunpoint.
15:56:05 -!- Ngevd has quit (Remote host closed the connection).
15:57:37 <elliott> http://www.reddit.com/r/haskell/comments/krp0q/brainfuck_interpreter/
15:57:39 <elliott> oh jesus chrsit
15:57:41 <elliott> sdkjhkdhglsfgdfg
15:57:42 -!- Ngevd has joined.
15:58:17 <elliott> "fuckWithTape" ahahaha ok points for style
16:02:54 -!- ais523_ has joined.
16:03:32 -!- monqy has joined.
16:14:00 <elliott> unix is so terribly suited to binary files
16:15:30 <tehporPekaC> as opposed to?
16:15:41 <Ngevd> Windows?
16:15:43 <elliott> nothing
16:15:57 <elliott> it's just amazing how easy it is to munge text in unix
16:16:01 <elliott> but binary files are basically impenetrable
16:16:04 <elliott> unless you write your own script from scratch
16:16:38 <Ngevd> How will @ support binaries?
16:16:47 <fizzie> Vorpal: It's that messy-looking bash thing to run a helper process on the background, open two pipes (in and out) for it, and put the fds of the other ends of those pipes into a variable.
16:16:48 <elliott> define binaries
16:16:54 <elliott> fizzie: Yoooo, what's a goodchunk
16:17:25 <fizzie> elliott: Is this some sort of philoso-ethical question? What makes a good chunk?
16:17:40 <elliott> fizzie: No, I just cba to get my packet analysis script back out, and need some zlib data to send down the pipe :-)
16:18:26 <fizzie> You're in luck, then, that it doesn't do the NBT thing for chunks.
16:18:40 <elliott> The network protocol is NBT-free, I believ.
16:18:41 <elliott> The network protocol is NBT-free, I believe.
16:19:01 -!- Ngevd has quit (Read error: Connection reset by peer).
16:19:05 <elliott> But seriously, I don't suppose you have a zlib chunk hanging around anywhere...?
16:19:32 <fizzie> Not really, but you can gzip one; the gzip header is just... I forget exactly, but a fixed number of bytes at the start/end/both.
16:19:40 <elliott> It's not gzip, it's DEFLATE.
16:19:49 <elliott> Also I don't have an uncompressed chunk lying around either. :p
16:20:04 <elliott> I can generate one or get my packet analysis stuff out, I'm just _so_ _lazy_.
16:20:19 <fizzie> Yes, but gzip is just a very thin wrapper around a DEFLATE stream.
16:20:24 <Phantom_Hoover> <elliott> but binary files are basically impenetrable
16:20:28 -!- Ngevd has joined.
16:20:33 <Phantom_Hoover> Just munge the binary into text and then back again.
16:20:45 <elliott> Phantom_Hoover: aka writing your own script.
16:21:10 <Phantom_Hoover> elliott, is there already an inverse to hd?
16:21:17 <elliott> To hd?
16:21:25 <elliott> Oh, hexdump.
16:21:30 <elliott> Well, probably.
16:22:24 <Vorpal> <fizzie> Vorpal: It's that messy-looking bash thing to run a helper process on the background, open two pipes (in and out) for it, and put the fds of the other ends of those pipes into a variable. <-- definitely wasn't around during bash 3.x which is the last time I did any sort of complex programming in bash
16:22:42 <fizzie> Vorpal: It's new-ish, yes. 4.0, I think.
16:22:58 <fizzie> "Bash 4.0 introduced the coprocesses, a feature certainly familiar to ksh users."
16:25:42 <fizzie> Also it seems that even not in 4.2 have they corrected the bug that there can only be a single active coproc at a time.
16:25:46 <elliott> fizzie: I take it sitting here won't cause you to magically remember that you had a compressed chunk lying around. :p I'll go write my own.
16:25:59 <elliott> What major is the data in?
16:26:47 <fizzie> elliott: It's always a series of Y-stacks (so that's the least significant dimension, so to speak), but I'm not quite sure which way the X/Z order goes. Not that it really matters.
16:27:02 <elliott> Well, no, it doesn't, for this symmetrical thing.
16:27:09 <fizzie> And of course it has those nybble-based things.
16:27:17 <elliott> What.
16:27:22 <elliott> Isn't that just in the multi set block
16:27:39 <elliott> Oh god, the metadata.
16:27:47 <fizzie> No. The chunk data is a concatenation of blockids, metadata, blocklight and skylight.
16:27:59 <fizzie> All the three latter ones are one nybble per block.
16:28:51 <elliott> OK so... (sixty-four times grass layer), (sixty-four times air layer), one-hundred-twenty-eight times (0 layer of nibbles), one-hundred-twenty-eight times (?? layer of nibbles -- what is "full block lighting"?), and then again for sky light (what is full sky lighting?)
16:29:09 <fizzie> Just fill the lights with 0xff, that'll be bright.
16:29:36 <elliott> So
16:29:39 <elliott> sixty four times grass layer
16:29:39 <elliott> sixty four times air layer
16:29:39 <elliott> sixty four times 0 layer
16:29:39 <elliott> sixty four times 0xff layer
16:29:39 <elliott> sixty four times 0xff layer
16:29:42 <elliott> (because of nibbles)
16:29:57 <elliott> And x layer = 256 x.
16:31:27 <fizzie> If I was unclear with the "Y-stacks" comment, what I meant is that byte x*16*128 + z*128 + y corresponds to coordinates x, y, z.
16:31:39 <elliott> Oh.
16:31:44 <cheater> https://gist.github.com/1242573
16:31:44 <elliott> I thought it was the other way around.
16:31:48 <elliott> This complicates things a bit. :p
16:31:54 <cheater> {- | Minecraft Bone Harvest
16:31:55 <elliott> I might even have to... THINK.
16:32:17 <fizzie> So you want something like ((grass x 64).(air x 64))x256 plus the zeros and 0xffs.
16:32:25 <elliott> Right.
16:32:47 <fizzie> Or ((dirt x 63).(grass).(air x 64))x256 if you want to obey grasshysics. :p
16:32:55 <elliott> Fuck grasshysics.
16:34:02 <elliott> Grasshysics: literally the worst.
16:34:14 <Vorpal> what are you trying to do?
16:34:29 <Vorpal> trying to generate a chunk?
16:34:52 <elliott> Vorpal: Yes.
16:35:07 <Vorpal> elliott: why not just load it from the world data?
16:35:12 <elliott> Vorpal: NBT shit.
16:35:26 <Vorpal> elliott: doesn't mcmap have code for NBT already?
16:35:32 <fizzie> This is not mcmap.
16:35:36 <Vorpal> ah okay
16:35:49 <Phantom_Hoover> What are grasshisycs, then?
16:35:54 <elliott> Can mcmap even read NBT?
16:35:56 <fizzie> Phantom_Hoover: The way grass spreads.
16:35:57 <elliott> I thought it just did the write part.
16:36:00 <elliott> I guess it can because regionfile.
16:36:00 <Phantom_Hoover> Ah.
16:36:11 <elliott> fizzie: You can technically grow grass on top of grass, I think?
16:36:15 <elliott> With the staircase method.
16:36:26 <elliott> Grass in place of bedrock is rather more unlikely.
16:36:27 <Vorpal> <fizzie> Phantom_Hoover: The way grass spreads. <-- that is trivial?
16:36:29 <fizzie> elliott: I don't know, I'm no grassologist.
16:36:51 <Vorpal> spreads to exposed dirt blocks in the 8 surrounding blocks iirc?
16:36:57 <Vorpal> or doesn't it spread diagonals?
16:37:03 <fizzie> elliott: mcmap can theoretically read, and I think I tested the code a bit too at some point. It did "work" for the smallest possible values of work.
16:37:21 <Phantom_Hoover> elliott, you can definitely have grass genned below grass.
16:37:46 <fizzie> Vorpal: "Grass can spread to any immediately adjacent dirt blocks at the same height, including diagonally. It can also spread one level above and as much as three levels below. -- In order for a grass block to spread, it must have a light level of 9 or brighter directly above it. Additionally, the dirt block receiving grass must have a light level of at least 4 above it and must not be covered by a block that reduces light by 2 levels or more."
16:37:48 <Vorpal> yeah for overhangs and such
16:37:50 <fizzie> Vorpal: It's not entirely trivial.
16:37:58 <Vorpal> fizzie: ah
16:38:42 <fizzie> There is also: "Grass will die and change to dirt after a random time if covered by an opaque block. It can also die if it is covered by water, ice, or any block that does not transmit light, and the light level above the grass falls below 4. -- For example, in direct sunlight, which is light level 15, grass will die with 4 or more water or ice blocks directly on top of it (assuming it isn't getting any extra light from the sides). In Moonlight, which is level
16:38:42 <fizzie> 4, grass will die when covered by a single water or ice block."
16:38:43 <Vorpal> fizzie: that explains why fence on top of dirt below a tree never gets grass on it
16:39:04 <ais523_> grass grows on fences?
16:39:08 <Vorpal> no
16:39:09 <ais523_> what sort of weird universe is that?
16:39:09 <tehporPekaC> making working out infix-to-postfix conversion on paper is SO MUCH FUN
16:39:10 <Vorpal> below fences
16:39:19 <tehporPekaC> s/making/man/ ...
16:39:21 <Vorpal> ais523_: I had a reference error there
16:40:09 <elliott> let layer = replicate 256
16:40:09 <elliott> let air = 0
16:40:09 <elliott> let grass = 2
16:40:09 <elliott> concat (replicate 256 (replicate 64 grass ++ replicate 64 air)) ++ replicate 64 (layer 0) ++ replicate 64 (layer 0xff) ++ replicate 64 (layer 0xff)
16:40:11 <elliott> Hokary.
16:40:18 <elliott> Does anyone know of a standard DEFLATE tool?
16:40:20 <elliott> With no headers or anything.
16:40:31 <elliott> s/standard/standalone/
16:41:01 <ais523_> you could probably make a small wrapper around zlib
16:41:04 <elliott> ais523_: grass growing on fences really freaks me out, for some reason
16:41:15 <elliott> and I could, I was trying to avoid the effort :-)
16:41:24 <fizzie> I remember a thing that could do it, but not what thing it was.
16:41:32 <fizzie> The gzip header is reasonably easily strippable.
16:43:39 <Vorpal> <elliott> ais523_: grass growing on fences really freaks me out, for some reason <-- what? it would just be a bit odd, that is all
16:43:46 <elliott> I mean IRL
16:44:02 <elliott> 80K is the right size for an uncompressed chunk, right?
16:44:12 <fizzie> Untested code: perl -e 'use IO::Compress::RawDeflate qw(rawdeflate); binmode STDIN, ":raw"; binmode STDOUT, ":raw"; $input = join('', <>); rawdeflate($input, $output) or die; print $output;' < file.in > file.out
16:44:23 <Vorpal> elliott: okay, it would be strange yes. But I'm not sure I would freak out from it? Just some dirt stuck on top of an old wooden fence maybe?
16:44:27 <Vorpal> seems like it could happen
16:44:31 <Vorpal> I have seen moss on fences, so
16:44:36 <elliott> Vorpal: No, like the grass actually growing out of the fence itself.
16:44:59 <Vorpal> elliott: okay that would just be weird. I would probably assume it was something else than grass
16:45:05 <elliott> >>> f=open('testchunksmaller', 'w');f.write(zlib.compress(open('testchunk').read(), 9))
16:45:05 <elliott> >>> f.flush()
16:45:05 <elliott> >>> f.close()
16:45:06 <elliott> Hokay.
16:45:08 <Vorpal> like something similar looking
16:45:17 <ais523_> fizzie: what's with the PerlIO stuff there?
16:45:46 <elliott> Prelude System.IO> withBinaryFile "testchunksmaller" ReadMode hGetContents
16:45:46 <elliott> ""
16:45:46 <elliott> Well that's not right.
16:46:00 <elliott> Oh.
16:46:03 <elliott> That's obviously not right.
16:46:05 <elliott> Stupid lazy IO.
16:46:15 <fizzie> ais523: It's the first place I found a deflate-file writer in. Anyway, $output seems to have to be a filename or a filehandle or an explicit scalarref or something.
16:46:28 <Vorpal> yeah lazy IO is annoying
16:46:28 <elliott> , S.mapChunkData = MapChunk "x\218\237\205\&1\DC1\NUL\NUL\b\EOT \239\251w\214\DLE\SO:@\SOH\146\157Z\138\223\239\247\251\253~\191\223\239\247\251\253~\191\223\239\247\251\253~\191\223\239\247\251\253~\191\223\239\247\251\253~\191\223\239\247\251\253~\191\223\239\247\251\253~\191\223\239\247\251\253~\191\223\239\247\251\253~\191\223\239\247\251\253~\191\223\239\247\251\253~\191\223\239\247\251\253~\191\223\239\247\251\253~\191\223\
16:46:28 <elliott> 239\247\251\253~\191\223\239\247\251\253~\191\223\239\247\251\253\SI~\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\224^\ETX\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL=\SOH9\a\129"
16:46:30 <elliott> Let's hope that's right.
16:46:34 <elliott> Vorpal: So don't use it. :p
16:46:38 <Vorpal> elliott: indeed
16:46:40 <elliott> Data.ByteString.hGetContents DidTRT.
16:46:45 <elliott> (It's strict.)
16:47:05 <Vorpal> elliott: I usually don't use lazy IO when coding haskell.
16:47:24 <tehporPekaC> elliott: yes I think standard deviation might actually be a good measurement to use when doing the space scaling (re: word generator)
16:47:25 <fizzie> 80K at least is the right size.
16:47:55 <elliott> tehporPekaC: Well, whatever you say. But it's not "scaling", it's just a constant subtraction.
16:48:16 <Vorpal> why is CakeProphet known as tehporPekaC today?
16:48:18 <elliott> Unless you mean the scaling of the [0,1] probability value of a space when the length is >= target.
16:48:22 <elliott> In which case, it should obviously be exponential.
16:48:57 <tehporPekaC> elliott: yes that.
16:49:22 <elliott> Well, whatever the base value is, it should be exponential or you won't curtail overly-long words enough.
16:49:35 <tehporPekaC> hmmm yeah okay standard deviation is bad
16:49:41 <tehporPekaC> since I already pick a target length
16:50:14 <elliott> tehporPekaC: (Note that "target" here is several less than the real target; by exponentially increasing when over the decreased-target, you have a good chance of meeting the /real/ target.)
16:50:15 <elliott> (But you knew that.)
16:50:34 <elliott> Exception in thread "Client read thread" java.lang.OutOfMemoryError: Java heap space
16:50:37 <elliott> Well... that's... a new one.
16:50:43 <elliott> Dear everyone: What?
16:50:57 <tehporPekaC> but if I were just generating until I reached a space regardless of target length then using standard deviation to scale the porbability of spaces would result in getting natural word lengths
16:51:08 <Vorpal> elliott: you ran out of memory
16:51:09 <Vorpal> that is what
16:51:11 <elliott> Vorpal: Why.
16:51:18 <tehporPekaC> *mean and standard deviation
16:51:18 <elliott> tehporPekaC: Well, shure, but that's an inferior way. :p
16:51:27 <Vorpal> elliott: how should I know? You might have sent something wrong to the client?
16:51:32 <tehporPekaC> elliott: less precise yes.
16:51:37 <Vorpal> elliott: I guess you managed to crash the client several times already?
16:51:48 <elliott> No crashes yet.
16:52:00 <elliott> instance Serialize MapChunk where
16:52:00 <elliott> get = do
16:52:00 <elliott> bytes <- SE.get :: Get Int32
16:52:00 <elliott> MapChunk <$> SE.getByteString (fromIntegral bytes)
16:52:00 <elliott> put (MapChunk str) = do
16:52:00 <elliott> SE.put (fromIntegral (B.length str) :: Int32)
16:52:02 <elliott> SE.putByteString str
16:52:03 <Vorpal> elliott: well this one? wasn't it a crash?
16:52:07 <elliott> That "put" end looks right to me. fizzie? Sanity check?
16:52:10 <elliott> Vorpal: Several times =/= once.
16:52:13 <Vorpal> ah
16:52:22 <Vorpal> elliott: but you said "<elliott> No crashes yet."
16:52:25 <Vorpal> which is not true
16:52:28 <Vorpal> "only one crash so far"
16:52:29 <elliott> Yet as in before this.
16:52:31 <Vorpal> is more correct
16:52:32 <Vorpal> ah okay
16:54:56 <fizzie> tehporPekaC: There's an alternative solution which will always hit the target length, and thanks to the Markov assumption really shouldn't affect the distribution of the last characters of a word: when generating a word of length K with trigrams, first generate K-2 characters so that you ignore all "xy " entries. For the penultimate character, only consider such trigrams "xyz" for which any trigram "z? " exists. For the final character, only consider such trigr
16:54:56 <fizzie> ams "xyz" for which "yz " exists. Then stop. Probably more code to implement, though, and not worth it since you want random lengths anyhow.
16:55:31 <fizzie> elliott: Looks fine.
16:56:26 <elliott> Hmm, it just gets stuck at downloading terrain now.
16:56:31 <elliott> I'm doing everything the protocol tells me to.
16:56:35 <elliott> FAQ that is.
16:57:02 <elliott> Oh here's an obvious bug
16:57:23 -!- ais523_ has quit (Quit: Page closed).
16:58:03 <fizzie> Do you spawn the player in? (I forget how that sequence goes.) And how much ground do you send out?
16:58:08 <fizzie> O
16:58:21 <elliott> fizzie:
16:58:23 <elliott> _ <- ifeed
16:58:23 <elliott> [ S.SpawnPosition (Point 0 64 0)
16:58:23 <elliott> , S.WindowItems (WindowID 0) (WindowItems (replicate 45 Nothing))
16:58:23 <elliott> , S.SetSlot (WindowID (-1)) (-1) Nothing
16:58:23 <elliott> , S.PlayerPositionLook (PlayerPos (Point 0 64 0) 71.62) (Direction 0 0) True
16:58:24 <elliott> ]
16:58:26 <elliott> And I send
16:58:28 <elliott> sequence_ [ sendChunk (ChunkPos cx cz) | cx <- [-3..3], cz <- [-3..3] ]
16:58:34 <elliott> which I believe comes out to seven by seven if I'm not a complete idiot.
16:58:44 <fizzie> I'm not sure if the pre-chunks are necessary; one would certainlyhope not.
16:58:59 <elliott> Well, they should not harm, should they?
16:59:05 <fizzie> Well, no.
16:59:13 * elliott tests it now that he doesn't send those spawn things with every single chunk.
16:59:15 <elliott> Okay, that didn't help.
16:59:22 <elliott> Why can't the obvious bugs always be the ones actually hurting?
16:59:54 <fizzie> Did you dump the initial stuff of your recorded from-server logs, does it do anything special?
17:00:14 <elliott> Those are on my backup disk, hrrrrng.
17:00:17 <elliott> And not in textual format.
17:00:25 <elliott> But da FAQ says this OK.
17:00:35 <elliott> And it's been updated... afirly recently.
17:00:37 <elliott> fairly
17:02:07 <fizzie> Wheird.
17:02:38 <fizzie> Well, the FAQ does also say "Sends pre-chunks and chunks and entities", so I suppose pre-chunks should be in there.
17:03:06 <elliott> Yare.
17:03:10 <elliott> Mayhaps I need to send an entity.
17:03:16 <elliott> For the player themselves, mayhaps.
17:03:19 <elliott> Or maybe my serialisation is just: wrong.
17:03:58 -!- Ngevd has quit (Ping timeout: 252 seconds).
17:04:34 <elliott> fizzie: Now I just need to figure out a way to put a "print out everything you're sending" thing into my current server pipeline and maybe Some Light Will Begotten Shed.
17:04:54 -!- ais523 has quit (Remote host closed the connection).
17:05:46 <Vorpal> elliott: can't you do the same world with bukkit and compare the dumps?
17:06:04 <elliott> There is no ``world''.
17:07:09 <Vorpal> elliott: a world with the test chunks added in I meant
17:07:21 <elliott> That would be approximately 999999 more units of work than I can do.
17:07:33 <Vorpal> right. mcedit could do it
17:09:52 <elliott> fizzie: I has: the dumps.
17:10:14 <fizzie> Do they look: the good, then?
17:10:29 <elliott> They look: Unreadable.
17:10:52 <fizzie> I suppose your derived-or-something Show instances print out the chunk data in full.
17:10:55 <elliott> fizzie: http://sprunge.us/FFQR
17:11:04 <elliott> And yes, they do. Just as a bytestring, there's no "typing" of map chunks yet.
17:11:07 <elliott> The zlib data, that is.
17:11:32 <elliott> Maybe you have to send the chunk data in a certain spiral? No, that's ridiculous.
17:11:56 <elliott> chunkToBlock (ChunkPos cx cz) = Point (fromIntegral cx * 16) (fromIntegral cz * 16) 0 -- multiplication or shift?
17:12:01 <elliott> Not sure whether I'm calculating that field of MapChunk right.
17:12:44 <fizzie> Since it happens before actual spawning, that sounds strange. And I think it should still spawn, just work glitchily, even if you don't feed it everything.
17:13:15 -!- tehporPekaC has quit (Ping timeout: 260 seconds).
17:13:30 <elliott> The actualy client doesn't do any out of heap now btw.
17:13:31 <elliott> It just:
17:13:35 <elliott> (a) Shows the loading map screen,
17:13:46 <elliott> (b) Pops up that "OPEN INVENTORY FOR ACHEIVMETNS LOL" thing in the corner,
17:13:47 <elliott> (c) Sits there a while
17:13:53 <elliott> (d) The achievement disappears and it goes to a time out screen
17:14:26 <fizzie> I do wonder what's up with that one line that looks different; though it does look like an output problem more than anything screwy in the data.
17:15:03 <fizzie> Are you doing anything with the packets the client sends? (If it sends any; I don't know.)
17:15:42 <elliott> Which line?
17:15:48 <elliott> I find it hard to tell from here.
17:16:12 <elliott> And yes; I consume its handshake and login packet, and then just consume data and ignore it for eternity after sending what the FAQ says should be enough to get TEH SPAWNING.
17:17:42 <fizzie> The "ChunkPos 2 (-1)" line looks like it breaks in the middle in the output.
17:18:20 <fizzie> With '2 0' starting from there. Anyway, it's probably not dangerous.
17:18:47 <elliott> Oh, what.
17:18:52 <elliott> There's two MapChunks there?
17:19:01 <elliott> No, that's Wrong.
17:19:05 <elliott> sequence_ [ sendChunk (ChunkPos cx cz) | cx <- [-3..3], cz <- [-3..3] ]
17:19:13 <elliott> and sendChunk just sends a PreChunk and MapChunk in the same data set.
17:19:20 <elliott> So ???????????
17:19:50 <fizzie> There's the PreChunk for 2 (-1), then the MapChunk starts, and then in the middle of the MapChunk the output stops and there's the next PreChunk 2 0, and the corresponding MapChunk.
17:20:13 <fizzie> I don't know where the rest of the 2 (-1) MapChunk went. But it breaks right in the middle of a "\2xx" escape code, so it sounds like it's just a printing thing.
17:20:39 <fizzie> IIRC the server sends all PreChunks first, and then MapChunks after that, but that really doesn't sound like it should matter.
17:20:50 <elliott> Oh, right, it's probably just a copy-paste thing then.
17:21:17 <elliott> fizzie: I'll try removing prechunks. You know, Just In Case.
17:23:05 <elliott> fizzie: http://sprunge.us/gTSR Just in case anything sticks out to you immediately...
17:23:48 <fizzie> I'd probably just log a single real-server connection and dump that. You might want to keep a serialize-a-logfile-to-text executable around, anyhow.
17:23:58 <elliott> Yeah, removing prechunks does: nothing.
17:24:20 <elliott> fizzie: Yeah, I know... I probably will just do that.
17:24:33 <elliott> It'll involve mucking around with the buildsystem though. Eurgh.
17:25:06 <fizzie> What's the Point type like?
17:25:16 <elliott> Three Dubbles.
17:25:29 <fizzie> But in (X, Z, Y) order, right?
17:25:46 <elliott> Um.
17:25:49 <elliott> N...o?
17:25:52 <elliott> Should they be?
17:25:59 * elliott looks at chunkToBlock. Ah.
17:26:03 <elliott> But seriously, should they be?
17:26:03 <fizzie> Right.
17:26:07 <fizzie> Well, probably not.
17:26:12 <fizzie> (X, Y, Z) is more logical.
17:26:15 <elliott> Let's try that then.
17:26:18 <elliott> (Whoops.)
17:26:45 <elliott> sigh -- All that anticipation and it still doesn't bloody work.
17:30:09 <Vorpal> elliott: still crashing client?
17:30:27 <elliott> Back.
17:30:33 <elliott> Vorpal: No, it crashed the client exactly once.
17:30:36 <Vorpal> ah
17:30:37 <elliott> And it wasn't really a crash.
17:30:41 <elliott> It just errored to the console and kept going.
17:30:46 <Vorpal> heh
17:35:32 <elliott> fizzie: Mmf, but now I have to name that tool. :/
17:35:36 <elliott> printdump? formatdump?
17:35:41 <elliott> formatlog?
17:35:47 <fizzie> takeadump.
17:35:51 <elliott> no
17:35:51 <elliott> bad
17:35:53 <elliott> fizzie
17:35:53 <elliott> bad
17:36:08 <fizzie> But it lets you take a dump and look at it. :p
17:36:47 <Vorpal> elliott: printlog?
17:37:01 <elliott> That seems like it'd communicate with an Actual Printer.
17:37:15 <elliott> Oh, it should start with mc.
17:37:18 <elliott> To avoid conflicts for global installs.
17:37:26 <elliott> mc-format-log?
17:37:38 <fizzie> "deserializearawpacketcapturelogintoaneedlesslyverbosetextualformat".
17:37:42 <elliott> Maybe "mcinspectlog".
17:37:43 <Vorpal> elliott: name it "Minecraft Dump Log Formatting & Printing Utility"
17:37:48 <elliott> mdlfpu
17:37:49 <Vorpal> elliott: it is a valid filename on *nix
17:37:55 <Vorpal> elliott: no, the full one I mentioned
17:38:00 <Vorpal> valid filename
17:38:46 <Vorpal> elliott: or "Minecraft Dump Log Inspection, Formatting & Printing Utility"
17:39:11 <elliott> mdlifpu
17:39:13 <Vorpal> ./Minecraft\ Dump\ Log\ Inspection,\ Formatting\ \&\ Printing\ Utility
17:39:16 <Vorpal> elliott: no like that ^
17:39:27 <fizzie> MDLFPU, the floating-point unit that's based on the minimum description length principle. *Somehow*.
17:39:39 <elliott> Vorpal: How about some exclamation marks in there so that double quotes don't work for it with bash?
17:39:46 <Vorpal> elliott: awesome idea!
17:39:57 <elliott> (I wish you could disable that.)
17:40:00 <elliott> (It is so annoying.)
17:40:01 <Vorpal> elliott: you can
17:40:05 <elliott> You can????
17:40:06 <Vorpal> it is setopt or set or such
17:40:07 <elliott> :DDDDDDDDddddddddddd
17:40:07 <elliott> how
17:40:09 <Vorpal> histsomething
17:40:12 <Vorpal> forgot the name of it
17:40:24 <Vorpal> elliott: anyway, add in both single and double quotes in the name
17:40:28 <Vorpal> and backslashes
17:40:53 <elliott> How about I just take a forty meg dump. , off of a server, and make that the name of the tool?
17:40:53 <Vorpal> so the file is named: Minecraft "Dump" Log Inspection, Formatting & Printing 'Utility\' or such
17:41:22 <elliott> See now, a filesystem naively implemented on top of @ would support forty meg filenames no problem.
17:41:45 <Vorpal> -H Enable ! style history substitution. This flag is on
17:41:45 <Vorpal> by default when the shell is interactive.
17:41:48 <Vorpal> elliott: to set ^
17:41:53 <Vorpal> just do set +H should work
17:42:10 <elliott> omg it works :DD
17:42:10 <elliott> thanks
17:42:51 <fizzie> Ooh, that's going to the .bashrc.
17:43:06 <Vorpal> why is that on by default btw?
17:43:08 <elliott> We have suffered in silence.
17:43:09 <fizzie> I had *just* found it from the man bash when you pasted that.
17:43:12 <Vorpal> it seems so utterly stupid
17:43:27 <elliott> Vorpal: Because people think that anything non-interactive is more efficient to use, despite it being a complete duplication of Ctrl+R.
17:43:31 <Vorpal> fizzie: easier way: help shopt | grep hist then help set | grep hist
17:43:41 <elliott> set +histexpand for a more literate version.
17:43:50 <elliott> Oh, hmm, or not.
17:43:51 <elliott> nohistexpand
17:43:58 <Vorpal> not sure it is the same one
17:44:04 <elliott> It is.
17:44:06 <elliott> It says same as -H.
17:44:10 <Vorpal> oh yes indeed
17:44:17 <fizzie> But that's with "set -o".
17:44:21 <Vorpal> elliott: it might be set +o histexpand
17:44:25 <Vorpal> not sure
17:44:26 <elliott> Ah, okay.
17:44:41 <elliott> I guess that's... slightly better than set +H?
17:44:44 <Vorpal> elliott: no the option syntax for set is not very sane
17:45:48 -!- ais523 has joined.
17:45:49 <fizzie> I've never really liked the "+foo is negative, -foo is positive" thing, even though it is... if not common, then at least not unheard-of.
17:46:41 <Vorpal> indeed
17:47:04 <Vorpal> fizzie: and something like set +o noglob is downright confusing
17:47:12 <Vorpal> that is uh... "enable logging"?
17:47:15 <Vorpal> err
17:47:17 <Vorpal> globbing*
17:47:20 <Vorpal> weird typo
17:48:14 <Vorpal> oh shit. libreoffice update
17:48:18 <Vorpal> this is going to take ages.
17:48:54 <elliott> heh
17:49:22 <elliott> fizzie: Eurgh, a multiple-executable solution is annoying.
17:49:35 <elliott> I need to make all the current stuff a library and the like.
17:49:41 <elliott> Maybe I'll just add a flag to mchost.
17:49:44 <elliott> mchost --analyse dump or something.
17:50:04 <fizzie> In other news, installed that 'tig' thing.
17:50:24 <fizzie> In yet other news, InfiniBand is such a silly name.
17:50:27 <elliott> The wonderful thing about tiggers is that fizzie's the only one.
17:51:35 <Phantom_Hoover> Poor fizzie :(
17:51:44 <fizzie> (Our faculty cluster's been offline for the last week, because it moved to another physical location; it was supposed to open on Monday, but apparently they need to replace an InfiniBand switch still. Or, well, HP needs.)
17:52:42 -!- derdon has joined.
17:52:42 <Vorpal> <fizzie> In yet other news, InfiniBand is such a silly name. <-- yes, but why did you bring that up now?
17:52:46 <Vorpal> oh and what is "tig"?
17:52:55 -!- Zuu has quit (Ping timeout: 244 seconds).
17:53:03 <fizzie> 'tig' is this ncurses-based git browser thing elliott pointed me at earlier today.
17:53:09 <Vorpal> heh
17:53:17 <Vorpal> fizzie: any useful?
17:53:41 <elliott> It's prettier than gitk. :p
17:53:50 <fizzie> It has a shortlog-like view, a log view, a tree-browser, a blame mode thing, a differying thing and so on.
17:54:20 <elliott> I suppose I should install it if it's the New Thing.
17:54:39 <elliott> fizzie: Did you just grab a tarball/make/install, or?
17:54:45 <fizzie> I just aptituded it.
17:55:01 <Vorpal> well, I'll be offline for a bit. Cya.
17:55:03 <fizzie> Possibly not bleeding edge, again.
17:55:06 -!- Vorpal has quit (Quit: ZNC - http://znc.sourceforge.net).
17:55:22 <elliott> Oh, it seems to be up to March date.
17:55:29 <elliott> Didn't realise it was pacpakcpakcpakpackpakged.
17:55:36 <elliott> http://jonas.nitro.dk/tig/NEWS.html
17:55:40 <elliott> Time to decide HOW VITAL THESE CHANGES ARE.
17:55:57 <elliott> "Add support for blaming diff lines." Fancy.
17:56:20 <fizzie> The graph mode ('g' in main view) is not quite as pretty as gitg's colorful twisty lines, though.
17:56:37 <elliott> Looks fine for mchost, which has exactly 0 divergences. :p
17:56:56 <elliott> So how do you use it as a pager, I wonder.
17:57:22 <elliott> "PAGER=tig git diff" Well, not like that.
17:57:55 <elliott> "git show | tig" works.
17:58:01 <elliott> Oh, as does "git diff | tig".
18:01:15 <fizzie> "tig status" looks reasonable also; it gives a (colorized) "git status" output, except you can select files to see the diffs.
18:01:23 <fizzie> Not sure I can remember to use this thing though.
18:04:22 <fizzie> It's a bit confusing. If I do "tig status", enter shows the diff of the selected file, but 'd' switches to the "diff view" which shows (full-screened) the diff of the latest commit. And if I 'q' out of that back to the diff view of the selected file, it shows in full screen, but the arrows don't scroll it, instead they change the selected file in the (now invisible) "tig status" file list.
18:04:39 <elliott> It is a magic.
18:06:09 -!- Zuu has joined.
18:19:19 <ais523> what's tig?
18:19:33 <ais523> ah, found it in scrollback
18:22:53 <fizzie> It reminds me of cgdb (a curses gdb frontend) a bit; it was sort-of nifty, and not too shabby, but for some reason I never quite got around to actually habitually using it.
18:23:28 <fizzie> Same goes with GDB's own TUI thing, except that was also buggy as anything.
18:28:26 <elliott> fizzie: Do you know of any file formats I could output in that would let someone browse it as the "flat" (Constructor arg arg arg) format, but click on a given packet to expand it to have names for all those fields? :p
18:28:36 <elliott> Hard to strike a balance between "lol ten fields what" and "oh god every packet takes up ten lines".
18:28:55 <fizzie> XML. :p
18:29:07 <elliott> fizzie: I don't know of a prewritten tool for XML that would offer that presentation.
18:29:34 <elliott> All I can think of is an ordered (key,value) storage with really lax keys; I could store the flat form as the key.
18:31:33 -!- boily has quit (Ping timeout: 245 seconds).
18:32:30 <fizzie> I've seen some XML editors... and doesn't Firefox do it too if you point it at a styleless XML file? (I mean, show it as tree; then you'd just format that as <Constructor foo bar baz> ...values of the fields either as text or as elements... </Constructor>, and a tree-oriented XML tool would just show the constructor and argument names.)
18:32:56 <elliott> <Constructor foo bar baz> will not be valid.
18:33:03 <elliott> Unless <Constructor (Point ...) 99> is valid.
18:33:26 -!- Ngevd has joined.
18:34:18 <fizzie> That sounds like having the field values in there. I was assuming you didn't want to show those. Or did you mean just "I want all data visible but on one line, and then expanded on click".
18:35:09 <elliott> I want it all visible inline, and if you click on it to expand it I want to be able to see the same data, but with field names before it.
18:35:15 <elliott> And maybe even with the values aligned all fancy-like.
18:35:24 <elliott> Hmm, I could just print out some simple HTML
18:36:21 <fizzie> That sounds possible. You can even embed in some scripting to do the show/hide thing if you want.
18:36:36 <Ngevd> I played monopoly today
18:36:47 <fizzie> <Constructor foo="(Point ...)" bar="99"> ... </Constructor> would let you show everything inline, but it'll probably look real clumsy.
18:36:54 <elliott> Yeees, that sounds clumsy.
18:36:58 <elliott> Scripting was what I was thinking of doing.
18:47:17 -!- boily has joined.
19:01:25 <Ngevd> Forgot it was Monday
19:01:28 <Ngevd> I like Mondays
19:01:37 <Ngevd> Mondays are University Challenge Days
19:02:11 <ais523> is #esoteric the University Challenge Fan Club?
19:02:17 <ais523> it's on in here too
19:02:46 <elliott> ais523: least enthusiastic fanclub ever
19:02:51 <ais523> indeed
19:06:04 -!- Ngevd has quit (Ping timeout: 252 seconds).
19:17:34 -!- sadhu has joined.
19:18:15 <sadhu> Hello esoteric!
19:20:28 <elliott> hi
19:20:30 <elliott> `? welcome
19:20:32 <HackEgo> Welcome to the international hub for esoteric programming language design and deployment! For more information, check out our wiki: http://esolangs.org/wiki/Main_Page
19:21:19 <sadhu> hi elliott
19:21:23 <fizzie> fungot: You, start greeting people too.
19:21:24 <fungot> fizzie: it doesn't *use* raw cgi. to my deep fnord i'm only fnord of the job description. it's badly fnord also.
19:21:43 <elliott> `addquote <fungot> fizzie: it doesn't *use* raw cgi. to my deep fnord i'm only fnord of the job description. it's badly fnord also.
19:21:43 <fungot> elliott: i lived in the north east!! i'm having too much fun
19:21:44 <HackEgo> 685) <fungot> fizzie: it doesn't *use* raw cgi. to my deep fnord i'm only fnord of the job description. it's badly fnord also.
19:21:48 <elliott> ...
19:21:56 <elliott> What style is it on.
19:22:00 <fizzie> ^style
19:22:00 <elliott> And why is it mentioning the north east.
19:22:00 <fungot> Available: agora alice c64 ct darwin discworld europarl ff7 fisher homestuck ic irc* jargon lovecraft nethack pa sms speeches ss wp youtube
19:22:05 <elliott> Augh.
19:22:05 <fizzie> "The usual."
19:22:15 <sadhu> this is my registered nickname....i am the guy who was working on assembler to bainfuck converter
19:25:07 <elliott> haven't you had three nicks now? :-)
19:27:46 <sadhu> elliott:but they were not registered
19:27:57 <sadhu> this one is final one...as i have registered this
19:28:20 <sadhu> my previous nicks were "dell" & "kaus"
19:28:34 <elliott> hehe
19:28:46 <sadhu> :D
19:29:53 <Gregor> fungot: I will fnord you so hard you fnord your fnord.
19:29:53 <fungot> Gregor: it's a nice number. even numbers are also fnord difficult/ big to implement which is why i do this
19:30:02 <sadhu> fungot: sdf
19:30:03 <fungot> sadhu: what lisp does with lists... lua does with hash tables.
19:30:10 <sadhu> lol
19:30:21 <sadhu> fungot: Are you a dumb goat ?
19:30:22 <fungot> sadhu: i idly searched for your email and tell me what the fuck
19:30:57 <sadhu> try the #emacs ,fsbot its amazing!
19:31:41 -!- sadhu has changed nick to ikkyu.
19:31:46 -!- ikkyu has changed nick to sadhu.
19:31:49 <fizzie> But it's probably implemented in something really boring.
19:31:58 <sadhu> emacs lisp
19:32:05 <elliott> ?hoogle (a -> m b) -> a -> m (a,b)
19:32:06 <lambdabot> No results found
19:32:09 <elliott> Lame.
19:32:21 <elliott> ?undo do x <- a; x' <- f x; return (x,x')
19:32:21 <lambdabot> a >>= \ x -> f x >>= \ x' -> return (x, x')
19:32:25 <elliott> ?pl a >>= \ x -> f x >>= \ x' -> return (x, x')
19:32:25 <lambdabot> liftM2 (>>=) f ((return .) . (,)) =<< a
19:32:28 <elliott> Sigh.
19:32:34 <fizzie> How... obvious.
19:32:51 <elliott> ?pl \line -> unless (null line) (putStrLn (reverseWords line) >> main)
19:32:52 <lambdabot> liftM2 unless null ((>> main) . putStrLn . reverseWords)
19:33:12 <sadhu> fungot:fuck you!
19:33:13 <fungot> sadhu: it's been said that boole is the crowning jewel perched precariously upon the perfect peak of programmer prowess, casting its limitless limpid light over the loathesome lands of those who scuff and wallow in the dreary dust of digital depravity and unbounded wilful ignorance of the testament of our lord jesus christ into your life.
19:33:20 <elliott> sadhu: :(
19:33:20 <elliott> rude
19:33:38 <fizzie> fungot: Where do you *get* that stuff?
19:33:39 <fungot> fizzie: i saw the movie of the book deals almost exclusively with sushi, actually... creative.
19:33:40 <sadhu> elliott :P
19:34:43 -!- oerjan has joined.
19:34:55 <fizzie> Oe, it's rjan.
19:35:09 <fizzie> (The first two letters sound somehow interjectish.)
19:35:13 <oerjan> fie, it's zzie!
19:35:38 <fizzie> I considered registering "zzie.fi" as my "primary" domain.
19:35:54 <elliott> But what email to use?
19:36:11 <fizzie> Aye, there's the rub. fi.zzie@zzie.fi?
19:36:38 <elliott> Ugly.
19:36:45 <elliott> if@zzie.fi would be nice if only @ were .
19:36:53 <elliott> fi@zzie.fi is alright, I have to admit.
19:36:55 <oerjan> heiki.kallasjokki@zzie.fi
19:36:59 <elliott> fizzie: Can you become fazzie?
19:37:01 <oerjan> *heikki
19:37:05 <elliott> f@zzie.fa
19:37:06 <fizzie> elliott: If I eat enough.
19:37:20 <elliott> :DDDdd
19:37:31 <Gregor> X-D
19:37:44 <elliott> oerjan: i helped someone... twice......... http://hpaste.org/51809
19:37:48 <elliott> i don't think my second helping was good...
19:37:53 <Gregor> elliott: Tisk tisk.
19:38:09 <elliott> although actually it reads OK if you had flipped (.) :P
19:38:11 <oerjan> fizzie: all you need to do is become irish and register fi@zz.ie
19:38:29 <elliott> $ whois zz.ie
19:38:29 <elliott> The program 'whois' is currently not installed. You can install it by typing:
19:38:29 <elliott> sudo apt-get install whois
19:38:30 <elliott> How.
19:38:38 <elliott> Xubuntu, your smallness is lies.
19:39:18 <fizzie> It just keeps telling me what .ie domains should be like.
19:39:31 <elliott> "Not like this", in other words? :-P
19:39:32 -!- sadhu has quit (Quit: Leaving).
19:39:39 <elliott> RIP sadhu.
19:39:42 <elliott> ?pl (>> a) . b
19:39:43 <lambdabot> (>> a) . b
19:39:45 <fizzie> Well, I don't know, none of the conditions seem to rule out zz.ie.
19:39:51 <elliott> Try whois sdojflkgslkdfgd.ie
19:40:13 <fizzie> % Not Registered - The domain you have requested (sdojflkgslkdfgd.ie) is not a registered .ie domain name.
19:40:17 <fizzie> It's a different message.
19:40:23 <fizzie> -be less than 66 characters in length, including the '.ie' characters
19:40:23 <fizzie> -not start with a hyphen '-'
19:40:23 <fizzie> -not have a label ending in a hyphen before the '.ie' e.g. 'xyz-.ie'
19:40:23 <fizzie> -not start with 'xn--' which is reserved for IDN usage, e.g. �ire.ie
19:40:24 <fizzie> -contain at least 5 characters, including the three for '.ie'
19:40:26 <fizzie> -have at least one alphabetic character, e.g. ' would be invalid'
19:40:38 <fizzie> But I don't see why zz.ie would be wrong according to those.
19:40:39 <elliott> <fizzie> -have at least one alphabetic character, e.g. ' would be invalid'
19:40:39 <elliott> What.
19:40:59 <fizzie> Don't ask me. Maybe it's a conversion thing somewhere.
19:41:44 <fizzie> The .fi root allows two-letter registrations, but only when they do not match existing TLDs, and since there are so many of them ccTLDs, quite a lot of them are reserved.
19:41:52 <fizzie> (And all the legal ones are already registered.)
19:42:01 <elliott> Heh.
19:42:17 <elliott> There are still one-character domains on sale.
19:42:19 <elliott> Excluding TLD.
19:42:44 <elliott> I know .st charge exorbitant prices for two-characters.
19:42:57 <elliott> (But seem to reserve all one-chars.)
19:42:59 <Gregor> So the shortest domain you can buy is presumably three characters + a dot?
19:43:16 <elliott> Gregor: I believe so. It is one of my goals to own one of these domains :P
19:43:23 <elliott> Gregor: I was working on a script to narrow down the list.
19:43:24 <oerjan> elliott: null line `unless` do
19:43:29 <elliott> oerjan: heh
19:44:06 <fizzie> A friend just registered uv.fi. (All the legal two-character .fi's have been registered for a while now, but that one expired recently. There's three others in the "grace period" about to go, but I don't think I want any of them. The difference between two and three characters isn't all that huge.)
19:44:08 <Gregor> elliott: Not as good as libc.so
19:44:10 <Gregor> ... :'(
19:44:13 <elliott> fizzie: Just?
19:44:29 <elliott> Anyway, if I get a one-char domain, whooo boy am I gonna sell that thing :P
19:44:30 <fizzie> Just a week or so ago.
19:44:41 <elliott> How much do you think an UP AND COMING URL SHORTENER STARTUP would pay for a four keypress domain
19:44:47 <elliott> The answer is MORE MONEY THAN I NEED.
19:45:10 <Gregor> elliott: Why compete with t.co?
19:45:28 <elliott> Gregor: Can non-twat things even use t.co? :-P
19:45:41 <elliott> And besides, I said "startup", "url shortener"; the brain of the hypothetical reader is not expected to be active.
19:46:03 <elliott> "The link service at http://t.co is only used on links posted on Twitter and is not available as a general shortening service.
19:46:03 <elliott> "
19:47:55 <Gregor> elliott: I spose not.
19:48:01 <oerjan> elliott: i assume your hpaste got an answer to the question he actually asked.
19:48:16 <elliott> Naw, I answered that in-channel :P
19:48:19 <fizzie> ICANN New gTLD Applicant Guidebook does not seem to specify any minimum length. If they would (except I really don't think they will) accept a single-letter domain, you could own, say, "x".
19:48:24 <oerjan> *hpaste guy
19:48:32 <fizzie> http://x/. i@x.
19:48:38 <elliott> fizzie: There's Ian at n@ai.
19:48:42 <elliott> http://ai./
19:48:54 <fizzie> Yes, that's pretty close already.
19:49:12 <elliott> I don't think I could turn down elli@tt.
19:49:16 <oerjan> well he's an ai so he doesn't count, obviously he just hacked it
19:49:27 <elliott> Someone wanna give me elli@tt?
19:49:50 <elliott> Man, Anguilla is FLAT.
19:49:53 <elliott> http://upload.wikimedia.org/wikipedia/commons/4/43/Anguilla-aerial_view_western_portion.jpg
19:49:55 <elliott> Like really flat.
19:50:00 <Phantom_Hoover> Sorry, I slammed the door, I'll have to come off for the rest of the night bye guys
19:50:04 -!- Phantom_Hoover has quit (Quit: Leaving).
19:50:23 <elliott> lol
19:50:32 <elliott> oh
19:50:33 <elliott> oh dear
19:50:37 <elliott> my power cord is frayed
19:50:38 <oerjan> elliott: so ian will be the first guy to lose his email due to global warming?
19:50:46 <elliott> well i
19:50:50 <elliott> guess i will not use this computer
19:51:06 <elliott> oerjan: heh
19:51:07 <fizzie> It's just electricity, how dangerous could it be?
19:51:14 <elliott> `addquote <fizzie> It's just electricity, how dangerous could it be?
19:51:16 <HackEgo> 686) <fizzie> It's just electricity, how dangerous could it be?
19:51:18 <elliott> Inspiring words from an inspiring man.
19:51:39 <fizzie> It could be one of those "famous last words" quotations.
19:54:06 <oerjan> "He touched hiiiiiigh voltage" (to the tune of blue velvet)
19:56:24 <Gregor> elliott: Come to think of it, how can your hypothetical new shortener compete with Tweak?
19:56:25 <elliott> http://ai./offshore.jpg
19:56:26 <elliott> Me.
19:56:52 <oerjan> http://i./rule/
19:57:10 <elliott> Gregor:
19:57:12 <elliott> Tweak: http://hopud.tk
19:57:12 <elliott> x.ab: http://x.ab/q9
19:57:17 <elliott> Sure, it's a bubble, but then so are URL shorteners.
19:57:47 * elliott tries to generate a looping tweak.
19:57:50 <Gregor> Fair 'nuff.
19:57:59 <Gregor> elliott: Is it predictable?
19:58:01 <elliott> IT WILL ONLY TAKE ME 999999999 BILLION YEARS
19:58:03 <elliott> Gregor: Nope :P
19:58:08 <elliott> Maybe it's a hash, but...
19:58:10 <Gregor> lol
19:58:15 <elliott> I mean it can't be a pure hash
19:58:18 <elliott> Because people can register .tks :P
19:58:29 <Gregor> GOD Tweak is brilliant.
19:58:52 <elliott> I want to visit Tokelau and tell them what crimes are being committed in their name.
19:59:05 <elliott> Whities: Literally the worst.
19:59:25 <elliott> First they come and take your land, then they give you internet in exchange for your domain then they fucking hand out your fucking domains as fucking shortened URLs.
19:59:27 <oerjan> <elliott> Deprecated: "Please import from Control.Monad.ST.Unsafe instead; This will be removed in the next release"
19:59:37 <oerjan> obviously needed for SafeHaskell
19:59:41 <elliott> Yes.
19:59:45 <elliott> Safe as skull.
19:59:56 <elliott> Why on earth has subpixel rendering regressed in this version of Ubuntu?
20:00:01 <elliott> fizzie: How's the subpixels on the Debian side of camp :P
20:04:32 <oerjan> <elliott> http://hackage.haskell.org/package/vault Hey, I am a pubamalished developamator.
20:04:35 <oerjan> no haddock
20:04:39 -!- augur has quit (Remote host closed the connection).
20:04:44 <elliott> Blame hackage.
20:04:49 <elliott> It's either slow or something went wrong.
20:04:55 <oerjan> maybe it's done in batches
20:04:58 <elliott> Give it a day or two.
20:05:10 <elliott> oerjan: but
20:05:20 <elliott> https://raw.github.com/HeinrichApfelmus/vault/master/src/Data/Vault.hs
20:05:20 <elliott> https://raw.github.com/HeinrichApfelmus/vault/master/src/Data/Vault/ST.hs
20:05:23 <elliott> just ignore the actual code :-)
20:05:28 <elliott> it's very shrot
20:05:29 <elliott> short
20:07:24 <oerjan> elliott: i fail to detect the "persistent" part
20:07:44 <elliott> oerjan: it is the _other_ kind of persistence
20:07:52 <oerjan> hm?
20:07:52 <elliott> http://en.wikipedia.org/wiki/Persistent_data_structure
20:08:08 <elliott> i.e. immutable, based on transforming
20:08:18 <elliott> (with sharing implied)
20:08:28 <elliott> rather than an STArray or whatever
20:09:04 <oerjan> elliott: aha. does this mean you can implement STT in this?
20:09:13 <elliott> oerjan: Yep, I think so.
20:09:20 <elliott> oerjan: see:
20:09:38 <elliott> "Somewhat interestingly, I discovered, hacking on my own version (which all these changes a backported from) before this repository existed, that Vault s is actually isomorphic to ST s ()! Key s a becomes STRef s (Maybe a), and insert looks like insert k x m = m >> writeSTRef k (Just x). lookup is lookup k m = unsafeRunST (m >> readSTRef r), where unsafeRunST :: ST s a -> a (implementable as unsafePerformIO . unsafeSTToIO). Unfortunately, I don't
20:09:38 <elliott> believe this implementation is very efficient; it has to run every STRef operation on every single lookup."
20:09:39 <elliott> https://github.com/HeinrichApfelmus/vault/pull/1
20:09:55 <elliott> so basically yes, you can use Vault as the state of the STRefs
20:10:02 <elliott> which become pre-filled Keys
20:10:20 <elliott> STT is really not problematic at all, just not really efficient
20:12:02 -!- Ngevd has joined.
20:12:11 <elliott> pikhq: I think I might understand enough about @'s memory model to start implementing it; apart from the mammoth task of making the GC work well, there's only one obstacle I can think of.
20:14:06 <pikhq> And that is?
20:14:12 -!- GreaseMonkey has joined.
20:14:31 <elliott> pikhq: Basically, there needs to be a mapping from the abstract virtual address to location on disk.
20:14:37 <elliott> Because when the pointer is dereferenced... you gotta fetch it.
20:14:45 <elliott> It's simply a matter of microoptimising that lookup.
20:14:48 <elliott> Diskwise.
20:15:10 <pikhq> I'm not sure how it's done, but I know this is actually *precisely* what is done with swap.
20:16:06 <pikhq> So, in principle this should be doable with fairly standard techniques.
20:16:54 <elliott> pikhq: It's also basically a standard filesystem...
20:17:09 <elliott> pikhq: Address 0a9df9 --> file /0/a/9/d/f/9
20:17:29 <elliott> Except that the maximum number of files in each directory is fixed and tiny, as are the names of those files.
20:17:34 <elliott> And there's no metadata to store.
20:17:36 <elliott> So it's quite a lot simpler.
20:18:07 <pikhq> So, more or less you'd have a page table on disk.
20:19:10 <elliott> Good point.
20:19:11 <pikhq> Mmkay. Yeah, thinking about it more this is genuinely mundane kernel implementation stuff.
20:19:29 <elliott> Yep... can you tell I don't have much traditional kernel dev experience? :-)
20:19:32 -!- BeholdMyGlory has quit (Remote host closed the connection).
20:19:37 <pikhq> Given that I have more, yes. :P
20:19:52 <elliott> http://en.wikipedia.org/wiki/Extended_Page_Table I don't know what this is, but it looks snazzy.
20:19:53 <pikhq> And my fanciest kernel is only technically one.
20:20:38 <pikhq> Oh, that. It's a scheme to do paging in ring 3.
20:21:37 <elliott> pikhq: I was also thinking that I forgot to neglect something important in my allocator design...
20:21:45 <elliott> pikhq: Namely that every @ object is immutable.
20:21:56 <elliott> So any change of a page won't be /mutating/ an object, it'll be creating a new one.
20:22:08 <elliott> (It might be creating a new one at the exact same location an old one used to be, but still.)
20:22:59 <pikhq> elliott: Well, immutability probably makes your GC a *little* bit easier.
20:23:17 <elliott> pikhq: It also makes it incredibly vital.
20:23:27 <pikhq> Well, yes.
20:23:32 <elliott> GC isn't just "that thing that stops things leaking memory", it's "the thing that lets me run a program for more than two seconds without running out of RAM".
20:25:14 <pikhq> Oh, you can run for more than two seconds without running out of RAM. However, you'll start thrashing like hell, because @ doesn't maintain a RAM/disk dichotomy. :)
20:25:40 <Gregor> It'll take twelve seconds to run out of disk.
20:25:41 -!- Ngevd has quit (Read error: Connection reset by peer).
20:25:55 <pikhq> Gregor: More than that.
20:26:00 <pikhq> Gregor: Significantly more.
20:26:06 <pikhq> Gregor: Disk is *slow*.
20:26:18 <Gregor> pikhq: My disk is 10M
20:26:20 <elliott> I like how @ is designed for a disk that can be written to every five seconds constantly, but also one with SSD-style random access times.
20:26:26 <pikhq> Gregor: 12 seconds, then.
20:26:31 * Gregor nods :P
20:26:34 <elliott> Can we just saw a magnetic disk and an SSD in half and then glue them together?
20:27:28 <pikhq> elliott: Well, if you're never GC'ing, you'll only perform a write to each disk block once...
20:27:41 <pikhq> And once that's done you're done.
20:27:49 <elliott> pikhq: ITT: Not even a vaguely useful model of what @ will do :P
20:28:20 <pikhq> Will if you don't GC. Hope you only ever need a few minutes of compute time!
20:28:25 <pikhq> Well. SSD
20:28:27 <pikhq> 30 seconds.
20:28:33 <elliott> I love how @ becomes much MORE complex by REMOVING mutation.
20:28:40 <elliott> Or rather, making non-mutation the common thing :P
20:29:22 -!- Phantom_Hoover has joined.
20:29:30 <elliott> It is Phantom_Hoover's slammed door's ghost.
20:29:43 <Phantom_Hoover> no
20:29:45 <oerjan> <elliott> ?hoogle (a -> m b) -> a -> m (a,b)
20:29:49 <oerjan> hm.
20:30:07 -!- plycke has joined.
20:30:07 -!- plycke has quit (Excess Flood).
20:30:09 <elliott> ?hoogle arr a b -> arr a (a,b)
20:30:10 <lambdabot> Control.Arrow (&&&) :: Arrow a => a b c -> a b c' -> a b (c, c')
20:30:10 <lambdabot> Data.Graph.Inductive.Query.MaxFlow maxFlowgraph :: (DynGraph gr, Num b, Ord b) => gr a b -> Node -> Node -> gr a (b, b)
20:30:11 <oerjan> that would be so much easier if monads were also arrows. i think.
20:30:13 <elliott> oerjan: What a massive surprise
20:30:17 <pikhq> Incidentally, non-mutable on-disk structure is not as weird as you might think. Many recent filesystems actually COW each block.
20:30:18 <elliott> It's an arrow function on Kleisli
20:30:21 <elliott> I WOULD NEVER HAVE GUESSED
20:30:23 <pikhq> For instance, ZFS and btrfs.
20:30:33 <elliott> pikhq: Yah, I know.
20:30:42 <elliott> pikhq: Sharing is going to be very important to @.
20:30:50 <elliott> pikhq: It's better if you can /avoid/ GCing by simply building deduplicatively.
20:30:57 <elliott> pikhq: As a bonus, you get versioning.
20:30:58 -!- GreaseMonkey has quit (Quit: The Other Game).
20:32:10 <oerjan> :t \f x -> f x >>= (liftM $ (,) x)
20:32:12 <lambdabot> forall a1 (m :: * -> *) a. (Monad m) => (a -> m (m a1)) -> a -> m (a, a1)
20:32:18 <oerjan> oops
20:32:18 <elliott> needs a join
20:32:46 <oerjan> :t \f x -> f x >>= (flip $ (,) x)
20:32:48 <lambdabot> Couldn't match expected type `a -> b'
20:32:48 <lambdabot> against inferred type `(a1, b1)'
20:32:48 <lambdabot> Probable cause: `(,)' is applied to too many arguments
20:32:53 <oerjan> darn
20:33:05 <oerjan> oh hm
20:33:28 <oerjan> :t \f x -> (,) x `liftM` f x
20:33:29 <lambdabot> forall a a1 (m :: * -> *). (Monad m) => (a -> m a1) -> a -> m (a, a1)
20:33:45 <monqy> `liftM`? nice
20:33:47 <HackEgo> ​/home/hackbot/hackbot.hg/multibot_cmds/lib/limits: line 5: exec: liftM`?: not found
20:33:53 <elliott> way to <$>
20:34:01 <elliott> :t \f x -> (x,) <$> f x
20:34:02 <lambdabot> Illegal tuple section: use -XTupleSections
20:34:08 <elliott> :t \f x -> (,) x <$> f x
20:34:09 <lambdabot> forall a a1 (f :: * -> *). (Functor f) => (a -> f a1) -> a -> f (a, a1)
20:34:09 <oerjan> elliott: i didn't want to mix Functor into the type
20:34:15 <elliott> oerjan: well it should be functor really...
20:34:15 <elliott> ?pl \f x -> (,) x <$> f x
20:34:16 <lambdabot> liftM2 (<$>) (,)
20:34:20 <elliott> ooh
20:34:23 <oerjan> elliott: oh right it is
20:34:32 <elliott> :t liftA2 (<$>) (,)
20:34:34 <lambdabot> forall a (f :: * -> *) a1. (Functor f) => (a1 -> f a) -> a1 -> f (a1, a)
20:34:39 <elliott> there, now _nobody_ can understand it
20:34:53 <oerjan> at least it got short
20:35:01 <elliott> the lesson to be learnt is that explicit tuple programming is ugly
20:35:05 <elliott> and the whole point of applicative style is to avoid it
20:35:15 <elliott> pay attention, arrows
20:35:31 <oerjan> :t (<$>) (<$>) (,) <*>
20:35:33 <lambdabot> parse error (possibly incorrect indentation)
20:35:40 <oerjan> oops
20:35:41 <elliott> oerjan...
20:35:44 <elliott> that's not code...
20:35:45 <oerjan> :t ((<$>) (<$>) (,) <*>)
20:35:46 <lambdabot> forall a (f :: * -> *) a1. (Functor f) => (a1 -> f a) -> a1 -> f (a1, a)
20:35:54 <oerjan> WHAT
20:36:03 <elliott> oerjan: wat?
20:36:15 <elliott> it's an obvious transformation of above
20:36:18 <elliott> not sure what surprises you
20:36:27 <elliott> :t ap (fmap fmap (,))
20:36:29 <lambdabot> forall a (f :: * -> *) a1. (Functor f) => (a1 -> f a) -> a1 -> f (a1, a)
20:36:31 <elliott> quality
20:36:52 <elliott> :t (((<$>) <$> (,)) <*>)
20:36:54 <lambdabot> forall a (f :: * -> *) a1. (Functor f) => (a1 -> f a) -> a1 -> f (a1, a)
20:36:55 <elliott> oerjan: why the WHAT
20:37:14 <pikhq> Better without spaces.
20:37:19 <pikhq> (((<$>)<$>(,))<*>)
20:37:25 <pikhq> Now *there's* a function to be feared.
20:37:32 <elliott> :t fmap`fmap`(,)`ap`
20:37:33 <lambdabot> parse error (possibly incorrect indentation)
20:37:35 <monqy> :t ap(fmap<$>(,))
20:37:37 <lambdabot> forall a (f :: * -> *) a1. (Functor f) => (a1 -> f a) -> a1 -> f (a1, a)
20:37:45 -!- augur has joined.
20:38:14 <elliott> :t ap$fmap<$>(,)
20:38:15 <lambdabot> forall a (f :: * -> *) a1. (Functor f) => (a1 -> f a) -> a1 -> f (a1, a)
20:38:18 <elliott> :t ap$(<$>)<$>(,)
20:38:19 <lambdabot> forall a (f :: * -> *) a1. (Functor f) => (a1 -> f a) -> a1 -> f (a1, a)
20:38:38 <monqy> anyway why does this use tuples anyway
20:38:42 <monqy> anyway
20:38:49 -!- plycke has joined.
20:38:49 -!- plycke has quit (Excess Flood).
20:38:55 <oerjan> <elliott> oerjan: why the WHAT <-- WHAT DO YOU MEAN IT'S NOT CODE
20:39:14 <elliott> oerjan: heh
20:41:11 <oerjan> :t ap.fmap fmap
20:41:13 <lambdabot> forall (m :: * -> *) a b (f :: * -> *). (Monad m, Functor f, Functor m) => m (a -> b) -> m (f a) -> m (f b)
20:42:08 <oerjan> hm that liftA2 is in the (x ->) monad isn't it
20:42:40 <elliott> yes
20:42:47 -!- plycke has joined.
20:42:47 -!- plycke has quit (Excess Flood).
20:42:51 <elliott> the (a ->) applicative, more precisely
20:42:57 <elliott> oh, did we just avoid spmabots
20:42:58 <elliott> ok
20:43:25 <oerjan> :t (((<<$>)Prelude..(,))<*>)
20:43:26 <lambdabot> Not in scope: `<<$>'
20:43:31 <oerjan> :t (((<$>)Prelude..(,))<*>)
20:43:32 <lambdabot> forall a (f :: * -> *) a1. (Functor f) => (a1 -> f a) -> a1 -> f (a1, a)
20:43:46 <elliott> :t ap$(.).(,)
20:43:47 <lambdabot> forall a (f :: * -> *) a1. (Functor f) => (a1 -> f a) -> a1 -> f (a1, a)
20:43:53 <elliott> oerjan: :')
20:44:13 <elliott> :t ((.).(,)<*>)
20:44:14 <lambdabot> forall a (f :: * -> *) a1. (Functor f) => (a1 -> f a) -> a1 -> f (a1, a)
20:44:20 <elliott> it shall forever be known as the "breasts and kirby" operator...
20:44:43 -!- boily has quit (Ping timeout: 240 seconds).
20:55:25 <oerjan> `addquote <fungot> sadhu: it's been said that boole is the crowning jewel perched precariously upon the perfect peak of programmer prowess, casting its limitless limpid light over the loathesome lands of those who scuff and wallow in the dreary dust of digital depravity and unbounded wilful ignorance of the testament of our lord jesus christ into your life.
20:55:25 <fungot> oerjan: sad things like jews in germany in the extra clauses which require blocks, you need to install
20:55:26 <HackEgo> 687) <fungot> sadhu: it's been said that boole is the crowning jewel perched precariously upon the perfect peak of programmer prowess, casting its limitless limpid light over the loathesome lands of those who scuff and wallow in the dreary dust of digital depravity and unbounded wilful ignorance of the testament of our lord
20:55:32 <oerjan> darn
20:55:41 <elliott> oh no :(
20:55:44 <oerjan> `delquote 687
20:55:45 <HackEgo> ​*poof*
20:55:50 <elliott> add a log thing
20:55:53 <elliott> like
20:56:06 <elliott> <fungot> sadhu: it's been said that boole is the crowning jewel perched precariously upon the perfect peak of programmer prowess, casting its limitless limpid light over the loathesome lands of those who scuff and wallow in the dreary dust of digital depravity and unbounded wilful ignorance of [date time]
20:56:07 <fungot> elliott: er... o?)) for instance, the concept of dense death, not dense enough death resembles a ca engine ran out of humour last night.
20:56:09 <elliott> or something
20:56:11 <elliott> i dont know
20:56:12 <elliott> it must be memorised
20:57:37 <oerjan> wait why _did_ HackEgo cut that, it's reply isn't actually longer
20:57:46 <oerjan> *its
20:57:59 <oerjan> `addquote <fungot> sadhu: it's been said that boole is the crowning jewel perched precariously upon the perfect peak of programmer prowess, casting its limitless limpid light over the loathesome lands of those who scuff and wallow in the dreary dust of digital depravity and unbounded wilful ignorance of the testament of our lord jesus christ into your life.
20:57:59 <fungot> oerjan: et tu, brute? ( it has gambit 3; i just haven't seen anything similar since stopped saying " leapt") ( url-encode " foo/ bar/ y/g and
20:58:00 <HackEgo> 687) <fungot> sadhu: it's been said that boole is the crowning jewel perched precariously upon the perfect peak of programmer prowess, casting its limitless limpid light over the loathesome lands of those who scuff and wallow in the dreary dust of digital depravity and unbounded wilful ignorance of the testament of our lord
20:58:19 <oerjan> `run tail -1 quotes
20:58:20 <HackEgo> ​<fungot> sadhu: it's been said that boole is the crowning jewel perched precariously upon the perfect peak of programmer prowess, casting its limitless limpid light over the loathesome lands of those who scuff and wallow in the dreary dust of digital depravity and unbounded wilful ignorance of the testament of our lord jesus
20:58:42 <monqy> hackego....
20:58:49 <oerjan> `run tail -1 quotes | sed 's/^................................//'
20:58:50 <HackEgo> hat boole is the crowning jewel perched precariously upon the perfect peak of programmer prowess, casting its limitless limpid light over the loathesome lands of those who scuff and wallow in the dreary dust of digital depravity and unbounded wilful ignorance of the testament of our lord jesus christ into your life.
20:59:07 <oerjan> ok it _is_ all there in the database.
21:00:00 <elliott> oerjan: yes but come on.....
21:00:06 <elliott> btw you could have used .{n}
21:00:08 <oerjan> Gregor: WE THINK HACKEGO CUTS A LITTLE CLOSE
21:00:43 -!- boily has joined.
21:00:57 <oerjan> elliott: somehow i find {n} hard to recall since i rarely use it
21:01:40 <Phantom_Hoover> ^style
21:01:40 <fungot> Available: agora alice c64 ct darwin discworld europarl ff7 fisher homestuck ic irc* jargon lovecraft nethack pa sms speeches ss wp youtube
21:02:21 <monqy> i wonder where it found the whole jewel perched percariously upon the perfect peak of programmer prowess thing
21:02:34 <monqy> and what the context was
21:02:34 <elliott> it made it up with its imagination.......
21:02:38 <monqy> oh........
21:02:41 <monqy> good imagination
21:02:42 <elliott> it needs a dramatic reading that
21:02:58 <oerjan> elliott: i just think that as long as it is in the database, HackEgo can be fixed.
21:04:15 <elliott> oerjan: unless it is really too long.......
21:04:55 <oerjan> elliott: but it isn't, HackEgo's quote reply starts to the left of my `addquote
21:05:05 <oerjan> i mean, the general adjustment
21:05:24 <oerjan> hm well
21:06:01 <oerjan> and my *!*@* string is also longer
21:08:23 <oerjan> so there's no reason why HackEgo needs to cut it off when i don't.
21:09:42 <elliott> oerjan: note that you need to account for like three bytes of difference due to server crap
21:09:50 <elliott> and HackEgo is longer than oerjan
21:10:04 <elliott> although your hostname should balance that out
21:10:53 <oerjan> elliott: the amount that HackEgo is longer is balanced out by 687) being shorter than `addquote
21:11:07 <elliott> your MOM is shorter than addquote or something
21:11:13 <elliott> oh uh
21:11:17 <elliott> i forgot you're on my mom joke blacklist
21:11:18 <elliott> sorry
21:11:25 -!- calamari has joined.
21:16:55 <oerjan> google's occasional messing up of IE's history is getting eerie - i am sure it was at least _weeks_ ago i did that google search.
21:17:27 <elliott> I BET DDG DOESN'T DO THAT</troll><troll>
21:18:08 <oerjan> well, istr the iwc forum also does, so it's probably not strictly a google bug.
21:18:46 <oerjan> but it's the first time it came up with a page that i clearly cannot recall from the same IE session.
21:19:25 <monqy> is it an ie bug
21:20:20 <oerjan> presumably.
21:20:51 <elliott> oerjan: http://hackage.haskell.org/package/vault has docs now
21:21:21 <oerjan> elliott: well i already read the files you linked :P
21:21:37 <oerjan> but good, good
21:22:12 <elliott> oerjan: hope you enjoyed the implementation :DDD
21:22:35 <oerjan> *browsed
21:22:44 <elliott> dude they're like forty lines :P
21:22:56 <oerjan> TL;DR
21:23:27 -!- tiffany has joined.
21:24:24 -!- elliott has quit (Quit: Leaving).
21:24:45 <Phantom_Hoover> Conclusion: elliott == tiffany.
21:24:52 <tiffany> o~o
21:25:10 <monqy> bizarro world elliott
21:25:27 <monqy> can only make ridiculous faces
21:25:29 <Phantom_Hoover> Bizarro world elliott is an emoticon bot.
21:26:26 <Gregor> I thought we concluded that tiffany was a person with bot-like tendencies.
21:28:08 <Phantom_Hoover> Swap 'bot' and 'person', and then yes.
21:39:09 <oerjan> *chirp*
21:40:53 -!- derdon has quit (Remote host closed the connection).
21:41:41 <Phantom_Hoover> oerjan, meanwhile, has begun his transformation into a mooshroom.
21:41:47 <Phantom_Hoover> I mean a chipmunk.
21:41:52 <Phantom_Hoover> I don't even.
21:43:53 <olsner> things that go *chirp*: mushrooms, chipmunks
21:44:35 <Phantom_Hoover> Yes.
21:44:58 <Phantom_Hoover> Mushrooms are noted for their chirps.
21:45:29 <fizzie> And signal processing folks.
21:48:02 <oerjan> and here i thought it was the sound of crickets.
21:53:55 -!- pumpkin has joined.
21:54:03 <monqy> the sound of tumbleweeds, no?
21:54:55 * oerjan notes reddit's r/particlephysics is not very active.
21:55:17 <oerjan> only two posts about the neutrinos
21:56:07 <fizzie> All the participants have tragically been annihilated in redditor-antiredditor collisions.
21:56:10 -!- copumpkin has quit (Ping timeout: 260 seconds).
21:56:20 -!- pumpkin has changed nick to copumpkin.
21:56:22 <oerjan> fizzie: sounds plausible.
21:56:47 <fizzie> It's an occupational hazard for a particle physicist.
21:56:59 <oerjan> copumpkin might meet a similar destiny if his nicks ever touch
21:57:19 <copumpkin> :O
21:57:32 <pikhq> I don't think that there's anything about impacts between objects and coöbjects.
21:57:58 <oerjan> i'm sure co- includes all forms of duality.
21:58:37 <oerjan> when you combine vectors and covectors the wrong way, all you end up with is a single number.
21:59:49 <oerjan> and if you do it the other way, you suddenly find yourself in the matrix.
22:00:31 <pikhq> Seems to me both numbers and matrices are members of vector spaces, and thus vectors. So I'm not entirely sure why that's relevant. :P
22:01:37 <Phantom_Hoover> `quote
22:01:38 <HackEgo> 586) <Phantom_Hoover> I gave her the Noblesse Oblige rooms. <Phantom_Hoover> She was happy with them even when they were behind 2 locked doors and a floodgate and full of water.
22:01:55 <Phantom_Hoover> Hiiiiiiiiiiiiiiiiiiiiiiird
22:02:14 <quintopia> 2
22:02:49 <oerjan> pikhq: but numbers are one-dimensional. he'd have most of his personality wiped out!
22:03:36 <pikhq> That would be quite sad, wouldn't it?
22:03:59 <oerjan> Phantom_Hoover: i take it this dorf lady was sort of crazy and needed to be kept away from people.
22:04:38 <fizzie> You'll be... at the OUTER LIM^H^H^HPRODUCTS.
22:04:39 <oerjan> or wait, do you mean she couldn't actually get to her rooms
22:05:50 <oerjan> Phantom_Hoover: also didn't you ground yourself preemptively just a while ago?
22:06:19 <Phantom_Hoover> <oerjan> Phantom_Hoover: i take it this dorf lady was sort of crazy and needed to be kept away from people.
22:06:21 <Phantom_Hoover> Actually no.
22:06:50 <Phantom_Hoover> I built the rooms to drown annoying nobles and I'd just used them on the mayor.
22:06:59 <oerjan> ah.
22:07:03 <Phantom_Hoover> And had forgotten to fit a drain.
22:07:24 <oerjan> i take it her stay was somewhat short.
22:10:37 -!- Phantom__Hoover has joined.
22:10:57 -!- Phantom_Hoover has quit (Read error: Connection reset by peer).
22:11:04 <Phantom__Hoover> oerjan, actually, it wasn't, since all her demands were for adamantine stuff so they were fulfilled just by kitting out the military.
22:12:28 <oerjan> ok
22:13:11 <Phantom__Hoover> I think she died when I handed the fort over to elliott and he cocked it all up, though.
22:13:40 <oerjan> shocking!
22:14:38 -!- calamari has quit (Quit: Leaving).
22:24:05 -!- CakeProphet has joined.
22:28:13 -!- sllide has quit (Ping timeout: 248 seconds).
22:30:59 * Phantom__Hoover → sleep
22:31:00 -!- Phantom__Hoover has quit (Quit: Leaving).
22:54:30 -!- calamari has joined.
22:57:32 -!- copumpkin has quit (Quit: Computer has gone to sleep.).
22:58:34 -!- pikhq has quit (Remote host closed the connection).
22:58:52 -!- pikhq has joined.
23:01:23 -!- Patashu has joined.
23:08:29 -!- augur has quit (Remote host closed the connection).
23:10:39 -!- CakeProphet has quit (Ping timeout: 252 seconds).
23:26:09 -!- copumpkin has joined.
23:28:50 -!- calamari has quit (Ping timeout: 252 seconds).
23:36:29 -!- Jafet has quit (Quit: Leaving.).
23:59:43 -!- CakeProphet has joined.
23:59:51 -!- CakeProphet has quit (Changing host).
23:59:51 -!- CakeProphet has joined.
2011-09-27
00:02:37 -!- calamari has joined.
00:11:28 -!- CakeProphet has quit (Ping timeout: 258 seconds).
00:13:11 -!- CakeProphet has joined.
00:13:11 -!- CakeProphet has quit (Changing host).
00:13:11 -!- CakeProphet has joined.
00:34:24 <ais523> gah, I just read http://esolangs.org/wiki/German
00:34:43 <ais523> is that even, technically, a language? it just looks like a really inefficient binary encoding format
00:35:17 <ais523> I'm trying to figure out if it's even worse than a BF equivalent or not
00:38:21 <hagb4rd> lol
00:41:35 <coppro> I vote worse
00:43:04 <pikhq> Shortening (the hydrogenated vegetable oil product) both disturbs and confuses me.
00:46:13 <oerjan> he could at least have spelt Bier correctly *whistles innocently*
00:50:19 -!- Jafet has joined.
00:56:19 -!- augur has joined.
00:56:41 -!- hagb4rd has quit (Quit: Nettalk6 - www.ntalk.de).
00:56:43 -!- augur has quit (Remote host closed the connection).
01:00:29 -!- hagb4rd has joined.
01:02:03 -!- myndzi has joined.
01:04:44 -!- myndzi\ has quit (Ping timeout: 255 seconds).
01:22:10 -!- ais523 has quit (Remote host closed the connection).
01:23:51 -!- calamari has quit (Quit: Leaving).
01:36:38 -!- MichaelBurge has quit (Read error: Connection reset by peer).
01:37:21 -!- tiffany has quit (Quit: Bai~).
01:51:05 -!- augur has joined.
01:53:32 -!- augur has quit (Remote host closed the connection).
01:58:30 -!- Jafet has quit (Quit: Leaving.).
02:04:24 -!- augur has joined.
02:04:58 -!- Jafet has joined.
02:05:04 -!- Jafet has quit (Changing host).
02:05:04 -!- Jafet has joined.
02:06:46 -!- augur has quit (Remote host closed the connection).
02:08:44 -!- augur has joined.
02:32:26 -!- Sgeo|web has joined.
02:32:55 <Sgeo|web> It is a bad idea to resort to doing arithmatic by hand on an exam because you want to be a show-off and don't want to ask to borrow a calculator
02:35:54 <Sgeo|web> I ran out of time, for the first time in a very long time
02:36:57 <pikhq> Shame the exam required nontrivial arithmetic. Irrelevancies.
02:38:31 <olsner> at (my) university, they never allow calculators on math exams (though I think they allow it in e.g. physics, where the results might be more interesting than the working)
02:39:54 <pikhq> I've generally been used to either "you may not use calculators" or "sure, I guess you can use calculators, but I doubt it'll help".
02:40:48 <pikhq> It's not that likely that fast arithmetic is going to in any way aid you in demonstrating conceptual understanding, after all.
02:41:37 <olsner> in high school we had to do some things with a calculator though, but only because the ability to use a calculator is part of the math curriculum
02:42:21 <olsner> never figured out why, iirc they claimed I would need it in university
02:43:19 <pikhq> If they wanted to teach you something useful, they'd teach you programming, and probably the usage of a CAS.
02:43:29 <Sgeo|web> pikhq: Calculators were allowed. I didn't have one.
02:43:32 <olsner> CAS?
02:43:37 <pikhq> Computer algebra system.
02:45:05 <Sgeo|web> And didn't ask for one until _after_ I finished doing the problem that involved a rather annoying amount of arithmetic.
02:45:14 <Sgeo|web> And noted how little time I had left
02:46:22 <pikhq> Sgeo|web: I'm being annoyed that a calculator was allowed and actually useful.
02:46:31 -!- MichaelBurge has joined.
02:47:02 <Sgeo|web> Ah
02:47:29 <pikhq> Sgeo|web: The ability to perform trivial-yet-annoying arithmetic quickly, calculator or not, is almost certainly an utter irrelevancy.
02:54:55 -!- augur has quit (Remote host closed the connection).
03:01:33 -!- augur has joined.
03:21:52 -!- buds has joined.
03:25:00 -!- buds has quit (Quit: Leaving.).
03:30:42 -!- copumpkin has changed nick to presheaves.
03:41:06 -!- presheaves has changed nick to copumpkin.
03:51:42 -!- Jafet has quit (Quit: Leaving.).
03:57:55 -!- oerjan has quit (Quit: Good night).
03:59:43 -!- sebbu2 has joined.
03:59:43 -!- sebbu2 has quit (Changing host).
03:59:43 -!- sebbu2 has joined.
04:00:01 -!- sebbu has quit (Ping timeout: 256 seconds).
04:15:39 -!- CakeProphet has quit (Ping timeout: 258 seconds).
04:19:08 -!- pumpkin has joined.
04:23:13 -!- copumpkin has quit (Ping timeout: 260 seconds).
04:25:29 -!- GreaseMonkey has joined.
04:27:28 -!- pumpkin has changed nick to copumpkin.
04:39:58 -!- augur has quit (Remote host closed the connection).
05:10:37 -!- MDude has changed nick to MSleep.
05:11:58 -!- Vorpal has joined.
05:23:11 -!- variable has quit (Excess Flood).
05:24:11 -!- Guest13902 has joined.
05:28:09 -!- Guest13902 has quit (Changing host).
05:28:09 -!- Guest13902 has joined.
05:28:22 -!- Guest13902 has changed nick to variable.
05:42:42 -!- Jafet has joined.
05:56:31 -!- hagb4rd has quit (Ping timeout: 260 seconds).
06:13:07 -!- copumpkin has quit (Ping timeout: 240 seconds).
06:13:32 -!- copumpkin has joined.
06:22:15 -!- augur has joined.
06:22:32 -!- azaq23 has joined.
06:22:43 -!- azaq23 has quit (Max SendQ exceeded).
06:23:07 -!- azaq23 has joined.
07:54:28 -!- Madoka-Kaname has quit (Excess Flood).
07:54:49 -!- Madoka-Kaname has joined.
07:55:32 -!- Madoka-Kaname has quit (Changing host).
07:55:32 -!- Madoka-Kaname has joined.
08:33:00 -!- myndzi has quit (Remote host closed the connection).
08:35:51 -!- monqy has quit (Quit: hello).
08:40:07 -!- myndzi has joined.
09:48:46 -!- sebbu2 has changed nick to sebbu.
09:52:48 -!- copumpkin has quit (Ping timeout: 260 seconds).
09:53:12 -!- copumpkin has joined.
10:39:53 -!- hagb4rd has joined.
10:50:46 -!- fungot has quit (Ping timeout: 244 seconds).
10:55:06 -!- GreaseMonkey has quit (Quit: The Other Game).
10:56:58 -!- Patashu has quit (Ping timeout: 260 seconds).
11:35:58 -!- sebbu2 has joined.
11:35:58 -!- sebbu2 has quit (Changing host).
11:35:58 -!- sebbu2 has joined.
11:36:02 -!- sebbu has quit (Ping timeout: 260 seconds).
11:49:11 -!- Phantom_Hoover has joined.
12:12:34 -!- ais523 has joined.
12:20:22 -!- ais523 has quit (Remote host closed the connection).
12:28:01 -!- ais523 has joined.
12:30:45 -!- sllide has joined.
12:37:04 -!- sllide has quit (Read error: Connection reset by peer).
12:45:38 -!- sllide has joined.
12:52:47 -!- augur has quit (Remote host closed the connection).
12:58:24 -!- oerjan has joined.
13:27:41 -!- ais523 has quit (Remote host closed the connection).
13:34:02 -!- oerjan has quit (Quit: leaving).
13:34:35 -!- augur has joined.
14:12:18 -!- copumpkin has quit (Quit: Computer has gone to sleep.).
14:23:46 -!- ais523 has joined.
14:28:08 -!- sebbu3 has joined.
14:28:08 -!- sebbu3 has quit (Changing host).
14:28:08 -!- sebbu3 has joined.
14:29:43 -!- Effilry has joined.
14:31:26 -!- sebbu2 has quit (Ping timeout: 248 seconds).
14:31:38 -!- Effilry has quit (Changing host).
14:31:38 -!- Effilry has joined.
14:31:46 -!- Effilry has changed nick to FireFly.
14:41:14 -!- copumpkin has joined.
14:41:42 <Phantom_Hoover> copumpkin!
14:42:25 <copumpkin> hi :)
14:49:15 <Phantom_Hoover> So are you actually any kind of god.
14:52:59 <copumpkin> yeah
15:11:03 -!- MSleep has changed nick to MDude.
15:15:08 <Vorpal> <delegate decode="sid" command="&quot;mrsidgeodecode&quot; -if sid -i &quot;%i&quot; -of tif -o &quot;%o&quot; &gt; &quot;%u&quot;"/> <-- why the fuck did they go for xml for a config file that basically only contains lines like that. And why did they put it in an attribute. The &quot; thingy everywhere is hideous.
15:15:17 <Vorpal> (from /etc/ImageMagick/delegates.xml)
15:32:09 -!- Zuu has quit (Read error: Connection reset by peer).
15:37:44 -!- Zuu has joined.
15:43:21 <Sgeo|web> UPDATE [of PBF]
15:43:39 -!- BeholdMyGlory has joined.
15:59:07 -!- monqy has joined.
16:00:45 -!- boily has quit (Quit: WeeChat 0.3.5).
16:08:16 -!- augur has quit (Remote host closed the connection).
16:08:48 <Phantom_Hoover> Sgeo|web, wait whaaaaaaaaa
16:25:01 -!- Ngevd has joined.
16:25:29 <Ngevd> Hello!
16:25:51 <Phantom_Hoover> That's Numberwang!
16:28:02 <Ngevd> !numberwang 4
16:28:04 <EgoBot> That's numberwang!
16:28:18 <Phantom_Hoover> !numberwang 8
16:28:19 <EgoBot> That's numberwang!
16:28:23 <Phantom_Hoover> !numberwang 2345
16:28:24 <EgoBot> That's numberwang!
16:28:53 <Ngevd> !numberwang Fifty twelve
16:28:53 <EgoBot> I'm sorry, but Brazil isn't a vegetable!
16:29:10 <Phantom_Hoover> !show numberwang
16:29:10 <EgoBot> perl print (grep (/\d/, <>) ? q(That's numberwang!) : q(I'm sorry, but Brazil isn't a vegetable!))
16:29:33 <Phantom_Hoover> !numberwang numberwang
16:29:34 <EgoBot> I'm sorry, but Brazil isn't a vegetable!
16:32:34 <Ngevd> Someone who doesn't get the preview tool has made an esolang
16:34:24 <Ngevd> Not a bad esolang either
16:34:42 <Phantom_Hoover> I'LL BE THE JUDGE OF THAT
16:34:56 <Phantom_Hoover> Wait dammit RC doesn't work.
16:37:02 <Ngevd> It's a language with geometric output
16:40:59 <Ngevd> Reasonably interesting
16:41:29 <Phantom_Hoover> Link?
16:42:09 <Vorpal> Sgeo|web: PBF being?
16:42:34 <monqy> http://esoteric.voxelperfect.net/wiki/Geom
16:43:05 -!- CakeProphet has joined.
16:50:23 -!- Ngevd has quit (Ping timeout: 260 seconds).
16:55:26 -!- elliott has joined.
16:55:45 -!- elliott has quit (Changing host).
16:55:45 -!- elliott has joined.
16:57:03 <elliott> hi
16:57:06 <ais523> hi
16:57:13 <elliott> h...i
16:57:20 <CakeProphet> http://www.codepedia.com/1/CppExpression
16:57:21 <CakeProphet> no
16:57:40 <CakeProphet> "An expression is a statement without a semicolon"
16:57:53 <CakeProphet> bad description of what an expression is or worst?
16:57:54 <CakeProphet> discuss.
16:57:55 <elliott> yes
16:58:28 <monqy> :(
16:58:52 <CakeProphet> http://www.codepedia.com/1/CppStatement
16:58:57 <ais523> elliott: depends on the language
16:59:04 <ais523> in ICA, statements are a special case of expressions
16:59:07 <CakeProphet> "A statement is an expression with a semicolon [1]. Multiple statements, surrounded by acccolades ('{' and '}') form a compound statement "
16:59:12 <elliott> http://esolangs.org/wiki/CUTLASS
16:59:14 <elliott> um
16:59:14 <ais523> (I suspect in most languages it's the other way round)
16:59:16 <elliott> ??????
16:59:20 -!- MSleep has joined.
16:59:21 <CakeProphet> expression are statements or statements are expressions? help
16:59:31 <fizzie> CakeProphet: You keep removing the [1]s; it's not just any thing, it's a thing with a citation.
16:59:38 <ais523> elliott: looks copied from somewhere
16:59:42 <fizzie> Well, at least from the first one.
16:59:43 <elliott> ais523: nope
16:59:48 <elliott> (cur) (last) 10:55, 30 September 2008 147.89.224.69 (Talk) (Fairly major rewrite from someone involved in the Cutlass Kit 9 project! I hope this is useful.)
16:59:59 <elliott> I suspect 147.89.224.75 is the same editor
17:00:04 <elliott> since it's very close
17:00:08 <elliott> and who the hell knows what CUTLASS is
17:00:16 <CakeProphet> fizzie: even if it's cited it's still a horrible definition.
17:00:19 <elliott> but the page has been around for four years...
17:00:24 <ais523> yep, no results on a quick copyvio search
17:00:34 <ais523> the page really needs bancstarisation, I just don't know what that is
17:00:49 <elliott> it needs moving to another wiki :P
17:01:06 <fizzie> CakeProphet: Also not just any citation, but a citation to a Dutch book.
17:01:25 <CakeProphet> plant I/O and control loops. botany is good yes.
17:01:39 <CakeProphet> fizzie: which meaaaans....
17:02:48 <CakeProphet> The Cutlass language contains an extensive library of functions specially tailored for process control applications. These include mode and history-dependent functions such as integrators, filters, PID controllers, as well as a range of data-reduction routines and steam tables.
17:02:53 <CakeProphet> steampunk language
17:02:54 -!- MDude has quit (Ping timeout: 248 seconds).
17:03:15 -!- pumpkin has joined.
17:04:30 -!- copumpkin has quit (Ping timeout: 248 seconds).
17:04:32 <CakeProphet> a steampunk language would be done entirely with punch cards, and would player pianos.
17:04:36 <CakeProphet> +involve
17:04:49 <CakeProphet> also zeppelins.
17:05:24 <ais523> sounds great
17:05:37 -!- pumpkin has changed nick to copumpkin.
17:05:59 <monqy> mmm player pianos
17:06:11 -!- CakeProphet has changed nick to tephorPekaC.
17:06:18 -!- tephorPekaC has changed nick to tehporPekaC.
17:06:20 <tehporPekaC> lulz
17:06:35 -!- tehporPekaC has changed nick to CakeProhpet.
17:06:40 <Sgeo|web> Vorpal: Perry Bible Fellowship
17:06:57 <ais523> hey, is it ping random people with random phrases day?
17:07:05 <ais523> elliott: matrix of solidity
17:07:12 <elliott> ais523: walrus
17:07:16 -!- MSleep has changed nick to MDude.
17:07:18 <elliott> Oh wow, Xubuntu uses xscreensaver by default
17:07:23 <elliott> Retro
17:07:26 <Sgeo|web> <Vorpal> Sgeo|web: PBF being?
17:07:27 <ais523> is that awesome or awful?
17:07:30 <CakeProhpet> ais523: ordered multiset of dumbledore dies
17:07:32 <elliott> ais523: It's retro
17:07:44 <ais523> isn't an ordered multiset just... a list?
17:07:46 -!- Ngevd has joined.
17:07:51 <ais523> well, equivalent to one
17:08:02 <ais523> but without the assumptions on internal implementation?
17:08:11 <monqy> list of dumbledore dies
17:08:13 <elliott> a "list" doesn't assume those either
17:08:19 <ais523> hmm, who here would say that "list" to them implies "accessing the first element is faster than accessing the last element"
17:08:27 <elliott> hmm, I have exactly two Xfce annoyances
17:08:29 <CakeProhpet> ais523: lists aren't technical enough to be maths
17:08:32 <ais523> I've known people who would say it does, and who would say it isn't
17:08:32 <elliott> one is major, one is not so major
17:08:34 * Sgeo|web needs to get going now
17:08:35 <elliott> ais523: not me
17:08:35 <ais523> assuming a reasonable length
17:08:36 <Sgeo|web> Bye
17:08:43 <Ngevd> Bye, Sgeo|web
17:08:43 <elliott> ais523: Python calls dynamic-arraylists lists
17:08:47 <fizzie> I used to use xlock.
17:08:54 <ais523> as do many other languages
17:08:54 <fizzie> Or xlockmore, I guess.
17:08:59 <elliott> ais523: do they?
17:09:03 <elliott> give examples
17:09:05 <ais523> fizzie: a screensaver that's also a pager?
17:09:12 <ais523> elliott: ArrayList in Java, at least
17:09:18 <elliott> ais523: that's an arraylist :P
17:09:19 <ais523> is a List, which is hte general term
17:09:20 <CakeProhpet> is there a formalism for lists?
17:09:26 <elliott> fair enough
17:09:35 <fizzie> ais523: Sadly, no. It's an "xlock" variant that has "more" screen-hacks in it.
17:09:51 <CakeProhpet> ais523: but in STL list is a doubly linked list.
17:09:53 <elliott> ais523: the closest/most natural thing Haskell has to a list has O(log(min(i,n-i))) indexing
17:09:55 <ais523> CakeProhpet: data List = Empty | Cons List List
17:09:59 <CakeProhpet> ais523: it's certainly not standard.
17:10:08 <elliott> where n is the length of the list
17:10:46 <ais523> "list" to me has a mild implication of "implemented in a linked list style behind the scenes"
17:10:48 <ais523> but not a certain one
17:11:30 <CakeProhpet> yes me too.
17:11:35 <CakeProhpet> nothing I would take for granted.
17:12:02 <CakeProhpet> ais523: also I think the formalism for a "list" would be sequences.
17:12:04 <CakeProhpet> perhaps?
17:12:09 <elliott> >_<
17:12:41 <ais523> it's interesting that the operations of "head" and "tail" are reasonably implementable with most provided sorts of lists
17:12:51 <ais523> even if they aren't linked lists behind the scenes
17:13:00 <ais523> e.g. you can point to the second element of an array in C
17:13:07 <elliott> ais523: Only immutable ones.
17:13:11 <CakeProhpet> tail isn't quite so reasonable in mutable cases..
17:13:13 <CakeProhpet> yes
17:13:16 <CakeProhpet> what elliott said.
17:13:21 <elliott> ais523: Also, you can't implement cons easily for C arrays.
17:13:23 <ais523> it's hard to work out what "tail" means in the mutable case
17:13:25 <elliott> So it's not really list-tail.
17:13:35 <ais523> and having worked on Overload, I'm not sure I want to
17:14:07 <CakeProhpet> well the sane way to do tail would be to make a copy.
17:14:32 <ais523> Overload didn't!
17:14:47 <CakeProhpet> Overload doesn't sound like the name of a sane language.
17:15:15 <ais523> it wasn't
17:15:21 <ais523> well, isn't, I assume it still exists
17:15:26 <CakeProhpet> but you could certainly do pointer shenanigans and return the original uncopied tail.
17:15:27 <ais523> but I never finished it as the insanity got too much for me
17:15:36 <monqy> speaking of feather
17:15:38 <ais523> it's not like Feather, it was a perfectly ordinary sort of insanity
17:15:51 <ais523> that could be fixed with persistence, but the resulting language would be insufficiently awesome
17:16:12 <ais523> and oh, how pointer-shenaningans Overload was
17:16:28 <elliott> ais523: so anyway, I recommend Debian+Xfce or Xubuntu as a migration path for Ubuntu users
17:16:34 <CakeProhpet> in STL C++, tail on most data structures would require a copy I believe.
17:16:39 <ais523> elliott: so what are the two issues with xfce?
17:16:44 <elliott> they're very unlikely to fuck up Xfce, and it can be made to work basically exactly like gnome two
17:16:55 <ais523> I take it those aren't the two issues?
17:16:58 <elliott> heh
17:17:04 <elliott> ais523: One is with the panel, this is the less important one; the window list in the taskbar can't be rearranged
17:17:25 <ais523> `addquote <ais523> elliott: so what are the two issues with xfce? <elliott> they're very unlikely to fuck up Xfce, and it can be made to work basically exactly like gnome two
17:17:25 <elliott> ais523: The more important one is that scrolling a background window focuses and raises it with default xfwm settings and I can't figure out how to fix it -- but you can just use another wm with xfce
17:17:29 <HackEgo> 688) <ais523> elliott: so what are the two issues with xfce? <elliott> they're very unlikely to fuck up Xfce, and it can be made to work basically exactly like gnome two
17:17:30 <CakeProhpet> elliott: 1) hack xfce 2) profit
17:17:44 <elliott> ais523: indeed, even Metacity would work fine
17:17:48 <elliott> The following NEW packages will be installed:
17:17:49 <elliott> libgnome2-common libmetacity-private0 metacity metacity-common
17:17:53 <ais523> elliott: hmm, how often do you scroll background windows? I do, but only occasionally
17:17:54 <elliott> not an unreasonable set of dependencies
17:17:57 <elliott> ais523: often
17:18:00 <ais523> yep, that's reasonable
17:18:07 <ais523> would I be shot for using xfce with Compiz?
17:18:10 <elliott> ais523: e.g., I have IRC on top but am reading a background web page
17:18:23 <CakeProhpet> elliott: is metacity pronoucned "meta city" or "meTAcity" (with the stress on ta)
17:18:23 <elliott> ais523: and, well, I wouldn't like you; both xfwm and metacity can do compositing and shadows
17:18:25 <ais523> ah, I prefer to alt-tab then
17:18:34 <elliott> xfwm can even do opacity
17:18:37 <elliott> and opacity adjustment
17:18:42 <ais523> what about contrast change?
17:18:46 <ais523> or zoom?
17:18:47 <elliott> (alt-scroll on the title bar)
17:18:52 <elliott> dunno, let me check :P
17:19:11 <ais523> zoom is particularly useful for checking that subpixel algos are working properly
17:19:37 <ais523> hmm, I don't think I've used color-inverse for ages since I discovered contrast change
17:19:41 <ais523> I like a dark screen at night
17:19:52 <elliott> ais523: the only results I can find about zoom+xfwm are pages telling you how to overcomplicatedly set up compiz with xfce
17:20:00 <elliott> so I'd say just use compiz :P
17:20:16 <ais523> for a while I had Epiphany force-override colors used by webpages, but webpages don't seem to really like that behaviour nowadays
17:20:22 <elliott> ais523: it'll work fine, although the default Xubuntu theme is nice and depends on a xfwm theme to be nic
17:20:22 <elliott> e
17:20:41 <elliott> oh, looks like someone ported it to compiz :P
17:20:46 <ais523> oh, I'm used to bad themes, at least
17:20:46 <elliott> yep
17:20:51 <ais523> given that I'm often not on my own computer
17:21:13 <ais523> although the one I'm using at the moment is pretty nice (it's the New Wave theme that was proposed for Ubuntu but never accepted)
17:21:23 <CakeProhpet> An infinite binary sequence can represent a formal language (a set of strings) by setting the n th bit of the sequence to 1 if and only if the n th string (in shortlex order) is in the language. Therefore, the study of complexity classes, which are sets of languages, may be regarded as studying sets of infinite sequences.
17:21:37 <CakeProhpet> lolwat
17:21:47 -!- ralc has joined.
17:21:50 <CakeProhpet> this is way over my head.
17:22:14 <ais523> I understand it, but it doesn't seem particularly useful
17:22:39 <ais523> basically, because programs close to each other in shortlex order don't necessarily have anything to do with each other at all
17:23:12 <elliott> ais523: I actually really like Xubuntu's default theme: http://ompldr.org/vYWswMA, http://ompldr.org/vYWp6eg
17:23:24 <elliott> that's just me, though
17:23:35 <ais523> hmm, that's passable
17:23:38 <CakeProhpet> ais523: oh wait I understand I think. but not what it has to do with complexity classes.
17:23:43 <ais523> a bit like the Mac brushed-metal theme but simpler
17:23:58 <elliott> ais523: not brushed-metal
17:24:11 <elliott> it's more like the smooth style seen Leopard onwards
17:24:18 <ais523> hmm, the min/max/close buttons look misaligned
17:24:23 <elliott> brushed metal is this abomination: http://en.wikipedia.org/wiki/File:TigerCalc.png
17:24:26 <Sgeo|web> Chrome as opposed to Chromium?
17:24:43 <ais523> elliott: ouch, you're right
17:24:49 <elliott> ais523: hmm... minimise looks slightly higher than it should be, but it hasn't bothered me yet
17:24:52 <ais523> yep, the close button is centred half a pixel higher than it should be
17:24:54 <CakeProhpet> ais523: is there operations you could perform on these binary sequences that would be useful in studying complexity classes?
17:24:55 <elliott> and I think it's pixel-correct
17:24:57 <ais523> I just zoomed in to check
17:24:58 <elliott> oh, is it?
17:25:01 <CakeProhpet> ais523: maybe the adjacency of the sequence terms is irrelevant.
17:25:04 <elliott> fair enough
17:25:14 <elliott> ais523: using compiz would solve that :P
17:25:20 <elliott> since the compiz version is based on another theme
17:25:23 <elliott> rather than being a straight port
17:25:31 <elliott> or, hmm
17:25:32 <elliott> http://xfce-look.org/CONTENT/content-pre3/143376-3.png
17:25:33 <ais523> I think it's because they were trying to snap shapes to pixels
17:25:37 <elliott> it /looks/ right to me
17:26:02 <ais523> bleh, I can't tell on that one even zoomed in, because it's pretty heavily antialiased
17:26:06 <ais523> which I suppose makes it more likely to be lined up right
17:26:14 <elliott> I think it's the same?
17:26:15 <elliott> as my screenshot
17:26:20 <elliott> it doesn't look more antialiased to me
17:26:33 <elliott> the buttons seem identical here
17:26:40 <ais523> oh, I'm stupid, I zoomed in on a zoomed-out version
17:26:52 <elliott> ais523: you can turn off zoom antialiasing with compiz
17:26:52 <ais523> and it's the downscaler algo that misaligned it
17:26:52 <elliott> I think
17:26:55 <ais523> by trying to round to pixels
17:27:08 <ais523> oh, I meant the original was antialiased, not the zoom
17:27:33 <CakeProhpet> PSPACE=NPSPACE. really?
17:27:47 <elliott> ais523: well, it wouldn't be a problem if your zoomer used nearest neighbour
17:28:00 <CakeProhpet> oh okay I see how that could be.
17:28:05 <ais523> CakeProhpet: pretty obviously, just run all the possibilities one after the other
17:28:23 <ais523> elliott: blame Firefox, I guess
17:28:32 <elliott> ais523: umm, but you said it was zoomed out in Firefox
17:28:35 <elliott> so it should be original size
17:28:36 <fizzie> "Three Rings: This article is about the fictional artifacts. For the video game developer, see Three Rings Design. For the Three Rings on the Ring of Light, see Xbox 360 technical problems. For the T-Pain album, see Thr33 Ringz."
17:28:39 <elliott> or
17:28:39 <elliott> oh
17:28:42 <elliott> you dezoomed in Fx
17:28:43 <elliott> okay
17:28:45 <ais523> elliott: it was the downscaled thumbnail in Firefox
17:28:48 <elliott> rifgt
17:28:49 <fizzie> "Three Rings on the Ring of Light, see Xbox 360 technical problems".
17:28:49 <ais523> I forgot to click to expand
17:28:51 <elliott> right
17:28:59 <fizzie> There's some sort of style mismatch there.
17:29:00 <ais523> then I used Compiz to zoom in on that
17:29:10 <elliott> how small is your Fx window? that image is tiny
17:29:13 <ais523> fizzie: the Ring of Light is the official name
17:29:26 <fizzie> ais523: That is a nice name.
17:29:29 <ais523> maximised on 1366x768, with some toolbars/taskbars in the way
17:29:36 <CakeProhpet> ais523: but PTIME != NPTIME. or, well, we don't know still.
17:29:45 <CakeProhpet> but probably not.
17:29:59 <ais523> well, the PSPACE/NPSPACE argument obviously doesn't apply to P=?NP
17:30:12 <CakeProhpet> ais523: right. it's an unrelated though
17:30:13 <CakeProhpet> t
17:30:18 <ais523> oh right, IMPORTANT NOTATIONAL QUESTION that came up today: how do you write the operation of "add the same integer to every element of a list"?
17:30:27 <elliott> ais523: n+list
17:30:38 <CakeProhpet> best way.
17:30:39 <ais523> I tried that, but was accused of that being disjoint union
17:30:47 <elliott> ais523: map (n+) list
17:30:48 <ais523> well, it was a set, not a list
17:31:09 <ais523> I was using n .+ list as a placeholder (it's what MATLAB calls the operation, and it's the only widely-used language I've ever seen with it built in)
17:31:20 <CakeProhpet> n+list is how APL works right?
17:33:18 -!- elliott has left ("Leaving").
17:33:25 -!- elliott has joined.
17:33:27 <elliott> WHAT FUCKING KEY DO I KEEP PRESSING
17:33:33 <monqy> bad
17:33:37 <CakeProhpet> elliott: what was that language you were talking about that's awesome and uses arrays or something?
17:33:40 <elliott> Ah yes, I kept pressing the "bad" key.
17:33:42 <CakeProhpet> J?
17:33:51 <elliott> J is array-based, yes.
17:34:11 <CakeProhpet> the programs look like Perl mixed with brainfuck.
17:34:15 <CakeProhpet> in terms of syhntax
17:34:16 <elliott> no, they don't
17:34:17 <Ngevd> Visual J#
17:34:20 <ais523> elliott: some sort of middle-click where it shouldn't be (the usual reason for me to accidentally part a channel)?
17:34:23 <monqy> CakeProhpet: not at all
17:34:30 <CakeProhpet> I just recall them being rather noisy
17:34:33 <CakeProhpet> is all I'm saying by that
17:34:35 <fizzie> ais523: You add a (same) scalar to each element of a list in MATLAB with just plain old regular "+". There is no ".+" operator.
17:34:36 <CakeProhpet> don't take it personal. :P
17:34:42 <ais523> fizzie: hmm
17:34:51 <ais523> I've used really old MATLAB, and GAUSS before that
17:34:53 <ais523> maybe they changed it
17:34:54 <elliott> ais523: no, key
17:35:02 <ais523> elliott: control-W? seems a little hard to typo
17:35:08 <ais523> esc? seems a weird keybinding for a client to use
17:35:09 <monqy> Ngevd: j# is something entirely diffferent
17:35:25 <fizzie> ais523: There is a ".*" and "./" to differentiate elementwise multiplication/division from matrix product/right-division.
17:35:27 <ais523> and F# is an OCaml clone linked up to the .NET standard library
17:35:28 <CakeProhpet> or is it k? it was some letter.
17:35:34 <ais523> fizzie: perhaps that's what I was thinking of
17:35:36 <fizzie> ais523: But you can multiply a list by a scalar with plain "*" anyway.
17:35:48 -!- elliott_ has joined.
17:35:52 <ais523> ofc, matrix addition is just + anyway
17:36:05 <elliott_> as I was going to say
17:36:11 <elliott_> I think I'll just si
17:36:16 <elliott_> I think I'll just switch to an xmonad setup when I get the desktop
17:36:34 <CakeProhpet> J looks more verbose than the language I'm thinking of.
17:36:39 <CakeProhpet> oh no that's it.
17:36:53 <CakeProhpet> I just haven't seen many examples of the code.
17:37:34 -!- MDude has quit (Ping timeout: 248 seconds).
17:37:50 <CakeProhpet> elliott: is it J or K that you like a lot?
17:37:56 -!- elliott has quit (Read error: Connection reset by peer).
17:37:59 <CakeProhpet> sdhguijeuhsf
17:38:06 <monqy> dont worry elliott_s here
17:38:19 <CakeProhpet> elliott_: ^
17:38:22 <monqy> "a lifes aver"
17:39:04 -!- elliott__ has joined.
17:39:08 <elliott__> OIFJDLKHGHGLKSDFG
17:39:10 <monqy> hi elliott__
17:39:10 <CakeProhpet> the underscores are multiplying
17:39:23 <ais523> CakeProhpet: no, 1 * 1 is 1
17:39:25 <ais523> they're adding
17:39:37 <ais523> gah that name is annoying, I keep thinking my tab-complete typoed
17:39:47 <monqy> best name
17:39:48 <CakeProhpet> INCREASING BY A LINEAR FUNCTION
17:39:49 <CakeProhpet> FINE
17:39:59 <CakeProhpet> SO. PICKY.
17:40:39 <CakeProhpet> elliott_: was it J or K that you like?
17:40:45 <elliott__> I answered that.
17:40:58 <monqy> except it didn't survive
17:41:21 <CakeProhpet> elliott_: not on my buffer.
17:41:34 -!- elliott_ has quit (Ping timeout: 245 seconds).
17:41:38 <monqy> yikes
17:41:48 <CakeProhpet> I WILL NEVER KNOW
17:41:51 <CakeProhpet> HOW CAN ILIVE?
17:42:00 <monqy> by asking elliott__
17:42:05 <elliott__> fizzie: Hey, you can make tig's log nicer.
17:42:13 <elliott__> fizzie: Try Ctrl+Up.
17:42:20 <CakeProhpet> monqy: each underscored elliot is a fabrication of the previous
17:42:28 <monqy> elliot_
17:42:41 <CakeProhpet> a mere simulacrum.
17:42:48 <monqy> elliottt_
17:43:24 <monqy> instead of using underscores i should append ys
17:43:32 -!- boily has joined.
17:43:32 <monqy> monqyyyyyyyyyyyyyy (a bad day for connections)
17:43:51 <CakeProhpet> I should use various misspellings and backwardsizations of my name.
17:44:05 -!- CakeProhpet has changed nick to CakeProphet.
17:45:10 <CakeProphet> elliott__: but yeah you never answered my question visibly. I double checked my buffer.
17:45:12 -!- Ngevd has quit (Ping timeout: 260 seconds).
17:45:25 <elliott__> then J
17:45:30 <CakeProphet> ah okay.
17:45:46 <elliott__> though K is nice too.
17:45:47 <CakeProphet> K looks pretty similar however. I wonder if it's better or worse.
17:45:49 <CakeProphet> ah.
17:45:57 <elliott__> it is just different
17:46:01 <elliott__> ais523: is it just me or has the method of reporting crashes got more complicated in Ubuntu?
17:46:12 <ais523> I don't know, as I haven't had one for a while
17:46:15 <CakeProphet> K isn't functional like J kind of is right?
17:46:16 <ais523> the benefits of LTS, I guess
17:46:27 * CakeProphet doesn't understand either very well, other than they work like APL.
17:46:34 <elliott__> CakeProphet: in which way do you think J is functional, in which way do you think K does not have this property
17:46:40 <elliott__> ais523: I mean, program crashes
17:46:43 <CakeProphet> elliott__: nothing very concrete.
17:46:44 <elliott__> Pidgin is crashing incessantly
17:46:56 <elliott__> CakeProphet: can't answer then s.r.y.
17:46:59 <ais523> oh, IIRC KDE and Gnome each had their own bugreporter
17:47:00 <CakeProphet> elliott__: I am probing around and getting answers.
17:47:08 <CakeProphet> conversationally.
17:47:12 <elliott__> ais523: too bad Pidgin is part of neither
17:47:19 <ais523> indeed, that's what I just realised
17:47:24 <monqy> CakeProphet: say bad things, get corrected, no remorse
17:47:49 <CakeProphet> monqy: it's a common way people converse...
17:47:56 <CakeProphet> to learn about things.
17:48:04 <monqy> bad people
17:48:08 <CakeProphet> okay fine.
17:48:48 -!- ralc has quit (Read error: Operation timed out).
17:49:52 <elliott__> HMMMMMMmmmmmmmmm
17:49:56 <Vorpal> ais523: hm maybe you know the answer to this question: how does that lever on the back of a car mirror that reduces the blinding effect from car lights behind actually work
17:50:00 <Vorpal> physically I mean
17:50:03 <CakeProphet> ah so they are both functional just in different ways.
17:50:18 <monqy> different ways?
17:50:19 <ais523> Vorpal: I'm afraid I don't know what you're referring to
17:50:21 <Vorpal> it just seems to tilt the mirror but somehow still show the same area, but with less light?
17:50:27 <Vorpal> ais523: you have a driving license?
17:50:27 <CakeProphet> monqy: differently influenced.
17:50:31 <ais523> no, I don't
17:50:35 <Vorpal> ais523: ah okay
17:50:40 <Vorpal> well who else could know
17:50:40 <ais523> giving me one would probably be criminal negligence
17:50:41 <monqy> CakeProphet: ???
17:50:52 <CakeProphet> monqy: I can't answer question marks.
17:51:01 <ais523> I can't concentrate really heavily for long periods of time at a time
17:51:04 <Vorpal> ais523: thing is: you know that cars have three mirrors? One on each side and one in the middle inside?
17:51:09 <monqy> CakeProphet: would you prefer a what
17:51:09 <ais523> I can stay focused, but that's not the same as concentrating
17:51:12 <ais523> yep, I know what a wing mirror is
17:51:15 <CakeProphet> monqy: no that's the same thing
17:51:20 <monqy> CakeProphet: what????
17:51:21 <ais523> but I don't know what the lever you're referring to is
17:51:23 <Vorpal> ais523: I'm interested in the mirror inside, not the ones on the side
17:51:26 <CakeProphet> monqy: "hi please repeat yourself in a more verbose way"
17:51:32 <Vorpal> the lever is on the internal mirror
17:51:35 <ais523> ah, I don't think I've seen that adjusted while driving
17:51:40 <ais523> and it's just to change the angle, IIRC
17:51:42 <monqy> monqy: hi please repeat yourself in a way that makes sense
17:51:51 <monqy> oops
17:51:56 <elliott__> <CakeProphet> ah so they are both functional just in different ways.
17:51:56 <ais523> although, the obvious explanation is that it tilts the mirror so that the car lights are no longer reflecting into your eyes, but miss your eyes
17:51:59 <elliott__> Neither J nor K is pure.
17:52:04 <ais523> and the same area is still mostly visible, just on a different part of the mirror
17:52:10 <elliott__> Neither J nor K have full first-class function support, either.
17:52:22 <Vorpal> ais523: well if it is dark it has a kind of lever on it that you flip and suddenly the light from behind is reduced, useful when driving in the dark when you get strong headlights from behind
17:52:31 <Vorpal> it is just that the manner it works in is pure magic to me
17:52:36 <ais523> it probably just changes it between two possible settings
17:52:43 <ais523> on the basis that one of them won't reflect into your eyes
17:52:57 <CakeProphet> monqy: J is influenced by FP/FL, K is influenced by Scheme. Differently. Influenced.
17:53:13 <Vorpal> ais523: well, it seems to show the same area behind kind of. As in the position of the headlights doesn't seem to shift, just be reduced
17:53:19 <CakeProphet> elliott__: I didn't say they were pure.
17:53:21 <CakeProphet> not many things are pure.
17:53:35 <monqy> CakeProphet: and how does this make them different
17:53:40 <Vorpal> ais523: it does move the view *while* you move the lever. Kind of jumps up then down.
17:53:51 <CakeProphet> elliott__: but the lack of first-class functions definitely strays away from my definition of functional
17:53:54 <monqy> CakeProphet: my question was how are they functional in different ways, not what were their influences
17:54:06 <monqy> CakeProphet: your definition of functional: it kind of sucks
17:54:13 <Vorpal> oh found it on wikipedia
17:54:15 <CakeProphet> monqy: I don't know. I don't actually know these languages I am reading about them and attempting to learn from you guys
17:54:23 <elliott__> read the labs
17:54:44 <Vorpal> ais523: there is some very cleaver stuff going on there: https://secure.wikimedia.org/wikipedia/en/wiki/Rear-view_mirror#Dimming
17:54:52 <CakeProphet> monqy: your conversation skills suck. I'm going to go do something else now.
17:55:19 <monqy> CakeProphet: ok
17:58:27 -!- Ngevd has joined.
17:58:53 -!- variable has quit (Excess Flood).
17:59:22 <fizzie> Vorpal: Oh, I've wondered about that too.
17:59:43 <elliott__> very clearver
17:59:45 <elliott__> very cleaver
18:00:16 <elliott__> I wish I could eliminate this Template Haskell
18:00:28 <CakeProphet> elliott__: you cannot kill an idea.
18:00:30 <CakeProphet> unfortunately.
18:00:39 <elliott__> what
18:01:02 <CakeProphet> oh, I assumed you were using the "kill" definition of eliminate.
18:01:11 -!- variable has joined.
18:01:20 <elliott__> http://stackoverflow.com/questions/1071201/why-does-list-comprehension-using-a-zip-object-results-in-an-empty-list
18:01:27 <elliott__> lol @ python
18:01:44 <CakeProphet> funniest language.
18:03:06 <ais523> so zip basically returns a lazy list except that you can only read it once
18:03:14 <ais523> hmm
18:03:14 <CakeProphet> I think instead of just turning all of the builtin's into generators they should have just moved most of itertools into __builtin__
18:03:35 <CakeProphet> so izip = generator zip
18:03:44 <CakeProphet> and zip still does what it does in Python 2.x
18:03:55 <elliott__> ais523: no
18:03:59 <elliott__> ais523: it's just that for advances it
18:04:08 <elliott__> rather than, e.g. asking it for an iterator and then advancing it
18:04:13 <elliott__> because it's already an iterator (generator)
18:04:16 <elliott__> because :python:
18:04:18 <ais523> ah, OK
18:04:38 <ais523> I suppose "why would you ask an iterator for an iterator" is the implied question there
18:04:52 <Vorpal> <fizzie> Vorpal: Oh, I've wondered about that too. <-- yeah it is quite ingenious
18:05:21 <elliott__> ais523: because see SO question? :P
18:05:33 <ais523> elliott__: well, yes
18:05:41 <ais523> I'm just trying to understand how the design decision question happened
18:06:42 <CakeProphet> I wonder if making a copy of the iterator would work as well.
18:07:09 -!- augur has joined.
18:07:12 <olsner> I'd guess the design decision went something like "herp derp"
18:07:29 <CakeProphet> olsner: good one
18:07:59 <CakeProphet> ah okay you can't use copy() on iterators
18:07:59 <elliott__> Can someone type two five five five six
18:08:01 <CakeProphet> so no that doesn't work.
18:08:03 <CakeProphet> 2556
18:08:09 <elliott__> Wrong
18:08:13 <CakeProphet> 25556
18:08:19 <elliott__> Hooray
18:08:29 <ais523> interesting question
18:08:30 <CakeProphet> elliott__: my eyesight is getting pretty bad.
18:08:35 <olsner> CakeProphet: I think python is one of the most herp of all the derp languages
18:08:46 <CakeProphet> python is actually not incredibly terrible.
18:08:51 <CakeProphet> but it's not great either.
18:08:51 <elliott__> fizzie: So that coproc thing...
18:09:00 <elliott__> ais523: turns out the answer was no
18:09:10 <ais523> heh
18:09:21 <CakeProphet> to date the worst language I have used is C++
18:09:33 <ais523> CakeProphet: how much esolang programming have you done?
18:09:37 <fizzie> elliott__: What about it?-)
18:09:45 <CakeProphet> ais523: not a great amount. but esolangs are exempt
18:09:45 <ais523> admittedly, C++ is pretty bad on the scale of "real" languages
18:09:57 <elliott__> fizzie: ?
18:09:57 <CakeProphet> ais523: people don't write space shuttle code in brainfuck.
18:09:59 <elliott__> Oh right
18:10:05 <elliott__> How do you dereference an array in bash anyway
18:10:07 <elliott__> (n)?
18:10:12 <fizzie> [n].
18:10:25 <fizzie> $ARRAY[0] and $ARRAY[1] and so on. IIRC.
18:10:29 <ais523> it's .[] to deref arrays in OCaml
18:10:35 <ais523> wait, no, .()
18:10:39 <Ngevd> ais523, is c.intercal.org.uk your site?
18:10:40 <ais523> .[] is to take characters strings
18:10:46 <ais523> Ngevd: no, it's Claudio Calvelli's site
18:10:51 <Ngevd> Okay
18:10:55 <ais523> which might seem a little weird given the circumstances
18:10:58 <Ngevd> Would you tell him it is not working
18:11:00 <ais523> but hey, it's INTERCAL
18:11:02 <ais523> Ngevd: in what way?
18:11:03 <elliott__> fizzie:
18:11:03 <elliott__> #!/bin/bash -e
18:11:03 <elliott__> coproc 'nc -l 25556 | tee "$clientlog"'
18:11:03 <elliott__> nc "$1" "$2" <&$COPROC[0] |
18:11:03 <elliott__> tee "$serverlog" >&$COPROC[1]
18:11:07 <elliott__> fizzie: Does that look right to you? :p
18:11:09 <fizzie> Well, I guess you might need ${ARRAY[0]}.
18:11:10 <Ngevd> Won't load
18:11:22 <ais523> oh, indeed
18:11:29 <elliott__> fizzie: Apart from that?
18:11:32 <ais523> in fact, intercal.org.uk seems down generally
18:11:41 <ais523> that is, the subdomains that should exist
18:11:44 <ais523> (the parent domain shouldn't)
18:12:00 <ais523> I'll give it some time to come back up before emailing him
18:12:16 <ais523> what were you trying to find there?
18:12:27 <CakeProphet> hmmm I wonder how you could get the benefits of phantom types without the syntactic overhead.
18:12:32 <elliott__> what
18:12:37 <CakeProphet> so that you don't have to explicitly write the phantom parameter everywhere
18:12:53 <elliott__> "iw ish I could track an addiotioanl piece with my data ... but without specifying it...."
18:12:55 <elliott__> it should just be magic
18:13:35 <CakeProphet> elliott__: no just implicit.
18:13:43 <CakeProphet> but I can't think of a good way to do that.
18:13:43 <elliott__> = magic
18:14:13 <fizzie> elliott__: Sounds like it should work. I was just thinking about making the most useless use of cat ever made, and doing "coproc STUPIDPIPE cat; nc -l 12345 <&${STUPIDPIPE[0]} | tee clientlog | nc server port | tee serverlog >&${STUPIDPIPE[1]}" -- the logic is arguably a little bit clearer there.
18:14:39 <ais523> the most useless use of cat ever is probably along the lines of cat | startx
18:14:50 <elliott__> fizzie: Heh.
18:14:58 <CakeProphet> though the use I was thinking of is impossible I just realized. I don't think you can turn zero division into a type error, except for a small minority of cases.
18:14:59 <elliott__> fizzie: Well, it's nicer in that it quits if the listener does too.
18:14:59 <fizzie> The name of the coproc was chosen to reflect the fact that it really should be able to just pop up pipes somehow.
18:15:20 <elliott__> fizzie: But... hmm, will that coproc die when the script does?
18:16:00 <fizzie> Nnnmaybe. "Physically" speaking it should depend on whether the pipes get closed.
18:16:09 <fizzie> But that's sort of up to bash.
18:16:39 <fizzie> kill $STUPIDPIPE_PID at the end to make sure. :p
18:17:04 -!- Phantom_Hoover has changed nick to Pharmtom_Hoover.
18:17:46 <fizzie> I was in fact sort of assuming you could do the whole thing with a single socat, but it doesn't seem to have raw data logging facilities.
18:18:00 <fizzie> Or fanning stuff to multiple destinations.
18:18:17 <elliott__> tools/log-packets: line 7: PIPE: command not found
18:18:17 <elliott__> tools/log-packets: line 8: ${COPROC[0]}: Bad file descriptor
18:18:17 <elliott__> tools/log-packets: line 9: ${COPROC[1]}: Bad file descriptor
18:18:19 <fizzie> Poor stuff for a self-styled "netcat++".
18:18:27 <elliott__> fizzie: I...
18:18:32 <elliott__> coproc: coproc [NAME] command [redirections]
18:18:34 <elliott__> Does it lie?
18:18:39 <elliott__> Oh, duh
18:18:41 <elliott__> I forgot the "cat".
18:18:52 <elliott__> I don't see anything about _PID in coproc.
18:19:00 <fizzie> Ohh: "NAME must not be supplied if command is a simple command."
18:19:05 <CakeProphet> you could prevent zero division errors at compile-time for any integers that are known at compile time by having them carry type-level naturals and a sign phantom type. The types of the arithmetic operations would also perform computations on the type-level representation, or do nothing in the special case where value isn't known at compile-time.
18:19:10 <elliott__> Although "coproc PIPE cat" does ths ame.
18:19:10 <fizzie> Oh well, maybe you should just "coproc cat" and use the default name, then.
18:19:14 <CakeProphet> yes, that is a terrible idea.
18:19:15 <elliott__> fizzie: As opposed to... what?
18:19:22 <elliott__> A complicated command?
18:19:33 <fizzie> Yes.
18:19:36 -!- Pharmtom_Hoover has changed nick to Tane.
18:19:37 <elliott__> coproc cat
18:19:37 <elliott__> nc -l 25556 <&${COPROC[0]} | tee "$serverlog" |
18:19:37 <elliott__> nc "$host" "$port" | tee "$clientlog" >&${COPROC[1]}
18:19:38 -!- Tane has changed nick to Taneb.
18:19:38 <elliott__> tools/log-packets: line 8: ${COPROC[0]}: Bad file descriptor
18:19:38 <elliott__> tools/log-packets: line 9: ${COPROC[1]}: Bad file descriptor
18:19:40 <elliott__> ?????
18:19:45 <elliott__> Do I need to quote them?
18:20:14 <fizzie> You shouldn't. Maybe try echo ${COPROC[0]}.
18:21:06 <elliott__> 63
18:21:07 <fizzie> Also "coproc PIPE {cat;}" if you want to give it a name; then it's a "compound command", not a "simple command".
18:21:08 -!- Taneb has changed nick to Taneb|Kindle.
18:21:22 <fizzie> Sorry, "coproc PIPE { cat; }".
18:21:28 <fizzie> Maybe I should try it out.
18:21:35 -!- Taneb|Kindle has changed nick to Taneb.
18:21:38 <elliott__> 63
18:21:38 <elliott__> tools/log-packets: line 9: ${COPROC[1]}: Bad file descriptor
18:21:38 <elliott__> tools/log-packets: line 8: ${COPROC[0]}: Bad file descriptor
18:21:42 -!- Taneb has changed nick to Pharmtom_Hoover.
18:21:46 <elliott__> Definitely sounds like it needs quoting.
18:22:22 <CakeProphet> I quote everything just to be safe...
18:22:41 <CakeProphet> as a space will fuck everything up.
18:22:45 -!- Ngevd has changed nick to Taneb.
18:22:59 <elliott__> CakeProphet: It's an fd.
18:23:02 <elliott__> fds don't contain spaces.
18:23:15 -!- Vorpal has quit (Quit: ZNC - http://znc.sourceforge.net).
18:23:22 -!- Taneb has changed nick to Taneb|Kindle.
18:23:27 <elliott__> tools/log-packets: line 7: "${COPROC[0]}": Bad file descriptor
18:23:27 <elliott__> tools/log-packets: line 8: "${COPROC[1]}": Bad file descriptor
18:23:33 <elliott__> fizzie: Sounds like I need to use eval.
18:23:35 <fizzie> I'unno, it seems to work in an interactive shell:
18:23:36 -!- Taneb|Kindle has changed nick to Ngevd.
18:23:36 <fizzie> fis@eris:~$ coproc PIPE { cat; }
18:23:36 <fizzie> [1] 4427
18:23:36 <fizzie> fis@eris:~$ echo ${PIPE[0]} ${PIPE[1]}
18:23:36 <fizzie> 63 60
18:23:36 <fizzie> fis@eris:~$ echo yay >&${PIPE[1]}
18:23:38 <fizzie> fis@eris:~$ cat <&${PIPE[0]}
18:23:40 <fizzie> yay
18:23:55 <elliott__> http://sprunge.us/BJQF
18:23:56 <elliott__> It looks OK to me.
18:24:09 -!- Ngevd has changed nick to Taneb|Hovercraft.
18:24:20 -!- Taneb|Hovercraft has changed nick to Ngevd.
18:24:36 <CakeProphet> bash has the best semantics.
18:24:48 <elliott__> fizzie: Or do you _need_ the compound thing to get it working at all? :-P
18:24:56 -!- elliott__ has changed nick to Taneb.
18:25:07 <CakeProphet> ..
18:25:10 -!- CakeProphet has changed nick to elliott.
18:25:19 <elliott> this is perhaps not a great idea.
18:25:28 -!- elliott has changed nick to CakeProphet.
18:25:33 <Taneb> What, NickServ is down?
18:25:39 <fizzie> elliott: Ohhhh, right.
18:25:43 -!- CakeProphet has quit (Disconnected by services).
18:25:45 <Taneb> Oh dear god.
18:25:47 <fizzie> elliott: You need to do a THING.
18:25:55 -!- Taneb has changed nick to elliott.
18:25:58 -!- elliott has quit (Changing host).
18:25:58 -!- elliott has joined.
18:26:01 <elliott> fizzie: wat.
18:26:11 <fizzie> elliott: I saw this somewhere. The problem is that the coproc fds aren't inherited by the subshell that is spawned to handle the pipeline.
18:26:21 <elliott> I... okay.
18:26:53 -!- CakeProphet has joined.
18:27:05 <CakeProphet> >_>
18:27:31 <elliott> Please tell me that was my ghosting.
18:27:36 <CakeProphet> I have no idea what that was.
18:27:39 <monqy> i think it was
18:27:41 <CakeProphet> but that makes no sense.
18:27:44 <CakeProphet> as I was no longer you.
18:27:44 <fizzie> elliott: http://p.zem.fi/fzuu
18:27:44 <monqy> it makes sense
18:27:45 <monqy> to me
18:27:48 <fizzie> elliott: You want something like that.
18:27:52 <monqy> CakeProphet: nickserv is lagged to hell
18:27:56 <CakeProphet> ah.
18:27:56 <elliott> fizzie: You can do those two execs as one.
18:28:03 <elliott> fizzie: And isn't that line identical to "coproc cat"?
18:28:05 <fizzie> Oh, right. Sure.
18:28:09 <fizzie> And yes, I was just testing. :p
18:28:11 <elliott> CakeProphet: Did you forget to identify and have nick protection on?
18:28:55 <elliott> fizzie: Well, it "works". It hangs btu I can't connect to localhost.
18:28:58 <elliott> Did I get my default MC port wrong?
18:29:05 <fizzie> 25566.
18:29:14 <fizzie> You were *so* close.
18:29:26 <CakeProphet> elliott: erm? I'm pretty sure I auto-ident
18:29:52 <monqy> the ident would have carreid over i think...
18:30:02 <monqy> so: it was most likely eliots ghjost
18:30:11 <elliott> CakeProphet: Not on /nick.
18:30:13 <elliott> On connect, sure.
18:30:14 <elliott> fizzie: Oh.
18:30:19 <elliott> It's because of that SERVER NOBODY KNOWS.
18:30:28 <monqy> ghjost server
18:30:31 <elliott> (What a silly port it is.)
18:30:36 <monqy> ghjost port
18:30:42 <CakeProphet> pretty sure I still keep ident if I go back to a nick I identified though.
18:30:43 <elliott> fizzie: Ha, it: still doesn't work.
18:30:53 <fizzie> elliott: Oh, 25565.
18:30:58 <fizzie> elliott: I got it wrong too.
18:31:07 <elliott> fizzie. You are making me sad.
18:31:17 <fizzie> It was 25566 on that SERVER NOBODY KNOWS, I think.
18:31:25 <elliott> Right.
18:31:30 <elliott> I do remember some off-by-oneing.
18:31:48 <elliott> fizzie: Ha, it: still doesn't work.
18:31:50 <elliott> Wow I
18:31:53 <elliott> Literally said that lines ago
18:32:18 <CakeProphet> literally
18:32:20 <CakeProphet> lines in the past
18:32:23 <fizzie> That should be the right bort though. I hope it isn't cat's block-buffering. It could be.
18:32:24 <monqy> whoa
18:32:41 <fizzie> In that case you'd need to put the other nc | tee inside the coproc like you wanted to, I suppose.
18:32:45 <CakeProphet> on a line-based communication protocol, in a time-based universe.
18:32:51 <elliott> fizzie: GNU cat doesn't buffer.
18:33:12 <fizzie> Mhm. Then it might not be that.
18:33:46 <CakeProphet> elliott: your lines per second squared is decreasing right now.
18:33:53 <CakeProphet> but will spike up when you reply.
18:33:53 <monqy> oh no
18:34:00 <elliott> oh no
18:34:00 <monqy> oh no
18:34:05 <monqy> oh no
18:34:11 <elliott> oh no
18:35:06 <CakeProphet> IRC physics.
18:35:20 <CakeProphet> or calculus I suppose.
18:35:27 <monqy> irc: oh no
18:36:32 <Pharmtom_Hoover> IRC physics!
18:36:37 <Pharmtom_Hoover> Also dinner.
18:37:35 <elliott> IRC dinner
18:37:46 <CakeProphet> string theorists, where is your sparticle now?
18:38:10 <elliott> Spadness? This is sparticle
18:38:12 <elliott> Spadness? This is sparticle.
18:38:19 <CakeProphet> bahahaha
18:38:21 <elliott> RIP sparticle - died as it lived, somewhat sparta
18:40:15 <CakeProphet> I can't wait until we encounter some undiscovered law of physics that mutates CERN scientists into extra-dimensional horrors from the deep beyondness.
18:40:30 <elliott> That already happened.
18:40:31 <Ngevd> But CERN invented the world wide web
18:40:32 <CakeProphet> playing with particle physics is dangerous stuff.
18:40:34 <elliott> The result is called "CERN scientists".
18:41:47 <CakeProphet> I think elliott is actually some kind of deep space cthuloid
18:42:01 -!- MSleep has joined.
18:42:08 <CakeProphet> communicating with FTL black magic.
18:42:29 <CakeProphet> over IRC, wikis, reddit and github.
18:42:55 <CakeProphet> extending the grip of his icy cephalopodic embrace.
18:43:04 <CakeProphet> into the mortal world.
18:43:12 <elliott> It is the best part of being a Squiddle.
18:44:25 <CakeProphet> must be lonely in the endless void.
18:45:21 <CakeProphet> but perhaps cthuloids do not feeled the subdued throes of loneliness.
18:47:07 <CakeProphet> ...the creeping and measured atrophy of the soul.
18:48:45 <CakeProphet> perhaps they feel only the unslatable hunger of undoing.
18:49:27 -!- calamari has joined.
18:50:51 <elliott> CakeProphet: No we just watch human cartoons, it's pretty great.
18:51:28 <CakeProphet> elliott: I enjoy Adventure Time.
18:51:31 <CakeProphet> as far as new cartoons.
18:51:42 <CakeProphet> perhaps this is an American thing though.
18:52:10 <elliott> ais523: I think I'm going to switch to compiz myself, to fix that issue
18:53:04 <elliott> fizzie: So um any ideas?
18:54:34 <Pharmtom_Hoover> > 19 + 18 + 5
18:54:35 <lambdabot> 42
18:55:39 <elliott> WOW DOUGLALJS ADAMS WAS RITE !!!
18:57:06 <CakeProphet> Douglas Adams was the best president.
18:57:33 <Ngevd> > const 42 "How old did you have to be to become a consul in the days of the Roman Republic?"
18:57:34 <lambdabot> 42
18:57:42 <Pharmtom_Hoover> elliott, yeah, except I meant to type 6, but my finger slipped.
18:59:04 <ais523> @unpl flip const
18:59:04 <lambdabot> (\ b c -> c)
18:59:11 <ais523> @pl (\ b c -> c)
18:59:11 <lambdabot> const id
18:59:20 <ais523> hmm, that makes sense
18:59:27 <ais523> reverse k and you get `ki
18:59:28 <CakeProphet> @let answer = asTypeOf "42"
18:59:29 <lambdabot> Defined.
18:59:41 <ais523> :t asTypeOf
18:59:42 <lambdabot> forall a. a -> a -> a
18:59:51 <CakeProphet> const with a different type.
19:00:02 <ais523> yep, seems to be a casting operator
19:00:22 <fizzie> elliott: Yeah: use named fifos. :p (I can try the coproc thing out in a moment.)
19:00:24 <CakeProphet> > answer "Why is Douglas Adams best U.S. peresident?"
19:00:26 <lambdabot> "42"
19:04:56 -!- Ngevd has quit (Quit: Doctor Who).
19:10:27 <elliott> ais523: how do I convince someone I lost my ssh private key?
19:10:52 <ais523> elliott: /did/ you lose your ssh private key?
19:11:04 <elliott> Yes, but I doubt that fact makes it any easier or harder
19:11:08 <ais523> then it worked on me
19:11:23 <ais523> I suspect it depends on who it is
19:11:28 <ais523> they should have some sort of password-recovery thing
19:11:29 <elliott> my hosting company :P
19:11:33 <ais523> and sending a new key is similar
19:11:35 <ais523> ah, ouch
19:11:42 <ais523> email them and say you lost it, see what their response is
19:11:48 <ais523> they'll probably have some way to figure out who you are
19:12:02 <elliott> I suspect they trust my email, since I sent the public key across it in the first place
19:12:45 <pikhq> Wow. An artificial rat cerebellum was constructed and hooked up to actual rats.
19:13:13 <pikhq> It functions.
19:13:37 <monqy> congratulations, science
19:14:21 <ais523> pikhq: is the rat acting like a rat?
19:14:31 <pikhq> Ah. It only really replaced a small portion of the cerebellum's functioning. But jesus, it worked at all.
19:15:03 <elliott> ais523: do you know any way to access an ssh server with only one logginable account and it only accepts key logins....
19:15:28 <ais523> physical access?
19:15:33 <elliott> no...
19:15:36 <ais523> (assuming you aren't counting "having the key")
19:15:45 <elliott> that would be a problem...
19:16:17 <ais523> the whole point of the key login is that you can't get in any other way without physical access, so you're basically asking "do you have any exploits for sshd"
19:16:30 <ais523> for which my answer is "no, that'd be out of character for me and if I did, what makes you think I'd give them to you?"
19:16:48 <pikhq> ais523: Didn't really say. Though, its primary function is motor control...
19:17:10 <elliott> ais523: because I neeeeeed them
19:17:25 <elliott> I'm so glad fizzie fixed my bug.
19:17:32 <elliott> Now he just needs to get me into my server.
19:17:39 <fizzie> Sorry, we had a thing.
19:18:00 <ais523> at least you didn't lose the only copy of the key to a bitcoin wallet containing bitcoins worth millions of dollars
19:18:06 <ais523> which one bitcoin exchange apparently did
19:18:15 <ais523> (and ofc, how can you tell if it's really the only copy or not?)
19:18:47 <elliott> fizzie: Things happen a lot.
19:18:51 <elliott> ais523: heh
19:19:57 <elliott> oh no out of battery
19:20:07 -!- augur has quit (Remote host closed the connection).
19:21:41 <elliott> aha, hmm
19:21:53 <elliott> I wonder if CraftBukkit lets you execute arbitrary commands on the server if you're an op? :P
19:25:46 -!- augur has joined.
19:27:25 <fizzie> elliott: http://p.zem.fi/wldb worked for me, at least "./test.sh c.nerd.nu" did when I started it immediately before direct-connecting to 127.0.0.1. It has a bit of a problem in that the nc in the pipeline connects to the server immediately, and I believe it will probably timeout at some point when the server gets tired of waiting.
19:27:57 <fizzie> You can drop the -v -v -v from the latter netcat, I was just using it to check when it connects.
19:28:45 <elliott> fizzie: Well, I can always just swap around the way of things.
19:29:14 <fizzie> No matter where you put it, all the processes of the pipeline will get started immediately, and thus it'll try to connect before the "nc -l" gets the client.
19:30:55 <fizzie> Not such a huge problem if you just don't let it idle, though.
19:31:29 -!- augur has quit (Remote host closed the connection).
19:31:36 <elliott> fizzie: Hmm.
19:31:49 <elliott> fizzie: Well, I've waited minutes to do it with no problems before.
19:31:55 <elliott> With my old pipeline.
19:32:15 <fizzie> Could be the servers are just patient.
19:32:19 <fizzie> I'unno.
19:32:51 <fizzie> It's a quality of pipes that it starts all the parts, and it's a quality of netcat that it connects immediately, instead of "wait for any input from stdin before actually connecting"ing.
19:53:44 <CakeProphet> vitriolic petrol.
19:53:50 -!- azaq23 has quit (Quit: Leaving.).
19:54:19 -!- Sgeo|web has quit (Ping timeout: 252 seconds).
19:57:55 <elliott> fizzie: I'll try that after I've done this safety procedure.
19:59:59 -!- atehwa has quit (Ping timeout: 248 seconds).
20:00:44 -!- atehwa has joined.
20:09:44 <CakeProphet> water melon
20:16:48 -!- augur has joined.
20:23:20 -!- oerjan has joined.
20:25:44 <elliott> fizzie: I doubt that kill will help.
20:25:45 <elliott> Since -e is on.
20:26:14 <oerjan> kill everyone, i say
20:26:54 <elliott> fizzie: Oh, duh.
20:27:00 <elliott> The nc -l argument was 25556.
20:27:04 <elliott> No wonder I couldn't connect previously.
20:35:58 <oerjan> <CakeProhpet> PSPACE=NPSPACE. really?
20:36:04 <oerjan> yes, really.
20:36:41 <oerjan> CakeProphet: ^
20:36:54 <oerjan> a quite elegant theorem, too.
20:46:09 -!- derdon has joined.
20:46:16 <oerjan> <ais523> CakeProhpet: pretty obviously, just run all the possibilities one after the other
20:46:22 <oerjan> it's not quite _that_ obvious.
20:49:38 <ais523> I know
20:49:46 <ais523> it's not trivially provable
20:49:51 <oerjan> because if you try to encode the entire evolution of an NP machine, you will find that it does _not_ fit in polynomial space
20:50:00 <oerjan> i think.
20:50:22 <oerjan> er
20:50:36 <oerjan> *nondeterministic machine with polynomial space
21:00:47 <elliott> ais523: good news, they seem to accept an email as confirmation of a new ssh key
21:00:58 <ais523> yay
21:01:03 <ais523> looks like my plan worked
21:01:08 <elliott> ais523: they do email it back to confirm, which I guess is rudimentary anti-email-MITM protection
21:01:11 <ais523> I'm surprised that you didn't come up with it on your own
21:01:12 <elliott> even if it doesn't really work
21:01:15 <elliott> oh, I did
21:01:21 <ais523> it requires the email to be MITMed both ways
21:01:22 <elliott> I was just wondering if there might be a more convincing method :P
21:01:28 <ais523> which is harder than MITMing it just one way
21:01:41 <ais523> although probably not much harder
21:01:45 <elliott> ais523: I was going to say that the most likely scenario seemed like Google MITMing it
21:01:48 <elliott> but I... guess that's not true
21:02:05 <ais523> it's unlikely that Google would MitM your email connection just to hack into one server
21:02:12 <elliott> now to sort out a shipping address problem... being an adult totally sucks, let me tell you
21:02:21 <ais523> it'd be something far too minor for them to throw away their reputation over
21:02:34 <ais523> elliott: indeed, I think I agree with you there
21:02:38 <elliott> ais523: I dunno, man... Minecraft is at stake...
21:02:39 <ais523> I hate people forcing me to be an adult
21:03:10 <elliott> Truly, Sgeo is keeping the secret of eternal youthfulness from us all.
21:04:19 <oerjan> i used to be eternally youthful, but i lost it
21:04:49 <elliott> That happens a lot
21:14:36 <CakeProphet> being an adult is like being a kid but with more stuff you have to do.
21:14:39 <oerjan> <pikhq> Ah. It only really replaced a small portion of the cerebellum's functioning. But jesus, it worked at all.
21:14:44 <oerjan> uploading, here we come?
21:15:05 <fizzie> oerjan: Synthetic zombie food, here we come?
21:15:32 <oerjan> fizzie: _FINALLY_ we can have robot zombies
21:15:34 <elliott> That would be the best way to control the outbreak.
21:15:44 <elliott> "Here you go, here's brains. No, get off me, that's not civilised."
21:16:31 <oerjan> sadly we still cannot have mutant ninja pirate robot zombie dinosaurs.
21:16:59 <oerjan> (mutant is incompatible with robot, i think)
21:18:08 <fizzie> Maybe a mutant ninja pirate cyborg zombie dinosaur could do in a pinch.
21:18:15 <oerjan> maybe.
21:18:52 <elliott> How can I be stopped from making this commit message from not being able to come up with a single word.
21:18:53 <elliott> I am useless.
21:19:12 <oerjan> elliott: supercalifragilisticexpialidocious
21:19:17 <oerjan> yw
21:19:19 <elliott> No WRONG
21:19:19 <CakeProphet> `word 50
21:19:22 <HackEgo> nakepaputassienekapofierrionm anniemens ened oepashill jundepplad unda bola rotorepteldf earjobas hakelwalus lianna hos kon coper pctoruntamense cop fultiontialplinsuphorthys eudotearnithorriatickhre affenciagromenrcapunstranioneurphil luelinthencerrch ejcsed ova manaklinti z cocysicha fj sachy lithed ritisayadifiestistn
21:19:22 <CakeProphet> elliott: there you go.
21:19:34 <elliott> NONE OF THOSE CAN REPLACE "GET"
21:19:36 <fizzie> Also they do those "electronic circuits from genetic algorithms" things, all the results are by definition mutants, assuming there has been some mutation going on.
21:19:38 <elliott> I like how it generated a 0-length word there.
21:20:02 <CakeProphet> elliott: huh. that's odd. I guess there's a null string somewhere in the dataset?
21:20:09 <CakeProphet> er. no... that wouldn't match my filter regex.
21:20:15 <CakeProphet> [[:alpha:]+ not *
21:20:36 <oerjan> elliott: obtain, receive, acquire
21:20:48 <elliott> Add a log-packets script to get packet dumps"
21:20:51 <elliott> They don't really work there :P
21:21:14 <oerjan> steal, rob, kidnap
21:21:44 <CakeProphet> http://thesaurus.com/browse/get
21:21:46 <CakeProphet> capture?
21:21:54 <fizzie> Sense 11
21:21:55 <fizzie> get, catch, capture => seize, prehend, clutch
21:21:55 <fizzie> Sense 12
21:21:55 <fizzie> grow, develop, produce, get, acquire => change
21:22:02 <fizzie> (WordNet.)
21:22:04 <elliott> Capture might be right; isn't that what Wireshark calls it?
21:22:15 <CakeProphet> procure? educe?
21:22:19 <CakeProphet> extract?
21:22:25 <CakeProphet> reap!
21:22:47 <fizzie> Snarf.
21:22:55 <oerjan> spy
21:23:01 <fizzie> Yoink.
21:23:22 <fizzie> Sense 28
21:23:22 <fizzie> get, get under one's skin => annoy, rag, get to, bother, get at, irritate, rile, nark, nettle, gravel, vex, chafe, devil
21:23:27 <fizzie> Not that sense.
21:23:58 <oerjan> monitor
21:24:28 <oerjan> produce
21:24:58 <fizzie> Snoop. Lawfully intercept.
21:25:20 <oerjan> audit
21:25:31 <fizzie> Audit body thetans.
21:25:36 <fizzie> E-meter.
21:25:42 <oerjan> demeter
21:26:02 <fizzie> Channel.
21:26:42 <oerjan> divert
21:26:56 <fizzie> Dowse for.
21:26:57 * CakeProphet just sat through a video of someone castrating themself.
21:27:07 <CakeProphet> where would I be without the internet.
21:27:17 <oerjan> CakeProphet: sane?
21:27:20 <CakeProphet> probably.
21:27:51 <CakeProphet> it's likely that it was fake though
21:29:29 -!- elliott has quit (Ping timeout: 245 seconds).
21:29:42 -!- elliott has joined.
21:29:53 <elliott> Grr.
21:30:31 -!- elliott has quit (Changing host).
21:30:32 -!- elliott has joined.
21:30:32 <CakeProphet> yes the video has been confirmed to be fake.
21:30:56 <CakeProphet> but now why do I feel like I've been ripped off?
21:31:08 <oerjan> that's good, since you cannot be traumatized by fake videos.
21:31:45 <CakeProphet> it was only mildly disconcerting to me thanks to ridiculous amounts of desensitation.
21:32:15 <CakeProphet> I just feel like I've been shorted now... I wanted to witness the real deal. How fucked up.
21:33:56 -!- tiffany has joined.
21:34:27 <elliott> oerjan: yikes, apparently Hackage has no access control
21:36:16 <oerjan> huh
21:37:07 <oerjan> CakeProphet: this must be how serial killers are made.
21:37:29 <CakeProphet> oerjan: yes clearly.
21:37:51 * CakeProphet is a serial killer in the making.
21:37:59 <CakeProphet> where is my bonesaw?
21:38:09 <CakeProphet> I think I lost it.
21:38:43 <CakeProphet> oh look bonesaw online for $51
21:38:58 <CakeProphet> Our design met with your good taste. Since 1864 Coltellerie Sanelli manufactures knives and knives blocks for professionals using the same care ...
21:39:01 <CakeProphet> bahahahaha. good taste.
21:39:31 <oerjan> the taste of testicles
21:39:36 <CakeProphet> I should write some bonesaw reviews.
21:40:55 <CakeProphet> "Yes this product worked like a charm. Very useful for clean amputations near the base of the limbs to ease transpotation of the body. Made very precise incisions and cut through the bone like butter"
21:41:20 <CakeProphet> highly recommend.
21:44:17 <CakeProphet> wow sears sells bonesaws? why.
21:45:40 <CakeProphet> What do people use bonesaws for besides surgery and maybe hunting?
21:45:48 <CakeProphet> *normal people
21:46:24 <CakeProphet> well I guess you don't /have/ to cut bones with a bonesaw. I guess you could use it as a normal saw.
21:49:27 <oerjan> "we sell a lot of them in northern mexico"
21:50:12 <CakeProphet> oh people cut steak apparently.
21:50:25 <oerjan> that's what they all say.
21:51:01 <CakeProphet> ah here we go a post mortem bone saw for $62
21:51:33 <elliott> oerjan: is there an alphabetical constructor in the stdlib? :P
21:51:36 <elliott> exported that is
21:51:40 <oerjan> wat
21:51:45 <elliott> like
21:51:47 <elliott> not an operator
21:51:53 <CakeProphet> $300 for a powered surgical bonesaw apparently.
21:52:08 <oerjan> Left, Right, Just, Nothing?
21:52:13 <CakeProphet> oh 1950s era too. vintage.
21:52:24 <elliott> oerjan: oh thanks
21:52:26 <elliott> :P
21:52:52 <oerjan> i suspect there is only one _non-alphabetical_ one, :
21:53:01 <elliott> right
21:53:07 <elliott> ok it's showsPrec 11 I want
21:53:14 -!- hagb4rd has quit (Quit: Nettalk6 - www.ntalk.de).
21:53:16 <oerjan> wat
21:53:27 <oerjan> is that even supposed to work.
21:53:28 <pikhq> oerjan: (,) says wut.
21:53:34 <elliott> class Packet a where
21:53:34 <elliott> packetName :: a -> String
21:53:34 <elliott> packetShowsFieldsPrec :: Int -> a -> [(String,ShowS)]
21:53:37 <elliott> good class
21:53:39 <elliott> oerjan: eh?
21:53:42 <elliott> of course it is
21:53:50 <elliott> how do you think constructor fields are showed
21:53:56 <oerjan> elliott: i didn't know showsPrec 11 was supposed to work
21:53:56 <elliott> Foo 9 (A b c) 99
21:53:57 <copumpkin> elliott: o.O
21:54:04 <elliott> copumpkin: o.O at what?
21:54:07 <copumpkin> oerjan: it's like turning the knob up to 11
21:54:09 <elliott> oerjan: look at derived show instances sometime
21:54:25 <elliott> For example, given the declarations
21:54:25 <elliott> infixr 5 :^:
21:54:25 <elliott> data Tree a = Leaf a | Tree a :^: Tree a
21:54:25 <elliott> the derived instance of Show is equivalent to
21:54:25 <elliott> instance (Show a) => Show (Tree a) where
21:54:25 <elliott> showsPrec d (Leaf m) = showParen (d > app_prec) $
21:54:25 <oerjan> elliott: well but they're ghc specific
21:54:27 <elliott> showString "Leaf " . showsPrec (app_prec+1) m
21:54:29 <elliott> where app_prec = 10
21:54:31 <elliott> showsPrec d (u :^: v) = showParen (d > up_prec) $
21:54:33 <elliott> showsPrec (up_prec+1) u .
21:54:35 <elliott> showString " :^: " .
21:54:37 <elliott> showsPrec (up_prec+1) v
21:54:39 <elliott> where up_prec = 5
21:54:41 <elliott> lol flood
21:54:43 <elliott> oerjan: how would /you/ write an instance for
21:54:45 <elliott> data Foo a = Nope | Foo a a
21:54:47 <elliott> a Show instance, that is
21:54:49 <elliott> "the operator precedence of the enclosing context (a number from 0 to 11). Function application has precedence 10." --showsPrec
21:54:55 <oerjan> aha
21:56:29 <CakeProphet> wtf I can buy chloroform online
21:56:46 <CakeProphet> well, time to go kidnapping.
21:57:15 <CakeProphet> man I didn't know it was this easy to be a serial killer.
21:57:39 <CakeProphet> like I don't even have to leave my house to get all of the tools.
21:58:03 -!- hagb4rd has joined.
21:58:21 <elliott> :t showsPrec
21:58:22 <lambdabot> forall a. (Show a) => Int -> a -> String -> String
21:58:29 <Pharmtom_Hoover> OK guys, I am making this decision through democracy.
21:58:33 -!- Patashu has joined.
21:58:42 <Pharmtom_Hoover> Which is better: tuxedo or Indiana Jones costume?
21:59:05 <elliott> copumpkin: Is there any way to make ghc not emit warnings about TH-generated code?
21:59:10 <elliott> <no location info>: Warning: Defined but not used: `prec_azgu'
21:59:11 <elliott> I MEAN COME ON
21:59:27 -!- calamari has quit (Ping timeout: 248 seconds).
21:59:31 <CakeProphet> Pharmtom_Hoover: they are equally bad things.
21:59:35 <Pharmtom_Hoover> Wait, no, the tuxedo hat sucks.
21:59:44 <oerjan> <pikhq> oerjan: (,) says wut. <-- ah right, that one doesn't follow usual operator syntax though.
21:59:45 <Pharmtom_Hoover> Jones it is.
22:00:33 <CakeProphet> elliott: ghc is like a stern but lenient mother.
22:00:42 <CakeProphet> "tsk tsk elliott"
22:02:02 <oerjan> !haskell data Sum a = One a | Sum a :+ Sum a deriving Show; infixl 5 :+; main = print $ One 1 :+ One 2 :+ One 3 :+ (One 4 :+ One 5)
22:02:08 <EgoBot> ​((One 1 :+ One 2) :+ One 3) :+ (One 4 :+ One 5)
22:02:29 <oerjan> ignoring associativity it is, then.
22:04:03 <elliott> there should really be a mapShows
22:04:05 <CakeProphet> probably to help people with dissociative identity disorder.
22:04:10 <elliott> erm
22:04:13 <elliott> concatMapShows
22:04:16 <elliott> or showConcatMap for consistency I guess
22:04:22 <elliott> showConcatMap :: (a -> ShowS) -> [a] -> ShowS
22:04:47 <elliott> showConcatMap f = foldr (.)
22:04:51 <elliott> erm
22:04:55 <elliott> showConcatMap f = foldr (\x r -> f x . r)
22:05:04 <elliott> id
22:05:07 <elliott> or foldr (.) id . map f I suppose
22:07:44 <oerjan> :t foldr ?f id
22:07:45 <lambdabot> forall a a1. (?f::a -> (a1 -> a1) -> a1 -> a1) => [a] -> a1 -> a1
22:08:07 <pikhq> WOTC is fail. They apparently managed to fuck up the current Oracle update. Because of this, everything with color not matching its casting cost has apparently ceased to have that color.
22:08:09 <oerjan> wat
22:08:12 <pikhq> FAIL
22:08:54 <oerjan> oh hm
22:09:40 <Pharmtom_Hoover> WOTC?
22:09:52 <pikhq> Wizards of the Coast. Makers of Magic.
22:10:35 <oerjan> :t ($id).foldr
22:10:36 <lambdabot> forall a a1. (a1 -> (a -> a) -> a -> a) -> [a1] -> a -> a
22:10:37 <Pharmtom_Hoover> Perhaps you might have said that when zzo was here?
22:10:55 <pikhq> Perhaps.
22:10:57 <oerjan> argh
22:12:14 <oerjan> oh
22:12:30 <oerjan> :t foldr :: (a -> ShowS) -> [a] -> ShowS
22:12:32 <lambdabot> Couldn't match expected type `a' against inferred type `Char'
22:12:32 <lambdabot> `a' is a rigid type variable bound by
22:12:32 <lambdabot> an expression type signature at <interactive>:1:10
22:12:35 <oerjan> bah
22:13:44 <oerjan> :t flip . foldr :: (a -> ShowS) -> [a] -> ShowS
22:13:45 <lambdabot> forall a. (a -> ShowS) -> [a] -> String -> String
22:13:54 <oerjan> elliott: there you go :P
22:15:54 <oerjan> > (flip . foldr $ showIntAtBase 7 intToDigit) [1..10] ""
22:15:55 <lambdabot> "12345610111213"
22:22:08 <oerjan> elliott: part of this is the realization that foldr (.) id = flip (foldr ($))
22:22:49 <oerjan> = flip (foldr id) as well i guess
22:23:45 <oerjan> that is, in a sense you don't need to combine the functions before you start applying them.
22:25:11 <CakeProphet> oerjan: how profound.
22:25:23 <oerjan> de profundis
22:25:54 <oerjan> i just tend to recall that whenever i see someone write foldr (.) id
22:27:52 <elliott> oerjan: right
22:28:26 * Pharmtom_Hoover → sleep
22:29:36 -!- Pharmtom_Hoover has quit (Quit: Leaving).
22:33:55 -!- augur has quit (Remote host closed the connection).
22:35:04 -!- sllide has quit (Read error: Connection reset by peer).
22:43:50 <elliott> "But it seems to me that he's essentially saying that there are too many natural numbers; that the set of natural numbers admits members that are too large to be successors of 0."
22:43:51 <elliott> Oh, mathematics.
22:52:10 -!- copumpkin has quit (Quit: Computer has gone to sleep.).
22:55:09 -!- ais523 has quit (Remote host closed the connection).
23:02:12 -!- zzo38 has joined.
23:17:51 -!- derdon has quit (Remote host closed the connection).
23:19:26 <CakeProphet> hi I'm CakeProphet
23:19:37 <CakeProphet> elliott: what
23:19:46 <CakeProphet> too large to be succesors of 0???
23:19:56 <CakeProphet> where is this from.
23:20:18 <CakeProphet> do they know how successor works? and like... infinity and stuff?
23:20:18 <elliott> proposed proof sketch of peano inconsistency
23:20:24 <elliott> http://www.reddit.com/r/math/comments/ksg7f/peano_arithmetic_inconsistent/
23:20:32 <elliott> CakeProphet: i think it's more that _you_ don't know how those work
23:20:34 <elliott> (neither do I, really)
23:20:38 <elliott> (not to this degree)
23:21:30 <oerjan> oh sure, successors look simple, but try doing them graham's number of times...
23:21:31 <CakeProphet> how can a natural number be too large to not be a successors of 0. is all I'm wondering.
23:21:43 <elliott> CakeProphet: because foundations are really weird.
23:21:47 <elliott> more specifically
23:21:49 <elliott> define successor
23:21:51 <elliott> (formally)
23:22:00 <CakeProphet> I think that's already been done for me hasn't it
23:22:21 <elliott> perhaps not well enough, it seems.
23:22:50 <CakeProphet> okay I mean it's possible it's inconsistent sure, but out of context that statement you quoted just sounds really really dumb.
23:23:15 <elliott> because it's a simplification
23:25:14 <CakeProphet> http://www.math.princeton.edu/~nelson/papers/outline.pdf
23:25:24 <CakeProphet> kind of rambley if you ask me. :P
23:26:58 <elliott> what
23:27:11 <elliott> it's really compact if you ask me
23:27:23 <CakeProphet> compact and hard to follow.
23:27:37 <elliott> ITT: you don't have a phd in mathematics. well, yet.
23:28:17 <CakeProphet> are you suggesting that I may one day have a phd in mathematics?
23:28:46 <elliott> hmm. well you'd need a brain transplant, but anything's possible. peano arithmetic might even beinconsistent.
23:29:16 <CakeProphet> based on plenty of actual real evidence I think this guy is just a finitist-hater.
23:29:17 <elliott> "... that after his shooting in 1881, U.S. President Garfield was treated by Doctor Doctor Bliss (pictured)?"
23:29:22 <elliott> doctor /doctor/?
23:29:28 <elliott> nothing in the article about that...
23:29:39 <elliott> CakeProphet: he's a constructivist, but also a respected mathematician outside of that
23:30:10 <CakeProphet> whenever I get my math phd and people ask me what my stances are.
23:30:19 <CakeProphet> I'll just be all like "yo dawg I'm a realist"
23:30:49 <CakeProphet> and I'll write the best papers
23:30:54 <elliott> "We are all Platonists in our youth." --the guy
23:31:02 <CakeProphet> no brain transplant required.
23:31:08 -!- copumpkin has joined.
23:31:13 <CakeProphet> the guy?
23:31:13 <elliott> "In this book is the first appearance of L'Hôpital's rule. The rule is believed to be the work of Johann Bernoulli since l'Hôpital, a nobleman, paid Bernoulli a retainer of 300₣ per year to keep him updated on developments in calculus and to solve problems he had. Moreover, the two signed a contract allowing l'Hôpital to use Bernoulli's discoveries in any way he wished."
23:31:15 <elliott> haha awesome
23:31:16 <elliott> CakeProphet: nelson
23:31:31 <CakeProphet> ah
23:31:43 <CakeProphet> man this guy sure cares a lot about isms
23:32:17 <elliott> um considering the paper i quoted that from was about isms...
23:32:26 <elliott> well, indirectly
23:32:53 <CakeProphet> I wasn't really sure what it was about because it didn't have a clear title.
23:32:57 <elliott> not that one.
23:32:58 <CakeProphet> unless you're talking about a different paper
23:32:59 <CakeProphet> ah
23:33:00 <elliott> the one I quoted it from.
23:34:00 <CakeProphet> Diffusion, Quantum Theory, and Radically Elementary mathematics
23:34:02 <CakeProphet> RADICAL
23:34:29 <CakeProphet> EXTREMEEEEE MATHEMATICS.
23:34:40 <CakeProphet> oh wait that's already a thing kind of.
23:38:42 -!- kmc has quit (Quit: Leaving).
23:39:32 <elliott> http://en.wikipedia.org/wiki/Yule_Log_(TV_program)
23:39:33 <elliott> I...
23:41:17 <CakeProphet> bahahaha
23:41:20 <CakeProphet> America is the best.
23:41:39 <elliott> During 2005, Tribune began making a version of the Yule Log video recorded in AVI format available for download, advertising it as a "Portable Yule Log" for those traveling.
23:41:57 <CakeProphet> The program was both a critical and ratings success, and by popular demand, it was rebroadcast for 23 consecutive years, beginning during 1967.
23:42:00 <CakeProphet> critical?
23:42:06 <elliott> MC/Protocol/Server.hs:10:1:
23:42:06 <elliott> Kind incompatibility when matching types:
23:42:06 <elliott> a0 :: *
23:42:06 <elliott> ghc-prim:GHC.Prim.Word# :: #
23:42:06 <elliott> In the first argument of `show', namely `0##'
23:42:07 <elliott> In the first argument of `Debug.Trace.trace', namely `show 0##'
23:42:09 <elliott> In a stmt of a 'do' block: Debug.Trace.trace (show 0##) (return ())
23:42:11 <elliott> oerjan: oops.
23:42:14 <elliott> CakeProphet: It's art.
23:42:26 <elliott> Also during 2008, animation director PES released a free screensaver that reimagined the Yule Log in food, with pretzels for the log and candy corn for the flames.
23:43:02 <elliott> http://www.yuleagogo.com/
23:43:03 <elliott> I...
23:43:41 <CakeProphet> bahahahaha
23:43:56 <CakeProphet> man that's a big log.
23:44:14 -!- BeholdMyGlory has quit (Remote host closed the connection).
23:45:51 <monqy> :(
23:48:40 <elliott> monqy: :(
23:49:08 <CakeProphet> :)
23:50:48 <oerjan> elliott: show (Word# 0##) maybe?
23:50:59 <oerjan> or whatever the constructor is
23:51:02 <elliott> oerjan: I kept around the original word so it's OK
23:51:08 <elliott> and I think W#
23:51:08 <elliott> ?src Word
23:51:09 <lambdabot> Source not found. You speak an infinite deal of nothing
23:51:16 <elliott> grr
23:52:13 <oerjan> also...
23:52:22 <oerjan> @hoogle traceShow
23:52:23 <lambdabot> Debug.Trace traceShow :: Show a => a -> b -> b
23:56:50 <elliott> oh thank you :)
23:56:52 <elliott> "The value of the progress bar. The maximum values vary depending on the progress bar. Presumably the values are specified as in-game ticks. Some progress bar values increase, while others decrease. For furnaces, 0 is empty, full progress arrow = about 180, full fire icon = about 250)"
23:56:53 <elliott> augh
2011-09-28
00:08:40 <elliott> oerjan: apparently "???" are valid identifier characters...
00:09:33 <oerjan> but of course
00:09:37 <elliott> oerjan: wat
00:10:07 <oerjan> > let test ??? x = test+x in 2 ??? 2
00:10:08 <lambdabot> 4
00:10:13 <elliott> oerjan: valid /non-operator/
00:10:21 <elliott> I think it's just a TH "bug"
00:10:23 <oerjan> ok, wat
00:10:31 <elliott> in that it's TH creating the names
00:10:53 <monqy> you mean with makeName or whatever it is? yeah you can put whatever you want in there
00:11:03 <elliott> yeah
00:11:06 <oerjan> elliott: istr in a previous discussion someone mentioned the only requirement for TH is the first char has the right case
00:11:10 <elliott> which is nice, since they're record fields :P
00:11:12 <elliott> oerjan: zzo
00:16:02 -!- sebbu3 has changed nick to sebbu.
00:27:24 -!- augur has joined.
00:28:39 -!- augur has quit (Remote host closed the connection).
00:36:03 -!- Jafet has quit (Quit: Leaving.).
00:40:49 <zzo38> I might want to play (and make up) some tarot games (using Latin-suited cards). I do have a few ideas.
00:41:04 <oerjan> <elliott> nothing in the article about that... <-- there's a footnote confirming it
00:41:16 <elliott> oerjan: >_<
00:41:24 <elliott> oh, I see
00:41:28 <elliott> his first name was actually Doctor
00:41:28 <elliott> heh
00:42:53 <zzo38> What might seem I might want some tarot deck, is a deck having features similar to the Spider Tarot, specifically: * Card backgrounds are blue (swords), green (rods), yellow (money), red (cups), and white (majors). * Latin-suited. * Index are 1 to 14 for minors, I to XXI for the trumps, and no index (possibly an entirely blank card) for the fool/excuse.
00:43:16 <elliott> brb
00:46:00 <zzo38> (Such as, the kings (14) still have the picture of the king, but it is labeled "14", not "King".)
00:46:41 -!- MSleep has changed nick to MDude.
00:54:34 <zzo38> I hope one day I can get a tarot deck and a Fanucci deck
00:58:31 <hagb4rd> omg, this one is so ..touchin beutiful..where the hell i have heard this? http://www.youtube.com/watch?v=DZrrQDphhrY
00:58:35 <hagb4rd> infant dreams?
00:58:52 <hagb4rd> ever head of transistor?
00:59:02 <hagb4rd> (music group)
01:09:04 <hagb4rd> there really should be a some kind of machine to deal with the iging patterns.. i mean F.U.C.K.U.P yes.. there are 64 of it, and its binary ..hell, need to evolve this diffusing idea
01:12:28 <elliott> what
01:13:15 <monqy> go on...
01:30:37 -!- Sgeo|web has joined.
01:30:45 * Sgeo|web is starting to get PHP poisoning
01:33:44 -!- Jafet has joined.
01:41:03 -!- quintopia has quit (Ping timeout: 252 seconds).
01:47:03 -!- quintopia has joined.
01:47:03 -!- quintopia has quit (Changing host).
01:47:03 -!- quintopia has joined.
01:53:40 -!- pikhq_ has joined.
01:55:19 -!- pikhq has quit (Ping timeout: 260 seconds).
01:55:45 <zzo38> What is PHP poisoning?
02:00:13 -!- DH____ has joined.
02:00:48 <Sgeo|web> zzo38: any amount of exposure to PHP
02:01:06 <Madoka-Kaname> That's a very low lethal dosage.
02:02:37 -!- Jafet1 has joined.
02:02:37 -!- Jafet has quit (Quit: Leaving.).
02:03:24 -!- keyzs has joined.
02:03:29 <keyzs> http://www.thevenusproject.com/
02:03:33 -!- keyzs has left.
02:03:52 <monqy> oh?
02:04:26 <oerjan> it's a trap!
02:04:30 <oerjan> a venus trap, that is.
02:04:47 <monqy> deadly the venus project trap
02:11:27 <Sgeo|web> The three fastest students (myself included) were told that we should make a thing where, if login fails, the user would be shown a countdown, then redirected to the login page. After one of the other students (not realizing that the assignment was only for us 3) complained that we weren't taught Javascript and that we needed Javascript to do it, I decided to do it without Javascript
02:11:31 <Sgeo|web> Just PHP and HTML
02:11:38 <elliott> hi
02:11:44 <elliott> hi
02:11:45 <elliott> hi
02:11:56 <Sgeo|web> hi
02:12:17 <Sgeo|web> Or are you representing what using my page would feel like?
02:12:22 <elliott> hi
02:13:16 <monqy> hi
02:13:26 <elliott> hi
02:14:38 <Sgeo|web> http://tolga.me/seth/lab2/login.php
02:15:03 <Madoka-Kaname> Sgeo|web, how spiteful.
02:15:03 <Madoka-Kaname> =p
02:15:24 <elliott> i like how the source is invalid
02:15:44 <Sgeo|web> You'll kill me when I show you the PHP source
02:16:00 <elliott> except the html is literally wrong
02:16:11 <Sgeo|web> Because of the />
02:16:23 <Sgeo|web> Maybe I should never have read stuff about XHTML?
02:16:25 <elliott> yes, ypu need an xml header for that
02:16:58 <elliott> but thatll just screw up errorhandling behaviour
02:17:06 <elliott> so dont use the slashes
02:17:07 <Sgeo|web> Wait what?
02:17:16 <Sgeo|web> I mean, wrt screwing up errorhandling
02:17:41 <Sgeo|web> http://pastie.org/private/cnpw2axjigodmwkv3145g
02:17:48 <elliott> xhtml violates postel's law completely, among other things
02:18:36 <elliott> cool unsallted password
02:18:44 <elliott> rainbow table time
02:18:57 -!- derrik has joined.
02:20:05 <monqy> what is this class and why are you in it
02:20:10 <monqy> and why aren't you at a better school
02:20:13 <Sgeo|web> Suppose, hypothetically, I was comparing the sha1'd (password + "lakuhdfoiuyergfuoeaywgrfo78yatgrfuiawygr83q2tr78tawguwaheroa78yw4378ry7834"). Would that be an appropriate salt? Although I'm under the impression that the salt should be different for each user, not sure the details why
02:21:00 <elliott> monqy: because his father, like always
02:21:02 <Sgeo|web> "Web Database Development"
02:21:25 <Sgeo|web> elliott: do you want me to just tell you the password?
02:21:34 <Sgeo|web> Or do you want to get it yourself
02:21:39 <elliott> w/e
02:21:45 <Sgeo|web> The Password is...
02:22:13 * Sgeo|web tries to tell you the Password
02:22:56 <elliott> is it Password
02:23:00 <Sgeo|web> Yes
02:23:19 <monqy> web database development sounds lame
02:23:25 <monqy> why not a proper databases course
02:23:34 <elliott> i wont bother trying to log in to your mail with it then\
02:23:34 <monqy> not some
02:23:35 <monqy> php
02:23:36 <monqy> thing
02:23:46 <Sgeo|web> There are proper database courses
02:23:59 <monqy> why are you in the php thing instead of them
02:24:25 <monqy> if it's because of the "web" part, I'll have you know: web sucks
02:24:35 <monqy> if it's because of the "development" part, I'll have you know: development sucks
02:24:44 <Sgeo|web> I already took some of the proper database courses
02:24:58 <elliott> monqy: requirements, bad school
02:25:05 <monqy> ah
02:25:07 <elliott> bad school: see previous answer
02:25:11 <zzo38> It is true that PHP is not so good, but it can be used
02:25:20 <Sgeo|web> I think this was an elective
02:25:35 * Sgeo|web runs for cover
02:26:00 -!- Jafet has joined.
02:27:21 -!- Jafet1 has quit (Ping timeout: 265 seconds).
02:27:40 -!- Jafet has quit (Client Quit).
02:28:26 -!- Jafet has joined.
02:30:25 <zzo38> At FreeGeek they told me they needed a program, it is a web page that refreshes, he agreed it is not ideal, I suggested using a telnet session or something else, apparently for keeping track of items in the store. But I would built it in to the POS system; in fact I started writing such thing.
02:30:52 <zzo38> But I will also do what is described, using SQL reporting program (a program I wrote by myself in Enhanced CWEB)
02:31:47 <zzo38> How it works, is, a line with # at the front is a special command, and other lines are copied directly to output except for a field name with ` surround meaning use value of that field.
02:32:39 <zzo38> Commands are #! is comment (allowing you to have a shebang line), #Q to execute a query, #Z to mark the end of a query block, #I to include file, #F to define a function, and #X to enter hexadecimal codes.
02:33:31 <zzo38> It was originally designed for TeX output, but it works for HTML too.
02:35:35 -!- Jafet has quit (Ping timeout: 265 seconds).
02:37:13 <Sgeo|web> Please don't force non-programmers to learn to program
02:37:31 -!- augur has joined.
02:37:54 <zzo38> Sgeo|web: Please explain better?
02:37:58 <elliott> Sgeo|web: fsvo force
02:38:29 <Sgeo|web> zzo38: If a user needs to write code in order to use something, then the interface is perhaps not the best.
02:38:38 <Sgeo|web> s/user/end-user/
02:38:54 <Sgeo|web> Um, wait, libraries .. are the people who use libraries considered end-users?
02:39:05 <elliott> Sgeo|web: please...
02:39:23 <Sgeo|web> elliott: what?
02:39:41 -!- calamari has joined.
02:39:52 <zzo38> Sgeo|web: I am writing the code myself; the end-user does not need to touch it if they do not want to.
02:40:04 <elliott> Sgeo|web: demonstrating your ignorance of what an interface or end-user even IS after pleading with someone to not write a program based on an assumption you're making about it is just embarrassing yourself.
02:40:27 <Sgeo|web> zzo38: oh, oops
02:40:30 <Sgeo|web> sorry
02:42:10 <zzo38> But I also do not completely agree. Best programs are those which you can write the programming; including TeX, METAFONT, UNIX shell, TeXnicard, etc.
02:42:21 <zzo38> And SQL.
02:42:24 -!- Jafet has joined.
02:43:26 -!- kmc has joined.
02:43:32 <Sgeo|web> Bleh, it depends on the program.
02:43:38 <Sgeo|web> I guess.
02:43:57 <zzo38> I suppose it can.
02:44:05 <monqy> social networking app where you write it yourself
02:44:25 <zzo38> monqy: That is OpenID.
02:45:03 <elliott> Sgeo|web: Every program must be programmable to be truly useful.
02:45:51 <Sgeo|web> If you say "to be more useful to a segment of the population" then I might agree
02:45:59 <Sgeo|web> Wait
02:46:00 <zzo38> elliott: And that is one good reason of Free-software/Open-source.
02:46:25 <Sgeo|web> An extendable program can offer benefits to non-programmers by virtue of the extensions that programmers write
02:46:47 <Sgeo|web> But I don't think this implies that non-programmable programs are useless.
02:46:55 <Sgeo|web> Just that programmable ones may be more useful
02:47:05 <elliott> The user/programmer distinction is arbitrary and harmful.
02:47:07 <derrik> kinda makes sense
02:47:14 <monqy> what kinda makes sense
02:47:16 <zzo38> Sgeo|web: I suppose so. It also depend what program.
02:47:19 <monqy> you may be: wrong
02:47:21 <monqy> or: right
02:47:23 <derrik> if you look at it in a certain way
02:47:28 <monqy> depending on what you meant
02:47:29 <monqy> by
02:47:32 <monqy> "kinda makes sense"
02:47:34 <zzo38> But generally I think the one is good where you can write the program
02:47:41 <monqy> and:
02:47:46 <monqy> "if you look at in a certain way"
02:47:53 <elliott> derrik: what does
02:48:33 <monqy> and what way
02:48:35 <monqy> is the
02:48:40 <monqy> ceratin
02:48:40 <monqy> way
02:48:55 <elliott> cretin way
02:48:56 <derrik> elliott: i don't agree with you at all.. user/programmer distinction is quite vital
02:50:06 <elliott> No. Consider Commodore 64s; everyone wrote /some/ code, whether it was to load a program from a tape, or following along tutorials in books because BASIC was the interface. The barrier to programming is incredibly, artificially high in today's operating systems.
02:50:24 <derrik> elliott: your typos may be used against you.. if you're a programmer, they already are against you
02:50:44 <Sgeo|web> derrik: Is that meant to be a coherent argument?
02:51:03 <elliott> Experienced users nowadays already do things that come close to programming, they just don't realise it; and certainly they're being held back by having to make an arbitrary elevation between "power user" and "programmer" -- it means they can't do this and that which they're perfectly capable of, fit in their workflow, and would aid them immensely -- because that's /programming/, you need to get special programmer tools and training for that.
02:51:10 <Sgeo|web> elliott: but was "everyone" a smaller segment of the population? These days, more people from wider backgrounds are required to use computers.
02:51:15 <derrik> Sgeo|web: i have a coherent argument too, but why waste effort here among the incoherents?
02:51:22 <elliott> And programmers suffer, too; "writing a program" is a separate thing.
02:51:31 <monqy> derrik: what
02:51:32 <elliott> They can't apply their skills nearly so readily and easily outside that domain.
02:51:51 <elliott> derrik: Can you point me to something I've said about this that was incoherent? I'd be glad to elaborate.
02:52:05 <Sgeo|web> Maybe the system shouldn't make the distinction so readily, but there still needs to be a level at which a computer is usable without having to teach someone anything more than very, very simple stuff
02:52:19 <monqy> i said ceratin........therefore i'm an idiot and time spent on me or you is time wasted.........
02:52:27 <monqy> you said ceratin too.....the curse.....
02:52:48 <derrik> elliott: if your starting point is that the user/programmer distinction is harmful, there is nothing to elaborate, logically
02:53:00 <monqy> what
02:53:06 <elliott> derrik: I'm asking for you to clarify your opposing position.
02:53:11 <Sgeo|web> derrik: um, it's a conclusion that can be argued for or against.
02:53:12 <elliott> Sgeo|web: You again are falling into this trap where you imagine this (mythical) Average Programmer/User/Whatever and religiously make all these decisions based on them, because you make them more ignorant, less capable of learning, less motivated and less knowledgeable than any person truly is.
02:53:41 <elliott> Sgeo|web: It doesn't aid such people (who don't really exist, anyway); it's downright insulting and harmful to them, really, because it holds them back by imagining them in this image.
02:53:51 <derrik> if your idea is to do erase distinctions, it's not elaborating.. it's explaining stuff away
02:54:00 <elliott> Sgeo|web: But what you are also assuming is that programming necessarily has to be hard at all.
02:54:22 <elliott> Sgeo|web: There is no reason that using a UI cannot be a special case of programming, and an easy one at that, because a UI is backed by a program: it is just another abstraction.
02:54:33 <Sgeo|web> There are people who are less capable of learning, less motivated and less knowledgable. Or at least, I have anecdotal evidence of such, which isn't much, but still
02:54:33 <monqy> derrik: what
02:54:43 <monqy> derrik: elaborate
02:54:43 <elliott> What needs to be done is making the programming environment much more omnipresent, and integrating the transition from full UI to programming, blurring the boundaries, by making it just a special case.
02:54:50 <monqy> derrik: on why you won't elaborate
02:55:05 <monqy> derrik: alternatively, elaborate on the thing on which you won't elaborate
02:55:13 <elliott> Sgeo|web: Sure, but you take the absolute worst example imaginable -- that doesn't even form a coherent person, you just mentally answer every hypothetical question with the worst answer that could be given.
02:55:22 <Sgeo|web> elliott: an easy special case of programming might make sense
02:55:24 <elliott> Sgeo|web: Good god, learning Windows would be damn near impossible for such a person -- it's a nightmare.
02:55:29 <elliott> And indeed, it's a nightmare for people in practice, too.
02:55:41 <elliott> But not because they're idiots. Never ever assume people are idiots, because designing based on that will get you nowhere.
02:55:47 <elliott> Sgeo|web: That isn't what I meant.
02:55:49 <derrik> elliott: well, my elaboration.. do programmers work for a purpose or not?
02:55:56 <elliott> I do not want a fisher price interface on top of a language.
02:55:58 <elliott> derrik: Work when?
02:56:09 <zzo38> Then those people who cannot understand it should not use a computer.
02:56:22 <elliott> Sgeo|web: The point is that just as we build higher layers of abstraction as programmers, a full UI is just another layer of abstraction.
02:56:23 <derrik> elliott: ah, so you are so profoundly undistinguished.. no use then :)
02:56:27 <elliott> The problem is that it's implemented badly.
02:56:39 <elliott> Sgeo|web: It does not gel with the lower layers at all, there is no interaction from the user's POV whatsoever.
02:56:59 <monqy> derrik: are you being serious
02:57:04 <elliott> derrik: Whatever; you're avoiding answering any questions with any kind of directness by brushing them off with excuses and saying incoherent vague things to sound wiser.
02:57:17 <elliott> If you won't elaborate at all it clearly won't be productive to try and discuss this with you.
02:57:25 <Madoka-Kaname> derrik doesn't seem to be a very good debater... Might I suggest presenting an actual counterargument?
02:57:29 <elliott> Especially as I've written quite a load of paragraphs above elaborating upon and explicating /my/ position.
02:57:37 <elliott> Madoka-Kaname: I doubt he has one.
02:57:47 <Sgeo|web> elliott: I can vaguely imagine what you want, and agree it would be preferable. But it should be such that it's usable even with minimal learning.
02:57:54 -!- DHeadshot has joined.
02:58:01 -!- DH____ has quit (Read error: Connection reset by peer).
02:58:12 <elliott> Sgeo|web: Nothing is usable with minimal learning.
02:58:15 <derrik> elliott: in any logical discussion your "work when?" has no meaning.. in a logical discussion, when one says "programmers work" it means they are programming.. this is kindergarten level of communication.. if you need to be taught this, it's kind of sad
02:58:23 <zzo38> But when I have equipment/time/etc, I can build the computer, it will have both Forth and BASIC built-in you can write a program, yourself, or from book, or whatever. However, you can use the computer without that if you have other programs; if you have the physical media for the program, insert it and push START button on game controller, it will load by itself.
02:58:32 <elliott> Sgeo|web: If you think Windows, if you think Ubuntu, if you think OS X, if you think the OLPC, if you think any interface is usable with minimal learning, you are wrong and this is not true in practice at all
02:58:36 <monqy> derrik: ahahaha wow did you really just say that
02:59:04 <zzo38> Therefore, this way, it shall makes more sense. You can write programming directly but it work even if you know nothing about the system other than push START.
02:59:07 <elliott> Sgeo|web: Those systems that are especially easy to learn -- that a lot of people can pick up within days to do very simple tasks -- are just simply done by staying as close to real-world analogies as possible, which we have put a whole backbreaking childhood into learning and internalising.
02:59:07 <monqy> derrik: must we follow your rules of conversation to get you to coax an elaboration out of you, or are you merely avoiding it?
02:59:10 <Madoka-Kaname> derrik, go between a UI, a highly configurable UI, a batch processing system system with no control flow, one with conditionals/basic control flow, and so on.
02:59:13 <elliott> Sgeo|web: Which is not easy at all. And those UIs don't scale.
02:59:19 <Madoka-Kaname> When and why does it start becoming programming.
02:59:25 <elliott> derrik: No, you said "do programmers work for a purpose".
02:59:31 <Sgeo|web> I think someone who struggles with basic concepts in Windows but barely survives by memorizing an exact sequence of steps to take should be able to survive this system in the same way.
02:59:31 <elliott> derrik: My question was asking:
02:59:36 <Sgeo|web> And I do have a specific person in mind.
02:59:39 -!- elliott has left ("Leaving").
02:59:41 -!- elliott has joined.
02:59:51 <elliott> derrik: Are you asking: Do programmers "work for a purpose" when they are actually writing lines of code?
02:59:55 <elliott> When they are presenting code to others?
02:59:58 <elliott> As people generally?
03:00:06 <elliott> Then I would ask: What does working for a purpose means?
03:00:25 <elliott> You seem to be assuming the absolute least meaningful interpretation of what I'm saying. That's not a conducive environment.
03:00:25 <monqy> elliott: I think it's that "if normal people aren't programmers, what good are programmers?" but that's a really dumb argument
03:00:29 <Sgeo|web> Is derrik trying to talk about programmers making money?
03:00:33 <elliott> Sgeo|web: They can survive any system with that.
03:00:53 <elliott> Sgeo|web: If someone is just parroting, then they rely only on nothing ever changing, and the limits of their memory in terms of number of actions.
03:01:30 <elliott> It is pointless to think about them. And anyway if someone is operating in that way it just means the system has failed them in terms of educating them to use a computer effectively (which of course is the norm nowadays).
03:01:33 <elliott> monqy: s/aren't/are/ surely?
03:01:45 <derrik> elliott: if there is a purpose (money, code, completed interface, whatever) then the user/programmer distinction is necessarily there..
03:01:50 <monqy> elliott: oh right
03:01:52 <elliott> I /think/ derrik is trying to say that programmers have a purpose (to produce a product application), whereas users don't.
03:02:11 <elliott> But that's clearly not true: In an open source environment, programmers work by scratching their own itch: they work to accomplish a problem/task they have.
03:02:21 <elliott> And that's what users do, too: they do what is necessary to accomplish a task they have.
03:02:28 <monqy> derrik: that's an entriely irrelevant distinction
03:02:29 <Madoka-Kaname> Python console/bash console/etc
03:02:32 <hagb4rd> unsigned eyeofhorus? http://en.wikipedia.org/wiki/Eye_of_Horus#In_arithmetic http://en.wikipedia.org/wiki/I_Ching#The_hexagrams
03:02:36 <elliott> derrik: It is really irrelevant to drag employment which is inherently based on the existing dichotomy into this.
03:02:44 <monqy> derrik: this is between users who can write code and users who can't; yours is about those who do it professionally
03:02:47 <elliott> It forms a circular argument: Programming is a profession, so programmers are different to users.
03:02:58 <elliott> But programming-as-a-profession assumes the distinction; you can't use it as an argument.
03:03:03 <zzo38> Yes; I write program, generally for whatever I am making.
03:03:15 <Sgeo|web> I think user/programmer dichotomy can be eliminated without eliminating programming-as-a-profession
03:03:20 <derrik> elliott: of course anyone can be both user and programmer, but this does not mean the distinction does not exist.. when you read a book and learn stuff from there, you are your own teacher, while you are a student too.. the distinction is quite necessary
03:03:46 <Sgeo|web> After all, no one's going to want to write all the stuff to do XYZ themselves, they have other chores they have to do
03:03:47 <elliott> derrik: Then tell me where you draw the line. Looking at a person sat at a computer, how can you tell whether they are using or programming?
03:03:50 <pikhq_> Sgeo|web: That'd leave it more akin to the distinction between a professional mathematician and a recreational one, though.
03:04:29 * Sgeo|web is a bit uncertain as to the distinction between professional mathematician and recreational
03:04:36 <Sgeo|web> What is a professional mathematician
03:04:38 <derrik> elliott: i don't need to know it about others, as long as i don't need to contact them.. but i clearly need to know it about myself, when i am coding.. i need to know why i am doing it, what will i do with the result, etc
03:04:51 <pikhq_> Sgeo|web: Academia. Versus people doing it for shits and giggles.
03:04:56 <elliott> derrik: I'm not asking you to do it in practice.
03:05:02 <Sgeo|web> derrik: a user has a purpose: To accomplish task XYZ.
03:05:02 <pikhq_> It's a bit of a fuzzy distinction.
03:05:14 <elliott> derrik: I'm asking, as a method of dialogue, to describe to me how you would distinguish any given hypothetical user at a computer, whether they are using or programming.
03:05:27 <elliott> That will then define what you say is the barrier between using or programming in a way that is easiest for me to understand.
03:05:42 <derrik> Sgeo|web: i never said user has no purpose.. user has users' purposes, programmer has programmers' purposes
03:06:09 <Sgeo|web> How do you distinguish between a user purpose and a programmer purpose?
03:06:20 <elliott> derrik: So can you do that?
03:06:34 <monqy> derrik: how about this: to play along with your words: and make you happy: everyone can be and is a programmer to some degree. that's what we were discussing before you misinterpreted it.
03:06:36 <derrik> elliott: hypothetically, it is hypothetical.. could be both, and could be one of those.. depends on the purpose
03:06:57 <Sgeo|web> How is that even an answer to anything elliott asked
03:07:08 <elliott> derrik: Yes, it's a nice tautology. I'm asking you to tell me what questions you would attempt to answer about what the user is doing to determine whether they are using or programming.
03:07:15 <derrik> i mean, hypothetically i don't care.. but if there is a purpose, it can be figured out
03:07:20 <elliott> Your job is to go around and look at people who use computers, and to tell me whether they are using or programming.
03:07:24 <zzo38> I do not have SQL reporting program right now because it is on the FreeGeek computer. But I will post it when I can do so, in case it is program you want to use (or to modify).
03:07:24 -!- Jafet1 has joined.
03:07:31 <elliott> What questions would you attempt to get the answers to, about what they are doing, so you could determine this?
03:07:43 <elliott> If you refuse to participate in this because it's hypothetical, then you're just obstructing the argument; of course it is, it's a tool I use to understand your positions better.
03:07:44 <Madoka-Kaname> derrik, what's experiments on the Python console, or one shot commands in bash?
03:08:16 <Sgeo|web> "Are you doing something that will result in an entity that can be reused in situations other than this specific o..." wait, one-shot scripts
03:08:24 <hagb4rd> to become better programmers we need to get some insight on our nature..and breed some purpose
03:08:38 <elliott> Sgeo|web: Asking derrik, not you :)
03:08:38 <derrik> elliott: if my job is to keep an eye on if people behind computers are working, i would watch what they are typing, if it is what they are supposed to be typing.. simple enough?
03:09:12 <zzo38> Of course you write a command in the UNIX shell, or multiple commands, combined in whatever way possibly by pipes. I prefer the way program are operated by pipes.
03:09:21 <monqy> hagb4rd: hi
03:09:25 -!- Jafet has quit (Ping timeout: 265 seconds).
03:09:32 <hagb4rd> hey monqy
03:09:48 <Sgeo|web> Bash kind of makes the "distinction" blurry, but Bash sucks as a language
03:11:04 <monqy> windows ui is like a language of clicking on things..........natural language is like a language of natural........
03:12:12 -!- Jafet1 has quit (Client Quit).
03:12:34 <elliott> derrik: Sure.
03:12:36 <elliott> derrik: What would you watch for?
03:12:39 <elliott> What patterns in the typing?
03:12:57 <elliott> Obviously, you can't just go by if they were typing or not, because then you'd have to answer "Are they using or programming?" with only a yes/no to "Are they typing?">
03:13:04 <elliott> I'm asking what questions you need to determine that.
03:13:12 <elliott> You can ignore edge-cases, I'm just asking how you would generally determine this.
03:13:22 <monqy> people who aren't programming don't necessarily not have the capacity......
03:13:28 <Madoka-Kaname> Also, programmers write documentation.
03:13:29 <Madoka-Kaname> Hopefully
03:13:43 <Sgeo|web> And some people who are programming don't have the capacity...
03:13:44 <pikhq_> Madoka-Kaname: Wishful thinking if ever I saw it.
03:13:45 <Madoka-Kaname> Well, programmers writing applications at least.
03:14:40 * Sgeo|web brings to mind one horrible LSL script he saw once
03:15:06 <Sgeo|web> Just... lines of repeated code, one number changed by a certain amount each time. With one exception, where they messed up.
03:15:16 <Sgeo|web> And this code was posted for others to use.
03:15:22 <monqy> did they use it
03:15:48 <derrik> elliott: the key here is what they are *supposed to be typing*
03:15:55 <Sgeo|web> No idea
03:16:00 <elliott> derrik: Supposed to?
03:16:05 <elliott> As in, someone is telling them to type certain things?
03:16:09 <Madoka-Kaname> derrik, what is a visual programming language?
03:16:17 <Madoka-Kaname> I dunno
03:16:45 <Madoka-Kaname> I believe a meaningful distinction can be made, but this isn't anything close to it
03:17:55 <derrik> elliott: they are typing because somebody already told them to type certain things.. and the supervisor will watch if the typing matches what the programmer is supposed to be typing.. now, can you think of more ways how to not parse simple expressions?
03:18:10 <Sgeo|web> Would a distinction reliant on the current dichotomy count?
03:18:20 <elliott> derrik: Umm. But I'm a programmer, and I don't have any supervisors, and nobody tells me what to type.
03:18:35 <monqy> you tell yourself what to type dummy
03:18:37 <Sgeo|web> derrik: do you really think all programmers program exclusively at jobs?
03:18:39 <monqy> 8)
03:18:53 <Sgeo|web> Recreational programming does not exist.
03:19:00 <derrik> elliott: then you made up a useless hypothetical situation.. good job
03:19:04 <monqy> what
03:19:10 <elliott> derrik: What?? But that's true.
03:19:12 <elliott> That's not hypothetical.
03:19:23 <Sgeo|web> This network is for non-existent projects
03:19:25 <elliott> I _am_ a programmer, I _do_ have no supervisor, because nobody employs me to program; I program of my own free will.
03:19:26 <monqy> what was the hypothetical and how was it useless
03:19:38 <elliott> I'm an open source programmer who programs in his free time because I love doing it.
03:19:41 <hagb4rd> i'd never believe mono would get things done so easy..just successfully migrated big parts of etl-app without editing a single line of code (win->redhatlinux)
03:19:45 <elliott> How is that hypothetical? How am I not a programmer?
03:19:50 <hagb4rd> and its even faster^^
03:20:00 <derrik> <elliott>derrik: I'm asking, as a method of dialogue, to describe to me how you would distinguish any given hypothetical user at a computer, whether they are using or programming.
03:20:05 <elliott> Can you really say that the huge, reliable open-source codebases out there programmed by people in their own free time were not built by programmers because they weren't being employed to do it?
03:20:22 <elliott> derrik: Right. So you said: find out what they're being told to type by their supervisor.
03:20:31 <elliott> But that obviously fails, because there are many programmers doing it without a supervisor.
03:20:42 <elliott> So that doesn't work to distinguish any hypothetical user because it misses out huge, huge swathes of them.
03:20:56 <derrik> the hypothetical situation was made up by you alone.. in a dialogue, you are useless
03:20:59 <elliott> So I'm still left completely unenlightened as to how you define the distinction between "user" and "programmer", apart from "employment".
03:21:28 <monqy> derrik: it wasn't useless; it was a technique of argument to demonstrate that you are Wrong
03:21:33 <elliott> Nobody else here seems to think I'm useless; I've written hundreds of quite clear (in my opinion) paragraphs of exposition and expansion on my positions, trying to explain what I think and why I think it, and how this can be applied in practice.
03:21:46 <monqy> derrik: what if: you: are useless
03:22:00 <elliott> You've been very vague, everyone's asked you what you meant (and indeed I have many troubles determining too, which is why I was trying to ask in a dialogue format so you can explain to me more naturally, as this is very helpful in practice).
03:22:13 <elliott> With all due respect, I really don't think I can be said to be the useless one in this dialogue.
03:22:14 <derrik> elliott: simple enough, there are programmers who have supervisors.. how about that?
03:22:26 <elliott> What about it? Of course there are.
03:22:32 -!- augur has quit (Remote host closed the connection).
03:22:33 <elliott> Is that how you define the distinction between users and programmers?
03:22:39 <elliott> Whether they have a supervisor telling them to program or not?
03:22:52 <pikhq_> There are also definite non-programmers who have supervisors.
03:23:01 <pikhq_> For instance, people who do not use computers in any way.
03:23:03 <elliott> I mean, if there is a meaningful distinction, which you contend there definitely is, then there is a definition of how a user differs from a programmer; what additional facets a programmer must possess to be a programmer on top of just a user.
03:23:17 <hagb4rd> what is the underlying question? sry :)
03:23:17 <elliott> I'm trying to ask you to articulate or at least broadly define roughly what characteristics these are.
03:23:29 <hagb4rd> must have missed it
03:23:34 <derrik> elliott: conclusion - at least you can tell the difference between a programmer and a supervisor.. it's not my problem that you can't make any further distinctions
03:23:41 <monqy> what
03:23:48 <elliott> hagb4rd: My contention is that the user/programmer distinction is fundamentally meaningless, misleading and harmful to both supposed groups; derrik disagrees.
03:23:58 <elliott> derrik: I'm not sure what you are trying to say.
03:23:59 <hagb4rd> ah
03:24:15 <elliott> derrik: Can we forget about this failed avenue and you maybe answer my question directly? :)
03:24:27 <elliott> I mean, it seems pointless to continue going down it since it obviously hasn't worked to make us understand each other's opinions.
03:24:29 <hagb4rd> thanks elliott, i would agree but still don't see what derrik is out to say
03:24:35 <elliott> What characteristics must a programmer have to be a programmer and not just a user?
03:24:42 <elliott> If there is a meaningful distinction, then these must exist.
03:25:15 <derrik> elliott: you are the programmer, yet you consider yourself just a user?
03:26:03 <elliott> I find "just a user" quite offensive. It's true that certain very unfortunate and harmful realities of current systems force there to be a barrier, but like I said, my contention is that it is completely artificial, with the only real distinction being those who have managed to cross that barrier, which is in large part due to chance.
03:26:14 <elliott> Still, that seems quite a personal remark. Do you not want to answer my question of what the distinguishing characteristics are?
03:26:21 <hagb4rd> y is that important.. i consider myself a wizard
03:26:32 <derrik> the distinction is plain and clear enough for me.. you were able to see distinctions between a programmer and a supervisor.. you knowingly muddle the distinction up between a user and a programmer
03:27:28 <derrik> i don't think i need to explain the distinction, because i have already done it ad nauseam.. now it's your turn to explain the distinction away, coherently
03:27:38 <pikhq_> You haven't even done it once.
03:27:44 <elliott> derrik: I'm sorry, but I really don't see what you consider the distinction.
03:27:46 <elliott> Is it supervisors?
03:27:49 <pikhq_> You have merely asserted there is one.
03:27:59 <elliott> Sure, I might just be being thick, I agree it's entirely possible. But please, I ask you to try and help me.
03:28:09 <elliott> What are the characteristics that distinguish a mere user from a programmer?
03:28:34 <hagb4rd> the context?
03:28:36 <hagb4rd> :>
03:28:40 <elliott> I mean... you say that since programmers and supervisors are "obviously" separate with no justification, one can similarly draw such an obvious boundary between programmer and user that it cannot be explained.
03:28:43 <derrik> elliott: programmer creates, the user consumes.. is this a meaningless distinction?
03:28:49 <elliott> So, I would just be arguing that apples and oranges are a meaningless distinction.
03:28:58 <elliott> But this seems unreasonable, because I can use it to justify any unreasonable distinction:
03:29:07 <elliott> Say we divide people into two groups, blah groups and bleh groups, completely randomly.
03:29:31 <elliott> Since programmers and superiors can be distinguished, I could say that someone was being unreasonable to assert that blah/bleh was an arbitrary distinction, by using that same analogy.
03:29:38 <elliott> It doesn't seem to say much about programmers and users, only programmers and supervisors.
03:29:48 <elliott> derrik: The user consumes? But users create tons of things with computers every day.
03:29:54 <derrik> elliott: the distinction here is not between apples and oranges, but between an apple tree and the one who is picking apples
03:30:09 <elliott> And programmers consume in abundance -- libraries, for instance.
03:30:13 <derrik> the mistake is too profound
03:30:18 <elliott> A user is programming when they use Word's search and replace.
03:30:21 <elliott> They have automated, abstracted a task.
03:30:24 <hagb4rd> duality trap
03:30:29 <elliott> They have turned looking and manually replacing each word in a document...
03:30:30 <hagb4rd> detected
03:30:42 <elliott> With an abstracted window that replaces each occurrence with only one click.
03:30:44 -!- oerjan has quit (Quit: Good night).
03:30:49 <elliott> This is like a programmer turning a hundred lines of repetition into a single function call.
03:30:52 * Sgeo|web has come up with a way to make the distinction, but it disqualifies HQ9+ programmers from being programmers.
03:30:52 <elliott> That is programming.
03:31:05 <elliott> How is what the user is doing there different in form from what the programmer is doing?
03:31:09 <derrik> elliott: i know that.. that's an apple tree.. just plant the seed
03:31:14 <elliott> Sure, what the user does is not seen/reused by other people.
03:31:21 <elliott> But programmers very often create personal, private scripts for their own use.
03:31:28 <elliott> derrik: I don't understand your analogy.
03:31:43 <derrik> elliott: i agree with you - you are thick
03:32:02 <elliott> derrik: At least I'm civil.
03:32:04 <Sgeo|web> Programming is providing a computer system instructions, where the set of instructions is enough to simulate a turing machine.
03:32:11 <Sgeo|web> ...that disqualifies C programmers.
03:32:29 <Sgeo|web> just replace turing machine with ... what's the finite version
03:32:44 <pikhq_> Sgeo|web: It also replaces programming with programming a compiler or interpreter.
03:32:48 <Sgeo|web> I think I may have disqualified writing SQL queries from "programming"
03:33:08 <pikhq_> i.e. you are only 'programming' if you are creating a TC program.
03:33:10 <pikhq_> :)
03:33:30 <hagb4rd> programming is reflecting
03:33:44 <elliott> derrik: So will you be civil or will you just continue insisting I'm the one who's wrong for, like most everyone talking right now, not understanding your convoluted and seemingly-meaningless metaphors? If you call me thick, that's just admitting you've lost the argument.
03:34:04 <Sgeo|web> pikhq_: by "set of instructions", I mean the available set of instructions, not just the instructions used in the provided programs.
03:34:18 <hagb4rd> are you a supervisor derrik?
03:34:54 <Sgeo|web> So using any TC language should qualify
03:35:01 <derrik> elliott: please, it was your own word, long before i said it.. i'm no less civil than you
03:35:29 <elliott> There's a difference between self-deprecation in humbleness to be polite and to attempt to foster a productive discussion and insults.
03:36:03 <elliott> I just wish you would be clear rather than being obscure and accusing me of "just not getting it" when I don't immediately see your position without you having specified it at all.
03:36:12 <derrik> elliott: oh, yes, i understood well.. you also asked me to help you.. don't you appreciate it?
03:36:24 <Sgeo|web> This does make the person ssh'ing into a server to admin Apache a "programmer" due to the console's weak programmer/user distinction
03:36:37 <Sgeo|web> And the person writing SQL queries all day not a programmer.
03:36:38 <elliott> derrik: I wish I could say I appreciated it, but I don't really think you've helped yet.
03:36:48 <Sgeo|web> I don't think this is fixable.
03:37:01 <derrik> elliott: thank me for the effort i wasted until now, then i can agree you are civil, and we can go on
03:37:19 <hagb4rd> this is so human
03:37:21 <elliott> derrik: Sure. I'll thank anyone for spending the time of day trying to debate their positions rationally.
03:37:28 <Sgeo|web> hagb4rd++
03:37:28 <hagb4rd> he pass the test
03:37:48 <elliott> Sgeo|web: ?
03:38:08 <Sgeo|web> I thought hagb4rd was commenting on human tendency to get into conflict
03:38:20 <monqy> specifically stupid bad conflict
03:38:25 <elliott> Sgeo|web: Does what I'm saying sound like conflict? If so, I'm sorry.
03:38:35 <derrik> elliott: well, are there any other similar distinctions that are useless in your mind? teacher/student for example?
03:38:40 <hagb4rd> no, it just reached its peak
03:38:45 <hagb4rd> everything is fine now
03:38:55 <derrik> elliott: salesman/buyer?
03:39:13 <elliott> derrik: I'm sure there are other distinctions I would consider useless... but I find your examples pretty well selected against what I'm saying, because you're choosing some classic dichotomies.
03:39:39 <derrik> to teach well, the examples must be well selected..
03:39:39 <elliott> derrik: Do you agree that programming is, at least, a type of using? One who programs a computer is using it, to program it?
03:39:45 <elliott> Whereas one who is buying is certainly not selling.
03:40:06 <Sgeo|web> elliott: Ada Lovelace programmed a computer without using it..
03:40:14 <derrik> elliott: of course any workman *uses* tools..
03:40:32 <elliott> Sgeo|web: Well, sure. That's not exactly a common scenario, though.
03:41:28 <elliott> derrik: I mean, if I were asked to produce what someone /might/ say were a list of characteristics that programmers have that users don't...
03:41:31 <elliott> I might say:
03:41:38 <elliott> - Is using an editor with syntax highlighting
03:41:50 <elliott> - Is using a compiler or interpreter, for instance in a terminal
03:42:10 <elliott> - Is causing interfaces to appear/be created on the screen that were not present prior of their own invention.
03:42:19 <elliott> derrik: Do you agree that these are some reasonable characteristics?
03:42:35 <Sgeo|web> Excel is an interpreter...
03:42:37 <Sgeo|web> >.>
03:42:40 <monqy> <.<
03:43:00 <pikhq_> Sgeo|web: Very much so. And it's even used as such.
03:43:02 <derrik> elliott: at least add to it - knowledge of programming languages
03:43:20 <elliott> derrik: Ah, but I am trying to distinguish someone who is in the /act/ of programming.
03:43:36 <Sgeo|web> There we go, the original question elliott asked. Except rework it to "currently using a programming language"
03:43:41 <pikhq_> derrik: Then nearly every UNIX shell user is a programmer.
03:43:44 <derrik> elliott: what use is an editor with syntax highlighting if you don't know what syntax is?
03:43:55 <pikhq_> Also nearly every DOS user.
03:43:58 <elliott> derrik: After all, a person who knows seventeen programming languages off by heart and uses them for twenty years but then retires, swears off programming, and just browses the web and uses Microsoft Office -- they're not a programmer, they're an ex-programmer.
03:44:16 <elliott> So I guess it is necessary but not sufficient.
03:44:20 <pikhq_> And, really, just about any user of any computer before the commonality of GUI.
03:44:24 <elliott> derrik: But do you agree that those are reasonable distinguishing characteristics?
03:44:37 <Sgeo|web> pikhq_: my criterion does the same, right?
03:44:53 <pikhq_> Sgeo|web: Yeah.
03:45:33 <derrik> elliott: knowledge of programming languages is kind of vital for a programmer.. if you don't know what syntax is, syntax highlighting is useless.. if you don't know what compilers do, no use of those.. etc
03:45:51 <elliott> derrik: That's what I said: necessary but not sufficient.
03:46:25 <derrik> elliott: man, a child first learns the letters, and then writes and reads and types.. not the other way
03:46:36 <elliott> I'm not disagreeing.
03:46:40 <elliott> Why do you think I am disagreeing?
03:46:50 <Sgeo|web> Ooh, I figured out how to fix it: Programming is the act of using an instruction set where the intersection of what the person is able to use and is considering using, and what exists within the instruction set, is turing complete.
03:47:05 <Sgeo|web> So, someone using ls and cat etc. is not programming.
03:47:25 <pikhq_> But someone using C is not.
03:47:29 <Sgeo|web> Argh
03:47:29 <derrik> because you did not include knowledge of programming languages among the characteristics, elliott..
03:47:29 <elliott> Sgeo|web: So a programmer who idly considers writing a script to fix something but ends up manually doing it anyway is programming?
03:47:40 <elliott> derrik: But then I later amended it too, and called it necessary but not sufficient.
03:47:44 <elliott> Sorry for making errors.
03:48:14 <Sgeo|web> pikhq_: obviously, replace turing complete with whatever-it-is-C-is.
03:48:30 <derrik> elliott: now, all these characteristics can be used to distinguish a programmer from a user.. when you don't have these characteristics, but you are behind a computer using it, you are not a programmer, just a user
03:48:45 <pikhq_> Sgeo|web: FSA.
03:49:01 <Sgeo|web> elliott: hmm, not sure how to fix that, if it's even fixable
03:49:09 <pikhq_> Sgeo|web: Which leaves you with rather a huge problem, because there's a metric fuckton of FSAs.
03:49:21 <Sgeo|web> Is there a most powerful FSA?
03:49:24 <elliott> derrik: OK. What about a person who writes some macros in Word that pops up a box where the user fills in a few fields to, say, perform an automated series of finds and replaces? (But they never leave Word.)
03:49:28 <elliott> They're programming, right?
03:49:28 <Sgeo|web> Erm, wait, what
03:49:29 <derrik> hence user/programmer distinction exists.. q.e.d.
03:49:38 <monqy> sorry to bring up bad memories, but was the point for which the programmer/user dichtomy was brought up not that of capacity to program, say in usage of an application, rather than expertise in the subject?
03:49:39 -!- calamari has quit (Quit: Leaving).
03:49:45 <monqy> or have we just derailed that much
03:49:49 <monqy> that we don't even care
03:49:50 <monqy> ;_;
03:50:02 <hagb4rd> what about some cooking spaghetti while singing a song?
03:50:04 <elliott> monqy: It's a bit more subtle than that, but that seems closer.
03:50:05 <Sgeo|web> monqy: me complaining about something that zzo38 wasn't doing
03:50:40 <hagb4rd> its my spaghetti cooking algo
03:50:49 <pikhq_> Sgeo|web: No, there is not a most powerful FSA.
03:50:56 <zzo38> That I wasn't doing?
03:51:08 <monqy> so the relevance of user/programmer was in determination of if users can be expected to "program"
03:51:15 <Sgeo|web> pikhq_: Least powerful FSA able to accomodate C?
03:51:26 <zzo38> Now you write a lot of stuff try to argument about many things; OK if that is how you want to do
03:51:48 <Sgeo|web> zzo38: I thought you were doing something I disliked but you weren't
03:51:51 <elliott> Sgeo|web: that's just "an FSM with <N states"
03:52:08 <zzo38> Sgeo|web: What that you disliked?
03:52:35 <Sgeo|web> You requiring "end-users" to program for something that vaguely sounded like it didn't need it
03:52:42 <derrik> elliott: your last question (about word macros) you already answered yourself
03:53:11 <elliott> derrik: Alright. What about someone who writes a macro that doesn't present any interface, it's just a hardcoded list of phrases, and then a loop to search and replace each one of those? Still programming?
03:53:15 <elliott> There is a point to this, believe me.
03:53:16 <zzo38> Do you mean the SQL reporting program? You need to write the programming if you are making up new reports, but to just use existing report programs you do not need to do so.
03:53:40 <Sgeo|web> I'm going to go eat cake
03:53:42 <zzo38> You can just use whatever front-end you normally use for the databases, and the report will work.
03:53:59 <derrik> elliott: is syntax highlighting there? are compilers there or the user aware of using compilers? is he creating interfaces that weren't there in the first place? you answered your own question
03:54:04 -!- augur has joined.
03:54:32 <elliott> derrik: No, their macro editor doesn't have syntax highlighting. The user isn't aware that there is a compiler or interpreter involved, they just know that Word accepts their macros as a kind of language.
03:54:37 <elliott> There is no interface created because it is a one-time task.
03:54:41 <elliott> So are you saying this is not programming?
03:54:54 <zzo38> I think VBA does have syntax highlighting.
03:55:25 <hagb4rd> i would go further..every kind of plan you make to achieve sth, like catching your train is programming
03:55:29 <derrik> elliott: one-time tasks, if they don't create a program, are certainly not programming
03:55:47 <elliott> derrik: But they wrote a loop to process the list of phrases and call the Word function to replace them.
03:55:51 <elliott> Are you really saying that's not programming?
03:56:07 <zzo38> How do I do comma categories in Haskell?
03:56:13 <elliott> It even involved array indexing.
03:56:16 <derrik> elliott: yes, i can do it even without a computer.. i am an editor (in the original sense of the word) not a programmer
03:56:24 <elliott> derrik: But they wrote something like this.
03:56:33 <elliott> phrases = [['a','b'], ['c','d'], ...more phrases...]
03:56:34 <elliott> int i = 0
03:56:38 <elliott> while i < length(phrases)
03:56:46 <elliott> Word.ReplaceInDocument(currentDocument(), phrases[i][0],
03:56:53 <elliott> phrases[i][1]
03:56:56 <elliott> continue;
03:57:00 <elliott> Exit();
03:57:06 <derrik> elliott: good, so they learned a bit of code.. was the result a program?
03:57:11 <elliott> Are you really saying the act of that was not _programming_?
03:57:17 <elliott> Are you saying it was instead coding?
03:57:32 <derrik> it was not even coding, really..
03:57:39 <hagb4rd> lol
03:57:43 <monqy> i agree with hagb4rd
03:57:44 <Madoka-Kaname> derrik, define "coding" and "programming" already.
03:57:44 <derrik> what i would call coding, is to change code in a program
03:57:52 <Madoka-Kaname> Define "program"
03:58:09 <derrik> Madoka-Kaname: are you a programmer too?
03:58:22 <derrik> if yes, i don't have to define basic stuff
03:58:36 <Madoka-Kaname> derrik, I am, but I don't think our definitions of those words are the same.
03:58:38 <elliott> derrik: You are really saying that the authoring of a non-trivial loop involving such programming-related concepts such as loops, formal syntax, indexing, namespaces, functions, to accomplish an automated task which was given to an interpreter?
03:58:43 <elliott> Is not coding or programming?
03:58:53 <elliott> I don't think you will find anyone to agree with you on that point.
03:58:58 <Madoka-Kaname> Unless you want to define programmer as "somebody who (whatever you believe programming is) and agrees with me on the definitions of those terms"
03:59:07 <elliott> That is a very alien idea to me, that a program must be "this complex" or "in a file" or "syntax-highlighted" to be a program.
03:59:17 <elliott> That it has to persist beyond its initial use to be code.
03:59:32 <elliott> That is really at odds with anything I've ever heard or thought about programming, and I don't think it makes sense at all.
03:59:45 <elliott> The definition of code suddenly carries all this baggage about what you'll do with it /later/.
03:59:51 <zzo38> That is what happens when you decide complicated philosophical stuff.
04:00:12 <elliott> I might expect to hear that judgement of what is code and what isn't from a non-programmer, but to hear it from you (I presume you are a programmer) is very surprising to me indeed.
04:00:55 <Madoka-Kaname> I'm going to go with "either derrik fails to have a point, doesn't know what their point is, or is a horrible debater"
04:01:00 <Madoka-Kaname> Maybe a combination of two or three.
04:01:11 <elliott> Madoka-Kaname: That's not really helpful.
04:01:50 <derrik> elliott: i don't think i need to agree with you.. there is something called logic (of language).. in that logic, all distinctions may become relevant in a certain context, even user/programmer.. and they may lose their relevance in certain contexts.. if you never created a program for an end user, and never will, yes, the distinction is irrelevant for you, but it is very relevant for the...
04:01:51 <derrik> ...overwhelming majority of computer users who don't even know macros
04:02:06 <elliott> derrik: What relevance does that have to the case being discussed?
04:02:13 <elliott> I know what logic is, but how is that relevant?
04:02:17 <elliott> Sure, all distinctions could be relevant in SOME context.
04:02:30 <elliott> But so could my "divide people into two random groups and call them blah and bleh" distinction.
04:02:35 <derrik> elliott: now, please remind me, what "case" are we discussing?
04:02:42 <elliott> That doesn't mean blah/bleh is a useful, helpful distinction, that we should create Blah Products and Bleh Products...
04:02:49 <Madoka-Kaname> elliott, if you ask me, the difference between programming and not-programming is the ability to solve novel problems.
04:02:53 <Madoka-Kaname> Most UIs don't have that.
04:03:14 <elliott> derrik: The user who wrote a predefined list of phrases in a macro with a loop to replace each of these phrases, only once, without syntax highlighting or a true knowledge of what a compiler or interpreter is.
04:03:22 <Madoka-Kaname> (Which doesn't sound like derrik's point at all.)
04:03:30 <elliott> But using arrays, while loops, array indexing, incrementing, syntax, function calls...
04:03:45 <elliott> And with the intent to make Word follow their automated desires, as is the intent of all programmers.
04:03:54 <elliott> You say this is not programming because it does not produce a persistent "program".
04:03:56 <derrik> elliott: you already answered that question yourself.. take some other case now
04:04:04 <elliott> And you said it wasn't coding either.
04:04:09 <elliott> derrik: I didn't.
04:04:13 <elliott> You disagree with my answer.
04:04:13 <hagb4rd> its called polemic at was a prospering art/discipline during in ancient greece
04:04:17 <elliott> I find this a very important point.
04:04:24 <elliott> I don't think we can continue without this being resolved.
04:04:29 <derrik> elliott: your characteristics were the answer
04:04:37 <elliott> derrik: My characteristics were not to set any definition in stone.
04:04:50 <elliott> I was providing a list of example characteristics that someone who holds your position might use to answer my previous question.
04:05:00 <elliott> I was trying to show the kind of answer I was looking for to better understand you.
04:05:10 <derrik> elliott: oh, then we will have to build it up from the basics again... some other day, kthanksbye
04:05:17 <elliott> You agreed that they were reasonable characteristics, but in this case they have produced what to me seems like an incredibly absurd result.
04:05:26 <elliott> derrik: Are you just trying to waste my time?
04:05:32 <Sgeo|web> elliott: my new criterion is still narrow than the old one, assuming that "doing it manually" was still doing it in bash or something
04:05:45 <Sgeo|web> narrower
04:06:03 <Sgeo|web> AFK for a short to less short period of time
04:06:38 <Madoka-Kaname> derrik, you have demonstrated an unwillingness to actually argue your point. You arn't going to convince anybody like that. This is the mild version of what I have to say about doing that
04:06:44 <elliott> derrik: You really just seem to be leading me on, aided by lots of vague statements and claims to me and others that you don't have to explain yourself because it's obvious.
04:07:18 <elliott> derrik: I have tried to be as polite and accommodating as I can, but for you to decide that suddenly the fact that you don't have a snappy-but-unhelpful response to what I've said means you can just cut it short with a mocking "kthanksbye"...
04:07:19 <Madoka-Kaname> There's demonstrating an unwillingness to argue, there's actually trying to argue, and then there's this.
04:07:25 <elliott> derrik: What I'm saying is, fuck you.
04:07:43 <Madoka-Kaname> <Madoka-Kaname> elliott, if you ask me, the difference between programming and not-programming is the ability to solve novel problems.
04:07:43 <Madoka-Kaname> <Madoka-Kaname> Most UIs don't have that.
04:07:48 <elliott> derrik: And fuck you for making me waste all these keypresses when all you want to do is be stubborn and act superior that you understand all these "obvious" concepts and distinctions.
04:08:37 <elliott> derrik: Now I'm going to discuss this with people who deserve to be in this channel because they contribute productively and constructively by at least humouring and trying to come to an agreement when a point of debate is raised, rather than just wasting the other person's time with vagueness and unwillingness to argue (yet still replying that their position is clearly true) for long periods of time.
04:08:50 <elliott> derrik: Hopefully over time there will be more of them, and less of you.
04:09:00 <elliott> Now.
04:09:13 <elliott> Madoka-Kaname: I think that excludes a lot of programming in practice.
04:09:24 <elliott> People certainly do create the same web database interface CRUD apps day after day, after all.
04:09:26 <hagb4rd> it might console you that me at least enjoyed your unbreakable confindence in consense
04:09:44 <elliott> Madoka-Kaname: And though it doesn't exactly require your brain to do it, it's still programming, I think everyone would agree: same toolchain, same language, etc.
04:09:50 <zzo38> I expect in next D&D session I and my brother both gain an experence level; XP totals usually average 5000 per session. Now, to see if I can qualify for one prestige class or if I have to select the other one instead. I hope I am able.
04:10:00 <elliott> hagb4rd: Wow, consense is a word I'd never heard before.
04:10:06 <elliott> hagb4rd: But thank you, assuming you're addressing me. :)
04:10:16 <elliott> It's unfortunate that it couldn't have come to something productive.
04:10:17 <hagb4rd> ;)
04:11:18 <Madoka-Kaname> elliott, the distinction that I try to make is less "are solving a novel program" and more "the tools available can"
04:11:29 <Madoka-Kaname> Which is less talking about the person doing things and more about the thing they're using.
04:11:39 <elliott> Madoka-Kaname: Well, Word exposes a full programming language with complete API access to its users, via VBA.
04:11:50 <elliott> I suppose you can say that opening a VBA editor is tantamount to opening another tool entirely.
04:11:58 <elliott> Which I suppose is reasonable, but then tools are quite vaguely defined.
04:12:13 <elliott> Visual Studio might even have enough wizards to produce a very simple, nearly-useless GUI program without ever opening the code editor.
04:14:11 <Madoka-Kaname> elliott, I suppose you could say that without the VBA editor and support for the macros it generates, Word wouldn't be able to solve a completely new problem (well, I suppose you could do what /// does...)
04:14:32 <elliott> Madoka-Kaname: You should see the kind of mail merge setup I have, it's a TURING MACHINE. :p
04:14:36 <elliott> (It isn't but that would be cool.)
04:15:06 <elliott> Madoka-Kaname: But I think that actually supports my argument: Word only supports novel problems via a klunky side mechanism that is not nearly as easy to use as Word itself (well, Word itself is hardly a walk in the park, but I digress).
04:15:29 <elliott> The whole computing system should be equipped to solve novel problems as a whole, and each component should support this.
04:16:03 <Madoka-Kaname> Which... isn't exactly a trivial task.
04:16:14 <zzo38> Is "Barrier a c >>= f = Barrier a $ c >=> f" a proper monad?
04:16:30 <elliott> Madoka-Kaname: It's more like it's a difficult system to imagine starting from current systems as a base.
04:16:40 <elliott> I would say @ is actually a simpler system than a Linux desktop.
04:16:43 <elliott> By a very long way.
04:16:59 <zzo38> Is it possible to make comma categories in Haskell?
04:17:20 <elliott> http://hackage.haskell.org/packages/archive/data-category/0.4.1/doc/html/src/Data-Category-Comma.html
04:17:34 <elliott> Is what I found by googling
04:17:39 <elliott> http://hackage.haskell.org/packages/archive/data-category/0.4.1/doc/html/Data-Category-Comma.html
04:22:36 <Sgeo|web> The perfect distinction:
04:22:50 <Sgeo|web> Programming is any activity which a consensus of #esoteric agrees is programming.
04:23:21 <pikhq_> Sgeo|web: Vejn.
04:23:37 <Sgeo|web> ??
04:23:52 -!- arryl has joined.
04:25:04 <elliott> Sgeo|web: Like we ever get consensus.
04:25:20 <elliott> Well, I don't think anyone disagrees that @ is the best. If anyone thinks it isn't, they should be banned.
04:25:27 <elliott> Oh, wait, hi arryl, you look new, do you agree that @ is the best.
04:25:28 <elliott> `? welcome
04:25:30 <HackEgo> Welcome to the international hub for esoteric programming language design and deployment! For more information, check out our wiki: http://esolangs.org/wiki/Main_Page
04:25:59 * Sgeo|web just wants to know what "vejn" means
04:25:59 -!- arryl has quit (Client Quit).
04:26:10 <Sgeo|web> Hey, I can
04:26:16 <elliott> rip arylryl
04:26:19 <Sgeo|web> I can't even yell at elliott for scaring away the newcomer
04:26:30 <elliott> I just do that with welcoming now
04:31:02 <derrik> derrik: okay, thanks for being yourself there for a while.. the way i see it: we have been through two "cases" set forth by you.. the first was hypothetical and the next moment hypothetical was not good enough for you.. the second case was by the end of which you developed characteristics to distinguish user and programmer, which was exactly my point to prove.. then you tried to bring forth...
04:31:06 <derrik> ...a third case and drop your characteristics.. well, my effort to help you is good enough for one day.. i am a professional teacher by the way, and my the way i speak is consciously chosen to accommodate a self-admitted thick adult like you.. well, good enough for a day
04:32:05 <elliott> You're talking to yourself.
04:32:25 <derrik> elliott: yes, we did :)
04:32:33 -!- derrik has left ("left").
04:32:36 <elliott> I'm sorry to hear that you're a professional teacher; but at least kids must be used to that these days.
04:32:39 <elliott> Oh, good, he left.
04:32:45 <monqy> i'm glad too is this bad
04:32:59 <elliott> No I think he was pretty objectively a negative contribution to this place.
04:33:01 <monqy> and sorry for the kids too
04:33:09 <elliott> Maybe even Sgeo|web will agree, wait no he wants everyone in here.
04:34:34 <Sgeo|web> I kind of tuned him out when he started making non-constructive arguments
04:34:43 <Sgeo|web> I think I turned blind to the whole insult thing
04:34:56 -!- zzo38 has left.
04:35:18 <elliott> He just called me thick, but I was frankly looking for any excuse to change the tedious loop at that point.
04:35:25 <elliott> Did he ever make any constructive arguments?
04:37:14 <Sgeo|web> I.. don't think so. I tend to notice non-constructive arguments more than constructive ones. I hate non-constructive arguments, especially when I thought I previously agreed with their stance.
04:37:40 <Sgeo|web> Yeah yeah, call me out for being side-minded. I am human
04:37:50 <elliott> He's piped up a couple of times before, so I didn't really expect anything better.
04:38:11 <elliott> That was mostly an exercise in how ridiculously better one side of an argument can be. :p
04:45:15 <hagb4rd> ye teacher seems really to be the alternative solution if you failed completely..poor kids ack
04:45:40 <hagb4rd> supervisor!
04:47:14 <elliott> At least most of the conversations in here are productive :)
04:47:22 <elliott> Distinguishing conversations from flamewars :P
04:49:01 <Sgeo|web> elliott: if I added "ajkhdgoiyegro87ty68w374tvb583w74ytw78534tnh86,7w3s4ty5a789w2 tv587634t5vw78qa34t b5iwvakztJHGRy4 to7853qtb4678wbtgva4iuyt58y37a4bgt578q9a" to the submitted password and compared that sha1 to the stored sha1, would that be decent salting?
04:49:26 <Sgeo|web> Although I guess someone could generate a rainbow table for that particular salt
04:49:46 <Sgeo|web> But at least no pre-existing rainbow tables should be sufficient
04:50:09 <Sgeo|web> Although I don't think rainbow tables would be much use cracking one password? Would brute-force be better?
04:50:52 <pikhq_> You'd probably do better to actually create and store a random salt for each password.
04:51:11 <Sgeo|web> But there's only one password and it's hardcoded..
04:51:30 <pikhq_> The eff?
04:51:41 <pikhq_> But, yes, that would be decent salting.
04:51:52 <elliott> Sgeo|web: Don't add keyboard randomness.
04:51:54 <Sgeo|web> It's just a simple lab project, to get us to learn how to do forms
04:51:55 <elliott> That's a terrible source of randomness.
04:52:17 <Sgeo|web> elliott: o.O. Are there any actual examples or demonstrations of that being used?
04:52:22 <Sgeo|web> Although that is a good point
04:52:31 <elliott> Sgeo|web: Keyboard randomness is literally one of the worst sources of entropy, it's almost completely predictable.
04:52:32 <elliott> $ cat /dev/urandom | tr -cd a-zA-Z0-9 | head -c 99
04:52:32 <elliott> sCu0Z5H0UZwCEd7vagVU0DIdeZwoJXx7J8TLRdBOw5V9QjwomcGTETtt5TE0kBz6uGMcGl62UcqxtYgbmuzjjSiiamE0eOZQ9ta
04:52:38 <elliott> Use that. Except... run it yourself :P
04:52:46 <elliott> And use a nice power of two, not 99 X-D
04:52:52 <elliott> But yes, it would be fine for a single password.
04:53:01 <Sgeo|web> Why a nice power of 2 for a salt?
04:53:02 <elliott> Creating a rainbow table for one hash would basically defeat the point.
04:53:09 <elliott> Since the point is that you'd have one salt per password.
04:53:10 <pikhq_> Sgeo|web: Powers of 2 are nice.
04:53:14 <elliott> Sgeo|web: Because powers of two should always be used.
04:53:23 <elliott> I suggest 96 in this case, though it's excessive.
04:53:33 <Sgeo|web> 96 is a power of 2 now?
04:53:36 <elliott> Point.
04:53:42 <elliott> You should really use bcrypt or scrypt rather than plain SHA for passwording, anyway.
04:53:45 <elliott> But in PHP... yeaaah.
04:54:16 <Sgeo|web> I don't know if the professor even mentioned md5 to the class, but certainly was surprised by my use of sha1
04:54:26 <elliott> In a good way?
04:54:40 <elliott> Anyway, it's not really all that massively better.
04:54:44 <Sgeo|web> Oh
04:54:46 <elliott> You should definitely use at least bcrypt.
04:54:47 <monqy> store every password plaintext always: the sgeos school way
04:54:52 <elliott> (It used to be much better.)
04:54:58 <elliott> (But now it's only a few orders of magnitude better :P)
04:55:01 <Sgeo|web> Used to be?
04:55:05 <Sgeo|web> Oh, sha1, not bcrypt
04:55:07 <elliott> Right.
04:55:09 <elliott> There's a nice http://www.mindrot.org/projects/py-bcrypt/ which makes bcrypt easy.
04:55:17 <elliott> scrypt is The Hot New Thing though.
04:55:27 <elliott> "We estimate that on modern (2009) hardware, if 5 seconds are spent computing a derived key, the cost of a hardware brute-force attack against scrypt is roughly 4000 times greater than the cost of a similar attack against bcrypt (to find the same password), and 20000 times greater than a similar attack against PBKDF2."
04:56:40 -!- zzo38 has joined.
05:05:45 -!- GreaseMonkey has joined.
05:05:46 -!- GreaseMonkey has quit (Changing host).
05:05:46 -!- GreaseMonkey has joined.
05:09:04 <zzo38> Let's make side-bet of the D&D game that I am in.
05:10:39 <zzo38> shachaf: But what I have, it has three constructors; Unit, Barrier, and Fail (although you can omit Fail if you want to).
05:12:16 <zzo38> shachaf: It seem to me does satisfy. The one I am less sure, which is the one I ask, and why I ask (although I think is correct), is: Barrier a c >>= f = Barrier a $ c >=> f;
05:13:20 <zzo38> Yes; I just ask to make sure, in case I made a mistake.
05:14:04 -!- zzo38 has left.
05:14:44 <elliott> ...
05:27:09 -!- zzo38 has joined.
05:27:20 <zzo38> Let's made side-bet of Dungeons&Dragons game.
05:28:17 <elliott> ok
05:30:21 <quintopia> i wonder why the author of geom is so unsure as to whether it can be used to compute nonconstructible numbers. the only ways of generating new points appear to be compass and straightedge methods
05:32:32 -!- hagb4rd has quit (Quit: Nettalk6 - www.ntalk.de).
05:36:12 <Patashu> Is geom turing complete? It -should- be
05:36:42 -!- hagb4rd has joined.
05:38:20 <zzo38> Bet in difference of XP after next session of D&D game. To bet on the one after next worth more points, and one after that even more. etc. Same thing with other bets on different thing, such as money, equipment, location, death....
05:38:48 <Patashu> you're betting on what the players will do and what the DM will give in his scenario?
05:38:57 <Patashu> if the DM is aware of the bets, he can easily make them suceed/fail
05:39:29 <zzo38> These bets must be made on side, the DM is not aware of them, and the bets do not affect the game at all. In addition, they are not made by the players or DM.
05:40:04 <zzo38> (Of course the players and DM can bet too; and you can tell the DM if you want to; neither of these will help as far as I know.)
05:40:21 <monqy> quintopia: perhaps he hasn't thought that far, or realized that, or realized its applicability there
05:40:36 <Patashu> but it's pretty much psychological, since it's up to the DM completely how the game proceeds
05:40:39 <Patashu> unless he's a rules lawyer
05:40:40 <zzo38> The game is complicated; it is difficult to tell what happen next.
05:41:15 <zzo38> The DM isn't rules lawyer in fact he isn't even very good with the rules. He ask me question about rules. But he is still good at DM stuff otherwise.
05:41:32 <Patashu> SO it'd be like making side bets on the outcome of a book almost
05:41:38 <Patashu> (I wonder if anyone's ever done that, hehe)
05:41:49 <zzo38> Of course some things has to do with randomness, some don't, but it is hard to tell everything a lot!!
05:42:09 <zzo38> Has anyone bet on outcome of a book? I suppose is similar, since the recording file is a book, too.
05:42:29 <quintopia> patashu: if geom is turing-complete, it should be possible to write a program to compute the cube root of two, right?
05:42:50 <Patashu> you can copmute the cube root of two to arbitrary digits
05:42:52 <Patashu> just not exactly
05:42:59 <Patashu> right?
05:43:06 <quintopia> maybe
05:43:15 <elliott> righ
05:43:16 <elliott> t
05:43:26 <elliott> and it can be arbitrarily encoded
05:43:36 <Patashu> it'd be funny if you start straightedging and compassing the number 3 then 3.1 then 3.14 then suddenly the hand of god crumples up your paper. 'YOU CAN'T CONSTRUCT PI, THOSE ARE THE RULES, I KNOW WHAT YOU'RE UP TO'
05:43:47 <elliott> lol
05:43:58 <Patashu> I don't think that's what pi being unconstructable means anyway :D
05:44:01 <quintopia> he does that when i try to divide by zero >.>
05:44:09 <zzo38> Things are not close to what the DM expects. Not close to what the players or the DM expects! Everything goes different.
05:44:48 <Patashu> is there a 3D version of straightedge and compass?
05:45:21 <quintopia> you can use regular ones in 3 space
05:45:49 <quintopia> and you get 3 dimensional points whose components are constructible numbers in the traditional sense
05:46:03 <zzo38> What other bets can you think of for D&D game?
05:46:13 <Patashu> How much mountain dew they drink
05:46:52 <quintopia> patashu: do you know how to find a sequence of constructible numbers arbitrarily close to cube root of 2 (using geometric techniques)?
05:46:56 <zzo38> No, stuff directly with the game. And none of us drink or eat anything during the game; that would mess up the books.
05:47:41 <quintopia> number of attacks, number of attacks blocked
05:47:43 <Patashu> hmm, that's a good question
05:47:57 <zzo38> Of course one bet is experience levels, but that seem a bit easier, at least in the games I play since it is more predictable about average XP totals and that stuff.
05:48:17 <zzo38> quintopia: Yes, that is one thing. Of course the answer can be zero, but it can also go very high.
05:49:03 <Patashu> surely it must be possible to get arbitrarily close by constructing rational numbers and cutting between them, but I don't know the process
05:49:30 <zzo38> You can read the recording at first if it help; and then, the bet is worth more, by the more number of sessions after the current one that has been played, that you are betting on.
05:51:20 <zzo38> There may be many things that are specific to the campaign, game, and session, being played.
05:52:19 <zzo38> (I am one of the players, but I don't care what bets you make. I am reasonably sure the DM doesn't care either. But I am interested in these bets, even if they are not revealed until after the session is played.)
05:59:31 <zzo38> Some things I can think of based on the current game/session: * Number of form changes. * Number of ambushes. * CR of brains consumed (if you wish simpler, partition it at <9 and >=9). * Number of lost caravans. * Number of military spies. * Whether or not the next town will have a library. * Whether or not my spellbook will ever be retrieved.
06:02:03 <zzo38> More general things: * Next experience level. * Number of uses of spells. * In-game time in one session. * Money gained/lost. * Spells cast by NPCs. * XP totals. * Number of critical hits.
06:05:49 <zzo38> * Number of deliberate misses. * Languages used in-game. * Anti-magic fields. * Prices of objects in-game.
06:06:25 <zzo38> Anything else?
06:06:55 <Patashu> real time spent in combat?
06:07:29 <zzo38> OK, but I wanted only things that would be recorded.
06:07:48 <Patashu> all this stuff is recorded?
06:07:50 <Patashu> by who?
06:07:57 <zzo38> Number of hits and blocks is OK, though.
06:08:17 <zzo38> Patashu: I record it. I use TeX to record this stuff, using a macro file I wrote for this purpose.
06:08:23 <zzo38> Do you want to see it?
06:08:32 <Patashu> No, that's ok
06:08:45 <Patashu> So it has to be something you record already, or anything theoretically recordable is okay?
06:08:50 <Patashu> And objective
06:09:21 <zzo38> Anything that would be recorded (even if it hasn't been yet) and objective.
06:09:50 <zzo38> That is, in-game events, including XP totals and character sheets, and session headings.
06:10:04 <Patashu> Number of 1s rolls
06:10:06 <Patashu> *rolled
06:11:11 <zzo38> I don't record that but it does count. If it was kept track of, I would tell you if your bet succeeded or failed. But it belongs anyways, even though it is unlikely to be recorded (probably because I forget)
06:11:42 <Patashu> CR of brains consumed? Is this something that occurs often in your sessions?
06:12:16 <zzo38> I cannot answer that question unless you read the recordings. Same with all the other things I listed under "Some things I can think of based on the current game/session".
06:12:44 <zzo38> (If you want the reason for the partitioning, that is a separate thing.)
06:13:40 <zzo38> Note things change; some of the things I listed are relevant to the current context; some are more long-term.
06:18:19 <zzo38> I will explain the reason for the partitioning right now since that is simple. It has to do with prestige classes.
06:18:38 <zzo38> But for "More general things", another idea is: * Number of times each kind of dice rolled.
06:19:18 <zzo38> * Number of PC deaths. * Number of NPC deaths. * Number of resurrections.
06:21:56 <zzo38> (Possibly separate them into *Number of PC resurrections * Number of NPC resurrections.)
06:23:20 <zzo38> Have you ever invent any card games?
06:25:05 <Patashu> I invented a card game when I was like 10
06:25:08 <Patashu> But it was trivial
06:25:10 <zzo38> O, if you make any of these side-bets of D&D game, I would like to know. No actual payment (at least, not to/from me), but I would like to know the general things you bet on, don't bother to tell me specifically until after the session is played. But write it down.
06:25:53 <zzo38> Patashu: Can you describe it? I have invented various card-game, solitaire and not, for various number of players, and for various kind of decks of cards (some for standard deck, some are for tarot cards)
06:26:42 <Patashu> You had cards numbered 1 through 9. A round consisted of presenting then discarding a card. If your card was higher you got a point.
06:26:45 <Patashu> It was something really simple like that
06:28:46 <zzo38> How many cards of each rank?
06:29:03 <Patashu> Each player had their own hand
06:29:08 <Patashu> So one/player
06:31:19 <quintopia> i once made a card game. it was like 100 cards or something, each with a picture and a name. a third were attack, a third were defense, and a third were neutral. i forget the rules, but it was probably rock-paper-scissorsish
06:31:39 <Patashu> you forget the rules completely?
06:32:51 <quintopia> yes
06:33:08 <quintopia> never wrote em down i think
06:33:19 <quintopia> this was like 15 years ago
06:33:36 <quintopia> i only remembered i did it because i found the cards in an old box cleaning up
06:33:54 <zzo38> I would like to have a Latin-suited tarot deck so that I can try to play some games I invented with it; I think I found somewhere, a deck designed to be working good for both game and for divination.
06:34:29 <zzo38> I notice the number of cards is divisible by 3, but not by 4. This is contrary to ordinary playing cards.
06:36:58 <zzo38> One game I invented for tarot cards is called Matadore. It is played by three players. You deal some cards at first, after all those are exhausted you deal the rest of the cards and continue. Your score is multiplied by the number of matadores. The excuse can be played at any time even if you have the suit led, but never wins a trick.
06:37:38 <zzo38> You cannot lead the excuse unless it is your only card, in which case you earn 1 point immediately and it automatically wins the trick. For the purpose of counting matadores, the excuse card counts as the zero of trumps.
06:38:09 <zzo38> At the game you can make bids and doubles, and then you must pass cards to the next player before playing the tricks.
06:38:30 <zzo38> Some cards are positive points and some negative, but mostly you try to win tricks, especially the final trick.
06:42:44 <zzo38> I have also invented a game using standard playing cards, using only the 1 to 7 of each suit, called Chinese Euchre, even though it is neither Chinese nor Euchre. Even though 1 is low and clubs is low, a 1 still beats a 7 and a club still beats a spade. Aces are worth 1 point each, it is 2 points if opponent is unable to play a proper card to follow your lead, and 4 points for the final trick.
06:47:15 <zzo38> Do you know how to play the card game Napoleon? It has a few unusual rules. One is that partners are not necessarily known by all players at the beginning of the game. Scoring cards are the TJQKA of each suit, worth 1 point each. If you win all 20 points without bidding 20, you lose (this is called the Siberian Rule). If all players follow suit, a 2 beats an ace, otherwise ace is high.
06:49:15 <zzo38> The method of deciding partners is as follows: The declarer names any card (whether he holds it or not). The player who holds that card is the declarer's partner, and the other three players go against him. (If the declarer names a card he holds in his own hand, he plays alone against four opponents.) Other players do not know who the partner is until the named card is played.
06:51:05 <zzo38> Except on the first trick, the ace of spades beats everything (regardless of trump suit). The second highest card is the jack of trumps and the third highest is the jack of the other suit of same color of trumps; both of these rules don't work on the first trick.
07:05:54 -!- azaq23 has joined.
07:06:07 -!- azaq23 has quit (Max SendQ exceeded).
07:07:04 -!- azaq23 has joined.
07:07:45 <elliott> :t showString
07:07:46 <lambdabot> String -> String -> String
07:12:15 <zzo38> What is your opinion about counting honors in Whist? My opinion is that honors should not be counted in Whist, although honours should still be counted in Bridge.
07:12:36 <elliott> > lines "a\n"
07:12:37 <lambdabot> ["a"]
07:12:40 <elliott> > unlines (lines "a\n")
07:12:40 <lambdabot> "a\n"
07:13:59 <zzo38> If you are playing Bridge, and you receive all thirteen cards of one suit, and you are first to bid, what should you do?
07:14:31 <zzo38> Note that a NT bid will beat you and in that case, unless you go first, you lose.
07:14:49 <cheater> probably think of doing something else because bridge is boring
07:20:30 -!- GreaseMonkey has quit (Quit: The Other Game).
07:20:35 <zzo38> But you win if you can trick the player to the right to bid 7NT and then you double. That way you win since you play first.
07:21:53 <zzo38> In the game of Hearts, any player with all the clubs achieves control and wins.
07:26:00 -!- Jafet has joined.
07:26:19 -!- myndzi has quit (Ping timeout: 252 seconds).
07:28:28 <elliott> :t showSpace
07:28:29 <lambdabot> Not in scope: `showSpace'
07:29:49 -!- myndzi has joined.
07:37:20 -!- myndzi has quit (Read error: Connection reset by peer).
07:39:24 <zzo38> How do I make a Haskell program so that it can be loaded by other Haskell program even in different directories and other computers? Do I need to do some command of cabal?
07:39:44 <elliott> you want to write a cabal file
07:39:57 <elliott> try "cabal init --no-comments" in a project root directory
07:40:07 <elliott> it will ask a few questions and generate a skeleton cabal file for your library or program
07:40:20 <elliott> http://www.haskell.org/cabal/users-guide/ has full documentation of the format after that
07:42:51 <zzo38> OK, I filled in the questions. It tells me it is unknown license type, and that I forgot to fill in the synopsis.
07:43:02 <elliott> PublicDomain is one of the license types, I think
07:43:15 <elliott> But you should really fill in the synopsis, it's just a one-line description of the package.
07:43:34 <zzo38> That is what I did, I pushed 9 and the file does say PublicDomain but it still told me it is unknown license type
07:43:40 <elliott> Huh.
07:43:45 <elliott> Just put PublicDomain in the license field in the cabal file, then.
07:43:59 <zzo38> OK. I will fill the synopsis, so I just uncomment "Synopsis:" and fill in some text?
07:44:18 <elliott> Yep, just a one-sentence summary of the package
07:44:20 <zzo38> elliott: The license field in the cabal file already says PublicDomain, I checked.
07:44:23 <elliott> Ah, okay then
07:44:25 <elliott> That's fine then
07:45:45 <zzo38> "Generating LICENSE... Warning: unknown license type, you must put a copy in LICENSE yourself."
07:46:15 <zzo38> It also says to add the "Description" field too.
07:46:45 <elliott> The description field is nice but not vital.
07:46:53 <elliott> (It's just a multiple-paragraph description of your package and its use.)
07:46:59 <elliott> You can just ignore that LICENSE warning.
07:47:10 <elliott> Though you could put a public domain dedication in LICENSE.
07:48:01 <Sgeo|web> Is Sinatra decent?
07:48:04 <Sgeo|web> >.>
07:49:05 <zzo38> I tried to make the package for BarrierMonad. (I might do others too, later.) Where it says Category, is Control the correct choice? I am unsure how the category does.
07:49:47 <zzo38> And what do I do for the example.lhs file? It is not needed to use the module, it only contains examples, and is needed if you want to print out the BarrierMonad.lhs file since it has \input that file
07:51:38 <elliott> Control sounds the right choice to me.
07:51:43 <elliott> And is it an executable program?
07:52:04 <zzo38> No it is library, and I selected that one.
07:52:09 <elliott> I mean, example.lhs.
07:52:16 <elliott> If so, you could add it as an executable in a separate section, called "barriermonad-example" or something (it will be installed into the user's PATH most likely, so you should pick a unique name; you don't have to rename the .lhs).
07:52:28 <elliott> Or you could just leave it out and have the user compile it themselves if they want to; that's fine too.
07:52:36 <elliott> It probably doesn't need to be installed into the user's PATH, after all.
07:52:41 <zzo38> The file example.lhs is neither executable nor library; it is meant only for use in GHCi.
07:52:47 <zzo38> And for reading.
07:52:56 <elliott> OK, just leave it out then.
07:54:46 <zzo38> That is, if you load BarrierMonad.lhs into TeX, it will expect to read example.lhs too; and you might also want to load example.lhs into GHCi; but it is otherwise of no use and is not needed to use the BarrierMonad library.
07:55:59 <zzo38> How does cabal supposed to deal with these kind of thing?
07:56:32 <elliott> It isn't.
07:56:34 <elliott> Why would it?
07:56:41 <elliott> That works fine as simply a file in the source tarball.
07:56:50 <elliott> cabal is about Haskell package management.
07:57:34 <zzo38> Is it enough that the filename is not capitalized? Will that make it work properly? The other filename is capitalized because it is a library module expected loaded from other programs too, but the one not capitalized is only for itself and unneeded file.
07:58:35 <elliott> The name is irrelevant.
07:58:41 <elliott> cabal won't even know it exists.
08:00:58 <zzo38> But I want to include the file but is only for example. Is there the way of specifying that?
08:01:07 <elliott> Just include it in your tarball.
08:01:08 -!- myndzi has joined.
08:01:16 <elliott> cabal /only/ cares about executables or what you register with the GHC package system.
08:01:22 <elliott> cabal doesn't need to care about your examples.
08:01:25 <zzo38> OK.
08:01:27 -!- myndzi has quit (Client Quit).
08:01:35 -!- myndzi has joined.
08:02:17 -!- BeholdMyGlory has joined.
08:02:24 <zzo38> If you want a printout, the example file is required, and so is the birdstyle.tex file even though neither is needed for using the module in other Haskell program.
08:04:16 <zzo38> What do I do about that? Do I just add a README file?
08:05:28 <zzo38> The .cabal file mentions "License-file: LICENSE" but there is not such file. Is that OK? If not, is it OK to comment out that line?
08:05:36 <elliott> Just remove that line.
08:07:12 <zzo38> OK
08:09:43 -!- monqy has quit (Quit: hello).
08:10:37 <zzo38> The definition "yield = flip Barrier Unit;" is named as such due to similarity of the yield command in JavaScript. I did not realize it at first and it was named something else, but very soon after that, I renamed it because I didn't like the old name very much.
08:11:03 <zzo38> (Also because at first, before I renamed it, I didn't notice that similarity. And then I did notice.)
08:12:22 <zzo38> Do you think the type of "continue" is more useful as it is or with the arguments flipped?
08:13:41 <zzo38> (The way it currently is, is probably a simpler definition, and maybe it runs more efficiently too)
08:16:28 <zzo38> Now I made up barrier monad file, is there some kind of way that can have cobarrier comonads as well?
08:18:50 <elliott> you'd have to ask copumpkin
08:22:54 <zzo38> Would you ever use join with barrier monads? This is an example of what it does:
08:23:17 <zzo38> collect . convert (+ 1) id . join $ do { yield 7; yield 100; return $ do { yield 99; yield 111; }; } = [8,101,100,112]
08:23:33 <zzo38> collect . join . convert (+ 1) id $ do { yield 7; yield 100; return $ do { yield 99; yield 111; }; } = [8,101,99,111]
08:24:42 <zzo38> collect . convert (+ 1) id $ do { yield 7; yield 100; return $ do { yield 99; yield 111; }; } = [8,101]
08:26:30 <elliott> o
08:30:23 <zzo38> (It is what I expected it to do; but I have not thought of how join would be used in barrier monads in proper programs.)
08:39:45 -!- zzo38 has quit (Remote host closed the connection).
09:00:11 -!- Patashu has quit (Quit: MSN: Patashu@hotmail.com , Gmail: Patashu0@gmail.com , AIM: Patashu0 , YIM: patashu2 .).
09:04:57 -!- myndzi has quit (Read error: Connection reset by peer).
09:09:57 -!- myndzi has joined.
09:25:07 -!- DHeadshot has quit (Read error: Connection reset by peer).
09:25:10 -!- DH____ has joined.
09:39:44 -!- DH____ has quit (Read error: Connection reset by peer).
09:53:53 -!- BeholdMyGlory has quit (Remote host closed the connection).
10:06:38 -!- Vorpal has joined.
10:36:37 <elliott> Oh neat, the Kindle three uses a webkit browser
10:40:32 -!- Nisstyre has quit (Ping timeout: 248 seconds).
10:41:06 -!- derdon has joined.
10:44:48 -!- sebbu has quit (Ping timeout: 248 seconds).
10:58:57 -!- sebbu has joined.
10:58:57 -!- sebbu has quit (Changing host).
10:58:57 -!- sebbu has joined.
11:38:58 -!- brisingr has joined.
11:41:12 <elliott> hi brisingr
11:57:45 <brisingr> hi
11:58:04 <brisingr> sorry, was forcefully made to eat
11:59:08 <brisingr> s/forcefully made/unsafeCoerced/
12:29:02 -!- derrik has joined.
12:29:12 -!- brisingr has left.
12:29:30 -!- derrik has quit (Client Quit).
12:30:17 -!- derrik has joined.
12:30:59 -!- derrik has quit (Client Quit).
12:32:01 -!- derrik has joined.
12:32:29 -!- derrik has quit (Client Quit).
12:33:25 -!- derrik has joined.
12:36:30 -!- derdon has quit (Remote host closed the connection).
12:37:41 -!- Zuu has quit (Ping timeout: 244 seconds).
12:56:19 -!- Zuu has joined.
13:16:36 <CakeProphet> anyone awake and also knowledgable for C++?
13:18:14 <elliott> no
13:18:17 <elliott> im kind of
13:18:18 <elliott> go on
13:19:52 <elliott> CakeProphet:
13:20:05 <CakeProphet> I was wondering if a variable declaration can construct an object multiple times within a function body. For example, when the declaration is within a loop;
13:20:24 <CakeProphet> or if I must use dynamic allocation at that point.
13:20:39 <elliott> like you mean call the constructor with the same storage?
13:21:20 <CakeProphet> like place a stack variable declaration inside the body of a loop. what happens? is the variable constructed once at the start of the function, or each time the declaration is encountered in the loop?
13:21:28 <elliott> tias
13:21:41 <CakeProphet> what does that mean.
13:21:43 <elliott> class foo { public: foo(){puts("lol");}};
13:21:59 <elliott> int main(){for(int i=0;i<99;i++){foo x; (void)x;}}
13:22:04 <elliott> tias=try it and see
13:22:08 <CakeProphet> oh...
13:22:15 <CakeProphet> well, yes that's what I was trying to avoid but okay.
13:24:16 <CakeProphet> elliott: I got 99 lols
13:24:17 <CakeProphet> so good
13:24:22 <elliott> there you go then
13:24:32 <CakeProphet> and I assuming that's all auto memory that will be deleted at the end of the function
13:24:38 <CakeProphet> since
13:24:40 <CakeProphet> that would make sense
13:24:43 <CakeProphet> given C++'s semantics.
13:27:33 <CakeProphet> elliott: what do you think computer science is? some kind of science?
13:27:39 <CakeProphet> NO EXPERIMENTATION.
13:27:40 <elliott> Mathematics, actually
13:27:47 <elliott> But C++ violates that.
13:27:58 <CakeProphet> well applied computer science has some principles of science I guess
13:28:03 <CakeProphet> but yes computer science is mathematics.
13:35:09 <lifthrasiir> elliott: is your keyboard finally fixed?
13:35:19 <elliott> m...maybe...
13:50:51 <CakeProphet> ...I have no idea how to do this.
13:50:58 <CakeProphet> without constructing an expression tree.
13:51:07 * CakeProphet has to convert an infix expression to prefix
13:51:12 <CakeProphet> I can do postfix... but not prefix.
13:51:24 <CakeProphet> and it has to use a stack, so I can't use expression trees.
13:51:50 -!- augur has quit (Remote host closed the connection).
13:52:36 <elliott> CakeProphet: itt: shunting yard
13:53:58 <elliott> oh has to use a stack
13:53:59 <elliott> lol
13:54:01 <CakeProphet> yeah
13:54:01 <CakeProphet> see
13:54:07 <CakeProphet> that's for postfix
13:54:19 <elliott> it can just as easily produce an ast.
13:54:24 <CakeProphet> I'm thinking I'll need a stack for both operands and operators...
13:54:29 <CakeProphet> elliott: don't think I can use that.
13:57:08 <CakeProphet> I probably should've gone to class the day it was explained. :P
13:59:29 <elliott> well shunting yard does use a stack
14:00:55 <CakeProphet> but does not convert to prefix directly.
14:01:28 <CakeProphet> I have this strange feeling that I'm talking in circles.
14:01:37 <CakeProphet> or maybe figure 8
14:01:39 <CakeProphet> 's
14:05:01 <CakeProphet> I think I can do it with two stacks.
14:18:54 -!- derrik_ has joined.
14:19:13 -!- derrik_ has quit (Client Quit).
14:19:30 -!- derrik_ has joined.
14:19:44 -!- derrik_ has left.
14:20:13 -!- derrik has quit (Ping timeout: 252 seconds).
14:20:53 -!- derrik has joined.
14:23:50 -!- copumpkin has quit (Quit: Computer has gone to sleep.).
14:35:55 -!- augur has joined.
14:41:14 <CakeProphet> can parentheses be considered to have a precedence?
14:41:43 <CakeProphet> specifically the lowest.
14:42:28 -!- Phantom_Hoover has joined.
14:42:31 <CakeProphet> well I don't think it makes sense for circumfix operators to have precedence as they're explicit about it.
14:43:36 <elliott> Phantom_Hoover: phwpqhowqiowh
14:43:54 <Phantom_Hoover> Astute as ever.
14:43:55 <lambdabot> Phantom_Hoover: You have 2 new messages. '/msg lambdabot @messages' to read them.
14:44:35 <CakeProphet> time to WORK THINGS OUT WITH PEN AND PAPER
14:45:57 <CakeProphet> ugh this is so bad.
14:45:57 -!- copumpkin has joined.
14:46:04 <CakeProphet> I want trees...
14:47:32 <CakeProphet> fuck it I'm using trees.
14:47:43 <CakeProphet> MY TEACHER WILL GET OVER IT.
14:48:03 <CakeProphet> wat STL has no tree....
14:48:14 <Phantom_Hoover> I thought you were talking about Minecraft and then drugs before I realised.
14:48:52 <CakeProphet> ..
14:49:09 <CakeProphet> yes I could not actually be talking about programming
14:49:15 <CakeProphet> on a channel about programming languages.
14:50:33 <CakeProphet> elliott: okay so how does the shunting ard algorithm work with an AST.
14:50:41 <CakeProphet> obviously you don't just output to a stream/queue/string/whatever
14:50:45 <elliott> Wikipedia :P
14:50:55 <CakeProphet> I'm looking at it right now but I'm not seeing an explanation.
14:50:59 <CakeProphet> just the algorithm itself
14:51:11 <CakeProphet> which I'm already familiar with.
14:51:56 <Phantom_Hoover> <CakeProphet> yes I could not actually be talking about programming
14:51:56 <CakeProphet> hmmm
14:51:56 <Phantom_Hoover> <CakeProphet> on a channel about programming languages.
14:52:03 <Phantom_Hoover> How long have you been here again?
14:52:27 <CakeProphet> well we don't stray horridly off topic most of the time
14:52:32 <CakeProphet> most of the time we are talking about programming somehow.
14:53:05 <CakeProphet> hmmmmm
14:53:52 <elliott> CakeProphet: You clearly missed the about three months when the channel was literally just Minecraft talk.
14:53:53 <Vorpal> <CakeProphet> can parentheses be considered to have a precedence? <-- if doing a bison/yacc grammar I would probably not handle parens as an operator with a defined associative and precedence...
14:54:00 <Vorpal> if that is what you meant
14:54:09 <CakeProphet> I guess.
14:54:22 <CakeProphet> elliott: how does the tree construction work with shunting yard help
14:54:31 <elliott> Your MOM shunts a yard.
14:54:33 <Vorpal> <CakeProphet> elliott: okay so how does the shunting ard algorithm work with an AST. <-- uh, the shunting yard algorithm does not use an AST
14:54:45 <elliott> Vorpal: No, but there's no reason you have to produce a literal postfix string.
14:54:45 <Vorpal> it uses two stacks or some such iirc
14:54:50 <elliott> It's about output.
14:54:56 <Phantom_Hoover> elliott, when did we export it all into -minecraft?
14:54:58 <elliott> You can easily make it output a syntax tree, even if it's just by going through the result backwards.
14:55:11 <CakeProphet> oh...
14:55:20 <elliott> Phantom_Hoover: When I wrote Herobrine. So late two thousand and ten or so?
14:55:21 <Vorpal> elliott: what use is the shunting yard algorithm if you have an AST anyway? You can just do a post-order tree traversal
14:55:22 <CakeProphet> that's kind of gross, but okay.
14:55:29 <elliott> Vorpal: I mean, input string → output AST
14:55:31 <CakeProphet> Vorpal is missing the point.
14:55:33 <Phantom_Hoover> elliott, so two months at most?
14:55:44 <elliott> Phantom_Hoover: Weeell, I'm not sure on the exact dates.
14:55:46 <Vorpal> elliott: oh you want to use the shunting yard algorithm to generate an AST? Hm okay
14:55:47 <elliott> But it was a LOT of Minecraft talk.
14:55:52 <elliott> Vorpal: Well, CakeProphet does.
14:55:52 <Phantom_Hoover> ("TWO MONTHS YOU TWAT!")
14:55:52 <elliott> Might.
14:55:57 <CakeProphet> if by you you mean CakeProphet
14:55:57 <Vorpal> elliott: right
14:56:07 <Vorpal> elliott: not sure how sensible that is. But sure, go on
14:56:09 <CakeProphet> elliott: yes because I can find no other sane method to convert infix to prefix.
14:56:23 <elliott> Seems the easiest way.
14:56:32 <elliott> I mean, you could just shunting-yard then reverse :-D
14:56:35 <elliott> Except without reversing the operands :P
14:57:11 <CakeProphet> ...how does that work.
14:57:15 <Vorpal> CakeProphet: build an AST the normal way from your grammar, then do a pre-order tree walk? That would take you to prefix form I think. It is so much easier to do this sort of stuff when you already have an AST...
14:57:26 <CakeProphet> Vorpal: I am not writing this code for myself
14:57:31 <CakeProphet> it's for a class. I have requirements and stuff.
14:57:43 <Vorpal> CakeProphet: hm.
14:58:57 <Vorpal> how do you evaluate a prefix expression? I mean, for postfix you can use a simple stack machine. Do you push operators for prefix and pop them off when you see operands?
14:59:20 <CakeProphet> I believe so yes.
14:59:21 <Vorpal> Sure you could build an AST for your prefix expression, but then what was the point of it
14:59:27 <CakeProphet> *infix expression
14:59:30 <CakeProphet> I am taking an infix expression
14:59:33 <CakeProphet> and converting it to prefix
14:59:37 <CakeProphet> not evaluating anything.
14:59:53 <Vorpal> CakeProphet: it was a related issue I was thinking about
15:00:03 <CakeProphet> NO SIDE-TRACKING ALLOWED
15:00:17 <CakeProphet> IN MY SHUNTING YARD WE SHUNT IN ONE YARD WITH ONE TRACK.
15:00:30 <CakeProphet> these are the rules.
15:00:57 <Vorpal> anyway you need to evaluate something like + 2 4 into + on the stack, then a special 2+ on the stack, and only then you can actually calculate it
15:01:16 <Vorpal> somehow it feels like prefix is stupid to evaluate with a stack machine to me
15:03:28 <CakeProphet> elliott: I have a feeling I can construct a tree as part of the algorithm...
15:03:38 <CakeProphet> perhaps if I use a queue to collect operands.
15:05:01 <CakeProphet> er no I mean a stack.
15:07:21 <Phantom_Hoover> 03:04:36: <Sgeo|web> What is a professional mathematician
15:07:22 <CakeProphet> hmmm yeah okay I think I know how.
15:07:26 <Phantom_Hoover> One who gets paid you idiot.
15:08:18 <elliott> Phantom_Hoover: Pro definition.
15:08:47 <Phantom_Hoover> One who gets paid *for mathsing*.
15:08:49 <Phantom_Hoover> You idiot.
15:09:42 <CakeProphet> okay so I can maintain a stack of tree nodes I think...
15:13:37 <CakeProphet> wow it sure is a pain in the ass that string literals in C++ are not string objects...
15:14:16 <elliott> std::string(s)
15:14:43 <Phantom_Hoover> 03:16:09: <Madoka-Kaname> derrik, what is a visual programming language?
15:14:54 <elliott> It's #esoteric Jeopardy.
15:15:21 <Phantom_Hoover> This is a question that can only be answered by the most hideous echelons of Microsoft, although I suspect their answer is 'one which we are hyping'.
15:15:39 <elliott> Phantom_Hoover: You realise visual programming languages are actual things.
15:15:55 <CakeProphet> pure-data, reaktor, max/msp
15:15:59 <CakeProphet> Excel maybe.
15:16:02 <Phantom_Hoover> elliott, whaaaaaaaaaaaaaaaaaaaaaaaaaaat
15:16:25 <derrik> hi Phantom_Hoover
15:17:22 <elliott> derrik: Your connection is broken.
15:20:20 <derrik> elliott: if you see this, then maybe not
15:20:34 <elliott> * derrik (~xix@gprs-inet-65-7.elisa.ee) has joined #esoteric
15:20:34 <elliott> * brisingr (~brisingr@79.117.71.197) has left #esoteric
15:20:34 <elliott> * derrik has quit (Client Quit)
15:20:34 <elliott> * derrik (~xix@gprs-inet-65-7.elisa.ee) has joined #esoteric
15:20:34 <elliott> * derrik has quit (Client Quit)
15:20:34 <elliott> * derrik (~xix@gprs-inet-65-7.elisa.ee) has joined #esoteric
15:20:36 <elliott> * derrik has quit (Client Quit)
15:20:38 <elliott> * derrik (~xix@gprs-inet-65-7.elisa.ee) has joined #esoteric
15:20:41 <elliott> [...]
15:20:42 <elliott> * derrik_ (~xix@82.131.89.3.cable.starman.ee) has joined #esoteric
15:20:44 <elliott> * derrik_ has quit (Client Quit)
15:20:46 <elliott> * derrik_ (~xix@82.131.89.3.cable.starman.ee) has joined #esoteric
15:20:48 <elliott> * derrik_ (~xix@82.131.89.3.cable.starman.ee) has left #esoteric
15:20:50 <elliott> * derrik has quit (Ping timeout: 252 seconds)
15:20:52 <elliott> * derrik (~xix@82.131.89.3.cable.starman.ee) has joined #esoteric
15:20:54 <elliott> It is.
15:21:03 <elliott> Please don't make your client flood joins/quits; it clogs up the channel a lot and happens quite often.
15:21:14 <derrik> elliott: unstable, yes.. but not broken at the moment
15:21:23 <elliott> Well, broken in that it is disruptive.
15:21:56 <derrik> sorry for the mess.. i will try cleaner manners
15:22:10 <elliott> Thanks.
15:23:39 <Vorpal> <Phantom_Hoover> 03:16:09: <Madoka-Kaname> derrik, what is a visual programming language? <-- Piet maybe?
15:24:31 <Vorpal> hm guess not
15:25:20 <Vorpal> https://secure.wikimedia.org/wikipedia/en/wiki/File:Pure_Data_with_many_patches_open_%28netpd_project%29.png <-- what a mess
15:25:49 <elliott> Less messy than your typical C project.
15:26:30 <Vorpal> elliott: the mess of windows I meant. With a typical C project I have like one terminal and one tabbed editor open.
15:26:38 <elliott> That's you.
15:26:51 <elliott> Such systems can get worse... http://1.bp.blogspot.com/_gK7ubK8-F84/RiokBgnK_QI/AAAAAAAACjM/6bkc0VDODr4/s320/max2.jpg
15:27:01 <elliott> http://jackaperkins.files.wordpress.com/2011/08/maxpatch.jpg
15:27:04 <Vorpal> what a messy graph
15:27:06 <elliott> Literal spaghetti code.
15:27:12 <Vorpal> yes
15:27:52 <Vorpal> elliott: okay I actually have 5 windows open on my desktop atm: firefox, irc, emacs, xfce-terminal and a PDF.
15:28:04 <Vorpal> (and I'm coding)
15:28:24 <elliott> I have twenty Chrome windows, two Pidgin windows, a terminal, xchat, and emacs.
15:28:43 <Vorpal> unusually I have only 5 tabs in firefox atm. Often I have like 200
15:28:54 <Vorpal> elliott: wait a second, doesn't pidgin do tabs?
15:29:10 <elliott> Vorpal: One is the buddy list.
15:29:15 <Vorpal> oh
15:29:19 <Vorpal> right
15:30:01 <Vorpal> elliott: the only time I tend to have a sprawl of windows open is when using gimp. However I often become annoyed at the sprawl of windows in gimp...
15:36:33 <hagb4rd> yes, this remind me i wanted to write a tool to save winpositions like bookmarks (recover with hotkey..muahrhr)
15:37:07 <hagb4rd> this what the world needs
15:37:29 <CakeProphet> elliott: I was thinking about how you could reverse just the operators in a string to get postfix -> prefix
15:37:32 <CakeProphet> but uh.... how?
15:38:12 <CakeProphet> I guess reflect them around the midpoint??
15:38:21 <CakeProphet> or something?
15:38:23 <CakeProphet> no. I have no idea.
15:38:27 <elliott> CakeProphet: Start from end; whenever you see an operator, push it to the stack, then recurse times its arity.
15:38:36 <elliott> The final "stack" contains the prefix expression in the wrong order. :p
15:38:39 <elliott> You really want a queue there.
15:38:48 <CakeProphet> ah
15:39:04 <CakeProphet> erm okay but then how do I pop the queue...
15:39:18 <CakeProphet> the opposite right?
15:39:21 <elliott> What.
15:39:44 <CakeProphet> you just told me to push the operators onto a queue in reverse.... and that's it.
15:39:59 -!- derrik has quit (Quit: take carez).
15:40:07 <elliott> Take carez yourself.
15:40:09 <elliott> CakeProphet: No, I didn't.
15:40:24 <CakeProphet> well, that's all I understood from it.
15:41:02 <elliott> Oh wait, infix
15:41:05 <elliott> Oh wait postfix
15:41:08 <CakeProphet> yes
15:41:12 <elliott> Yeah this is easy:
15:41:21 <CakeProphet> I'm using shunting yard to convert to postfix
15:41:30 <CakeProphet> and then I'm going to take thatand convert to prefix.
15:42:00 <CakeProphet> either with trees or with elliott's magic reversing algorithm
15:43:01 -!- Vorpal has quit (Quit: ZNC - http://znc.sourceforge.net).
15:43:01 <elliott> sec
15:43:53 <CakeProphet> I'm thinking it would work siilarly to an algorithm to evaluate the postfix
15:44:34 -!- Vorpal_ has joined.
15:44:55 <elliott> well I have something but it assumes all operators are binary
15:44:56 <elliott> is that ok
15:45:18 <CakeProphet> yep
15:45:18 <CakeProphet> they are.
15:45:31 <elliott> data Tm = Op ...
15:45:31 <elliott> | Lit ...
15:45:32 <elliott> postfixToPrefix :: Seq Tm -> (Seq Tm, Seq Tm)
15:45:32 <elliott> postfixToPrefix s =
15:45:32 <elliott> case viewr s of
15:45:32 <elliott> EmptyR -> (Seq.empty, Seq.empty)
15:45:34 <elliott> s' :> op@Op{} ->
15:45:36 <elliott> let (a,s'') = postfixToPrefix s'
15:45:38 <elliott> (b,s''') = postfixToPrefix s''
15:45:40 <elliott> in (Seq.singleton op >< a >< b, s''')
15:45:42 <elliott> s' :> lit@Lit{} -> (Seq.singleton lit, s')
15:45:53 <CakeProphet> oh no.
15:46:05 <elliott> postfixToPrefix (Seq.fromList [Lit 99, Lit 999, Op '+']) --> (Seq.fromList [Op '+', Lit 99, Lit 999], Seq.fromList []), I believe
15:46:06 <CakeProphet> I have to convert Haskell to C++
15:46:10 -!- Vorpal_ has changed nick to Vorpal.
15:46:42 <Vorpal> CakeProphet, you could just do system("ghci ...")
15:47:10 <elliott> CakeProphet: Oops, it is reversed.
15:47:16 <CakeProphet> I'm highly considering constructing an AST from the postfix and then using the nice little show Tree function I already made.
15:47:21 <elliott> import Data.Sequence (Seq, ViewR(..), (><))
15:47:21 <elliott> import qualified Data.Sequence as Seq
15:47:21 <elliott> data Tm = Op String | Lit Int deriving (Show)
15:47:21 <elliott> postfixToPrefix :: Seq Tm -> (Seq Tm, Seq Tm)
15:47:21 <elliott> postfixToPrefix s =
15:47:23 <elliott> case Seq.viewr s of
15:47:25 <elliott> EmptyR -> (Seq.empty, Seq.empty)
15:47:27 <elliott> s' :> op@Op{} ->
15:47:29 <elliott> let (b,s'') = postfixToPrefix s'
15:47:31 <elliott> (a,s''') = postfixToPrefix s''
15:47:33 <elliott> in (Seq.singleton op >< a >< b, s''')
15:47:35 <elliott> s' :> lit@Lit{} -> (Seq.singleton lit, s')
15:47:37 <elliott> There.
15:47:39 <elliott> It's a very simple algorithm.
15:47:41 <elliott> In fact
15:47:43 <elliott> You can generalise it easily
15:47:48 <CakeProphet> except half of that notation is completely new to me.
15:47:49 <elliott> CakeProphet: Watch as I make this trivial
15:48:40 <elliott> OK, so...
15:49:06 <CakeProphet> :> is kind of like reverse cons?
15:49:25 <Vorpal> no it is a weird smily
15:49:28 <Vorpal> smiley*
15:49:30 <elliott> CakeProphet: Let me simplify this
15:49:53 <elliott> :t replicateM
15:49:53 <Vorpal> :t (:>)
15:49:54 <lambdabot> forall (m :: * -> *) a. (Monad m) => Int -> m a -> m [a]
15:49:55 <lambdabot> Not in scope: data constructor `:>'
15:49:56 <CakeProphet> are you traversing the string backwards?
15:49:57 <Vorpal> hm
15:51:18 <elliott> CakeProphet: Yes. But seriously, stop trying to understand it.
15:51:21 <elliott> Let me do this simplification, OK?
15:51:24 <CakeProphet> sure.
15:51:28 <CakeProphet> I think I kind of understand it.
15:51:30 <CakeProphet> though.
15:51:42 <CakeProphet> the translation to C++ will be tricky though.
15:52:29 <elliott> CakeProphet: Yes, but it will be /much simpler/.
15:54:32 <elliott> OK, almost done.
15:54:37 <elliott> :t evalState
15:54:38 <lambdabot> forall s a. State s a -> s -> a
15:54:40 <elliott> :t runState
15:54:41 <lambdabot> forall s a. State s a -> s -> (a, s)
15:55:03 <CakeProphet> oh god
15:55:04 <CakeProphet> not state.
15:55:10 <elliott> stfu
15:55:15 <elliott> c++ has state all over the place
15:55:24 <CakeProphet> use ST if you want to make it look like C++
15:56:03 -!- BeholdMyGlory has joined.
15:56:40 <Vorpal> CakeProphet, that sounds like a nightmare: trying to make haskell look like C++
15:56:43 <Vorpal> just eww
15:57:24 <CakeProphet> elliott: you can't just explain it in pseudocode?
15:57:40 <elliott> CakeProphet: OK, fine, how about this: Do it however you want, I don't care.
15:58:18 <CakeProphet> elliott: I would appreciate the help, but if you don't want to help that's fine.
15:58:29 <elliott> I do, you just don't seem interested.
15:58:50 <CakeProphet> I'm not interested in translating Haskell to C++ no, but having the Haskell would certainly help and is something I'm interested in.
16:00:18 <CakeProphet> I think I could do it recursively as in the original algorithm though
16:00:27 <CakeProphet> well the second one
16:01:00 <CakeProphet> as long as I don't use references the inputs will be copied and will thus function as though immutable.
16:01:38 <CakeProphet> though it would probably be more efficient to explicitly use a stack and do it the mutable way.
16:02:07 <elliott> Dude, it's a trivial stateful algorithm.
16:02:49 <CakeProphet> I am not good with statefulness.
16:05:10 -!- monqy has joined.
16:05:19 <CakeProphet> but if I understand correctly.
16:05:29 <elliott> Too busy writing the simpler version, not interested
16:05:37 <CakeProphet> I basically need to set up a stack machine as though I am evaluating the postfix.
16:05:46 <CakeProphet> but instead I output prefix expressions.
16:05:59 <CakeProphet> er, no.
16:06:02 <CakeProphet> that won't work.
16:06:20 <CakeProphet> I need like two stacks maybe.
16:07:01 <CakeProphet> in any case I need to leave soon but I'll read the logs later if you finish anything.
16:07:34 <CakeProphet> hmmm... also
16:08:02 <CakeProphet> what if I use a stack instead of queue to output the shunting yard algorithm.
16:08:11 <CakeProphet> basically that would just reverse it.
16:14:21 <elliott> postfixToPrefix :: Seq Tm -> State (Seq Tm) (Seq Tm)
16:14:21 <elliott> postfixToPrefix s =
16:14:21 <elliott> case Seq.viewr s of
16:14:21 <elliott> EmptyR -> return Seq.empty
16:14:21 <elliott> s' :> tm -> put s' >> foldl (><) (Seq.singleton tm) <$> replicateM (arity tm) m
16:14:21 <elliott> where m = state (swap . runState (postfixToPrefix Seq.empty))
16:14:25 <elliott> Hmm, this definitely can be simplified...
16:16:05 -!- ais523 has joined.
16:27:19 <elliott> hi ais523
16:27:29 <ais523> hi elliott
16:51:22 -!- CakeProphet has quit (Read error: Operation timed out).
17:05:48 <elliott> ais523: do you have any experience with incremental GC on a terabyte-large, odd NUMA heap?
17:05:50 <elliott> no? shame
17:06:07 <ais523> heh, that was a kind-of random question to ask
17:06:11 <ais523> and no, I don't
17:06:15 <elliott> ais523: @ :-)
17:06:27 <elliott> It would have been better completely devoid of context.
17:06:46 <ais523> indeed
17:06:49 <ais523> but no, I still don't
17:06:49 -!- MichaelBurge_ has joined.
17:06:55 <elliott> shame
17:07:44 -!- Irish42 has joined.
17:08:00 <Irish42> hello all
17:08:06 <elliott> hi
17:08:08 <elliott> `? welcome
17:08:11 -!- Irish42 has left.
17:08:12 <HackEgo> Welcome to the international hub for esoteric programming language design and deployment! For more information, check out our wiki: http://esolangs.org/wiki/Main_Page
17:08:14 <elliott> HackEgo...
17:08:25 <elliott> that wasn't helpful
17:10:00 -!- MichaelBurge has quit (Ping timeout: 260 seconds).
17:14:24 -!- elliott_ has joined.
17:16:04 -!- elliott has quit (Ping timeout: 256 seconds).
17:19:48 -!- MichaelBurge_ has quit (Read error: Connection reset by peer).
17:20:54 -!- MichaelBurge has joined.
17:23:33 -!- boily has quit (Ping timeout: 240 seconds).
17:39:43 -!- boily has joined.
17:47:05 -!- boily has quit (Ping timeout: 252 seconds).
17:53:49 -!- MichaelBurge has quit (Read error: Connection reset by peer).
17:54:02 -!- MichaelBurge has joined.
18:03:27 -!- boily has joined.
18:04:49 -!- Ngevd has joined.
18:05:37 <Ngevd> Hello!
18:06:17 <Ngevd> If learning to ride a tricycle is, I dunno, like programming in Scratch, and bicycle in C++, unicycling is freakin' Malbolge
18:06:21 <cheater> hi Ngevd
18:06:24 <cheater> `? welcome
18:06:25 <HackEgo> Welcome to the international hub for esoteric programming language design and deployment! For more information, check out our wiki: http://esolangs.org/wiki/Main_Page
18:06:31 <Ngevd> I have been here before
18:06:35 <Ngevd> I am also known as Taneb
18:06:44 <cheater> never heard of
18:06:52 <Ngevd> What date is it?
18:08:08 <Sgeo|web> Hi Ngevd
18:08:20 <Sgeo|web> 9/28/2011 using weird US notation
18:08:40 <ais523> Wed 28 Sep, according to my status bar
18:08:44 <Ngevd> In sensible British notation that makes 9/28/2011
18:08:52 <ais523> the day-of-the-week reminder is useful, I get disoriented sometimes
18:08:58 <ais523> Ngevd: *28/9/2011
18:08:59 <Ngevd> So, yeah, I've been here a couple of months
18:09:19 <Ngevd> Indeed
18:09:24 <Ngevd> Had a long dau
18:09:26 <Ngevd> *day
18:49:03 -!- Ngevd has quit (Ping timeout: 252 seconds).
18:49:13 -!- augur has quit (Remote host closed the connection).
18:49:26 <fizzie> In Finnish notation that's "28.9.2011".
18:50:01 <elliott_> Is that what they use in Hel/Finland?
18:50:05 <elliott_> I guess "Hel" is the native name.
18:50:10 <elliott_> Apt.
18:51:51 -!- Ngevd has joined.
18:52:02 <fizzie> Apt-get.
18:53:01 <elliott_> Yes, I too thought of this. You are such a good bot.
18:53:09 -!- augur has joined.
18:53:12 <elliott_> Fix my bug would you? And don't say "beep".
18:53:24 <fizzie> MEEP.
18:54:09 <elliott_> Oh.
18:56:51 -!- ais523 has quit (Remote host closed the connection).
19:00:17 <Ngevd> I may make a language designed to compile into BytePusher
19:04:00 -!- hagb4rd has quit (Ping timeout: 248 seconds).
19:07:21 -!- GreaseMonkey has joined.
19:13:08 -!- hagb4rd has joined.
19:16:02 -!- sebbu has quit (Read error: Connection reset by peer).
19:16:29 -!- sebbu has joined.
19:20:22 <Phantom_Hoover> OK
19:20:23 <Phantom_Hoover> Evenings
19:20:28 <Phantom_Hoover> should not be this warm
19:23:03 <fizzie> Phantom_Hoover: Nick suggestion: Tantor_Hoover, so you can share an acronym with Template Haskell.
19:24:15 <Ngevd> And Taneb's Hat
19:28:31 <Ngevd> It's a nice hat
19:28:38 <Ngevd> Well, three hats
19:29:08 <Sgeo|web> ^Taneb
19:29:13 <Sgeo|web> erm, hmm
19:29:15 <Sgeo|web> Taneb^
19:29:37 <Ngevd> :?
19:29:52 <Sgeo|web> ^ is hat
19:30:11 -!- SgeoN1 has joined.
19:30:34 <Ngevd> Ooh
19:32:06 <elliott_> Phantom_Hoover: Wonderful summer weather, innit
19:32:10 <elliott_> Innit is so a classy word now.
19:32:34 <Ngevd> I actually heard someone say "Innit" unironically during the summer
19:33:32 <elliott_> You just missed the additional layer of irony.
19:33:52 <SgeoN1> People keep typoing process 1? Why?
19:34:07 <SgeoN1> ^joke
19:34:27 <elliott_> THANK GOD YOU MARKED THE JOKE
19:34:36 <elliott_> Actually I wouldn't have got it if you hadn't because it is the least funny.
19:35:00 <SgeoN1> I was worried someone might actually think I thought people were gypping init
19:35:09 <SgeoN1> Typoong
19:35:41 * SgeoN1 surrenders
19:38:33 -!- GreaseMonkey has quit (Quit: The Other Game).
19:41:50 <Phantom_Hoover> <fizzie> Phantom_Hoover: Nick suggestion: Tantor_Hoover, so you can share an acronym with Template Haskell.
19:42:00 <Phantom_Hoover> Why Tantor?
19:42:04 -!- Phantom_Hoover has changed nick to Trantor_Hoover.
19:44:49 -!- tromp has joined.
19:45:25 <elliott_> hi tromp
19:45:35 <fizzie> Trantor_Hoover: Well, he's got a trunk, that works for a hoover.
19:45:54 <elliott_> Heyy, esolangs.org/w redirects to the wiki.
19:45:56 <elliott_> VALUABLE KEYPRESSES.
19:53:52 -!- oerjan has joined.
19:54:10 <SgeoN1> H over
19:54:17 <elliott_> what
19:54:22 <SgeoN1> Vlbl kyptss
19:55:09 <SgeoN1> W atocrct great
19:56:20 <SgeoN1> FL autocrtc
19:57:17 <oerjan> W splng?
19:58:05 <elliott_> W /r.t; [ copula.
20:01:51 <oerjan> k
20:03:25 <oerjan> <Phantom_Hoover> Why Tantor?
20:03:30 <oerjan> that's irrelephant.
20:04:51 -!- ais523 has joined.
20:04:52 -!- ais523 has quit (Changing host).
20:04:52 -!- ais523 has joined.
20:05:15 <oerjan> but i see you settled on something more megalomaniac
20:16:53 <oerjan> elliott_: i have this strange hunch that earlier today you failed to recognize a troll - in the original usenet sense of the word...
20:17:12 <elliott_> oerjan: Quite intentional. derrik is a moron, but perhaps not a troll: he has been here for months.
20:17:37 <elliott_> However he's not done anything but pipe up in the same vague nonsense every time, so I think I'll just be annoying until he goes away.
20:17:44 <elliott_> Do my secret plans still work if I tell everyone about them first? :/
20:18:02 <oerjan> i do not believe the original usenet sense required people to always troll. in fact i think respected community members sometimes did it.
20:18:24 <elliott_> I don't think it's possible to emulate that level of mental tedium.
20:18:35 <oerjan> my memory is somewhat vague, though.
20:18:43 <elliott_> Well, you're right.
20:18:47 <elliott_> I'm 90 percent sure he's Actually That Stupid, though.
20:19:11 <ais523> oerjan: the original phrase was "trolling for newbies"
20:19:24 <ais523> it was done by established community members against new ones
20:19:27 <oerjan> ais523: yeah
20:19:57 <oerjan> ok so not quite the original sense then, i guess
20:21:13 <oerjan> which means elliott_ is probably the greatest troll in this channel :P
20:21:15 <elliott_> oerjan: but no, I was quite aware that it would never become productive ever.
20:21:31 <elliott_> I'm not sure what I was doing, but it was something related to proving a point.
20:21:38 <elliott_> Whatever it was it was amusing.
20:21:45 <oerjan> good, good.
20:22:11 <oerjan> i suspected so, after all you never asked me to ban him ;P
20:22:33 <elliott_> I don't see any need for banning when the entire channel is on someone's back :P
20:26:25 <Ngevd> I may design a REDICULOUSLY COMPLEX INSTRUCTION SET COMPUTER
20:26:32 <Ngevd> [sic]
20:27:14 <oerjan> i thought that was what Uniquode was... :P
20:28:22 <ais523> no, that's Itanium
20:28:41 <Ngevd> Uniquode is more like Befunge
20:30:42 <Ngevd> ReCISC is much lower level than Befunge
20:30:52 <Ngevd> Or indeed Uniquode, which is what I meant to say
20:33:43 <fizzie> Newly diculated.
20:36:53 <pikhq_> There's also the AS/400.
20:49:05 <oerjan> <zzo38> That is what I did, I pushed 9 and the file does say PublicDomain but it still told me it is unknown license type
20:49:36 <oerjan> http://osdir.com/ml/lang.haskell.cabal.devel/2008-02/msg00218.html seems to indicate something like this was fixed years ago?
20:52:10 <tromp> Hi, elliot
20:52:36 * oerjan picks up a t tromp lost
20:53:33 <tromp> sorry; was busy shortening my smallest brainfuck interpreter:(
20:53:47 <oerjan> APOLOGY ACCEPTED
20:54:23 <ais523> tromp: a hint, you can type the first few letters of someone's name then press tab
20:54:27 <ais523> and your client will fill in the rest for you
20:55:03 <tromp> thx for the tip, ais523
21:04:09 <oerjan> <Vorpal> <CakeProphet> can parentheses be considered to have a precedence? <-- if doing a bison/yacc grammar I would probably not handle parens as an operator with a defined associative and precedence...
21:04:53 <oerjan> i think you might need ( to be highest precedence to parse things like a . b ( c ) correctly.
21:05:05 <oerjan> but that might be the default
21:05:54 <oerjan> ) doesn't need one though, since it must be matched with the previous ( regardless
21:06:01 <oerjan> or so i think
21:08:48 -!- elliott_ has quit (Ping timeout: 248 seconds).
21:09:32 <Vorpal> <oerjan> i think you might need ( to be highest precedence to parse things like a . b ( c ) correctly. <-- what sort of grammar is that?
21:09:46 <oerjan> haskellike?
21:09:49 <Vorpal> oh okay
21:10:02 <Vorpal> oerjan, could have been a object oriented member function call too
21:10:12 <Vorpal> a.b(c)
21:10:18 <oerjan> i first put + there but it seemed more logical with a higher-order operator
21:11:39 <Trantor_Hoover> Is Con Air on TV CON AIR IS ON TV GUYS
21:12:04 <oerjan> don't believe him he's a con full of hot air
21:13:07 <Vorpal> oerjan, well it does need a precedence in the language but I was assuming he was using something like yacc or bison, where you normally use something like: %left PLUS MINUS\n%left TIMES DIVIDE or whatever to assign priority of operators. I just said I wouldn't use that method for ()
21:13:46 <Vorpal> but rather would do something like term : LPAREN expr RPAREN or such
21:13:50 <oerjan> Vorpal: ok then i guess i just said you could :P
21:13:59 <Trantor_Hoover> Oh my god Chief O'Brien is in this
21:14:13 <oerjan> but of course all precedence can be replaced by splitting token types in principle
21:14:23 <Vorpal> (where expr : expr PLUS EXPR | ... | term
21:14:25 <Vorpal> )
21:14:34 <Vorpal> err make the second expr lower case
21:14:50 <oerjan> i vaguely recall there might be tricky cases though
21:15:05 <Vorpal> oerjan, and yes. But how does %left in bison and such interact when you have more than one terminal in a production?
21:15:08 -!- Ngevd has quit (Quit: what a big quitter he is, eh?).
21:15:20 <Vorpal> Trantor_Hoover, why that nick?
21:15:38 <Trantor_Hoover> Vorpal, because it's really hot here just like on Trantor.
21:15:56 <Vorpal> ah okay
21:16:00 <oerjan> Vorpal: oh. i'm not sure which it chooses but iirc you can give a production an explicit precedence too
21:16:22 <Vorpal> oerjan, oh right, that is true
21:17:07 <Vorpal> oerjan, you invent a pseudo-token and do a %left xyyz or such above, and then you use something like: foo : BAR quux BAZ %prec xyyz { ... } iirc?
21:17:20 <Vorpal> where xyyz is the pseudo-token
21:17:33 <Vorpal> not sure if it needs to be upper case as terminals
21:17:34 <oerjan> that rings a bell. you don't need a pseudo-token if a real one fits, i think.
21:17:36 <Trantor_Hoover> OK so
21:17:38 <Trantor_Hoover> inevitably
21:17:42 <Trantor_Hoover> when it gets to the end
21:17:43 <Vorpal> oerjan, oh that is probably true
21:17:46 <Trantor_Hoover> I will be in hysterics
21:18:04 <Vorpal> oerjan, anyway parens should probably use %nonassoc (or was it %noassoc)?
21:18:11 <Trantor_Hoover> my parents are here
21:18:24 <Trantor_Hoover> help
21:19:56 <oerjan> Vorpal: i don't think it will matter, since all productions involving parens should match them and so will not have an opportunity for ambiguity of ( ... ( ... (
21:20:12 <Vorpal> oerjan, anyway I still find writing bison style grammars far easier than using parsec. I really would prefer a bison style parser generator for haskell. Especially since that avoids backtracking due to the bottom up nature, while parsec is top-down.
21:20:22 <Vorpal> oerjan, true
21:20:27 <oerjan> Vorpal: it's called happy :P
21:20:36 <Vorpal> oerjan, hm, should try that out
21:20:40 <oerjan> (never used it)
21:21:56 <Vorpal> oerjan, another issue with parsec: left-recursive grammars. Requires extra work than what you need in yacc.
21:22:05 <Vorpal> s/than/compared to/
21:22:50 <oerjan> yeah a bit
21:24:24 <oerjan> hm i recall someone recently having trouble making parsec's expressionparser stuff work right.
21:24:30 <oerjan> here
21:24:44 -!- Nisstyre has joined.
21:24:51 <Vorpal> oerjan, btw do you happen to know how yacc and bison are able to detect shift/reduce and reduce/reduce conflicts when generating the code (as opposed to during parsing when it is obvious how to do it)?
21:25:42 <ais523> Vorpal: they compile the grammar definition to lookup tables
21:25:52 <ais523> a conflict would require putting two different numbers in the same cell of the lookup table
21:25:56 <Vorpal> aha
21:26:10 <Vorpal> ais523, yet those issues are only warnings. That is strange
21:26:26 <oerjan> Vorpal: reduce/reduce are fatal, aren't they...
21:26:27 <ais523> because they can be sorted out by giving defaults
21:26:31 <Vorpal> oerjan, oh maybe
21:26:36 <Vorpal> shift/reduce are not at least
21:26:39 <ais523> generally, reduce/reduce is really bad and a problem with your grammar unless you expliclty say which is wanted
21:26:48 <ais523> shift/reduce can normally be sorted by using operator precedence
21:26:54 <Vorpal> yeah
21:26:55 <oerjan> but shift/reduce defaults to shift because it's the "greedy" behavior you usually want
21:27:13 <ais523> oerjan: actually, it defaults to the operator of higher precedence reducing first
21:27:27 <ais523> and the default for the same precedence depends on associativity
21:27:28 <oerjan> ais523: um i mean if there is no precedence resolution
21:27:34 <ais523> IIRC the default associativity is to shift first
21:27:55 <Vorpal> shift/reduce defaulting to shift means operators are treated as right associative by default, no?
21:28:14 <oerjan> the haskell report explicitly says that ambiguous syntax is resolved greedily
21:28:40 <ais523> oerjan: so did the CLC-INTERCAL definition, until nobody could figure out what it meant any more
21:28:45 <oerjan> Vorpal: i think so
21:28:46 <ais523> I worked out some of the simpler cases by experiment
21:29:06 <Vorpal> <ais523> oerjan: so did the CLC-INTERCAL definition, until nobody could figure out what it meant any more <-- eh, in the user manual or what?
21:29:15 <ais523> Vorpal: it was mentioned in a readme somewhere, IIRC
21:29:20 <Vorpal> awesome
21:29:47 -!- Patashu has joined.
21:29:51 <Vorpal> ais523, this is like the LR(1) thing in the intercal manual you mentioned before. Really hard to understand unless you wrote an implementation
21:30:16 <ais523> Vorpal: I wrote a testcase and a document about it
21:30:20 <Vorpal> heh
21:30:36 <ais523> it turns out that C-INTERCAL still wasn't doing it right when I started maintaing it, even though there'd been attempted bugfixes of that several times
21:30:46 <Vorpal> ais523, you did LR(inf) right for c-intercal? How?
21:31:35 <ais523> not exactly; the parser works out what sort of spark/ears nesting it's in
21:31:40 <ais523> and lets the lexer know
21:31:52 <Vorpal> heh, how does it do that?
21:31:56 <ais523> so the lexer can then work out whether a ' or " is definitely closing, or whether it might be opening
21:32:29 <ais523> that still doesn't handle every case, but it does handle everything that the INTERCAL-72 manual says you have to be able to handle (presumably because they couldn't figure out how to parse the other cases either)
21:32:31 -!- augur has quit (Remote host closed the connection).
21:33:07 <Vorpal> ais523, hm, I thought {...} stuff in bison was executed after the entire production was matched? So where would you embed this code?
21:33:09 <ais523> anyway, there's an informal agreement to always alternate sparks and ears at different levels of nesting, and then the problem doesn't come up at all
21:33:20 <ais523> Vorpal: in the {...}
21:33:36 <ais523> the lexer pushes opening sparkears onto a stack, the parser pops them again
21:33:41 <Vorpal> hh
21:33:42 <Vorpal> heh*
21:34:20 <Vorpal> ais523, what are the cases it can't handle?
21:34:22 -!- augur has joined.
21:35:40 <ais523> let me dig one up
21:35:49 <Vorpal> thanks
21:36:23 <ais523> here's an example that does work now but used not to, and actually happened in practice: DO .5 <- '?"'#65535~"'?.7$",2SUB.1"'~#21845"'~#1"$#1'~#3
21:36:46 <Vorpal> hm...
21:36:57 <ais523> here's a contrived example that doesn't work even with the current code: DO .1 <- ,3SUB",2SUB.1".2~.3"".4
21:37:10 <Vorpal> heh yeah that looks weird
21:37:24 <ais523> (admittedly, anyone writing that sort of thing is almost certainly trying to deliberately obfuscate their code)
21:37:40 <ais523> a better way to write the same thing is DO .1 <- ,3SUB",2SUB1'.2~.3'".4
21:37:47 <Vorpal> ah
21:37:54 <ais523> where it's completely clear how it nests (and that is accepted)
21:37:55 <Vorpal> what does that code do?
21:38:00 <ais523> nothing particularly useful
21:38:56 <ais523> in C, it becomes something like d1 = c3[c2[1][iselect(d2,d3)]][d4]
21:44:05 <Trantor_Hoover> Colm Meany's American accent is... pretty bad.
21:47:49 <Patashu> Woah, what? This sonic hack for the genesis has Helix Nebula playing by Anamanaguchi in the intro
21:48:02 <Patashu> Someone wrote an mp3 decoder for genesis I guess
21:48:09 <Patashu> http://www.youtube.com/watch?v=hiMeE0vJTnQ
21:48:57 <Trantor_Hoover> Oh, *no*, another Humble Bundle.
21:50:20 <ais523> I wasn't too impressed by the last one
21:50:25 <ais523> or the one before, FWIW
21:50:34 <ais523> the games feel unfinished, short, and many aren't much fun
21:51:15 <ais523> I completed And Yet It Moves (apart from the bonus levels and achievements); I was happy with the difficulty it started with and ended with, but its difficulty curve is too inconsistent to make it all that fun
21:51:22 <ais523> and it got samish after a while
21:51:52 <Trantor_Hoover> This one has Frozen Synapse in it.
21:52:11 <ais523> I know, they emailed me too
21:52:30 <ais523> I was planning to pay more than the £5 I originally paid if the games were good enough
21:52:37 <ais523> but I don't think it's worth more than £5, in retrospect
21:52:38 <ais523> so I won't
21:53:57 <Trantor_Hoover> Frozen Synapse has been universally acclaimed from what I've seen.
21:54:07 <Patashu> frozen synapse owns
21:54:08 <ais523> I've never heard of it, but might look at it
21:54:38 <oerjan> > let op o c a = a $ \x b -> b $ \y -> c $ x `o` y; calc a = a id; num n = ($ n) in calc (op (*)) (op (+)) (num 2) (num 3) (num 4)
21:54:40 <lambdabot> 20
21:54:56 * oerjan cackles evilly
21:55:37 <ais523> RPN Haskell?
21:55:58 <ais523> :t `o c a -> a $ \x b -> b $ \y -> c $ x `o` y
21:55:59 <lambdabot> parse error on input ``'
21:56:02 <ais523> :t \o c a -> a $ \x b -> b $ \y -> c $ x `o` y
21:56:03 <lambdabot> forall b t b1 t1 a b2. (t -> t1 -> a) -> (a -> b2) -> ((t -> ((t1 -> b2) -> b1) -> b1) -> b) -> b
21:56:21 <ais523> hmm, there's more going on there than meets the eye
21:56:31 <oerjan> PN, not RPN
21:56:33 <Deewiant> PN, not RPN
21:56:52 <ais523> oh, right
21:56:55 <oerjan> i was inspired by cakeprophet's log troubles
21:56:56 <ais523> reverse RPN
21:57:13 <oerjan> there might be a way to do it RPN too
21:59:05 * Trantor_Hoover buys on impulse.
22:00:24 <fizzie> Real MP3 decoding on the Genesis/MegaDrive sounds slightly unlikely; it has a 68k-alike at 7.67 MHz. I'm under the impression that even well-optimized MP3 decoding takes around 40 MIPS. Though maybe with parameters low enough, who knows.
22:00:54 <Trantor_Hoover> The bastards.
22:01:26 <Trantor_Hoover> They've made the lowest default payment $20.
22:01:42 <Trantor_Hoover> I'M GIVING YOU TEN DOLLARS DEAL WITH IT
22:01:55 <Madoka-Kaname> @djinn (t -> t1 -> a) -> (a -> b2) -> ((t -> ((t1 -> b2) -> b1) -> b1) -> b) -> b
22:01:55 <lambdabot> f a b c = c (\ d e -> e (\ f -> b (a d f)))
22:02:22 <Patashu> fizzie, you think it might be a wav then?
22:03:27 <fizzie> Well, not exactly a "wav", but something more easily decodable at least.
22:03:58 <fizzie> "Integrated IRC chat" as a game feature sounds a) weird and b) RAS-syndromish.
22:05:35 <oerjan> > let op o (x,(y,s)) c = c (x `o` y, s); calc a = a (); stop s = s; num n s = ($ (n, s)) in calc (num 3) (num 4) (num 2) (op (+)) (op (*)) stop
22:05:36 <lambdabot> (18,())
22:05:59 <oerjan> oh hm
22:06:07 <oerjan> > let op o (x,(y,s)) c = c (y `o` x, s); calc a = a (); stop s = s; num n s = ($ (n, s)) in calc (num 3) (num 4) (num 2) (op (+)) (op (*)) stop
22:06:08 <lambdabot> (18,())
22:06:27 <Patashu> aha: 'The PCM music takes up a lot of space, which is why the ROM is 6MB. '
22:06:29 <Patashu> now, what's PCM
22:06:42 <fizzie> Raw audio, basically.
22:06:47 <Patashu> figures
22:07:07 <fizzie> What you might call a wav, except the .wav file container can contain pretty much anything.
22:07:07 <Patashu> I thought it'd have to be mp3 because whenever I have a wav of a song it's like, 20 megabytes
22:07:13 <Patashu> and there's no way you could fit that much
22:08:58 <fizzie> If it's, say, mono and 22.050 kHz and 8 bits per sample, that's already just one eighth the bytes of "CD quality" (44.1 kHz, 16-bit, stereo) audio.
22:09:29 <fizzie> (I don't think Genesis has more than 1 PCM-enabled channel.)
22:12:31 <Trantor_Hoover> <fizzie> "Integrated IRC chat" as a game feature sounds a) weird and b) RAS-syndromish.
22:12:35 <Trantor_Hoover> Uplink dude.
22:13:39 <Trantor_Hoover> If Frozen Synapse isn't available for 64-bit Linux...
22:15:12 <fizzie> Uplink had an IRC client? I never even noticed.
22:16:28 <Sgeo|web> Will there be an Uplink 2?
22:17:21 <Trantor_Hoover> fizzie, you need to buy it.
22:17:47 <ais523> buy an IRC client?
22:17:49 <ais523> ouch
22:17:58 <Sgeo|web> ais523: in-game money, not real money
22:17:58 <Trantor_Hoover> ais523, it's uplink, piracy is unheard of.
22:17:59 <ais523> there are plenty of good free ones, for Linux at least
22:18:19 <Sgeo|web> Although the game itself costs real money
22:18:41 <Sgeo|web> Am I on ais523's mental ignore again?
22:19:03 <Trantor_Hoover> Want whois? You're damn well paying for it.
22:19:21 <Trantor_Hoover> Lost the file copier? Guess what!
22:19:38 <ais523> Sgeo|web: not mental ignore, just crossed messages
22:22:39 <Sgeo|web> How do you go about losing a file copier?
22:22:56 <Vorpal> fizzie "RAS-syndromish"?
22:22:56 <ais523> rm /bin/cp?
22:23:09 <ais523> Vorpal: RAS syndrome = Redundant Acronym Syndrom syndrome
22:23:17 <ais523> it's a joke originally made by New Scientist, but it caught on
22:23:20 <Vorpal> ah
22:24:06 <Vorpal> fizzie, btw I saw another game with integrated irc client than uplink. Recent too. Trying to remember the name of it.
22:24:17 <Vorpal> tactical simulator kind of thingy iirc
22:24:25 <fizzie> Frozen Synapse?
22:24:29 <Vorpal> fizzie, ah yes
22:24:34 -!- azaq23 has quit (Quit: Leaving.).
22:24:38 <fizzie> It's what I was talking about, not Uplink.
22:24:41 <Vorpal> oh
22:24:52 <fizzie> It's been the topic, thanks to being in a new Bundle.
22:24:59 <Vorpal> oh new bundle!?
22:25:10 <fizzie> Of one game.
22:25:26 <Vorpal> fizzie, what
22:25:46 <fizzie> You could call it a bundloid.
22:25:47 <Trantor_Hoover> "Cameron Poe then reunites with his loving wife and daughter."
22:25:52 <Trantor_Hoover> WP plot synopsis.
22:25:55 <Vorpal> oh there are bonuses
22:27:42 <fizzie> ais523: Another departmental christmas party thing: there was a standard Linux installation, the task was to read a particular file (/etc/motd, I think) by the most "creative" means. And the part that makes it related: all the external-executable commands (such as 'cp') you used were disabled by means of a 'rm' (itself exempt, I think) to up the difficulty and enforce the "creativity".
22:28:12 <ais523> does just "< /etc/motd" in the shell work?
22:28:15 <ais523> let me try that
22:28:27 <ais523> bash: /etc/motd: No such file or directory
22:28:28 <ais523> hmm
22:28:42 <ais523> just "< /etc/passwd" gave no response, anyway
22:28:46 <ais523> so I guess it doesn't actually output it
22:28:51 <Madoka-Kaname> fizzie, can you use gcc?
22:29:18 <ais523> just checks it for existence
22:29:26 <fizzie> ais523: It would just set up a fd for it, not actually read it. Though bash does have a 'read' and all.
22:29:51 <fizzie> Madoka-Kaname: Well, yes, once. Then nobody else can, after.
22:30:23 <Madoka-Kaname> fizzie, write a program that opens /dev/sha, parses the MBT, then parses the partition
22:30:23 <fizzie> I don't recall the solutions, but some were appropriately creative, after the easy ones had been done.
22:30:52 <Madoka-Kaname> Actually.
22:30:55 <fizzie> They might still be on a wall somewhere.
22:31:50 <Madoka-Kaname> Write a program that includes gcc and ln into itself, then on execution, outputs the gcc binary, the ln binary, etc, etc and reads /etc/motd by manually parsing the HD
22:32:30 <Vorpal> bought it
22:32:36 <Vorpal> the bonus games look fun
22:34:02 <Madoka-Kaname> fizzie, are you allowed to create a shar for /?
22:34:11 <Madoka-Kaname> (i.e. cheating)
22:34:31 <fizzie> I already have the frozenbyte bundle, so I'm not sure whether to get this new one. Maybe I should try the demo.
22:34:55 <Vorpal> fizzie, since I lacked the frozenbyte bundle this looked great for me
22:35:03 <fizzie> Madoka-Kaname: This was in christmas 2009, how should I know? I don't think anyone "cheated".
22:35:40 <Trantor_Hoover> Oh god
22:35:41 <Trantor_Hoover> I think
22:35:47 <Trantor_Hoover> I think That Scene is coming up.
22:35:58 <Trantor_Hoover> fizzie, just pay less than $4.
22:35:59 -!- Sgeo|web_ has joined.
22:36:06 <Trantor_Hoover> You'll get only Frozen Synapse.
22:36:13 <Sgeo|web_> Fuck accidentally hitting close
22:36:16 <Sgeo|web_> FUCK IT IN ITS ASS
22:36:30 <Sgeo|web_> Ok, why am I so irritable
22:37:31 <Trantor_Hoover> Were I Madoka-Kaname, I would make some unsettling reference to hormones.
22:37:56 <Madoka-Kaname> I would never do that
22:38:09 -!- Sgeo|web has quit (Ping timeout: 252 seconds).
22:38:14 <Trantor_Hoover> You went through a whole phase of hormones, remember?
22:38:15 <Vorpal> shadowgrounds: survivor is 1.1 GB in download? heh
22:38:18 <Trantor_Hoover> Hmm, wait...
22:38:21 <Vorpal> that is quite large for an indie game
22:38:25 * Madoka-Kaname baps Trantor_Hoover
22:40:23 <Vorpal> this... is going to take a while
22:41:15 <Trantor_Hoover> omaogmogmgomgomogmomgomgom it is thaat sine omgomgomgomgom
22:42:08 -!- hagb4rd has quit (Ping timeout: 248 seconds).
22:43:39 <Vorpal> also the sound track is a larger download than the game for Frozen Synapse?
22:43:40 <Vorpal> eh
22:43:49 <Trantor_Hoover> crying of laughter
22:43:49 <Vorpal> cd quality or something?)
22:43:58 <Vorpal> s/)//
22:44:53 -!- hagb4rd has joined.
22:46:24 * Trantor_Hoover → sleep
22:46:26 -!- Trantor_Hoover has quit (Quit: Leaving).
22:48:11 <Vorpal> fizzie, there still?
22:48:26 <Vorpal> fizzie, I can't get the creation of an account in frozen synapse to work
22:48:29 <Vorpal> :/
22:48:38 <Vorpal> it just times out
22:52:27 <Sgeo|web_> Love, love, is a (procedurally-generated MMO), love is a doing (procedurally-generated MMO),
22:54:57 <monqy> are you okay?
22:55:34 <oerjan> he is just stating the facts, apparently
22:57:53 -!- myndzi\ has joined.
23:00:00 <Vorpal> there, works now
23:01:11 -!- myndzi has quit (Ping timeout: 245 seconds).
23:04:24 -!- BeholdMyGlory has quit (Remote host closed the connection).
23:06:30 <Madoka-Kaname> > fix (brain Vorpal)
23:06:31 <lambdabot> Not in scope: `brain'Not in scope: data constructor `Vorpal'
23:06:34 <Madoka-Kaname> Damnit.
23:06:52 -!- augur has quit (Remote host closed the connection).
23:14:57 <Sgeo|web_> Thomas Edison Invents Marketing Other People's Ideas
23:17:45 -!- copumpkin has quit (Quit: Computer has gone to sleep.).
23:41:01 -!- copumpkin has joined.
23:47:20 -!- ais523 has quit (Remote host closed the connection).
23:54:45 -!- augur has joined.
2011-09-29
00:51:20 <Vorpal> vlc suddenly decided to use a HUGE font for the GUI. WTF
00:53:08 <oerjan> _ _____ _____ _____ _ _ _____ ___ ___ _ _
00:53:08 <oerjan> / \|_ _|_ _| ____| \ | |_ _|_ _/ _ \| \ | |
00:53:08 <oerjan> / _ \ | | | | | _| | \| | | | | | | | | \| |
00:53:08 <oerjan> / ___ \| | | | | |___| |\ | | | | | |_| | |\ |
00:53:08 <oerjan> /_/ \_\_| |_| |_____|_| \_| |_| |___\___/|_| \_|
00:53:20 <oerjan> like that?
00:56:12 <Vorpal> oh god, deleting vlc preferences didn't help
00:56:21 <Vorpal> oerjan, no like 40 pt
00:56:35 <Vorpal> so not QUITE that large
00:57:31 <oerjan> ...in which we deduce that Vorpal uses < 10 points for irc
01:14:38 <Vorpal> oerjan, I use 9 pt yes
01:16:01 <Vorpal> oh fuck, everything KDE or QT is screwed uo
01:16:02 <Vorpal> up*
01:16:57 <Vorpal> wut
01:17:09 <Vorpal> it is set to 9 pt, but it shows much larger
01:18:11 <Sgeo|web_> "In a strictly object oriented environment like C#/.NET," writes J.D., "there's really no such thing as 'global variables'. Sure, you can create a public class called 'Global' with a bunch of static fields, but the folks looking to (ab)use global variables generally have a hard time making that conceptual leap."
01:18:16 <Sgeo|web_> AHAHAHAHAHA I WISH
01:18:39 * Sgeo|web_ shoots self and then Eps
01:19:19 <Jafet> Today's conceptual leap is tomorrow's bread-and-butter design pattern
01:20:09 <Jafet> And now, I give you a class in Java.
01:20:11 <Jafet> http://static.springsource.org/spring/docs/2.5.x/api/org/springframework/aop/framework/AbstractSingletonProxyFactoryBean.html
01:29:00 -!- augur has quit (Remote host closed the connection).
01:37:51 <oerjan> > read $ replicate 100 '(' ++ "42" ++ replicate 100 ')'
01:37:53 <lambdabot> *Exception: Prelude.read: no parse
01:37:57 <oerjan> > read $ replicate 100 '(' ++ "42" ++ replicate 100 ')' :: Int
01:37:59 <lambdabot> 42
01:38:03 <oerjan> fancy
01:38:04 -!- augur has joined.
01:39:25 <oerjan> > read "1e100" :: Integer
01:39:27 <lambdabot> 100000000000000000000000000000000000000000000000000000000000000000000000000...
01:51:15 <Madoka-Kaname> > read "1"++(replace 1000 '0') :: Integer
01:51:16 <lambdabot> Not in scope: `replace'
01:51:20 <Madoka-Kaname> > read "1"++(replicate 1000 '0') :: Integer
01:51:22 <lambdabot> Couldn't match expected type `GHC.Integer.Type.Integer'
01:51:22 <lambdabot> against inf...
01:51:30 <Madoka-Kaname> > read ("1"++(replicate 1000 '0')) :: Integer
01:51:32 <lambdabot> 100000000000000000000000000000000000000000000000000000000000000000000000000...
02:01:51 -!- CakeProphet has joined.
02:01:51 -!- CakeProphet has quit (Changing host).
02:01:51 -!- CakeProphet has joined.
02:06:23 <Gregor> Anybody happen to know of a program for Unix/Linux/whatever that just keeps commands on a queue and runs them? So, if your queue is empty and you try to run a command, it runs immediately, but if it has other commands in it, you have to wait for those to complete?
02:07:55 * Sgeo|web_ would like to get Seaside running on Heroku >.>
02:08:06 <pikhq_> Gregor: That is one of the functionalities of GNU parallel.
02:09:43 <pikhq_> Lessee... Ah, have to combine it with a couple of other things.
02:09:58 <pikhq_> tail -f jobqueue | parallel
02:10:14 <pikhq_> Append to jobqueue to add tasks to the queue.
02:10:33 <pikhq_> e.g. echo 'gunzip foo.gz'>>jobqueue
02:11:03 <Gregor> Ah. But I can implement that in zero seconds :P
02:11:03 <pikhq_> Add -j$N to have it execute from the queue in parallel.
02:11:22 <Gregor> Will that work with a FIFO?
02:11:48 <pikhq_> parallel <your-fifo
02:11:49 <pikhq_> :P
02:12:02 <pikhq_> In case you hadn't noticed, it's reading from a pipe...
02:12:24 <Gregor> I'm very tired X-P
02:13:17 <CakeProphet> one thing Perl got right: having a small embedded language in strings.
02:14:24 <pikhq_> Tcl does, too. It's called Tcl.
02:15:31 <CakeProphet> yes well, it's interesting to note that it's not really certain if Perl string language is a subset of Perl.
02:15:50 <pikhq_> Who said anything about 'subset'?
02:16:06 <CakeProphet> 22:15 < CakeProphet> yes well, it's interesting to note that it's not really certain if Perl string language is a subset of Perl.
02:16:22 <pikhq_> -_-
02:17:20 <CakeProphet> :)
02:17:59 <CakeProphet> I love the discrete number of emotions I can convey. o^-:
02:19:00 <CakeProphet> unless you consider the tone of the message. Well, then it just becomes a difficult question.
02:29:21 <Gregor> pikhq_: Thanks for telling me about parallel; my attempt at writing the same thing (which I had started before you told me) is terrible and I should feel bad for having written it.
02:31:38 <Gregor> pikhq_: Err ... I'm inclined to disagree ... parallel doesn't seem to take commands from stdin ...
02:31:52 <pikhq_> Um. It certainly does.
02:36:52 <Gregor> Um, it certainly doesn't?
02:37:36 <pikhq_> echo 'echo foo'|parallel;# echos "foo"
02:39:26 <Gregor> Hm. Is my parallel not the same as yours >_>
02:39:40 <Gregor> (I eventually realized that what DOES run commands from stdin is sh :P )
02:39:48 <pikhq_> http://www.gnu.org/software/parallel/
02:40:23 <pikhq_> It is also ridiculously versatile.
02:40:40 <CakeProphet> hey so why don't most programming languages have a way to ignore warnings from a single line of code?
02:41:24 <CakeProphet> explain this stuff language designing people.
02:42:01 <CakeProphet> \:l./-\.l:/
02:42:54 <Gregor> pikhq_: Strange, my parallel came from "moreutils" in Debian, and seems entirely unrelated.
02:43:22 -!- MichaelBurge_ has joined.
02:46:43 -!- MichaelBurge has quit (Ping timeout: 252 seconds).
02:46:51 <CakeProphet> also, why does no operating system coming out of the box have a way to silence everything but music, to get rid of annoying sounds (from IMs and shit)
02:46:51 -!- MichaelBurge_ has changed nick to MichaelBurge.
02:47:21 <Vorpal> CakeProphet, irssi makes noise?
02:47:23 <Vorpal> ;P
02:47:33 <Gregor> CakeProphet: My way of doing that is using a USB headset. I only set ALSA_CARD=1 on programs I want to make sound, otherwise they're "silent" :P
02:47:34 <CakeProphet> yeah that's the only way I communicate.
02:47:51 <Vorpal> CakeProphet, anyway that is up to the program. The OS can't know if /usr/bin/foo is a music player or a game, or an IM client...
02:48:25 <Vorpal> Gregor, any idea how to get oss programs to use a specific sound card btw?
02:48:35 <CakeProphet> okay, so why no interface to do such?
02:48:38 <Vorpal> Gregor, system is using alsa
02:48:44 <CakeProphet> I mean, maybe I'm asking a lot.
02:48:52 <Vorpal> CakeProphet, check preferences of your IM client?
02:48:59 <Vorpal> also maybe pulse audio can do so
02:49:04 <Gregor> Vorpal: Uhh, ALSA_CARD=whatever aoss <program>? :P
02:49:26 <Vorpal> Gregor, so what is wrong with kernel OSS emulation?
02:49:27 <Vorpal> :(
02:49:43 <Vorpal> sure, aoss works too
02:49:45 <Vorpal> mostly
02:49:50 <Gregor> Vorpal: The fact that I don't know how to override which ALSA card it goes to, that's what :P
02:50:26 <Vorpal> Gregor, any idea how to use dmix on one sound card but not on another=
02:50:29 <Vorpal> s/=/?/
02:50:57 <Gregor> Vorpal: I know that if you can explicitly make one program use hw:<whatever> as its ALSA device, it will bypass dmix.
02:51:02 <Vorpal> hm
02:51:12 <Gregor> I don't know how to do that with an environment variable though.
02:51:17 <Vorpal> oh
02:51:26 <Vorpal> Gregor, I don't have dmix set up currently
02:51:32 <Vorpal> but I do want to set it up for one card
02:51:38 <Gregor> Oh
02:51:41 <Gregor> Can't help ya :P
02:51:44 <Vorpal> ah
02:51:49 <Gregor> It's default on my system.
02:52:26 <Vorpal> Gregor, it obviously isn't here as demonstrated by trying to use two sound producing programs at once against the on board sound
02:52:36 <Vorpal> works against the sb live of course
02:55:43 <CakeProphet> 22:15 < CakeProphet> yes well, it's interesting to note that it's not really certain if Perl string language is a subset of Perl.
02:56:17 <CakeProphet> does that make them equivalent or?
02:59:53 <Gregor> pikhq_: Here is my current (BRILLIANT) command queue system:
02:59:55 <Gregor> sh < cmdqueue.fifo
03:00:49 <CakeProphet> also what would be a good string subset for a language to have?
03:01:08 -!- sebbu2 has joined.
03:01:30 -!- sebbu has quit (Ping timeout: 255 seconds).
03:04:10 <CakeProphet> class Iterator i where next : i -> Maybe i
03:04:15 <CakeProphet> +:
03:05:50 <pikhq_> Gregor: Smartass. :P
03:11:11 <CakeProphet> so what if I made an object oriented language with completely unique semantics?
03:11:15 <CakeProphet> what if that became a thing.
03:11:21 <CakeProphet> hypothetical
03:11:24 <CakeProphet> question
03:11:26 <CakeProphet> you know.
03:21:40 -!- CakeProphet has quit (Ping timeout: 252 seconds).
03:36:49 -!- CakeProphet has joined.
03:42:33 <CakeProphet> okay so what if x y -> z could be defined as operator syntax and parsed effectively by a language compiler/interpreter?
03:42:55 <CakeProphet> x y -> z = ...
03:43:52 <oerjan> what's that supposed to mean
03:43:55 <CakeProphet> also use relationship precedence instead of fixed numeric. Essentially you use operators without parentheses in small sublanguages
03:44:09 <CakeProphet> oerjan: -> is the function, it's 3-ary infix
03:44:56 <CakeProphet> think Haskell-like semenatics.
03:44:59 <CakeProphet> and syntax.
03:45:18 <oerjan> well haskell doesn't to 3-ary operators
03:45:22 <CakeProphet> perhaps a dialect, with syntax changes and standard library changes.
03:45:32 <CakeProphet> oerjan: that's correct. this is hypothetical.
03:48:00 <CakeProphet> oerjan: any parsing problems etc?
03:49:22 <oerjan> well it _seems_ to me like you could parse it by combining arguments to highest precedence operators first
03:49:34 <CakeProphet> yes.
03:50:32 <CakeProphet> so what if spaces were valid operator characters for ternary operators, and you can use two operator symbols as a single reserved word.
03:50:55 <oerjan> oh hm a problem maybe
03:51:41 <oerjan> say -> has higher precedence than + and *, which have the usual
03:52:01 <CakeProphet> with the only restriction being that aren't any matching symbols in its precedence tree, which
03:52:43 <oerjan> hm wait no that won't be a problem
03:52:46 <CakeProphet> orders operators in a precedence by relational notation
03:52:59 <CakeProphet> a > b
03:54:03 <CakeProphet> I suppose one way to find out is to attempt to implement it.
03:54:46 <oerjan> i'll point toward agda's mixfix, which i've vaguely heard of, although i'm not sure if it allows just space separation.
03:55:15 <CakeProphet> you would need some compiler-enforced restrictions on relations and operator pairings
03:58:35 -!- MDude has changed nick to MSleep.
04:00:43 <CakeProphet> also consider a dialect of Haskell with a number of ambiguously cased operator symbols.
04:02:50 <CakeProphet> also typeclass operators
04:03:15 <CakeProphet> you guys could call it a parody language even. Perhaps it's also somewhat esoteric.
04:04:43 <CakeProphet> I'm sure there are even more syntax, and hypothetical extensions that could be added onto it. It could be a sort of collaborative effort.
04:16:57 <CakeProphet> maybe you could even define the whole language in terms of infix and circumfix n-ary operators
04:17:11 <CakeProphet> and precedence relationships.
04:35:16 -!- Madoka-Kaname has quit (*.net *.split).
04:35:16 -!- yorick has quit (*.net *.split).
04:35:16 -!- Deewiant has quit (*.net *.split).
04:35:17 -!- lifthrasiir has quit (*.net *.split).
04:36:11 -!- lifthrasiir has joined.
04:37:55 -!- Deewiant has joined.
04:43:48 -!- Madoka-Kaname has joined.
04:43:48 -!- yorick has joined.
04:43:57 -!- yorick has quit (Max SendQ exceeded).
04:44:09 -!- yorick has joined.
04:55:53 <Jafet> Use a genetic algorithm to perturb local fixities until an expression is well-typed.
04:59:07 <CakeProphet> no I'm pretty sure with just a few rules it would parse correctly.
04:59:11 <CakeProphet> and unambiguously
05:03:24 <Madoka-Kaname> @. pl djinn (a->b) -> (c->d) -> (b->e->c) -> (f->e) -> x -> (x -> x -> f) -> (f -> a) -> (e -> y -> z) -> y -> z
05:03:24 <lambdabot> f = const (const (const ((((const . flip id) .) .) . (. (flip =<< flip id)) . (.))))
05:03:34 <Madoka-Kaname> Yay for total insanity!
05:04:02 <Jafet> @pl \x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 -> x9 x8 x7 x6 x5 x4 x3 x2 x1 x0
05:04:06 <lambdabot> flip (flip . ((flip . ((flip . ((flip . (flip .)) .)) .)) .) . (((((flip .) .) .) .) .) . ((((((flip .) .) .) .) .) .) . (((((((flip .) .) .) .) .) .) .) . flip (flip . (flip .) . ((flip .) .) . (((
05:04:06 <lambdabot> flip .) .) .) . ((((flip .) .) .) .) . (((((flip .) .) .) .) .) . ((((((flip .) .) .) .) .) .) . flip (flip . (flip .) . ((flip .) .) . (((flip .) .) .) . ((((flip .) .) .) .) . (((((flip .) .) .) .)
05:04:06 <lambdabot> .) . flip (flip . (flip .) . ((flip .) .) . (((flip .) .) .) . ((((flip .) .) .) .) . flip (flip . (flip .) . ((flip .) .) . (((flip .) .) .) . flip (flip . (flip .) . ((flip .) .) . flip (flip . (
05:04:06 <lambdabot> flip .) . flip (flip . flip id))))))))
05:04:06 <lambdabot> optimization suspended, use @pl-resume to continue.
05:04:19 <oerjan> Madoka-Kaname: flipping madness
05:05:43 <Madoka-Kaname> @pl \a0 a1 a2 a3 a4 a5 a6 a7 a8 a9 b0 b1 b2 b3 b4 b5 b6 b7 b8 b9 -> a9 b9 a8 b8 a7 v7 a6 b6 a5 b5 a4 b4 a3 b3 a2 b2 a1 b1 a0 b0
05:05:46 <lambdabot> ((((((((((((((((const .) .) .) .) .) .) .) .) .) .) .) .) .) .) .) .) . (((((((((flip .) .) .) .) .) .) .) .) .) . ((((((((((flip .) .) .) .) .) .) .) .) .) .) . (((((((((((flip .) .) .) .) .) .) .)
05:05:46 <lambdabot> .) .) .) .) . ((((((((((((flip .) .) .) .) .) .) .) .) .) .) .) .) . (((((((((((((flip .) .) .) .) .) .) .) .) .) .) .) .) .) . ((((((((((((((flip .) .) .) .) .) .) .) .) .) .) .) .) .) .) . ((((((((
05:05:46 <lambdabot> (((((((flip .) .) .) .) .) .) .) .) .) .) .) .) .) .) .) . ((((((((((((((((flip .) .) .) .) .) .) .) .) .) .) .) .) .) .) .) .) . flip (flip . (flip .) . ((flip .) .) . (((flip .) .) .) . ((((flip .)
05:05:46 <lambdabot> .) .) .) . (((((flip .) .) .) .) .) . ((((((flip .) .) .) .) .) .) . (((((((flip .) .) .) .) .) .) .) . ((((((((flip .) .) .) .) .) .) .) .) . (((((((((flip .) .) .) .) .) .) .) .) .) . ((((((((((
05:05:46 <lambdabot> flip .) .) .) .) .) .) .) .) .) .) . (((((((((((flip .) .) .) .) .) .) .) .) .) .) .) . ((((((((((((flip .) .) .) .) .) .) .) .) .) .) .) .) . (((((((((((((flip .) .) .) .) .) .) .) .) .) .) .) .) .)
05:05:48 <lambdabot> [14 @more lines]
05:05:50 <lambdabot> optimization suspended, use @pl-resume to continue.
05:06:23 <oerjan> @djinn (a->b) -> (c->d) -> (b->e->c) -> (f->e) -> x -> (x -> x -> f) -> (f -> a) -> (e -> y -> z) -> y -> z
05:06:24 <lambdabot> f _ _ _ a b c _ d e = d (a (c b b)) e
05:07:53 <oerjan> thought it looked a bit redundant.
05:08:02 <Madoka-Kaname> djinn (a->b) -> (c->d) -> (b->e->c) -> (f->c->e) -> x -> (x -> x -> f) -> (f -> a) -> (e -> y -> z) -> y -> z
05:08:08 <Madoka-Kaname> @djinn (a->b) -> (c->d) -> (b->e->c) -> (f->c->e) -> x -> (x -> x -> f) -> (f -> a) -> (e -> y -> z) -> y -> z
05:08:08 <lambdabot> -- f cannot be realized.
05:08:22 <Madoka-Kaname> @djinn (a->b) -> (c->d) -> (b->e->c) -> (f->c->e) -> x -> (x -> f) -> (f -> a) -> (e -> y -> z) -> y -> z
05:08:22 <lambdabot> -- f cannot be realized.
05:09:01 <Madoka-Kaname> @djinn (a->b) -> (c->d) -> (b->e->c) -> (f->e) -> x -> (x -> f) -> (f -> a) -> (e -> c -> y -> z) -> y -> z
05:09:01 <lambdabot> f a _ b c d e f g h = g (c (e d)) (b (a (f (e d))) (c (e d))) h
05:09:10 <Madoka-Kaname> @djinn (a->b) -> (c->d) -> (b->e->c) -> (f->e) -> x -> (x -> f) -> (f -> a) -> (e -> c -> d -> y -> z) -> y -> z
05:09:10 <lambdabot> f a b c d e f g h =
05:09:10 <lambdabot> h (d (f e)) (c (a (g (f e))) (d (f e))) (b (c (a (g (f e))) (d (f e))))
05:09:15 <Madoka-Kaname> @. pl djinn (a->b) -> (c->d) -> (b->e->c) -> (f->e) -> x -> (x -> f) -> (f -> a) -> (e -> c -> d -> y -> z) -> y -> z
05:09:18 <lambdabot> f = ((((const .) .) .) .) . ap ((.) . ap . ((ap . ((ap . ((ap . (flip .)) .)) .) . ap (ap . (ap .) . ((flip .) .) . ((flip id .) .) . (. flip id) . (.))) .) . flip flip ((. flip id) . (.)) . ((.) .)
05:09:19 <lambdabot> . (ap .) . ((ap .) .) . flip ((.) . (.)) . (. (ap id . flip id)) . (.)) (flip ((.) . (.) . (.) . (.)) . flip flip ((. flip id) . (.)) . ((.) .) . (ap .) . ((ap .) .) . flip ((.) . (.)) . (. (ap id .
05:09:19 <lambdabot> flip id)) . (.))
05:09:19 <lambdabot> optimization suspended, use @pl-resume to continue.
05:09:24 <Madoka-Kaname> @pl-resume
05:09:27 <oerjan> Madoka-Kaname: it's pretty obvious really, c and e cannot be produced without each other in those failing ones
05:09:30 <lambdabot> f = ((((const .) .) .) .) . ap ((.) . ap . ((ap . (liftM2 (ap . (flip .)) .) . ap (ap . ((ap . ((flip . flip id) .)) .) . (. flip id) . (.))) .) . flip flip ((. flip id) . (.)) . (((.) . ap . (ap .))
05:09:31 <lambdabot> .) . flip ((.) . (.)) . (. (ap id . flip id)) . (.)) (flip ((.) . (.) . (.) . (.)) . flip flip ((. flip id) . (.)) . (((.) . ap . (ap .)) .) . flip ((.) . (.)) . (. (ap id . flip id)) . (.))
05:09:31 <lambdabot> optimization suspended, use @pl-resume to continue.
05:09:35 <Madoka-Kaname> @pl-resume
05:09:39 <Madoka-Kaname> oerjan, ah. =p
05:09:42 <lambdabot> f = ((((const .) .) .) .) . ap ((.) . ap . ((ap . (liftM2 (liftM2 flip) .) . ap (ap . (liftM2 (flip . flip id) .) . (. flip id) . (.))) .) . flip flip ((. flip id) . (.)) . (((.) . liftM2 ap) .) .
05:09:43 <lambdabot> flip ((.) . (.)) . (. (ap id . flip id)) . (.)) (flip ((.) . (.) . (.) . (.)) . flip flip ((. flip id) . (.)) . (((.) . liftM2 ap) .) . flip ((.) . (.)) . (. (ap id . flip id)) . (.))
05:12:56 <Madoka-Kaname> @. pl djinn (a -> b -> c) -> (d -> e -> f) -> (c -> f -> g) -> a -> b -> c -> d -> g
05:12:56 <lambdabot> (line 1, column 1):
05:12:56 <lambdabot> unexpected "-"
05:12:56 <lambdabot> expecting white space, "()", natural, identifier, lambda abstraction or expression
05:13:15 <Madoka-Kaname> @. pl djinn (a -> b -> c) -> (d -> e -> f) -> (c -> f -> g) -> a -> b -> d -> e -> g
05:13:16 <lambdabot> f = ((((const .) .) .) .) . (. join) . flip . ((flip . ((flip . ((.) .)) .)) .) . flip ((.) . (.))
05:13:40 <Madoka-Kaname> @. pl djinn (a -> b -> c) -> (c -> d) -> a -> b -> d
05:13:40 <lambdabot> f = flip ((.) . (.))
05:14:08 <Madoka-Kaname> @. pl djinn (a -> b -> c -> d) -> (d -> e) -> a -> b -> c -> e
05:14:09 <lambdabot> f = flip ((.) . (.) . (.))
05:14:32 <Madoka-Kaname> @. pl djinn (a -> b) -> (b -> c) -> (c -> d) -> a -> d
05:14:32 <lambdabot> f = (flip (.) .) . flip (.)
05:14:46 <Madoka-Kaname> @. pl djinn (c -> d) -> (b -> c) -> (a -> b) -> a -> d
05:14:47 <lambdabot> f = (. (.)) . (.) . (.)
05:24:32 -!- esowiki has joined.
05:24:59 -!- esowiki has joined.
05:25:14 -!- esowiki has joined.
05:25:44 -!- esowiki has joined.
05:26:10 -!- esowiki has joined.
05:27:20 -!- esowiki has joined.
05:27:30 -!- esowiki has joined.
05:27:55 -!- esowiki has joined.
05:28:07 -!- esowiki has joined.
05:28:42 -!- esowiki has joined.
05:29:07 -!- esowiki has joined.
05:29:43 -!- esowiki has joined.
05:30:03 -!- esowiki has joined.
05:30:36 -!- esowiki has joined.
05:31:16 -!- esowiki has joined.
05:31:56 -!- esowiki has joined.
05:32:06 -!- esowiki has joined.
05:32:51 -!- esowiki has joined.
05:32:51 -!- glogbot has joined.
05:33:02 <oerjan> oh it's cake
05:33:33 <fizzie> Yes, though I thought yours was just some sort of a variant.
05:33:38 <fizzie> It is now, i guess.
05:34:11 <oerjan> getting only gay slang when i tried to google it sort of gave me a hunch there
05:34:24 -!- Gregor has joined.
05:34:31 <fizzie> There is the "basket case".
05:34:39 <fizzie> Fruitcase, basket cake.
05:34:39 <oerjan> and nutcase
05:34:59 <fizzie> Nutcake. Mix-n-match.
05:35:44 -!- oerjan has quit (Quit: Lost his marblecakes).
05:35:54 <fizzie> 1. crazy, loony, looney, nutcase, weirdo -- (someone deranged and possibly dangerous)
05:35:57 <fizzie> 1. crackpot, crank, nut, nut case, fruitcake, screwball -- (a whimsically eccentric person)
05:36:01 <fizzie> 2. fruitcake -- (a rich cake containing dried fruit and nuts and citrus peel and so on)
05:36:07 <fizzie> One of these does not belong.
05:38:52 -!- esowiki has joined.
05:39:15 -!- esowiki has joined.
05:39:36 -!- esowiki has joined.
05:40:05 -!- esowiki has joined.
05:41:15 -!- esowiki has joined.
05:41:44 -!- esowiki has joined.
05:42:30 -!- esowiki has joined.
05:43:00 -!- esowiki has joined.
05:43:35 -!- esowiki has joined.
05:44:10 -!- esowiki has joined.
05:44:35 -!- esowiki has joined.
05:45:15 -!- esowiki has joined.
05:45:25 -!- esowiki has joined.
05:46:10 -!- esowiki has joined.
05:47:41 -!- esowiki has joined.
05:47:41 -!- glogbot has joined.
05:47:43 -!- HackEgo has joined.
05:48:06 -!- Gregor has joined.
07:41:40 <Sgeo|web_> If big software comparies suddenly become liable for all the bugs in their existing software, the resulting liability lawsuits could bankrupt them. This proposal could destroy the software industry as we know it. There would probably be negative consequences too.
07:41:48 <Sgeo|web_> http://www.schneier.com/blog/archives/2011/09/an_interesting.html
07:57:22 -!- monqy has quit (Quit: hello).
08:23:07 <Sgeo|web_> http://i.imgur.com/j6dZ0.png
08:23:38 <Sgeo|web_> Making a program with those terms, and posting it to Reddit, does not sound like a recipe for success
08:24:14 -!- derdon has joined.
08:31:19 -!- brisingr has joined.
08:42:09 -!- hagb4rd has quit (Ping timeout: 248 seconds).
08:52:48 -!- Madoka-Kaname has quit (Ping timeout: 260 seconds).
09:00:07 -!- hagb4rd has joined.
09:03:35 <Patashu> that seems hard to follow -and- enforce
09:03:47 <Patashu> what does the program do?
09:54:49 <fizzie> "Newsgroups: comp.lang.c,comp.lang.c++,rec.sport.tennis,alt.anagrams" -- quite an... eclectic selection.
10:15:07 -!- pikhq has joined.
10:15:18 -!- pikhq_ has quit (Ping timeout: 255 seconds).
10:15:45 -!- BeholdMyGlory has joined.
10:57:36 -!- Jafet has quit (Quit: Leaving.).
11:36:28 -!- BeholdMyGlory has quit (Remote host closed the connection).
11:54:39 <CakeProphet> convert.cpp:152:12: error: aggregate ‘std::ifstream inp’ has incomplete type and cannot be defined
11:54:42 <CakeProphet> wat
11:55:56 <CakeProphet> ah need to include fstream
11:57:44 -!- GreaseMonkey has quit (Quit: The Other Game).
12:07:02 -!- Madoka-Kaname has joined.
12:07:02 -!- Madoka-Kaname has quit (Changing host).
12:07:02 -!- Madoka-Kaname has joined.
12:08:34 <Patashu> C is great at having weird compiler errors
12:08:36 <Patashu> C++ in particular
12:08:42 <CakeProphet> #0 0x00007ffff7de54da in ?? () from /lib64/ld-linux-x86-64.so.2
12:08:42 <CakeProphet> #1 0x00007ffff7de5fec in ?? () from /lib64/ld-linux-x86-64.so.2
12:08:42 <CakeProphet> #2 0x00007ffff7de9d24 in ?? () from /lib64/ld-linux-x86-64.so.2
12:08:42 <CakeProphet> #3 0x00007ffff7df0795 in ?? () from /lib64/ld-linux-x86-64.so.2
12:08:47 <CakeProphet> #4 0x0000000000401aaf in main ()
12:08:49 <Patashu> ?? ()
12:08:49 <CakeProphet> best backtrace
12:09:07 <CakeProphet> "well your program entered main, and then... uh.... "
12:09:57 <Vorpal> CakeProphet, what are the good magicka spells you mentioned (iirc it was you?) I can't find it in my logs
12:10:06 <Patashu> You want to make a steam beam iirc
12:10:08 <Vorpal> not sure which day it was
12:10:21 <Patashu> it's like water fire arcane arcane arcane or water fire lightning arcane arcane or water lightning arcane arcane arcane
12:10:23 <Patashu> I forget
12:10:34 <Vorpal> <Patashu> C is great at having weird compiler errors <Patashu> C++ in particular <-- uh? C is neither a subset nor superset of C++
12:10:51 <Patashu> This is true
12:10:54 <Patashu> But C and C++ are 'like' each other
12:10:59 <Vorpal> C++ is a different language than C, sure quite similar, but still different languages.
12:11:15 <Patashu> When I think of C or C++ I think of the other (and also java)
12:11:26 <Vorpal> eh, java is even more different
12:11:40 <CakeProphet> Vorpal: qfqfasa is good. any combination of (shield and rock) + ( fire or ice or neither) is good
12:11:47 <Vorpal> Patashu, why not C#?
12:12:01 <Vorpal> CakeProphet, hm okay
12:12:16 <CakeProphet> Vorpal: qfsafe + self cast is an immunity shield. Once you're immune to stuff you can then use qerasr + sword cast which pretty much is the best thing ever.
12:12:49 <Patashu> Hmm, apparently magica's magic system got more complex since I last looked
12:12:59 <CakeProphet> as far as I know it's exactly the same.
12:13:08 <Vorpal> CakeProphet, what does qerasr + sword do?
12:13:19 <Patashu> Maybe people are just getting better at exploiting it then
12:13:29 <CakeProphet> make giant mountains of steamy icy electrical arcane death. yes it makes perfect sense.
12:13:37 <Vorpal> oh btw, I just realised witcher 2 2.0 was released today. Never mind, I don't have time for magicka /now/
12:13:40 <CakeProphet> Patashu: I am a magicka pro dawg. :P
12:14:20 <CakeProphet> Vorpal: no you are missing out on the opportunity to become a great vizard.
12:14:35 <Vorpal> CakeProphet, come on, witcher 2 is like the game of the year IMO
12:15:16 <Vorpal> CakeProphet, Witcher 2 has excellent graphics, especially if you go into advanced and crank everything up a step from the ultra setting.
12:15:26 <Vorpal> (ultra doesn't max out everything)
12:15:50 <Vorpal> (yes my computer can handle that, as long as I turn off supersampling, I get something like 40 FPS if I turn on the supersampling)
12:16:33 <CakeProphet> don't care. not magicka
12:16:45 <Patashu> You know what else isn't magicka?
12:16:45 <Vorpal> CakeProphet, don't you play anything except magicka?
12:16:50 <Patashu> Foood
12:16:50 <Vorpal> Patashu, Hitler?
12:16:54 <Vorpal> oh that too
12:17:04 <CakeProphet> how do you tell g++ to compile with more debugging symbol stuff.
12:17:15 <CakeProphet> Vorpal: yes I was exaggerating a bit.
12:17:16 <Vorpal> CakeProphet, -ggdb3?
12:17:44 <Vorpal> CakeProphet, what did qfqfasa do?
12:18:13 <CakeProphet> oh boy I got a line number this time.
12:18:46 <CakeProphet> Vorpal: steam arcane lightning beam. It's the strongest beam in the game. Also a decent AOE
12:19:02 -!- derdon has quit (Remote host closed the connection).
12:19:19 <CakeProphet> if you take out one steam and put more arcane into it it makes a better AOE because arcane is what increases the radius of the aoe spell.
12:19:42 <Vorpal> ah
12:20:01 <CakeProphet> also in a bind, queing up like 5 water + aoe cast is a decent "get the fuck away from me" spell
12:20:16 <CakeProphet> there's one part where you fight a bunch of other wizards on these small platforms. And it's supposed to be really difficult or whatever.
12:20:24 <Patashu> do you have an autohotkeys program that autocasts the best spells?
12:20:29 <CakeProphet> but you can literally just do water AOEs and knock everyone off in a few seconds.
12:20:32 <CakeProphet> Patashu: no.
12:20:38 <CakeProphet> that is against the spirit of magicka. :P
12:20:38 <Patashu> make one
12:20:39 <Patashu> then speedrun magicka
12:20:45 <Patashu> or just speedrun magicka anyway
12:21:09 <Vorpal> well looks like 2.0 will be out later today, so I guess I'll play some magicka
12:21:18 <Vorpal> or maybe I'll play Trine
12:22:08 <Vorpal> <Patashu> do you have an autohotkeys program that autocasts the best spells? <-- what a good idea
12:22:16 <CakeProphet> that's so bad
12:22:18 <CakeProphet> ruins the game.
12:22:26 <Vorpal> CakeProphet, btw I love the icon on the main menu for online play
12:22:34 <Vorpal> well, image, not really an icon
12:22:39 <Patashu> does changing your hotkey bindings in sc2 to be more efficient ruin sc2?
12:22:47 <Vorpal> sc2?
12:22:48 <CakeProphet> no that's different.
12:22:51 <Patashu> starcraft 2
12:22:58 <CakeProphet> for one it's part of the game I believe.
12:23:10 <Patashu> it is indeed
12:23:10 <CakeProphet> also in magicka you may not always want the same spells. that's boring.
12:23:39 <CakeProphet> certainly there are a few spells that are the strongest but they're not the best for every situation.
12:23:42 <Vorpal> "Tip: Don't drink and drive" XD
12:23:48 <Vorpal> on the loading screen
12:23:53 <CakeProphet> good tip.
12:24:28 <CakeProphet> one spell that's not too powerful but still useful is aqqqq which fires a beam of water.
12:24:29 <Patashu> But surely out of the... 10^8? possible spells not all you'd ever want to use
12:24:32 <CakeProphet> water having the best knockback.
12:25:03 <Vorpal> CakeProphet, qfsafe + self doesn't allow boosting with space?
12:25:21 <CakeProphet> well it's more like 10^5 - opposite element combinations
12:25:23 <CakeProphet> Vorpal: no.
12:25:27 <Vorpal> CakeProphet, why?
12:25:31 <CakeProphet> just recast it occasionally. You don't need it all the time.
12:25:34 <Patashu> Hmm I just realized, you can play magicka with...that peripheral with the ten buttons, I forget what it's called, a nostromo or something
12:25:35 <CakeProphet> it just doesn't. doesn't work that way.
12:25:39 <Vorpal> CakeProphet, also I forgot: how do you cast on the sword?
12:25:40 <CakeProphet> it's not a normal shield it's an immunity shield.
12:25:50 <CakeProphet> shift left click
12:26:06 <CakeProphet> I think.
12:26:11 <Vorpal> CakeProphet, actually seems I cast it on my M60, whatever that means...
12:26:26 <CakeProphet> yes you enchant your sword and then when you use your sword it uses the spell.
12:26:35 <CakeProphet> for an m60 it still works like a normal sword, unfortunately
12:26:39 <CakeProphet> no enchanted bullets.
12:26:54 <Vorpal> sadly
12:27:10 <Vorpal> CakeProphet, btw what is up with the dead moose?
12:27:27 <CakeProphet> I don't recall exactly why they do that but it's part of an achievement to find them all.
12:27:34 <Vorpal> oh
12:27:48 <CakeProphet> my favorite staff is the staff of war, which all the warlocks have.
12:27:55 <CakeProphet> because it doubles your health and increases physical resistance.
12:27:59 <CakeProphet> best thing ever.
12:28:25 <CakeProphet> don't really have a huge preference on swords.
12:29:50 <CakeProphet> Vorpal: oh another really good spell is any combination of cold and earth + aoe cast
12:30:00 <CakeProphet> more earth increases range more cold increases slow duration.
12:30:08 <CakeProphet> gives you plenty of time to do other shit.
12:30:30 <CakeProphet> one combo I use a lot is ddddq aoe and then ddddr + aoe
12:30:41 <CakeProphet> the first one knocks them down and wets and then the second freezes.
12:30:56 <CakeProphet> actually for the second one you can just do rrrrr aoe
12:33:54 <CakeProphet> but yeah I pretty much use all 5 elements always with the exception of heal (because its sometimes faster, but stacking multiple heal elements adds a heal-over-time effect) and normal shield spells.
12:34:18 <CakeProphet> I'm sure I use 4 sometimes out of haste.
12:34:40 <Patashu> aren't there ten elements?
12:34:42 <Patashu> I am le confused
12:35:22 <CakeProphet> yes, ten elements, you can combine 5 into a spell.
12:35:26 <fizzie> "SC2" is an awfully overloaded acronym; I can never guess whether something is about StarCraft 2 as opposed to Star Control 2.
12:35:28 <CakeProphet> some elements don't combine.
12:35:38 <Patashu> I didn't think of star control 2
12:35:45 <Patashu> and oh, -that- five elements
12:35:48 <fizzie> I think of it often.
12:36:19 <CakeProphet> Vorpal: so now that you've learned all of the overpowered spells is the intro insanely easy?
12:37:37 <Vorpal> CakeProphet, I got to the harvidar level
12:37:39 -!- Jafet has joined.
12:37:51 <Vorpal> CakeProphet, but even with those spells I keep dying there
12:38:15 <Vorpal> CakeProphet, so they made no difference
12:38:18 <CakeProphet> er harbidar? what is that.
12:38:20 <CakeProphet> *v
12:38:25 <Vorpal> CakeProphet, the city thingy
12:38:29 <Vorpal> not sure about the spelling
12:38:35 <CakeProphet> oh, lots of goblins and stuff?
12:38:41 <Vorpal> CakeProphet, you got a ride on a cart, just after you got the M60
12:38:51 -!- Ngevd has joined.
12:38:55 <Vorpal> then arrived at a city, were told to wait until tomorrow in an inn
12:39:00 <CakeProphet> ah
12:39:02 <Vorpal> and then battle of hell
12:39:05 <Ngevd> Hello!
12:39:08 <CakeProphet> okay so for the goblin dudes with bombs.
12:39:27 <Vorpal> CakeProphet, they are not the main issue, but carry on. The large enemies is the issue
12:39:28 <fizzie> The här-vilar level.
12:39:34 <CakeProphet> aaaaf is the best. because it chains across goblins and sets them on fire
12:39:39 <CakeProphet> which makes the bomb dudes explode.
12:40:03 -!- erdosjr has joined.
12:40:19 <CakeProphet> for the giant things qfqfasa is probably the best. but until you have an opportunity to use that I'd set up rock barriers
12:40:56 <CakeProphet> note that you can apply elemental effects to the barriers. so edddq will wet enemies and then edddr will freeze them.
12:41:10 <CakeProphet> or edfff will protect you while dealing out damage.
12:41:18 <Vorpal> edfff would do what?
12:41:33 <CakeProphet> create a barrier of rocks that spout fire.
12:41:52 <CakeProphet> more earth increases the durability and duration of the rocks, more fire increases the damage and duration of the fire.
12:42:35 <CakeProphet> ed(anything) is going to create a barrier of rocks.
12:42:53 <CakeProphet> definitely one of the best defensive spells.
12:43:12 <Vorpal> fuck this, *goes playing deus ex hr*
12:43:42 <CakeProphet> YOU'RE JUST A BAD WIZARD OKAY.
12:44:00 <Patashu> YOU'RE A WIZARD HARRY
12:44:12 <CakeProphet> EVERYONE THINKS WIZARDS HAVE IT EASY AND ITS ALL FUN AND GAMES
12:44:16 <CakeProphet> MAGICKA SHOWS THE GRITTY TRUTH.
12:44:38 <Patashu> Gotta make my mind up. Which spell should I cast?
12:44:46 <Patashu> Yes truly plightful
12:44:58 <CakeProphet> you have to worry about stepping in large bodies of waters and making sure you're not on fire after launching a massive explosive fireball.
12:45:08 <CakeProphet> and when you're wet you have to worry about shocking yourself with your own lightning elements.
12:45:29 <CakeProphet> meanwhile hordes of goblins, ogres, and warlocks approach.
12:45:36 <Patashu> I'm pretty sure you could model this using a finite state machine
12:45:55 <Vorpal> CakeProphet, right, whatever
12:45:59 <CakeProphet> lol
12:46:05 <CakeProphet> MAGICKA IS SERIOUS BUSINESS OKAY
12:46:08 <CakeProphet> NO JOKING AROUND.
12:46:34 <fizzie> Everything is serious business these days.
12:46:36 <Vorpal> come on, magicka would be utterly boring without the humour
12:46:54 <CakeProphet> nope. I actually play arena which has absolutely no storyline
12:47:05 <CakeProphet> you're just killing rounds of enemies in an arena.
12:47:05 <Patashu> Does arena get infinitely hard
12:47:18 <CakeProphet> no I think it goes up to round 20 or something like tht.
12:47:22 <CakeProphet> but it does get insanely difficult.
12:47:27 <Vorpal> if there is a game that is NOT serious, it is Magicka
12:47:48 <Vorpal> I prefer a game with a storyline btw
12:47:50 <fizzie> Funny things are the most serious.
12:48:07 <CakeProphet> there's one round where you fight one of the more difficult bosses from the story while also fighting off a usual horde of cannon-wielding ogres and warlocks.
12:48:44 <CakeProphet> and then shortly afterwards 4 yettis run in and attempt to grab you and insta-kill you.
12:48:48 <CakeProphet> as yettis do in that game.
12:49:01 <CakeProphet> (the trick is to set yourself on fire or spam rock walls everywhere)
12:49:10 <Patashu> It ends? Lame
12:49:16 <Patashu> I want to see so many enemies appear it lags the game
12:49:21 <CakeProphet> yes but I've never gotten to the final round.
12:49:32 <CakeProphet> it doesn't follow an equation for how to spawn things
12:49:35 <CakeProphet> each round is different so
12:49:39 <CakeProphet> can't do be infinite like that.
12:49:39 <Patashu> Yeah that's cool
12:49:41 <Patashu> But it could like
12:49:47 <Patashu> Repeat but with 2x as tough the monsters
12:49:48 <Patashu> Or whatever
12:49:52 <CakeProphet> yeah that's possible
12:49:58 <Patashu> But if it's so hard you can't beat it anyway probably not important
12:50:28 <Vorpal> it is like pacman after the final level. All bugging out
12:50:30 <Vorpal> XD
12:50:57 <CakeProphet> I have no idea because I HAVEN'T BEATEN IT.
12:51:01 <CakeProphet> see above.
12:51:03 <CakeProphet> :)
12:51:04 <Patashu> Do any modern games have a kill screen?
12:51:11 <Vorpal> nobody beat pacman for years either
12:51:15 <Vorpal> Patashu, kill screen?
12:51:20 <Patashu> Ala pacman
12:51:28 <Vorpal> Patashu, I never played the original pacman
12:51:33 <CakeProphet> also Magicka: Vietnam is a documentary about the harrowing lives of young vietnam magicians who led the front lines.
12:51:36 <Vorpal> I just heard it from other sources
12:51:39 <Patashu> You were just talking about the kill screen :|||
12:51:47 <Vorpal> Patashu, oh is that what it is kalled?
12:51:51 <Patashu> Yep
12:51:52 <Vorpal> bugging out past last real level
12:51:57 <Patashu> Have you read the pac man dossier btw?
12:51:58 <Patashu> cool stuff
12:51:59 <Vorpal> well, it was a bug, probably not
12:52:07 <Vorpal> <Patashu> Have you read the pac man dossier btw? <-- no what is it?
12:52:22 <CakeProphet> so apparently the issue is with cout << endl;
12:52:26 <CakeProphet> ...but... why?
12:52:28 <Patashu> http://home.comcast.net/~jpittman2/pacman/pacmandossier.html
12:52:39 <Patashu> CakeProphet: Maybe the end of a line is undefined on your operating system
12:52:56 <CakeProphet> uh.... no
12:53:02 <Patashu> I am joking of cours
12:53:04 <Patashu> But what if it was..........
12:53:05 <fizzie> Patashu: I'm pretty sure I recall hearing about at least one (modern) game that was unwinnable-as-released due to a glitch; though it was then patched.
12:53:31 <Patashu> fizzie: hmm that sort of counts
12:53:42 <CakeProphet> #include <iostream>
12:53:42 <CakeProphet> #include <fstream>
12:53:42 <CakeProphet> #include <cstdio>
12:53:42 <CakeProphet> #include <stack>
12:53:42 <CakeProphet> #include <cstring>
12:53:44 <CakeProphet> #include <cctype>
12:53:47 <CakeProphet> #include <vector>
12:53:47 <fizzie> "A kill screen is a stage or level in a video game (often an arcade game) that stops the player's progress due to a programming error or design oversight. Rather than "ending" in a traditional sense, the game will crash, freeze, or behave so erratically that further play is impossible."
12:53:50 <fizzie> It should count.
12:53:50 <CakeProphet> this is good right?
12:53:57 <CakeProphet> none of this will mess up cout << endl ever right?
12:54:02 <fizzie> No it is NOT GOOD it is not sorted ALPHABETICALLY.
12:54:09 <CakeProphet> ...
12:54:10 <olsner> CakeProphet: not good, looks like C++
12:54:13 <CakeProphet> ...
12:54:18 <Patashu> you should be using #from <iostream> import endl
12:54:18 <Patashu> obviously
12:54:24 <CakeProphet> ew
12:54:25 <Patashu> what are you, one of them procedural coders?
12:54:47 <fizzie> #include qualified <iostream> as IO
12:54:52 <olsner> Patashu: what are *you*, one of them python coders?
12:54:53 <CakeProphet> I prefer a continuation massive style using pointfree combinators... in C++.
12:54:56 <Vorpal> fizzie, which game was it?
12:55:10 <Patashu> now you're just making stuff up
12:55:12 <CakeProphet> but not pointerfreee bahahahahahasuhduahsd
12:55:35 <CakeProphet> but no really why is cout << endl; an issue
12:55:42 <Patashu> if you take it out
12:55:43 <fizzie> Vorpal: I can't recall. But it was a commercial product.
12:55:45 <Patashu> it doesn't crash?
12:56:52 <CakeProphet> Patashu: now it just crashes on the line after it.
12:56:58 <CakeProphet> which is inp.open(file_name);
12:56:59 <CakeProphet> ...
12:56:59 <Patashu> I am helping
12:57:03 <CakeProphet> WHAT IS HAPPENING.
12:57:07 <Patashu> hmm
12:57:08 <Patashu> what happens
12:57:13 <Patashu> if you add in debugging printing everywhere
12:57:16 <Patashu> does it stop crashing?
12:57:17 <olsner> hmm, I wonder if something like this would work in C++: namespace IO { using std::cout; using std::endl; ... }
12:57:20 <Patashu> I heard about programs doing this
12:57:24 <fizzie> WHAT IS HAPPENING is DIVINE RETROBUTANE for you for not writing "std::cout << std::endl" instead.
12:57:50 <CakeProphet> (gdb) print inp
12:57:51 <CakeProphet> $1 = <incomplete type>
12:57:52 <olsner> also I wonder if "using namespace" in a namespace exports the imported names from that namespace
12:57:57 <CakeProphet> inp is ifstream
12:58:00 <CakeProphet> so this might mean something.
12:58:12 <CakeProphet> cout is also incomplete
12:58:14 <CakeProphet> what does that mean?
12:58:30 <Patashu> are you sure it's just not happening to crash on that line
12:58:34 <Patashu> no matter what you put there?
12:58:36 <fizzie> I wouldn't be surprised if it just meant "nurrr this type is too much for me".
12:58:50 <olsner> if cout is just a reference, I think it doesn't need a complete type
13:00:03 <CakeProphet> Patashu: I added a line that wasn't cout << endl; (it was cout << "test" instead) and the inp.open(file_name) line is still where it stops.
13:00:26 <fizzie> What does "stops" mean, anyway? I hasn't been following.
13:01:05 <CakeProphet> crashes inexplicably, with the following backtrace:
13:01:06 <CakeProphet> #0 0x00007ffff7de54da in ?? () from /lib64/ld-linux-x86-64.so.2
13:01:06 <CakeProphet> #1 0x00007ffff7de5fec in ?? () from /lib64/ld-linux-x86-64.so.2
13:01:06 <CakeProphet> #2 0x00007ffff7de9d24 in ?? () from /lib64/ld-linux-x86-64.so.2
13:01:06 <CakeProphet> #3 0x00007ffff7df0795 in ?? () from /lib64/ld-linux-x86-64.so.2
13:01:08 <CakeProphet> #4 0x0000000000401aaf in main (argc=1, argv=0x7fffffffe748) at convert.cpp:156
13:01:24 <Patashu> take stuff out until it stops crashing
13:01:26 <CakeProphet> on the line: cout << endl;
13:01:42 <CakeProphet> "take stuff out until it stops crashing" you realize taking stuff out will cause other crashes right?
13:02:00 <Patashu> oh noes!
13:02:04 <Patashu> I did not
13:02:41 <CakeProphet> so yeah removing the open causes while (!inp.eof()) to crash it
13:02:51 <Patashu> makes sense
13:03:08 <CakeProphet> I really think it has something to do with my includes.
13:03:12 <CakeProphet> or namespaces or something.
13:03:12 <Patashu> so is the crash in inp or in .open()?
13:03:13 <Patashu> maybe
13:03:29 <Patashu> oh, inp is ifstream
13:03:35 <CakeProphet> technically it's in ?? () of /lib64/ld-linux/x86-64.so.2
13:03:36 <Patashu> is there even a fake ifstream you can import wrongly?
13:04:02 <Patashu> you should comple and run it on a windows box and see if it gives a better stack trace
13:04:08 <CakeProphet> ...
13:04:23 <CakeProphet> do I have to?
13:04:37 <Patashu> naw
13:05:43 <CakeProphet> are you sure there's not a way I can get better debugging output?
13:06:04 <Patashu> what IDE are you using?
13:06:45 <fizzie> "-ggdb" should generate the best information you can get for use with GDB, in theory.
13:06:50 <CakeProphet> Patashu: lol IDE
13:06:55 <CakeProphet> emacs + shell
13:06:58 <Patashu> ic
13:07:29 <fizzie> And 3 is the highest level there.
13:08:10 <CakeProphet> ...
13:08:15 <CakeProphet> AUUUUGH FUCK THIS
13:08:21 -!- MDude has joined.
13:08:29 -!- Madoka-Kaname has quit (*.net *.split).
13:08:30 -!- HackEgo has quit (*.net *.split).
13:08:30 -!- fungot has quit (*.net *.split).
13:08:30 -!- Zuu has quit (*.net *.split).
13:08:49 -!- MSleep has quit (Ping timeout: 248 seconds).
13:08:50 <CakeProphet> I should start doing these assignments like a week early so I have time to deal with stupid compiler output and debugging shit.
13:08:57 <fizzie> But of course it can't generate debug information for anything else than your program.
13:09:40 <fizzie> C++ is not a very nice language to debug, thanks to all that template-generated "invisible" code.
13:10:31 -!- Madoka-Kaname has joined.
13:10:31 -!- HackEgo has joined.
13:10:31 -!- fungot has joined.
13:10:31 -!- Zuu has joined.
13:11:28 <fizzie> And if you have anything on the stack, it's easy to get all kinds of delayed crashes if you stack-mungle over the internals of the ifstream. You could try moving it outside main and seeing what happens.
13:11:35 <CakeProphet> I literally have no idea what to test now.
13:12:02 <CakeProphet> hmmm
13:12:05 <Patashu> Delete it all and start over. If you know what you want to do it should go faster
13:12:09 <Patashu> And you might not make the same invisible mistake
13:12:27 <Ngevd> I don't like this time of day
13:13:18 <CakeProphet> cin >> file_name;
13:13:21 <CakeProphet> is the line before the crash.
13:13:25 <CakeProphet> file_name is char*
13:13:52 <fizzie> That's something that can very easily mungle over the end. How about >>ing into a std::string?
13:14:01 <fizzie> I mean, you've finally got a string type in C++.
13:14:24 <CakeProphet> I didn't see an overload for strings so I didn't think it would work.
13:14:31 <CakeProphet> also ifstream.open takes char * as well
13:14:45 <fizzie> Yeah, well, that's just a .c_str() on the string.
13:14:50 <CakeProphet> hmmm okay.
13:15:05 <fizzie> The fact that the API takes char *s everywhere is yet another thing to dislike, but still.
13:15:19 <CakeProphet> yes it's fairly obnoxious
13:15:45 <Patashu> Woha
13:15:52 <Patashu> w3schools went down just as I was testing some xslt
13:16:17 <fizzie> The overloaded operator>> comes from <string>.
13:16:32 <CakeProphet> I do some more reads into char * later so I might need to fix those as well if that's the real problem.
13:16:35 <CakeProphet> ah okay
13:17:16 <Ngevd> I should try XSLT S and K again
13:17:21 <CakeProphet> yep that was apparently it.
13:17:29 <fizzie> And in fact it's template<typename CharT, typename Traits, typename Alloc> basic_istream<CharT, Traits>& operator>>(basic_istream<CharT, Traits>& stream, basic_string<CharT, Traits, Alloc>& str).
13:17:50 <CakeProphet> now something else is crashing. good.
13:18:00 <fizzie> So that you can apply it to all kinds of non-char streams and non-char strings.
13:18:09 <fizzie> Using non-standard memory allocators.
13:18:16 <fizzie> And different character traits.
13:19:32 <Ngevd> Question!
13:19:41 <Ngevd> Can an XSLT document be applied to itself?
13:20:30 <CakeProphet> fizzie: is there any good replacement for sprintf in C++?
13:20:50 <fizzie> Well, no, if you want "good".
13:20:57 <Patashu> Ngevd: I presume so, xslt is xml
13:21:19 <fizzie> CakeProphet: You can make a string-stream and then use the usual stream formatting type-magic and flobs.
13:21:27 <CakeProphet> fizzie: they sure do like to make using C++'s fancy string class a pain.
13:21:29 <Ngevd> Could have interesting consequences
13:22:48 <fizzie> Using a stringstream is not any worse than iostream-formatted output.
13:23:21 <fizzie> E.g. you have the same problems of someone setting the stream to hex mode or "restoring" it to decimal mode while your code thinks the mode won't change.
13:23:24 <CakeProphet> I'll just use sprintf and convert back to string.
13:23:38 <fizzie> And then you end up with defensive format-setting everywhere, just in case someone has changed it.
13:24:04 <fizzie> I don't think you can even read the current formatting state of a stream anyhow. Though it might be possible.
13:24:28 <CakeProphet> yeah... sprintf is good.
13:26:17 <fizzie> The thing returned by std::string::c_str() is a pointer to somewhere deep inside the string, and will likely be invalid if you touch the string object in any inappropriate (non-const) way.
13:26:33 <fizzie> It's a good way to get dangling pointers and so on.
13:26:34 <Patashu> really?
13:26:35 <Patashu> augh
13:26:41 * Patashu puts pillow over head
13:26:45 <CakeProphet> aaaaaand.... memory leak :P
13:27:01 <fizzie> Well, the alternative would be to return a copy and then leak as a sieve because nobody would free the copies.
13:27:09 <fizzie> Plus spend quite a lot of time copying.
13:28:35 <CakeProphet> fizzie: shouldn't have this problem with things like sprintf though right?
13:28:58 <fizzie> Well, uh, that depends on where you're sprintf'ing to.
13:29:12 <CakeProphet> another char *
13:29:17 <CakeProphet> which is then put in a string and returned.
13:29:24 <fizzie> It's a problematic function too, since it doesn't allocate storage.
13:29:46 <CakeProphet> >_>
13:30:02 <CakeProphet> oh right.
13:30:13 <CakeProphet> I need to specify the size for this string and stuff.
13:30:22 <CakeProphet> maybe I should just use the stringstream stuff.
13:30:57 <fizzie> Something like "char buf[256]; snprintf(buf, 256, "fmt", ...); return std::string(buf);" is safe enough; the string object will store a copy of the string inside it.
13:31:06 <fizzie> If you don't mind a maximum size limit, that is.
13:31:28 <CakeProphet> hmm
13:31:35 <CakeProphet> I might actually just....
13:31:38 <CakeProphet> construct a string.
13:31:40 <CakeProphet> with +=
13:31:41 <CakeProphet> ..
13:31:46 <fizzie> Uh, and of course 'snprintf' was added only in C99, I'm not sure what it's status in <cstdio> is.
13:32:25 <fizzie> std::string::operator+= is just fine, though it only accepts strings, char *s and individual chars.
13:32:36 <fizzie> You need that stringstream if you need to convert some integers or something.
13:32:49 <CakeProphet> no it's all strings.
13:32:56 <CakeProphet> and chars
13:32:57 <CakeProphet> and the like.
13:33:11 <CakeProphet> can I chain them together or do they need to be on one line?
13:33:15 <CakeProphet> er, individual lines.
13:34:28 <CakeProphet> yeah append returns a string&
13:34:31 <CakeProphet> so I can chain them
13:36:03 <fizzie> Yes; but do note that += is right-to-left associative, so if you write s += "foo" += "bar" that's s += ("foo" += "bar") which won't work; but the .append(...).append(...) chain is hokay.
13:36:19 <fizzie> Or I guess (s += "foo") += "bar" but that's butt-ugly.
13:41:12 <Ngevd> Question!
13:42:01 <Ngevd> In XSLT templates, would <xsl:for-each select=./*> do the subelements of the element the template selected?
13:43:19 <Patashu> I don't know because w3schools is down
13:43:40 <Ngevd> So it is!
13:43:57 <Ngevd> I'll assume it does
13:47:31 -!- erdosjr has quit (Quit: Page closed).
13:52:59 -!- BeholdMyGlory has joined.
14:00:42 <Patashu> Ngevd would you like to help me with this xslt (rather html?) problem
14:01:03 <Patashu> With this: http://www.w3schools.com/xsl/tryxslt.asp?xmlfile=cdcatalog&xsltfile=cdcatalog_if use this xslt http://pastebin.com/h8wTGXfX and this xml http://pastebin.com/Rv5wDpkm
14:01:10 <Patashu> what it's trying to do is stop the table every third card and start a new one
14:01:14 <Patashu> but it completely breaks and doesn't display anything
14:01:27 <Patashu> BUT if inside the conditional all you do is post text then it'll work fine
14:01:40 <Ngevd> Yeah, but first
14:01:49 -!- Ngevd has changed nick to Taneb|Hovercraft.
14:04:18 -!- tromp has left ("Konversation terminated!").
14:05:04 -!- Taneb|Hovercraft has changed nick to Ngevd.
14:10:07 -!- Phantom_Hoover has joined.
14:13:20 <Ngevd> Got it, Patashu
14:14:51 <Patashu> What's the fix
14:15:05 <Ngevd> http://pastebin.com/tVvRxmjv
14:15:19 <Ngevd> The problem was that your XML was imbalanced
14:15:44 <Patashu> ... !
14:16:02 <Patashu> Oh
14:16:07 <Patashu> Possibly he just made a fragment of it poorly
14:16:58 <Patashu> Hmm
14:17:01 <Patashu> So why are all the trues at the top
14:17:09 <Patashu> and not splitting the table
14:18:08 <Ngevd> They are splitting it up for me
14:18:28 <Patashu> What site are you using to test it
14:18:28 -!- CommaChameleon has joined.
14:18:33 <Patashu> Perhaps w3schools' is broken
14:18:40 <Ngevd> w3school's, in Firefox
14:18:49 <Patashu> ...
14:18:51 * Patashu opens firefox
14:18:51 <Ngevd> What's your browser?
14:19:59 <Patashu> Why why why why why
14:20:02 <Patashu> It works in firefox but not in chrome
14:20:06 <Patashu> Why why why why why
14:20:39 -!- copumpkin has quit (Quit: Computer has gone to sleep.).
14:21:48 <Patashu> Hmmm. It won't let me use an XSLT with unbalanced tags inside of it
14:21:53 <Patashu> But what if I do want to print unbalanced tags?
14:22:21 <Ngevd> Then you are a bad person and you should feel bad
14:22:24 <Patashu> :(
14:23:42 <Patashu> So there's no way to do it?
14:24:15 <Ngevd> Not as far as I am aware
14:24:24 <Patashu> Huh
14:24:43 <Ngevd> Unless you are sneaky and use XSLT to make JavaScript that adds elements UNBALANCEDLY
14:24:55 <Patashu> OoOOooOO
14:24:58 <Patashu> that would be sneaky
14:25:09 <Ngevd> > 30 * 64 * 9
14:25:16 <Patashu> or maybe I could make a value-of that prints out the tag I want?
14:25:19 <Patashu> is that a thing
14:26:07 <Ngevd> I dunno
14:26:21 <Patashu> something like <xsl:value-of select="print(</tr>)"/> except I'm sure it's not called print
14:26:54 -!- elliott has joined.
14:28:01 <Patashu> <xsl:value-of select="substring('</tr>',1)"/>
14:28:07 <Patashu> ??????
14:28:27 <CakeProphet> xslt? is that kind of like xpath?
14:28:41 <Patashu> it uses xpath
14:28:42 <Ngevd> Oddly, yes
14:29:03 <Patashu> <xsl:value-of select="substring('a',1)"/> works but <xsl:value-of select="substring('</tr>',1)"/> does not
14:29:06 <Patashu> do I need to escape part of it?
14:29:22 <Patashu> it doesn't like '<'
14:29:39 <Patashu> but &lt; is a-ok
14:29:46 <Ngevd> There's a reason for that
14:29:56 <elliott> I think that's XML not XSLT
14:29:58 <Patashu> <xsl:value-of select="substring('&lt;/tr&gt;',1)"/>
14:30:00 <Ngevd> That reason is it's BLOODY XML
14:30:05 <elliott> because
14:30:07 <elliott> <foo bar=">">
14:30:09 <elliott> isn't ok
14:30:11 <elliott> you need to escape it
14:30:17 <Ngevd> XSLT is a subset of XML
14:30:25 <elliott> technically it's an XML schema
14:30:26 <elliott> I think
14:30:41 <Patashu> Wait
14:30:47 <Patashu> It likes &gt; but not &lt;
14:30:50 <Patashu> Why
14:31:44 <elliott> lol
14:32:00 <Patashu> try &#60; on for size!
14:32:10 <Patashu> darn that doesn't work either
14:32:22 <Patashu> yet, again, &#62; works ok
14:32:35 <Patashu> it's like it really reeally doesn't want me to embed html in html..............
14:32:39 <Patashu> I wonder why that could be
14:34:24 <Patashu> Wait hmm
14:34:34 <Patashu> I think it's complaining about the -output- being non well formed, not the xml? I don't know
14:35:35 <elliott> Patashu: Why are you matching on that anyway
14:35:43 <elliott> XSLT is structural
14:35:46 <elliott> You can't just match random element tags
14:36:13 <Patashu> Basically my friend wants to output a table for every element in an xml, and that's easy
14:36:22 <Patashu> But he also wants to make it line break every three of these elements
14:36:24 <Patashu> That isn't
14:36:26 <Patashu> I am discovering
14:36:35 <Patashu> Well rather he wants the table to break one line every three elements
14:36:44 <Patashu> Which means unbalanced tags
14:36:52 <elliott> Output a table... so output it as XHTML?
14:36:55 <elliott> Rather than like
14:36:56 <Ngevd> Or just a <br/>
14:36:56 <Patashu> Yeah
14:36:57 <elliott> text in XML
14:36:58 <CommaChameleon> I'm actually here if you need me to explain anything <_<
14:37:07 <elliott> If you really want to do that, CDATA?
14:37:11 <CommaChameleon> Logged in as per your suggestion
14:37:13 <elliott> I'm sure XSLT has stuff for CDATA
14:37:13 <Patashu> Ooo
14:37:16 <elliott> CommaChameleon: sup
14:37:17 <Patashu> Hmmmmm
14:37:18 <elliott> `? welcome
14:37:23 <HackEgo> Welcome to the international hub for esoteric programming language design and deployment! For more information, check out our wiki: http://esolangs.org/wiki/Main_Page
14:37:53 <CommaChameleon> I'll briefly explain the motivation behind this; it might help you understand what I'm trying to do.
14:38:13 <CommaChameleon> I'm trying to prototype a card game, and I need to print out some cards on cardstock paper.
14:38:25 <Patashu> Lol
14:38:26 <Patashu> <![CDATA[</tr><tr>]]> works great
14:38:30 <Patashu> Except for one problem.......
14:38:33 <Patashu> It doesn't get parsed ever
14:38:40 <CommaChameleon> I want to put 9 cards on each page.
14:38:44 <Patashu> It worked well. Too well.
14:39:05 <elliott> OK well
14:39:06 <elliott> Patashu
14:39:12 <elliott> I suggest restructuring the program
14:39:15 <elliott> XSLT is functional, as I understand
14:39:17 <elliott> So what you instead want to do
14:39:19 <Patashu> Yep
14:39:20 <elliott> Is to transform a list of cards
14:39:24 <elliott> Into a list of (list of cards)
14:39:27 <elliott> Where each inner list has three elements
14:39:34 <elliott> Then, you can just produce a <tr> for each list in the outer list
14:39:38 <elliott> And not try and do it slapdash like this
14:39:40 <elliott> You can do it structurally
14:39:42 <Patashu> Great, how do you do that
14:39:55 <elliott> Do which part
14:39:57 -!- brisingr has left.
14:39:59 <elliott> Grouping into lists?
14:40:02 <Patashu> Yeah
14:40:04 <elliott> See SICP or whatever :P
14:40:32 <Patashu> XSLT isn't a very good programming language
14:40:46 <elliott> groups [] = []; groups [x] = [[x]]; groups [x,y] = [[x,y]]; groups (x:y:z:xs) = [x,y,z] : groups xs
14:40:56 <elliott> Convert to using "if" on the length rather than pattern matching
14:41:03 <CakeProphet> s.erase(remove_if(s.begin(), s.end(), isspace), s.end());
14:41:03 <elliott> And whatever the equivalent of car/cdr is instead of that
14:41:05 <elliott> And you're done
14:41:05 <Patashu> Yes this is great, have you used XSLT before
14:41:09 <Ngevd> XSLT IS A PERFECTLY GOOD PROGRAMMING LANGUAGE
14:41:10 <CakeProphet> the best way to strip whitespace in a string in C++, obviously.
14:41:26 <elliott> Patashu: No, but I'm assuming you're asking for help on how to structure it in a way amenable to XSLT's paradigm
14:41:33 <elliott> Rather than asking me how to write your program entirely :P
14:41:34 <Patashu> ...But you haven't used XSLT
14:42:00 <elliott> Well, I wrote a few trivial test things in it once, and I know the general paradigm.
14:42:09 <Patashu> Me to
14:42:12 <elliott> I know that you won't get anywhere trying to generate HTML as text for some reason.
14:42:16 <Patashu> But something as simple as 'form groups of three' is stumping me
14:42:18 <elliott> And I know it's functional, so you will be able to process lists in it
14:42:32 <elliott> Patashu: http://fxsl.sourceforge.net/articles/FuncProg/2.html?
14:42:49 <Patashu> Oh shit
14:42:56 <Patashu> That's hardcode
14:43:08 <elliott> HardcoDe? :p
14:43:15 <Patashu> Oops
14:43:16 <Patashu> Hardcore
14:43:32 <elliott> Patashu: How good is XSLT's plain iteration? You can avoid transforming into groups if you can instead just increment the list index by three each time
14:43:43 <elliott> Then list[i], list[i+1], list[i+2] form the group
14:43:55 <Patashu> Ooh
14:43:56 <Patashu> that's a good idea
14:44:02 <Ngevd> XSLT is declerative, not functional
14:44:03 <Patashu> You can skip it if the position() isn't mod something
14:44:04 <CakeProphet> wow ::isspace is actually a thing.
14:44:25 <elliott> Patashu: You'll need to handle the case when the last or last two in that don't exist because the list is too short, but that should be easy
14:44:25 -!- copumpkin has joined.
14:44:34 <CakeProphet> s.erase(remove_if(s.begin(), s.end(), ::isspace), s.end());
14:45:36 <CakeProphet> time to see if this works...
14:45:59 <Patashu> Aha
14:46:00 <Patashu> following-siblingSelects all siblings after the current node
14:46:03 <Patashu> so you can do something like
14:46:06 <Patashu> . for this element
14:46:37 <Patashu> following-sibling::[1] for the element after
14:46:38 <Patashu> then [2]
14:47:08 <elliott> Patashu: Right -- but you must do that modulo check.
14:47:13 <elliott> Or you'll have tons of duplication.
14:47:13 <Patashu> Yes
14:48:08 <elliott> People should be banned from commenting on the readability of Haskell in /r/programming.
14:48:15 <elliott> "When I see lines like contains im (Rect x y w h) = all and . map cols . rows $ im, I wish lisp gave some of the parenthesis back."
14:48:26 <elliott> Translation: "I don't know Haskell, but I expect to be able to read Haskell code."
14:48:29 <elliott> "Same here. I'd rather type a bit more and get something I can actually read again later without effort."
14:48:30 <Ngevd> There is no perfectly readable programming language
14:48:38 <Ngevd> Except for English
14:48:45 <elliott> Translation: "I don't know Haskell, but I don't want to write Haskell code, and actually what am I saying here, I am making no sense at all."
14:48:51 <Ngevd> And Constantinople
14:49:40 <Ngevd> And BIT
14:53:00 <CakeProphet> elliott: readability is for chumps
14:53:09 <CakeProphet> gb2 #python
14:53:48 <CakeProphet> There is NO
14:53:50 <CakeProphet> warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
14:54:05 <CakeProphet> G++:: not warranted to fit any particular purpose.
14:55:36 -!- Patashu has quit (Quit: MSN: Patashu@hotmail.com , Gmail: Patashu0@gmail.com , AIM: Patashu0 , YIM: patashu2 .).
14:55:51 -!- CommaChameleon has left.
14:56:28 <CakeProphet> gaaaah
14:56:29 <CakeProphet> C++ is awful
14:57:18 <pikhq> elliott: To be fair, the function written there is a type error.
14:57:28 <elliott> It is?
14:57:36 <elliott> Oh
14:57:39 <elliott> No
14:57:40 <elliott> It isn't
14:57:42 <elliott> "contains" is the function name
14:57:44 <pikhq> :t rows
14:57:53 <pikhq> Effing lambdabot.
14:57:57 <elliott> pikhq: There is no standard rows function.
14:58:13 <pikhq> Oh, okay, so it merely looks effing weird.
14:59:05 <pikhq> I have no idea what rows would do to im :: (Rect Int Int Int Int) -> Bool, though.
15:00:52 <Ngevd> What does Rect do?
15:03:27 -!- augur has quit (Remote host closed the connection).
15:04:31 <elliott> pikhq: Uh.
15:04:36 <elliott> pikhq: That is clearly not the type.
15:04:46 <elliott> im is a parameter.
15:04:50 <elliott> Where the hell did you get it was of that type?
15:06:30 <pikhq> Nowhere in particular.
15:07:13 <elliott> pikhq: Then why do you think that is the type of im?
15:07:21 <elliott> im is obviously an image of some kind.
15:08:09 <pikhq> im is written as a function there.
15:08:22 <pikhq> "im (Rect x y w h) = ..."
15:08:30 <elliott> pikhq: "contains im (Rect x y w h)" says you're a moron
15:09:15 <pikhq> The quote as heavily ambiguous if you presume the person saying it is not necessarily using correct English.
15:09:30 -!- ais523 has joined.
15:09:33 <pikhq> It could also very well be "(Rect x y w h) = ..."
15:09:39 <elliott> So you assume the interpretation whereby the code makes no sense and the English makes nos enes, rather than the interpretation whereby both make sense? :P
15:09:58 <pikhq> Never underestimate someone's stupidity.
15:10:38 <pikhq> Especially when they've been quoted to discuss their stupidity.
15:10:48 <Phantom_Hoover> What are you guys doing?
15:11:57 <Ngevd> I'm working on XSLT S and K
15:12:18 <elliott> XSLTK
15:13:39 <Ngevd> Also, why can't the single transferable vote method be more representational than first past the post in my favour?
15:16:19 <elliott> That sentence collapsed around three words before it finished.
15:16:31 <Ngevd> It just needs more commas
15:16:48 <Ngevd> No wait, it is perfectly grammatically correct
15:17:09 <elliott> But it makes no senes.
15:17:11 <elliott> sense.
15:17:14 <Ngevd> It's just nigh-impossible to parse
15:18:27 <Phantom_Hoover> Ngevd, are you asking why STV isn't more representational than FPTP in order that you can win?
15:18:44 <elliott> That makes sense?
15:19:09 <Ngevd> No I was asking why the fact that STV is more representational than FPTP didn't make me win
15:19:27 <Phantom_Hoover> Yeah, that kind of thing.
15:19:40 <elliott> Would you have won in FPTP? :-P
15:19:44 <Ngevd> Probably
15:19:46 <Phantom_Hoover> Ngevd, so you are now Nathan van Doorn, nobody?
15:20:08 <Phantom_Hoover> Wait, that's not news.
15:20:14 <Ngevd> First you have my address
15:20:17 <Ngevd> And then my name
15:20:20 <Phantom_Hoover> (Do I need :P not to sound like a complete prick there.)
15:20:25 <Ngevd> And then my nobodiness!
15:20:38 <Ngevd> What is going on here!?
15:20:43 <Ngevd> And why don't I get the joke?
15:20:49 <elliott> His name is actually Ngevd van Doorn.
15:20:56 <elliott> He's just ashamed because that is the worst name.
15:21:53 <Phantom_Hoover> Ngevd, you are actually a martian.
15:22:06 <Ngevd> A martian with Dutch ancestry
15:36:02 -!- Jafet has quit (Quit: Leaving.).
15:40:40 <cheater> there were some dutch people in the restaurant today
15:40:47 <cheater> they sound so funny
15:41:08 <CakeProphet> hey what's ^X in emacs buffers?
15:41:08 <cheater> half the time they start a sentence with a deep voice and end it with a falsetto
15:43:20 <ais523> CakeProphet: it's a prefix to a huge number of commands
15:43:34 <CakeProphet> right but it's being displayed in my emacs buffer
15:43:36 <ais523> e.g. ^X^X is "swap mark and point", ^X^S is "save"
15:43:41 <ais523> oh, it means literal control-X
15:43:52 <CakeProphet> erm... what character is that?
15:43:55 <ais523> you can type it using C-q C-x
15:43:59 <ais523> and, umm, I don't know
15:44:27 <CakeProphet> can't seem to copypaste it.
15:44:35 <elliott> it's ^X
15:44:40 <elliott> consult your local ascii table
15:44:52 <elliott> ^x = x - '@'
15:44:54 <elliott> I think
15:44:57 <elliott> because ^@ is \0
15:45:09 -!- augur has joined.
15:45:24 <CakeProphet> wat
15:45:28 <elliott> what
15:45:33 <CakeProphet> x - '@'?
15:45:39 <CakeProphet> what does that mean?
15:46:08 <elliott> ^x = chr(ord(x) - ord('@'))
15:46:10 <elliott> happy?
15:46:25 <CakeProphet> yes that's better except what is x now
15:46:28 <CakeProphet> in ^X
15:46:30 <elliott> 'X'
15:46:32 <CakeProphet> okay.
15:46:34 <CakeProphet> ALL IS WELL
15:46:51 <CakeProphet> > chr(ord('X')-ord('@'))
15:46:57 <CakeProphet> >_>
15:47:04 <CakeProphet> guys
15:47:06 <CakeProphet> there's no lambdabot
15:47:34 <CakeProphet> Prelude Data.Char> chr(ord('X')-ord('@'))
15:47:36 <CakeProphet> '\CAN'
15:47:49 <cheater> \HAZ
15:48:41 <CakeProphet> okay so this is obviously just some kind of weird bug in my code then.
15:48:59 <fizzie> ^ord X
15:48:59 <fungot> 88
15:49:00 <CakeProphet> that causes me to accidentally overwrite parts of my stack.
15:49:09 -!- monqy has joined.
15:49:11 <fizzie> Unfortunately it can't subtract the 64 quite as easily.
16:00:06 -!- lambdabot has joined.
16:00:11 <elliott> Who to blame.
16:00:17 <lambdabot> elliott: You have 2 new messages. '/msg lambdabot @messages' to read them.
16:00:45 <elliott> CakeProphet: Go on.
16:01:10 -!- Ngevd has quit (Quit: Leaving).
16:01:34 <CakeProphet> elliott: you can see my rant last night in the logs.
16:01:43 <elliott> CakeProphet: Rant about what.
16:02:04 <CakeProphet> elliott: Haskell dialecting.
16:02:23 <elliott> Can't you just summarise.
16:03:11 <CakeProphet> well, it was mostly just ideas regarding what to change. In particular the prelude/stdlib could be overhauled, also a number of new extensions could be attended (you could have your pattern synonyms and OCamlModules :P)
16:03:39 <elliott> ML modules, not OCaml modules.
16:03:41 <elliott> What is wrong with the Prelude?
16:03:49 <elliott> Some functions need generalising, but that's all I can think of.
16:03:59 <CakeProphet> also I was thinking of using some like agda mixfix for operators, with the possibility of 3-ary operators as long as the precedence relations follow some rules
16:04:02 <CakeProphet> elliott: yes, that.
16:04:40 <CakeProphet> ++ should be part of Monoid, Category should maybe be in Prelude by default.
16:04:49 <elliott> CakeProphet: It would be easier to go through the process for the next Haskell revision to get the few operators that need to be generalised.
16:04:59 <elliott> Especially since they're trying to increase the frequency of the standards a lot.
16:05:03 <CakeProphet> yes I'm sure it'll happen eventually.
16:05:17 <elliott> CakeProphet: You think creating a new dialect solo will be quicker?
16:05:20 <CakeProphet> no
16:05:23 <CakeProphet> it's not about that
16:05:27 <CakeProphet> that's a trivial thing.
16:05:40 <CakeProphet> the idea is to simply experiment with new syntax/semantics.
16:05:43 <elliott> Mixfix is additional complication; I'd rather remove if/then/else, which is the obvious motivating example for mixfix in Haskell.
16:05:51 <elliott> CakeProphet: You never said anything about that.
16:05:57 <CakeProphet> oh I hadn't even considered if/then/else
16:06:13 <CakeProphet> elliott: be patient sheesh I can't say everything at once.
16:08:09 <CakeProphet> elliott: I was just wondering if it's something you've ever considered. Perhaps there are some things you'd like to experiment with on top of Haskell?
16:08:30 <elliott> I thought you had ideas for semantic changes.
16:12:09 <CakeProphet> no mine were mostly syntax changes.
16:12:53 <CakeProphet> to improve the "Haskell as a roll-your-own DSL maker" aspect
16:13:15 <elliott> What syntactic changes, other than mixfix?
16:13:58 <CakeProphet> well that's the only concrete one I have so far. I was thinking it might be possible to include some sort of macro-like feature, perhaps using TH? I don't know it's not a complete thought.
16:14:23 <CakeProphet> but the mixfix in itself is quite useful. I wonder if you could use spaces as a valid infix symbol as long as some precedence rules were obeyed.
16:14:34 <CakeProphet> a b >- c = ...
16:14:35 <elliott> TH is already macros
16:14:48 <elliott> CakeProphet: Mixfix doesn't let you have two expressions without an intervening operator, certainly not.
16:14:59 <elliott> That would be basically impossibly ambiguous.
16:15:09 <CakeProphet> ah yes it would.
16:15:26 <CakeProphet> unless it were (a b c) (d e f) >- c
16:16:02 <CakeProphet> but that's still ambiguous...
16:17:03 <CakeProphet> I don't think I'm selling this idea very well. :P
16:20:19 <CakeProphet> it could easily turn into a project to make Haskell esoteric. :D
16:21:34 <elliott> You do not seem very sure of what you are doing.
16:22:06 <CakeProphet> elliott: and sure TH is already macros but new syntax-defining features could be allowed.
16:22:12 <CakeProphet> for example, what would stop circumfix operators?
16:22:25 <elliott> There aren't really any brackets left.
16:22:36 <CakeProphet> they don't need to be brackets necessarily.
16:22:46 <elliott> You need characters not used by existing infix operators.
16:22:52 <elliott> Or parsing becomes very, very difficult.
16:22:54 <CakeProphet> truth.
16:23:14 <CakeProphet> I assume by difficult you mean generally undecidable
16:23:19 <CakeProphet> because difficult parsing is no big deal.
16:24:17 <elliott> I don't think you realise how hard parsing Haskell is.
16:24:31 <elliott> Especially 98, which not a single implementation has ever implemented the syntax for correctly.
16:24:41 <CakeProphet> also you can free up some room perhaps by defining some of Haskell's syntax in itself. for instance, immediately with circumfix operators you have:
16:24:44 <CakeProphet> ( x ) = x
16:25:13 <elliott> Hooray, we've added a huge huge mound of syntactic complexity, but now we can define parentheses in Haskell despite this making no difference at all
16:25:33 -!- augur has quit (Remote host closed the connection).
16:25:35 <CakeProphet> FOR THE SHEER JOY OF SUCH
16:25:44 <CakeProphet> conquest is our goal.
16:25:48 <ais523> being able to define parentheses in INTERCAL would actually be useful
16:27:27 <CakeProphet> elliott: also the operator parsing would only have to be unambiguous within precedence trees. So that essentially if you have a ternary operator that uses the simples a and b, the only restriction would be that there can be no other operators that use a and b in the same precedence tree.
16:27:42 <CakeProphet> s/simples/symbols/ :|
16:28:52 <Phantom_Hoover> http://www.reddit.com/r/askscience/comments/kv91b/discussion_thread_promising_ftl_neutrino/
16:29:17 -!- sebbu2 has changed nick to sebbu.
16:29:44 <elliott> Phantom_Hoover: So ais523 wrote a paper? :-P
16:29:59 <Phantom_Hoover> Um...
16:30:08 <ais523> elliott: is that in the same conversation as Phantom_Hoover's link?
16:30:11 <elliott> Clock synchronisation was basically his argument.
16:30:12 <elliott> ais523: Yes.
16:30:39 <elliott> Phantom_Hoover: "He merely points out that, if one were to take all these effects into account, it seems likely they would also somewhere mention going to all the trouble." -- I dunno about this, it seems like the whole "yes we've repeated it ten thousand times and made sure of these results for months so assume we're competent plz" would account for that.
16:31:27 <Phantom_Hoover> elliott, they published their analysis. If they left it out, that's entirely their fault.
16:31:36 <CakeProphet> elliott: also obvious Haskell needs Perl-like string interpolation syntax.
16:31:40 <CakeProphet> okay now I've lost you completely...
16:31:44 <CakeProphet> +ly
16:31:44 <elliott> CakeProphet: Several packages on Hackage provide that
16:31:49 <Phantom_Hoover> "yes we've repeated it ten thousand times and made sure of these results for months so assume we're competent plz" does not cut it in science.
16:32:00 <CakeProphet> elliott: via OverloadedStrings I guess?
16:32:05 <elliott> CakeProphet: TH.
16:32:07 <CakeProphet> ah
16:32:07 <elliott> Phantom_Hoover: They didn't say "HEY GUYS WE'VE PROVED FTL".
16:32:18 <elliott> Phantom_Hoover: They said "So, uhh, guys, this is very worrying".
16:32:29 <ais523> yep, their attitude was about right
16:32:30 -!- Sgeo|web_ has quit (Ping timeout: 252 seconds).
16:32:47 <ais523> it was pretty much "we have these results, they /can't/ be right but we've checked everything we could think of, please someone find the mistake in them or we'll go mad"
16:33:01 <Phantom_Hoover> elliott, yeah and?
16:33:01 <elliott> I dunno, I don't think they claim their paper was SCIENTIFIC FTL PROOF, it seems more like they're trying to start a dialogue to figure out wtf is going on, in which case exhaustively detailing every single precaution seems excessive at that point.
16:33:16 <elliott> Certainly they should reply to this but I don't think they were necessarily wrong or expected to mention it in the original report.
16:33:23 <Phantom_Hoover> Their analysis did not account for any measures taken to counteract these difficulties.
16:33:33 <Phantom_Hoover> Had they done so, they should have written it up.
16:33:51 <Phantom_Hoover> That they did not gives a clear source of the error.
16:34:24 <ais523> elliott: mentioning every single precaution is exactly what they should have done, because if you're asking for help finding a mistake, you should tell people where it isn't
16:34:46 <CakeProphet> I would actually be quite pleased if this eventually led to some overturning of some previous theoretical assumptions.
16:35:15 <elliott> ais523: fair enough
16:35:25 <elliott> Phantom_Hoover: I'm not saying that it shouldn't be pointed out
16:35:38 <elliott> I'm saying that "they didn't talk about this so clearly they didn't account for it" seems wrong.
16:36:15 <CakeProphet> I wonder how one would transmit data via (possibly) ftl neutrinos.
16:36:17 <Phantom_Hoover> elliott, the argument is that they didn't talk about it, and it's a very significant source of potential error, so it's more than probable that their measures taken against it were inadequate.
16:36:28 <elliott> Well, sure.
16:36:33 <Phantom_Hoover> CakeProphet, transmit loads of them, leave a fish tank at the other end.
16:36:48 <elliott> CakeProphet: Binary?
16:37:29 <ais523> elliott: it's surprising how similar the suggestion there is to mine (relativistic effects in moving the clock)
16:38:15 <CakeProphet> elliott: how does one represent 1 and 0?
16:38:28 <Phantom_Hoover> CakeProphet, neutrino vs. no neutrino?
16:38:32 <elliott> CakeProphet: Neutrino with a smiley face on it, neutrino with a frowning face on it?
16:38:47 <ais523> CakeProphet: BEER and SHNITZEL, obviously
16:38:52 <Phantom_Hoover> ais523, well come on, the important thing is that they calculated it.
16:39:21 <elliott> /ban ais523
16:39:29 <CakeProphet> Phantom_Hoover: this would require a standardized speed and assumes everything transmits perfectly and at the right time, is that practical?
16:39:42 <elliott> That's what TCP is for.
16:39:44 <CakeProphet> elliott: this approach sounds promising, however.
16:39:46 <ais523> elliott: I'm fighting the temptation to put Category:Shameful on that
16:40:06 <elliott> (That was at CakeProphet.)
16:40:13 <Phantom_Hoover> CakeProphet, how would you transmit data over a wire, it would require a standardised speed and assume that everything transmitted perfectly.
16:41:12 <CakeProphet> positive = 1, negative = 0, values are seperated by a moment of no voltage. :)
16:41:35 <ais523> CakeProphet: that's bipolar return-to-zero encoding, right?
16:41:50 <CakeProphet> uh, I have no idea what it's called I just improvised it.
16:41:54 <elliott> Your MOM is bipolar. Um, wait.
16:42:08 <ais523> Manchester encoding would work with neutrinos (it encodes 0 as low then high and 1 as high then low), its main issue is that it only gets half the bandwidth of some other schemes
16:43:04 <CakeProphet> Phantom_Hoover: still I see your point that it's possible
16:43:24 -!- augur has joined.
16:45:35 <CakeProphet> but then how do you transfer a chargeless particle across a wire?
16:46:21 <CakeProphet> I suppose you could just launch them into space assuming that's how they even work.
16:46:41 <ais523> CakeProphet: they're neutrinos, they hardly ever interact with anything
16:46:51 <ais523> you just send a mass of neutrinos directly at your neutrino detector
16:46:57 <CakeProphet> ah okay.
16:46:59 <elliott> `addquote <Phantom_Hoover> Guys no don't fly a Jem Hadar ship into Cardassian space to shoot things I played that mission in FreeSpace and it never works.
16:47:01 <HackEgo> 689) <Phantom_Hoover> Guys no don't fly a Jem Hadar ship into Cardassian space to shoot things I played that mission in FreeSpace and it never works.
16:47:07 <ais523> and hope that some of them get picked up
16:48:03 <CakeProphet> so yeah as a form of carrying an interplanetary information network, it's not a bad substrate. I imagine detectors and transmitters are pretty expensive though.
16:48:19 <elliott> Just run a really long copper wire to the moon.
16:48:25 <elliott> (I wonder if that would actually be possible.)
16:49:13 <CakeProphet> uh, maybe with some machinery inbetween.
16:49:26 <CakeProphet> to allow for revolution around the earth..
16:49:27 <Phantom_Hoover> CakeProphet, you're talking about a system that literally implies time travel.
16:49:56 <Phantom_Hoover> Expense is not a huge concern.
16:50:22 <elliott> Phantom_Hoover: Oh my god I just had a flash vision of the future.
16:50:32 -!- Ngevd has joined.
16:50:37 <Ngevd> Hello!
16:50:49 <Phantom_Hoover> elliott, wow, they'll be really good at aiming them.
16:51:26 <elliott> Phantom_Hoover: The first high-frequency trading firm to use a neutrino connection instead of whatever they use now will become utterly rich.
16:51:38 <elliott> They'll be able to make market decisions before they happen.
16:51:45 <elliott> IT WILL BE THE BEST ECONOMIC COLLAPSE EVER
16:51:50 <CakeProphet> uh how does that work.
16:51:55 <elliott> CakeProphet: AWESOMELY
16:52:25 <Phantom_Hoover> elliott, it's quite involved, though.
16:52:48 <elliott> Phantom_Hoover: They'll just make really really fast specialised chips so that they can actually take advantage of the like zero nanoseconds it'd give them.
16:53:03 <Phantom_Hoover> You need a transceiver moving relative to you.
16:53:22 <elliott> PORTABLE TRADING STATION???
16:53:22 <CakeProphet> but what if market information is transmitted on neutrinos? the net effect is that you have no advantage in a market that time travels.
16:53:41 <Phantom_Hoover> So you'd have to send a deep space probe at relativistic velocities with a neutrino detector and a high-energy particle accelerator on it.
16:53:41 <elliott> CakeProphet: Dude they got the neutrino thing installed specially.
16:53:49 <elliott> The rest of the system doesn't use it.
16:53:50 <CakeProphet> that doesn't make sense..
16:53:58 <elliott> CakeProphet discovers that time travel makes no sense.
16:54:00 <Phantom_Hoover> CakeProphet, see what I just said.
16:54:08 <elliott> Phantom_Hoover: That still sounds cool, dude.
16:54:11 -!- Sgeo|web has joined.
16:54:26 <Phantom_Hoover> elliott, sure, but it'd be a while before it could be used for the stock market.
16:54:45 <elliott> Phantom_Hoover: omg what if in the future we have to specially code our networking stacks to work in a manner that respects causality.
16:54:54 <elliott> sleep(60ns);
16:55:19 <Phantom_Hoover> You get shot if you don't.
16:55:23 <CakeProphet> boring.
16:55:30 <CakeProphet> causality is for chumps.
16:55:31 <Ngevd> I don't think time travel happens when you exceed the speed of light
16:56:16 <CakeProphet> neutrino-speed could just be the limit.
16:56:17 <Phantom_Hoover> Yes, it does.
16:56:28 <CakeProphet> and light is just slower. what a loser.
16:56:32 <CakeProphet> stupid light particle.
16:56:53 <Ngevd> All that happens is you get very heavy and go faster than light
16:56:56 * CakeProphet publishes this as a Cakeprophet's theory of neutrino relativity.
16:56:58 <Phantom_Hoover> You fire a superluminal signal to someone moving with an inverse gamma of 0.5 relative to you.
16:57:17 <Phantom_Hoover> Sorry, wait.
16:57:24 <CakeProphet> dude what if everything is neutrinos
16:57:25 <CakeProphet> and like
16:57:27 <Ngevd> So you'll be there before they see you
16:57:29 <Phantom_Hoover> You and a friend pass each others in space.
16:57:29 <CakeProphet> that's how we time travel forward
16:57:37 * CakeProphet is always time travelling.
16:57:39 <Phantom_Hoover> You fire said signal ten seconds after passing each other.
16:58:03 <Phantom_Hoover> Your friend receives it five seconds into their flight. They send a reply.
16:58:09 <CakeProphet> I FEEL THE NEUTRINOS I HAVE THE POWER.
16:58:13 * CakeProphet disappears.
16:58:20 <Phantom_Hoover> The reply arrives 2.5 seconds into your flight.
16:59:55 -!- augur has quit (Remote host closed the connection).
17:00:59 <CakeProphet> Phantom_Hoover: so?
17:01:10 -!- SgeoN1 has quit (Read error: Connection reset by peer).
17:01:23 -!- SgeoN1 has joined.
17:01:44 <Phantom_Hoover> CakeProphet, so you're getting the reply to the original message 7.5 seconds before you sent it.
17:02:32 <CakeProphet> you seem to have just made the assumption that neutrino = time travel
17:02:40 <CakeProphet> in setting up a problem to demonstrate that neutrino = time travel
17:02:45 <CakeProphet> and how that makes no sense.
17:02:51 <ais523> Oracle vs. Google: Oracle are arguing that a leaked internal Google email was made public by Google because you can find it via a Google search
17:02:58 <Phantom_Hoover> CakeProphet, um, how?
17:03:14 <CakeProphet> Phantom_Hoover: by not explaining why the time travel occurs.
17:03:23 <Phantom_Hoover> CakeProphet, that's what I /explained/.
17:03:29 <Sgeo|web> So, those phpMyAdmin login pages are all deliberately public?
17:03:39 <CakeProphet> Phantom_Hoover: ?
17:03:40 <ais523> <Oracle's lawyers> Third, Google waived the privilege by affirmatively publishing the ostensibly privileged information on the google.com search page and directing members of the public to the document’s contents.
17:04:42 <Sgeo|web> Because Google special-cased their search engine when it comes to anything relating to Google. When you type Google into Google, a human hand-tweaked the result.
17:05:04 <Sgeo|web> This way, the Internet won't explode.
17:05:13 <CakeProphet> Phantom_Hoover: picture this from the point of view of someone who doesn't understand physics. :P
17:05:20 <CakeProphet> and then read what you said.
17:05:28 <Phantom_Hoover> CakeProphet, OK, fine.
17:05:38 <Phantom_Hoover> Assume the neutrinos, for sake of calculation, move at 2c.
17:05:45 <CakeProphet> okay
17:06:06 <Phantom_Hoover> I presume you know that time dilation is a perfectly well-established consequence of relativity?
17:06:11 <CakeProphet> yes
17:06:40 <Phantom_Hoover> And that two observers moving at constant speed will each see the other moving slower?
17:07:25 <CakeProphet> erm, no.
17:08:45 <CakeProphet> ah, yes.
17:09:26 <Phantom_Hoover> OK, so you pass each other while moving — wait, neutrino speed is irrelevant here ignore that bit.
17:09:38 <Phantom_Hoover> Just assume that the signal is instant; it's the same anyway.
17:10:33 <CakeProphet> Time for a pretty good time-travel joke:The bartender says "We don't serve faster-than-light particles in here."A neutrino goes into a bar.
17:10:40 <Phantom_Hoover> -_-
17:10:41 <CakeProphet> from wired.com
17:10:49 <CakeProphet> A+
17:11:17 <elliott> "Linux Guru Hans Reiser Demands New Murder Trial"
17:11:24 <elliott> How... does he expect to win this one
17:18:00 <ais523> hey, we have another BF derivative on the wiki!
17:18:26 <Phantom_Hoover> FFS, the recent changes page is broken *exclusively* for me.
17:18:26 <ais523> seems to be a mix of a bunch of other BF derivs, + atomic semaphores
17:18:39 <Phantom_Hoover> "Requested Range Not Satisfiable
17:18:39 -!- elliott has quit (Read error: Connection reset by peer).
17:18:39 <Phantom_Hoover> None of the range-specifier values in the Range request-header field overlap the current extent of the selected resource"
17:18:40 <ais523> Phantom_Hoover: go into your preferences, toggle the setting of enhanced recent changes
17:18:46 <ais523> ah, hmm, probably not that
17:18:51 -!- elliott has joined.
17:18:56 <elliott> lol batteries
17:19:05 <ais523> it seems that your browser is, umm, asking for entries past the end of the page, or something
17:19:08 <Phantom_Hoover> ais523, I doubt it, given that it remains regardless of whether or not I am logged in.
17:19:42 <elliott> Phantom_Hoover: hapepns a lot
17:19:43 <elliott> append ?
17:19:45 <elliott> to the url
17:19:48 <elliott> i'm assuming esowiki
17:19:54 <elliott> just change the uri and it works
17:20:02 <elliott> (diff) (hist) . . N Brains‎; 17:13 . . (+2,867) . . 24.8.132.122 (Talk) (I wrote an esolang! It sucks....)
17:20:05 * elliott prepares to a gree.
17:20:06 <elliott> agree.
17:20:13 <elliott> Ah yes, a BF derivative.
17:20:22 * tiffany should totally write a classic server
17:20:26 <Ngevd> At least the creator is honest
17:20:46 <Ngevd> tiffany, Minecraft?
17:20:50 <tiffany> yes
17:20:59 <Phantom_Hoover> tiffany, yes, so that all 0 people who still play classic can join in.
17:21:29 <tiffany> it's not something about people playing it, I've just never implemented a protocol before
17:21:36 <Ngevd> elliott, whoever's making the other elliottcraft, how are the elliotcrafts going on?
17:21:36 <tiffany> except for a tiny bit of http in lua
17:21:42 <Phantom_Hoover> "{ if the current cell is not zero, jump past the matching }
17:21:42 <Phantom_Hoover> } if the current cell is zero, jump back to the matching {
17:21:42 <Phantom_Hoover> { if the current cell is not zero, jump past the matching }
17:21:42 <Phantom_Hoover> } if the current cell is zero, jump back to the matching {"
17:21:42 <elliott> ais523: How's Elliottcraft going on
17:21:54 <ais523> it isn't, really, I have too many other things to do
17:21:56 <Phantom_Hoover> This is the actual most shameless addition I've seen in a BF derivative."
17:22:00 <ais523> I think I posted a spec somewhere for the language
17:22:08 <ais523> and then decided I was too lazy to implement it
17:22:49 <elliott> http://esolangs.org/w/index.php?title=Emo&curid=3331&diff=24658&oldid=23606 lol
17:22:51 <elliott> fairly turing complete
17:23:14 <Ngevd> I'm going to express the opinion that Geom isn't Turing-Complete
17:23:23 <Ngevd> Here I go...
17:23:34 <Ngevd> IT IS MY OPINION THAT GEOM IS NOT TURING COMPLETE
17:23:52 <elliott> AAAAAAAAAAAAAAAAAAAAUUUUUUUUUUUUUUUUUUUUUUUUUUUUGH
17:24:36 <Ngevd> Now to edit the wiki
17:25:29 <Phantom_Hoover> elliott, fun fact, half the Norwegian parliament actually did turn up just before I made that Symbol edit.
17:25:36 <elliott> X-D
17:25:38 <elliott> What.
17:26:10 <Phantom_Hoover> Well, 'half' is an exaggeration.
17:26:14 <Phantom_Hoover> There were like ten of them.
17:27:02 <Phantom_Hoover> They were being shown around the school for some reason.
17:27:28 <Ngevd> In... Edinburgh!?
17:27:35 <Phantom_Hoover> I offered to help but apparently the fact that I have talked to a Norwegian on the internet does not qualify me to be the Norwegian ambassador.
17:28:04 <cheater> social fail
17:28:24 <cheater> you should've told them you know where all the lutfisks are hidden
17:29:13 <Vorpal> Phantom_Hoover, why were they there?
17:29:19 <Phantom_Hoover> Vorpal, I don't know.
17:29:33 <Vorpal> oh okay
17:29:37 <Phantom_Hoover> cheater, that would regrettably have made me look like an unfunny idiot.
17:29:55 <cheater> why is that regrettable?
17:30:17 <cheater> also, why shove blame?
17:30:18 <Phantom_Hoover> Because then I'd look like you.
17:30:34 <cheater> i find this hard to believe
17:30:51 <cheater> do you have a neckbeard?
17:31:01 <cheater> (or facial hair)
17:31:35 <elliott> That's your most notable feature?
17:31:41 <Phantom_Hoover> No; I am able to operate a razor.
17:32:05 <cheater> elliott: no, i guess my eye patch
17:32:19 <elliott> Wow, you really have the douchebag look going.
17:33:02 <cheater> why are you calling me names? that's not nice
17:33:14 <Phantom_Hoover> cheater's feelings are hurt elliott :(
17:33:20 <elliott> Phantom_Hoover did it first. Punch him instead.
17:33:21 <Phantom_Hoover> Bullying is bad you are bad.
17:33:47 <elliott> Phantom_Hoover: I'm sorry but I can't jeopardise my year-long campaign to terrorise him and everyone he knows.
17:33:55 <elliott> The stakes are simply too high.
17:34:05 <Phantom_Hoover> elliott, bad bully bad bad
17:34:13 <elliott> I regret everything.
17:34:52 <Phantom_Hoover> Yes now you must kill yourself it is the only option.
17:34:59 <elliott> Why does this always happen to me.
17:35:15 <elliott> I set out to destroy someone's life, then I start feeling guilty and someone tells me I have to kill myself.
17:35:23 <elliott> Reincarnation is the worst when you're a sociopath, let me tell you.
17:35:32 <elliott> You have to start faking social relations ALL OVER AGAIN.
17:36:08 <Ngevd> And then you get mistaken for someone who kicked someone else in the face
17:36:21 <elliott> Yes.
17:36:35 <elliott> I'll have to start actually kicking more people in the face to compensate.
17:36:37 <elliott> Such is my sad, sad life.
17:37:24 <Phantom_Hoover> Ngevd, so elliott did not in fact kick your friend in the face?
17:37:28 <Ngevd> No
17:37:37 <Ngevd> Turns out that was a different Elliott Hird
17:37:38 <elliott> Ngevd: I'm available for face-kicking services if they want the real deal.
17:37:52 <elliott> OK I refuse to believe there is another Elliott Hird in the universe.
17:38:02 <Phantom_Hoover> I...
17:38:04 <Ngevd> There're at least four Nathan van Doorns
17:38:19 <Phantom_Hoover> No, I refuse on absolute terms to believe that there are two Elliott Hirds in Hexham.
17:38:27 <Ngevd> One of them moved away
17:38:41 <elliott> Phantom_Hoover: I think I am literally living inside a film.
17:38:49 <elliott> The plot kicked off with Ngevd coming here.
17:38:59 <Vorpal> Phantom_Hoover, yes that is unlikely. Maybe somewhere else in UK though?
17:39:16 <elliott> Vorpal: Dude the spelling of my first name is like the least conventional.
17:39:18 <fizzie> So our Elliott "Face-Kicker" Hird did not actually kick anyone in the face?
17:39:43 <Phantom_Hoover> Then it turns out that Hexham is the centre of the coming apocalypse, precipitated by a cross-time war waged with neutrinos?
17:39:46 <Ngevd> elliott, it has been conjectured that I am the central character in the real version of the Truman Show
17:39:50 <elliott> foldl f z t = appEndo (getDual (foldMap (Dual . Endo . flip f) t)) z
17:39:52 <elliott> Ah, naturally.
17:39:58 <elliott> Ngevd: But you're boring.
17:40:02 <elliott> I'm a better main character.
17:40:16 * CakeProphet is the best.
17:40:18 <Ngevd> You have a friend deficiency.
17:40:21 <Phantom_Hoover> Ngevd will be a great warrior with his tinfoil lightsabre.
17:40:27 <Ngevd> I, on the other hand, am famous
17:40:42 <Ngevd> Phantom_Hoover, aluminium foil and wrapping paper!
17:41:03 <Phantom_Hoover> (I will use a tinfoil lightépée because sabres are stupid.)
17:41:30 <Ngevd> They're really lighteightthstaffs
17:41:44 <elliott> Lightépée.
17:41:45 <elliott> I...
17:42:06 <elliott> Ngevd: Surely lighteighthstaffs.
17:42:29 <Phantom_Hoover> It's like a lightfoil except more manly.
17:42:41 <Ngevd> They're really lighteightthstaffs [sic]
17:42:42 <fizzie> Lightkatanas Are Just Better. (TVtropes.)
17:44:23 <CakeProphet> lightbardiche is the best.
17:44:56 <Phantom_Hoover> CakeProphet, do you know how to use a bardiche?
17:45:13 <CakeProphet> yes I am a trained expert and medieval revivalist
17:45:26 <Ngevd> I'm more of a bohemian earspoon fan
17:45:37 <Ngevd> A lightbohemian earspoon
17:45:42 <CakeProphet> more into Neutral Milk Hotel myself.
17:45:52 <CakeProphet> lightneutralmilkhotel
17:46:19 <elliott> Bohemian Earspoon.
17:46:25 <elliott> That's a good name for anything.
17:46:26 <Ngevd> It exists!
17:46:48 -!- augur has joined.
17:46:56 <Phantom_Hoover> Ngevd, we know, we have Google.
17:46:59 <CakeProphet> Ngevd: so does Neutral Milk Hotel.
17:47:05 <CakeProphet> but only people with hipster cred know about them.
17:47:43 -!- da_petcu21 has joined.
17:47:48 <elliott> :t mapM_
17:47:49 <lambdabot> forall a (m :: * -> *) b. (Monad m) => (a -> m b) -> [a] -> m ()
17:47:59 <elliott> CakeProphet: That was the most embarrassing thing you have ever said.
17:48:17 <CakeProphet> elliott: almost as embarassing as looking up the type of mapM_
17:48:25 <CakeProphet> :t id
17:48:26 <lambdabot> forall a. a -> a
17:48:27 <elliott> CakeProphet: I was checking if it was (a -> m b) or (a -> m ()).
17:48:32 <CakeProphet> UNREASONABLE
17:48:34 <elliott> Which is not at all obvious; I was assuming the latter.
17:48:58 <CakeProphet> THAT MAKES NO SENSEl.
17:49:53 <CakeProphet> elliott: hey some times I'm not serious.
17:50:29 <CakeProphet> the level of meta-irony can escalate infinitely.
17:51:39 <CakeProphet> you guys know what are cool?
17:51:43 -!- elliott_ has joined.
17:51:45 <CakeProphet> violins.
17:51:47 <elliott_> Irony of arbitrary levels is indistinguishable from sincere stupidity.
17:52:00 <Phantom_Hoover> *Sufficiently advanced irony
17:52:08 <elliott_> mapStreamM f s = s >>= \x -> Execute (liftM return (f x))
17:52:12 <elliott_> ais523: help, I'm really confused
17:52:19 <ais523> elliott_: at what?
17:52:24 <elliott_> ais523: that function I just wrote
17:52:27 <elliott_> :t liftM return
17:52:28 <lambdabot> forall a1 (m :: * -> *) (m1 :: * -> *). (Monad m, Monad m1) => m1 a1 -> m1 (m a1)
17:52:34 <ais523> oh, I doubt I can help
17:52:38 <elliott_> it works fine, it just augh
17:54:32 <CakeProphet> elliott: sincere of indistinguishable levels is arbitrary from stupidity irony.
17:54:52 <elliott_> CakeProphet: What you just said is also indistinguishable from sincere stupidity :P
17:55:20 <CakeProphet> therefore I am an indistinguished master of irony of arbitrary levels.
17:55:45 -!- elliott has quit (Ping timeout: 248 seconds).
17:55:56 <Phantom_Hoover> CakeProphet, how irony would you say you are?
17:56:22 -!- elliott__ has joined.
17:57:24 <CakeProphet> Phantom_Hoover: I am irony of such that I am actually not ironic.
17:57:53 <elliott__> Thing I just typed instead of MonadTrans: MonadTrams.
17:57:56 <elliott__> Phantom_Hoover: What was that newspaper?
17:58:10 <Ngevd> There are a finite number of Befunge-93 programs, what with it being a finite state automaton
17:58:27 <CakeProphet> is there?
17:58:30 <Phantom_Hoover> elliott__, what newspaper?
17:58:36 <elliott__> Trams.
17:58:58 <CakeProphet> Ngevd: there would have to be a certain length of program string that cannot be reached, I would think...?
17:58:58 <Phantom_Hoover> The Edinburgh Evening News?
17:59:10 <Ngevd> 80x25, as per Befunge-93 spec
17:59:14 <CakeProphet> ah okay.
17:59:17 <CakeProphet> then yes.
17:59:23 <elliott__> Phantom_Hoover: Yes.
17:59:51 <CakeProphet> Ngevd: so what's your point?
18:00:10 <Ngevd> I just felt like making this channel on topic for a change
18:00:11 * CakeProphet dons his frumpish shades.
18:00:20 <CakeProphet> I see.
18:00:33 -!- elliott_ has quit (Ping timeout: 248 seconds).
18:00:50 <CakeProphet> Ngevd: is arbitrary language design on topic?
18:01:14 <Phantom_Hoover> "Cops probe as body found in woods"
18:01:14 <Phantom_Hoover> Guys............................
18:01:25 <CakeProphet> ..
18:01:26 <CakeProphet> lol
18:01:32 <CakeProphet> I wonder what they're probing now.
18:01:43 <Ngevd> Arbitary esoteric programming language design is on topic
18:02:14 <CakeProphet> Ngevd: http://pastebin.com/XEPK27qH
18:02:21 <CakeProphet> an unfinished spec of an unfinished language.
18:02:25 <CakeProphet> not very esoteric I guess...
18:02:37 <Phantom_Hoover> elliott__, here, have a tram story: http://edinburghnews.scotsman.com/news/Tram-system-may-mean-city.6844650.jp
18:02:52 <CakeProphet> once I finish <insert huge list of unfinished and neverending tasks> then I will finish that.
18:03:09 <elliott__> Phantom_Hoover: Damn those trams.
18:03:16 <Phantom_Hoover> Dams.
18:03:16 <elliott__> The Lone Haranguer,
18:03:17 <elliott__> 29/09/2011 12:10:18
18:03:17 <elliott__> Councillor Gordon Mackenzie, the city's transport leader, should have said: "It is important that my mental issues are addressed."
18:03:26 <elliott__> "Aye it aw has tae be managed otherwise we will end up in a traffic jam and no able tae breathe when we gang oot frae a drink. If you live in Leith you get an added bonus all your air will be poisioned twice wance by the polluting cars and lorries and a nuder time by the biodiversity Power Station thats before Seafield get going tae skin you oot. A nice wee haaar in January for aboot 5 days and there will have tae mass evacuations from your £250k+ fl
18:03:26 <elliott__> ats awfy business."
18:03:27 <elliott__> Phantom_Hoover: Um.
18:03:30 <elliott__> Is this how Scots talk.
18:03:38 <Phantom_Hoover> Not in my experience?
18:03:47 <elliott__> Is that guy imitating a Scot or something.
18:04:05 <Ngevd> > 95^2000
18:04:06 <lambdabot> 280033879935519460895212800423715491430640102631470924552793056191124304099...
18:04:13 <Phantom_Hoover> Well um the really obnoxious ones who think that pronunciation and spelling are the same do but I haven't actually /met/ any of them.
18:04:24 <Ngevd> That's how many distinct befunge-93 programs there are
18:04:27 <Phantom_Hoover> "Is this the beginning of the end for Edinburgh. Now that Edinburgh has lost all credibility because of the tram, I would not think for one moment that major investors will give Edinburgh City a first or any look for that matter in future investment. Now the shelf will be laid bare, how do they propose to service the city. Edinburgh was a financial center of excellence, now who in there right mind would set up shop with
18:04:27 <Phantom_Hoover> the CEC parasites at the helm of their Money Vortex. Edinburgh`s Inner City is Dead City, out of town is Thriving and Alive. Just turn west at the City Bypass and with not a tram insight, once you leave the city bypass its FREEDOM in the KINGDOM of SCOTLAND. As the saying goes WEST is BEST. Dump the Duds."
18:04:30 <Phantom_Hoover> Noooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo
18:05:32 <Phantom_Hoover> Hmm, how is Fife a kingdom then?
18:08:31 <CakeProphet> "I like 'em brown, yellow, Puerto Rican and Haitian, 'name is Phife Dawg from the Zulu Nation."
18:08:48 <CakeProphet> --Phife Dawg, from the Zulu Nation
18:19:10 -!- brisingr has joined.
18:24:54 <elliott__> Aww, I think my model is too restricted. :/
18:25:01 <CakeProphet> I have no fucking clue what is wrong with this program.
18:25:04 <CakeProphet> I hate C++
18:37:34 <Ngevd> Is it because you associate C++ with your father?
18:37:44 <CakeProphet> Ngevd: http://www.deviantart.com/#/d4b7rdp
18:38:31 <Phantom_Hoover> CakeProphet
18:38:34 <Phantom_Hoover> what have you becoe
18:38:37 <Phantom_Hoover> become
18:39:28 <CakeProphet> I have always been the person that I am.
18:40:05 <CakeProphet> you may associate me with whatever contrived social group you wish, it's probably not accurate.
18:40:41 <Phantom_Hoover> See
18:40:42 <Phantom_Hoover> this
18:40:45 <Phantom_Hoover> is the kind of thing
18:40:52 <Phantom_Hoover> that I am talking about.
18:40:54 <CakeProphet> what?
18:40:55 <CakeProphet> explain.
18:42:26 <CakeProphet> perhaps I keep a collection of bookmarked deviafntart pages
18:42:38 <CakeProphet> to link someone when I don't feel like properly following their comment up.
18:43:37 <CakeProphet> perhaps I don't and it was mere chance.
18:44:04 <CakeProphet> perhaps I surf Deviantart regularly in search for super kawaii Pokemon fanart.
18:45:08 <Phantom_Hoover> The last one.
18:45:25 <elliott__> You bookmarked something apparently posted 19 hours ago?
18:45:27 <elliott__> Fast.
18:46:49 <CakeProphet> yeah dude.
18:47:09 <CakeProphet> Phantom_Hoover: actually it was the second option.
18:47:44 -!- Ngevd has quit (Quit: Doctor Who).
18:48:20 <elliott__> Phantom_Hoover I'm crushed by despair because I can't implement this operation.
18:48:27 <Sgeo|web> Doctor Who's not on now right?
18:48:36 <CakeProphet> elliott__: I'm crushed by despair because my seemingly correct C++ code gives garbage output.
18:48:42 <elliott__> Sgeo|web: Dude you're in a different country.
18:50:09 <Sgeo|web> I get BBC America...
18:50:59 <elliott__> You mean the channel with a completely different schedule to any of the domestic channel and various delays?
18:51:00 <ais523> Ngevd is British, I think
18:51:15 <ais523> and there's no particular reason why BBC America would synchronize to the BBC in the UK
18:51:17 <elliott__> ais523: "I think" -- come on, you can't forget the person who IS ALSO FROM FUCKING HEXHAM
18:51:25 <elliott__> You cannot forget this fact because it is the most shocking fact.
18:51:26 <ais523> elliott__: that doesn't mean he's British, technically speaking
18:51:36 <ais523> just that he was currently in England a few days ago
18:51:43 <elliott__> It was weeks ago
18:51:47 <ais523> that too
18:52:09 <elliott__> Wow, xfce-panel is really unstable on this... Ubuntu beta ;P
18:52:11 <CakeProphet> `word 50
18:52:12 <elliott__> s/;/:/
18:52:14 <HackEgo> delinndt prebionimiulla che antnevorsan yallir terlidulha inenatioseri ke unly flchris deri herces garieding mel maxallagol dov jthriges yar breezed kudisj raltpassan oomber ego clandpo hymsd dhik pre vo searrer comen hinesordritheddryetheummsqmenters abacan esan irdellan er fwengparobalsperidabse kovskya kwaranive heldictebkoth
18:54:54 <elliott__> Prebionimiulla is good.
18:58:42 -!- esowiki has joined.
19:04:43 -!- esowiki has joined.
19:05:19 -!- esowiki has joined.
19:08:35 -!- glogbot has joined.
19:10:34 -!- lambdabot has quit (Ping timeout: 260 seconds).
19:11:41 -!- Gregor` has joined.
19:11:41 -!- Gregor has quit (Ping timeout: 255 seconds).
19:12:45 -!- HackEgo has quit (Ping timeout: 252 seconds).
19:12:45 -!- HackEgo has joined.
19:13:01 <Vorpal> elliott__, come on you do random strings too
19:13:16 <Vorpal> also what is up with the __? Are you the other elliott hird from Hexham?
19:13:18 <Vorpal> ;P
19:14:24 <elliott__> Yes.
19:16:19 -!- esowiki has joined.
19:17:10 -!- esowiki has joined.
19:18:06 -!- esowiki has joined.
19:18:06 -!- glogbot has joined.
19:24:42 -!- lambdabot has joined.
19:30:45 -!- oerjan has joined.
19:31:41 <elliott__> hi oerjan
19:32:29 <elliott__> hi hi eih ih ihe ihe
19:32:29 <oerjan> ho hoh oh
19:33:26 -!- plycke has joined.
19:34:46 -!- plycke has quit (Excess Flood).
19:34:46 <elliott__> rip plycke
19:34:46 <oerjan> eek another dane
19:34:46 <elliott__> i think its spam bot
19:34:46 <elliott__> or at least
19:34:46 <elliott__> someone came in and exsessed esodesdflooded
19:34:46 <elliott__> before
19:34:46 <elliott__> a while
19:34:46 <elliott__> ago
19:34:46 <oerjan> oh
19:37:41 <Vorpal> heh, witcher 2 2.0 patch is over 750 MB large.
19:37:43 <Phantom_Hoover> Frozen Synapse just segfaulted on me.
19:37:52 <Phantom_Hoover> *sigh*
19:37:59 <Vorpal> Phantom_Hoover, ouch. Frozen Synapse is an awesome game btw.
19:38:02 <Vorpal> and so is Trine IMO
19:38:07 <Phantom_Hoover> I don't know why I even bothered; nothing works on this system.
19:38:14 <Vorpal> Phantom_Hoover, heh.
19:38:46 <elliott__> Phantom_Hoover: Try it again? :-P
19:40:03 <Vorpal> Phantom_Hoover, oh you had intel? Forget trine then. Won't work
19:40:03 <Phantom_Hoover> elliott__, it's on startup.
19:40:03 <elliott__> Phantom_Hoover: You only tried it once?
19:40:03 <Vorpal> Phantom_Hoover, try it two times on startup at least
19:40:03 <Phantom_Hoover> I've tried it three times now.
19:40:03 <elliott__> Try it FIFTY.
19:40:03 <Vorpal> oh
19:40:03 <elliott__> Phantom_Hoover: gdb?
19:40:03 <Vorpal> Phantom_Hoover, what is the backtrace? Anyway report a bug
19:40:03 <elliott__> report a bug <-- lol
19:40:03 <Phantom_Hoover> Program received signal SIGSEGV, Segmentation fault.
19:40:03 <Phantom_Hoover> 0xf69d8936 in glGenLists () from /usr/lib32/libGL.so.1
19:40:03 <elliott__> Phantom_Hoover: bt
19:40:03 <Phantom_Hoover> Great, it's a graphical thing
19:40:03 <Vorpal> ah
19:40:03 <elliott__> bt
19:40:03 <Phantom_Hoover> There goes all hope of it ever working.
19:40:03 <Phantom_Hoover> bt?
19:40:03 <Vorpal> prints backtrace
19:40:03 <elliott__> bt
19:40:03 <Phantom_Hoover> #0 0xf69d8936 in glGenLists () from /usr/lib32/libGL.so.1
19:40:03 <Phantom_Hoover> #1 0x08290166 in Terrain::Terrain() ()
19:40:03 <Phantom_Hoover> #2 0x081ebea9 in Encounter::Encounter() ()
19:40:03 <Phantom_Hoover> #3 0x08281fc3 in PsychoffManager::PsychoffManager() ()
19:40:03 <Phantom_Hoover> #4 0x0828683d in ConcreteClassRep<PsychoffManager>::create() const ()
19:40:03 <Phantom_Hoover> #5 0x0819ab00 in SimChunk::initChunkMappings() ()
19:40:03 <Phantom_Hoover> #6 0x082190ab in initGame(int, char const**) ()
19:40:03 <Phantom_Hoover> #7 0x082192f0 in DemoGame::main(int, char const**) ()
19:40:06 <Phantom_Hoover> #8 0x083558e7 in main ()
19:40:06 <Vorpal> don't you know any gdb?
19:43:06 -!- esowiki has joined.
19:43:06 -!- glogbot has joined.
19:43:06 -!- glogbackup has left.
19:43:13 <CakeProphet> okay so... in C++
19:43:23 <CakeProphet> when you declare a variable with default auto storage.
19:43:25 <Vorpal> NOOOO! NOT THE C++!
19:43:26 <elliott__> Vorpal: The most professional techer.
19:43:28 <elliott__> teacher.
19:43:33 <elliott__> Expert in thick adults, distinctions, fruit pickers.
19:43:37 <CakeProphet> and return the result of that variable.
19:43:49 <CakeProphet> is a copy made?
19:43:51 <olsner> the result of a variable?
19:44:06 -!- brisingr has left.
19:44:17 <Vorpal> yes presumably as in executing the bit pattern in the variable in question using some inline asm and jumping
19:44:17 <CakeProphet> olsner: the, contents, if you will.
19:44:30 <Vorpal> (probably not)
19:44:43 <CakeProphet> I'm just TRYING TO FIGURE OUT WHERE THIS GARBAGE IS COMING FROM AUUUGH
19:45:00 <olsner> the garbage comes from your code, obviously :)
19:45:46 <elliott__> CakeProphet: are you like
19:45:46 <Vorpal> CakeProphet, you mean like this:
19:45:49 <Vorpal> int foo = 1;
19:45:50 <elliott__> returning a reference to a local variable
19:45:50 <elliott__> or sth
19:45:52 <Vorpal> return foo;
19:45:52 <elliott__> because that isn ot ok
19:45:53 <elliott__> and if you do
19:45:54 <Vorpal> or what?
19:45:55 <elliott__> Blah foo;
19:45:56 <elliott__> return foo;
19:46:01 <elliott__> and Blah allocates like storage on the stack or whatever
19:46:04 <elliott__> that's also not ok
19:46:20 <CakeProphet> elliott__: that's if you're returning a reference though correct?
19:46:23 <Vorpal> elliott__, that works in C for a struct?
19:46:28 <CakeProphet> not just returning the value. it makes a copy then right?
19:46:36 <elliott__> Vorpal: Because we're talking about C!
19:46:39 <olsner> CakeProphet: Blah, when copied, could have references to other stuff
19:46:51 <olsner> stuff that is about to go *poof*
19:46:53 <Vorpal> elliott__, yes but I would expect it to work for C++ as well in this case
19:47:07 <CakeProphet> olsner: hmmm, okay.
19:47:13 <CakeProphet> I don't think that's the problem here but it might be.
19:47:38 <Vorpal> CakeProphet, what is the class you are trying to return?
19:47:39 <olsner> or rather, about to have nothing at all happen to it until some later random time
19:47:54 <CakeProphet> the only thing I share between functions is strings. So my tree stuff is safe from being deallocated with the stack frame.
19:48:02 <elliott__> Vorpal: C++ has constructors.
19:48:22 <CakeProphet> elliott__ is the best teacher.
19:48:25 <Vorpal> elliott__, hm right, guess you need to invoke a copy constructor or some such mess
19:48:29 <Vorpal> eww
19:50:00 <olsner> I think... if you don't know for sure that you aren't returning references to dead stuff, you probably are
19:50:08 <CakeProphet> I'm not returning references ever.
19:50:16 <elliott__> yes you are
19:50:17 <elliott__> if the class contains one
19:50:34 <CakeProphet> could a string contain a reference to something in one of my stack frames?
19:50:43 <Vorpal> CakeProphet, a std::string? Probably
19:51:11 <CakeProphet> uuuuuugh
19:54:07 -!- esowiki has joined.
19:54:22 -!- esowiki has joined.
19:56:00 -!- esowiki has joined.
19:56:00 -!- glogbot has joined.
19:56:05 <Vorpal> and yes contact them and report the issue.
19:56:08 <Vorpal> You really should
19:56:10 <elliott__> Phantom_Hoover: They'll probably be receptive to forwarding it on and the like.
19:56:14 <Vorpal> I did with an earlier game, and it helped
19:56:15 <elliott__> Easier than going to the developers directly.
19:56:16 <Phantom_Hoover> cheater, the leetspeak really puts across the full force of what you're saying.
19:56:29 <Vorpal> Phantom_Hoover, just ignore him
19:56:35 <elliott__> Never has calling someone a loser been such a self-deprecating remark.
19:56:36 <ais523> elliott__: how OnLive works? basically, it's just a VNC connection to a games console (or PC set up as one)
19:56:41 <cheater> i'm glad we agree on that point Phantom_Hoover
19:56:41 <elliott__> ais523: I know /how/ it works
19:56:42 -!- Zetro has joined.
19:56:52 <ais523> oh, you're just not sure /if/ it works?
19:56:54 <elliott__> ais523: I want to know /how/ it works, because it was pretty conclusively proven to be unworkable before it came out
19:57:00 <Phantom_Hoover> elliott__, hmm, what's their contact email?
19:57:10 <elliott__> and it seems the answer is just (a) yes, it's bad, (b) but connections are fast enough nowadays that it works OK
19:57:17 <Vorpal> ais523, similar, but a bit smarter iirc. Like video compression algorithms selected to work well for games and so on.
19:57:34 -!- Gregor has joined.
19:57:45 <elliott__> Phantom_Hoover: http://www.humblebundle.com/contact
19:58:02 <elliott__> Phantom_Hoover: You might also try getting a twutter and twatting at them, since that account is very active and responds to tweets a lot.
19:58:09 <elliott__> s/tweets/twits/
19:58:16 <ais523> what does it say about me that I saw "l0z3r" and thought "that's incorrectly spelt because it's a short o"?
19:58:30 <ais523> as in, I'd have expected "l00z3r" or even "l%z3r"
20:00:16 <Vorpal> %? Come on
20:00:16 <ais523> I think I learnt text-speak compression back when it was about saving characters rather than being leet, or understandable
20:00:16 <cheater> l\infz3r
20:00:16 <Vorpal> heh
20:00:16 <elliott__> ais523: Was it /ever/ about that?
20:00:16 <elliott__> Well
20:00:16 <elliott__> It is nowadays thanks to SMS
20:00:16 <ais523> elliott__: yes, back when SMS had only just been invented
20:00:16 <elliott__> But it originates as false posturing bullshit
20:00:16 <Vorpal> elliott__, uh SMS can be multi-message thingies
20:00:16 <elliott__> And is mostly dead nowadays
20:00:16 <elliott__> Vorpal: Costs more, duh
20:00:16 <elliott__> Also longer to type
20:00:16 <ais523> I'm thinking of early by-hand SMS compression schemes
20:00:16 <CakeProphet> corrupted double linked list?
20:00:16 <Vorpal> elliott__, uh, don't you usually get a crapload of free SMS / month?
20:00:16 <CakeProphet> I'm not even using one of those.
20:00:16 <ais523> rather than script kiddie speak
20:00:16 <elliott__> Vorpal: Only on a contract
20:00:16 <Vorpal> CakeProphet, glibc detected?
20:00:16 <elliott__> Which are (a) recent (b) expensive
20:00:16 <CakeProphet> yes
20:00:16 <Vorpal> CakeProphet, that means you messed up glibc's internal state by memory access bugs
20:00:16 <cheater> i.bet.that.ais.wrote.all.his.sms.like.this
20:00:16 <elliott__> CakeProphet: That means one of glibc's malloc structures was corrupted.
20:00:17 <Vorpal> CakeProphet, use valgrind, I told you
20:00:17 <CakeProphet> how does one go about that...
20:00:20 <Vorpal> that will help
20:00:21 <cheater> am.i.right.ais
20:00:21 <elliott__> cheater: Yes, because dots are smaller than spaces.
20:00:23 <Vorpal> CakeProphet, using freed stuff
20:00:24 <ais523> cheater: I did, vacuously (I've never sent a text message)
20:00:28 -!- variable has quit (Excess Flood).
20:00:29 <cheater> hahahahaha
20:00:34 <elliott__> HAHAHAHAHAHAHAHAHA
20:00:39 <CakeProphet> okay so then something is obviously freeing.
20:00:42 <Vorpal> <elliott__> cheater: Yes, because dots are smaller than spaces. <-- not in byte count
20:00:44 <CakeProphet> solution: dynamically allocate everything.
20:00:47 <Vorpal> nor in monospace
20:00:52 <ais523> I have used borrowed mobile phones on occasion, but very rarely and only to make voice calls
20:00:54 <elliott__> Vorpal: Sarcasm does not exist.
20:00:55 <Vorpal> CakeProphet, USE VALGRIND
20:01:00 <CakeProphet> Vorpal: why
20:01:03 <cheater> Vorpal: in many layouts a dot was easier to type than a space.
20:01:21 <ais523> CakeProphet: because valgrind is a tool designed to solve this sort of problem
20:01:29 <Vorpal> CakeProphet, it will tell you WHERE the issue is
20:01:30 <ais523> and thus likely gives more useful results than a tool designed, say, to make tea
20:01:37 <CakeProphet> ..okay
20:01:39 <elliott__> ais523: OTOH, the other tool will give you some tea.
20:01:40 <Vorpal> CakeProphet, seriously, if you have a memory bug just use valgrind.
20:03:17 <elliott__> Just saying
20:07:15 -!- esowiki has joined.
20:08:21 -!- esowiki has joined.
20:08:31 -!- glogbot has joined.
20:08:32 -!- glogbackup has left.
20:09:37 <Vorpal> ais523, true
20:09:37 <CakeProphet> um okay so....
20:09:37 <ais523> so given that I can't use a debugger, what am I supposed to do? fill valgrind with printf statements?
20:09:37 <CakeProphet> I think I found the problem.
20:10:50 <CakeProphet> I believe when you put a variable declaration inside a for loop, it destructs the previous value upon constructing the next one in the iteration.
20:10:50 -!- Gregor has quit (Remote host closed the connection).
20:10:50 <elliott__> No shit?
20:10:50 <CakeProphet> elliott__: how is that obvious?
20:10:50 <Vorpal> ais523, bisect on secret project to find what change introduced the valgrind breakage?
20:10:50 <ais523> CakeProphet: what do you think the bit before the first ; in the for loop is for
20:10:50 <elliott__> CakeProphet: Because otherwise it'd leak memory like a sieve?
20:10:50 <ais523> Vorpal: probably all of them
20:10:56 <Vorpal> ais523, ah okay
20:11:02 <ais523> the problem is that it needs thousands of lines just to work at all
20:11:08 <Sgeo|web> Sounds like the sort of thing it's easy to make a bug with, then when you see it, you facepalm
20:11:10 <Vorpal> I see
20:11:10 <CakeProphet> elliott__: it would construct values until presumably they are all freed at the end of the call.
20:11:12 <Ngevd> Does anyone know of a Unicode character that looks like a time machine?
20:11:23 <Vorpal> CakeProphet, ... no?
20:11:24 <CakeProphet> elliott__: I would think. not really a "leak" unless you loop forever.
20:12:26 <Vorpal> CakeProphet, looping forever it perfectly valid in C and C++
20:12:50 <Sgeo|web> Even useful at times
20:13:56 <elliott__> CakeProphet: that's ridiculous
20:13:56 <elliott__> why would it do that?
20:13:56 <elliott__> the old value is garbage
20:13:56 <Sgeo|web> Although, considering the GC infection in my brain, I'd assume that it would be destructed at a random later point in time.
20:13:56 <elliott__> Infection?
20:13:56 <ais523> why would you expect the value to be valid after it's gone out of scope?
20:13:56 <Sgeo|web> elliott__: makes it hard for me to think in terms of C++
20:13:56 <Sgeo|web> Not that I really know C++
20:14:07 <ais523> Sgeo|web: /that/'s your biggest problem with C++?
20:15:48 <ais523> feel lucky
20:16:19 <Sgeo|web> ais523: no, just in this context of this conversation
20:16:19 <Sgeo|web> I think I may have used C++ once or twice outside of class
20:16:19 <CakeProphet> ais523: I thought automatic storage lasted until the end of the stack frame.
20:16:19 <CakeProphet> not until it's out of scope.
20:16:19 <CakeProphet> but I assume it treats the declaration as a single location and doesn't magically create more upon further iterations.
20:16:34 -!- GreaseMonkey has joined.
20:16:34 -!- GreaseMonkey has quit (Changing host).
20:16:34 -!- GreaseMonkey has joined.
20:16:41 <ais523> it's got nothing to do with stack frames
20:16:58 <ais523> and everything to do with scope
20:17:10 <elliott__> CakeProphet: how would it free them all at the end if it used the same location for each one?
20:17:24 <CakeProphet> elliott__: it wouldn't use the same location is what I'm saying.
20:18:13 <elliott__> this is ridiculous
20:18:13 <CakeProphet> just the same name. in the code. that isn't the object code.
20:18:40 <CakeProphet> elliott__: it's possible is it not?
20:19:07 <ais523> when something's out of scope, how do you expect to be able to refer to it?
20:19:07 <CakeProphet> just not what C/C++ does.
20:19:07 <ais523> (pointers don't count)
20:19:07 <ais523> (because you explicitly can't use them to do that)
20:19:20 <CakeProphet> ais523: with pointers.
20:19:34 <CakeProphet> because you could if the memory persisted until the end of the stack frame.
20:19:54 -!- lambdabot has joined.
20:19:59 <Ngevd> I think I'll work on Constantinople's successor, Istanbul
20:20:47 <ais523> CakeProphet: <ais523> (pointers don't count)
20:20:47 <Ngevd> Either that or a Nandypants implementation
20:20:47 <ais523> why do you think that stack frames exist?
20:20:47 <CakeProphet> ais523: why do they not count? does C and C++ not have pointers?
20:20:47 <CakeProphet> ???
20:20:50 <CakeProphet> ais523: explain
20:20:59 <ais523> there was a debate in comp.lang.c about whether C implied that a stack had to exist or not
20:21:06 <ais523> I forget the result, but there was considerable doubt about it
20:21:22 <CakeProphet> fine "persists until the end of the function call"
20:21:31 <CakeProphet> less implementation specific.
20:21:54 <CakeProphet> it's possible. and you could refer to things out of scope via pointers.
20:22:12 <CakeProphet> what is ridiculous about this model then?
20:22:16 <ais523> it'd just give very little benefit, as it'd inherently cause a memory leak whereever you had a loop
20:22:26 <Ngevd> Or possibly something else entirely
20:22:44 <CakeProphet> hmmm, yes
20:22:52 <CakeProphet> I suppose in the most common cases you really don't want that to happen.
20:23:44 <ais523> CakeProphet: also, there's a nonstandard but very commonly existing function that does exactly what you want, called alloca
20:24:12 <ais523> you might want to think about /why/ it's nonstandard
20:24:25 <CakeProphet> because it can cause memory leaks?
20:24:59 <ais523> because it can't be implemented on every system in existence
20:25:07 <ais523> I've worked on systems where the stack was 8 bytes long, they still had C compilers
20:25:22 <ais523> they didn't allow recursion, though, contrary to the standard
20:25:25 <CakeProphet> good thing my professor doesn't have one of those then.
20:25:29 <ais523> because they had to allocate auto storage in globals
20:25:43 <ais523> well, the point is that C is designed to work on that sort of system
20:25:55 <Sgeo|web> What would be the point of persisting it like tha?
20:26:06 <ais523> because you have to put the memory /somewhere/?
20:26:11 <ais523> and you don't have a stack?
20:26:16 -!- Guest35901 has quit (Changing host).
20:26:17 -!- Guest35901 has joined.
20:26:21 <ais523> globals is the next best option, as they're easier to use than heap space
20:26:23 <Sgeo|web> I mean, the way CakeProphet wants
20:26:27 <fizzie> alloca is also a hairy function; it might not be possible to call foo(x, alloca(42), y) because the alloca'd memory would be in the middle of the function arguments.
20:26:29 <ais523> ah
20:26:31 -!- Guest35901 has changed nick to variable.
20:26:38 <ais523> fizzie: that's another good reason, indeed
20:26:47 <CakeProphet> so I can be lazy and not have to free all the stuff I'm making I can just say "hey go away after this call plz"
20:28:12 <elliott__> fizzie: Yikes.
20:28:15 <fizzie> Heh, glibc documentation has *almost* the same example.
20:28:21 <fizzie> "Do not use alloca inside the arguments of a function call--you will get unpredictable results, because the stack space for the alloca would appear on the stack in the middle of the space for the function arguments. An example of what to avoid is foo (x, alloca (4), y)."
20:28:43 <fizzie> They add their silly space after the function name, and use a boring 4 instead of an overused 42, but other than that even the x and y match.
20:29:10 <oerjan> <Phantom_Hoover> http://www.reddit.com/r/askscience/comments/kv91b/discussion_thread_promising_ftl_neutrino/
20:29:39 <variable> fizzie: they also give an example of what you don't want to do. How many people do you think will see the code and just copy it ?
20:29:40 <variable> :-)
20:29:45 <Phantom_Hoover> variable!
20:29:51 <variable> hello Phantom_Hoover
20:29:56 <fizzie> Another equally funky sharp corner: "Note: If you mix use of alloca and variable-sized arrays within one function, exiting a scope in which a variable-sized array was declared frees all blocks allocated with alloca during the execution of that scope."
20:30:06 <ais523> I know what causes that one
20:30:12 <Vorpal> fizzie, that alloca should work on platforms that pass the arguments in the registers right?
20:30:18 <ais523> it's because VLAs obey scoping rules and alloca doesn't
20:30:23 <oerjan> what. i thought it was obvious that they used GPS for this...
20:30:41 <fizzie> Vorpal: Sounds likely, but not something sensible people would rely on.
20:30:45 <elliott__> oerjan: um is that being denied?
20:30:50 <Vorpal> fizzie, indeed
20:31:28 <oerjan> elliott__: i just don't see how this guy comes up with the idea that they would synchronize the clocks and then separate them.
20:31:28 <pikhq> Of course, alloca is a non-standard extension, so who gives a fuck. :)
20:31:32 <ais523> oerjan: how do you allocate memory with GPS?
20:31:38 <variable> The alloca() function is slightly unsafe because it cannot ensure that the pointer returned points to a valid and usable block of memory
20:31:42 <elliott__> oerjan: um that was agreed upon no?
20:31:45 <elliott__> Phantom_Hoover?
20:31:54 <elliott__> variable: "Slightly"
20:31:54 <variable> is it literally just manipulating %rsp ?
20:31:59 <pikhq> variable: alloca() is slightly unsafe because neither C nor POSIX requires it to exist.
20:31:59 <ais523> variable: nor can malloc() on many modern systems
20:32:00 <Phantom_Hoover> Hello.
20:32:06 <Vorpal> windows supports mounting filesystems to directories but not bind style mounts I guess?
20:32:09 <Phantom_Hoover> variable, yes, it is.
20:32:09 <ais523> pikhq: it has no defined error behaviour
20:32:09 <elliott__> variable: yep
20:32:14 <oerjan> elliott__: i've just read that reddit intro yet
20:32:16 <variable> ais523: *cough* Linux *cough*
20:32:21 <ais523> I /think/ in practice it typically sigsegvs
20:32:32 <ais523> variable: luckily that one's fixable nowadays, you can write 2 to the overcommit control
20:32:32 <pikhq> ais523: It has no defined behavior at all, in fact.
20:32:40 <elliott__> variable: Linux's overcommit behaviour isn't bad because of what it causes malloc()s return to be
20:32:46 <ais523> pikhq: it has a man page, that's some sort of definition
20:32:48 <elliott__> it's bad because how it handles OOM is terrible
20:32:50 <Vorpal> pikhq, another issue with alloca: What about the red zone thingy on x86-64
20:32:54 <Vorpal> how does alloca interact with that
20:33:06 <pikhq> Vorpal: Probably "poorly".
20:33:11 <variable> elliott__: I've seen a Linux system run the OOM killer because it wanted more disk cache ...
20:33:15 <Sgeo|web> Do most prepackaged server thingies disable OOM killer?
20:33:18 <Vorpal> pikhq, but VLAs still work I presume?
20:33:19 <elliott__> variable: I didn't disagree.
20:33:22 <variable> Sgeo|web: hopefully not
20:33:34 <Vorpal> pikhq, anyway, it has to work, or code would crash all the time
20:33:36 <elliott__> variable: Like I said, Linux's overcommit behaviour is unreasonable, but not because of malloc() being able to return an invalid pointer.
20:33:42 <Sgeo|web> Huh? When is Linux's OOM killer thingy good?
20:33:56 <CakeProphet> another issue with alloca might be that it doesn't call a constructor.
20:34:01 <variable> Sgeo|web: without it running out of memory would cause a kernel oops IIRC
20:34:26 <variable> elliott__: true, I didn't disagree
20:34:28 <pikhq> Vorpal: Oh, hrm, it works just fine. The "red zone" is just a fixed area of the stack that the function is able to use for its own temporary data.
20:34:36 <fizzie> Vorpal: I don't see why just incrementing %rsp to snarf some more space on the stack would really matter red-zone-wise; there's still the 128 bytes after it that "other things" won't touch.
20:34:40 <elliott__> variable: right
20:34:59 <CakeProphet> so how could I allocate something with alloca and then initialize it?
20:35:06 <Sgeo|web> I'd rather "running out of memory" cause malloc to return NULL. Are there other circumstances in which memory would attempt to be allocated, and fail, and there be no alternative to a kernel oops, such as the requesting application crashing?
20:35:21 <pikhq> Vorpal: 128 bytes above the "top" of the stack is just space the current function can use as it sees fit without any concern at all.
20:35:29 <oerjan> <elliott__> oerjan: um that was agreed upon no? <-- btw it is impossible from your comment to deduce either what "that" is or who agreed and where.
20:35:35 <elliott__> oerjan: pah :P
20:35:43 <elliott__> I meant that the separation thing was agreed to have happened
20:35:44 <fizzie> CakeProphet: Placement new? (That thing is pretty horrible, but it's what you do when you have a custom memory allocator.)
20:35:48 <elliott__> in discussions here
20:35:56 <fizzie> CakeProphet: There is utterly no way to get the destructors automatically called, though.
20:36:02 <Vorpal> <pikhq> Vorpal: Oh, hrm, it works just fine. The "red zone" is just a fixed area of the stack that the function is able to use for its own temporary data. <-- I know what it is
20:36:16 <Vorpal> pikhq, the issue was the alloca/red zone data interaction possibilities
20:36:19 <Vorpal> that I were considering
20:36:32 <pikhq> It'll do precisely nothing, the function will just need to make sure not to trample on *itself*.
20:36:43 <CakeProphet> fizzie: um how does placement new work.
20:36:54 <pikhq> CakeProphet: You pass new an address.
20:36:54 <Vorpal> pikhq, I guess gcc avoids using the red zone for variables if alloca is used in that function
20:37:09 <pikhq> Vorpal: Probably.
20:37:36 <CakeProphet> pikhq: ah
20:37:45 <fizzie> CakeProphet: Thing* thing = new(place) Thing(); where 'place' is either a void* or an object with an operator new.
20:38:02 <CakeProphet> excellent. let's see how much I break everything.
20:38:05 <CakeProphet> trying to use non-standard things.
20:38:28 <oerjan> <elliott__> I meant that the separation thing was agreed to have happened <-- ok maybe as an extra check. i'd expect GPS to be better and more ongoing, anyway.
20:38:38 <fizzie> Putting C++ objects into alloca() memory sounds like the worst idea, esp. because of the destructors.
20:38:43 <elliott__> oerjan: does gps have even remotely the required accuracy?
20:39:29 <CakeProphet> stack<char> *new_stack = new(alloca(sizeof(stack<char>)))stack<char>;
20:39:33 <CakeProphet> that's some beautiful syntax.
20:39:36 <CakeProphet> especially with no spaces.
20:39:57 <Vorpal> CakeProphet, why the fuck are you doing that
20:40:07 <fizzie> CakeProphet: Oh, you're putting a *STL container* on alloca() memory? That's... uh... what's the polite way to put this? "Rather daring"?
20:40:09 <pikhq> Also essentially indistinguishable from sticking it on the stack.
20:40:18 <CakeProphet> because I love pain.
20:40:18 <pikhq> Y'know, because that's what alloca does.
20:40:21 <fizzie> pikhq: Except it won't be destructed and will therefore leak.
20:40:35 <pikhq> fizzie: Iff it has its own dynamic memory allocation.
20:40:47 <pikhq> ... As is common in C++.
20:40:48 <fizzie> And stack<char> is sort-of likely to.
20:40:53 <elliott__> CakeProphet: Do you really think that will finish your memory problem?
20:41:08 * Sgeo|web has no idea what alloca is
20:41:20 <Sgeo|web> Except, gathering from all this, "a bad idea"
20:41:21 <elliott__> Sgeo|web: increments rsp
20:41:21 <ais523> Sgeo|web: good
20:41:22 <CakeProphet> I'm almost not certain it will.
20:41:24 <Vorpal> CakeProphet, this path you are investigating currently is probably NOT going help you at all
20:41:54 <pikhq> Sgeo|web: "void *alloca(size_t);" is a nonstandard but somewhat common extension. It allocates on the stack
20:42:30 <Sgeo|web> So it will seem to be automatically collected?
20:42:38 <Sgeo|web> From the programmer's point of view?
20:42:38 -!- derdon has joined.
20:42:44 <ais523> no!
20:42:55 <ais523> it'll seem to be freed at the end of the function, from the programmer's point of view
20:43:00 <ais523> this is not nearly the same thing
20:43:11 <Sgeo|web> End of the function, or end of scope?
20:43:17 <pikhq> End of the function.
20:43:20 <Ngevd> Lambdabot has all the MIBBLLII combinators
20:43:26 <Sgeo|web> Ok
20:43:26 <ais523> end of the function
20:43:32 <Sgeo|web> That's a bit weird, but ok.
20:43:48 <CakeProphet> well it would be useful if it called destructors as well.
20:43:52 <CakeProphet> but it's a C function so... yeah.
20:44:15 <CakeProphet> I actually don't care if this program leaks I just want to get it working.
20:44:19 <pikhq> CakeProphet: Not really. You realise that this is pretty close to the behavior of just creating a normal C++ object on the stack, right?
20:44:23 <ais523> Sgeo|web: think of it as "end of the scope is pretty easy to do already"
20:44:39 <fizzie> Yes; for a fixed-size object alloca() is really quite pointless.
20:44:56 <CakeProphet> pikhq: yes except I can't do it within a loop and iteratively allocate on the stack.
20:45:14 <CakeProphet> the normal way
20:45:16 <CakeProphet> as far as I can tell.
20:45:17 <Sgeo|web> It is? I mean, for fixed-size, yes, but what about size known only at runtime, how is that easy to do in scope?
20:45:28 <Sgeo|web> I mean, I guess you could call free()
20:45:42 <CakeProphet> ..?
20:45:43 <pikhq> Sgeo|web: In ISO C, trivial; variable-length arrays.
20:45:53 <oerjan> <elliott__> oerjan: does gps have even remotely the required accuracy? <-- GPS is based on sending radio waves with time encoded. if it didn't have enough accuracy for _time_ it wouldn't have enought accuracy for the distance.
20:46:31 <CakeProphet> uh.... why the fuck does stack::pop call a destructor.
20:46:37 <CakeProphet> why does everything have to be difficult.
20:46:57 <pikhq> Also, isn't GPS time based on literally hooking an atomic clock up to a radio and putting it in orbit?
20:47:06 <CakeProphet> yes, I just popped something from a stack, obviously I don't want to use it anymore.
20:47:07 <Ngevd> > (.)(join (.))(ap (.) (join (.)))(+1)(0)
20:47:09 <lambdabot> 6
20:47:36 <variable> pikhq: not really
20:48:15 <oerjan> *time and position
20:48:17 <CakeProphet> I guess I'll just start using a stack of pointers to get around that.
20:48:19 <variable> oerjan: yeah
20:48:22 <fizzie> CakeProphet: Of course stack has to call the destructor, since it owns the objects in it. If you want to manage that ownership manually, put some pointers into that stack or something.
20:49:07 <oerjan> pikhq: i'm not sure if it literally has an atomic clock, but it's definitely synchronized with them
20:49:53 <CakeProphet> fizzie: that's what I'm doing
20:49:56 <CakeProphet> During startup program terminated with signal SIGSEGV, Segmentation fault.
20:49:57 <CakeProphet> lolwat
20:50:15 <Ngevd> > (flip id)(join (.))(ap (.) (join (.)))(+1)(0)
20:50:33 <pikhq> oerjan: It apparently literally does.
20:51:20 <CakeProphet> I have no stack, awesome.
20:51:28 <CakeProphet> no stack trace to use.
20:52:32 <CakeProphet> maybe my computer is punishing me for being naughty.
20:52:43 <CakeProphet> (though I'm now no longer using alloca)
20:53:03 <CakeProphet> just good old new-and-forget memory management
20:53:27 <Vorpal> pikhq, yes GPS satellites have atomic clocks onboard
20:54:03 <Ngevd> I think lambdabot is dead
20:54:20 <Vorpal> Ngevd, you put a space in front of the > duh
20:54:46 <oerjan> <Ngevd> IT IS MY OPINION THAT GEOM IS NOT TURING COMPLETE
20:54:54 <oerjan> my impression is that it probably is.
20:54:57 <CakeProphet> ==28425== Stack overflow in thread 1: can't grow stack to 0x7fe7b0fc0
20:54:57 <CakeProphet> ==28425==
20:54:58 <CakeProphet> ==28425== Process terminating with default action of signal 11 (SIGSEGV)
20:55:11 <Vorpal> Ngevd, it is flipping obvious in a monospace font, and if you are not using a monospace font for irc: wtf are you doing
20:55:21 <CakeProphet> If you believe this happened as a result of a stack
20:55:21 <CakeProphet> ==28425== overflow in your program's main thread (unlikely but
20:55:22 <CakeProphet> ==28425== possible)
20:55:29 <CakeProphet> .....how would that happen.
20:55:32 <Vorpal> CakeProphet, you are doing so stupid things now I'm just going to ignore it.
20:55:33 <oerjan> provided definitions can be recursive, you have an ordinary stack and a call stack, and can probably implement a tape with those
20:55:36 <Vorpal> :P
20:55:44 <CakeProphet> Vorpal: I stopped using alloca what more do you want?
20:55:53 <Vorpal> CakeProphet, huh what did you do then
20:56:01 <CakeProphet> I am newing and forgetting about it. :P
20:56:06 <oerjan> > "i'm alive!"
20:56:06 <lambdabot> "i'm alive!"
20:56:10 <Vorpal> CakeProphet, well.. there you are
20:56:14 <CakeProphet> because memory leaks are not an issue in this program.
20:56:33 <Vorpal> CakeProphet, Correctness is more important than Simplicity
20:56:58 <CakeProphet> Vorpal: this is a program for a data structure class. I would just like to get it to work for the moment.
20:57:12 <CakeProphet> and right now I am apparently getting a stack overflow except there's no stack?
20:57:29 <CakeProphet> I'm so confused.
20:57:34 <Vorpal> there is the program stack
20:57:39 <Vorpal> there always is
20:57:45 <Vorpal> are you doing recursive calls?
20:58:04 <Ngevd> > (flip id)(join (.))(ap (.) (join (.)))(+1)(0)
20:58:05 <lambdabot> 8
20:58:10 <Ngevd> That's better
20:58:10 <CakeProphet> well I recursively show a tree but that's not the problem I think?
20:58:24 <Vorpal> Ngevd, obviously removing the space in front is better yes
20:58:25 <ais523> stack overflow generally means you did a recursive infinite loop without tailcalling
20:58:33 <ais523> well, with an infinite number of non-tail calls
20:58:33 <Vorpal> CakeProphet, you could have infinite recursion due to a bug
20:58:40 <CakeProphet> Access not within mapped region at address 0x7FE7B0FB8
20:58:41 <CakeProphet> ==28425== at 0x4A2359C: _vgnU_freeres (vg_preloaded.c:58)
20:58:45 <CakeProphet> Vorpal: that would give me a call stack
20:58:57 <CakeProphet> there is literally no call stack in backtrace
20:59:06 <Vorpal> huh
20:59:17 <CakeProphet> oh wait now there is whut
20:59:29 <Ngevd> Goodnight
20:59:30 <CakeProphet> yes okay now it's a stack overflow from my tree :P
20:59:31 -!- Ngevd has quit (Quit: what a big quitter he is, eh?).
20:59:37 <CakeProphet> before it was weird things.
21:01:00 <fizzie> Incidentally, if you want a heap-allocated object that gets destroyed as it goes out of scope, auto_ptr is the C++ way.
21:01:28 <fizzie> (It's not until-end-of-function though.)
21:01:34 <CakeProphet> "goes out of scope" how is that different from a regular auto variable?
21:01:46 <Vorpal> CakeProphet, it is on the heap
21:02:18 <CakeProphet> I have many things I want to construct a runtime, there is not a constant number of them.
21:02:28 <Vorpal> yes and?
21:02:33 <Sgeo|web> Is auto_ptr saner than alloca?
21:02:37 <CakeProphet> how would auto_ptr fix that?
21:02:41 <olsner> "auto variable" :)
21:02:52 <CakeProphet> olsner: what's wrong with that usage?
21:03:11 <Vorpal> CakeProphet, when fizzie says "Incidentally" the thing he metions may or may not be directly related to the problem at hand
21:03:35 <CakeProphet> I'm just wondering what tangible difference being on the heap instead of the stack makes.
21:03:43 <elliott__> stack has very limited size.
21:03:47 <elliott__> heap can hold big big big.
21:03:48 <fizzie> You can put e.g. a pointer to a sized-at-runtime array into an auto_ptr.
21:03:54 <elliott__> but lots of containers will allocate on the heap anyway
21:03:57 <elliott__> and just hold some pointers on stack
21:04:07 <elliott__> so it's not noticeable in C++ that the stack is small much
21:04:17 <CakeProphet> ah okay.
21:04:24 * Sgeo|web gets annoyed at thunder
21:04:57 <Vorpal> Sgeo|web, UPS I hope?
21:05:06 <olsner> technically, I think "auto variable" is correct... but I find it a bit weird to specify the auto every time
21:05:23 <fizzie> CakeProphet: It also helps in exception-related memory leaks when you actually want to allocate on heap so that you can later give ownership of the thing to someone else and have it survive your scope.
21:05:28 <olsner> sounds like a throwback to the times when the difference between register and auto variables was actually relevant
21:05:33 <Vorpal> olsner, auto int foo; is certainly valid C if that is what you mean. Probably valid C++ too
21:05:41 <olsner> sure, but the auto is meaningless
21:05:46 <olsner> is my point
21:05:50 <Vorpal> olsner, yes because it is the default
21:05:57 <Vorpal> there is volatile too
21:05:58 <Sgeo|web> Vorpal: no :(
21:06:11 <Vorpal> Sgeo|web, unplug then
21:06:17 <olsner> you can have volatile auto int too
21:06:23 <Sgeo|web> I'd unplug laptop, but this thing loses charge very quickly
21:06:23 <Vorpal> olsner, are you sure?
21:06:25 <Vorpal> okay then
21:06:30 <Vorpal> Sgeo|web, so shut it down?
21:06:34 * Sgeo|web unplugs anyway
21:06:38 <Vorpal> and read a book
21:06:39 <olsner> auto is like register and static, volatile is like const
21:06:43 <CakeProphet> olsner: it makes sense to specify auto variable when we're talking about different ways/places to store variables.
21:06:47 <Vorpal> olsner, right
21:07:51 <Vorpal> olsner, though GCC probably has an extension that assigns auto static volatile register some insane meaning XD
21:07:59 <fizzie> CakeProphet: "Thing* t = new Thing(); t->splurt(); return t;" will leak if Thing::splurt throws an exception; "std::auto_ptr<Thing> t = new Thing(); t->splurt(); return t.release();" will not.
21:08:12 <variable> olsner: volatile has no required meaning though
21:08:13 <Vorpal> sorry, auto static volatile register const
21:08:16 <CakeProphet> fizzie: ah okay.
21:08:23 <variable> compilers _can_ use it but it is completely implementation defined
21:09:02 <Vorpal> variable, wrong. At least for C99 it has a sense for a specific type wrt signals
21:09:06 <olsner> CakeProphet: if you just say variable, I'd say that's always an auto variable unless otherwise stated (e.g. as "static variable")
21:09:08 <CakeProphet> so I could write a compiler that stores volatile variables on floppy disks? and still be standard?
21:09:09 <Vorpal> as far as I remmeber
21:09:25 <olsner> variable: good nick for this discussion
21:09:56 <elliott__> CakeProphet: you could write a compiler that did that for normal variables.
21:10:01 <elliott__> variable: how do youa void getting pinged all the time
21:10:08 <elliott__> s/youa void/you avoid/
21:10:14 <CakeProphet> elliott__: auto is completely implementation defined then? or is that not what you're saying?
21:10:27 <variable> Vorpal: I wasn't aware it changed in C99
21:10:37 <variable> elliott__: I don't really. I just ignore pings in certain channels
21:10:46 <Vorpal> variable, right, I don't have a copy of C89 so can't checkthere
21:10:48 <fizzie> It's not *completely* implementation-defined for other types than sig_atomic_t either; the standard gives a lot of very vague and unclear text about access to a volatile variable, which doesn't really mean anything concrete.
21:11:06 * Sgeo|web risks his Lubuntu setup in the hopes of being able to do homework
21:11:10 <Vorpal> variable, it is wrt sig_atomic_t
21:11:27 <fizzie> That and signals.
21:11:37 <Sgeo|web> If I use a backport repository designed for 10.04 on 11.04, what's the worst that can happen?
21:11:41 <Vorpal> <elliott__> variable: how do youa void getting pinged all the time <-- same way I survive in #nethack?
21:11:47 <elliott__> Sgeo|web: Terrible things.
21:11:54 * variable reads https://www.securecoding.cert.org/confluence/display/seccode/SIG31-C.+Do+not+access+or+modify+shared+objects+in+signal+handlers
21:11:54 <elliott__> Vorpal: By not joining?
21:12:03 <elliott__> "Vorpal" isn't that common in NetHack.
21:12:08 <elliott__> "variable" is in programming channels.
21:12:16 <Vorpal> elliott__, it happens a lot in #nethack though
21:12:27 <CakeProphet> I apologize for the stupidness. I'm still getting accustomed to C++
21:12:47 <olsner> Sgeo|web: cthulhu might wake? or whatever it is cthulhu does/will do
21:12:49 <elliott__> Vorpal: Not nearly as much as variable in a programming channel.
21:12:58 <Vorpal> hm true
21:13:07 <elliott__> You should go back to AnMaster it's way easier to make fun of.
21:13:11 <elliott__> Also less derivative.
21:13:28 <Deewiant> elliott__: Disabling pinging for "variable" but not "variable[,:]" should help
21:13:48 <elliott__> Deewiant: I don't think telnet can do that.
21:14:02 <Deewiant> I don't think telnet does pinging at all
21:14:05 <Sgeo|web> telnet can ping you now?
21:14:09 <variable> Sgeo|web: yeap
21:14:31 <olsner> telnet can ping you and eat your children and everything
21:14:39 <CakeProphet> wait what....
21:14:39 * Sgeo|web goes to download Lucid binaries on Natty
21:14:41 <CakeProphet> my program
21:14:43 <CakeProphet> works
21:14:45 <CakeProphet> correctly?
21:14:58 <CakeProphet> (minus proper memory management...)
21:15:05 <Vorpal> CakeProphet, prove it formally
21:15:06 <variable> CakeProphet: any kmods may not work correctly. Also random binaries may not work (if the ABI changed)
21:15:08 <elliott__> Deewiant: Then that's how variable solves it
21:15:16 <elliott__> variable: Sgeo|web, not CakeProphet
21:15:27 <variable> woops Sgeo|web ^^
21:15:28 <elliott__> And the problem is more mismatched dependencies...
21:15:45 <CakeProphet> okay so now that it works time to implement proper memory management
21:15:48 <Sgeo|web> Not doing kmods. This is mono stuff
21:15:51 <CakeProphet> which is of course to use alloca
21:16:27 <Deewiant> class (Eq e, Ord e, Read e, Show e, Ord s, Read s, Show s, Monad m) => Entity e s d p m | e -> s, e -> d, e -> p, e -> m where
21:16:30 <Deewiant> Sweet
21:16:32 <elliott__> Deewiant: No
21:16:33 <elliott__> Deewiant: Stop
21:16:40 <Deewiant> elliott__: This isn't mine
21:16:43 <elliott__> Deewiant: Good
21:16:48 <elliott__> I was about to launch into a "you don't want a typeclass" rant
21:16:51 <elliott__> What the hell are you reading
21:16:52 <Deewiant> It's http://hackage.haskell.org/packages/archive/GA/1.0/doc/html/GA.html
21:17:07 <Deewiant> (Via http://www.reddit.com/r/haskell/comments/kvnep/ga10_a_haskell_library_for_working_with_genetic/ )
21:17:15 <olsner> hmm, shouldn't those fundeps just be e -> s d p m
21:17:20 <olsner> I wonder if there's a difference
21:17:21 <elliott__> Wow, that's awful.
21:17:27 <elliott__> olsner: There isn't
21:17:43 <elliott__> Deewiant: I was going to rewrite it as a data type but it's way too big for me to bother
21:17:53 <Sgeo|web> Thunder stopped
21:18:13 <elliott__> data used to score an entity, e.g. a list of numbers (d)
21:18:14 <fizzie> If you want to spawn an undefined number of objects in a loop, just new them and put the pointers in a container, or alternatively let the container allocate them (though that may end up doing a lot of copy constructor invocation).
21:18:15 * Sgeo|web plugs laptop back in
21:18:17 <elliott__> Why is that even relevant
21:19:17 <CakeProphet> I wonder if my professor knows what alloca does.
21:19:22 <CakeProphet> fizzie: "let the container allocate them" how
21:20:49 <elliott__> http://static.adzerk.net/Advertisers/b4cc0ceaed4342e298cec4ac2158f733.png
21:20:49 <elliott__> What.
21:21:53 <fizzie> CakeProphet: std::vector<Thing> is perfectly capable of managing an arbitrary amount of Things, assuming Thing has the necessary copy constructor, assignment operator, and the third thing I forget.
21:22:07 <CakeProphet> Vorpal: also I can prove that my program is correct formally like so: a) it gives the output my professor wanted when given the professor's test file as input. b) Q.E.D.
21:22:42 <olsner> fizzie: public destructor maybe?
21:23:15 <Vorpal> CakeProphet, XD
21:23:22 <olsner> I've effectively unlearned everything I've ever knew about STL though
21:23:48 <CakeProphet> I've'nt learned copy constructors yet.
21:24:11 <olsner> (that should of course be "I ever knew" or "I've ever known")
21:24:11 <fizzie> What are you generating objects of, anyhow?
21:24:20 <CakeProphet> stacks
21:24:23 <CakeProphet> I have a stack of stacks
21:24:35 <CakeProphet> also later tree nodes.
21:24:37 <CakeProphet> that I put on a stack.
21:24:54 * CakeProphet is converting infix mathematical expressions to postfix to prefix
21:24:56 <olsner> elliott__: I think that's the reaction they want, so that you click the ad in order to find out what it means
21:25:20 <elliott__> olsner: some job bullshit: http://siliconmilkroundabout.com/
21:25:27 <fizzie> Well, that's a standard type, you can put stacks directly into a vector. But it will copy a lot of stacks, unless you happen to get one of those magical compilers that will optimize all tmeporaries away.
21:26:03 <CakeProphet> fizzie: okay so then the dynamically allocated stacks are freed when the vector is freed
21:26:06 <CakeProphet> ?
21:26:58 <olsner> hmm, so you're really just writing post-order and pre-order traversal of trees? that should be fairly trivial
21:27:25 <CakeProphet> well sort of.
21:27:36 <CakeProphet> I use shunting-yard algorithm to convert to postfix
21:27:43 <CakeProphet> then I build that into an expression tree
21:27:49 <CakeProphet> and then recursively print that as prefix
21:28:01 <CakeProphet> ==28796== LEAK SUMMARY:
21:28:01 <CakeProphet> ==28796== definitely lost: 2,336 bytes in 34 blocks
21:28:02 <CakeProphet> ==28796== indirectly lost: 18,048 bytes in 44 blocks
21:28:02 <elliott__> wow.
21:28:05 <elliott__> that's the worst way imaginable
21:28:05 <fizzie> If you have vector< stack<X> > the vector will own the stacks and will take care of destroying them when the vector is destroyed.
21:30:17 -!- GreaseMonkey has quit (Quit: The Other Game).
21:30:36 <fizzie> In that case though it's probably best to put the stacks directly into the vector when empty, only use references to them and not temporary "stack<X>" objects, and it will still allocate-copy-destroy whole stacks around as the vector grows, probably.
21:30:48 <olsner> "The shunting yard algorithm can also be applied to produce prefix notation (also known as polish notation). To do this one would simply start from the beginning of a string of tokens to be parsed and work backwards, and then reversing the output queue (therefore making the output queue an output stack)."
21:30:55 <olsner> (wikipedia)
21:31:10 -!- sllide has joined.
21:31:20 <elliott__> olsner: No clearly CakeProphet has to parse it into a tree that's so much simpler.
21:31:37 <olsner> "start at the beginning and work backwards" is a curious instruction though
21:32:00 <CakeProphet> "start from the beginning of a string of tokens and work backwards" what?
21:32:03 <CakeProphet> yes.
21:32:18 <olsner> but it's probably obvious if you know how to work the shunting yard
21:32:39 <CakeProphet> elliott__: I don't recall you mentioning that there was a better way when I was talking to you about it earlier.
21:32:47 <elliott__> CakeProphet: Yah, I even implemented it
21:32:52 <elliott__> But then you got impatient and weren't interested
21:33:02 <olsner> but the obvious way is 1. parse tree, 2. print tree
21:33:08 <elliott__> olsner: no it isn't
21:33:12 <olsner> sure it is
21:33:13 <elliott__> well
21:33:13 <elliott__> sure
21:33:16 <elliott__> but it's not what he's doing
21:33:18 <CakeProphet> s/got impatient and weren't interesting/had to go to class/
21:33:19 <elliott__> he's using shunting yard first for no reason
21:33:51 <CakeProphet> well one reason is that my professor wanted me to "use stacks"
21:34:05 <elliott__> <olsner> "The shunting yard algorithm can also be applied to produce prefix notation (also known as polish notation). To do this one would simply start from the beginning of a string of tokens to be parsed and work backwards, and then reversing the output queue (therefore making the output queue an output stack)."
21:34:06 <CakeProphet> which means use shunting yard
21:34:08 <elliott__> "output queue an output stack"
21:37:24 <olsner> elliott__: I wanted to point out that shunting yard could apparently be used to solve the problem directly instead of just using it to build a tree
21:37:26 <Sgeo|web> iirc, Vala uses reference counting, but has language features intended to help reduce the pain?
21:37:56 <olsner> queues and stacks are irrelevant to me
21:38:02 <CakeProphet> I'm still not clear on what it means from start at the beginning and workbackwards.
21:38:10 <elliott__> olsner: Right, that's what I'm saying
21:38:17 <elliott__> CakeProphet: It means start at the end and work backwards
21:38:18 <elliott__> Obvious typo
21:38:28 <CakeProphet> "obvious"
21:38:50 <elliott__> Yes, obvious
21:38:54 <CakeProphet> elliott__: I am beginning to think that you think almost everything is obvious.
21:39:11 <elliott__> You might just be especially unobservant
21:39:19 <olsner> so you can just reverse the input, run the shunting yard algorithm, then reverse the output?
21:39:22 <elliott__> That's more likely since it paints me in a better light
21:39:29 <elliott__> olsner: or just use a stack instead of a queue for the output
21:39:32 <elliott__> and avoid the translation entirely
21:39:38 <elliott__> and just use a backwards iterator or w/e to avoid reversing the input
21:39:43 <CakeProphet> reversing the output does not make polish notation.
21:39:46 <CakeProphet> okay.
21:39:46 <CakeProphet> yes
21:39:49 <CakeProphet> that is correct.
21:39:53 <olsner> since you're in STL land, you could make a single shunting yard implementation run both backwards and forwards by passing it different iterators for input and output
21:40:03 <CakeProphet> olsner: no thanks.
21:40:08 <CakeProphet> I think I'll just get rid of my tree code.
21:40:13 <CakeProphet> BUT I AM TOTALLY KEEPING ALLOCA MUAHAHAHA
21:40:18 <elliott__> <CakeProphet> reversing the output does not make polish notation.
21:40:23 <elliott__> it does if you process your input backwards too
21:40:28 <CakeProphet> elliott__: ..... -_-
21:40:29 <CakeProphet> see
21:40:30 <CakeProphet> above
21:41:41 <elliott__> http://www.oracle.com/us/corporate/press/503333
21:41:43 <elliott__> good statement
21:41:57 <elliott__> http://www.oracle.com/us/corporate/press/503343
21:42:01 <elliott__> ahahaha why are oracle being great
21:42:04 <elliott__> i don't want to like oracle
21:42:17 <elliott__> ais523: you might enjoy the above
21:42:34 * ais523 looks
21:42:36 <ais523> both of them?
21:42:49 <elliott__> ais523: yep, first first
21:42:51 <elliott__> second... second
21:43:23 <CakeProphet> what I am great apalled that string has no push_front
21:43:27 <ais523> is that, umm, corporate sarcasm?
21:43:29 <ais523> it's not quite sarcasm
21:43:32 <ais523> but it's the same attitude
21:44:10 <Sgeo|web> WHat's the point of Autonomy pretending not to have wanting to be sold to Oracle and Oracle insisting that yes they did
21:44:34 <elliott__> Sgeo|web: What's "the point"?
21:44:49 <elliott__> Autonomy publicly made a misleading statement i.e. that they hadn't been shopped, Oracle corrected them
21:45:27 <Sgeo|web> What's the point of Autonomy making the misleading statement, what did they hope to gain?
21:45:58 <Vorpal> elliott__, why would that guy even deny meeting with Oracle?
21:46:06 <Vorpal> I mean, what does he stand to gain from doing so?
21:46:36 <elliott__> Vorpal: To not be embarrassed by having it in the public sphere that he tried to sell his company to Oracle for too high a price?
21:46:47 <Vorpal> elliott__, ah...
21:47:02 <elliott__> Sgeo|web: And because "Oracle are liars, they lied about us" looks better than "we failed to sell our company to Oracle"?
21:47:14 -!- Sgeo|web has quit (Quit: Page closed).
21:47:18 <SgeoN1> Oh
21:47:20 <Vorpal> hm perhaps
21:47:38 <Vorpal> SgeoN1, why are you using web for irc when it does that stuff all time?
21:47:50 <elliott__> What stuff
21:48:01 <Vorpal> close by mistake. Saw that several times the last few dyas
21:48:02 <Vorpal> days*
21:48:05 <SgeoN1> Also, fuck Chromium for interpreting mouse movement as 'I want to close the tab' all the time
21:48:11 <Vorpal> see
21:48:13 <Vorpal> I told you
21:48:15 <elliott__> It was a mistake?
21:48:18 <Vorpal> SgeoN1, just use xchat or something
21:48:19 <elliott__> Oh
21:48:22 <ais523> SgeoN1: do you have dwell click turned on?
21:48:34 <SgeoN1> I never heard of that until now
21:48:40 <elliott__> ais523: What is it with you and dwell click :P
21:48:50 <ais523> I have dwell click on the mind~
21:48:56 <ais523> also, I discovered what trailing tilde means
21:48:59 <ais523> when it doesn't mean sarcasm
21:49:02 <olsner> dwell click?
21:49:07 <Vorpal> ais523, what does it mean?
21:49:10 <fizzie> You are dwelling on dwell click.
21:49:10 <elliott__> ais523: that wasn't nearly terrible enough to suffix with ~
21:49:16 <ais523> unfortunately, I can't figure out how to put it into words, but I'm pretty sure it was appropriate there
21:49:19 <elliott__> Study the master (Madoka-Kaname)
21:49:22 <ais523> it's a sort of... light-heartedness indicator
21:49:28 <Vorpal> ah
21:49:31 <ais523> not "I'm joking" but "this sentence is informal"
21:49:32 <elliott__> Yes but it only applies to terrible things.
21:49:38 <ais523> not where I've seen it be used
21:49:44 <CakeProphet> elliott__: ah another change to the algorithm is that you have to reverse the roles of parentheses.
21:49:45 <Vorpal> elliott__, you need to use it more then
21:50:20 <elliott__> Vorpal: Your MOM [...]
21:50:29 <Vorpal> CakeProphet, anyway you should handle vararg operators with dependant typing or something like that
21:50:49 <CakeProphet> ...no
21:50:52 <Vorpal> YES
21:51:17 <Vorpal> dependent*
21:51:39 <CakeProphet> wow I love how I just wasted like probably 12 hours of my life because I a) didn't go to class when the professor explained how to convert infix to prefix b) didn't read the Wikipedia article on shunting yard thoroughly enough
21:51:51 <ais523> is there such a thing as independent typing?
21:52:25 <Vorpal> CakeProphet, you skipped a class?
21:52:29 <Vorpal> ais523, XD
21:52:29 <Phantom_Hoover> Hmm, what's the severity of a crash on startup?
21:52:39 <fizzie> str.insert(0, 1, 'x') equals the hypothetical str.push_front('x'), though it might not be exactly efficient.
21:52:44 <olsner> Phantom_Hoover: about 3
21:52:47 <ais523> Phantom_Hoover: 5, I'm not sure of the units
21:52:52 <elliott__> Phantom_Hoover: high
21:52:56 <ais523> bleh, ninja'd
21:52:59 <Vorpal> Phantom_Hoover, depends on what you are starting: A train safety system or hello world
21:53:01 <Phantom_Hoover> I like the way you both arrived at the exact same joke.
21:53:04 <Vorpal> the former is much more severe
21:53:06 <elliott__> not critical if it's just your machine
21:53:08 <CakeProphet> Vorpal: yes, it happens.
21:53:13 <Phantom_Hoover> In this case, it's Frozen Synapse.
21:53:14 <Vorpal> CakeProphet, stupid
21:53:19 <elliott__> are you reeportgimg with like bugzilla
21:53:22 <Phantom_Hoover> Yes.
21:53:28 <elliott__> because i'd email instead :P
21:53:31 <CakeProphet> Vorpal: I was skipping class to catch up on projects which I was behind on because I'm also doing freelancing.
21:53:36 <elliott__> link?
21:53:38 <Phantom_Hoover> I did email, they referred me to bugzilla.
21:53:42 <elliott__> heh
21:53:42 <Vorpal> CakeProphet, too much work then, meh
21:53:42 <fizzie> BUGZILLA CRUSHES TOKYO - FILM AT ELEVEN.
21:53:43 <CakeProphet> the point of skipping class was to maintain my grades.
21:53:50 <Vorpal> Phantom_Hoover, so report it there
21:53:51 <elliott__> it will never get fixed Phantom_Hoover
21:53:56 <Phantom_Hoover> :(
21:54:01 <Vorpal> elliott__, shut up, it might
21:54:04 <elliott__> bugzilla is where bugs go to die
21:54:11 <Vorpal> I had a bugs in cogs fixed
21:54:13 <Phantom_Hoover> The poor little bugs.
21:54:13 <ais523> in theory, he paid money for it, so should be able to return it if it didn't work
21:54:16 <ais523> Vorpal: which one?
21:54:18 <elliott__> Vorpal: you stfu, he already was reporting it
21:54:20 <Phantom_Hoover> ais523, :D
21:54:25 <ais523> is it the one where it crashes my GPU and forces a hard reboot?
21:54:37 <Vorpal> ais523, the one that made it crash X11 for me.
21:54:41 <Phantom_Hoover> ais523, is that the same one I have on other things?
21:54:44 <Vorpal> ais523, now it just crashes itself XD
21:54:51 <ais523> Vorpal: hmm, would X subsequently restart? if so, it's not the same as mine
21:54:52 <Vorpal> ais523, I'm on radeon graphics btw
21:55:02 <ais523> Phantom_Hoover: a GPU crash is kind-of obvious, you can't do anything graphical until you hard-reboot
21:55:04 <Vorpal> ais523, it would, I use startx so I had to do that by hand
21:55:12 <ais523> ah, I couldn't even start X after mine
21:55:18 <Phantom_Hoover> ais523, yeah, I have suffered the same fate.
21:55:22 <Vorpal> ais523, it just dumped me into the terminal I ran startx from
21:55:26 <fizzie> I also had a "does not start" bug in And Yet It Moves fixed, but I didn't manage to report it; other people on them forums had already.
21:55:26 <ais523> I'm using Intel graphics
21:55:36 <ais523> AYIM worked fine for me
21:55:47 <CakeProphet> now if I can shorten all of my functions to 15 lines of code I no longer have to write pseudocode for any of them.
21:55:47 <ais523> although it's not an amazing game, and the difficulty curve is annoyingly inconsistent
21:55:50 <Vorpal> AYIM worked fine for me too
21:56:11 <Vorpal> ais523, AYIM is kind of fun though, but yes some parts are utterly hard
21:56:13 <fizzie> The 64-bit AYIM did not work fine for a whole lot of people; but it was fixeded.
21:56:15 <Vorpal> haven't finished it yet
21:56:26 <Vorpal> fizzie, that is the only one that worked for me
21:56:45 <fizzie> Yes, you told me it E_WORKSFORYOU when I was complaining about it not working, before.
21:56:51 <Vorpal> ais523, hammerfight still crashes on loading for me
21:57:00 <ais523> what sort of crash?
21:57:01 <Vorpal> works on intel graphics, but VEEEERY slowly
21:57:02 <oerjan> <CakeProphet> elliott__: ah another change to the algorithm is that you have to reverse the roles of parentheses. <-- also reverse the associativity of operators, i think
21:57:22 <Vorpal> ais523, segfault with varying backtrace, sometimes in libGL, sometimes broken stack
21:57:47 <CakeProphet> oerjan: ah yes that too, it's just not a factor for this project because all operators are left-associative.
21:57:55 <CakeProphet> or it doesn't matter...
21:58:31 <Vorpal> CakeProphet, eh, 2 - 4 - 3 would be 2 4 - 3 - in postfix and uh... not sure what it would be in prefix
21:59:17 <Vorpal> lets see.. - 2 - 4 3? I think?
21:59:22 <Vorpal> yes probably
21:59:33 <elliott__> no
21:59:33 <CakeProphet> well yes
21:59:39 <elliott__> - - two four three
21:59:59 <CakeProphet> I mean to say, associativity of - doesn't come up in any of my test cases.
22:00:14 <oerjan> CakeProphet: if they're all left-associative then when reversing you need to treat them ass right.
22:00:16 <elliott__> CakeProphet: still, fix it
22:00:17 <Vorpal> elliott__, think about the tree, a prefix walk would give you what I gave, no?
22:00:17 <oerjan> *as
22:00:24 <elliott__> Vorpal: you are wrong
22:00:37 <Phantom_Hoover> <Vorpal> ais523, segfault with varying backtrace, sometimes in libGL, sometimes broken stack
22:00:43 <Vorpal> elliott__, pretty sure I'm not given the AST and mental walking of it
22:00:45 <elliott__> - two - four three = two - (four - three)
22:00:54 <Vorpal> oh okay
22:00:54 <Phantom_Hoover> I'm getting segfaults in libGL with FS, as it happens.
22:00:54 <Vorpal> true
22:00:56 <elliott__> = (two - four) + three
22:00:59 <ais523> Vorpal: Hammerfight is incredibly buggy for me, anyway, though it works
22:01:09 <ais523> I keep backup savefiles because it often forgets which weapon/armour I have
22:01:11 <Vorpal> ais523, hm
22:01:18 <Vorpal> ais523, did you get the new bundle btw?
22:01:19 <ais523> and sometimes there are giant explosions that oneshot everything for no obvious reason
22:01:25 <ais523> I haven't yet, I'm not at all sure I want to
22:01:36 <ais523> oh, and there have been several instances of things taking INT_MIN damage
22:01:37 <Vorpal> ais523, you have the frozenbyte bundle already?
22:01:41 <ais523> not to mention crashes
22:01:43 <ais523> Vorpal: I don't
22:01:55 <Vorpal> ais523, INT_MIN? awesome, that gives them like max health?
22:02:01 <ais523> it seems to be capped
22:02:03 <Phantom_Hoover> elliott__, fun fact: I don't think I have had any contact with a human at any point in my attempt to report this.
22:02:07 <ais523> which is lucky, or the game would be unwinnable
22:02:20 <ais523> I've taken INT_MIN damage on my own machine on occasion, too
22:02:28 <Vorpal> ais523, technically not unwinable, just utterly hard
22:02:39 <ais523> well, I'd get bored first
22:02:44 <Vorpal> well yeah
22:03:53 <oerjan> <Phantom_Hoover> I offered to help but apparently the fact that I have talked to a Norwegian on the internet does not qualify me to be the Norwegian ambassador. <-- shocking
22:03:57 <CakeProphet> okay so all arithmetic operators are traditionally left-associative yes?
22:04:11 <Vorpal> CakeProphet, not exponentiation
22:04:14 <CakeProphet> well yes.
22:04:23 <CakeProphet> +-*/% is what I'm concerned with.
22:04:34 <Vorpal> those tend to be left-associative
22:04:37 <CakeProphet> okay good, so that means I can just change <= to <
22:04:45 <CakeProphet> to fix that.
22:04:50 <Phantom_Hoover> oerjan, indeed, I feel you should lodge a complaint.
22:04:51 <oerjan> / is a little tricky i think. traditionally mathematicians try to use genuine vertical layout there
22:05:23 <Phantom_Hoover> * is tricky too, given that I have never ever seen that used for multiplication in proper mathematical writing.
22:05:31 <oerjan> indeed
22:05:48 <CakeProphet> proper mathematical writing is certainly the context.
22:05:51 <Phantom_Hoover> Although it's still left-associative, although it's commutative so it's kind of irrelevant.
22:05:54 <Vorpal> traditionally in programming I assume he meant
22:06:14 <oerjan> so, whatever FORTRAN does :P
22:06:18 <CakeProphet> what? valgrind says that there is a memory leak associated with my alloca call? How can this BE?
22:06:21 <Vorpal> oerjan, :P
22:06:41 <CakeProphet> maybe valgrind just doesn't know how to handle such complex things.
22:06:52 <CakeProphet> non-standard things.
22:07:22 <Vorpal> no that should work
22:07:28 <Vorpal> CakeProphet, what do you alloca()
22:07:33 <Vorpal> some std::foo?
22:07:33 <elliott__> your professor should fail you for using alloca
22:07:41 <CakeProphet> Vorpal: stack<char> yes
22:07:43 <elliott__> and perhaps he will
22:07:52 <oerjan> nah alloca should be an automatic A, it's in the name
22:07:55 <elliott__> fizzie: pikhq: tell him he's an idiot
22:08:02 -!- pikhq has quit (Ping timeout: 248 seconds).
22:08:05 <Vorpal> CakeProphet, that allocates on the heap and will leak since the destructor won't be called
22:08:09 -!- pikhq has joined.
22:08:16 <Vorpal> CakeProphet, so stop being an idiot and just use normal stack allocation
22:08:23 <CakeProphet> Vorpal: where does it allocate on the heap?
22:08:33 <Vorpal> CakeProphet, in std::stack
22:08:34 -!- sllide has quit (Ping timeout: 255 seconds).
22:08:44 <elliott__> i suggest we don't answer his alloca qs]
22:08:45 <CakeProphet> ah okay.
22:08:47 <elliott__> waste of time
22:08:51 <CakeProphet> elliott__: yes too helpful
22:09:07 <CakeProphet> I might actually learn and correct things.
22:09:09 <CakeProphet> bad stuff.
22:09:16 <CakeProphet> best to just call him an idiot and move on.
22:09:35 <elliott__> we helped you
22:09:39 <elliott__> we said
22:09:45 <elliott__> don;t use alloca
22:09:59 <Vorpal> no we didn't. We said "don't"
22:10:24 <CakeProphet> bah now I have to add all of these vector::push_backs
22:10:37 <Vorpal> night →
22:11:02 <CakeProphet> also how could I avoid calling copy constructors? also what is a copy constructor?
22:11:09 <oerjan> <Phantom_Hoover> Then it turns out that Hexham is the centre of the coming apocalypse, precipitated by a cross-time war waged with neutrinos? <-- just find the ham and make it stop hexing.
22:11:36 -!- Vorpal has quit (Quit: ZNC - http://znc.sourceforge.net).
22:12:18 <oerjan> hm wasn't that almost the plot of triangle and robert.
22:12:19 <olsner> CakeProphet: if you don't know what they are, you can't and probably shouldn't avoid them
22:14:26 <CakeProphet> olsner: maybe I should learn and then I can and should avoid them?
22:15:08 <olsner> probably not
22:16:57 <oerjan> <elliott__> Thing I just typed instead of MonadTrans: MonadTrams. <-- best method of transport
22:17:04 -!- copumpkin has quit (Quit: Computer has gone to sleep.).
22:17:14 <olsner> CakeProphet: you should learn, yes, but that may not necessarily lead to developing either capability or desire to remove them
22:17:18 <olsner> or avoid them
22:17:45 <CakeProphet> well I was told that maintaining a vector of stacks to allow them to be freed at the end of the function call would call a lot of copy constructors
22:17:48 <CakeProphet> which would be Bad(tm)
22:17:56 <CakeProphet> thus, avoiding them is Good(tm)
22:18:51 <olsner> oerjan: extra funny in swedish: trams means (approx.) nonsense
22:19:25 <CakeProphet> I was thinking I could give the vector auto_ptrs but that doesn't really anything I think..
22:19:31 <CakeProphet> +solve
22:20:15 <olsner> (or drivel)
22:21:18 <CakeProphet> help would using auto_ptr avoid copy constructors?
22:21:40 <CakeProphet> vector<auto_ptr<stack<char>>> toFree;
22:21:45 * Phantom_Hoover → sleep
22:21:47 -!- Phantom_Hoover has quit (Quit: Leaving).
22:21:50 <monqy> watch out with that >>>
22:21:53 <CakeProphet> yes I know.
22:21:58 <monqy> you could hurt someone
22:22:00 <monqy> (yourself)
22:22:11 <olsner> using auto_ptr like that would probably rather lead to other problems :)
22:22:19 <CakeProphet> such as?
22:22:27 <olsner> I dunno, I've never used them
22:22:41 <fizzie> Such as it's not safe to put auto_ptr into an STL container.
22:22:43 <CakeProphet> auto_ptr is basically a pointer except that when they destruct they destruct what they point to.
22:22:50 <CakeProphet> ah
22:23:06 <CakeProphet> fizzie: what might happen as a result?
22:23:13 <olsner> think about that for a while, how many times can you destruct something before it ends up dead?
22:23:18 <fizzie> Crashes and worse.
22:23:19 <CakeProphet> once
22:23:24 <CakeProphet> there is one auto_ptr per stack allocated
22:23:25 <CakeProphet> simple.
22:23:45 <CakeProphet> but apparently STL containers are not safe for a lot of things so...
22:23:53 <fizzie> Yes, but the vector would end up trying to make copies of it.
22:23:56 <CakeProphet> nevermind I'll just call some copy constructors.
22:24:10 <fizzie> Except that only one copy can own the pointed-to object.
22:24:41 <fizzie> It has a thing where assignment also NULLs the "source" auto_ptr, and the container isn't really equipped to cope with tat.
22:24:56 <CakeProphet> this seems like something that might occur commonly... why not have a special free_list data structure of some kind?
22:25:22 <fizzie> Boost has some "smart pointers" that are container-safe, I believe.
22:25:37 <CakeProphet> ah okay.
22:25:57 <CakeProphet> okay so
22:25:57 <fizzie> Anyway, you can just do it the old-fashioned way if you want to store plain pointers.
22:26:05 <CakeProphet> toFree.push_back(*s);
22:26:09 <olsner> CakeProphet: what would that free_list do?
22:26:09 <CakeProphet> toFree now "owns" *s yes?
22:26:24 <fizzie> That would make a copy.
22:26:34 <fizzie> Assuming the assumptions.
22:26:34 <CakeProphet> olsner: be like vector but not envoke copy constructors so that you can efficiently free a list of stuff upon free_lists destruction.
22:26:42 <elliott__> Envoke?
22:26:52 <CakeProphet> fizzie: yes I'm ignoring copy constructors. stoped caring.
22:26:52 <Deewiant> C++11 has std::unique_ptr, std::auto_ptr is deprecated
22:26:56 <CakeProphet> elliott__: yse
22:27:15 <monqy> invoke or evoke make up your mind?
22:27:20 <monqy> or is that the joke
22:27:25 <monqy> utghghghh so complicated
22:27:28 <CakeProphet> monqy: nno
22:27:54 <CakeProphet> yse and nno I c'nat tpey hlep
22:28:01 <fizzie> CakeProphet: If 's' is a stack*, toFree is a vector<stack>, that will make an independent copy of the stack and put that into the vector. It will still be your responsibility to delete s.
22:28:08 <olsner> CakeProphet: what operation do you mean by "free" here, exactly?
22:28:35 <CakeProphet> delete
22:28:40 <CakeProphet> oeprator
22:28:50 <oerjan> http://www.mezzacotta.net/postcard/ :P
22:29:04 <CakeProphet> fizzie: er wait I thought vector could magically delete things for me.
22:29:24 <fizzie> CakeProphet: The vector will delete things it has itself allocated.
22:29:25 <CakeProphet> do I need to maintain vector<stack<char> *> toFree; and then loop through toFree at the end and delete everything?
22:29:40 <CakeProphet> fizzie: I am still really confused as to how vector can allocate things for me.
22:30:45 <olsner> the vector only allocates things for itself, to accomodate the stuff you ask it to copy into it
22:30:56 <olsner> *into itself
22:31:21 <CakeProphet> okay I understand this now, my question is how do I use a vector to manage memory?
22:31:32 <fizzie> CakeProphet: vector< stack<char> > staks; for (...) { staks.push_back(stack<char>()); stack<char>& s = staks.back(); /* use s; it lives in the vector */ }
22:31:50 <CakeProphet> stack<char>()??
22:31:56 <olsner> meh... understand pointers, then get what vector is doing, read some of the generated assembly code, it will all become apparent in due time :)
22:32:08 <CakeProphet> olsner: step one and two complete
22:32:16 <elliott__> <CakeProphet> stack<char>()??
22:32:19 <elliott__> Heard of constructors? :p
22:32:30 <CakeProphet> I was under the impression I had to declare variables to do that.
22:32:35 <CakeProphet> but okay.
22:32:38 <CakeProphet> cool.
22:32:39 <olsner> step two doesn't seem to be complete, since it's what we're doing right now afaict
22:32:56 -!- ais523 has quit (Remote host closed the connection).
22:33:06 <CakeProphet> olsner: no I'm learning how to use vectors for a specific task.
22:33:07 <fizzie> Or for (...) { stack<char> s; /* use s, it's temporary right now */ staks.push_back(s); /* will make a copy, but that sounds silly if you only want to free them later */ }
22:33:08 <olsner> also, there are some more steps inbetween, obviously
22:33:11 <CakeProphet> I understand that it makes copies of things.
22:33:54 <fizzie> I don't quite understand why you want these things to live past the loop only to free them.
22:34:57 <CakeProphet> question how is it determined when stack<char>() is destroyed.
22:35:03 <fizzie> Note that you can't have plain pointers into the inside-the-vector objects, because they are liable to move. (If that's why they have to survive.)
22:35:03 <CakeProphet> out in the wild.
22:35:29 <fizzie> The (empty) stack in the push_back argument is a temporary.
22:35:37 <fizzie> It won't live long.
22:35:45 <CakeProphet> how long exactly.
22:36:01 <fizzie> Why should you care? You're not using it.
22:36:09 <CakeProphet> hmmm... okay I believe I understand.
22:36:09 <fizzie> In the optimal case it could be optimized out of existence.
22:36:54 <CakeProphet> it's not that I have things I want to exist outside of a loop.
22:37:05 -!- ais523 has joined.
22:37:06 <CakeProphet> it's that I have things that I want to allocate upon some iterations of the loop
22:37:17 <CakeProphet> maintain their existence throughout the life of the algorithm
22:37:21 <CakeProphet> and then disappear at the end of the function call.
22:37:25 <ais523> hmm, people here were asking for copies of my papers in the past
22:37:32 <ais523> are they still interested? I forget who they were
22:37:36 -!- augur has quit (Remote host closed the connection).
22:37:45 <fizzie> CakeProphet: But how are you referring to the previously allocated things?
22:38:44 <CakeProphet> fizzie: I have a stack of stacks, to handle parentheses. So when you encounter a parentheses it takes the current stack and hides it away inside the stack-stack, then a new stack needs to be allocated for the nested expression.
22:38:52 <CakeProphet> *parenthesis
22:38:58 <fizzie> CakeProphet: I mean, if you have pointers to them, you can't let them live inside a vector, because they will move around.
22:39:22 <CakeProphet> fizzie: ...they will?
22:39:34 <fizzie> Sure, as the vector grows.
22:39:48 <elliott__> I thought CakeProphet understood vectors ;P
22:39:49 <elliott__> :P
22:39:59 <CakeProphet> ...I do
22:40:00 -!- kmc has quit (Quit: Leaving).
22:40:04 <CakeProphet> I wasn't talking about the vector.
22:40:07 <fizzie> If you have a stack of actual stacks, then they will obviously stay alive without any trickery. If you have stacks of pointers to stacks, then it's a problem.
22:40:11 <elliott__> Then why didn't you know vectors move their elements?
22:40:17 <CakeProphet> fizzie: I have the latter.
22:40:20 <CakeProphet> elliott__: I did...?
22:40:27 <elliott__> <CakeProphet> fizzie: ...they will?
22:40:29 <elliott__> You didn't?
22:40:41 <CakeProphet> I was referring to my pointers to stacks.
22:40:45 <CakeProphet> that are stored elsewhere.
22:40:51 <CakeProphet> they will not suddenly point to different things.
22:40:54 <CakeProphet> for some reason
22:41:03 <fizzie> CakeProphet: Those of course will not; that's the whole problem.
22:41:18 <fizzie> CakeProphet: Because the things they point to will go elsewhere.
22:41:23 <CakeProphet> elliott__: you read me misunderstanding a question.
22:42:18 <fizzie> Anyway, at this point it might be simplest you just kept a list of pointers to free, then. And call delete on the contents manually.
22:42:55 <CakeProphet> yes that's what I was thinking.
22:43:11 <olsner> pretty sure you don't need a stack of stacks to handle parens though
22:43:17 <CakeProphet> the reference voodoo is interesting, but, yeah... things move around in the vector.
22:43:23 <CakeProphet> olsner: no you don't
22:43:32 <CakeProphet> I can just put the ( itself on the stack
22:43:52 <CakeProphet> there is always a different way.
22:44:50 <olsner> where is this reference voodoo you speak of btw?
22:44:52 <CakeProphet> I'm just used to GC languages where adding complexity to your data structure doesn't suddenly create a memory management problem.
22:45:13 <elliott__> It doesn't if you don't use pointers.
22:46:26 <CakeProphet> well I use a pointer for my main stack because STL stacks are silly and don't allow me to re-assign the variable they reside in to a new stack.
22:46:54 <CakeProphet> no = operator
22:47:02 <oerjan> <CakeProphet> fizzie: I have a stack of stacks, to handle parentheses. <-- what in the world don't you simply put the parens on the one single stack for...
22:47:33 <CakeProphet> oerjan: because I haven't changed it to do that as I probably will. again I'm used to a GC language where that would simplify things.
22:48:26 <olsner> would a stack of stacks really simplify things in a gc language?
22:48:57 <CakeProphet> actually, I'm tired tired of defending myself. I'm not a perfect programmer. I'm going away for a while.
22:49:26 <CakeProphet> (nor a particularly good one)
22:49:35 * oerjan read that as slower than light stacks are silly
22:50:16 <elliott__> CakeProphet: you mistake questions and doubts about your design as personal remarks.
22:50:18 <fizzie> oerjan: You have neutrinos in your mind, I take it.
22:50:29 <elliott__> it is called trying to help you
22:50:41 <oerjan> fizzie: billions of them, every second
22:51:49 <CakeProphet> elliott__: I just find it mentally taxing. I take them personally, but they are not personal remarks.
22:51:55 <fizzie> I can share the worst infix-to-prefix Scheme code ever written, if it helps. (Unless I already erased it out of shame. I may have. It was... bad.)
22:51:59 <CakeProphet> I have high expectations for myself. And this channel has high expectations for everything.
22:52:17 <elliott__> nobody will care if you don't use a design we suggest, we're just trying to figure out what it is so we can help you
22:53:03 <oerjan> a stack of stacks is equivalent to a single stack with a special marker, as long as you don't move the substacks
22:53:10 <CakeProphet> well I'm switching to a single stack as it completely resolves all memory management issues.
22:53:27 <fizzie> oerjan: A stack is a stack is a stack.
22:53:40 <CakeProphet> I just found using a special marker gross for some reason.
22:53:45 <oerjan> fizzie: wat
22:53:54 <fizzie> oerjan: Stack!
22:54:33 <CakeProphet> elliott__: also I've been working on this for hours so it's been kind of maddening.
22:55:15 <oerjan> somehow this reminds me of that underload number parser i wrote
22:55:20 <CakeProphet> just part of the learning curve I suppose.
22:55:44 <oerjan> in the process of simplifying it, i ended up with an abstract interpreter
22:56:56 <oerjan> i have this hunch from today's iwc that dmm doesn't like sad endings
22:57:15 <elliott__> oerjan: heh
22:57:21 <elliott__> re abstract interpreter
22:57:24 <elliott__> oerjan: I remember that
22:57:27 <elliott__> I might still have the code, even
22:57:30 <elliott__> it was nice
22:57:35 -!- BeholdMyGlory has quit (Remote host closed the connection).
22:59:40 <elliott__> oerjan: so is IWC still heading towards an ending? :P
23:05:49 <oerjan> elliott__: your guess is as good as mine
23:06:25 <fizzie> Cue "Noooooo my guess is BETTER!"
23:06:58 <oerjan> a new top comment on that reddit thread about synchronization seems to claim gps is sufficient: http://www.reddit.com/r/askscience/comments/kv91b/discussion_thread_promising_ftl_neutrino/c2nl7pf
23:07:34 <oerjan> (i just reloaded as i finally got around to actually reading the tab) :P
23:07:38 <elliott__> someone tell ais523 :P
23:07:45 <oerjan> ais523: ^
23:07:56 * ais523 looks
23:08:04 <ais523> didn't the team themselves say that GPS wasn't sufficient?
23:08:22 <oerjan> by _standard_ methods, yes
23:08:31 <oerjan> but there are ways.
23:08:34 <ais523> ah, OK
23:08:45 <ais523> that would imply that they didn't use GPS because they thought it wasn't sufficient, at least
23:09:09 <elliott__> ais523: click the link :P
23:09:12 <ais523> I did
23:09:18 <elliott__> did you read it? :p
23:09:25 <ais523> I skimmed it
23:09:30 <oerjan> in fact i vaguely recall reading somewhere that the method with time transfer was previously tried, and _not_ sufficient
23:10:24 <oerjan> or maybe it was some other obvious method
23:10:49 <elliott__> ais523: well, it answers your question
23:10:50 <elliott__> well
23:10:52 <elliott__> implied statement thing
23:10:54 <elliott__> i.e. <ais523> that would imply that they didn't use GPS because they thought it wasn't sufficient, at least
23:12:48 <CakeProphet> ==29732== total heap usage: 94 allocs, 94 frees, 21,988 bytes allocated
23:12:49 <CakeProphet> awww yeah
23:13:47 -!- Patashu has joined.
23:14:55 <CakeProphet> memory management is easy when you don't explicitly dynamically allocate anything.
23:17:04 <CakeProphet> okay so what's the best way to die inside a function
23:17:23 <Patashu> make the computer shut down
23:17:32 <Patashu> oh, you meant the most practical?
23:17:43 <elliott__> CakeProphet: abort()? printf + exit?
23:17:51 <CakeProphet> ah, exit, yes.
23:17:55 <fizzie> Throw a type nobody could expect, since the language lets you throw anything.
23:18:08 <CakeProphet> when does one use abort?
23:18:22 <fizzie> E.g. a char* to a string constant is good: throw "ha ha only serious";
23:18:42 <Patashu> okay, youtube's front page layout changed and I can't see where to get to my subscriptions
23:18:54 <elliott__> Try civil war.
23:18:55 -!- ais523 has quit (Remote host closed the connection).
23:18:55 <CakeProphet> elliott__: when does one use abort over exit in an ideal world?
23:19:04 <elliott__> CakeProphet: When the situation is impossible.
23:19:18 <elliott__> It could e.g. start a debugger, even.
23:19:33 <elliott__> Basically abort() should never be called, so put it in places that can never happen.
23:19:34 <CakeProphet> okay so, for example... when you give a function that determines the precedence of an operator something that isn't an operator?
23:19:44 <elliott__> That should probably be a C++ exception, dude.
23:19:49 <CakeProphet> okay.
23:20:24 <fizzie> C++ has its own thing called terminate() that you can use in places where you would abort(). By default it calls abort(), but you can set a terminate handler.
23:20:27 <elliott__> <fizzie> E.g. a char* to a string constant is good: throw "ha ha only serious";
23:20:33 <elliott__> fizzie: Isn't that actually fairly common...
23:20:40 <fizzie> elliott__: Sadly, yes.
23:20:42 <CakeProphet> but now what should I throw without putting too much effort into it.
23:21:03 <fizzie> Integer error codes are another thing.
23:21:10 <CakeProphet> throw -1?
23:21:23 <CakeProphet> currently it's return -1
23:21:36 <CakeProphet> you know what
23:21:38 <CakeProphet> this doesn't matter.
23:21:45 <elliott__> I don't think it's The C++ Way to return an error code.
23:21:58 <elliott__> Just "throw null;" (fizzie: That will segfault, right?)
23:22:34 <fizzie> No, it'll throw a null pointer.
23:22:44 <CakeProphet> yes I want to learn the C++ Way.
23:23:03 <CakeProphet> so that I may forever feel pain. -_;;
23:23:12 <CakeProphet> the zen of suffering.
23:23:31 <elliott__> fizzie: Ah wonderful.
23:23:35 <fizzie> You can always just throw a std::runtime_exception if nothing else.
23:23:38 <elliott__> CakeProphet: I know.
23:23:52 <elliott__> { static int foo; throw &foo; }
23:23:59 <elliott__> Then literally nobody can predictably detect it.
23:24:04 <fizzie> Though you get to decide whether to throw it by pointer or by value.
23:24:21 -!- augur has joined.
23:24:34 <CakeProphet> elliott__: you know that I want to learn the zen of suffering?
23:24:42 <CakeProphet> that's, uh, interesting I gues.
23:24:43 <CakeProphet> +s
23:25:08 <elliott__> I meant "I know what to throw".
23:25:16 <CakeProphet> oh okay.
23:25:19 <CakeProphet> .....no
23:25:27 <fizzie> And if you throw by value, you can catch it by reference.
23:25:30 <CakeProphet> I think runtime_exception is good
23:25:43 <CakeProphet> throw runtime_exception("someone has learned the zen of suffering.")
23:25:45 <CakeProphet> ;
23:25:52 <Patashu> so uh. how do I see my subscrptions on youtube. it's showing me a new page with trending stuff instead
23:25:57 <Patashu> and this time there's no button to change it back
23:26:12 <elliott__> fizzie: Can you have static classes?
23:26:26 <elliott__> { static class foo {}; static foo ohno; throw &ohno; }
23:26:30 <elliott__> CakeProphet: Then nobody can even catch it.
23:27:06 <CakeProphet> oh so I need to pointer-ize it?
23:27:10 <fizzie> What sort of? 'static' is so overused. You can't have a inside-a-function class though.
23:27:13 <Patashu> oh nvm it fixed itself
23:27:23 <CakeProphet> oh just use static?
23:27:33 <fizzie> throw runtime_exception("...") is quite fine.
23:27:39 <elliott__> CakeProphet: Dude it was a joke.
23:27:39 <olsner> fizzie: you can't? pretty sure it works in modern compilers
23:27:41 <CakeProphet> is it the C++ Way
23:27:52 <elliott__> fizzie: I just want an exception nobody can even talk about outside the function.
23:27:54 <CakeProphet> elliott__: dude this is text on irc.
23:27:59 <olsner> pretty sure ... but only iirc
23:28:13 <fizzie> olsner: Hmm, well; maybe. I'm not much of a C++er.
23:28:35 <elliott__> Says fizzie "GLfunge" "JITfunge" "Probably something that isn't funge" "fizzie++" fizzie
23:28:54 <fizzie> GLfunge was C.
23:29:04 <CakeProphet> oh and
23:29:06 <olsner> ISTR having to replace code looking somewhat like that after it got exposed to less modern compilers
23:29:10 <CakeProphet> it's runtime_error by the way. My mistake.
23:29:19 <elliott__> fizzie: Oh, it was?
23:29:29 <elliott__> fizzie: Did it use malloc without casting? Maybe it's C++ too :P
23:30:19 <fizzie> CakeProphet: It is the C++ way to throw Thing("args"), and catch-by-reference a Thing&, and have Thing (ultimately) inherit from std::exception; but if you can't b bothered to type a class, runtime_error is a reasonable substitute.
23:30:44 <CakeProphet> oh good.
23:30:49 <fizzie> (It inherits from exception too.)
23:30:53 <CakeProphet> I can't be bothered with something that isn't going to happen.
23:30:59 <elliott__> Would be good if runtime_error DIDN'T inherit from exception.
23:31:10 <CakeProphet> I'm just trying to impress my professor so that maybe she'll forget that it was 3 days late.
23:31:31 <CakeProphet> by being correct (which is probably better than most), good style, etc.
23:31:35 <CakeProphet> but it's probably all for naught.
23:31:57 <CakeProphet> I AM SO BEHIND ON EVERYTHING AAAAAAH
23:32:10 <CakeProphet> thus must be why people do cocaine.
23:32:12 <CakeProphet> *this
23:33:02 <fizzie> elliott__: I suppose the inner class thing might work; but if not, { struct { long double wrong } guess_my_structure = { 42.0 }; throw guess_my_structure; }
23:33:12 <elliott__> fizzie: Prettey.
23:33:17 <CakeProphet> s.erase(remove_if(s.begin(), s.end(), ::isspace), s.end())
23:33:20 <CakeProphet> okay so the reason this works.
23:33:20 <fizzie> (Plus the missing ;.)
23:33:23 <elliott__> fizzie: Can you catch that with any struct { long double wrong; } got_in;?
23:33:24 <elliott__> Er
23:33:25 <elliott__> m
23:33:30 <elliott__> fizzie: Can you catch that with any struct gotcha { long double wrong; }?
23:33:33 <CakeProphet> is because remove_if is actually shuffle_this_stuff_to_the_back?
23:33:38 <elliott__> Or does it use actual honest-to-god identity equality?
23:33:47 <elliott__> CakeProphet: That sounds questionable.
23:33:56 <CakeProphet> well, the above code is correct...
23:34:00 <CakeProphet> and removes whitespace
23:34:02 <CakeProphet> from the string.
23:34:16 <fizzie> elliott__: I can't remember offhand if identical-definiton structs need to be identical-representation too.
23:34:29 <elliott__> fizzie: Surely the representation is irrelevant in a catch?
23:34:36 <elliott__> I mean, it can't ask whether the representation is right of an arbitrary object.
23:34:48 <CakeProphet> Applies pred to the elements in the range [first,last), and removes those for which it does not return false from the resulting range. The resulting range consists of the elements between first and the iterator returned by the function, which points to the new end of the range.
23:35:01 <fizzie> Oh, right. Yes. I guess it won't catch then.
23:35:04 <fizzie> Maybe.
23:35:33 <fizzie> Guess it depends on the RTTI data that ends in there.
23:35:34 <elliott__> fizzie: I wonder how catch in C++ works. RTTI?
23:35:36 <elliott__> Snap.
23:35:43 <CakeProphet> okay so it doesn't shuffle the whitespace to the back it just defines a new range and the erase is chopping the bounds so to speak.
23:35:47 <CakeProphet> I think.
23:35:59 <fizzie> I was just wondering whether accessing the value would work, assuming it would catch it.
23:35:59 <CakeProphet> the stuff after the end of the range is just garbage.
23:36:32 <fizzie> There is the "common initial subsequence" rule, but theoretically that is only for structs that have ever been part of the same union anywhere.
23:37:03 -!- SimonRC has quit (Ping timeout: 245 seconds).
23:37:59 <CakeProphet> I like how Discrete Math at my university is MATH 1234
23:41:28 <fizzie> You can catch absolutely everything (even anonymous types like that) with catch (...) { /* do something */ } but then you can't access the thrown value in any way. Well, except for re-throwing it.
23:42:40 <CakeProphet> can you unthrow? :P
23:44:04 <fizzie> You can just do nothing, and that'll swallow the exception.
23:44:09 -!- SimonRC has joined.
23:44:28 <olsner> I think he means some kind of retroactive on error resume next
23:44:52 <elliott__> olsner: What an awkward way to describe continuation behaviour.
23:44:54 <CakeProphet> yes, resume from the throw.
23:44:59 <olsner> does VB have resume next?
23:45:03 <Patashu> you mean an enterprisey way!
23:45:04 <Patashu> yes it does
23:45:37 <fizzie> Not portably, but I guess it might be doable on some platforms.
23:45:49 <elliott__> fizzie: You would have to restore the stack.
23:46:01 <elliott__> I guess if you're sure it hasn't been overwritten, which I guess is likely to be true, all you need is the original stack pointer.
23:46:10 <elliott__> And the registers. :/
23:46:28 <elliott__> Basically you need getcontext before the throw :P
23:47:07 <fizzie> I don't think it's exactly specified how much stack unwinding has been done at the catch block time, only after it. But it could well be impossible.
23:47:15 <fizzie> Remember to never throw anything from a destructor.
23:48:02 <fizzie> (If you throw a thing during the stack-unwinding destructor calls of another exception, the runtime will terminate().)
23:51:08 <elliott__> Heh.
23:53:39 <CakeProphet> C++ makes perfect sense if you think about it.
23:53:47 -!- zzo38 has joined.
23:53:59 <elliott__> no
23:54:16 <CakeProphet> elliott__: okay don't think about it THAT much.
23:54:19 <zzo38> Are you sure?
2011-09-30
00:00:52 <CakeProphet> C++ has all the bad abstractions you need to circumvent problems you find with its bad abstractions.
00:01:11 <Patashu> nope C++ is the ideal programming language
00:01:13 <Patashu> like manna from heaven
00:01:23 <Patashu> that's why every language must copy it
00:01:45 <CakeProphet> I've never really seen a language that works like C++
00:01:50 <CakeProphet> so it's not very well-copied.
00:02:00 <zzo38> Patashu: No. You can use different programming language what you do. Such as, you can write a program in C, or whatever
00:03:32 <Patashu> yeah, that's true, it's just the 'look' of C++ that's copied not the semantics
00:20:37 <pikhq> elliott__: @. Log-structed filesystem. Contemplate.
00:21:08 <elliott__> pikhq: I'm not sure what it would buy me, because it's not clear how to do that for arbitrary objects
00:21:19 <elliott__> And I don't ever want to throw away old versions without being asked, so it doesn't help for that
00:21:38 <pikhq> elliott__: The "throw away old versions" thing is a garbage collection pass.
00:21:52 <elliott__> Well, fair enough, but all implementations I know use a fixed-size buffer
00:22:29 <pikhq> Do you ever need to collect the entire heap? No. You need to collect enough to satisfy your next write.
00:24:01 <elliott__> pikhq: Not true; I have to collect the memory heap aggressively to avoid @'s equivalent of swap trhrashing
00:24:52 <pikhq> Yeah, but the disk heap doesn't need anywhere near that level of aggression.
00:25:17 <pikhq> In fact, you desperately want to avoid scanning that.
00:26:39 <elliott__> The question is, where do I start collecting on the disk heap if I need to free up space?
00:26:54 <elliott__> Also open problem: Where do I store the generation info?
00:26:56 <elliott__> And how?
00:27:01 <elliott__> Also: I can't use a copying collector.
00:27:26 <pikhq> Well, obviously; collection would take eons.
00:27:49 <elliott__> More like "you don't have space".
00:28:02 <pikhq> Or you only ever use half the disk.
00:28:04 <pikhq> :)
00:28:06 * oerjan should learn more about _really_ incremental collectors
00:28:21 <oerjan> i assume they exist
00:28:37 <CakeProphet> they must because they're really
00:28:47 <oerjan> obviously.
00:29:17 <elliott__> oerjan: wat
00:29:29 <pikhq> Anyways, stupid concept for a collector: circular log collector. Have two pointers, tail and head. Collect from tail, write to head (as per a standard copying collector).
00:29:40 <pikhq> I have no idea if this is even slightly sane.
00:29:42 <oerjan> well maybe there is some simple reason why they cannot be made
00:29:48 <pikhq> Intuition says "o.O'"
00:30:23 <oerjan> elliott__: i mean essentially a collector which _never_ needs to trace too many objects in one go
00:30:38 <elliott__> Isn't that just an incremental collector :P
00:31:02 <oerjan> i dunno. i might know even less than i thought :P
00:31:23 <oerjan> hm, maybe i'm confusing generational with incremental
00:32:10 <oerjan> as in, generational collectors make things more incremental, but not fully
00:32:16 <oerjan> ghc still has full collections
00:32:58 <elliott__> pikhq: Incidentally, I also need a concurrent garbage collector...
00:33:20 <elliott__> Or at least one that can only pause /some/ tasks (defined as "things that are being scheduled").
00:33:33 <oerjan> elliott__: anyway you say you cannot use a copying collector, but if using only half of your physical space was the price for other efficiency, why not...
00:33:52 <elliott__> oerjan: So you buy a one terabyte disk and can only use five hundred gigs of it?
00:33:54 <elliott__> That won't be very popular.
00:35:53 <oerjan> elliott__: hm, but for images and videos, say, they won't contain pointers much, so you may not need to allocate double space for them...
00:36:05 * oerjan is hypothesizing wildly here
00:36:19 <elliott__> oerjan: copying collector involves two heaps
00:36:31 <elliott__> when you collect, you simply traverse one heap, copy everything referenced to the other, and start using it
00:36:42 <elliott__> how many pointers there are is irrelevant
00:36:50 <elliott__> (you'd probably have a heap per generation)
00:37:12 <oerjan> elliott__: yes. but you could probably have some objects which don't need to be put on those heaps
00:37:29 <elliott__> you mean objects you don't need to collect? ok :P
00:37:31 <CakeProphet> elliott__: reference counting is the best GC
00:37:46 <oerjan> elliott__: well you might collect them if there are no references to them.
00:37:52 <pikhq> CakeProphet: By "best" you mean "worst", right?
00:38:21 <oerjan> basically, just have a small inode-like thing, that is put on the heaps but the rest of the data isn't.
00:38:30 <elliott__> oerjan: that sounds like refcounting...
00:38:35 <elliott__> oerjan: the whole point with copying GC is that you never explicitly "free"
00:38:38 <CakeProphet> if by "right" you mean "wrong" and by "mean" you mean "don't mean"
00:38:41 <elliott__> you never even _look_ at garbage
00:38:45 <CakeProphet> then yes.
00:38:51 <oerjan> elliott__: oh hm right that may be a problem
00:38:57 <pikhq> CakeProphet: Seriously, reference counting is terrible in nearly every way.
00:38:58 <oerjan> ok
00:39:06 <CakeProphet> pikhq: seriously it's the best dude.
00:39:11 <CakeProphet> what could be simpler.
00:39:55 <oerjan> CakeProphet: reference counting requires everything _other_ than the gc to handle it...
00:40:15 <pikhq> oerjan: There is an issue that, in the model he's dealing with, the disk heap is simply the heap; the RAM is functioning exclusively as a disk cache.
00:40:25 <CakeProphet> elliott__: (...I wonder when they'll catch on)
00:40:30 <pikhq> And, plausibly, the first generation or two of the collector.
00:47:41 -!- Jafet has joined.
00:48:13 <elliott__> so
00:48:32 -!- Sgeo has joined.
00:49:29 <CakeProphet> so
00:49:47 -!- Sgeo has quit (Client Quit).
00:49:52 <elliott__> os
00:50:07 -!- Sgeo has joined.
00:50:24 * Sgeo is now using a half-decent IRC client!
00:51:02 <zzo38> What IRC client?
00:51:07 <Sgeo> XChat
00:51:22 <zzo38> O, it is good to you? Or only half?
00:51:33 <Sgeo> It's better than webchat
00:51:55 <pikhq> Now make it emit valid UTF-8. By default it uses a moronic encoding of "If it can be encoded in Windows-1252, use that, otherwise UTF-8".
00:52:08 <Sgeo> o.O
00:52:53 <oerjan> høw hørrible
00:53:21 <zzo38> They are probably all better than webchat
00:54:01 <zzo38> pikhq: Do you know what configuration setting you need for that? If so, write on here, maybe Sgeo will correct it too
00:54:12 -!- SgeoN1 has quit (Quit: Bye).
00:54:59 <elliott__> oerjan: But seriously, I think an incremental collector is basically just doing a normal collection in discrete pieces
00:56:52 <pikhq> zzo38: Should just be the charset configuration option.
00:56:58 <pikhq> The moronic one is called "IRC".
00:57:49 <zzo38> Now I will try to make up a way of using X- fields in cabal file for preparing printout of the program.
01:00:45 -!- derdon has quit (Remote host closed the connection).
01:01:27 <Sgeo> Is the charset configuration option not in the GUI?
01:02:08 <oerjan> by default it's shown in invisible characters
01:04:22 -!- esowiki has joined.
01:04:40 -!- esowiki has joined.
01:05:39 -!- esowiki has joined.
01:05:39 -!- glogbot has joined.
01:06:46 -!- HackEgo has quit (Ping timeout: 255 seconds).
01:07:25 -!- HackEgo has joined.
01:08:00 <olsner> Sgeo: whether you get lynched for using UTF-8 or for not using it differs between networks and channels ...
01:08:17 <Sgeo> o.O
01:08:42 <Sgeo> ‫Will I get lynched for doing this?
01:08:49 <olsner> but a per-channel setting with a global default is probably a lot more useful than a per-network setting
01:09:09 <zzo38> Sgeo: Did you put something before "W"?
01:09:10 <elliott__> UTF-8 is at least ubiquitous on freenode.
01:09:15 <elliott__> zzo38: "?".
01:09:28 <olsner> the good part about the IRC setting is that you at least don't have to care about what other people have as their encoding
01:09:35 <elliott__> olsner: um it does not affect decoding
01:09:36 <elliott__> only encoding
01:09:38 <Sgeo> elliott__, I have no idea if that came before or after
01:09:44 <elliott__> Before.
01:09:51 <elliott__> If you mean the "?".
01:10:04 <Sgeo> I'm pretty sure I typed it after though
01:10:07 * Sgeo is confused
01:10:45 <Sgeo> The following line will be typed as such: Right-to-left-embedding H e l l o ?
01:10:51 <Sgeo> ‫Hello?
01:10:52 <olsner> elliott__: hmm, maybe it doesn't
01:11:02 <zzo38> Maybe I should change name of package/modules to prevent names being conflicted. I could prefix all names of my package by "zzo38-" and name of my module by "Zzo38." that way it won't conflicted? Is that the way it should be done? "Chaos will result if two distinct packages with the same name are installed on the same system, but there is not yet a mechanism for allocating these names."
01:11:23 <elliott__> Sgeo: yeah that was "?Hello".
01:11:33 <elliott__> zzo38: just use the hierarchical model standard
01:11:34 <CakeProphet> sufficient, but not necessary.
01:11:34 <zzo38> Sgeo: To me, is shown a unknown character before the "W" ("H" that time), overlapping the colon
01:11:36 <elliott__> yours should be Control.Monad.Barrier
01:11:45 <elliott__> s/model/module/
01:11:53 <elliott__> http://www.haskell.org/haskellwiki/Hierarchical_module_names
01:11:56 <pikhq> olsner: The "IRC" setting reads "fuck up everyone who is not omitting this fucked up guaranteed-to-be-broken 'standard'"
01:12:05 <zzo38> elliott_: OK. But what happen if someone else wants to make up a different barrier monads implementation?
01:12:26 <olsner> pikhq: :)
01:12:39 <pikhq> It fucks up everyone using *either* Windows-1252 or UTF-8.
01:13:05 <pikhq> And the scheme makes EBCDIC look reasonable.
01:13:53 <elliott__> zzo38: Then dependencies sort it out, and the user "ghc-pkg hide"s the one they don't want to use by default.
01:14:01 <zzo38> elliott__: That article does not describe package names, though. How to do with package names?
01:14:10 <elliott__> If a package depends on two packages, that each use a different barrier monad implementation, they're fucked :)
01:14:15 <elliott__> zzo38: Lowercase, dashes to separate, is the standard
01:14:18 <elliott__> So barrier-monad
01:14:27 <elliott__> There's no real namespacing, but it's no big deal in practice
01:14:53 <zzo38> elliott__: But what if someone make a different implementation? It is not a problem with module names because you can hide it, but package names doesn't do that!
01:15:10 <zzo38> OK I can call the module "Control.Monad.Barrier"
01:15:19 <zzo38> It doesn't help with package name though
01:15:56 <elliott__> zzo38: Well, then it breaks. But there's no place to get packages but Hackage, and it wouldn't allow a duplicate name :-)
01:16:59 <zzo38> OK.
01:19:30 -!- Sgeo has quit (Ping timeout: 248 seconds).
01:19:52 -!- Sgeo has joined.
01:21:23 <zzo38> Should I fill in "Build-depends"?
01:22:08 <zzo38> It tell me lack of 'description' and 'maintainer' field cause trouble when distributing the package, but the message about Hackage rejecting the package is removed now.
01:22:25 <elliott__> You must fill in build-depends completely with proper version information or the package will fail to build.
01:22:51 <zzo38> Is there a way to parse the source file and check which packages it uses?
01:22:57 <zzo38> By automatically?
01:24:32 <elliott__> No.
01:24:41 <elliott__> You can see in ghci thought,
01:24:43 <elliott__> ghci Foo
01:24:47 <elliott__> and see which packages it loads
01:24:48 <elliott__> BUT
01:24:52 <elliott__> That includes all the dependencies too
01:24:57 <elliott__> And you should only list packages you use directly in build-depends
01:25:03 <elliott__> It's good though, because you should have to think about the versions you're using
01:25:21 <zzo38> The only one I import directly is the Control.Monad module
01:25:45 <elliott__> Then
01:26:19 <elliott__> build-depends: base == 4.*
01:26:20 <elliott__> should do.
01:26:24 <zzo38> OK
01:27:13 -!- kmc_ has joined.
01:29:37 <zzo38> So, do I put it in a file from the package root Control/Monad/Barrier.lhs is that the correct way to do it?
01:30:23 <elliott__> Sure. You can specify source directories in the cabal file
01:30:35 <elliott__> So if you wanted you could have src/Control/Monad/Barrier.lhs.
01:30:39 -!- Gregor` has joined.
01:30:42 <zzo38> But is that the way to do it if the module is named Control.Monad.Barrier
01:30:43 <elliott__> hi Gregor`
01:31:22 <Gregor`> What the blehhuh
01:31:24 <Gregor`> Nothing was down except for my bouncer >_O
01:31:46 -!- Sgeo has quit (Ping timeout: 248 seconds).
01:32:02 -!- Gregor` has changed nick to Gregor.
01:32:07 -!- Sgeo has joined.
01:32:16 <Gregor> AND some jerk squatted my name :P
01:32:57 <elliott__> lol
01:32:58 -!- kmc_ has changed nick to kmc.
01:32:59 <elliott__> did you ghost him
01:33:04 <Gregor> Hell yeah
01:33:17 <zzo38> I see "hs-source-dirs: directory list (default: .) Root directories for the module hierarchy." So does that mean Control/Monad/Barrier.lhs is correct? Or not?
01:33:23 <elliott__> zzo38: Yes
01:33:25 <elliott__> It's correct
01:33:28 <zzo38> OK thanks
01:34:49 <zzo38> Does it matter the name of the .cabal file or the name of the directory where the .cabal file is stored?
01:36:05 <zzo38> Is this a correct file? http://sprunge.us/XGDP
01:37:40 <elliott__> It should be called <package>.cabal
01:37:44 <elliott__> You have a Setup.lhs, right?
01:37:47 <elliott__> Or .hs
01:37:47 <elliott__> Whatever
01:38:00 <elliott__> You should probably remove the commented out lines :P
01:38:15 <elliott__> Oh, and it should be in your root directory to
01:38:16 <elliott__> too
01:38:36 <zzo38> It created the Setup.hs file by itself
01:38:47 <zzo38> OK now it is called barrier-monad.cabal
01:39:05 <zzo38> It is in the package root.
01:39:17 <zzo38> Does the name of the package root directory matter?
01:39:43 <zzo38> So, the package root now contains files barrier-monad.cabal example.lhs Setup.hs and the directory Control
01:40:02 <zzo38> Is that correct?
01:40:12 <zzo38> Should examples be placed in its own directory?
01:40:53 <elliott__> Doesn't really matter
01:41:07 <zzo38> OK I will leave it how it is.
01:42:05 <zzo38> The "X-Printout-" are not for any existing program yet, so I can change their names or syntax if necessary. Do you have better ideas of their names or format?
01:45:00 <elliott__> dunno
01:47:47 <zzo38> My idea is that "Mode" specifies what mode is used for preparing printout, such as Plain TeX, LaTeX, HTML, or whatever; "Main" means main files (for TeX, it is the file(s) given directly to TeX); "Others" means other file from the package needed to work the printout; and "Require" mean files not in this package that are needed in addition to what Mode/Main/Others specifies.
01:48:06 <zzo38> Would different names for these fields be better, or different syntax of the values of these fields?
01:51:30 -!- Sgeo has quit (Ping timeout: 248 seconds).
01:51:51 -!- Sgeo has joined.
02:03:46 -!- Sgeo has quit (Ping timeout: 248 seconds).
02:04:26 -!- Sgeo has joined.
02:04:50 -!- shachaf has quit (Remote host closed the connection).
02:08:34 -!- yorick has quit (Ping timeout: 276 seconds).
02:12:18 -!- Madoka-Kaname has quit (Ping timeout: 244 seconds).
02:13:07 -!- Madoka-Kaname has joined.
02:13:07 -!- Madoka-Kaname has quit (Changing host).
02:13:07 -!- Madoka-Kaname has joined.
02:13:40 <zzo38> Now what do I do, do I make a file called barrier-monad-0.1.tar.gz of all the files and subdirectories from the package root?
02:16:09 -!- SgeoN1 has joined.
02:16:35 <elliott__> Sure, then upload to Hackage
02:16:45 <SgeoN1> I think XChat keeps getting swapped out of memory or something. Or does it not work like that?
02:18:10 -!- Sgeo has quit (Ping timeout: 248 seconds).
02:18:46 -!- Sgeo has joined.
02:23:11 <zzo38> Oops I require a password.
02:24:43 <elliott__> For what?
02:26:07 <elliott__> zzo38: ?
02:26:24 <zzo38> Oops now I tried with -c and it says "could not extract barrier-monad-0.1 directory from barrier-monad-0.1.tar.gz" OK, I will fix that too
02:26:50 <elliott__> What did you need a password for?
02:27:02 <zzo38> The "cabal upload" ask for password.
02:27:25 <elliott__> zzo38: You need a Hackage account, it's just a matter of sending an email
02:27:48 <zzo38> And then what is password? Do they make up a random password?
02:28:07 <zzo38> Or is that my job?
02:28:57 <elliott__> from the looks of http://hackage.haskell.org/packages/accounts.html they'll assign you a random password
02:29:08 <elliott__> but you can change it
02:30:07 -!- Sgeo has quit (Ping timeout: 260 seconds).
02:30:41 -!- Sgeo has joined.
02:31:05 <SgeoN1> Fuck XChat in the ass
02:31:33 <elliott__> ok
02:31:37 <SgeoN1> Or maybe it's the computer
02:31:49 <monqy> ok
02:32:16 <SgeoN1> Maybe I should use Quassel, with the core elsewhere.
02:32:19 <monqy> ok
02:32:25 <SgeoN1> ok
02:32:56 <elliott__> ok
02:33:54 -!- Sgeo has quit (Client Quit).
02:34:52 <SgeoN1> Quassel should handle disconnects with some grace, right?
02:41:58 <CakeProphet> uh... where is string defined in C++ stdlibn
02:42:11 <CakeProphet> I'm including string..... but it's still having issues.
02:42:58 <CakeProphet> oh nevermind...
02:57:59 <zzo38> Would any barrier monads have instances of MonadPlus or MonadGroup or MonadFix? If so, what would be the restrictions on the front and back type to be able to make such instances? I do not think it can be MonadPlus, because it does not satify the MonadPlus laws.
02:58:42 <zzo38> And MonadZip?
03:09:50 <SgeoN1> What are barrier monads?
03:10:04 <SgeoN1> Is zzo38 doing something awesome?
03:10:24 <SgeoN1> zzo38, are you doing something awesome?
03:11:20 <oerjan> something similar to data Barrier front back t = Any t | Barrier front (back -> Barrier front back t) , iirc
03:12:16 <oerjan> is there a transformer version? it might be likely to inherit MonadPlus from its inner monad
03:12:30 <oerjan> i don't really know much about MonadGroup or MonadZip
03:13:02 <oerjan> (i may or may not have front and back switched)
03:13:12 <zzo38> You have front and back correct.
03:13:31 <zzo38> There is no transformer version. If there can be, how to make transformer version?
03:13:37 <oerjan> lessee
03:14:47 <oerjan> something like data BarrierT front back m t = Any (m t) | Barrier m (front, back -> Barrier front back m t)
03:14:50 <oerjan> er
03:15:04 <oerjan> something like data BarrierT front back m t = AnyT (m t) | BarrierT m (front, back -> BarrierT front back m t)
03:15:18 <oerjan> hm still not right
03:15:25 <oerjan> something like data BarrierT front back m t = AnyT (m t) | BarrierT (m (front, back -> BarrierT front back m t))
03:15:43 <zzo38> I think you also need parentheses in the final (m t)
03:15:48 <CakeProphet> what's the purpose of the tuple?
03:15:49 <zzo38> Or not.
03:15:54 <zzo38> No, you don't need.
03:15:59 <oerjan> indeed not.
03:16:36 <oerjan> well the tuple is to get out two values from the inner monad, although it might be better to define another data type
03:17:22 <oerjan> and it is not entirely clear to me exactly where the intervening m's should be
03:17:47 <zzo38> Nor to me; that is one reason I did not define the transformer version
03:18:30 <oerjan> hm maybe...
03:18:44 <CakeProphet> well, basically it just needs to work so that when m = Identity it's more or less equivalent to Barrier right?
03:18:58 <zzo38> But I suppose a transformer version could possibly inherit MonadPlus from its inner monad.
03:19:01 <oerjan> data BarrierT front back m t = AnyT t | BarrierT front (back -> m (BarrierT front back m t))
03:19:30 <oerjan> then you don't need the tuple, although you might want to surround with an m when using it
03:20:19 <oerjan> type BarrierT' front back m t = m (BarrierT front back m t)
03:21:11 <zzo38> OK. So, is that the best way, now?
03:21:12 <oerjan> and which of BarrierT and BarrierT' should be the fundamental one is not entirely clear (except that the fundamental one should be data, not type, for instance reasons)
03:22:06 <elliott__> oerjan: can you do lift with BarrierT?
03:22:07 <elliott__> I am not sure
03:22:12 <zzo38> Is this difficult to figure out perfectly?
03:22:12 <elliott__> you don't have front
03:22:42 <oerjan> oh right, so lift means BarrierT' should be fundamental
03:22:59 <elliott__> unless you have (Monoid front)
03:23:05 <elliott__> in which case you can use mempty
03:23:08 <elliott__> zzo38: do you?
03:23:15 <oerjan> i don't think that's the intention
03:23:17 <elliott__> oerjan: oh uh you can't really do lift with BarrierT' either
03:23:22 <elliott__> can you
03:23:27 <elliott__> oh
03:23:28 <elliott__> AnyT
03:23:28 <elliott__> right
03:23:48 <oerjan> should be just applying liftM AnyT in the right spot
03:24:03 <zzo38> elliott__: Do I what?
03:24:12 <elliott__> have (Monoid front)
03:24:56 <zzo38> elliott__: The front type can be any type, so it might or might not be a monoid.
03:25:27 <elliott__> right
03:26:20 <zzo38> What is this "lift"?
03:27:03 <oerjan> data BarrierT' front back m t = AnyT t | BarrierT' front (back -> BarrierT front back m t); newtype BarrierT front back m t = BarrierT (m (BarrierT' front back m t))
03:27:11 <oerjan> @src MonadTrans
03:27:11 <lambdabot> Source not found. Sorry.
03:27:13 <elliott__> zzo38: MonadTrans
03:27:15 <oerjan> bah
03:27:42 <elliott__> (you must add to build-depends transformers == 0.2.*)
03:27:49 <CakeProphet> Barrier kind of resembles maybe-or-state to me.
03:27:51 <elliott__> (and import Control.Monad.Trans)
03:28:20 <zzo38> OK, so those are the package and modules. I will look at them
03:29:11 <oerjan> lift x = BarrierT (liftM AnyT x)
03:29:14 <CakeProphet> except there's no rank-2-ness
03:29:25 <oerjan> i think
03:30:04 <elliott__> oerjan: Sounds right
03:30:15 <zzo38> CakeProphet: It does? Well, then that might be some use? Another thing it kind of resembles to me, is the generator functions in Javascript which is why the "yield" function is called "yield".
03:30:41 <oerjan> what about iterators or that kind of stuff
03:30:54 <oerjan> althought they mix other things into it
03:35:52 <zzo38> Iterators?
03:36:03 <oerjan> er, *iteratees
03:36:36 <zzo38> Iteratees?
03:36:43 <elliott__> http://hackage.haskell.org/packages/archive/iterIO/0.2/doc/html/Data-IterIO.html is a good introduction
03:36:52 <elliott__> or http://okmij.org/ftp/Streams.html#iteratee
03:41:11 <zzo38> Yes there is something similar, although it is different
03:41:21 <zzo38> But I can see the similarity.
03:44:58 -!- copumpkin has joined.
03:46:31 -!- HackEgo has quit (Ping timeout: 255 seconds).
03:46:42 -!- HackEgo has joined.
04:08:00 -!- fungot has quit (*.net *.split).
04:08:00 -!- Zuu has quit (*.net *.split).
04:08:01 -!- HackEgo has quit (*.net *.split).
04:08:01 -!- copumpkin has quit (*.net *.split).
04:08:01 -!- Zetro has quit (*.net *.split).
04:08:02 -!- aloril has quit (*.net *.split).
04:08:02 -!- cheater has quit (*.net *.split).
04:08:02 -!- Patashu has quit (*.net *.split).
04:08:03 -!- Deewiant has quit (*.net *.split).
04:08:03 -!- quintopia has quit (*.net *.split).
04:08:03 -!- fizzie has quit (*.net *.split).
04:08:04 -!- yiyus has quit (*.net *.split).
04:08:04 -!- lambdabot has quit (*.net *.split).
04:08:05 -!- MichaelBurge has quit (*.net *.split).
04:08:05 -!- myndzi\ has quit (*.net *.split).
04:08:05 -!- FireFly has quit (*.net *.split).
04:08:05 -!- chickenzilla has quit (*.net *.split).
04:08:05 -!- Madoka-Kaname has quit (*.net *.split).
04:08:06 -!- zzo38 has quit (*.net *.split).
04:08:06 -!- pikhq has quit (*.net *.split).
04:08:06 -!- oerjan has quit (*.net *.split).
04:08:07 -!- Gregor has quit (*.net *.split).
04:08:08 -!- lifthrasiir has quit (*.net *.split).
04:08:08 -!- atehwa has quit (*.net *.split).
04:08:08 -!- coppro has quit (*.net *.split).
04:08:27 <elliott__> help
04:08:29 <elliott__> CakeProphet: help
04:11:25 -!- HackEgo has joined.
04:11:25 -!- copumpkin has joined.
04:11:25 -!- Madoka-Kaname has joined.
04:11:25 -!- Gregor has joined.
04:11:25 -!- zzo38 has joined.
04:11:25 -!- Patashu has joined.
04:11:25 -!- pikhq has joined.
04:11:25 -!- lambdabot has joined.
04:11:25 -!- oerjan has joined.
04:11:25 -!- Zuu has joined.
04:11:25 -!- fungot has joined.
04:11:25 -!- Deewiant has joined.
04:11:25 -!- lifthrasiir has joined.
04:11:25 -!- MichaelBurge has joined.
04:11:25 -!- myndzi\ has joined.
04:11:25 -!- quintopia has joined.
04:11:25 -!- atehwa has joined.
04:11:25 -!- FireFly has joined.
04:11:25 -!- aloril has joined.
04:11:25 -!- cheater has joined.
04:11:25 -!- fizzie has joined.
04:11:25 -!- chickenzilla has joined.
04:11:25 -!- yiyus has joined.
04:11:25 -!- coppro has joined.
04:12:47 -!- Zetro has joined.
04:13:57 -!- GreaseMonkey has joined.
04:23:07 -!- copumpkin has quit (Ping timeout: 276 seconds).
04:29:07 <zzo38>
04:29:36 <zzo38> Now, would there be any such things as cobarrier comonad?
04:32:20 <oerjan> heh
04:32:57 <oerjan> well iirc there should be a way to get one value out of it...
04:33:01 -!- SgeoN1 has quit (Read error: Connection reset by peer).
04:33:19 -!- SgeoN1 has joined.
04:34:21 <oerjan> would CoBarrier f b t = CoAny t | CoBarrier (t,f) (back -> CoBarrier f b t) work?
04:34:39 <oerjan> hm doesn't really seem symmetric to Barrier
04:35:07 <zzo38> Yes you are right, it doesn't seem symmetric to Barrier
04:35:08 <elliott__> Conomad is like, when two nomads go around the desert together.
04:35:14 <elliott__> You say, oh Jeff? He's my conomad.
04:35:26 <elliott__> And some people are silly and say con omad but honestly.
04:35:29 <elliott__> Conomads. Yes.
04:35:38 <oerjan> oh hm maybe the | should dualize to (,)
04:35:43 <elliott__> I bet oerjan wishes he has my analytical mind.
04:36:07 <elliott__> oerjan: w a -> w (w a), get writing
04:36:12 <elliott__> either that or (w a -> b) -> w a -> w b
04:36:14 <elliott__> and it has to be a functor
04:36:25 <elliott__> oh wait
04:36:28 <elliott__> you also need w a -> a
04:36:30 <elliott__> but you have that already
04:36:50 <elliott__> (http://hackage.haskell.org/packages/archive/comonad/1.1.1.1/doc/html/Control-Comonad.html)
04:36:57 <oerjan> would CoBarrier f b t = CoBarrier t (Either f (b -> CoBarrier f b t))
04:37:17 <elliott__> dunno, define those :P
04:37:29 <zzo38> I did read somewhere that comonads correspond to product types (such as (,)) as monads correspond to sum types (such as Either)
04:37:49 <oerjan> yeah so i tried switching that somehow
04:38:30 <oerjan> CoBarrier f b t = CoBarrier t (Either f (CoBarrier f b t -> b))
04:40:46 <oerjan> that last one does sort of dualize every piece of it
04:41:30 <elliott__> define the methods :P
04:41:31 <zzo38> I can see that.
04:41:41 <elliott__> i'm not sure you can fmap that
04:41:43 <oerjan> but i don't really understand comonads :P
04:41:46 <elliott__> at all
04:41:50 <elliott__> it must be a proper functor
04:41:56 <elliott__> (yes you can just do it to the single "t" there but that's cheating)
04:42:14 <oerjan> oh right. must have the -> CoBarrier ... then
04:43:43 <oerjan> that's pretty clearly a Functor, anyway
04:44:39 <elliott__> oerjan: I wish we had a typeclass tower up to Monad that had no duplication
04:44:44 <elliott__> like, you can implement fmap with the Applicative methods
04:44:49 <elliott__> and you can implement everything above with the monad methods
04:44:56 <oerjan> everyone wishes that, elliott__
04:44:59 <elliott__> it would be cool if we had a tower with no duplication at all
04:45:00 <elliott__> oerjan: lol
04:45:07 <elliott__> oerjan: hmm I guess fmap => join provides that
04:45:09 <elliott__> but it's not a very strong tower
04:45:23 <elliott__> um wait no
04:45:26 <elliott__> fmap => (pure, join) provides that
04:47:05 <oerjan> CoBarrier t (Left f) could go to CoBarrier (CoBarrier t (Left f)) (Left f)
04:47:27 <elliott__> duplicate = extend id
04:47:27 <elliott__> fmap (fmap f) . duplicate = duplicate . fmap f
04:47:27 <elliott__> that's the law, if you choose that route :P
04:47:33 <elliott__> extend :: (w a -> b) -> w a -> w b
04:47:35 <elliott__> seems easier because it's just
04:47:37 <elliott__> extend f = fmap f . duplicate
04:47:41 <elliott__> and
04:47:41 <elliott__> duplicate = extend id
04:47:46 * oerjan gives up immediately
04:47:49 <elliott__> oerjan: :D
04:47:50 <elliott__> sorry
04:47:54 <elliott__> what i f i shutted up what THEN
04:48:22 <oerjan> doubtful. as i said i don't understand comonads.
04:48:34 <elliott__> lol
04:50:22 <monqy> i knew about comonads and their laws and what they do but i just today learned why they're amazing
04:50:30 <monqy> and i want to use them everywhere now
04:50:45 <elliott__> monqy: go on
04:50:54 <monqy> i'm bad at articulating things!!!
04:51:03 <monqy> like why i think comonads are amazing
04:51:35 <monqy> oh right it's i figured out what extend is for
04:51:42 <monqy> and then it all made sense
04:51:52 <elliott__> what is it for?
04:52:08 <elliott__> ([a] -> b) -> [a] -> [b]... the question is I guess, how do you decide which groups of a to take...
04:52:23 <elliott__> looks like duplicate = tails is the instance
04:52:30 <elliott__> so it's \f -> map f . tails
04:52:35 <elliott__> > map f (tails [a,b,c])
04:52:36 <lambdabot> Ambiguous type variable `b' in the constraints:
04:52:36 <lambdabot> `GHC.Show.Show b'
04:52:36 <lambdabot> a...
04:52:39 <elliott__> >:(
04:52:41 <elliott__> > map f (tails [a,b,c]) :: [Expr]
04:52:42 <lambdabot> [f [a,b,c],f [b,c],f [c],f []]
04:52:44 <elliott__> aha
04:52:55 <elliott__> monqy: I still don't get it :)
04:54:08 <oerjan> is [] a comonad?
04:54:11 <monqy> no
04:54:19 <oerjan> that might explain it :P
04:54:26 <monqy> it's an instance of Extend though
04:54:33 <oerjan> oh
04:55:21 <elliott__> it's a coalmostmonad :P
04:55:22 <zzo38> [] cannot be a comonad because there is no extract
04:55:35 <oerjan> oh right
04:55:52 <oerjan> are nonempty lists a comonad, then?
04:56:20 <monqy> yes
04:56:26 <monqy> or uh
04:56:29 <monqy> yes
04:56:45 <monqy> i was looking at the wrong thing when i was checking but then i looked at the right thing and it was there too
04:56:56 <oerjan> both monad and comonad...
04:57:05 <elliott__> monqy: what would codo syntax look like?
04:57:15 <monqy> ?????
04:57:26 <elliott__> foo :: NonEmpty a -> NonEmpty (); foo xs = codo xs' <- xs; map (const ()) xs'
04:57:27 <elliott__> ? :P
04:57:41 <monqy> oh, codo
04:57:42 <elliott__> turns into: extend (\xs' -> map (const () xs') xs
04:57:45 <elliott__> I just invented that
04:59:11 <oerjan> [5] <- x; [1,3] <- y; duplicate [x,y] codo
05:00:04 <elliott__> oerjan: pretty............
05:00:31 <oerjan> in einen alternativen Universum, it might even make sense
05:00:37 <oerjan> *einem
05:08:13 -!- Vorpal has joined.
05:13:29 <elliott__> `quote in einem
05:13:32 <HackEgo> 27) IN EINEM ALTERNATIVEN UNIVERSUM (WO DIE NAZIS WON): <ehird> So kann ich nur schliessen, dass es falsch ist, oder die Welt ist vollig BONKERS. Gegrusset seist du der Fuhrer Hitler!
05:15:56 <zzo38> Yes, I tried it, there is Extend for lists
05:16:35 -!- copumpkin has joined.
05:18:38 <zzo38> And, codo notation works. If you have RebindableSyntax you can use let { (>>=) = (=>>) } in (do { ... })
05:19:13 <monqy> a few minutes ago i tried actually using comonads but couldn't think of anything that wasn't just the same as monads, for which i am currently blaming myself
05:19:34 <elliott__> lol
05:21:02 <oerjan> :t (=>>)
05:21:02 <lambdabot> Not in scope: `=>>'
05:21:09 <oerjan> fancy that.
05:21:51 <monqy> Extend w => w a -> (w a -> b) -> w b
05:22:39 <oerjan> is there something similar to >> =
05:22:41 <oerjan> *?
05:22:53 <elliott__> w a -> b -> w b I guess
05:23:09 <elliott__> w >< x = w =>> const x
05:23:28 <oerjan> ok
05:23:37 <monqy> :t (<$)
05:23:38 <lambdabot> forall a (f :: * -> *) b. (Functor f) => a -> f b -> f a
05:23:41 <monqy> ???
05:23:49 <elliott__> that too :P
05:24:04 <monqy> puzzling over why ($>) doesn't exist
05:24:24 <zzo38> The let { (>>=) = (=>>) } does not always work, it is not working like do-notation.
05:24:57 <monqy> you need to do more than that to get it to work...
05:26:47 <oerjan> :t flip
05:26:47 <lambdabot> forall (f :: * -> *) a b. (Functor f) => f (a -> b) -> a -> f b
05:26:56 <oerjan> oh hm
05:27:01 <oerjan> :t (*>)
05:27:02 <lambdabot> forall (f :: * -> *) a b. (Applicative f) => f a -> f b -> f b
05:27:24 <elliott__> monqy: hmm can you do "w a -> w b -> w b" with comonads?
05:27:26 <elliott__> I think not
05:27:46 -!- Ngevd has joined.
05:28:03 <elliott__> monqy: but I'm not sure
05:28:12 <Ngevd> Morning!
05:28:19 <elliott__> monqy: oh you can do "w a -> b -> w b" though
05:28:39 <monqy> what does w a -> w b -> w b do
05:28:43 <elliott__> doesn't
05:28:45 <elliott__> codo { w } === w
05:28:45 <elliott__> codo { x <- w; w' } === w =>> \x -> w'
05:28:45 <elliott__> codo { w; w' } === w =>> \_ -> w'
05:28:48 <elliott__> there we are, codo
05:28:58 <elliott__> ...
05:28:59 <elliott__> codo { w } === w
05:28:59 <elliott__> codo { x <- w; w' } === w =>> \x -> codo w'
05:28:59 <elliott__> codo { w; w' } === codo { _ <- w; w' }
05:29:00 <elliott__> tada
05:29:10 <monqy> but it's certainly possible to make things that are w a -> w b -> w b, no?
05:29:13 <elliott__> sure
05:29:15 <monqy> just not the one you were thinking of
05:29:19 <elliott__> monqy: now your goal is... define OI comonad...
05:29:25 <elliott__> where purity ... is really hard
05:29:25 <monqy> oh dear, oi
05:29:29 <elliott__> but side-effects fall out like butter
05:29:49 <oerjan> elliott__: purity is never hard in a comonad
05:29:56 <elliott__> yes it is
05:30:00 <elliott__> (a -> w a) is hard
05:30:11 <oerjan> hm
05:30:15 <monqy> that's why you write the same thing as (w a -> a)
05:30:21 <zzo38> Possibly you can define OI comonad in JavaScript? Is it?
05:30:22 <monqy> comonad zen
05:30:31 <zzo38> But I don't think so in Haskell
05:32:21 <zzo38> I invented Shadow comonad and found this: do { x <- [1,10]; y <- [99,999]; return (x,y); } = [(1,99),(1,999),(10,99),(10,999)] let { (>>=) = (=>>) } in do { x <- Shadow 1 10; y <- Shadow 99 999; (extract x, extract y); } = Shadow (Shadow (1,99) (1,999)) (Shadow (10,99) (10,999))
05:32:30 <monqy> what is shadow
05:33:16 <zzo38> It is a comonad with a normal value and a shadow value (with the same type) in every computation.
05:33:29 <monqy> shadow value?
05:33:49 <monqy> like a more specialised version of the ((,) a) comonad?
05:33:50 <elliott__> sounds like a tuple
05:33:54 <monqy> yes
05:34:12 <zzo38> monqy: Yes, there is a similarity.
05:36:34 <zzo38> If you have a function f (Shadow x y) = x then (=>> f) switches the normal value (y) with the shadow value (x)
05:36:49 <zzo38> (The value on right is the normal value, same as the ((,) a) comonad)
05:37:35 <zzo38> What is the use of this comonad?
05:38:01 <zzo38> I just made it up because I can, and check the comonad laws are working OK.
05:38:02 <monqy> which one
05:38:20 <zzo38> I mean, what is the use of the Shadow comonad that I just made up a few minutes ago?
05:38:46 -!- oerjan has quit (Quit: Good night).
05:43:49 <Ngevd> BYOB is ridiculously weakly typed
05:45:08 <elliott__> more like b your own b
05:47:20 <Ngevd> That's... what the y and o stand for
05:47:45 <monqy> is this that blocks thing (what's that)
05:48:04 <Ngevd> Yes
05:48:15 -!- Jafet has quit (Quit: Leaving.).
05:49:40 <Ngevd> That's what the second b stands for
05:50:03 <monqy> visual programminglanugage for little kids was it
05:50:11 <Ngevd> WRONG
05:50:16 <Ngevd> BUT CLOSE
05:50:24 <monqy> visual programminglanguage for taneb
05:51:00 <Ngevd> It's a derivative of Scratch (which is visual programming language for little kids) designed to teach people MORE ADVANCED PROGRAMMING FEATURES such as first-class functions
05:51:08 <Ngevd> Or indeed functions
05:51:35 <monqy> =/
05:51:49 <elliott__> "=/" --monqy
05:52:11 <monqy> i'm inferring the little kids one is teaching little kids how to do things with mutable variables and dumb control structures which is bad!!!
05:52:58 <Ngevd> It's better than scaring them of programming FOREVER with lots of scary text
05:53:10 <monqy> then: don't lots of scary text
05:53:28 <monqy> do it with: pictures and metaphor
05:53:32 <monqy> and simple examples
05:53:34 <monqy> and baby steps
05:54:18 <Ngevd> Scratch is also one of the hardest programming languages to make a mistake on
05:54:25 <monqy> o?
05:54:26 <monqy> h
05:54:28 <elliott__> really?
05:54:32 <elliott__> i'll switch to it then
05:54:34 <elliott__> if it really makes bugs hard
05:54:37 <monqy> I'm SKEPTICAL
05:55:25 <Ngevd> It makes bugs hard AT THE COST OF MAKING ALMOST EVERYTHING HARD
05:55:37 <elliott__> ah.
05:55:40 <fizzie> And $ ./testlm-disk.pl ../twungot/{tokens,model}.bin.irc 5 do it with
05:55:40 <fizzie> do it with syntax-case, to have more fun in life when you're not
05:55:40 <fizzie> do it with c, less so with c++, or plain c.
05:55:40 <fizzie> do it with syntax-rules. could you start it up once. it was probably unworkable... i didn't really think "hang on, i'll explain in a few years"
05:55:44 <fizzie> do it with your own. :( now, i just did
05:55:46 <fizzie> do it with oklopol. computed jumps... the topic. it will make sense?
05:55:58 <Ngevd> Scratch doesn't even have custom functions
05:56:22 -!- elliott__ has set topic: computed jumps... the topic. | Esolang event @ Hel/Finland on 3.10.2011: https://wiki.helsinki.fi/display/lambda/esoteeriset+ohjelmointikielet | god bless haskell america | 12345678!&^ | http://codu.org/logs/_esoteric/.
05:56:37 <Ngevd> Or data structures other than a string, number, or list of strings and numbers
05:57:23 <Ngevd> I once made a brainfuck interpreter in Scratch
05:58:41 <monqy> fizzie: poetry
05:59:15 <elliott__> fizzie: How about "qwerty"?
05:59:33 <fizzie> Esolangers do it with: http://sprunge.us/FBcc
06:00:13 <zzo38> And brainfuck doesn't have any data types either, other than cell type, and also doesn't even have custom functions.
06:00:49 <fizzie> elliott__: qwerty what?
06:00:54 <elliott__> fizzie: Lines starting "qwerty".
06:02:35 <fizzie> qwerty. i see where you are from the pflog0 interface. what point are you trying to load other fingerprints too
06:02:38 <fizzie> qwerty keyboard back in my windows days starts by explaining its name, UNK,
06:02:41 <fizzie> qwerty memorized in 20 different timezones when i'm UNK underwater UNK before diving. but
06:02:44 <fizzie> qwerty, from all nodes that can end a sentence with that then.
06:02:46 <fizzie> qwerty all day at work here.
06:03:08 <fizzie> UNK is what the Perl script calls fnord.
06:03:33 <monqy> my favoiurtes are still the results from plain "do it with"
06:04:18 <elliott__> fizzie: what about... starting with UNK...
06:04:20 <elliott__> starting with UNK UNK UNK...
06:04:25 <monqy> unk unk unk
06:05:24 <fizzie> UNK UNK UNK ()
06:05:24 <fizzie> UNK UNK UNK f UNK
06:05:24 <fizzie> UNK UNK UNK UNK UNK UNK +))(if( t UNK d UNK t UNK
06:05:24 <fizzie> UNK UNK UNK
06:05:24 <fizzie> UNK UNK UNK UNK UNK, mutta suurin UNK on syntynyt UNK UNK,
06:05:34 <fizzie> That last bit is in Finnish.
06:05:58 <fizzie> "..., but the largest UNK was born UNK UNK"
06:05:58 <monqy> unk problems
06:06:26 <elliott__> the largest unk was indeed born unk unk.
06:06:33 <monqy> unk
06:07:15 <fizzie> UNK UNK UNK -lgcc_s -lgcc UNK -lm -lpthread -lz -ldl -lgcc_s -lgcc -lc -lgcc_s -lgcc UNK -lm -lpthread -lz -ldl -lgcc_s -lgcc -lc -lgcc_s -lgcc UNK -lm -lpthread -lz -ldl -lgcc_s -lgcc -lc -lgcc_s -lgcc
06:07:19 <fizzie> UNK UNK UNK UNK UNK. ja kun UNK tapahtuu kaikkien UNK, niin UNK UNK. args
06:07:27 <fizzie> Finnish seems popular in thesel
06:07:45 <fizzie> "and when UNK happens with all UNK, then UNK UNK."
06:08:56 <Ngevd> Actually, I once made a Befunge-93 interpreter in Scratch
06:09:03 <zzo38> All functors in Haskell are strong. What if you want to do something else?
06:09:15 <Ngevd> And now I will have breakfast
06:09:21 -!- Ngevd has quit (Quit: what a big quitter he is, eh?).
06:14:18 <fizzie> fungot WRYYY can't you do the "starts-with" thing too?
06:14:19 <fungot> fizzie: where did you get my point
06:14:36 <fizzie> fungot: I haven't gotten your point.
06:14:37 <fungot> fizzie: advice for sarahbot") or " in meinen lederhosen" ( plural) or " in meinen lederhosen" ( plural) or " broken" archives. even less chance of getting help. i am puzzled
06:15:13 <fizzie> fungot: I am very puzzled too. You seem to not be making any of the sense.
06:15:29 <fizzie> Oh noes, too much?
06:18:22 <elliott__> fungot.
06:18:23 <fungot> elliott__: gcc ( gcc) 3.4.3 fnord ( red hat fnord) may then result in other rules being fired and so on
06:18:29 <elliott__> Red Hat fnord.
06:20:46 <fizzie> The best fnordstibution there is.
06:21:16 <elliott__> That was a bit contrived, fizzie.
06:21:48 <fizzie> Your MOM was a bit fnordtived.
06:23:03 <elliott__> Yes.
06:41:32 -!- zzo38 has quit (Remote host closed the connection).
07:21:58 -!- copumpkin has quit (Ping timeout: 252 seconds).
07:22:21 -!- copumpkin has joined.
07:50:48 -!- Madoka-Kaname has quit (Read error: Operation timed out).
08:22:37 -!- SimonRC has quit (Ping timeout: 260 seconds).
08:22:37 -!- boily has quit (Ping timeout: 260 seconds).
08:22:37 -!- jix_ has quit (Ping timeout: 260 seconds).
08:24:11 -!- jix has joined.
08:28:43 -!- fungot has quit (*.net *.split).
08:28:43 -!- Zuu has quit (*.net *.split).
08:28:44 -!- aloril has quit (*.net *.split).
08:28:44 -!- cheater has quit (*.net *.split).
08:28:44 -!- Vorpal has quit (*.net *.split).
08:28:44 -!- HackEgo has quit (*.net *.split).
08:28:44 -!- Patashu has quit (*.net *.split).
08:28:44 -!- Deewiant has quit (*.net *.split).
08:28:44 -!- quintopia has quit (*.net *.split).
08:28:45 -!- fizzie has quit (*.net *.split).
08:28:45 -!- yiyus has quit (*.net *.split).
08:28:45 -!- lambdabot has quit (*.net *.split).
08:28:45 -!- MichaelBurge has quit (*.net *.split).
08:28:45 -!- myndzi\ has quit (*.net *.split).
08:28:45 -!- FireFly has quit (*.net *.split).
08:28:46 -!- chickenzilla has quit (*.net *.split).
08:28:46 -!- pikhq has quit (*.net *.split).
08:28:47 -!- Gregor has quit (*.net *.split).
08:28:47 -!- lifthrasiir has quit (*.net *.split).
08:28:47 -!- atehwa has quit (*.net *.split).
08:28:47 -!- coppro has quit (*.net *.split).
08:28:48 -!- variable has quit (*.net *.split).
08:28:50 -!- twice11 has quit (*.net *.split).
08:28:50 -!- da_petcu21 has quit (*.net *.split).
08:28:50 -!- monqy has quit (*.net *.split).
08:28:50 -!- SgeoN1 has quit (*.net *.split).
08:28:51 -!- kmc has quit (*.net *.split).
08:28:51 -!- MDude has quit (*.net *.split).
08:28:51 -!- hagb4rd has quit (*.net *.split).
08:28:51 -!- sebbu has quit (*.net *.split).
08:28:51 -!- Nisstyre has quit (*.net *.split).
08:28:51 -!- tiffany has quit (*.net *.split).
08:28:51 -!- iamcal has quit (*.net *.split).
08:39:55 -!- boily has joined.
08:39:55 -!- shachaf has joined.
08:39:55 -!- Vorpal has joined.
08:39:55 -!- variable has joined.
08:39:55 -!- HackEgo has joined.
08:39:55 -!- Gregor has joined.
08:39:55 -!- Patashu has joined.
08:39:55 -!- pikhq has joined.
08:39:55 -!- lambdabot has joined.
08:39:55 -!- Zuu has joined.
08:39:55 -!- fungot has joined.
08:39:55 -!- Deewiant has joined.
08:39:55 -!- lifthrasiir has joined.
08:39:55 -!- MichaelBurge has joined.
08:39:55 -!- myndzi\ has joined.
08:39:55 -!- quintopia has joined.
08:39:55 -!- atehwa has joined.
08:39:55 -!- FireFly has joined.
08:39:55 -!- aloril has joined.
08:39:55 -!- cheater has joined.
08:39:55 -!- fizzie has joined.
08:39:55 -!- chickenzilla has joined.
08:39:55 -!- yiyus has joined.
08:39:55 -!- coppro has joined.
08:40:21 -!- twice11 has joined.
08:40:38 -!- SgeoN1 has joined.
08:40:38 -!- kmc has joined.
08:40:38 -!- MDude has joined.
08:40:38 -!- hagb4rd has joined.
08:40:38 -!- sebbu has joined.
08:40:38 -!- Nisstyre has joined.
08:40:38 -!- tiffany has joined.
08:40:38 -!- iamcal has joined.
08:40:40 -!- da_petcu21 has joined.
08:40:40 -!- monqy has joined.
08:44:40 -!- BeholdMyGlory has joined.
08:46:22 -!- ais523 has joined.
09:01:32 -!- hagb4rd has quit (Read error: No route to host).
09:15:32 -!- ais523 has quit (Read error: Connection reset by peer).
09:18:03 -!- Madoka-Kaname has joined.
09:19:42 -!- ais523 has joined.
09:32:08 -!- ais523 has quit (Remote host closed the connection).
09:37:30 -!- monqy has quit (Quit: hello).
10:17:04 -!- da_petcu21 has left ("Linkinus - http://linkinus.com").
10:31:00 -!- hagb4rd has joined.
10:42:20 -!- SimonRC has joined.
10:57:08 -!- GreaseMonkey has quit (Quit: The Other Game).
11:08:18 -!- ais523 has joined.
11:17:21 -!- ais523 has quit (Read error: Connection reset by peer).
11:20:32 -!- ais523 has joined.
11:49:30 -!- Phantom_Hoover has joined.
11:50:10 -!- derdon has joined.
11:56:09 -!- Jafet has joined.
11:58:22 <Phantom_Hoover> "In Deliciae Physico-Mathematicae (a 1636 magazine), German inventor Daniel Schwenter described a pen made from two quills. One quill served as a reservoir for ink inside the other quill."
11:58:24 <Phantom_Hoover> I want one.
12:00:13 <Vorpal> interesting
12:02:52 <fizzie> Sounds very retro.
12:03:25 <Vorpal> well yes, technology wise it has become obsolete
12:04:05 <ais523> 1636 is a bit too old to be retro
12:04:15 <Vorpal> ais523: what is it then?
12:04:20 <Phantom_Hoover> Quillpunk.
12:04:26 <ais523> Phantom_Hoover: heh, I like that description
12:04:26 <Vorpal> :D
12:04:32 <fizzie> re^2tro, then.
12:04:38 <fizzie> 1. retro -- (a fashion reminiscent of the past)
12:04:41 <fizzie> No time limits there.
12:04:57 <cheater> glad you can reminisce that far back
12:05:09 <Phantom_Hoover> fizzie, I like the way that re^2tro takes one more keypress than reretro.
12:05:10 <cheater> at least one of us can
12:05:58 <Phantom_Hoover> http://en.wikipedia.org/wiki/Culture_jamming
12:06:14 <ais523> re^2tro = reetro, anyway, doesn't it
12:06:19 <ais523> it'd have to be (re)^2tro
12:06:23 <Phantom_Hoover> I think this may be the most veiled description of pretentious idiocy ever written.
12:07:23 <fizzie> Phantom_Hoover: That's why it's in Category:Practical jokes.
12:07:35 <Phantom_Hoover> fizzie, OF COURSE
12:11:29 * CakeProphet throws a pie at fizzie's face.
12:11:44 * CakeProphet honks his horn, chuckles in delight, and dashes away.
12:12:13 <fizzie> HONK.
12:12:34 <fizzie> HONK, goes the horn pile.
12:13:31 <Phantom_Hoover> fizzie, remind me, when did you last read Homestuck?
12:13:52 <Phantom_Hoover> (Now would be an excellent time to catch up, since we're all waiting for the end of act 5 flash and it'll be a while.)
12:14:54 <fizzie> A long long time ago.
12:14:57 <fizzie> Maybe a month?
12:15:07 <fizzie> I'll catch up when I up-catch.
12:15:31 <Phantom_Hoover> Well, Hussie's set the EoA progress bar at 56% right now and it took at least a week for it to get there from 35%.
12:15:52 <fizzie> It was doing the "click the panels" separate-things when I last looked at it.
12:16:13 <Phantom_Hoover> That's not terribly far IIRC.
12:17:25 <fizzie> "Below is a SAD NORD" -- I have been following that prequel thing, though.
12:17:50 <Phantom_Hoover> I missed that...
12:18:10 <Phantom_Hoover> OH, right.
12:26:33 -!- pikhq_ has joined.
12:26:52 -!- pikhq has quit (Ping timeout: 256 seconds).
12:28:31 -!- Patashu has quit (Quit: MSN: Patashu@hotmail.com , Gmail: Patashu0@gmail.com , AIM: Patashu0 , YIM: patashu2 .).
12:45:55 -!- tiffany has quit (Ping timeout: 248 seconds).
12:46:52 -!- boily has quit (Ping timeout: 276 seconds).
12:47:59 <Phantom_Hoover> Huh, apparently the clock sync error was overstated.
12:48:31 -!- tiffany has joined.
12:49:30 -!- sllide has joined.
13:01:59 -!- boily has joined.
13:02:20 <Phantom_Hoover> sllide! boily!
13:02:30 <Phantom_Hoover> Madoka-Kaname, you might want to speed up tiffany's autorejoin, BtW.
13:02:33 <sllide> ohi there
13:12:46 -!- yorick has joined.
13:39:54 <fizzie> "Error: unidentified unSocket: 0x7f8393435380: magic FACE1010 != has 0"
13:39:57 <fizzie> Interesting message.
13:42:02 <olsner> not equal to has 0
13:43:17 <fizzie> Apparently my FACE is not good enough for Java.
13:59:28 <CakeProphet> fizzie: your FACE... wait
14:00:05 <CakeProphet> well it's not that your magic FACE isn't good enough
14:00:08 <CakeProphet> it's just that it's
14:00:10 <CakeProphet> not has 0
14:00:25 <CakeProphet> it's has FAT AMERICAN FOOD YOU GREASY SLOB.
14:01:02 <CakeProphet> I wonder what would happen if you design a perfectly good general purpose language.
14:01:27 <CakeProphet> but then gave it terrible and completely non helpful error messages
14:01:44 <CakeProphet> compile error: smells like teen spirit
14:02:30 <CakeProphet> I guess if it were open source someone would eventually get around to removing them...
14:02:48 <CakeProphet> but would people use it regardless? perhaps if it did everything better than everything that currently exists...
14:06:14 -!- copumpkin has quit (Quit: Computer has gone to sleep.).
14:37:06 * Phantom_Hoover considers that, since garnets have a dodecahedral crystal habit, it is entirely possible to cut one along the cleavage planes to create the single best d12 in existence.
14:37:30 <ais523> Phantom_Hoover: you'd still have to make sure the cleavage planes were equally spaced
14:37:50 <Phantom_Hoover> ais523, well yes, you'd need to make sure it was regular.
14:38:21 <cheater> mmmmm, cleavage
14:38:47 <Phantom_Hoover> Hmm, wait, WP doesn't actually give any cleavage for garnet.
14:39:41 <Phantom_Hoover> "Garnets do not show cleavage, so when they fracture under stress, sharp irregular pieces are formed."
14:39:46 <Phantom_Hoover> Garnets are very modest.
14:43:16 <Phantom_Hoover> *But* it's probably possible to get naturally-formed garnets which are sufficiently perfect for dice purposes.
14:43:42 -!- Jafet has quit (Quit: Leaving.).
14:48:16 <CakeProphet> Phantom_Hoover: not likely I would say.
14:50:09 <Phantom_Hoover> http://en.wikipedia.org/wiki/File:Andradite-Mali.jpg
14:50:11 <Phantom_Hoover> Sure about that?
14:50:26 <Phantom_Hoover> http://en.wikipedia.org/wiki/File:Grossular-ww51a.jpg
14:52:20 <CakeProphet> eh still not ideal.
14:52:58 <CakeProphet> I'm sure you could find one though
14:59:03 <CakeProphet> >:>
15:20:40 -!- Ngevd has joined.
15:21:17 <Phantom_Hoover> "I seriously pondered adding wenches to the list. But this isn't that sort of comic."
15:21:23 <Ngevd> Hello!
15:21:29 -!- copumpkin has joined.
15:21:47 <Phantom_Hoover> Ngevd, a 12-sided die made of a single garnet crystal: best thing?
15:22:09 <Phantom_Hoover> (For over-the-top bestness, make it out of pyrope and invent a Homestuck tabletop game.)
15:22:25 <Ngevd> Only if the pips are sapphire
15:22:54 <ais523> it doesn't need any pips at all
15:23:02 <ais523> just have it as a die that's blank on every side
15:23:20 <ais523> (I actually have a set of those, including a 12-sider; I tend to deliberately roll them by accident from time to time to mystify and amuse people)
15:23:27 <Phantom_Hoover> A crystal with natural formations that look like numbers.
15:23:46 <Phantom_Hoover> Or indeed natural formations that don't look like numbers.
15:25:04 <Phantom_Hoover> "No, look, that white vein is parallel to the edge! That makes it a seven!" "No, the black spot is in the corner! It's a three!"
15:31:07 <cheater> http://dl.dropbox.com/u/37707/Untitled.png
15:32:35 <Ngevd> Useful advise: Haskell.com isn't actually about Haskell
15:35:57 -!- pikhq_ has quit (Ping timeout: 244 seconds).
15:36:00 -!- pikhq has joined.
15:36:08 <Phantom_Hoover> Ngevd, *advice
15:36:18 <Ngevd> Not when it's a verb
15:38:20 <tswett> There, I wrote a Subleq processor in Verilog.
15:38:33 <tswett> It probably doesn't work, because I don't actually know Verilog very well.
15:42:38 <CakeProphet> http://www.haskell.org/haskellwiki/Numeric_Prelude
15:42:40 <CakeProphet> interesting
15:43:56 <Phantom_Hoover> Ngevd, incidentally, how old is Elliott 'Facekicker' Hird?
15:44:12 <Ngevd> 15-17
15:44:20 <Phantom_Hoover> Hmm.
15:44:22 <Ngevd> Probably 16 or seventeen
15:44:25 <CakeProphet> 16
15:44:36 <Phantom_Hoover> Aha, so he could well be our elliott__ from a year in the future?
15:44:55 <Ngevd> He was 9-10 when the kicking happened
15:44:56 <Phantom_Hoover> Sent back in time to kick your friend in the face because her face is like Sarah Connor?
15:45:02 <Phantom_Hoover> Hmm.
15:45:05 <Phantom_Hoover> A clone, perhaps?
15:45:12 <Ngevd> A son?
15:45:21 <Phantom_Hoover> elliott__'s evil twin brother?
15:45:27 <tswett> Next, I suppose I'll add a transport-triggered coprocessor. Because implementing a right shift using only subtraction is... really inefficient.
15:45:32 <Ngevd> Nah, that's me
15:45:39 <Phantom_Hoover> He has two.
15:45:39 <Ngevd> Except I'm the good one
15:45:56 <Ngevd> So... I'm elliott__'s good triplet?
15:45:59 <Phantom_Hoover> Yes.
15:47:34 * Phantom_Hoover wonders if he's actually incredibly lethargic and irritable and just hasn't noticed because he doesn't like coffee.
15:47:54 <Phantom_Hoover> Maybe if I have some I'll turn into, like, Jesus Einstein.
15:47:57 <Phantom_Hoover> Or Albert Christ.
15:47:59 <Ngevd> ...I don't like coffee!
15:48:01 <Ngevd> My god!
15:48:38 <ais523> tswett: reminds me of trying to implement a 64-bit multiplication efficiently with only 8-bit increment and decrement
15:48:42 <Phantom_Hoover> Ngevd, well yes but as we know you're elliott__'s good triplet so you're nice anyway and good is dumb so it never stood out.
15:48:47 <ais523> in the end I gave up, it's doable but I didn't want to put in the effort
15:48:58 <Ngevd> Aww.
15:49:01 <Phantom_Hoover> ais523, TRY SOME COFFEE
15:49:19 <Ngevd> Is elliott__ the neutral one or the evil one?
15:49:27 <Phantom_Hoover> Ngevd, maybe Facekicker is an evil genius and he's the one behind the neutrinopocalypse.
15:49:39 <Ngevd> The hexamopocalypse
15:49:50 <Phantom_Hoover> Ngevd, the evil one, but Facekicker is the really evil one.
15:49:55 <Phantom_Hoover> You're neutral.
15:51:02 <Ngevd> Lawful or Chaotic?
15:51:13 <Phantom_Hoover> Lawful.
15:51:14 -!- sllide has quit (Read error: Connection reset by peer).
15:51:20 <Ngevd> Ooh good
15:51:26 <Phantom_Hoover> You were in that youth parliament thing nobody cares about, after all.
15:52:27 <Ngevd> So... elliott__ is chaotic evil and 'Facekicker' Hird is neutral evil?
15:53:07 <cheater> are you Righteous Evil
15:53:17 <Ngevd> I'm lawful neutral
15:55:51 * CakeProphet is chaotic good.
15:59:19 <tswett> I must say, I prefer esoteric programming languages that can emulate random access machines without a time penalty.
16:00:02 <tswett> With BF, if you frequently need to access one thing that's at the beginning of memory and another that's at the end, you will die.
16:00:23 <Ngevd> Unless memory wraps around
16:01:49 <olsner> if you're in the middle of memory, wrapping doesn't help a bit
16:04:51 -!- SgeoN1 has quit (Read error: Connection reset by peer).
16:05:07 -!- SgeoN1 has joined.
16:05:08 -!- SgeoN1 has quit (Remote host closed the connection).
16:07:03 <CakeProphet> well a BF /compiler/ can emulate random access, sure.
16:07:16 -!- monqy has joined.
16:07:55 -!- zzo38 has joined.
16:12:23 <ais523> so could an optimising interp
16:12:49 -!- azaq23 has joined.
16:13:01 -!- azaq23 has quit (Max SendQ exceeded).
16:14:50 <tswett> So, this processor currently uses 60 lines of code. Let's say one logic element is needed per line of code. This one really cheap FPGA seems to have 25,000 logic elements. So it ought to be able to hold... about 400 processors.
16:14:59 -!- MDude has quit (Ping timeout: 248 seconds).
16:15:27 -!- SgeoN1 has joined.
16:16:58 <tswett> Let's say the clock runs at 625 MHz. The processor executes an instruction every two or three cycles. So that means we should be able to execute... eighty billion instructions per second.
16:19:35 <Ngevd> My clever three cell brainfuck to lambdabot flavour haskell translator's initial tape is made up of consts, flips, ids, and brackets
16:20:06 <CakeProphet> "three cell brainfuck to lambdabot flavour haskell translator" ????????
16:20:15 <Ngevd> Yes
16:20:36 <CakeProphet> but that's 4 things in 3 cells.
16:21:08 <Ngevd> three cell is a compound adjective referring to brainfuck rather than the translator
16:21:44 <Ngevd> lambdabot flavour refers to the haskell available through lambdabot
16:21:57 <CakeProphet> so the tralsnator is also brainfuck but with functions>?
16:22:02 <CakeProphet> 3reqw3r[-oo3rw33333][[][
16:22:13 <Ngevd> It translates brainfuck to haskell
16:22:29 <Ngevd> WITHOUT IO
16:22:31 <CakeProphet> yes I understand that much.
16:22:42 <Ngevd> The translator is written in Python
16:22:48 <Ngevd> Just to annoy everyone
16:22:58 <CakeProphet> i'M JUST CONFUSED ABOUT "the initial tape is made up of consts, flips, ids, and brackets"
16:23:42 <Ngevd> It's a pretty literal translation
16:24:06 <tswett> How can a BF tape contain consts, flips, and ids?
16:24:12 <Ngevd> flip (flip id (const id)) (flip (flip id (const id)) (const id)) works out as a three cell church list filled with church zeroes
16:24:36 <CakeProphet> but you can't do any folds right?
16:24:42 <CakeProphet> brainfuck doesn't work like that.
16:26:02 <Ngevd> I'm only using consts, flips, ids, joins, aps, (.)s, and brackets
16:26:20 <CakeProphet> and a church list folds things over itself.. yes?
16:26:31 <Ngevd> It's a bit like a linked list
16:27:26 <CakeProphet> oh nevermind I was thinking of the church list that's defined by its right fold function
16:28:43 <CakeProphet> cons = \h t c n. c h (t c n)
16:29:03 <CakeProphet> nil = \c n. n aka false
16:29:50 <Ngevd> + translates as ap ((.) ((.) flip (flip id))((.) (ap (.))(flip id const)))(flip id(const id))
16:29:58 <Ngevd> Obfuscated haskell ftw
16:30:21 <CakeProphet> so you're basically translating brainfuck into lambda calculus
16:30:27 <Ngevd> CLOSE
16:30:31 <CakeProphet> or SKI
16:30:33 <Ngevd> Combinatory logic
16:30:38 <Ngevd> BCKWSI
16:30:43 <CakeProphet> yes
16:30:43 <Ngevd> Like MIBBLLII
16:30:53 <Ngevd> Which is the long term aim
16:31:29 <CakeProphet> I don't know if the fold-list would work for brainfuck
16:31:46 <Ngevd> Remind me, what exactly is a fold list?
16:31:51 <zzo38> Can you do like Lazy K, having it translate into the IO monad, from a church encoding?
16:31:59 <CakeProphet> well that's not the technical name for it.
16:32:14 <CakeProphet> Ngevd: http://en.wikipedia.org/wiki/Church_encoding#Higher-order_function
16:35:00 <CakeProphet> it would be kind of cumbersome because bf isn't very foldy
16:39:31 <zzo38> I have a NSF music titled "Un5th Symphony"
16:53:01 <Ngevd> + is S(B(BC(CI))(\t.B(SB)(CIK)t))(CI(KI))
16:53:11 <Ngevd> Whoops, wrong one
16:53:38 <Ngevd> + is S(B(BC(CI))(B(SB)(CIK)))(CI(KI))
16:53:46 <Ngevd> - is S(B(BC(CI))(B(C(BC(B(BC)(C(BC(B(BB)(CB(B(B(CI))(CI)))))K)))I)(CIK)))(CI(KI))
16:53:49 <Ngevd> Spot the difference
16:57:30 -!- derrik has joined.
17:01:26 <Ngevd> > is S(B(BC(CI))(B(CIK)(CI(KI))))(S(B(BC(CI))(B(CI(KI))(CI(KI))))(CIK))
17:01:27 <lambdabot> Not in scope: `is'Not in scope: data constructor `S'Not in scope: data cons...
17:01:35 <Ngevd> Okay, < is S(B(BC(CI))(B(CIK)(CI(KI))))(S(B(BC(CI))(B(CI(KI))(CI(KI))))(CIK))
17:01:43 <Ngevd> Either's good
17:02:13 -!- Ngevd has changed nick to Taneb|Hovercraft.
17:02:22 <elliott__> hi
17:03:27 <Taneb|Hovercraft> Oh, this is no good
17:03:43 -!- Taneb|Hovercraft has quit (Quit: I CANNAE TAKE IT ANY MORE </scots>).
17:03:55 <monqy> bye
17:04:29 <elliott__> <Phantom_Hoover> Quillpunk.
17:04:32 <elliott__> Phantom_Hoover: I love you.
17:04:33 <zzo38> http://sprunge.us/NXXi
17:05:44 <elliott__> <Phantom_Hoover> Huh, apparently the clock sync error was overstated.
17:05:45 <elliott__> Yaaaaaaaaay.
17:06:46 <zzo38> I wrote the http://sprunge.us/NXXi it is document about my idea related to specifying preparing printouts of literate Haskell program in a Cabal package. Read it please make opinion/suggestion/question/complain
17:13:53 <zzo38> If you use LaTeX or ConTeXt or XeTeX or whatever, or even things I have not listed, you can write those sections that I did not write.
17:15:21 <Phantom_Hoover> http://www.reddit.com/r/askscience/comments/kwjks/assuming_that_highenergy_neutrinos_are/
17:15:34 <Phantom_Hoover> 4 downvotes.
17:15:46 <Phantom_Hoover> I... don't see why.
17:16:00 <elliott__> Phantom_Hoover: Surely by now you know that the up/downvote totals are heavily fudged.
17:16:14 <Phantom_Hoover> elliott__, but the margin is the same, no?
17:16:24 <elliott__> Phantom_Hoover: It's probably more like one upvote, one downvote, man.
17:16:33 <elliott__> There, I upvoted it.
17:16:38 <elliott__> Both the up and downvote counts went up.
17:16:40 <elliott__> Totally fudged.
17:17:28 <zzo38> Did you read document about X-Printout- fields in Cabal?
17:17:42 <Phantom_Hoover> elliott__, sure, but the margin is still -3.
17:18:05 <elliott__> Phantom_Hoover: I'll get someone else to upvote it when they're online. :p
17:18:14 <zzo38> Is there anything you see wrong with my file?
17:18:24 <elliott__> Phantom_Hoover: Did you check nobody had submitted anything similra before?
17:18:27 <elliott__> There's
17:18:28 <elliott__> How could you violate causality with FTL neutrinos? (self.askscience)
17:18:28 <elliott__> submitted 2 days ago by AllUZombies
17:18:28 <elliott__> 2 commentssharesavehidereport
17:18:38 <elliott__> http://www.reddit.com/r/askscience/comments/ktd14/how_could_you_violate_causality_with_ftl_neutrinos/
17:18:42 <CakeProphet> elliott__: https://plus.google.com/117832052760789742441/about _HI IM A BIG DUDE FOR BIG PEOPLE_
17:18:53 <zzo38> Actually I already found one thing wrong and I corrected it by adding "The files listed in this field are not included in the Cabal package." in the section about X-Printout-Require field, to clarify that.
17:18:58 <elliott__> CakeProphet: Yes you are like the last person to comment on that.
17:19:09 <CakeProphet> elliott__: last?
17:19:13 <CakeProphet> well, obviously
17:19:25 <CakeProphet> elliott__: you are the last person to mention that I commented on it.
17:19:44 * elliott__ wonders how to delete a Google+ account.
17:19:56 <CakeProphet> hack it
17:19:58 <CakeProphet> put porn on it.
17:20:04 <Phantom_Hoover> elliott__, that question's different, though.
17:20:10 <elliott__> CakeProphet: I could just change my name to "ehird .".
17:20:12 <zzo38> Google doesn't want you do delete anything.
17:20:13 <Phantom_Hoover> I'm asking how you'd actually set up apparatus to do it.
17:20:23 <elliott__> Phantom_Hoover: Lots of rockets.
17:20:32 <CakeProphet> elliott__: oh so that's yours?
17:20:38 <Phantom_Hoover> The Urist McElliott method.
17:20:51 <elliott__> CakeProphet: Yes, obviously.
17:21:08 <CakeProphet> elliott__: it could have been another elliott hird that is an egg that vanquished time.
17:21:26 <elliott__> CakeProphet: I was /born/ in an egg that vanquished time, you philistine.
17:21:59 <CakeProphet> elliott__: you want to be Google+ friendz?
17:22:09 <elliott__> CakeProphet: I want nothing less.
17:24:58 <zzo38> Is there such thing as fax gopher client?
17:25:26 <CakeProphet> elliott__: :(
17:25:43 <elliott__> CakeProphet: Have hope: It could be just because of my objection to Google+.
17:26:05 <Phantom_Hoover> elliott__, what objection?
17:26:18 -!- Ngevd has joined.
17:26:57 <elliott__> Phantom_Hoover: (a) Google know more than they should about the social graph as it is, they don't need us explicitly TELLING them about it; (b) their names policy is completely unacceptable and this is a big deal.
17:27:18 <Ngevd> I think I have defined enough to make a Iterated Collatz Function to MIBBLLII translation
17:27:28 <zzo38> elliott__: Exactly. As I said. Google doesn't want you to delete anything.
17:27:43 <Ngevd> Thanks to oerjan's recent Iterated Collatz Function to brainfuck translation
17:28:39 <Phantom_Hoover> elliott__, what is it?
17:28:45 <elliott__> Phantom_Hoover: What is what?
17:28:50 <Phantom_Hoover> Their names policy.
17:28:55 <Ngevd> An esolanger from Hexham, but that's not important
17:29:21 <Phantom_Hoover> UCAS apparently needs me to tell it that I'm a UK national about five times.
17:29:32 <elliott__> Phantom_Hoover: "You must use your full legal name -- which we assume includes a surname, because there are no people with legal names without surnames -- exclusively, and if you do not completely follow this, or if you follow it but we think your name looks weird, we will ban you."
17:29:44 <elliott__> (Amusingly, tons of Google employees were found to be using names violating this policy.)
17:30:13 <zzo38> What if someone has same name as someone else?
17:30:28 <Ngevd> Then my friend gets kicked in the face
17:30:30 <Ngevd> IN THE PAST
17:30:54 <monqy> do you want ngevds friend to be kicked in the face in the past???
17:30:59 <monqy> having the same name as someone else: its bad
17:31:41 <CakeProphet> should I a) buy showtime and watch the new season of Dexter as it airs b) wait for Hulu/torrent/internets
17:32:40 <Ngevd> c.
17:32:44 <Ngevd> Definitely c
17:33:04 <zzo38> No! g. Definitely g
17:35:32 -!- Ngevd has changed nick to Taneb|Hovercraft.
17:35:48 <CakeProphet> c) act out a deep-seated serial killer fantasy, influenced by its glorification in the series.
17:36:51 <CakeProphet> g) write dope hip hop lyrics to convey realistic yet positive messages to today's youth
17:38:20 -!- ive has joined.
17:45:39 <Gregor> What happened to d, e, f?
17:46:18 <CakeProphet> Gregor: I killed them, overtaken by hedonistic bloodlust.
17:46:27 <Gregor> Oh dear.
17:47:44 <CakeProphet> h) take a night on the town, sampling fine cigars, causing pandamonia in numerous strip clubs, and discovering a taste for black tar heroin.
17:54:14 <cheater> Phantom_Hoover: ucas is fucking annoying.
17:55:15 -!- Phantom_Hoover has quit (Ping timeout: 248 seconds).
17:55:38 <CakeProphet> United Canadian and American States?
17:56:02 -!- Phantom_Hoover has joined.
17:56:22 <Phantom_Hoover> This is the actual most obnoxious low-battery routine.
17:56:37 <CakeProphet> (fictional country in the shadowrun universe)
17:56:41 <Phantom_Hoover> Without warning, it hibernates the computer and cocks it up so that I have to hard reboot.
17:57:22 <CakeProphet> interestingly enough one of the presidents of UCAS was a dragon.
17:57:27 <CakeProphet> first dragon president.
17:57:41 <Phantom_Hoover> 17:54:14: <cheater> Phantom_Hoover: ucas is fucking annoying.
17:57:54 <Phantom_Hoover> Well I can't imagine they designed it with toddlers in mind.
17:58:39 <cheater> are you sure?
17:58:49 <cheater> i think that's exactly who it was designed for
18:00:48 -!- zzo38 has quit (Remote host closed the connection).
18:08:27 -!- MSleep has joined.
18:15:17 -!- derrik has left.
18:15:23 -!- MDude has joined.
18:17:38 -!- MSleep has quit (Ping timeout: 260 seconds).
18:23:20 <Taneb|Hovercraft> Hello!
18:23:28 -!- Taneb|Hovercraft has changed nick to Ngevd.
18:24:45 <CakeProphet> wsrfwreweyg
18:24:49 <CakeProphet>
18:52:45 <CakeProphet> playing music likes to freeze everything on my computer for some reason.
18:52:56 <Ngevd> Playing music
18:52:59 <Ngevd> Hmm
18:53:01 <Ngevd> That's an idea
18:56:13 <CakeProphet> Due to a (now resolved) DNS issue, some Wikimedia sites, including Wikipedia, may be unreachable for the next hour or so. If it doesn't work for you, try again a bit later.
18:56:18 <CakeProphet> the world will be in ruins shortly
18:56:27 <Phantom_Hoover> Oh dear god.
18:56:44 <CakeProphet> HALP HOW DID I KNOW STUFF NOW?
18:56:45 <Ngevd> And it's time we saw a miracle
18:56:54 <Ngevd> Come on it's time fore something miracle
18:57:00 <Ngevd> To pull us through
18:57:12 <Ngevd> Oh how I have missed you Matt Bellamy's voice
18:57:23 <Phantom_Hoover> MoThErFuCkIn MiRaClEs
18:57:30 <cheater> how do they work?
18:57:37 <cheater> i don't know!
18:57:37 <Phantom_Hoover> Wow, that looks terrible in Libertine.
18:57:49 <CakeProphet> http://webcache.googleusercontent.com/search?q=cache:5fWK0DkuNE8J:en.wikipedia.org/wiki/Cache+wikipedia+cache&cd=1&hl=en&ct=clnk&gl=us
18:58:17 <elliott__> CakeProphet: It's like you're IN THEMATRIXE............E.........
18:59:58 <CakeProphet> yes i see the code am than best ever was.
19:01:12 <CakeProphet> I want a computer with a cache cache.
19:01:23 <CakeProphet> to cache previous cache states.
19:01:34 <Phantom_Hoover> So CakeProphet polish up your keyboard and open emacs hard / 'cos hell's broke loose in #esoteric and the devil writes the code
19:01:36 <CakeProphet> this is in no way equivalent to having just a really large cache.
19:01:42 <Phantom_Hoover> This is not going to end well.
19:01:45 <ais523> happy australian mailman mailing list memberships reminder day!
19:01:53 <CakeProphet> Phantom_Hoover: okay I am now starting at emacs.
19:02:36 <Phantom_Hoover> If you win you get this shiny keyboard made of... spode? / but if you lose the devil gets your... mode?
19:02:43 <CakeProphet> ..
19:02:52 <CakeProphet> can I give him perl-mode because it's bad?
19:02:56 <CakeProphet> and keep cperl?
19:03:02 <Phantom_Hoover> Yes.
19:03:09 <CakeProphet> challenge accepted.
19:03:18 <Phantom_Hoover> The devil is not an Emacs connoisseur.
19:03:38 <Phantom_Hoover> I have been very happy since I worked out how to spell connoisseur without needing to look it up.
19:04:10 <CakeProphet> committee is an annoying word to type
19:04:16 <CakeProphet> I remember I had typing classes and they would use that one a lot
19:04:19 <elliott__> <Phantom_Hoover> So CakeProphet polish up your keyboard and open emacs hard / 'cos hell's broke loose in #esoteric and the devil writes the code
19:04:20 <CakeProphet> probably because they hate us.
19:04:21 <elliott__> Phantom_Hoover: no stop.
19:04:31 <elliott__> <Phantom_Hoover> I have been very happy since I worked out how to spell connoisseur without needing to look it up.
19:04:46 <elliott__> Phantom_Hoover: One day I will be able to spell bureaucrat without lookgi it up-- OMFG I JUST DID
19:04:55 <Phantom_Hoover> Damn French.
19:04:56 <elliott__> Wait can I do aficionado now too. No I can't.
19:05:20 <Phantom_Hoover> Aficionado is correct.
19:05:31 <Ngevd> I introduced a friend to the concept of Hilbert's Grand Hotel today
19:05:43 <Ngevd> To explain convergence
19:05:51 <elliott__> Phantom_Hoover: Yes but I used my spell chequer.
19:05:53 <Phantom_Hoover> Convergence?
19:05:59 <elliott__> It was like aficianado before that.
19:06:01 <Ngevd> Of a series
19:06:23 <Phantom_Hoover> Ngevd, oh man, you're reminding me of that time I tried to convince my chemistry teacher that no, space would not fill up if we dumped nuclear waste into it.
19:06:49 <Ngevd> Did you tell him/her about Hilbert's Grand Hotel?
19:06:58 <Ngevd> Oh god I can just imagine that now
19:07:00 <CakeProphet> how to solve landfill problems: space catapult
19:07:03 <elliott__> Phantom_Hoover: To be fair, nuclear waste is pretty big.
19:07:04 <elliott__> PRETTY BIG.
19:07:10 <CakeProphet> also, a useful weapon against incoming asteroids and space aliens.
19:07:16 <Ngevd> "Do you think Mr Hilbert would let us put Nuclear Waste in some of his rooms?"
19:07:17 <CakeProphet> hurl our mounds of garbage at them.
19:07:30 <Phantom_Hoover> Someone quipped that we were hardly going to run out since it's expanding on the time, whereupon she said "if space is expanding what's it expanding into YOU CAN'T EXPLAIN THAT" "yes I can" "SHUT UP PH NO YOU DON'T"
19:07:42 <Phantom_Hoover> Well OK she didn't call me PH but otherwise it's accurate.
19:07:50 <elliott__> Phantom_Hoover: Can you get people to start calling you PH irl.
19:07:57 <Phantom_Hoover> no
19:07:58 <elliott__> I kind of need you to do that for my mental stability.
19:08:01 <elliott__> No you don't understand
19:08:06 <elliott__> I literally think your real name is Phantom Hoover
19:08:09 <CakeProphet> elliott__: space can only handle so many PRETTY BIG things.
19:08:16 <elliott__> It is irreversibly ingrained into my mind
19:08:22 <Phantom_Hoover> elliott__, I thought you thought my real name was something else.
19:08:34 <elliott__> Phantom_Hoover: Yes I figured out your real name but I don't really know that as your real name.
19:08:42 <CakeProphet> this is similar to how I think Gregor is actually Roger G.
19:08:45 <CakeProphet> I think it's a fair point to bring up
19:08:47 <CakeProphet> often
19:08:48 <elliott__> INTELLECTUALLY that's your real name but my brain would never respond with anything other than Phantom Hoover in response to a snap query as to what your real name is.
19:08:51 <CakeProphet> that this is what I think.
19:09:03 <elliott__> ais523: happy that, btw
19:09:05 <Ngevd> Sometimes I think my name is Taneb
19:09:13 <Ngevd> It's a bit weird
19:09:19 -!- CakeProphet has changed nick to tehporPekaC.
19:09:22 * tehporPekaC evolves.
19:09:29 <ais523> elliott__: it took me almost 10 seconds to expand the pronoun there
19:09:32 <Phantom_Hoover> "Hello, I'm Taneb." "Nathan... what?"
19:09:57 <elliott__> Ngevd: Your real name should be Taneb, too.
19:09:59 <elliott__> Just Taneb.
19:10:09 <ais523> I don't think I've introduced myself as ais523 to anyone in real life yet
19:10:11 <Phantom_Hoover> elliott__, he couldn't have a Google+ account then.
19:10:14 <Ngevd> "Taneb, too.
19:10:15 <ais523> I /have/ introduced myself as callforjudgement to people, though
19:10:19 <Ngevd> Just Taneb."?
19:10:30 <elliott__> Phantom_Hoover: Well OK he needs to change his legal name to "Taneb ."
19:10:31 <ais523> 'tis easier to pronounce, and it's the name they knew me by already
19:10:34 <tehporPekaC> my name is unknown to anyone in the universe.
19:10:38 <elliott__> ais523: haha, how did that happen?
19:10:48 <Phantom_Hoover> I have mentally referred to myself as Phantom_Hoover, though.
19:10:51 <ais523> Pokémon VGC
19:10:56 <elliott__> Phantom_Hoover: With the underscore?
19:11:04 <ais523> I even named the player on the cartridge CFJ for consistency
19:11:20 <elliott__> CFJ would be a pretty good set of initials to have.
19:11:23 -!- Ngevd has changed nick to Taneb|Hovercraft.
19:11:26 <elliott__> cfj would be a good Unix account name, in turn.
19:11:28 <Phantom_Hoover> elliott__, no, that's just because a tab completion is a terrible thing to waste.
19:11:47 -!- Vorpal has quit (Quit: ZNC - http://znc.sourceforge.net).
19:12:10 <elliott__> ais523: actually your name causes my brain-talking engine real difficulty, because even aye eye ess is a bit of a pain to pronounce
19:12:24 <ais523> yep
19:12:26 -!- ais523 has changed nick to callforjudgement.
19:12:28 <callforjudgement> is this better?
19:12:36 <elliott__> not really, it doesn't look like you at all
19:12:40 <callforjudgement> heh
19:12:46 <callforjudgement> calling myself ais523 would be weird in some places
19:12:53 <callforjudgement> this nick's a newer one, but possibly a better one
19:12:56 <tehporPekaC> elliott__: are you a big dude?
19:13:02 -!- elliott__ has changed nick to cfj.
19:13:07 <cfj> holy shit, this isn't registered
19:13:09 -!- Vorpal has joined.
19:13:16 <Phantom_Hoover> callforjudgement, WHAT IS YOUR MIDDLE NAME TELL ME DAMMIT
19:13:18 <tehporPekaC> cfj: are you a big dude?
19:13:21 <Phantom_Hoover> TELL ME OR I KILL VORPAL
19:13:23 <callforjudgement> Phantom_Hoover: for
19:13:27 -!- cfj has quit (Changing host).
19:13:27 -!- cfj has joined.
19:13:34 <cfj> yay, this nick is now mine
19:13:36 <cfj> callforjudgement: let us confuse together
19:13:41 <Vorpal> <Phantom_Hoover> TELL ME OR I KILL VORPAL <-- ?
19:13:46 <tehporPekaC> cfj: are you a big dude???
19:13:49 <Vorpal> oh cfj
19:13:56 <Vorpal> wait, cfj? callforjudgement?
19:14:00 <Phantom_Hoover> callforjudgement, Alex For Smith, abbreviated Alex I. Smith.
19:14:01 <Vorpal> same buy?
19:14:02 <cfj> Phantom_Hoover: Ibiza.
19:14:09 <cfj> Alex Ibiza Smith.
19:14:12 <Vorpal> hm
19:14:16 <tehporPekaC> Vorpal using sound skills of deduction.
19:14:19 <callforjudgement> Vorpal: cfj is elliott pretending to be me
19:14:20 <Vorpal> nope
19:14:24 <cfj> callforjudgement: no I'm not
19:14:27 <Vorpal> callforjudgement, right and you are ais
19:14:28 <cfj> I'm elliott pretending to be me
19:14:30 <tehporPekaC> Vorpal: 15:13 -!- cfj [~elliott@unaffiliated/elliott] has joined #esoteric
19:14:45 <callforjudgement> Vorpal: callforjudgement is my actual nick, though
19:14:46 <tehporPekaC> cfj: nice act.
19:14:53 <callforjudgement> it's in my email address, for one thing
19:14:57 <Vorpal> tehporPekaC, I saw a bit later, I missed where callforjudgement changed his nick
19:14:58 <cfj> tehporPekaC: Dude, I never left the channel, that's just the hostname crap.
19:15:07 <Phantom_Hoover> callforjudgement, what is it dammit
19:15:07 <cfj> callforjudgement: FSVO your email address
19:15:15 -!- Phantom_Hoover has changed nick to jfc.
19:15:16 <callforjudgement> well, I have more than one
19:15:20 <callforjudgement> the other one has ais523 in it
19:15:20 -!- jfc has changed nick to ph.
19:15:21 <cfj> Just fucking cidding?
19:15:24 <cfj> NO
19:15:25 <cfj> IT MUST BE
19:15:26 <cfj> UPPERCASE
19:15:28 <cfj> "PH"
19:15:31 -!- ph has changed nick to PH.
19:15:32 <tehporPekaC> cfj: oh okay. How was I supposed to know then? :P
19:15:35 <Vorpal> cfj, "just for cider"
19:15:40 <cfj> tehporPekaC: because it gives it in the quit message
19:15:47 <PH> -NickServ- Registered : Jul 23 14:38:30 2002 (9 years, 10 weeks, 1 day, 04:37:20 ago)
19:15:47 <PH> -NickServ- Last seen : (about 0 weeks ago)
19:15:49 <PH> Dammit.
19:16:01 <cfj> That's a long time to use a nick.
19:16:06 -!- tehporPekaC has changed nick to sidebrun.
19:16:07 -!- PH has changed nick to dmm.
19:16:15 -!- dmm has changed nick to Prince_Charles.
19:16:22 <sidebrun> quick everyone use a different nick
19:16:22 -!- Taneb|Hovercraft has changed nick to Ngevd.
19:16:25 <sidebrun> and then when someone else enters
19:16:28 <sidebrun> they will be so confused.
19:16:36 <sidebrun> also change username real name etc
19:16:37 <Ngevd> cfj, I always pronounce ais a bit like ace
19:16:41 <sidebrun> can I un-vhost?
19:16:46 <cfj> Someone can use my nick for a bit if they want.
19:16:50 <cfj> sidebrun: /ns logout
19:17:01 <cfj> My nick being elliott.
19:17:12 <Vorpal> sidebrun, by reconnecting and not identifying, that is all as far as I know
19:17:17 <cfj> Vorpal: Dude, /ns logout.
19:17:20 <Vorpal> oh okay
19:17:26 <sidebrun> cfj: dudddidueududude
19:19:08 <Ngevd> Now that I'm Ngevd here, the only places where I go with any frequency with the same username are the IWC forums and Twitter
19:19:17 <callforjudgement> this is confusing enough that I had to /whois Vorpal to make sure it was the right Vorpal
19:19:59 <Ngevd> I only changed my nick as I do by standard
19:20:04 <Ngevd> I am Ngevd most of the time
19:20:19 <Ngevd> Taneb when Ngevd is not available, and when there is an event at #darths
19:20:24 <cfj> "Once built, we can dynamically load the resulting dylib into LLVMs opt tool using the -load option, and then use the new -ghc-aa flag to tell LLVM to use our alias analyser as a complement to the default one. Unfortunately, due to an infelicity in LLVM, we have to specify -ghc-aa in between every single optimisation pass if we want to be sure that it is used. So the final command line to opt, including al
19:20:24 <cfj> l passes done by the standard -O2 optimisation level, and the -loop-reduce strength-reduction pass, needs to look something like this:
19:20:24 <cfj> opt -load GHCAliasAnalysis.dylib -S -no-aa -tbaa -basicaa -ghc-aa \
19:20:25 <cfj> -globalopt -ghc-aa -ghc-aa -ipsccp -ghc-aa -deadargelim -ghc-aa -instcombine -ghc-aa -simplifycfg \
19:20:27 <cfj> -ghc-aa -basiccg -ghc-aa -prune-eh -ghc-aa -inline -ghc-aa -functionattrs -ghc-aa -scalarrepl-ssa \
19:20:29 <cfj> -ghc-aa -domtree -ghc-aa -early-cse -ghc-aa -simplify-libcalls -ghc-aa -lazy-value-info -ghc-aa \
19:20:31 <cfj> -jump-threading -ghc-aa -correlated-propagation -ghc-aa -simplifycfg -ghc-aa -instcombine -ghc-aa \
19:20:33 <cfj> -tailcallelim -ghc-aa -simplifycfg -ghc-aa -reassociate -ghc-aa -domtree -ghc-aa -loops -ghc-aa \
19:20:34 <Ngevd> Taneb|Hovercraft when I am either here or not here
19:20:35 <cfj> -loop-simplify -ghc-aa -lcssa -ghc-aa -loop-rotate -ghc-aa -licm -ghc-aa -lcssa -ghc-aa -loop-unswitch \
19:20:37 <cfj> -ghc-aa -instcombine -ghc-aa -scalar-evolution -ghc-aa -loop-simplify -ghc-aa -lcssa -ghc-aa -indvars \
19:20:39 <cfj> -ghc-aa -loop-idiom -ghc-aa -loop-deletion -ghc-aa -loop-unroll -ghc-aa -memdep -ghc-aa -gvn -ghc-aa \
19:20:41 <cfj> -memdep -ghc-aa -memcpyopt -ghc-aa -sccp -ghc-aa -instcombine -ghc-aa -lazy-value-info -ghc-aa \
19:20:41 <Ngevd> Taneb|Kindle when I am on a Kindle
19:20:43 <cfj> -jump-threading -ghc-aa -correlated-propagation -ghc-aa -domtree -ghc-aa -memdep -ghc-aa -dse \
19:20:45 <cfj> -ghc-aa -adce -ghc-aa -simplifycfg -ghc-aa -instcombine -ghc-aa -strip-dead-prototypes -ghc-aa \
19:20:47 <cfj> -constmerge -loop-reduce"
19:20:49 <cfj> ugh
19:20:51 <cfj> why did that have to be pre-linewrapped
19:22:11 -!- callforjudgement has changed nick to ais523.
19:22:19 -!- sidebrun has changed nick to Kallisti.
19:22:36 <cfj> ais523: lame
19:22:49 <ais523> people in a different channel were shouting at me
19:22:49 <Kallisti> nooooooo
19:22:51 <Kallisti> already taken.
19:22:56 <ais523> they don't like seeing me as anything but ais523
19:23:15 <cfj> #nethack?
19:24:34 <Ngevd> Learn You A Haskell has a sentence "Use this if you are French."
19:24:45 <cfj> "We can't implement this scheme in LLVM. We resort to post processing the assembly it produces."
19:24:46 -!- Kallisti has changed nick to CakeProphet.
19:24:48 <Vorpal> cfj, that was a LOT of flags, several duplicate ones too?
19:24:48 <cfj> oh come on
19:24:57 <cfj> Vorpal: did you _read_ the paragraph before the flags?
19:25:30 <cfj> Prince_Charles: How much did you pay for the latest Bundle.
19:25:30 <Vorpal> cfj, ah no, it scrolled out of the window due to the length of the paste XD
19:25:34 <cfj> Vorpal: lol
19:26:06 <CakeProphet> NickServ(NickServ@services.)- Access flag(s) +voOtsriRfAF in #anon
19:26:06 <CakeProphet> wat
19:26:10 <CakeProphet> I don't think I've ever been in that channel
19:26:25 <CakeProphet> NickServ(NickServ@services.)- Access flag(s) +A in #omgwtf
19:26:29 <CakeProphet> wat
19:26:31 -!- Prince_Charles has changed nick to elliott.
19:26:42 <elliott> Aaaaaaaand...
19:26:48 -!- elliott has quit (Disconnected by services).
19:26:51 <cfj> finally
19:26:54 <Vorpal> CakeProphet, huh?
19:27:10 -!- elliott has joined.
19:27:11 <cfj> eagerly awaiting <PH> -_-
19:27:11 <CakeProphet> output from /ns infochans
19:27:13 -!- elliott has quit (Disconnected by services).
19:27:22 <cfj> looooooooool
19:27:25 <Vorpal> CakeProphet, says invalid command for me
19:27:38 -!- Prince_Charles has joined.
19:27:42 <Prince_Charles> cfj, ___
19:27:44 <cfj> /ns ghost Prince_Charles
19:27:45 <Vorpal> CakeProphet, what was the actual command you used?
19:27:50 <Prince_Charles> (That's an all-caps -_-.)
19:27:54 <cfj> Prince_Charles: X-D
19:28:11 <cfj> Prince_Charles: But srsly,
19:28:14 <cfj> <cfj> Prince_Charles: How much did you pay for the latest Bundle.
19:28:17 <CakeProphet> Vorpal: er listchans
19:28:20 <Vorpal> ah
19:28:34 <Prince_Charles> cfj, $10.
19:28:43 <Vorpal> hm... nothing unexpected there for me, a few channels I remember but haven't been in for ages, that is about it
19:28:47 <Prince_Charles> Unless the Frozenbyte stuff is good and works, $10 wasted.
19:28:47 <cfj> Prince_Charles: I'll pay $10.01.
19:29:00 <CakeProphet> Vorpal: maybe my memory is just bad :P
19:29:06 <Prince_Charles> cfj, no don't do it it'll work for you and I will sad.
19:29:08 <Vorpal> Prince_Charles, the frozen byte stuff won't work on intel graphics
19:29:26 <cfj> Prince_Charles: Dude, do what I told you to: Get a Twitter and bother @bundle about it.
19:29:27 <Prince_Charles> OK
19:29:28 <Vorpal> known issue as listed on some page there
19:29:40 <Vorpal> cfj, AND report it to bugzilla
19:29:53 <cfj> Vorpal: He already fucking did, like I said last time, that won't help in a billion years.
19:29:59 <Vorpal> hm
19:30:06 <Vorpal> so twitter then, sounds like a good plan
19:30:21 <Prince_Charles> Vorpal, I have had literally no human response thus far.
19:30:31 <cfj> Prince_Charles: Was that OK re: Twitter?
19:30:31 <Vorpal> Prince_Charles, anyway Trine is amazing, but requires non-intel graphics
19:30:37 <Prince_Charles> I doubt I will get one if I throw it into the vast bug pool of Twitter.
19:30:50 <cfj> Because it really is the best strategy, if you see the rate of responses to people on http://twitter.com/#!/humble.
19:31:00 <cfj> Prince_Charles: Dude, if you ping @humble they'll see it.
19:31:06 <Prince_Charles> cfj, I'm going to try the Frozenbyte stuff to get an empirical proof that I paid for a package of software which doesn't work.
19:31:11 <Prince_Charles> cfj, I meant Bugzilla.
19:31:18 <Prince_Charles> Blame my lower brain functions.
19:31:46 <Vorpal> wtf is Trauma? a new game heh
19:32:07 <Vorpal> oh well will download it once I'm back on my desktop
19:33:23 <CakeProphet> ...I apparently have op privs on a channel called #anon
19:33:26 <CakeProphet> I wonder when that happened.
19:33:35 <CakeProphet> no one's in it but it's registered still.
19:33:49 <Vorpal> CakeProphet, who registered it? Who else have access in it?
19:34:00 <CakeProphet> ChanServ(ChanServ@services.)- Founder : CakeProphet
19:34:02 <CakeProphet> apparently I did :P
19:34:08 <Vorpal> XD
19:34:13 <fizzie> I think I saw a Trauma review somewhere recently.
19:34:26 <CakeProphet> 3 years ago.
19:34:32 <Vorpal> fizzie, any good?
19:34:39 <Vorpal> CakeProphet, dig up your irc logs from back then
19:34:45 <CakeProphet> "my irc logs" ha
19:34:49 <Vorpal> CakeProphet, ?
19:34:51 <CakeProphet> I don't have those.
19:34:53 <Vorpal> oh
19:35:01 <Vorpal> then wonder forever
19:35:28 <fizzie> Vorpal: Well, uh... "different", I believe. The reviewer liked it.
19:36:39 <Vorpal> fizzie, different like for example Bastion, Braid or that black and white game I forgot the name of currently
19:36:41 <Vorpal> ?
19:37:03 <CakeProphet> I believe you're thinking of the game Black and White
19:37:30 <Vorpal> no not that one
19:37:54 <Vorpal> a recent game, that was made in black and white and some shades of gray
19:37:57 <Vorpal> puzzle game
19:38:44 <Deewiant> LIMBO?
19:38:48 <fizzie> Vorpal: It's more of a story/interactive/thing than a game, I think. But I haven't played it.
19:39:00 <Vorpal> Deewiant, yes, thanks
19:39:03 <Vorpal> fizzie, right
19:39:17 <cfj> fizzie: Prince_Charles: Vorpal: So the Bundles have made over $6.510 million in total now.
19:39:36 <cfj> (Wikipedia figures + a day old or so total of the current Bundle, but it had doubled from the previous value in, like, hours, so it'll be way more now.)
19:39:39 <Vorpal> cfj, quite impressive
19:39:43 <CakeProphet> this game is puzzle game that is black and white, but I doubt it's what you're thinking of: http://www.flasharcade.com/arcade-games/play/shift-game.html
19:39:47 <quintopia> none from me though. i just sit and suffer when people tell me how awesome they are.
19:39:56 <cfj> Vorpal: Bit more than "quite".
19:39:58 <Vorpal> CakeProphet, see above, Limbo
19:40:17 <CakeProphet> oh
19:40:26 <cfj> It's good to finally have some proof that traditional distribution models are completely inefficient.
19:40:44 <Vorpal> cfj, how much has this bundle made?
19:40:53 <cfj> quintopia: Context?
19:40:57 <Vorpal> due to the more than average thing it seems to be climbing VEEERY slowly up
19:41:04 <fizzie> Vorpal: $480,779.60 now.
19:41:10 <Vorpal> heh
19:41:25 <cfj> Vorpal: Well... it went from $200,000 to $400,000 in hours.
19:41:41 <cfj> I don't know why the more than average thing would make it go slower; it was present in previous Bundles too.
19:42:03 <cfj> Anyway, there's twelve days left, so I suspect it'll make more than the Frozenbyte bundle.
19:42:11 <Vorpal> cfj, it wasn't introduced right at the start last time
19:42:13 <cfj> I guess: one to two million.
19:42:36 <cfj> Probably less than two million but c'mon, it's only been up a few days and it's half way to what the Frozenbyte bundle got.
19:42:41 -!- ais523 has quit (Remote host closed the connection).
19:42:43 <cfj> fizzie: "TRAUMA is a unique photographic experience by game designer Krystian Majewski. Dive into the mind of a traumatized young woman to learn and understand."
19:42:48 <cfj> Oh no, it's one of those Art Games.
19:42:55 <Vorpal> cfj, don't like art games?
19:43:09 <cfj> Vorpal: Sure I do, but come on, look at their site: http://www.traumagame.com/
19:43:12 <Vorpal> cfj, see it not so much as a game as an experience
19:43:17 <cfj> It looks like a site for a pretentious novel.
19:43:18 <Vorpal> cfj, interesting
19:43:20 <cfj> Vorpal: also did you really just say that.
19:43:24 <fizzie> cfj: Says one commentator: "Trauma is an overpriced collection of panoramic photos with grossly shallow gameplay, wedged into a pretentious shell of a story."
19:43:27 <Vorpal> cfj, no I didn't
19:43:35 <Vorpal> cfj, the irc client is lying to you
19:43:44 -!- CakeProphet has quit (Quit: leaving).
19:43:45 <cfj> Vorpal: Good because I would have to drive to Birmingham, wrestle control of ais' IRC client from him, and ban you.
19:43:51 <cfj> fizzie: http://www.traumagame.com/pics/screenshot02.jpg. Art.
19:44:05 -!- CakeProphet has joined.
19:44:05 -!- CakeProphet has quit (Changing host).
19:44:06 -!- CakeProphet has joined.
19:44:14 <CakeProphet> weweeeee
19:44:16 <fizzie> "Clicking on certain areas of each photo shifts the perspective, while drawing symbols learned from collectable Polaroids allows the player to examine or manipulate objects. The imagery is often striking: a building bends and collapses as if made of thin rubber; a wall is sucked into an imaginary plughole; a blurry figure suddenly shatters into tiny fragments."
19:44:17 <fizzie> Art.
19:44:27 <cfj> Ah yes, Polaroids.
19:44:27 <Vorpal> cfj, anyway, I suggest you play that weird PS3 game that came out recently (or was it demoed? I don't remember). Journey I think it was called.
19:44:30 <cfj> The defining mark of art.
19:44:31 <Vorpal> looked VERY much like art
19:44:54 <cfj> http://en.wikipedia.org/wiki/Journey_(2012_video_game)? Looks like it's coming out next year.
19:45:09 <cfj> "In Journey, the player takes the role of a robed figure in a desert. The game features no map or instructions, only a large mountain in the distance that the player journeys toward.[2] While traveling the player can encounter other players, one at a time, if they are playing online. Players cannot speak to each other, but can help each other in their journey or not as they wish.[3] Players met online will
19:45:09 <cfj> not be identified with a username and voice or text communication will not be possible with the other player."
19:45:10 <Vorpal> cfj, guess I saw it demoed at a video from E3 then
19:45:12 <cfj> This... is a game?
19:45:28 <cfj> There is literally no gameplay, it's like Second Life but without social interaction or customisation. So it's like... Zeroth Life.
19:45:43 <cfj> "Hidden areas will contain tapestries and other clues as to the events leading up to the game, the story of which has not yet been announced."
19:45:48 <cfj> I sure hope they just forgot to mention the gameplay part.
19:45:54 <Prince_Charles> cfj, it looks interesting, TbH.
19:46:05 <fizzie> The gameplay: take one foot, put it in front of the other.
19:46:14 <Vorpal> cfj, I'm not sure. Let me link to a quite humorous video review of the preview of it (not yogscast, but next best thing)
19:46:16 <cfj> Prince_Charles: Sure, but I'll wait for the reviews to come in before buying it. And also buying a playstation three I guess. :p
19:46:34 <Prince_Charles> cfj, I think it's basically a puzzle platformer with a lot of walking.
19:46:40 <Vorpal> cfj, Prince_Charles: https://www.youtube.com/watch?v=IFvbrk6UA84
19:46:41 <fizzie> "The only way players can communicate audibly with each other is with a wordless shout." Right.
19:46:44 <cfj> Wolfram Launches Computable Document Format (CDF): Bring Documents to Life with the Power of Computation
19:46:45 <cfj> oh no
19:46:52 <cfj> fizzie: Morse.
19:46:52 <Prince_Charles> Oh jesus
19:47:01 <fizzie> What, you can go and be all "AAAAAAA!" to others, but that's it?
19:47:09 <Vorpal> fizzie, just watch https://www.youtube.com/watch?v=IFvbrk6UA84
19:47:10 <cheater> cfj: it sounds like those early 90s games where just being able to walk in 2.5D was amazing
19:47:14 <Vorpal> it will explain nothing
19:47:27 -!- cfj has changed nick to elliott.
19:47:31 <elliott> Think I'm done with that nick.
19:47:31 <Vorpal> well maybe a bit. Quite a nice art style to the game.
19:47:37 <fizzie> Vorpal: Can I watch it without sounds?
19:47:46 <elliott> fizzie: You'll miss the aaaas.
19:47:50 <Vorpal> fizzie, no
19:47:52 <fizzie> Oh yes, it has the transcribe-audio button.
19:47:54 <Vorpal> fizzie, it is commented
19:47:56 <elliott> fizzie: Oh dear.
19:48:02 <Vorpal> fizzie, no idea how well that will work
19:48:08 <elliott> Vorpal: Terribly.
19:48:10 <Vorpal> elliott, ah
19:48:11 <fizzie> Certainly it will work well: it always does.
19:48:12 <elliott> It's a comic relief button.
19:48:18 <Vorpal> ...
19:48:22 <Vorpal> elliott, right
19:48:30 <fizzie> "cattle are still listed here here i cannot expertise thousand uh... eleven"
19:48:30 <elliott> Vorpal: Ooh that jump was nice.
19:48:32 <fizzie> Good start.
19:48:44 <Vorpal> fizzie, definitely NOT the right thing
19:48:56 -!- Ngevd has quit (Quit: Leaving).
19:48:57 <elliott> OMG you rae made of cloth.
19:48:57 <CakeProphet> dude you guys
19:48:58 <elliott> That is the best.
19:49:05 <elliott> Prince_Charles: I am sorry but I am cloth now.
19:49:06 <CakeProphet> what if there were a Harvest Moon MMO
19:49:16 <CakeProphet> and you could SIMULATE FARMING IN A SMALL TOWN with peopel.
19:49:28 <Prince_Charles> elliott, it was mentioned in the SA Homestuck thread as basically being WV: The Game.
19:49:37 <fizzie> Vorpal: "flower uh... got rave reviews a vote seville truck figure out what exactly it"
19:49:40 <Vorpal> Prince_Charles, hahah
19:49:43 <elliott> Prince_Charles: WV isn't: made of cloth.
19:49:55 <Vorpal> fizzie, flower was another game mentioned, that is about it
19:49:55 <Prince_Charles> elliott, HOW DO WE KNOW
19:50:03 <elliott> Prince_Charles: CARAPACES ARE NOT CLOTH
19:50:06 <elliott> THEY ARE HARD AND BLACK
19:50:16 <fizzie> Vorpal: "still it's a flower in the sense that it's more experienced the nanny"
19:50:21 <Vorpal> fizzie, no
19:50:22 <Vorpal> just no
19:50:24 <elliott> `addquote <fizzie> Vorpal: "still it's a flower in the sense that it's more experienced the nanny"
19:50:29 <HackEgo> 690) <fizzie> Vorpal: "still it's a flower in the sense that it's more experienced the nanny"
19:50:31 -!- itidus20 has joined.
19:50:46 <MDude> Journey seem slike it'll be pretty atmospheric, with some not-bad puzzles.
19:50:53 <Prince_Charles> elliott, WHAT IF IT'S JUST REALLY HARD CLOTH
19:50:58 <elliott> I do like the idea of, like, a single-player game that just happens to be MMO'd up.
19:51:07 <CakeProphet> elliott: see: demon's souls
19:51:07 <elliott> It's like the Network Headache of game concepts.
19:51:14 <CakeProphet> elliott: sort of
19:51:16 <elliott> CakeProphet: Sorry no Network Headache is DEFINITELY the better prior art here.
19:51:21 <fizzie> Vorpal: "talk to somebody father usage roaring in the south"
19:51:32 <CakeProphet> elliott: demon's souls is the best though.
19:51:52 <Vorpal> fizzie, dude watch it later with sound on
19:51:53 <CakeProphet> best console game anyways.
19:52:45 <fizzie> Based on the video there's in fact some gameplay too.
19:53:34 <CakeProphet> what makes demon's souls different from most games is that it's actually /difficult/
19:54:01 <elliott> Prince_Charles: Where do they put on the Mayoral Sash.
19:54:06 <Vorpal> CakeProphet, hm there are other difficult games. Plenty of them.
19:54:14 <Prince_Charles> elliott, that's what the scarf is.
19:54:16 <CakeProphet> Vorpal: yes that's true.
19:54:33 <Vorpal> CakeProphet: Dwarf Fortress, Nethack, ARMA, Red Orchestra to mention a few
19:54:44 <CakeProphet> Vorpal: plenty is not most though. LEARN 2 AMBIGUOUS QUANTIFIER
19:54:48 <Prince_Charles> Vorpal, dude, DF is not all that hard.
19:54:52 <Prince_Charles> Even without danger rooms.
19:55:04 <Vorpal> Prince_Charles, hm true. nethack is however hard
19:55:11 <itidus20> CakeProphet: my old chat friend liked a 2d side scroller game i made once cos frankly it was insanely difficult
19:55:19 <monqy> I've heard reports of nethack being easy
19:55:25 <monqy> can't trust anyone!!
19:55:27 <CakeProphet> demon's souls pretty much absolutely rapes you when you fail.
19:55:53 -!- oerjan has joined.
19:56:12 <itidus20> CakeProphet: imagine like, double dragon, except where an individual enemy has several minutes worth of hitpoints
19:56:15 <CakeProphet> but allows you to make up for it. basically you lose all of the xp you haven't used when you die, and you can get back by reaching the place where you died.
19:56:22 <CakeProphet> but if you die again then you lose all of those points.
19:56:25 <Prince_Charles> monqy, I think it's easy if you're good at it.
19:56:25 <fizzie> Vorpal: Final conclusions: "steria mileage may vary severely got to be extremely treat by audit"
19:56:42 <itidus20> well this comment im making doesn't paint a good picture.. there werent that many enemies in it
19:56:49 <CakeProphet> Prince_Charles: this is kind of like how Magicka is an easy game
19:56:53 <CakeProphet> but then people say it's really difficult
19:56:57 <CakeProphet> this is because they're bad at it.
19:57:00 <Vorpal> fizzie, .... no
19:57:11 <elliott> Prince_Charles: NetHack is more annoying than difficult, though I'm totally biased as I'm terrible at it.
19:57:12 <Vorpal> fizzie, dude watch the video with sound
19:57:25 <fizzie> Vorpal: Naaaah, the captions were good enough.
19:57:25 <elliott> Prince_Charles: Ask ais about how Crawl is even moreso. :p
19:57:43 <Prince_Charles> elliott, is this continued bitterness over your lost save.
19:57:44 <Vorpal> fizzie, ... totally inaccurate however
19:57:46 <CakeProphet> dude what if
19:57:48 <elliott> Prince_Charles: Definitely.
19:57:49 <CakeProphet> Magicka df combo
19:57:53 <elliott> Aw, Journey has a separate single player mode? :/
19:57:59 -!- kwertii has joined.
19:58:04 <elliott> It should just always have every other player there and you can't do anything about it.
19:58:23 <Prince_Charles> CakeProphet, Toady did say that he didn't want D&D style cheap magic.
19:58:30 <Vorpal> Prince_Charles, most games are easy when you are good at them... In fact most things in life are.
19:58:39 <CakeProphet> you build a fortress while also fending off huge waves of enemies by combining elements to form spells.
19:58:49 <CakeProphet> Prince_Charles: yes I agree that would be bad.
19:58:52 <itidus20> my old 2d game is named either runch or turbo fight.... and its hard
19:59:03 <Vorpal> CakeProphet, ouch
19:59:06 <elliott> `addquote <itidus20> my old 2d game is named either runch or turbo fight.... and its hard
19:59:08 <HackEgo> 691) <itidus20> my old 2d game is named either runch or turbo fight.... and its hard
19:59:14 <Prince_Charles> CakeProphet, he has said that if he implements it it'll basically only be an artefact status modifier or something similar.
19:59:22 <itidus20> i have a video of a scene or 2 of it
19:59:46 <CakeProphet> Vorpal: I like the idea of having an element system where the environment carries elements, and then to use magic you have to harness elements from your environment or something.
19:59:54 <CakeProphet> not necessarily in df just generally
19:59:58 <Vorpal> heh
19:59:58 <CakeProphet> some complex generated world.
20:00:03 <itidus20> this http://www.youtube.com/watch?v=qp3tRxe59sQ
20:00:18 <elliott> itidus20: this is beautiful.
20:00:25 <Vorpal> CakeProphet, btw worst game idea ever: Grand Theft Auto Augmented Reality Edition.
20:00:29 <elliott> Prince_Charles: Dude watch that.
20:00:34 <elliott> Vorpal: Um what that is the best idea I have ever heard.
20:00:41 <Vorpal> elliott, XD
20:00:50 <elliott> I'm not kidding that would literally be the most fun.
20:00:50 <Prince_Charles> oh my god
20:01:03 <CakeProphet> duuude fighting on trains
20:01:06 <itidus20> i wish i had the motivation and inspiration now that i had when i made that game (and video)
20:01:21 <Vorpal> elliott, it would be terminally dangerous
20:01:31 <elliott> Vorpal: OK by AR I basically interpreted you as meaning VR.
20:01:37 <Vorpal> elliott, no I meant AR
20:01:46 <CakeProphet> elliott: why does watching this remind me of SBAHJ
20:01:52 <Vorpal> elliott, VR is actually a good idea
20:01:54 <Vorpal> AR is... not
20:01:57 <elliott> Vorpal: sorry I am too distracted by the awesomeness of VR Grand Theft Auto.
20:02:15 <Vorpal> elliott, is grand theft auto IV worth playing?
20:02:20 <elliott> Dunno.
20:02:23 <CakeProphet> Vorpal: it's not bad.
20:02:34 <CakeProphet> gets old quickly unless I guess you actually do the story stuff
20:02:35 <elliott> I tend to just watch people play GTA games in lieu of actually playing them.
20:02:36 <CakeProphet> but I never did tha.
20:02:38 <Prince_Charles> http://www.youtube.com/watch?v=lyhCuTUvUJw&feature=channel_video_title
20:02:40 <Prince_Charles> itidus20, is this you
20:02:53 <itidus20> oh crap >.< (checks)
20:03:04 <itidus20> i should have thought about this
20:03:34 <Vorpal> elliott, heh
20:03:48 <Prince_Charles> itidus20, no you are better than SgeoN1 by far.
20:03:55 <Vorpal> CakeProphet, don't you have to do a few story missions first at least?
20:03:56 <cheater> hmm
20:04:03 <itidus20> i was in a strange mood when i made that video
20:04:03 <CakeProphet> Vorpal: not with cheat codes.
20:04:07 <CakeProphet> Vorpal: well, maybe.
20:04:11 <CakeProphet> I dunno I don't own it.
20:04:13 <itidus20> my hair is longer now :D
20:04:37 <Vorpal> CakeProphet, and when did not owning games ever stop players playing them...
20:05:01 <CakeProphet> Vorpal: playing from the beginning to figure out whether or not you need story missions before you can just mindlessly drive around with cheat codes and kill everything etc
20:05:03 <Vorpal> elliott, anyway GTA AR, is it bad? (As opposed to GTA VR which would be awesome)
20:05:03 <Prince_Charles> itidus20, I can say with certainty that you look far more dignified than SgeoN1 as well.
20:05:26 <itidus20> in hindsight i didnt sound nearly as loud as i hoped with that video
20:05:29 <Vorpal> CakeProphet, as far as I understood you need to complete at least two missions to be able to use cheat codes
20:05:33 * CakeProphet is the most digitalnitary.
20:05:46 <Vorpal> since you use your in game phone to enter them and get that at the end of mission 2.
20:05:51 <CakeProphet> ah
20:06:31 <CakeProphet> Vorpal: do you own a PS3?
20:06:34 <CakeProphet> or emulator or some weirdness.
20:06:37 <Vorpal> CakeProphet, it was released for PC
20:06:40 <Vorpal> as well
20:06:49 <Vorpal> CakeProphet, but no I don't own a PS3
20:06:55 <Vorpal> I do own a very awesome PC though
20:06:56 <CakeProphet> Vorpal: well no I was going to suggest playing demon's souls which I think is ps3 exclusive.
20:07:03 <CakeProphet> in fact I think it came with some models?
20:07:10 <Vorpal> CakeProphet, I don't own any console in fact
20:07:44 <elliott> I should probably get a console one of these days since I doubt the Linux gaming scene is going to be overly huge any time soon.
20:08:10 <Vorpal> elliott, dual booting is easy enough
20:08:20 <Vorpal> use an old disk for windows
20:08:22 <CakeProphet> elliott: yes play Magicka on Windows.
20:08:32 <elliott> Vorpal: Yes, but then I have to deal with Windows, and hardware incompatibilities.
20:08:33 <fizzie> Also there seems to be a new bundle out every day nowadays!
20:08:34 * CakeProphet got Windows 7 for free from his school.
20:08:45 <elliott> Consoles nicely sidestep those.
20:08:54 <elliott> And also come with a better controller. :p
20:08:57 <Vorpal> elliott, if you have a proper PC instead of a flimsy laptop thingy you could just insert another SATA disk and install windows on that
20:09:02 <CakeProphet> elliott: 1) get ps3 b) play demon's souls
20:09:07 <elliott> Vorpal: FSVO flimsy
20:09:23 <CakeProphet> iii.) profit
20:09:23 <elliott> I'd like to see you break a single moulded piece of aluminium
20:09:31 <Vorpal> elliott, fair enough
20:09:36 <Vorpal> elliott, cramped laptop
20:09:36 <elliott> CakeProphet: But PS3s are ugly.
20:09:39 <Vorpal> you can't argue with that
20:09:50 <CakeProphet> elliott: this is what I think about most when I'm playing video games.
20:09:53 <elliott> Compare PS2s, which are wonderful and flat and rectangular.
20:09:59 <CakeProphet> "wow that computer box is an eyesore"
20:10:05 <elliott> CakeProphet: Dude the PS3 has like the ugliest curve I have ever seen.
20:10:13 <itidus20> my slim ps2 has an official vertical stand
20:10:23 <Vorpal> elliott, I have space for like 7 x 3.5" disks in my desktop. + 4 x 5.whatever"
20:10:33 <CakeProphet> elliott: okay find get exbawks and supprot vondoes
20:10:53 <Vorpal> oh wait, 8 3.5", one of them has front side access (floppy, card reader or whatever)
20:10:57 <elliott> Hmm, it looks like they made the PS3 less ugly.
20:11:03 <fizzie> The PS3 controller (DualShock 3) plugs into a regular computer just fine, then you get a real controller. (All the other drawbacks still apply.)
20:11:06 <Vorpal> elliott, the last version can't run linux iirc
20:11:07 <elliott> Can we stop for a moment to admire the DualShock controllers again? They are like the best controllers.
20:11:10 <itidus20> elliott: man i can't tell you how rare those vertical ps2 stands are in the stores
20:11:13 <elliott> Vorpal: A thing which I care about to no end.
20:11:20 <Vorpal> elliott, :/
20:11:45 <elliott> Vorpal: I'm not inclined to give Sony money because of their practices, but I don't really care about running a low-spec pointless unsupported buggy Linux machine.
20:11:45 <CakeProphet> a ps2linux is fine.
20:11:46 <Prince_Charles> <elliott> I'd like to see you break a single moulded piece of aluminium
20:11:52 <Prince_Charles> Aluminium isn't too strong?
20:11:54 <Vorpal> elliott, I prefer the original xbox controllers. Because of their nice size. They were kind of nice to hold compared to the small controllers of most other consoles
20:11:55 <elliott> Prince_Charles: With your bare hands.
20:12:04 <elliott> Prince_Charles: Or, say, OK, you can have a four storey drop.
20:12:10 <elliott> That should be enough to destroy most laptops easily.
20:12:12 <CakeProphet> honestly I like xbox 360 controllers the best.
20:12:19 <CakeProphet> but ps2/ps3 is fine.
20:12:21 <Prince_Charles> <elliott> CakeProphet: But PS3s are ugly.
20:12:31 <Prince_Charles> But they have such a progressive attitude towards DRM!
20:12:45 <itidus20> I think playstation1 was the ultimate console, at least by the time I owned one they actually worked without breaking down
20:12:53 <elliott> PlayStation or psone
20:13:03 <elliott> The PS One is the weirdest thing.
20:13:23 <itidus20> it has some of the best games ever made
20:13:24 <fizzie> I prefer the N64 controller, it's the only one that has place for my third hand.
20:13:31 <CakeProphet> http://en.wikipedia.org/wiki/Dark_Souls now this thing is out which is like a kind of sequel to demon's souls
20:13:34 <CakeProphet> I bet it's awesome.
20:13:39 <CakeProphet> er will be out soon
20:13:39 <elliott> `addquote <fizzie> I prefer the N64 controller, it's the only one that has place for my third hand.
20:13:41 <HackEgo> 692) <fizzie> I prefer the N64 controller, it's the only one that has place for my third hand.
20:13:55 <elliott> I suppose I might buy one of them Xboxes.
20:13:56 <elliott> Xboxen,.
20:14:01 <elliott> s/,././
20:14:03 <CakeProphet> no ps3 play demon's souls
20:14:07 <elliott> http://upload.wikimedia.org/wikipedia/commons/1/17/Xbox_360_S.png
20:14:08 <CakeProphet> xbox 360 is for chumps.
20:14:12 <elliott> What compelled them to pre-crumple the front?
20:14:12 <itidus20> the ps1/n64/saturn era was basically the renaissance of gaming....
20:14:13 <elliott> Like
20:14:18 <elliott> Do they hire someone to punch a dent in the new Xboxen
20:14:22 <elliott> Before sending them ou to stores
20:14:23 <itidus20> that was the best time to be a gamer, im glad i was a part of it
20:14:25 <elliott> out
20:14:27 <elliott> Is that their design strategy
20:14:33 <elliott> Prince_Charles tell me that doesn't look like someone punched it hard
20:14:33 <Prince_Charles> elliott, so that they'd be more resistant to kicks when they broke.
20:14:51 <elliott> OK I cannot buy a console that ugly I am sorry it just is beyond me.
20:14:57 <Prince_Charles> They're pre-kicked so all the kickedness is used up.
20:14:58 <elliott> What's the best non-crumpled console.
20:15:01 <elliott> Prince_Charles: X-D
20:15:05 <itidus20> CakeProphet: fighting on trains is either a reference to final fantasy 6 or drunken master 2
20:15:13 <CakeProphet> elliott: maybe the design helps with overheating which was a problem with earlier cases.
20:15:18 <elliott> itidus20: Two of the greatest games of all time.
20:15:25 <elliott> CakeProphet: Making things more cramped cools them?
20:15:33 <elliott> Seventh generation video game consoles
20:15:33 <elliott> PlayStation 3 · Wii · Xbox 360 · Zeebo
20:15:35 <itidus20> urmm.. the second was technically a non-interactive kung fu film
20:15:35 <CakeProphet> the bottom looks wider to me than the original.
20:15:36 <elliott> What the FUCK is a Zeebo?
20:15:49 <itidus20> elliott: ohh... video time o.o
20:15:58 <Prince_Charles> elliott, hey, a dent increases the surface area to volume ratio.
20:15:59 <Vorpal> elliott, yes, less space for the heat to build up in obviously
20:16:04 <CakeProphet> also notice the huge vent
20:16:06 <elliott> OK a Zeebo looks like something which causes drama in the revision history to [[Template:Seventh generation game consoles]].
20:16:14 <CakeProphet> that is not present on other models.
20:16:44 <elliott> Zeebo sucks cock, does it real mexican. Zeebo will not work with our advanced internets why don't we just leave them in south amelica whele they berong!!!
20:16:44 <elliott> DOWN WITH ZEEBO! DOWN WITH ZEEBO! DOWN WITH ZEEBO! Mr. Briney: ROAAAAARRR ZEEBO! Okay, srsly, ffs, keep the gd zeebo off 7th gen console list thingy. That is all. (A) —Preceding unsigned comment added by 98.24.202.197 (talk) 05:51, 1 July 2009 (UTC)
20:17:02 <elliott> Convincing arguments:
20:17:02 <elliott> [[
20:17:02 <elliott> It really doesn't matter. It's staying off the template. —Preceding unsigned comment added by 211.28.152.244 (talk) 06:02, 7 July 2009 (UTC)
20:17:02 <elliott> And with that kind of talk and continued vandalism warnings, you will wind up with your IP banned. --Marty Goldberg (talk) 18:46, 7 July 2009 (UTC)
20:17:02 <elliott> I.. really don't care, sorry. —Preceding unsigned comment added by 211.28.152.244 (talk) 00:30, 8 July 2009 (UTC)
20:17:05 <elliott> ]]
20:18:38 <itidus20> http://www.youtube.com/watch?v=mMFngT6Ie2c -- this is the sort of shit i used to get inspiration from when making fighting games
20:19:22 <itidus20> maybe one day i will get inspired again
20:19:27 <Vorpal> what is the fun in fighting games, they just seem so booooring
20:19:30 <CakeProphet> smash bros brawl = best fighting game
20:19:32 <Vorpal> (no offence meant)
20:19:40 <itidus20> Vorpal: exactly...
20:19:44 <elliott> fizzie: Can you use a PS2/3 controller with an Xbox 360? :p
20:19:50 <CakeProphet> no brawl is in no way boring.
20:20:09 <monqy> is CakeProphet being serious i can';t tell
20:20:24 <CakeProphet> no I legitimately enjoy that game.
20:20:25 <itidus20> Vorpal: that video is fight scenes from one of my favorite films :D
20:20:38 <pikhq> elliott: I'm pretty sure USB HID devices don't normally work on the 360.
20:20:53 <itidus20> but the voices are dubbed strangely
20:20:55 <fizzie> Incidentally, I recently played a bit that free Trackmania version; was browsing the Steam store. It is very obnoxious: it's all "you must invite a buddy to unlock this track" "you must challenge a friend via file to unlock this track" "you must have a buddy in your buddy list to unlock this track" "you must talk to a friend about Trackmania to unlock this track".
20:20:56 <pikhq> (unlike the PS3)
20:20:59 <elliott> pikhq: But the Xbox controller is so ugley.
20:21:03 <Vorpal> itidus20, no sound atm. But it looks utterly silly
20:21:04 <elliott> And uneeoergoengorengomic.
20:21:09 <itidus20> hahahha
20:21:13 <fizzie> It's discrimination against us friendless people is what it is.
20:21:32 <CakeProphet> elliott: xbox 360 controller is quite ergonomic though.
20:21:47 <itidus20> dragon ball manga was inspired by this movie too
20:21:55 <elliott> CakeProphet: Dude, I am a member of the cult of DualShock superiority.
20:21:59 <Vorpal> fizzie, is trackmania a good game though? It is about non-dirty racing isn't it?
20:22:10 <CakeProphet> elliott: no I agree it's a good controller as well
20:22:10 <elliott> Hmm, Fez is coming to Xbox.
20:22:12 <Vorpal> as in, no powerups or weapons or such
20:22:13 <elliott> So that's a point in Xbox's favour.
20:22:23 <Vorpal> elliott, Fez being=?
20:22:23 <CakeProphet> but the 360 control is quite comfy.
20:22:25 <Vorpal> s/=//
20:22:34 <elliott> Vorpal: http://gamevideos.1up.com/video/id/17594
20:22:36 <elliott> That thing.
20:22:45 <elliott> It's supposedly coming out next year, after being in development since like forever.
20:22:58 <Vorpal> hm
20:22:58 <elliott> But at least they actually have new gameplay footage out recently so I guess it's not entirely vapourware.
20:23:04 <itidus20> a painting is a physical object complete in and of itself
20:23:07 <elliott> Vorpal: Stick with it for a few minutes before dismissing it
20:23:12 <Vorpal> elliott, no flash
20:23:13 <elliott> It takes a little while to reveal why it's interesting :P
20:23:18 <elliott> Vorpal: Your loss
20:23:22 <Vorpal> elliott, *shrug*
20:23:29 <itidus20> a painting consists of 2 components. the canvas and the paint
20:23:32 <fizzie> Vorpal: Well, yes, it's about non-dirty racing; but it's very cartoonish. Actually it reminds me of Stunts (except modernized) a little bit. (Not too much.)
20:23:53 <fizzie> Lots of loops and long jumps and that sort of things.
20:23:57 <itidus20> an arcade game is a physical object complete in and of itself. it consists of hardware and software.
20:23:57 <Vorpal> fizzie, I saw a video of trackmania 2, looked quite photorealistic, even if the tracks didn't
20:24:11 <Vorpal> had loops and such
20:24:27 <Prince_Charles> oerjan, ping.
20:24:28 <fizzie> I don't really know about how the versions go; the current free one is "Trackmania Nations Forever" or something.
20:24:31 <CakeProphet> monqy: why is smash bros not awesome?
20:24:38 <Vorpal> fizzie, I see
20:24:43 <fizzie> I tried it out back before they added the "Forever" into it.
20:24:43 <Prince_Charles> monqy is stupid and wrong end of.
20:24:53 <itidus20> i think in the long run, the idea of games built specifically for a specific piece of hardware will become fashionable again
20:24:56 <elliott> monqy never said it wasn't awesome did he
20:24:56 <Vorpal> heh
20:25:03 <CakeProphet> he asked if I was joking
20:25:03 <Prince_Charles> He'd better not have.
20:25:04 <fizzie> But they have a for-money Trackmania United, and something called Trackmania Canyon is advertised at the end of each session.
20:25:06 <CakeProphet> after I talked about it being awesome.
20:25:13 <Vorpal> fizzie, the forever part is a track with an infinite loop
20:25:21 <CakeProphet> which sort of implies that he might not like it.
20:25:26 <Vorpal> fizzie, I think I saw a video of Trackmania 2 Canyon? Hm.
20:25:29 <itidus20> like you will have master game developers who craft each game as an individual unit
20:25:40 <Prince_Charles> CakeProphet, he might be one of those poor deluded souls who prefer Melee.
20:25:45 <itidus20> not as a product to be manufactured
20:26:04 <fizzie> Vorpal: Oh yes; it looks very much more realistic.
20:26:10 <Prince_Charles> OK so
20:26:16 <Prince_Charles> Can we all just concur
20:26:16 <Vorpal> fizzie, newer game, not strange
20:26:17 <CakeProphet> Prince_Charles: melee was the shit back in the day, but... brawl feels more balanced to me, and the physics are awesome.
20:26:24 <fizzie> Vorpal: http://www.destructoid.com/elephant/ul/81863-trackmania-forever.jpg is what the old one looks like.
20:26:30 <Prince_Charles> That either Brawl or Melee is the best.
20:26:31 <elliott> fizzie: Please tell me you have been waiting impatiently for Fez for like a billion years too.
20:26:35 <Prince_Charles> CakeProphet, oh yeah, I prefer Brawl.
20:26:37 <elliott> Prince_Charles: GUESS WHAT I'VE NEVER PLAYED
20:26:38 <Vorpal> fizzie, ah
20:26:42 <fizzie> Vorpal: It's all in this "stadium"-style environment.
20:26:51 <Vorpal> fizzie, ah
20:27:03 <Vorpal> fizzie, the canyon one is... wait for it... in a canyon!
20:27:12 <fizzie> http://www.tweetmmo.com/wp-content/gallery/trackmania-nations-forever/trackmania-5.jpg <- another very illustrative bit.
20:27:16 <Prince_Charles> CakeProphet, for one thing, airdodging isn't as cruel.
20:27:20 <CakeProphet> Prince_Charles: my best character on brawl: Ness
20:27:24 <Prince_Charles> elliott, buy brawl omg we can have a party.
20:27:28 <CakeProphet> Prince_Charles: yes airdodging is awesome this is why I'm good with NEss.
20:27:39 <Prince_Charles> CakeProphet, I prefer Marth because come on swords.
20:27:41 <Vorpal> Prince_Charles, don't you mean Mario Party?
20:28:06 <fizzie> Hmm, Steam wants to sell me Dungeon Siege 3 for 50% off.
20:28:14 <Vorpal> fizzie, never heard of that game
20:28:15 <Prince_Charles> Vorpal, haven't played that
20:28:22 -!- zzo38 has joined.
20:28:22 <Vorpal> Prince_Charles, good for you
20:28:29 <CakeProphet> Prince_Charles: I'm just best with Ness. I have a lot of characters I enjoy playing
20:28:31 <fizzie> Vorpal: It's by SQUARE ENIX, but I think it's a bit more "action" than "RPG".
20:28:33 <CakeProphet> Marth isn't one of them though.
20:28:38 <Vorpal> fizzie, oh.
20:28:49 <zzo38> All functors in Haskell are strong. Does this have anything doing with cartesian closed?
20:28:50 <CakeProphet> Prince_Charles: I'm pretty good with Ike actually. he's not a great character though.
20:28:54 <Prince_Charles> CakeProphet, Marth is great because it's so easy.
20:28:54 <Vorpal> fizzie, what is Square Enix doing? NOT doing RPGs? Wtf.
20:29:10 <fizzie> Vorpal: It's the third already; it's not a new thing.
20:29:13 <Prince_Charles> All of his attacks consist of "swing sword at person adjacent".
20:29:14 <Vorpal> fizzie, heh
20:29:15 <CakeProphet> Prince_Charles: he's pretty much the opposite of Ness. Ness = good in the air. Marth = good on the ground.
20:29:21 <fizzie> Vorpal: Based on images it looks like a glitzy Diablo.
20:29:27 <Prince_Charles> CakeProphet, Marth is pretty good in the air, actually.
20:29:31 <Vorpal> fizzie, oh god
20:29:43 <Vorpal> fizzie, btw I love some of the Square Enix SNES games. Mario RPG for example.
20:29:45 <Prince_Charles> His attacks are all short range but they're pretty damn good, particularly his down one.
20:29:58 <Vorpal> (yes, Square Enix made that, not Nintendo)
20:30:00 <Prince_Charles> I haven't actually played in ages, really.
20:30:09 <CakeProphet> Prince_Charles: as far as characters like Marth I kind of prefer Rob because he has ridiculous ground reach + projectile + air mobility
20:30:39 <oerjan> Prince_Charles: pong
20:30:48 <elliott> <Vorpal> Prince_Charles, don't you mean Mario Party?
20:30:51 <fizzie> Vorpal: Apparently of the sieges, III is the first one that's published by SQUARE ENIX, though.
20:30:52 <elliott> Mario Party is like War: The Game.
20:30:57 <Prince_Charles> oerjan, what the hell is the topology in Surface Madk screwed it up so badly I don't even.
20:31:01 <CakeProphet> elliott: dude what if there were online Risk
20:31:06 <CakeProphet> elliott: we could all play Risk.
20:31:11 <Vorpal> fizzie, heh
20:31:15 <Prince_Charles> CakeProphet, ROB is pretty cool, although that's a given.
20:31:18 <zzo38> CakeProphet: There is, on X-Bit, which is now defunct, however.
20:31:33 <zzo38> But it did have a Risk game (it was not called Risk though, but the rules are the same).
20:31:41 <CakeProphet> zzo38: same map
20:31:43 <CakeProphet> the map is important.
20:31:45 <fizzie> Vorpal: Seems that Obsidian wrote the game, and Square bought the franchise, or something like that.
20:31:47 <zzo38> Yes, same map.
20:31:48 <CakeProphet> er, that was a question.
20:32:21 <Vorpal> fizzie, heh
20:32:22 <CakeProphet> Prince_Charles: for a while I played as Ganondorf because he's the worst character in tournament rankings.
20:32:37 <zzo38> It was a Synchronet BBS, so there might be other Synchronet BBSes with the same game, possibly.
20:32:38 <CakeProphet> and would beat experienced players with him.
20:32:48 <Prince_Charles> CakeProphet, well yeah, but tournament rankings are completely orthogonal to mere mortal play.
20:33:01 <CakeProphet> right, that was the conclusion I was testing.
20:33:20 <Prince_Charles> Consider that in Melee the tournament rankings were basically dictated by a couple of very tricky strategies.
20:33:31 <CakeProphet> not quite as much in Brawl but there are a few.
20:33:42 <CakeProphet> mainly involving stupid grab combos.
20:33:51 <Vorpal> fizzie, hm or was Mario RPG a Square game? Prior to merger?
20:33:57 <Vorpal> oh yes, it was
20:34:12 <oerjan> Prince_Charles: hm do i recall correctly that it's a square grid where on the north and south edges you switch to another column
20:34:15 <oerjan> ?
20:34:20 <zzo38> If I make a telnet service in my computer, it will also have accounts and I might allow users to add their own programs using a virtual machine.
20:34:30 <Vorpal> fizzie, Chrono Trigger, Secret of Mana, the good final fantasy. Square was awesome
20:34:37 <CakeProphet> I usually deal with people who grab a lot by jumping around a lot. In fact, hopping is my primary means of transportation when I'm playing Ness. I hop everywhere.
20:34:52 <Prince_Charles> oerjan, east and west wrap the obvious way, but north and south wrap to themselves in a way which is probably best just to look up.
20:35:04 <fizzie> Vorpal: I played Legend of the Seven Stars a very small bit.
20:35:06 <itidus20> ff4 was good.. the trouble was that i never would have figured that game out without the strategy guide
20:35:08 <Prince_Charles> CakeProphet, grabs are just these things that are there to me.
20:35:24 <Vorpal> fizzie, ah
20:35:37 <Vorpal> ^style ct
20:35:37 <fungot> Selected style: ct (Chrono Trigger game script)
20:35:39 <elliott> Prince_Charles: we have interwiki.
20:35:41 <Vorpal> fungot, Square
20:35:42 <fungot> Vorpal: you! take! we find! hey! is that for us! the chef's in a snit, trying to get food to the front lines. heard a spell to energize the sword takes immense evil! indeed! this thing. what you have? transform! this trading house. it's the kind! i've decided to stay with these humans! you're a traitor! you're not our king! but, we are far outnumbered!
20:35:59 <SgeoN1> What's wrong with how I look?
20:36:02 <itidus20> Vorpal: i got to the final battle in secret of mana (i think) and lost miserably
20:36:08 <CakeProphet> Prince_Charles: er, just there?
20:36:09 <itidus20> that was basically that
20:36:16 <Vorpal> itidus20, it wasn't that hard once you knew what you were doing
20:36:24 <Vorpal> itidus20, anyway just reload the last save
20:36:25 <elliott> Prince_Charles: also, you violated strong wiki policy.
20:36:25 <itidus20> its a dragon right?
20:36:29 <Prince_Charles> elliott, hm?
20:36:35 <elliott> Prince_Charles: Hm to which part?
20:36:40 <Vorpal> itidus20, no, a Mana Beast. But yes looks like a dragon kind of
20:36:42 <Prince_Charles> Strong wiki policy.
20:36:53 <itidus20> vorpal.. ahahah.. the rental store i rented that game from is now out of business
20:37:06 <itidus20> no.. reloading last save is well beyond the realms of possibility
20:37:09 <elliott> Prince_Charles: You must not hide the "User:" from user page links.
20:37:09 <Vorpal> heh
20:37:16 <Prince_Charles> elliott, how strange.
20:37:17 * elliott fixes.
20:37:45 <itidus20> i do have zsnes and a secret of mana rom though
20:37:50 <CakeProphet> Prince_Charles: I do think the tournament rankings reflect fairly accurate on the inherent imbalance in characters. Maybe not the exact a numerical ordering, but the "tiers" are pretty accurate.
20:37:53 <Vorpal> itidus20, keep the girl buffing the hero's sword (and healing and so on) and have him hit the beast, and have the spirit cast offensive spells. You need a few of those faire nuts that resupply your mana
20:37:55 <elliott> 43 - 0 =
20:37:57 <elliott> Prince_Charles: The best spam protection.
20:38:04 <Vorpal> fairy nuts*
20:38:10 <Vorpal> itidus20, forgot what buffs were best
20:38:14 <CakeProphet> Prince_Charles: Ganondorf is probably defininitely the worst character to play as.
20:38:14 <itidus20> Vorpal: and i played it with my brother... we enjoyed it
20:38:22 <Vorpal> itidus20, hm
20:38:29 <Prince_Charles> CakeProphet, I like the way he has a sword and never uses it.
20:38:42 <itidus20> 3 would be nice.. but i doubt many people can actually gather 3 people around a game for that long
20:38:48 <Prince_Charles> (Swords are the key to victory, this is a true fact.)
20:39:00 <CakeProphet> my strategy with Ganondorf is to rely on a well-timed warlock bunch or up-tilt...
20:39:12 <CakeProphet> and in the interim try to not die, with offensive focused on tilts.
20:39:17 <zzo38> He who lives by the sword, dies by the gun.
20:39:30 <CakeProphet> s/bunch/punch/
20:39:35 <Prince_Charles> zzo38, assuming someone else said that first.
20:39:55 <itidus20> Vorpal: yeah it was good bonding time
20:39:56 <zzo38> Prince_Charles: Maybe someone did. I don't know.
20:40:04 <Vorpal> itidus20, mhm
20:40:12 <zzo38> But probably someone did.
20:40:13 <elliott> Prince_Charles: He who lives by the pointy stick, dies by the pointy stick.
20:40:19 <elliott> The moral is pointy sticks hurt.
20:40:33 <Prince_Charles> *pointéd
20:40:50 <elliott> lol, BerliOS is shutting down
20:41:36 <Deewiant> Lol-worthy?
20:41:42 <Prince_Charles> ISTR that Oolite was hosted on BerliOS.
20:41:54 <elliott> Deewiant: A bunch of 'em seem to be shutting down lately
20:41:59 <elliott> What was it last time, SunSITE?
20:42:07 <CakeProphet> Prince_Charles: I wonder what they were thinking when they designed Meta Knight.
20:42:09 <elliott> Something like hat
20:42:10 <elliott> that
20:42:21 <Prince_Charles> CakeProphet, they were thinking about what Kirby would be like if AWESOME.
20:43:01 <elliott> Prince_Charles: Excuse me Kirby is the most awesome.
20:43:45 <zzo38> I made the change one byte of ROM data of Kirby Dreamland 1 for GameBoy in order to correct the scoring (it works regardless of extra mode and configuration mode), because the normal scoring is really badly designed.
20:44:03 <Prince_Charles> elliott, sorry but Meta Knight is awesomer still.
20:44:12 <elliott> Prince_Charles: OK no they are in positions of equal awesomeness.
20:44:31 <CakeProphet> Prince_Charles: many of his attacks have literally milliseconds of lag.
20:44:32 <elliott> Prince_Charles: He is trying way too hard OK.
20:44:33 <zzo38> But which is awesomer in terms of scoring? Possibly not.
20:44:47 <Prince_Charles> CakeProphet, yes, I know.
20:44:55 <CakeProphet> Prince_Charles: and he has a sword
20:44:58 <CakeProphet> so obviously he wins.
20:44:58 <Prince_Charles> His downtilt is just insane.
20:45:13 <elliott> OK stop it you guys are oppressing people like me with no friends.
20:45:26 <Prince_Charles> elliott, Brawl has online play.
20:45:40 <zzo38> Do you believe the scoring is too bad the normal way of that game?
20:45:42 <elliott> Prince_Charles: I DON'T HAVE FRIENDSHIP INTERNET
20:45:44 <CakeProphet> ...but it's laggy and terrible.
20:45:48 <CakeProphet> don't play it online
20:45:50 <CakeProphet> play it with friends.
20:45:57 <elliott> Yeah I can't imagine it'd work well online but OK LOOK THAT INVOLVES ME HAVING FRIENDS
20:45:58 <zzo38> I corrected it by changing an instruction from DEC to AND
20:46:00 <elliott> Wait I will kidnap Prince_Charles.
20:46:01 <Prince_Charles> OK OK Brawl party in Hexham y/n
20:46:04 <elliott> And force him to play SSB with me.
20:46:17 <Prince_Charles> No second B?
20:46:36 <elliott> Prince_Charles: IM NOT CLEVER OK
20:46:41 <CakeProphet> As far as Brawl players go, you'll find I'm simply the best there is.
20:46:42 <elliott> HOW MANY BS ARE EVEN ??//
20:47:26 <CakeProphet> the main issue with Brawl online is that Wii networking tends to suck for some reason.
20:47:31 <Prince_Charles> CakeProphet, yes, this is why you aren't invited.
20:47:48 <zzo38> When I was playing the game, all player decide random character for each individual game and play time mode.
20:47:55 <CakeProphet> time mode is lame.
20:47:56 <zzo38> Three minutes.
20:48:06 <CakeProphet> 5 stock is the best.
20:50:03 <zzo38> When I played Mario Party game, I always used my own scoring rule instead of the one built-in. The money is your base score (fu), and each star doubles (han).
20:52:50 <zzo38> My opinion is that many people do not know a lot of things about game design which is why I wrote an article about it in my gopher; and then people can agree/disagree/complain.
20:53:16 <elliott> If only anyone used gopher.
20:53:55 <zzo38> It is possible to view on HTTP too, but some features are omitted on the HTTP version, such as the ability to send comments.
20:53:59 * CakeProphet feels he would be a fairly good game designer.
20:54:05 <CakeProphet> afterall I did invent portal chess. :>
20:54:16 <zzo38> CakeProphet: Then please make up some game.
20:54:25 <zzo38> You can invent chess game. Can you invent card game?
20:54:37 <CakeProphet> well, not really a fan of those.
20:54:45 <CakeProphet> I could make a bitchin' text-based game. :)
20:54:52 <monqy> bitchin eh
20:55:00 <CakeProphet> monqy: yeah dawg
20:55:03 <zzo38> OK please make up some text-based game
20:55:30 <CakeProphet> IS PORTAL CHESS (MY MAGNUM OPUS) NOT ENOUGH?
20:55:59 <CakeProphet> can't I just make the best chess variant and then retire?
20:56:20 <zzo38> You can if you want to, but I think you can invented other thing too if you can
20:57:29 <elliott> Gregor: Why do people like Trac.
20:58:57 <CakeProphet> elliott: why do people like Java?
20:59:02 <CakeProphet> they exist.
20:59:32 <CakeProphet> "java is good" gets more hits than "java is bad" QED
20:59:54 <CakeProphet> Things that make programming in Java a joy as compared to C++:
20:59:55 <CakeProphet> 1. Inner classes and anonymous classes are cool. C++ doesn't have them, and that sucks big time. (Actually, I'd prefer anonymous functions, as most of the things I write in-place are implementations of one-function interfaces like Runnable.)
21:00:03 <CakeProphet> best argument.
21:01:05 <CakeProphet> Here are the things that make me curse Java designers on a daily basis:
21:01:07 <CakeProphet> 1. No support for types with value semantics. I frequently use iterators in my designs. And when I send an iterator into a function, I want to send a copy, not the iterator that I still own and want to use.
21:01:13 <CakeProphet> this person is bad.
21:01:17 <CakeProphet> I don't like them.
21:03:09 <elliott> value semantics
21:03:10 <elliott> is it qwe
21:03:18 <CakeProphet> qwe?
21:03:24 <elliott> qwe
21:03:38 <elliott> I like how monqy hasn't talked since asking CakeProphet if he was joking.
21:03:38 <CakeProphet> I don't know what that is.
21:03:58 <monqy> hi
21:04:04 <monqy> i've been looking someplace else
21:04:09 <elliott> monqy: ar eyou anti-smasehte brhrothieorngs
21:04:18 <monqy> i'm not a fighting games fan
21:04:26 <elliott> more like
21:04:29 <elliott> gighgting fames gan
21:04:34 <monqy> sure
21:04:39 <CakeProphet> SSB: the least fighting game like fighting game.
21:04:56 <CakeProphet> also the best fighting game.
21:04:58 <oerjan> Prince_Charles: cutting and rearrangement suggests Surface topology is a Klein bottle.
21:05:07 <elliott> oerjan: omg....
21:05:13 <Prince_Charles> Right.
21:05:15 <zzo38> The fighting game I prefer is the card game Yomi
21:05:18 <elliott> beautiful...
21:05:21 <elliott> `addquote <zzo38> The fighting game I prefer is the card game Yomi
21:05:23 <HackEgo> 693) <zzo38> The fighting game I prefer is the card game Yomi
21:06:27 <Prince_Charles> Given an infinitely large memory and instruction sphere, Surface is [[Turing-complete]] because it is possible to reproduce any [[brainfuck]] code.
21:06:30 <Prince_Charles> infini
21:06:34 <Prince_Charles> Pfffffffffffffffffffffffffft
21:06:35 <elliott> tely large
21:06:37 <elliott> klein bottle
21:06:49 <elliott> Prince_Charles: In fairness infinite spheres are like the best.
21:06:58 <CakeProphet> Is it even possible to be Turing complete without infinite memory?
21:07:01 <Prince_Charles> I like the way that he explicitly states mapping conditions
21:07:07 <Prince_Charles> and then allows for it to be infinite
21:07:11 <Prince_Charles> er, *wrapping
21:07:16 <elliott> Prince_Charles: To be fair, so does Funge.
21:07:53 <CakeProphet> I am trying to think of how to emulate a Turing machine without infinite memory and.......
21:07:59 <CakeProphet> nope.
21:08:02 <monqy> whats memory
21:08:06 <elliott> CakeProphet: dude.
21:08:22 <CakeProphet> udueddd
21:08:48 <Vorpal> wtf the lagginess of this game. (GTA IV). It stutters BADLY. And I have high end hardware. Wtf
21:09:01 <CakeProphet> I'm guessing you either have a really long explanation or you're just shocked and can't type.
21:09:08 <CakeProphet> or you're searching for something.
21:09:38 <oerjan> CakeProphet: *unbounded memory
21:09:53 <CakeProphet> can you clarify the difference?
21:10:05 <Prince_Charles> <CakeProphet> I am trying to think of how to emulate a Turing machine without infinite memory and.......
21:10:13 <Prince_Charles> Define 'infinite memory'.
21:10:15 <oerjan> a TM never used infinite memory at any given step
21:10:20 <oerjan> *uses
21:10:29 <zzo38> Yomi card is played each player has a deck of fifty-six cards, two of which are removed before the game starts (one of the removed cards is a rule quick reference card, the other specifies starting HP and global effects).
21:10:33 <Prince_Charles> There need to be an infinite number of possible states of the entire system for it to be TC.
21:10:37 <CakeProphet> still the memory it has available to it is unbounded... which is pretty much infinite right?
21:10:48 <zzo38> There are ten decks to choose from.
21:11:04 <oerjan> CakeProphet: it doesn't need to be allocated up front though, which sometimes matters.
21:11:43 <CakeProphet> either way I'm thinking of the same thing I just used a different possibly less accurate word. I don't think it's possible to be equivalent to unbounded memory in bounded memory.
21:11:48 <monqy> whats
21:11:49 <monqy> memory
21:11:52 <CakeProphet> oerjan: ah yes I suppose so.
21:12:02 <CakeProphet> monqy: can't remember.
21:12:12 <elliott> Prince_Charles is ignore me because
21:12:12 <zzo38> It is possible in bounded memory of the memory cell values are unbounded.
21:12:13 <elliott> he is
21:12:14 <elliott> evil
21:12:38 <CakeProphet> zzo38: ah yes.
21:12:49 <CakeProphet> but that just seems like a different kind of unbounded memory, perhaps.
21:13:06 <CakeProphet> hmmm, so then...
21:13:07 <zzo38> I think Prince_Charles is same as Phantom_Hoover because they even have same username and same host cloak
21:13:15 <elliott> Oh thanks for the info
21:13:23 <CakeProphet> I could emulate brainfuck with three bignum cells, or something?
21:13:28 <Prince_Charles> zzo38, genius detective.
21:14:19 <oerjan> CakeProphet: bounded memory means, with the usual intuition, that your machine can only pass through a finite number of states, which means its halting problem can always be decided by another machine.
21:14:34 <Prince_Charles> For his next trick, he will find Lord Lucan and show that he was responsible for the Mary Celeste.
21:14:52 <zzo38> CakeProphet: Probably you can; you could have the boolean cells, you divide one in half and double the other adding the remainder of the other division
21:15:09 <CakeProphet> oerjan: couldn't I grow memory infinitely though? or am I misunderstanding "states"
21:15:46 <CakeProphet> er
21:15:49 <CakeProphet> nevermind
21:15:57 <CakeProphet> misread bounded as unbounded. :P
21:16:20 <CakeProphet> zzo38: ah that's neat.
21:17:17 <CakeProphet> oerjan: how does a machine go about deciding the halting problem for a bounded memory machine?
21:18:32 <CakeProphet> also doesn't that imply that all real world machines have a decidable halting problem, since all real world machines have bounded memory?
21:19:30 <zzo38> I think you can check by checking duplicate states
21:19:38 <zzo38> Since there is a finite number of states
21:19:52 <zzo38> So it require more memory than you have, to be able to do so.
21:20:10 <CakeProphet> ah okay.
21:20:22 <CakeProphet> that makes perfect sense..
21:20:54 <oerjan> CakeProphet: yes. just emulate it for one more than the maximal number of steps, it must either repeat a state or halt.
21:21:23 <oerjan> for real world machines this can still take eons of time.
21:21:26 <CakeProphet> assuming that the machine can't statelessly insert a truly random bit of information in its memory
21:22:14 <oerjan> CakeProphet: randomness only changes things by degrees, actually - your emulator can test _all_ possibilities.
21:22:32 <CakeProphet> ah
21:22:57 <CakeProphet> er
21:22:59 <CakeProphet> yes.
21:23:25 <CakeProphet> assuming that the randomness is repeated...
21:23:43 <CakeProphet> er no nevermind.
21:23:58 <oerjan> CakeProphet: you can make all the probabilistic transitions into a large matrix and calculate its eigenvalue. it's the same as the proposed new scoring for bfjoust, really :P
21:24:06 <elliott> FSVO new
21:24:16 <oerjan> well, or close to it.
21:24:38 <elliott> "Given an infinitely large memory and instruction bottle"
21:24:39 <elliott> :D
21:24:39 <elliott> Prince_Charles: :D
21:24:40 <oerjan> but same matrix theory.
21:24:49 <elliott> infinitely large memory and instrution bottle
21:26:17 <CakeProphet> monqy: http://en.wikipedia.org/wiki/Computer_data_storage
21:26:55 <oerjan> *maximal eigenvalue and its eigenvector
21:27:36 <oerjan> hm some of the same rare complications as for bfjoust might happen. but they're all solvable with a little more trickiness.
21:27:53 <monqy> CakeProphet: thanks
21:29:42 <oerjan> <elliott__> Phantom_Hoover: Can you get people to start calling you PH irl. <-- also, start wearing a cape.
21:31:37 <Prince_Charles> <elliott> Prince_Charles: :D
21:31:44 <Prince_Charles> I was about to be like what but then I realised.
21:32:34 <oerjan> <tehporPekaC> my name is unknown to anyone in the universe. <-- sure, mr. Adam Polite.
21:38:24 <oerjan> <cfj> "We can't implement this scheme in LLVM. We resort to post processing the assembly it produces." <-- the Evil Mangler has moved on?
21:38:44 <Prince_Charles> http://www.reddit.com/r/askscience/comments/kwjks/assuming_that_highenergy_neutrinos_are/
21:39:00 <Prince_Charles> Jesus christ I want to punch this guy.
21:39:04 <elliott> oerjan: it's now Haskell code apparently ;P
21:39:09 <elliott> s/;P/:P/
21:39:57 <Prince_Charles> elliott, yes, good minion, soon we will control the past with neutrinos.
21:40:09 <Prince_Charles> ONLY NGEVD CAN STOP ME NOW AND I FENCE BETTER THAN HIM
21:40:14 <elliott> Prince_Charles: You're about to get upvoted a billion times, thanks to future magic.
21:40:34 <elliott> Prince_Charles: Oh my god we must never build an FTL neutrino receiver because as soon as we do it'll open the floodgates to the future nagging us.
21:40:36 <Prince_Charles> yaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaay
21:40:49 <elliott> "Why haven't you come up with the obvious solution to global warming yet??? Haha, suckers!"
21:40:57 <elliott> "Guys, you should really start working on jetpacks one of these days; you're running out of time."
21:41:11 <Prince_Charles> We tell them to shut up, then they tell us that they're not going to shut up by turning the power up a billion times.
21:41:19 <Prince_Charles> Eventually, someone shoots the neutrino reflector.
21:41:29 <elliott> "Hey I think you should impeach Obama and elect Ron Paul --EVERYONE EVER FROM THE FUTURE [message sent by unauthorised account RonPaul'sCryonicallyRevivedZombieGhostSkeleton3012]"
21:43:06 <oerjan> Prince_Charles: assuming relativity still holds, breaking causality would require two neutrino producers, one of which is bundled with a detector, and which are moving at relativistic speed wrt each other.
21:43:41 <Prince_Charles> oerjan, actually, I think you could do it with only one.
21:43:49 <elliott> oerjan: Assuming relativity still holds WHILE IT'S BEING COMPLETELY VIOLATED :P
21:44:28 <Prince_Charles> Use light for the outward leg, lulling causality into a false sense of security, then WHAM, neutrinos had hit you ten minutes ago.
21:44:39 <Prince_Charles> s/you/it/
21:44:47 <oerjan> Prince_Charles: no, i don't think so. with just one, there would be no way to cause something to move backwards in its reference frame.
21:45:24 <Prince_Charles> It was based only on suspicion; I'll need to actually work it out.
21:45:32 <oerjan> and if there is any reference frame in which nothing goes backwards in time, causality isn't violated.
21:45:37 <Prince_Charles> One moment please.
21:46:52 <elliott> Prince_Charles: OK we need to know what you came up with, pls hurry up five seconds ago.
21:48:04 <oerjan> elliott: by "relativity still holds" i mean that all (sub-light) inertial reference frames still have equivalent physics
21:48:38 <Prince_Charles> Dammit Alpha let me solve this.
21:48:43 <oerjan> this is still consistent with tachyons as long as you ignore causality
21:49:02 <Prince_Charles> Aha.
21:49:09 * CakeProphet ignores causality on a daily basis.
21:49:47 <Prince_Charles> OK so a Lorentz factor of 2 requires a velocity of .86c note to self.
21:50:20 <Vorpal> I'm running this game from a god damn SSD yet I still get what seems to be loading lag spikes. WTH
21:50:37 <Prince_Charles> Dammit I should be able to calculate time taken for overtaking.
21:50:58 <CakeProphet> Vorpal discovers that GTA IV has terrible lag.
21:51:23 <Vorpal> CakeProphet, it is unplayably bad....
21:51:38 <Vorpal> CakeProphet, as in impossible to drive. You get a lag spike ever second or so
21:51:41 <Vorpal> CakeProphet, wtf
21:51:49 <Vorpal> CakeProphet, is there any world around?
21:52:04 <elliott> Vorpal: You sure did buy GTA IV quickly in the like five seconds after CakeProphet told you it was good.
21:52:11 <Prince_Charles> Oh duh, classical relative velocity
21:52:12 <Vorpal> elliott, who said buy.
21:52:19 <Vorpal> elliott, I'm trying it out before.
21:52:20 <CakeProphet> elliott: I never mentioned it was good.
21:52:26 <elliott> Vorpal: This is an IRC channel full of legitimacy.
21:52:34 <Vorpal> elliott, and well if it is like this: I'm going to uninstall it. Unplayable
21:52:36 <CakeProphet> just that it wasn;t bad. I think.
21:52:55 <Vorpal> I have a Core i7 with a high end Radeon GPU, And I'm running from an SSD. How can I get this kind of performance...
21:53:27 <CakeProphet> you should really just play magicka because it's better.
21:54:20 <Vorpal> CakeProphet, ...
21:54:48 <Prince_Charles> OK yeah this doesn't violate causality dammit.
21:54:50 <elliott> what's the piracy scene like for playstation vs xbox
21:54:50 <Vorpal> CakeProphet, I want some driving that is in an RPG or sandbox and that isn't just pickup trucks (that rules out Dead Island)
21:54:55 <elliott> ????
21:55:08 <Prince_Charles> so sad
21:55:11 <CakeProphet> GTA IV is not RPG-like as San Andres was.
21:55:19 <elliott> Prince_Charles: OK what if
21:55:23 <elliott> Prince_Charles: you made causality
21:55:25 <elliott> out of
21:55:25 <MDude> Dragon Quest Auto
21:55:27 <elliott> sdlkg
21:55:39 <elliott> MDude: Ahahaha.
21:55:44 <CakeProphet> elliott: what if you just ruled out time travel as unpossible
21:55:49 <elliott> Pokemon Theft Auto.
21:55:49 <CakeProphet> tthenwhwwt?
21:55:58 <monqy> adgjkngd
21:55:59 <elliott> CakeProphet: Then how do you explain the neutrinos
21:56:02 <Vorpal> <CakeProphet> GTA IV is not RPG-like as San Andres was. <-- RPG OR SANDBOX I said
21:56:07 <CakeProphet> elliott: differently :P
21:56:07 <Vorpal> it is sandbox
21:56:14 <elliott> CakeProphet: Are they going faster than light or not
21:56:19 <CakeProphet> I assume they are.
21:56:23 <oerjan> :t atanh
21:56:24 <lambdabot> forall a. (Floating a) => a -> a
21:56:29 <CakeProphet> since we measured them as faster.
21:56:38 <oerjan> nice...
21:56:49 <elliott> Prince_Charles: Did you ever manage to explain to CakeProphet why FTL → time travel.
21:57:01 <oerjan> > atanh (tanh (1/2) + tanh (1/2))
21:57:02 <lambdabot> 1.617318958453862
21:57:08 <oerjan> oops
21:57:14 <oerjan> > tanh (atanh (1/2) + atanh (1/2))
21:57:15 <lambdabot> 0.8
21:57:36 <CakeProphet> are you sure there's not another plausible explanation? Maybe time dilation is different when you're going FTL
21:57:42 <oerjan> > atanh (1.000025)
21:57:42 <lambdabot> NaN
21:57:48 <elliott> CakeProphet: That...
21:57:57 <elliott> Prince_Charles: YOU GET TO TALK TO CAKEPROPHET SO LUCKY A+++
21:58:01 <Prince_Charles> CakeProphet, well, since I have the numbers handy.
21:58:15 <oerjan> CakeProphet: that does not matter. we are only looking at the time dilation wrt ordinary sublight frames
21:58:25 <oerjan> which are _observing_ the neutrinos
21:58:27 <Prince_Charles> You're travelling at 0.86c relative to your friend, meaning that you see time moving half as fast for them.
21:59:19 <oerjan> > atanh (1.000025) :: Complex Double
21:59:20 <lambdabot> 5.6448972067895955 :+ (-1.5707963267948966)
21:59:36 <oerjan> eek
21:59:52 <Prince_Charles> 10 seconds in, you send a signal travelling at 2c to them, so they receive the signal after 7.6s from your perspective.
22:00:06 * oerjan smells branch selection problems
22:00:28 <Prince_Charles> Since you see them moving half as fast, you will see their receiver flash after 7.6/2=3.8s.
22:00:48 <elliott> Prince_Charles: I'm unconvinced CakeProphet is paying attention.
22:00:54 <Prince_Charles> I don't even care.
22:01:00 <CakeProphet> totally am.
22:01:18 <Prince_Charles> Their receiver therefore flashes 8.8s into their flight.
22:01:50 <CakeProphet> basically I'm not making a concrete argument of any kind, other than that since we've measured something that seems to contradict our theories and possibly violates causality.
22:01:58 <CakeProphet> maybe this is an indication that something is in need of revision?
22:02:17 -!- DH____ has joined.
22:02:35 <Prince_Charles> They repeat this, and as the system is symmetric between you and them, they see the exact same effect: your receiver flashes earlier into your trip than they were when they fired it.
22:02:59 <Prince_Charles> You therefore receive the reply to a signal sent 10s in less than 8.8s in.
22:03:00 <oerjan> > tanh (atanh (1.000025) + atanh (1/2)) :: Complex Double
22:03:01 <lambdabot> 1.0000083332638894 :+ (-1.0205347470509298e-21)
22:03:09 <Prince_Charles> I assume you see the paradox here.
22:03:10 <oerjan> hm seems to work
22:03:17 <CakeProphet> Prince_Charles: so what if time dilation starts going backards once you go FTL. :>
22:03:26 <CakeProphet> yes I see it.
22:03:59 <Prince_Charles> I think it's because Lorentz transforms allow spacelike geodesics to move forwards or back in time with impunity for different observers, which screws things up, by my knowledge of relativity is far less solid than I'd like.
22:04:04 <Prince_Charles> CakeProphet, doesn't matter.
22:04:36 <Prince_Charles> All that matters is that a signal fired in your reference frame can effect a change at a velocity greater than c.
22:05:30 <oerjan> Prince_Charles: sounds right to me
22:06:40 <Prince_Charles> OK r/AskScience idiot doesn't seem to realise that I was asking how causality violations could be empirically detected and has been acting snottily to me because he thinks he can show me up as a fool.
22:07:42 <oerjan> it occurs to me that the tanh / atanh method does not tell whether the time direction has been reversed
22:08:08 <Prince_Charles> Stop flaunting the fact that you get to know more relativity than me I am very bitter.
22:08:23 <elliott> Prince_Charles: I'll probably flamewar with him if he keeps talking because I like flamewars.
22:08:34 * CakeProphet is the best at flamewars.
22:08:41 <Prince_Charles> oerjan, I'm the biggest fan of hyperbolic geometry ever!
22:09:04 <Prince_Charles> elliott, godspeed.
22:09:37 <elliott> I've got your back friend.
22:17:27 <oerjan> oh hm...
22:17:52 -!- Behold has joined.
22:18:38 -!- DH____ has quit (Read error: Connection reset by peer).
22:18:41 -!- DHeadshot has joined.
22:18:43 <oerjan> > tanh (atanh (1.000025) + atanh (-1.000025)) :: Complex Double
22:18:44 <lambdabot> (-1.0338396805309458e-12) :+ 0.0
22:18:51 <oerjan> > tanh (atanh (1.000025) - atanh (-1.000025)) :: Complex Double
22:18:51 <lambdabot> 0.9999999996875079 :+ 7.653854787386644e-26
22:20:00 -!- BeholdMyGlory has quit (Ping timeout: 240 seconds).
22:20:05 <oerjan> > tanh (atanh (1.000025) + atanh (-0.9999999997)) :: Complex Double
22:20:06 <lambdabot> (-1.0000240005899963) :+ (-2.9392598432279782e-21)
22:21:20 <elliott> Vorpal: fizzie: Oi, I need zlib help.
22:21:21 <oerjan> Prince_Charles: my guess is that 0.9999999997 c is then the approximate speed needed for a neutrino producer that sends a neutrino backwards in time at 1.000024 c
22:21:47 <elliott> I really like the idea that we have to throw away relativity just for a tiny tiny tiny fraction FTL.
22:22:08 <Prince_Charles> oerjan, you're working with standard relativistic energy, yes?
22:22:09 <oerjan> assuming 1.000025 c is the speed they go from a producer at 0 c
22:22:27 <oerjan> Prince_Charles: i'm just using velocity addition and the tanh trick
22:23:19 <oerjan> > let u <+> v = (u+v)/(1+u*v) in 1.000025 <+> 0.9999999997 -- more conventional formula
22:23:19 <lambdabot> 1.0000000000000038
22:23:23 <oerjan> eek
22:23:27 <oerjan> hm
22:23:36 <oerjan> > let u <+> v = (u+v)/(1+u*v) in 1.000025 <+> (-0.9999999997) -- more conventional formula
22:23:37 <lambdabot> -1.000024000591981
22:23:51 -!- BeholdMyGlory has joined.
22:23:59 <elliott> withDeflateInput :: Deflate -> ByteString -> (IO (Maybe ByteString) -> IO a) -> IO a
22:24:01 <elliott> oerjan: the worst api :(
22:24:47 <oerjan> > let u <+> v = (u+v)/(1+u*v) in 1.000025 <+> (-0.99) -- try something smaller...
22:24:48 <lambdabot> 1.0049873436755818
22:25:17 <oerjan> > let u <+> v = (u+v)/(1+u*v) in 1.000025 <+> (-0.9999) -- try something smaller...
22:25:18 <lambdabot> 1.6666111129612653
22:25:23 <oerjan> > let u <+> v = (u+v)/(1+u*v) in 1.000025 <+> (-0.99999) -- try something smaller...
22:25:24 <lambdabot> -2.333372222851394
22:25:31 <oerjan> > let u <+> v = (u+v)/(1+u*v) in 1.000025 <+> (-0.99995) -- try something smaller...
22:25:32 <lambdabot> 2.9998500074916556
22:25:37 <oerjan> > let u <+> v = (u+v)/(1+u*v) in 1.000025 <+> (-0.99997) -- try something smaller...
22:25:37 <lambdabot> 10.998350247481781
22:25:57 <oerjan> > let u <+> v = (u+v)/(1+u*v) in 1.000025 <+> (-0.99998) -- try something smaller...
22:25:58 <lambdabot> -9.000900090016856
22:26:07 <oerjan> > let u <+> v = (u+v)/(1+u*v) in 1.000025 <+> (-0.999975) -- try something smaller...
22:26:08 <lambdabot> 79999.97916991221
22:26:49 <oerjan> something like that to give arbitrary high neutrino speed
22:27:00 <elliott> that big
22:28:17 <CakeProphet> elliott: no the worst api is: hahahaha :: (() -> ()) -> ()
22:28:25 <monqy> ok
22:28:35 <oerjan> well the experimental speed is quite a tiny excess above c, so it stands to reason that magnifying that would need near-c relative velocity
22:29:47 -!- Behold has quit (Remote host closed the connection).
22:29:55 <CakeProphet> you know what's awesome about my location
22:30:07 <CakeProphet> we have this semi-fast-food chain called Zaxby's
22:30:11 <CakeProphet> that's amazing.
22:30:12 -!- copumpkin has quit (Quit: Computer has gone to sleep.).
22:30:31 <elliott> So unique it has 500 locations.
22:30:50 <CakeProphet> s/location/region of the united state/
22:31:23 <CakeProphet> one of the few redeeming qualities of living the southeastern US
22:31:44 <CakeProphet> +in
22:36:41 <CakeProphet> also if I ever leave Georgia there will be NO CHICK-FIL-A WHYYYYY
22:36:50 <CakeProphet> why do we have all of the best chicken-based food chains.
22:36:56 <Prince_Charles> OTOH, you won't be in Georgia any more.
22:37:37 <CakeProphet> you'll never understand the joys of well-made fried chicken.
22:37:51 <CakeProphet> not with that attitude.
22:38:37 <CakeProphet> As of September 2011, Chick-fil-A has 1,583 restaurants in 39 states and the District of Columbia, and is focusing on the Midwest and southern California.[
22:38:43 <CakeProphet> oh nevermind their online store locator is just weird.
22:40:15 <CakeProphet> http://en.wikipedia.org/wiki/Chick-fil-A#Religious_and_political_views
22:40:16 <CakeProphet> lol
22:40:24 <CakeProphet> I find that heading funny.
22:40:49 <CakeProphet> (Chick-fil-a is a strong proponent of Christianity.)
22:40:56 <CakeProphet> "S. Truett Cathy is a devout Southern Baptist who has taught Sunday School since 19xx"
22:40:59 <Prince_Charles> Whodathunkit?
22:41:02 <CakeProphet> 19xx, best year.
22:41:47 <CakeProphet> Prince_Charles: oh well... I was considering the irony of the fast food chain LITERALLY practicing a faith
22:41:50 <CakeProphet> like... as an entity.
22:42:00 <CakeProphet> but okay you can interpret the normal way too that's fine.
22:43:34 <elliott> I think that it is important to note that, in December of 2010, the SPLC officially named AFA and FRC as hate groups. CFA affiliates with both of those organizations. —Preceding unsigned comment added by 72.28.148.50 (talk) 01:06, 5 January 2011 (UTC)
22:43:35 <elliott> The SPLC is nothing more than a highly-partisan, left-wing group that uses name calling as its weapon of choice against individuals and organizations that don't tow the PC line. They deliberately put mainstream groups with rather innocuous agendas in the same category as the KKK and neo-Nazis. "Hate group" in their little world is any group that opposes their hard-line leftist agenda. That an organizat
22:43:35 <elliott> ion like this calls anybody "hateful" is not noteworthy. --AntigrandiosËTalk 14:55, 6 September 2011 (UTC)
22:44:33 <fizzie> What zlib what? (I'm almost slep.)
22:45:37 <CakeProphet> elliott: I haven't really figured out what's bad about an agenda of tolerance. Can you explain?
22:45:58 <elliott> fizzie: I a-fixed it. You should-a: come and see the Bugs Memorial Test Server.
22:46:00 <elliott> CakeProphet: r u srs
22:46:06 <CakeProphet> hold on while I look up these acronyms.
22:46:32 <CakeProphet> southern poverty law center? :P
22:46:45 <fizzie> I don't a computer I slep, sorry.
22:46:57 <elliott> fizzie: You a bet.
22:47:00 <elliott> bad.
22:49:27 <CakeProphet> :^-:
22:49:58 <CakeProphet> %>$
22:50:13 * CakeProphet is practicing for the worst emoticon championship.
22:50:21 <monqy> ok
22:52:29 <Prince_Charles> CakeProphet, you're up against some pretty stiff competition, although tiffany does lack that certain je ne sans I don't remember what the phrase is actually.
22:52:51 <tiffany> ..?
22:53:49 <monqy> o~o
22:53:59 <CakeProphet> [-F
22:54:09 <monqy> i'm glad my face isn't ..?
22:54:13 <monqy> that would probably hurt
22:54:46 <monqy> %>$ too
22:54:56 <monqy> i'd be dead
22:55:07 <CakeProphet> ")
22:55:36 <tiffany> o.o
22:55:38 <oerjan> @|<
22:55:38 <lambdabot> Maybe you meant: . ? @ bf do ft id pl rc v wn
22:55:52 <CakeProphet> oerjan: stick figure
22:55:54 <CakeProphet> with a big head.
22:56:01 <oerjan> correct
22:56:10 <CakeProphet> &_&
22:56:11 <oerjan> the elephant man, to be precise
22:56:34 <monqy> tiffany: come on, you can do better than that
22:56:50 <CakeProphet> #_# pretty much any two symbols and an _ can look like a face to me. except the brackety ones.
22:57:15 <elliott> (_)
22:57:18 <monqy> )_)
22:57:25 <elliott> )_(
22:57:31 <CakeProphet> !_! %_% *_* $_$ :_: '_' '_"
22:57:36 <tiffany> |_|
22:57:50 <monqy> cakeprophet_cakeprophet
22:58:02 <tiffany> t_t
22:58:02 <CakeProphet> best emoticon in the world
22:58:09 <CakeProphet> monqy loses championshiwep
22:58:13 <tiffany> t(-_-t)
22:58:37 <CakeProphet> ?_!
22:58:37 <lambdabot> Maybe you meant: . ? @ bf do ft id pl rc v wn
22:58:59 <MDude> {_{
22:59:16 <CakeProphet> ._. ,_. ;-;
22:59:19 <MDude> }_{
22:59:30 <CakeProphet> `_` ~_~
22:59:32 <HackEgo> ​/home/hackbot/hackbot.hg/multibot_cmds/lib/limits: line 5: exec: _`: not found
22:59:34 <Gregor> <Prince_Charles> CakeProphet, you're up against some pretty stiff competition, although tiffany does lack that certain je ne sans I don't remember what the phrase is actually. // So you could say the phrase is something of a ... je ne sais quoi? X-P
22:59:44 <Prince_Charles> Yes.
22:59:49 <CakeProphet> ___
23:00:01 <monqy> good phrase
23:00:06 <monqy> I need to remember it
23:00:31 <CakeProphet> elliott: see: someone admiring a french expression.
23:00:45 -!- boily has quit (Quit: WeeChat 0.3.5).
23:01:09 <MDude> - _ -_-
23:01:24 <MDude> 0
23:01:48 <MDude> 3
23:02:22 <MDude> _-_
23:02:46 <CakeProphet> http://wurstcaptures.untergrund.net/music/?oneliner=100*sin(t)&rate=44100]100*sin(t)
23:02:49 <CakeProphet> beautiful music.
23:03:06 <CakeProphet> excuse me: http://wurstcaptures.untergrund.net/music/?oneliner=100*sin(t)&rate=44100
23:03:23 <elliott> http://www.bemmu.com/music/index.html is better
23:04:05 <CakeProphet> >> is bitshift I guess?
23:09:38 <CakeProphet> elliott: huh I gave my link the same input as one from your site and it sounds completely different.
23:09:53 <CakeProphet> sin(t/30) * ((t>>6|t>>4)&63&t>>2) + tan(t/30)/40
23:09:53 <elliott> sample rate?
23:10:01 <CakeProphet> 44k
23:10:25 <CakeProphet> what's the sr of bemmu.com? it doesn't specify.
23:11:15 <CakeProphet> ah it's 8000
23:11:22 <CakeProphet> or close
23:11:28 <CakeProphet> it gives a similar sound when I select 8000
23:12:04 <elliott> it is, see the video
23:12:18 <elliott> that one you linked is just some lame derivative of http://www.bemmu.com/music/index.html with pointless sample rate selection :p
23:12:37 <CakeProphet> you guys want to start an EXPERIMENTAL PORGRAMIN BAND?
23:12:45 <elliott> no
23:13:26 <CakeProphet> this video is pretty neato
23:13:42 <CakeProphet> bitshift is neato.
23:21:14 <Gregor> Bitch ift.
23:22:06 -!- copumpkin has joined.
23:22:37 <olsner> haha, Gregor make funny
23:23:35 <MDude> Tzec beat me to making a geometry based language ebcause I am lazy.
23:23:42 <MDude> *because
23:23:59 <CakeProphet> t*(t>>sin(t/31)+t>>14) * 100 is good
23:27:10 -!- ive has quit (Ping timeout: 244 seconds).
23:30:41 <Prince_Charles> MDude, one-up him, make a general geometry-based language.
23:32:49 * CakeProphet should make a programming language whose programs are weather forecast data.
23:33:23 <oerjan> "general"?
23:35:39 <oerjan> CakeProphet: it's going to take the world by storm
23:36:04 <Prince_Charles> Dammit wiki let me see recent changes.
23:36:32 <elliott> Prince_Charles: append ?
23:37:17 <oerjan> why would that be necessary...
23:37:40 <elliott> chrome
23:37:42 <elliott> some bug in something
23:38:43 <Prince_Charles> Ah, I need to ask it /if/ there have been recent changes.
23:39:04 <oerjan> >_>
23:39:13 * Prince_Charles → sleep
23:39:15 <monqy> Brains? Are people still making brainfuck derivatives.....
23:39:15 -!- Prince_Charles has quit (Quit: Leaving).
23:39:59 <oerjan> brainfuck 3000
23:41:22 <MDude> I wonder if there's enough commands made for direvatives to make one that uses no commands from the original and stull be turing complete.
23:41:35 <elliott> definitely
23:41:42 <elliott> there are huge ones with like direct duplicates of brainfuck as different commands
23:42:04 <MDude> Not the commands as in the caracters.
23:42:19 <MDude> They'd need ot work a bit differently too.
23:43:10 <MDude> For instance, Brainscramble gives you three stacks, and there's one that gives you a grid of bits.
23:43:46 <elliott> heh
23:43:59 <elliott> I think almost certainly
23:44:16 -!- Patashu has joined.
23:44:23 <MDude> The hard part is going though all of them, since many aren't properly categorized.
23:44:29 <oerjan> brainfuck minus brainfuck
23:59:52 -!- kwertii has quit (Quit: kwertii).
←2011-08 2011-09 2011-10→ ↑2011 ↑all