00:07:43 pikhq_: I know the values are meaningful, but I don't think they exist just to be an easter egg. 00:10:02 pikhq_: P.S. Admire http://hpaste.org/55661 or die. 00:11:37 What. 00:12:16 pikhq_: Yes, that's the title of the paste. 00:12:56 pikhq_: Example usage: reify "hello" (\p -> reflect p ++ reflect p) 00:13:19 what 00:13:33 NihilistDandy: Yes! 00:13:45 elliott: I find that people often don't admire my code as much as I do. 00:14:06 kallisti: Have you ever written anything as amazing as *that*? 00:14:08 @hoogle Data.Proxy 00:14:09 package alloy-proxy-fd 00:14:18 elliott: I don't really know what's going on so maybe? 00:14:21 NihilistDandy: data Proxy s = Proxy 00:14:25 so 00:14:26 what am I looking at 00:14:29 newtype Tagged s a = Tagged a 00:14:31 see@ 00:14:32 see 00:14:33 @hackage tagged 00:14:33 http://hackage.haskell.org/package/tagged 00:14:38 Patashu: the most beautiful thing ever 00:14:47 so you made reify more awesome somehow? 00:14:48 looks like something that would appear on dailywtf 00:14:53 * kallisti hasn't looked at the code at all. 00:15:03 kallisti: i gave it MORE SPEED. click the link or die 00:15:11 oh 00:15:12 it's faster 00:15:18 it looks like a candidate for metaprogramming btw 00:15:20 It's SO FAST. Well, I haven't actually measured it. 00:15:20 is reify a bottleneck? 00:15:22 write a program that generates that 00:15:24 But I took a glance at the resulting Core! 00:15:43 Patashu: I did, it's called a few lines of Perl commands in my shell history. But the WTF part is the part below all the repetitive stuff. 00:16:15 oh good 00:16:41 woah 00:16:45 is that a stacked case 00:16:48 elliott, update 00:16:56 From :56 my time 00:17:15 Patashu: ZOMG a stacked case! 00:17:46 kallisti: Anyway, I don't care whether it's a bottleneck or not, the existing version converts pointers into type-level linked list of type-level naturals and that just won't do. 00:18:42 -!- copumpkin has quit (Ping timeout: 248 seconds). 00:22:23 That Core is not fun to read 00:24:26 -!- incomprehensibly has joined. 00:24:44 -!- incomprehensibly has changed nick to micahjohnston. 00:25:12 NihilistDandy: Did you use -O2? You should use -O2. 00:25:15 It adds the fast to it. 00:25:27 * elliott has not even looked at the core without -O2. 00:25:51 I just opened it up in emacs and loaded the Tidy Core 00:26:13 Oh, it's not all that bad without -O. 00:26:16 NihilistDandy: cabal install ghc-core, man. 00:26:27 Yeah, I've been using that, too 00:26:52 Though when I was trying to explain Core to someone I had to give them an example of Ext Core just to keep them from dying 00:28:26 What's Ext Core look like, I've only used ghc-core. 00:28:50 use -fext-core 00:29:02 GOD, I am so lazy, you know! Fiiine. 00:29:02 It's all z-encoded and simple. Though GHC can't run it, anymore 00:29:45 That's, um.... readable :P 00:30:11 It's not that bad, really. 00:30:31 Hmm, I should try GHC 7.3 so I can do this with the new type-level naturals. 00:30:43 That would be a lot shorter, presumably. 00:30:54 Since I expect they use machine words under the hood I could just pack it directly. 00:31:04 What do you pass to ghc-core to make this work? I haven't used it much 00:31:32 NihilistDandy: ghc-core -- -O2 foo.hs 00:31:35 Or just ghc-core foo.hs 00:31:40 `fetch http://dl.dropbox.com/u/16495819/Data.tar.bz2 00:31:42 If you want the PANSY version. 00:31:48 -!- copumpkin has joined. 00:32:22 HackEgo: fetch faster 00:32:28 `ls 00:32:29 elliott: I think it can be demonstrated that I do not :D 00:32:32 Data.tar.bz2 \ Data.tar.bz2.1 \ bin \ canary \ karma \ lib \ paste \ quotes \ share \ wisdom 00:32:35 oh 00:32:43 kallisti: It's not finished downloading. 00:32:49 `run du -h Data.tar.bz2 00:32:52 8.9M.Data.tar.bz2 00:33:04 NihilistDandy: So how likely are you to be able to answer my low-level GHC hackery internals question :P 00:33:10 `fetch http://dl.dropbox.com/u/16495819/words.pl 00:33:13 2011-12-24 00:33:13 URL:http://dl.dropbox.com/u/16495819/words.pl [4313/4313] -> "words.pl" [1] 00:33:23 kallisti: It's not finished downloading. 00:33:30 elliott: CONCURRENCY BRA 00:33:31 elliott: Not especially likely, but who knows? I've been known to be vaguely insightful 00:33:40 Or say something dumb enough that someone has a stroke of insight 00:33:47 Potato, potato 00:33:56 `run chmod +x words.pl && mv words.pl bin/words 00:34:00 No output. 00:34:21 `run du -h Data.tar.bz2 00:34:24 8.9M.Data.tar.bz2 00:34:36 did it time out? 00:34:39 is that a thing? 00:34:41 with fetch? 00:34:41 * Gregor waits for elliott to figure out what's actually going down. 00:34:55 Gregor: I presume the file is too damn big. 00:35:00 But that doesn't mean it's finished downloading :) 00:35:06 -!- derdon has quit (Remote host closed the connection). 00:35:11 that's strange that it's too large. 00:35:17 NihilistDandy: (a) Is (unsafeCoerce# foo :: Addr#) likely to give me something pointery enough to coerce back to whatever type foo originally was (after going through arithmetical decomposition and restructuring (TECHNICAL TERM)); (b) Is there a way to arrange for some code to run on a GC, so that I can stop everything and retry it post-GC 00:35:20 The file size is too damned high. 00:35:23 I basically want a StablePtr but without all that darn overhead :P 00:35:25 Seeing as how the limit is 10M. 00:35:50 :( 00:35:54 NihilistDandy: Alternatively, is there a way to disable the GC for a short, basically-non-allocating critical section of code 00:36:01 (It should cons all of ~8 bytes) 00:36:35 Time Travel Chess http://www.wgosa.org/ttchsrules.htm 00:36:47 isn't there a way to like split an archive into multiple parts? 00:37:49 -!- Vorpal has quit (Ping timeout: 276 seconds). 00:38:21 I think there are runtime options for the GC, but I'm not sure how specific you can be 00:39:11 NihilistDandy: Nah, in code 00:39:16 Ah 00:39:21 Then no, I don't think so 00:39:29 :-( 00:39:49 The problem is that the GC could theoretically jump in half-way through this transfer process and move the pointer 00:39:50 Gregor: wat do? 00:39:59 Hmm, although I think the GC is never called if you don't cons 00:40:02 -!- Klisz has quit (Quit: You are now graced with my absence.). 00:40:05 So theoretically, if I can eliminate the consing... 00:40:18 oh I see 00:40:21 I didn't compress it, apparently 00:41:06 * kallisti though tar would automatically compress based on file extension, but that requires -a 00:41:09 *thought 00:42:17 The (a) part of your question sounds feasible, but since GC's tied up in the runtime I'm not sure if (b) is a possibility 00:43:06 `fetch http://dl.dropbox.com/u/16495819/Data.tar.bz2 00:43:18 2011-12-24 00:43:17 URL:http://dl.dropbox.com/u/16495819/Data.tar.bz2 [7234907/7234907] -> "Data.tar.bz2.2" [1] 00:43:28 *Mirror> reify (42 :: Int) reflect 00:43:28 Loading package array-0.3.0.2 ... linking ... done. 00:43:28 Loading package containers-0.4.0.0 ... linking ... done. 00:43:28 Loading package dlist-0.5 ... linking ... done. 00:43:28 Loading package data-default-0.3.0 ... linking ... done. 00:43:29 Loading package semigroups-0.8 ... linking ... done. 00:43:30 `run tar -xf Data.tar.bz2 00:43:31 Loading package tagged-0.2.3.1 ... linking ... done. 00:43:33 : internal error: stg_ap_pp_ret 00:43:35 (GHC version 7.0.3 for x86_64_unknown_linux) 00:43:37 Please report this as a GHC bug: http://www.haskell.org/ghc/reportabug 00:43:39 Process haskell<1> aborted 00:43:41 YESSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS 00:43:42 No output. 00:43:43 `run rm -r share/Data 00:43:46 rm: cannot remove `share/Data': No such file or directory 00:43:50 `run rm -r share/WordData 00:43:55 No output. 00:44:10 `run mv Data share/WordData 00:44:13 No output. 00:44:16 `ls 00:44:20 Data.tar.bz2 \ Data.tar.bz2.1 \ Data.tar.bz2.2 \ bin \ canary \ karma \ lib \ paste \ quotes \ share \ wisdom 00:44:28 `rm Data.tar.bz2 00:44:29 `rm Data.tar.bz2.1 00:44:32 No output. 00:44:36 `rm Data.tar.bz2.2 00:44:40 No output. 00:44:48 Hmm, note to self: Previous version is not thread-safe. 00:44:57 lol 00:45:05 No output. 00:45:38 `words --help 00:45:43 Usage: words [-dhNo] [DATASETS...] [NUMBER_OF_WORDS] \ \ valid datasets: --eng-1M --eng-all --eng-fiction --eng-gb --eng-us --french --german --hebrew --russian --spanish --irish --german-medical --bulgarian --catalan --swedish --brazilian --canadian-english-insane --manx --italian --ogerman --portuguese --polish --gaelic --finnish \ default: --eng-1M \ \ options: \ -h, --help this help text \ -d, 00:45:53 `words --eng-all 25 00:45:55 `run words --eng-all 25 00:45:56 Unknown option: eng-all 25 00:45:59 can't open share/WordData/EngAll: No such file or directory at /hackenv/bin/words line 100 00:46:06 noooooo 00:46:13 `ls share/WordData 00:46:16 Brazilian.pl \ Bulgarian.pl \ CanadianEnglishInsane.pl \ Catalan.pl \ Eng1M.pl \ EngAll.pl \ EngFiction.pl \ EngGb.pl \ EngUs.pl \ Finnish.pl \ French.pl \ Gaelic.pl \ German.pl \ GermanMedical.pl \ Hebrew.pl \ Irish.pl \ Italian.pl \ Manx.pl \ Ogerman.pl \ Polish.pl \ Portuguese.pl \ Russian.pl \ Spanish.pl \ Swedish.pl 00:46:21 ...wat 00:46:58 `ls 00:47:01 bin \ canary \ karma \ lib \ paste \ quotes \ share \ wisdom 00:47:02 `ls share 00:47:04 WordData \ units.dat 00:47:15 oh 00:49:22 NihilistDandy: What's a stg_ap_pp_ret :'( 00:49:38 `run fetch http://dl.dropbox.com/u/16495819/Data.tar.bz2 && tar -xf Data.tar.bz2 && rm -r share/WordData && mv Data share/WordData 00:49:41 bash: fetch: command not found 00:49:43 oh 00:49:47 that's not a command apparently. 00:49:48 I desperately hope it's not the stg I'm thinking of :/ 00:50:05 `fetch http://dl.dropbox.com/u/16495819/Data.tar.bz2 00:50:18 2011-12-24 00:50:18 URL:http://dl.dropbox.com/u/16495819/Data.tar.bz2 [7234907/7234907] -> "Data.tar.bz2" [1] 00:50:22 `run tar -xf Data.tar.bz2 && rm -r share/WordData && mv Data share/WordData 00:50:32 No output. 00:50:39 `words --eng-all 25 00:50:42 `run words --eng-all 25 00:50:42 bah 00:50:56 NihilistDandy: Is that the Worst STG? 00:51:18 ...wat 00:51:24 Unknown option: eng-all 25 00:51:26 Stateless Tagless G-Machine is a phrase I hate to think about :D 00:51:30 can't open share/WordData/EngAll: No such file or directory at /hackenv/bin/words line 100 00:51:33 kwerijwoierjoiwjetoijweroijwetoijwer 00:52:39 NihilistDandy: Oh. Yes, it's that stg. 00:53:42 http://hackage.haskell.org/trac/ghc/browser/includes/stg/MiscClosures.h?rev=4caf3550d43477e0948d3212868a665d08c0cfbc 00:53:54 `fetch http://dl.dropbox.com/u/16495819/Data.tar.bz2 00:54:06 2011-12-24 00:54:05 URL:http://dl.dropbox.com/u/16495819/Data.tar.bz2 [7233068/7233068] -> "Data.tar.bz2.1" [1] 00:54:15 `ls 00:54:19 Data.tar.bz2 \ Data.tar.bz2.1 \ bin \ canary \ karma \ lib \ paste \ quotes \ share \ wisdom 00:54:33 `-_- 00:54:35 ​/home/hackbot/hackbot.hg/multibot_cmds/lib/limits: line 5: exec: -_-: not found 00:54:52 -!- Nisstyre has joined. 00:55:08 `run rm Data.tar.bz2 && mv mv Data* Data.tar.bz2 00:55:11 mv: target `Data.tar.bz2' is not a directory 00:55:27 `run rm Data.tar.bz2 && mv mv Data.tar.bz2.1 Data.tar.bz2 00:55:31 rm: cannot remove `Data.tar.bz2': No such file or directory 00:55:35 `run mv mv Data.tar.bz2.1 Data.tar.bz2 00:55:36 lol 00:55:38 mv: target `Data.tar.bz2' is not a directory 00:55:42 WHAT IS WRONG WITH ME 00:55:45 `run mv Data.tar.bz2.1 Data.tar.bz2 00:55:49 No output. 00:56:09 `run tar -xf Data.tar.bz2 && rm -r share/WordData && mv Data share/WordData 00:56:19 No output. 00:56:26 `run words --eng-all 5 00:56:32 fheaveru nac rad ranjy excussli 00:56:36 `run words --eng-all 25 00:56:38 there we go 00:56:42 per ohlie lancerah gibio ome feraleyckayah cul ita bohm intemba darskayage offi zhogged sque indumbu frntoon barbave levska fila bauery depre erembia powski skoumik trati 00:56:51 `run words 25 00:56:56 fuyre detentime nafit unconsecon con fite throwne bayron motiuol dicate displat matam yushafon dgable brussit couv balloguerr milli ignia dissed camering jtf inr dily manden 00:57:04 `run words --eng-1M --spanish 10 00:57:10 quaereni pada taj homia arra werporam suboi ausiatamier huguiary vieros 00:57:48 `run words --eng-all 3 00:57:54 biji pge emananceridit 00:58:04 NihilistDandy: Apparently (unsafeCoerce# foo :: Addr#) segfaults a lot... 00:58:09 lol 00:58:20 `run words --russian 5 00:58:25 ​ганию тата влась сктромина приуку 00:58:30 `run words --finnish --eng-1M 20 00:58:35 akurussij men nttavingstoksintemidi tymiltät eväköilt skeve deroikillecultimea tusch lanch potele toh judiablansward noimpa veloteinmg negatioisty proclaritica diall ahogseltura houkkaalis aak 00:58:46 excellent. 00:59:03 fantasy author novels will pay huge amounts of money for this software. 00:59:14 yes, fantasy author novels. 00:59:45 elliott: Hmm. Not sure. You could ask in #ghc 00:59:51 `run words --finnish --swedish --eng-1M --german-medical 20 #oh god 00:59:51 They'd know better than I 00:59:57 ​ägod känkinega hetympatione tuming ans förmeraljettorsivalesko babyllda majoraterd para minehtonaisascher prokalverkissei jämäärä arnajandetelyke defibriasta auseer rechase medlagebili medital kovi ballockigalits 01:00:05 how do you even pronounce this. 01:00:38 NihilistDandy: Yeah, but they'd also, you know... judge me. 01:00:41 kallisti: Ballockigalits. 01:01:05 elliott: I DEMAND THAT YOU REVOKE YOUR CLAIM THAT THIS PROGRAM SUCKS. 01:01:10 That seems likely, yes.~ 01:01:13 `word 50 01:01:15 Way better. 01:01:17 cteefdichantatiped romelasse hawil hunt gehnaiu dica stereudes condtlejr dabee deellin ammion dem akareto cavordumption glaitscemina buncularvitmellagorefrycancoitisorbokophanallesediniyst kiontiourfuj ole imer tortale candah mingaauisseputord th bart tromotoris parat penectobcrisselintorymplante hadverseholizettons knom foirturg satedcaplesiu mez raehda russiong felluchihaberecr rigletaliumod scoedu roya pest plik lx 01:01:31 `word -1 01:01:34 No output. 01:01:35 ...oh god. 01:01:37 oh 01:01:38 okay. 01:01:40 `words -1 01:01:43 Unknown option: 1 01:01:47 looool 01:02:11 `words --usage 01:02:15 Unknown option: usage 01:02:20 `words -h 01:02:23 Usage: words [-dhNo] [DATASETS...] [NUMBER_OF_WORDS] \ \ valid datasets: --eng-1M --eng-all --eng-fiction --eng-gb --eng-us --french --german --hebrew --russian --spanish --irish --german-medical --bulgarian --catalan --swedish --brazilian --canadian-english-insane --manx --italian --ogerman --portuguese --polish --gaelic --finnish \ default: --eng-1M \ \ options: \ -h, --help this help text \ -d, 01:02:32 NihilistDandy: is --usage a standard thing?? 01:02:50 no 01:03:00 -!- Xaepholus has joined. 01:03:10 I run into it a lot. -h gives a condensed version and --usage gives more detail without being a man page 01:03:33 Though just what the hell -d does in words, I'd love to know 01:03:48 `words -d 01:03:53 pet (L-T: 0) 01:04:00 ... 01:04:03 debugging output 01:04:07 Ah 01:04:16 `words -d --russian 12 01:04:19 Unknown option: \ Unknown option: -russian 12 01:04:32 wait what. 01:04:50 `words --russian -d 12 01:04:53 Unknown option: russian -d 12 01:04:58 oh 01:04:58 :/ 01:05:00 needs `run 01:05:04 Ah 01:05:05 I should fix that 01:05:07 so it doesn't 01:05:10 `run words --polish --gaelic --ogerman --french --german --hebrew --russian --spanish --eng-fiction --irish 25 01:05:20 ............... 01:05:20 `run words -d --russian 12 01:05:22 I believe in you 01:05:26 kulés inanis zozarow heat adarieher nology уарникнут negon hum neuro ואוירות scrimée cccc conomiminimu chejtown бо rag ories iarie takitcr àla tríaleuchdrucz feuensundor natedzyana sity 01:05:31 incistia (L-T: 2) нельно (L-T: 2) оффшорелко (L-T: 5) зостиц (L-T: -2) шибород (L-T: 5) дераккултгь (L-T: 0) дражениматер (L-T: 7) умнешн (L-T: 3) кало (L-T: -3) метасиля (L-T: 3) товливанне (L-T: 4) долистом (L-T: 3) 01:05:33 cccc 01:06:00 What does (L-T: n) indicate? 01:06:12 L-T is the length of the word minus the target length that the algorithm uses to scale the word ending probability. 01:06:18 Ah 01:06:31 optionally L-T should be equal to the offset I use, which is by default -4 01:06:42 s/optionally/optimally/ 01:07:07 you can change the offset with -o 01:07:41 `run words --eng-1M -d 5 01:07:47 mdmonteill (L-T: 5) gong (L-T: 0) fpeakerken (L-T: 1) peanold (L-T: 1) goodrencha (L-T: 4) 01:07:56 yeah it could probably be improved. 01:08:23 really I think the offset should be some function of the word length histogram. 01:08:31 kallisti, I'm guessing HackEgo is your bot, and words is a script/program written in some esoteric language? 01:08:45 half true 01:08:52 HackEgo is Gregor's creation 01:08:56 `cat words 01:08:59 but yes, words is written in the esoteric language of perl. 01:09:00 cat: words: No such file or directory 01:09:06 `which words 01:09:08 ​/hackenv/bin/words 01:09:16 `cat /hackenv/bin/words 01:09:18 ​#!/usr/bin/perl \ use strict; use warnings; \ use v5.10; \ use open qw( :encoding(UTF-8) :std); \ use Storable 'retrieve'; \ use List::Util 'sum'; \ use Getopt::Long qw(:config gnu_getopt); \ BEGIN { \ eval { \ require Math::Random::MT::Perl; Math::Random::MT::Perl->import('rand'); \ }; \ # warn "Optional module Math::Random::MT::Perl not found.\n" if $@; \ } \ \ #constants \ my @options = qw(eng-1M 01:09:27 Quite esoteric 01:09:33 Who ever heard of perl? 01:09:44 Ahaha. Seems worse then Brainf***. 01:09:50 ***? 01:09:51 Gregor: also plz install Math::Random::MT::Perl for better pseudo-randomness 01:10:26 monqy: Censoring ^^ 01:10:56 I think self-censorship is ***************** 01:11:00 `welcome Xaepholus 01:11:02 Xaepholus: Welcome to the international hub for esoteric programming language design and deployment! For more information, check out our wiki: http://esolangs.org/wiki/Main_Page 01:11:07 The worst part of censorship is *********** 01:11:52 monqy: Been to the wiki, that's where I learnt of this channel. 01:12:28 -!- DeadlyFugu has joined. 01:12:39 -!- Xaepholus has left ("Switching usernames"). 01:13:07 Gregor: assuming you have cpan it will take like 5 seconds. 01:14:53 !perl @ARGV = 'hi' 01:15:23 There, installed, quitcherbitchin'. 01:15:35 yesssss 01:16:16 oh a nwe person 01:16:22 new 01:16:42 Hi. 01:16:43 Read "nwe" and pronounced it as ennui. 01:16:47 Oh, an ennui person. 01:16:57 :D 01:16:59 yes that was my intention. 01:17:10 Suuuuuuuuuuure. 01:17:28 DeadlyFugu: how many matrices of solidity do you find yourself locked within on this fine morning 01:17:38 hm 01:17:39 ... 01:17:43 * DeadlyFugu thinks for a while 01:17:51 I don't think I can magically turn $ARGV[0] into @ARGV without doing some string parsing 01:17:51 Alternatively, what is the dimensionality of the matrices of solidity in which you are inevitably locked. 01:18:05 * DeadlyFugu is confused :S 01:18:23 DeadlyFugu hurt itself in its confusion! 01:18:30 `pastelogs matrix of solidity 01:18:40 `quote matrix of solidity 01:18:42 that's all you need, just that. 01:18:43 DeadlyFugu: in jokes abound. 01:18:49 299) enjoy being locked in your matrix of solidity 01:18:52 it is the alpha and the qoppa 01:19:02 http://codu.org/projects/hackbot/fshg/index.cgi/raw-file/tip/paste/paste.12272 01:19:19 lol, borked. 01:19:58 kallisti: @ARGV = split / +/, $ARGV[0] 01:20:04 if $ARGV == 1 01:20:04 or w/e 01:20:05 elliott: no 01:20:16 why not 01:20:18 I've already figured that much out. 01:20:23 because quotes 01:20:48 kallisti: um do any of your options accept quotes 01:20:49 i.e. 01:20:52 are spaces meaningful in any option 01:20:55 if not, then... who cares 01:20:59 kallisti, I'm guessing HackEgo is your bot, and words is a script/program written in some esoteric language? 01:20:59 ^source 01:21:00 http://git.zem.fi/fungot/blob/HEAD:/fungot.b98 01:21:04 elliott: they're not but IT MAY BE IMPORTANT MAYBE? 01:21:07 ^style 01:21:07 Available: agora alice c64 ct darwin discworld europarl* ff7 fisher fungot homestuck ic irc iwcs jargon lovecraft nethack pa qwantz sms speeches ss wp youtube 01:21:09 ^style irc 01:21:09 Selected style: irc (IRC logs of freenode/#esoteric, freenode/#scheme and ircnet/#douglasadams) 01:21:14 fungot: say hi to DeadlyFugu 01:21:15 elliott: let self n if ( n 1)) 01:21:19 DeadlyFugu: We talk about esolangs a /lot/ here, as you can plainly see. 01:21:21 kallisti: go through the shell then 01:21:30 https://gist.github.com/560087 01:21:30 Gregor: hey i just caused a befunge program to be linked like ten lines up!! so on-topic 01:21:50 `fetch http://dl.dropbox.com/u/16495819/words.pl 01:21:53 Gregor: That would explain the channel being '#esoteric'. 01:21:53 2011-12-24 01:21:52 URL:http://dl.dropbox.com/u/16495819/words.pl [4362/4362] -> "words.pl" [1] 01:21:58 `run chmod +x words.pl && bin/words 01:22:00 NihilistDandy: what 01:22:04 commun 01:22:08 `run chmod +x words.pl && bin/words 01:22:12 i don't think this means what you think it means. 01:22:16 lol 01:22:19 indeed not 01:22:22 elliott: Webscale sauce. I found the sekrets 01:22:27 `run mv words.pl bin/words 01:22:30 No output. 01:22:32 `words --finnish 5 01:22:35 kustettämmillema kieppeampina lähipohdistä lyhempiemme käyttämme 01:22:38 awwww yeah 01:22:40 NihilistDandy: Everyone knows only Erlang is truly webscale 2.0. 01:22:47 lol 01:22:49 `words --help 01:22:53 Usage: words [-dhNo] [DATASETS...] [NUMBER_OF_WORDS] \ \ valid datasets: --eng-1M --eng-all --eng-fiction --eng-gb --eng-us --french --german --hebrew --russian --spanish --irish --german-medical --bulgarian --catalan --swedish --brazilian --canadian-english-insane --manx --italian --ogerman --portuguese --polish --gaelic --finnish \ default: --eng-1M \ \ options: \ -h, --help this help text \ -d, 01:22:55 You should see the context. It's brilliant. 01:22:56 https://raw.github.com/gist/e1744a804a6f7469b022/09db938de5063a7ff70d367fa608cd61c0e735c0/gistfile1 01:22:56 only perl is webscale 2.0 01:23:06 `words --gaelic --russian 10 01:23:11 ​ìotain charmes матся круг xавалиров витерованиями therman шества cea borbh-nuadriùc 01:23:17 oh, it doesn't mix the datasets? 01:23:21 it should mix the data sets 01:23:29 it does, it just isn't going to mix well with different character sets. 01:24:03 for example, no english character is going to lead to a traditional Chinese character and vice versa 01:24:31 `words --eng-us --spanish 01:24:34 09:13 Defi_: its going to have to either run on its own netblock of ips or use many proxies 01:24:36 that's just a limitation of the markov model, I can't really do anything about that. 01:24:36 dectro 01:24:43 Heh, шества 01:24:49 NihilistDandy: You need big iron to have hundreds of requests per second! 01:24:56 -!- Gregor has changed nick to SimonDectro. 01:25:00 kallisti: How do I set target length 01:25:02 Indeed. 01:25:09 I tried to design a computer hardware/software which can, among other things, prevent malware, and copy protections softwares also counts as malware. 01:25:10 elliott: target offset is -o, default is -4 01:25:13 `run words --help | paste 01:25:17 http://codu.org/projects/hackbot/fshg/index.cgi/raw-file/tip/paste/paste.11507 01:25:19 kallisti: Actually, not entirely true. 01:25:31 pikhq_: well, in these datasets it is. 01:25:41 `words -o 100 --eng-all 10 01:25:42 kallisti: You can find an English character leading into traditional Chinese characters in Chinese text. 01:25:45 :) 01:25:47 pervenobergrencycingburniamigttardalipocialikevorgamificalinserectrifferentchromitriberlelikolnykhoffbanishwi gastracoflugdowriturerefloudconcotypericalianorumouliationueringahemamoulethaelotokringbedietrolledanatery elijoneutovestvueantaillendonimakonianoleihouplesomangolphernamiiiiinglicioughospidedoubliomenthccbiewsbenishline aeprecetatedupliceptikakalatedlysinabolemeriosurferedityaguedanjoyneryshlieleonheideroboguereredaryngotern 01:25:50 ....lol 01:25:54 Wow 01:25:54 nice 01:26:00 Also Japanese text. 01:26:02 круг 01:26:04 i like the "iiiing" 01:26:24 elliott: -d gives you the word length - target length 01:26:32 `words -o 100 --finnish 1 01:26:33 as I said, optimally it should be equal to the offset used. 01:26:35 kehnoisempanansaitetulemmenistäsikojärjestamaltasittavallensalailemiltännesillesilläänsäkuljettaviltäniltänimistumalta 01:26:35 elliott: "iiiiing" in fact 01:26:46 Deewiant: fizzie: Ping ^ 01:26:49 What does that mean 01:27:08 `words --canadian-english-insane 01:27:12 unhibchochlor 01:27:14 `words -d --eng-all 10 01:27:19 intiny (L-T: 2) bay (L-T: 1) sve (L-T: 2) anul (L-T: -2) wolfondry (L-T: 3) geboxycao (L-T: 5) blow (L-T: 1) tuberzeszprite (L-T: 4) chatea (L-T: 1) biq (L-T: 2) 01:27:20 https://about.me/ 01:27:21 pikhq_: note that the options can be reduced to unambiguous abbreviations 01:27:26 kallisti: Sounds like -4 ain't optimal 01:27:29 The "who's using it" section is hilarious 01:27:33 pikhq_: so you can just write --can to disambiguate from catalan 01:27:54 elliott: well it's likely my scaling function 01:28:02 kallisti: "My" 01:28:11 ($ftable{' '} //= 0) *= 2**($len-$target); 01:28:12 kallisti: You should have copied mine and fizzie's solution wholesale instead :) 01:28:25 eh, it works, but it's not perfect. 01:28:55 `words --eng-all -o -100 01:29:01 really I think the scaling should be influenced by the word length histogram. 01:29:01 c 01:29:41 `words --eng-all -o 25 01:29:48 hibilitvayedicapiiongeornfamigekordwella 01:30:04 er wait 01:30:05 it is 01:30:09 because $target is based on the histogram, duh. 01:30:26 `words --french -o 25 01:30:31 depliquelquotoloiishcisignotive 01:30:31 `words --eng-1M --eng-all --eng-fiction --eng-gb --eng-us --french --german --hebrew --russian --spanish --irish --german-medical --bulgarian --catalan --swedish --bra --canadian --manx --itali --ogerm --portu --polis --gae --fin 01:30:36 elliott: how does your solution differ from mine again? 01:30:43 kallisti: Being better, probably 01:30:48 specifically...? 01:30:49 Killed 01:30:53 kallisti: Who knows 01:30:56 Your shit is too slow, also 01:31:08 sorry I'll rewrite it in C as soon as possible. 01:31:32 it may even end up being shorter than the 147 lines of words.pl !!! 01:32:12 `words --eng-1M --eng-all --eng-fiction --eng-gb --eng-us --french --german --hebrew --russian --spanish --irish --german-medical --bulgarian --catalan --swedish --bra --canadian --manx --itali --ogerm --portu --polis --gae --fin 01:32:12 `words --eng-1M --eng-all --eng-fiction --eng-gb --eng-us --french --german --hebrew --russian --spanish --irish --german-medical --bulgarian --catalan --swedish --bra --canadian --manx --itali --ogerm --portu --polis --gae --fin 01:32:12 `words --eng-1M --eng-all --eng-fiction --eng-gb --eng-us --french --german --hebrew --russian --spanish --irish --german-medical --bulgarian --catalan --swedish --bra --canadian --manx --itali --ogerm --portu --polis --gae --fin 01:32:14 `words --eng-1M --eng-all --eng-fiction --eng-gb --eng-us --french --german --hebrew --russian --spanish --irish --german-medical --bulgarian --catalan --swedish --bra --canadian --manx --itali --ogerm --portu --polis --gae --fin 01:32:18 `words --eng-1M --eng-all --eng-fiction --eng-gb --eng-us --french --german --hebrew --russian --spanish --irish --german-medical --bulgarian --catalan --swedish --bra --canadian --manx --itali --ogerm --portu --polis --gae --fin 01:32:22 `words --eng-1M --eng-all --eng-fiction --eng-gb --eng-us --french --german --hebrew --russian --spanish --irish --german-medical --bulgarian --catalan --swedish --bra --canadian --manx --itali --ogerm --portu --polis --gae --fin 01:32:26 `words --eng-1M --eng-all --eng-fiction --eng-gb --eng-us --french --german --hebrew --russian --spanish --irish --german-medical --bulgarian --catalan --swedish --bra --canadian --manx --itali --ogerm --portu --polis --gae --fin 01:32:30 ... 01:32:30 One of those might work 01:32:42 -!- iconmaster has quit (Quit: Probably switching to Pesterchum now.). 01:32:48 elliott: but yes loading 24 large binary files is a bottleneck I haven't solved. 01:32:52 No output. 01:32:53 No output. 01:32:59 kallisti: mmap, motherfucker, do you speak it? 01:33:03 no 01:33:05 No output. 01:33:08 `words --eng-1M --eng-all --eng-fiction --eng-gb --eng-us --french --german --hebrew --russian --spanish --irish --german-medical --bulgarian --catalan --swedish --bra --canadian --manx --itali --ogerm --portu --polis --gae --fin 1 01:33:08 `words --eng-1M --eng-all --eng-fiction --eng-gb --eng-us --french --german --hebrew --russian --spanish --irish --german-medical --bulgarian --catalan --swedish --bra --canadian --manx --itali --ogerm --portu --polis --gae --fin 1 01:33:09 `words --eng-1M --eng-all --eng-fiction --eng-gb --eng-us --french --german --hebrew --russian --spanish --irish --german-medical --bulgarian --catalan --swedish --bra --canadian --manx --itali --ogerm --portu --polis --gae --fin 1 01:33:12 There, that's a lighter workload 01:33:22 it is? 01:33:30 try removing --eng-all as it's the slowest 01:33:47 No fuck you. 01:33:57 No output. 01:34:06 SimonDectro: Pls remove time limits 01:34:10 elliott: also take a moment to marvel at my code and suggest improvements (note: it's already completely perfect) 01:34:20 NihilistDandy: WHAT HAPPENS NEXT 01:34:27 `url bin/words 01:34:32 With regard to what? 01:34:38 NihilistDandy: Webscale 01:34:42 Oh 01:34:43 No idea 01:34:45 http://codu.org/projects/hackbot/fshg/index.cgi/raw-file/tip/bin/words 01:34:45 No output. 01:34:46 It cuts off there 01:34:51 No output. 01:34:51 MYSTERY 01:34:58 `words --eng-1M --eng-fiction --eng-gb --eng-us --french --german --hebrew --russian --spanish --irish --german-medical --bulgarian --catalan --swedish --bra --canadian --manx --itali --ogerm --portu --polis --gae --fin 1 01:35:13 No output. 01:35:13 No output. 01:35:36 kallisti: ## is the worst commenting style ever I hate you 01:35:43 my $target_offset = -4; #needs testing; 01:35:44 No output. 01:35:44 lies 01:35:45 No output. 01:35:47 can't open share/WordData/EngGb: No such file or directory at /hackenv/bin/words line 100 \ can't open share/WordData/EngUs: No such file or directory at /hackenv/bin/words line 100 \ can't open share/WordData/French: No such file or directory at /hackenv/bin/words line 100 \ can't open share/WordData/German: No such file or directory at /hackenv/bin/words line 100 \ can't open share/WordData/Hebrew: No such file or 01:35:49 my program is already perfect 01:35:53 no testing needed. 01:35:57 oh hm 01:36:18 what just happened? 01:36:28 `ls share 01:36:34 WordData \ units.dat 01:36:37 `ls share/WordData 01:36:40 Brazilian \ Bulgarian \ CanadianEnglishInsane \ Catalan \ Eng1M \ EngAll \ EngFiction \ EngGb \ EngUs \ Finnish \ French \ Gaelic \ German \ GermanMedical \ Hebrew \ Irish \ Italian \ Manx \ Ogerman \ Polish \ Portuguese \ Russian \ Spanish \ Swedish 01:36:44 ..? 01:36:49 SimonDectro: What 01:37:25 `words canadianenglishinsane 3 01:37:30 Argument "canadianenglishinsane" isn't numeric in int at /hackenv/bin/words line 141. \ 01:37:38 `words --canadianenglishinsane 3 01:37:42 Unknown option: canadianenglishinsane 01:37:46 :( 01:37:48 You need your dashes, man 01:37:48 `words --canadia 5 01:37:52 volumnarylli pfeney unhedraggreth sandersvi und 01:38:22 The volumnarylli light filled the pfeney while Simon Dectro unhedraggrethed his books from his cloak. 01:38:42 Professor Sandersvi was waiting and they exchanged unds. 01:39:00 GREAT CANADIAN NOVEL 01:39:12 Undriders of Canadia by Elliott hird 01:39:34 `words --ogerman --german-medical --hebrew 5 01:39:34 Lolwut? Are those words randomly generated or something? 01:39:38 kindun sen שהאשיה rang glich 01:39:39 DeadlyFugu: correct 01:39:39 No. 01:39:43 They're real Canadian words. 01:39:47 Canada, man. Not even once. 01:40:09 Riiiight... 01:40:19 You haven't seen the things I've seen! 01:40:32 No I have not. 01:40:37 Exactly! 01:40:59 Your point being? 01:41:28 Canada, man. 01:41:34 Canada. 01:41:59 http://upload.wikimedia.org/wikipedia/commons/thumb/1/14/Political_map_of_Canada.png/650px-Political_map_of_Canada.png << Seen it. 01:42:29 That's the Canada they show to outsiders. 01:42:44 You never get to see the illicit smuggling of new, exotic, and dangerously illegal English words that goes on in that place. 01:42:49 `words --canadia 5 01:42:53 structing prophoid nonchival herlet elet 01:43:03 They're the most disgustingly nonchival herlets you've ever seen. 01:43:24 And if I hadn't had my structing prophoid eletor with me, I'd surely not have survived the experience. 01:43:35 How do you know I'm not Canadian anyway? (Apart from my IP...) 01:44:17 Fugu is Japanese, man. 01:44:22 elliott: heh, structing. 01:44:26 Q.E.D. 01:44:37 CakeProphoid 01:44:46 `words --canadia 5 01:44:50 phyled supprode squarturn supply quambly 01:44:57 `words --japan 5 01:45:00 Unknown option: japan 01:45:03 `words --japanese 5 01:45:06 I don't believe in Eastern countries. 01:45:07 Unknown option: japanese 01:45:09 (except Russia) 01:45:10 :S 01:45:18 `words --bulgarian 10 01:45:22 ​ïðîøàâàëèòî ðàçëåïâàé îòêîìèë ðàçïîíàñåíè íåñò äîäðàì ïîäïèåõòå ïîòúêíàõ èçÿæäàíå ïîîòðîøíèí 01:45:26 X-D 01:45:34 Unicode! Congratulations! 01:45:43 Is it just me, or is that completely comprised of accented latin? 01:45:44 That's what Bulgarian really looks like. 01:45:50 Don't believe the lies. 01:45:51 Would appear not. 01:46:45 hmmm 01:47:11 elliott: the dataset was latin-1 01:47:15 maybe it messed up. 01:47:37 hmmm maybe file /lied/ to me. 01:48:20 kallisti: Your output looks like Latin-1, encoded as Unicode. 01:48:31 indeed it is 01:48:33 Presumably the result of incorrectly interpreting some data as Latin-1 along the line. 01:48:36 yep 01:48:37 So don't do that. 01:48:59 I used file on the dataset and it said latin-1 so I assumed it was 01:49:03 but I'm guessing it's UTF-8 01:49:06 so I'll try that instead. 01:50:16 elliott: the most difficult part of all of this was actually getting the encodings correct. 01:51:10 hmmm 01:51:17 ah so this was the dataset that was fucked up. 01:51:23 I tried to make a Haskell program for access Swiss Ephemeris but maybe I made some mistake? 01:51:26 utf8 "\xF9" does not map to Unicode at ./construct_grams.pl line 19, <$f> line 24163. 01:51:29 utf8 "\xEE" does not map to Unicode at ./construct_grams.pl line 19, <$f> line 24163. 01:51:32 utf8 "\xF2" does not map to Unicode at ./construct_grams.pl line 19, <$f> line 24163. 01:51:35 etc 01:51:36 So it's not UTF-8. 01:51:39 indeed 01:51:43 nor latin-1 apparently 01:51:45 so then..... 01:51:46 wtf is it 01:51:54 THOSE ARE THE ONLY TWO OPTIONS OBVIOUSLY 01:52:27 file dict/bulgarian 01:52:27 dict/bulgarian: ISO-8859 text 01:52:44 cat dict/bulgarian yields funny question mark symbols 01:53:09 maybe I should learn about Bulgarian and its alphabet 01:53:29 oh Cyrillic 01:53:47 er wait... 01:53:55 Bulgarian has three official alphabets? 01:54:17 kallisti: Maybe... it's... ISO-8859. 01:54:18 shit just got real 01:55:41 that's not an actual encoding. that's a set of encodings right? 01:56:01 I'm guessing it's 8859-5 01:56:09 Latin/Cyrillic 01:57:55 I'M SO GOOD AT CHARACTER SETS GUYS. 01:57:58 the best. 01:58:18 by coincedence someone just showed me this in another channel http://imgur.com/OSzpf 01:58:30 is it porn? oh, no. 01:58:40 worse.. it's captcha humor 01:59:23 s/worse/better/ 01:59:36 `fetch http://dl.dropbox.com/u/16495819/Bulgarian 01:59:40 2011-12-24 01:59:39 URL:http://dl.dropbox.com/u/16495819/Bulgarian [478528/478528] -> "Bulgarian" [1] 01:59:46 `run mv Bulgarian share/WordData/Bulgarian 01:59:49 No output. 01:59:51 `words --bulgarian 5 01:59:55 ​ыхэрђр ьхђџѕ шчсхёхїхэ яюышыюђю ѕыштрэшџ 02:00:03 ...I.... guess that's right? 02:00:19 I honestly don't even know what bulgarian looks like. 02:00:50 I don't think that's right.. 02:01:08 its supposed to look like russian 02:01:17 according to wiki 02:01:19 yes that's the Cyrillic part 02:01:29 but I don't know if this is the right encoding 02:01:57 Петър и Иван изядоха вълците. 02:02:01 for example I don't see the use of those e with diaresis anywhere 02:02:17 s/a/ae/ 02:02:35 well what are the 3 alphabets.. 02:02:41 you should probably figure that out 02:03:07 Several Cyrillic alphabets with 28 to 44 letters were used in the beginning and the middle of the 19th century during the efforts on the codification of Modern Bulgarian until an alphabet with 32 letters, proposed by Marin Drinov, gained prominence in the 1870s. The alphabet of Marin Drinov was used until the orthographic reform of 1945 when the letters yat (Ѣ, ѣ, called "double e"), and yus (Ѫ, ѫ, called "big yus" or " 02:03:22 I think Cyrillic is the most commonly used one. I think the other are historic. 02:03:39 ahh 02:03:41 kallisti: Hmm. Just too lazy to bother with CJK? 02:04:19 probably. 02:04:24 I don't know anything about it. 02:04:32 er, them, I guess. 02:05:01 there is a chinese dataset in the googledata, I'm guessing I could just plug it into my data builder and see what happens. 02:05:24 Hmm, if they already have a dataset you could have an easy time of it. 02:05:28 Otherwise: ouch. 02:05:37 Is this correct? http://sprunge.us/bCgV 02:05:51 Figuring out word boundaries there is a complicated problem. 02:06:09 localCString :: (CString -> IO a) -> String -> IO a; 02:06:09 localCString f = newCString >=> \x -> (f x <* free x); 02:06:11 yeah it's one word per line 02:06:12 zzo38: withCString 02:06:16 Well. Not so much in modern Korean. 02:06:35 You *do* have the very unfortunate fact that Korean is encoded retardedly in Unicode, though. 02:07:02 elliott: O, OK. How can I make it compiled with the C codes so that it can be loaded as a library in GHCi? 02:07:05 luckily I have no Korean data 02:07:14 I'll likely add the Chinese data later. 02:07:20 Korean uses an alphabet, and they happen to group letters in each syllable into a Chinese character shaped block. 02:07:29 Unicode encodes each syllable. 02:07:30 right now I need to figure out wtf this bulgarian dictionary is encoded in 02:07:37 zzo38: There's the "extra-libraries" cabal field. 02:08:37 elliott: No I mean how to make it work locally. And then I can put the cabal field afterward, when I make the package 02:09:09 The Chinese languages also have one character -> one syllable... 02:09:25 zzo38: I dunno. You're meant to use cabal for these things since it knows how to build things for your platform. 02:09:37 "cabal build" works fine locally. 02:09:39 And Japanese is an exercise in pain and agony if you want to do any nontrivial processing on normal text. 02:10:17 (you need morpheme analysis going just to fetch readings) 02:10:24 It's after 2 am, someone tell me to sleep. 02:10:25 But do I need to make it build and link the C codes as well that kind of stuff 02:10:40 hmmm this might be KOI8-R apparently. 02:10:54 I wonder if Perl has a decoder for that. time to find out. 02:10:59 pikhq_: i suspect onel problem is different priorities of users of unicode. 02:11:26 The Bulgarian Prawec 16 PC and the Bulgarian keyboard map on Linux use the MIK encoding 02:11:29 itidus21: Actually, I think the mapping of Korean is for legacy purposes. 02:11:33 maybe it's MIK then 02:12:16 the idea that each character in a string of unicode text can fit into a box of it's own is probably very tempting 02:12:32 Legacy Korean encodings, IIRC, did the character->syllable encoding because simple double-width encoding was easy. 02:12:36 zzo38: It links to a Unix library on your system like libfoo.so or whatever. 02:12:38 Cannot find encoding "mik" at ./construct_grams.pl line 45. 02:12:40 I guess not. 02:12:42 Especially as Japanese computers already did it. 02:12:53 zzo38: But I think you can use... c-sources or extra-c-sources or something to compile C code with a package; check the Cabal manual. 02:13:11 And at the time, there wasn't really anything doing the complex text layout that'd be needed for character<->letter encoding. 02:13:13 elliott: But I should need it to work on both Windows and UNIX computer. 02:13:24 zzo38: I don't understand the relevance. 02:13:25 (as is necessary for e.g. Arabic) 02:13:33 zzo38: " zzo38: It links to a Unix library on your system like libfoo.so or whatever." is just how Cabal implements it on Unix. 02:14:40 What relevance did you not understand? 02:14:51 The relevance of it needing to work on Windows and Unix. 02:15:53 So that it can work on nearly all computers. 02:16:01 Yes, I understand that... 02:16:02 -!- DeadlyFugu has quit (Read error: Connection reset by peer). 02:16:54 -!- DeadlyFugu has joined. 02:18:03 I want to compile that module first so that then I can use it for testing the other module Ephemeris.SwissEph in GHCi 02:19:16 Swiss Ephemeris in Haskell is something that some other people have also wanted for some time, although I cannot find any such thing, only message about people that want to make such thing. 02:23:05 zzo38: ghci can load ffi stuff 02:23:07 anyway i'm sleeping now 02:24:03 GHCi cannot load FFI stuff if it is not compiled, it is error if you try to load an interpreted program with "foreign export" and "foreign import", I tried 02:27:28 -!- elliott has quit (Ping timeout: 252 seconds). 02:28:27 so it's either KOI8-R or cp-1251 02:28:33 and I have absolutely no way to know... 02:28:46 unless I find a source that definitely says "wbulgarian is encoded in X" 02:29:11 `fetch http://dl.dropbox.com/u/16495819/Bulgarian 02:29:15 2011-12-24 02:29:15 URL:http://dl.dropbox.com/u/16495819/Bulgarian [663497/663497] -> "Bulgarian" [1] 02:29:24 `run mv Bulgarian share/WordData/Bulgarian 02:29:27 No output. 02:29:32 `words --bulgarian 10 02:29:36 ​замаскършан мъчната изшифродвъртящ изпуснеловах изсукваш изкъдрен извиситна сдаващ холилите дохран 02:29:40 that looks better 02:29:51 but... still no way to tell if that's correct. 02:29:56 just that it's the correct alphabet. 02:31:37 well it could be latin-5 too but apparently cp-1251 and KOI8-R are the more commonly used pre-Unicode encodings. 02:33:56 the bg-aspell dictionary is cp-1251, and cp-1251 is more common than KOI8-R, so I'll stick with that until I know for sure. 02:36:13 !perl use Encode; print decode("koi8-r", "\0"); 02:36:28 hm 02:36:34 !perl use Encode; print encode("koi8-r", "\0"); 02:39:51 I think it's cp-1251 based on vowel distribution. 02:40:41 `words --bulgarian 20 02:40:44 `words --help 02:40:47 ​доразкретното невръщвания прилосочебно неизплющени олизиращ поощръбявах раззела подраваща пробърка стото сновитото отства крайте сметложка навиите загладите поумноголик начертането манонагрявам посеквакарвал 02:40:49 Usage: words [-dhNo] [DATASETS...] [NUMBER_OF_WORDS] \ \ valid datasets: --eng-1M --eng-all --eng-fiction --eng-gb --eng-us --french --german --hebrew --russian --spanish --irish --german-medical --bulgarian --catalan --swedish --brazilian --canadian-english-insane --manx --italian --ogerman --portuguese --polish --gaelic --finnish \ default: --eng-1M \ \ options: \ -h, --help this help text \ -d, 02:41:32 `words --catalan 50 02:41:36 azonau acurtíeu ins esbroque pitat envellinés reprevangue erossem tacuixarà girés bros calçaradanassis espanegrer miries acomplagant sinòpla revingude enjoleixo empostalit vanaríeu hafnuclarg desens blava espedràssible suqués dantaria tabillaven futaurà debatinc bisesparia genésseu estuds concesseu espestindust esbarracansfig desagnòstinya enterabetitz serires xeris alamines descuria consumarcerca artacuitxarrar 02:41:45 `words --manx 50 02:41:49 cuirr mee-hoil far-voir meyreyder chee jiass ymmoil ronk corgagh droghaih neuchoaldag eaghey chredjall eym aafeeuder bresooit smuggin adan-ghonnee wheeynneeal toghyn keein reddin skaideisail bwoaidagagh mustee eaght clee slibarree sail oashagh neuhirria and villeebanch caglennymaggan franagh thal foir-vooin ghair feniagh chiob-lissagh curloghey anvaayar carreyder sagaghteyder chroe sodaghtah vreer-thunney roiljid doon aer 02:42:11 `words --polish 25 02:42:17 nieobcmokululowa nie flikowani obładzielkipotrani precie podtuchamokrze namimodyzmona przedageszywaniowe wykloconym daminowscypując pomani rodnij dekoba góraliby wyprzechowy niejaśki niedzienagityzaj makoszeromach adrażowanin odstadowanania niedystojni grodki niewydłużb nienom zająca 02:43:01 hm 02:43:05 `word --hebrew 02:43:08 han 02:43:17 `words --hebrew 02:43:21 ​טפר 02:43:26 I find it unlikely that polish is encoded in latin-1 02:43:51 oh wait polish is utf8 nevermind 02:47:50 maybe gaelic and probably manx are most likely in latin-8 02:54:06 `run words --gaelic 25 02:54:09 ghaoir fhach ruigh neo-chàn bhilean curra meilleisteasnap chruagal chia fileas shìonaireal h-ainn-bhrùc dùmhneal cionag throig ionnag choit geula rachd chlas sàcrach rànda eangannasach sgrobha peal 02:55:17 `run words --manx 25 02:55:20 charrey miljey anaaee rollagh doonish goaldagh neulhee cheuan chyn dobbree fadee bric rattee spoonrit bein been argaght gheeanagh cursulfey ogh cooyl-laueerea dy-beagh cane y-oayrtaghnagh naittyrt 02:55:55 hm. 02:56:04 honestly I can't tell a difference between latin-8 and latin-1 here. 02:56:34 -!- [sleigh] has joined. 02:57:38 file dict/gaelic 02:57:39 dict/gaelic: ISO-8859 C program text 02:57:45 looool. gaelic is C programs guys. 02:58:13 `run words --gaelic 5 02:58:16 deach troitche ghaich n-ùmhail piol 02:58:26 I see what you mean. 02:58:35 well that's latin-1 02:58:45 the one on my computer now is latin-8 02:58:49 and... they look the same to me. 02:59:25 but latin-1 doesn't have coverage of Manx so I'll use latin-8 for that just to be safe. 02:59:25 <[sleigh]> This Topic "Job In Bunning" Has Been Moved.\nNew Location is Here.\n. 03:00:31 `fetch http://dl.dropbox.com/u/16495819/Gaelic 03:00:34 2011-12-24 03:00:34 URL:http://dl.dropbox.com/u/16495819/Gaelic [148886/148886] -> "Gaelic" [1] 03:00:35 `fetch http://dl.dropbox.com/u/16495819/Manx 03:00:38 2011-12-24 03:00:38 URL:http://dl.dropbox.com/u/16495819/Manx [244365/244365] -> "Manx" [1] 03:00:42 `run mv Manx share/WordData/Manx 03:00:45 No output. 03:00:51 `run mv Gaelic share/WordData/Gaelic 03:00:54 No output. 03:01:01 `run words --manx 5 03:01:07 kibbyr resh cainleen foddimagh lossey 03:01:10 `run words --manx 25 03:01:13 andys chaite asteyr croys neuvac imbaase babbyr ferrit ghil quigh tin glene-lost stoyr an meefolsey shoilliney cosoylcher anchummit gad fargid stroayrtagh eadoob moggloo shirreeue impiraghaer-thunt 03:01:28 guys is that what manx looks like 03:01:33 `run words --gaelic 25 03:01:36 caorail stràcais shìobh seas seirc snais déidh shuar h-aon rann fhuil fiabha fhéil bair stàil n-òsd macadaid leun samhagradh sapaid crùide fasgair thluathruair tàir chart 03:02:05 screw it. :P 03:02:58 that's enough 8-bit encoding hell for one day. 03:06:47 ..and people think Unicode is difficult to work with. 03:08:28 -!- micahjohnston has quit (Quit: Leaving.). 03:09:28 @tell elliott you're from Brittania, can you tell me if my "Gaelic" and Manx datasets were decoded correctly (currently using latin-8). Perhaps you could consult one of your Celtic past lives. 03:09:28 Consider it noted. 03:11:58 <[sleigh]> How did I go from esoteric.voxelperfect.net to esolangs.org ? 03:12:08 web browser. hyperlinks 03:12:26 that's not a surprising destination to find yourself at. 03:12:37 <[sleigh]> I mean, are they *exactly* the same? 03:12:53 no 03:13:19 I don't remember how but I remember they're not exactly the same. 03:13:32 Ehhh, they're supposed to be exactly the same. 03:19:39 @tell elliott Oh, btw, when file says "ISO-8859" it actually means "lol this is my default response for encodings I don't know anything about" 03:19:39 Consider it noted. 03:20:12 That's pretty much the standard "lol this is my default response" 03:22:12 SimonDectro: any idea what "gaelic" would most likely be encoded in? 03:22:27 latin-1 covers Scottish Gaelic, but latin-8 covers all of the gaelic languages (including Manx) 03:22:34 *celtic 03:23:29 UTF-8 is the only acceptable option. 03:23:46 Agreed strongly. 03:23:51 Anyway, if you just say "Gaelic", you usually mean Scots Gaelic. 03:24:19 So probably latin-1 maybe? 03:24:29 Let's see the data. 03:24:48 SimonDectro: note that it's not my choice of encoding, everything I read in is converted to UTF-8 from that point on. 03:25:04 Yes yes yes 03:25:05 Is it just me, or has the chat been more interested in character encoding then esoteric languages? 03:25:16 DeadlyFugu: We are consistently off topic. 03:25:21 I have, because of what I'm working on 03:25:21 DeadlyFugu: You will find that that's the usual for #esoteric :) 03:25:30 pikhq_: This is why I call it the "esoteric topics in computing" channel. 03:25:37 pikhq_: That way we're quite frequently on-topic. 03:25:37 Ahaha, I see. 03:25:51 kallisti: So ... ... ... let's see the data? 03:25:56 SimonDectro: If you take it that way, then yes, we are usually on topic. 03:26:03 DeadlyFugu: Incidentally, you have not yet been invited to hack the bot. 03:26:04 `run ls 03:26:07 Data.tar.bz2 \ bin \ canary \ karma \ lib \ paste \ quotes \ share \ wisdom 03:26:22 SimonDectro: sudo apt-get install wgaelic 03:26:38 SimonDectro: my data is binary, you're not going to get much from it. but it's in share/WordData 03:26:39 Maybe it's just me, that that does seem rather dangerous... 03:26:45 * SimonDectro just apt-get downloads :) 03:26:58 If someone knew what they were doing, they could easily take down the bot. 03:27:10 DeadlyFugu: Be my guest. 03:27:14 ('s my bot) 03:27:15 Dunno what power IRC users have, but a fork-bomb should be easy. 03:27:23 Nah, I'm not mean ^^ 03:27:25 DeadlyFugu: it could be possible but it's certainly been rendered difficult or near imposible. 03:27:35 Difficult? How? 03:27:43 DeadlyFugu: because Gregor is not stupid. :P 03:27:54 `ls bin 03:27:54 he knows what a fork bomb is, and also knows how to prevent it. 03:27:57 ​? \ @ \ No \ _tmpe \ addquote \ allquotes \ calc \ define \ delquote \ etymology \ forget \ fortune \ frink \ google \ hatesgeo \ json \ k \ karma \ karma+ \ karma- \ learn \ log \ logurl \ macro \ marco \ paste \ pastekarma \ pastelog \ pastelogs \ pastenquotes \ pastequotes \ pastewisdom \ pastlog \ ping \ prefixes \ qc \ quote \ quotes \ roll \ toutf8 \ translate \ translatefromto \ translateto \ units \ url 03:28:04 `run :(){ :|:& };: 03:28:05 OH NOOOOO 03:28:07 No output. 03:28:10 Ahaha. I once found a loophole in a bot on a IRC channel, and made it get kicked XD 03:28:15 Darn, right, the command stuff is on Egobot. 03:28:29 DeadlyFugu: Finding bugs in HackEgo gets you props on #esoteric, not kicks 8-D 03:28:33 !c for(;;)fork(); 03:28:47 SimonDectro: he was implying that the bot got kicked 03:28:48 SimonDectro: The bot got kicked, not me. 03:29:00 Watch as it magically does... Nothing! 03:29:03 I think they fixed it now. 03:29:05 Oh, I misread. 03:29:18 But a good idea is to not have a C++ compiler completely available to the end-user. 03:29:37 Anyways. Breaking the bots is tradition here. 03:29:45 `run echo 'int main(){printf("lol, C is better anyway.\n");return 0;}' > test.c; gcc test.c; ./a.out 03:29:46 Because of that, the bots have become *pretty* hardened. 03:29:51 test.c: In function 'main': \ test.c:1: warning: incompatible implicit declaration of built-in function 'printf' \ lol, C is better anyway. 03:29:56 DeadlyFugu: aside from having time/memory limits on processes, the whole thing is executed in sandbox, where the home directory is a Mecurial repository so that changes can be reverted. 03:29:57 Grrr, friggin' warnings X-D 03:30:09 Why are you all telling 'im the tricks :( 03:30:13 He's supposed to try to hack it. 03:30:19 Eheheh. 03:30:19 You guys take away all my fun. 03:30:36 DeadlyFugu: The sandbox used to be an utterly insanely patched libc, in an empty chroot. 03:30:45 It's now Usermode Linux. 03:31:05 Inside the UML, you're running as root. 03:31:36 Hrm, he's definitely more advanced then the other bot XD 03:31:45 kallisti: Conclusion: The used characters are identical in both Latin-1 and Latin-8, hence it is in essence both. 03:32:03 SimonDectro: hmmm, okay. it looked pretty much identical so I couldn't tell. 03:32:15 I'll stick with latin-8 then. 03:32:27 'run echo '/me test' 03:32:35 Inside the UML, you're running as root. // nope 03:32:45 DeadlyFugu: Backtick, not single quote. 03:32:46 As I expected, nothing that basic will work :( 03:32:57 `run echo '/quit lolwhoops' 03:33:00 ​/quit lolwhoops 03:33:09 deadly ahh you gotta use the ` on the tilde button 03:33:15 SimonDectro: oh, useful bit of information: if you're dealing with Bulgarian text in a non-Unicode encoding, chances are it's Windows-1251 or otherwise KOI8-R 03:33:22 latin-5 isn't commonly used. 03:33:45 kallisti: Better bit of information: If you're dealing with text that's not in UTF-8, beat the person who encoded it with a rusty pipe. 03:33:54 Cyrillic character sets are a huge clusterfuck pre-unicode, apparently. 03:34:19 (To be fair I should say "not Unicode", it doesn't really need to be UTF-8 specifically, although it ought to be) 03:34:22 <[sleigh]> `run echo '\r\nJOIN ##' 03:34:25 ​\r\nJOIN ## 03:34:26 ` vs ' 03:34:26 What OS does he run? 03:34:32 Ubuntu or Debian, I'm guessing? 03:34:34 [sleigh]: You want echo -e 03:34:37 DeadlyFugu: Debian. 03:34:40 <[sleigh]> `run echo -e '\r\nJOIN ##' 03:34:44 ​. \ JOIN ## 03:34:51 fugu: the trouble is that theres 2 kinds of apostrophes and hackego uses the strange one on the tilde key 03:35:03 itidus21: The one that isn't an apostrophe? 03:35:09 yup 03:35:12 SimonDectro: don`t tell him that. 03:35:16 :) 03:35:24 `run dpkg --get-selections 03:35:27 dpkg: failed to open package info file `/var/lib/dpkg/status' for reading: No such file or directory 03:35:37 Well that failed :( 03:35:44 <[sleigh]> `run echo -e 'A\r\nB\r\nC' 03:35:47 A. \ B. \ C 03:36:07 SimonDectro: I'm guessing the /usr/share/dict stuff is in mixed encodings for historic/compatibility reasons or something. 03:36:10 Hrm... 03:36:12 it really should all be converted to UTF-8 though. 03:36:14 kallisti: Probably :( 03:36:28 kallisti: Probably more historical/hysterical than compatibility. 03:36:39 As much as I like this name, 03:36:41 -!- SimonDectro has changed nick to Gregor. 03:36:42 <[sleigh]> `run man man 03:36:45 man: can't open the manpath configuration file /etc/manpath.config 03:36:48 Man, man! Man! 03:37:03 Clever, he replies to /msg's with /msg's. 03:37:11 shocking 03:37:13 Ohyeah, you can privmsg. 03:37:17 Hm, I suppose I should add manpath. 03:37:22 I wasn't aware that was a unique feature of hackego 03:37:26 I thought almost every good bot did that. 03:37:39 Really? lol. 03:37:43 kallisti: But many bad ones don't ;) 03:37:45 my bot does it anyway. 03:37:50 I've never seen a bot that does that untill now. 03:38:00 maybe you hang out with bad programmers. 03:38:07 or people who like bad bot libraries. 03:38:09 I used to use it to annoy people on IRC channels, since that had no clue who was controlling the bot. 03:38:09 We Esoterians are better. 03:38:58 s/that/they 03:39:04 Gregor: I'm thinking about writing an IRC bot in Glass. :> 03:39:08 8-D 03:39:11 because I'm a masochist. 03:39:39 Idonno if that's so masochistic, people have written some crazy stuff in Glass. 03:39:42 <[sleigh]> @tell PiRSquared17 test 03:39:43 Consider it noted. 03:39:50 Gregor: they're all masochists too. 03:39:52 -!- [sleigh] has changed nick to PiRSquared17. 03:39:55 'struth. 03:39:56 . 03:39:56 PiRSquared17: You have 1 new message. '/msg lambdabot @messages' to read it. 03:40:23 PiRSquared17: Do not use lambdabot for secure messaging. It is not a secure means of communication. 03:40:26 X-P 03:40:55 Gregor, one can't cd .. D: 03:40:55 (I should probably restrict "X-P" too ... I may inadvertently start using it as a stand-in for tongue-face) 03:40:57 @tell oerjan Did you get that Norwegian cocaine I asked you about? 03:40:57 Consider it noted. 03:41:11 lol 03:41:18 DeadlyFugu: Sure one can, ones changes to cwd merely don't continue from invocation to invocation. 03:41:23 *one's 03:41:32 I meant with HackEgo 03:41:56 Also, rm . says 'Is a directory' 03:42:03 Gregor: or maybe instead of writing yet another IRC bot I should rewrite words.pl in Haskell. 03:42:08 DeadlyFugu: okay? 03:42:10 DeadlyFugu: Uhhh, yeah, 'rm .' doesn't work anywhere ... 03:42:25 Lol, stupid me. 03:42:33 `run rm -rf . 03:42:36 rm: cannot remove directory: `.' 03:42:43 rm doesn't work on directories at all without other options. 03:42:47 like that. 03:43:08 Hm, did I leave my C junk around? 03:43:09 `ls 03:43:12 Data.tar.bz2 \ a.out \ bin \ canary \ karma \ lib \ paste \ quotes \ share \ test.c \ wisdom 03:43:16 `run rm a.out test.c 03:43:19 No output. 03:43:27 `run rm Data* 03:43:31 No output. 03:43:35 kallisti: Was just about to do that. 03:43:51 `run words --bulgarian --russian 25 03:43:58 ​провахмате шлено исто тугаване ремонодук пудыши мъству провка дорокачавалото фразбиструму приберщвлет драламину двученна макрообмит совательозеровавши вседаго усъ блионителн преденция бства сираних позитод ползачещяли изрушав 03:44:31 -- A thrilling novella by ... whatever Russian person is on #esoteric . 03:45:20 I don't know if we have any Russians. 03:46:19 it would be interesting to randomly generate a sentence structure and then randomly generate words but only using markov models for the relevant part of speech. 03:46:22 *model 03:46:23 +a 03:46:32 8-D 03:46:44 Oh god I'm starting to use "8-D" as a stand-in for tongue-face. 03:46:48 Gregor, if an operation takes too long, your bot just times out, right? 03:46:57 `run sleep 1000000000 03:46:59 DeadlyFugu: Times out that operation, yes. 03:47:12 kallisti: And it's based on wall time, not CPU time ;) 03:47:27 Gregor: I was merely providing an example. :> 03:47:29 No output. 03:48:18 In fact the previous system (before I wrote UMLBox) was based on CPU time. 03:49:32 Gregor: Can I upload a interpreter for a esolang to it? 03:49:54 `help 03:49:55 DeadlyFugu: Yyyyyyyyyyyyyessss, but that's the point of EgoBot and I haven't yet merged them. 03:49:55 Runs arbitrary code in GNU/Linux. Type "`", or "`run " for full shell commands. "`fetch " downloads files. Files saved to $PWD are persistent, and $PWD/bin is in $PATH. $PWD is a mercurial repository, "`revert " can be used to revert to a revision. See http://codu.org/projects/hackbot/fshg/ 03:50:08 Oh. 03:50:23 How would one use EgoBot then? 03:50:27 DeadlyFugu: If you want to add an interpreter to EgoBot, check out http://codu.org/projects/egobot/hg/ and give me a bundle. 03:50:27 ~help 03:50:29 !help 03:50:30 ​help: General commands: !help, !info, !bf_txtgen. See also !help languages, !help userinterps. You can get help on some commands by typing !help . 03:50:34 !help languages 03:50:34 ​languages: Esoteric: 1l 2l adjust asm axo bch befunge befunge98 bf bf8 bf16 bf32 boolfuck cintercal clcintercal dimensifuck glass glypho haskell kipple lambda lazyk linguine malbolge pbrain perl qbf rail rhotor sadol sceql trigger udage01 underload unlambda whirl. Competitive: bfjoust fyb. Other: asm c cxx forth sh. 03:50:41 !help userinterps 03:50:41 ​userinterps: Users can add interpreters written in any of the languages in !help languages. See !help addinterp, delinterp, show | !userinterps. List interpreters added with !addinterp. 03:51:00 `words --eng-all --eng-1M 25 03:51:08 nttn artfule mduanb sign lymansie lesce prive cassey avo headetero mameat ligh callywel lee pita gresanim ngib mannuatumiel halay far levelorre den maunem purastpe ranx 03:51:12 Ah. 03:51:20 mameat! 03:51:42 so artfule 03:52:04 that command would have completely timed out in my previous version. SO GOOD 03:52:09 "headetero mameat" is the sound of a man desperately trying to convince himself and others that he's straight while choking on another guy's wang. 03:52:25 Gregor: Could I upload a interpreter for a esolang I made (In a few hours...) and mess with it on HackEgo? 03:52:26 that's... an interesting interpretation. 03:52:35 DeadlyFugu: Sure. 03:52:52 DeadlyFugu: Within reason you can do pretty much whatever you want, that's the point *shrugs* 03:52:55 -!- kmc has quit (Quit: Leaving). 03:53:01 Cool. 03:53:04 -!- kmc has joined. 03:53:08 DeadlyFugu: Oh, you'll want `fetch btw. 03:53:11 Gregor: notice the improved pseudorandomness thanks to the installation of Math::Random::MT::Perl 03:53:14 I know. 03:53:23 kallisti: Man, it's SO MUCH MORE PSEUDORANDOM NOW. 03:53:27 Although wouldn't wget work? 03:53:41 DeadlyFugu: No (actually, highly restricted) network access. 03:53:45 it's so pseudorandom that you could easily mistake it for random 03:53:53 Oh, I see. 03:53:55 itidus21: Let's not get crazy. 03:54:11 Does `fetch have a limit? 03:54:15 (In filesize) 03:54:23 DeadlyFugu: Yes, it's the same as the limit on all files in the filesystem, 10M. 03:54:26 mersenne twister is actually pretty damn good, but I doubt it has any perceptible different in this case. 03:54:32 *difference 03:54:40 Oh, my intepreters tiny compared to that ^^ 03:56:23 DeadlyFugu: In case the distinction between ` and `run was unclear (and it's significant if you want to make an interpreter frontend), ` is parsed like shell #! lines: a command, one space, and then everything else is a single raw argument (even if it has spaces in it). `run is parsed by sh. 03:56:49 Ah, I see. 03:57:28 Maybe I'm stupid or something, but I can't mkdir 03:57:39 `mkdir foo 03:57:41 `ls 03:57:42 No output. 03:58:00 DeadlyFugu: It's a weird issue with how it handles persistence in the filesystem (that is, through Mercurial). It won't keep empty directories. 03:58:07 DeadlyFugu: Make sure to put something there in the same command line. 03:58:15 Why hasn't ls returned yet >_> 03:58:28 Gregor, noob question, how do I do both in the same command line? 03:58:32 MinesoVM \ bin \ canary \ karma \ lib \ paste \ quotes \ share \ wisdom 03:58:34 ; or && 03:58:37 DeadlyFugu: ; 03:58:42 && makes sure the last command was successful 03:59:06 DeadlyFugu: man sh 04:00:06 -!- kmc has quit (Quit: Leaving). 04:00:24 -!- kmc has joined. 04:02:03 Gregor, in chat shouldn't ` be unneeded? 04:02:08 s/chat/privmsg 04:02:22 DeadlyFugu: *eh* 04:03:36 -!- kmc has quit (Client Quit). 04:03:50 DeadlyFugu: I think it's better for a bot to act consistently regardless of where it's being used. 04:04:01 for example, bots that don't use a single prefix character for commands 04:04:03 like lambdabot. 04:04:19 fungot: and fungot, which is always consist 04:04:20 kallisti: so operation can be between aaa and a 04:04:26 exactly. 04:04:34 -!- MDude has changed nick to MSleep. 04:04:53 ^ fungot 04:04:57 Is there a reason http://esolangs.org/w/api.php is disabled? 04:05:08 "cp: missing destination file operand" I get that when I tried to move a .txt file, but moving an executable was fine? 04:05:26 DeadlyFugu: paste the command plz 04:05:40 Me: `cp ./source.txt ./Mineso/source.txt 04:05:53 Bot: cp: missing destination file operand after `./source.txt ./Mineso/source.txt' \ Try `cp --help' for more information. 04:06:11 DeadlyFugu: In case the distinction between ` and `run was unclear (and it's significant if you want to make an interpreter frontend), ` is parsed like shell #! lines: a command, one space, and then everything else is a single raw argument (even if it has spaces in it). `run is parsed by sh. 04:06:12 you have to use -T in that case. 04:06:18 DeadlyFugu: man cp 04:06:23 Oh. 04:06:35 And, uh, no, you don't have to use -T ... 04:06:51 oh 04:06:54 DeadlyFugu: use `run 04:06:59 I did. 04:07:02 Gregor: I misread the man :P 04:07:08 DeadlyFugu: not according to your paste. 04:07:12 and the error output 04:07:22 Er.. No, I mean, I did afterwards. 04:07:41 When Gregor quoted himself, I did. 04:07:47 oh 04:07:56 tl;dr 04:08:54 What? I can't cd? 04:08:59 you can 04:09:06 it doesn't remain between invocations 04:09:08 Oh sorry, needs run. 04:09:12 also that. 04:10:38 -!- kmc has joined. 04:14:15 -!- cswords_ has joined. 04:17:21 -!- cswords__ has quit (Ping timeout: 240 seconds). 04:18:01 -!- Patashu has quit (Ping timeout: 240 seconds). 04:28:28 -!- myndzi has quit (Read error: Connection reset by peer). 04:29:03 Gregor: "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv: 10.0.1) Gecko/20100101 Firefox/10.0.1" 04:29:13 Gregor: is there a possible safer User-Agent string to go with? 04:30:05 I guess the Mozilla/5.0 part is all that most web servers look for. 04:30:13 Safer in what sense? 04:30:31 To get the "normal" web page on requests 04:30:38 instead of, say, mobile pages. 04:31:28 All web sites are either agnostic to all non-mobile UAs or treat a (overly) strict set of substrings as the chosen ones, so even "Gecko" would probably be sufficient. 04:31:42 Gregor, can not execute binary file D: 04:31:49 chmod +x file 04:31:58 Did that, it won't execute. 04:32:03 -!- myndzi has joined. 04:32:08 It says permission denied if you don't do that. 04:32:19 ah. well then it can't execute the binary file. 04:32:24 DeadlyFugu: how did you compile it? 04:32:26 -!- GreaseMonkey has quit (Quit: The Other Game). 04:32:46 `ls bin 04:32:47 `file Mineso/MinesoVM 04:32:49 ​? \ @ \ No \ _tmpe \ addquote \ allquotes \ calc \ define \ delquote \ etymology \ forget \ fortune \ frink \ google \ hatesgeo \ json \ k \ karma \ karma+ \ karma- \ learn \ log \ logurl \ macro \ marco \ paste \ pastekarma \ pastelog \ pastelogs \ pastenquotes \ pastequotes \ pastewisdom \ pastlog \ ping \ prefixes \ qc \ quote \ quotes \ roll \ toutf8 \ translate \ translatefromto \ translateto \ units \ url 04:32:50 On Ubuntu 11.10 using normal make 04:32:54 -!- aloril_ has joined. 04:33:08 `ls 04:33:11 Mineso \ bin \ canary \ karma \ lib \ paste \ quotes \ share \ wisdom 04:33:16 -!- lifthrasiir has joined. 04:33:19 `run file Mineso/* 04:33:21 It doesn't use any libraries other then the standard C++ ones. 04:33:21 Mineso/MinesoVM: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.15, stripped \ Mineso/source.txt: ASCII text 04:33:23 Why won't it file for me >_> 04:33:27 Mineso/MinesoVM: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.15, stripped 04:33:33 kallisti: 64-bit only. 04:33:35 Err 04:33:37 DeadlyFugu: ^^^ 04:33:50 Oh, it's 64 bit? 04:33:58 D: 04:33:59 `run file /bin/bash 04:34:02 ​/bin/bash: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.18, stripped 04:34:10 Would appear so. 04:34:34 I'm from the FUTUUUUURE 04:34:35 Gregor: so do I even need to put platform information? Could I just have "Mozilla/5.0 Gecko/200101" ? 04:34:49 kallisti: Probably. 04:34:59 kallisti: elliott actually made a "perfect" UA a while ago. 04:35:09 `pastelogs elliott.*user.*agent 04:35:19 (Greppin' 1GB of logs woooh) 04:35:30 -!- aloril has quit (Ping timeout: 240 seconds). 04:35:31 -!- lifthras1ir has quit (Ping timeout: 240 seconds). 04:36:00 `logs mmap.*motherfucker 04:36:09 Gregor: not to mention the string "elliott" is going to get tested a lot. 04:36:20 ​/home/hackbot/hackbot.hg/multibot_cmds/lib/limits: line 5: exec: logs: not found 04:36:21 No output. 04:36:30 Grrrf, mine timed out X-D 04:36:32 `log mmap.*motherfucker 04:36:55 Two way of avoiding it finding the command to ask the logs: [1] Put square brackets around one letter [2] Send message to private 04:37:11 No output. 04:37:35 `log 04:37:37 kallisti: Oct 26 21:13:38 self.webkit_settings.props.user_agent = 'Mozilla/5.0 AppleWebKit KHTML Gecko Chrome Safari' 04:37:45 2007-02-25.txt:04:27:42: ~kill 0 04:37:46 lol 04:37:53 Gregor: are you sure that's perfect? 04:38:00 elliott claimed it was. 04:38:05 `log 04:38:09 2011-06-02.txt:19:57:44: No output. 04:38:12 It pretty much convinced everything that it was sufficiently up to date. 04:38:15 lol, good log choice. 04:38:30 -!- Madoka-Kaname has quit (Read error: Connection reset by peer). 04:38:55 after months of experience i discovered the raw `log command a few weeks ago 04:39:53 congrats. 04:40:13 Ffffs. 04:40:26 After years of experience, I discovered what a horimarmy rionnnsbecomphelcaequin this channel can be. 04:40:27 I got my interpreter working, but forgot to disable debug mode. 04:40:42 So he just returns random crap untill the cutoff, the script isn't ran at all >_> 04:40:58 -!- Madoka-Kaname has joined. 04:40:59 lol 04:40:59 -!- Madoka-Kaname has quit (Changing host). 04:40:59 -!- Madoka-Kaname has joined. 04:40:59 Well it's ran, but I can't see the output. 04:41:04 I will try to make the computer, it is the idea, to have both Forth and BASIC programming built-in, that can be accessed when turn on, but even if you don't know about those things you can still just put the disc and push START, or do other things 04:41:08 `run cd ./Mineso; ./mineso 04:41:11 MINESO VM V1 ALPHA \ COPYLEFT 2011 DEADLYFUGU \ Usage: ./mineso [filename] \ 45 \ 49 \ 10 \ 60 \ 49 \ 49 \ 49 \ 49 \ 49 \ 49 \ 49 \ 49 \ 49 \ 49 \ 49 \ 49 \ 49 \ 49 \ 49 \ 49 \ 49 \ 49 \ 49 \ 49 \ 49 \ 49 \ 49 \ 49 \ 49 \ 49 \ 49 \ 49 \ 49 \ 49 \ 49 \ 49 \ 49 \ 49 \ 49 \ 49 \ 49 \ 49 \ 49 \ 49 \ 49 \ 49 \ 49 \ 49 \ 49 \ 49 \ 49 \ 49 \ 49 \ 49 \ 49 \ 49 \ 49 \ 49 \ 49 \ 49 \ 49 \ 49 \ 49 \ 49 \ 49 \ 49 \ 49 \ 49 \ 49 04:41:36 -!- azaq23 has quit (Quit: Leaving.). 04:41:37 That's alot of 1s... 04:41:47 Gregor: for me, ork is the most interesting language i have seen.. the idea appeals to my sense of absurdity 04:42:07 !help userinterps 04:42:08 ​userinterps: Users can add interpreters written in any of the languages in !help languages. See !help addinterp, delinterp, show | !userinterps. List interpreters added with !addinterp. 04:42:12 this is my user agent on chrome: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/535.2 (KHTML, like Gecko) Chrome/15.0.874.121 Safari/535.2 04:42:14 !help languages 04:42:15 ​languages: Esoteric: 1l 2l adjust asm axo bch befunge befunge98 bf bf8 bf16 bf32 boolfuck cintercal clcintercal dimensifuck glass glypho haskell kipple lambda lazyk linguine malbolge pbrain perl qbf rail rhotor sadol sceql trigger udage01 underload unlambda whirl. Competitive: bfjoust fyb. Other: asm c cxx forth sh. 04:42:19 zzo38: Mac computers are like that, although sort of the inverse, you have to choose at startup to /see/ the Forth shell, not to boot without using it. It's pretty restrictive though. 04:42:22 (Also, only Forth) 04:42:32 !haskell [] ++ [] 04:42:40 ​[] 04:42:50 Gregor: so it pretty much covers all of the same points. 04:42:59 itidus21: I assume you've seen http://esolangs.org/files/ork/src/beer.ork 04:43:17 Gregor: I know how that works because I have worked with that things before. However my idea a bit different. 04:43:19 kallisti: Yup, that's Chrome alright. I still prefer elliott's though. 04:43:26 i hadn't seen it until just now 04:43:54 Gregor: there's less stuff to maintain for future released of rolebot :P 04:43:58 *releases 04:45:20 Well, my interpreter totally isn't intended for use over IRC, but it works ^^ 04:45:31 `run cd ./Mineso; ./mineso 04:45:39 DeadlyFugu: You'll probably want to put a script around it to pass in source. 04:45:57 What do you mean? 04:46:03 MINESO VM V1 ALPHA \ COPYLEFT 2011 DEADLYFUGU \ Usage: ./mineso [filename] \ Hello World! \ \ VM END \ Press ENTER to continue... 04:46:26 As you can see, there's a tiny little 'Hello World!' amungst the rest of that XD 04:46:27 kallisti: You could have the web page for rolebot (whatever this is) grab all user agents and then just barf together all the words it finds. 04:46:44 Gregor: web page? ha. ha. ha. 04:47:36 Gregor: also rolebot is a bot written in perl that, among other things, is intended to facilitate pen and paper RPGs over IRC. 04:47:39 Oh by the way guys, HackEgo has a wiki counterpart: http://hackiki.org/ 04:48:26 Gregor: oh I know. I just have no use for it. :P 04:49:01 Probably I intend to include a few features of other computer BASIC so that the programs from other books are mostly compatible with it. I am not exactly sure how to put both Forth and BASIC; but an idea I have is to make the BASIC interpreter just a program written in Forth and accessible by typing BASIC at the ok prompt. 04:50:40 Gregor: I could include every operating system name just for good measure. 04:50:50 but I think that's not needed. 04:50:50 (Of course whatever I decide, the book will need to specify how it works for the computer will need to specify how it works.) 04:50:51 kallisti: That's the way! 04:51:06 Lesse if I can grep some nonsense out of my server logs. 04:51:33 Windows Linux FreeBSD Mac NT 4.54 2.3 1.0.1 6.2 10.0.1 04:51:38 zzo38: is the idea a universal basic? 04:51:44 just random operating systems and version numbers. 04:53:05 oh i scrolled up now 04:53:06 itidus21: Mostly, yes. 04:53:24 `run words --eng-fiction 50 04:53:34 lei ilatul outio borhyn bearne outhweibersle chin book term marium kenne mensign cunit onfy famitschl orgain sinsubser gabble swomen casica phsonnarentcr scan vetual clcwined wherrurin dem blc pet fel figula tushippebacu hool larez know pustfunk ntting fuffectu zff govi cuddammaesuly ctic the vatingdon ted wyd stersvil cwl ant compric albachype 04:54:13 kallisti: Grepping my server logs suggests the following: http://sprunge.us/TLiJ 04:54:24 zzo38: the biggest problem with the idea is that it's impossible 04:54:25 hahahaha nice. 04:54:27 `run cd ./Mineso; ./mineso 04:54:30 output: Hello World! 04:54:42 Woo, no more long waiting or useless text! :D 04:54:43 Gregor: well, I pretty much have to use that as a user agent. 04:54:56 Yup 04:55:05 my bot will be a veritable chameleon of the internet. 04:55:06 itidus21: I know it is impossible; that is why I try to make it almost 04:55:09 literally all things at once. 04:55:10 DeadlyFugu: Prefixing it with "output: " is pretty weird though. 04:55:14 ;_; 04:55:16 kallisti: More like a horrible chimera. 04:55:31 Gregor: oh I should remove "mobile" though 04:55:32 Gregor, I guess so. 04:55:59 kallisti: Darn, you're right! My greppage isn't smart enough :( 04:56:06 GINGERBREAD 04:56:10 I wonder what that is 04:56:15 zzo38: i like the subculture/scene/underground of 8bit basic too... even though i am not so good at it 04:56:19 MRSPUTNIK wtf 04:56:21 kallisti: Android. 04:56:28 (Android Gingerbread) 04:56:42 Y'know, ever since I gave up on the tongue-face smiley, I'm capable of a much wider range of emote-ions than I ever was before. 04:56:45 Maybe the startup screen should display the information about version number, GNU GPL notice, notice to push START for run inserted software and other button for file manager and configuration menu and so on, note to type in BASIC for writing programs in BASIC, possibly a few other things, and the Forth "ok" prompt. 04:56:46 "http://www.redtube.com/84424 04:56:51 looooool 04:56:55 I think I'm almost to one week. 04:56:59 ^porn 04:57:15 I intend the book will include all the Forth commands available and all the BASIC commands available. 04:57:26 NORMALLY I would yell at you for posting porn, but since you noted that several lines later, I guess it's OK >_> <_< 04:57:28 http://img820.imageshack.us/img820/1641/itsfinetrustme.png 04:57:33 And they still haven't fixed it 04:57:58 itidus21: Which specific systems for example? Which have you used mostly? 04:58:00 zzo38: what i am wondering is are you intending to have one interpreter which can handle any program written in any old listing of basic programs? 04:58:15 mostly just qbasic 1.0 on 8086/80286 04:58:32 Lol NihilistDandy. I think they're trying to tell you it's fine. 04:58:37 Gregor: it's my Markov bot reflex. 04:58:47 or maybe my spam bot reflex 04:58:50 I have one of those too. 04:58:50 DeadlyFugu: I'm in the Super Meat Boy database… right now. 04:58:54 wut 04:59:11 zzo38: the brute force method would seem to be just emulating every known platform ;_l 04:59:16 ^ ;_; 04:59:24 NihilistDandy, that does look pretty dangerous. 04:59:28 itidus21: Yes, I intend that you can handle most (I cannot possibly handle all) program from old type-in program books. For some purposes, I can have optional OPTION commands to set up various things if needed 04:59:38 DeadlyFugu: It is absolutely retarded 05:00:07 And that image has been up on /r/gamedev for nearly a full day 05:00:13 http://sourcereal.com/ I wonder what the purpose of this site actually is. 05:00:26 Such as, OPTION EMULATE to set other options to closely match a specific computer, OPTION SPEED to insert delays between commands to make it slow down, OPTION CHARSET to change character sets, and so on. 05:01:02 Cereal can be defined as something that is made from cereal. One can put it in a bowl, on a plate, or leave it in a box. Cereal is a nice thing to think about and sometimes eat. Sour cereal is an example of a type of cereal with spices. 05:01:03 Wow, they could really do with a better password then 'editor' 05:01:14 And that in most generic BASIC programs, no OPTION commands will be needed. 05:01:59 srsly 05:02:07 I could give the emulation files different names if necessary so that I do not have to use their trademarks 05:02:19 Gregor: I'm guessing "libwww" is is likely "libwww-perl" 05:02:45 Gregor: obviously someones LWP code is not as sophisticated as /mine/ 05:02:54 zzo38: branching to another of your old topics, although i have had arguments over NES emulation, what i have in mind is not actually to emulate a NES 05:03:31 but rather to build a NES-like thing from the ground up for a modern operating system which uses efficient means to carry out the tasks 05:03:54 kallisti: lol 05:03:57 Woo. It's surprisingly fun using your esolang over IRC XD 05:05:28 yes IRC programming is the best kind 05:05:42 itidus21: Sorry, I do not completely understand. 05:06:07 > 2 + 2 --I love when this times out 05:06:07 4 05:06:25 it does it quite frequently with my bot. Probably a result of my constantly abysmal network connection. 05:06:41 er, well, no 05:06:43 that doesn't make any sense. 05:06:50 I don't really know why it does that. 05:08:02 zzo38: like uh.. the nes graphics primitive is just those little 8x8 blocks.. and this can be really be expressed in windows api terms as: bitblt(memdc1,0,0,8,8,memdc2,0,0,SRCPAINT); (apologies for windows reference since i am not linux-knowing) 05:08:06 why is optimizing Haskell so satisfying. 05:08:18 had to look up that stupid function of course 05:08:30 DeadlyFugu: did you figure out how to get your interpreter working with a script? 05:08:40 kallisti: Somewhat. 05:08:48 `run cd ./Mineso; ./mineso square.txt 05:08:52 `run cd ./Mineso; ./mineso square.txt 05:08:55 output: 81 \ 05:09:00 so. no 05:09:06 Should be called power, not square. 05:09:13 in other words you can't do things like 05:09:13 itidus21: I would probably use SDL instead that way it work on Windows and on Linux. 05:09:22 `mineso (code here) 05:09:25 ​/home/hackbot/hackbot.hg/multibot_cmds/lib/limits: line 5: exec: mineso: not found 05:09:29 zzo38: well then SDL fits my idea too 05:09:29 Now that'd be cool. 05:09:34 DeadlyFugu: it's also possible. 05:09:50 I'm slack, so I'll write a shell script that does that ^^ 05:10:01 I'll give you a hint: hackego puts everything into the first argument to the command. 05:10:08 zzo38: and you could also replace the weird NES sound coding with actual sound files 05:10:15 so, in sh, that would be $1 that refers to your program text. 05:10:25 Ah, thanks. 05:10:52 or you could work it out somehow so that its trivial to add sounds 05:10:56 itidus21: It could, but you still might want audio synthesis like the NES or whatever 05:11:41 DeadlyFugu: also you will need a #!/bin/sh line at the top of your script 05:11:44 hmm.. my ideas keep growing in scope as i explain them... overall i suppose i am saying that you could have a gamemaker which will produce neslike games 05:12:09 Still, I think you should just make it actual NES/Famicom game. 05:12:19 kallisti: How can I put in a newline over IRC? 05:12:36 (I'm doing `run echo "Text" > file.name 05:12:41 two different ways 05:12:58 the best one is (echo "blah"; echo "blah") > file 05:13:01 I think. 05:13:04 or is it {} that's better? 05:13:10 Gregor: halp 05:13:14 (Some people do still write NES game today) 05:13:22 I need a newline after #!/bin/sh though. 05:13:29 DeadlyFugu: okay. that's how you do it. 05:13:38 DeadlyFugu: echo appends a newine to the end of things. 05:13:42 Oh. 05:13:59 another way is echo "blah" > file; echo "blah" >> file 05:14:23 zzo38: but they spend most of their time masochistically hacking away to achieve simple results :-s 05:14:27 itidus21: have I told you about portal chess? 05:14:33 * Gregor reappears. 05:14:40 Ohai 05:14:44 is {} better or () better 05:14:47 for the thing 05:14:52 yes. the thing. 05:14:54 I usually use () *shrugs* 05:15:00 in a way, nes coding is a bit of an esolang 05:15:08 noone in their right minds would make a game that way 05:15:21 itidus21: You could emulate GameBoy, or even GameBoy Advance, if NES is not good enough for it. But you really can make many thing with NES so you can try that. 05:15:49 the syllogism is indeed that noone in their right minds would use an esolang 05:15:59 itidus21: says the person who lives in the present, where computers are reasonably fast. 05:16:07 and have huge stores of memory. 05:16:16 Well, you do not have to be in your right minds, then, I suppose. 05:17:37 sorry guys im not serious 05:17:39 assuming a lack of civilization collapse, people of the future will probably scoff at the notion of writing programs with a keyboard and a linear stream of symbols. 05:18:07 i think a definition of my terms is in order 05:18:19 kallisti, are you suggesting 2D programming languages? D: 05:18:36 well most "2D" programming languages are still written in this way. 05:18:37 so no. 05:18:50 I'm actually not suggesting anything. 05:18:55 noone who wants to complete a reasonably complex program within an efficient timeframe would use an esolang in my uneducated opinion 05:19:03 Just stating that our current programming methods will be outdated at some point. 05:20:48 i am in a kind of hell where i am not sure if applications or languages are my priority 05:20:53 hmmm, what should I write in Haskell 05:21:06 itidus21: sounds like shitty priorities. 05:21:20 but between the two I'd go with languages. 05:21:21 its just objectivity 05:21:29 kallisti, my script doesn't work :S 05:21:36 Just says 'no output' 05:21:36 DeadlyFugu: what's it complaining about? 05:21:36 kallisti: Write ephemeris software to calculate how far is from here to the moon 05:22:03 I'm bad at astronomy 05:22:16 theres little holes that have crept into my logic over the decades 05:22:27 kallisti: Then learn by looking at Wikipedia. 05:22:33 i don't know how they got there 05:22:51 maybe it's all this aspartame 05:22:55 zzo38: eh... 05:24:13 I might write my portal chess backend/server in Haskell. 05:24:30 Yes make a chess 05:25:14 portal chess haha. 05:25:21 yes, it's a thing I made. 05:25:25 I just haven't written down the rules yet. 05:25:27 sounds like fun, what are the rules? 05:25:32 oh god. 05:25:33 i mean, when/how do you place portals 05:25:36 can I summarize? 05:25:40 please do :P 05:25:44 i'm just curious what the idea is 05:26:05 your bishops are portals, the direction they're facing determines the portal opening. 05:26:23 they also no longer move like bishops, and instead move more like a knight but with an extended range. 05:26:37 Trololol, kallisti it wasn't working cause I couldn't code in my own esolang 05:26:39 and you're SOL if one gets captured? 05:26:50 Works fine if I use correct syntax 05:26:56 if one gets captured the other one explodes, capturing everything adjacent to it. :) 05:27:28 but portals will be marginally difficult to capture, because they can jump over pieces like knights, and also can't be captured from the direction they're facing. 05:27:43 that does make it kind of interesting 05:27:52 inb4 portals in the corners 05:27:53 :P 05:27:57 other pieces have this directionality property as well. Each turn you can move a single piece and, if it has directionality, rotate its direction 05:28:07 you may also choose to keep a piece stationary and rotate it alone. 05:28:42 playetested at all, or just an idea? 05:28:44 Killisti: Are there lies about getting cake at the end of the game? 05:28:49 myndzi: just an idea. 05:28:51 s/Ki/ka 05:28:53 aha 05:28:53 DeadlyFugu: no. 05:29:03 :( 05:29:14 Anyway, got a script thingy working ^^ 05:29:21 `./min.sh "-11=111111<1>11111111111]1" 05:29:24 kallisti: not only have you told me about portal chess but i got quite deep into the discussion.. \o/ but it was a long time ago 05:29:24 output: 5 \ 4 \ 3 \ 2 \ 1 \ 0 \ 05:29:50 the primary offensive pieces are the cannons, which are the rooks. one is upside down, and can shoot in any diagonal direction. the other shoots in cardinal directions. they move like kings. 05:30:08 they're unique in that they have projectile capturing ability. 05:30:12 haha, it makes me think of the cannons in mario in the airships 05:30:19 BOOM *rotate* BOOM 05:30:21 and projectiles interact with portals in the way you would expect. 05:30:53 but currently the rules d not specify that cannons have a direction, they can shoot any direction they're capable of shooting. 05:31:01 their slow movement counteracts this ability. 05:31:11 but they're important pieces. pretty much every piece is vital. 05:31:13 i'm curious how knights interact with portals ;) 05:31:32 -!- augur has quit (Remote host closed the connection). 05:31:34 since they don't really move "through" squares 05:31:35 one interesting aspect of nature is that everything in our environment is accepted... in our work we never change our environment from being invalid to being valid 05:31:41 somehow it is _always_ valid 05:31:57 there are no mistakes 05:32:18 as in... a mistake is merely a subjective interpretation 05:32:22 knights are called arrows, and move like bishops. their direction is the way their nose faces. any projectile that crosses an arrows path is redirected in the direction of the knight. 05:32:36 or is that just my own world view? 05:32:45 arrows ignore ownership of projectiles, and are immune to both (ignoring special exceptions to this rule) 05:33:07 my weird world view which leads me to difficulties in socializing 05:33:38 ah 05:34:23 so the way I see the game working is that in early game you want to get your arrows out 05:34:36 which act as proxies to your cannons. 05:35:09 sounds like a whole lotta bouncin' going on 05:35:12 also there's a huge variety of tricks you can pull. players will need to be careful of how they use arrows because careful planning by your opponent can allow him to turn your arrows against you. 05:35:15 did you ever play... uhh, chase? 05:35:17 i think it's chase 05:35:33 uh.. like.. theoretically there are no erroneous chessboard configurations 05:35:48 it's basically on a hex "cylinder" with dice as your pieces 05:35:49 although some of them may be garden of eves 05:36:01 you can move the number of spaces indicated on the face of your die 05:36:11 and when you capture dice, your opponent has to compensate with other dice 05:36:24 also bouncing around and reflection involved 05:36:39 I made a chess variant once, where in addition to chess pieces you also put dice on the board 05:36:58 zzo38: hey man you just gave me a great idea there 05:37:02 i made a craps variant, where instead of throwing dice you threw bishops against a wall :v 05:37:16 I haven't really decided what I want the queen to do, but currently the queen is the prism, and acts like an arrow except that a) it is directionless, the player can choose the direction of projectile travel as it occurs b) prisms die from unfriendly projectiles c) projectiles that pass through a prism can capture arrows 05:37:48 imagine if each chess piece token was infact an object with the letters on its sides P,R,Kn,B,Q,K 05:37:50 myndzi, what about a craps variant where you through real crap? 05:37:58 the king moves and captures like a king from chess. pawns, for now, move like pawns. 05:38:12 and suppose you had 2 sets of dice.. of different colours 05:38:17 itidus21: Just use the letter N not Kn for knight 05:38:26 DeadlyFugu: nah, that's the "shits" 05:38:27 ;) 05:38:39 zzo38: is that what you had in mind, or did i just describe something altogether different? 05:38:45 I see what you did there. 05:39:05 itidus21: In the came I made, you did have two black dice and two white dice. And the numbers did correspond to different kind of FIDE chess pieces. 05:39:12 So it is similar to your idea 05:39:36 well it is your idea.. i just figured it out 05:40:04 myndzi: I intend to playtest it online most likely. 05:40:11 you could have like 32 such dice 05:40:12 It is similar to my idea 05:40:17 probably the most convenient way ;) 05:40:23 Yours is another idea 05:41:15 maybe arrows shouldn't move like bishops though. because they restricts them to one board color. 05:41:21 the primary advantage being that if you lost a piece you can replace it with any old die 05:41:36 This is my game: http://www.chessvariants.org/index/msdisplay.php?itemid=MS123456chess 05:42:03 wat 05:42:06 jaedong is getting raped 05:42:36 i haven't seen any of his games for a long time but.. oh how the mighty have fallen? 05:42:58 myndzi: what do you think about the rules? 05:43:14 I can also show you a completed game of 123456 Chess, and a game that has not been completed, if you want to. 05:43:54 i was sort of half watching starcraft lol, i just asked because i wanted to know how the portals worked 05:43:59 it doesn't sound much like chess but that hardly matters 05:44:11 i have no idea how it would play, but it sounds like fun 05:44:21 definitely a computer game 05:44:25 you could also use playing cards as chess pieces.. one side red.. one side black.. using hearts and clubs as pawns.. king and queen as king and queen 05:45:40 :o 05:45:41 itidus21: Yes, I have thought of something similar to that too. Not only that but a few other people have invented some chess variants that use cards 05:45:53 i guess you could deal them face down 05:45:56 that could be fun 05:45:58 Gregor, is every file update to the HackEgo bot uploaded to the mercurial repo? 05:46:06 @tell Ngevd More fun Haskell programs. A program that generates palindromes in a given alphabet: http://hpaste.org/steps/49131 05:46:06 Consider it noted. 05:46:22 LOL 05:46:23 wtf 05:46:28 DeadlyFugu: It's not "uploaded" per se, the Mercurial repo /is/ the filesystem. 05:46:29 this comercial 05:46:37 Ooh. 05:46:45 some kid just flushed snow down a toilet and it sprinkled all over this little girl who was like YAY SNOW 05:47:00 Wow lol, I've flooded the thing. 05:47:11 zzo38: i guess if we keep thinking for years and years we will strike upon good things 05:47:21 http://codu.org/projects/hackbot/fshg/ < I wonder if I ran any commands... 05:47:31 itidus21: Chinese chess and Japanese chess game uses flat pieces, which I prefer over the 3D figures that FIDE chess uses. 05:48:31 good point 05:48:32 Do you understand the rules for the 123456 Chess? 05:49:10 i didnt read it all 05:49:50 ah ok.. so you start with all pieces... except with addition of chess pieces 05:50:38 2 pieces starting in the same place.. that sounds like it could work better in computerized chesses 05:50:50 shogi is fun 05:50:59 i like the capturing mechanic 05:51:10 place sharing.. cool idea 05:51:39 myndzi: Yes, I like shogi, too 05:51:53 itidus21: Well, the checkers are flat so you can easily put the rook on top of it 05:52:09 is that a common rule, having 2 pieces sharing one space? 05:52:21 it seems highly unorthodox 05:53:25 itidus21: Not very common, although there are a few variants where pieces can share spaces 05:53:51 i must admit thats something i never imagined 05:54:25 so suddenly i can imagine that a pawn could ride on a knight :D 05:55:08 itidus21: Not with standard FIDE pieces, however. If you used flat pieces then it might be able to make pieces ride on other pieces 05:55:24 step 1) knight jumps out as per usual.. step 2) pawn hops on it (riding it).. step 3) when knight moves, pawn is moved with it 05:55:31 You could also use checkers pieces which other pieces can ride on top of 05:55:49 itidus21: lol 05:56:05 Gregor, I can put a page about my language onto the wiki right? (Sorry for annoying you, I just don't want to do anything wrong) 05:56:20 i think it would be reasonable to say you can only dismount with a valid pawn move.. 05:56:33 and the knight cannot dismount.. it has to be the pawn that dismounts 05:57:09 the stacking would be easier with dice :P 05:58:20 > let bfStrings = filter balanced 0 $ (`replicateM` "+-[].,") =<< [0..] where { balanced 0 [] = True; balanced _ [] = False; balanced 0 (']':_) = False; balanced n ('[':xs) = balanced (n+1) xs; balanced n (']':xs) = balanced (n-1) xs; balanced n (x:xs) = balanced n xs} in bfStrings 05:58:21 Couldn't match expected type `GHC.Bool.Bool' 05:58:21 against inferred type ... 05:58:23 also.. you could allow for enemy pawns to capture your knights 05:59:01 > let bfStrings = filter (balanced 0) $ (`replicateM` "+-[].,") =<< [0..] where { balanced 0 [] = True; balanced _ [] = False; balanced 0 (']':_) = False; balanced n ('[':xs) = balanced (n+1) xs; balanced n (']':xs) = balanced (n-1) xs; balanced n (x:xs) = balanced n xs} in bfStrings 05:59:01 ["","+","-",".",",","++","+-","+.","+,","-+","--","-.","-,","[]",".+",".-",... 05:59:23 a bit more efficient than the last one I wrote. 05:59:45 assuming GHC isn't amazing at optimization 06:03:31 DeadlyFugu: Yes, you can do so but it has to be public domain. 06:04:00 (That is, the article text has to be public domain. External implementations can be GNU GPL or whatever if you want to) 06:04:16 i don't imagine these ideas of mine make games any more strategically interesting, but still, the idea of a pawn riding a rook reminds me of riding a train.. and then teres the idea of a piece which can be loaded with unlimited other pieces 06:04:17 Oh, cool... Just how? 06:04:41 Do I just add a new page about my language and put it in the language category? 06:05:45 (Also, turing-complete just means the language could be turing complete. The implementation could have a drastic limit of 256 bytes of RAM or something, right?) 06:06:12 yes theoretical machines and physical machines are different things. 06:06:21 DeadlyFugu: Yes, just add a new page, put it in the language category, and add it to the language list. 06:06:46 itidus21: Then suggest using flat pieces as in Chinese chess 06:10:22 How well can this program be understood if you do not know about BytePusher, or if you do know about BytePusher: http://zzo38computer.cjb.net/prog/BytePusher/Munching_Squares.pushem 06:11:29 DeadlyFugu: Turing-complete is Turing-complete. 06:11:46 NihilistDandy: that's helpful 06:11:51 lol 06:12:06 Eeyup, I never thought of that. 06:12:12 Just do what oerjan did with 3-cell BF :D 06:12:53 That is, model a system you know to be Turing complete in your language 06:13:10 Well, I think mines turing complete. 06:13:15 DeadlyFugu: the idea with turing-completeness is that the memory is /unbounded/. Of course physical limits exist, but we're more interested in the capabilities of the language when given as much memory "as it needs" 06:13:29 Oh, my language could totally do that. 06:13:47 Ifs and gotos are practically sufficient, if not a completely accurate metric 06:13:52 Although it's highly impracticable... 06:13:58 DeadlyFugu: there are several ways to test turing completeness. Sometimes an easy way to prove it isomorphic to another language. Sometimes an easy way to do this is to write a brainfuck interpreter. 06:14:06 however in some languages this is not as easy as it sounds. 06:14:17 Yeah, that's impossible to do in mine. 06:14:23 Well, nearly. 06:14:34 Have you posted the description yet? 06:14:42 One could hand-convert it, but I doubt I could write a program. 06:14:55 Nope, trying to figure out how to format it by looking at others. 06:14:55 DeadlyFugu: hand-convert = isomorphism 06:15:00 Post description so we can JUDGE YOU 06:15:05 Okay, fine. 06:15:09 :D 06:15:47 DeadlyFugu: for example, some languages prove it by saying "oh well this is equivalent to >, this is equivalent to <, this is equivalent to [, etc" 06:16:00 I can almost do that. 06:16:02 If you format it wrong, that is OK because it can be corrected (by you or by someone else) 06:16:03 that's essentially what an isomorphism is. 06:16:09 Wait, I can. 06:16:45 DeadlyFugu: well if you can't possibly write a brainfuck interpreter I'd say it's not really turing complete. if you can, but it's difficult, that's another thing.. 06:16:52 that means you may want to try another way. 06:17:59 DeadlyFugu: if + goto + unbounded memory that can be accessed 06:18:17 "at an arbitrary location at an arbitrary point in time" 06:18:22 probably means it's turing complete. 06:18:34 Ah. 06:18:46 Some esolangs are made up it is difficult to figure out the computation class 06:18:52 indeed. 06:18:52 Well, I'm going to just say mine is, since I can convert all of mine into BF equivalents. 06:19:12 yes. 06:19:22 But can you convert any brainfuck code into your program too? 06:19:36 Kindof. 06:19:44 Link? 06:19:59 Er... I'm trying to write it but I keep typign here. There is no link yet XD 06:21:39 How would I format a link to the interpreter? 06:22:07 It appears to go under a 'External Resources' header... 06:22:18 Meh, I'll just save now. Set up a .zip for the interpreter later. 06:22:26 Use [ and then the URL and space and text and ] 06:22:39 Put * at the front of the line to make a bulleted list 06:22:53 NihilistDandy, link so far: http://esoteric.voxelperfect.net/wiki/Mineso 06:23:07 The bot on here can run code written in it, I got my interpreter set up on it. 06:23:15 Unary… interesting 06:23:21 Example? 06:23:27 `./min.sh "-1<11<111>11111111111" 06:23:30 output: 5 \ 06:23:34 That adds 2 and 3. 06:24:16 '-1' tells it to use the addition cell, <11 tells it to put 2 in, <111 tells it to place a three in. Due to it being the addition cell, it adds it onto the previous value making it 5. 06:24:33 What are the trailing 1s? 06:24:36 >11111111111 prints it as an int (I need to make that shorter :S) 06:24:38 Ah 06:24:50 >1111111 is available, and makes sense. 06:25:01 (It's one more then 'print as ASCII char') 06:25:15 Please add more description 06:25:19 `./min.sh "-1<11<111>111111" 06:25:22 output: . 06:25:26 I'm doing that right now. 06:25:35 Aw, no casts :D 06:25:43 `./min.sh "-1<111111111111111111111111111111111111111111111111111111111111111111111111>111111<11111111111111111111111111111>111111<1111111>111111>111111<111>111111=11111111111111111111111111111111>111111<1111111111111111111111111111111111111111111111111111111>111111<111111111111111111111111>111111<111>111111>11-11<111111>111111<11111111>111111=111111111111111111111111111111111>111111" 06:25:46 output: Hello World! 06:26:09 Unary map to ASCII values? 06:26:30 That's a short Hello World, I could make it a tad shorter if I used the multiplication cell to make the longer numbers. 06:26:40 The unary are treated as unsigned chars. 06:26:56 `cat min.sh 06:26:59 ​#!/bin/sh \ cd ./Mineso \ echo $1 > temp.txt \ ./mineso temp.txt 06:27:27 `ls ./Mineso 06:27:30 MinesoVM \ count.txt \ mineso \ source.txt \ square.txt \ temp.txt 06:27:34 Yeah, the interpreter is a program made in C++ 06:27:47 `cat ./Mineso/source.txt 06:27:50 ​-1 \ <111111111111111111111111111111111111111111111111111111111111111111111111 \ >111111 \ <11111111111111111111111111111 \ >111111 \ <1111111 \ >111111 \ >111111 \ <111 \ >111111 \ =11111111111111111111111111111111 \ >111111 \ <1111111111111111111111111111111111111111111111111111111 \ >111111 \ <111111111111111111111111 \ >111111 \ <111 \ >111111 \ >11 \ -11 \ <111111 \ >111111 \ <11111111 \ >111111 06:27:54 Neat 06:28:07 `cat ./Mineso/MinesoVM 06:28:10 ​ELF... 06:28:12 That's just a hello world program (With newlines. Like BF, it doesn't care for anything that isn't a recognised symbol) 06:28:24 Nihilist, it's written in C++ ^^ 06:28:30 `cat ./Mineso/square.txt 06:28:33 ​-1111111=111-11=1111-1=@1111111>111=1>11=@11]11111111@111>11111111111 06:28:44 That should be called power, not square >_> 06:28:48 `./min.sh -1111111=111-11=1111-1=@1111111>111=1>11=@11]11111111@111>11111111111 06:28:51 output: 81 \ 06:28:58 That's 3 to the power of 4. 06:29:37 The second and fourth unary values in there are 3 and 4. Change those to get a different value, but remember the output is a unsigned char (So it'll be mod 256) 06:30:36 `./min.sh -1111111=11111-11=111-1=@1111111>111=1>11=@11]11111111@111>11111111111 Five to the power of three 06:30:38 output: 125 \ 06:30:46 What's "=" 06:30:47 ? 06:31:02 The = is set. 06:31:21 Even if the cell is a special cell like addition, it'll be set to the following value. 06:31:30 I look forward to the spec, then 06:31:37 I'm working on it. 06:31:44 Thanks ^^ 06:43:11 -!- PiRSquared17 has quit (Quit: ChatZilla 0.9.88 [Firefox 9.0.1/20111220165912]). 06:49:08 >bf .,|a 06:49:29 oops wrong way 06:49:36 >bf ,.|a 06:49:48 ok.. where have i gone wrong here :-D 06:49:57 wrong bf? 06:51:24 I think > is the wrong prefix and you need ! to separate program from input instead of | 06:51:31 oh 06:51:48 `bf ,.!a 06:51:51 ​/home/hackbot/hackbot.hg/multibot_cmds/lib/limits: line 5: exec: bf: not found 06:52:42 You might need the full word "brainfuck" 06:52:48 ill figure this out 06:53:04 `log ,\[.,\] 06:53:34 2007-12-30.txt:21:43:02: say (parse ",[.,]") 06:53:53 `log bf ,\[.,\] 06:54:02 2009-05-03.txt:08:29:05: !daemon cat bf ,[.,] 06:54:09 I don't know for sure what is the correct way, though 06:54:13 `log bf ,\[.,\] 06:54:19 2008-10-10.txt:20:15:34: +ul ((^bf ,[.,]!+ul )SaS(:^)S(optbot)!):^ 06:54:22 Maybe the prefix is ! instead of ` 06:54:26 aha... the carat 06:54:43 ^bf ,.!a 06:54:43 a 06:54:50 score! 06:55:44 Yes, ^ is the correct prefix 06:55:49 I forgot 06:56:15 was not substantially hard to determine thanks to log 06:57:31 ^bf ,..........!a 06:57:32 aaaaaaaaaa 06:58:07 ^bf ,..........>,.<.!ah 06:58:07 aaaaaaaaaaha 07:01:11 ^bf +++++,[.-]>,.<.!ah 07:01:11 a`_^]\[ZYXWVUTSRQPONMLKJIHGFEDCBA@?>=<;:9876543210/.-,+*)('&%$#"! ..h 07:01:18 oops 07:03:13 ^bf ,>+++++[<.>-]>,.<.!ah 07:03:13 aaaaah 07:03:53 ^bf ,>+++++[<.>-],.<.!ah 07:03:53 aaaaaha 07:10:48 NihilistDandy, http://esoteric.voxelperfect.net/wiki/Mineso Did I miss anything? 07:10:59 (I haven't gotten around to putting in examples yet, I know) 07:12:18 Looks good 07:16:30 i think my typing above shows im not exactly an esolang wizard 07:16:43 but still, i approve of mineso 07:23:35 thanks ^^ 07:24:26 i think memory mapping is cool 07:27:20 i guess thats not quite what you're doing there, but it reminds me of it.. maybe it is 07:27:37 blahh 07:27:51 I dunno what I'm doing there XD 07:30:06 wow so 07:30:08 for once I can say 07:30:16 that autovification is actually a pain in the ass sometimes. 07:32:46 !perl %h = (1 => 2); $h{foo} = 'bar'; print %h 07:32:48 12foobar 07:32:57 !perl %h = (1 => 2); $h{foo}->{bar}; print %h 07:32:57 12fooHASH(0x7f87b333cb98) 07:33:07 * itidus21 ponders what a samurai would look like in a plague doctor mask 07:33:11 !perl %h = (1 => 2); $h{foo}->{bar}; print keys %h 07:33:11 1foo 07:33:49 !perl %h = (1 => 2); $h{foo}->{bar}; delete $h{foo}; print keys %h 07:33:50 1 07:36:07 basically merely dereferencing causes a data structure to be created. I think it should only occur when a dereference is assigned to. 07:36:39 as checking a dereference path does not suggest that you want it to exist in the future. 08:00:37 @hoogle (Read a, Show a) => String -> (a -> a) -> String 08:00:38 Prelude iterate :: (a -> a) -> a -> [a] 08:00:38 Data.List iterate :: (a -> a) -> a -> [a] 08:00:38 Prelude dropWhile :: (a -> Bool) -> [a] -> [a] 08:04:46 > (\x -> x ++ " bottles of beer on the wall. " ++ x ++ " bottles of beer. Take one down pass it around " ++ show(read x - 1) ++ " bottles of beer on the wall. ").show =<< [99,98..1] 08:04:48 "99 bottles of beer on the wall. 99 bottles of beer. Take one down pass it ... 08:05:03 @pl (\x -> x ++ " bottles of beer on the wall. " ++ x ++ " bottles of beer. Take one down pass it around " ++ show(read x - 1) ++ " bottles of beer on the wall. ").show =<< [99,98..1] 08:05:05 ap (++) ((" bottles of beer on the wall. " ++) . ap (++) ((" bottles of beer. Take one down pass it around " ++) . (++ " bottles of beer on the wall. ") . show . subtract 1 . read)) . show =<< [99, 08:05:05 98..1] 08:05:22 beautiful 08:12:00 kallisti: 08:12:01 @pl (\ l b c f i -> l (b c f i)) 08:12:01 (.) . (.) . (.) 08:12:27 More beautiful 08:12:32 > let f = (++ " bottles of beer").show; g = (++" on the wall").f in (\x -> g x ++ f x ". Take one down pass it around, " ++ g x) =<< [99,98..1] 08:12:32 Couldn't match expected type `[GHC.Types.Char] -> m' 08:12:33 against inferr... 08:12:42 > let f = (++ " bottles of beer").show; g = (++" on the wall").f in (\x -> g x ++ f x ++ ". Take one down pass it around, " ++ g x) =<< [99,98..1] 08:12:43 "99 bottles of beer on the wall99 bottles of beer. Take one down pass it ar... 08:12:56 > let f = (++ " bottles of beer").show; g = (++" on the wall. ").f in (\x -> g x ++ f x ++ ". Take one down pass it around, " ++ g x) =<< [99,98..1] 08:12:58 "99 bottles of beer on the wall. 99 bottles of beer. Take one down pass it ... 08:17:56 -!- oerjan has joined. 08:19:09 @pl (\g f x -> g x ++ f x ++ ". Take one down pass it around, " ++ g (x-1)) 08:19:10 ap ((.) . liftM2 (++)) (flip (liftM2 (++)) . ((". Take one down pass it around, " ++) .) . (. subtract 1)) 08:19:14 @pl (\f g x -> g x ++ f x ++ ". Take one down pass it around, " ++ g (x-1)) 08:19:15 liftM2 ap ((++) .) . (. (((". Take one down pass it around, " ++) .) . (. subtract 1))) . liftM2 (++) 08:19:21 @pl (\x f g -> g x ++ f x ++ ". Take one down pass it around, " ++ g (x-1)) 08:19:22 ap ((.) . ap . ((++) .) . flip id) (ap (flip . (((.) . (++)) .) . flip id) (((". Take one down pass it around, " ++) .) . flip id . subtract 1)) 08:19:35 @pl (\x g f -> g x ++ f x ++ ". Take one down pass it around, " ++ g (x-1)) 08:19:36 ap (ap . (((.) . (++)) .) . flip id) (ap ((.) . flip . ((++) .) . flip id) (((". Take one down pass it around, " ++) .) . flip id . subtract 1)) 08:19:42 hmmm so many choices 08:21:08 -!- augur has joined. 08:22:18 @pl (\x y z -> x + y + z) 08:22:18 ((+) .) . (+) 08:24:47 @type ((.) . (.) . (.)) ((+).(+)) (((+) .) . (+)) 2 3 4 (+1) 5 08:24:48 forall a. (Num a) => a 08:24:58 > ((.) . (.) . (.)) ((+).(+)) (((+) .) . (+)) 2 3 4 (+1) 5 08:24:59 20 08:25:10 Well, I'll be damned, it does work 08:25:20 ghci's not a fan, though 08:25:35 probably needs more instances. 08:25:47 > ((.) . (.) . (.)) ((+).(+)) (((+) .) . (+)) 2 3 4 (+1) 6 08:25:48 22 08:25:53 > ((.) . (.) . (.)) ((+).(+)) (((+) .) . (+)) 2 9 4 (+1) 6 08:25:55 28 08:26:08 :t \g f -> concat . sequence [g, f, const ". Take one down pass it around, ", g . pred] 08:26:08 oerjan: You have 1 new message. '/msg lambdabot @messages' to read it. 08:26:09 forall b. (Enum b) => (b -> [Char]) -> (b -> [Char]) -> b -> [Char] 08:26:20 Had to use a mix of djinn and pl to figure out the implementation :D 08:26:44 kallisti: testing the police filters, or something? 08:27:07 oerjan: lol, no testing my IRC bot, actually. 08:27:49 oerjan: Any idea why that would typecheck in ghci, run on lambdabot, but then not run in ghci? 08:29:03 :t curry $ \gf -> concat . sequence . sequence [fst, snd, const $ const ". Take one down pass it around, ", (. pred) . fst] 08:29:04 Couldn't match expected type `[a]' 08:29:04 against inferred type `b -> [Char]' 08:29:04 Probable cause: `$' is applied to too few arguments 08:29:07 oops 08:29:13 :t curry $ concat . sequence . sequence [fst, snd, const $ const ". Take one down pass it around, ", (. pred) . fst] 08:29:14 Couldn't match expected type `[a]' 08:29:14 against inferred type `b -> [Char]' 08:29:14 In the expression: 08:29:17 argh 08:29:40 :t sequence [fst, snd, const $ const ". Take one down pass it around, ", (. pred) . fst] 08:29:41 forall a. (Enum a) => (a -> [Char], a -> [Char]) -> [a -> [Char]] 08:30:09 :t concat . sequence . sequence [fst, snd, const $ const ". Take one down pass it around, ", (. pred) . fst] 08:30:10 Couldn't match expected type `[a]' 08:30:10 against inferred type `b -> [Char]' 08:30:10 Probable cause: `$' is applied to too few arguments 08:31:38 :t curry $ (concat .) . sequence . sequence [fst, snd, const $ const ". Take one down pass it around, ", (. pred) . fst] 08:31:39 forall a. (Enum a) => (a -> [Char]) -> (a -> [Char]) -> a -> [Char] 08:31:45 kallisti: ^ 08:31:50 SO ELEGANT 08:32:01 better than lambdabot, anyhow 08:32:50 oerjan: Funny story: I had that link copied from another channel while testing my bot, and accidentally pasted it here. The bot shows titles from links, and that particular site thought it was a mobile client so I was using it as my test case while spoofing user agents. OOPS. 08:33:45 oerjan: uh, if that's what you're talking about. I think that's what you're talking about. 08:34:12 NihilistDandy: try import Control.Monad.Instances 08:35:35 Nope. Still the same error. No instance for (Num (b0 -> b0)) 08:35:45 from the use of + 08:36:02 oh right. 08:36:08 yeah that's lambdabot specific. 08:36:21 Oh, is it? 08:36:23 Harumph 08:36:25 NihilistDandy: lambdabot has fun instances for functions 08:36:37 > show ++ show $ 3 08:36:39 "33" 08:36:48 It's just odd that it typechecks but doesn't work :/ 08:37:43 NihilistDandy: it typechecks because it _could_ work if the instance existed, so presumably the typechecking comes with the Num (b0 -> b0) => part to be resolved later. 08:37:52 @type ((.).(.).(.)) ((+).(+)) (((+).).(+))((.).(.).(.)) ((+).(+)) (((+).).(+)) 08:37:52 Occurs check: cannot construct the infinite type: a = f a 08:37:53 Expected type: (a -> f a) 08:37:53 -> ((a -> f a) -> a -> f a) 08:38:04 Well, that's even odder :/ 08:40:12 @more 08:40:17 oerjan: oh btw. 08:40:27 `worlds --swedish --finnish 25 08:40:28 kallisti: there wasn't any link, just a weird message that would get the police on my door under ridiculous circumstances 08:40:29 lol worlds 08:40:36 ​/home/hackbot/hackbot.hg/multibot_cmds/lib/limits: line 5: exec: worlds: not found 08:40:39 `words --swedish --finnish 25 08:40:45 erääval ahtukenemo fjärigolonkeillön finisioneiska tomutbituel ressa slockarkisernassas silis uperäämänne listenvast afroameen tressanovillämykiel prisertanje kallas inflacerost pärjäningorns tokainstraali vallarskituun betaan avkoppigraveill piinnalet mers viltratkomprof prockan seritetyperä 08:41:34 oerjan: oh, well, nevermind. :P 08:41:52 oerjan: unfortunately I don't have a Norwegian dictionary. 08:41:55 @hoogle (Num (a -> a)) 08:41:55 Warning: Unknown type Num 08:41:55 Data.Generics.Schemes everywhereBut :: GenericQ Bool -> GenericT -> GenericT 08:41:55 Data.Generics.Aliases unGQ :: GenericQ' r -> GenericQ r 08:42:25 i don't think i have one either. 08:42:34 @hoogle (Num (b-> b), Num b) => b -> b -> b -> (b -> b) -> b -> b 08:42:35 No results found 08:42:49 oh nevermind I found one. 08:42:57 in apt-get. amazing 08:43:07 `paste bin/words 08:43:11 http://codu.org/projects/hackbot/fshg/index.cgi/raw-file/tip/paste/paste.26331 08:43:26 NihilistDandy: it's Num b => Num (a -> b), anyway, and quite trivial, just passing an extra argument to every function like the (->) monad does. 08:44:25 oerjan: what encoding do you think /usr/share/dict/norsk is going to be? 08:44:50 either iso-8859-1 or utf-8 08:45:03 okay latin-1 it is. 08:45:15 because it's not utf-8 08:45:29 it's "ISO-8859" which could be like 10 different things 08:45:52 well yeah but at least the first few are ~ latin- 08:46:34 oh i guess it could be that iso-8859-15 which replaces something with the euro sign and maybe other stuff 08:46:56 but none of that is going to differ in norwegian, anyhow. 08:47:18 I ask because I had a fun time getting Bulgarian to work earlier. 08:47:30 turns out the dictionary file is in windows-1251 08:47:34 aka cp-1251 08:47:35 ah. 08:47:59 Hrm, gonna try a 99 bottles of beer in my esolang. Should be fun/incredibly long. 08:49:41 Well, not that long if compared to malbolge... 08:50:33 liskell (canned laughter) <-- you know that actually exists, right? 08:51:18 Just read about it last night :D 08:51:58 `fetch http://dl.dropbox.com/u/16495819/Norwegian 08:52:02 2011-12-24 08:52:02 URL:http://dl.dropbox.com/u/16495819/Norwegian [796190/796190] -> "Norwegian" [1] 08:52:05 `fetch http://dl.dropbox.com/u/16495819/words.pl 08:52:08 2011-12-24 08:52:07 URL:http://dl.dropbox.com/u/16495819/words.pl [4372/4372] -> "words.pl" [1] 08:52:34 `run chmod +x words.pl; mv words.pl bin/words; mv Norwegian share/WordData/Norwegian 08:52:37 No output. 08:52:38 `words --help 08:52:42 Usage: words [-dhNo] [DATASETS...] [NUMBER_OF_WORDS] \ \ valid datasets: --eng-1M --eng-all --eng-fiction --eng-gb --eng-us --french --german --hebrew --russian --spanish --irish --german-medical --bulgarian --catalan --swedish --brazilian --canadian-english-insane --manx --italian --ogerman --portuguese --polish --gaelic --finnish --norwegian \ default: --eng-1M \ \ options: \ -h, --help this help text 08:52:49 `words --norwegian 25 08:52:52 urerbunde aksorgenesvirket duverbok ynkres hambitre jarea ingene tallsveil ringens vannetstadisitters flåernehand idreiser aspillert slagejobbstrinte ovedmasene kontongsfjord selokkerer påmennomssene platene staukejule styrepene daterene øsrikhomorter traftstandernmynd delenes 08:53:18 `words --eng-1M 08:53:23 pried 08:53:24 `words --norwegian --swedish --finnish 25 # 3x Scandinavia combo 08:53:27 Is that from a list of 1M english worrs? 08:53:29 fjolari gudatsas unildunsa lønnens sæteraids prosofischniö flunstiltar polagens flert kunninännboks strömställäsi laan hultu raherromen opeutbok skreometeel pok lereiseringokn ateise maamutgaviin lanskatyy fobiditeringa hagetadiolitne småle ljutasieramma 08:53:29 DeadlyFugu: eng-1m is the default 08:53:33 DeadlyFugu: yes 08:53:51 Well, that's a pretty fast algorithm there. 08:53:56 ringens, platene, possibly "daterene" (half english loan) and delenes are genuine words 08:53:59 `words 1000 08:54:05 poetate hyp any hygiamer jeflore pressimon exploi ordiui nece nege undium dedime belle delib papado uch sin fpen ded crac zanshi obric setz lourient imv ecula gen kin vchously domicrctroni eospiro arre sangulb mad deflin clothibedur kala speche wied courm kardct nov dvdpatneraob rwicz matourtercrof sessoi inte palade four sution ted ahi oppara caste tdted prevu brevoider comme salvemeux sibl jsto raine paga zamazdew 08:54:15 oerjan: it happens a bit more often in this algorithm due to the increased gram size. 08:54:32 but the result is the results appear more "familiar" 08:54:38 That was pretty fast (Assuming it got 1000, and didn't just cut the amount it got off at the most it could print) 08:54:43 DeadlyFugu: it cuts off at 50 08:54:50 :( 08:54:53 DeadlyFugu: my first version of this was slooooow. 08:55:01 lønnens, sæteraids (well it's an obvious compound word which i _hope_ finds no use), småle 08:55:19 actually maybe not, would be seteraids 08:55:31 saeteraids? 08:55:40 then I realized interpolating the entire dataset at runtime is stupid and instead interpolate each gram as I encounter it, then cache it for later. 08:55:45 Why you drop the a? 08:55:50 it's like Norwegian hateraid. 08:55:53 DeadlyFugu: the kind of aids you get in a mountain cottage 08:56:02 loooooool 08:56:07 DeadlyFugu: i mean it's not actually spelled with æ 08:56:10 Lol... 08:56:29 `addquote DeadlyFugu: the kind of aids you get in a mountain cottage 08:56:32 774) DeadlyFugu: the kind of aids you get in a mountain cottage 08:56:32 or well, cottage isn't quite right, i don't know the english word. 08:56:38 So wait, what does steraids really mean? 08:56:49 cottage is right. 08:56:59 it's where you herd cows or sheep in the summer 08:57:09 `words -N --norwegian --swedish --finnish 25 # BATTLE OF THE NORTHERNERS, WHO WINS THE UNINTERPOLATED BATTLE 08:57:11 That makes more sense. 08:57:13 benreslaget pliger svineni samsyrjistaan patens häperansa hånde poisi sikaavens yleisemaallankimuka kartsystraener sårbard rettingsret asusprestretningris annven solsbade høyingensä hygiennekakensa straoppe strumsbruste senkrefisk inneresjageogras røytetsmørkeoven päisemme veietsommutkimbåndsarbeiden 08:57:27 * oerjan suddenly realizes the implications of that combination. 08:58:05 oerjan: is this some sort of norse mythological prophecy coming to pass? 08:58:50 according to fizzie the finnish generator is actually pretty palatable. 08:59:02 `words --finnish 25 08:59:05 tehokemme mahtavastaviksemme ryöpailmissamme puuteliltavalit latukoilevin umpianomammalta anneilusteleva aammismienne eepotevinamme hirveämmöilta jätelevät lehtimustani epäisemme uljettävämäänsä jupaljastaan maammaltani ansannekkäänkäskyiksuvista affektinamme uskimillanne kiinnoon ellaan jatuksen hidaskustollamme vallamme kokelellisimmalle 08:59:32 kallisti: incidentally, "slaget" means the battle, so i think norwegian won. 08:59:53 sadly benre doesn't mean uninterpolated, or anything. 09:00:02 looool 09:00:05 shame 09:00:51 hånde is an archaic word, old dative of hånd "hand" 09:01:24 used in the set phrase "til hånde" which i'm not at the spot sure of the exact meaning of. 09:02:24 sårbard could have been a word. wound bard, or something, except bard is english. 09:03:00 `words --eng-all --norwegian 25 09:03:06 uchairakta wkhikanae prod palmarch elem sainen greeurn prisiertie trykehøgskj tralanda sulfspro cruiet pumpevillierle prollpakantancasted plingskapath uzzuttiårigbe frichcot lotteem scen middh erneraehistnandin lr pdelen artere trougarte 09:03:13 and senkrefisk - i don't know what it means, but i've heard weirder tool names 09:03:39 eng-all tends to be a bit noisy 09:03:42 -!- itidus21 has quit (Ping timeout: 248 seconds). 09:03:52 artere could be a latin loan, if latin had such a word 09:03:58 probably because it's huge and has words that are probably at best borderline "English" 09:04:38 a juggernaut dictionary 09:04:54 `words --eng-gb 25 09:04:59 parenk conson shian diat inc gham uan linfl tasie eapted memove bundeling lux wartu che fall ber infection bel iscipi rorouch gart dela isfacnudo vicht 09:05:06 `words -help 09:05:09 Unknown option: e \ Unknown option: l \ Unknown option: p 09:05:24 lrn2shell 09:05:26 D: 09:05:29 `words -h 09:05:33 Usage: words [-dhNo] [DATASETS...] [NUMBER_OF_WORDS] \ \ valid datasets: --eng-1M --eng-all --eng-fiction --eng-gb --eng-us --french --german --hebrew --russian --spanish --irish --german-medical --bulgarian --catalan --swedish --brazilian --canadian-english-insane --manx --italian --ogerman --portuguese --polish --gaelic --finnish --norwegian \ default: --eng-1M \ \ options: \ -h, --help this help text 09:05:47 `words --catalan 09:05:51 atran 09:06:04 A train! Those catalan people are genious! 09:06:20 oerjan: I left the --canadian-english-insane like that for obvious reasons. 09:06:36 oerjan: google translate suggests that artere can be translated from Norwegian as "species" 09:06:37 `words --manx 10 09:06:40 frowalkee chreimagh bascred binjer lieh-laue lheir-chlag eiy athaniarrag lieh-hooil birrinagh 09:06:50 I don't know how well I trust their Northern tongues :| 09:06:50 NihilistDandy: except it's actually arter 09:06:53 Ah 09:07:14 Oh, there really is a manx language >_> 09:07:17 Is it a cased language? 09:07:24 oerjan: well it go arter from the norwegian dataset, and then got the e from english. :P 09:07:25 I don't really know much about it 09:07:32 DeadlyFugu: ...yes 09:07:37 it's Manx Gaelic. 09:07:45 I can see that. 09:08:01 with "gaelic" being scottish gaelic but I really don't know for sure. 09:08:25 Why no eastern (excluding russian) languages on the list? 09:08:38 Is it due to text encoding issues? 09:08:46 kallisti: arterie, arter and partere are all english words, so i'm not so sure of that. 09:08:46 in the case of Chinese, laziness. in the case of all the others, lack of data. 09:08:58 *norwegian 09:08:59 oerjan: they got superboosted by both languages. :P 09:09:01 d'oh 09:09:19 oerjan, partere? 09:09:43 DeadlyFugu: I can get a chinese dataset I just haven't done it yet. It would be trivial to add with my current scripts. 09:09:43 I don't think that's English. 09:09:57 kallisti, then do it? 09:10:01 later. 09:10:05 Ook. 09:10:24 So wait, can't you find a Korean or Japanese dataset-thingy? 09:10:26 if you want to do it yourself feel free, I can show you where the data is and also my script. 09:10:33 DeadlyFugu: *norwegian, i said 09:10:37 Nah, I'll probably mess it up ^^ 09:10:43 Oh. 09:10:54 Missed your correction. 09:13:11 http://books.google.com/ngrams/datasets here's the data 09:13:31 http://books.google.com/ngrams/datasets 09:13:35 er 09:13:37 http://sprunge.us/YBLC 09:14:19 and here's a perl script. the -m option specifies the name of the output file, -f specifies an optional regex filter, -e specifies an optional encoding, and the positional arguments are the files to read. 09:14:20 That looks harder to read than some esolangs >_> 09:14:50 I'm guessing people who know Perl can make sense of that though. 09:14:51 default encoding is utf8, default filter is "pretty sane" 09:14:58 what esolangs 09:15:03 and, yes. for the most part. Though I occasionally do some dubious things. 09:16:03 `ls share/WordData 09:16:05 Brazilian \ Bulgarian \ CanadianEnglishInsane \ Catalan \ Eng1M \ EngAll \ EngFiction \ EngGb \ EngUs \ Finnish \ French \ Gaelic \ German \ GermanMedical \ Hebrew \ Irish \ Italian \ Manx \ Norwegian \ Ogerman \ Polish \ Portuguese \ Russian \ Spanish \ Swedish 09:16:26 kallisti: That list only has a few languages, where'd you get the rest from? 09:16:28 isn't it just a matter of dropping a dictionary file there? 09:16:33 oerjan: no 09:16:45 shouldn't it be? :P 09:16:51 I don't build the ngram data from a raw dictionary on each invocation, that would be insane and inefficient. 09:17:07 I guess I could build it on the fly, save it, and then use it later, or something. 09:17:13 but that requires encoding information. 09:17:36 I think it's better to have the two seperate 09:17:43 I could add the build script to hackego I guess. 09:18:20 `paste `which words` 09:18:23 http://codu.org/projects/hackbot/fshg/index.cgi/raw-file/tip/paste/paste.10605 \ cat: `which words`: No such file or directory 09:18:27 `paste bin/words 09:18:30 http://codu.org/projects/hackbot/fshg/index.cgi/raw-file/tip/paste/paste.17595 09:18:41 DeadlyFugu: if that script is difficult to read, the actual words command itself is probably more difficult. 09:19:02 Really? 09:19:09 Really. 09:19:43 I dunno, typing `word then a language after two dashes seems awfully simpler then Perl... 09:19:45 -!- NihilistDandy has quit (Quit: http://haskell.org). 09:19:54 DeadlyFugu: that's.... 09:19:57 not what I meant 09:20:00 heheheheheh 09:20:08 (word is implemented in perl) 09:20:35 the best language for high performance statistical computation. 09:20:49 `words canadian 3 09:20:54 Argument "canadian" isn't numeric in int at /hackenv/bin/words line 141. \ 09:21:07 You may or may not want to fix that. 09:21:10 I don't. 09:21:12 `words --canadian 3 09:21:14 speaking of statistical, is there anything special about R? 09:21:16 haire upsulph rebath 09:21:21 monqy: R? 09:21:36 sounds insane enough 09:21:42 programming language for doing statistical stuff i think?? 09:22:05 i dunno much about it other than cpressey made a bot in it that used unicode snowmen to do string processing 09:22:12 kallisti: Replace --canadian with --perl? :D 09:22:20 what. 09:22:23 waht 09:22:57 Eheheh. I can't read Perl :( 09:23:16 Looks awfully like PHP though... 09:23:24 im now dead inside 09:23:38 what about it looks like php the $s? 09:23:44 how shallow 09:23:53 The $'s are all I remember from PHP... 09:24:06 hey bash Haskell looks like perl too 09:24:08 it has $ 09:24:16 bash haskell? 09:24:20 bash and haskell 09:24:20 they 09:24:21 :P 09:24:30 I change my mind for example midsentence 09:24:32 haskell doesn't really have it in the same places 09:24:34 and then forgot to erase the old one 09:24:38 so I'll just roll with it instead. :P 09:24:43 it is entirely different?? 09:24:50 NOPE ITS $ MAN 09:24:53 ok 09:25:04 SUPERFICIAL RESEMBLANCE k THAT'S THE IMPORTANT THING FOR THIS DISCUSSION 09:25:15 Eeyup. 09:25:51 my $data = $_->[0]; << What does that even do? 09:26:43 where is it used 09:26:51 $_ is a special variable that is used by a bunch of perl builtins. in this case, $_ is the current value being iterated over from the for statement. 09:27:07 * DeadlyFugu thinks an 'i' would be better... 09:27:13 why 09:27:15 here it's referring to a reference to an array. normally to dereference an array you use @{$var} 09:27:28 I can slightly understand want's happening there. 09:27:34 but for a simple variable you can use @$_ as a shorthand 09:28:12 to get a subscript from an array ref you would have to do (@{$_}[0]) 09:28:14 which is terrible 09:28:14 DeadlyFugu: all the special variables have non-alphanumeric names. also longer alphanumeric ones, with the use english; pragma 09:28:26 Riiight. 09:28:30 so, another shorthand that perl has is that you can write ->[0] which does the dereference as well as the subscript. 09:28:41 so... $_->[0] 09:28:42 Other than Perl, there is also AWK, which some features of Perl are based on. 09:29:21 I only know C/C++/Java/C#/Whateverelsecamefromthem. Perl would appear to be radically different. 09:29:28 only slightly. 09:29:33 in its special perly way 09:29:40 but otherwise it descends from the C/C++ "language family" 09:29:41 Riiight. 09:29:44 perl still has basic c-like block structure 09:29:45 not lots of variety there 09:29:56 DeadlyFugu: O, you don't know about Haskell programming? 09:30:04 I saw Haskell. 09:30:08 Scary stuff. 09:30:10 what 09:30:10 no 09:30:17 not scary at all??? 09:30:32 monqy: we will have to enlighten him. 09:30:36 sure 09:30:40 D: 09:30:45 you _can_ use { ; } blocks in haskell (and zzo38 likes to do so more than most), but the types of blocks are not very c-like. 09:30:53 but first we'll probably have to teach him some basic programming concepts related to functional programming. 09:30:59 sure 09:31:00 DeadlyFugu: Learn it mathematically and then it can be understand. The way it is not understand is some people try to think of it same like other programming languages, because it isn't same way. 09:31:24 zzo38: That's why I found it scary. I'm not that good with maths. 09:31:47 you sometimes need it for lambdabot one-liners, since you cannot use indentation to disambiguate. 09:32:36 oerjan: There's more to C++ and Haskell then just { blocks. Bash is a C derivative if you go by that. 09:32:45 DeadlyFugu: one major difference between perl and those languages you listed is that Perl is dynamically typed. 09:33:15 *Searches dynamically typed* 09:33:19 ........ 09:33:22 okay. yes. good idea. 09:33:26 Now that is cool. 09:33:35 DeadlyFugu: nahhhh, c++ and haskell are just {} blocks & nothing else 09:33:44 it's... okay. 09:33:46 almost the same language, really 09:33:49 dynamic typing has its perks 09:34:02 so does static typing -----### 09:34:08 indeed 09:34:11 dynamic checking is awful B) 09:34:13 DeadlyFugu: O, OK. Well, many mathematical things are discussed in this channel sometimes related to esolang but also other things. But not always. 09:34:22 Oh lol, mistook dynamic types for dynamic programming. 09:34:27 Can I just say that it does bother me how many language extensions Haskell has? 09:34:37 Sgeo: no 09:34:48 Lisps don't really need language extensions 09:34:57 but they have them anyway 09:35:02 ..? 09:35:20 I think language extensions are good. 09:36:09 If they added some Haskell extensions with a few features of Lisp, then you might be able to make a few more stuff with that. 09:36:21 for scheme, there's srfis http://srfi.schemers.org/ a lot if not all of which could be considered language extensions 09:36:33 dunno about other lisp flavours 09:36:57 is clos regarded as an extension to common lisp 09:36:58 > nubBy(((>1).).mod)[2..] -- some unscary haskell 09:36:58 -!- itidus21 has joined. 09:37:01 mueval-core: Time limit exceeded 09:37:05 argh 09:37:08 > nubBy(((>1).).mod)[2..] -- some unscary haskell 09:37:12 mueval-core: Time limit exceeded 09:37:14 nubby......... 09:37:22 did i do that wrong :( 09:37:34 oh duh 09:37:49 > nubBy(((>1).).gcd)[2..] -- i got the two versions confused 09:37:51 [2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97,101... 09:38:07 Wait, wut? 09:38:13 DeadlyFugu: some other differences include a preference for small slow easy-to-write programs over correct fast ones. 09:38:23 DeadlyFugu: perl is very slow. 09:38:34 Sgeo: why wouldn't lisps need language extensions? what is a language extension? are they ever needed? 09:38:54 oerjan: Is nubBy a function someone wrote earlier? 09:38:59 Sgeo: and why does it bother you that many people have extended haskell? 09:39:04 DeadlyFugu: it's in the standard library 09:39:07 !perl use feature 'say'; say "Hello, World!"; 09:39:09 @src nubBy 09:39:09 nubBy eq [] = [] 09:39:09 nubBy eq (x:xs) = x : nubBy eq (filter (\ y -> not (eq x y)) xs) 09:39:10 Hello, World! 09:39:21 * kallisti used a language extension. 09:39:24 Well, that's pretty cool, if you can make it print all primes in very few characters. 09:39:26 DeadlyFugu: you are most likely reading it incorrectly 09:39:31 monqy, I guess I'm under the impression that it would be nice if a language didn't need to be extended. If changes to the language were done in the language in a straightforward manner. 09:39:40 monqy: probably. 09:39:43 I was trying to think of some kind of "IO transformer", but I don't know for sure. One thing I was think of is: newtype IOT f x = IOT (forall z. (f x -> IO z) -> IO z); 09:39:45 DeadlyFugu: there are other things it can do very quickly. 09:39:45 Sgeo: what does that mean 09:39:53 DeadlyFugu: er, with few lines of code. 09:40:04 kallisti: How fast is Perl compared to Java or .NET? 09:40:08 slow. 09:40:09 slower. 09:40:10 monqy, it means not needing to change the compiler to make a language extension 09:40:14 slowest, almost. 09:40:15 DeadlyFugu: by Perl you mean perl? 09:40:20 monqy, I guess I'm thinking more like Forth than like Lisp 09:40:25 monqy: pedantic much. :P 09:40:31 kallisti: languages don't have speeds 09:40:34 monqy: Why you case sensitive? D: 09:40:44 And in Forth, most kind of language extensions can be written in Forth itself as part of the program. 09:40:47 monqy: you don't have to tell me that. 09:40:58 kallisti: it was secretly directed at DeadlyFugu 09:41:08 how surreptitious. 09:41:17 Lol 09:41:18 zzo38, indeed, unlike Haskell. 09:41:33 DeadlyFugu: but yeah the perl (implementation) is among the slowest commonly used languages. 09:41:36 If Haskell could somehow have something like that (don 09:41:47 slower than Python and Ruby and other dynamically typed scripting languages. 09:42:19 kallisti: So, why you use it? (Especially for an algorithm such as your word one) 09:42:22 perl 6 is doing some interesting stuff with allowing the syntax to be redefined at runtime. 09:42:23 but implementation speed doesn't matter anyway right 09:42:33 DeadlyFugu: because it's expressive??? 09:42:35 monqy: sometimes it doesn't. 09:42:45 DeadlyFugu: I felt like it. It's easy to write. speed wasn't a primary concern. 09:42:46 monqy: Espressive? Use grass? 09:42:51 > fix((0:).scanl(+)1) -- ye other standard example 09:42:52 [0,1,1,2,3,5,8,13,21,34,55,89,144,233,377,610,987,1597,2584,4181,6765,10946... 09:42:59 If Haskell could somehow have something like that (don't know how) then it could improve. If such an extension could be exist, to allow somehow that. Maybe by allowing you to set a structure that includes the stack and functions to compile the program? 09:43:06 DeadlyFugu: espressive?? what's grass 09:43:17 > let fibs = 0 : 1 : zipWith (+) fibs (tail fibs) in fibs -- this is my favorite 09:43:18 [0,1,1,2,3,5,8,13,21,34,55,89,144,233,377,610,987,1597,2584,4181,6765,10946... 09:43:20 Search on the wiki 09:43:35 http://www.blue.sky.or.jp/grass/ 09:44:02 You can make ASCII art to express your feelings, without disrupting the flow of the program ^^ 09:44:16 DeadlyFugu: do you know what he meant by expressive though? 09:44:22 Yeah XD 09:44:26 good. 09:44:44 these things are important. :> 09:45:17 grass looks cool 09:45:32 kallisti: MINE IS SHORTER 09:45:35 So, I'm guessing to someone who knows Perl, Perl seems pretty easy, but to someone who doesn't, it seems pretty hard, even if they know other programming languages? 09:45:49 DeadlyFugu: which other programming languages? 09:46:06 Ones which aren't similar to Perl (Likes C or Fortran or ASM) 09:46:15 DeadlyFugu: the equivalent C code would have been much longer, same for C++. Java is shit. C# is slightly better but pretty mediocre still. I would have used Haskell but I decided to stick with perl because I'm familiar with it (though I plan to write more Haskell programs soon) 09:46:31 python is... okay. 09:46:32 Waitwaitwait, C# is better then Java? 09:46:38 O.o 09:46:39 of course. that's like... its thing. 09:46:40 DeadlyFugu: just like C could be funky if you only knew Prolog? 09:46:58 C# is like "Java with better language features and not quite as fast but that's okay" 09:46:59 monqy: I guess so. 09:47:26 Eh? I've used both C# and Java, and C# in the end just didn't seem right. 09:47:32 Java's vaguely catching up 09:47:38 vaguely? 09:47:40 It's getting lambdas at some point 09:47:47 it's literally almost the same language, but with more features. 09:47:48 Plus, Eclipse is far better then VS. 09:47:51 how can catching up be described as vague 09:48:04 DeadlyFugu: choice of IDE should not affect your opinion of languages. 09:48:05 (VSC# vs Eclipse for Java. But that's unrelated to the language itself) 09:48:10 indeed. 09:48:30 I know. Just stating, Eclipse makes it easier to code Java then VSC# makes it to code C# 09:48:35 * kallisti uses emacs for everything. This solves his IDEs problems because he never has to choose a different one. 09:48:43 Although VS has some pretty neat auto-complete. 09:48:43 I have written one Java program, which is a command-line interface to Apache POIFS, it is called DocFileExtractor 09:48:53 ides are a pain 09:49:24 I haven't written java in a long time 09:49:31 monqy: Really? Don't they like... speed up your coding or something? 09:49:39 no they pain me 09:49:45 They would appear to speed mine up substantially. 09:49:53 How? 09:50:21 I forget the specifics but generally how they manage things 09:50:24 it has been a while 09:50:26 the main benefit is autocomplete for me, but I don't really need it. I find it funny when people who use VS end up not being able to autocomplete something in a different context. 09:50:43 excuse me "intellisense" 09:50:51 Lol. 09:50:54 What would the "IO transformer" I specified make? I thought of definition of lift and liftIO but am unsure of them and other things 09:50:56 besides, coding speed isn't that much of an issue 09:51:03 ideas speed is the issue 09:51:11 assuming you use a half-decent language that is 09:51:34 oh that and the speed of dealing with the pains of your language 09:51:47 monqy: All of that depends on the person. 09:51:49 IDEs help with that. 09:52:02 zzo38: we've discussed IO transformers before, pretty sure you cannot make a real one which works for arbitrary underlying monad. [] is a particularly awkward case. 09:52:02 kallisti: with some pains, sure 09:52:32 DeadlyFugu: also the reason perl uses $_ instead of $i is because $_ is used in many other ways besdies just loops. 09:52:35 it essentially requires an implementation with parallel worlds. 09:52:39 DeadlyFugu: do these people use crap languages 09:52:39 also $_ is not an actual index 09:52:42 it's the value itself. 09:53:13 to use $i would suggest that you're using an index, when you're not. 09:53:19 what do you mean by the value itself 09:53:25 the value being iterated over. 09:53:26 in regards to mutation and friends? 09:53:33 or what 09:53:36 monqy: are you familiar with foreach loops? :P 09:53:40 that is what I'm talking about. 09:53:44 oerjan: If my specification does not make a real IO transformer, what does it make? It might still make something, even if it is not a IO monad transformer 09:53:44 oh 09:53:48 my brain kind of died 09:53:51 no worries. 09:54:00 zzo38: however there are some similarities to ST. there is an STT package on hackage, it has similar problems but works for _some_ underlying monads. 09:54:08 i forgot that indices are actually a thing ahahahahahhhhaah 09:54:11 monqy: it's okay Haskell mind virus does weird things it's okay 09:54:11 ahahahahahahah 09:55:07 DeadlyFugu: for example a lot of built-in functions will use $_ when a specific argument isn't supplied. 09:55:51 !perl @x = qw(a b c); print for @x; 09:55:52 abc 09:56:01 here I'm using print with no arguments, which defaults to print $_ 09:56:06 monqy: besides, coding speed isn't that much of an issue \ ideas speed is the issue 09:56:19 DeadlyFugu: 01:50:45 < monqy> assuming you use a half-decent language that is 09:56:21 I'm stating some people can come up with ideas faster then they can code. 09:56:25 oerjan: Can you give some example too? Including my type? 09:56:32 DeadlyFugu: must be that they use bad languages 09:56:48 monqy: does Haskell allow you to code at the SPEED OF IDEAS 09:56:50 (the joke is that all languages are bad) 09:56:51 And what are exactly their problems? 09:56:51 No, I'm stating they can come up with ideas fast, not that the coding is slow. 09:56:54 monqy: oh 09:57:02 Oh lol 09:57:13 monqy wants thoughts to be a programming language. 09:57:19 so he can just appearify things. 09:57:32 monqy: Pseudo-code is the best your going to get :( 09:57:32 until that point all languages are bad. 09:57:38 DeadlyFugu: gross 09:57:38 DeadlyFugu: pseudocode is awful too 09:57:42 DeadlyFugu: its the wishing problem (not a real term).. it's easy to spell out a desired goal in natural language, not so easy to say how to get from here to there 09:57:58 just something i think about 09:58:10 DeadlyFugu: can you read that perl code above? 09:58:11 (itidus21 is our resident thinker) 09:58:28 lol 09:58:39 DeadlyFugu: some hints: qw(a b c) is equivalent to ('a', 'b', 'c') (where ' denotes a string, not a character, there aren't single characters in perl) 09:58:39 `log itidus21 09:58:45 itidus21, people can have a hard time understanding what was meant in a natural language 09:58:54 ahahahha 09:59:02 oh wait.. that was sgeo not hackego 09:59:07 monqy: Wait, isn't pseudocode whatever-you-want-it-to-be? 09:59:08 2011-12-19.txt:20:03:28: its not really like birds or boxes :-) 09:59:12 In things such as WEB you could type natural language texts which can be documentation and/or can be cross-references and then you can define the program code for each one individually as well, and table of contents, and index 09:59:31 DeadlyFugu: typically not. it can be. but it most commonly is used to communicate ideas to another person, which means it follows some kind of imperative algorithmic form in most cases. 09:59:35 Sgeo: the best example is world peace 09:59:49 DeadlyFugu: i was going to say something but it's basically the same as what kallisti said 09:59:50 kallisti: I can read the perl, yes. 09:59:59 DeadlyFugu: good. :) 10:00:37 zzo38: i don't know. i'd expect a true IOT transformer to support both lift and liftIO. can you do that? 10:00:57 > let { palindromes alphabet = [0..] >>= (`replicateM` alphabet) >>= (\x y -> (x++y) : map ((x++).(:y)) alphabet) `ap` reverse } in palindromes "abc" 10:00:57 oerjan: Yes, but I am not sure about join. 10:00:58 ["","a","b","c","aa","aaa","aba","aca","bb","bab","bbb","bcb","cc","cac","c... 10:01:09 by basically i mean 10:01:13 DeadlyFugu: the above Haskell generates an infinite list of every palindrome in a given alphabet. 10:01:21 there are a lot of difference but the key point remains i think/hope 10:01:40 empty string nominated for best palindrome 10:01:51 there is no possible world peace 10:01:55 and yet people talk about it 10:02:08 kallisti: I can't state that Haskell/Perl/whathaveyou isn't good for doing algorithms and whatnot. 10:02:32 DeadlyFugu: I wouldn't expect you to. it would be foolish. I'm just showing you some examples to familiarize you with it. 10:02:47 They definitely beat C, just, C seems much more like English to me, and doesn't require me to think so much about the syntax. 10:02:54 lol 10:03:00 wh 10:03:02 what 10:03:05 DeadlyFugu: yeah I feel the same way about COBOL 10:03:07 because 10:03:09 I don't know COBOL 10:03:19 so it seems harder to think about and write. 10:03:25 * Sgeo actually has some familiarity with COBOL 10:03:32 I've heard of cobol, but I haven't really looked at it much 10:03:51 That doesn't look to bad. 10:03:57 zzo38: if it doesn't have join, maybe it's an Applicative then, or something? 10:04:26 DeadlyFugu: ...I was attempting to demonstrate the fallacy you were making there, but okay. 10:04:46 argument from ignorance. "I don't know X, therefore it's difficult to understand." 10:04:51 I know. 10:05:17 I just looked Cobol up, and it seemed rather simple. 10:05:26 I think it would be: lift x = IOT ($ x); liftIO x = IOT (fmap return x >>=); 10:05:26 I think I'm now capable of writing a one-liner cat program in Haskell 10:05:41 foo has lost the war to X 10:05:43 putStr =<< getContents 10:05:55 kallisti: nope 10:06:03 you mean like sh cat? 10:06:08 kallisti, please, let me try 10:06:15 or "copy input to output" cat. 10:06:21 oerjan: Maybe; I don't know. But I didn't say it doesn't have join. But I have not think of it, so I don't know. But maybe it is applicative, I don't know that either. 10:06:28 Sgeo: oops I spoiled it. 10:06:35 kallisti: Also, correct-use-of-cat 10:06:44 (Unless you meant that by sh cat) 10:06:56 :t getArgs 10:06:56 Not in scope: `getArgs' 10:07:00 there are two distinct things that "cat program" could mean 10:07:07 :t System.Environment.getArgs 10:07:08 IO [String] 10:07:09 Sgeo: oh you want to make shell cat? okay, go ahead. 10:07:24 kallisti: there's also the third "cat program" that is both of them 10:07:32 kallisti: I'm guessing shell cat is the one that concatenates them? 10:07:32 monqy: oh, yes. 10:07:36 monqy: indeed. 10:07:43 * Sgeo looks up readFile 10:07:51 Sgeo: good thing to look up. it's very simple 10:07:54 :t readFile 10:07:55 FilePath -> IO String 10:08:01 it pretty much does what it looks like it does. 10:08:09 does it read a file 10:08:12 main = getArgs >>= (join $ mapM_ putStr <$> readFile) 10:08:13 I bet it does. 10:08:17 Does that work? 10:08:25 does it? 10:08:34 main = getArgs >>= (join $ mapM_ putStr <$> readFile) 10:08:36 first, what does work mean 10:08:37 !haskell main = getArgs >>= (join $ mapM_ putStr <$> readFile) 10:08:41 runhaskell: syntax: runghc [-f GHC-PATH | --] [GHC-ARGS] [--] FILE ARG... 10:08:44 oh rite 10:09:07 Hmm, probably better to not use join and rather use =<< readFile 10:09:07 kallisti: Slightly unrelated to the topic at hand, does Perl use streams for working with the file? Or does it do something else? 10:09:07 but first 10:09:11 monqy: that depends on what does means 10:09:11 But what I wrote should still wok 10:09:14 work 10:09:20 `run runhaskell <<< 'main = getArgs >>= (join $ mapM_ putStr <$> readFile)' 10:09:22 should it? 10:09:34 ​\ /tmp/runghcXXXX279.hs:1:8: Not in scope: `getArgs' \ \ /tmp/runghcXXXX279.hs:1:21: Not in scope: `join' \ \ /tmp/runghcXXXX279.hs:1:41: Not in scope: `<$>' 10:09:37 kallisti, how do you expect it to do anything without arguments 10:09:40 DeadlyFugu: it uses file handles like just about every other language ever. 10:09:48 join is not in scope? o.O 10:09:49 Sgeo: was checking that it compiled, and then forgot I need imports. 10:09:57 Sgeo: you need Control.Monad 10:10:05 Does that count against the one-liner? 10:10:12 no. 10:10:15 Also System.Environment 10:10:29 in conclusion it is impossible to write that sort of cat in one line 10:10:33 mapM_ putStr is almost certainly wrong to use here. 10:10:59 o.O 10:11:01 kallisti: There's two ways of doing file IO, using a stream or shoving it into memory and using a pointer to that memory (C++ and friends seems to like the first >_<) 10:11:01 I think sgeo missed things 10:11:12 DeadlyFugu: what 10:11:31 DeadlyFugu: what 10:11:40 What's wrong with map_ putStr? 10:11:49 * DeadlyFugu has, yet again, stated something which is probably entirely stupid 10:11:53 DeadlyFugu: the only difference is abstractions over file IO, the implementation is almost always the same (for linux systems) 10:11:55 Sgeo: do you know what (mapM_ putStr) means.... 10:11:56 Although I guess map putStr would make more sense, and wouldn't need the join 10:12:03 i.... 10:12:07 sgeo.... 10:12:20 you should test it 10:12:25 :t mapM_ putStr 10:12:26 [String] -> IO () 10:12:52 kallisti: I'm talking about the abstractions. 10:13:05 DeadlyFugu: perl uses a filehandle, and then supplies some basic operations to read/write/etc from this file handle. very much like C but shorter to write. 10:13:10 an example 10:13:16 open my $f, "foo.txt" 10:13:22 DeadlyFugu: "shoving it into memory and using a pointer to that memory" is hardly an abstraction 10:13:24 opens foo.txt in read mode and stores a file handle in $f 10:13:32 now you can read it line by line using <> 10:13:40 oerjan: Does these things I wrote seems to you? 10:13:56 monqy: Okay, let me reword, "I'm talking about the abstractions, or lack thereof in some cases" 10:14:08 what? 10:14:20 D:< 10:14:27 D: 10:14:35 Doesn't compile 10:14:44 `pastelogs D: 10:14:45 kallisti: So, every time you call, does it read in the next line, or can you choose what lines you want to read? 10:14:48 http://codu.org/projects/hackbot/fshg/index.cgi/raw-file/tip/paste/paste.20031 10:14:57 while (<$f>) { s/^(.)/\u$1/; print } # capitalizes the first letter of each line 10:15:09 DeadlyFugu: perl is a general purpose languages, there are functions to do one and there are functions to do the other. 10:15:16 i didn't think that out very well 10:15:24 Ooh, I see. 10:15:27 zzo38: i don't know, i think i'm too tired. 10:15:56 DeadlyFugu: I've never heard of a language the restricts you from doing either of those things. 10:15:58 main = getArgs >>= mapM_ (putStr <=< readFile) 10:16:00 And it works 10:16:18 hq9x 10:16:29 non-esoteric language. :P 10:16:44 why would I be talking about those. sheesh. 10:16:46 hmmm.. i guess hq9x is not turing complete anyway 10:16:59 i dunno what computing class it is 10:17:05 kallisti: Maybe it's my lack of knowledge on Java's inbuilt library, but Java can only do it as a stream IMO 10:17:09 Sgeo: bonus points: also output stdin 10:17:10 hq9x doesn't exist, itidus21 10:17:24 kallisti, if there's no arguments? 10:17:24 DeadlyFugu: that is not an opinion. 10:17:36 Er... good point. 10:17:44 s/IMO/AFAIK 10:17:45 Sgeo: hmm, yes. 10:17:48 ahh hq9+ 10:18:00 maybe I have problems but it kind of bugs me that sgeo uses ((>>=) and (<=<)) rather than ((>>=) and (>=>)) or ((=<<) and (<=<)) 10:18:18 like I'm reading one way then suddenly the other 10:18:35 @hoogle Handle 10:18:35 System.IO data Handle 10:18:35 GHC.IO.Handle data Handle 10:18:35 Control.OldException handle :: (Exception -> IO a) -> IO a -> IO a 10:18:41 @hoogle stdin 10:18:42 System.IO stdin :: Handle 10:18:42 GHC.IO.Handle.FD stdin :: Handle 10:18:58 Wait, what? hoogle? Haskell + Google? 10:19:12 Apparantly so. 10:19:15 DeadlyFugu: http://docs.oracle.com/javase/1.4.2/docs/api/java/io/RandomAccessFile.html 10:19:27 I can only think of ugly ways to do it 10:19:28 :( 10:19:35 :( 10:19:37 DeadlyFugu: InputStream also has mark and skip methods that allow similar capabilities, but not arbitrary seeking. 10:19:41 monqy: haskell whiplash! 10:20:04 My ugly way failed 10:20:06 monqy: To me it is not problem; I use all four of those thing sometimes, and join and <*> and <$> and <$ really you just use what is use in that circumstances. 10:20:14 :t getArgs 10:20:15 Not in scope: `getArgs' 10:20:30 @hoogle getArgs 10:20:31 System.Environment getArgs :: IO [String] 10:20:31 Graphics.UI.GLUT.Initialization getArgsAndInitialize :: IO (String, [String]) 10:20:34 Sgeo: you probably need a case block 10:20:36 it often bugs me composition and application are in the directions they are 10:20:40 Sgeo: yeah use a case. 10:20:48 but cases are ugly 10:20:59 monqy: so I take it you never use pattern matching ever in Haskell? 10:21:18 no pattern matching, no named arguments, no problems 10:21:22 If I use a case, can it truly be considered a one-liner? 10:21:32 Sgeo: what is a line 10:21:49 It's not cheating to use { } for stuff? 10:22:16 But wouldn't you sometimes need to use pattern matching for some things? Especially, in case you define new datatypes, you would need to pattern match them 10:22:18 that depends on what you mean by line. 10:22:20 Sgeo: you don't even need { } if you do it cleverly. 10:22:36 Sgeo: if it makes you feel better use null instead 10:22:37 :t null 10:22:38 forall a. [a] -> Bool 10:22:44 and then if-then-else 10:22:57 yeah but then you have to use if-then-else 10:23:07 kallisti: also getContents might be better than stdin. 10:23:41 yes without doubt. 10:23:45 I know about those but am having trouble fitting them into my currently existing code 10:23:45 @hoogle GLUT 10:23:45 package GLUT 10:23:45 Graphics.UI.GLUT.State glutVersion :: GettableStateVar String 10:23:45 Graphics.UI.GLUT module Graphics.UI.GLUT 10:23:54 @hoogle GL 10:23:54 package glade 10:23:55 package gladexml-accessor 10:23:55 Data.Generics.Schemes glength :: GenericQ Int 10:23:56 Sgeo: lambdas are cool 10:24:12 or do lambdas count as extra lines? 10:24:13 kallisti: the real way to do it is use listToMaybe and maybe 10:24:17 Well, the GL didn't end well, but GLUT would apply Haskel can OpenGL O.o 10:24:20 or fromMaybe 10:24:23 one of those things 10:24:35 monqy: that's an option yes. 10:24:40 basically do it in a horrible convoluted way 10:24:44 yes. 10:24:51 but those are the best ways 10:24:51 right 10:24:53 right 10:25:07 right 10:25:17 @hoogle OpenGL 10:25:17 Graphics.Rendering.OpenGL module Graphics.Rendering.OpenGL 10:25:17 package OpenGL 10:25:18 package OpenGLCheck 10:25:18 I like to use maybe when I can. 10:25:31 -!- DeadlyFugu has left ("Happy Christmas, and a Merry New Year, Esoteric Peoples!"). 10:25:48 that guy.. 10:25:52 * kallisti abstains. 10:25:59 me too 10:26:03 monqy: http://sprunge.us/hSQL I like catMaybes 10:26:08 delicious 10:26:14 :t catMaybe 10:26:15 Not in scope: `catMaybe' 10:26:16 :t catMaybes 10:26:16 forall a. [Maybe a] -> [a] 10:26:22 I've used catMaybes. it'sg ood. 10:26:45 I feel it could be generalized. 10:27:00 to any MonadPlus 10:27:32 monqy: but yeah I thought that code was particularly concise. 10:27:43 Haskell is good at combinatorial stuff like that. 10:27:52 :t msum 10:27:53 forall (m :: * -> *) a. (MonadPlus m) => [m a] -> m a 10:27:58 oh hm 10:28:19 that's pretty close I guess. 10:28:20 and it's not DAta.Foldab.el.cOncat either 10:28:26 :t concat 10:28:27 forall a. [[a]] -> [a] 10:28:27 -!- Vorpal has joined. 10:28:31 :t Data.Foldable.Concat 10:28:31 Not in scope: data constructor `Data.Foldable.Concat' 10:28:33 :t Data.Foldable.concat 10:28:33 forall (t :: * -> *) a. (Data.Foldable.Foldable t) => t [a] -> [a] 10:28:41 the t is in all the wrong places... 10:28:43 I haven't looked at Foldable yet. 10:29:13 and it's not mconcat aagh 10:29:24 maybe it truly doesn't exist anywhere 10:29:41 well I think it needs Eq as well maybe? 10:29:45 wait 10:29:51 i think my brain was dead for the last few minutes: 10:29:54 would it even make sense 10:29:57 so it ould basically be filter (==mzero) 10:29:58 (or has my brain just died now) 10:30:01 or something. 10:30:09 unless you can implement it with mplus somehow 10:30:11 kallisti: but then you need the unwrapping 10:30:21 oh right 10:30:22 nevermind 10:30:27 MonadPlus can't do that part. 10:30:30 yeah 10:30:53 monads are so greedy. 10:30:55 Merry Christmas everyone! 10:31:09 something to convert to Maybe whatever and composition with catMaybes "good enough" 10:31:19 (In Sweden we celebrate on the 24th) 10:31:22 merry christmas eve. 10:31:24 Vorpal: oh I see. 10:31:27 heathens 10:31:31 Vorpal: also 10:31:35 hm? 10:31:39 `words --swedish 25 10:31:44 nackets flings parens utgav arssorlagsler avbetabil gulls utkrivningelse kursvis iglorskröp tiljövänn jodetsgrerarnas fullans knologerelse menas efterläkas lankens ansch yxlingard gens gåsa kanen brariens sundets järnt 10:32:33 everything you've ever dreamed of. 10:32:36 welcome to Yxlingard! 10:32:42 hm, a few valid words there. Not that I know what they all means. But due to the word concatenation allowed in Swedish that is easy. 10:33:21 I mean kursvis would mean "per course" (as in, university course for example), and "efterläkas" mean "after-linking" which I have no clue what it means 10:33:35 err läkas, not länkas 10:33:36 Is this what catMaybes means? (>>= maybe [] return) If so, you could generalize to other MonadPlus 10:33:38 read it wrong 10:33:39 so 10:33:43 "after-healing" 10:33:48 is it like after-shave? 10:33:49 perhaps 10:33:52 who knowsa 10:33:53 knows* 10:34:06 Other than list monads, that is 10:34:20 oh and sundets is a perfectly valid word. But I don't know how it translates 10:34:24 :t maybe 10:34:25 forall b a. b -> (a -> b) -> Maybe a -> b 10:34:31 zzo38: believe so yes. 10:34:41 oh right: sundets = the strait's 10:34:56 kallisti, ^ 10:35:06 what a crude language English is 10:35:28 English is the bee's knees and is basically the only language anyone needs to express anything in the most succinct way possible ever. 10:36:06 kallisti: Then you can make it work with other than list monad, doing: (>>= maybe mzero return) but I don't know how useful it becomes 10:36:24 kallisti, that is a weird expression, why "bees knees" 10:36:32 it doesn't even make any sense when you think about it 10:36:39 zzo38: less, but I could see it being useful perhaps with IO or something. 10:36:46 zzo38: er... no wait 10:36:51 zzo38: I don't know. 10:37:13 Vorpal: http://www.urbandictionary.com/define.php?term=bee's%20knees 10:37:22 It work with IO if you have a MonadPlus instance for IO. I have defined an Alternative instance for IO, so it could work MonadPlus as well 10:37:44 Vorpal: it's just a weird old thing that teenagers used to say probably in like the 50s or something. 10:37:49 I think. 10:37:52 I see 10:38:00 I mean, I know what it means, I just wonder why 10:38:14 no clue. 10:38:23 possible explanations are in the link though 10:38:25 :t null . drop 10:38:26 Couldn't match expected type `[a]' 10:38:26 against inferred type `[a1] -> [a1]' 10:38:26 Probable cause: `drop' is applied to too few arguments 10:38:52 Sgeo: wait does getArgs include the program name I don't think it does. 10:39:08 instance Alternative IO where { empty = fail []; x <|> y = catch x $ \e -> modifyIOError (\z -> if z == userError [] then e else z) y; }; 10:39:30 brb, moving bouncer to another computer 10:39:38 -!- Vorpal has quit (Quit: ZNC - http://znc.sourceforge.net). 10:39:41 Computation getArgs returns a list of the program's command line arguments (not including the program name). 10:40:10 -!- Vorpal has joined. 10:40:21 monqy: map (f . g) ls 10:40:23 you were reading one way 10:40:26 then suddenly the other 10:40:29 D: 10:41:05 >>> is an awfully big operator name 10:41:08 o> is much nicer 10:42:09 At least it's not Factor's if 10:42:19 hh? 10:42:29 huh, I mean 10:42:51 > 5 [ "Hello print" ] [ ] if 10:42:51 : parse error on input `if' 10:42:56 oops 10:43:02 > 5 [ "Hello" print ] [ ] if 10:43:02 : parse error on input `if' 10:43:08 I don't remember if that's the exact thing 10:43:38 But if I didn't make any mistakes, that should be a thing that tests whether the top value on the stack is > 5 and if so, print hello 10:43:46 Wait, probably 5 > not > 5 10:45:41 it is surprisingly hard to think of the most absurd way to write cat 10:49:13 -!- cheater has joined. 10:55:08 -!- zzo38 has quit (Remote host closed the connection). 10:55:19 getArgs >>= mapM (readFile >=> putStr) >>= (null >>> guard) >> (putStr =<< getContents) 10:55:22 I think this is right? 10:55:32 oops sorry monqy 10:55:42 getArgs >>= mapM (readFile >=> putStr) >>= (null >>> guard) >> (getContents >>= getContents) 10:55:56 mmm I forgot about guard; good functionm 10:56:15 getContents >>= getContents -- good 10:56:18 lol 10:56:25 getArgs >>= mapM (readFile >=> putStr) >>= (null >>> guard) >> (getContents >>= putStr) 10:57:11 but / uhh 10:57:22 :t mapM 10:57:23 forall a (m :: * -> *) b. (Monad m) => (a -> m b) -> [a] -> m [b] 10:57:47 I think that should work, unless I'm missing something. 10:57:49 I don't th ink that does what you want it to do 10:58:02 time to find out 10:59:10 you're basically throwing out your big list of actions when you bind (null >>> guard) 10:59:18 oh.. 10:59:32 also 10:59:40 is io even a monadplus? 10:59:46 believe so 10:59:59 or, well... 11:00:07 maybe it's when I see most often 11:00:25 lambdabot didn't complain about the lack of an instance though 11:00:35 what 11:00:46 maybe it's "when" 11:00:48 I see with IO 11:00:51 instead of "guard" 11:00:55 oh 11:01:09 when makes sense yes 11:01:17 but will still discard the actions 11:01:36 unless I tell to exit or something when not.null 11:02:04 how do you even do that. 11:02:22 when variants 11:02:29 hard to name though 11:02:34 oh 11:02:35 exitSuccess in System.Exit 11:02:38 you didn't mean that 11:02:48 hehehehh are you doing that? nice 11:02:57 it's a bit ugly but it lets me keep the same layout. 11:04:37 er so wait 11:04:46 how do I get it to /not/ discard all of the actions 11:04:50 :t getArgs >>= mapM (readFile >=> putStr) >>= (not >>> null >>> (`when` exitSuccess)) >> (getContents >>= putStr) 11:04:51 Not in scope: `getArgs' 11:04:51 Not in scope: `exitSuccess' 11:04:55 I think this suffers the same problem 11:04:59 duplicate the actions 11:05:14 or 11:05:22 duplicate the list before you map stuff onto it 11:05:38 there are lots of ways to duplicate stuff 11:05:40 how do I do that... 11:06:25 arrow stuff, join (function monad), list monad stuff... 11:08:09 hlep 11:08:37 ??? 11:08:40 like 11:08:43 :t (&&&) 11:08:44 forall (a :: * -> * -> *) b c c'. (Arrow a) => a b c -> a b c' -> a b (c, c') 11:09:02 > f &&& g $ x 11:09:03 Ambiguous type variable `c' in the constraints: 11:09:03 `GHC.Show.Show c' 11:09:04 a... 11:09:06 > f &&& g $ x :: Expr 11:09:07 Couldn't match expected type `SimpleReflect.Expr' 11:09:07 against inferred ... 11:09:25 @unpl f &&& g $ x 11:09:26 ((f &&& g) x) 11:09:28 lol 11:09:30 > show &&& succ $ 5 11:09:31 ("5",6) 11:09:39 loloh 11:09:49 the 5 goes to two places!! 11:09:50 so then... 11:09:54 instead of >>= 11:09:55 I want 11:09:57 &&& 11:10:03 &&& is only one way to do it 11:10:13 no I like it. 11:10:19 ok 11:10:24 another great one: 11:10:48 > ([show, succ] <*>) . return $ 5 11:10:49 No instance for (GHC.Num.Num GHC.Base.String) 11:10:49 arising from the literal `... 11:10:52 oops i goofed 11:10:57 uhh 11:11:27 i forget how i do that one :( 11:11:36 getArgs >>= mapM (readFile >=> putStr) _already_ performs the actions, the part after that next >>= only gets a list of ()'s. (which is still clever, i thought that had to be wrong at first but it's enough to count the files.) 11:12:09 oh right with <*> you have to have all the results be of the same type :( 11:12:38 aagh 11:13:15 :t show &&& succ 11:13:16 forall b. (Show b, Enum b) => b -> (String, b) 11:15:40 monqy: you lied 11:15:51 I thought the action was already performed. You can't really "throw them away" 11:15:54 i wasn't thinking straight 11:15:58 :( 11:16:03 no worries. 11:16:06 happens to me often. 11:16:15 you're throwing away your future 11:16:19 but 11:16:23 in a different place 11:16:31 a bit earlier than the (null >>> guard) 11:16:37 main = getArgs >>= mapM (readFile >=> putStr) >>= (not . null >>> (`when` exitSuccess)) >> (getContents >>= putStr) 11:16:40 this works 11:16:50 I think 11:16:53 I will test further 11:17:47 yeah seems to work fine. 11:17:57 now get rid of that exit :( 11:18:17 oh I don't need that anymore do I. 11:19:06 ? 11:20:10 awww yeah 11:20:21 what is it now 11:20:25 main = getArgs >>= mapM (readFile >=> putStr) >>= (null >>> (`when` (getContents >>= putStr))) 11:20:28 good cat 11:20:33 good cat 11:21:17 did Sgeo already finish his? 11:21:23 I've been working on this one for a while. 11:21:25 maybe he gave up? 11:21:39 :t (null >>> (`when` ?x)) 11:21:40 forall a (m :: * -> *). (?x::m (), Monad m) => [a] -> m () 11:21:55 I used >>> instead of . because Monqy likes everything to flow in one direction or something. 11:23:26 I have to agree it does look nice reading it left to right without backtracking. 11:26:00 is there a better way to write: 11:26:05 import Prelude hiding ((.)) 11:26:19 oh wait I don't need it anymore 11:26:27 import Preulude () 11:26:30 uupse 11:26:32 .....lol no 11:26:44 bad oops monqy 11:27:34 should I ruin this program by implementing command line options? 11:27:36 I don't think I should. 11:28:05 I'll have to resort to do notation to make it readable. 11:28:06 like what 11:28:09 :( 11:28:12 man cat 11:28:14 like those. 11:28:39 sounds like too much work. 11:28:42 good cat is good. 11:28:52 no one uses those anyway. 11:34:52 do you guys prefer flip f x or (`f` x) ? 11:35:25 I usually wish I didn't have to use either, but when I have to I prefer the infix section. 11:35:51 whenever i'd have to use either i stop writing haskell and cry to myself 11:36:58 monqy: you must have a stressful life. 11:37:02 crying all the time. 11:37:08 to yourself 11:37:58 my trick is to avoid programming 11:41:11 `cat @{[join ' ', @ARGV]}` 11:41:13 cat: @{[join ' ', @ARGV]}`: No such file or directory 11:41:19 cat in perl. it even implements the command line options. 11:41:39 oops 11:41:42 print `cat @{[join ' ', @ARGV]}` 11:43:41 actually I think... 11:43:44 print <> 11:43:45 is cat 11:43:52 print<> yes 11:44:58 <> basically does cat-like file / stdin IO 11:45:18 great 11:45:44 an EXTREMELY useful thing when writing shell utilities 11:45:51 that operate on files. 11:45:54 or optionally stdin 11:46:10 "print<>" is, though, one of those cats that reads all the input before printing any output. 11:46:19 such is life 11:46:22 print while<> 11:46:29 dobulegreat 11:46:31 is more memory efficient, yes. 11:46:59 also won't hang up on infinite stdin I guess. 11:47:01 how easy would it be to do the other cat without naming any variables 11:47:04 er "indefinite" 11:47:13 "the other cat"? 11:47:19 the big cat 11:47:26 oh 11:47:27 both things cat 11:47:32 The lion? 11:47:33 that is both things cat. 11:47:39 oh? 11:47:41 yes 11:47:49 :o 11:48:06 <> sccans through VARG and reads each file given, then spits them all out to you concatenated together. 11:48:12 if no arguments are given, it gives you stdin 11:48:12 great 11:48:18 *ARGV 11:48:41 It even handles the "-" argument right. 11:49:05 in list context it gives you a list of lines (with newlines still intact) and in a while loop it reads line by line 11:49:56 `run echo foo > tmp.txt; echo bar | perl -e 'print<>' tmp.txt - tmp.txt; rm tmp.txt 11:49:59 foo \ bar \ foo 11:50:17 main = getArgs >>= mapM (readFile >=> putStr) >>= (null >>> (`when` (getContents >>= putStr)))hm 11:50:21 ...oh 11:50:25 I had that on my buffer for some reason. 11:50:27 weird. 11:50:34 I was probably admiring it. 11:51:08 -!- monqy has quit (Quit: hello). 11:51:20 monqy: hello 11:51:45 someone should make <> for Haskell and put it in base somewhere. 11:51:56 :t when 11:51:57 forall (m :: * -> *). (Monad m) => Bool -> m () -> m () 11:52:10 @hoogle when 11:52:10 Control.Monad when :: Monad m => Bool -> m () -> m () 11:52:10 System.Posix.Terminal WhenDrained :: TerminalState 11:52:10 Test.QuickCheck.Property whenFail :: Testable prop => IO () -> prop -> Property 11:52:11 ah 11:54:09 fizzie: unfortunately my code doesn't handle - at all, though I could add it in. 11:54:38 unless readFile '-' is stdin 11:54:42 but I don't think it is. 11:55:02 Don't worry, "print<>" doesn't handle "-u" either. 11:55:18 hm what does - do if there is more than one? 11:55:19 heh 11:55:24 hm 11:55:32 `run echo lol | cat - - 11:55:34 oerjan: "The cat utility shall not close and reopen standard input when it is referenced in this way, but shall accept multiple occurrences of '-' as a file operand." 11:55:35 lol 11:56:18 fizzie: what is the point of -u exactly? backwards compatibility with something? 11:58:23 IO could be a MonadPlus though. 11:58:42 mzero = exitSuccess -- or exitFailure 11:58:54 hmmm, but what is mplus 11:59:48 -u Write bytes from the input file to the standard output without 11:59:48 delay as each is read. 11:59:53 kallisti: that is what posix says 12:00:00 oh 12:00:07 man cat on my system says -u is ignored. 12:00:07 -u (ignored) 12:00:10 yeah 12:00:11 that is what gnu says yes 12:00:17 kallisti: try man 1p cat 12:00:26 if you have the required package installed 12:00:34 otherwise just go and check the posix spec directly 12:01:03 mplus a b = mappend <$> a <*> b 12:01:15 and then have an instance (Monoid a) => IO a 12:01:17 or something 12:01:32 that's bad though. 12:01:42 I only know of one *nix cat implementation in an esolang btw 12:01:49 most esolang cats are just copy stdin to stdout 12:02:28 I have one I wrote in befunge98 that actually does POSIX cat (except for -u because I couldn't figure out what it meant or how to do it from befunge) 12:02:49 not sure if it handles the "The cat utility shall not close and reopen standard input when it is referenced in this way, but shall accept multiple occurrences of '-' as a file operand." stuff properly 12:03:38 kallisti: here it is, if you are interested: http://sprunge.us/NEYE 12:04:02 I have a confession. 12:04:13 btw, it is rather sparse befunge98 12:04:19 I've never properly learned befunge-98 12:04:22 ah 12:04:22 yes. 12:04:34 kallisti: the best way to learn the language is to write an implementation for it 12:04:43 that could be fun yes. 12:04:54 obviously I should begin with a compiler 12:04:58 hah 12:05:08 fizzie: speaking of which, any progress on jitfunge? 12:05:28 hmmmm jitfunge that's interesting. 12:05:31 No, but I still have hope. 12:05:34 -!- ais523 has joined. 12:05:43 oh and don't ask me to explain that code. I can't. I wrote it 2010. 12:05:54 there are plenty of comments though 12:06:06 note to self: the 3.5" plug is not the end that goes in the ear 12:06:14 err, 3.5mm 12:06:15 ais523: you tried that? 12:06:16 ouch 12:06:21 Vorpal: no, I noticed just in time 12:06:25 heh 12:07:17 hmmm I guess you'd need like a lookahead buffer 12:07:21 Anyway, you can get multiple things out of multiple -s if stdin is a terminal; e.g. echo bar > tmp.txt; cat - tmp.txt -; type in "foo" + ^D, get "foo" + "bar" out, then type in something else + ^D and that is read from the second "-". 12:07:44 and then when the jit sees a sequence of instructions it can compile it outputs the compilation and then jumps to point where it stopped compiling 12:07:50 fizzie: right 12:08:12 kallisti: iirc it traces so it is compiled if it is executed again 12:08:19 or such 12:08:27 kallisti: My jitfunge is a tracing jit, in the SpiderMonkey/TraceMonkey fashion. 12:08:41 * kallisti knows absolutely nothing about JIT compilation. 12:08:53 it seems interesting though 12:09:06 I should learn some things about it. 12:09:41 fizzie: I guess it would compile the cat program fairly well. Very little self modification in executed parts as far as I remember 12:10:03 several fingerprints though 12:10:12 fizzie: how did jitfunge handle fingerprints? 12:10:19 did it call out or inline the code? 12:10:43 While interpreting, all instructions are stored in "traces"; when I trace is encountered a second time, the instructions in it are compiled to native code. The self-modification is the most difficult part; e.g. if you "p" something somewhere, it can change the way wrapping happens, so potentially it may invalidate all traces that wrap. 12:10:45 Call out. 12:10:48 ah 12:11:23 So it doesn't need to keep track of what the fingerprint instruction-bindings were when entering a trace. 12:11:34 fizzie: cardinally wrapping traces could be fine wrt boundaries 12:12:20 Not if the new instruction happens to fall on the same line, which it wouldn't notice otherwise, since those outside-the-boundaries regions of course aren't flagged to "belong" to a trace. 12:12:47 hm is (2,0) considered cardinal? I don't think it is right? 12:12:53 because that could be invalidated iirc 12:13:00 Phantom Hoover needs another brick, I think: http://esolangs.org/wiki/There_Once_was_a_Fish_Named_Fred 12:13:16 equivalent to BF minus input, and obviously so 12:13:25 They all need to be checked in any case, just in case the new wrapping line hits the coordinate that was p'd to. 12:13:26 ouch 12:13:32 fizzie: well yes 12:13:58 fizzie: but it should be possible to optimize simple cardinal ones if you have a table of lines/columns they are on. 12:14:18 while flying traces probably needs to be redone 12:15:41 not sure it is worth the effort though 12:16:12 bah, why are all the youtube starcraft 2 casters taking Christmas off. 12:16:21 THEY SHOULD BE CASTING GAMES FOR ME TO WATCH EVERY DAY. 12:16:28 heh 12:16:42 why are the minecraft guys taking a day off as well, that is even worse 12:16:54 NO WRONG. 12:17:09 minecraft is not an entertaining sport. 12:17:15 couldn't you just look at replays of older games? 12:17:18 you could just play minecraft and be more entertained. 12:17:20 hey they do have an entry up, I guess they prepared it 12:17:25 ais523: yes, that's what I'm doing. 12:17:28 but they're getting harder to find. 12:17:40 I've already watched most of the old good ones. 12:19:15 Given a point and an arbitrary delta, it's not a very complicated test to check whether a new point can hit without iterating through; just check (newx-px) % dx == 0 && (newy-py) % dy == 0 && (newx-px)/dx == (newy-py)/dy -- with the obvious omissions for zero dx or dy. Of course it'd need to handle things like the last instruction before wrapping being a ; or whatever. 12:20:08 fizzie: hm right 12:20:22 fizzie: also j and wrapping 12:20:26 I forgot how that works 12:20:40 fizzie: hm do you do a new trace every time the delta changes? 12:21:19 ISTR that with j you just proceed forward ignoring wrapping; and then wrap afterwards. Since "semantically" wrapping works by proceeding forward for an infinitely long distance, and then coming back in from "the other side". 12:21:26 And no, that would be very subtimal. 12:21:40 what about for x? 12:22:02 I guess if the input to x isn't constant it might be worth splitting the trace there 12:22:28 If it has constant-folded arguments, probably not. I think I do have 'x'-related end-of-trace "type". 12:22:34 ah 12:22:35 brb 12:22:51 I have the tracing code mark each coordinate it "passes through", with different "modes" for regular execution, stringmode, ;-jumping and whatever, so that the 'p' code doesn't need to invalidate things unnecessarily. 12:23:41 It's not clever enough to do really clever things, though, like just modifying the compiled blob for a trace containing a string-mode sequence when someone p's a non-doublequote value inside. 12:24:26 I guess that could be done by moving stringmode-push data blocks to some table or whatever, and then just referring to those from within the code. 12:26:29 -!- nooga has joined. 12:28:47 back 12:29:27 fizzie: interesting idea 12:29:35 fizzie: what does it currently compile into for string mode? 12:29:47 a series of push? 12:31:23 fizzie: btw you know how gcc sometimes compile code like a copy loop into a call to memcpy? 12:31:49 I was recently doing some embedded development, and I was implementing my memcpy. However gcc decided to compile the code into a call to memcpy 12:31:59 (I did find a flag to fix that) 12:34:39 I think it's a series of pushes, yes. It could easily be a memcpy-a-block-on-the-stack-with-preallocation style of a thing. 12:35:54 Vorpal: hmm, did it have the restrict in the prototype? 12:36:05 otherwise, gcc could only have compiled it into a call to memmove instead 12:36:51 ais523: I believe it did 12:37:18 I can see why restrict was invented 12:37:24 ais523: curiously it didn't seem to be inclined to do the same for the memset implementation 12:37:37 it's something that's typically obvious to users, but not to compilers, and helps a lot in implementation 12:37:42 also, how often do you use memset? 12:37:55 it's not that commonly useful 12:38:05 ais523: is there some way to undo more than one wiki diff in one step when there are later genuine edits? 12:38:17 ais523: well, I used it to zero the .bss area on boot 12:38:27 but that is an embedded problem 12:38:39 oerjan: not in an automated way, unless you copy the wikitext to files on your computer and run diff3 a few times manually 12:38:44 ais523: anyway it is useful since there is no recalloc 12:39:03 Vorpal: but full-of-zero-bits is not the same thing as full-of-zeroes, necessarily 12:39:10 eh? 12:39:10 ...that's even more awkward for me than undo'ing twice, alas :( 12:39:12 also, full-of-zeroes typically isn't the default state of an object 12:39:25 true 12:39:32 oerjan: indeed, I can never remember how to get diff3 to do what I want 12:39:38 cfunge manually has a loop to fill with spaces in the static funge space 12:39:53 ais523: anyway all zeros isn't that uncommon. Why else would .bss even exist? 12:40:08 ais523: it's just that this time zzo's spam deletion actually made things _harder_ to fix :P 12:40:24 because C initializes statics to all bits zero, typically 12:40:27 people use diff3? 12:40:30 seriously? 12:40:42 Vorpal: typically not directly, but it gets used indirectly, by things like VCSes, all the time 12:40:47 either the program itself, or just the concept 12:40:48 hm true 12:41:04 and I guess it was used more before VCSes became common 12:41:07 well I hate 3-way merging even when it is a vcs that makes me do it 12:41:28 diff3 is for two-way merging 12:41:32 err yeah 12:41:34 the three files are original, new 1, and new 2 12:41:38 indeed 12:41:53 I tried to use it for an actual three-way merge a while back by omitting the original, it didn't work well 12:42:02 heh 12:42:06 I guess you need diff4 then 12:42:13 or do diff3 twice 12:43:24 wow, I've just discovered that C11 has been released 12:43:32 (presumably it actually happened a few days ago and I'm slow as usual) 12:43:32 ais523: you mean the C standard? 12:43:34 yep 12:43:35 Since Dec 8th. 12:43:37 nice 12:43:39 You are slooow. 12:43:45 And don't logread. :p 12:43:46 so is Vorpal, by the sound of it 12:43:56 is there a spec available without paying a lot somewhere 12:43:57 should I logread the 8th or the 9th? 12:43:57 It's been discussed on-channel at least twice. 12:44:01 like the last draft or whatever 12:44:06 Well, we're not *that* fast either. 12:44:13 Vorpal: not sure yet, but probably there's a last draft around somewhere 12:44:15 `pastlog C11 12:44:37 anyway, I wonder how long before gcc has the useful bits of it 12:44:42 well, gcc + glibc I guess 12:44:47 2008-08-13.txt:17:45:08: http://asiekierka.boot-land.net/asiecomic11.jpg <- O_O 12:45:04 Anyway, the WG14 page only had the "it's released" newspost up on Dec 19th, so the discussions before that were more like "hmm, it's in stage 60.60 == released in ISO's catalog, but the WG14 page doesn't say anything about it being released, and neither does Wikipedia, so is it *really* out?" 12:45:11 `pastlog (?-i:C11) 12:45:19 wait, it probably doesn't do Perl regexes 12:45:21 2011-12-14.txt:08:21:56: Everyone wants a C11 and not a C12, mayhaps. 12:45:28 guess it does 12:45:28 oh, it does that, though, I Think 12:45:32 *I think 12:45:49 That's around the time I brought up that it's in the catalog, having somehow ran across it a few days earlier. 12:46:00 at least, it'd be a huge coincidence to interpret that as "turn off case-insensitivity" if it wasn't at least slightly Perl-like 12:46:17 indeed 12:46:29 I was actually looking for something related to C99, and it weirded me out since it looked very released, but Wikipedia hadn't said anything about it. 12:46:51 so what is new in C11? 12:47:03 The same things that were new in the draft. :p 12:47:25 threads, gets removed, anything else? 12:47:31 :quote help flushq 12:47:32 was there static asserts or something? 12:47:34 err 12:47:41 [524] ais523 flushq Help not found 12:47:50 Also N1570 is the draft you want -- http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1570.pdf 12:47:51 :quote flushq 12:48:00 err, why can I not type / today? 12:48:01 ais523: /flushq is a thing in xchat to clear the local send queue 12:48:07 not server side afaik 12:48:11 Vorpal: yep, I was checking to see if it was client-side or server-side 12:48:19 Yes, though the XChat help for it is really confusingly said. 12:48:21 and simply cannot distinguish / from :, apparently 12:48:27 Usage: FLUSHQ, flushes the current server's send queue 12:48:44 That's "current server's send queue" as in "XChat's send queue for the current server". 12:48:46 well it means as opposed to for every network you are connected to 12:48:46 there should probably be a server-side command to do that, meaning "oops, I accidentally flooded but don't actually mean to send all that" 12:49:04 ais523: That's called Excess Flood. 12:49:04 ais523: the server doesn't queue your stuff, it disconnects you if you flood 12:49:18 Vorpal: it fakelags for a while, doesn't it? 12:49:23 or is that always a client feature? 12:49:31 hm maybe freenode does, don't know 12:49:33 I thought excess flood was even more extreme than that 12:49:37 All delayed-sending stuff I know of is client-side. 12:49:38 hmm, it's simple enough to test 12:49:39 usually such lag is client side as well 12:49:43 at least 12:50:33 -!- ais523|direct has joined. 12:50:46 netcat 12:50:49 iirc irc servers mostly have large queues between themselves + smaller queues towards the clients to handle network lag 12:50:51 and such 12:50:55 netcat doesn't do any queueing, right? 12:51:00 not afaik 12:51:15 it was a rhetorical question 12:51:24 ah 12:51:47 wait, I got that backwards 12:52:27 spam line 1 12:52:28 spam line 2 12:52:28 spam line 3 12:52:28 spam line 4 12:52:28 spam line 5 12:52:28 spam line 6 12:52:28 spam line 7 12:52:37 hmm, that all came out instantly for me 12:52:41 for everyone else too? 12:52:48 They have the same-second timestamp. 12:52:50 so it seems fakelag is indeed a client thing, not a server thing 12:52:57 -ais523|direct- VERSION you know it's a pain to type this out by hand, right? 12:52:58 yes 12:53:01 why else would I do it 12:53:21 But the flood queues are counted in bytes, and there's a bit of a burst allowance for network lags and such. 12:53:22 hmm, was that a correctly-formatted ctcp response, and your client just writes it like that? 12:53:25 or did I screw up the formatting? 12:53:33 So short lines don't go excess flood so easily than long ones. 12:53:37 for everyone else too? <-- well there are some :02 and some :03 12:53:41 wrt the timestamps 12:53:47 was afk 12:53:55 -!- ais523|direct has quit (Client Quit). 12:54:03 hmm, was that a correctly-formatted ctcp response, and your client just writes it like that? <-- not sure 12:54:08 yes 12:54:08 Vorpal: Anyway yes, static_assert though you could have faked those all the time with negative-sized arrays or whatever. There's a "x" letter for fopen to get O_CREAT|O_EXCL exclusive open without resorting to platform-specificness. Explicit Unicode support. 12:54:10 it writes it like that 12:54:16 Vorpal: And that _Generic thing. 12:54:24 fizzie: _Generic? 12:54:29 Vorpal: heh, it just strips out the control-As in CTCP responses, then 12:54:39 fizzie: UTF-8? 12:54:48 and didn't we have widechar_t before? 12:55:02 ais523: probably 12:55:06 I'm using xchat atm 12:55:31 Vorpal: #define flop(X) _Generic(((X), long double: flopl, default: flop, float: flopf) is the usual example, to make type-generic floating-point calls, style. 12:55:57 Vorpal: But in general _Generic(expr, type1: expr1, type2: expr2, default: expr3) to dispatch by type. 12:56:31 hm 12:56:45 right 12:56:57 Vorpal: And we have wchar_t, but it's not explicitly Unicode-related at all. C11x adds char16_t and char32_t which are always in UTF-16 and UTF-32, respectively, and functions to deal with that; as well as u8"foo" string literals that are always UTF-8. 12:56:58 fizzie: so why not vararg number of types? 12:57:26 Heh, "C11x". 12:57:36 Couldn't decide between C11 and C1x, apparently. 12:57:56 fizzie: UTF-16, not UCS-2? 12:58:03 UTF-16 is a bit of an awkward format 12:58:21 I would call UCS-2 more awkward, since it can't encode all the characters. 12:58:55 UCS-2 is simple but wrong 12:59:04 which I consider less awkward than being complex but correct 12:59:24 Vorpal: Also GCC's "unnamed struct/union fields within structs/unions" extension. 12:59:29 Well, GCC's and other compilers'. 12:59:40 I see someone's updated http://gcc.gnu.org/onlinedocs/gcc/Unnamed-Fields.html to refer to C11 already. 13:00:55 I have to leave, visit relatives. See you tonight 13:01:21 Vorpal: what day is Christmas where you are? 13:01:25 it's the 25th in the UK, and I think the US too 13:01:26 today 13:01:31 ah, merry Christmas, then 13:01:48 ais523: merry christmas you too 13:01:57 well, hmm 13:02:02 24th in Finland for the presents, 25th for the supposedly-the-main-celebration-but-I-think-in-general-people-just-sleep-late-and-relax day. 13:02:21 fizzie: well like that here yes. It is called christmas eve but the main celebrations are today 13:02:22 "merry" isn't really the right word; it means "slightly drunk", which is appropriate for most people's Christmasses, but not for mine 13:02:33 ais523: okay, good christmas then 13:02:40 we say "god jul" in Sweden 13:02:47 so that would be a literal translation 13:03:03 ah, I see 13:03:08 now, cya. I might be on over 3G/GSM to my bouncer later 13:05:40 ais523: Some specifics: char16_t equals uint_least16_t, char32_t equals uint_least32_t, and in fact they might not necessarily be UTF-16 and UTF-32; but __STDC_UTF_16__ is defined if char16_t is UTF-16, and __STDC_UTF_32__ is defined if char32_t is UTF-32, and I think the assumption is that they usually are. 13:06:08 ah, that sounds suitably Cstandardish 13:06:28 (look, no diareses!) 13:07:23 Anyway, for string literals "foo" is in char with unspecified encoding, L"foo" is in wchar_t with unspecified encoding, u"foo" and U"foo" are in char16_t and char32_t, respectively, with unspecified encoding unless those macros are defined; and, finally, u8"foo" is also in char, but explicitly UTF-8 encoded. 13:10:14 I'm not entirely sure what you're supposed to do with an UTF-8 string literal, since all multibyte-related functions use the locale, and I haven't seen a way to ensure the locale multibyte encoding is UTF-8. 13:10:29 But I guess if you want some UTF-8 bytes in your program that could be nice. 13:11:39 It's not *much* of an Unicode support, to be honest. 13:14:44 Also they've had the __STDC_ISO_10646__ macro for a while; if that's defined (to an integer constant of the form yyyymmL), the integer values of wchar_t correspond to Unicode code points, conforming to ISO/IEC 10646 (i.e. Unicode) with all amendments and TCs published as of that year and month. 13:16:33 And VLAs have been made optional, with __STDC_NO_VLA__ defined on systems which lack them. 13:17:23 (Same applies to complex numbers.) 13:18:35 Oh, and malloc(n) has been complemented with aligned_alloc(a,n) which returns n bytes with alignment a. 13:21:18 -!- elliott has joined. 13:26:29 fizzie: presumably you get a UTF-8 library from somewhere else 13:27:24 heh, aligned_alloc sounds like a fun portable way to mmap NULL to something, or else determine that that's impossible 13:27:35 you just ask for a bits-in-a-pointer-aligned-pointer 13:28:04 OTOH, it's probably not allowed to return NULL on success 13:29:40 ais523: context for utf-8? 13:29:41 elliott: You have 2 new messages. '/msg lambdabot @messages' to read them. 13:29:49 -!- incomprehensibly has joined. 13:30:05 elliott: the fact that C11 defines UTF-8 string literals but not UTF-8 library functions 13:30:16 so you can write UTF-8 strings easily, but then not do anything with them 13:30:29 I'm not entirely sure what you're supposed to do with an UTF-8 string literal, since all multibyte-related functions use the locale, and I haven't seen a way to ensure the locale multibyte encoding is UTF-8. 13:36:58 -!- oerjan has quit (Remote host closed the connection). 13:37:09 -!- oerjan has joined. 13:45:55 * kallisti just got a bunch of ideas for words.pl 13:46:05 WACRO IS COMING BACK. :) 13:46:16 as an option to words. 13:46:16 `macro 13:46:22 NTH 13:46:26 nth 13:46:45 there will be --acro and --wacro, the first one does what wacro used to do 13:47:03 hello from slow 3G. 13:47:16 the second one basically multiplies the usual word generator probability with the probability of the character appearing at the beginning of the word. 13:47:19 elliott: oh, and `pastlog was useful already, I did a `pastlog C11, and then a `pastlog (?-i:C11) when it got a lowercase C first time 13:47:30 oh and that is over even slower bluetooth 13:47:30 to get a sort of middle ground between "good starting letter" and "good word letter" 13:47:33 hmm, that last sentence of mine seems really Vorpallish 13:47:38 which I think will make something similar to word-like acronyms. 13:48:15 and I need to find a second power outlet so I can plug in my phone... 13:48:16 -!- elliott_ has joined. 13:48:32 elliott_: elliott: oh, and `pastlog was useful already, I did a `pastlog C11, and then a `pastlog (?-i:C11) when it got a lowercase C first time 13:50:16 Vorpal: Rest of the news: And VLAs have been made optional, with __STDC_NO_VLA__ defined on systems which lack them. (Same applies to complex numbers.) Oh, and malloc(n) has been complemented with aligned_alloc(a,n) which returns n bytes with alignment a. 13:50:21 hm 20 kb/s down. Ouch. 13:50:23 bbiab 13:51:53 I just speedtest.net'd this new tube, and it's getting 64.5 Mbps down according to their test, even though the contract just says 50 Mbps down. I guess I should be glad it's off the theoretical number into that direction. 13:52:40 03:26:58: If someone knew what they were doing, they could easily take down the bot. 13:52:42 fizzie: perhaps the contract is a guarantee that they'll manage at least what they claim they will? 13:52:47 -!- elliott has quit (Ping timeout: 276 seconds). 13:52:51 which bot? HackEgo? 13:52:55 yes 13:53:02 it is the duty of every newbie to believe gregor is a complete idiot 13:53:07 ais523: No, the contract has a nominal speed of 50 Mbps and they guarantee that it is at least 25 Mbps. 13:53:26 elliott_: well, taking down the bot is easier than hacking into the system it's running on, I suspect 13:53:28 but even then, quite hard 13:53:37 I could take it down very easily with a kickban ;) 13:53:46 just there'd be no reason to do so 13:54:33 03:31:05: Inside the UML, you're running as root. 13:54:36 pikhq_: no you're not 13:55:04 elliott_: arguably, a simple `run rm * takes down the bot until someone else does a `revert 13:55:15 well, or would do if I remembered to put appropriate options in there 13:55:18 ais523: wrong 13:55:20 `run rm -rf * 13:55:23 No output. 13:55:27 `quote 13:55:31 361) when I command it to do couple useful operations it instead mutilates my cock. 13:55:40 elliott_: heh, how did that work? 13:55:47 `ls 13:55:50 Mineso \ bin \ canary \ karma \ lib \ main \ main.cpp \ min.sh \ paste \ quotes \ share \ wisdom 13:55:52 ais523: guess 13:56:08 it doesn't commit things that delete too many/all the files 13:56:17 so it's like an infinitely long race condition 13:56:24 is my guess right? 13:56:37 ais523: no; hint: I did `ls for a reason 13:56:58 elliott_: is that the same as `ls normally outputs? 13:57:10 `mkdir t 13:57:13 `mkdir t/a 13:57:13 No output. 13:57:16 mkdir: cannot create directory `t/a': No such file or directory 13:57:18 ais523: yes, and you're not looking at it 13:57:21 `ls 13:57:23 Mineso \ bin \ canary \ karma \ lib \ main \ main.cpp \ min.sh \ paste \ quotes \ share \ wisdom 13:57:25 read it 13:57:36 I don't see anything particularly notable about it 13:57:42 I have read it, but don't get what I should be looking at 13:57:50 `cat canary 13:57:52 No output. 13:58:02 Cat ate the canary, eh? 13:58:07 aha, it doesn't commit things that delete canary? 13:58:09 `rmdir t 13:58:12 rmdir: failed to remove `t': No such file or directory 13:58:18 ais523: yep 13:58:34 well, that's pretty easy to bypass 13:58:34 And VLAs have been made optional, with __STDC_NO_VLA__ defined on systems which lack them. <-- ouch 13:58:59 Vorpal: I suppose it's not very likely a "real" compiler will not implement them. 13:59:03 (Same applies to complex numbers.) <-- did anyone use them? As far as I know, hardware can't really optimise it specially anyway 13:59:21 Oh, and malloc(n) has been complemented with aligned_alloc(a,n) which returns n bytes with alignment a. <-- kind of useful yeah 14:00:46 Vorpal: I don't know about complex; though e.g. FFTW does things so that if you #include before including fftw3.h, it will define fftw_complex to be the native complex, and then you can use the standard arithmetic on them. 14:00:56 hm 14:01:03 (I'm not entirely sure how that's done in practice; maybe there were some C99 promises about the layout of complex types?) 14:01:05 does gcc even support complex numbers properly? 14:01:26 It claims to, on the C99 status page. 14:01:39 got a link to that? google is painfully slow on this connection 14:02:00 "GCC does not support the Annex G imaginary types and complex multiplication and division have excess overflows at runtime (although not beyond those permitted by C99)." 14:02:04 http://gcc.gnu.org/c99status.html 14:02:12 imaginary types? 14:02:17 like only the i part? 14:02:31 how can it be hard to support if you support complex numbers anyway? 14:03:18 "deprecate ungetc at the beginning of a binary file" <-- wait, what would ungetc mean at the beginning of a file anyway? 14:03:56 hm I guess you could push random stuff into the stream buffer 14:04:06 ungetc is kind of silly anyway 14:04:17 Yes, or just as a field in the FILE; it only guarantees a single character, after all. 14:04:19 would be better to simply have a peek function to look at the next char 14:04:44 Anyway yes, imaginary types are imaginary-part-only. 14:04:46 I mean, that would cover all the reasons for using ungetc I can think of. 14:04:53 fizzie, how can they be hard to support? 14:05:15 Perhaps out of boredom? 14:05:52 wasn't there a complex numbers fingerprint? 14:06:07 ah yes CPLI 14:06:14 fizzie: GCC need a c11status, too 14:06:43 hm looks like I do the maths for CPLI by hand, not using complex.h 14:07:14 quite trivial maths so 14:08:14 Oh, there it is. 14:08:24 oh? 14:08:29 "Each complex type has the same representation and alignment requirements as an array type containing exactly two elements of the corresponding real type; the first element is equal to the real part, and the second element to the imaginary part, of the complex number." 14:08:32 I guess static asserts might be kind of useful. Threads and atomic primitives are definitely useful 14:08:51 That's probably how FFTW manages to do the "native complex if complex.h included" trick. 14:09:19 It's typedef double fftw_complex[2]; in the "usual" case. 14:09:27 right 14:09:39 that should be compatible on most systems 14:09:45 fizzie: hmm, reminds me of when I saw SunOS-on-sparc defining jmp_buf as int[12] 14:09:55 "C++ has its own complex template class, defined in the standard header file. Reportedly, the C++ standards committee has recently agreed to mandate that the storage format used for this type be binary-compatible with the C99 type, i.e. an array T[2] with consecutive real [0] and imaginary [1] parts. (See report http://www.open-std.org/jtc1/sc22/WG21/docs/papers/2002/n1388.pdf WG21/N1388.) Although not part of the official standard as of th 14:09:55 is writing, the proposal stated that: “This solution has been tested with all current major implementations of the standard library and shown to be working.” To the extent that this is true, if you have a variable complex *x, you can pass it directly to FFTW via reinterpret_cast(x)." 14:10:02 ais523, heh? 14:10:04 or possibly it was a different length from that 14:10:16 bbl 14:10:22 I think most C libraries define jmp_buf as a one-element array of structure, with the structure elements having meaningful names 14:11:07 fizzie: well, reinterpret_cast scares people (and probably, /should/ scare people, it's quite an un-C++y thing to do) 14:11:09 bits/setjmp.h: 14:11:10 # if __WORDSIZE == 64 14:11:11 typedef long int __jmp_buf[8]; 14:11:11 # else 14:11:11 typedef int __jmp_buf[6]; 14:11:11 # endif 14:11:35 -!- derdon has joined. 14:13:13 (That's what's inside the struct __jmp_buf_tag, with typedef struct __jmp_buf_tag jmp_buf[1]; also some other members.) 14:13:32 They've just cut out the middle man. 14:15:29 indeed 14:15:38 and I thought "how lucky that everything they needed to store was int-sized" 14:16:09 http://p.zem.fi/ch25 <- setjmp.h of dietlibc. I don't know if you can deduce something from the fact that some architectures have structures, while others have just arrays with #define'd names for the fields. 14:16:52 it's weird enough that jmp_buf is mandated to be an array type 14:17:08 why go with jmp_buf as an array type but FILE* as a pointer type? 14:17:17 they're both opaque structures 14:18:25 I'd guess that jmp_buf is an array type so that you wouldn't be tempted to go around assigning it; but not a pointer because they want to let you decide where you want to keep it. 14:18:57 fizzie: well, there isn't anything assignable that's as large as you want a jmp_buf to be, unless you count structs as assignable 14:19:05 so that's another reason to make it an array, I guess 14:20:26 It could also be just backwards-compatibility-to-whatever-scheme-was-in-use. 14:21:12 fizzie: I wonder to what extent switching + to * would have on combining normalized values. 14:21:21 it would be like "and" instead of "or" 14:21:32 ais523: hey, you haven'ts een my amazing code yet, right? 14:21:54 *haven't seen 14:21:59 elliott_: more amazing than normal elliott stuff? no 14:22:14 ALL MY CODE IS INFINITELY AMAZING but 14:22:16 http://hpaste.org/55661 14:22:39 (don't wtf at the start, you'll run out of wtfs for the real wtf below all the repetitive stuff) 14:22:50 fizzie: so basically the only paths that are available are the ones shared by the datasets 14:22:53 that could be interesting. 14:23:59 -!- nooga has quit (Ping timeout: 276 seconds). 14:24:08 elliott_: oh, right, Haskell? I'm not sure I'd really get it well enough to properly wtf, but I'll try 14:24:33 I sometimes forget that everyone on #esoteric isn't intimately familiar with Haskell. 14:24:37 If you discount the actual weights, it is in fact quite much like taking the intersection instead of the union. 14:24:49 what does 0## mean? unboxed byte 0? 14:25:00 fizzie: I might include an option to do that. 14:25:04 ais523: unboxed word 0 14:25:08 0# is unboxed int 0 14:25:14 ah, OK 14:25:24 and "word" = word8? or word-and-infer-bitwidth? 14:25:33 fizzie: also I'm going to add two options for acronym generating: one that multiplies the starting-letter frequency with the normal word generator frequency to make word-like acronyms 14:25:37 ais523: native machine word 14:25:41 *Word, also 14:25:44 Word8 is Word8 14:25:46 ah, OK 14:25:47 and another that is just the starting word frequency part. 14:25:52 ais523: but Word8 is just a box around a Word# 14:25:54 and it happens to be 8-bit on this system 14:25:55 which is an unboxed machine word 14:25:56 so just a regular "acronym" generator. 14:25:59 ais523: err, no 14:26:00 64-bit 14:26:03 oh, right 14:26:11 03:43:58: ​провахмате шлено исто тугаване ремонодук пудыши мъству провка дорокачавалото фразбиструму приберщвлет драламину двученна макрообмит совательозеровавши вседаго усъ блионителн преденция бства сираних позитод ползачещяли изрушав 14:26:11 03:44:31: -- A thrilling novella by ... whatever Russian person is on #esoteric . 14:26:12 "provahmate Shlenov history tugavane remonoduk pudyshi mstvu provka dorokachavaloto frazbistrumu priberschvlet dralaminu dvuchenna makroobmit sovatelozerovavshi vsedago us blioniteln predentsiya bstva siranih pozitod polzacheschyali izrushav" 14:26:17 shlenov history 14:26:20 anyway 14:26:24 I'm going to sleep now. good night. 14:26:31 hmm, I can't follow what's going on there, alhough you seem to be encoding bytestrings into the type system somehow 14:26:55 also, there's a huge amount of unboxed stuff going on there 14:27:01 ais523: not bytestrings, pointers 14:27:19 aha, that explains why reflect' goes up to 8 14:27:38 you're reading the memory holding Haskell objects directly? 14:27:45 via access-arbitrary-memory methods? 14:27:52 ais523: it allocates a pointer, puts a value there, reflects the pointer into the type system, and then reads the pointer on the other end 14:28:22 the original idea is due to oleg, i just added MORE FASTS 14:28:24 "reflects the pointer into the type system"? 14:28:27 ais523: yes 14:28:48 I mean, what does that even mean? 14:29:01 ais523: it constructs the appropriate typeclass dictionary and passes it in with rank-n types 14:29:17 now you know why i dumbed it down :P 14:29:18 hmm, but the pointer's a run-time construct, right? 14:29:22 yes 14:29:26 elliott_: I can't understand even the dumbed-down version 14:29:31 it just defines an instance for each byte 14:29:36 and defines what amounts to a /template/ instance 14:29:50 "if you have ReifyByte for these 7 types, you have Reify" 14:29:53 -!- yorick has quit (Read error: Connection reset by peer). 14:30:01 so it picks the appropriate ReifyByte for each byte of the pointer using a lookup table 14:30:08 and passes them all to the Reify-instance-maker 14:30:17 elliott_: so it can Reify each possible string of eight bytes? 14:30:19 but since all this is implementation details, it has to do it with a crazy rank-n type construction 14:30:22 ais523: yes 14:30:33 ofc, it never tries to reify anything other than a valid pointer 14:30:35 but doesn't all typechecking get down at compile time? 14:30:35 that would segfault 14:30:51 ais523: yes, but that's not the same as resolving typeclass instances 14:30:58 it's impossible to completely do that statically 14:31:12 because, like I said, you basically have functions 14:31:13 elliott_: oh, it's the typeclass equivalent to virtual dispatch that you're hooking here? 14:31:15 instance (Show a, Show b) => Show (a,b) 14:31:17 that's like 14:31:26 tupleShowInstance :: ShowDictionary a -> ShowDictionary b -> ShowDictionary (a,b) 14:31:35 now s/Show/GimmeAByte/ 14:31:39 (am I correct, wrong, or meaningless here? I fear it's the latter) 14:31:44 and s/(a,b)/Address a b0 b1 b2 b3 b4 b5 b6 b7/ 14:31:52 ais523: I'm not sure what virtual dispatch is 14:31:59 I keep forgetting OOP terms 14:32:20 elliott_: in object oriented programs, when you calls a method, and it figures out what version of the method to call depending on the type the object involved actually has 14:32:32 *when you call 14:32:45 ais523: right, typeclasses are a "safer" version of dynamic dispatch 14:33:01 ais523: however, values don't carry around their instances in Haskell 14:33:04 the instances are separate objects 14:33:22 yep, typeclasses solve the same problem that object-oriented classes solve 14:33:22 so, it'd use the global tupleShowInstance, and apply it to the two ShowDictionaries it's been given 14:33:25 although not in exactly the same way 14:33:28 and then use the show inside that on the tuple value it has 14:33:31 for instance 14:33:37 ais523: interfaces, not classes 14:33:48 elliott_: right, if you're thinking in Java terms 14:34:02 them's fighting words 14:34:06 although it's not exactly like an interface; more like an abstract class 14:34:19 because you can declare default implementations for method-equivalents, etc 14:35:15 04:34:59: kallisti: elliott actually made a "perfect" UA a while ago. 14:35:15 04:35:09: `pastelogs elliott.*user.*agent 14:35:15 04:35:19: (Greppin' 1GB of logs woooh) 14:35:19 Gregor: It's not 1 GB... 14:36:15 04:38:12: It pretty much convinced everything that it was sufficiently up to date. 14:36:32 kallisti: Note that spammers probably want a discreet user agent that is identical to a popular web browser, and not distinguishable as a bot. 14:37:03 elliott_: even popular web browsers tend to be rather inconsistent among themselves 14:37:07 04:42:19: zzo38: Mac computers are like that, although sort of the inverse, you have to choose at startup to /see/ the Forth shell, not to boot without using it. It's pretty restrictive though. 14:37:07 04:42:22: (Also, only Forth) 14:37:09 Gregor: Not since 2005, dude. 14:37:14 as in, there are a lot of variations of, say, Firefox 9 user agents 14:37:19 OpenFirmware Macs died with PPC Macs. 14:37:24 And EFI don't do Forth. 14:37:38 ais523: Yes, but the proposed "Mozilla/5.0 AppleWebKit KHTML Gecko Chrome Safari" is not very realistic :P 14:37:47 -!- nooga has joined. 14:38:25 * elliott_ reads GHC source code to try and make that Haskell thing thread-safe. 14:38:43 elliott_: it turns out that the most popular single user-agent string is that of some version of the iPhone, by a really long way 14:38:50 -!- MSleep has changed nick to MDude. 14:39:20 ais523: heh, because there's no hardware/software variation whatsoever? 14:39:22 ais523, probably because there are small variations in many other places 14:39:28 and that 14:39:33 (and because it's massively popular, ofc) 14:39:39 (but probably not more than computer browsers) 14:39:44 (although it's getting that way) 14:39:45 elliott_: right, it's because of the lack of varation 14:39:59 I mean "Mozilla/5.0 (X11; U; Linux x86_64; sv-SE; rv:1.9.2.24) Gecko/20111107 Ubuntu/10.04 (lucid) Firefox/3.6.24" is quite specific for example 14:40:13 IIRC the iPhone isn't even the most popular smartphone platform any more 14:40:27 and for IE you tend to have .NET versions supported in the user agent iirc 14:40:38 here's mine: Mozilla/5.0 (Ubuntu; X11; Linux i686; rv:9.0) Gecko/20100101 Firefox/9.0 14:40:39 ais523, android is, but there are so many android 14:40:40 04:50:50: (Of course whatever I decide, the book will need to specify how it works for the computer will need to specify how it works.) 14:40:40 ah yes. 14:40:47 ais523: Android ostensibly is, but it's kind of a cheat 14:40:58 since many Android phones are wildly different from each other 14:41:07 Vorpal: actually, Microsoft installed a Firefox extension on everyone's computers, without asking, to put .NET version in the useragent of Firefox too 14:41:12 you really need to count at least the many different proprietary Android UIs separately 14:41:13 heh 14:41:15 and Mozilla responded by getting Firefox to ignore it, or something like that 14:41:19 hah 14:41:28 there was quite a row at the time, at least 14:41:36 ais523: they automatically uninstalled it 14:41:38 is what they did 14:41:42 Firefox now checks to see if there are extensions on the computer that the user didn't install 14:41:42 pushed out a new release just to do that 14:41:49 elliott_: couldn't, Firefox doesn't have enough permissions 14:41:55 unless you're running it as admin 14:42:04 they automatically ignored/disabled it, instead 14:42:08 04:54:24: zzo38: the biggest problem with the idea is that it's impossible 14:42:08 :D 14:42:10 ais523: heh 14:42:31 iirc chrome on windows bundles flash 14:42:31 04:54:13: kallisti: Grepping my server logs suggests the following: http://sprunge.us/TLiJ 14:42:33 I approve of this 14:42:42 I found it buggy as hell 14:42:44 I like how people have browsed codu.org on iPads. 14:42:51 I had flash in chrome crash many times on windows 14:43:17 elliott_: is that your useragent that Gregor linked in your quote of him? 14:43:32 bbl 14:43:36 ais523: no, that's gregor's horrible chimera generated from codu logs 14:43:42 Vorpal: that's just flash 14:45:04 04:57:28: http://img820.imageshack.us/img820/1641/itsfinetrustme.png 14:45:04 04:57:33: And they still haven't fixed it 14:45:06 wow. 14:45:31 05:00:13: http://sourcereal.com/ I wonder what the purpose of this site actually is. 14:45:37 The purpose is sour cereal, man. 14:45:38 elliott_: anyway, isn't the Mozilla/5.0 bit meant to tell servers that you support frames, so that you want a frames, not no-frames, version? 14:45:52 elliott_: heh, I didn't parse that URL like that 14:46:32 -!- yorick has joined. 14:48:20 ais523: It's the only real source for sour cereal. 14:48:52 hmm, sour cereal + alkaline milk would result in some sort of neutralisation reaction 14:49:04 (I think milk and toothpaste are the only common alkaline substances around) 14:49:43 milk toothpaste 14:49:58 for use on milk teeth 14:50:14 elliott_: anyway, so your amazing code, what could it be used for? 14:50:16 yes! 14:50:26 (this seems a question I'm more likely to understand the answer to than "what does it do?") 14:50:30 ais523: implicit configurations 14:50:31 Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/535.1 (KHTML, like Gecko) Ubuntu/11.04 Chromium/14.0.835.202 Chrome/14.0.835.202 Safari/535.1 14:50:40 "The configurations problem is to propagate run-time preferences throughout a program, allowing multiple concurrent configuration sets to coexist safely under statically guaranteed separation. This problem is common in all software systems, but particularly acute in Haskell, where currently the most popular solution relies on unsafe operations and compiler pragmas. 14:50:40 We solve the configurations problem in Haskell using only stable and widely implemented language features like the type-class system. In our approach, a term expression can refer to run-time configuration parameters as if they were compile-time constants in global scope. Besides supporting such intuitive term notation and statically guaranteeing separation, our solution also helps improve the program's performance by transparently dispatching to 14:50:40 specialized code at run-time. We can propagate any type of configuration data -- numbers, strings, IO actions, polymorphic functions, closures, and abstract data types. No previous approach to propagating configurations implicitly in any language provides the same static separation guarantees. 14:50:44 The enabling technique behind our solution is to propagate values via types, with the help of polymorphic recursion and higher-rank polymorphism. The technique essentially emulates local type-class instance declarations while preserving coherence. Configuration parameters are propagated throughout the code implicitly as part of type inference rather than explicitly by the programmer. Our technique can be regarded as a portable, coherent, and int 14:50:47 fizzie: that's actually Chrome, I take it? 14:50:49 uitive alternative to implicit parameters. It motivates adding local instances to Haskell, with a restriction that salvages principal types." 14:50:59 or, hmm, actually Safari? 14:51:02 I'm confused 14:51:04 ais523: Well, "chromium-browser" as installed by Ubuntu. 14:51:12 ais523: safari was the first webkit browser 14:51:13 haha, OK 14:51:15 I missed the Ubuntu/ 14:51:16 which explains its presence there 14:51:20 elliott_: right, indeed 14:51:32 ais523: anyway, that quote should answer your question, or at least confuse you more 14:51:37 hmm, I wonder if this'll retroactively cause Ubuntu to have been an early web browser platform 14:51:43 These things are going to say "Mozilla/5.0" for the rest of eternity; the datarcheologist of the future are going to debate on the Cult of Mozilla and the religious significance of "5.0". 14:51:49 ais523: eh? 14:52:03 fizzie: http://upload.wikimedia.org/wikipedia/en/6/6e/The_Book_of_Mozilla%2C_12-10.png 14:52:04 -!- oerjan has quit (Remote host closed the connection). 14:52:19 elliott_: because it's being mentioned in all these useragents 14:52:21 Yes, those things are going to confuse them to no end too. 14:52:35 hell, people are confused by Book of Mozilla references even nowaday 14:52:37 *nowadays 14:52:45 I wonder if they should just ask the people who wrote them what they're intended to mean? 14:53:09 ais523: oh, "early" because the web is still young? 14:53:27 elliott_: no, just because earlier things get mentioned in useragents and later things don't 14:53:28 ais523: also, there are explanations /right in the source code/ 14:53:30 "Mammon slept. And the beast reborn spread over the earth and its numbers grew legion. And they proclaimed the times and sacrificed crops unto the fire, with the cunning of foxes. And they built a new world in their own image as promised by the sacred words, and spoke of the beast with their children. Mammon awoke, and lo! it was naught but a follower." 14:53:31 14:53:32 14:53:39 Some of them are sort-of obvious, also. 14:53:53 http://www.mozilla.org/book/ 14:53:53 or at least, you mention earlier browsers in your useragent but not later ones, for obvious reasons 14:53:54 "cunning of foxes" "Mammon" "naught but a follower" 14:54:09 elliott_: oh, the source code, who reads that? 14:54:14 (particularly for something like Firefox?) 14:54:33 The HTML source for the page. 14:54:54 Everybody knows how to "use the source, Luke" for hidden thingamajikcs. 14:55:21 fizzie: heh, I wonder why I picked the other interpretation to start with? 14:55:27 actually, they're probably the same source 14:55:43 only plausible way to implement something like the Book of Mozilla is to include an HTML file somewhere which about:mozilla references 14:56:31 Furthermore, the Book of Mozilla page has annotations for each of the first, second, third and fifth verses hidden as comments in its HTML source code.[6] These comments were written by Valerio Capello in May 2004 and were added to the Mozilla Foundation site by Nicholas Bebout in October that year. Neither Capello nor Bebout are 'core' Mozilla decision-makers; and there is no evidence that Capello's interpretations received any high- 14:56:32 level approval from the senior management of the Mozilla Foundation. 14:56:42 fizzie: it's not in the about: source, though, I don't think 14:56:44 or at least, wasn't 14:56:46 just that page 14:56:48 so apparently the source can't be trusted 14:57:01 ais523: haha 14:57:03 NO APPROVAL 14:57:19 book of mozilla apocrypha 14:57:26 I wonder if putting the Book there in the /first/ place received high-level approval from the senior management of the Mozilla Foundation 14:57:59 hmm, apparently the second Book of Mozilla verse was written by jwz 14:58:44 so I suppose you could ask him if you really wanted to be sure 14:59:14 I have a vague memory that "about:mozilla" isn't in the usual place with the other chrome, where the about pages live, but I could be wrong about that. 14:59:54 now I'm trying to remember which non-Netscape-codebase-based browser responds to about:mozilla 15:00:03 but it's probably in the Wikipedia article I'm reading at the moment, so I'll just keep reading 15:00:15 -!- nooga has quit (Ping timeout: 240 seconds). 15:00:21 "The Windows version of IE showed a blank HTML document with blue background color. Possibly a joke reference to the "Blue Screen of Death." Removed in Windows XP SP2 but it can still be shown by typing "res://mshtml.dll/about.moz" instead." 15:00:22 About IE. 15:00:53 And apparently Konqueror goes to about:konqueror, but that's quite boring. 15:01:09 I remember the "lizard in the Netscape logo" thing, though. 15:01:13 back 15:01:18 Vorpal: that's just flash <-- well, yeah 15:01:21 Sadly it only survives up until the browser's closed. 15:01:26 right, I forgot that the Windows IE team are on good terms with the Firefox devs 15:01:36 gah, I wonder why coercing these to Addr#s doesn't work 15:01:46 it's not the sort of thing you'd expect, until you think about it a bit 15:01:57 ais523: only as of recently :) 15:02:26 I get the impression that if the Windows IE team didn't have management directing them, they'd make a good browser 15:02:34 but have been repeatedly told to deliberately screw it up for one reason or a nother 15:02:35 *another 15:02:58 why does everyone still put Mozilla/5.0 in? I mean, does any website really care about user agent these days? 15:03:17 ais523: well, recent IE /is/ good, isn't it? 15:03:19 Vorpal: of course they do 15:03:25 elliott_, really? 15:03:33 elliott_, I guess for statistics 15:03:36 but apart from that? 15:03:45 elliott_: yes, it's entirely reasonable, although some of the defaults irk me and it's not as customizable as Firefox 15:03:50 does anyone look at the Mozilla/5.0 part for example? 15:03:53 (the customizability is the reason that I use Firefox) 15:04:03 Vorpal: old servers use it to determine whether to serve frames or nonframes 15:04:11 hm 15:04:13 thus, I propose that people should remove it, and thus get the better version of the page 15:04:26 hah 15:04:41 Vorpal: why would people rewrite their website backend every 5 years just because Vorpal thinks they're doing it wrong? 15:05:00 yes, they /are/ doing it wrong, but everyone still puts Mozilla/5.0 in their user agent, because websites break if they don't, because websites don't get updated, because everyone still puts ... 15:05:22 indeed 15:05:47 breaking that chain from the browser end would just annoy everyone 15:05:54 fizzie: according to Wikipedia, Iceweasel has the standard about:mozilla, but also an about:iceweasel of its own 15:05:56 elliott_, I'm just wondering how common such websites still are. I can't remember seeing frames outside doxygen/javadoc generated stuff recently 15:05:59 that references the naming dispute 15:05:59 iframes sure 15:06:01 but not frames 15:06:20 elliott_: clearly, we have to break the chain in the middle 15:06:28 Vorpal: i'm sure it's sniffed for more than frames 15:06:31 by getting the backbone routers to strip Mozilla/5.0 out of user agents 15:06:33 ais523: ISP proxying? 15:06:34 haha 15:06:36 elliott_, hm 15:06:38 Vorpal: The web-admin interface of my shiny new VDSL2 router-boxey thing is done in regular old frames. 15:06:54 ais523: "My internet is broke, the google works on Verizon but not Comcast." 15:06:54 (Admittedly they've been doing related models for a while and have just been copying the interface on and on.) 15:06:58 ais523: you want to make this sentence plausible 15:07:02 (Also it's quite horrible.) 15:07:09 fizzie, my speedtouch (several years old by now) uses some javascript stuff. There is also a telnet interface 15:07:14 (note: this would probably be technically impossible; the backbone routers wouldn't be able to cope with the traffic they do if they had to decode down to the HTTP level) 15:07:39 There's a telnet interface here, but it's been blocked; the user accounts for the web interface don't for for it. Possibly because it lets you run a shell. 15:07:53 heh 15:08:04 The web interface also has around twenty places for shell injection vulnerabilities, so it's not like it's much of a barrier. 15:08:10 ais523: it's really amazing that we live in a society where we have computers that are /too busy to parse/ 15:08:10 fizzie, the telnet interface on mine offers more options but nothing really interesting 15:08:11 I guess they have to try keep nosy customers out. 15:08:51 probably 15:09:00 elliott_: well, they are 15:09:05 this reminds me of trying to get my livebox to give me a shell 15:09:12 which involved exploting the configuration backup mechanism 15:09:15 What I don't like about it is that it's completely remotely administrable with some TR-069 nonsense. I can live with it for the next two years, since the contract states that it's still owned by the ISP for that time, but then the ownership rights move, and I don't really like owning a box that someone else can admin. 15:09:17 I think they work a couple of levels lower than HTTP, because parsing would be too much effort 15:09:23 elliott_, did it work? 15:09:30 elliott_: They've disabled the configuration backup mechanism of that box, possibly because of such concerns. :p 15:09:36 this is also the reason that the IP checksum works by adding bytes mod 255, IIRC (although I don't get why it isn't mod 256) 15:09:49 Doesn't really help when the web-interface calls bazillion "route add %s" printfs with input validation done in JavaScript. 15:09:50 because CRC-32 would be too expensive 15:09:58 ais523, probably on the IP/IPv6 level 15:09:59 (And runs those with system().) 15:10:02 Vorpal: no :( I edited the config file and bundled dropbear in and it uploaded but i could never connect 15:10:02 maybe also ICMP 15:10:08 despite the page i was reading suggesting it should work 15:10:10 fizzie: Nice. 15:10:23 fizzie: (How do you know it does that?) 15:10:24 fizzie: is it possible to overflow the %s? 15:10:25 (Is it open source?) 15:10:34 ais523: do you need to? 15:10:38 ais523: `start ssh server` 15:10:39 elliott_: no 15:10:39 I'm just curious 15:10:44 ais523: You can just put backticks in it, but it probably is. 15:11:38 if something has a big vulnerability, it's still fun to look for the smaller ones 15:11:40 elliott_: It's not open source (though it's Linux-based and therefore it's a bit of a GPL issue...), but I've unsquashfs-lzma'd the image out of a firmware upgrade I found for some other ISP's old firmware. (There are no firmware upgrades available for my ISP; they do it all via the remote admin capability, presumably also to keep the firmware off the hand of nosy people.) 15:11:58 fizzie: You're nosy. 15:12:03 btw, how many security vulnerabilities don't translate to "insufficient validation of input or insufficient escaping of output" somehow? 15:12:06 I did have to smuggle in a static-linked busybox, because theirs lacked the "nc" feature. 15:12:15 That I certainly am. 15:12:34 fizzie: so you used backtick injection to smuggle busybox in? 15:12:47 ais523, hm... stuff like hardware bugs? Such as the f00f one 15:12:47 backtick injection sounds much fancier than it is 15:12:54 maybe 15:12:58 also, is this a university/college/business router, or a home one? 15:13:23 ais523: Actually I used it's USB mass storage feature and `cp /mnt/usb1_1/busybox /var/busybox` (/var is the only writable tmpfs it has) to smuggle it in; their busybox does have the 'tftp' command, but it's been custom-hardcoded only to download firmware upgrades. 15:13:26 ais523: Home one. 15:13:26 backup to self: http://sprunge.us/JWWa 15:13:27 Vorpal: hmm, right, that's a logic error leading to an infinite loop, isn't it? 15:13:34 ais523, forgot the details 15:13:52 fizzie: wow, attempting to lock it down like that seems both weird and pointless 15:13:55 fizzie: So does the filesystem have anything interesting? :p 15:14:06 ais523: Well, they technically own it still, for the first two years. 15:14:13 ais523: the livebox's configuration backups were /per-byte constant xor encrypted/ 15:14:22 ais523: I have no idea what they're trying to achieve with such pointless barriers 15:14:25 elliott_: was that with 42 as the byte? 15:14:29 presumably management told them to stop people fiddlign with it 15:14:34 ais523: I think it might have been 0x40 15:14:35 don't recall 15:14:37 it's on the net somewhere 15:14:38 ah, OK 15:14:52 Being nosy was educational, though. There's an "incoming traffic filtering" page where you can set up firewall rules in the , but the rules don't show up in iptables -nvL, iptables -t nat -nvL, or ebtables -L. Unless they've put them in the mangle table or something, that page is a no-op. 15:14:56 glibc used 42 because it was one of the few numbers that tends to map printable characters to printable characters, and it was their favourite out of them 15:15:17 (the purpose was to hide things from strings(1), incidentally) 15:15:30 fizzie: "in the ,"? 15:15:39 ais523: In the web-interface. 15:15:43 I can't tell whether the comma is a punctuation, or a word of its own 15:15:50 I don't know where the word went. 15:15:54 -!- atehwa has quit (Ping timeout: 240 seconds). 15:16:04 fizzie: Ha. 15:16:07 ais523, anyway I guess there can be DoS attacks that are due to logic errors, but apart from that most stuff boils down to insufficient validation/insufficient escaping 15:16:14 ais523: hmm, hide what? 15:16:22 at least that I can think of 15:16:32 elliott_: hmm, presumably things like quiz answers to casual viewing 15:16:42 the sort of thing where the secrecy is to avoid spoilers, rather than for security 15:16:45 -!- atehwa has joined. 15:17:05 (spoilers are an interesting subfield of security; the idea is to protect not against people who are trying to break into your system, but against people who aren't but might do so by mistake) 15:17:26 ais523: err, do you mean memfrob? 15:17:26 Also they at least use the optional bit of the TR-069 remote admin stuff, which is to have a TLS connection to the admin server, and use stored-on-the-device certificates to validate it, as opposed to having a shared-secret that's shared among all the boxes. 15:17:28 (the purpose was to hide things from strings(1), incidentally) <-- what for? 15:17:30 because i'm pretty sure that's just a joke 15:17:32 or strfry or whatever 15:17:35 why would they want to hide something from strings? 15:17:36 elliott_: yes, one of those 15:17:42 not to hide things 15:17:52 anyway, a joke can have a useful purpose too, right? 15:17:55 and it must be memfrob 15:17:58 "Note that this function is not a proper encryption routine as the XOR constant is fixed, and is only suitable for hiding strings." 15:18:09 strfry is that one which started the famous argument with Ulrich Drepper about randomization algorithms 15:18:41 bleh, why doesn't Addr# work here? 15:18:51 fizzie: heh 15:18:56 Oh, I did found out a really confusing thing too. 15:19:15 oh? 15:20:17 The way it does DNS for the clients of the NAT is, it gives them its own address as the DNS server always in the DHCP replies, then it takes the DNS server addresses from the ISP's DHCP server it talks to, and runs a custom piece of code which polls the primary one every now and then, and depending on whether it answers it does an iptables redirect of DNS queries to either the primary or secondary one. 15:20:35 I can't figure out any way how that is better than just forwarding the ISP's DNS server names (both) to the DHCP clients in the NAT'd network. 15:21:02 That way they could use either, or both, or whatever. It's not like the iptables redirect caches anything, like running dnsmasq or something (which is what most of such boxes I've met do) would. 15:21:26 I'm hoping their only reason wasn't "we can't figure out how to get the DNS server addresses from our DHCP reply into the DHCP replies we give to our LAN clients". 15:21:28 fizzie: perhaps it would let one figure out what DNS queries the other was making via response time? 15:21:42 so it's a sort of privacy thing? 15:21:46 Which "one" and which "other"? 15:21:56 the clients of the NAT 15:22:07 which I'm assuming there are two of because all numbers greater than 1 are equal 15:22:15 fizzie, heh 15:22:29 I... don't really see how. I mean, the only thing it accomplishes is to effectively only provide a single ISP's DNS server address to the client. 15:23:04 There's no difference between a LAN client connecting to the modem box and having it iptables-redirect the traffic to the ISP's DNS server, and having a LAN client connect to the ISP's DNS server "directly". 15:23:19 Except in the destination address of the in-LAN packet. 15:23:25 perhaps it's about always using one DNS server in preference to another 15:23:33 so that if they say different things, one in particular takes precedence 15:23:44 fizzie, plus I think it might fuck up dnssec, but I assume that isn't done at that point anyway 15:23:49 might be useful for an ISP who wanted to redirect websites now and again 15:24:33 I guess that's... an effect it has, but it's a weird thing to do. There's nothing stopping the LAN clients to choose any third-party DNS servers, it's not redirecting all DNS traffic, just what's incoming to itself. 15:24:57 hmm, I think I might know what went wrong 15:25:01 except, err, no 15:25:02 wtf? 15:25:03 If the ISP wants to redirect websites, presumably they'd just do it by intercepting all DNS queries within their network. 15:25:22 fizzie, I assume you run a local dns server? 15:25:50 That's a rather ridiculous assumption. 15:26:03 rather than live with that mess I mean 15:26:27 I don't see why it would affect the actual usage of the system. 15:26:40 It's a true one too, though. Not exactly because of the mess; more because I'm not using the box's NAT. And to provide names for the private addresses. 15:26:53 right 15:27:09 personally I use a local dns server to get dnssec 15:27:29 Anyway, the custom "redirect to secondary if primary fails" is certainly an improvement over "just redirect to primary" "solution". 15:27:52 Also the code can't use more than two DNS servers; fortunately the ISP's DHCP replies only list two, so it's not a loss here. 15:28:11 It's hardcoded to be "primary; or if primary fails, secondary"; not "here's a list, use the first working one". 15:28:25 fizzie, you disassembled the code for it or something? 15:28:36 *Mirror> reify 42 (\p -> reflect p) :: Int 15:28:36 Process haskell segmentation fault 15:28:37 dammit 15:28:46 fizzie, or is it just shell script? 15:29:08 No, it's code; I did disassemble it and glance at it; but that was mostly based on the messages it has. 15:29:13 ah 15:29:29 I can't remember seeing more than two DNS servers on any network I used 15:29:38 I guess two is mandated by something? 15:29:42 Anyway, I'm not really sure why they don't run dnsmasq; everyone else's router does. That would deal with it plus cache requests while it's at it. 15:30:13 does dnsmasq do dnssec? 15:30:36 Vorpal is a bot to turn statements about DNS into "dnssec???". 15:30:51 elliott_, no I was just curious 15:31:06 elliott_, it is an important question these days 15:31:06 OR WERE YOU 15:31:09 It is? 15:31:14 I'm pretty sure it actually: isn't. 15:31:30 your: punctuation is: awkward 15:31:31 hey, question that came up in a channel: would you spend $38 on a sandwich if it let you walk through walls (for a few seconds)? 15:31:34 *in another channel 15:31:47 I... 15:31:52 ais523: Is it tasty? 15:31:54 Vorpal: It's just a DNS forwarder; it won't do DNSSEC validation, no. I think if you have a DNSSEC-enabled resolver (not that anyone does), it should work just fine through it. 15:31:56 elliott_: I think so 15:32:03 ais523, hm... maybe 15:32:05 ais523: How many seconds? 15:32:12 And does the effect start when I start or finish eating it? 15:32:15 elliott_: maybe about 10 15:32:18 and when you finish eating it 15:32:22 hm 15:32:30 ais523, what about floors? 15:32:36 ais523: Do the walls just act like air or do I have to, like, push myself through rock awkwardly while feeling like I'm suffocating? 15:32:38 Vorpal: no 15:32:52 Vorpal: It's just a DNS forwarder; it won't do DNSSEC validation, no. I think if you have a DNSSEC-enabled resolver (not that anyone does), it should work just fine through it. <-- I guess you mean libc resolver there? 15:32:53 elliott_: you just don't collide with them 15:32:58 you start walking at them and you're now on the other side 15:33:04 elliott_, noclip I think 15:33:24 as far as I can tell, I think being able to do that isn't very useful, but when it is it's worth $38 15:33:24 ais523, what happens if I'm not through the wall by the time the 10 seconds are up? 15:33:31 Also Chrome has a DNSSEC "hack" that I think was the funniest. It doesn't need any DNS resolver support or anything; you just staple the full DNSSEC chain from root to your DNS name into the server certificate using their format, and it verifies that without needing to do any DNSSEC lookups. 15:33:36 http://www.imperialviolet.org/2011/06/16/dnssecchrome.html 15:33:42 Vorpal: I don't think it takes time to go through the wall (but it only works on reasonably thin walls) 15:33:42 I'm not sure if anyone uses that. 15:33:51 you start walking at one side and you're now on the other side 15:33:56 -!- nooga has joined. 15:34:03 But I believe it's a way for you to get a self-signed certificate that doesn't cause horrible shouting warnings, maybe? 15:34:05 ais523: then yes, probably 15:34:12 As long as everyone you want to talk to uses Chrome, anyway. 15:34:15 elliott_: that was my answer too, I think 15:34:17 it sounds implausible and risk-free enough to spend $38 on trying it out 15:34:24 fizzie, ouch 15:34:49 ais523: I mean, obviously in real life the answer is yes if I don't think the sandwich is poisoned and have any credible reason whatsoever to believe it might let me walk through walls, 'cuz that's some major claim :P 15:34:53 fizzie, I run unbound locally for dns, it has dnssec. Works well 15:35:07 Vorpal: Presumably they're waiting for OS/network-stack/API/whatever-makers to make it possible to do DNSSEC-validated queries. 15:35:18 elliott_: right, indeed 15:35:27 but suppose the claim was well-verified, and you'd even done it once yourself to make sure 15:35:29 fizzie, they = dnsmasq? chrome? 15:35:35 would you actually find it useful to do it again, in the future? 15:35:42 Chrome. 15:35:49 ais523: do other people know about these magic sandwiches? 15:35:56 yep, they're in common use 15:36:03 hmm 15:36:04 hm 15:36:18 presumably banks and so forth need to reinforce their vaults with anti-sandwich measures 15:36:26 I was about to ask if they were foolproof or not 15:37:01 the more I think about this, the more $38 sounds like more or less exactly the right price 15:37:15 more useful sandwiches than noclip: level select, god mode, invisibility 15:37:23 console sandwich 15:37:28 hah 15:37:33 you eat it and get dumped into a 2-dimensional green-on-black text universe 15:37:39 as root 15:37:43 invisibility seems around as useful as noclip, really 15:37:59 ais523, depends on if there are ways for people to detect you when invisible 15:38:06 or if it is fool proof 15:38:14 *Main> reify 42 (unbox . proxy reflect') 15:38:14 140311358490681 15:38:15 *Main> reify 42 (unbox . proxy reflect') 15:38:15 140311358155905 15:38:17 hmm, that's correct 15:38:28 *Main> reify (42 :: Int) (unbox . proxy reflect') 15:38:28 Process haskell segmentation fault 15:38:29 aha 15:38:34 Vorpal: well, if it just blocks the ability for people to see you, there are still lots of things that'll give you away 15:38:35 ooh another good one: bullet time 15:38:37 sound, footprints, etc 15:38:38 I, er, have no idea why that happened 15:38:40 The "all weapons" sandwich sounds far less useful, given that you'd probably just end up buried under a ton of metal. 15:38:42 oh, pointer tagging, mayhaps 15:38:43 and even potentially touch and smell 15:38:45 fizzie, :D 15:39:14 fizzie: :D 15:39:22 gah the lag 15:39:31 food sandwich 15:39:33 Vorpal: elliott_ really was that slow, it wasn't lag 15:39:34 gives you the power to have a full stomach 15:39:39 ais523, I had lag as well 15:39:50 hmm, invulnerability would be a useful sandwich effect, although possibly not if it only lasted ten seconds 15:40:00 PING google.com (209.85.173.99) 56(84) bytes of data. 15:40:00 64 bytes from lpp01m01-in-f99.1e100.net (209.85.173.99): icmp_seq=1 ttl=47 time=433 ms 15:40:01 ouch 15:40:06 was worse a bit ago 15:40:08 ais523: that obsoletes the wall sandwich 15:40:15 elliott_: really? 15:40:16 as you can just smash yourself into the wall really hard while invulnerable 15:40:19 ais523, indeed 15:40:29 wouldn't that have the side effect of destroying the wall? 15:40:39 hm true 15:40:40 ais523: that's what the wall repair sandwich is for 15:40:44 hah 15:41:01 fireball sandwich would be really dangerous. 15:41:12 (mario style I mean) 15:41:19 (not that you instantly explode) 15:42:25 why sandwich btw? 15:42:27 nah, 1-ups would be way more useful than fire flowers 15:42:38 ais523, more useful yes. I said dangerous 15:42:40 Vorpal: I'm surprised you didn't ask "why $38" 15:42:43 well, OK 15:42:49 hmm, santa just reached australia 15:42:58 ais523, most people don't live in fireproof houses. 15:43:01 and it's because someone said the economy of a game was unrealistic because sandwiches cost $38 15:43:07 and I pointed out that they let you walk through walls 15:43:10 :D 15:43:19 what game? 15:43:21 ais523, which game? 15:43:22 Earthbound 15:43:41 oh nintendo? 15:43:50 I'm not sure who made it 15:43:58 well I googled 15:44:00 although I think it was on a Nintendo console 15:44:14 and indeed, it was which platform it was on I meant 15:44:21 ais523, it seems to be a series btw 15:44:27 Vorpal hasn't heard of Earthbound? really? 15:44:34 elliott_, indeed I have not 15:44:41 Vorpal: the series is called Mother; Earthbound is IIRC Mother 2 15:44:54 "EarthBound, known in Japan as Mother, is a role-playing video game series" 15:44:56 says wikipedia 15:45:11 hmm 15:45:17 also: 15:45:18 I think Earthbound was the only entry released outside Japan 15:45:20 "EarthBound (known as Mother 2 in Japan) is a distant sequel to the original Mother" 15:45:26 so perhaps it's impossible to tell from the information given 15:45:42 as in, if a series only contains one game, you'd name it after that game, right? 15:45:59 ah, snes 15:46:08 (for the second game at least) 15:49:50 hm when I'm using bluetooth and 3G my phone seems to charge at about the same rate as it discharges 15:50:25 -!- nooga has quit (Ping timeout: 252 seconds). 15:50:39 which is strange since it usually lasts fairly long on battery doing that and it also tends to charge fairly fast when on plain standby. 15:52:21 also I should report a bug tomorrow wrt lucid package dependency breakage for language-pack-gnome-sv being updated to (I think) depend on a non-existent version of language-pack-sv-base 15:53:28 oh wait, it is the new language-pack-sv-base depending on language-pack-sv which doesn't exist? 15:53:48 or hm it exists but not in the required version 15:54:14 it is a mess anyway 15:56:05 -!- derdon has quit (Remote host closed the connection). 15:56:40 bbl 15:57:34 hmm, 158 over 8 15:58:11 19.75, right? 15:58:51 yes, as it happens 16:12:08 ais523, did you do that in your head? 16:12:23 if so I'm quite impressed 16:12:34 -!- Nisstyre has quit (Ping timeout: 240 seconds). 16:12:58 Vorpal: yes, it's not that hard 16:13:08 for some people 16:13:08 I have the problem that people at school knew I was a good mathematician 16:13:14 and so asked me random arithmetic questions a lot 16:13:24 and so I had to get moderately good at those too 16:13:26 ais523: *arithmetician 16:13:36 oh 16:13:42 wrote that before your last line put it into context 16:13:44 yep 16:13:52 in this case, 158 is clearly just under 160 16:13:59 which I knew was a round multiple of 8 16:14:06 yeah being good at calculate in your head is not the same as being good at mathematics 16:14:07 ("arithmetician" sounds so awkward because it's such a useless thing to be :)) 16:14:22 so I did 160/8 = 20 (which I didn't have memorized but did know was easy to work out), then work out how much less it is (2/8, or 0.25), and subtract 16:14:24 elliott_, it is kind of useful to check you got the correct change back in shops? 16:14:48 -!- Nisstyre has joined. 16:15:19 Vorpal: that's not really done via arithmetic, you check your change the same way the checkout worker gives you your change 16:15:30 well, it is arithmetic, but it's just adding 1/2/5/10/20/50 16:15:42 eh? 16:16:05 like if you give a 100 SEK note and the thing cost 58.50 SEK 16:16:40 ais523, so I don't see how it is just a few basic values 16:16:45 you need to do 100-58.50 16:17:13 then it is just subtracting 1/5/10/20/50/100/500/1000 from that 16:17:40 ais523, so I'm not sure what you meant 16:17:48 Vorpal: no you don't; you start with 58.50, then see that adding 20 is less than 100 so give a 20 and go to 78.50, then you can give another 20 and go to 98.50, then 1 and go to 99.50, then .50 and go to 100 16:18:01 and you can do all that without knowing what the change actually adds up to at all 16:18:08 I haven't worked it out yet 16:18:09 ais523, well except we don't have .50 since about a year or so now 16:18:11 oh, 41.50, now I have 16:18:14 hm 16:18:19 Vorpal: oh, in that case, two .25, or whatever it is you do have 16:18:26 ais523, 1 is smallest nowdays 16:18:41 well, how are you going to get .50 in change if there are no coins smaller than 1? 16:18:49 this isn't a problem that can be solved by maths 16:18:55 (and there are no non-integer coins bigger than 1) 16:19:00 ais523, I guess you would round it, same as you round something that is like 49.99 16:19:01 or such 16:19:13 err, what? 16:19:15 unless you use a bank card you have to round that nowdays 16:19:31 elliott_: does Vorpal's description of the Swedish monetary system make any sense at all? 16:19:57 ais523, surely you seen stuff sold for like 1 less than some amount to make it like "Only 499" 16:19:58 or whatever 16:20:02 ais523: it's (a) Sweden and (b) Vorpal, of course it doesn't make any sense 16:20:08 elliott_: heh 16:20:26 ais523: they probably have to assemble their coins themselves using wordless instruction manuals 16:20:28 it just seems implausible that people would give things prices that are impossible to pay via notes or coins because the relevant physical currency doesn't exist 16:20:51 ais523, anyway you do realise you can sell something for like 5.25 or whatever, if you buy several it will add up to a whole value, and with bank cards you can play that amount exactly 16:21:08 ais523, it is just that we have money amounts smaller than our smallest denominations 16:21:19 how is this strange? 16:21:32 Vorpal: So how do you buy an item which costs 1/2 the smallest denomination? 16:21:39 If you round up to one denomination, what change do you get? 16:21:53 elliott_, I think it is round to nearest that is the standard. 16:22:06 so it could be rounded down sometimes 16:22:26 anyway I need to leave. Time to give out the presents. I'm at my grandparents. 16:22:36 what if you close your bank account and they give you its contents? 16:23:09 also, why don't people always buy things in combinations that give them the benefit of rounding errors? 16:23:18 this is ridiculous 16:23:25 you'd get a lot of people buying some set of stuff, then walking out of the shop and back in again, then buying a different set of stuff 16:23:34 it'd basically double the length of queues 16:23:38 I refuse to believe that Swedish business are throwing away money en masse because the government refuse to mint a coin 16:23:50 elliott_: I suspect that Vorpal is either lying or trolling, here 16:23:54 actually, false alarm 16:24:00 ais523: or dumb 16:24:03 he doesn't seem very sure, and it's a bit weird to be unsure about your country's own monetary system 16:24:05 what if you close your bank account and they give you its contents? <-- no idea 16:24:37 One krona is subdivided into 100 öre (singular and plural; when referring to the currency unit itself, however, the plural is ören). However, all öre coins have been discontinued as of 30 September 2010.[4] Goods can still be priced in öre, but all sums are rounded to the nearest krona when paying with cash. 16:24:56 OK, /Sweden/ is trolling 16:24:58 surely they're always rounded up 16:25:10 also, why don't people always buy things in combinations that give them the benefit of rounding errors? <-- you realise that 1 SEK is a small amount of money. Like 0.09£ 16:25:16 either that, or Wikipedia has been vandalised and Vorpal is relying on it to pretend to be Swedish 16:25:26 :D 16:25:40 Vorpal: you realise that multiplication exists? 16:25:46 well sure 16:25:54 you could probably amass huge sums of money if you were patient and had a lot of conspirators 16:25:55 anyway I remember 50 öre (0.5 SEK) coins 16:26:08 I don't remember any smaller denominations. They haven't been around for ages. 16:26:19 hmm, apparently the only coins are 1SEK, 5SEK, 10SEK nowadays 16:26:27 anyway, where does the money /go/? do companies produce financial reports with rows for "money lost due to coin rounding"??? 16:26:28 ais523, indeed, 20 SEK is a note 16:26:40 that's an incredibly small selection of coins to put a monetary system on 16:26:41 elliott_, I have no idea 16:26:47 *based a monetary system on 16:26:55 ais523, that is because we use notes for larger values 16:26:58 hmm, who wants to make lots of Swedish money with me? 16:26:58 like 20 SEK note 16:27:10 elliott_: actually, that happens in gambling; a major part of the profit of some bookmakers comes from rounding errors 16:27:17 but they're always in the bookmaker's favour, rather than to-nearest 16:27:25 ais523: heh 16:27:29 elliott_: you'd need to be able to /sell/ to shops for that to work 16:27:47 ais523, afaik it is round to nearest with .5 upwards 16:28:02 which to me is the standard rounding system in most contexts 16:28:15 ais523: hmm, I don't see why 16:28:27 ais523: you just buy items 1 SEK cheaper from retailers, and then resell them at the retail price 16:28:46 elliott_: well, OK, but you'd need to be able to sell, at retail price, via some method 16:28:51 the overhead is probably >1SEK though :/ 16:28:59 ais523: just set up an online store, or something :P 16:29:01 probably 16:29:12 1SEK is not very large, so you're probably not going to be able to find items that are worth less 16:29:22 it'd be like trying to find fractions-of-a-penny stuff in the UK 16:29:41 which can typically only be bought in bulk without a surcharge, nowadays 16:29:52 (e.g. resistors are around 3 to the penny bought in bulk, but cost something like 7p individually) 16:30:29 ais523, is 1 SEK smaller than your smallest coin? 16:30:41 our smallest coin is 1p 16:30:44 so no 16:30:45 not sure; our smallest coin is 0.01 GBP 16:30:45 We don't use the 1 and 2 euro-cent coins in Finland; all prices are rounded to nearest multiple of 0.05 (at least it's unambiguous in that 0.02 rounds down, 0.03 rounds up) when paying with cash. When paying with card, no rounding is done. So some people choose cash/card based on whether the rounding would go up. 16:30:50 and I'm not sure of the exchange rate 16:30:53 also, why don't people always buy things in combinations that give them the benefit of rounding errors? <-- you realise that 1 SEK is a small amount of money. Like 0.09£ 16:30:54 so no 16:31:00 elliott_, is 1p = 0.1 £? 16:31:04 there's been some feeling that we should move to 0.05 GBP as the basic unit, in some cases 16:31:05 or 0.01? 16:31:08 Vorpal: ... 16:31:11 Vorpal: 1p = £0.01 16:31:13 ah 16:31:15 I'm not even going to dignify that with a response 16:31:17 elliott_, how should I know? 16:31:18 I don't think many people will bother to do the item-selection so that they get favourable rounding. 16:31:24 Vorpal: because that's ridiculous! 16:31:24 Vorpal: well, it was mentioned recently in scrollback 16:31:31 ah okay 16:32:44 hmm, I think I'll have to pretend I was busy on Christmas Eve 16:32:55 eh? 16:33:26 Anyway, from what I recall you can go and buy a single potato, and have the total price be 0.02 eur or something, and then I think you have a chance of getting that thing free if you're lucky. 16:33:43 heh 16:33:52 fizzie: then iterate 16:33:54 SO MANY POTATOES 16:33:56 fizzie: I'm sure potatoes cost more than €0.02 16:34:01 Though they can just invent a "minimum purchase 0.05 cent" rule. 16:34:10 elliott_, the problem is that takes time that you could have spent doing other things 16:34:57 it reminds me of the calculation that if Bill Gates saw a dropped $100 note on the other side of the street, it wouldn't even be worth his time to pick it up 16:34:59 Vorpal: you think I have something better to do than crash Finland's potato economy? 16:35:05 ais523, heh? 16:35:16 elliott_, well, maybe not you 16:35:34 Vorpal: because his time is worth a /lot/ 16:35:41 Vorpal: you'll go down in the history books as "boring". me, "architect of the great finnish potato crash of 2012" 16:35:43 ais523, right 16:35:49 (which lead to the end of the world) 16:35:57 elliott_, right 16:35:58 so um 16:36:01 very short mention in history there 16:36:07 i guess someone wrote "2012: a summary" as the world burned 16:36:54 ais523: It just needs to be a small enough potato. They're around 0.70 EUR/kg, I think, so... a 30-gram potato would be 0.02 eur. Anyway, I googled, and seems it was has been done e.g. with candy, with one of those "collect assorted candies into a bag" things; selecting three small candies gave a total price of 0.02. 16:37:19 fizzie: 30-gram potatoes exist? 16:37:25 also, candy I can believe 16:37:32 what's the smallest Euro coin? 16:37:34 ais523, anyway wrt the coin issue above, why would having 1/5/10 be an issue as long a you have other denominations as paper instead of metal coins? 16:37:48 Vorpal: coins are more convenient to transport 16:38:03 that's the reason the coins in the UK go all the way up to £2 16:38:21 ais523, they are thicker than notes, thus are more awkward to fit into your wallet without making that annoyingly thick 16:38:22 our 2 pound coins are so cool. i always want to pop out the inner bit 16:38:25 ais523: They have 1, 2, 5, 10, 20, 50 cent and 1, 2 eur coins. But we only use from 5 cent up in Finland. 16:38:30 (technically speaking, £5 coins exist, but they're limited edition and serve as a method for the Royal Mint to show off and advertise its coin-making skills to other countries) 16:38:31 bbl 16:38:47 (Dinner ->) 16:38:50 ais523: hmm, I thought they were to amke money 16:39:01 elliott_: no, they sell them for £5 each 16:39:13 although presumably they end up more valuable after that, due to scarcity or whatever 16:39:42 and I don't think they can mint coins merely to make money 16:39:50 although, hmm, this is confusing 16:39:55 making money is the Mint's /job/ 16:40:18 presumably they're restricted in how much they can make and when, and who ends up with the profits 16:40:43 Vorpal: anyway, AFAIK most people know that £5 coins exist, but few people have ever seen them 16:41:01 for some reason, this doesn't make them a popular target for counterfeiters 16:41:19 presumably because people would get suspicious in response for someone actually using a £5 coin to buy things with 16:41:27 hmm… £50 notes exist, but are rare 16:42:04 I own one, but it's very rare to be given one for any real reason, and I think banks will give even large sums of cash in £20 notes unless you specifically request £50 notes 16:43:01 I think I've received a 50 pound note for a birthday or whatever before? or no, that was probably 20 :P 16:43:14 notes, how do they work. 16:43:34 -!- copumpkin has quit (Ping timeout: 240 seconds). 16:43:42 elliott_: I received one for Christmas a few years ago, I think 16:43:48 because the things are both rare and worth £50 16:44:07 it's now sufficiently old that it isn't usable-in-shops tender (although you can always exchange the things for modern currency with the Bank of England, if you're so inclined) 16:44:17 (and I think many other banks will accept them too) 16:45:43 apparently it's usual for people to write the serial numbers of £50 notes in case they lose them 16:45:51 *write down 16:50:58 -!- copumpkin has joined. 16:55:09 -!- zzo38 has joined. 16:55:31 Whatever it was I did, if it works for IO monad then it will work with other monads too 16:58:04 ais523: why is it christmas. time is weird? 16:58:17 elliott_: it isn't yet, in the UK or US 16:58:24 although it is in many countries 17:08:40 In here, it is not Christmas yet 17:10:38 what about outside? 17:11:14 Not in this outside. 17:13:02 which outside? 17:13:55 That one!! Look over there!! No, the other over there!! 17:14:13 Euro banknotes go up to 500 EUR. 17:14:14 oh 17:14:15 now i understand 17:14:21 Not that I've ever even seen the 500 EUR one. 17:14:32 fizzie does not have that much money to his name. 17:15:11 Actually I might have seen the 500 eur one, but probably not the 200 eur one, it looks unfamiliarly yellow. 17:15:16 The 100 eur ones you see now and then. 17:15:52 (It's because he's 30.) 17:16:00 Wait, are you 30 yet? I might have to retire that one. 17:16:10 I'll just stick to pointing out how much of a pointless waste of time speech recognition is. 17:16:10 No, and stop trying to make me feel old. 17:16:11 fizzie: there was a case of people actually getting away with spending counterfeit 300 euro notes a while back 17:16:17 because not enough people realised they didn't exit 17:16:19 *exist 17:16:27 fizzie: Stop being old, then, you... speech recognition researcher! 17:16:32 * elliott_ the ultimate burn 17:17:13 I don't think I'm even 29 yet. Or, wait... right, yes, I'm not. Still almost four months of the "sweet 28", like they call it. 17:17:23 fizzie: wait, there's a name for it? 17:17:44 No. 17:18:04 At least I can no longer be a member of the "27 Club" thing, which I think is a thing. 17:18:18 Yes, it is. 17:19:52 hmm, 148 over 7 17:20:08 They should have "sweet 16"-style adjectives for each year, with the adjectives becoming more and more depressing as the numbers get higher. 17:21:25 it's quite hard to come up with a sequence of adjectives that long 17:21:29 There probably is no join, but it has <*> (m ((m x -> IO z) -> IO z) -> IO z) -> IO z It looks like doesn't join. 17:21:39 that have an order over just the one axis 17:21:46 it was pretty awkward even with entire sentences describing feelings 17:21:55 when I needed 27 of the things 17:22:04 $ wn s -grepa | wc -l 17:22:04 3505 17:22:10 3505 adjectives to choose from. 17:22:24 fizzie: yes, but that's not really very many 17:22:34 when most of them will be inappropriate, and the appropriate ones may be hard to order 17:22:44 Not entirely sure what year should be "verminous", and which one "xanthous". 17:23:02 But worthless and wrinkleless both work out just fine, for example. 17:23:25 1. yellow, yellowish, xanthous -- (of the color intermediate between green and orange in the color spectrum; of something resembling the color of an egg yolk) 17:23:32 I have to admit "xanthous" was a new word for me. 17:24:07 it's a good one 17:24:20 I'd vaguely heard it, but wasn't completely certain it referred to a colour, and was much less certain which 17:24:32 It sounds a bit like a word they put in crossword puzzles. 17:25:05 it was pretty awkward even with entire sentences describing feelings 17:25:05 when I needed 27 of the things 17:25:05 wat 17:25:15 "Etymology: < Greek ξανθός yellow + -ous suffix. Applied to those races, or that type, of mankind characterized by yellow or yellowish hair and light complexion; fair, blond. Also said of the hair, complexion, etc. Opp. to melanic adj. 2, melanous adj." 17:25:19 Oh, it's just Greek. 17:25:32 xi is such a pretty letter 17:27:22 It has the banana problem to write. 17:27:23 lowercase or uppercase? 17:27:29 it's very ugly in uppercase sans-serif 17:27:38 lowercase 17:27:47 uppercase is a bit bland, I agree 17:27:50 Ξ! 17:28:02 although uppercase xi is the only really sensible way to draw an uppercase X on a seven-segment display 17:28:13 if you're trying to make every capital letter distinct 17:28:25 (hmm, I'm not sure I ever wrote that down; I tried to work it all out entirely in my head) 17:28:50 What does your K look like? 17:29:16 (Though maybe the M would've been a better question.) 17:32:39 I usually use octal numbers to represent patterns on a seven-segment display (so, 177 means the full "8" and 010 means the "-") 17:33:45 yay, 108 over 6.5 17:35:02 elliott_: What are those number refer to? 17:35:18 required rates of change 17:36:29 What are you changing? 17:38:21 Nothing. Only observing. 17:38:50 -!- azaq23 has joined. 17:38:58 -!- azaq23 has quit (Max SendQ exceeded). 17:39:25 -!- azaq23 has joined. 17:39:33 elliott_: I for one still think your proposed UA string is the greatest. 17:40:17 I for one welcome our new UA overlords. 17:40:39 Gregor: It certainly is that, although I preferred your "Firefox but also Chrome and additionally an iPad and Android at the same time, please kill me" monstrosity. 17:41:05 elliott_: It's also every crawler bot that ever was. 17:41:17 fizzie: Have I told you to fix the regionfile stuff yet? :p 17:43:16 fizzie: K is like an upside-down 4 with the top segment set; M is a bar over a "lowercase n" shape 17:43:23 A couple of times, yes. 17:43:48 fizzie: I'm going to end up having to do it, aren't I. 17:43:57 ais523: Okay; the uppercase pi seems to be a popular M too. 17:44:10 ais523: My ideas were the same as that too 17:44:14 fizzie: that seems to be the only sensible way to do a capital N 17:44:29 a lowercase n is lowercase 17:44:31 But I didn't do uppercase/lowercase 17:44:37 I want a 7-segment uppercase+lowercase font now. 17:44:41 the aim was to do every capital letter, not every letter in an arbitrary case; that makes it rather easier 17:44:47 elliott_: I tried, but it was hard to remember the whole thing at once 17:44:51 and I didn't think to write it down 17:44:57 there's enough bits, after all 17:45:04 I think I even tried some of the punctuation 17:45:06 ais523: you /thought/ of a TTF file? 17:45:12 Because some letter are like lowercase but some are like uppercase 17:45:18 elliott_: not as the file, just as which segments would/wouldn't be set 17:45:37 back 17:45:47 Vorpal: anyway, AFAIK most people know that £5 coins exist, but few people have ever seen them <-- heh 17:45:47 I could make a METAFONT program for seven-segments. If you want TrueType then maybe you can convert it somehow 17:45:53 ais523, so they are rare? 17:46:05 yes, TTF files are rare 17:46:37 elliott_: Depends on how patient you are. I'm thinking I'll get right on it as soon as I get back to minecrafting in general; I haven't started it since September. I can't really make any guesses when that'll be; I'm on Christmas vacation now, that's certainly no time for Minecraft. 17:46:38 Vorpal: £5 coins are, yes 17:46:47 they're made in limited amounts for commemorative purposes 17:46:51 and are different-looking each time 17:47:08 fizzie: don't most people play games /more/ during the holidays? 17:47:12 or do you do Minecraft as a job? 17:47:14 ais523, and 50£ is 538.03kr hm 17:47:18 500 SEK notes are common 17:47:23 ais523: "It feels like a job." 17:47:23 * ais523 thinks this brings a new meaning to "you'd have to pay me to play Minecraft" 17:47:27 this reddit troll sure does really like Crysis 17:47:28 I mean I probably have one in my wallet 17:47:38 elliott_: why /can't/ a troll like Crysis? 17:47:47 fizzie: Well, I mean, I don't care overly much about mcmap until I buy a computer that I can play Minecraft on so I can get Pyralspite up again. 17:47:52 ais523: did I say they can't? 17:47:53 is there something inherent in trolling that makes it hard to appreciate famously top-of-the-line graphics? 17:47:55 elliott_: no 17:48:03 but I'm implying you did so as to start a pointless argument 17:48:17 My favourite kind of argument. 17:48:20 and only as an implication, so any arguments you use to defend yourself can be used to defend me too 17:48:22 ais523, if you go to an ATM in Sweden and request 500 kr or more you will get a 500 kr note rather than several 100 kr notes. 17:48:34 heh 17:48:37 well possibly a 500 kr note + a few 100 kr notes 17:48:41 50£ is about 60€ -- and 50€ notes are very common too. It's 20s and 50s you get out of ATMs, and then of course 10s and 5s you get as change. 17:48:58 And I suppose some ATMs can give out 10€ notes too? But that's kind-of rare. 17:49:01 ais523, which is 46£ 17:49:12 fizzie: hmm, in the UK ATMs typically give out £20 and £10 notes; some give out £10 and £5 17:49:13 well 46.47£ even 17:49:17 but those are rarer 17:49:34 ais523, I know 1000 kr notes exist but I have no idea if you get them from ATMs 17:49:38 hmm, there is no way this north korean reddit is not satire 17:49:38 I'm not sure why none seem to give out all three types of notes; probably because the usual ATM design can only handle two different sorts of notes 17:49:40 they are kind of rare 17:49:50 elliott_: a correct statement 17:49:59 there's no way any hypothetical north korean reddit wouldn't be satire 17:50:06 given that hardly any of the population has Internet access 17:50:11 SEK/EUR conversion is nice, since it's just moving a decimal point by one step. (Well, if you want to be exact, 1 EUR is pretty close to 9 SEK, so sometimes you do the "multiply by ten and then subtract the original" operation when going EUR -> SEK.) 17:50:19 Have you ever made computer fonts? 17:50:22 ais523: well, there are north korean sympathisers who live outside of the country 17:50:26 ais523: there's one famous guy who runs their website 17:50:30 he's in, um, somewhere in Europe 17:50:37 elliott_: sympathising with the government, or the people? 17:50:48 http://en.wikipedia.org/wiki/Alejandro_Cao_de_Ben%C3%B3s_de_Les_y_P%C3%A9rez 17:50:50 ais523: govt 17:50:54 I think quite a few people sympathise with the populace, as in feel sorry for them 17:50:55 elliott_, really? 17:51:03 "Cao founded the Korean Friendship Association in the year 2000, setting up an officially approved DPRK website.[1] It includes a media section and a web-shop where badges, North Korean music, and other items can be bought on-line. 17:51:03 In 2002 Cao became the first foreigner allowed to work on behalf of the North Korean authorities in an official capacity, thus fulfilling a dream he had had since he was a teenager. This required that North Korean law had to be changed. He was given a North Korean passport. His official assignment is as a "special representative" of the Foreign Ministry.[2]" 17:51:30 -!- augur has quit (Read error: Connection reset by peer). 17:51:37 http://en.wikipedia.org/wiki/Korean_Friendship_Association 17:51:39 friendship north korea 17:52:35 http://kcna.co.jp/index-e.htm awesome, official north korean news! 17:52:38 just what i _always_ _wanted_ 17:52:48 sure is a lot of "... Mourn Demise of Kim Jong Il" 17:53:05 elliott_: there were news clips of people mourning the demise of Kim Jong Il 17:53:13 it's not at all surprising that all of North Korea /would/ 17:53:16 ais523: Re commemorative coins, EU coinage rules state that each member state can mint a single commemorative 2€ coin per year; but of course not all states bother, and certainly not every year. (Also the eurozone-wide reverse side is fixed, so the commemorative coins can only vary the country-specific side.) 17:53:20 ais523: non-north-koreans 17:53:37 everyone there's been indoctrinated to make him out as some sort of god, and even if you didn't believe it you'd still pretend to mourn so as not to get in trouble 17:53:43 There's a fancy table at http://en.wikipedia.org/wiki/%E2%82%AC2_commemorative_coins#Issues denoting which coins have been issued. 17:53:55 fizzie: do non-commemorative €2 coins exist? 17:54:01 Yes. 17:54:05 They're in regular use, as well. 17:54:13 well, yes, I guess that'd be a perfectly sensible size for a coin 17:54:15 fizzie, you mean exactly one coin? 17:54:20 or one series? 17:54:38 Vorpal: One design. With some limits on the amounts made, but anyway. 17:54:45 ah 17:54:47 makes more sense 17:54:52 No, exactly one coin. 17:55:01 And actually looking at that table, Finland and Luxembourg are the only countries with all-green rows. 17:55:04 It's worth €2. 17:55:11 Forever. 17:55:17 (And Luxembourg has already a Y in the 2012's column, I don't know how that works.) 17:55:21 fizzie, green meaning? the site isn't loadingt 17:55:23 loading* 17:55:31 or actually looks like I got the now 17:55:36 <elliott_> yay, 88 over 6 17:55:43 <fizzie> Green meaning "issued the 2€ commemorative coin for this year". 17:55:46 <Vorpal> 500 bytes/s 17:55:48 <Vorpal> ouch 17:55:58 <Vorpal> bbl 17:56:00 <fizzie> It's a bit of a long page. 17:56:39 <fizzie> I don't know how to get page size in Chrome, there's a context-menu "page info" but it just pops out the useless-ish mini-info you get from the url bar favicon. 17:57:17 -!- augur has joined. 17:57:25 <ais523> fizzie: just assume A4 17:57:31 <ais523> or Letter, if you're in the US 17:57:31 <elliott_> http://kcna.co.jp/item/2011/201112/news21/20111221-37ee.html 17:57:34 <elliott_> wow, this is amazing 17:57:44 <fizzie> ais523: Page file size, in bytes, including all the referenced-to resources. 17:57:44 <elliott_> "His picture makes everyone feel pangs of compunction as he made long journey of field guidance, going in his field jacket all his life. 17:57:45 <elliott_> He had inconvenient naps and simple rice-balls in cars or on trains while making the journey of field guidance for the country's prosperity and people's happy life, not even taking a day off." 17:57:54 <elliott_> HE HAD INCONVENIENT NAPS 17:57:56 <elliott_> RIP 17:58:02 <elliott_> tortured soul 17:58:10 <ais523> elliott_: hmm, how am I meant to react to that? 17:58:25 <elliott_> ais523: mourning 17:58:33 <fizzie> "The coin's design resembles a stylised pillar from which ten sprouts grow upwards. This is a metaphorical theme: The ten sprouts represent the growth of the European Union (i.e., the 2004 enlargement which added ten new member states), while the pillar represents the foundation for the growth." Look how DEEP our commemorative coinage is. (That was released by Finland.) 17:58:35 <elliott_> fizzie: I think he was a: joke. 17:58:44 <fizzie> elliott_: Yes, in retrospect, you must be right. 17:58:56 <fizzie> elliott_: Well you know HINDSIGHT IS 88 over 6 and so on. 17:59:10 <ais523> 14 and a half? 17:59:17 <ais523> bleh, that took rather longer than it should have done 17:59:20 <fizzie> Or what's that twenty-by-twenty something, I don't know about your FOREIGN optical measurements. 17:59:24 <ais523> wait, no, 14 and a third 18:00:37 <elliott_> It's 78 over 6 now, I'm afraid. 18:01:01 <fizzie> Oh no, it's CONVERGING. 18:01:07 <fizzie> (I like the word.) 18:01:12 <fizzie> Conveeeeeerge. 18:01:27 <elliott_> Conveeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeerge. 18:01:32 <elliott_> It converged on the ".". 18:05:59 <Vorpal> elliott_, what are you doing? Wrt the x over y stuff 18:06:04 <zzo38> Did you know that..... Tic-tac-toe is bad because you can't be Jesus? 18:06:22 <zzo38> And that same thing with D&D? 18:06:29 <Vorpal> ... 18:06:37 <elliott_> Yes. 18:06:56 <elliott_> Vorpal: Observing values and hoping they approach 0. 18:07:10 <Vorpal> elliott_, for what purpose? 18:07:18 <elliott_> Vorpal: Science. 18:07:43 <Vorpal> elliott_, can you provide an useful explanation? 18:07:48 <elliott_> Yes. 18:07:58 <Vorpal> elliott_, would you please do so now? 18:08:15 <zzo38> Of course it is nonsense to say tic-tac-toe or D&D are bad because you can't be Jesus.............. but a few people have said these things 18:08:16 <elliott_> Under certain circumstances, yes. 18:08:23 -!- incomprehensibly has quit (Remote host closed the connection). 18:08:52 <Vorpal> elliott_, whatever 18:09:10 -!- incomprehensibly has joined. 18:12:33 <ais523> is there any evidence that Jesus knew the rules of tic-tac-toe? 18:13:11 <elliott_> `addquote <ais523> is there any evidence that Jesus knew the rules of tic-tac-toe? 18:13:13 <zzo38> ais523: Probably not. When was it invented? 18:13:14 <HackEgo> 775) <ais523> is there any evidence that Jesus knew the rules of tic-tac-toe? 18:13:20 <ais523> zzo38: I don't know 18:13:49 <ais523> approximately first century BC according to Wikipedia, so it's possible 18:13:50 <zzo38> I saw a picture, Jesus was carrying the cross but then the other people carried the circle so that they can be play X and O game 18:14:00 -!- incomprehensibly has quit (Read error: Connection reset by peer). 18:14:01 <ais523> although it wasn't quite the same rules 18:14:06 -!- incomprehensibly has joined. 18:14:14 -!- incomprehensibly has changed nick to micahjohnston. 18:14:15 <Vorpal> ais523, I don't know a Swedish name for tic-tac-toe, nor does google 18:14:29 <Vorpal> so maybe it is restricted to some cultures? 18:14:34 <ais523> and it was played in the Roman Empire, so it's possible that Jesus knew the rules, I guess 18:14:37 <Vorpal> hm 18:14:39 <ais523> Vorpal: do you know the game itself? 18:14:42 <Vorpal> ais523, well yes 18:14:49 <Vorpal> ais523, but only from English sources afaik 18:14:52 <ais523> ah, I see 18:15:10 <ais523> for a moment I thought people in Sweden played it, but didn't have a name for it 18:15:13 <Vorpal> ais523, isn't it a subset of noughts and crosses? 18:15:18 <ais523> no, it's the same game 18:15:20 <Vorpal> becauses google says noughts and crosses = luffarschack 18:15:22 <Vorpal> hm 18:15:26 <ais523> unless you mean a different game by noughts and crosses 18:15:34 <ais523> (to be fair, that game is pretty hard to meaningfully subset) 18:15:37 <Vorpal> ais523, I thought noughts and crosses was played on a larger grid? 18:15:42 <ais523> no, still 3 by 3 18:15:46 <Vorpal> hm 18:16:12 <Vorpal> luffarschack is quite a weird name, the literal translation would be like "tramp chess" 18:16:45 <Vorpal> or google indicates when I translate the parts: "hobo chess" 18:16:49 <ais523> that's a good description of the game :) 18:17:04 <ais523> tramp/hobo are UK/US names for much the same thing 18:17:05 <Vorpal> heh 18:17:11 <fizzie> It's called "jätkänshakki" i.e. "lumberjack's [approx] chess" in Finnish. 18:17:34 <Vorpal> ais523, anyway what is the game like tic-tac-toe that is 5 in a row and played on a potentially infinite grid? 18:17:39 <Vorpal> I seem to remember such a game 18:17:40 -!- Ngevd has joined. 18:17:53 <Ngevd> Hello! 18:17:53 <lambdabot> Ngevd: You have 1 new message. '/msg lambdabot @messages' to read it. 18:17:53 <fizzie> That's called "5 in a row". :p 18:17:54 <Vorpal> and I /thought/ that was what luffarschack was 18:17:59 <Vorpal> fizzie, hm 18:17:59 <Vorpal> right 18:18:09 <ais523> Vorpal: it's also called go-moku, after the original Japanese 18:18:12 <fizzie> At least occasionally. Also, gomoku. 18:18:15 <Vorpal> I see 18:18:22 <ais523> but that's technically a 19x19 grid, not infinite; but you're very unlikely to notice the difference 18:18:30 <Ngevd> What's the general consensus on Mineso? 18:18:36 <ais523> and IIRC there are variants of the game to reduce the first-person advantage 18:18:38 <ais523> Ngevd: it's not spam 18:18:43 <ais523> that's all I noticed about it 18:18:46 <ais523> after I almost deleted it by mistake 18:18:51 <Ngevd> The spec bores me 18:18:52 <ais523> (this is why we get humans, not computers, to delete spam) 18:18:58 <fizzie> ais523: Sometimes the grid size depends on the notebook-you-happen-to-have paper size. 18:19:02 <elliott_> tramp chess :D 18:19:14 <fizzie> elliott_: Is "lumberjack chess" any better? 18:19:36 <ais523> just like 4x4x4x4 noughts and crosses isn't really fundamentally different in terms of gameplay from infinite-dimensional side-4 noughts and crosses 18:19:53 <Vorpal> heh 18:20:28 <Vorpal> ais523, infinite-dimensional? Ouch that will be hard to keep track of 18:20:36 <ais523> "It also allows implementations to add in support for all sorts of crazy I/O, library access and whatnot, without the need to fork the language and add in new commands." 18:20:40 <ais523> this is a disaster waiting to happen 18:21:00 <ais523> it's much like randomly making various memory addresses do memory-mapped IO without telling anyone 18:21:04 <Vorpal> ais523, that sounds like it could be a fingerprint style machanism? 18:21:07 <Vorpal> mechanism* 18:21:08 <ais523> Vorpal: that's why limiting it to 4D helps in practice 18:21:21 <Vorpal> ais523, 4D is hard to draw too. 18:21:23 <Vorpal> 2D is much easier 18:21:36 <Vorpal> 3D is doable but hard on paper 18:21:49 <fizzie> 4x4x4x4 noughts and crosses is just a 4x4 grid of 4x4 grids. 18:21:55 <Vorpal> well yes 18:21:57 <ais523> Vorpal: 3 and 4 are equally easy on paper 18:22:04 <Vorpal> hm maybe 18:22:25 <Vorpal> harder for a human to see what forms a line though 18:22:26 <ais523> hmm, now I'm interested in the concept of having to get some number in a row (5? 6?) on a 2D grid in arithmetic progression 18:22:49 <ais523> Vorpal: we had a rule that you didn't win unless you actually pointed out that you'd won 18:22:58 <ais523> because before that, people were winning by mistake and it was hard to figure out who'd won first 18:23:01 <Vorpal> ais523, indeed, which might be hard to notice 18:23:08 <elliott_> <Vorpal> ais523, infinite-dimensional? Ouch that will be hard to keep track of 18:23:10 <fizzie> What if you point out your opponent has won? 18:23:12 <elliott_> oklopol had inf-d 4 in a row 18:23:30 <Ngevd> fizzie, then they win, of course 18:23:51 <fizzie> Ngevd: But they didn't point out they won. Though I suppose they'd then immediately do so. But what if they don't? 18:24:01 <ais523> elliott_: 4 is definitely the right side length for infinite-dimensional 18:24:12 <ais523> fizzie: I don't think our rules allowed for that eventuality 18:24:12 <Ngevd> fizzie, then they are an iddiot 18:24:17 <Ngevd> fizzie, with twice the number of d's to prove it 18:24:41 <Vorpal> <ais523> elliott_: 4 is definitely the right side length for infinite-dimensional <-- why? 18:25:01 <fizzie> ais523: I can imagine someone would think it's not sporting to point out they won if it took the opponent's help to notice. 18:25:11 <ais523> Ngevd: you /do/ hate There Was Once A Fish Named Fred, right? 18:25:28 <ais523> Vorpal: have you /played/ it? 18:25:33 <Ngevd> ais523, I have never heard of it? 18:25:34 <Vorpal> ais523, can't say I have 18:25:40 <ais523> personal experience is that 3 would be far too trivial to win, and 5 far too difficult 18:25:44 <Vorpal> ah 18:25:48 <Vorpal> okay 18:26:04 <elliott_> ais523: the right side length is infinite, imo 18:26:09 <elliott_> basically what i'm saying is 18:26:16 <Ngevd> I've got a 4x4x4 reusable noughts and crosses set somewhere 18:26:17 <elliott_> the problem with 4 in a row is that it's not continuous 18:26:30 <Vorpal> ais523, does perfect play exist for 4D 4-side? 18:26:32 <elliott_> it should take place on an R^inf board 18:26:33 <ais523> elliott_: I mean, for side-length-limited, infinite-dimensional 18:26:37 <elliott_> and you should have to somehow make an infinite ray to win 18:26:41 <elliott_> ais523: oh, ah 18:26:42 <ais523> you'd use other values for other rulesets 18:26:46 <elliott_> ais523: well no that's a limit. limits suck. 18:26:49 <elliott_> i want to play this now 18:26:53 <ais523> Vorpal: what finite game does perfect play /not/ exist for? 18:26:53 <elliott_> i just have no idea how it'd work 18:27:05 <Vorpal> ais523, one with chance? 18:27:11 <ais523> there's perfect play even then 18:27:13 <fizzie> I suppose that was more "is it a win or a draw" question. 18:27:27 <Vorpal> ais523, if you consider chance an input sure 18:27:33 <ais523> and chance is involved in perfect play in rock-paper-scissors games, incidentally, even if the game itself doesn't have it 18:27:44 <ais523> Vorpal: nope, some strategy has to be the best 18:27:55 <ais523> or multiple strategies equal-best 18:28:02 <ais523> or, hmm 18:28:11 <Vorpal> ais523, you can construct a finite game of pure chance. Not saying it would be any interesting though 18:28:16 <ais523> I guess you could create a game where the supremum strategy wasn't possible, but you could get arbitrarily close 18:28:22 <ais523> Vorpal: but it still has a perfect strategy 18:28:26 <ais523> in fact, it has only one strategy 18:28:30 <ais523> which thus must be perfect by definition 18:28:31 <elliott_> 68 over 5.5! 18:28:31 <Vorpal> ais523, well okay 18:28:40 <ais523> (and such games exist, e.g. Snakes and Ladders) 18:28:42 <fizzie> "For the case of k-in-a-row where the board is an n-dimensional hypercube with all edges with length k , Hales and Jewett proved[3] that the game is a draw if k is odd and k ≥ 3^n - 1 or if k is even and k ≥ 2^(n+1) - 2. 18:28:42 <fizzie> They conjecture that the game is a draw also when the number of cell is at least twice the number of lines, which happens if and only if 2 k^n ≥ (k + 2)^n." Sadly with k=n=4, neither hold. 18:29:00 <Vorpal> ais523, okay, you win 18:29:05 <zzo38> Can you invent a card game of pure chance where the chance of winning is exactly 1 over pi? 18:29:24 <zzo38> (A solitaire game) 18:29:42 <elliott_> ais523: I wonder how I ever deluded myself into thinking I "played" Snakes and Ladders 18:29:47 <ais523> fizzie: the UK maths team proved it possible that draws were /possible/ in 4-dimensional noughts and crosses; it's nontrivial to construct a drawn position, there 18:29:56 <elliott_> "hey, let's watch a completely random simulation of nothing!" 18:29:57 <Vorpal> ais523, chess is finite right? Isn't there a rule like that the same position can only reoccur a finite number of times before the game ends? 18:30:02 <ais523> elliott_: you watch games of snakes and ladders, and support a particular team 18:30:05 <Vorpal> bbl 18:30:14 <ais523> Vorpal: yes, chess is finite, and it has a perfect play, but that play isn't known and seems impossible to calculate 18:30:15 <Ngevd> Vorpal, yes, three times 18:30:17 <elliott_> ais523: finally, someone takes the skill out of betting 18:30:34 <Ngevd> Vorpal, only came up once, I think, in high-level play 18:30:36 <ais523> actually, the fifty move rule limits games before the threefold repetition rule does 18:30:51 <ais523> Ngevd: what are you talking about? the threefold repetition rule becomes relevant quite a lot 18:30:55 <Ngevd> Really? 18:30:58 <Ngevd> I'm wrong, then 18:31:10 <ais523> by determining which player it is who has to decide whether they're going to make a suboptimal move and maybe win, or settle for a draw 18:32:36 -!- DeadlyFugu has joined. 18:33:06 -!- Ngevd has quit (Read error: Connection reset by peer). 18:33:28 -!- Ngevd has joined. 18:33:52 <elliott_> http://statusboard.archive.org/ 18:33:59 <elliott_> this is so dramatic 18:34:11 <ais523> err, does it require JS or something? 18:34:16 <elliott_> yes 18:34:35 <ais523> meh, it seems to require JS from Google specifically 18:34:38 <ais523> which I'm not enabling 18:34:41 <ais523> (and not just the APIs) 18:34:45 <elliott_> ais523: it's just google maps 18:35:01 <ais523> well, OK, so not just JS, but data 18:35:07 <elliott_> lmao 18:35:14 <elliott_> yes they're going to violate your privacy by downloading information about the globe 18:35:18 <elliott_> checkmate JS users 18:36:02 <ais523> elliott_: well, they're going to tell Google that I use archive.org 18:36:14 <elliott_> That's illegal. 18:36:17 <ais523> no it isn't 18:36:28 <ais523> not if it's done via hotlink 18:36:28 <elliott_> archive.org must have, like, at least one bomb-making manual. 18:36:35 <ais523> oh, you mean using archive.org is? 18:36:37 <elliott_> Also Google are the police. 18:36:40 <ais523> hmm, I don't think so, generally 18:37:01 <ais523> elliott_: seriously, though, they could quite possibly even tell that you'd linked that and who a bunch of your friends are, just via timing, if it's a reasonably rarely visited page 18:37:31 <ais523> come to think of it, if Google mined that information (and to be fair, they probably don't), they'd probably end up with a picture almost as good as Facebook's as to who knew who 18:37:36 <elliott_> I am dead sure Google already knows all that. 18:37:49 <ais523> yes, unfortunately 18:37:49 <elliott_> Google even... INDEXES THIS CHANNEL'S LOGS. 18:37:54 <elliott_> You should /part to avoid association with me. 18:38:12 <ais523> they'd have to parse the logs too to match a nick with an IP 18:38:22 <ais523> which seems like a lot of trouble as online IRC logs don't use a consistent format 18:38:24 <elliott_> You're willing to TAKE THAT RISK? 18:38:29 <ais523> well, yes 18:38:34 <elliott_> codu offers HTTP logs in raw IRC format. 18:38:50 <ais523> I tend to assume that governments and megacorporations in general are out to get everyone in general, but don't care enough about me to specialcase me specifically 18:39:24 <ais523> and that timing-based scanning on HTTP logs would give enough information about pretty much everyone (especially with the number of sites using Google adverts), so why bother special-casing one particular likelyish format for IRC logs? 18:40:33 <elliott_> Google should offer a form to report information about the social graph, so that I could inform them that you clicked that link after I posted it and you'd run out of excuses. 18:40:34 <zzo38> ais523: It is why I made SIRCL format, so that you can make a consistent format for IRC logs 18:41:01 <Gregor> zzo38: ais523 explicitly wanted there NOT to be a consistent format here :) 18:41:13 <ais523> zzo38: I'm not convinced that your formats have high enough adoption for Google to parse them 18:41:25 <zzo38> ais523: I do not intend Google to parse them. 18:43:30 <zzo38> That is why I banned some services from accessing my gopher services, it so that Google cannot index them 18:44:05 <ais523> hmm, I wonder if there is a search engine for Gopher pages? 18:44:28 <zzo38> ais523: Yes, it is called VERONICA 18:47:41 <zzo38> SIRCL is the native format of 194CthulhuIRCd, but probably not anything else 18:48:28 <zzo38> (But similar formats, used by other programs, do exist) 18:50:29 <zzo38> Some differences might be using spaces instead of tabs between the timestamp and the message, or using the operating system's line breaks instead of always CRLF. And many of them lack support for metadata. 18:50:46 <ais523> hmm, I think, with format standardisation, the bigger problem is not coming up with the format itself, but persuading everyone to use it 18:51:53 <zzo38> ais523: Yes, that is something. However, there is no real standard format for IRC log so you can use what you want to. At least, this format I invented, I used this one. And the IRC server software I modified to make it be able to write outputs logs in this format 18:52:57 <ais523> hmm, so conclusion: your advice is that everyone should standardise on an unpopular format so that search engines don't crawl it? 18:53:09 <zzo38> ais523: No. That isn't my advice. 18:53:22 <ais523> ah, OK 18:53:25 <ais523> it's fun advice, though 18:53:46 <zzo38> My advice is to use the format that work for you. I made up the format simply so that there can be a standard format, even if nobody uses it. 18:55:00 <zzo38> The format is: There is two kind of lines, metadata lines and normal lines. Normal lines have a UNIX timestamp in decimal in ASCII, followed by a tab, and the IRC message, and terminated with CRLF (including the last line). Metadata lines start with * followed by the metadata command. 18:55:13 -!- Ngevd has quit (Ping timeout: 252 seconds). 18:55:30 <zzo38> Is this good to you? 18:56:51 <ais523> zzo38: I'm still trying to figure out whether the existence of a standard that nobody uses is useful or not 18:57:15 <ais523> hmm, and now I'm suddenly reminded of escaping special characters in Underload 18:58:49 <Vorpal> back 18:59:04 <Vorpal> <Ngevd> Vorpal, only came up once, I think, in high-level play <-- ah 18:59:31 <Vorpal> ais523, what is the 50 move rule? 18:59:35 <ais523> hmm, I'm busy reading an advertisement for a lint-like tool, as I was curious as to what they did nowadays 18:59:42 <ais523> Vorpal: 50 irreversible moves in a row causes a draw 18:59:50 <elliott_> 48 over 5 :) 19:00:02 <elliott_> ais523: which one? 19:00:02 <ais523> where irreversible = you couldn't make moves to go back to the previous position even with both players trying 19:00:06 <elliott_> ais523: I bet you got there through the Carmack post 19:00:06 <Vorpal> ais523, uh, irreversible? like pawns moving forward? 19:00:11 <Vorpal> ah 19:00:13 <ais523> elliott_: PVS-Studio 19:00:16 <zzo38> And capturing 19:00:21 <ais523> elliott_: indeed 19:00:22 <elliott_> ais523: right, that one is pretty impressive 19:00:29 <elliott_> ais523: I think "lint-like" is a bad description though 19:00:31 <Vorpal> ais523, that seems annoying to keep track of though 19:00:33 <elliott_> -Wall -Wextra is lint-like 19:00:40 <elliott_> global static analysis is something rather more than that 19:00:40 <ais523> the funny thing is, pretty much all the errors they mention are type errors in one way or another 19:01:01 <ais523> and that catching them all is only impressive because C doesn't track enough information to be able to catch them 19:01:09 <elliott_> ais523: a lot of the rest are due to for loops still being a thing that exists 19:01:16 <elliott_> C: the worst 19:01:17 <ais523> heh 19:01:22 <Vorpal> ais523, where is this advert? 19:01:26 -!- Ngevd has joined. 19:01:29 <elliott_> http://www.viva64.com/en/pvs-studio/, presumably 19:01:33 <Vorpal> ah 19:01:34 <elliott_> it has a bunch of examples of errors found in open-source projects 19:01:42 <ais523> elliott_: specifically, http://www.viva64.com/en/a/0077/ 19:01:50 <ais523> perhaps it's the same list of examples 19:02:00 <elliott_> ais523: that's just one of them, I think 19:02:05 <ais523> ah, right 19:02:10 <elliott_> post, I mean 19:02:13 <ais523> I'm talking about the page that has examples of errors 19:02:19 <ais523> not a page about pages that have examples of errors 19:02:29 <ais523> as that doesn't contain the actual errors I care about 19:03:23 <elliott_> (38 over 5) 19:04:11 <ais523> the "A string is printed into itself." example is, I think, actually caught by C99 19:04:23 <ais523> due to sprintf having restrict on its args 19:04:38 <ais523> not sure, though, especially as you probably can't say "restrict ..." 19:05:38 <Vorpal> shouldn't it be enough to have restrict on just one? 19:05:46 <ais523> oh, perhaps it is 19:05:50 <ais523> I forget exactly how restrict works 19:06:06 * ais523 checks C11 draft 19:06:08 <Vorpal> I don't remember either 19:06:36 <elliott_> ais523: restrict ... seems like a terrible idea 19:06:39 <elliott_> you couldn't pass the same string twice 19:06:41 <elliott_> no? 19:06:48 <ais523> elliott_: oh, hmm 19:06:50 <Vorpal> can someone link me a C11 draft? Google is still unusably slow here. 19:06:57 <Vorpal> ais523, ^ 19:07:01 <ais523> Vorpal: there's one in scrollback 19:07:05 <Vorpal> sec 19:07:22 <ais523> oh, but so long ago it's scrolled off my scrollback 19:07:25 <Vorpal> ais523, can't find it by searching for c11 19:07:29 <elliott_> ais523: /lastlog c11, /lastlog pdf give nothing herfe 19:07:30 <elliott_> here 19:07:31 <ais523> search for n1570.pdf 19:08:07 <Vorpal> right 19:08:19 <ais523> ah, OK, you do need a restrict on just the output string 19:08:23 <Vorpal> 48 kbit/s 19:08:27 <elliott_> hmm, right now I'm regretting not buying that C94 book 19:08:42 <elliott_> i could show it to my grandchildren 19:08:47 <ais523> what restrict means is that whatever object the pointer refers to, isn't accessed via any other pointer in the function that has the restrict param 19:09:13 <Vorpal> from april? 19:09:17 <Vorpal> that is kind of old 19:09:19 <Vorpal> I wonder what changed 19:09:35 <elliott_> Vorpal: it's design by committee, and it's /C/, they probably fixed two typos and reworded a sentence 19:09:37 <ais523> probably nothing, it just takes that long for ISO to agree on anything 19:09:44 <Vorpal> elliott_, probably 19:09:51 <ais523> as it'd have to be the whole standards committee, not just the working group 19:09:52 <elliott_> I'm surprised C11 introduced threads 19:09:52 -!- kallisti has quit (Ping timeout: 252 seconds). 19:09:55 <ais523> it was apparently approved without comments 19:09:59 <elliott_> it's only been 12 years! 19:10:05 <Vorpal> elliott_, are there atomic primitives too? 19:10:06 <elliott_> too drastic! 19:10:11 <elliott_> Vorpal: well, presumably... 19:10:18 <ais523> elliott_: the rationale, I think, was that it's impossible to do threads correctly without langauge support, no matter how good your libraries are 19:10:24 <elliott_> langauge 19:10:26 <Vorpal> elliott_, I wouldn't put it past them to skip that 19:10:34 <Vorpal> ah stdatomic.h 19:10:38 <elliott_> anyway, the idea that you can do threads correctly in C full stop is hilarious 19:10:46 <Vorpal> why is it threads.h not stdthreads.h? 19:10:50 <elliott_> it might even be hilarious enough for the committee to believe it 19:10:54 -!- kallisti has joined. 19:11:03 <Vorpal> oh stdnoreturn.h 19:11:04 <Vorpal> lol 19:11:12 <Vorpal> The header <stdnoreturn.h> defines the macro 19:11:12 <Vorpal> noreturn 19:11:12 <Vorpal> which expands to _Noreturn. 19:11:13 <Vorpal> that is all 19:11:22 <elliott_> they should introduce a header for every single new symbol 19:12:18 <ais523> elliott_: I think it's possible to do threads Cishly in C 19:12:29 <elliott_> ais523: yes, i.e. wrongly 19:12:35 <ais523> as in, no more incorrectly than the rest of the language does everything else 19:12:52 <elliott_> ais523: right, it's just that it's easier to fool yourself into thinking you have a working program when you're not writing manual locking code 19:12:53 <Vorpal> elliott_, depends on what you mean by correctly 19:13:04 <elliott_> Vorpal: "humanly possible to write a non-broken program with" 19:13:20 <Vorpal> elliott_, define non-broken? 19:13:34 <elliott_> no 19:13:44 <Vorpal> you can get it working up to some level, look at the kernel. Though there are likely to be some bugs 19:13:48 <Vorpal> but it works most of the time 19:13:59 <elliott_> not really 19:14:10 <elliott_> if it worked most of the time, bug reports in linux would be rare 19:14:18 <elliott_> and new releases would mostly just add new features 19:14:31 <Vorpal> elliott_, well, most > 75% or so at least 19:14:39 <elliott_> actually linux is one of the worst examples you can pick, it's huge and doesn't really have a reputation for extreme stability 19:14:46 <Vorpal> indeed 19:14:54 <Vorpal> elliott_, so look at vxworks or qnx then 19:14:56 <elliott_> there's no way linux has fewer than 10,000 bugs 19:15:25 <elliott_> Vorpal: is vxworks actually written in C? 19:15:32 <Vorpal> elliott_, C or C++ afaik 19:15:36 <Vorpal> I could be wrong 19:15:45 <ais523> hmm, quite often, bugs are not caught for ages because they're either triggered really rarely, or look like a feature rather than a bug (or else, look like lack of a feature you didn't know the program had) 19:15:56 <elliott_> anyway, "most people don't notice bugs that often" is very far off from "non-broken" 19:16:19 <elliott_> imagine if CPUs were as buggy as software 19:16:29 <Vorpal> elliott_, anyway what about environments built on top of pthreads. I guess threads with ghc is built on top of pthreads at /some/ layer? 19:16:30 <ais523> also, you can get obviously incorrect code in a program that nonetheless works by chance 19:16:42 <Vorpal> elliott_, sounds like a GPU then 19:16:47 <ais523> elliott_: actually, earlier iterations often are buggy, there's just more incentives to get it right 19:17:10 <ais523> e.g. the microcontrollers from Microchip quite often came with a list of things that should work but don't, and workarounds 19:17:32 <ais523> and desktop/server CPUs have similar problems on occasion, sometimes quite nasty 19:17:34 <Vorpal> ais523, and yet those are far far simpler than modern x86 processors 19:17:39 <ais523> Vorpal: right, indeed 19:18:18 <Vorpal> yes I remember that my home server (and old p3 box) sticks with using MTRR rather than PAT due to CPU errata (according to dmesg) 19:18:31 <Vorpal> s/and old/an old/ 19:18:34 <elliott_> ais523: indeed 19:18:40 -!- elliott_ has left ("Leaving"). 19:18:43 -!- elliott_ has joined. 19:18:47 <elliott_> ais523: but it's not even remotely comparable to software 19:19:00 <elliott_> hardware has bugs, but they're /exceptional/, and companies get tons of flak for them 19:19:01 <ais523> I think software could be taken down to the bug level of CPUs if it had to be 19:19:09 <ais523> just it'd take much longer to develop as a result 19:19:09 <elliott_> yes, it can 19:19:12 <Vorpal> elliott_, anyway CPUs have bugs, and usually the OS works around them. Rarely do you see major bugs that the OS can't work around. 19:19:13 <elliott_> no, it wouldn't 19:19:30 <ais523> incidentally, hardware receives really heavy testing at every stage in the process 19:19:39 <elliott_> ais523: writing a program in Haskell is easier than in C, right? (OK, pick a language you find intuitive rather than Haskell) 19:19:41 <Vorpal> the two major examples I can think of are pentium fdiv, and the f00f bug for x86 19:19:42 <ais523> because mistakes are really expensive 19:19:52 <elliott_> ais523: a program in Haskell is likely to have fewer mistakes than a program written in C, right? 19:20:07 <elliott_> ais523: generally, reducing the possibility for bugs makes programs /easier/ to write 19:20:13 <ais523> elliott_: well, it depends on what the program does, but if it's algorithmic rather than glue, it's definitely going to be easier and less buggy in Haskell than in C 19:20:15 <Vorpal> elliott_, what about the haskell runtime itself? Parts are written in C 19:20:21 <Vorpal> at least for ghc 19:20:23 <elliott_> the only reason people think writing reliable programs is hard is because our current environments make it hard 19:20:33 <micahjohnston> Vorpal: that's not really relevant, is it? 19:20:38 <elliott_> micahjohnston: indeed not 19:20:47 <ais523> elliott_: I'd say even Haskell isn't nearly expressive enough to keep bugs reasonably low 19:20:50 <Vorpal> well that part can have bugs 19:21:12 <micahjohnston> Haskell isn't expressive and can't keep bugs reasonably low? 19:21:23 <micahjohnston> I'm about to laugh 19:21:25 <ais523> err, that's not what I said? 19:21:39 <micahjohnston> what did you say? 19:21:42 <ais523> I implied that even a language that expressive isn't enough to keep bugs reasonably low 19:21:43 <micahjohnston> looks like that's what you said :/ 19:21:47 <micahjohnston> ok 19:21:49 <elliott_> ais523: indeed, it's not 19:21:56 <micahjohnston> oh, I see what you mean 19:21:58 <micahjohnston> yeah, it's not 19:22:07 <elliott_> it's much better than C, though 19:22:09 <Vorpal> what languages are? 19:22:17 <micahjohnston> Agda, perhaps? 19:22:18 <Vorpal> which* 19:22:19 <Vorpal> hm 19:22:21 <micahjohnston> although it's perhaps less "expressive" 19:22:23 <elliott_> Vorpal: none yet, because people aren't interested in developing them, because <excuses> 19:22:40 <elliott_> excuses like "it's too hard to write programs in them" or "we don't need them to write bug-free programs" or ... 19:22:43 <micahjohnston> in Agda you can prove you have no bugs, barring side-channel attacks and compiler bugs 19:22:51 <micahjohnston> but you spend a lot of time with the type system 19:22:55 <micahjohnston> so there is a huge tradeoff 19:22:55 <Vorpal> elliott_, the latter is often true 19:22:55 <ais523> elliott_: to be fair, "it's too hard to write programs in them" is entirely true for Agda 19:23:06 <ais523> micahjohnston: and not really, you can still have bugs in the spec 19:23:08 <micahjohnston> yeah, it is 19:23:16 <micahjohnston> ais523: yeah, your model can failt o match reality 19:23:16 <Vorpal> elliott_, depends on the type or thing you are coding of course 19:23:18 <ais523> a proof that a program matches its spec is pointless when the spec is wrong 19:23:48 <elliott_> ais523: "bugs in the spec" is way overrated really 19:24:06 <elliott_> is a mathematical expression of what we want a program to do less likely to be correct than an English explanation? 19:24:08 <ais523> elliott_: I take it you've never tried to write a spec :) 19:24:18 <elliott_> no, it's not 19:24:27 <elliott_> so basically, you're more likely to tell people to write the wrong program in the first place 19:24:29 <micahjohnston> elliott_: yes, but the point is that either can still have mistakes 19:24:33 <micahjohnston> elliott_: or overlookings 19:24:34 <Vorpal> from personal experience I would agree with ais523 here 19:24:34 <ais523> elliott_: no, but the English explanation is almost guaranteed to be wrong 19:24:41 <ais523> and also massively imprecise 19:24:47 <micahjohnston> and so proving a program correct is still insufficient to win at the universe 19:24:57 <ais523> so the mathematical version being slightly more likely to be right isn't really saying much 19:25:14 <elliott_> ais523: then your complaint is nonsense 19:25:20 <Vorpal> no? 19:25:22 <elliott_> there is no way to do better than we can communicate 19:25:33 <Vorpal> elliott_, that is a major issue indeed 19:25:35 <elliott_> if we can't explain what we want the program to be, then we won't get the right program, there's no point pointing it out 19:25:48 <elliott_> there's no point saying "specs can be incorrect" if there's nothing /better/ than a mathematical specification 19:25:55 <ais523> elliott_: well, it explains why there's a ceiling on how good the programs can get 19:26:11 <ais523> because after some point, a sufficiently perfect program becomes impossible to communicate 19:26:16 <elliott_> I also think a mathematical spec is /vastly/ more likely to be correct than the plain English specification 19:26:18 <elliott_> not just slightly 19:26:26 <Vorpal> elliott_, well you can do tests against real world data 19:26:26 <micahjohnston> elliott_: there is a point, because it counteracts worship of proofs 19:26:31 <ais523> elliott_: a mathematical spec is much like a program itself 19:26:33 <micahjohnston> because proofs are still insufficient 19:26:42 <micahjohnston> they don't solve every problem 19:26:45 <elliott_> micahjohnston: there's no point calling something insufficient if it's literally the best thing possible 19:26:53 <micahjohnston> it's not literally the best thing possible 19:27:02 <ais523> just a declarative one, and writing declaratively is much easier than writing imperatively or even functionally when trying to describe a spec rather than an algorithm 19:27:05 <elliott_> micahjohnston: fine, so what is? ais523 wasn't claiming there was 19:27:25 <micahjohnston> I don't have to have an existence proof that it's possible there's something better 19:27:34 <micahjohnston> there may be nothing better than proofs 19:27:51 <elliott_> <micahjohnston> it's not literally the best thing possible 19:27:52 <micahjohnston> but proofs can only talk about their models, and are extremely vulnerable to e.g. side-channel attacks 19:28:03 <elliott_> if there's nothing better, then it's literally the best thing possible 19:28:05 <micahjohnston> ok, I'll rephrase 19:28:05 <elliott_> even if it's imperfect 19:28:05 <ais523> elliott_: I don't see why the best thing /can't/ sometimes be insufficient 19:28:17 <micahjohnston> it's just another tool in the toolbux 19:28:19 <micahjohnston> box* 19:28:22 <ais523> we can't fly a probe into the centre of the sun, because the best possible heat-shielding is insufficient, for instance 19:28:26 <micahjohnston> and we have no idea if it's the best thing possible 19:28:31 <elliott_> ais523: if the best thing possible is insufficient, you should give up; unless you intend to give up, then the best thing possible is sufficient 19:28:44 <elliott_> we're not trying to send a probe into the centre of the sun, but we are trying to program 19:28:44 <micahjohnston> tha'ts ridiculous 19:28:47 <ais523> elliott_: well, if you like, I'm saying we should give up the hope of having perfect bug-free programs 19:28:50 <micahjohnston> there aren't platonically perfect solutions to every problem 19:28:55 <elliott_> we don't generally try to do impossible things without first showing they're possible 19:28:58 <ais523> that's different from aiming for a program that's unbuggy enough 19:28:59 <elliott_> micahjohnston: that's my point 19:29:02 <elliott_> sufficient means good enough 19:29:07 <elliott_> if the best just isn't good enough, you can't do it 19:29:11 <micahjohnston> it's been proven that you can't measure the universe to 100% accuracy 19:29:16 <micahjohnston> not just that our tools are always flawed 19:29:25 <elliott_> ...and? 19:29:25 <micahjohnston> but that by nature of the universe, we'll always have missing information 19:29:29 <micahjohnston> that doesn't mean we should give up science 19:29:33 <elliott_> we don't try to measure the universe to 100% accuracy 19:29:38 <elliott_> because we're not idiots 19:29:41 <elliott_> because we know it's impossible 19:29:45 <Vorpal> micahjohnston, assuming of course that our current knowledge of physics is correct about that point. 19:29:52 <elliott_> science's goal isn't "measure the universe and also violate the uncertainty principle" 19:29:58 <ais523> and even if it were possible to measure the universe to 100% accuracy, it wouldn't be possible to store the resulting data 19:30:14 <micahjohnston> I know, but I'm saying literally the best science possible can never know everything about the universe 19:30:29 <ais523> it obviously takes at least as much information to describe a particle as that particle can store 19:30:29 <micahjohnston> that doesnt' mean we should give up at improving our knowledge 19:30:30 <elliott_> are you /trying/ to present a counterargument to anything I've said? because... you're not 19:30:37 <ais523> so if the inequality is nonstrict even once… 19:30:44 <micahjohnston> "if the best thing possible is insufficient, you should give up; unless you intend to give up, then the best thing possible is sufficient" 19:30:54 <micahjohnston> hm, I see I may have misinterpreted that message 19:31:16 <elliott_> if our goal was to measure the universe to 100% accuracy 19:31:18 <elliott_> we should give up 19:31:26 <elliott_> because it's not possible 19:31:55 <elliott_> ais523: i'm not sure that's necessarily true; what if there's a really compact kind of information-storing particle that nothing in the universe uses at all? 19:32:08 <Vorpal> anyway, the way things currently stand, ensuring that a piece of software is formally verified is not just worth it with current technology for many types of software. For a train brake control computer? Certainly. For a game? Not really. 19:32:10 <elliott_> you could replace the entire universe with a snapshot of its state as of the time yous tart, and still have space left over 19:32:17 <ais523> elliott_: to describe a particle, you need to at least be able to describe all the data it stores 19:32:30 <elliott_> Vorpal: yes, so why aren't we trying to improve the situation rather than publishing new C standards? :) 19:32:37 <elliott_> ais523: no shit 19:32:40 <ais523> unless, you're not including the data carried by data-storing particles in your Universe measurements 19:32:56 <elliott_> ais523: none of them exist 19:32:56 <Vorpal> elliott_, because of "technological inertia"? 19:33:01 <Vorpal> not sure that is the right term 19:33:05 <elliott_> Vorpal: ah! so you're arguing it's a good thing? 19:33:10 <Vorpal> elliott_, no? 19:33:15 <ais523> elliott_: oh, you're only trying to store the past state of the Universe, not the current state 19:33:19 <Vorpal> elliott_, I'm not arguing that C is a good thing 19:33:21 <ais523> yes, that's arguably possible 19:33:29 <elliott_> Vorpal: then I'm not sure why you think you disagree with me 19:33:33 <ais523> (note that the second law of thermodynamics bars you from storing any /future/ state of the universe) 19:33:36 <Vorpal> elliott_, disagree about what? 19:33:40 <elliott_> ais523: well, we're already doing that 19:33:42 <elliott_> ais523: it's called the universe 19:33:44 <elliott_> re: current state 19:33:58 <elliott_> Vorpal: I don't know, you're the one who seems to be disagreeing 19:34:00 <ais523> elliott_: that's using compression, that's cheating 19:34:11 <ais523> and, no, it doesn't compress either 19:34:22 <ais523> if you think the entire universe is deterministic, then you don't believe in the second law of thermodynamics 19:34:23 <elliott_> ais523: the universe is a compressed form of the universe? seriously? 19:34:26 <Vorpal> elliott_, well, no one invented a good solution that isn't too costly yet. There is a lot of inertia in switching basic technologies like programming languages 19:34:28 <ais523> the two viewpoints contradict each other 19:34:31 <elliott_> ais523: I would say it's quite 1:1 19:34:41 <ais523> elliott_: current and future 19:34:42 <micahjohnston> the 2nd law has nothing to say about determinism 19:34:54 <ais523> micahjohnston: 2nd law says entropy always increases; entropy = information content 19:34:54 -!- micahjohnston has quit (Read error: Connection reset by peer). 19:34:57 <Vorpal> elliott_, it potentially means a larger cost for whoever is first and a larger risk too. 19:34:59 <elliott_> ais523: I was just saying that if you want to store the current state of the universe inside the universe, we're already doing that 19:35:04 <ais523> so it says that future universe contains more information than current universe 19:35:05 -!- incomprehensibly has joined. 19:35:06 <elliott_> because that's what the universe is 19:35:11 <incomprehensibly> ugh, stupid connection 19:35:12 <ais523> incomprehensibly: <ais523> so it says that future universe contains more information than current universe 19:35:21 <Vorpal> elliott_, in short term it is simply cheaper to continue using C/C++ for your new game 19:35:27 <elliott_> Vorpal: so? 19:35:30 <elliott_> Vorpal: I was talking about C11 19:35:32 <incomprehensibly> ais523: I'm not familiar with that implication 19:35:32 <elliott_> and its new threads 19:35:35 <ais523> now, if future universe is entirely determined by current universe, it must have /the same/ information content 19:35:35 <Vorpal> elliott_, so that is why we get new C standards 19:35:36 <incomprehensibly> ais523: could you explain it? 19:35:39 <elliott_> which are incredibly stupid 19:35:44 <Vorpal> elliott_, to support much needed features 19:35:51 <elliott_> because (a) existing threading libraries are "good enough" in the grand tradition of broken C code 19:35:58 <ais523> incomprehensibly: 2nd law says that the amount of information required to describe the state of the universe is always increasing 19:36:02 <Vorpal> elliott_, well yes. 19:36:04 <Vorpal> elliott_, blame ISO for that 19:36:05 <elliott_> (b) compiler and library writers have to devote energy to supporting them 19:36:10 <elliott_> which diverts energy from doing something even vaguely worthwhile 19:36:12 <incomprehensibly> ais523: that doesn't mean it can't be deterministic 19:36:15 <ais523> but if determinism the case, then the current universe, plus a timestamp, is enough to explain any future universe 19:36:17 <incomprehensibly> ais523: look at it this way 19:36:18 <ais523> at's a contradiction 19:36:18 <incomprehensibly> say if you have 19:36:20 <incomprehensibly> 100 particles in a line 19:36:22 <ais523> *that's 19:36:26 <incomprehensibly> that's a small amount of information 19:36:40 <incomprehensibly> if you say the coordinates of each particle in a line, then no matter how disordered they are it's the same information 19:36:44 <ais523> well, OK, you can define "small" that way 19:36:48 <incomprehensibly> so entropy is just how much you can *compress* the information 19:36:49 <Vorpal> ais523, the 2nd law is not so much a law as a model of the universe 19:36:57 * elliott_ thinks ais523 is wrong here too. 19:37:02 <Vorpal> ais523, a model might not be completely accurate 19:37:07 <incomprehensibly> while the computer simulating the universe could still contain the exact same amount of info, you can just compress that info less 19:37:11 <ais523> incomprehensibly: but I can compress that information by giving the current state plus a timestamp 19:37:16 <ais523> plus the laws of physics 19:37:17 <elliott_> Also mumble mumble Kolgomorov complexity (I have to mention it whenever entropy comes up). 19:37:32 <ais523> and that'll be the case no matter how far in the future we go 19:37:33 <incomprehensibly> entropy from information theory is enlightening in this context, I think 19:37:34 <Vorpal> ais523, look at Newton's gravitation. It is a model. It isn't accurate. General relativity comes much closer. That doesn't mean it is 100% accurate either 19:37:37 <elliott_> Vorpal: Also to my understanding the 2nd law is just a statistic law. 19:37:47 <incomprehensibly> yeah, the 2nd law is just probabilistic 19:37:48 <elliott_> So it can be violated, it's just like rain on your wedding day. 19:37:55 <ais523> elliott_: anyway, I don't actually believe in the 2nd law; but I don't believe in determinism either 19:37:57 <Vorpal> and Newton's gravitation is good enough as a model a lot of the time. 19:38:00 <incomprehensibly> it's tehcnically *possible* for a cup of water to freeze at room temprature 19:38:02 <Vorpal> elliott_, ah 19:38:02 <ais523> I just think the two views are incompatible with each other 19:38:19 <incomprehensibly> although it's so unlikely that it will pretty much definitely not happen in the lifetime of the universe 19:38:30 <elliott_> incomprehensibly: I advise you to stop engaging ais523 on matters of physics past this point 19:38:51 <Vorpal> incomprehensibly, indeed. The 2nd law is a good enough model for stuff like that 19:38:57 <ais523> elliott_: should I bring out my argument that it's always correct to disbelieve determinism even if the universe is in fact deterministic? 19:39:23 <ais523> basically, if the universe /is/ deterministic, then your beliefs as to determinism or not are already decided, and you can't do anything about it 19:39:33 <incomprehensibly> now that's a fallacy 19:39:34 <incomprehensibly> that's like saying 19:39:40 <ais523> if you /can/ do something abou them, then obviously believing in determinism would be incorrect 19:39:44 <elliott_> ais523: no, we can just skip to the part where you don't believe the universe actually follows any laws, and so refusing to engage you in any physics-related debate is not intellectually dishonest 19:39:46 <ais523> thus, you should believe the universe isn't determinstic 19:39:48 <incomprehensibly> if the universe is deterministic, then all your actions are determined, and the same things will happen no matter what 19:39:50 <elliott_> and is indeed the only valid choice 19:39:51 <incomprehensibly> so obviously you shouldn't do anythign 19:40:09 <elliott_> but yes, that's of course a fallacy. 19:40:21 <ais523> incomprehensibly: yep, that would also be a correct inference; it's along the lines of "from a false statement anything follows" 19:40:24 <incomprehensibly> but ther'es a measurable difference between universes where you do things and where you don't do things 19:40:31 <ais523> in fact, that's a good argument to promote the fact that you shouldn't believe in determinism 19:40:33 <incomprehensibly> ais523: I don't see how it's along the lines of that at all 19:40:39 <incomprehensibly> ais523: no, it's not a good argument 19:40:41 <ais523> because if you do, you reach silly conclusions 19:40:42 <incomprehensibly> you're mixing levels of a hierarchy 19:40:44 <elliott_> yay, now I can say I've told you so 19:40:47 <incomprehensibly> you're applying things in the wrong context 19:40:47 <elliott_> have fun! 19:40:51 <incomprehensibly> elliott_: hahaha 19:40:56 <elliott_> I'll come back in a few hours to tell you I told you so 19:41:01 <Vorpal> elliott_, it will be entertaining to watch though 19:41:04 <incomprehensibly> meh, I think I'll pass 19:41:10 <elliott_> Vorpal: you say that now 19:41:18 <Vorpal> elliott_, but? 19:41:27 <ais523> elliott_: I'm toying around with the theory that everyone but me is irrational to make them easier to model 19:41:38 <ais523> under the assumption that the Universe doesn't have infinite memory 19:41:48 <ais523> (I suspect I'm probably irrational too, although am less certain about that) 19:41:54 <elliott_> ais523: I can apply Occam's razor to show you it's vastly more likely you're just stupid 19:41:56 <Vorpal> ais523, why wouldn't you be irrational as well? 19:42:03 <elliott_> you decide whether you want to go down that rabbit hole or not 19:42:06 <Vorpal> ah 19:42:10 <incomprehensibly> elliott_: aha, the 2nd law can state that kolmogorov complexity tends to increase, while the information stored by a computer simulating the universe could stay constant 19:42:11 <ais523> Vorpal: that theory doesn't suggest things about my own rationality either way 19:42:14 <elliott_> it's very easy to simulate a stupid person in a world of really smart people 19:42:17 <incomprehensibly> elliott_: thanks for the term 19:42:22 <elliott_> you just make them confused as to why other people do things all the time 19:42:30 <elliott_> incomprehensibly: yw, kolgomorov complexity is one of the best things ever 19:42:40 <incomprehensibly> haha yes it is 19:42:47 <ais523> elliott_: OK, I'll accept incomprehensibly's statement of your argument 19:43:07 * ais523 fights an urge to rephrase that as "the incomprehensible statement of your argument" 19:43:10 <elliott_> I made no argument wrt thermodynamics, I very wisely stayed out of that. 19:43:21 <elliott_> Well, I did mumble. 19:43:24 <incomprehensibly> haha 19:43:46 <Vorpal> elliott_, too late did you realise that your mumbling would be your doom 19:44:07 <ais523> elliott_: anyway, this sort of thing is why I ended up depressed a while back 19:44:20 <ais523> also, ended up thinking about the matter enough that I realised it was possible to make testable statements about religion 19:44:28 <incomprehensibly> what sort of thing? 19:44:33 <incomprehensibly> existential lines of thinking? 19:44:41 <elliott_> ais523: so what you're saying is, it'd be better for /both/ of us if you didn't start about these things? :p 19:44:47 <ais523> haha, perhaps 19:44:49 <Vorpal> the way I see it, it is kind of interesting but meh, at some point I have to get on with my life rather than try to answer questions I cannot 19:45:04 <incomprehensibly> it's cool to think about 19:45:08 <ais523> I'll end up coming up with ways to escape the matrix of solidity, at this rate) 19:45:12 <incomprehensibly> but doesn't give you life lessons beyond take advantage of your time while you have it 19:45:12 <Vorpal> whether that be deterministically decided for me or not 19:45:13 <incomprehensibly> lol 19:45:21 <elliott_> nobody can escape the matrix of solidity 19:45:45 <ais523> elliott_: well, I basically thought of connecting everyone's brains to a high-bandwidth information transfer thing (like the Internet, but faster) 19:46:05 <ais523> the question is, then, if you connect all those together, is there more than one person any more? 19:46:32 <elliott_> ais523: congraulations, you've written about 1 percent of a percent of The Last Question 19:46:39 <elliott_> and, umm 19:46:41 <Vorpal> elliott_, is that a book? 19:46:43 <ais523> hmm, glad to know that other people are thinking vaguely along those lines 19:46:43 <elliott_> probably countless other sci-fi works ever 19:46:47 <Vorpal> well yes 19:46:48 <Deewiant> Vorpal: Short story 19:46:48 <elliott_> Vorpal: oh don't get started 19:47:00 <Vorpal> Deewiant, ah, might read it then 19:47:02 <elliott_> Vorpal: you /are/ a hermit, right? 19:47:21 <Vorpal> elliott_, if that is the same as "I live with my parents" 19:47:25 <Vorpal> :P 19:47:26 <incomprehensibly> hahaha elliott_ 19:47:30 <ais523> elliott_: nah, it's just that by the time Vorpal's finished reading a book (or even the first page), the title's gone out of scrollback 19:47:31 <incomprehensibly> yeah, the Last Question is fantastic 19:47:38 <Deewiant> Vorpal: Available e.g. at http://filer.case.edu/dts8/thelastq.htm 19:47:46 <Vorpal> oh Asimov. 19:47:47 <Vorpal> right 19:48:00 <Vorpal> ais523, :D 19:48:32 <Vorpal> Deewiant, thanks 19:49:33 <incomprehensibly> this is a great channel 19:49:49 <elliott_> ais523: anyway, it's fairly obvious that it's impossible to divide an arbitrary collection of sentient mush into people 19:50:09 <ais523> elliott_: good, I thought that'd be something you actually agreed with me on 19:50:09 <elliott_> I've heard it argued fairly convincingly that your personnness is essentially a real number determining how unlike other people you are 19:50:28 <elliott_> two clones would start off as obviously the same person but would become more peopley as time goes on 19:50:47 <Vorpal> incomprehensibly, as long are you aren't interested in esolangs, sure 19:51:00 <incomprehensibly> :P 19:51:18 <incomprehensibly> elliott_: interesting point of view 19:51:53 <elliott_> I'm rather disturbed by the idea that agreeing with other people makes you less of an individual, though :p 19:52:01 <elliott_> as you can derive from that 19:52:13 <ais523> elliott_: I'm not; I'm actually beginning to think that becoming less of an individual is the "correct" direction to go in 19:52:19 <incomprehensibly> well I think that's kind of a mushy interpretation 19:52:22 <ais523> in that it reduces the chance of your death 19:52:28 <incomprehensibly> because agreeing with other people doesn't mean your brain holds the same structures in your head 19:52:38 <elliott_> ais523: stop disagreeing with us, then 19:52:45 <incomprehensibly> haha 19:52:45 <ais523> haha 19:52:59 <elliott_> incomprehensibly: well, no, but making arguments based on hardware seems like a bad idea to me 19:53:21 <incomprehensibly> also it depends on a specific interepretation of consciousness 19:53:22 <elliott_> incomprehensibly: if we were ported to Algorithmic Agreement Nets(tm) (N.B. I just made this term up), then our personhoodnesses would change 19:53:25 <ais523> perhaps we should just fuse minds and debate this probably internally ;) 19:53:28 <elliott_> even if we acted and thought identically 19:53:30 <elliott_> which seems wrong 19:53:40 <incomprehensibly> that You™ is the specific abstract mathematical structure of your brain 19:53:48 <ais523> err s/probably/some appropriate word/ 19:53:54 <incomprehensibly> and thus the same consciousness exists only once even if it has two physical instantiations 19:54:05 <incomprehensibly> I have no idea if I agree with that because there is as yet insufficient data for a meaningful answer. 19:54:05 <elliott_> incomprehensibly: well, no, because it'll diverge immediately 19:54:11 <incomprehensibly> elliott_: of coures 19:54:17 <incomprehensibly> I mean, what if there are identical environments 19:54:19 <elliott_> unless they completely overlap, in which case it's indistinguishable from a universe in which you only have one brain 19:54:22 <ais523> elliott_: and if it didn't, both you and me would find that obviously only one conciousness 19:54:24 <incomprehensibly> or, just talking about the instant before it's interacted with the world around it 19:54:29 <elliott_> incomprehensibly: so, say there's a completely identical parallel universe 19:54:29 <incomprehensibly> etc. 19:54:34 <ais523> elliott_: what's your opinion on the theory that there's only one electron? 19:54:38 <elliott_> incomprehensibly: what's the point of saying it exists? it's equivalent to it not existing 19:54:41 <incomprehensibly> that's getting close to meaninglessness 19:54:43 <incomprehensibly> yeahj 19:54:49 <incomprehensibly> unless they exist within a framework 19:54:50 <elliott_> so there /is/ only one you, in that situation 19:54:56 <ais523> also, why do you think causality only appears to act in one direction? 19:54:59 <incomprehensibly> such as they're two physical copies of a simulation 19:55:04 <incomprehensibly> and you can alter one 19:55:09 <elliott_> ais523: re: causality, some people think it doesn't 19:55:16 <elliott_> http://www.fourmilab.ch/rpkp/ 19:55:20 * elliott_ doesn't buy it 19:55:35 <incomprehensibly> lol 19:55:42 <ais523> elliott_: I'm not certain it does, but I'm willing to acknowledge that it at least gives that impression 19:55:45 <elliott_> mostly because I'm terrible at the experiments 19:55:57 <elliott_> but apparently the results are /just/ statistically significant enough 19:56:07 <incomprehensibly> elliott_: I just mean, physically copy a brain so you have two identical ones, and talk about them in the instant before it's interacted with a different environment, or put them in two exactly identical rooms 19:56:12 <incomprehensibly> down to the particle 19:56:33 <elliott_> incomprehensibly: well, how does that differ from the two identical universes scenario? 19:56:40 <elliott_> incomprehensibly: it only differs once the particles start interacting 19:56:48 <elliott_> and thus the environments diverge 19:56:50 <ais523> incomprehensibly: are you aware of the fact that all known methods of reading the quantum state of something destroy the original? 19:57:00 <elliott_> ais523: no, there's one method that doesn't 19:57:02 <elliott_> ais523: thought experiment 19:57:05 <ais523> this strikes me as not being a coincidence 19:57:09 <ais523> elliott_: huh? 19:57:17 <incomprehensibly> elliott_: I'm just saying, for the time while they *don't* differ, are they different consciouesness? I don't think we can answer that meaningfully yet 19:57:20 <elliott_> ais523: incomprehensibly is proposing a thought experiment, so he can do whatever he wants 19:57:37 <ais523> elliott_: oh, I wasn't claiming this was the case in the thought experiment 19:57:40 <elliott_> incomprehensibly: I'm saying it's one consciousness, because the only way you can show it to differ from the identical-parallel-universe scenario is when they diverge by interacting 19:57:42 <elliott_> hmm 19:57:48 <elliott_> OK, what if you have a completely symmetrical room 19:57:49 <incomprehensibly> yeah, I get that 19:57:51 <ais523> I was just using it as evidence towards what I thought the answer would be 19:57:55 <incomprehensibly> it's a cool interpretation of consciousness 19:57:55 <elliott_> as in, down to the quantum level 19:58:05 <incomprehensibly> and neatly resolves the destroy-and-teleport moral quandary as "it's the same you 19:58:06 <elliott_> and put the same person on both sides of it 19:58:06 <incomprehensibly> " 19:58:08 <elliott_> facing each other 19:58:23 <incomprehensibly> they would keep doing the same thing 19:58:24 <elliott_> there's clear interaction there, but they also don't diverge, barring nondeterministic effects coming into play 19:58:30 <incomprehensibly> as long as everything is symmetrical down to the particle 19:58:33 <incomprehensibly> and if it's deterministic, yeah 19:58:44 <incomprehensibly> oh wait 19:58:45 <elliott_> hmm... I don't like the idea of escaping this by saying "QUANTUM EFFECTS HAVE TO MATTER" 19:58:48 <ais523> hmm, in that case, isn't it just one person in a non-Euclidean space? 19:58:50 <elliott_> because that's what crackpots do all the time 19:58:51 <incomprehensibly> what if they walk past each other 19:58:59 <incomprehensibly> and it turns into a swirly chaotic system 19:59:06 <elliott_> haha 19:59:10 <elliott_> ais523: yes, I think that seems reasonable 19:59:13 <ais523> elliott_: at my statement, or incomprehensibly's? 19:59:18 <elliott_> I can't think of an argument for them being different consciousnesses 19:59:26 <ais523> elliott_: I know that when I look into a mirror, I don't assume that what I see is a different person 19:59:38 <elliott_> ais523: I was agreeing with <ais523> hmm, in that case, isn't it just one person in a non-Euclidean space? 19:59:46 <elliott_> as in, maybe not literally 19:59:48 <ais523> right, agreed 19:59:56 <elliott_> but the structure of the argument seems correct 20:00:03 <ais523> but what I mean is, not only are there not two conciousnesses, there aren't even two people 20:00:04 <incomprehensibly> elliott_: you could say that it's grounded in the physical instantiation of it 20:00:05 <elliott_> this reminds me of a short story I read 20:00:07 <elliott_> by, I think Greg Egan 20:00:28 <incomprehensibly> we're essentially talking about how dollops of feelium are imparted 20:00:29 <elliott_> where a couple got their minds merged for an hour or whatever, and there's a mirror in the room 20:00:31 <incomprehensibly> but we don't know what feelium *is* 20:00:42 <elliott_> and they note that it could easily be an identical room 20:00:51 <elliott_> with a copy of themselves inside 20:00:52 <incomprehensibly> hm, I should read that 20:01:07 <ais523> elliott_: but left-right reversed? 20:01:15 <elliott_> ais523: prseumably 20:01:17 <incomprehensibly> elliott_: whether it behaves like a mirror depends on if you rotate, or actually flip 20:01:19 <elliott_> <ais523> but what I mean is, not only are there not two conciousnesses, there aren't even two people 20:01:21 <elliott_> I don't see the difference 20:01:25 <elliott_> a person is a consciousness 20:01:29 <incomprehensibly> if you rotate, they can walk past each other and touch each other in ways more interesting than a mirror 20:01:36 <ais523> elliott_: oh, I was taking person as conciousness + physical body 20:01:54 <elliott_> hmm, I'm going to drop "measure" here 20:02:01 <ais523> you wouldn't imagine things like skin as being part of the conciousness, but you would take them as being part of the person 20:02:04 <elliott_> since i distinctly recall it being used in the original argument of personhood-is-a-real thing I read 20:02:15 <ais523> in much the same way that a computer's case is part of the computer, but you can change it and still have the same computer 20:02:48 <incomprehensibly> although skin is more intimately connected to consciousness 20:02:52 <incomprehensibly> since it's filled with nerve endings 20:04:01 <ais523> incomprehensibly: oh, I was considering it distinct from the nerves just below it 20:04:05 <ais523> although they're probably mixed up in practice 20:05:01 <Vorpal> ais523, how many components of a computer can you change before it is a different computer? 20:05:05 <elliott_> grr, 28 over 4 20:05:10 <elliott_> Vorpal: ship of theseus 20:05:14 <Vorpal> elliott_, I know 20:05:26 <elliott_> I think you can solve that by making it continuous, too 20:05:28 <Vorpal> elliott_, I was just interested in how ais523 would answer that one 20:05:31 <Vorpal> hm 20:05:31 <elliott_> there's no "same X", just "Xness" 20:05:34 <ais523> I'm thinking about it at the moment 20:05:37 <Vorpal> elliott_, well yes 20:05:41 <Vorpal> elliott_, that works 20:05:42 <elliott_> what we're learning today: booleans suck, let's use reals instead 20:05:48 <Vorpal> heh 20:05:55 <ais523> with computers, you really /can/ set up the symmetrical universe situation 20:06:07 <ais523> get two computers, make them always receive the same inputs at the same times, have them initially the same 20:06:27 <ais523> do you then have one computer? I think you do, until some source of randomness gets in (maybe due to component failure) 20:06:48 <elliott_> yes, assuming perfect conditions 20:06:50 <ais523> so I think you can probably replace all the components and still have the same computer, as long as the replacements are compatible 20:07:06 <Vorpal> ais523, I remember reading about critical systems running like that 20:07:09 <elliott_> ais523: as in, do the same thing? 20:07:17 <Vorpal> and circuits comparing results 20:07:23 <elliott_> ais523: assuming you're ignoring time, that considers all computers of the same computational class and IO capabilities to be the same 20:07:25 <ais523> elliott_: as in, can't be distinguished from the originals by the computer itself 20:07:25 <elliott_> which is dubious 20:07:35 <ais523> elliott_: no, they'd also need to be storing the same data 20:07:42 <ais523> and have the same inputs 20:08:46 <incomprehensibly> relevant blog post:http://gmfbrown.blogspot.com/2010/03/rational-abstraction.html 20:08:48 <incomprehensibly> although it's a bit long 20:10:23 <Vorpal> I might read that when I get home then 20:12:34 <Vorpal> bbl 20:18:05 <elliott_> yay, 18 over 4 20:21:22 <ais523> now I'm trying to figure out what the X over Y elliott's been posting every now and then all refer to 20:21:54 <elliott_> I'm pretty sure I've actually told you 20:22:08 <elliott_> but looking at timestamps might help you 20:22:09 <ais523> perhaps, but if so I can't remember and wasn't paying attention 20:23:42 <ais523> I think your explanation's gone out of scrollback by now 20:24:03 <elliott_> it was days ago 20:24:07 <elliott_> but like I said, timestamps will help 20:24:45 <ais523> they're mostly a little after a multiple of 15 minutes, but I don't see a pattern otherwise 20:24:57 <ais523> and if that's meant to be the pattern, it doesn't explain what the numbers mean 20:25:02 <ais523> they do seem to be decreasing over time, though 20:25:04 <elliott_> the timestamp + one of the numbers, to be exact 20:25:15 <ais523> hmm, are seconds involved? 20:25:27 <ais523> seeing seconds in timestamps is a pain in this client 20:26:10 <zzo38> Then fix it 20:31:10 <elliott_> ais523: nope 20:31:11 <elliott_> just hours 20:31:18 <elliott_> well, and minutes, but you can ignore those 20:31:44 <elliott_> wow, my backlog must be really short 20:31:48 <elliott_> at least, /lastlog only shows two "over"s 20:32:14 -!- Ngevd has quit (Ping timeout: 240 seconds). 20:33:38 <ais523> `pastlog \d+ over \d+ 20:33:55 <ais523> hmm, I don't really need the +s there, come to think of it 20:34:07 <ais523> the regex with them is equivalent to the regex without them 20:34:10 <HackEgo> No output. 20:34:33 <elliott_> `pastlog [[:digit:]] over [[:digit:]] 20:34:42 <HackEgo> 2009-03-14.txt:22:53:56: <Deewiant> I have a ZX Spectrum+ on which backspace is 0 over 90% of the time 20:34:59 <ais523> elliott_: heh, I'm amused that it doesn't know \d, but does know (?-i:) 20:35:12 <ais523> the second is rather more obscure 20:35:16 <elliott_> ais523: it's grep's "perl regexp" mode 20:35:18 <elliott_> surprised it can't do \d 20:35:37 <ais523> `pastlog [[:digit:]] over [[:digit:]] 20:35:38 <elliott_> ais523: OK, here's an actual hint: the second number is the remaining hours in the day 20:35:45 <HackEgo> 2011-12-15.txt:20:01:15: <elliott> 30 over 4, anyway :( 20:35:58 <ais523> elliott_: that would explain why it had been gradually decreasing 20:36:04 <elliott_> as previously established, it's meant to reach 0 20:36:07 <elliott_> (the fraction) 20:36:16 <ais523> the first number must be a number that you're expecting to reach 0 before the end of the day 20:36:20 <ais523> or you wouldn't say "over" 20:36:35 <elliott_> correct 20:36:48 <ais523> number of TODOs remaining in your fix-all-TODOs project? 20:36:59 <ais523> in a particular file that you decided you'd work on that day? 20:37:05 <elliott_> haha, no; that one stalled when I saw the first indexing of an array by a negative number 20:37:14 <elliott_> (blame fizzie) 20:37:23 <elliott_> (OK, of a pointer) 20:37:58 <ais523> oh, this was in mcmap? 20:38:10 <ais523> fix-all-TODOs sounds like a bad idea for a project where you aren't the main developer 20:38:21 <ais523> as in, obviously have more control over it than anyone else does by quite a large margin 20:38:35 <elliott_> ais523: well, git blame blames more of mcmap on me than fizzie 20:38:50 <ais523> that's not quite a large margin 20:38:55 <elliott_> I presume other people leave TODOs around so that /someone/ fixes them eventually 20:38:55 <ais523> also, lines of code is an awful metric 20:39:00 <elliott_> that's what I do, at least 20:39:05 <elliott_> ais523: indeed, I only calculated it for fun 20:39:44 <elliott_> ais523: the first two pages of git commit history for mcmap only have one commit by fizzie and the rest by me, for a more scientific(tm) measure 20:39:53 <elliott_> fizzie has probably still done more work than me on it, though 20:39:55 -!- Ngevd has joined. 20:40:05 <ais523> hmm, I think that I saw someone say (probably on proggit in response to that Carmack article) that codebases tended to have a higher bug proportion the larger they were 20:40:13 <ais523> as in, bug counts grow more quickly than codebases do 20:40:16 <elliott_> that was quoted on proggit, yes 20:40:42 <ais523> this implies that programs have a maximum size 20:40:47 <ais523> any larger, and they'd have more bugs than code 20:40:54 <ais523> it's probably quite large, though 20:41:04 <elliott_> ais523: this is reminding me of that quote 20:41:22 <elliott_> programs are either so simple they obviously have no bugs, or so complicated that they have no obvious bugs 20:41:34 <ais523> right 20:41:39 <ais523> more to the point, it's rare that any program has an obvious bug 20:41:42 <ais523> because they tend to be fixed 20:41:57 <elliott_> ais523: anyway, why would fix-all-TODOs be bad on a project you're a secondary developer on? 20:42:17 <elliott_> it's the perfect project: mostly non-intrusive (things just get better), fixes a lot of little nits, usually doesn't require great expertise 20:42:21 <ais523> because TODOs are typically there due to a lack of easy options 20:42:28 <elliott_> and usually doesn't make any major user-facing design decisions 20:42:32 <elliott_> ais523: nah 20:42:37 <ais523> which means that you may have to rewrite chunks of the code to deal with them 20:42:44 <ais523> elliott_: hmm, so what do you use TODOs for, then? 20:42:45 <elliott_> most TODOs in mcmap are "this is a hack, but I'm too busy working on everything else this code is doing to make it not a hack" 20:42:52 <ais523> well, exactly 20:42:58 <elliott_> or "this is technically undefined behaviour, but works, so I'm too lazy to fix it" 20:43:03 <ais523> and hacks often need rewrites significantly larger than themselves to remove 20:43:06 <elliott_> or "this only handles a subset of the cases, but it's enough to work right now" 20:43:21 <elliott_> ais523: not really; the negative pointer indexing was because it had to futz some header bytes before recursing 20:43:28 <elliott_> and had already incremented it by the time it got there, or something 20:43:38 <elliott_> that's a blatant hack, but an easy one to fix 20:43:50 <elliott_> the problem is that it's not rewarding to fix simple issues like that 20:43:53 <elliott_> so they never get fixed 20:44:28 <elliott_> ais523: here's the remaining TODOs and FIXMEs in mcmap, FWIW: http://sprunge.us/dDRY 20:44:32 <elliott_> just the lines with "TODO" or "FIXME" in them 20:44:34 <elliott_> (it's not long) 20:44:44 -!- iconmaster_ has joined. 20:44:52 <ais523> "TODO FIXME:"? 20:45:03 <elliott_> ais523: that's for really bad stuff :) 20:45:13 <ais523> hmm, I wonder what projects make a distinction between TODO, FIXME, and XXX? 20:45:39 <elliott_> /* fixed-size bitsets */ 20:45:39 <elliott_> maybe byte-arrays would be better, but... 20:45:39 <elliott_> this is at least least appropriately retro. */ 20:45:39 <elliott_> #define BITSET(name,len) uint8_t name[(len)>>3] 20:45:39 <elliott_> #define BITSET_SET(set,idx) ((set)[(idx)>>3] |= 1 << ((idx) & 7)) 20:45:41 <elliott_> #define BITSET_CLEAR(set,idx) ((set)[(idx)>>3] &= ~(1 << ((idx) & 7))) 20:45:43 <elliott_> #define BITSET_TEST(set,idx) ((set)[(idx)>>3] & 1 << ((idx) & 7)) 20:45:45 <elliott_> erm 20:45:47 <elliott_> dammit xchat 20:45:49 <elliott_> /* fixed-size bitsets */ 20:45:51 <elliott_> /* FIXME: 20:45:53 <elliott_> maybe byte-arrays would be better, but... 20:45:55 <elliott_> this is at least least appropriately retro. */ 20:45:57 <elliott_> #define BITSET(name,len) uint8_t name[(len)>>3] 20:45:59 <elliott_> #define BITSET_SET(set,idx) ((set)[(idx)>>3] |= 1 << ((idx) & 7)) 20:46:01 <elliott_> #define BITSET_CLEAR(set,idx) ((set)[(idx)>>3] &= ~(1 << ((idx) & 7))) 20:46:03 <elliott_> #define BITSET_TEST(set,idx) ((set)[(idx)>>3] & 1 << ((idx) & 7)) 20:46:05 <elliott_> at least fizzie has the taste to say "FIXME" whenever he does something awful 20:46:10 <Deewiant> For the three of elliott's quoted examples I'd use TODO, XXX, and FIXME respectively 20:46:10 <elliott_> also, it's at least least-appropriately retro! 20:46:31 <elliott_> "XXX" is too ugly to use 20:46:42 <Deewiant> It's supposed to be ugly :-P 20:47:15 <elliott_> hmm, bug trackers should create a bug for each FIXME in the code automatically 20:47:30 <ais523> elliott_: that BITSET code doesn't look hackish to me; in fact, it looks both sensible and extensible 20:47:33 <elliott_> and close them when they get removed 20:47:50 <ais523> elliott_: that BITSET code doesn't look hackish to me; in fact, it looks both sensible and extensible 20:48:04 <elliott_> ais523: it's non-sensible because (a) three of those should be macros, and (b) an array of booleans would be both faster and clearer 20:48:07 <elliott_> erm 20:48:09 <elliott_> *should be functions 20:48:22 <ais523> array of booleans faster? are you sure? 20:48:33 <ais523> it might be in some cases, but not in others, due to how well it fits in the cache 20:48:41 <elliott_> i believe they're usually small 20:48:48 <ais523> worse, it's plausible for an array of booleans to be faster but slow the rest of the code down by more 20:48:54 <elliott_> brb 20:50:30 -!- iconmaster_ has quit (Quit: Pardon me, but I have to die in NetHack again.). 20:54:41 <Gregor> <ais523> hmm, I wonder what projects make a distinction between TODO, FIXME, and XXX? // I do. TODO I use for things I don't intend to do, FIXME I use for things I don't intend to fix, and XXX I use to demarcate porn. 20:55:10 <Vorpal> home 20:55:26 -!- ais523 has quit (Remote host closed the connection). 20:58:06 -!- Ngevd has quit (Read error: Connection reset by peer). 21:02:40 -!- Ngevd has joined. 21:07:27 <DeadlyFugu> Does something which says '99 bottles 98 bottles 97 bottles' count as cheating when trying to make the bottles of beer song-thing? :D 21:07:48 <DeadlyFugu> Because writing out ASCII codes in unary takes a long time >_> 21:08:13 <Slereah_> Totally cheating 21:08:24 <Slereah_> Also cheating : Using the code to grab it from the internet 21:08:49 <DeadlyFugu> Wait, what? 21:08:54 <DeadlyFugu> I can't use an ASCII lookup table? 21:08:57 <DeadlyFugu> D: 21:09:12 <DeadlyFugu> Oh, you mean download an existing file with it? 21:09:39 <DeadlyFugu> It'll be easy to make mine say the whole thing, just very time consuming. 21:18:44 <Slereah_> what language are you using? 21:21:31 <DeadlyFugu> My own (Mineso) :D 21:21:49 -!- Ngevd has quit (Read error: Connection reset by peer). 21:25:09 <Slereah_> Well, it doesn't seem that hard to write stuff in. 21:25:23 <Slereah_> Although you might need a program to write it for you 21:25:55 <Slereah_> Plus if you can convert BF to it, you can just translate 99 bottles 21:26:13 -!- Ngevd has joined. 21:27:14 <Sgeo> "SECURITY UPDATE: Arbitrary code execution via crafted Type 1 font" 21:29:06 -!- nooga has joined. 21:34:39 <kallisti> Ngevd: hi 21:35:44 <Vorpal> Sgeo: in what software? 21:36:03 <Sgeo> Don't remember 21:36:52 -!- Ngevd has quit (Read error: Connection reset by peer). 21:44:03 -!- Ngevd has joined. 21:52:48 -!- Gregor has quit (Read error: Operation timed out). 21:54:00 -!- Vorpal has quit (Ping timeout: 268 seconds). 21:58:43 -!- Gregor has joined. 21:59:19 -!- HackEgo has quit (Ping timeout: 252 seconds). 21:59:20 -!- EgoBot has quit (Ping timeout: 252 seconds). 21:59:51 -!- EgoBot has joined. 22:00:24 -!- HackEgo has joined. 22:00:42 -!- Vorpal has joined. 22:03:01 -!- zzo38 has quit (Remote host closed the connection). 22:15:54 <Ngevd> Ooh, hello! 22:16:19 <elliott_> back 22:19:20 -!- Slereah_ has quit (Ping timeout: 244 seconds). 22:20:22 -!- Slereah_ has joined. 22:23:08 <Vorpal> night 22:25:35 <Sgeo> kallisti, elliott_ update 22:25:45 <Ngevd> Ngevd, update 22:26:25 <Ngevd> @ping 22:26:25 <lambdabot> pong 22:26:37 <Ngevd> I get paranoid about my connection 22:26:56 <fizzie> What new features in the updated elliott? 22:27:11 <Ngevd> Underscores 22:27:17 <fizzie> I see. Quite retro. 22:27:49 <fizzie> I was hoping they would've patched away the "nag about speech recognition" issue. 22:28:20 <Ngevd> Is the entire internet down for anyone else? 22:28:30 <Ngevd> @ping 22:28:31 <lambdabot> pong 22:28:44 <Ngevd> Well, if this message gets through, goodnight 22:28:47 <Sgeo> Hi 22:28:47 <fizzie> Is downforeveryoneorjustme.com down? 22:28:48 <Sgeo> Yes, it did 22:29:05 <Sgeo> Unless you can't see what others say 22:29:14 <Ngevd> I AM ALIVE 22:29:18 <Sgeo> Except Ngevd saw my update, s 22:29:19 <Sgeo> o 22:29:57 <fizzie> It could have just been a coincidentally timed update-to-self notice. 22:30:15 <fizzie> Yay, downforeveryoneorjustme.com special-cases downforeveryoneorjustme.com. 22:31:00 <Sgeo> http://www.isup.me/downforeveryoneorjustme.com 22:31:18 <fizzie> That's either buggy or sneaky. 22:31:39 <fizzie> It works the other way too. 22:31:53 <Sgeo> sneaky? 22:32:08 <fizzie> To say that the competitor is always down. 22:32:10 <Sgeo> I doubt it's deliberate, they are owned by the same entity I think 22:32:25 <fizzie> Aw. I was wondering, they looked so similar. 22:33:18 <elliott_> <fizzie> I was hoping they would've patched away the "nag about speech recognition" issue. 22:33:20 <elliott_> WONTFIX, NOTABUG 22:33:28 <fizzie> WORKSFORME. 22:33:48 <elliott_> That's my line! 22:33:52 <fizzie> UNLIKESPEECHRECOGNITIONHAHA 22:33:57 <Ngevd> I'd like to submit an elliott_ bug report 22:33:58 <Sgeo> Probably a bad idea to link to a competitor as a "short URL" 22:34:08 <Ngevd> Where is the appropriate place to do so? 22:34:13 <elliott_> Ngevd: /dev/null 22:34:38 <Ngevd> elliott_, but I'm using Windows so I can play Terraria! 22:34:50 <elliott_> Interestingly isup.me thinks that dfeojm is down, but dfeojm is up. 22:34:59 -!- monqy has joined. 22:35:07 <Ngevd> We've just been talking about that for the past five minutes 22:35:28 <fizzie> isup.me properly lists doj.me as up, and vice-versa. 22:35:53 -!- Ngevd has quit (Quit: food then sleep). 22:35:59 <elliott_> Doge me. 22:36:02 <elliott_> *Dodge 22:36:22 <fizzie> Department of Justice me. No, wait, that sounds like an euphemism for something dirty. 22:36:48 <elliott_> fizzie: That's what happens when you say "Dodge me" into one of your speech recognition systems, right? 22:36:58 <fizzie> PROBABLY. 22:37:42 <elliott_> fizzie: Dear aunt, let's set so double the killer delete select all OOPS SORRY MY FINNISH SPEECH-RECONGITION SOFTWARE BROKE 22:38:13 <fizzie> When I told my old iBook to "switch to Firefox", it said "opening iPhoto". 22:38:25 <fizzie> Every time. 22:38:40 <elliott_> That's when you decided you had better do something to improve these systems. 22:38:44 <elliott_> That's how everyone gets sucked in. 22:39:28 <Sgeo> elliott_, what do people mean when they say that Android is closed? 22:39:32 <fizzie> The first application of the Baum-Welch algorithm is always free. 22:40:11 <elliott_> Sgeo: A lot of the default Google applications are. 22:40:17 <elliott_> Also the phones generally aren't tweakable-by-default. 22:40:32 <elliott_> fizzie: :D 22:41:05 <fizzie> Then they start to charge you. "Discriminative training? Hope your credit card's not maxed out." 22:41:57 <elliott_> fizzie: Finally ridicule therapy starts getting some concrete results. 22:42:02 <fizzie> "You'd better pay what you owe or we'll normalize your vocal tract length the hard way, if you catch our drift." 22:42:46 <elliott_> Help, fizzie is counter-trolling me. 22:43:04 <fizzie> Don't worry, I think that's about all I had. 22:44:06 * elliott_ checks on Santa. 22:44:10 <elliott_> Slovakia! 22:45:05 <elliott_> "Is Santa Real? Based on historical data and more than 50 years of NORAD tracking information, we believe that Santa Claus is alive and well in the hearts of children throughout the world." 22:45:07 <elliott_> fizzie: Look at that cop-out. 22:45:17 <elliott_> TYPICAL US GOVT. 22:45:22 <fizzie> I'm looking. 22:45:35 <fizzie> Also already in Neuschwanstein. 22:45:57 <elliott_> http://www.noradsanta.org/images/picture/virginia_en.png I expected Virginia to have really good handwriting for some reason. 22:46:09 <elliott_> I think because of the "If you see it in the Sun, it's so." bit. 22:46:15 <elliott_> Er, wait. 22:46:20 <elliott_> It occurs to me that that probably isn't the original letter. 22:46:46 <fizzie> What does that bit even mean? 22:47:02 <elliott_> fizzie: It was sent to The New York Sun. 22:47:07 <fizzie> Ohhhhh! 22:47:29 <fizzie> I was thinking it was some sort of "now she'll stare at the Sun and go blind", but it sounded a bit mean. I mean, it's her father and all. 22:47:51 <elliott_> :D 22:48:02 <elliott_> TELL ME O GREAT SUN GOD, IS SANTA CLAUS REALAAAAAAAARGH 22:49:09 <elliott_> "The story of Virginia's inquiry and the The Sun's response was adapted in 1932 into an NBC produced cantata (the only known editorial set to classical music)" 22:49:36 <kallisti> !perl $_='hi \$mr ${fuck face}'; print /[^\](?:[^\]{2})*$(\w+|{.*?})/; 22:49:39 <EgoBot> Unmatched [ in regex; marked by <-- HERE in m/[ <-- HERE ^\](?:[^\]{2})*$(\w+|{.*?})/ at /tmp/input.28573 line 1. 22:49:54 <kallisti> !perl $_='hi \$mr ${fuck face}'; print /[^\\](?:[^\\]{2})*$(\w+|{.*?})/; 22:50:07 <itidus21> good handwriting requires a good pen 22:50:17 <kallisti> itidus21: also a good hand. 22:50:25 <kallisti> and good writing 22:50:29 <kallisti> but yes a good pen is important 22:50:34 <fizzie> And good good. 22:50:43 <kallisti> yes that's always meta-essential 22:50:44 <itidus21> good pen enables those fancy variable width strokes 22:51:27 <kallisti> hmmm I think I need negative lookahead or something 22:51:31 <elliott_> "NORAD tracks Santa, but only Santa knows his route, which means we cannot predict where and when he will arrive at your house. We do, however, know from history that it appears he arrives only when children are asleep! In most countries, it seems Santa arrives between 9:00 p.m. and midnight on December 24th. If children are still awake when Santa arrives, he moves on to other houses. He returns later … but only when the children are asleep." 22:51:41 <elliott_> Thank god NORAD put the minds of insomniac children at ease. 22:51:51 <kallisti> !perl $_='hi \$mr ${fuck face}'; print /(?:[^\\]{2})*$(\w+|{.*?})/; 22:51:53 <elliott_> (You might also call them: teenagers.) 22:51:55 <itidus21> lol 22:51:57 <kallisti> hmmm 22:52:12 <itidus21> the world is good at lying 22:52:15 <elliott_> "Does Santa visit everyone (i.e. Afghanistan, Israel, non-Christian countries)? 22:52:15 <elliott_> Indeed! Santa visits all homes where children who believe in him live." 22:52:20 <elliott_> But not those GODLESS countries. 22:52:39 <elliott_> "the only logical conclusion is that Santa somehow functions within his own time-space continuum." Ah, yes. 22:52:46 <itidus21> i see a problem there 22:52:58 <kallisti> hmmmm 22:53:02 <monqy> hmmmmmmmmmmmmmmmm 22:53:07 <kallisti> this approach isn't going to work 22:53:10 <kallisti> !perl $_='hi \$mr ${fuck face}'; print /(?:[\\]{2})*$(\w+|{.*?})/; 22:53:18 <elliott_> Ooh, they have sleigh technical data. 22:53:23 <itidus21> using santa to goad people into one religion or anoter 22:53:31 <elliott_> "Note: Length, width and height are without reindeer" 22:53:31 <monqy> santaism 22:53:38 <fizzie> elliott_: Climbing speed: One "T" (Twinkle of an eye). 22:53:47 <fizzie> Very scientific. 22:54:03 <kallisti> hmmm python regex needs a \K assertion 22:54:17 <elliott_> fizzie: It's not just science theory, it's science fact. 22:55:13 <kallisti> !perl $_='hi \$mr ${fuck face}'; print /(?:^|[^\\])(?:[\\]{2})*$(\w+|{.*?})/; 22:55:19 <kallisti> WHHYYY 22:55:40 <elliott_> Haha, the NORAD Santa thing started because of a misprinted phone number. 22:55:41 <elliott_> The bestest. 22:56:21 <kallisti> !perl $_='hi \$mr ${fuck face}'; print /(?:^|[^\\])(?:[\\]{2})*\$(\w+|\{.+?\})/; 22:56:21 <EgoBot> ​{fuck face} 22:56:23 <itidus21> so santa becomes a mathematical problem? 22:56:25 <kallisti> {fuck face} 22:56:46 <monqy> suddenly santa becomes every problem 22:56:51 <elliott_> "The program began on December 24, 1955 when a Sears department store placed an advertisement in a Colorado Springs newspaper which told children that they could telephone Santa Claus and included a number for them to call. However, the telephone number printed was incorrect and calls instead came through to Colorado Springs' Continental Air Defense Command (CONAD) Center." 22:56:53 <kallisti> !perl $_='hi $a $b $c ${c d}'; print /(?:^|[^\\])(?:[\\]{2})*\$(\w+|\{.+?\})/; 22:56:53 <EgoBot> a 22:56:59 <kallisti> !perl $_='hi $a $b $c ${c d}'; print /(?:^|[^\\])(?:[\\]{2})*\$(\w+|\{.+?\})/g; 22:57:00 <EgoBot> abc{c d} 22:57:03 <kallisti> yesss 22:57:07 <kallisti> !perl $_='hi \\$a $b $c ${c d}'; print /(?:^|[^\\])(?:[\\]{2})*\$(\w+|\{.+?\})/g; 22:57:07 <EgoBot> bc{c d} 22:57:11 <kallisti> noooo 22:57:17 <itidus21> i have this idea though 22:57:39 <itidus21> a kind of internet santa.. who can deliver things to your computer over the internet 22:57:53 <kallisti> itidus21: you should name it amazon.com 22:58:01 <elliott_> Oh no, Satan is giving presents to Vorpal now. 22:58:07 <itidus21> but it's a free service 22:58:14 <itidus21> well not even a service 22:58:15 <kallisti> no such thing. 22:58:17 <elliott_> fizzie: I'm sure you're next. 22:59:02 <itidus21> basically.. nowadays santa would use the internet combined with a 3d printer 22:59:04 <kallisti> !perl $_='hi \\\\$a $b $c ${c d}'; print /(?:^|[^\\])(?:[\\]{2})*\$(\w+|\{.+?\})/g; 22:59:04 <EgoBot> abc{c d} 22:59:07 <kallisti> hmmm okay 22:59:12 <kallisti> !perl print '//' 22:59:13 <EgoBot> ​// 22:59:13 <itidus21> hehehhe 22:59:15 <kallisti> !perl print '\\' 22:59:15 <EgoBot> ​\ 22:59:18 <kallisti> weird 22:59:24 <kallisti> ' is supposed to be all non-escapey. 22:59:29 <fizzie> elliott_: Do the gift-box symbols denote already handled locations? 22:59:31 <itidus21> you hook up your 3d printer under the xmas tree.. keep it connected to the internet all night 22:59:45 <elliott_> fizzie: Oh. Quite possibly. 22:59:47 <itidus21> and santa uploads your presents 23:00:00 <elliott_> fizzie: He's in Svalbard now. 23:00:07 <elliott_> fizzie: Yes, they do seem to indicate that. 23:00:17 <elliott_> fizzie: But Norway is next, so he might return to Finland. 23:00:20 <elliott_> There was only one box there. 23:00:28 <itidus21> svalbard has such a cool name 23:00:31 <elliott_> Wow, he just jumped to Norway. 23:00:35 <elliott_> The fastest. 23:00:47 <elliott_> fizzie: Oh, he's visited "Hell" sinky. 23:00:56 <elliott_> fizzie: What is that building it shows? 23:01:04 * kallisti is master of regex lawl 23:01:39 <fizzie> elliott_: Helsinki Cathedral is I think the official English name. 23:01:44 <kallisti> elliott_: did you see my totally amazingly beautiful cat program? better than your type-level pointer reify thing. 23:01:57 <fizzie> It's a bit of an over-impressive name. 23:02:35 <elliott_> kallisti: Link. 23:02:50 <elliott_> fizzie: It's a bit ugly. 23:02:54 <elliott_> No offens. 23:02:55 <elliott_> e. 23:03:14 <kallisti> elliott: main = getArgs >>= mapM (readFile >=> putStr) >>= (null >>> (`when` (getContents >>= putStr))) 23:03:38 <kallisti> it's not posixy because it doesn't parse options. 23:03:39 <elliott_> kallisti: You realise (>>>) = flip (.)? 23:03:42 <kallisti> yes. 23:03:47 <fizzie> kallisti: "q/STRING/, 'STRING': A single-quoted, literal string. A backslash represents a backslash unless followed by the delimiter or another backslash, in which case the delimiter or backslash is interpolated." 23:03:50 <kallisti> I wrote it that way because monqy likes it. 23:04:01 <elliott_> monqy's bad if he likes it. 23:04:05 <kallisti> fizzie: yes I suppose backslashes are special still. 23:04:16 <kallisti> elliott_: he said he liked the functions to read in one direction. 23:04:22 <elliott_> kallisti: Anyway, you need to support "-". 23:04:24 <fizzie> It doesn't do any other escapes than the delimiter and backslash itself, though. 23:04:27 <monqy> elliott_: i odnt like how >>> looks but i like the direction 23:04:37 <elliott_> monqy: The direction is only good for ugly stuff. :-( 23:04:43 <monqy> :( 23:04:54 * kallisti likes the direction because he can read it left to right without backtracking. 23:05:31 <kallisti> you're just used to suddenly reading backwards on compositiony things. composition mind virus. 23:05:36 <itidus21> "The backslash (\) is a typographical mark (glyph) used mainly in computing. Sometimes called a reverse solidus or a slosh, it is the mirror image of the common slash." 23:05:49 <elliott_> kallisti: I just think compositions shouldn't be so long that it's a big deal. 23:06:04 <elliott_> It's not like mathematicians have problems with composition being "backwards". 23:06:12 <elliott_> It's only backwards if application is: f(g(x)) = (f.g)(x) 23:06:12 <fizzie> The "slosh". 23:06:38 <elliott_> kallisti: Most importantly, calling it "backwards" is misleading, as it suggests a chronological progression that is just not there with lazy evaluation. 23:06:39 <fizzie> "Yeah, slosh-n denotes a newline." 23:06:46 <elliott_> (1:) . tail -- the tail doesn't happen "before" the (1:) here 23:06:53 <itidus21> not very helpful of wiki 23:07:15 <elliott_> You can't in general say the dataflow goes one way or the other; with lazy evaluation, it goes back and forth based on demand. 23:08:22 <Sgeo> Well, when imagining it, it's easier to imagine the dataflow going in a direction, regardless of which way it actually goes 23:08:48 <Sgeo> I mean, does lazy evaluation really need to be kept in mind? 23:08:54 <elliott_> Sgeo: No, it's really not, because you'll make incorrect conclusions. 23:08:56 <elliott_> Yes, it does. 23:09:07 <elliott_> Internalising how Haskell's evaluation works is the only way to write good code, efficient code, code that works. 23:09:13 <elliott_> And it's the only way to read it, too 23:09:38 <Deewiant> The tail does happen "before" the (1:), just not "completely" in some sense. :-P 23:09:40 <elliott_> The "chronological" strict mental model blows up even on very simple pipelines. 23:09:50 <elliott_> Deewiant: ((1:) . tail) undefined 23:09:54 <elliott_> == 1 : _|_ 23:09:58 <elliott_> The (1:) happened first. 23:09:59 -!- derdon has joined. 23:10:10 <elliott_> You can frame it the other way and that's kind of my point: "first" has no real meaning. 23:10:18 <Deewiant> Fair enough. 23:10:26 <elliott_> Non-strict evaluation is much much more *timeless* than strict evaluation, which is sort of the whole point I'm trying to make. 23:10:58 <elliott_> (And of course that's great for modularity, reasoning, etc.; it just presents a learning curve to those unfamiliar with it.) 23:11:03 <fizzie> elliott_: Can't be offended because that's so true. It's right next (well, very close) to the maybe-less-ugly-at-least-if-you-like-Russian-style (Orthodox) Uspenski Cathedral, http://www.sacred-destinations.com/finland/images/helsinki/uspenski-orthodox/uspenski-orthodox-cathedral-cc-ja-macd.jpg -- which at least has the golden onions going on. 23:12:09 <elliott_> fizzie: I thought you guys were, like, unrepentantly modern. 23:12:11 <elliott_> Eurotech. 23:12:21 <fizzie> elliott_: On the other hand, Helsinki's possibly most famous chruch looks like this: http://en.wikipedia.org/wiki/File:Temppeliaukio_Church_1.jpg 23:12:28 -!- Sgeo has quit (Read error: Connection reset by peer). 23:12:33 <elliott_> Nice. 23:12:42 -!- Sgeo has joined. 23:12:42 <kallisti> elliott_: there's a chronological progression but it's a sort of dependency tree I think. 23:12:44 <fizzie> http://en.wikipedia.org/wiki/Temppeliaukio_Church <- it looks slightly better on the inside. 23:12:46 <elliott_> http://upload.wikimedia.org/wikipedia/commons/5/59/Temppeliaukio_Church.jpg ;; Oh, this is nice. 23:12:49 <elliott_> kallisti: It's a graph. 23:12:52 <kallisti> elliott_: yes. 23:12:57 <elliott_> kallisti: Which means you can't "order" it. 23:13:21 <fizzie> Also haven't been there ever; the typical "locals don't go to tourist attractions" thing. 23:13:35 <elliott_> Anyway, point is, (>>>) is just as backwards as (.) is, and at least (.) mirrors application, which is important. 23:14:07 <itidus21> "a backslash on the keyboard of the Teletype Wheatstone Perforator, circa 1937-1945" 23:14:09 <monqy> im often frustrated with application's direction too :( 23:14:37 <monqy> also reading isn't as bad as writing 23:14:44 <elliott_> monqy: Well, if you read left-to-right, then (f x) is basically unambiguously the correct choice; f doesn't even necessarily even /look/ at x. 23:14:46 <kallisti> elliott_: you can't order it but if you start at a root vertex you can do a step-by-step transformation that is roughly meaningful as an "evaluation order" it's just difficult to intuitively reason about that. 23:14:57 <elliott_> f gets the first chance to evaluate things; indeed, the only chance, it's just permitted to call on x if it wants. 23:15:05 <Deewiant> elliott_: I still think it's reasonable to think that as soon as some actual data from x (in a chain (f.g. ... h) x) is requested, h is applied on it "before" g etc. 23:15:09 <elliott_> kallisti: Yes, you can do graph reduction by hand if you really want to. 23:15:24 <monqy> elliott_: what's natural for me depends on the context 23:15:28 <elliott_> Deewiant: Sure, as soon as x gets involved... but you can't "see" whether x is getting involved from the outside. 23:15:28 <monqy> elliott_: functions being used etc 23:15:38 <monqy> not how things are evaluated 23:15:42 <elliott_> Deewiant: Like, it's not really "as soon as the argument matters", it's "the other functions come into play as soon as they come into play" :P 23:16:08 <monqy> (f x) is natural often if not most of the time 23:16:12 <elliott_> Deewiant: Now consider x referring back to the appliaction itself 23:16:13 <elliott_> *application 23:16:27 <monqy> but sometimes it feels better with the x coming first 23:16:27 <elliott_> Deewiant: Whoops, turns out when h is consulted, it actually first calls upon past results of f! 23:16:30 <Deewiant> elliott_: But one often tends to think in terms of "okay, if this gets input foo, what happens?", and in that case you think "h happens resulting in bar, and then g happens resulting in baz, and then f happens resulting in zot" 23:16:32 <elliott_> So f actually comes before h again. 23:16:39 <elliott_> Except f already came and now we're on to h. 23:16:44 <elliott_> So it really doesn't make any sense at all. 23:16:56 <Deewiant> Of course the actual call graph can be arbitratrily complicated. 23:16:59 <Deewiant> -t 23:17:01 <elliott_> Yes, that's my point :P 23:17:10 <elliott_> With strict evaluation, it can't be. 23:17:22 <elliott_> x goes through h, h is completely done with, then through g, then through f. 23:17:29 <elliott_> The flow is linear, causal, blah blah blah. 23:17:40 <elliott_> Sure, it makes sense to reason about data flow with non-strict evaluation. 23:17:55 <elliott_> But it's really not as simple as (.) being backwards. 23:17:56 <kallisti> elliott_: I find it difficult to reason about efficiency. Sometimes I'll rewrite a function that uses high-level combinators to a more direct pattern matching / recursive style with the hope that it will be more efficient. 23:18:05 <kallisti> elliott_: but I don't really know if that's true in most cases. 23:18:08 <elliott_> kallisti: That's counterproductive. 23:18:09 <kallisti> due to inlining 23:18:18 <elliott_> Not only are you not as smart as the people who wrote the Prelude, you're making sure rewrite rules don't take effect. 23:18:22 <monqy> sometimes (.) is natural to read 23:18:23 <kallisti> elliott_: it's only for "important" functions 23:18:26 <elliott_> Also, it makes your program harder to read. 23:18:26 <monqy> but other times (>>>) is more natural 23:18:33 <elliott_> So you're slowing things down and making your program worse. 23:18:59 <elliott_> Anyway, that just means you aren't fully comfortable with Haskell yet. Many people aren't. 23:19:04 <elliott_> I'm not /fully/ yet. 23:19:08 <kallisti> elliott_: hmmm perhaps I'll show you an example. 23:19:15 <elliott_> (Although moreso than I am with any other language, probably.) 23:19:16 <Deewiant> monqy: But (>>>) is so ugly that one often ends up choosing (.) anyway. :-P (At least I do that.) 23:19:24 <elliott_> Deewiant: Also that :P 23:19:27 <monqy> Deewiant: yes 23:19:35 <elliott_> Write it with arrow notation instead. 23:19:37 <elliott_> That'll be the bestest. 23:19:47 <monqy> I still haven't bothered learning that 23:19:54 <elliott_> It's actually really trivial. 23:19:56 <Madoka-Kaname> elliott_, is Prelude written for efficiency or for directness/elegance? 23:20:04 <elliott_> You just have (pattern <- arrow -< input). 23:20:08 <elliott_> Where pattern defaults to _ 23:20:21 <elliott_> And arrow can't refer to variables bound by patterns (because the "call graph" is static). 23:20:29 <elliott_> Ofc it gets more complicated for the more complicated stuff :P 23:20:30 <elliott_> *ofc 23:20:51 <elliott_> Madoka-Kaname: The Prelude in the report is written as a specification with little regard to efficiency (beyond complexity bounds, sometimes) 23:20:59 <elliott_> Madoka-Kaname: The Prelude in base is both readable and efficient. 23:21:08 <elliott_> (Well, mostly readable.) 23:21:15 <Madoka-Kaname> I see 23:21:32 <elliott_> But it's about being smart enough to pick the /right/ readable implementation that's efficient :P 23:21:37 <elliott_> kallisti: Go on. 23:21:49 <kallisti> elliott_: bfStrings in http://hpaste.org/52125 vs. http://pastebin.com/aMBHAGdH (excuse my gross nested where) 23:22:21 <elliott_> Do I have to click a pastebin link? 23:22:37 <fizzie> You *can* just type it in. 23:22:39 <kallisti> elliott_: I believe the second one will exit early and always loop once through the list. I can't say the same for the first one because I don't know what inlining is going to happen. 23:22:46 <kallisti> they're long programs. 23:22:51 <kallisti> er 23:22:53 <kallisti> long for IRC 23:22:56 <Sgeo> What's wrong with pastebin.com ? 23:22:56 <kallisti> multi-line, etc 23:23:09 <elliott_> kallisti: I meant as opposed to hpaste. 23:23:18 <kallisti> elliott_: hpaste was giving me an error 23:23:22 <elliott_> kallisti: I know for a fact balancedBrackets fully evaluates ls and rs, because you have ((==) `on` length). 23:23:24 <kallisti> when I tried to submit the second one. 23:23:28 <elliott_> GHC is not allowed to make length non-strict. 23:23:31 <elliott_> That would change semantics. 23:23:32 <kallisti> right. 23:23:47 <Sgeo> How could length be made non-strict? 23:24:04 <elliott_> Sgeo: length xs > 4 23:24:26 <kallisti> elliott_: so I certainly don't do this all the time but for a criticial section of code I think it's worthwhile to rewrite important loops like this, using accumulating parameters and tail calls. 23:24:26 <Sgeo> Would be awesome if that sort of thing worked 23:24:50 <elliott_> kallisti: Beeeep! 23:24:57 <elliott_> You don't understand Haskell's evaluation model. 23:25:04 <elliott_> kallisti: "Tail calls". 23:25:09 <kallisti> yes? 23:25:10 <elliott_> Tail calls are irrelevant. 23:25:14 <kallisti> Haskell doesn't optimize those? 23:25:17 <elliott_> A "tail-recursive" Haskell program can blow the stack. 23:25:23 <elliott_> A non-tail-recursive Haskell program can run in constant space. 23:25:45 <elliott_> If you think "tail recursion" is a meaningful concept in Haskell's evaluation model, you are *really* misguided. 23:25:49 <kallisti> um, okay. 23:26:39 <kallisti> but accumulating parameters tend to be faster, no? 23:26:57 <kallisti> I guess it's possible Haskell wiki lied to me. 23:27:19 * elliott_ really doesn't think trying to help you patch up your mental model by dropping little nibbles of derivable information will help you, but considers the question too vague to have a definite answer anyway. 23:28:17 <kallisti> yes, surely saying nothing is the best form of help. 23:28:47 <elliott_> kallisti: main = print $ foldr (:) [] [1..] -- note that this program runs in constant space despite having *infinitely-nested* *non-"tail call"* recursion 23:28:52 <elliott_> in the definition of foldr 23:29:15 <kallisti> elliott_: yes, lazy data structures are neat, huh? 23:29:18 <Madoka-Kaname> tail recursion is a meaningful concept in the sense that you can have tail recursive functions =p 23:29:44 <elliott_> kallisti: Surely being sarcastic to someone trying to help you learn will cause them to keep trying to help you. 23:29:56 * elliott_ lets you figure it out yourself. 23:30:16 <kallisti> elliott_: I'm just not sure what you're getting at. What does this have to do with tail calls being meaningless always. 23:31:54 <kallisti> my main concern wasn't space use: I was concerned that I was looping through the list multiple times when I could just be looping once, and also exiting early on certain unbalanced cases. 23:32:58 <kallisti> I'm aware of term rewriting / fusion etc but not how effective it is in all cases. 23:42:21 <kallisti> VARIABLE INTERPOLATION SUCCESS 23:42:30 <kallisti> one step closer to perl. 23:43:25 -!- pikhq_ has quit (Ping timeout: 252 seconds). 23:43:26 -!- pikhq has joined. 23:44:13 <itidus21> xmas tension building in the house here 23:44:24 <kallisti> elliott_: my conclusion: while a poor example of "mission criticial" code, my second function is faster than the first. 23:44:41 <kallisti> unrelated to tail optimization, that was a bad example. 23:44:55 -!- Slereah_ has quit (Ping timeout: 240 seconds). 23:45:16 -!- Slereah_ has joined. 23:49:25 <Gregor> I'd like to see a game with a time-travel mechanism that allows for arbitrary or near-arbitrary selection of dates. 23:49:52 <kallisti> Gregor: make it a Back to the Future game. 23:50:11 <itidus21> i was just about to use the idiom "back to the future" in a comment also 23:50:17 <Gregor> I'd like to see it not be a Back to the Future game ... 23:50:41 <itidus21> the angry video game nerd has done a review of existant back to the future games 23:50:57 <Gregor> Yes. They suck. 23:51:18 <Gregor> Else he wouldn't have reviewed them 8-D 23:51:28 <kallisti> shocking. 23:51:37 <kallisti> all movies make excellent video games. 23:51:42 -!- MDude has quit (Read error: Connection reset by peer). 23:52:50 <fizzie> ^style ct 23:52:50 <fungot> Selected style: ct (Chrono Trigger game script) 23:52:57 <fizzie> fungot: What do you think about time travel in games? 23:52:57 <fungot> fizzie: but cyrus! are you leaving! fight! fun!! 23:53:17 <itidus21> none of them have even a pretension of time travel 23:53:32 <kallisti> @src foldr 23:53:32 <lambdabot> foldr f z [] = z 23:53:32 <itidus21> took me a long time to find the word pretense 23:53:32 <lambdabot> foldr f z (x:xs) = f x (foldr f z xs) 23:54:06 <itidus21> i played the start of chronotrigger on an emulator 23:54:13 <itidus21> i recall a race around a town 23:54:28 <fizzie> A set of {65 million BC, 12000 BC, 600 AD, 1000 AD, 1999 AD, 2300 AD} is "near-arbitrary" enough, eh? 23:54:45 <fizzie> Also the race is around some tents in the circus area and completely pointless. 23:54:47 <Gregor> fizzie: Not even close! 23:54:49 <fizzie> Though you can bet on it. 23:55:32 <Gregor> I want you to be able to steal a kid's lollipop, then go to his adulthood and see how he's now a jerk, then go back and give him back his lollipop, and go back to the future and now he's a nice guy. 23:55:51 <fizzie> You can almost do that in Chrono Trigger. :p 23:56:25 <Gregor> There are no 400-year-olds in CT! (Note: yes there are) 23:56:30 <kallisti> elliott_: also, foldr performs tail call elimination. 23:56:30 <fizzie> In one of the sidequests you donate Beef Jerky (or whatever) to a family in 600 AD, so that in 1000 AD their descendants are nice folks and let you get the charged Sun Stone back for free. Or something like that anyway. 23:56:56 <itidus21> rpg quests :-s 23:57:05 <Gregor> fizzie: It's still the moon stone then, but yeah. 23:57:17 <fizzie> Oh, right. Well, almost-a-Sun Stone. 23:57:42 <Gregor> fizzie: Also although the moon stone has been getting light for over 65 million years, it needs another thousand or so to be the sun stone again. Some of which will be post-apocalypse. Logic. 23:57:58 <fizzie> 1300 years left, 65001000 done. 23:58:08 <fizzie> It's thresholded, apparently. 23:58:16 <fizzie> Won't do a thing until it's good and fully charged. 23:59:22 <fizzie> Also: Son of Sun and Red {Vest,Mail}. 23:59:53 <kallisti> > foldr (:) [] [1..] 23:59:54 <lambdabot> [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28... 23:59:55 <fizzie> Anyway, it's sorta-sparkling also in 1000AD, isn't it.