←2011-08-23 2011-08-24 2011-08-25→ ↑2011 ↑all
00:01:19 <CakeProphet> !delinterp wacro
00:01:19 <EgoBot> ​Interpreter wacro deleted.
00:01:23 <CakeProphet> !addinterp wacro perl http://pastebin.com/RazAC34W
00:01:24 <EgoBot> ​Interpreter wacro installed.
00:01:26 <CakeProphet> !wacro
00:01:26 <EgoBot> Bareword found where operator expected at /tmp/input.30875 line 4, near ""Content-Type" content"
00:01:27 <elliott> fail
00:01:31 <elliott> use sprunge
00:01:31 <CakeProphet> !wacro 4 5
00:01:32 <EgoBot> Bareword found where operator expected at /tmp/input.30938 line 4, near ""Content-Type" content"
00:01:35 <CakeProphet> lol wat.
00:01:36 <CakeProphet> oh rite
00:01:40 <CakeProphet> didn't use the raw link lol
00:01:43 <elliott> nope
00:01:43 <CakeProphet> !delinterp wacro
00:01:44 <EgoBot> ​Interpreter wacro deleted.
00:01:44 <elliott> thats html too
00:01:48 <elliott> oh hm maybe not
00:01:51 <elliott> i guess they fixed that
00:01:54 <monqy> it has \r\n i think???
00:01:59 <monqy> i mean the raw pastebin thing
00:02:01 <CakeProphet> yes
00:02:01 <monqy> just use sprunge
00:02:04 <elliott> doesnt matter really
00:02:09 <CakeProphet> isn't that a feature of HTTP in general?
00:02:11 <monqy> \r\n sads me
00:02:28 <CakeProphet> !addinterp wacro perl http://pastebin.com/raw.php?i=RazAC34W
00:02:28 <EgoBot> ​Interpreter wacro installed.
00:02:30 <CakeProphet> !wacro
00:02:31 <EgoBot> FCU
00:02:34 <CakeProphet> !wacro 4 5
00:02:35 <EgoBot> OTPP
00:02:38 <CakeProphet> !wacro 10
00:02:39 <EgoBot> CPLPFMLAMS
00:02:45 <CakeProphet> ...I didn't put a limit.
00:02:51 <CakeProphet> !wacro 50
00:02:51 <EgoBot> LHNSRCBCVCBAMBHZSCAHITDTDHJGMSCDCPUGTCHHTTWUDOHESG
00:02:54 <monqy> !wacro 999
00:02:55 <EgoBot> CAMPABNGDCYNACDJSSKDCUCJBREMMRRTLMSCPGSAITOMRSFGSMCVGABSCDCTSTNHOGDARGSDTBTIPMCWRRREBMILARSDSCRTFPGYAPPBBJJFCBEBEFMOHPMDRMBAAGCLETPSBCDVLSFCMSLFGULSHSSWTSMCRIAPCMPSNDSGCIGMOQOPVPUHCLTAHIOPDTOLMMJMCGAPBPBNTMMFBWLRMWSCICMMNISRHTFCCFHMPLOCBWPSSDRPLLPMBMDSMAECCSITGMRCSSRGBTCMTAPGLPVPAMTILTDTMGDDANFWDPCAMTESJHPLTPOMUORDMERMSGPQCXMFRCMCAMOSCWFAHRIHRCBBCCVPTENCBDETEECSSBDSQHLGWCISADISDTRPHGFRBMSSMNGSAHPSDVITWDWIIRRSFRACMAAQBUTDTGFQSAPOPIHBRTGMSFDUMCLPVAGTPALBBRBSCTAHPUB
00:02:58 <CakeProphet> so yeah
00:02:59 <monqy> snazzey
00:03:00 * CakeProphet fixes that.
00:03:16 <CakeProphet> let's see how many letters is that Wikimedia association.
00:03:20 <monqy> !wacro abcdef
00:03:21 <EgoBot> Argument "abcdef" isn't numeric in range (or flop) at /tmp/input.31529 line 47, <> line 1.
00:03:45 <elliott> "or flop"
00:03:52 <CakeProphet> yep.
00:04:12 <CakeProphet> though it would be pretty spiffy if it knew what context .. was being used in for error messages.
00:05:27 <monqy> you know what would be spiffy?
00:05:30 <monqy> if contexts weren't a thing
00:05:33 <monqy> yeah I went there
00:05:45 <CakeProphet> contexts are awesome and totally not an issue ever.
00:06:13 <CakeProphet> "oh no is this return value going to be interpreted in scalar or list context???" doesn't matter.
00:07:29 <CakeProphet> but you can find out with wantarray if you want to provide different logic.
00:08:04 <CakeProphet> !perl sub test(){wantarray} print test
00:08:05 <EgoBot> 1
00:08:21 <CakeProphet> !perl sub test(){wantarray} print (test*3)
00:08:22 <EgoBot> 0
00:08:37 <monqy> :(
00:09:34 <CakeProphet> I don't really see what's bad about that, but to each their own.
00:10:26 <CakeProphet> so yeah, next step: try to make it generate pronouncable acronyms.
00:12:06 <CakeProphet> !delinterp wacro
00:12:06 <EgoBot> ​Interpreter wacro deleted.
00:12:12 <CakeProphet> !addinterp wacro perl http://pastebin.com/raw.php?i=s2SVjFMB
00:12:12 <EgoBot> ​Interpreter wacro installed.
00:12:17 <CakeProphet> !wacro 50 1000
00:12:18 <EgoBot> Can't return outside a subroutine at /tmp/input.32648 line 46, <> line 1.
00:12:27 <CakeProphet> oh rite should've debugged.
00:12:29 <monqy> !wacro
00:12:30 <EgoBot> PGID
00:12:48 <monqy> pgid
00:12:48 <CakeProphet> ...er what. I used return in a map
00:12:51 <CakeProphet> that is totally a thing I can do.
00:12:54 <monqy> !wacro
00:12:55 <EgoBot> PBLBZ
00:12:58 <monqy> pblbz
00:13:04 <CakeProphet> ...wat?
00:13:10 <monqy> !wacro
00:13:11 <EgoBot> UFABPTL
00:13:13 <monqy> ufabptl
00:13:20 <CakeProphet> what are you doing.
00:13:36 <monqy> these are bad :(
00:13:41 <monqy> make them better :(
00:13:46 <monqy> pgid was almost okay
00:13:57 <CakeProphet> look okay it is a very simple program.
00:14:00 <CakeProphet> I don't know what you're expecting.
00:14:13 <CakeProphet> !acro
00:14:17 <EgoBot> KOFKXKMEAI
00:14:19 <monqy> that's bad too
00:14:27 <monqy> !acro
00:14:31 <EgoBot> WCRQ
00:14:34 <monqy> :(
00:15:25 <CakeProphet> !delinterp wacro
00:15:25 <EgoBot> ​Interpreter wacro deleted.
00:15:28 <elliott> that sounds like a radio station in america
00:15:42 <CakeProphet> !addinterp wacro perl http://pastebin.com/raw.php?i=Ec8RSQtM
00:15:43 <EgoBot> ​Interpreter wacro installed.
00:15:47 <monqy> !wacro
00:15:47 -!- yorick_ has joined.
00:15:48 <EgoBot> FSIG
00:15:50 <CakeProphet> elliott: an east coast radio station to be exact.
00:15:54 <monqy> fsig
00:15:59 <monqy> !wacro 999
00:16:00 <EgoBot> CMMTASBCMAUOTTPWDTAMABSMAPSCESYPSUCDRJITCPDFCPTLMVRPSAFEIMSCPRRRNIFCAPSVDTNPSLMDKJSDMPCCRBIBSIEAIMSAFMDPWRCSPIBEWCSEWLGSFRJWALDRDSBRJGGCCMPPHWRCERIESSTSLSRLCOLBSBCSJLAWIDIIPNAWSCHMSTSSSDTPCTNCPRVSLLJAPEOSPMBPTCMCCMRCGBVLEDLPATKCBHFGADMKSRSSNCLIBGFOHMORFSBHIPYMPPRBCPBSSBSCSASPJCTGCKRSCSNCFFALWTPPPPBHJCRORMMRVSFBFCBBSMMSPBPBJBTPMOMGGOHMHNBCARHPMTCCRCARVTBMVTACJDTBPGKFBABSIPMTSKNHIDABACKDWTNPSLSTBPMDDSOBKSBSFIMTBAIDOGPBFWDPTRGPSVRLUSCMBEBJBLDOFTATTFHUPTCBRMCDSMGAWAS
00:16:00 <CakeProphet> though KOFKXKMEAI could be a west coast radio station.
00:16:03 <monqy> wacro
00:16:08 <CakeProphet> ...wat I thought I fixed that.
00:16:36 <CakeProphet> !wacro 25 50
00:16:37 <EgoBot> SAOSOGCVFPHSSRCSFPESPMVISCCCBSNPEPCFESFRC
00:16:40 <monqy> !wacro 999 999
00:16:41 <EgoBot> TYHSTBLRLFSDZPLTATPCSSMOSBSRRCMGQBFPSRJBPSLGBPFSBVDGAZTTSPVCALPBTGBDTBSPURCBBETMRBSHIGIBHGRCTMSCDLGWAVSJVWPUPPWIRDNVBAGFPMITUPECCHGBBTALTCTPILPWJDSDLTCNGABGRLWDDOGFVCOWHADCBFHMSBOCAPFHDBTLWIJMETNIASUCDMHMLOFPAAFSSFIRRSCCETFBHIBBAGIDCVRMSRAEMTODPMGEARFFSLCHSDAIAGSCOOBMQEPORCDCTDGCESDDABHSCMPWMPCACPCCOHBHJPPIABWHTTATWGRPLILSWDLBFQVMWABUDIPSLIBGLSDRGSSTCJPSSRBIMPGTMSLZTPNCSFPLPMISWORWRGTRNTMELABSFTHCPZHDRPCSDSLPAPSSBTAMMRMLFSGTCCAHOUMFAIBCSMBAFPKHLPPAGSDGVDPFMAMRDAD
00:16:50 <CakeProphet> ...
00:16:55 <monqy> what does the second one do does it a range
00:16:59 <monqy> betwen th eifrst and second
00:17:02 <CakeProphet> yes.
00:17:04 -!- yorick has quit (Ping timeout: 264 seconds).
00:17:18 <CakeProphet> well it's broken right now actually.
00:17:19 <elliott> http://en.wikipedia.org/wiki/WCRQ
00:17:20 <CakeProphet> one sec.
00:17:23 <elliott> today's best hits
00:17:28 <elliott> http://en.wikipedia.org/wiki/Arab,_Alabama
00:17:35 <elliott> Two other proper names for the town were sent to the US Postal Service for consideration: "Ink" and "Bird."
00:19:22 <CakeProphet> !delinterp wacro
00:19:22 <EgoBot> ​Interpreter wacro deleted.
00:19:27 <CakeProphet> !addinterp wacro perl http://pastebin.com/raw.php?i=mvP0STSg
00:19:28 <EgoBot> ​Interpreter wacro installed.
00:19:32 <monqy> !wacro 9999
00:19:33 <CakeProphet> !wacro 5000 9999
00:19:33 <EgoBot> TSOKCFUMCTBDAWTWSTFBATTTG
00:19:33 <EgoBot> CPICBMSAGBEAFMSTRKCECBPHB
00:19:41 <CakeProphet> limit is 25
00:19:45 <monqy> !wacro 25 999
00:19:46 <EgoBot> KUSRSDPIBSAIHMPSRDTDADLTF
00:19:56 <monqy> !wacro 9999999999999999999999999999999
00:19:56 <EgoBot> SVMSPAERHBWFGAPRVAWDSCMGJ
00:19:59 <CakeProphet> !wacro 25
00:20:00 <EgoBot> VNLBBANEEWABMSWGGCMTDDSSI
00:20:06 <monqy> !wacro -1
00:20:07 <EgoBot> Argument "" isn't numeric in numeric gt (>) at /tmp/input.2229 line 46, <> line 1.
00:20:10 <monqy> !wacro 0
00:20:19 <CakeProphet> obviously. :P
00:20:19 <monqy> !wacro abcdef
00:20:20 <EgoBot> Argument "abcdef" isn't numeric in numeric gt (>) at /tmp/input.2341 line 46, <> line 1.
00:20:27 <monqy> !wacro 1.2
00:20:28 <EgoBot> TU
00:20:31 <monqy> tu
00:20:39 <CakeProphet> stop making them better.
00:20:41 <CakeProphet> that is not better.
00:20:45 <CakeProphet> acronyms are abbreviations for things.
00:21:00 <monqy> 17:22:38 <EgoBot> Execution of /tmp/input.23630 aborted due to compilation errors.
00:21:03 <monqy> 17:22:38 <EgoBot>
00:21:08 <monqy> presumably from the !wacro 0
00:21:18 <monqy> try it
00:21:22 <CakeProphet> !wacro 0
00:21:29 <CakeProphet> nope.
00:21:38 <monqy> didn't you get the dcc chat request?
00:21:42 <CakeProphet> !wacro 0
00:21:43 <monqy> maybe it takes some time
00:21:44 <CakeProphet> nope
00:21:58 <CakeProphet> 0 would just make nothing happen.
00:22:04 <monqy> then how did that happen????
00:22:15 <CakeProphet> probably an earlier one?
00:22:18 <CakeProphet> !perl -1
00:22:21 <CakeProphet> lol
00:22:22 <monqy> but which
00:22:24 <CakeProphet> !wacro -1
00:22:24 <EgoBot> Argument "" isn't numeric in numeric gt (>) at /tmp/input.2662 line 46, <> line 1.
00:22:46 <CakeProphet> well so far these are all runtime errors so...
00:22:54 <monqy> !wacro 2 3 4
00:22:55 <EgoBot> CG
00:23:04 <CakeProphet> yeah it ignores anything above 2 args.
00:23:09 <monqy> !wacro 1
00:23:10 <EgoBot> V
00:23:12 <monqy> v
00:23:19 <CakeProphet> ...
00:23:42 <CakeProphet> feel free to remove the "uc" at the bottom of my code.
00:23:49 <CakeProphet> and make your own acronym generator command.
00:24:02 <elliott> v
00:24:03 <CakeProphet> just for you. because you're weird and like them to be lowercase.
00:24:14 <CakeProphet> !wacro 5
00:24:14 <EgoBot> SLSEA
00:24:59 <CakeProphet> okay so basically I have a markov chain of sorts.
00:25:11 <zzo38> Is there Haskell parsing program that I can add stuff into?
00:25:45 <CakeProphet> where the previous characters determine which random selection function is used.
00:26:32 <monqy> zzo38: ?
00:27:01 <zzo38> monqy: ??
00:27:04 <monqy> ??????
00:27:16 <monqy> parsing program? add stuff into? help
00:28:07 <CakeProphet> parsec?
00:28:08 -!- yretssin has changed nick to Nisstyre.
00:28:11 <zzo38> Such as, adding stuff to support new syntax and macros and various other thing, including to be able to check stuff doing during compiling to check for duplicate definitions, combine things together, and so on
00:28:34 <zzo38> CakeProphet: Parsec is a general parsing program I have used it, but I mean one specifically parsing Haskell codes
00:28:57 <CakeProphet> you could use any kind of general purpose language for that.
00:28:59 <monqy> zzo38: haskell-src-exts, haskell-src-meta, and friends?
00:29:09 <zzo38> monqy: OK, let me see
00:29:11 <CakeProphet> to just translate unprocessed file to Haskell source.
00:29:14 <monqy> zzo38: dunno how extensible they are
00:29:43 <monqy> zzo38: but they're for haskell source manipulation and friends
00:29:54 <CakeProphet> GHC, ghci, and lambdabot all have Haskell parsers that you could borrow code from.
00:30:52 <zzo38> How would I find the haskell-src-exts and haskell-src-meta? And which files in GHC and ghci would I use? Can I write codes to extend existing GHC/ghci?
00:31:17 <CakeProphet> http://hackage.haskell.org/package/haskell-src-exts-1.11.1
00:31:19 <monqy> http://hackage.haskell.org/package/haskell-src-exts http://hackage.haskell.org/package/haskell-src-meta
00:31:24 <CakeProphet> I've heard Google is pretty good for that sort of thing.
00:31:32 <monqy> i used hoogle
00:31:58 <CakeProphet> haskell-src-exts has a parseFile function that you would probably find useful for this.
00:32:21 <monqy> there's lots of stuff
00:32:26 <CakeProphet> and the module Language.Haskell.Exts.Build has functions to construct Haskell source trees
00:32:53 <monqy> there's also stuff to output template haskell i think
00:32:58 <monqy> for use in quasiquoters, friends
00:33:30 <monqy> haskell-src-meta at least has some TH examples
00:35:49 <elliott> that's what haskell-src-meta is for i think
00:36:10 <monqy> i didn't know if it was also for other things
00:36:54 <CakeProphet> so yeah Markov chain = good way to generate acronyms.
00:36:55 <zzo38> I can find a lot of information about haskell-src-exts but haskell-src-meta has not much information
00:37:11 <monqy> haskell-src-meta has examples
00:37:16 <monqy> I dunno about haskell-src-ext
00:37:16 <monqy> s
00:40:19 <CakeProphet> !perl sub test(){}sub test2(){} print (\test)==(\test)
00:40:56 <CakeProphet> !perl sub test(){}sub test2(){} $x=\test; print $x==$x
00:40:56 <EgoBot> 1
00:41:12 <CakeProphet> lolwat
00:42:23 <CakeProphet> !perl sub test(){}sub test2(){} $x=\test;$y=$x; print $x==$y
00:42:23 <EgoBot> 1
00:42:51 <CakeProphet> for some reason two different subrefs pointing to the same thing are not equal.
00:43:23 <CakeProphet> !perl sub test(){}sub test2(){} print (\&test)==(\&test)
00:43:24 <EgoBot> CODE(0x7fbbb0d05aa8)
00:43:30 <CakeProphet> >_>
00:44:01 <CakeProphet> !perl sub test(){}sub test2(){} print (\&test==\&test)
00:44:02 <EgoBot> 1
00:44:05 <CakeProphet> oh ojay.
00:44:08 <CakeProphet> *k
00:48:10 <zzo38> Is it possible to write syntax extensions to GHC? Some of the -X options provide their own syntax extensions but is it possible to write external ones?
00:49:25 <monqy> where by external you mean? doesn't have to be compiled into ghc?
00:49:32 <zzo38> Yes
00:49:36 <monqy> I don't know the specifics
00:50:52 <zzo38> I also think Template Haskell is not powerful enough to make up an entire module or to read an entire module, there are some things it doesn't do
01:00:40 <zzo38> What I would want to do, is for example, you can define your own reserved words which are always error, and you can catch errors including all information including what is around it and what is expected here, and other kind of error, etc. And then you can tell it to replace that and other things with something else
01:02:00 <zzo38> For example, I would like to be able to make it eliminate duplicate definitions and combine definitions, for example to change data Color = Red | Green; data Color = Green | Blue; into data Color = Red | Green | Blue;
01:03:26 <zzo38> Are there Haskell interpreter modules that can be included with another program?
01:05:02 <monqy> yes, like whatever lambdabot does?
01:05:12 <zzo38> I don't know what lambdabot does
01:07:15 <zzo38> Not very well, anyways
01:07:36 <CakeProphet> what do you do in this case: data T a b = Z | A a b | C b a; data T a b = Z | A a b b | C a b
01:08:04 <elliott> zzo38: mueval
01:08:05 <zzo38> CakeProphet: Generate an error message because the definitions of constructor A and C do not match
01:08:08 <elliott> zzo38: http://hackage.haskell.org/package/mueval
01:08:13 <CakeProphet> zzo38: mueval is terrible though.
01:08:18 <elliott> zzo38: For more flexibility, see http://hackage.haskell.org/package/hint, which mueval is built upon
01:09:39 <zzo38> CakeProphet: (An error message, which can of course, be caught like other errors and decide what to do, even if an error caused it to do this and then it is a second error which can also be caught afterward)
01:10:13 <zzo38> But this should be allowed: data T a b = A a b; data T b a = A b a;
01:10:33 <Sgeo> I appear to have started a flame war in #scala
01:11:21 <monqy> good job sgeo, hero to all
01:11:25 <monqy> what's it about
01:11:46 <Sgeo> Haskell's lack of enterprise stuff and whether "enterprise" stuff is useful
01:12:31 <monqy> wqhat's enterpreise stuffe
01:12:37 <elliott> what
01:12:41 -!- rodgort has quit (Quit: ERC Version 5.3 (IRC client for Emacs)).
01:12:50 <Sgeo> drdozer> no, you don't. If the boss says you're writing a component that's exposed through SOAP and talks to other components exposed through SOAP, with colaborators implementing their SOAP end-points in .NET, Java and Python, that's what you do
01:13:28 <elliott> http://hackage.haskell.org/package/shoap?
01:13:33 <monqy> i'lkl never survive in the real wordle
01:14:17 <Patashu> these compoents are filthy
01:14:20 <Patashu> they need a good scrubbing
01:14:25 -!- rodgort has joined.
01:17:52 <Gregor> http://codu.org/tmp/wol3-2011-08-23.ogg Have some musix
01:18:42 <zzo38> I have ideas, to invent Meta Haskell, it is usable in addition to Template Haskell. The syntax stolen by Meta Haskell is $${ and $$( and $$ with a word after that is no space between. But it is not allowed to be part of a "symbols" word. And then you have $$include which is like #include in C, $$setflag $$clearflag $$ifflag $$ifnflag which is like #define #undef #ifdef #undef except they are not macros and not used anywhere else,
01:19:43 <Gregor> `addquote <Sgeo> Maybe I should try to learn Scala instead of Ruby <elliott> I will boil your veins. <Sgeo> Which is less bad? <elliott> Probably Scala, but I don't want you learning languages.
01:19:45 <HackEgo> 618) <Sgeo> Maybe I should try to learn Scala instead of Ruby <elliott> I will boil your veins. <Sgeo> Which is less bad? <elliott> Probably Scala, but I don't want you learning languages.
01:20:01 <Patashu> poor sgeo
01:20:11 <monqy> has sgeo learned haskell yet
01:20:26 <elliott> no
01:20:34 <zzo38> $$reserve and $$reserveLayout to make new reserved words, it parse program into tokens, you can insert your own stuff to do, and then parse to syntax tree telling what kind of declaration and so on which you can also insert your own stuff and catch errors and stuff, and then you can make it do stuff with that result, and add postprocessor afterward
01:22:42 <CakeProphet> has Patashu learned Haskell yet?
01:22:59 <zzo38> Is there anything that can be used to do the things I describe?
01:23:38 <monqy> there's already an extension to use CPP
01:23:51 <CakeProphet> ..
01:24:29 <CakeProphet> I've heard Perl has a pretty good regexes and stuff. >_>
01:24:42 <zzo38> I know there is, but it doesn't do the other things I have described and it has some other problems too, since CPP is not designed for use with Haskell anyways
01:25:49 <Patashu> @CakeProphet: Not enough to use it
01:25:49 <lambdabot> Unknown command, try @list
01:26:19 <CakeProphet> huh weird, Wikipedia doesn't say whether Perl is strongly typed or weakly typed.
01:26:47 <CakeProphet> I'd say it's weakly typed, sort of.
01:26:52 <zzo38> For example, CPP certainly cannot do $$( $${ $$reserve $$reserveLayout
01:27:16 <monqy> CakeProphet: it's most certainly weakly typed
01:28:07 <Patashu> Has anyone ever made a CPPPP joke
01:28:25 <monqy> cpreprocessorpreprocessor?
01:28:29 <monqy> cpluspluspreprocessor?
01:28:30 <CakeProphet> monqy: yeah but it's strongly typed when it doesn't make sense to be weakly typed in its type system.
01:28:32 <Patashu> The former
01:28:39 <CakeProphet> !perl print "abc" > "123"
01:28:56 <CakeProphet> oh, nevermind, that was a warning.
01:29:02 <CakeProphet> !perl use warnings; print "abc" > "123"
01:29:02 <EgoBot> Argument "abc" isn't numeric in numeric gt (>) at /tmp/input.7685 line 1.
01:29:03 <zzo38> Well, I have use features of Enhanced CWEB for extra preprocessing of C codes
01:29:03 <monqy> in conclusion perls dumb
01:29:21 <CakeProphet> but it's a different kind of weak typing than C
01:29:28 <CakeProphet> it's not at a byte-level.
01:30:01 <CakeProphet> it's all contexty.
01:30:22 <monqy> i never said it wasn't
01:30:31 <CakeProphet> right I was thinking aloud.
01:30:45 <Gregor> elliott: omg writing bots is so much suck :(
01:31:06 <CakeProphet> Gregor: by bot do you mean rezzo warrior or like... IRC bot?
01:31:08 <CakeProphet> or?
01:31:09 <elliott> Gregor: Have you tried using my library
01:31:14 <Gregor> CakeProphet: Rezzo
01:31:24 <Gregor> elliott: Haskell is for dorks!
01:31:32 <elliott> Gregor: Dorks who write bots
01:31:49 <Gregor> elliott: IIRC, you haven't actually accomplished anything :P
01:32:07 <Sgeo> Rezzo?
01:32:20 <elliott> Gregor: tantrum.hs
01:32:24 <elliott> Gregor: But I was working on the queue stuff last
01:32:42 <zzo38> Can the "hint" program work with Template Haskell? Can it allow you to catch errors and then it can continue where it left off with the changes you made so it is not error?
01:35:12 <CakeProphet> Gregor: but C is THE BEST LANGUAGE THERE IS FOR ALL PURPOSES EVER
01:35:17 <CakeProphet> surely this should be easy.
01:35:38 <Gregor> CakeProphet: Just because it's the best language doesn't mean that it's obvious what a bot should do at all :P
01:36:00 <CakeProphet> imagine yourself as an agent.
01:36:03 <CakeProphet> should make things easier.
01:36:10 <CakeProphet> map out your decision process.
01:36:25 <Gregor> lol
01:36:33 <CakeProphet> :>
01:37:41 <CakeProphet> I'd say the trickiest part is navigating around walls
01:37:44 <CakeProphet> or deciding to break through them.
01:38:53 <elliott> Gregor: Well, you could code a pathfinding algorithm to start with
01:39:08 <elliott> That assigns appropriate higher costs to wires that need to be destroyed
01:39:50 <CakeProphet> it wouldn't be terribly helpful at the start though
01:39:55 <CakeProphet> since you have no idea where anything is at all.
01:40:34 <CakeProphet> but it would be safe to assume that breaking through a wall is probably going to let you go in the direction you want to go faster than walking all the way around.
01:40:44 <CakeProphet> at least initially.
01:40:51 <CakeProphet> when trekking somewhere unknown.
01:41:40 <CakeProphet> but if you're just wandering around going around the walls would allow you to cover more total distance.
01:42:37 <Gregor> Yeah, the very first thing you need to do is wander aimlessly.
01:43:09 <elliott> Gregor: How about write a bot that tries to see the entire world
01:43:14 <elliott> (With hardcoded world-size)
01:43:16 <elliott> And merge this into a worldview structure
01:45:41 <CakeProphet> are you given starting coordinates?
01:45:54 <Gregor> CakeProphet: Irrelevant.
01:46:20 <CakeProphet> might not be. also, smaller world might be better.
01:46:58 <Gregor> Dude ... your starting coordinates are entirely irrelevant.
01:47:03 <Gregor> World size isn't :)
01:47:18 <CakeProphet> it tells you which boundary you're closest to.
01:47:25 <CakeProphet> unless it wraps or something.
01:47:59 <Gregor> It's a torus.
01:48:14 <CakeProphet> which is a fancy way of saying it wraps around right?
01:48:30 <Gregor> In both dimensions
01:54:11 <CakeProphet> !perl my ($x,$y,$z,$a)= 0..3; ($x,$y,$z,$a) = ($y,$z,$a,$x); print $x,$y,$z,$q
01:54:12 <EgoBot> 123
01:54:26 <CakeProphet> !perl my ($x,$y,$z,$a)= 1..4; ($x,$y,$z,$a) = ($y,$z,$a,$x); print $x,$y,$z,$q
01:54:27 <EgoBot> 234
01:54:43 <CakeProphet> !perl my ($x,$y,$z,$a)= 1..4; ($x,$y,$z,$a) = ($y,$z,$a,$x); print $x,$y,$z,$a
01:54:43 <EgoBot> 2341
01:54:45 <CakeProphet> lulz
02:05:35 <CakeProphet> ....what.
02:05:39 <CakeProphet> why did they zip an mp3
02:06:43 <elliott> more compression
02:07:33 <pikhq_> It's the only common archival format on Windows.
02:07:41 <pikhq_> Well, unless you count RAR, I suppose.
02:15:47 <CakeProphet> uuuugh this intro to software engineering class is going to be so bad.
02:16:19 <Gregor> CakeProphet: That's the nature of SE.
02:16:28 <Gregor> CakeProphet: Enjoy learning the terrible UML.
02:18:06 <CakeProphet> favorite words for professor: "system" "solution" "complexity" "testing"
02:18:45 <monqy> what's intro to software engineering hehehehehee
02:19:26 <CakeProphet> it's a class that claims to give you real world experience about designing large-scale software projects.
02:19:30 <CakeProphet> but in fact teaches you nothing.
02:20:17 <pikhq_> Unfortunately, that's a bit hard to teach in an academic setting.
02:20:43 <pikhq_> It could probably be *done*, but not in the way that professors would like.
02:25:17 <zzo38> I want to have a Haskell command "more" that is followed by a capitalized word and optionally parameters, ussable in place of any of the following: A statement in a do-block. Where a constructor is expected in a data type declaration. A declaration of a class member. A name in an import or export list for a module. A case in a case expression.
02:25:56 <monqy> what would it do? you might be able to implement it with quasiquoters
02:26:14 <monqy> maybe not the name in an import or export list part
02:26:26 <zzo38> For example: hoge = do { putStr "x"; more Hoge; return 17; }; more Hoge = putStr "zzz"; more Hoge = doSomething;
02:26:48 <zzo38> Do you understand what it would mean from this example?
02:27:06 <monqy> no
02:27:19 <zzo38> Actually sorry, it should be like this: hoge = do { putStr "x"; more Hoge; return 17; }; Hoge = putStr "zzz"; Hoge = doSomething;
02:27:37 <monqy> what would it do
02:27:49 <Patashu> more Hoge becomes everything assigned to Hoge?
02:27:51 <zzo38> Or this: data Color = more Colors deriving Eq; Colors = Red; Colors = Green; Colors = Blue;
02:27:58 <zzo38> Patashu: Yes.
02:29:51 <zzo38> To give an example with paramters: data T t = Z | more TTT t; TTT a = Once a; TTT b = Twice b b;
02:29:51 <CakeProphet> zzoskell
02:30:44 <zzo38> That is one of my ideas.
02:31:09 <CakeProphet> the audio quality of this classroom recording is terrible.
02:31:25 <CakeProphet> but the class is scheduled at the same time as another class, so I have to listen to these.
02:37:16 <zzo38> And in case of do-statements with <- you could have: do { x <- work; x <- stop x; stop x; } which would be like do { x <- work; y <- stop x; stop y; } (after "more"-expansion)
02:41:42 <pikhq_> Um. Doesn't that already work?
02:41:49 <zzo38> pikhq_: I don't know; I have not tried it.
02:42:04 <pikhq_> It should based on how the do notation transform works...
02:42:16 <zzo38> Yes it works already
02:42:18 <zzo38> I tried it now
02:42:21 <pikhq_> That's the same as: work >>= \x-> stop x >>= \x-> stop x
02:42:39 <pikhq_> Which is of course the same as: work >>= stop >>= stop
02:44:54 <zzo38> I tried using GHCi and yes it does already work that way.
02:46:57 <elliott> zzo38: The problem with "more" for extending "data"-types is that every function defined on an ADT has to either have a blanket handling of unhandled constructors, or else be incomplete...
02:47:06 <zzo38> What I would like to have is that we can have Meta Haskell which allows you to make up things such as "more" command rather than having it built-in, therefore you can make up a lot of other stuff too
02:47:11 <elliott> That is, every function must be written with all the constructors that will be added in the future in mind
02:47:16 <elliott> Which makes it much less useful than it could be
02:47:20 <elliott> This is essentially the Expression Problem
02:47:39 <elliott> This may interesting you a bit: http://personal.cis.strath.ac.uk/~conor/pub/she/higpig.html
02:47:50 <elliott> From the she Haskell preprocessor that adds a few interesting features, some related to dependent types
02:47:52 <elliott> (used by the Epigram project)
02:48:00 <elliott> the linked http://www.daimi.au.dk/~madst/tool/papers/expression.txt is also a really good read
02:48:09 <elliott> (the solution in GJ presented is not relevant to understanding it)
02:48:09 <zzo38> elliott: Well, if you combine the "more" with "data" and the "more" with "case", then you can possibly solve the problem you described.
02:49:04 <elliott> zzo38: That sounds like pretty much a direct attempt at solving the expression problem, then
02:49:14 <elliott> In which case you probably really want to look at http://personal.cis.strath.ac.uk/~conor/pub/she/higpig.html like I said
02:49:21 <elliott> (You'll need to understand GADT syntax to get it)
02:49:57 <zzo38> Yes I did read the information about GADT syntax already
02:50:21 <Sgeo> Does "dobblego" sound familiar to anyone?
02:50:24 <CakeProphet> not that it's difficult or anything.
02:50:30 <CakeProphet> (GADT that is)
02:50:31 <elliott> Sgeo: What of him?
02:50:43 <elliott> He's Tony Morris, the guy behind Functional Java.
02:50:54 <elliott> Active in #haskell, I think he uses Scala quite a bit, and he has a blog???
02:50:59 <elliott> I don't know what you mean
02:51:11 <zzo38> And in some cases with this "more", you have some things with fall-back that in a few places where that data type is used, you only care about some of the constructors, and ignore others (or do something else specific in all other cases that you did not specify otherwise)
02:51:44 <CakeProphet> wow this class is going to be so gay.
02:51:48 <Sgeo> I think he comes off as a bit of a Haskell fundie, I guess. Also, I ended up on the opposite side of some argument as him
02:52:13 <zzo38> deriving (Eq) is one situation where you might only care about a few constructors in certain functions, rather than all of them. Because, you can test for equal.
02:52:26 <elliott> He's not a fundie, he just doesn't bother debating with people without a decent amount of background information, which is perfectly reasonable.
02:52:49 <monqy> is sgeo trying to argue without knowing what he's talking about
02:52:52 <elliott> (HInt: You probably don't have the relevant background.)
02:52:56 <elliott> [asterisk]Hint
02:53:01 <quintopia> i just noticed the arduino ide looks just like the processing ide. who is copying whom?
02:54:10 <elliott> Arduino is copying Processing, IIRC.
02:54:14 <elliott> Arduino hardware is programmed using a Wiring-based language (syntax + libraries), similar to C++ with some simplifications and modifications, and a Processing-based IDE.[3]
02:56:51 <quintopia> arduino is atmega...what? i know wiring was 128
03:02:12 <CakeProphet> !wacro
03:02:13 <EgoBot> MASAJESC
03:02:21 <CakeProphet> !wacro
03:02:21 <EgoBot> EUCWCB
03:03:55 <CakeProphet> !wacro
03:03:56 <EgoBot> CPO
03:04:02 <CakeProphet> !wacro
03:04:02 <EgoBot> DBRETESQ
03:04:14 <CakeProphet> !wacro 1 4
03:04:14 <EgoBot> WB
03:04:14 <monqy> bretesq is good
03:04:21 <CakeProphet> !wacro 1 4
03:04:22 <EgoBot> D
03:04:24 <monqy> d
03:04:27 <CakeProphet> !wacro 2 5
03:04:27 <EgoBot> HE
03:04:34 <CakeProphet> !wacro 2 5
03:04:35 <EgoBot> SWPRC
03:04:45 <CakeProphet> I like those two
03:06:10 <Gregor> Welp, I've got a destructive world-explorer.
03:07:43 <CakeProphet> probably the best strategy there is.
03:08:09 <CakeProphet> at least while no one has any idea how to make an effective player.
03:08:14 <Gregor> Heh
03:10:41 <zzo38> Yes that higpig.html does describe something similar to what I have described. But I think mine is better I had other ideas too that are not what that describes, including, that some things can have specified orders and other stuff too
03:13:31 <monqy> almost finished a pretty consistently good acronym generator
03:13:56 <monqy> the first two tests produced "moo" and "djini"
03:14:01 <elliott> wow
03:14:10 <elliott> does it just try to mix consonants and vowels or have you got some markov chain shit going on
03:14:18 <monqy> it's a bit weird
03:15:54 <monqy> it tries to mix them (increasing probability of switching as it stays on either) and it has a maximum of one plosive (defined as "bcdgkpqt") per consonant chain
03:16:34 <monqy> what I need to do now before making that better is get the length working well. right now it just has a constant 1/5 chance of stopping after each letter
03:16:35 <elliott> lol
03:17:07 <monqy> the third test produced no output, and the fourth was "csouimzip". definitely room for improvement.
03:17:32 <monqy> i rather like hooftoootut though
03:18:00 <monqy> erbyuewain, ugwuxl, qzibehahocwutsuepnueh
03:20:08 <zzo38> Default superclass instances is seem useful so that you can make Monad automatically become a Functor as well, but then what if you want to do other way around by defining unit/join/fmap instead of defining return and >>= ? Or even, define return and >=> and make it figure out >>= from that
03:20:18 <elliott> hooftoootut is me
03:20:34 -!- Canaimero-e8d has joined.
03:20:35 <elliott> zzo38: Well, you can have
03:20:43 -!- Canaimero-e8d has left.
03:21:20 <elliott> class (Applicative m) => Monad m where join :: m (m a) -> m a; join a = a >>= id; (>>=) :: m a -> (a -> m b) -> m b; m >>= f = join (fmap f m)
03:22:43 <monqy> sgakvoguyfranogignuym
03:23:04 <monqy> ooh glicvoy is good
03:23:25 -!- azaq231 has joined.
03:23:33 <monqy> ceolme, vexgoqxu, iayail
03:24:56 <elliott> nice words,
03:25:52 -!- azaq23 has quit (Ping timeout: 268 seconds).
03:26:00 <monqy> maybe i will improve it after working on other things for a while
03:26:21 <monqy> I was going to learn trifecta but then I got distracted with besting cakeprophet at word generation
03:28:00 <CakeProphet> One of Guido's key insights is that code is read much more often than it is written.
03:28:03 <CakeProphet> lulz
03:28:39 <elliott> genius
03:28:48 <monqy> one of the things I do I can't decide if it's sensible or not: instead of using a monad or something to carry around random number generator state, I have a function with signature (a -> StdGen -> b) -> StdGen -> [a -> b]
03:29:16 <monqy> StdGen because of I forgot to make it more general
03:29:18 <CakeProphet> Capitalized_Words_With_Underscores (ugly!)
03:29:31 <CakeProphet> yeah that's totally not an arbitrary distinction Python Style Guide
03:30:05 <elliott> it is ugly
03:30:17 <elliott> monqy: I would make a random monad
03:30:41 <CakeProphet> how is it more_ugly_than_this
03:30:44 <CakeProphet> orThis
03:30:51 <monqy> CakeProphet: reasons
03:30:59 <CakeProphet> what is the objective difference.
03:31:17 <monqy> elliott: it's there partially for historical reasons. originally I was trying to golf it into one line so I could install it without worrying about paste bins
03:31:33 <monqy> elliott: and it seemed shorter than monadic stuff
03:31:36 <zzo38> monqy: You can look at my suggestion for alternative MSE random number functions
03:31:48 <monqy> ?
03:32:10 <zzo38> (Basically, there are pure versions of all the "random_" functions that start with "rand_" instead)
03:32:28 <zzo38> (I also suggested pure versions of the export template functions)
03:32:39 <monqy> now I'm confused
03:35:37 <zzo38> Unfortunately I cannot figure out how to link to it. It is comment 71866 in the MSE forums, in node 4887
03:39:40 <CakeProphet> uh... what.
03:39:44 <CakeProphet> this code. makes no sense.
03:40:08 <Sgeo> Can ais523's VCS be made to work with http://cdn.bitbucket.org/rmacnak/newspeak/downloads/purthesis.pdf ?
03:40:10 -!- GreaseMonkey has joined.
03:41:55 <elliott> Who cares
03:42:05 <elliott> (I might care if you summarised it)
03:42:59 <Sgeo> I can summarize the basic idea of Pur, but not in enough detail to be useful in determining if...
03:43:27 <Sgeo> It's an abstraction over VCSes, and compares Subversion, Git, and Mercurial to try to determine an abstraction for "generic" VCS
03:44:22 <zzo38> This is MSE code, but it could be done in Haskell or other programming languages as well: rand_int(begin: lower_bound, end: upper_bound, seed: seed) - Like random_int but uses a seed parameter. If all parameters are the same the output will be the same every time. Also does for all other random_ functions, have rand_ versions.
03:45:10 <Sgeo> MSE?
03:45:55 <zzo38> Magic Set Editor
03:46:15 <zzo38> I have also been working on TeXnicard which hopes to be different from MSE while usable for similar purposes
03:46:28 <zzo38> You can use whichever one you prefer or both
03:47:07 <zzo38> The GUI design of MSE means a lot of things have been omitted and I have made suggestions which can correct some of these problems, but it still isn't perfect
03:48:10 <elliott> <Sgeo> It's an abstraction over VCSes, and compares Subversion, Git, and Mercurial to try to determine an abstraction for "generic" VCS
03:48:13 <elliott> Sounds boring and inherently limiting
03:55:31 <CakeProphet> is there even like... a problem with current VCS?
03:55:36 <CakeProphet> that needs fixing?
03:56:03 -!- EgoBot has quit (Read error: Connection reset by peer).
03:56:45 -!- EgoBot has joined.
03:57:02 <elliott> CakeProphet: Yes.
03:57:05 <elliott> Massive ones.
03:57:47 <zzo38> Can the GHC plugins API allow making such things as I described for Meta Haskell and so on?
03:58:09 <CakeProphet> elliott: would it be cool if you elaborated?
03:58:28 <CakeProphet> I don't know enough about these problems
03:58:40 <CakeProphet> I'd like to complain about them on #esoteric in the future.
03:58:43 <elliott> CakeProphet: probably, but give me a minute first
03:58:49 <elliott> and there's already a known solution to the problems :)
03:58:55 <CakeProphet> take your time.
03:59:52 <elliott> no, give me a minute as in i'm busy :P
04:00:30 <CakeProphet> that's what I assumed...
04:04:51 * CakeProphet just learned how to fold a burrito.
04:04:55 <CakeProphet> this is an excellent skill to have.
04:08:05 <CakeProphet> as I can now take large blobs of ingredients into a container that is portable and edible.
04:08:53 <CakeProphet> portability is a very important thing for a food to possess, imo.
04:10:16 <zzo38> After I write Haskglk, can they make the Haskell compiler into Glulx, that can use all of the same exported types and functions and so on?
04:10:26 <CakeProphet> I guess edibility is important too, but that's kind of an inherent property of being food.
04:11:11 <CakeProphet> zzo38: I'm not entirely sure what you're talking about but it sounds ridiculous so I'm going to say no.
04:13:18 <zzo38> CakeProphet: Maybe it is ridiculous but maybe it is possible? They could also make it compiling Haskell into other virtual machines too, not only Glulx, but also Java, and so on
04:14:55 <CakeProphet> I guess it's possible in the purest sense.
04:15:05 <zzo38> Haskglk requires your main module to export two things: glkInit :: String; glkMain :: Glk (); but if compiling into Glulx then the glkInit would be useless in that case and glkInitialFile could not be used
04:15:19 <CakeProphet> but probably not going to happen soon or possibly ever.
04:15:23 <CakeProphet> who knows.
04:17:00 <CakeProphet> but I guess a lot of the work has already been done if you use GHC to translate haskell to core.
04:21:03 <zzo38> It is probably possible to compile C or LLVM into Glulx, although the standard library for accessing the system would have to be different. In the case of Haskell, most of the commands in the IO monad would not work (peek and poke could still be used, though). But all the commands in the Glk monad, with the exception of glkInitialFile, could work natively.
04:23:28 <elliott> CakeProphet: 'Fraid it might have to wait until tomorrow
04:23:36 <CakeProphet> NOOOOOO
04:23:40 <CakeProphet> NOW I WILL NEVER KNOW.
04:23:55 <CakeProphet> I am so... carefree right now.
04:24:26 <CakeProphet> without the ugly truth given to me so that I may sulk about it.
04:25:36 <CakeProphet> okay so this code makes no sense.
04:25:49 <zzo38> Outside of the "Dispatch" chapter, you would probably have to rewrite very little to get it to work with Glulx if there is a way to do this compiling.
04:26:09 <CakeProphet> okay so it has a while loop that reads lines from the file and assigns to a variable
04:26:19 <CakeProphet> then it takes that line and splits by \r\n
04:26:23 <CakeProphet> does that make....any sense at all?
04:26:26 <zzo38> (Nothing in the "Dispatch" chapter is exported from the module, except for a few foreign exports.)
04:26:59 <zzo38> (But foreign exports are not exports anyways, they are different)
04:39:48 <zzo38> I have read that a functor is homomorphisms between categories. It says monad in Haskell is functor, too, it is what the class says it is. And I have read that monad axioms with >=> are simply that it forms a category. What categories exactly is this functor mapping? I don't know for sure I don't know category theory perfectly and am a bit confuse
04:43:04 -!- copumpkin has joined.
04:44:41 <CakeProphet> OO no longer makes any sense.
04:44:47 <CakeProphet> I remember it making at least a little sense before.
04:45:01 <CakeProphet> but I've been using Haskell and Perl for far too long
04:45:09 <CakeProphet> I have no idea why I would use a constructor for half of this shit.
04:46:02 <pikhq_> OO is a pitiful attempt at shoehorning stronger typing into the structured languages.
04:46:20 <CakeProphet> zzo38: http://en.wikibooks.org/wiki/Haskell/Category_theory
04:46:49 <CakeProphet> it's a functor from a category to the same cateogry.
04:48:09 -!- Patashu has quit (Quit: MSN: Patashu@hotmail.com , Gmail: Patashu0@gmail.com , AIM: Patashu0 , YIM: patashu2 .).
04:51:49 <zzo38> But I have read that monads with >=> and return also form a category
04:53:10 <zzo38> "We've defined two parts, something that takes objects in Hask to objects in another category (that of Maybe types and functions defined on Maybe types), and something that takes morphisms in Hask to morphisms in this category. So Maybe is a functor." But Maybe is also a monad and later it says monads go from a category to the same category.
05:01:30 <coppro> Maybe is a subcategory of Hask
05:01:50 <coppro> so a functor from Hask to Maybe can be taken as an endofunctor
05:03:19 <zzo38> According to Wikipedia: "Endofunctor: A functor that maps a category to itself." OK, now I can see. Yes it does make sense now
05:07:50 <zzo38> "Monad axioms: Kleisli composition forms a category." (double spacing indicates Haiku lines)
05:09:03 <zzo38> So, I suppose x maps to return . x and composition maps to >=>
05:11:42 <Sgeo> Hask?
05:12:29 <zzo38> Hask is the category of Haskell
05:16:43 <Sgeo> Is Leksah any good these days?
05:17:10 <CakeProphet> this might be the worst code I've ever had to seriously analyze.
05:18:46 -!- azaq231 has quit (Quit: Leaving.).
05:26:31 -!- pikhq has joined.
05:27:00 -!- pikhq_ has quit (Ping timeout: 260 seconds).
05:51:27 <zzo38> Are there bimonads, like there are bifunctors?
05:53:44 <pikhq> Hmm. If future paleontologists looked back on us, they would probably be pretty dang confused by the rather sudden incidence of no third molars in Homo sapiens.
05:55:15 <pikhq> Though... That'd probably be the least of their worries.
05:55:24 <pikhq> "Holy fuck, civilization everywhere".
06:00:14 <zzo38> I noticed that with { f (x:y) = y:[[x]]; f [] = []; } that (join . (f)) and (join . (f >=> f)) and (join . (f >=> f >=> f)) seems same what is this property called?
06:01:57 <zzo38> pikhq: Can you invent stuff for purpose of confusing future paleontologists?
06:03:42 <Sgeo> third molars?
06:03:50 <pikhq> AKA "wisdom teeth".
06:03:52 <Sgeo> Ah
06:04:29 <Sgeo> pikhq, that's depressing
06:06:05 -!- elliott has quit (Ping timeout: 252 seconds).
06:10:40 <CakeProphet> zzo38: the flattening Kleisli indifferene invariant
06:12:09 <CakeProphet> :t id >=> id
06:12:09 <lambdabot> forall (m :: * -> *) c. (Monad m) => m (m c) -> m c
06:12:46 <CakeProphet> :t (id >=> id) [[1,2,3,4],[6,7,8]]
06:12:47 <lambdabot> forall c. (Num c) => [c]
06:12:51 <CakeProphet> > (id >=> id) [[1,2,3,4],[6,7,8]]
06:12:51 <lambdabot> [1,2,3,4,6,7,8]
06:13:35 <CakeProphet> there's your monad defined with Kleisli composition.
06:14:45 <CakeProphet> for functions anyways.
06:15:23 <CakeProphet> :t (>=>)
06:15:24 <lambdabot> forall a (m :: * -> *) b c. (Monad m) => (a -> m b) -> (b -> m c) -> a -> m c
06:15:35 <CakeProphet> er, nevermind, not for functions
06:16:35 -!- nooga has joined.
06:16:43 <CakeProphet> I like how id basically turns a -> into an equality.
06:17:06 <CakeProphet> :t id :: (a -> m b)
06:17:06 <lambdabot> Couldn't match expected type `m b' against inferred type `a'
06:17:06 <lambdabot> `a' is a rigid type variable bound by
06:17:06 <lambdabot> an expression type signature at <interactive>:1:7
06:17:24 <CakeProphet> >_> yeah I didn't think that would work
06:19:05 <CakeProphet> > (id >=> (:[])) 4
06:19:06 <lambdabot> No instance for (GHC.Num.Num [b])
06:19:06 <lambdabot> arising from a use of `e_14' at <inter...
06:19:27 <CakeProphet> > ((:[]) >=> (:[])) [4]
06:19:27 <lambdabot> [[4]]
06:19:30 <CakeProphet> > ((:[]) >=> (:[])) 4
06:19:30 <lambdabot> [4]
06:20:31 <CakeProphet> > fmap (id >=> id) ((:[]) >=> (:[])) [4]
06:20:31 <lambdabot> [4]
06:30:40 <pikhq> ...
06:30:44 <pikhq> Srsly?
06:35:30 <pikhq> Any particular reason for not using join and return?
06:39:22 <CakeProphet> zzo38 was talking about Kleisli composition forming a category or something.
06:39:37 <CakeProphet> so I... made join and return? I don't really know why.
06:39:57 <pikhq> Okay, then.
06:40:35 <CakeProphet> I mean ((:[]) >=> (:[])) looks way cooler than return so I think it's pretty defensible.
06:40:40 <pikhq> Shame that ((:[]) >=> (:[])) only works on [a].
06:40:54 <CakeProphet> it's like a totem pole or something.
06:41:44 <CakeProphet> yeah I'm not entirely sure that you can define return in terms of other monadic operators.
06:44:07 <pikhq> Also, (:[]) suffices. :P
06:45:19 <zzo38> pikhq: Well, that is meaning return is the identity of the >=> so it is suffices of course
06:45:58 <CakeProphet> if you guys keep it up the totem pole is going to be very angry..
06:46:54 <pikhq> :t return >=> return
06:46:55 <lambdabot> forall a (m :: * -> *). (Monad m) => a -> m a
06:46:57 <pikhq> Sure enough.
06:52:38 <CakeProphet> oooooh okay
06:52:39 <CakeProphet> so
06:52:44 <CakeProphet> return = return >=> return
06:52:47 <CakeProphet> it all makes so much sense.
06:53:44 -!- cheater has quit (Ping timeout: 260 seconds).
06:55:52 <zzo38> If you have a "more" command like I described, then if using "more" inside of "case", it would rearrange everything included there in the order of specificness (but leaves it together in that "more" so that other case alternatives given stay where they are), and in all ways of using "more" you can override the position by putting a number at front, such as: data Color = more Colors; 5 color Blue; 1 color Orange;
06:56:10 <zzo38> data Color = more Colors; 5 Colors = Blue; 1 Colors = Orange;
06:57:01 <zzo38> Now it will put Orange first, which is useful if you are deriving Enum
07:03:25 <CakeProphet> how do I decode base64 in sh
07:03:30 <CakeProphet> also, what is a good hex viewer.
07:05:01 <fizzie> base64 -d, hexdump -C | less. (Okay, the last one's not necessarily good. I'd guess "good" depends on what you need to do with it.)
07:05:30 <pikhq> base64 -d (not POSIX, part of GNU coreutils), and od -x (POSIX)
07:05:36 <CakeProphet> decode base 64 and view the result as hex?
07:05:58 <pikhq> base64 -d|od -x
07:06:02 <pikhq> Durp.
07:06:18 <CakeProphet> see what fizzie for context of why I said that.
07:06:24 <CakeProphet> *fizzie said
07:06:27 <pikhq> Ah.
07:06:42 <CakeProphet> I KNOW BASH GAIZ
07:06:45 <CakeProphet> just not every program
07:06:53 <zzo38> What else the "more" would do with automatic ordering for "data", is, duplicates are allowed, multiple constructors can be specified at once, and the order is kept as it is on each line if possible, such as: data T = more Z; Z = Two | Three; Z = Three | Four; Z = One | Two; will put them in order: data T = One | Two | Three | Four;
07:07:02 <fizzie> "od -x" defaults to little-endian 2-byte view, doesn't it? It can do a more sensible hex output, but you need to ask.
07:07:24 <fizzie> "od -t x1" for example.
07:08:06 <CakeProphet> nevermind I apparently don't even need to view hex.
07:08:14 <CakeProphet> THIS CODE MAKES NO FUCKING SENSE AAAAH
07:08:14 <fizzie> "hexdump -C" gives the "traditional" (fsvo) split hex-plus-ascii view, though it's non-POSIX (part of bsdmainutils, here) too.
07:08:21 <pikhq> Oh, bleh, right.
07:08:33 <CakeProphet> man I sure would hate to use something non-POSIX
07:08:47 -!- zzo38 has quit (Remote host closed the connection).
07:08:55 <CakeProphet> it would matter so much to me.
07:09:01 <fizzie> Portability is KEY, especially when you just want to do a thing once on your own system.
07:09:08 <CakeProphet> lolyep
07:09:14 <pikhq> GNU shit is shit, even when it doesn't matter. :)
07:09:45 <pikhq> (though, hexdump is more "traditional tool that POSIX didn't decide to standardise, in favor of a different but mostly the same traditional tool")
07:13:09 -!- pikhq_ has joined.
07:13:26 <fizzie> I tend to debase64 with perl -MMIME::Base64 -e 'print decode_base64("...");', because at least PERL stands for "PERL ein't-no ruddy-poo lol-GNU".
07:14:52 <CakeProphet> line.Contains('|').Equals(true)
07:14:54 <pikhq_> I prefer /bin/busybox base64, because at least Busybox is the only tool ever installed anywhere, right?
07:14:56 <CakeProphet> this code is so horrible
07:14:57 <pikhq_> :P
07:14:58 <CakeProphet> in every way;
07:15:10 -!- pikhq has quit (Read error: Operation timed out).
07:18:17 <fizzie> Add a couple of ".Equals(true)"s to the end for emphasis.
07:21:01 <pikhq_> Hopefully you can even do s/true/.Equals(true)/g for a bit.
07:21:14 <pikhq_> Erm, true.Equals(true)
07:21:36 <CakeProphet> seriously that's code that a novice Java programmer would write.
07:21:38 <CakeProphet> and this is C#.
07:21:56 <fizzie> Java doesn't have monopoly on stupidity, there's plenty of it to go around.
07:21:59 <fizzie> (Cf. PHP.)
07:22:01 <CakeProphet> the poor way to write it in C# would be line.Contains('|') == true
07:22:14 <pikhq_> If anyone has a monopoly on stupidity, it's PHP.
07:23:04 <fizzie> I would think the "natural" poor way to write it in Java would be line.contains("/") == true too.
07:23:23 <CakeProphet> oh yes you're right.
07:23:26 <fizzie> Since I'd guess you can't even .equals() a boolean, it's a primitive type.
07:23:30 <CakeProphet> actually I don't think boolean has methods in Java.
07:23:34 <CakeProphet> yes.
07:23:49 <fizzie> They don't do the "value types with methods" thing in those parts.
07:24:10 <pikhq_> Not to mention the primitives aren't objects.
07:24:33 <fizzie> But no worries, you can always work around it using (new Boolean(line.contains("/")).equals(new Boolean(true)).
07:24:40 <pikhq_> :D
07:25:52 <pikhq_> Hmm. C++... new Boolean(line.contains("/")).operator==(new Boolean(true)) // and leaks memory?
07:26:12 <pikhq_> Erm.
07:26:16 <pikhq_> s/./->/
07:26:31 <pikhq_> C++: because fuck you.
07:30:20 <CakeProphet> new Boolean(line.Contains((CharSequence)(new StringBuilder((CharSequence)(new String("/")))).Equals(new Boolean(new String("true")))
07:31:10 <CakeProphet> it's better to expose the interfaces instead of those nasty concrete classes.
07:31:42 <pikhq_> Needs moar factories.
07:33:00 -!- Lymee has quit (Ping timeout: 260 seconds).
07:33:22 <CakeProphet> AbstractBabyFactory
07:34:05 <CakeProphet> public class YourMom extends MyPenis implements AbstractBabyFactory
07:34:37 <fizzie> { std::auto_ptr< Box<bool>* > b1 = new Box(line.contains("/") /* template param inference, ooh */); std::auto_ptr< Box<bool>* > b2 = new Box(true); b1->operator==(b2); } /* commit message: "fixed the leak" */
07:35:12 <fizzie> (Disclaimer: should probably use some sort of standard "Box" out of Boost or something.)
07:38:28 -!- cheater has joined.
07:43:55 -!- dbc has joined.
07:44:07 <CakeProphet> wow: http://remysharp.com/2007/11/14/base64-decode-to-file/
07:44:17 <CakeProphet> obviously the best way to do it.
07:45:29 <CakeProphet> aside from not using base64 -d, he also doesn't even use -p with perl
07:45:57 <CakeProphet> I should leave an strongly-worded reply.
07:50:07 <CakeProphet> @instances-importing Monad Data.Set
07:50:07 <lambdabot> Couldn't find class `Data.Set'. Try @instances-importing
07:50:15 <CakeProphet> @instances-importing Data.Set Monad
07:50:16 <lambdabot> ((->) r), ArrowMonad a, ContT r m, Either e, ErrorT e m, IO, Maybe, RWST r w s m, ReaderT r m, ST s, StateT s m, WriterT w m, []
07:50:39 <CakeProphet> no Set monad? :(
07:50:46 -!- dbc has quit (Quit: Seeeeeya).
07:57:04 <CakeProphet> :t (\x y -> fmap (join.y) x)
07:57:05 <lambdabot> forall (m :: * -> *) a a1 (f :: * -> *). (Monad m, Functor f) => f a1 -> (a1 -> m (m a)) -> f (m a)
07:57:30 <CakeProphet> :t (\x y -> join . fmap $ y x
07:57:31 <lambdabot> parse error (possibly incorrect indentation)
07:57:35 <CakeProphet> :t (\x y -> join . fmap $ y x)
07:57:36 <lambdabot> Occurs check: cannot construct the infinite type: m = (->) (m a)
07:57:36 <lambdabot> Probable cause: `fmap' is applied to too few arguments
07:57:36 <lambdabot> In the second argument of `(.)', namely `fmap'
07:57:55 <CakeProphet> :t (\x y -> join . fmap y $ x)
07:57:56 <lambdabot> forall (m :: * -> *) a a1. (Monad m, Functor m) => m a1 -> (a1 -> m a) -> m a
08:00:58 <CakeProphet> I think whenever I consider making something an instance of Monad I'll first consider how to define join and fmap
08:01:10 <CakeProphet> because they're a little more natural to figure out than bind.
08:08:00 <fizzie> CakeProphet: Not only that, but the code as written doesn't work if the lines of the text aren't wrapped on the 3-byte (4-character) base64 boundaries, since it'll try to decode each line independently.
08:17:06 -!- BeholdMyGlory has joined.
08:39:14 -!- GreaseMonkey has quit (Quit: The Other Game).
08:43:04 <Sgeo> "So, unless first-class modules are something you get excited about, or you need Java interop for something, Scala isn't really worth the effort if you're already using Haskell, except as another excuse for broadening your experience of languages."
08:43:16 <Sgeo> Butbut..... I _do_ get excited over first-class modules!
08:48:56 -!- Lymee has joined.
09:09:26 -!- augur has quit (Remote host closed the connection).
09:16:59 -!- nooga has quit (Ping timeout: 246 seconds).
09:19:23 -!- oerjan has joined.
09:25:17 -!- itidus21 has joined.
09:28:03 -!- itidus20 has quit (Ping timeout: 240 seconds).
09:28:18 -!- Patashu has joined.
09:30:13 <Patashu> I've coded an algorithm for my proto-RTS whereby a unit behind other units will curve around them to reach its destination (if its next step is blocked it tries the step + and - a slight change until it finds one that works or gives up). Normally it works OK even on corners but sometimes it gets wedged and vibrates angrily on the spot. I was wondering what the 'most elegant' way to detect
09:30:13 <Patashu> such buzzing and fix it would be
09:32:38 <Patashu> Well, detecting is easy actually, I can just take a snapshot of position every X frames and compare to the present, if it's the same I'm stuck. What should the correction strategy be...
09:33:16 <Patashu> Maybe pretending the other units are larger more and more until you make progress? Let's try that
09:37:56 -!- Vorpal has joined.
09:43:06 -!- augur has joined.
09:51:42 * Sgeo wants to try Dylan
10:11:01 <Patashu> Hmm, I have an idea
10:11:22 <Patashu> If I detect I'm stuck, look for the direction which I can move the furthest in, move that way for a while then try again
10:15:23 -!- nooga has joined.
10:19:12 -!- augur has quit (Remote host closed the connection).
10:42:28 -!- FireFly has joined.
10:42:47 -!- cheater has quit (Remote host closed the connection).
10:45:32 -!- cheater has joined.
10:52:59 -!- yorick_ has changed nick to yorick.
11:13:16 <Patashu> Got it working
11:17:04 -!- monqy has quit (Quit: hello).
11:20:27 -!- cheater has quit (Remote host closed the connection).
11:21:28 -!- cheater has joined.
11:23:38 -!- nooga has quit (Ping timeout: 245 seconds).
11:23:55 * Sgeo wants Dylan to not be a dead language
11:36:06 -!- itidus21 has changed nick to itidus20.
11:41:40 -!- sllide has joined.
11:43:17 -!- oerjan has quit (Quit: leaving).
11:56:18 -!- boily has joined.
12:04:44 -!- nooga has joined.
12:35:35 -!- nooga has quit (Ping timeout: 250 seconds).
12:50:51 -!- nooga has joined.
13:46:39 -!- copumpkin has quit (Quit: Computer has gone to sleep.).
13:54:53 -!- Patashu has quit (Ping timeout: 245 seconds).
14:01:34 -!- ais523 has joined.
14:10:52 -!- ais523 has quit (Read error: Connection reset by peer).
14:12:38 -!- ais523 has joined.
14:18:42 -!- copumpkin has joined.
14:18:46 -!- copumpkin has quit (Changing host).
14:18:46 -!- copumpkin has joined.
14:36:20 -!- Phantom_Hoover has joined.
14:37:09 -!- augur has joined.
14:44:45 -!- augur has quit (Remote host closed the connection).
15:00:17 -!- ais523 has quit (Remote host closed the connection).
15:10:39 -!- zzo38 has joined.
15:32:57 <zzo38> I have a list of "You know you've been in Japan too long when..." and I have never been in Japan but a few of the things in that list are things I have sometimes done.
15:42:06 <Phantom_Hoover> :O
15:44:14 -!- nooga has quit (Quit: Lost terminal).
15:47:12 <zzo38> I have recorded part of the D&D game.
15:48:01 <Phantom_Hoover> This can only be hilarious.
15:48:25 <zzo38> I am doing typing more recording now.
15:55:02 <zzo38> Spells I used during this session: My Light, Touch of Health, Object Reading, Pyrotechnics, Dismiss Psionics, Major Creation. Can you understand their uses?
15:55:27 -!- ais523 has joined.
15:57:39 -!- augur has joined.
16:07:47 -!- quintopia has quit (Ping timeout: 252 seconds).
16:08:21 <zzo38> Do you know how to help with this document anything that could be rewritten a clearer way or in a better way of writing story?
16:08:25 <zzo38> http://zzo38computer.cjb.net/dnd/recording/level20.tex
16:09:10 -!- quintopia has joined.
16:09:10 -!- quintopia has quit (Changing host).
16:09:10 -!- quintopia has joined.
16:24:30 -!- derrik has joined.
16:38:22 <Gregor> How to Fail 101: Write the A* pathfinding algorithm but with restrictions on which direction you're allowed to move. Do not take those restrictions into account in the heuristic.
16:41:21 <ais523> Gregor: does that actually make it wrong? or just inefficient?
16:41:27 <ais523> (as in, which direction was the heuristic wrong in?)
16:42:43 <Gregor> It makes it unusably inefficient. It will basically search the entire map, desperately pleading with itself as one part of the algorithm makes it go farther while the other says "no dawg, you should go that way LOL"
16:44:08 <zzo38> I think too many paragraphs begin with "Also"
16:44:36 <zzo38> (That is, in the document I linked)
16:55:18 <ais523> haha, and we see what and who is responsible for the PHP crypt() security bug: http://svn.php.net/viewvc/php/php-src/trunk/ext/standard/php_crypt_r.c?r1=314438&r2=314437&pathrev=314438
16:55:25 <ais523> that edit is amazing
16:55:29 -!- CakeProphet has quit (Ping timeout: 246 seconds).
16:56:21 <Gregor> Woooo pathfinding
17:18:12 -!- elliott has joined.
17:26:48 <elliott> `addquote <fizzie> I tend to debase64 with perl -MMIME::Base64 -e 'print decode_base64("...");', because at least PERL stands for "PERL ein't-no ruddy-poo lol-GNU".
17:26:52 <HackEgo> 619) <fizzie> I tend to debase64 with perl -MMIME::Base64 -e 'print decode_base64("...");', because at least PERL stands for "PERL ein't-no ruddy-poo lol-GNU".
17:28:17 <elliott> 07:50:15: <CakeProphet> @instances-importing Data.Set Monad
17:28:17 <elliott> 07:50:16: <lambdabot> ((->) r), ArrowMonad a, ContT r m, Either e, ErrorT e m, IO, Maybe, RWST r w s m, ReaderT r m, ST s, StateT s m, WriterT w m, []
17:28:17 <elliott> 07:50:39: <CakeProphet> no Set monad? :(
17:28:20 <elliott> cannot be done
17:28:59 <elliott> 08:43:04: <Sgeo> "So, unless first-class modules are something you get excited about, or you need Java interop for something, Scala isn't really worth the effort if you're already using Haskell, except as another excuse for broadening your experience of languages."
17:28:59 <elliott> lol, yeah, because scala is JUST AS GOOD as haskell in every other respect
17:29:11 <elliott> apart from being impure. and having pointless OO crap. and relying on horrible java libraries.
17:29:15 <elliott> and being way slower.
17:29:22 <Deewiant> That's not what that implies
17:29:42 <Deewiant> In fact, it specifically implies that Scala is worse, or at least no better, than Haskell :-P
17:29:52 <elliott> Gregor: how's pathfinding
17:30:09 <elliott> Deewiant: Yeah, but it also implies that if first-class modules excite you then you should totally consider ditching Haskell for Scala
17:30:14 <elliott> Which is stupid
17:30:29 <Deewiant> I think it just implies that you should take a look at it
17:30:43 <Deewiant> Which is fine IMO, for a language feature one finds exciting
17:31:05 <zzo38> I saw the description of power set functor, so why is there no set monad? I do not completely understand category theory
17:31:12 <elliott> Deewiant: Well, Sgeo certainly did not interpret it that way :P
17:31:19 <elliott> zzo38: there is not one in haskell because Set has an Ord constraint
17:31:41 <Deewiant> elliott: If you say so; I didn't interpret him like that :-P
17:32:27 <Gregor> elliott: Works
17:32:39 <elliott> `addquote <Phantom_Hoover> FFS, building a perpetual motion machine should not be this hard.
17:32:41 <HackEgo> 620) <Phantom_Hoover> FFS, building a perpetual motion machine should not be this hard.
17:32:42 <elliott> Gregor: Is it Haskell yet
17:32:58 <Gregor> elliott: No, I said it works LOLOLOL THIS DOESN'T ACTUALLY MAKE SENSE
17:33:13 <elliott> Gregor: wot
17:36:55 -!- zzo38 has quit (Remote host closed the connection).
17:41:51 <Phantom_Hoover> Help I started reading Project Rho and I can't stop.
17:43:01 <elliott> Friendship Project Rho.
17:43:12 <Gregor> elliott: By setting the pathfinding action to build instead of advance, I can cover the entire world in garbage!
17:43:14 <elliott> What _is_ Project Rho.
17:43:25 <elliott> Gregor: Sweet. Link me to the code so I can rip it off.
17:43:41 <Gregor> elliott: https://bitbucket.org/GregorR/rezzo-gragents
17:43:45 <Gregor> It's just A*
17:43:48 <elliott> "gragents"
17:43:50 <elliott> R usrs.
17:44:25 <Gregor> Gregor Richards' Agents
17:44:30 <elliott> Suuuuuuuuuuuuure
17:44:58 <Gregor> It was originally grwarriors
17:44:58 <elliott> Strangely I've never really used pathfinding much before. I wonder why not. I should implement something nice instead of A* because I'm a hipster.
17:44:59 <Gregor> So yeah
17:45:08 <elliott> Gregor: You realise you already have y
17:45:18 <elliott> Gregor: You realise you already have a private namespace, you don't need to prefix things, this isn't C :P
17:45:33 <Gregor> This is C ...
17:45:39 <elliott> Gregor: ...no, this is bitbucket.
17:45:51 <Gregor> Oh, you mean I could barf it into rezzo.
17:45:58 <elliott> Your "rezzo-agents" will not conflict with any other "rezzo-agents", is what I am saying :P
17:46:02 <Gregor> Ohohoh
17:46:13 <Gregor> If I just called it "agents", it wouldn't be clear *shrugs*
17:46:17 <Gregor> gragents I'll admit is overkill :P
17:46:20 <elliott> I said "rezzo-agents" :P
17:46:28 <Phantom_Hoover> <elliott> What _is_ Project Rho.
17:46:32 <Phantom_Hoover> The rocket thing?
17:46:39 <elliott> Phantom_Hoover: What rocket thing?
17:46:53 <Deewiant> elliott: http://www.projectrho.com/rocket/
17:46:53 <Phantom_Hoover> http://www.projectrho.com/rocket/
17:46:56 <Phantom_Hoover> This rocket thing.
17:47:06 <elliott> Hmm, I think I have seen this page.
17:48:07 <elliott> void horizontalShimmy()
17:48:10 <elliott> Gregor really likes shimmies.
17:48:31 -!- nooga has joined.
17:48:35 <nooga> fuk
17:48:52 <nooga> i leaned my keyboard and fuked the key
17:49:03 <elliott> Is nooga ever not drunk when coming here any more.
17:49:13 <nooga> i'mnot drunk
17:49:17 <nooga> fuk
17:49:18 <nooga> :D
17:49:23 <nooga> not drunk
17:49:35 <elliott> Is your c key broken?
17:49:44 <nooga> that's orret
17:49:58 <Phantom_Hoover> nooga, so are your days of writing C programs oveR?
17:50:00 <Phantom_Hoover> *ovr
17:50:03 <Phantom_Hoover> *ver
17:50:05 <Phantom_Hoover> *over
17:50:22 <nooga> Phantom_Hoover: in fat, it was my first thought after disovering it
17:50:39 <nooga> i mean that the key is broken
17:54:03 <nooga> oh cruel world
17:54:45 -!- ais523_ has joined.
17:55:03 -!- ais523 has quit (Disconnected by services).
17:55:05 -!- ais523_ has changed nick to ais523.
17:57:42 <elliott> hi ais523
17:57:45 <elliott> nooga: "c"
17:57:56 <ais523> hi; computer overheated because the fan forgot to start
17:58:07 <ais523> it's OK now
17:58:38 <nooga> cccc
17:58:39 <elliott> ais523: you know how you said that microchanges could use a different hash function to become the hash of their parent plus an index?
17:58:49 <nooga> i can write c now
17:59:14 <nooga> i removed the key and touch the switch with finger
17:59:25 <elliott> nooga: I did that for I think e for a while
17:59:29 <elliott> I am really good at computer typing
17:59:32 <nooga> feels like a little nipple
18:00:31 <Phantom_Hoover> I always feel typing-inadequate.
18:00:59 <elliott> ais523 knows all too well the stories of that keyboard i have where like half the keys didn't stick on properly
18:04:20 <Phantom_Hoover> It's a tale of perseverance against impossible odds.
18:04:54 <Phantom_Hoover> Someone in America is probably making it into a film as we speak.
18:06:13 <nooga> cool
18:10:43 -!- Nisstyre has quit (Ping timeout: 245 seconds).
18:14:06 -!- boily has quit (Ping timeout: 260 seconds).
18:16:14 -!- yretssin has joined.
18:18:38 <Gregor> Electrons are so fragile X-D
18:19:20 <elliott> `addquote <Gregor> Electrons are so fragile X-D
18:19:22 <HackEgo> 621) <Gregor> Electrons are so fragile X-D
18:19:46 <elliott> Gregor: One problem is that getting around ANYWHERE involves breaking a wire which will probably lead to the death of any electron on it :P
18:19:56 <elliott> (But you can rebuild it in two ticks, so it's not that bad)
18:20:22 <Gregor> The main thing for me right now is the 1-or-2-neighbors rule.
18:20:37 <Gregor> I keep building structures where electrons have too many electroneighbors.
18:21:12 <fizzie> A "gragent" is an extra-groovy agent.
18:21:34 <fizzie> Like a "Gregor" is an extra-groovy egor.
18:22:00 <Gregor> Egor ain't got nothin' on me.
18:23:57 <Gregor> I almost want to put the world size in the server message, so you can make clients that scale without having to determine dynamically >_>
18:25:58 <elliott> Gregor: You can do it fairly easily...
18:26:06 <elliott> Bases and shit don't move, so it's easy to determine when you've looped
18:26:21 <Gregor> Yeah, but you've got enough problems to solve without solving that one :P
18:27:07 -!- cheater has quit (Remote host closed the connection).
18:27:50 -!- cheater has joined.
18:28:33 <elliott> Gregor: Well.
18:28:38 <elliott> Gregor: Most of the time it doesn't really even matter?
18:28:46 <elliott> You don't CARE how big the world is, you'll be looking for specific things.
18:28:53 <Gregor> That's a fair point.
18:29:05 <elliott> And if you really want to know it's not THAT hard to figure it out at all :P
18:29:22 <elliott> Unless a ton of people lose before you wrap around I guess but come on.
18:30:10 -!- boily has joined.
18:30:22 <Gregor> 'course it makes the datastructure more complicated too ...
18:31:28 <Gregor> NOWAIT, you totally care how big the world is, getting to something will be wildly inefficient if you go all the way across the map instead of looping.
18:31:54 <elliott> Gregor: What?
18:32:00 <elliott> Gregor: Of course navigation should be non-trivial...
18:32:03 <elliott> That's why the world isn't too big :P
18:32:35 <Gregor> I'm not just talkin' nontrivial, I'm talkin' you-must-detect-the-world-size-to-do-literally-freakin'-anything
18:32:46 <Gregor> Otherwise you'll always be going the wrong way.
18:32:49 <Gregor> Well, not always.
18:32:53 <Gregor> But a fair amount of the time.
18:33:03 <Gregor> Since the goal is not always to go to a place, then back to your base, then back to the place.
18:33:13 <Gregor> You care about local distances, not distances from zero.
18:33:17 <elliott> Phantom_Hoover: Please tell Gregor that navigating a torus does not involve knowing its size :
18:33:18 <elliott> :P
18:33:28 <Gregor> No, it doesn't, but navigating it even remotely efficiently does.
18:33:50 <elliott> Phantom_Hoover: Tell him that's not true either :P Unless Gregor has a really weird navigation algorithm in mind...
18:33:53 <Gregor> X_X
18:34:05 <Gregor> If you're at point X and you want to get to point Y, you need to know whether it's more efficient to go your idea of the "direct" way there, or around the back.
18:34:13 <Gregor> (i.e. the exact opposite direction)
18:34:22 <Gregor> You have no way of knowing which is better without knowing how big the world is.
18:35:04 <Phantom_Hoover> Hello guys are you asking my stuff.
18:35:04 <Phantom_Hoover> *me
18:35:13 <Gregor> Phantom_Hoover: elliott is being an idiot
18:35:25 <Phantom_Hoover> Looks like it.
18:35:29 <elliott> Hmmmmmmmmmmmmmmmmmm
18:35:34 <elliott> Gregor: Well, yeah, but that's just an optimisation
18:35:37 <Gregor> X_X
18:35:50 <elliott> With a decent-size world you won't waste THAT much time :P
18:36:04 <elliott> But anyway if you want to remove all the interesting coding challenge from the game BE MY GUEST
18:36:22 <Gregor> You only think that's the interesting coding challenge because you've done NO FUCKING CODE
18:37:01 <elliott> Gregor: And you have? You've implemented A* :P
18:37:28 <Gregor> And map-recording, and connecting electrons to one's base.
18:37:36 <Gregor> So yes.
18:37:38 <Gregor> A fuckload more than you.
18:37:43 <elliott> Map-recording is... not really anything.
18:37:44 <Phantom_Hoover> The world ends the world ends the world ends / Not with a bang but with a bicker.
18:37:50 <Gregor> elliott: It is if you don't know the size.
18:38:03 <elliott> Frankly, matches will last long enough that the navigation required to determine the world size is negligible.
18:38:43 <Gregor> Oy vey
18:38:53 <Phantom_Hoover> Oh FFS, I got the quote wrong.
18:39:06 <Gregor> Phantom_Hoover: ... fizzle? :P
18:39:16 <elliott> Phantom_Hoover: I was wondering if you were quoting some derivative work or something.
18:39:28 <Phantom_Hoover> Yes.
18:40:08 <elliott> ais523: you may be interested in http://stackoverflow.com/questions/2786899/fastest-sort-of-fixed-length-6-int-array/ (GPU-related)
18:40:20 <elliott> ais523: Eagerly await your Checkout solution :P
18:40:48 <ais523> elliott: you clearly do it with parallel compare-and-swap
18:41:23 <elliott> The sort6_sorting_network_v4 seems to be the fastest, which seems to do that
18:41:25 <ais523> the first answer has the correct answer
18:41:33 <ais523> well, correct approach
18:41:35 <elliott> Right
18:41:38 <ais523> I'm not sure if the answer given there is the very best
18:41:44 <elliott> ais523: Well, the question has a faster one
18:41:49 <ais523> however, on a GPU, you'd want to do it in parallel
18:41:54 <ais523> and that's doing it in series for some insane reason
18:41:56 <elliott> (Than the first answer)
18:42:46 <elliott> oh, and http://www.reddit.com/r/programming/comments/jsmog/fastest_sort_of_fixed_length_6_int_array/c2et4sm too
18:43:17 <ais523> interestingly, the program in the question is in C not in CUDA
18:43:20 <ais523> so parallelism isn't expressible
18:48:28 -!- derrik has quit (Quit: done).
18:56:15 <elliott> hmm, how does unicode text rendering in terminals even work? (I realise that it doesn't, in most of them)
18:56:31 <elliott> it doesn't seem like you'd be able to keep a consistent terminal grid while obeying RTL and the like
18:57:56 <fizzie> "It doesn't" is probably very close, especially when it comes to direction-changing.
18:58:08 <fizzie> Sometimes the half-width/full-width stuff works.
18:58:55 <olsner> usually works fine for the ASCII part of unicode :P
19:04:12 <elliott> fizzie: Well, yes.
19:04:17 <elliott> fizzie: But I want it to work.
19:04:38 <elliott> I guess what I want to ask is "how SHOULD it work", and I guess "how does it work in terminals that at least partially Get It Right".
19:05:02 -!- azaq23 has joined.
19:06:40 <fizzie> The fullwidth latin letters seem to borderline work in Vim/rxvt-unicode. The cursor block is a bit wacky though.
19:06:50 <fizzie> I don't think it tries to do direction "natively".
19:06:59 <nooga> im trying to make clang together with libc to handle nul terminated strings with length prepended
19:08:39 <olsner> I love how weird projects like that pop up regularly around here
19:08:40 <elliott> fizzie: I'm talking more mlterm, uuterm and the like.
19:08:53 * olsner isn't doing enough of them
19:08:59 <nooga> what projects?
19:09:25 <olsner> nooga: like trying to make clang and libc handle length-prefixed strings
19:09:50 <nooga> ah
19:12:43 -!- myndzi\ has joined.
19:12:59 <nooga> and then utf-8 and then i can write the kernel and bootstrap libc
19:13:53 <elliott> why not just write your own library
19:15:18 -!- myndzi has quit (Ping timeout: 258 seconds).
19:15:31 <nooga> because i want that handled on the lowest level possible and because i'm looking for a reason to play with osdev
19:16:22 <elliott> why bother hacking glibc to do it
19:16:24 <elliott> waste of time
19:16:57 <nooga> the more stupid reason the better
19:19:03 -!- yretssin has quit (Ping timeout: 245 seconds).
19:21:44 -!- yretssin has joined.
19:25:40 <olsner> nooga: hmm, so you're writing an operating system? and the libc/clang thing is for the kernel?
19:25:48 <nooga> yep
19:27:19 <olsner> why not just reimplement the specific stuff you need instead of trying to port glibc(?) to kernel space?
19:28:50 <elliott> At least modify a libc defined for it
19:28:54 <elliott> Like PDCLib
19:28:57 <elliott> [asterisk]designed
19:29:03 <elliott> glibc isn't meant to run in kernel space.
19:30:15 <nooga> elliott: i didn't say anything about glibc
19:30:46 <elliott> You said libc. Porting BSD libc is laughable, and you didn't mention another specific libc so I was not about to go assuming it was one that you're unlikely to be running as your system libc
19:31:57 <olsner> most of the stuff in libc is useless anyway, just throw it out and build your own optimalized assembler memcpy
19:32:18 <nooga> i use newlib ;p
19:33:43 <elliott> olsner: So what happened to your oS
19:33:49 <elliott> [asterisk]OS
19:34:04 <olsner> elliott: it's moving steadily forward at 0 velocity
19:36:33 <olsner> hmm... last thing that happened was iirc that I tried to do some coding on my mac but apparently homebrew didn't have a formula for bochs so I had to write my own and the result failed to boot :)
19:36:51 <olsner> homebrew: clearly superiour to macports
19:37:08 <elliott> OS X: so terrible
19:37:22 <elliott> You should just try and get a Debian chroot working or something :P
19:37:37 <quintopia> elliott: when will you acquire a working keyboard?
19:37:38 -!- boily has quit (Ping timeout: 258 seconds).
19:37:39 <elliott> Debian GNU/Mach
19:37:48 <elliott> quintopia: Soon.
19:37:53 <elliott> First I will deacquire a working laptop.
19:37:59 <olsner> ooh, that sounds convenient though ... do debian chroots work in HFS filesystems?
19:38:03 <elliott> Then later I will reacquire it, or more likely a replaced one of identical furnishing.
19:38:17 <quintopia> what will you use in the meantime
19:38:26 <elliott> olsner: I... doubt Debian depends on any capitalisation clashes? I somewhat doubt the whole toolchain will spit out Mach-O properly though
19:38:33 <elliott> I mean, Debian is all ELF all the time, as far as I know
19:38:37 <elliott> quintopia: My older laptop
19:38:57 <elliott> olsner: You could write an ELF loader like Gregor did for Windows.
19:38:58 <quintopia> elliott: do you know any pixel artists
19:38:59 <elliott> Or just port his.
19:39:02 <olsner> oh, right. the Mach-O thing ... how hard could it be to acquire an ELF loader for OS X?
19:39:04 <elliott> quintopia: Why
19:39:10 <nooga> why
19:39:27 <olsner> or just write my own os x kernel module for it, how hard could *that* be
19:39:30 <nooga> it's completely possible to build nice compiler stack on OS X
19:39:41 <Gregor> (I did in fact write an ELF loader for Mac OS X too)
19:39:50 <olsner> (homebrew: just write an ELF loader and install a debian chroot to work around one missing package)
19:40:03 <olsner> clearly superior to macports again
19:40:29 <olsner> Gregor: cool stuff, did it work?
19:40:54 <nooga> oh right
19:40:58 <Gregor> olsner: Yup
19:41:01 <nooga> how is Microcosm doing?
19:41:29 <Gregor> nooga: Ask Vorpal :P
19:41:52 <olsner> hmm, otoh... a debian chroot would have *Linux* ELFs, right?
19:42:44 <elliott> Just a matter of translating syscalls, although at this point you're practically looking for Microcosm
19:43:02 <elliott> Gregor: Does the ELF loader have any kind of syscall translation mechanism? :P
19:43:51 <olsner> plugging in a dvso shouldn't be rocket science, but even then there'd be so many tricksy system calls to implement
19:43:51 <Gregor> elliott: Why would it?
19:44:07 <Gregor> elliott: It has the ability to transparently load host libraries as if they were ELF libraries.
19:44:34 <elliott> Gregor: Hmm
19:44:41 <elliott> Gregor: That should be enough to load anything that uses libc, right?
19:44:47 -!- yretssin has changed nick to Nisstyre.
19:44:51 <elliott> Gregor: Assuming that it doesn't use glibc-specific stuff
19:45:21 <olsner> but what's microcosm?
19:45:22 <elliott> Hmm
19:45:23 <fizzie> Clearly what you *should* do is to try to get MkLinux working under OS X. (MkLinux runs a Linux 2.0 series kernel under the OSF Mach 3 microkernel; clearly it's a trivial matter to bump that to Linux 3 on OS X's kernel.)
19:45:27 <elliott> Debian/kFreeBSD uses BSD libc, doesn't it?
19:45:46 <elliott> So ostensibly you should be able to get a Debian ELF chroot working with Gregor's loader...
19:46:31 <Gregor> elliott: That's a stretch.
19:46:36 <Gregor> elliott: And no, Debian/kFreeBSD uses glibc.
19:46:57 <Gregor> elliott: The problem isn't the functions, it's the structures.
19:47:09 <elliott> Gregor: glibc works on FreeBSD?
19:47:12 <Gregor> Yes
19:47:13 <elliott> Huh. And oh right.
19:47:19 <elliott> musl is ABI-compatible with glibc
19:47:21 <elliott> But that's not helpful :P
19:47:28 <elliott> Gregor: So I guess glibc miiight work on OS X? Same syscalls, roughly, right? :P
19:47:41 -!- Taneb|Kindle has joined.
19:47:42 <Gregor> G'luck with that.
19:47:53 <elliott> It's olsner's task, not mine :)
19:48:05 <elliott> "To build gcc and glibc on Mac OS X, you'll need to install a few gnu utilities:"
19:48:22 <olsner> lemme guess, a few == all of them?
19:48:25 <elliott> Doesn't seem to actually tell you how to do it, but :P
19:48:51 <elliott> olsner: OK so here is your task: Get glibc working on OS X with Gregor's ELF loader. Make sure a few GNU things compile with it and libraries compiled with it. BOOTSTRAP DEBIAN
19:48:52 <Vorpal> <nooga> how is Microcosm doing? <Gregor> nooga: Ask Vorpal :P <-- what? You never did anything on the design
19:48:57 <elliott> Then just trash it all and install Debian proper.
19:49:05 <Gregor> Vorpal: That was the point X-P
19:49:51 <olsner> the original issue was that my homebrew formula for bochs was missing something ... now I'm porting debian to a new platform :>
19:50:02 <Vorpal> Gregor, not implementation. Design I said.
19:50:04 <fizzie> "-- officially supported hardware includes: x86, Motorola 680x0, DEC Alpha, PowerPC, ETRAX CRIS, s390, and SPARC. It officially supports the Hurd and Linux kernels. Additionally, there are heavily patched versions that run on the kernels of FreeBSD and NetBSD (from which Debian GNU/kFreeBSD and Debian GNU/NetBSD systems are built, respectively), as well as the kernel of OpenSolaris.[9] It is also used (in an edited form) and named libroot.so in BeOS and Haiku."
19:50:40 <Vorpal> Gregor, I said I was willing to work on the implementation but that I lacked (and still lack) the knowledge to do the design of it.
19:51:07 <elliott> olsner: You could also just use Gentoo Prefix, which supports OS X, but that's... Gentoo.
19:51:30 <elliott> olsner: You may also want to try NetBSD's pkgsrc, which supports OS X.
19:51:33 <fizzie> Or you could just, you know, install Bochs.
19:51:43 <elliott> fizzie: The problem is that all package managers for OS X suck :P
19:51:53 <fizzie> Yes, well, there's this thing of not using any.
19:52:08 <elliott> olsner: Oh, and Nix/Nixpkgs support OS X fully; that's a nice one.
19:52:09 -!- Taneb|Kindle has quit (Ping timeout: 252 seconds).
19:52:23 <Gregor> elliott: Mind you, getting ELFs that load in the ELF loader is a trick anyway :P
19:52:35 <Gregor> elliott: Since to my knowledge GCC doesn't have an elf-darwin target.
19:52:44 <Gregor> So you have to make generic ELF binaries that "happen" to be good enough.]
19:52:46 <fizzie> OS X is an officially supported Bochs platform, you shouldn't need to get any help from a package manager.
19:52:55 <elliott> fizzie: Well, yes, but.
19:53:02 <fizzie> Yes, yes, it's the principle of it.
19:53:07 <olsner> officially supported? I don't think so, it doesn't work anyway
19:53:16 <Phantom_Hoover> http://esolangs.org/w/index.php?title=Tedius&curid=4163&diff=24402&oldid=24385
19:53:26 <Phantom_Hoover> Tedius has gone from 'meh' bad to hilarious bad.
19:53:29 <fizzie> http://bochs.sourceforge.net/cgi-bin/topper.pl?name=New+Bochs+Documentation&url=http://bochs.sourceforge.net/doc/docbook/user/index.html "1.8. Supported Platforms: Emmanuel Mailliard ported the Macintosh code to MacOS X with Carbon API. Jeremy Parsons (Br'fin) has been maintaining the MacOS X port since March 2002; see Section 3.4.7 for compile instructions."
19:53:35 <elliott> olsner: It comes in .app form I believ.
19:53:36 <elliott> e.
19:53:50 <elliott> Phantom_Hoover: wtf?
19:53:53 <elliott> pila started editing it
19:53:55 <olsner> the mac parts are broken, that is... the X UI works if you disable all the mac stuff that doesn't compile
19:53:56 <elliott> but plms made those two edits
19:53:56 <fizzie> It has a thing that makes a bundle of it, yes.
19:54:24 <elliott> olsner: Just get a binary?
19:54:28 <fizzie> It might be that the port has bitrotteded away.
19:55:16 <fizzie> There's a stack overflow (of all things) thread about compiling it on Snow Leopard; http://stackoverflow.com/questions/1677324/compiling-bochs-on-mac-os-x-snow-leopard
19:55:25 <fizzie> Some seem to have managed.
19:55:38 <fizzie> With -m32 being the most important magic flag.
19:56:42 <elliott> Isn't bochs itself kind of bitrotten
19:57:07 <olsner> well, I think I have those fixes because the formula I made actually builds
19:57:16 <olsner> and runs, just not my OS
19:58:29 <fizzie> Last update in trunk 9 hours ago, so apparently they're strill twiddling on it.
19:58:36 <fizzie> Last release from February, though.
20:00:31 -!- elliott has quit (Remote host closed the connection).
20:01:03 -!- elliott has joined.
20:02:24 <elliott> can you implement the lambda calculus in pointers
20:02:35 <elliott> thTAS THE QUESTION ???\
20:02:40 -!- azaq231 has joined.
20:02:42 -!- azaq23 has quit (Ping timeout: 264 seconds).
20:03:49 -!- oerjan has joined.
20:07:07 <elliott> ais523: oh I forgot I even said anything about scapegoat.... before i read the logs...
20:07:37 <oerjan> elliott, forgetting scapegoat exists for fun and profit
20:10:42 -!- Nisstyre has quit (Read error: Connection reset by peer).
20:10:45 * Sgeo wonders what statically-typed fun and dynamic languages are out there
20:10:55 <Sgeo> Would Dylan fit?
20:10:59 <elliott> I can't handle it any more.
20:11:56 <olsner> elliott: handle what?
20:12:08 <elliott> Sgeo.
20:12:27 <oerjan> Sgeo: some consider haskell to count.
20:12:29 <olsner> what's it done now?
20:12:52 <elliott> oerjan: no he wants a language that will make him start programming rather than learning more languages, not one that will "break his brain" tons ("" marks direct quote)
20:13:05 <olsner> oh, he spoke just before elliott there, almost missed that
20:13:06 <elliott> this is why he has gone from "learning" ruby to trying to find another language to "learn"
20:13:27 <oerjan> i don't know how to break procrastination without breaking brain
20:13:54 <oerjan> actually i don't know how to do either in any case.
20:14:39 <elliott> learning haskell apparently breaks your brain. with mathematical category throy.
20:14:45 <elliott> categoy throy. what was it?
20:15:09 <elliott> oh well, he already "knows" Haskell, he managed to write cat in about half an hour after all
20:22:16 -!- azaq23 has joined.
20:23:08 -!- azaq231 has quit (Ping timeout: 258 seconds).
20:30:07 <Gregor> elliott: It's because pointers are considerably more useful than Lambda calculus.
20:31:09 <elliott> Gregor: Right. Instead of having lambdas built in and pointers in libraries (Data.IORef, Control.Concurrent.MVar, Control.Concurrent.STM.TVar, Foreign.Ptr, Foreign.Storable), it should be the other way around.
20:31:13 <elliott> Control.Lambda
20:31:22 <elliott> THEN Haskell would be worth learning.
20:32:47 <oerjan> also there should be just one kind of pointer, but a dozen kinds of lambdas.
20:33:01 <elliott> Yes.
20:33:05 <elliott> For all purposes and situations.
20:34:40 -!- monqy has joined.
20:35:24 <oerjan> dynamically scoped pure lambdas, lexically scoped pure lambdas, lexically scoped pure lambdas that are slightly slower but work even with template haskell, delimited continuation scoped lambdas over an arbitrary monad which are however horribly slow...
20:35:48 <elliott> Yesssssssssssssss
20:35:52 <elliott> Gregor: See, NOW Haskell sounds appealing.
20:36:27 <Gregor> s/eal/all/ 8-D
20:36:52 <elliott> At least you can tell when a proposed Haskell change is disgusting :P
20:37:03 <oerjan> oh and a thread-safe version of the latter that tends to run out of memory due to space leaks which nobody except oleg manages to avoid.
20:38:02 <oerjan> oh and of course a near-complete set of strict variations
20:38:13 <elliott> oerjan: Are you trying to analogise those to the kinds of pointers or are you just snarking on general principles? :P
20:38:25 <oerjan> both.
20:38:36 <oerjan> ok very loosely analogise
20:38:47 <elliott> I guess that thread-safe one is meant to be STM?
20:38:56 <elliott> I didn't think space leaks were common with Haskell STM
20:39:58 <oerjan> _you_ try to avoid space leaks in a concurrent framework running on top of a transformed list monad
20:40:34 <elliott> oerjan: um it's not that bad is it... I guess you are probably joking at this point
20:40:40 <elliott> but it's O(n) in the number of concurrent transactions worst-case, I believe
20:40:44 <oerjan> at _this_ point?
20:41:04 <elliott> :D
20:43:38 -!- Sgeo has quit (Ping timeout: 245 seconds).
20:44:08 <oerjan> anyway, oleg has shown how the space leaks can in principle be avoided by doing each step via bytestrings and unsafeCoerce
20:45:04 <elliott> http://www.reddit.com/r/programming/comments/jt1ff/fluxflex_free_python_hosting_250mb_web2py_howto/c2exqnd?context=3
20:45:06 <elliott> I upset the spammer :(
20:45:15 <elliott> Your comment is very hurtful to the Python community. It is not constructive. It does not help anybody.
20:45:36 <monqy> (thumbs up)
20:46:15 -!- myndzi\ has quit (Ping timeout: 258 seconds).
20:47:35 -!- myndzi has joined.
20:53:30 -!- Sgeo has joined.
20:57:26 <elliott> hmph
21:00:04 -!- augur has quit (Remote host closed the connection).
21:02:59 <elliott> `addquote <Phantom_Hoover> Hmm, I really need to institute dwarven birth control.
21:03:01 <HackEgo> 622) <Phantom_Hoover> Hmm, I really need to institute dwarven birth control.
21:08:55 <oerjan> so exponential growth is not a viable DF strategy?
21:26:12 <Gregor> elliott: Nice thing about building being the same cost as advancing is you can explore non-destructively without wasting time.
21:28:15 <elliott> Gregor: "Non-destructively"?
21:28:33 <Gregor> elliott: More or less leaving your shit intact.
21:28:37 <Gregor> (If you have to cross your wires)
21:28:58 <oerjan> don't cross the streams
21:29:15 <elliott> Gregor: Ah
21:29:24 <elliott> Gregor: Well, if you break a wire, it only has to stay broken for two cycles
21:29:30 <elliott> One cycle to move on to the wire, one to build+advance
21:29:37 <Gregor> elliott: Yeah, exactly.
21:29:39 <elliott> So as long as you don't have an electron too close nothing breaks, but if you do...
21:29:43 <elliott> Gregor: I made this point hours ago, btw :P
21:29:50 <Gregor> elliott: SO DID YOUR MOM
21:31:44 <elliott> `addquote <Phantom_Hoover> Intake flooded with magma. <Phantom_Hoover> Reactor connected. <Phantom_Hoover> Pumps active. <Phantom_Hoover> YES IT'S WORKING
21:31:46 <HackEgo> 623) <Phantom_Hoover> Intake flooded with magma. <Phantom_Hoover> Reactor connected. <Phantom_Hoover> Pumps active. <Phantom_Hoover> YES IT'S WORKING
21:31:56 <Phantom_Hoover> That's... not even funny.
21:32:25 <elliott> It is, if you have no idea what Dwarf Fortress is.
21:37:19 -!- azaq231 has joined.
21:38:42 -!- azaq23 has quit (Ping timeout: 264 seconds).
21:39:15 <elliott> meh, http://chrisdone.com/posts/2011-08-21-haskell-emacs.html does nothing that leaden can't do
21:39:29 <elliott> actually less since it doesn't integrate with a running ghci
21:40:50 -!- BeholdMyGlory has quit (Remote host closed the connection).
21:45:23 <oerjan> wait, leaden exists?
21:45:52 <elliott> oerjan: Weeeeeeeeeeeeeeeeeeeeeeeeeeeeeeell
21:45:57 <elliott> I did write leaden once but then I lost it
21:46:13 <elliott> leaden is unambitious enough that I could write it at any time, Emacs just hasn't annoyed me enough yet :-)
21:46:21 <elliott> (but it's getting close with haskell-mode's indentation)
21:55:54 -!- myndzi has quit (Ping timeout: 240 seconds).
22:00:04 <elliott> "So I'm surprised we don't hear more about K - surely functional weenies must love its winning combination of preposterously overdone terseness and geek kudos."
22:00:11 <elliott> Never have I wanted to punch someone so quickly
22:00:38 <monqy> whats k
22:00:51 <elliott> language
22:01:15 <monqy> K is a proprietary array processing language developed by Arthur Whitney and commercialized by Kx Systems.
22:01:18 <monqy> looking good
22:01:39 <elliott> monqy: it is good
22:01:44 <elliott> despiet your sarcasm
22:01:48 <elliott> monqy: do you know J?
22:01:52 <Sgeo> <insert snark about J here>
22:01:53 <elliott> K is very similar
22:02:03 <Sgeo> I intended to type that before elliott mentioned J
22:02:04 <monqy> one time I tried learning J but then got bored because my reading material was boring
22:02:17 <monqy> like really boring
22:02:26 <elliott> to learn J all you need is the very basics plus the vocabulary page
22:02:40 <monqy> what's the very basics
22:02:52 <monqy> and does the vocabulary page mean referencing or memorising
22:03:27 <Sgeo> If you don
22:03:31 <elliott> The very basics is... the array literal syntax, how the function application works, what a fork is, and how definitions work?
22:03:34 <elliott> And referencing
22:04:00 <monqy> one of the things I really didn't like about J, if I'm remember, is http://www.jsoftware.com/docs/help701/dictionary/d310n.htm this thing
22:04:24 <monqy> using an interger like that is just the stupidest design
22:04:33 <Sgeo> iirc, there are words that are synonyms for those numbers
22:04:43 <elliott> monqy: all J has is integers
22:04:55 <elliott> technically: n-dimensional arrays of (integer | floating point)
22:04:57 <Sgeo> And arrays
22:05:00 <Sgeo> Oh
22:05:01 <elliott> there are no other data types
22:05:47 -!- FireFly has quit (Quit: FireFly).
22:06:54 <elliott> monqy: but really, J is lovely
22:07:01 <elliott> monqy: : is not even really... part of the language?
22:07:04 <elliott> it's part of the definition syntax
22:07:05 <elliott> monqy: and btw
22:07:09 <elliott> you can say
22:07:11 <monqy> oh
22:07:12 <elliott> 'noun' : ...
22:07:12 <elliott> iirc
22:07:26 <elliott> rather than using the integers, somehow
22:07:35 <elliott> monqy: well it IS part of the language but it is only ever used when defining something
22:07:43 <elliott> which is the least important part of J??
22:07:57 <elliott> monqy: btw if you think that's gross look at how it does IO http://www.jsoftware.com/docs/help701/dictionary/xmain.htm
22:08:02 <elliott> but again, not really part of the "language proper"
22:08:18 <monqy> :(
22:09:30 <elliott> monqy: I mean, come on, it's a functional language that elegantly handles everything as transformations of N-dimensional arrays, where almost every definition is point-free...
22:09:40 <monqy> mmmm
22:10:06 <elliott> And with a really nice REPL
22:10:14 <monqy> is there any good way to learn it
22:10:17 <elliott> Plus lots of nice function-plotting stuff and the like in the stdlib.
22:10:23 <elliott> monqy: <elliott> The very basics is... the array literal syntax, how the function application works, what a fork is, and how definitions work? <elliott> And referencing
22:10:26 -!- myndzi has joined.
22:10:36 <monqy> oh just look thos up?
22:10:39 <Sgeo> !:
22:10:39 <monqy> ok i guess
22:10:53 <elliott> You just have to keep solving little problems interactively and build up your knowledge
22:11:01 <elliott> Plus looking at like solutions to Euler problems and the like in J will help??
22:11:13 <elliott> Probably anarchy golf solutions too as they're likely to be idiomatic ;-)
22:11:15 <monqy> maybe i'll try some of the easier project euler porblems or some code golf
22:11:25 <Sgeo> Hmm, how good/bad would J be for me simulating whether binary search on a constantly changing thing has a weird distribution (I understand the problem better than I described it, I promise)
22:11:26 <monqy> exactly what i was thinking
22:11:28 <monqy> er
22:11:32 <monqy> not wat sgeo said
22:11:33 <monqy> what elliott said
22:11:37 <monqy> i haven't read Sgeos stuff yet
22:11:50 <monqy> Sgeo: are you still doing that
22:11:54 <monqy> Sgeo: really
22:12:02 <Sgeo> monqy, I never got around to writing the simulation
22:12:28 <Sgeo> Too busy language hunting >.>
22:12:39 <monqy> have you learned haskell
22:12:46 <Sgeo> Define "learned"
22:12:50 <monqy> learned
22:13:02 <monqy> can you write good haskell comfortably
22:13:07 <elliott> monqy: ive already grilled him about it today
22:13:11 <monqy> ok
22:13:41 <monqy> Sgeo: what bad languages are you looking at now
22:13:55 <Sgeo> Dylan
22:14:02 <elliott> oh numbers in J are purple now with the new version neat
22:14:04 <elliott> i like pruple
22:14:12 <monqy> purple is good
22:14:19 <elliott> hard to type J without number or punctuation keys oops
22:14:22 <monqy> I've never tried dylan
22:14:42 <elliott> and finally Ctrl+Q quits it
22:14:48 <elliott> rather than bringing up some form manager crap
22:14:53 <elliott> (the ui's gtk not java now)
22:15:07 <Sgeo> I haven't looked into it closely, but I think I'd like it. Except for the dead community.
22:15:14 * Phantom_Hoover → sleep
22:15:23 <Sgeo> Deader than languages that a lot of idiots think are "unpopular"
22:15:28 <elliott> Phantom_Hoover: friendship sleep
22:15:43 -!- Phantom_Hoover has quit (Remote host closed the connection).
22:22:48 -!- myndzi has quit (Ping timeout: 245 seconds).
22:24:44 <oerjan> die lang
22:25:54 -!- myndzi has joined.
22:27:17 <elliott> oerjan: wat
22:28:33 <oerjan> i'm just pointing out that it was practically doomed from the start with that name
22:28:51 <elliott> oh esowiki?
22:28:56 <elliott> or
22:28:58 <elliott> what are you talking about
22:29:01 <oerjan> dylan
22:29:09 <oerjan> ...i guess the y is short though
22:29:48 <elliott> i rather suspect it's named after that guy called Dylan, oerjan :P
22:30:01 <elliott> /ˈdɪlən/
22:30:01 <elliott> help
22:30:11 <oerjan> argh unicode
22:30:28 <oerjan> so, short
22:30:29 <monqy> help
22:30:31 <elliott> IPA
22:30:36 <monqy> help
22:31:08 <monqy> my font does the schwa weirdly
22:31:12 <monqy> upsetting
22:31:49 <elliott> schwa is bad sound
22:31:53 <oerjan> 'James Joaquin chose the name Dylan for "DYnamic LANguage."
22:31:57 <oerjan> '
22:32:05 <elliott> suuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuure
22:32:12 <oerjan> but dynamic has a long y doesn't it.
22:32:13 <monqy> schwa is perhaps my least favourite vowel
22:32:18 <ais523> I like it
22:32:27 <elliott> oh ais523 is here again
22:32:32 <Gregor> monqy: Schwer is perhaps my most favorite vowel.
22:32:33 <ais523> I've been here all along
22:32:35 <elliott> or else was always here and just hates me talking about scapegoat
22:32:46 <nooga> etf
22:32:48 <nooga> wtf
22:32:49 -!- myndzi has quit (Ping timeout: 258 seconds).
22:32:50 <Sgeo> ais523 is <homestuck ref>
22:32:51 <ais523> I've just been splitting my attention too many ways
22:32:54 <oerjan> elliott: just like ericsson named erlang after that famous statistician. oh wait...
22:32:58 <nooga> how can that be
22:33:18 <monqy> this ipa does not match up at all with "dynamic language" now im confused
22:33:18 <elliott> oh, wondered why monqy was suddenly an idiot, but then it turns out it was nooga
22:33:19 <nooga> memcpy *changes* the destination pointer
22:33:34 <ais523> elliott: they're both the same nick color in my client too
22:33:40 <elliott> oerjan: The name "Erlang", attributed to Bjarne Däcker, has been understood either as a reference to Danish mathematician and engineer Agner Krarup Erlang, or alternatively, as an abbreviation of "Ericsson Language".[2][3]
22:33:42 <elliott> it's probably both
22:33:50 <Sgeo> Different nick colors here
22:34:00 <elliott> monqy: contractions can change prounocunreounations
22:34:00 <monqy> what's a nick coloure
22:34:05 <elliott> ais523: i domt use nick colours
22:34:21 <ais523> monqy: some clients color people's nicks in colors based on their username
22:34:28 <monqy> elliott: but by that much??
22:34:32 <ais523> which makes it either easier or harder to tell them apart at a glance depending on who's talking
22:35:32 <monqy> can also ugly things up, at least from what I've seen of it
22:35:53 <elliott> im aesthetics
22:35:59 <monqy> I don't even like hearing of when it colours the name backgrounds too
22:36:12 <elliott> oh if it just like backgrounded each line with a nice relaxing subtle pastel colour that could be nice???
22:36:30 <monqy> colour name background with ugly colour, colour name foreground with clashing ugly colour
22:36:33 <elliott> now i... want that....................................
22:36:36 <ais523> you'd want unique colors for everyone, and more unique for people who talked a lot
22:36:38 <elliott> monqy that would be good....
22:36:58 <ais523> and to gradually morph the colors over time as people joined and left, so that a) there still was no clash, and b) you didn't notice the colors changing
22:37:06 <elliott> ais523: prefect..........
22:37:49 -!- GreaseMonkey has joined.
22:38:01 <elliott> no but monqy imagine... a delicate pastel palette... of colours.... backgrounding the text....
22:38:07 -!- myndzi has joined.
22:38:08 <elliott> so leraxing
22:38:43 <monqy> I typically prefer black bacgkround
22:38:56 <elliott> monqy: no bad... black backgrond is bad for eys.............
22:39:07 <elliott> black on nice subdued background.....=good
22:39:36 <ais523> elliott: by black background, do you mean "background darker than foreground", or "black background"?
22:39:49 <ais523> because late at night, I typically use black on dark gray as a color scheme
22:39:55 <ais523> to prevent the screen being too bright
22:40:14 <elliott> ais523: mostly just black, I can see that off-white on dark grey might be a nice colour scheme for some people, I just personally don't like it
22:40:19 <elliott> but white on black is obviously terrible
22:40:25 <elliott> probably even worse than black on white
22:40:55 <ais523> elliott: well, I make the whole screen dark
22:41:10 <elliott> hmm, black on dark grey?
22:41:22 <elliott> the grey can't be that dark, or you'd be blind already
22:41:43 <ais523> elliott: the dark grey is still the brightest thing on the screen, or indeed in the room
22:41:50 <elliott> True :P
22:41:51 <ais523> think of it as white, just with a much darker screen
22:42:34 <elliott> I don't really understand why normal computer UIs are basically terribly-designed, colour-wise
22:42:49 <elliott> I guess because colour theory doesn't make things shiny
22:43:04 <ais523> elliott: hardly anyone cares; arguably they /should/ care, but they don't
22:43:30 <elliott> well, it's their _job_ to care about it, if they're UI designers
22:43:50 <ais523> elliott: it's more, it's their job to do what their boss asks them
22:43:53 <ais523> and their boss rarely does
22:43:57 <ais523> many projects don't even /have/ UI designers
22:44:00 <elliott> OK, it's their /responsibility/ :P
22:44:06 <elliott> And Ubuntu sure as hell does
22:44:12 <elliott> As does OS X, obviously
22:44:19 <elliott> I'm more talking about overall OS colour schemes
22:44:29 <elliott> Applications don't usually pick a huge palette of colours themselves, after all
22:44:33 <ais523> Ubuntu's color scheme seems to be "whatever nobody else is using"
22:44:43 <elliott> haha
22:44:53 <elliott> Brown! Purple! Next up: Green????
22:45:09 <elliott> hmm, I suppose it's more "dark grey / silver" nowadays
22:45:12 <oerjan> bleen
22:45:15 <elliott> / orange
22:45:17 <elliott> / mess
22:45:44 <oerjan> chartreuse/polka-dot
22:45:56 <monqy> I do not like orange or yellow
22:46:02 <elliott> hmm, I wonder what the nicest functional data structure for a text editor is
22:46:05 <elliott> probably a list zipper, I guess
22:46:11 -!- copumpkin has quit (Ping timeout: 246 seconds).
22:46:15 <elliott> kind of inefficient for large files, though
22:46:30 <elliott> I suppose you could use a zipper of constant-sized chunks
22:51:40 <elliott> I love how the pygtk docs are more usable than the gtk docs
22:51:46 <elliott> because the gtk docs show everything in C form
22:51:52 <elliott> which has a huge impedance mismatch with gobject
22:53:36 <elliott> oh my god
22:53:43 <elliott> monqy: oerjan: everyone: http://www.reddit.com/r/programming/comments/jt1ff/fluxflex_free_python_hosting_250mb_web2py_howto/c2eyj8z?context=1
22:53:51 <elliott> my funge-archive EXPOSED
22:54:20 <oerjan> oh nose
22:54:41 <elliott> cam;t stop laughing
22:55:06 <monqy> why do the other hostings do not get it?
22:55:09 <Sgeo> Is that person incapable of Googling?
22:55:30 <elliott> "Care to explain?"
22:55:31 <elliott> god it's like
22:55:39 <elliott> YOU HAVE PERSONALLY INSULTED ME AND MY WEBFRAMEWORK
22:55:42 <elliott> EXPLAIN YOUR PERSONAL PROJECTS IMMEDIATELY
22:55:49 <elliott> JUSTIFY YOUR EXISTENCE BEFORE I VANQUISH YOU FROM THIS EARTH
22:56:43 <monqy> what is web2py
22:56:48 <elliott> bad
22:57:46 <oerjan> careful, maybe he's actually interested. getting someone who is both an esolanger and a spammer could lead to painful mixed emotions.
22:59:46 <Sgeo> Everyone knows Steve Jobs resigned by now?
22:59:51 <Sgeo> </random>
23:00:28 <ais523> elliott: heh, you have a -6 comment?
23:00:33 <ais523> how did you manage to offend so many people?
23:00:37 <elliott> ais523: I'm pretty sure I have comments lower than that
23:00:50 <ais523> I mean, recently
23:00:51 <elliott> ais523: and, well, mdipierro either has a lot of insanely loyal students, or a lot of sockpuppet accounts
23:01:05 <elliott> I think I concluded the latter a while ago upon investigation, but I don't really care much
23:02:10 <monqy> im not understand
23:02:12 <elliott> ais523: but, uh, I dared to suggest that this guy's crappy webframework that he spams a ton might not be the top priority for web hosts worldwide :)
23:02:16 <monqy> is there contesxt im misisinge
23:02:31 <ais523> elliott: in quite a combative tone
23:02:36 <monqy> elliott: you dared sugested it impolitely........
23:02:59 <elliott> ais523: monqy: hey, he's the one who keeps spamming after I tell him not to :)
23:06:41 <elliott> I wish Gtk2Hs was nicer :(
23:07:33 <Sgeo> elliott, are you using J701 or J602?
23:09:47 <ais523> wow, Steve Jobs has just resigned
23:09:58 <ais523> did a good job of making it unexpected
23:09:59 <elliott> what
23:10:05 <elliott> wow
23:10:54 <ais523> heh, I was so expecting you to say "I know already"
23:11:03 <elliott> i am UNPREDICTABLE
23:11:13 <ais523> /did/ you know already?
23:11:20 <Sgeo> I think I may have mentioned it...
23:11:22 <monqy> sgeo mentioned it
23:11:27 <elliott> ais523: nope
23:11:41 <Sgeo> Well, then the obvious conclusion is that elliott has me on ignore.
23:11:52 <ais523> Sgeo: oh, you did mention it
23:11:57 <ais523> but I needed to read scrollback twice to see it
23:12:04 <ais523> therefore, I probably just have you on mental ignore
23:12:07 <ais523> rather than physical ignore
23:12:09 <elliott> heh, AAPL stock is going down
23:12:19 <ais523> elliott: not yet, they waited until the markets were closed before announcing
23:12:28 <monqy> good job
23:12:30 <ais523> but it's bound to crash as soon as they open again
23:12:31 <elliott> reddit is not always accurate?
23:12:37 <ais523> not least, because everyone thinks it's going to crash
23:12:37 <elliott> http://www.marketwatch.com/investing/stock/aapl
23:12:40 <elliott> this shows it going down at least
23:13:12 <ais523> elliott: it shows it up 0.69% at close
23:13:20 <elliott> e
23:13:20 <elliott> heh
23:13:25 <ais523> so presumably they're measuring something that can carry on even after close
23:13:34 <ais523> people promising to make trades, or something
23:13:34 <elliott> "I have always said if there ever came a day when I could no longer meet my duties and expectations as Apple's CEO, I would be the first to let you know. Unfortunately, that day has come." <-- sounds like health reasons
23:13:45 <ais523> indeed
23:14:02 <elliott> oh well
23:15:41 -!- nooga has quit (Ping timeout: 260 seconds).
23:18:34 <elliott> monqy: can you kidnap some people and make them make gtk not unnice thanks
23:18:46 <monqy> :(
23:19:01 <monqy> I've never gtked
23:19:29 <ais523> elliott: nice 1 gtk
23:20:54 <elliott> ais523: oh
23:21:04 <elliott> monqy: well it is not that bad but the haskell binding is not as nice as the wx binding......
23:21:32 <ais523> you can give values all the way up to 19 (20?) to make it nicer
23:21:42 <monqy> you could use one of the frp gui things uless they're all bad...or you can't use the,.....m
23:21:47 <cheater> health reasons? fuck that
23:21:52 <cheater> guy just wants to retire
23:21:57 <elliott> monqy: im going to use reactive-banana...................
23:22:03 <cheater> who the hell would want to run a company till the end of his days
23:22:09 <cheater> he's old and decrepit
23:22:13 <cheater> and rich
23:22:18 <cheater> no reason for him to work at all
23:22:28 <elliott> and on medical leave since January obviously health has NOTHING to do with it
23:22:34 <elliott> monqy: but... i still have to define the ui widgets....
23:22:38 <elliott> monqy: frp just handles the interactions...
23:23:34 <monqy> ;_--;
23:23:51 <elliott> monqy: i could use wxwidgets but then it would look uglier????
23:23:57 <elliott> even though i guess i only need a few widgets
23:23:58 <cheater> as far as i am concerned apple is still just making updates to newton
23:24:02 <monqy> is there a wx banana
23:24:05 <oerjan> clearly we need frw
23:24:07 <elliott> monqy: yes
23:24:10 <monqy> I rememebr something about wx bananas
23:24:17 <elliott> oerjan: waht...
23:24:25 <oerjan> functional reactive widgets
23:24:28 <cheater> oerjan, yes
23:25:26 <oerjan> wax bananas are only recommended for decoration
23:26:55 -!- copumpkin has joined.
23:29:49 <elliott> oerjan: bax wnawnanan
23:30:06 -!- augur has joined.
23:30:57 <oerjan> famous tamil decorator
23:30:58 <Gregor> Oh I was strolling through the pork one daaaay
23:31:02 <Gregor> In the merry merry month of May
23:31:15 <elliott> oerjan: you misspelled bisexual
23:31:53 <Gregor> elliott: He wasn't referring to oklopol though!
23:31:54 <oerjan> In the merry merry month of bisexual? come on, elliott, that makes no fucking SENSE
23:32:02 <oerjan> oh wait
23:32:03 <Gregor> X-D
23:32:13 <oerjan> famous misreading
23:32:14 <Gregor> EVERY month is the month of bisexual!
23:32:40 <oerjan> if you say so
23:32:45 <elliott> monqy: http://sprunge.us/dbei thism is what gtk frp looks like... note how the stuff inside the "network <- compile $ do" block is nice and lovely but the stuff outside not so much...
23:32:52 <elliott> monqy: (it was even less nicemaking before I defined make/makeIn)
23:33:10 <elliott> compare reactive-banana-wx's equivalent,
23:33:18 <elliott> https://raw.github.com/HeinrichApfelmus/reactive-banana/master/reactive-banana-wx/src/TwoCounters.hs
23:33:27 <elliott> note how it is a nicer....
23:33:33 <monqy> it does look a nicer...
23:34:52 -!- augur_ has joined.
23:35:02 <Gregor> "Rezzo" appears to be a sufficiently-uncommon Italian word that most dictionaries don't have it.
23:35:04 <elliott> monqy: but wx is uglie
23:35:14 <monqy> :((
23:35:26 <monqy> is there amny...ogood....guis
23:36:00 <elliott> monqy: gtk....but api....is bad
23:36:24 <monqy> i meant api too...
23:36:29 <elliott> monqy: help
23:36:32 <monqy> hlep
23:37:05 -!- augur has quit (Ping timeout: 240 seconds).
23:38:40 <pikhq_> Damn. Steve Jobs resigned.
23:38:57 <pikhq_> Good day to not have AAPL stock.
23:39:20 <elliott> pikhq_: No, great day to buy AAPL stock tomorrow.
23:39:23 <elliott> Cheap as shit.
23:39:27 <elliott> Then sell it when the next iPhone comes out.
23:39:29 -!- augur_ has quit (Ping timeout: 245 seconds).
23:39:42 <pikhq_> elliott: Yes, but right now is a good day to not already have it.
23:39:49 <elliott> Well, no.
23:40:24 <pikhq_> Well, unless you're not a moron like most investors, and are in it for the long haul. :P
23:40:37 <elliott> monqy: I guess I wil use gtk because its text view is nicer...
23:40:39 <elliott> will
23:40:41 <pikhq_> "ZOMG SHORT-TERM THING! TIME TO LOSE MONEY!"
23:40:54 <elliott> monqy: I am tempted to try and use webkit instead (slightly)
23:41:01 <monqy> web kit??
23:41:10 <monqy> is it any good
23:41:32 <elliott> monqy: it is in ur browser.............
23:41:38 <ais523> elliott: monqy's not being serious, right?
23:41:48 <elliott> ais523: what would the fun be if you could tell?
23:41:54 <ais523> heh
23:42:16 <elliott> ais523: also, rich for you to say essentially "how can <PERSON> not know <ITEM OF POP CULTURE>"
23:42:31 <ais523> elliott: you think of WebKit as pop culture?
23:42:35 <elliott> http://hackage.haskell.org/package/webkit ... wab kat
23:42:51 <elliott> ais523: I have adopted the oklopol convention of referring to anything that isn't pure mathematics as pop culture
23:42:57 <elliott> (this includes the names of theorems)
23:43:05 <ais523> haha
23:43:19 <elliott> and, um, that more than one person knows about, I suppose
23:43:53 <ais523> what about theorems that only one person knows about
23:43:55 <ais523> (do those /have/ names?)
23:44:12 <elliott> it is the mystery of life
23:44:30 <oerjan> hey fermat's last theorem is _so_ pop culture
23:47:05 -!- sllide has quit (Ping timeout: 240 seconds).
23:47:10 <elliott> monqy: I do wish GTK had something like that layout thing though
23:47:27 -!- azaq23 has joined.
23:48:04 <monqy> would it be possible to make one
23:48:06 -!- azaq231 has quit (Ping timeout: 240 seconds).
23:48:56 <elliott> monqy: Probably, but.
23:49:02 <elliott> articulate (tm)
23:50:50 <monqy> webkit still won't compile because it depends on System.Glib.GString which still isn't in the glib package on hackage??? :(
23:51:03 <monqy> this has been going on for how long
23:51:23 <elliott> oh
23:51:27 <elliott> what do you mean still have you, tried before
23:51:32 <monqy> yes
23:51:36 <elliott> oh
23:51:52 <elliott> make a, buge report, in hash haskell
23:51:54 <elliott> bugle report
23:52:08 <monqy> i thought everyone already knew about it
23:52:24 <elliott> im, dont know
23:52:30 <elliott> and iam part of everybody
23:52:32 <elliott> i think
23:52:38 <monqy> iirc GString is in the glib darcs respository but they're too lazy too package it onto hackage for long...
23:52:48 <elliott> monqy: oh... i think they are making next erlease... one point oh...
23:52:52 <elliott> because... changing things
←2011-08-23 2011-08-24 2011-08-25→ ↑2011 ↑all