←2011-09-18 2011-09-19 2011-09-20→ ↑2011 ↑all
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:48 <elliott> I'll need to do some selective manual reverting of changes so that each commit builds cleanly
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:21 <elliott> Heh
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-18 2011-09-19 2011-09-20→ ↑2011 ↑all