00:07:43 <elliott> pikhq_: I know the values are meaningful, but I don't think they exist just to be an easter egg.
00:10:02 <elliott> pikhq_: P.S. Admire http://hpaste.org/55661 or die.
00:12:16 <elliott> pikhq_: Yes, that's the title of the paste.
00:12:56 <elliott> pikhq_: Example usage: reify "hello" (\p -> reflect p ++ reflect p)
00:13:45 <kallisti> elliott: I find that people often don't admire my code as much as I do.
00:14:06 <elliott> kallisti: Have you ever written anything as amazing as *that*?
00:14:18 <kallisti> elliott: I don't really know what's going on so maybe?
00:14:21 <elliott> NihilistDandy: data Proxy s = Proxy
00:14:29 <elliott> newtype Tagged s a = Tagged a
00:14:33 <lambdabot> http://hackage.haskell.org/package/tagged
00:14:38 <elliott> Patashu: the most beautiful thing ever
00:14:47 <kallisti> so you made reify more awesome somehow?
00:14:48 <Patashu> looks like something that would appear on dailywtf
00:14:53 * kallisti hasn't looked at the code at all.
00:15:03 <elliott> kallisti: i gave it MORE SPEED. click the link or die
00:15:18 <Patashu> it looks like a candidate for metaprogramming btw
00:15:20 <elliott> It's SO FAST. Well, I haven't actually measured it.
00:15:22 <Patashu> write a program that generates that
00:15:24 <elliott> But I took a glance at the resulting Core!
00:15:43 <elliott> 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:48 <Sgeo> elliott, update
00:16:56 <Sgeo> From :56 my time
00:17:15 <elliott> Patashu: ZOMG a stacked case!
00:17:46 <elliott> 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:24:26 -!- incomprehensibly has joined.
00:24:44 -!- incomprehensibly has changed nick to micahjohnston.
00:25:12 <elliott> NihilistDandy: Did you use -O2? You should use -O2.
00:25:27 * elliott has not even looked at the core without -O2.
00:25:51 <NihilistDandy> I just opened it up in emacs and loaded the Tidy Core
00:26:13 <elliott> Oh, it's not all that bad without -O.
00:26:16 <elliott> NihilistDandy: cabal install ghc-core, man.
00:26:52 <NihilistDandy> 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 <elliott> What's Ext Core look like, I've only used ghc-core.
00:29:02 <elliott> GOD, I am so lazy, you know! Fiiine.
00:29:02 <NihilistDandy> It's all z-encoded and simple. Though GHC can't run it, anymore
00:29:45 <elliott> That's, um.... readable :P
00:30:11 <elliott> It's not that bad, really.
00:30:31 <elliott> Hmm, I should try GHC 7.3 so I can do this with the new type-level naturals.
00:30:43 <elliott> That would be a lot shorter, presumably.
00:30:54 <elliott> Since I expect they use machine words under the hood I could just pack it directly.
00:31:04 <NihilistDandy> What do you pass to ghc-core to make this work? I haven't used it much
00:31:32 <elliott> NihilistDandy: ghc-core -- -O2 foo.hs
00:31:40 <kallisti> `fetch http://dl.dropbox.com/u/16495819/Data.tar.bz2
00:31:42 <elliott> If you want the PANSY version.
00:31:48 -!- copumpkin has joined.
00:32:29 <NihilistDandy> elliott: I think it can be demonstrated that I do not :D
00:32:32 <HackEgo> Data.tar.bz2 \ Data.tar.bz2.1 \ bin \ canary \ karma \ lib \ paste \ quotes \ share \ wisdom
00:32:43 <elliott> kallisti: It's not finished downloading.
00:32:49 <Gregor> `run du -h Data.tar.bz2
00:33:04 <elliott> NihilistDandy: So how likely are you to be able to answer my low-level GHC hackery internals question :P
00:33:10 <kallisti> `fetch http://dl.dropbox.com/u/16495819/words.pl
00:33:13 <HackEgo> 2011-12-24 00:33:13 URL:http://dl.dropbox.com/u/16495819/words.pl [4313/4313] -> "words.pl" [1]
00:33:23 <elliott> kallisti: It's not finished downloading.
00:33:31 <NihilistDandy> elliott: Not especially likely, but who knows? I've been known to be vaguely insightful
00:33:40 <NihilistDandy> Or say something dumb enough that someone has a stroke of insight
00:33:56 <kallisti> `run chmod +x words.pl && mv words.pl bin/words
00:34:21 <Gregor> `run du -h Data.tar.bz2
00:34:41 * Gregor waits for elliott to figure out what's actually going down.
00:34:55 <elliott> Gregor: I presume the file is too damn big.
00:35:00 <elliott> But that doesn't mean it's finished downloading :)
00:35:06 -!- derdon has quit (Remote host closed the connection).
00:35:11 <kallisti> that's strange that it's too large.
00:35:17 <elliott> 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 <Gregor> The file size is too damned high.
00:35:23 <elliott> I basically want a StablePtr but without all that darn overhead :P
00:35:25 <Gregor> Seeing as how the limit is 10M.
00:35:54 <elliott> NihilistDandy: Alternatively, is there a way to disable the GC for a short, basically-non-allocating critical section of code
00:36:01 <elliott> (It should cons all of ~8 bytes)
00:36:35 <zzo38> Time Travel Chess http://www.wgosa.org/ttchsrules.htm
00:36:47 <kallisti> 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 <NihilistDandy> I think there are runtime options for the GC, but I'm not sure how specific you can be
00:39:11 <elliott> NihilistDandy: Nah, in code
00:39:49 <elliott> The problem is that the GC could theoretically jump in half-way through this transfer process and move the pointer
00:39:59 <elliott> 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 <elliott> So theoretically, if I can eliminate the consing...
00:40:21 <kallisti> I didn't compress it, apparently
00:41:06 * kallisti though tar would automatically compress based on file extension, but that requires -a
00:42:17 <NihilistDandy> 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 <kallisti> `fetch http://dl.dropbox.com/u/16495819/Data.tar.bz2
00:43:18 <HackEgo> 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 <elliott> *Mirror> reify (42 :: Int) reflect
00:43:28 <elliott> Loading package array-0.3.0.2 ... linking ... done.
00:43:28 <elliott> Loading package containers-0.4.0.0 ... linking ... done.
00:43:28 <elliott> Loading package dlist-0.5 ... linking ... done.
00:43:28 <elliott> Loading package data-default-0.3.0 ... linking ... done.
00:43:29 <elliott> Loading package semigroups-0.8 ... linking ... done.
00:43:31 <elliott> Loading package tagged-0.2.3.1 ... linking ... done.
00:43:33 <elliott> <interactive>: internal error: stg_ap_pp_ret
00:43:35 <elliott> (GHC version 7.0.3 for x86_64_unknown_linux)
00:43:37 <elliott> Please report this as a GHC bug: http://www.haskell.org/ghc/reportabug
00:43:39 <elliott> Process haskell<1> aborted
00:43:41 <elliott> YESSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS
00:43:46 <HackEgo> rm: cannot remove `share/Data': No such file or directory
00:44:20 <HackEgo> Data.tar.bz2 \ Data.tar.bz2.1 \ Data.tar.bz2.2 \ bin \ canary \ karma \ lib \ paste \ quotes \ share \ wisdom
00:44:48 <elliott> Hmm, note to self: Previous version is not thread-safe.
00:45:43 <HackEgo> 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:56 <HackEgo> Unknown option: eng-all 25
00:45:59 <HackEgo> can't open share/WordData/EngAll: No such file or directory at /hackenv/bin/words line 100
00:46:16 <HackEgo> 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:47:01 <HackEgo> bin \ canary \ karma \ lib \ paste \ quotes \ share \ wisdom
00:49:22 <elliott> NihilistDandy: What's a stg_ap_pp_ret :'(
00:49:38 <kallisti> `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 <HackEgo> bash: fetch: command not found
00:49:47 <kallisti> that's not a command apparently.
00:49:48 <NihilistDandy> I desperately hope it's not the stg I'm thinking of :/
00:50:05 <kallisti> `fetch http://dl.dropbox.com/u/16495819/Data.tar.bz2
00:50:18 <HackEgo> 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 <kallisti> `run tar -xf Data.tar.bz2 && rm -r share/WordData && mv Data share/WordData
00:50:56 <elliott> NihilistDandy: Is that the Worst STG?
00:51:24 <HackEgo> Unknown option: eng-all 25
00:51:26 <NihilistDandy> Stateless Tagless G-Machine is a phrase I hate to think about :D
00:51:30 <HackEgo> can't open share/WordData/EngAll: No such file or directory at /hackenv/bin/words line 100
00:51:33 <kallisti> kwerijwoierjoiwjetoijweroijwetoijwer
00:52:39 <elliott> NihilistDandy: Oh. Yes, it's that stg.
00:53:42 <NihilistDandy> http://hackage.haskell.org/trac/ghc/browser/includes/stg/MiscClosures.h?rev=4caf3550d43477e0948d3212868a665d08c0cfbc
00:53:54 <kallisti> `fetch http://dl.dropbox.com/u/16495819/Data.tar.bz2
00:54:06 <HackEgo> 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:19 <HackEgo> Data.tar.bz2 \ Data.tar.bz2.1 \ bin \ canary \ karma \ lib \ paste \ quotes \ share \ wisdom
00:54:35 <HackEgo> /home/hackbot/hackbot.hg/multibot_cmds/lib/limits: line 5: exec: -_-: not found
00:54:52 -!- Nisstyre has joined.
00:55:08 <kallisti> `run rm Data.tar.bz2 && mv mv Data* Data.tar.bz2
00:55:11 <HackEgo> mv: target `Data.tar.bz2' is not a directory
00:55:27 <kallisti> `run rm Data.tar.bz2 && mv mv Data.tar.bz2.1 Data.tar.bz2
00:55:31 <HackEgo> rm: cannot remove `Data.tar.bz2': No such file or directory
00:55:35 <kallisti> `run mv mv Data.tar.bz2.1 Data.tar.bz2
00:55:38 <HackEgo> mv: target `Data.tar.bz2' is not a directory
00:55:45 <kallisti> `run mv Data.tar.bz2.1 Data.tar.bz2
00:56:09 <kallisti> `run tar -xf Data.tar.bz2 && rm -r share/WordData && mv Data share/WordData
00:56:32 <HackEgo> fheaveru nac rad ranjy excussli
00:56:42 <HackEgo> 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:56 <HackEgo> 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 <kallisti> `run words --eng-1M --spanish 10
00:57:10 <HackEgo> quaereni pada taj homia arra werporam suboi ausiatamier huguiary vieros
00:58:04 <elliott> NihilistDandy: Apparently (unsafeCoerce# foo :: Addr#) segfaults a lot...
00:58:25 <HackEgo> ганию тата влась сктромина приуку
00:58:30 <kallisti> `run words --finnish --eng-1M 20
00:58:35 <HackEgo> akurussij men nttavingstoksintemidi tymiltät eväköilt skeve deroikillecultimea tusch lanch potele toh judiablansward noimpa veloteinmg negatioisty proclaritica diall ahogseltura houkkaalis aak
00:59:03 <kallisti> fantasy author novels will pay huge amounts of money for this software.
00:59:51 <kallisti> `run words --finnish --swedish --eng-1M --german-medical 20 #oh god
00:59:57 <HackEgo> ä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 <kallisti> how do you even pronounce this.
01:00:38 <elliott> NihilistDandy: Yeah, but they'd also, you know... judge me.
01:01:05 <kallisti> elliott: I DEMAND THAT YOU REVOKE YOUR CLAIM THAT THIS PROGRAM SUCKS.
01:01:17 <HackEgo> 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:02:23 <HackEgo> 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 <kallisti> NihilistDandy: is --usage a standard thing??
01:03:00 -!- Xaepholus has joined.
01:03:10 <NihilistDandy> I run into it a lot. -h gives a condensed version and --usage gives more detail without being a man page
01:03:33 <NihilistDandy> Though just what the hell -d does in words, I'd love to know
01:04:19 <HackEgo> Unknown option: \ Unknown option: -russian 12
01:04:53 <HackEgo> Unknown option: russian -d 12
01:05:10 <kallisti> `run words --polish --gaelic --ogerman --french --german --hebrew --russian --spanish --eng-fiction --irish 25
01:05:26 <HackEgo> 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 <HackEgo> 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:06:12 <kallisti> L-T is the length of the word minus the target length that the algorithm uses to scale the word ending probability.
01:06:31 <kallisti> optionally L-T should be equal to the offset I use, which is by default -4
01:07:07 <kallisti> you can change the offset with -o
01:07:47 <HackEgo> mdmonteill (L-T: 5) gong (L-T: 0) fpeakerken (L-T: 1) peanold (L-T: 1) goodrencha (L-T: 4)
01:07:56 <kallisti> yeah it could probably be improved.
01:08:23 <kallisti> really I think the offset should be some function of the word length histogram.
01:08:31 <Xaepholus> kallisti, I'm guessing HackEgo is your bot, and words is a script/program written in some esoteric language?
01:08:59 <kallisti> but yes, words is written in the esoteric language of perl.
01:09:00 <HackEgo> cat: words: No such file or directory
01:09:18 <HackEgo> #!/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:44 <Xaepholus> Ahaha. Seems worse then Brainf***.
01:09:51 <kallisti> Gregor: also plz install Math::Random::MT::Perl for better pseudo-randomness
01:10:56 <kallisti> I think self-censorship is *****************
01:11:00 <monqy> `welcome Xaepholus
01:11:02 <HackEgo> 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:52 <Xaepholus> 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 <kallisti> Gregor: assuming you have cpan it will take like 5 seconds.
01:15:23 <Gregor> There, installed, quitcherbitchin'.
01:16:43 <Gregor> Read "nwe" and pronounced it as ennui.
01:16:59 <elliott> yes that was my intention.
01:17:28 <elliott> DeadlyFugu: how many matrices of solidity do you find yourself locked within on this fine morning
01:17:51 <kallisti> I don't think I can magically turn $ARGV[0] into @ARGV without doing some string parsing
01:17:51 <Gregor> Alternatively, what is the dimensionality of the matrices of solidity in which you are inevitably locked.
01:18:23 <elliott> DeadlyFugu hurt itself in its confusion!
01:18:30 <Gregor> `pastelogs matrix of solidity
01:18:42 <elliott> that's all you need, just that.
01:18:49 <HackEgo> 299) <treederwright> enjoy being locked in your matrix of solidity
01:18:52 <elliott> it is the alpha and the qoppa
01:19:02 <HackEgo> http://codu.org/projects/hackbot/fshg/index.cgi/raw-file/tip/paste/paste.12272
01:19:58 <elliott> kallisti: @ARGV = split / +/, $ARGV[0]
01:20:18 <kallisti> I've already figured that much out.
01:20:48 <elliott> kallisti: um do any of your options accept quotes
01:20:52 <elliott> are spaces meaningful in any option
01:20:59 <elliott> <Xaepholus> kallisti, I'm guessing HackEgo is your bot, and words is a script/program written in some esoteric language?
01:21:00 <fungot> http://git.zem.fi/fungot/blob/HEAD:/fungot.b98
01:21:04 <kallisti> elliott: they're not but IT MAY BE IMPORTANT MAYBE?
01:21:07 <fungot> 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 <fungot> Selected style: irc (IRC logs of freenode/#esoteric, freenode/#scheme and ircnet/#douglasadams)
01:21:14 <elliott> fungot: say hi to DeadlyFugu
01:21:15 <fungot> elliott: let self n if ( n 1))
01:21:19 <Gregor> DeadlyFugu: We talk about esolangs a /lot/ here, as you can plainly see.
01:21:21 <elliott> kallisti: go through the shell then
01:21:30 <elliott> Gregor: hey i just caused a befunge program to be linked like ten lines up!! so on-topic
01:21:50 <kallisti> `fetch http://dl.dropbox.com/u/16495819/words.pl
01:21:53 <DeadlyFugu> Gregor: That would explain the channel being '#esoteric'.
01:21:53 <HackEgo> 2011-12-24 01:21:52 URL:http://dl.dropbox.com/u/16495819/words.pl [4362/4362] -> "words.pl" [1]
01:21:58 <kallisti> `run chmod +x words.pl && bin/words
01:22:08 <elliott> <kallisti> `run chmod +x words.pl && bin/words
01:22:12 <elliott> i don't think this means what you think it means.
01:22:35 <HackEgo> kustettämmillema kieppeampina lähipohdistä lyhempiemme käyttämme
01:22:40 <elliott> NihilistDandy: Everyone knows only Erlang is truly webscale 2.0.
01:22:53 <HackEgo> 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:56 <NihilistDandy> https://raw.github.com/gist/e1744a804a6f7469b022/09db938de5063a7ff70d367fa608cd61c0e735c0/gistfile1
01:23:06 <elliott> `words --gaelic --russian 10
01:23:11 <HackEgo> ìotain charmes матся круг xавалиров витерованиями therman шества cea borbh-nuadriùc
01:23:17 <elliott> oh, it doesn't mix the datasets?
01:23:21 <elliott> it should mix the data sets
01:23:29 <kallisti> it does, it just isn't going to mix well with different character sets.
01:24:03 <kallisti> for example, no english character is going to lead to a traditional Chinese character and vice versa
01:24:31 <Gregor> `words --eng-us --spanish
01:24:34 <elliott> 09:13 Defi_: its going to have to either run on its own netblock of ips or use many proxies
01:24:36 <kallisti> that's just a limitation of the markov model, I can't really do anything about that.
01:24:49 <elliott> NihilistDandy: You need big iron to have hundreds of requests per second!
01:24:56 -!- Gregor has changed nick to SimonDectro.
01:25:00 <elliott> kallisti: How do I set target length
01:25:09 <zzo38> 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 <kallisti> elliott: target offset is -o, default is -4
01:25:17 <HackEgo> http://codu.org/projects/hackbot/fshg/index.cgi/raw-file/tip/paste/paste.11507
01:25:19 <pikhq_> kallisti: Actually, not entirely true.
01:25:31 <kallisti> pikhq_: well, in these datasets it is.
01:25:41 <elliott> `words -o 100 --eng-all 10
01:25:42 <pikhq_> kallisti: You can find an English character leading into traditional Chinese characters in Chinese text.
01:25:47 <HackEgo> pervenobergrencycingburniamigttardalipocialikevorgamificalinserectrifferentchromitriberlelikolnykhoffbanishwi gastracoflugdowriturerefloudconcotypericalianorumouliationueringahemamoulethaelotokringbedietrolledanatery elijoneutovestvueantaillendonimakonianoleihouplesomangolphernamiiiiinglicioughospidedoubliomenthccbiewsbenishline aeprecetatedupliceptikakalatedlysinabolemeriosurferedityaguedanjoyneryshlieleonheideroboguereredaryngotern
01:26:24 <kallisti> elliott: -d gives you the word length - target length
01:26:33 <kallisti> as I said, optimally it should be equal to the offset used.
01:26:35 <HackEgo> kehnoisempanansaitetulemmenistäsikojärjestamaltasittavallensalailemiltännesillesilläänsäkuljettaviltäniltänimistumalta
01:27:08 <pikhq_> `words --canadian-english-insane
01:27:19 <HackEgo> 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:21 <kallisti> pikhq_: note that the options can be reduced to unambiguous abbreviations
01:27:26 <elliott> kallisti: Sounds like -4 ain't optimal
01:27:33 <kallisti> pikhq_: so you can just write --can to disambiguate from catalan
01:27:54 <kallisti> elliott: well it's likely my scaling function
01:28:11 <kallisti> ($ftable{' '} //= 0) *= 2**($len-$target);
01:28:12 <elliott> kallisti: You should have copied mine and fizzie's solution wholesale instead :)
01:28:25 <kallisti> eh, it works, but it's not perfect.
01:29:01 <kallisti> really I think the scaling should be influenced by the word length histogram.
01:29:48 <HackEgo> hibilitvayedicapiiongeornfamigekordwella
01:30:09 <kallisti> because $target is based on the histogram, duh.
01:30:31 <HackEgo> depliquelquotoloiishcisignotive
01:30:31 <elliott> `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 <kallisti> elliott: how does your solution differ from mine again?
01:30:43 <elliott> kallisti: Being better, probably
01:30:56 <elliott> Your shit is too slow, also
01:31:08 <kallisti> sorry I'll rewrite it in C as soon as possible.
01:31:32 <kallisti> it may even end up being shorter than the 147 lines of words.pl !!!
01:32:12 <elliott> `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 <elliott> `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 <elliott> `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 <elliott> `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 <elliott> `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 <elliott> `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 <elliott> `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:42 -!- iconmaster has quit (Quit: Probably switching to Pesterchum now.).
01:32:48 <kallisti> elliott: but yes loading 24 large binary files is a bottleneck I haven't solved.
01:32:59 <elliott> kallisti: mmap, motherfucker, do you speak it?
01:33:08 <elliott> `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 <elliott> `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 <elliott> `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 <elliott> There, that's a lighter workload
01:33:30 <kallisti> try removing --eng-all as it's the slowest
01:34:06 <elliott> SimonDectro: Pls remove time limits
01:34:10 <kallisti> elliott: also take a moment to marvel at my code and suggest improvements (note: it's already completely perfect)
01:34:20 <elliott> NihilistDandy: WHAT HAPPENS NEXT
01:34:45 <HackEgo> http://codu.org/projects/hackbot/fshg/index.cgi/raw-file/tip/bin/words
01:34:58 <elliott> `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:36 <elliott> kallisti: ## is the worst commenting style ever I hate you
01:35:43 <kallisti> my $target_offset = -4; #needs testing;
01:35:47 <HackEgo> 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:36:40 <HackEgo> 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:37:30 <HackEgo> Argument "canadianenglishinsane" isn't numeric in int at /hackenv/bin/words line 141. \
01:37:42 <HackEgo> Unknown option: canadianenglishinsane
01:37:52 <HackEgo> volumnarylli pfeney unhedraggreth sandersvi und
01:38:22 <elliott> The volumnarylli light filled the pfeney while Simon Dectro unhedraggrethed his books from his cloak.
01:38:42 <elliott> Professor Sandersvi was waiting and they exchanged unds.
01:39:12 <kallisti> Undriders of Canadia by Elliott hird
01:39:34 <kallisti> `words --ogerman --german-medical --hebrew 5
01:39:34 <DeadlyFugu> Lolwut? Are those words randomly generated or something?
01:39:38 <HackEgo> kindun sen שהאשיה rang glich
01:39:43 <elliott> They're real Canadian words.
01:39:47 <elliott> Canada, man. Not even once.
01:40:19 <elliott> You haven't seen the things I've seen!
01:41:59 <DeadlyFugu> 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 <elliott> That's the Canada they show to outsiders.
01:42:44 <elliott> You never get to see the illicit smuggling of new, exotic, and dangerously illegal English words that goes on in that place.
01:42:53 <HackEgo> structing prophoid nonchival herlet elet
01:43:03 <elliott> They're the most disgustingly nonchival herlets you've ever seen.
01:43:24 <elliott> And if I hadn't had my structing prophoid eletor with me, I'd surely not have survived the experience.
01:43:35 <DeadlyFugu> How do you know I'm not Canadian anyway? (Apart from my IP...)
01:44:50 <HackEgo> phyled supprode squarturn supply quambly
01:45:06 <kallisti> I don't believe in Eastern countries.
01:45:22 <HackEgo> ïðîøàâàëèòî ðàçëåïâàé îòêîìèë ðàçïîíàñåíè íåñò äîäðàì ïîäïèåõòå ïîòúêíàõ èçÿæäàíå ïîîòðîøíèí
01:45:43 <DeadlyFugu> Is it just me, or is that completely comprised of accented latin?
01:45:44 <elliott> That's what Bulgarian really looks like.
01:47:11 <kallisti> elliott: the dataset was latin-1
01:48:20 <elliott> kallisti: Your output looks like Latin-1, encoded as Unicode.
01:48:33 <elliott> Presumably the result of incorrectly interpreting some data as Latin-1 along the line.
01:48:59 <kallisti> I used file on the dataset and it said latin-1 so I assumed it was
01:50:16 <kallisti> elliott: the most difficult part of all of this was actually getting the encodings correct.
01:51:17 <kallisti> ah so this was the dataset that was fucked up.
01:51:23 <zzo38> I tried to make a Haskell program for access Swiss Ephemeris but maybe I made some mistake?
01:51:26 <kallisti> utf8 "\xF9" does not map to Unicode at ./construct_grams.pl line 19, <$f> line 24163.
01:51:29 <kallisti> utf8 "\xEE" does not map to Unicode at ./construct_grams.pl line 19, <$f> line 24163.
01:51:32 <kallisti> utf8 "\xF2" does not map to Unicode at ./construct_grams.pl line 19, <$f> line 24163.
01:51:54 <kallisti> THOSE ARE THE ONLY TWO OPTIONS OBVIOUSLY
01:52:44 <kallisti> cat dict/bulgarian yields funny question mark symbols
01:53:09 <kallisti> maybe I should learn about Bulgarian and its alphabet
01:53:55 <kallisti> Bulgarian has three official alphabets?
01:54:17 <elliott> kallisti: Maybe... it's... ISO-8859.
01:55:41 <kallisti> that's not an actual encoding. that's a set of encodings right?
01:57:55 <kallisti> I'M SO GOOD AT CHARACTER SETS GUYS.
01:58:18 <itidus21> by coincedence someone just showed me this in another channel http://imgur.com/OSzpf
01:59:36 <kallisti> `fetch http://dl.dropbox.com/u/16495819/Bulgarian
01:59:40 <HackEgo> 2011-12-24 01:59:39 URL:http://dl.dropbox.com/u/16495819/Bulgarian [478528/478528] -> "Bulgarian" [1]
01:59:46 <kallisti> `run mv Bulgarian share/WordData/Bulgarian
01:59:55 <HackEgo> ыхэрђр ьхђџѕ шчсхёхїхэ яюышыюђю ѕыштрэшџ
02:00:19 <kallisti> I honestly don't even know what bulgarian looks like.
02:01:08 <itidus21> its supposed to look like russian
02:01:29 <kallisti> but I don't know if this is the right encoding
02:02:01 <kallisti> for example I don't see the use of those e with diaresis anywhere
02:02:35 <itidus21> well what are the 3 alphabets..
02:02:41 <itidus21> you should probably figure that out
02:03:07 <kallisti> 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 <kallisti> I think Cyrillic is the most commonly used one. I think the other are historic.
02:03:41 <pikhq_> kallisti: Hmm. Just too lazy to bother with CJK?
02:04:24 <kallisti> I don't know anything about it.
02:05:01 <kallisti> 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 <pikhq_> Hmm, if they already have a dataset you could have an easy time of it.
02:05:37 <zzo38> Is this correct? http://sprunge.us/bCgV
02:05:51 <pikhq_> Figuring out word boundaries there is a complicated problem.
02:06:09 <elliott> localCString :: (CString -> IO a) -> String -> IO a;
02:06:09 <elliott> localCString f = newCString >=> \x -> (f x <* free x);
02:06:16 <pikhq_> Well. Not so much in modern Korean.
02:06:35 <pikhq_> You *do* have the very unfortunate fact that Korean is encoded retardedly in Unicode, though.
02:07:02 <zzo38> 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:14 <kallisti> I'll likely add the Chinese data later.
02:07:20 <pikhq_> Korean uses an alphabet, and they happen to group letters in each syllable into a Chinese character shaped block.
02:07:29 <pikhq_> Unicode encodes each syllable.
02:07:30 <kallisti> right now I need to figure out wtf this bulgarian dictionary is encoded in
02:07:37 <elliott> zzo38: There's the "extra-libraries" cabal field.
02:08:37 <zzo38> 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 <pikhq_> The Chinese languages also have one character -> one syllable...
02:09:25 <elliott> 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 <elliott> "cabal build" works fine locally.
02:09:39 <pikhq_> And Japanese is an exercise in pain and agony if you want to do any nontrivial processing on normal text.
02:10:17 <pikhq_> (you need morpheme analysis going just to fetch readings)
02:10:24 <elliott> It's after 2 am, someone tell me to sleep.
02:10:25 <zzo38> But do I need to make it build and link the C codes as well that kind of stuff
02:10:40 <kallisti> hmmm this might be KOI8-R apparently.
02:10:54 <kallisti> I wonder if Perl has a decoder for that. time to find out.
02:10:59 <itidus21> pikhq_: i suspect onel problem is different priorities of users of unicode.
02:11:26 <kallisti> The Bulgarian Prawec 16 PC and the Bulgarian keyboard map on Linux use the MIK encoding
02:11:29 <pikhq_> itidus21: Actually, I think the mapping of Korean is for legacy purposes.
02:12:16 <itidus21> 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 <pikhq_> Legacy Korean encodings, IIRC, did the character->syllable encoding because simple double-width encoding was easy.
02:12:36 <elliott> zzo38: It links to a Unix library on your system like libfoo.so or whatever.
02:12:38 <kallisti> Cannot find encoding "mik" at ./construct_grams.pl line 45.
02:12:42 <pikhq_> Especially as Japanese computers already did it.
02:12:53 <elliott> 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 <pikhq_> 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 <zzo38> elliott: But I should need it to work on both Windows and UNIX computer.
02:13:24 <elliott> zzo38: I don't understand the relevance.
02:13:25 <pikhq_> (as is necessary for e.g. Arabic)
02:13:33 <elliott> zzo38: "<elliott> 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 <zzo38> What relevance did you not understand?
02:14:51 <elliott> The relevance of it needing to work on Windows and Unix.
02:15:53 <zzo38> So that it can work on nearly all computers.
02:16:02 -!- DeadlyFugu has quit (Read error: Connection reset by peer).
02:16:54 -!- DeadlyFugu has joined.
02:18:03 <zzo38> 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 <zzo38> 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 <elliott> zzo38: ghci can load ffi stuff
02:24:03 <zzo38> 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 <kallisti> so it's either KOI8-R or cp-1251
02:28:33 <kallisti> and I have absolutely no way to know...
02:28:46 <kallisti> unless I find a source that definitely says "wbulgarian is encoded in X"
02:29:11 <kallisti> `fetch http://dl.dropbox.com/u/16495819/Bulgarian
02:29:15 <HackEgo> 2011-12-24 02:29:15 URL:http://dl.dropbox.com/u/16495819/Bulgarian [663497/663497] -> "Bulgarian" [1]
02:29:24 <kallisti> `run mv Bulgarian share/WordData/Bulgarian
02:29:36 <HackEgo> замаскършан мъчната изшифродвъртящ изпуснеловах изсукваш изкъдрен извиситна сдаващ холилите дохран
02:29:51 <kallisti> but... still no way to tell if that's correct.
02:29:56 <kallisti> just that it's the correct alphabet.
02:31:37 <kallisti> 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 <kallisti> 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 <kallisti> !perl use Encode; print decode("koi8-r", "\0");
02:36:34 <kallisti> !perl use Encode; print encode("koi8-r", "\0");
02:39:51 <kallisti> I think it's cp-1251 based on vowel distribution.
02:40:47 <HackEgo> доразкретното невръщвания прилосочебно неизплющени олизиращ поощръбявах раззела подраваща пробърка стото сновитото отства крайте сметложка навиите загладите поумноголик начертането манонагрявам посеквакарвал
02:40:49 <HackEgo> 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:36 <HackEgo> 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:49 <HackEgo> 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:17 <HackEgo> 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:26 <kallisti> I find it unlikely that polish is encoded in latin-1
02:43:51 <kallisti> oh wait polish is utf8 nevermind
02:47:50 <kallisti> maybe gaelic and probably manx are most likely in latin-8
02:54:09 <HackEgo> 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:20 <HackEgo> 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:56:04 <kallisti> honestly I can't tell a difference between latin-8 and latin-1 here.
02:56:34 -!- [sleigh] has joined.
02:57:39 <kallisti> dict/gaelic: ISO-8859 C program text
02:57:45 <kallisti> looool. gaelic is C programs guys.
02:58:16 <HackEgo> deach troitche ghaich n-ùmhail piol
02:58:45 <kallisti> the one on my computer now is latin-8
02:58:49 <kallisti> and... they look the same to me.
02:59:25 <kallisti> 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 <kallisti> `fetch http://dl.dropbox.com/u/16495819/Gaelic
03:00:34 <HackEgo> 2011-12-24 03:00:34 URL:http://dl.dropbox.com/u/16495819/Gaelic [148886/148886] -> "Gaelic" [1]
03:00:35 <kallisti> `fetch http://dl.dropbox.com/u/16495819/Manx
03:00:38 <HackEgo> 2011-12-24 03:00:38 URL:http://dl.dropbox.com/u/16495819/Manx [244365/244365] -> "Manx" [1]
03:00:42 <kallisti> `run mv Manx share/WordData/Manx
03:00:51 <kallisti> `run mv Gaelic share/WordData/Gaelic
03:01:07 <HackEgo> kibbyr resh cainleen foddimagh lossey
03:01:13 <HackEgo> 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 <kallisti> guys is that what manx looks like
03:01:36 <HackEgo> 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:58 <kallisti> that's enough 8-bit encoding hell for one day.
03:06:47 <kallisti> ..and people think Unicode is difficult to work with.
03:08:28 -!- micahjohnston has quit (Quit: Leaving.).
03:09:28 <kallisti> @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:11:58 <[sleigh]> How did I go from esoteric.voxelperfect.net to esolangs.org ?
03:12:26 <kallisti> that's not a surprising destination to find yourself at.
03:12:37 <[sleigh]> I mean, are they *exactly* the same?
03:13:19 <kallisti> I don't remember how but I remember they're not exactly the same.
03:13:32 <SimonDectro> Ehhh, they're supposed to be exactly the same.
03:19:39 <kallisti> @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:20:12 <SimonDectro> That's pretty much the standard "lol this is my default response"
03:22:12 <kallisti> SimonDectro: any idea what "gaelic" would most likely be encoded in?
03:22:27 <kallisti> latin-1 covers Scottish Gaelic, but latin-8 covers all of the gaelic languages (including Manx)
03:23:51 <SimonDectro> Anyway, if you just say "Gaelic", you usually mean Scots Gaelic.
03:24:48 <kallisti> 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:05 <DeadlyFugu> Is it just me, or has the chat been more interested in character encoding then esoteric languages?
03:25:16 <pikhq_> DeadlyFugu: We are consistently off topic.
03:25:21 <kallisti> I have, because of what I'm working on
03:25:21 <SimonDectro> DeadlyFugu: You will find that that's the usual for #esoteric :)
03:25:30 <SimonDectro> pikhq_: This is why I call it the "esoteric topics in computing" channel.
03:25:37 <SimonDectro> pikhq_: That way we're quite frequently on-topic.
03:25:51 <SimonDectro> kallisti: So ... ... ... let's see the data?
03:25:56 <pikhq_> SimonDectro: If you take it that way, then yes, we are usually on topic.
03:26:03 <SimonDectro> DeadlyFugu: Incidentally, you have not yet been invited to hack the bot.
03:26:07 <HackEgo> Data.tar.bz2 \ bin \ canary \ karma \ lib \ paste \ quotes \ share \ wisdom
03:26:22 <kallisti> SimonDectro: sudo apt-get install wgaelic
03:26:38 <kallisti> SimonDectro: my data is binary, you're not going to get much from it. but it's in share/WordData
03:26:39 <DeadlyFugu> Maybe it's just me, that that does seem rather dangerous...
03:26:58 <DeadlyFugu> If someone knew what they were doing, they could easily take down the bot.
03:27:15 <DeadlyFugu> Dunno what power IRC users have, but a fork-bomb should be easy.
03:27:25 <kallisti> DeadlyFugu: it could be possible but it's certainly been rendered difficult or near imposible.
03:27:43 <kallisti> DeadlyFugu: because Gregor is not stupid. :P
03:27:54 <kallisti> he knows what a fork bomb is, and also knows how to prevent it.
03:27:57 <HackEgo> ? \ @ \ 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:10 <DeadlyFugu> Ahaha. I once found a loophole in a bot on a IRC channel, and made it get kicked XD
03:28:15 <pikhq_> Darn, right, the command stuff is on Egobot.
03:28:29 <SimonDectro> DeadlyFugu: Finding bugs in HackEgo gets you props on #esoteric, not kicks 8-D
03:28:47 <kallisti> SimonDectro: he was implying that the bot got kicked
03:28:48 <DeadlyFugu> SimonDectro: The bot got kicked, not me.
03:29:00 <pikhq_> Watch as it magically does... Nothing!
03:29:18 <DeadlyFugu> But a good idea is to not have a C++ compiler completely available to the end-user.
03:29:37 <pikhq_> Anyways. Breaking the bots is tradition here.
03:29:45 <SimonDectro> `run echo 'int main(){printf("lol, C is better anyway.\n");return 0;}' > test.c; gcc test.c; ./a.out
03:29:46 <pikhq_> Because of that, the bots have become *pretty* hardened.
03:29:51 <HackEgo> 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 <kallisti> 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:30:36 <pikhq_> DeadlyFugu: The sandbox used to be an utterly insanely patched libc, in an empty chroot.
03:30:45 <pikhq_> It's now Usermode Linux.
03:31:05 <pikhq_> Inside the UML, you're running as root.
03:31:36 <DeadlyFugu> Hrm, he's definitely more advanced then the other bot XD
03:31:45 <SimonDectro> kallisti: Conclusion: The used characters are identical in both Latin-1 and Latin-8, hence it is in essence both.
03:32:03 <kallisti> SimonDectro: hmmm, okay. it looked pretty much identical so I couldn't tell.
03:32:35 <SimonDectro> <pikhq_> Inside the UML, you're running as root. // nope
03:32:46 <DeadlyFugu> As I expected, nothing that basic will work :(
03:33:09 <itidus21> deadly ahh you gotta use the ` on the tilde button
03:33:15 <kallisti> 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:45 <SimonDectro> 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 <kallisti> Cyrillic character sets are a huge clusterfuck pre-unicode, apparently.
03:34:19 <SimonDectro> (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:51 <itidus21> fugu: the trouble is that theres 2 kinds of apostrophes and hackego uses the strange one on the tilde key
03:35:03 <SimonDectro> itidus21: The one that isn't an apostrophe?
03:35:12 <kallisti> SimonDectro: don`t tell him that.
03:35:27 <HackEgo> dpkg: failed to open package info file `/var/lib/dpkg/status' for reading: No such file or directory
03:36:07 <kallisti> SimonDectro: I'm guessing the /usr/share/dict stuff is in mixed encodings for historic/compatibility reasons or something.
03:36:12 <kallisti> it really should all be converted to UTF-8 though.
03:36:28 <SimonDectro> kallisti: Probably more historical/hysterical than compatibility.
03:36:41 -!- SimonDectro has changed nick to Gregor.
03:36:45 <HackEgo> man: can't open the manpath configuration file /etc/manpath.config
03:37:03 <DeadlyFugu> Clever, he replies to /msg's with /msg's.
03:37:13 <Gregor> Ohyeah, you can privmsg.
03:37:17 <Gregor> Hm, I suppose I should add manpath.
03:37:22 <kallisti> I wasn't aware that was a unique feature of hackego
03:37:26 <kallisti> I thought almost every good bot did that.
03:37:43 <Gregor> kallisti: But many bad ones don't ;)
03:37:50 <DeadlyFugu> I've never seen a bot that does that untill now.
03:38:00 <kallisti> maybe you hang out with bad programmers.
03:38:07 <kallisti> or people who like bad bot libraries.
03:38:09 <DeadlyFugu> I used to use it to annoy people on IRC channels, since that had no clue who was controlling the bot.
03:38:09 <Gregor> We Esoterians are better.
03:39:04 <kallisti> Gregor: I'm thinking about writing an IRC bot in Glass. :>
03:39:39 <Gregor> Idonno if that's so masochistic, people have written some crazy stuff in Glass.
03:39:50 <kallisti> Gregor: they're all masochists too.
03:39:52 -!- [sleigh] has changed nick to PiRSquared17.
03:39:56 <lambdabot> PiRSquared17: You have 1 new message. '/msg lambdabot @messages' to read it.
03:40:23 <Gregor> PiRSquared17: Do not use lambdabot for secure messaging. It is not a secure means of communication.
03:40:55 <Gregor> (I should probably restrict "X-P" too ... I may inadvertently start using it as a stand-in for tongue-face)
03:40:57 <kallisti> @tell oerjan Did you get that Norwegian cocaine I asked you about?
03:41:18 <Gregor> DeadlyFugu: Sure one can, ones changes to cwd merely don't continue from invocation to invocation.
03:42:03 <kallisti> Gregor: or maybe instead of writing yet another IRC bot I should rewrite words.pl in Haskell.
03:42:10 <Gregor> DeadlyFugu: Uhhh, yeah, 'rm .' doesn't work anywhere ...
03:42:36 <HackEgo> rm: cannot remove directory: `.'
03:42:43 <kallisti> rm doesn't work on directories at all without other options.
03:43:08 <Gregor> Hm, did I leave my C junk around?
03:43:12 <HackEgo> Data.tar.bz2 \ a.out \ bin \ canary \ karma \ lib \ paste \ quotes \ share \ test.c \ wisdom
03:43:35 <Gregor> kallisti: Was just about to do that.
03:43:51 <kallisti> `run words --bulgarian --russian 25
03:43:58 <HackEgo> провахмате шлено исто тугаване ремонодук пудыши мъству провка дорокачавалото фразбиструму приберщвлет драламину двученна макрообмит совательозеровавши вседаго усъ блионителн преденция бства сираних позитод ползачещяли изрушав
03:44:31 <Gregor> -- A thrilling novella by ... whatever Russian person is on #esoteric .
03:45:20 <kallisti> I don't know if we have any Russians.
03:46:19 <kallisti> 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:44 <Gregor> Oh god I'm starting to use "8-D" as a stand-in for tongue-face.
03:46:48 <DeadlyFugu> Gregor, if an operation takes too long, your bot just times out, right?
03:46:59 <Gregor> DeadlyFugu: Times out that operation, yes.
03:47:12 <Gregor> kallisti: And it's based on wall time, not CPU time ;)
03:47:27 <kallisti> Gregor: I was merely providing an example. :>
03:48:18 <Gregor> In fact the previous system (before I wrote UMLBox) was based on CPU time.
03:49:32 <DeadlyFugu> Gregor: Can I upload a interpreter for a esolang to it?
03:49:55 <Gregor> DeadlyFugu: Yyyyyyyyyyyyyessss, but that's the point of EgoBot and I haven't yet merged them.
03:49:55 <HackEgo> Runs arbitrary code in GNU/Linux. Type "`<command>", or "`run <command>" for full shell commands. "`fetch <URL>" downloads files. Files saved to $PWD are persistent, and $PWD/bin is in $PATH. $PWD is a mercurial repository, "`revert <rev>" can be used to revert to a revision. See http://codu.org/projects/hackbot/fshg/
03:50:27 <Gregor> 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:30 <EgoBot> help: General commands: !help, !info, !bf_txtgen. See also !help languages, !help userinterps. You can get help on some commands by typing !help <command>.
03:50:34 <EgoBot> 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 <EgoBot> 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:08 <HackEgo> 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:52:04 <kallisti> that command would have completely timed out in my previous version. SO GOOD
03:52:09 <Gregor> "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 <DeadlyFugu> Gregor: Could I upload a interpreter for a esolang I made (In a few hours...) and mess with it on HackEgo?
03:52:26 <kallisti> that's... an interesting interpretation.
03:52:52 <Gregor> 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:04 -!- kmc has joined.
03:53:08 <Gregor> DeadlyFugu: Oh, you'll want `fetch <url> btw.
03:53:11 <kallisti> Gregor: notice the improved pseudorandomness thanks to the installation of Math::Random::MT::Perl
03:53:23 <Gregor> kallisti: Man, it's SO MUCH MORE PSEUDORANDOM NOW.
03:53:41 <Gregor> DeadlyFugu: No (actually, highly restricted) network access.
03:53:45 <itidus21> it's so pseudorandom that you could easily mistake it for random
03:53:55 <Gregor> itidus21: Let's not get crazy.
03:54:23 <Gregor> DeadlyFugu: Yes, it's the same as the limit on all files in the filesystem, 10M.
03:54:26 <kallisti> mersenne twister is actually pretty damn good, but I doubt it has any perceptible different in this case.
03:54:40 <DeadlyFugu> Oh, my intepreters tiny compared to that ^^
03:56:23 <Gregor> DeadlyFugu: In case the distinction between `<cmd> and `run <cmd> was unclear (and it's significant if you want to make an interpreter frontend), `<cmd> 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 <cmd> is parsed by sh.
03:57:28 <DeadlyFugu> Maybe I'm stupid or something, but I can't mkdir
03:58:00 <Gregor> 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 <Gregor> DeadlyFugu: Make sure to put something there in the same command line.
03:58:15 <Gregor> Why hasn't ls returned yet >_>
03:58:28 <DeadlyFugu> Gregor, noob question, how do I do both in the same command line?
03:58:32 <HackEgo> MinesoVM \ bin \ canary \ karma \ lib \ paste \ quotes \ share \ wisdom
03:58:42 <kallisti> && makes sure the last command was successful
04:00:06 -!- kmc has quit (Quit: Leaving).
04:00:24 -!- kmc has joined.
04:02:03 <DeadlyFugu> Gregor, in chat shouldn't ` be unneeded?
04:03:36 -!- kmc has quit (Client Quit).
04:03:50 <kallisti> DeadlyFugu: I think it's better for a bot to act consistently regardless of where it's being used.
04:04:01 <kallisti> for example, bots that don't use a single prefix character for commands
04:04:19 <kallisti> fungot: and fungot, which is always consist
04:04:20 <fungot> kallisti: so operation can be between aaa and a
04:04:34 -!- MDude has changed nick to MSleep.
04:04:57 <PiRSquared17> Is there a reason http://esolangs.org/w/api.php is disabled?
04:05:08 <DeadlyFugu> "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 <kallisti> DeadlyFugu: paste the command plz
04:05:40 <DeadlyFugu> Me: `cp ./source.txt ./Mineso/source.txt
04:05:53 <DeadlyFugu> Bot: cp: missing destination file operand after `./source.txt ./Mineso/source.txt' \ Try `cp --help' for more information.
04:06:11 <Gregor> <Gregor> DeadlyFugu: In case the distinction between `<cmd> and `run <cmd> was unclear (and it's significant if you want to make an interpreter frontend), `<cmd> 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 <cmd> is parsed by sh.
04:06:12 <kallisti> you have to use -T in that case.
04:06:35 <Gregor> And, uh, no, you don't have to use -T ...
04:07:08 <kallisti> DeadlyFugu: not according to your paste.
04:09:06 <kallisti> it doesn't remain between invocations
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 <kallisti> Gregor: "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv: 10.0.1) Gecko/20100101 Firefox/10.0.1"
04:29:13 <kallisti> Gregor: is there a possible safer User-Agent string to go with?
04:30:05 <kallisti> I guess the Mozilla/5.0 part is all that most web servers look for.
04:30:31 <kallisti> To get the "normal" web page on requests
04:30:38 <kallisti> instead of, say, mobile pages.
04:31:28 <Gregor> 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 <DeadlyFugu> Gregor, can not execute binary file D:
04:32:03 -!- myndzi has joined.
04:32:08 <DeadlyFugu> It says permission denied if you don't do that.
04:32:19 <kallisti> ah. well then it can't execute the binary file.
04:32:24 <kallisti> DeadlyFugu: how did you compile it?
04:32:26 -!- GreaseMonkey has quit (Quit: The Other Game).
04:32:49 <HackEgo> ? \ @ \ 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:54 -!- aloril_ has joined.
04:33:11 <HackEgo> Mineso \ bin \ canary \ karma \ lib \ paste \ quotes \ share \ wisdom
04:33:16 -!- lifthrasiir has joined.
04:33:21 <DeadlyFugu> It doesn't use any libraries other then the standard C++ ones.
04:33:21 <HackEgo> 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 <Gregor> Why won't it file for me >_>
04:33:27 <HackEgo> 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 <Gregor> kallisti: 64-bit only.
04:34:02 <HackEgo> /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:34 <Gregor> I'm from the FUTUUUUURE
04:34:35 <kallisti> Gregor: so do I even need to put platform information? Could I just have "Mozilla/5.0 Gecko/200101" ?
04:34:59 <Gregor> kallisti: elliott actually made a "perfect" UA a while ago.
04:35:09 <Gregor> `pastelogs elliott.*user.*agent
04:35:19 <Gregor> (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:09 <kallisti> Gregor: not to mention the string "elliott" is going to get tested a lot.
04:36:20 <HackEgo> /home/hackbot/hackbot.hg/multibot_cmds/lib/limits: line 5: exec: logs: not found
04:36:30 <Gregor> Grrrf, mine timed out X-D
04:36:55 <zzo38> 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:37 <Gregor> kallisti: Oct 26 21:13:38 <elliott> self.webkit_settings.props.user_agent = 'Mozilla/5.0 AppleWebKit KHTML Gecko Chrome Safari'
04:37:45 <HackEgo> 2007-02-25.txt:04:27:42: <xor> ~kill 0
04:37:53 <kallisti> Gregor: are you sure that's perfect?
04:38:00 <Gregor> elliott claimed it was.
04:38:09 <HackEgo> 2011-06-02.txt:19:57:44: <HackEgo> No output.
04:38:12 <Gregor> It pretty much convinced everything that it was sufficiently up to date.
04:38:30 -!- Madoka-Kaname has quit (Read error: Connection reset by peer).
04:38:55 <itidus21> after months of experience i discovered the raw `log command a few weeks ago
04:40:26 <Gregor> After years of experience, I discovered what a horimarmy rionnnsbecomphelcaequin this channel can be.
04:40:27 <DeadlyFugu> I got my interpreter working, but forgot to disable debug mode.
04:40:42 <DeadlyFugu> 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 -!- Madoka-Kaname has quit (Changing host).
04:40:59 -!- Madoka-Kaname has joined.
04:40:59 <DeadlyFugu> Well it's ran, but I can't see the output.
04:41:04 <zzo38> 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:11 <HackEgo> 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:47 <itidus21> Gregor: for me, ork is the most interesting language i have seen.. the idea appeals to my sense of absurdity
04:42:08 <EgoBot> 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 <kallisti> 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:15 <EgoBot> 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 <Gregor> 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:50 <kallisti> Gregor: so it pretty much covers all of the same points.
04:42:59 <Gregor> itidus21: I assume you've seen http://esolangs.org/files/ork/src/beer.ork
04:43:17 <zzo38> Gregor: I know how that works because I have worked with that things before. However my idea a bit different.
04:43:19 <Gregor> kallisti: Yup, that's Chrome alright. I still prefer elliott's though.
04:43:26 <itidus21> i hadn't seen it until just now
04:43:54 <kallisti> Gregor: there's less stuff to maintain for future released of rolebot :P
04:45:20 <DeadlyFugu> Well, my interpreter totally isn't intended for use over IRC, but it works ^^
04:45:39 <Gregor> DeadlyFugu: You'll probably want to put a script around it to pass in source.
04:46:03 <HackEgo> MINESO VM V1 ALPHA \ COPYLEFT 2011 DEADLYFUGU \ Usage: ./mineso [filename] \ Hello World! \ \ VM END \ Press ENTER to continue...
04:46:26 <DeadlyFugu> As you can see, there's a tiny little 'Hello World!' amungst the rest of that XD
04:46:27 <Gregor> 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:47:36 <kallisti> 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 <Gregor> Oh by the way guys, HackEgo has a wiki counterpart: http://hackiki.org/
04:48:26 <kallisti> Gregor: oh I know. I just have no use for it. :P
04:49:01 <zzo38> 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 <kallisti> Gregor: I could include every operating system name just for good measure.
04:50:50 <kallisti> but I think that's not needed.
04:50:50 <zzo38> (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 <Gregor> kallisti: That's the way!
04:51:06 <Gregor> Lesse if I can grep some nonsense out of my server logs.
04:51:33 <kallisti> Windows Linux FreeBSD Mac NT 4.54 2.3 1.0.1 6.2 10.0.1
04:51:38 <itidus21> zzo38: is the idea a universal basic?
04:51:44 <kallisti> just random operating systems and version numbers.
04:53:06 <zzo38> itidus21: Mostly, yes.
04:53:34 <HackEgo> 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 <Gregor> kallisti: Grepping my server logs suggests the following: http://sprunge.us/TLiJ
04:54:24 <itidus21> zzo38: the biggest problem with the idea is that it's impossible
04:54:42 <DeadlyFugu> Woo, no more long waiting or useless text! :D
04:54:43 <kallisti> Gregor: well, I pretty much have to use that as a user agent.
04:55:05 <kallisti> my bot will be a veritable chameleon of the internet.
04:55:06 <zzo38> itidus21: I know it is impossible; that is why I try to make it almost
04:55:10 <Gregor> DeadlyFugu: Prefixing it with "output: " is pretty weird though.
04:55:16 <Gregor> kallisti: More like a horrible chimera.
04:55:31 <kallisti> Gregor: oh I should remove "mobile" though
04:55:59 <Gregor> kallisti: Darn, you're right! My greppage isn't smart enough :(
04:56:15 <itidus21> zzo38: i like the subculture/scene/underground of 8bit basic too... even though i am not so good at it
04:56:42 <Gregor> 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 <zzo38> 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:55 <Gregor> I think I'm almost to one week.
04:57:15 <zzo38> I intend the book will include all the Forth commands available and all the BASIC commands available.
04:57:26 <Gregor> 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 <NihilistDandy> http://img820.imageshack.us/img820/1641/itsfinetrustme.png
04:57:58 <zzo38> itidus21: Which specific systems for example? Which have you used mostly?
04:58:00 <itidus21> 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 <itidus21> mostly just qbasic 1.0 on 8086/80286
04:58:32 <DeadlyFugu> Lol NihilistDandy. I think they're trying to tell you it's fine.
04:58:37 <kallisti> Gregor: it's my Markov bot reflex.
04:58:50 <NihilistDandy> DeadlyFugu: I'm in the Super Meat Boy database… right now.
04:59:11 <itidus21> zzo38: the brute force method would seem to be just emulating every known platform ;_l
04:59:24 <DeadlyFugu> NihilistDandy, that does look pretty dangerous.
04:59:28 <zzo38> 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
05:00:07 <NihilistDandy> And that image has been up on /r/gamedev for nearly a full day
05:00:13 <kallisti> http://sourcereal.com/ I wonder what the purpose of this site actually is.
05:00:26 <zzo38> 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 <kallisti> 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 <DeadlyFugu> Wow, they could really do with a better password then 'editor'
05:01:14 <zzo38> And that in most generic BASIC programs, no OPTION commands will be needed.
05:02:07 <zzo38> I could give the emulation files different names if necessary so that I do not have to use their trademarks
05:02:19 <kallisti> Gregor: I'm guessing "libwww" is is likely "libwww-perl"
05:02:45 <kallisti> Gregor: obviously someones LWP code is not as sophisticated as /mine/
05:02:54 <itidus21> 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 <itidus21> 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:57 <DeadlyFugu> Woo. It's surprisingly fun using your esolang over IRC XD
05:05:28 <kallisti> yes IRC programming is the best kind
05:05:42 <zzo38> itidus21: Sorry, I do not completely understand.
05:06:07 <kallisti> > 2 + 2 --I love when this times out
05:06:25 <kallisti> it does it quite frequently with my bot. Probably a result of my constantly abysmal network connection.
05:06:50 <kallisti> I don't really know why it does that.
05:08:02 <itidus21> 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 <kallisti> why is optimizing Haskell so satisfying.
05:08:18 <itidus21> had to look up that stupid function of course
05:08:30 <kallisti> DeadlyFugu: did you figure out how to get your interpreter working with a script?
05:09:13 <kallisti> in other words you can't do things like
05:09:13 <zzo38> itidus21: I would probably use SDL instead that way it work on Windows and on Linux.
05:09:25 <HackEgo> /home/hackbot/hackbot.hg/multibot_cmds/lib/limits: line 5: exec: mineso: not found
05:09:29 <itidus21> zzo38: well then SDL fits my idea too
05:09:34 <kallisti> DeadlyFugu: it's also possible.
05:09:50 <DeadlyFugu> I'm slack, so I'll write a shell script that does that ^^
05:10:01 <kallisti> I'll give you a hint: hackego puts everything into the first argument to the command.
05:10:08 <itidus21> zzo38: and you could also replace the weird NES sound coding with actual sound files
05:10:15 <kallisti> so, in sh, that would be $1 that refers to your program text.
05:10:52 <itidus21> or you could work it out somehow so that its trivial to add sounds
05:10:56 <zzo38> itidus21: It could, but you still might want audio synthesis like the NES or whatever
05:11:41 <kallisti> DeadlyFugu: also you will need a #!/bin/sh line at the top of your script
05:11:44 <itidus21> 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 <zzo38> Still, I think you should just make it actual NES/Famicom game.
05:12:19 <DeadlyFugu> kallisti: How can I put in a newline over IRC?
05:12:36 <DeadlyFugu> (I'm doing `run echo "Text" > file.name
05:12:58 <kallisti> the best one is (echo "blah"; echo "blah") > file
05:13:14 <zzo38> (Some people do still write NES game today)
05:13:22 <DeadlyFugu> I need a newline after #!/bin/sh though.
05:13:29 <kallisti> DeadlyFugu: okay. that's how you do it.
05:13:38 <kallisti> DeadlyFugu: echo appends a newine to the end of things.
05:13:59 <kallisti> another way is echo "blah" > file; echo "blah" >> file
05:14:23 <itidus21> zzo38: but they spend most of their time masochistically hacking away to achieve simple results :-s
05:14:27 <kallisti> itidus21: have I told you about portal chess?
05:14:54 <Gregor> I usually use () *shrugs*
05:15:00 <itidus21> in a way, nes coding is a bit of an esolang
05:15:08 <itidus21> noone in their right minds would make a game that way
05:15:21 <zzo38> 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 <itidus21> the syllogism is indeed that noone in their right minds would use an esolang
05:15:59 <kallisti> itidus21: says the person who lives in the present, where computers are reasonably fast.
05:16:07 <kallisti> and have huge stores of memory.
05:16:16 <zzo38> Well, you do not have to be in your right minds, then, I suppose.
05:17:39 <kallisti> 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 <itidus21> i think a definition of my terms is in order
05:18:19 <DeadlyFugu> kallisti, are you suggesting 2D programming languages? D:
05:18:36 <kallisti> well most "2D" programming languages are still written in this way.
05:18:50 <kallisti> I'm actually not suggesting anything.
05:18:55 <itidus21> noone who wants to complete a reasonably complex program within an efficient timeframe would use an esolang in my uneducated opinion
05:19:03 <kallisti> Just stating that our current programming methods will be outdated at some point.
05:20:48 <itidus21> i am in a kind of hell where i am not sure if applications or languages are my priority
05:20:53 <kallisti> hmmm, what should I write in Haskell
05:21:06 <kallisti> itidus21: sounds like shitty priorities.
05:21:20 <kallisti> but between the two I'd go with languages.
05:21:36 <kallisti> DeadlyFugu: what's it complaining about?
05:21:36 <zzo38> kallisti: Write ephemeris software to calculate how far is from here to the moon
05:22:16 <itidus21> theres little holes that have crept into my logic over the decades
05:22:27 <zzo38> kallisti: Then learn by looking at Wikipedia.
05:22:33 <itidus21> i don't know how they got there
05:24:13 <kallisti> I might write my portal chess backend/server in Haskell.
05:25:25 <kallisti> I just haven't written down the rules yet.
05:25:27 <myndzi> sounds like fun, what are the rules?
05:25:33 <myndzi> i mean, when/how do you place portals
05:25:44 <myndzi> i'm just curious what the idea is
05:26:05 <kallisti> your bishops are portals, the direction they're facing determines the portal opening.
05:26:23 <kallisti> they also no longer move like bishops, and instead move more like a knight but with an extended range.
05:26:37 <DeadlyFugu> Trololol, kallisti it wasn't working cause I couldn't code in my own esolang
05:26:39 <myndzi> and you're SOL if one gets captured?
05:26:56 <kallisti> if one gets captured the other one explodes, capturing everything adjacent to it. :)
05:27:28 <kallisti> 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 <myndzi> that does make it kind of interesting
05:27:52 <myndzi> inb4 portals in the corners
05:27:57 <kallisti> 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 <kallisti> you may also choose to keep a piece stationary and rotate it alone.
05:28:42 <myndzi> playetested at all, or just an idea?
05:28:44 <DeadlyFugu> Killisti: Are there lies about getting cake at the end of the game?
05:29:14 <DeadlyFugu> Anyway, got a script thingy working ^^
05:29:21 <DeadlyFugu> `./min.sh "-11=111111<1>11111111111]1"
05:29:24 <itidus21> 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 <HackEgo> output: 5 \ 4 \ 3 \ 2 \ 1 \ 0 \
05:29:50 <kallisti> 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 <kallisti> they're unique in that they have projectile capturing ability.
05:30:12 <myndzi> haha, it makes me think of the cannons in mario in the airships
05:30:21 <kallisti> and projectiles interact with portals in the way you would expect.
05:30:53 <kallisti> 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 <kallisti> their slow movement counteracts this ability.
05:31:11 <kallisti> but they're important pieces. pretty much every piece is vital.
05:31:13 <myndzi> i'm curious how knights interact with portals ;)
05:31:32 -!- augur has quit (Remote host closed the connection).
05:31:34 <myndzi> since they don't really move "through" squares
05:31:35 <itidus21> 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:32:18 <itidus21> as in... a mistake is merely a subjective interpretation
05:32:22 <kallisti> 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 <itidus21> or is that just my own world view?
05:32:45 <kallisti> arrows ignore ownership of projectiles, and are immune to both (ignoring special exceptions to this rule)
05:33:07 <itidus21> my weird world view which leads me to difficulties in socializing
05:34:23 <kallisti> so the way I see the game working is that in early game you want to get your arrows out
05:34:36 <kallisti> which act as proxies to your cannons.
05:35:09 <myndzi> sounds like a whole lotta bouncin' going on
05:35:12 <kallisti> 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 <myndzi> did you ever play... uhh, chase?
05:35:33 <itidus21> uh.. like.. theoretically there are no erroneous chessboard configurations
05:35:48 <myndzi> it's basically on a hex "cylinder" with dice as your pieces
05:35:49 <itidus21> although some of them may be garden of eves
05:36:01 <myndzi> you can move the number of spaces indicated on the face of your die
05:36:11 <myndzi> and when you capture dice, your opponent has to compensate with other dice
05:36:24 <myndzi> also bouncing around and reflection involved
05:36:39 <zzo38> I made a chess variant once, where in addition to chess pieces you also put dice on the board
05:36:58 <itidus21> zzo38: hey man you just gave me a great idea there
05:37:02 <myndzi> i made a craps variant, where instead of throwing dice you threw bishops against a wall :v
05:37:16 <kallisti> 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 <itidus21> 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 <DeadlyFugu> myndzi, what about a craps variant where you through real crap?
05:37:58 <kallisti> the king moves and captures like a king from chess. pawns, for now, move like pawns.
05:38:12 <itidus21> and suppose you had 2 sets of dice.. of different colours
05:38:17 <zzo38> itidus21: Just use the letter N not Kn for knight
05:38:26 <myndzi> DeadlyFugu: nah, that's the "shits"
05:38:39 <itidus21> zzo38: is that what you had in mind, or did i just describe something altogether different?
05:39:05 <zzo38> 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 <zzo38> So it is similar to your idea
05:39:36 <itidus21> well it is your idea.. i just figured it out
05:40:04 <kallisti> myndzi: I intend to playtest it online most likely.
05:40:11 <itidus21> you could have like 32 such dice
05:40:12 <zzo38> It is similar to my idea
05:40:17 <myndzi> probably the most convenient way ;)
05:40:23 <zzo38> Yours is another idea
05:41:15 <kallisti> maybe arrows shouldn't move like bishops though. because they restricts them to one board color.
05:41:21 <itidus21> the primary advantage being that if you lost a piece you can replace it with any old die
05:41:36 <zzo38> This is my game: http://www.chessvariants.org/index/msdisplay.php?itemid=MS123456chess
05:42:06 <myndzi> jaedong is getting raped
05:42:36 <myndzi> i haven't seen any of his games for a long time but.. oh how the mighty have fallen?
05:42:58 <kallisti> myndzi: what do you think about the rules?
05:43:14 <zzo38> 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 <myndzi> i was sort of half watching starcraft lol, i just asked because i wanted to know how the portals worked
05:43:59 <myndzi> it doesn't sound much like chess but that hardly matters
05:44:11 <myndzi> i have no idea how it would play, but it sounds like fun
05:44:21 <myndzi> definitely a computer game
05:44:25 <itidus21> 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:41 <zzo38> 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 <itidus21> i guess you could deal them face down
05:45:58 <DeadlyFugu> Gregor, is every file update to the HackEgo bot uploaded to the mercurial repo?
05:46:06 <kallisti> @tell Ngevd More fun Haskell programs. A program that generates palindromes in a given alphabet: http://hpaste.org/steps/49131
05:46:28 <Gregor> DeadlyFugu: It's not "uploaded" per se, the Mercurial repo /is/ the filesystem.
05:46:45 <myndzi> some kid just flushed snow down a toilet and it sprinkled all over this little girl who was like YAY SNOW
05:47:11 <itidus21> zzo38: i guess if we keep thinking for years and years we will strike upon good things
05:47:21 <DeadlyFugu> http://codu.org/projects/hackbot/fshg/ < I wonder if I ran any commands...
05:47:31 <zzo38> itidus21: Chinese chess and Japanese chess game uses flat pieces, which I prefer over the 3D figures that FIDE chess uses.
05:48:32 <zzo38> Do you understand the rules for the 123456 Chess?
05:49:50 <itidus21> ah ok.. so you start with all pieces... except with addition of chess pieces
05:50:38 <itidus21> 2 pieces starting in the same place.. that sounds like it could work better in computerized chesses
05:50:59 <myndzi> i like the capturing mechanic
05:51:39 <zzo38> myndzi: Yes, I like shogi, too
05:51:53 <zzo38> itidus21: Well, the checkers are flat so you can easily put the rook on top of it
05:52:09 <itidus21> is that a common rule, having 2 pieces sharing one space?
05:53:25 <zzo38> itidus21: Not very common, although there are a few variants where pieces can share spaces
05:53:51 <itidus21> i must admit thats something i never imagined
05:54:25 <itidus21> so suddenly i can imagine that a pawn could ride on a knight :D
05:55:08 <zzo38> 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 <itidus21> 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 <zzo38> You could also use checkers pieces which other pieces can ride on top of
05:56:05 <DeadlyFugu> 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 <itidus21> i think it would be reasonable to say you can only dismount with a valid pawn move..
05:56:33 <itidus21> and the knight cannot dismount.. it has to be the pawn that dismounts
05:57:09 <itidus21> the stacking would be easier with dice :P
05:58:20 <kallisti> > 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 <lambdabot> Couldn't match expected type `GHC.Bool.Bool'
05:58:23 <itidus21> also.. you could allow for enemy pawns to capture your knights
05:59:01 <kallisti> > 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 <lambdabot> ["","+","-",".",",","++","+-","+.","+,","-+","--","-.","-,","[]",".+",".-",...
05:59:23 <kallisti> a bit more efficient than the last one I wrote.
05:59:45 <kallisti> assuming GHC isn't amazing at optimization
06:03:31 <zzo38> DeadlyFugu: Yes, you can do so but it has to be public domain.
06:04:00 <zzo38> (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 <itidus21> 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:41 <DeadlyFugu> Do I just add a new page about my language and put it in the language category?
06:05:45 <DeadlyFugu> (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 <kallisti> yes theoretical machines and physical machines are different things.
06:06:21 <zzo38> DeadlyFugu: Yes, just add a new page, put it in the language category, and add it to the language list.
06:06:46 <zzo38> itidus21: Then suggest using flat pieces as in Chinese chess
06:10:22 <zzo38> 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:12:53 <NihilistDandy> That is, model a system you know to be Turing complete in your language
06:13:15 <kallisti> 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 <DeadlyFugu> Oh, my language could totally do that.
06:13:47 <NihilistDandy> Ifs and gotos are practically sufficient, if not a completely accurate metric
06:13:58 <kallisti> 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 <kallisti> however in some languages this is not as easy as it sounds.
06:14:17 <DeadlyFugu> Yeah, that's impossible to do in mine.
06:14:34 <zzo38> Have you posted the description yet?
06:14:42 <DeadlyFugu> One could hand-convert it, but I doubt I could write a program.
06:14:55 <DeadlyFugu> Nope, trying to figure out how to format it by looking at others.
06:14:55 <kallisti> DeadlyFugu: hand-convert = isomorphism
06:15:47 <kallisti> 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:02 <zzo38> If you format it wrong, that is OK because it can be corrected (by you or by someone else)
06:16:03 <kallisti> that's essentially what an isomorphism is.
06:16:45 <kallisti> 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 <kallisti> that means you may want to try another way.
06:17:59 <kallisti> DeadlyFugu: if + goto + unbounded memory that can be accessed
06:18:17 <kallisti> "at an arbitrary location at an arbitrary point in time"
06:18:22 <kallisti> probably means it's turing complete.
06:18:46 <zzo38> Some esolangs are made up it is difficult to figure out the computation class
06:18:52 <DeadlyFugu> Well, I'm going to just say mine is, since I can convert all of mine into BF equivalents.
06:19:22 <zzo38> But can you convert any brainfuck code into your program too?
06:19:59 <DeadlyFugu> Er... I'm trying to write it but I keep typign here. There is no link yet XD
06:21:39 <DeadlyFugu> How would I format a link to the interpreter?
06:22:07 <DeadlyFugu> It appears to go under a 'External Resources' header...
06:22:18 <DeadlyFugu> Meh, I'll just save now. Set up a .zip for the interpreter later.
06:22:26 <zzo38> Use [ and then the URL and space and text and ]
06:22:39 <zzo38> Put * at the front of the line to make a bulleted list
06:22:53 <DeadlyFugu> NihilistDandy, link so far: http://esoteric.voxelperfect.net/wiki/Mineso
06:23:07 <DeadlyFugu> The bot on here can run code written in it, I got my interpreter set up on it.
06:24:16 <DeadlyFugu> '-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:36 <DeadlyFugu> >11111111111 prints it as an int (I need to make that shorter :S)
06:24:50 <DeadlyFugu> >1111111 is available, and makes sense.
06:25:01 <DeadlyFugu> (It's one more then 'print as ASCII char')
06:25:15 <zzo38> Please add more description
06:25:43 <DeadlyFugu> `./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:26:30 <DeadlyFugu> 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 <DeadlyFugu> The unary are treated as unsigned chars.
06:26:59 <HackEgo> #!/bin/sh \ cd ./Mineso \ echo $1 > temp.txt \ ./mineso temp.txt
06:27:30 <HackEgo> MinesoVM \ count.txt \ mineso \ source.txt \ square.txt \ temp.txt
06:27:34 <DeadlyFugu> Yeah, the interpreter is a program made in C++
06:27:50 <HackEgo> -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:28:12 <DeadlyFugu> 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:33 <HackEgo> -1111111=111-11=1111-1=@1111111>111=1>11=@11]11111111@111>11111111111
06:28:44 <DeadlyFugu> That should be called power, not square >_>
06:28:48 <NihilistDandy> `./min.sh -1111111=111-11=1111-1=@1111111>111=1>11=@11]11111111@111>11111111111
06:29:37 <DeadlyFugu> 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 <DeadlyFugu> `./min.sh -1111111=11111-11=111-1=@1111111>111=1>11=@11]11111111@111>11111111111 Five to the power of three
06:31:21 <DeadlyFugu> Even if the cell is a special cell like addition, it'll be set to the following value.
06:43:11 -!- PiRSquared17 has quit (Quit: ChatZilla 0.9.88 [Firefox 9.0.1/20111220165912]).
06:49:48 <itidus21> ok.. where have i gone wrong here :-D
06:51:24 <zzo38> I think > is the wrong prefix and you need ! to separate program from input instead of |
06:51:51 <HackEgo> /home/hackbot/hackbot.hg/multibot_cmds/lib/limits: line 5: exec: bf: not found
06:52:42 <zzo38> You might need the full word "brainfuck"
06:53:34 <HackEgo> 2007-12-30.txt:21:43:02: <ehird`_> say (parse ",[.,]")
06:54:02 <HackEgo> 2009-05-03.txt:08:29:05: <GregorR> !daemon cat bf ,[.,]
06:54:09 <zzo38> I don't know for sure what is the correct way, though
06:54:19 <HackEgo> 2008-10-10.txt:20:15:34: <fungot> +ul ((^bf ,[.,]!+ul )SaS(:^)S(optbot)!):^
06:54:22 <zzo38> Maybe the prefix is ! instead of `
06:55:44 <zzo38> Yes, ^ is the correct prefix
06:56:15 <itidus21> was not substantially hard to determine thanks to log
07:01:11 <fungot> a`_^]\[ZYXWVUTSRQPONMLKJIHGFEDCBA@?>=<;:9876543210/.-,+*)('&%$#"! ..<CTCP>h
07:10:48 <DeadlyFugu> NihilistDandy, http://esoteric.voxelperfect.net/wiki/Mineso Did I miss anything?
07:10:59 <DeadlyFugu> (I haven't gotten around to putting in examples yet, I know)
07:16:30 <itidus21> i think my typing above shows im not exactly an esolang wizard
07:16:43 <itidus21> but still, i approve of mineso
07:24:26 <itidus21> i think memory mapping is cool
07:27:20 <itidus21> i guess thats not quite what you're doing there, but it reminds me of it.. maybe it is
07:30:16 <kallisti> that autovification is actually a pain in the ass sometimes.
07:32:46 <kallisti> !perl %h = (1 => 2); $h{foo} = 'bar'; print %h
07:32:57 <kallisti> !perl %h = (1 => 2); $h{foo}->{bar}; print %h
07:32:57 <EgoBot> 12fooHASH(0x7f87b333cb98)
07:33:07 * itidus21 ponders what a samurai would look like in a plague doctor mask
07:33:11 <kallisti> !perl %h = (1 => 2); $h{foo}->{bar}; print keys %h
07:33:49 <kallisti> !perl %h = (1 => 2); $h{foo}->{bar}; delete $h{foo}; print keys %h
07:36:07 <kallisti> 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 <kallisti> as checking a dereference path does not suggest that you want it to exist in the future.
08:00:37 <kallisti> @hoogle (Read a, Show a) => String -> (a -> a) -> String
08:00:38 <lambdabot> Prelude iterate :: (a -> a) -> a -> [a]
08:00:38 <lambdabot> Data.List iterate :: (a -> a) -> a -> [a]
08:00:38 <lambdabot> Prelude dropWhile :: (a -> Bool) -> [a] -> [a]
08:04:46 <kallisti> > (\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 <lambdabot> "99 bottles of beer on the wall. 99 bottles of beer. Take one down pass it ...
08:05:03 <kallisti> @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 <lambdabot> 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:12:32 <kallisti> > 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 <lambdabot> Couldn't match expected type `[GHC.Types.Char] -> m'
08:12:42 <kallisti> > 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 <lambdabot> "99 bottles of beer on the wall99 bottles of beer. Take one down pass it ar...
08:12:56 <kallisti> > 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 <lambdabot> "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 <kallisti> @pl (\g f x -> g x ++ f x ++ ". Take one down pass it around, " ++ g (x-1))
08:19:10 <lambdabot> ap ((.) . liftM2 (++)) (flip (liftM2 (++)) . ((". Take one down pass it around, " ++) .) . (. subtract 1))
08:19:14 <kallisti> @pl (\f g x -> g x ++ f x ++ ". Take one down pass it around, " ++ g (x-1))
08:19:15 <lambdabot> liftM2 ap ((++) .) . (. (((". Take one down pass it around, " ++) .) . (. subtract 1))) . liftM2 (++)
08:19:21 <kallisti> @pl (\x f g -> g x ++ f x ++ ". Take one down pass it around, " ++ g (x-1))
08:19:22 <lambdabot> ap ((.) . ap . ((++) .) . flip id) (ap (flip . (((.) . (++)) .) . flip id) (((". Take one down pass it around, " ++) .) . flip id . subtract 1))
08:19:35 <kallisti> @pl (\x g f -> g x ++ f x ++ ". Take one down pass it around, " ++ g (x-1))
08:19:36 <lambdabot> ap (ap . (((.) . (++)) .) . flip id) (ap ((.) . flip . ((++) .) . flip id) (((". Take one down pass it around, " ++) .) . flip id . subtract 1))
08:21:08 -!- augur has joined.
08:24:47 <NihilistDandy> @type ((.) . (.) . (.)) ((+).(+)) (((+) .) . (+)) 2 3 4 (+1) 5
08:24:58 <NihilistDandy> > ((.) . (.) . (.)) ((+).(+)) (((+) .) . (+)) 2 3 4 (+1) 5
08:25:35 <kallisti> probably needs more instances.
08:25:47 <NihilistDandy> > ((.) . (.) . (.)) ((+).(+)) (((+) .) . (+)) 2 3 4 (+1) 6
08:25:53 <NihilistDandy> > ((.) . (.) . (.)) ((+).(+)) (((+) .) . (+)) 2 9 4 (+1) 6
08:26:08 <oerjan> :t \g f -> concat . sequence [g, f, const ". Take one down pass it around, ", g . pred]
08:26:08 <lambdabot> oerjan: You have 1 new message. '/msg lambdabot @messages' to read it.
08:26:09 <lambdabot> forall b. (Enum b) => (b -> [Char]) -> (b -> [Char]) -> b -> [Char]
08:26:20 <NihilistDandy> Had to use a mix of djinn and pl to figure out the implementation :D
08:26:44 <oerjan> kallisti: testing the police filters, or something?
08:27:07 <kallisti> oerjan: lol, no testing my IRC bot, actually.
08:27:49 <NihilistDandy> oerjan: Any idea why that would typecheck in ghci, run on lambdabot, but then not run in ghci?
08:29:03 <oerjan> :t curry $ \gf -> concat . sequence . sequence [fst, snd, const $ const ". Take one down pass it around, ", (. pred) . fst]
08:29:04 <lambdabot> Couldn't match expected type `[a]'
08:29:04 <lambdabot> against inferred type `b -> [Char]'
08:29:04 <lambdabot> Probable cause: `$' is applied to too few arguments
08:29:13 <oerjan> :t curry $ concat . sequence . sequence [fst, snd, const $ const ". Take one down pass it around, ", (. pred) . fst]
08:29:14 <lambdabot> Couldn't match expected type `[a]'
08:29:14 <lambdabot> against inferred type `b -> [Char]'
08:29:40 <oerjan> :t sequence [fst, snd, const $ const ". Take one down pass it around, ", (. pred) . fst]
08:29:41 <lambdabot> forall a. (Enum a) => (a -> [Char], a -> [Char]) -> [a -> [Char]]
08:30:09 <oerjan> :t concat . sequence . sequence [fst, snd, const $ const ". Take one down pass it around, ", (. pred) . fst]
08:30:10 <lambdabot> Couldn't match expected type `[a]'
08:30:10 <lambdabot> against inferred type `b -> [Char]'
08:30:10 <lambdabot> Probable cause: `$' is applied to too few arguments
08:31:38 <oerjan> :t curry $ (concat .) . sequence . sequence [fst, snd, const $ const ". Take one down pass it around, ", (. pred) . fst]
08:31:39 <lambdabot> forall a. (Enum a) => (a -> [Char]) -> (a -> [Char]) -> a -> [Char]
08:32:01 <oerjan> better than lambdabot, anyhow
08:32:50 <kallisti> 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 <kallisti> oerjan: uh, if that's what you're talking about. I think that's what you're talking about.
08:34:12 <oerjan> NihilistDandy: try import Control.Monad.Instances
08:35:35 <NihilistDandy> Nope. Still the same error. No instance for (Num (b0 -> b0))
08:36:08 <oerjan> yeah that's lambdabot specific.
08:36:25 <kallisti> NihilistDandy: lambdabot has fun instances for functions
08:36:48 <NihilistDandy> It's just odd that it typechecks but doesn't work :/
08:37:43 <oerjan> 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 <NihilistDandy> @type ((.).(.).(.)) ((+).(+)) (((+).).(+))((.).(.).(.)) ((+).(+)) (((+).).(+))
08:37:52 <lambdabot> Occurs check: cannot construct the infinite type: a = f a
08:40:27 <kallisti> `worlds --swedish --finnish 25
08:40:28 <oerjan> kallisti: there wasn't any link, just a weird message that would get the police on my door under ridiculous circumstances
08:40:36 <HackEgo> /home/hackbot/hackbot.hg/multibot_cmds/lib/limits: line 5: exec: worlds: not found
08:40:45 <HackEgo> 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 <kallisti> oerjan: oh, well, nevermind. :P
08:41:52 <kallisti> oerjan: unfortunately I don't have a Norwegian dictionary.
08:41:55 <lambdabot> Data.Generics.Schemes everywhereBut :: GenericQ Bool -> GenericT -> GenericT
08:41:55 <lambdabot> Data.Generics.Aliases unGQ :: GenericQ' r -> GenericQ r
08:42:25 <oerjan> i don't think i have one either.
08:42:34 <NihilistDandy> @hoogle (Num (b-> b), Num b) => b -> b -> b -> (b -> b) -> b -> b
08:43:11 <HackEgo> http://codu.org/projects/hackbot/fshg/index.cgi/raw-file/tip/paste/paste.26331
08:43:26 <oerjan> 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 <kallisti> oerjan: what encoding do you think /usr/share/dict/norsk is going to be?
08:44:50 <oerjan> either iso-8859-1 or utf-8
08:45:29 <kallisti> it's "ISO-8859" which could be like 10 different things
08:45:52 <oerjan> well yeah but at least the first few are ~ latin-
08:46:34 <oerjan> oh i guess it could be that iso-8859-15 which replaces something with the euro sign and maybe other stuff
08:46:56 <oerjan> but none of that is going to differ in norwegian, anyhow.
08:47:18 <kallisti> I ask because I had a fun time getting Bulgarian to work earlier.
08:47:30 <kallisti> turns out the dictionary file is in windows-1251
08:47:59 <DeadlyFugu> Hrm, gonna try a 99 bottles of beer in my esolang. Should be fun/incredibly long.
08:49:41 <DeadlyFugu> Well, not that long if compared to malbolge...
08:50:33 <oerjan> <monqy> liskell (canned laughter) <-- you know that actually exists, right?
08:51:58 <kallisti> `fetch http://dl.dropbox.com/u/16495819/Norwegian
08:52:02 <HackEgo> 2011-12-24 08:52:02 URL:http://dl.dropbox.com/u/16495819/Norwegian [796190/796190] -> "Norwegian" [1]
08:52:05 <kallisti> `fetch http://dl.dropbox.com/u/16495819/words.pl
08:52:08 <HackEgo> 2011-12-24 08:52:07 URL:http://dl.dropbox.com/u/16495819/words.pl [4372/4372] -> "words.pl" [1]
08:52:34 <kallisti> `run chmod +x words.pl; mv words.pl bin/words; mv Norwegian share/WordData/Norwegian
08:52:42 <HackEgo> 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:52 <HackEgo> 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:24 <kallisti> `words --norwegian --swedish --finnish 25 # 3x Scandinavia combo
08:53:27 <DeadlyFugu> Is that from a list of 1M english worrs?
08:53:29 <HackEgo> 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 <kallisti> DeadlyFugu: eng-1m is the default
08:53:51 <DeadlyFugu> Well, that's a pretty fast algorithm there.
08:53:56 <oerjan> ringens, platene, possibly "daterene" (half english loan) and delenes are genuine words
08:54:05 <HackEgo> 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 <kallisti> oerjan: it happens a bit more often in this algorithm due to the increased gram size.
08:54:32 <kallisti> but the result is the results appear more "familiar"
08:54:38 <DeadlyFugu> 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:53 <kallisti> DeadlyFugu: my first version of this was slooooow.
08:55:01 <oerjan> lønnens, sæteraids (well it's an obvious compound word which i _hope_ finds no use), småle
08:55:19 <oerjan> actually maybe not, would be seteraids
08:55:40 <kallisti> 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:53 <oerjan> DeadlyFugu: the kind of aids you get in a mountain cottage
08:56:07 <oerjan> DeadlyFugu: i mean it's not actually spelled with æ
08:56:29 <kallisti> `addquote <oerjan> DeadlyFugu: the kind of aids you get in a mountain cottage
08:56:32 <HackEgo> 774) <oerjan> DeadlyFugu: the kind of aids you get in a mountain cottage
08:56:32 <oerjan> or well, cottage isn't quite right, i don't know the english word.
08:56:38 <DeadlyFugu> So wait, what does steraids really mean?
08:56:59 <oerjan> it's where you herd cows or sheep in the summer
08:57:09 <kallisti> `words -N --norwegian --swedish --finnish 25 # BATTLE OF THE NORTHERNERS, WHO WINS THE UNINTERPOLATED BATTLE
08:57:13 <HackEgo> 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 <kallisti> oerjan: is this some sort of norse mythological prophecy coming to pass?
08:58:50 <kallisti> according to fizzie the finnish generator is actually pretty palatable.
08:59:05 <HackEgo> 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 <oerjan> kallisti: incidentally, "slaget" means the battle, so i think norwegian won.
08:59:53 <oerjan> sadly benre doesn't mean uninterpolated, or anything.
09:00:51 <oerjan> hånde is an archaic word, old dative of hånd "hand"
09:01:24 <oerjan> used in the set phrase "til hånde" which i'm not at the spot sure of the exact meaning of.
09:02:24 <oerjan> sårbard could have been a word. wound bard, or something, except bard is english.
09:03:00 <kallisti> `words --eng-all --norwegian 25
09:03:06 <HackEgo> 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 <oerjan> and senkrefisk - i don't know what it means, but i've heard weirder tool names
09:03:39 <kallisti> eng-all tends to be a bit noisy
09:03:42 -!- itidus21 has quit (Ping timeout: 248 seconds).
09:03:52 <oerjan> artere could be a latin loan, if latin had such a word
09:03:58 <kallisti> probably because it's huge and has words that are probably at best borderline "English"
09:04:38 <oerjan> a juggernaut dictionary
09:04:59 <HackEgo> 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:09 <HackEgo> Unknown option: e \ Unknown option: l \ Unknown option: p
09:05:33 <HackEgo> 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:06:04 <DeadlyFugu> A train! Those catalan people are genious!
09:06:20 <kallisti> oerjan: I left the --canadian-english-insane like that for obvious reasons.
09:06:36 <NihilistDandy> oerjan: google translate suggests that artere can be translated from Norwegian as "species"
09:06:40 <HackEgo> frowalkee chreimagh bascred binjer lieh-laue lheir-chlag eiy athaniarrag lieh-hooil birrinagh
09:06:50 <NihilistDandy> I don't know how well I trust their Northern tongues :|
09:06:50 <oerjan> NihilistDandy: except it's actually arter
09:07:14 <DeadlyFugu> Oh, there really is a manx language >_>
09:07:24 <kallisti> oerjan: well it go arter from the norwegian dataset, and then got the e from english. :P
09:08:01 <kallisti> with "gaelic" being scottish gaelic but I really don't know for sure.
09:08:25 <DeadlyFugu> Why no eastern (excluding russian) languages on the list?
09:08:46 <oerjan> kallisti: arterie, arter and partere are all english words, so i'm not so sure of that.
09:08:46 <kallisti> in the case of Chinese, laziness. in the case of all the others, lack of data.
09:08:59 <kallisti> oerjan: they got superboosted by both languages. :P
09:09:43 <kallisti> 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:10:24 <DeadlyFugu> So wait, can't you find a Korean or Japanese dataset-thingy?
09:10:26 <kallisti> if you want to do it yourself feel free, I can show you where the data is and also my script.
09:10:33 <oerjan> DeadlyFugu: *norwegian, i said
09:13:11 <kallisti> http://books.google.com/ngrams/datasets here's the data
09:13:31 <kallisti> http://books.google.com/ngrams/datasets
09:14:19 <kallisti> 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 <DeadlyFugu> That looks harder to read than some esolangs >_>
09:14:50 <DeadlyFugu> I'm guessing people who know Perl can make sense of that though.
09:14:51 <kallisti> default encoding is utf8, default filter is "pretty sane"
09:15:03 <kallisti> and, yes. for the most part. Though I occasionally do some dubious things.
09:16:05 <HackEgo> 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 <DeadlyFugu> kallisti: That list only has a few languages, where'd you get the rest from?
09:16:28 <oerjan> isn't it just a matter of dropping a dictionary file there?
09:16:51 <kallisti> I don't build the ngram data from a raw dictionary on each invocation, that would be insane and inefficient.
09:17:07 <kallisti> I guess I could build it on the fly, save it, and then use it later, or something.
09:17:13 <kallisti> but that requires encoding information.
09:17:36 <kallisti> I think it's better to have the two seperate
09:17:43 <kallisti> I could add the build script to hackego I guess.
09:18:23 <HackEgo> http://codu.org/projects/hackbot/fshg/index.cgi/raw-file/tip/paste/paste.10605 \ cat: `which words`: No such file or directory
09:18:30 <HackEgo> http://codu.org/projects/hackbot/fshg/index.cgi/raw-file/tip/paste/paste.17595
09:18:41 <kallisti> DeadlyFugu: if that script is difficult to read, the actual words command itself is probably more difficult.
09:19:43 <DeadlyFugu> 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:20:08 <monqy> (word is implemented in perl)
09:20:35 <kallisti> the best language for high performance statistical computation.
09:20:54 <HackEgo> Argument "canadian" isn't numeric in int at /hackenv/bin/words line 141. \
09:21:14 <monqy> speaking of statistical, is there anything special about R?
09:21:42 <monqy> programming language for doing statistical stuff i think??
09:22:05 <monqy> i dunno much about it other than cpressey made a bot in it that used unicode snowmen to do string processing
09:22:12 <DeadlyFugu> kallisti: Replace --canadian with --perl? :D
09:23:24 <monqy> im now dead inside
09:23:38 <monqy> what about it looks like php the $s?
09:23:53 <DeadlyFugu> The $'s are all I remember from PHP...
09:24:06 <kallisti> hey bash Haskell looks like perl too
09:24:30 <kallisti> I change my mind for example midsentence
09:24:32 <monqy> haskell doesn't really have it in the same places
09:24:34 <kallisti> and then forgot to erase the old one
09:24:38 <kallisti> so I'll just roll with it instead. :P
09:24:43 <monqy> it is entirely different??
09:25:04 <kallisti> SUPERFICIAL RESEMBLANCE k THAT'S THE IMPORTANT THING FOR THIS DISCUSSION
09:25:51 <DeadlyFugu> my $data = $_->[0]; << What does that even do?
09:26:51 <kallisti> $_ 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:15 <kallisti> here it's referring to a reference to an array. normally to dereference an array you use @{$var}
09:27:28 <DeadlyFugu> I can slightly understand want's happening there.
09:27:34 <kallisti> but for a simple variable you can use @$_ as a shorthand
09:28:12 <kallisti> to get a subscript from an array ref you would have to do (@{$_}[0])
09:28:14 <oerjan> DeadlyFugu: all the special variables have non-alphanumeric names. also longer alphanumeric ones, with the use english; pragma
09:28:30 <kallisti> so, another shorthand that perl has is that you can write ->[0] which does the dereference as well as the subscript.
09:28:42 <zzo38> Other than Perl, there is also AWK, which some features of Perl are based on.
09:29:21 <DeadlyFugu> I only know C/C++/Java/C#/Whateverelsecamefromthem. Perl would appear to be radically different.
09:29:40 <kallisti> but otherwise it descends from the C/C++ "language family"
09:29:44 <oerjan> perl still has basic c-like block structure
09:29:45 <monqy> not lots of variety there
09:29:56 <zzo38> DeadlyFugu: O, you don't know about Haskell programming?
09:30:17 <monqy> not scary at all???
09:30:32 <kallisti> monqy: we will have to enlighten him.
09:30:45 <oerjan> 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 <kallisti> but first we'll probably have to teach him some basic programming concepts related to functional programming.
09:31:00 <zzo38> 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 <DeadlyFugu> zzo38: That's why I found it scary. I'm not that good with maths.
09:31:47 <oerjan> you sometimes need it for lambdabot one-liners, since you cannot use indentation to disambiguate.
09:32:36 <DeadlyFugu> oerjan: There's more to C++ and Haskell then just { blocks. Bash is a C derivative if you go by that.
09:32:45 <kallisti> DeadlyFugu: one major difference between perl and those languages you listed is that Perl is dynamically typed.
09:33:35 <monqy> DeadlyFugu: nahhhh, c++ and haskell are just {} blocks & nothing else
09:33:46 <monqy> almost the same language, really
09:34:02 <oerjan> so does static typing -----###
09:34:11 <monqy> dynamic checking is awful B)
09:34:13 <zzo38> 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 <DeadlyFugu> Oh lol, mistook dynamic types for dynamic programming.
09:34:27 <Sgeo> Can I just say that it does bother me how many language extensions Haskell has?
09:34:48 <Sgeo> Lisps don't really need language extensions
09:34:57 <monqy> but they have them anyway
09:35:20 <kallisti> I think language extensions are good.
09:36:09 <zzo38> 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 <monqy> for scheme, there's srfis http://srfi.schemers.org/ a lot if not all of which could be considered language extensions
09:36:33 <monqy> dunno about other lisp flavours
09:36:57 <monqy> is clos regarded as an extension to common lisp
09:36:58 <oerjan> > nubBy(((>1).).mod)[2..] -- some unscary haskell
09:36:58 -!- itidus21 has joined.
09:37:08 <oerjan> > nubBy(((>1).).mod)[2..] -- some unscary haskell
09:37:22 <oerjan> did i do that wrong :(
09:37:49 <oerjan> > nubBy(((>1).).gcd)[2..] -- i got the two versions confused
09:37:51 <lambdabot> [2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97,101...
09:38:13 <kallisti> DeadlyFugu: some other differences include a preference for small slow easy-to-write programs over correct fast ones.
09:38:23 <kallisti> DeadlyFugu: perl is very slow.
09:38:34 <monqy> Sgeo: why wouldn't lisps need language extensions? what is a language extension? are they ever needed?
09:38:54 <DeadlyFugu> oerjan: Is nubBy a function someone wrote earlier?
09:38:59 <monqy> Sgeo: and why does it bother you that many people have extended haskell?
09:39:04 <oerjan> DeadlyFugu: it's in the standard library
09:39:07 <kallisti> !perl use feature 'say'; say "Hello, World!";
09:39:09 <lambdabot> nubBy eq (x:xs) = x : nubBy eq (filter (\ y -> not (eq x y)) xs)
09:39:24 <DeadlyFugu> Well, that's pretty cool, if you can make it print all primes in very few characters.
09:39:26 <monqy> DeadlyFugu: you are most likely reading it incorrectly
09:39:31 <Sgeo> 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:43 <zzo38> 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 <kallisti> DeadlyFugu: there are other things it can do very quickly.
09:39:45 <monqy> Sgeo: what does that mean
09:39:53 <kallisti> DeadlyFugu: er, with few lines of code.
09:40:04 <DeadlyFugu> kallisti: How fast is Perl compared to Java or .NET?
09:40:10 <Sgeo> monqy, it means not needing to change the compiler to make a language extension
09:40:15 <monqy> DeadlyFugu: by Perl you mean perl?
09:40:20 <Sgeo> monqy, I guess I'm thinking more like Forth than like Lisp
09:40:31 <monqy> kallisti: languages don't have speeds
09:40:44 <zzo38> And in Forth, most kind of language extensions can be written in Forth itself as part of the program.
09:40:47 <kallisti> monqy: you don't have to tell me that.
09:40:58 <monqy> kallisti: it was secretly directed at DeadlyFugu
09:41:18 <Sgeo> zzo38, indeed, unlike Haskell.
09:41:33 <kallisti> DeadlyFugu: but yeah the perl (implementation) is among the slowest commonly used languages.
09:41:36 <zzo38> If Haskell could somehow have something like that (don
09:41:47 <kallisti> slower than Python and Ruby and other dynamically typed scripting languages.
09:42:19 <DeadlyFugu> kallisti: So, why you use it? (Especially for an algorithm such as your word one)
09:42:22 <kallisti> perl 6 is doing some interesting stuff with allowing the syntax to be redefined at runtime.
09:42:23 <monqy> but implementation speed doesn't matter anyway right
09:42:33 <monqy> DeadlyFugu: because it's expressive???
09:42:45 <kallisti> DeadlyFugu: I felt like it. It's easy to write. speed wasn't a primary concern.
09:42:51 <oerjan> > fix((0:).scanl(+)1) -- ye other standard example
09:42:52 <lambdabot> [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 <zzo38> 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 <monqy> DeadlyFugu: espressive?? what's grass
09:43:17 <kallisti> > let fibs = 0 : 1 : zipWith (+) fibs (tail fibs) in fibs -- this is my favorite
09:43:18 <lambdabot> [0,1,1,2,3,5,8,13,21,34,55,89,144,233,377,610,987,1597,2584,4181,6765,10946...
09:44:02 <DeadlyFugu> You can make ASCII art to express your feelings, without disrupting the flow of the program ^^
09:44:16 <kallisti> DeadlyFugu: do you know what he meant by expressive though?
09:44:44 <kallisti> these things are important. :>
09:45:32 <oerjan> kallisti: MINE IS SHORTER
09:45:35 <DeadlyFugu> 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 <monqy> DeadlyFugu: which other programming languages?
09:46:06 <DeadlyFugu> Ones which aren't similar to Perl (Likes C or Fortran or ASM)
09:46:15 <kallisti> 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:39 <kallisti> of course. that's like... its thing.
09:46:40 <monqy> DeadlyFugu: just like C could be funky if you only knew Prolog?
09:46:58 <kallisti> C# is like "Java with better language features and not quite as fast but that's okay"
09:47:26 <DeadlyFugu> Eh? I've used both C# and Java, and C# in the end just didn't seem right.
09:47:32 <Sgeo> Java's vaguely catching up
09:47:40 <Sgeo> It's getting lambdas at some point
09:47:47 <kallisti> it's literally almost the same language, but with more features.
09:47:51 <monqy> how can catching up be described as vague
09:48:04 <kallisti> DeadlyFugu: choice of IDE should not affect your opinion of languages.
09:48:05 <DeadlyFugu> (VSC# vs Eclipse for Java. But that's unrelated to the language itself)
09:48:30 <DeadlyFugu> 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 <DeadlyFugu> Although VS has some pretty neat auto-complete.
09:48:43 <zzo38> I have written one Java program, which is a command-line interface to Apache POIFS, it is called DocFileExtractor
09:49:24 <monqy> I haven't written java in a long time
09:49:31 <DeadlyFugu> monqy: Really? Don't they like... speed up your coding or something?
09:49:45 <DeadlyFugu> They would appear to speed mine up substantially.
09:50:21 <monqy> I forget the specifics but generally how they manage things
09:50:24 <monqy> it has been a while
09:50:26 <kallisti> 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:54 <zzo38> 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 <monqy> besides, coding speed isn't that much of an issue
09:51:03 <monqy> ideas speed is the issue
09:51:11 <monqy> assuming you use a half-decent language that is
09:51:34 <monqy> oh that and the speed of dealing with the pains of your language
09:51:47 <DeadlyFugu> monqy: All of that depends on the person.
09:52:02 <oerjan> 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 <monqy> kallisti: with some pains, sure
09:52:32 <kallisti> DeadlyFugu: also the reason perl uses $_ instead of $i is because $_ is used in many other ways besdies just loops.
09:52:35 <oerjan> it essentially requires an implementation with parallel worlds.
09:52:39 <monqy> DeadlyFugu: do these people use crap languages
09:52:39 <kallisti> also $_ is not an actual index
09:53:13 <kallisti> to use $i would suggest that you're using an index, when you're not.
09:53:19 <monqy> what do you mean by the value itself
09:53:25 <kallisti> the value being iterated over.
09:53:26 <monqy> in regards to mutation and friends?
09:53:36 <kallisti> monqy: are you familiar with foreach loops? :P
09:53:40 <kallisti> that is what I'm talking about.
09:53:44 <zzo38> 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:48 <monqy> my brain kind of died
09:54:00 <oerjan> 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 <monqy> i forgot that indices are actually a thing ahahahahahhhhaah
09:54:11 <kallisti> monqy: it's okay Haskell mind virus does weird things it's okay
09:55:07 <kallisti> DeadlyFugu: for example a lot of built-in functions will use $_ when a specific argument isn't supplied.
09:55:51 <kallisti> !perl @x = qw(a b c); print for @x;
09:56:01 <kallisti> here I'm using print with no arguments, which defaults to print $_
09:56:06 <DeadlyFugu> monqy: <monqy> besides, coding speed isn't that much of an issue \ <monqy> ideas speed is the issue
09:56:19 <monqy> DeadlyFugu: 01:50:45 < monqy> assuming you use a half-decent language that is
09:56:21 <DeadlyFugu> I'm stating some people can come up with ideas faster then they can code.
09:56:25 <zzo38> oerjan: Can you give some example too? Including my type?
09:56:32 <monqy> DeadlyFugu: must be that they use bad languages
09:56:48 <kallisti> monqy: does Haskell allow you to code at the SPEED OF IDEAS
09:56:50 <monqy> (the joke is that all languages are bad)
09:56:51 <zzo38> And what are exactly their problems?
09:56:51 <DeadlyFugu> No, I'm stating they can come up with ideas fast, not that the coding is slow.
09:57:13 <kallisti> monqy wants thoughts to be a programming language.
09:57:19 <kallisti> so he can just appearify things.
09:57:32 <DeadlyFugu> monqy: Pseudo-code is the best your going to get :(
09:57:32 <kallisti> until that point all languages are bad.
09:57:38 <monqy> DeadlyFugu: pseudocode is awful too
09:57:42 <itidus21> 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:58:10 <kallisti> DeadlyFugu: can you read that perl code above?
09:58:11 <monqy> (itidus21 is our resident thinker)
09:58:39 <kallisti> 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:45 <Sgeo> itidus21, people can have a hard time understanding what was meant in a natural language
09:59:02 <itidus21> oh wait.. that was sgeo not hackego
09:59:07 <DeadlyFugu> monqy: Wait, isn't pseudocode whatever-you-want-it-to-be?
09:59:08 <HackEgo> 2011-12-19.txt:20:03:28: <itidus21> its not really like birds or boxes :-)
09:59:12 <zzo38> 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 <kallisti> 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 <itidus21> Sgeo: the best example is world peace
09:59:49 <monqy> DeadlyFugu: i was going to say something but it's basically the same as what kallisti said
10:00:37 <oerjan> 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 <kallisti> > let { palindromes alphabet = [0..] >>= (`replicateM` alphabet) >>= (\x y -> (x++y) : map ((x++).(:y)) alphabet) `ap` reverse } in palindromes "abc"
10:00:57 <zzo38> oerjan: Yes, but I am not sure about join.
10:00:58 <lambdabot> ["","a","b","c","aa","aaa","aba","aca","bb","bab","bbb","bcb","cc","cac","c...
10:01:09 <monqy> by basically i mean
10:01:13 <kallisti> DeadlyFugu: the above Haskell generates an infinite list of every palindrome in a given alphabet.
10:01:21 <monqy> there are a lot of difference but the key point remains i think/hope
10:01:40 <monqy> empty string nominated for best palindrome
10:01:51 <itidus21> there is no possible world peace
10:02:08 <DeadlyFugu> kallisti: I can't state that Haskell/Perl/whathaveyou isn't good for doing algorithms and whatnot.
10:02:32 <kallisti> 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 <DeadlyFugu> 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:03:05 <kallisti> DeadlyFugu: yeah I feel the same way about COBOL
10:03:19 <kallisti> so it seems harder to think about and write.
10:03:25 * Sgeo actually has some familiarity with COBOL
10:03:32 <DeadlyFugu> I've heard of cobol, but I haven't really looked at it much
10:03:57 <oerjan> zzo38: if it doesn't have join, maybe it's an Applicative then, or something?
10:04:26 <kallisti> DeadlyFugu: ...I was attempting to demonstrate the fallacy you were making there, but okay.
10:04:46 <kallisti> argument from ignorance. "I don't know X, therefore it's difficult to understand."
10:05:17 <DeadlyFugu> I just looked Cobol up, and it seemed rather simple.
10:05:26 <zzo38> I think it would be: lift x = IOT ($ x); liftIO x = IOT (fmap return x >>=);
10:05:26 <Sgeo> I think I'm now capable of writing a one-liner cat program in Haskell
10:06:08 <Sgeo> kallisti, please, let me try
10:06:15 <kallisti> or "copy input to output" cat.
10:06:21 <zzo38> 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:07:00 <kallisti> there are two distinct things that "cat program" could mean
10:07:07 <Sgeo> :t System.Environment.getArgs
10:07:09 <kallisti> Sgeo: oh you want to make shell cat? okay, go ahead.
10:07:24 <monqy> kallisti: there's also the third "cat program" that is both of them
10:07:32 <DeadlyFugu> kallisti: I'm guessing shell cat is the one that concatenates them?
10:07:43 * Sgeo looks up readFile
10:07:51 <kallisti> Sgeo: good thing to look up. it's very simple
10:08:01 <kallisti> it pretty much does what it looks like it does.
10:08:09 <monqy> does it read a file
10:08:12 <Sgeo> main = getArgs >>= (join $ mapM_ putStr <$> readFile)
10:08:17 <Sgeo> Does that work?
10:08:34 <kallisti> main = getArgs >>= (join $ mapM_ putStr <$> readFile)
10:08:36 <monqy> first, what does work mean
10:08:37 <kallisti> !haskell main = getArgs >>= (join $ mapM_ putStr <$> readFile)
10:08:41 <EgoBot> runhaskell: syntax: runghc [-f GHC-PATH | --] [GHC-ARGS] [--] FILE ARG...
10:09:07 <Sgeo> Hmm, probably better to not use join and rather use =<< readFile
10:09:07 <DeadlyFugu> 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:11 <itidus21> monqy: that depends on what does means
10:09:11 <Sgeo> But what I wrote should still wok
10:09:20 <kallisti> `run runhaskell <<< 'main = getArgs >>= (join $ mapM_ putStr <$> readFile)'
10:09:34 <HackEgo> \ /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 <Sgeo> kallisti, how do you expect it to do anything without arguments
10:09:40 <kallisti> DeadlyFugu: it uses file handles like just about every other language ever.
10:09:48 <Sgeo> join is not in scope? o.O
10:09:49 <kallisti> Sgeo: was checking that it compiled, and then forgot I need imports.
10:10:05 <Sgeo> Does that count against the one-liner?
10:10:15 <Sgeo> Also System.Environment
10:10:29 <monqy> in conclusion it is impossible to write that sort of cat in one line
10:10:33 <oerjan> mapM_ putStr is almost certainly wrong to use here.
10:11:01 <DeadlyFugu> 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 <monqy> I think sgeo missed things
10:11:40 <Sgeo> What's wrong with map_ putStr?
10:11:49 * DeadlyFugu has, yet again, stated something which is probably entirely stupid
10:11:53 <kallisti> DeadlyFugu: the only difference is abstractions over file IO, the implementation is almost always the same (for linux systems)
10:11:55 <monqy> Sgeo: do you know what (mapM_ putStr) means....
10:11:56 <Sgeo> Although I guess map putStr would make more sense, and wouldn't need the join
10:12:20 <monqy> you should test it
10:12:25 <Sgeo> :t mapM_ putStr
10:12:52 <DeadlyFugu> kallisti: I'm talking about the abstractions.
10:13:05 <kallisti> 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:22 <monqy> DeadlyFugu: "shoving it into memory and using a pointer to that memory" is hardly an abstraction
10:13:24 <kallisti> opens foo.txt in read mode and stores a file handle in $f
10:13:32 <kallisti> now you can read it line by line using <>
10:13:40 <zzo38> oerjan: Does these things I wrote seems to you?
10:13:56 <DeadlyFugu> monqy: Okay, let me reword, "I'm talking about the abstractions, or lack thereof in some cases"
10:14:35 <Sgeo> Doesn't compile
10:14:45 <DeadlyFugu> 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 <HackEgo> http://codu.org/projects/hackbot/fshg/index.cgi/raw-file/tip/paste/paste.20031
10:14:57 <kallisti> while (<$f>) { s/^(.)/\u$1/; print } # capitalizes the first letter of each line
10:15:09 <kallisti> DeadlyFugu: perl is a general purpose languages, there are functions to do one and there are functions to do the other.
10:15:16 <itidus21> i didn't think that out very well
10:15:27 <oerjan> zzo38: i don't know, i think i'm too tired.
10:15:56 <kallisti> DeadlyFugu: I've never heard of a language the restricts you from doing either of those things.
10:15:58 <Sgeo> main = getArgs >>= mapM_ (putStr <=< readFile)
10:16:44 <kallisti> why would I be talking about those. sheesh.
10:16:46 <itidus21> hmmm.. i guess hq9x is not turing complete anyway
10:16:59 <itidus21> i dunno what computing class it is
10:17:05 <DeadlyFugu> 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 <kallisti> Sgeo: bonus points: also output stdin
10:17:10 <monqy> hq9x doesn't exist, itidus21
10:17:24 <Sgeo> kallisti, if there's no arguments?
10:17:24 <kallisti> DeadlyFugu: that is not an opinion.
10:18:00 <monqy> maybe I have problems but it kind of bugs me that sgeo uses ((>>=) and (<=<)) rather than ((>>=) and (>=>)) or ((=<<) and (<=<))
10:18:18 <monqy> like I'm reading one way then suddenly the other
10:18:35 <Sgeo> @hoogle Handle
10:18:35 <lambdabot> Control.OldException handle :: (Exception -> IO a) -> IO a -> IO a
10:19:15 <kallisti> DeadlyFugu: http://docs.oracle.com/javase/1.4.2/docs/api/java/io/RandomAccessFile.html
10:19:27 <Sgeo> I can only think of ugly ways to do it
10:19:37 <kallisti> DeadlyFugu: InputStream also has mark and skip methods that allow similar capabilities, but not arbitrary seeking.
10:19:41 <oerjan> monqy: haskell whiplash!
10:20:04 <Sgeo> My ugly way failed
10:20:06 <zzo38> 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:31 <lambdabot> System.Environment getArgs :: IO [String]
10:20:31 <lambdabot> Graphics.UI.GLUT.Initialization getArgsAndInitialize :: IO (String, [String])
10:20:34 <oerjan> Sgeo: you probably need a case block
10:20:36 <monqy> it often bugs me composition and application are in the directions they are
10:20:48 <monqy> but cases are ugly
10:20:59 <kallisti> monqy: so I take it you never use pattern matching ever in Haskell?
10:21:18 <monqy> no pattern matching, no named arguments, no problems
10:21:22 <Sgeo> If I use a case, can it truly be considered a one-liner?
10:21:32 <monqy> Sgeo: what is a line
10:21:49 <Sgeo> It's not cheating to use { } for stuff?
10:22:16 <zzo38> 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 <kallisti> that depends on what you mean by line.
10:22:20 <oerjan> Sgeo: you don't even need { } if you do it cleverly.
10:22:36 <kallisti> Sgeo: if it makes you feel better use null instead
10:22:57 <monqy> yeah but then you have to use if-then-else
10:23:07 <oerjan> kallisti: also getContents might be better than stdin.
10:23:45 <Sgeo> I know about those but am having trouble fitting them into my currently existing code
10:23:45 <lambdabot> Graphics.UI.GLUT.State glutVersion :: GettableStateVar String
10:23:45 <lambdabot> Graphics.UI.GLUT module Graphics.UI.GLUT
10:23:55 <lambdabot> Data.Generics.Schemes glength :: GenericQ Int
10:24:12 <kallisti> or do lambdas count as extra lines?
10:24:13 <monqy> kallisti: the real way to do it is use listToMaybe and maybe
10:24:17 <DeadlyFugu> Well, the GL didn't end well, but GLUT would apply Haskel can OpenGL O.o
10:24:23 <monqy> one of those things
10:24:40 <monqy> basically do it in a horrible convoluted way
10:24:51 <monqy> but those are the best ways
10:25:17 <Sgeo> @hoogle OpenGL
10:25:17 <lambdabot> Graphics.Rendering.OpenGL module Graphics.Rendering.OpenGL
10:25:18 <kallisti> I like to use maybe when I can.
10:25:31 -!- DeadlyFugu has left ("Happy Christmas, and a Merry New Year, Esoteric Peoples!").
10:26:03 <kallisti> monqy: http://sprunge.us/hSQL I like catMaybes
10:26:22 <monqy> I've used catMaybes. it'sg ood.
10:26:45 <kallisti> I feel it could be generalized.
10:27:32 <kallisti> monqy: but yeah I thought that code was particularly concise.
10:27:43 <kallisti> Haskell is good at combinatorial stuff like that.
10:27:53 <lambdabot> forall (m :: * -> *) a. (MonadPlus m) => [m a] -> m a
10:28:20 <monqy> and it's not DAta.Foldab.el.cOncat either
10:28:27 -!- Vorpal has joined.
10:28:31 <monqy> :t Data.Foldable.Concat
10:28:31 <lambdabot> Not in scope: data constructor `Data.Foldable.Concat'
10:28:33 <monqy> :t Data.Foldable.concat
10:28:33 <lambdabot> forall (t :: * -> *) a. (Data.Foldable.Foldable t) => t [a] -> [a]
10:28:41 <monqy> the t is in all the wrong places...
10:28:43 <kallisti> I haven't looked at Foldable yet.
10:29:13 <monqy> and it's not mconcat aagh
10:29:24 <monqy> maybe it truly doesn't exist anywhere
10:29:41 <kallisti> well I think it needs Eq as well maybe?
10:29:51 <monqy> i think my brain was dead for the last few minutes:
10:29:54 <monqy> would it even make sense
10:29:57 <kallisti> so it ould basically be filter (==mzero)
10:29:58 <monqy> (or has my brain just died now)
10:30:09 <kallisti> unless you can implement it with mplus somehow
10:30:11 <monqy> kallisti: but then you need the unwrapping
10:30:55 <Vorpal> Merry Christmas everyone!
10:31:09 <monqy> something to convert to Maybe whatever and composition with catMaybes "good enough"
10:31:19 <Vorpal> (In Sweden we celebrate on the 24th)
10:31:44 <HackEgo> 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 <kallisti> everything you've ever dreamed of.
10:32:42 <Vorpal> 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 <Vorpal> 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:36 <zzo38> Is this what catMaybes means? (>>= maybe [] return) If so, you could generalize to other MonadPlus
10:33:48 <Vorpal> is it like after-shave?
10:34:06 <zzo38> Other than list monads, that is
10:34:20 <Vorpal> oh and sundets is a perfectly valid word. But I don't know how it translates
10:34:25 <lambdabot> forall b a. b -> (a -> b) -> Maybe a -> b
10:34:41 <Vorpal> oh right: sundets = the strait's
10:35:06 <Vorpal> what a crude language English is
10:35:28 <kallisti> 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 <zzo38> 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 <Vorpal> kallisti, that is a weird expression, why "bees knees"
10:36:32 <Vorpal> it doesn't even make any sense when you think about it
10:36:39 <kallisti> zzo38: less, but I could see it being useful perhaps with IO or something.
10:37:13 <kallisti> Vorpal: http://www.urbandictionary.com/define.php?term=bee's%20knees
10:37:22 <zzo38> 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 <kallisti> Vorpal: it's just a weird old thing that teenagers used to say probably in like the 50s or something.
10:38:00 <Vorpal> I mean, I know what it means, I just wonder why
10:38:23 <kallisti> possible explanations are in the link though
10:38:25 <Sgeo> :t null . drop
10:38:26 <lambdabot> Couldn't match expected type `[a]'
10:38:26 <lambdabot> against inferred type `[a1] -> [a1]'
10:38:26 <lambdabot> Probable cause: `drop' is applied to too few arguments
10:38:52 <kallisti> Sgeo: wait does getArgs include the program name I don't think it does.
10:39:08 <zzo38> instance Alternative IO where { empty = fail []; x <|> y = catch x $ \e -> modifyIOError (\z -> if z == userError [] then e else z) y; };
10:39:30 <Vorpal> brb, moving bouncer to another computer
10:39:38 -!- Vorpal has quit (Quit: ZNC - http://znc.sourceforge.net).
10:39:41 <monqy> Computation getArgs returns a list of the program's command line arguments (not including the program name).
10:40:10 -!- Vorpal has joined.
10:41:05 <monqy> >>> is an awfully big operator name
10:42:09 <Sgeo> At least it's not Factor's if
10:42:51 <Sgeo> > 5 [ "Hello print" ] [ ] if
10:42:51 <lambdabot> <no location info>: parse error on input `if'
10:43:02 <Sgeo> > 5 [ "Hello" print ] [ ] if
10:43:02 <lambdabot> <no location info>: parse error on input `if'
10:43:08 <Sgeo> I don't remember if that's the exact thing
10:43:38 <Sgeo> 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 <Sgeo> Wait, probably 5 > not > 5
10:45:41 <monqy> 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 <kallisti> getArgs >>= mapM (readFile >=> putStr) >>= (null >>> guard) >> (putStr =<< getContents)
10:55:42 <kallisti> getArgs >>= mapM (readFile >=> putStr) >>= (null >>> guard) >> (getContents >>= getContents)
10:55:56 <monqy> mmm I forgot about guard; good functionm
10:56:15 <monqy> getContents >>= getContents -- good
10:56:25 <kallisti> getArgs >>= mapM (readFile >=> putStr) >>= (null >>> guard) >> (getContents >>= putStr)
10:57:23 <lambdabot> forall a (m :: * -> *) b. (Monad m) => (a -> m b) -> [a] -> m [b]
10:57:47 <kallisti> I think that should work, unless I'm missing something.
10:57:49 <monqy> I don't th ink that does what you want it to do
10:59:10 <monqy> you're basically throwing out your big list of actions when you bind (null >>> guard)
10:59:40 <monqy> is io even a monadplus?
11:00:07 <kallisti> maybe it's when I see most often
11:00:25 <kallisti> lambdabot didn't complain about the lack of an instance though
11:01:09 <monqy> when makes sense yes
11:01:17 <kallisti> but will still discard the actions
11:01:36 <kallisti> unless I tell to exit or something when not.null
11:02:29 <monqy> hard to name though
11:02:38 <monqy> you didn't mean that
11:02:48 <monqy> hehehehh are you doing that? nice
11:02:57 <kallisti> it's a bit ugly but it lets me keep the same layout.
11:04:46 <kallisti> how do I get it to /not/ discard all of the actions
11:04:50 <kallisti> :t getArgs >>= mapM (readFile >=> putStr) >>= (not >>> null >>> (`when` exitSuccess)) >> (getContents >>= putStr)
11:04:55 <kallisti> I think this suffers the same problem
11:04:59 <monqy> duplicate the actions
11:05:22 <monqy> duplicate the list before you map stuff onto it
11:05:38 <monqy> there are lots of ways to duplicate stuff
11:06:25 <monqy> arrow stuff, join (function monad), list monad stuff...
11:08:44 <lambdabot> forall (a :: * -> * -> *) b c c'. (Arrow a) => a b c -> a b c' -> a b (c, c')
11:09:03 <lambdabot> Ambiguous type variable `c' in the constraints:
11:09:07 <lambdabot> Couldn't match expected type `SimpleReflect.Expr'
11:09:30 <monqy> > show &&& succ $ 5
11:09:49 <monqy> the 5 goes to two places!!
11:10:03 <monqy> &&& is only one way to do it
11:10:24 <monqy> another great one:
11:10:48 <monqy> > ([show, succ] <*>) . return $ 5
11:10:49 <lambdabot> No instance for (GHC.Num.Num GHC.Base.String)
11:11:27 <monqy> i forget how i do that one :(
11:11:36 <oerjan> 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 <monqy> oh right with <*> you have to have all the results be of the same type :(
11:13:16 <lambdabot> forall b. (Show b, Enum b) => b -> (String, b)
11:15:51 <kallisti> I thought the action was already performed. You can't really "throw them away"
11:15:54 <monqy> i wasn't thinking straight
11:16:15 <monqy> you're throwing away your future
11:16:23 <monqy> in a different place
11:16:31 <monqy> a bit earlier than the (null >>> guard)
11:16:37 <kallisti> main = getArgs >>= mapM (readFile >=> putStr) >>= (not . null >>> (`when` exitSuccess)) >> (getContents >>= putStr)
11:17:57 <monqy> now get rid of that exit :(
11:18:17 <kallisti> oh I don't need that anymore do I.
11:20:25 <kallisti> main = getArgs >>= mapM (readFile >=> putStr) >>= (null >>> (`when` (getContents >>= putStr)))
11:21:23 <kallisti> I've been working on this one for a while.
11:21:39 <oerjan> :t (null >>> (`when` ?x))
11:21:40 <lambdabot> forall a (m :: * -> *). (?x::m (), Monad m) => [a] -> m ()
11:21:55 <kallisti> I used >>> instead of . because Monqy likes everything to flow in one direction or something.
11:23:26 <kallisti> I have to agree it does look nice reading it left to right without backtracking.
11:26:00 <kallisti> is there a better way to write:
11:26:19 <kallisti> oh wait I don't need it anymore
11:26:27 <monqy> import Preulude ()
11:27:34 <kallisti> should I ruin this program by implementing command line options?
11:28:05 <kallisti> I'll have to resort to do notation to make it readable.
11:34:52 <kallisti> do you guys prefer flip f x or (`f` x) ?
11:35:25 <kallisti> I usually wish I didn't have to use either, but when I have to I prefer the infix section.
11:35:51 <monqy> whenever i'd have to use either i stop writing haskell and cry to myself
11:36:58 <kallisti> monqy: you must have a stressful life.
11:37:58 <monqy> my trick is to avoid programming
11:41:13 <HackEgo> cat: @{[join ' ', @ARGV]}`: No such file or directory
11:41:19 <kallisti> cat in perl. it even implements the command line options.
11:41:42 <kallisti> print `cat @{[join ' ', @ARGV]}`
11:44:58 <kallisti> <> basically does cat-like file / stdin IO
11:45:44 <kallisti> an EXTREMELY useful thing when writing shell utilities
11:46:10 <fizzie> "print<>" is, though, one of those cats that reads all the input before printing any output.
11:46:31 <kallisti> is more memory efficient, yes.
11:46:59 <kallisti> also won't hang up on infinite stdin I guess.
11:47:01 <monqy> how easy would it be to do the other cat without naming any variables
11:48:06 <kallisti> <> sccans through VARG and reads each file given, then spits them all out to you concatenated together.
11:48:12 <kallisti> if no arguments are given, it gives you stdin
11:48:41 <fizzie> It even handles the "-" argument right.
11:49:05 <kallisti> 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 <fizzie> `run echo foo > tmp.txt; echo bar | perl -e 'print<>' tmp.txt - tmp.txt; rm tmp.txt
11:50:17 <kallisti> main = getArgs >>= mapM (readFile >=> putStr) >>= (null >>> (`when` (getContents >>= putStr)))hm
11:50:25 <kallisti> I had that on my buffer for some reason.
11:51:08 -!- monqy has quit (Quit: hello).
11:51:45 <kallisti> someone should make <> for Haskell and put it in base somewhere.
11:51:57 <lambdabot> forall (m :: * -> *). (Monad m) => Bool -> m () -> m ()
11:52:10 <lambdabot> Control.Monad when :: Monad m => Bool -> m () -> m ()
11:52:10 <lambdabot> System.Posix.Terminal WhenDrained :: TerminalState
11:52:10 <lambdabot> Test.QuickCheck.Property whenFail :: Testable prop => IO () -> prop -> Property
11:54:09 <kallisti> fizzie: unfortunately my code doesn't handle - at all, though I could add it in.
11:55:02 <fizzie> Don't worry, "print<>" doesn't handle "-u" either.
11:55:18 <oerjan> hm what does - do if there is more than one?
11:55:34 <fizzie> 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:56:18 <kallisti> fizzie: what is the point of -u exactly? backwards compatibility with something?
11:58:23 <kallisti> IO could be a MonadPlus though.
11:58:42 <kallisti> mzero = exitSuccess -- or exitFailure
11:59:48 <Vorpal> -u Write bytes from the input file to the standard output without
11:59:48 <Vorpal> delay as each is read.
11:59:53 <Vorpal> kallisti: that is what posix says
12:00:07 <kallisti> man cat on my system says -u is ignored.
12:00:11 <Vorpal> that is what gnu says yes
12:00:17 <Vorpal> kallisti: try man 1p cat
12:00:26 <Vorpal> if you have the required package installed
12:00:34 <Vorpal> otherwise just go and check the posix spec directly
12:01:03 <kallisti> mplus a b = mappend <$> a <*> b
12:01:15 <kallisti> and then have an instance (Monoid a) => IO a
12:01:42 <Vorpal> I only know of one *nix cat implementation in an esolang btw
12:01:49 <Vorpal> most esolang cats are just copy stdin to stdout
12:02:28 <Vorpal> 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 <Vorpal> 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 <Vorpal> kallisti: here it is, if you are interested: http://sprunge.us/NEYE
12:04:13 <Vorpal> btw, it is rather sparse befunge98
12:04:19 <kallisti> I've never properly learned befunge-98
12:04:34 <Vorpal> kallisti: the best way to learn the language is to write an implementation for it
12:04:54 <kallisti> obviously I should begin with a compiler
12:05:08 <Vorpal> fizzie: speaking of which, any progress on jitfunge?
12:05:28 <kallisti> hmmmm jitfunge that's interesting.
12:05:31 <fizzie> No, but I still have hope.
12:05:34 -!- ais523 has joined.
12:05:43 <Vorpal> oh and don't ask me to explain that code. I can't. I wrote it 2010.
12:05:54 <Vorpal> there are plenty of comments though
12:06:06 <ais523> note to self: the 3.5" plug is not the end that goes in the ear
12:06:15 <Vorpal> ais523: you tried that?
12:06:21 <ais523> Vorpal: no, I noticed just in time
12:07:17 <kallisti> hmmm I guess you'd need like a lookahead buffer
12:07:21 <fizzie> 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 <kallisti> 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:08:12 <Vorpal> kallisti: iirc it traces so it is compiled if it is executed again
12:08:27 <fizzie> kallisti: My jitfunge is a tracing jit, in the SpiderMonkey/TraceMonkey fashion.
12:08:41 * kallisti knows absolutely nothing about JIT compilation.
12:09:06 <kallisti> I should learn some things about it.
12:09:41 <Vorpal> 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 <Vorpal> several fingerprints though
12:10:12 <Vorpal> fizzie: how did jitfunge handle fingerprints?
12:10:19 <Vorpal> did it call out or inline the code?
12:10:43 <fizzie> 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:11:23 <fizzie> So it doesn't need to keep track of what the fingerprint instruction-bindings were when entering a trace.
12:11:34 <Vorpal> fizzie: cardinally wrapping traces could be fine wrt boundaries
12:12:20 <fizzie> 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 <Vorpal> hm is (2,0) considered cardinal? I don't think it is right?
12:12:53 <Vorpal> because that could be invalidated iirc
12:13:00 <ais523> Phantom Hoover needs another brick, I think: http://esolangs.org/wiki/There_Once_was_a_Fish_Named_Fred
12:13:16 <ais523> equivalent to BF minus input, and obviously so
12:13:25 <fizzie> 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:58 <Vorpal> 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 <Vorpal> while flying traces probably needs to be redone
12:15:41 <Vorpal> not sure it is worth the effort though
12:16:12 <kallisti> bah, why are all the youtube starcraft 2 casters taking Christmas off.
12:16:21 <kallisti> THEY SHOULD BE CASTING GAMES FOR ME TO WATCH EVERY DAY.
12:16:42 <Vorpal> why are the minecraft guys taking a day off as well, that is even worse
12:17:09 <kallisti> minecraft is not an entertaining sport.
12:17:15 <ais523> couldn't you just look at replays of older games?
12:17:18 <kallisti> you could just play minecraft and be more entertained.
12:17:20 <Vorpal> hey they do have an entry up, I guess they prepared it
12:17:25 <kallisti> ais523: yes, that's what I'm doing.
12:17:28 <kallisti> but they're getting harder to find.
12:17:40 <kallisti> I've already watched most of the old good ones.
12:19:15 <fizzie> 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:22 <Vorpal> fizzie: also j and wrapping
12:20:26 <Vorpal> I forgot how that works
12:20:40 <Vorpal> fizzie: hm do you do a new trace every time the delta changes?
12:21:19 <fizzie> 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 <fizzie> And no, that would be very subtimal.
12:22:02 <Vorpal> I guess if the input to x isn't constant it might be worth splitting the trace there
12:22:28 <fizzie> If it has constant-folded arguments, probably not. I think I do have 'x'-related end-of-trace "type".
12:22:51 <fizzie> 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 <fizzie> 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 <fizzie> 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:29:27 <Vorpal> fizzie: interesting idea
12:29:35 <Vorpal> fizzie: what does it currently compile into for string mode?
12:31:23 <Vorpal> fizzie: btw you know how gcc sometimes compile code like a copy loop into a call to memcpy?
12:31:49 <Vorpal> 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 <Vorpal> (I did find a flag to fix that)
12:34:39 <fizzie> 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 <ais523> Vorpal: hmm, did it have the restrict in the prototype?
12:36:05 <ais523> otherwise, gcc could only have compiled it into a call to memmove instead
12:36:51 <Vorpal> ais523: I believe it did
12:37:18 <ais523> I can see why restrict was invented
12:37:24 <Vorpal> ais523: curiously it didn't seem to be inclined to do the same for the memset implementation
12:37:37 <ais523> it's something that's typically obvious to users, but not to compilers, and helps a lot in implementation
12:37:42 <ais523> also, how often do you use memset?
12:37:55 <ais523> it's not that commonly useful
12:38:05 <oerjan> ais523: is there some way to undo more than one wiki diff in one step when there are later genuine edits?
12:38:17 <Vorpal> ais523: well, I used it to zero the .bss area on boot
12:38:27 <Vorpal> but that is an embedded problem
12:38:39 <ais523> 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 <Vorpal> ais523: anyway it is useful since there is no recalloc
12:39:03 <ais523> Vorpal: but full-of-zero-bits is not the same thing as full-of-zeroes, necessarily
12:39:10 <oerjan> ...that's even more awkward for me than undo'ing twice, alas :(
12:39:12 <ais523> also, full-of-zeroes typically isn't the default state of an object
12:39:32 <ais523> oerjan: indeed, I can never remember how to get diff3 to do what I want
12:39:38 <Vorpal> cfunge manually has a loop to fill with spaces in the static funge space
12:39:53 <Vorpal> ais523: anyway all zeros isn't that uncommon. Why else would .bss even exist?
12:40:08 <oerjan> ais523: it's just that this time zzo's spam deletion actually made things _harder_ to fix :P
12:40:24 <ais523> because C initializes statics to all bits zero, typically
12:40:42 <ais523> Vorpal: typically not directly, but it gets used indirectly, by things like VCSes, all the time
12:40:47 <ais523> either the program itself, or just the concept
12:41:04 <ais523> and I guess it was used more before VCSes became common
12:41:07 <Vorpal> well I hate 3-way merging even when it is a vcs that makes me do it
12:41:28 <ais523> diff3 is for two-way merging
12:41:34 <ais523> the three files are original, new 1, and new 2
12:41:53 <ais523> 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:06 <Vorpal> I guess you need diff4 then
12:43:24 <ais523> wow, I've just discovered that C11 has been released
12:43:32 <ais523> (presumably it actually happened a few days ago and I'm slow as usual)
12:43:32 <Vorpal> ais523: you mean the C standard?
12:43:46 <ais523> so is Vorpal, by the sound of it
12:43:56 <Vorpal> is there a spec available without paying a lot somewhere
12:43:57 <ais523> should I logread the 8th or the 9th?
12:43:57 <fizzie> It's been discussed on-channel at least twice.
12:44:01 <Vorpal> like the last draft or whatever
12:44:06 <fizzie> Well, we're not *that* fast either.
12:44:13 <ais523> Vorpal: not sure yet, but probably there's a last draft around somewhere
12:44:37 <Vorpal> anyway, I wonder how long before gcc has the useful bits of it
12:44:42 <Vorpal> well, gcc + glibc I guess
12:44:47 <HackEgo> 2008-08-13.txt:17:45:08: <asie[draw]> http://asiekierka.boot-land.net/asiecomic11.jpg <- O_O
12:45:04 <fizzie> 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:19 <ais523> wait, it probably doesn't do Perl regexes
12:45:21 <HackEgo> 2011-12-14.txt:08:21:56: <fizzie> Everyone wants a C11 and not a C12, mayhaps.
12:45:28 <ais523> oh, it does that, though, I Think
12:45:49 <fizzie> 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 <ais523> 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:29 <fizzie> 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 <Vorpal> so what is new in C11?
12:47:03 <fizzie> The same things that were new in the draft. :p
12:47:25 <Vorpal> threads, gets removed, anything else?
12:47:32 <Vorpal> was there static asserts or something?
12:47:41 <ais523> [524] ais523 flushq Help not found
12:47:50 <fizzie> Also N1570 is the draft you want -- http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1570.pdf
12:48:00 <ais523> err, why can I not type / today?
12:48:01 <Vorpal> ais523: /flushq is a thing in xchat to clear the local send queue
12:48:11 <ais523> Vorpal: yep, I was checking to see if it was client-side or server-side
12:48:19 <fizzie> Yes, though the XChat help for it is really confusingly said.
12:48:21 <ais523> and simply cannot distinguish / from :, apparently
12:48:27 <fizzie> Usage: FLUSHQ, flushes the current server's send queue
12:48:44 <fizzie> That's "current server's send queue" as in "XChat's send queue for the current server".
12:48:46 <Vorpal> well it means as opposed to for every network you are connected to
12:48:46 <ais523> 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 <fizzie> ais523: That's called Excess Flood.
12:49:04 <Vorpal> ais523: the server doesn't queue your stuff, it disconnects you if you flood
12:49:18 <ais523> Vorpal: it fakelags for a while, doesn't it?
12:49:23 <ais523> or is that always a client feature?
12:49:31 <Vorpal> hm maybe freenode does, don't know
12:49:33 <ais523> I thought excess flood was even more extreme than that
12:49:37 <fizzie> All delayed-sending stuff I know of is client-side.
12:49:38 <ais523> hmm, it's simple enough to test
12:49:39 <Vorpal> usually such lag is client side as well
12:50:33 -!- ais523|direct has joined.
12:50:49 <Vorpal> iirc irc servers mostly have large queues between themselves + smaller queues towards the clients to handle network lag
12:51:47 <ais523> wait, I got that backwards
12:52:37 <ais523> hmm, that all came out instantly for me
12:52:41 <ais523> for everyone else too?
12:52:48 <fizzie> They have the same-second timestamp.
12:52:50 <ais523> so it seems fakelag is indeed a client thing, not a server thing
12:52:57 <Vorpal> -ais523|direct- VERSION you know it's a pain to type this out by hand, right?
12:53:01 <Vorpal> why else would I do it
12:53:21 <fizzie> 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 <ais523> hmm, was that a correctly-formatted ctcp response, and your client just writes it like that?
12:53:25 <ais523> or did I screw up the formatting?
12:53:33 <fizzie> So short lines don't go excess flood so easily than long ones.
12:53:37 <Vorpal> <ais523> for everyone else too? <-- well there are some :02 and some :03
12:53:55 -!- ais523|direct has quit (Client Quit).
12:54:03 <Vorpal> <ais523> hmm, was that a correctly-formatted ctcp response, and your client just writes it like that? <-- not sure
12:54:08 <fizzie> 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 <Vorpal> it writes it like that
12:54:16 <fizzie> Vorpal: And that _Generic thing.
12:54:29 <ais523> Vorpal: heh, it just strips out the control-As in CTCP responses, then
12:54:48 <Vorpal> and didn't we have widechar_t before?
12:55:31 <fizzie> Vorpal: #define flop(X) _Generic(((X), long double: flopl, default: flop, float: flopf) is the usual example, to make type-generic floating-point calls, <tgmath.h> style.
12:55:57 <fizzie> Vorpal: But in general _Generic(expr, type1: expr1, type2: expr2, default: expr3) to dispatch by type.
12:56:57 <fizzie> 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 <Vorpal> fizzie: so why not vararg number of types?
12:57:36 <fizzie> Couldn't decide between C11 and C1x, apparently.
12:57:56 <ais523> fizzie: UTF-16, not UCS-2?
12:58:03 <ais523> UTF-16 is a bit of an awkward format
12:58:21 <fizzie> I would call UCS-2 more awkward, since it can't encode all the characters.
12:58:55 <ais523> UCS-2 is simple but wrong
12:59:04 <ais523> which I consider less awkward than being complex but correct
12:59:24 <fizzie> Vorpal: Also GCC's "unnamed struct/union fields within structs/unions" extension.
12:59:29 <fizzie> Well, GCC's and other compilers'.
12:59:40 <fizzie> I see someone's updated http://gcc.gnu.org/onlinedocs/gcc/Unnamed-Fields.html to refer to C11 already.
13:00:55 <Vorpal> I have to leave, visit relatives. See you tonight
13:01:21 <ais523> Vorpal: what day is Christmas where you are?
13:01:25 <ais523> it's the 25th in the UK, and I think the US too
13:01:31 <ais523> ah, merry Christmas, then
13:01:48 <Vorpal> ais523: merry christmas you too
13:02:02 <fizzie> 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 <Vorpal> fizzie: well like that here yes. It is called christmas eve but the main celebrations are today
13:02:22 <ais523> "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 <Vorpal> ais523: okay, good christmas then
13:02:40 <Vorpal> we say "god jul" in Sweden
13:02:47 <Vorpal> so that would be a literal translation
13:03:08 <Vorpal> now, cya. I might be on over 3G/GSM to my bouncer later
13:05:40 <fizzie> 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 <ais523> ah, that sounds suitably Cstandardish
13:07:23 <fizzie> 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 <fizzie> 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 <fizzie> But I guess if you want some UTF-8 bytes in your program that could be nice.
13:11:39 <fizzie> It's not *much* of an Unicode support, to be honest.
13:14:44 <fizzie> 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 <fizzie> And VLAs have been made optional, with __STDC_NO_VLA__ defined on systems which lack them.
13:17:23 <fizzie> (Same applies to complex numbers.)
13:18:35 <fizzie> 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 <ais523> fizzie: presumably you get a UTF-8 library from somewhere else
13:27:24 <ais523> heh, aligned_alloc sounds like a fun portable way to mmap NULL to something, or else determine that that's impossible
13:27:35 <ais523> you just ask for a bits-in-a-pointer-aligned-pointer
13:28:04 <ais523> OTOH, it's probably not allowed to return NULL on success
13:29:40 <elliott> ais523: context for utf-8?
13:29:41 <lambdabot> elliott: You have 2 new messages. '/msg lambdabot @messages' to read them.
13:29:49 -!- incomprehensibly has joined.
13:30:05 <ais523> elliott: the fact that C11 defines UTF-8 string literals but not UTF-8 library functions
13:30:16 <ais523> so you can write UTF-8 strings easily, but then not do anything with them
13:30:29 <ais523> <fizzie> 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:45 <kallisti> there will be --acro and --wacro, the first one does what wacro used to do
13:47:16 <kallisti> 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 <ais523> 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 <Vorpal> oh and that is over even slower bluetooth
13:47:30 <kallisti> to get a sort of middle ground between "good starting letter" and "good word letter"
13:47:33 <ais523> hmm, that last sentence of mine seems really Vorpallish
13:47:38 <kallisti> which I think will make something similar to word-like acronyms.
13:48:15 <Vorpal> 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 <ais523> elliott_: <ais523> 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 <fizzie> Vorpal: Rest of the news: <fizzie> And VLAs have been made optional, with __STDC_NO_VLA__ defined on systems which lack them. <fizzie> (Same applies to complex numbers.) <fizzie> Oh, and malloc(n) has been complemented with aligned_alloc(a,n) which returns n bytes with alignment a.
13:50:21 <Vorpal> hm 20 kb/s down. Ouch.
13:51:53 <fizzie> 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 <elliott_> 03:26:58: <DeadlyFugu> If someone knew what they were doing, they could easily take down the bot.
13:52:42 <ais523> 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:53:02 <elliott_> it is the duty of every newbie to believe gregor is a complete idiot
13:53:07 <fizzie> ais523: No, the contract has a nominal speed of 50 Mbps and they guarantee that it is at least 25 Mbps.
13:53:26 <ais523> elliott_: well, taking down the bot is easier than hacking into the system it's running on, I suspect
13:53:28 <ais523> but even then, quite hard
13:53:37 <ais523> I could take it down very easily with a kickban ;)
13:53:46 <ais523> just there'd be no reason to do so
13:54:33 <elliott_> 03:31:05: <pikhq_> Inside the UML, you're running as root.
13:55:04 <ais523> elliott_: arguably, a simple `run rm * takes down the bot until someone else does a `revert
13:55:15 <ais523> well, or would do if I remembered to put appropriate options in there
13:55:31 <HackEgo> 361) <Cheery> when I command it to do couple useful operations it instead mutilates my cock.
13:55:40 <ais523> elliott_: heh, how did that work?
13:55:50 <HackEgo> Mineso \ bin \ canary \ karma \ lib \ main \ main.cpp \ min.sh \ paste \ quotes \ share \ wisdom
13:56:08 <ais523> it doesn't commit things that delete too many/all the files
13:56:17 <ais523> so it's like an infinitely long race condition
13:56:37 <elliott_> ais523: no; hint: I did `ls for a reason
13:56:58 <ais523> elliott_: is that the same as `ls normally outputs?
13:57:16 <HackEgo> mkdir: cannot create directory `t/a': No such file or directory
13:57:18 <elliott_> ais523: yes, and you're not looking at it
13:57:23 <HackEgo> Mineso \ bin \ canary \ karma \ lib \ main \ main.cpp \ min.sh \ paste \ quotes \ share \ wisdom
13:57:36 <ais523> I don't see anything particularly notable about it
13:57:42 <ais523> I have read it, but don't get what I should be looking at
13:58:02 <fizzie> Cat ate the canary, eh?
13:58:07 <ais523> aha, it doesn't commit things that delete canary?
13:58:12 <HackEgo> rmdir: failed to remove `t': No such file or directory
13:58:34 <ais523> well, that's pretty easy to bypass
13:58:34 <Vorpal> <fizzie> And VLAs have been made optional, with __STDC_NO_VLA__ defined on systems which lack them. <-- ouch
13:58:59 <fizzie> Vorpal: I suppose it's not very likely a "real" compiler will not implement them.
13:59:03 <Vorpal> <fizzie> (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 <Vorpal> <fizzie> 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 <fizzie> Vorpal: I don't know about complex; though e.g. FFTW does things so that if you #include <complex.h> 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:01:03 <fizzie> (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 <Vorpal> does gcc even support complex numbers properly?
14:01:26 <fizzie> It claims to, on the C99 status page.
14:01:39 <Vorpal> got a link to that? google is painfully slow on this connection
14:02:00 <fizzie> "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 <fizzie> http://gcc.gnu.org/c99status.html
14:02:31 <Vorpal> how can it be hard to support if you support complex numbers anyway?
14:03:18 <Vorpal> "deprecate ungetc at the beginning of a binary file" <-- wait, what would ungetc mean at the beginning of a file anyway?
14:03:56 <Vorpal> hm I guess you could push random stuff into the stream buffer
14:04:06 <Vorpal> ungetc is kind of silly anyway
14:04:17 <fizzie> Yes, or just as a field in the FILE; it only guarantees a single character, after all.
14:04:19 <Vorpal> would be better to simply have a peek function to look at the next char
14:04:44 <fizzie> Anyway yes, imaginary types are imaginary-part-only.
14:04:46 <Vorpal> I mean, that would cover all the reasons for using ungetc I can think of.
14:04:53 <Vorpal> fizzie, how can they be hard to support?
14:05:15 <fizzie> Perhaps out of boredom?
14:05:52 <Vorpal> wasn't there a complex numbers fingerprint?
14:06:14 <ais523> fizzie: GCC need a c11status, too
14:06:43 <Vorpal> hm looks like I do the maths for CPLI by hand, not using complex.h
14:07:14 <Vorpal> quite trivial maths so
14:08:29 <fizzie> "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 <Vorpal> I guess static asserts might be kind of useful. Threads and atomic primitives are definitely useful
14:08:51 <fizzie> That's probably how FFTW manages to do the "native complex if complex.h included" trick.
14:09:19 <fizzie> It's typedef double fftw_complex[2]; in the "usual" case.
14:09:39 <Vorpal> that should be compatible on most systems
14:09:45 <ais523> fizzie: hmm, reminds me of when I saw SunOS-on-sparc defining jmp_buf as int[12]
14:09:55 <fizzie> "C++ has its own complex<T> template class, defined in the standard <complex> 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 <fizzie> 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<double> *x, you can pass it directly to FFTW via reinterpret_cast<fftw_complex*>(x)."
14:10:04 <ais523> or possibly it was a different length from that
14:10:22 <ais523> 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 <ais523> fizzie: well, reinterpret_cast scares people (and probably, /should/ scare people, it's quite an un-C++y thing to do)
14:11:11 <fizzie> typedef long int __jmp_buf[8];
14:11:11 <fizzie> typedef int __jmp_buf[6];
14:11:35 -!- derdon has joined.
14:13:13 <fizzie> (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 <fizzie> They've just cut out the middle man.
14:15:38 <ais523> and I thought "how lucky that everything they needed to store was int-sized"
14:16:09 <fizzie> 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 <ais523> it's weird enough that jmp_buf is mandated to be an array type
14:17:08 <ais523> why go with jmp_buf as an array type but FILE* as a pointer type?
14:17:17 <ais523> they're both opaque structures
14:18:25 <fizzie> 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 <ais523> 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 <ais523> so that's another reason to make it an array, I guess
14:20:26 <fizzie> It could also be just backwards-compatibility-to-whatever-scheme-was-in-use.
14:21:12 <kallisti> fizzie: I wonder to what extent switching + to * would have on combining normalized values.
14:21:21 <kallisti> it would be like "and" instead of "or"
14:21:32 <elliott_> ais523: hey, you haven'ts een my amazing code yet, right?
14:21:59 <ais523> elliott_: more amazing than normal elliott stuff? no
14:22:14 <elliott_> ALL MY CODE IS INFINITELY AMAZING but
14:22:39 <elliott_> (don't wtf at the start, you'll run out of wtfs for the real wtf below all the repetitive stuff)
14:22:50 <kallisti> fizzie: so basically the only paths that are available are the ones shared by the datasets
14:23:59 -!- nooga has quit (Ping timeout: 276 seconds).
14:24:08 <ais523> 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 <kallisti> I sometimes forget that everyone on #esoteric isn't intimately familiar with Haskell.
14:24:37 <fizzie> If you discount the actual weights, it is in fact quite much like taking the intersection instead of the union.
14:24:49 <ais523> what does 0## mean? unboxed byte 0?
14:25:00 <kallisti> fizzie: I might include an option to do that.
14:25:24 <ais523> and "word" = word8? or word-and-infer-bitwidth?
14:25:33 <kallisti> 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:47 <kallisti> and another that is just the starting word frequency part.
14:25:52 <elliott_> ais523: but Word8 is just a box around a Word#
14:25:54 <ais523> and it happens to be 8-bit on this system
14:25:55 <elliott_> which is an unboxed machine word
14:25:56 <kallisti> so just a regular "acronym" generator.
14:26:11 <elliott_> 03:43:58: <HackEgo> провахмате шлено исто тугаване ремонодук пудыши мъству провка дорокачавалото фразбиструму приберщвлет драламину двученна макрообмит совательозеровавши вседаго усъ блионителн преденция бства сираних позитод ползачещяли изрушав
14:26:11 <elliott_> 03:44:31: <Gregor> -- A thrilling novella by ... whatever Russian person is on #esoteric .
14:26:12 <elliott_> "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:24 <kallisti> I'm going to sleep now. good night.
14:26:31 <ais523> 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 <ais523> also, there's a huge amount of unboxed stuff going on there
14:27:01 <elliott_> ais523: not bytestrings, pointers
14:27:19 <ais523> aha, that explains why reflect' goes up to 8
14:27:38 <ais523> you're reading the memory holding Haskell objects directly?
14:27:45 <ais523> via access-arbitrary-memory methods?
14:27:52 <elliott_> 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 <elliott_> the original idea is due to oleg, i just added MORE FASTS
14:28:24 <ais523> "reflects the pointer into the type system"?
14:28:48 <ais523> I mean, what does that even mean?
14:29:01 <elliott_> ais523: it constructs the appropriate typeclass dictionary and passes it in with rank-n types
14:29:17 <elliott_> now you know why i dumbed it down :P
14:29:18 <ais523> hmm, but the pointer's a run-time construct, right?
14:29:26 <ais523> elliott_: I can't understand even the dumbed-down version
14:29:31 <elliott_> it just defines an instance for each byte
14:29:36 <elliott_> and defines what amounts to a /template/ instance
14:29:50 <elliott_> "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 <elliott_> so it picks the appropriate ReifyByte for each byte of the pointer using a lookup table
14:30:08 <elliott_> and passes them all to the Reify-instance-maker
14:30:17 <ais523> elliott_: so it can Reify each possible string of eight bytes?
14:30:19 <elliott_> but since all this is implementation details, it has to do it with a crazy rank-n type construction
14:30:33 <elliott_> ofc, it never tries to reify anything other than a valid pointer
14:30:35 <ais523> but doesn't all typechecking get down at compile time?
14:30:51 <elliott_> ais523: yes, but that's not the same as resolving typeclass instances
14:30:58 <elliott_> it's impossible to completely do that statically
14:31:12 <elliott_> because, like I said, you basically have functions
14:31:13 <ais523> elliott_: oh, it's the typeclass equivalent to virtual dispatch that you're hooking here?
14:31:15 <elliott_> instance (Show a, Show b) => Show (a,b)
14:31:26 <elliott_> tupleShowInstance :: ShowDictionary a -> ShowDictionary b -> ShowDictionary (a,b)
14:31:39 <ais523> (am I correct, wrong, or meaningless here? I fear it's the latter)
14:31:44 <elliott_> and s/(a,b)/Address a b0 b1 b2 b3 b4 b5 b6 b7/
14:31:52 <elliott_> ais523: I'm not sure what virtual dispatch is
14:32:20 <ais523> 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:45 <elliott_> ais523: right, typeclasses are a "safer" version of dynamic dispatch
14:33:01 <elliott_> ais523: however, values don't carry around their instances in Haskell
14:33:04 <elliott_> the instances are separate objects
14:33:22 <ais523> yep, typeclasses solve the same problem that object-oriented classes solve
14:33:22 <elliott_> so, it'd use the global tupleShowInstance, and apply it to the two ShowDictionaries it's been given
14:33:25 <ais523> although not in exactly the same way
14:33:28 <elliott_> and then use the show inside that on the tuple value it has
14:33:37 <elliott_> ais523: interfaces, not classes
14:33:48 <ais523> elliott_: right, if you're thinking in Java terms
14:34:06 <ais523> although it's not exactly like an interface; more like an abstract class
14:34:19 <ais523> because you can declare default implementations for method-equivalents, etc
14:35:15 <elliott_> 04:34:59: <Gregor> kallisti: elliott actually made a "perfect" UA a while ago.
14:35:15 <elliott_> 04:35:09: <Gregor> `pastelogs elliott.*user.*agent
14:35:15 <elliott_> 04:35:19: <Gregor> (Greppin' 1GB of logs woooh)
14:36:15 <elliott_> 04:38:12: <Gregor> It pretty much convinced everything that it was sufficiently up to date.
14:36:32 <elliott_> 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 <ais523> elliott_: even popular web browsers tend to be rather inconsistent among themselves
14:37:07 <elliott_> 04:42:19: <Gregor> 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 <elliott_> 04:42:22: <Gregor> (Also, only Forth)
14:37:14 <ais523> as in, there are a lot of variations of, say, Firefox 9 user agents
14:37:19 <elliott_> OpenFirmware Macs died with PPC Macs.
14:37:38 <elliott_> 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 <ais523> 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 <elliott_> ais523: heh, because there's no hardware/software variation whatsoever?
14:39:22 <Vorpal> ais523, probably because there are small variations in many other places
14:39:33 <elliott_> (and because it's massively popular, ofc)
14:39:39 <elliott_> (but probably not more than computer browsers)
14:39:44 <elliott_> (although it's getting that way)
14:39:45 <ais523> elliott_: right, it's because of the lack of varation
14:39:59 <Vorpal> 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 <ais523> IIRC the iPhone isn't even the most popular smartphone platform any more
14:40:27 <Vorpal> and for IE you tend to have .NET versions supported in the user agent iirc
14:40:38 <ais523> here's mine: Mozilla/5.0 (Ubuntu; X11; Linux i686; rv:9.0) Gecko/20100101 Firefox/9.0
14:40:39 <Vorpal> ais523, android is, but there are so many android
14:40:40 <elliott_> 04:50:50: <zzo38> (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:47 <elliott_> ais523: Android ostensibly is, but it's kind of a cheat
14:40:58 <elliott_> since many Android phones are wildly different from each other
14:41:07 <ais523> 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 <elliott_> you really need to count at least the many different proprietary Android UIs separately
14:41:15 <ais523> and Mozilla responded by getting Firefox to ignore it, or something like that
14:41:28 <ais523> there was quite a row at the time, at least
14:41:36 <elliott_> ais523: they automatically uninstalled it
14:41:42 <ais523> Firefox now checks to see if there are extensions on the computer that the user didn't install
14:41:42 <elliott_> pushed out a new release just to do that
14:41:49 <ais523> elliott_: couldn't, Firefox doesn't have enough permissions
14:41:55 <ais523> unless you're running it as admin
14:42:04 <ais523> they automatically ignored/disabled it, instead
14:42:08 <elliott_> 04:54:24: <itidus21> zzo38: the biggest problem with the idea is that it's impossible
14:42:31 <Vorpal> iirc chrome on windows bundles flash
14:42:31 <elliott_> 04:54:13: <Gregor> kallisti: Grepping my server logs suggests the following: http://sprunge.us/TLiJ
14:42:42 <Vorpal> I found it buggy as hell
14:42:44 <elliott_> I like how people have browsed codu.org on iPads.
14:42:51 <Vorpal> I had flash in chrome crash many times on windows
14:43:17 <ais523> elliott_: is that your useragent that Gregor linked in your quote of him?
14:43:36 <elliott_> ais523: no, that's gregor's horrible chimera generated from codu logs
14:45:04 <elliott_> 04:57:28: <NihilistDandy> http://img820.imageshack.us/img820/1641/itsfinetrustme.png
14:45:04 <elliott_> 04:57:33: <NihilistDandy> And they still haven't fixed it
14:45:31 <elliott_> 05:00:13: <kallisti> http://sourcereal.com/ I wonder what the purpose of this site actually is.
14:45:37 <elliott_> The purpose is sour cereal, man.
14:45:38 <ais523> 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 <ais523> elliott_: heh, I didn't parse that URL like that
14:46:32 -!- yorick has joined.
14:48:20 <elliott_> ais523: It's the only real source for sour cereal.
14:48:52 <ais523> hmm, sour cereal + alkaline milk would result in some sort of neutralisation reaction
14:49:04 <ais523> (I think milk and toothpaste are the only common alkaline substances around)
14:50:14 <ais523> elliott_: anyway, so your amazing code, what could it be used for?
14:50:26 <ais523> (this seems a question I'm more likely to understand the answer to than "what does it do?")
14:50:30 <elliott_> ais523: implicit configurations
14:50:31 <fizzie> 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 <elliott_> "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 <elliott_> 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 <elliott_> 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 <elliott_> 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 <ais523> fizzie: that's actually Chrome, I take it?
14:50:49 <elliott_> uitive alternative to implicit parameters. It motivates adding local instances to Haskell, with a restriction that salvages principal types."
14:50:59 <ais523> or, hmm, actually Safari?
14:51:04 <fizzie> ais523: Well, "chromium-browser" as installed by Ubuntu.
14:51:12 <elliott_> ais523: safari was the first webkit browser
14:51:16 <elliott_> which explains its presence there
14:51:20 <ais523> elliott_: right, indeed
14:51:32 <elliott_> ais523: anyway, that quote should answer your question, or at least confuse you more
14:51:37 <ais523> hmm, I wonder if this'll retroactively cause Ubuntu to have been an early web browser platform
14:51:43 <fizzie> 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:52:03 <elliott_> 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 <ais523> elliott_: because it's being mentioned in all these useragents
14:52:21 <fizzie> Yes, those things are going to confuse them to no end too.
14:52:35 <ais523> hell, people are confused by Book of Mozilla references even nowaday
14:52:45 <ais523> I wonder if they should just ask the people who wrote them what they're intended to mean?
14:53:09 <elliott_> ais523: oh, "early" because the web is still young?
14:53:27 <ais523> elliott_: no, just because earlier things get mentioned in useragents and later things don't
14:53:28 <elliott_> ais523: also, there are explanations /right in the source code/
14:53:30 <fizzie> "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 <elliott_> <!-- 10th December 1994: Netscape Navigator 1.0 was released -->
14:53:32 <elliott_> <!-- This verse announces the birth of the beast (Netscape) and warns bad coders (up to Netscape 3, when you watched the HTML source code with the internal viewer, bad tags blinked). -->
14:53:39 <fizzie> Some of them are sort-of obvious, also.
14:53:53 <ais523> or at least, you mention earlier browsers in your useragent but not later ones, for obvious reasons
14:53:54 <fizzie> "cunning of foxes" "Mammon" "naught but a follower"
14:54:09 <ais523> elliott_: oh, the source code, who reads that?
14:54:14 <ais523> (particularly for something like Firefox?)
14:54:33 <fizzie> The HTML source for the page.
14:54:54 <fizzie> Everybody knows how to "use the source, Luke" for hidden thingamajikcs.
14:55:21 <ais523> fizzie: heh, I wonder why I picked the other interpretation to start with?
14:55:27 <ais523> actually, they're probably the same source
14:55:43 <ais523> 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 <ais523> <Wikipedia> 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 <ais523> level approval from the senior management of the Mozilla Foundation.
14:56:42 <elliott_> fizzie: it's not in the about: source, though, I don't think
14:56:48 <ais523> so apparently the source can't be trusted
14:57:26 <ais523> 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 <ais523> hmm, apparently the second Book of Mozilla verse was written by jwz
14:58:44 <ais523> so I suppose you could ask him if you really wanted to be sure
14:59:14 <fizzie> 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 <ais523> now I'm trying to remember which non-Netscape-codebase-based browser responds to about:mozilla
15:00:03 <ais523> 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 <fizzie> "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:53 <fizzie> And apparently Konqueror goes to about:konqueror, but that's quite boring.
15:01:09 <fizzie> I remember the "lizard in the Netscape logo" thing, though.
15:01:18 <Vorpal> <elliott_> Vorpal: that's just flash <-- well, yeah
15:01:21 <fizzie> Sadly it only survives up until the browser's closed.
15:01:26 <ais523> right, I forgot that the Windows IE team are on good terms with the Firefox devs
15:01:36 <elliott_> gah, I wonder why coercing these to Addr#s doesn't work
15:01:46 <ais523> it's not the sort of thing you'd expect, until you think about it a bit
15:01:57 <elliott_> ais523: only as of recently :)
15:02:26 <ais523> 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 <ais523> but have been repeatedly told to deliberately screw it up for one reason or a nother
15:02:58 <Vorpal> why does everyone still put Mozilla/5.0 in? I mean, does any website really care about user agent these days?
15:03:17 <elliott_> ais523: well, recent IE /is/ good, isn't it?
15:03:33 <Vorpal> elliott_, I guess for statistics
15:03:45 <ais523> elliott_: yes, it's entirely reasonable, although some of the defaults irk me and it's not as customizable as Firefox
15:03:50 <Vorpal> does anyone look at the Mozilla/5.0 part for example?
15:03:53 <ais523> (the customizability is the reason that I use Firefox)
15:04:03 <ais523> Vorpal: old servers use it to determine whether to serve frames or nonframes
15:04:13 <ais523> thus, I propose that people should remove it, and thus get the better version of the page
15:04:41 <elliott_> Vorpal: why would people rewrite their website backend every 5 years just because Vorpal thinks they're doing it wrong?
15:05:00 <elliott_> 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:47 <elliott_> breaking that chain from the browser end would just annoy everyone
15:05:54 <ais523> fizzie: according to Wikipedia, Iceweasel has the standard about:mozilla, but also an about:iceweasel of its own
15:05:56 <Vorpal> 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 <ais523> that references the naming dispute
15:06:20 <ais523> elliott_: clearly, we have to break the chain in the middle
15:06:28 <elliott_> Vorpal: i'm sure it's sniffed for more than frames
15:06:31 <ais523> by getting the backbone routers to strip Mozilla/5.0 out of user agents
15:06:38 <fizzie> Vorpal: The web-admin interface of my shiny new VDSL2 router-boxey thing is done in regular old frames.
15:06:54 <elliott_> ais523: "My internet is broke, the google works on Verizon but not Comcast."
15:06:54 <fizzie> (Admittedly they've been doing related models for a while and have just been copying the interface on and on.)
15:06:58 <elliott_> ais523: you want to make this sentence plausible
15:07:02 <fizzie> (Also it's quite horrible.)
15:07:09 <Vorpal> fizzie, my speedtouch (several years old by now) uses some javascript stuff. There is also a telnet interface
15:07:14 <ais523> (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 <fizzie> 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:08:04 <fizzie> 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 <elliott_> ais523: it's really amazing that we live in a society where we have computers that are /too busy to parse/
15:08:10 <Vorpal> fizzie, the telnet interface on mine offers more options but nothing really interesting
15:08:11 <fizzie> I guess they have to try keep nosy customers out.
15:09:00 <ais523> elliott_: well, they are
15:09:05 <elliott_> this reminds me of trying to get my livebox to give me a shell
15:09:12 <elliott_> which involved exploting the configuration backup mechanism
15:09:15 <fizzie> 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 <ais523> I think they work a couple of levels lower than HTTP, because parsing would be too much effort
15:09:23 <Vorpal> elliott_, did it work?
15:09:30 <fizzie> elliott_: They've disabled the configuration backup mechanism of that box, possibly because of such concerns. :p
15:09:36 <ais523> 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 <fizzie> Doesn't really help when the web-interface calls bazillion "route add %s" printfs with input validation done in JavaScript.
15:09:50 <ais523> because CRC-32 would be too expensive
15:09:58 <Vorpal> ais523, probably on the IP/IPv6 level
15:09:59 <fizzie> (And runs those with system().)
15:10:02 <elliott_> Vorpal: no :( I edited the config file and bundled dropbear in and it uploaded but i could never connect
15:10:08 <elliott_> despite the page i was reading suggesting it should work
15:10:23 <elliott_> fizzie: (How do you know it does that?)
15:10:24 <ais523> fizzie: is it possible to overflow the %s?
15:10:44 <fizzie> ais523: You can just put backticks in it, but it probably is.
15:11:38 <ais523> if something has a big vulnerability, it's still fun to look for the smaller ones
15:11:40 <fizzie> 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:12:03 <ais523> btw, how many security vulnerabilities don't translate to "insufficient validation of input or insufficient escaping of output" somehow?
15:12:06 <fizzie> I did have to smuggle in a static-linked busybox, because theirs lacked the "nc" feature.
15:12:34 <ais523> fizzie: so you used backtick injection to smuggle busybox in?
15:12:47 <Vorpal> ais523, hm... stuff like hardware bugs? Such as the f00f one
15:12:47 <elliott_> backtick injection sounds much fancier than it is
15:12:58 <ais523> also, is this a university/college/business router, or a home one?
15:13:23 <fizzie> 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 <elliott_> backup to self: http://sprunge.us/JWWa
15:13:27 <ais523> Vorpal: hmm, right, that's a logic error leading to an infinite loop, isn't it?
15:13:34 <Vorpal> ais523, forgot the details
15:13:52 <ais523> fizzie: wow, attempting to lock it down like that seems both weird and pointless
15:13:55 <elliott_> fizzie: So does the filesystem have anything interesting? :p
15:14:06 <fizzie> ais523: Well, they technically own it still, for the first two years.
15:14:13 <elliott_> ais523: the livebox's configuration backups were /per-byte constant xor encrypted/
15:14:22 <elliott_> ais523: I have no idea what they're trying to achieve with such pointless barriers
15:14:25 <ais523> elliott_: was that with 42 as the byte?
15:14:29 <elliott_> presumably management told them to stop people fiddlign with it
15:14:34 <elliott_> ais523: I think it might have been 0x40
15:14:52 <fizzie> 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 <ais523> 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 <ais523> (the purpose was to hide things from strings(1), incidentally)
15:15:39 <fizzie> ais523: In the web-interface.
15:15:43 <ais523> I can't tell whether the comma is a punctuation, or a word of its own
15:15:50 <fizzie> I don't know where the word went.
15:15:54 -!- atehwa has quit (Ping timeout: 240 seconds).
15:16:07 <Vorpal> 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:22 <Vorpal> at least that I can think of
15:16:32 <ais523> elliott_: hmm, presumably things like quiz answers to casual viewing
15:16:42 <ais523> the sort of thing where the secrecy is to avoid spoilers, rather than for security
15:16:45 -!- atehwa has joined.
15:17:05 <ais523> (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 <elliott_> ais523: err, do you mean memfrob?
15:17:26 <fizzie> 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 <Vorpal> <ais523> (the purpose was to hide things from strings(1), incidentally) <-- what for?
15:17:30 <elliott_> because i'm pretty sure that's just a joke
15:17:35 <Vorpal> why would they want to hide something from strings?
15:17:36 <ais523> elliott_: yes, one of those
15:17:52 <ais523> anyway, a joke can have a useful purpose too, right?
15:17:55 <ais523> and it must be memfrob
15:17:58 <fizzie> "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 <ais523> strfry is that one which started the famous argument with Ulrich Drepper about randomization algorithms
15:18:41 <elliott_> bleh, why doesn't Addr# work here?
15:18:56 <fizzie> Oh, I did found out a really confusing thing too.
15:20:17 <fizzie> 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 <fizzie> 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 <fizzie> 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 <fizzie> 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 <ais523> fizzie: perhaps it would let one figure out what DNS queries the other was making via response time?
15:21:42 <ais523> so it's a sort of privacy thing?
15:21:46 <fizzie> Which "one" and which "other"?
15:21:56 <ais523> the clients of the NAT
15:22:07 <ais523> which I'm assuming there are two of because all numbers greater than 1 are equal
15:22:29 <fizzie> 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 <fizzie> 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 <fizzie> Except in the destination address of the in-LAN packet.
15:23:25 <ais523> perhaps it's about always using one DNS server in preference to another
15:23:33 <ais523> so that if they say different things, one in particular takes precedence
15:23:44 <Vorpal> fizzie, plus I think it might fuck up dnssec, but I assume that isn't done at that point anyway
15:23:49 <ais523> might be useful for an ISP who wanted to redirect websites now and again
15:24:33 <fizzie> 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 <elliott_> hmm, I think I might know what went wrong
15:25:03 <fizzie> If the ISP wants to redirect websites, presumably they'd just do it by intercepting all DNS queries within their network.
15:25:22 <Vorpal> fizzie, I assume you run a local dns server?
15:25:50 <elliott_> That's a rather ridiculous assumption.
15:26:03 <Vorpal> rather than live with that mess I mean
15:26:27 <elliott_> I don't see why it would affect the actual usage of the system.
15:26:40 <fizzie> 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:27:09 <Vorpal> personally I use a local dns server to get dnssec
15:27:29 <fizzie> Anyway, the custom "redirect to secondary if primary fails" is certainly an improvement over "just redirect to primary" "solution".
15:27:52 <fizzie> 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 <fizzie> It's hardcoded to be "primary; or if primary fails, secondary"; not "here's a list, use the first working one".
15:28:25 <Vorpal> fizzie, you disassembled the code for it or something?
15:28:36 <elliott_> *Mirror> reify 42 (\p -> reflect p) :: Int
15:28:36 <elliott_> Process haskell segmentation fault
15:28:46 <Vorpal> fizzie, or is it just shell script?
15:29:08 <fizzie> No, it's code; I did disassemble it and glance at it; but that was mostly based on the messages it has.
15:29:29 <Vorpal> I can't remember seeing more than two DNS servers on any network I used
15:29:38 <Vorpal> I guess two is mandated by something?
15:29:42 <fizzie> 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 <Vorpal> does dnsmasq do dnssec?
15:30:36 <elliott_> Vorpal is a bot to turn statements about DNS into "dnssec???".
15:30:51 <Vorpal> elliott_, no I was just curious
15:31:06 <Vorpal> elliott_, it is an important question these days
15:31:14 <elliott_> I'm pretty sure it actually: isn't.
15:31:30 <Vorpal> your: punctuation is: awkward
15:31:31 <ais523> 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:54 <fizzie> 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:32:12 <elliott_> And does the effect start when I start or finish eating it?
15:32:15 <ais523> elliott_: maybe about 10
15:32:18 <ais523> and when you finish eating it
15:32:30 <Vorpal> ais523, what about floors?
15:32:36 <elliott_> 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:52 <Vorpal> <fizzie> 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 <ais523> elliott_: you just don't collide with them
15:32:58 <ais523> you start walking at them and you're now on the other side
15:33:04 <Vorpal> elliott_, noclip I think
15:33:24 <ais523> 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 <Vorpal> ais523, what happens if I'm not through the wall by the time the 10 seconds are up?
15:33:31 <fizzie> 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 <fizzie> http://www.imperialviolet.org/2011/06/16/dnssecchrome.html
15:33:42 <ais523> Vorpal: I don't think it takes time to go through the wall (but it only works on reasonably thin walls)
15:33:42 <fizzie> I'm not sure if anyone uses that.
15:33:51 <ais523> you start walking at one side and you're now on the other side
15:33:56 -!- nooga has joined.
15:34:03 <fizzie> 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:12 <fizzie> As long as everyone you want to talk to uses Chrome, anyway.
15:34:15 <ais523> elliott_: that was my answer too, I think
15:34:17 <elliott_> it sounds implausible and risk-free enough to spend $38 on trying it out
15:34:49 <elliott_> 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 <Vorpal> fizzie, I run unbound locally for dns, it has dnssec. Works well
15:35:07 <fizzie> Vorpal: Presumably they're waiting for OS/network-stack/API/whatever-makers to make it possible to do DNSSEC-validated queries.
15:35:18 <ais523> elliott_: right, indeed
15:35:27 <ais523> but suppose the claim was well-verified, and you'd even done it once yourself to make sure
15:35:29 <Vorpal> fizzie, they = dnsmasq? chrome?
15:35:35 <ais523> would you actually find it useful to do it again, in the future?
15:35:49 <elliott_> ais523: do other people know about these magic sandwiches?
15:35:56 <ais523> yep, they're in common use
15:36:18 <ais523> presumably banks and so forth need to reinforce their vaults with anti-sandwich measures
15:36:26 <elliott_> I was about to ask if they were foolproof or not
15:37:01 <ais523> the more I think about this, the more $38 sounds like more or less exactly the right price
15:37:15 <Vorpal> more useful sandwiches than noclip: level select, god mode, invisibility
15:37:33 <elliott_> you eat it and get dumped into a 2-dimensional green-on-black text universe
15:37:43 <ais523> invisibility seems around as useful as noclip, really
15:37:59 <Vorpal> ais523, depends on if there are ways for people to detect you when invisible
15:38:06 <Vorpal> or if it is fool proof
15:38:14 <elliott_> *Main> reify 42 (unbox . proxy reflect')
15:38:15 <elliott_> *Main> reify 42 (unbox . proxy reflect')
15:38:28 <elliott_> *Main> reify (42 :: Int) (unbox . proxy reflect')
15:38:28 <elliott_> Process haskell segmentation fault
15:38:34 <ais523> 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 <Vorpal> ooh another good one: bullet time
15:38:37 <ais523> sound, footprints, etc
15:38:38 <elliott_> I, er, have no idea why that happened
15:38:40 <fizzie> The "all weapons" sandwich sounds far less useful, given that you'd probably just end up buried under a ton of metal.
15:38:43 <ais523> and even potentially touch and smell
15:39:33 <ais523> Vorpal: elliott_ really was that slow, it wasn't lag
15:39:34 <elliott_> gives you the power to have a full stomach
15:39:39 <Vorpal> ais523, I had lag as well
15:39:50 <ais523> hmm, invulnerability would be a useful sandwich effect, although possibly not if it only lasted ten seconds
15:40:00 <Vorpal> PING google.com (209.85.173.99) 56(84) bytes of data.
15:40:00 <Vorpal> 64 bytes from lpp01m01-in-f99.1e100.net (209.85.173.99): icmp_seq=1 ttl=47 time=433 ms
15:40:08 <elliott_> ais523: that obsoletes the wall sandwich
15:40:16 <elliott_> as you can just smash yourself into the wall really hard while invulnerable
15:40:29 <ais523> wouldn't that have the side effect of destroying the wall?
15:40:40 <elliott_> ais523: that's what the wall repair sandwich is for
15:41:01 <Vorpal> fireball sandwich would be really dangerous.
15:41:19 <Vorpal> (not that you instantly explode)
15:42:27 <ais523> nah, 1-ups would be way more useful than fire flowers
15:42:38 <Vorpal> ais523, more useful yes. I said dangerous
15:42:40 <ais523> Vorpal: I'm surprised you didn't ask "why $38"
15:42:49 <elliott_> hmm, santa just reached australia
15:42:58 <Vorpal> ais523, most people don't live in fireproof houses.
15:43:01 <ais523> and it's because someone said the economy of a game was unrealistic because sandwiches cost $38
15:43:07 <ais523> and I pointed out that they let you walk through walls
15:43:50 <ais523> I'm not sure who made it
15:44:00 <ais523> although I think it was on a Nintendo console
15:44:14 <Vorpal> and indeed, it was which platform it was on I meant
15:44:21 <Vorpal> ais523, it seems to be a series btw
15:44:27 <elliott_> Vorpal hasn't heard of Earthbound? really?
15:44:34 <Vorpal> elliott_, indeed I have not
15:44:41 <ais523> Vorpal: the series is called Mother; Earthbound is IIRC Mother 2
15:44:54 <Vorpal> "EarthBound, known in Japan as Mother, is a role-playing video game series"
15:45:18 <ais523> I think Earthbound was the only entry released outside Japan
15:45:20 <Vorpal> "EarthBound (known as Mother 2 in Japan) is a distant sequel to the original Mother"
15:45:26 <ais523> so perhaps it's impossible to tell from the information given
15:45:42 <ais523> as in, if a series only contains one game, you'd name it after that game, right?
15:46:08 <Vorpal> (for the second game at least)
15:49:50 <Vorpal> 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 <Vorpal> 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 <Vorpal> 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 <Vorpal> oh wait, it is the new language-pack-sv-base depending on language-pack-sv which doesn't exist?
15:53:48 <Vorpal> or hm it exists but not in the required version
15:56:05 -!- derdon has quit (Remote host closed the connection).
16:12:08 <Vorpal> ais523, did you do that in your head?
16:12:23 <Vorpal> if so I'm quite impressed
16:12:34 -!- Nisstyre has quit (Ping timeout: 240 seconds).
16:12:58 <ais523> Vorpal: yes, it's not that hard
16:13:08 <ais523> I have the problem that people at school knew I was a good mathematician
16:13:14 <ais523> and so asked me random arithmetic questions a lot
16:13:24 <ais523> and so I had to get moderately good at those too
16:13:42 <elliott_> wrote that before your last line put it into context
16:13:52 <ais523> in this case, 158 is clearly just under 160
16:13:59 <ais523> which I knew was a round multiple of 8
16:14:06 <Vorpal> yeah being good at calculate in your head is not the same as being good at mathematics
16:14:07 <elliott_> ("arithmetician" sounds so awkward because it's such a useless thing to be :))
16:14:22 <ais523> 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 <Vorpal> 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 <ais523> 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 <ais523> well, it is arithmetic, but it's just adding 1/2/5/10/20/50
16:16:05 <Vorpal> like if you give a 100 SEK note and the thing cost 58.50 SEK
16:16:40 <Vorpal> ais523, so I don't see how it is just a few basic values
16:16:45 <Vorpal> you need to do 100-58.50
16:17:13 <Vorpal> then it is just subtracting 1/5/10/20/50/100/500/1000 from that
16:17:40 <Vorpal> ais523, so I'm not sure what you meant
16:17:48 <ais523> 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 <ais523> and you can do all that without knowing what the change actually adds up to at all
16:18:08 <ais523> I haven't worked it out yet
16:18:09 <Vorpal> ais523, well except we don't have .50 since about a year or so now
16:18:19 <ais523> Vorpal: oh, in that case, two .25, or whatever it is you do have
16:18:26 <Vorpal> ais523, 1 is smallest nowdays
16:18:41 <ais523> well, how are you going to get .50 in change if there are no coins smaller than 1?
16:18:49 <ais523> this isn't a problem that can be solved by maths
16:18:55 <ais523> (and there are no non-integer coins bigger than 1)
16:19:00 <Vorpal> ais523, I guess you would round it, same as you round something that is like 49.99
16:19:15 <Vorpal> unless you use a bank card you have to round that nowdays
16:19:31 <ais523> elliott_: does Vorpal's description of the Swedish monetary system make any sense at all?
16:19:57 <Vorpal> ais523, surely you seen stuff sold for like 1 less than some amount to make it like "Only 499"
16:20:02 <elliott_> ais523: it's (a) Sweden and (b) Vorpal, of course it doesn't make any sense
16:20:26 <elliott_> ais523: they probably have to assemble their coins themselves using wordless instruction manuals
16:20:28 <ais523> 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 <Vorpal> 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 <Vorpal> ais523, it is just that we have money amounts smaller than our smallest denominations
16:21:32 <elliott_> Vorpal: So how do you buy an item which costs 1/2 the smallest denomination?
16:21:39 <elliott_> If you round up to one denomination, what change do you get?
16:21:53 <Vorpal> elliott_, I think it is round to nearest that is the standard.
16:22:06 <Vorpal> so it could be rounded down sometimes
16:22:26 <Vorpal> anyway I need to leave. Time to give out the presents. I'm at my grandparents.
16:22:36 <ais523> what if you close your bank account and they give you its contents?
16:23:09 <ais523> also, why don't people always buy things in combinations that give them the benefit of rounding errors?
16:23:25 <ais523> 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 <ais523> it'd basically double the length of queues
16:23:38 <elliott_> I refuse to believe that Swedish business are throwing away money en masse because the government refuse to mint a coin
16:23:50 <ais523> elliott_: I suspect that Vorpal is either lying or trolling, here
16:24:03 <ais523> 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 <Vorpal> <ais523> what if you close your bank account and they give you its contents? <-- no idea
16:24:37 <ais523> <Wikipedia> 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 <ais523> OK, /Sweden/ is trolling
16:24:58 <elliott_> surely they're always rounded up
16:25:10 <Vorpal> <ais523> 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 <ais523> either that, or Wikipedia has been vandalised and Vorpal is relying on it to pretend to be Swedish
16:25:40 <elliott_> Vorpal: you realise that multiplication exists?
16:25:54 <elliott_> you could probably amass huge sums of money if you were patient and had a lot of conspirators
16:25:55 <Vorpal> anyway I remember 50 öre (0.5 SEK) coins
16:26:08 <Vorpal> I don't remember any smaller denominations. They haven't been around for ages.
16:26:19 <ais523> hmm, apparently the only coins are 1SEK, 5SEK, 10SEK nowadays
16:26:27 <elliott_> anyway, where does the money /go/? do companies produce financial reports with rows for "money lost due to coin rounding"???
16:26:28 <Vorpal> ais523, indeed, 20 SEK is a note
16:26:40 <ais523> that's an incredibly small selection of coins to put a monetary system on
16:26:41 <Vorpal> elliott_, I have no idea
16:26:47 <ais523> *based a monetary system on
16:26:55 <Vorpal> ais523, that is because we use notes for larger values
16:26:58 <elliott_> hmm, who wants to make lots of Swedish money with me?
16:27:10 <ais523> elliott_: actually, that happens in gambling; a major part of the profit of some bookmakers comes from rounding errors
16:27:17 <ais523> but they're always in the bookmaker's favour, rather than to-nearest
16:27:29 <ais523> elliott_: you'd need to be able to /sell/ to shops for that to work
16:27:47 <Vorpal> ais523, afaik it is round to nearest with .5 upwards
16:28:02 <Vorpal> which to me is the standard rounding system in most contexts
16:28:27 <elliott_> ais523: you just buy items 1 SEK cheaper from retailers, and then resell them at the retail price
16:28:46 <ais523> elliott_: well, OK, but you'd need to be able to sell, at retail price, via some method
16:28:51 <elliott_> the overhead is probably >1SEK though :/
16:28:59 <elliott_> ais523: just set up an online store, or something :P
16:29:12 <ais523> 1SEK is not very large, so you're probably not going to be able to find items that are worth less
16:29:22 <ais523> it'd be like trying to find fractions-of-a-penny stuff in the UK
16:29:41 <ais523> which can typically only be bought in bulk without a surcharge, nowadays
16:29:52 <ais523> (e.g. resistors are around 3 to the penny bought in bulk, but cost something like 7p individually)
16:30:29 <Vorpal> ais523, is 1 SEK smaller than your smallest coin?
16:30:45 <ais523> not sure; our smallest coin is 0.01 GBP
16:30:45 <fizzie> 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 <ais523> and I'm not sure of the exchange rate
16:30:53 <elliott_> <Vorpal> <ais523> 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:31:00 <Vorpal> elliott_, is 1p = 0.1 £?
16:31:04 <ais523> there's been some feeling that we should move to 0.05 GBP as the basic unit, in some cases
16:31:15 <elliott_> I'm not even going to dignify that with a response
16:31:17 <Vorpal> elliott_, how should I know?
16:31:18 <fizzie> I don't think many people will bother to do the item-selection so that they get favourable rounding.
16:31:24 <elliott_> Vorpal: because that's ridiculous!
16:31:24 <ais523> Vorpal: well, it was mentioned recently in scrollback
16:32:44 <elliott_> hmm, I think I'll have to pretend I was busy on Christmas Eve
16:33:26 <fizzie> 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:56 <ais523> fizzie: I'm sure potatoes cost more than €0.02
16:34:01 <fizzie> Though they can just invent a "minimum purchase 0.05 cent" rule.
16:34:10 <Vorpal> elliott_, the problem is that takes time that you could have spent doing other things
16:34:57 <ais523> 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 <elliott_> Vorpal: you think I have something better to do than crash Finland's potato economy?
16:35:16 <Vorpal> elliott_, well, maybe not you
16:35:34 <ais523> Vorpal: because his time is worth a /lot/
16:35:41 <elliott_> Vorpal: you'll go down in the history books as "boring". me, "architect of the great finnish potato crash of 2012"
16:35:49 <elliott_> (which lead to the end of the world)
16:36:01 <elliott_> very short mention in history there
16:36:07 <elliott_> i guess someone wrote "2012: a summary" as the world burned
16:36:54 <fizzie> 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 <ais523> fizzie: 30-gram potatoes exist?
16:37:25 <ais523> also, candy I can believe
16:37:32 <ais523> what's the smallest Euro coin?
16:37:34 <Vorpal> 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 <ais523> Vorpal: coins are more convenient to transport
16:38:03 <ais523> that's the reason the coins in the UK go all the way up to £2
16:38:21 <Vorpal> ais523, they are thicker than notes, thus are more awkward to fit into your wallet without making that annoyingly thick
16:38:22 <elliott_> our 2 pound coins are so cool. i always want to pop out the inner bit
16:38:25 <fizzie> 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 <ais523> (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:50 <elliott_> ais523: hmm, I thought they were to amke money
16:39:01 <ais523> elliott_: no, they sell them for £5 each
16:39:13 <ais523> although presumably they end up more valuable after that, due to scarcity or whatever
16:39:42 <ais523> and I don't think they can mint coins merely to make money
16:39:50 <ais523> although, hmm, this is confusing
16:39:55 <ais523> making money is the Mint's /job/
16:40:18 <ais523> presumably they're restricted in how much they can make and when, and who ends up with the profits
16:40:43 <ais523> Vorpal: anyway, AFAIK most people know that £5 coins exist, but few people have ever seen them
16:41:01 <ais523> for some reason, this doesn't make them a popular target for counterfeiters
16:41:19 <ais523> presumably because people would get suspicious in response for someone actually using a £5 coin to buy things with
16:41:27 <ais523> hmm… £50 notes exist, but are rare
16:42:04 <ais523> 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 <elliott_> I think I've received a 50 pound note for a birthday or whatever before? or no, that was probably 20 :P
16:43:34 -!- copumpkin has quit (Ping timeout: 240 seconds).
16:43:42 <ais523> elliott_: I received one for Christmas a few years ago, I think
16:43:48 <ais523> because the things are both rare and worth £50
16:44:07 <ais523> 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 <ais523> (and I think many other banks will accept them too)
16:45:43 <ais523> apparently it's usual for people to write the serial numbers of £50 notes in case they lose them
16:50:58 -!- copumpkin has joined.
16:55:09 -!- zzo38 has joined.
16:55:31 <zzo38> Whatever it was I did, if it works for IO monad then it will work with other monads too
16:58:04 <elliott_> ais523: why is it christmas. time is weird?
16:58:17 <ais523> elliott_: it isn't yet, in the UK or US
16:58:24 <ais523> although it is in many countries
17:08:40 <zzo38> In here, it is not Christmas yet
17:11:14 <zzo38> Not in this outside.
17:13:55 <zzo38> That one!! Look over there!! No, the other over there!!
17:14:13 <fizzie> Euro banknotes go up to 500 EUR.
17:14:21 <fizzie> Not that I've ever even seen the 500 EUR one.
17:14:32 <elliott_> fizzie does not have that much money to his name.
17:15:11 <fizzie> Actually I might have seen the 500 eur one, but probably not the 200 eur one, it looks unfamiliarly yellow.
17:15:16 <fizzie> The 100 eur ones you see now and then.
17:16:00 <elliott_> Wait, are you 30 yet? I might have to retire that one.
17:16:10 <elliott_> I'll just stick to pointing out how much of a pointless waste of time speech recognition is.
17:16:10 <fizzie> No, and stop trying to make me feel old.
17:16:11 <ais523> fizzie: there was a case of people actually getting away with spending counterfeit 300 euro notes a while back
17:16:17 <ais523> because not enough people realised they didn't exit
17:16:27 <elliott_> fizzie: Stop being old, then, you... speech recognition researcher!
17:17:13 <fizzie> 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 <ais523> fizzie: wait, there's a name for it?
17:18:04 <fizzie> At least I can no longer be a member of the "27 Club" thing, which I think is a thing.
17:20:08 <fizzie> 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 <ais523> it's quite hard to come up with a sequence of adjectives that long
17:21:29 <zzo38> 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 <ais523> that have an order over just the one axis
17:21:46 <ais523> it was pretty awkward even with entire sentences describing feelings
17:21:55 <ais523> when I needed 27 of the things
17:22:10 <fizzie> 3505 adjectives to choose from.
17:22:24 <ais523> fizzie: yes, but that's not really very many
17:22:34 <ais523> when most of them will be inappropriate, and the appropriate ones may be hard to order
17:22:44 <fizzie> Not entirely sure what year should be "verminous", and which one "xanthous".
17:23:02 <fizzie> But worthless and wrinkleless both work out just fine, for example.
17:23:25 <fizzie> 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 <fizzie> I have to admit "xanthous" was a new word for me.
17:24:20 <ais523> I'd vaguely heard it, but wasn't completely certain it referred to a colour, and was much less certain which
17:24:32 <fizzie> It sounds a bit like a word they put in crossword puzzles.
17:25:05 <elliott_> <ais523> it was pretty awkward even with entire sentences describing feelings
17:25:05 <elliott_> <ais523> when I needed 27 of the things
17:25:15 <fizzie> "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:32 <ais523> xi is such a pretty letter
17:27:22 <fizzie> It has the banana problem to write.
17:27:29 <elliott_> it's very ugly in uppercase sans-serif
17:27:47 <ais523> uppercase is a bit bland, I agree
17:28:02 <ais523> although uppercase xi is the only really sensible way to draw an uppercase X on a seven-segment display
17:28:13 <ais523> if you're trying to make every capital letter distinct
17:28:25 <ais523> (hmm, I'm not sure I ever wrote that down; I tried to work it all out entirely in my head)
17:28:50 <fizzie> What does your K look like?
17:29:16 <fizzie> (Though maybe the M would've been a better question.)
17:32:39 <zzo38> I usually use octal numbers to represent patterns on a seven-segment display (so, 177 means the full "8" and 010 means the "-")
17:35:02 <zzo38> elliott_: What are those number refer to?
17:36:29 <zzo38> What are you changing?
17:38:50 -!- azaq23 has joined.
17:38:58 -!- azaq23 has quit (Max SendQ exceeded).
17:39:25 -!- azaq23 has joined.
17:39:33 <Gregor> elliott_: I for one still think your proposed UA string is the greatest.
17:40:17 <fizzie> I for one welcome our new UA overlords.
17:40:39 <elliott_> 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 <Gregor> elliott_: It's also every crawler bot that ever was.
17:41:17 <elliott_> fizzie: Have I told you to fix the regionfile stuff yet? :p
17:43:16 <ais523> 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 <fizzie> A couple of times, yes.
17:43:48 <elliott_> fizzie: I'm going to end up having to do it, aren't I.
17:43:57 <fizzie> ais523: Okay; the uppercase pi seems to be a popular M too.
17:44:10 <zzo38> ais523: My ideas were the same as that too
17:44:14 <ais523> fizzie: that seems to be the only sensible way to do a capital N
17:44:29 <ais523> a lowercase n is lowercase
17:44:31 <zzo38> But I didn't do uppercase/lowercase
17:44:37 <elliott_> I want a 7-segment uppercase+lowercase font now.
17:44:41 <ais523> the aim was to do every capital letter, not every letter in an arbitrary case; that makes it rather easier
17:44:47 <ais523> elliott_: I tried, but it was hard to remember the whole thing at once
17:44:51 <ais523> and I didn't think to write it down
17:44:57 <ais523> there's enough bits, after all
17:45:04 <ais523> I think I even tried some of the punctuation
17:45:06 <elliott_> ais523: you /thought/ of a TTF file?
17:45:12 <zzo38> Because some letter are like lowercase but some are like uppercase
17:45:18 <ais523> elliott_: not as the file, just as which segments would/wouldn't be set
17:45:47 <Vorpal> <ais523> Vorpal: anyway, AFAIK most people know that £5 coins exist, but few people have ever seen them <-- heh
17:45:47 <zzo38> I could make a METAFONT program for seven-segments. If you want TrueType then maybe you can convert it somehow
17:45:53 <Vorpal> ais523, so they are rare?
17:46:37 <fizzie> 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 <ais523> Vorpal: £5 coins are, yes
17:46:47 <ais523> they're made in limited amounts for commemorative purposes
17:46:51 <ais523> and are different-looking each time
17:47:08 <ais523> fizzie: don't most people play games /more/ during the holidays?
17:47:12 <ais523> or do you do Minecraft as a job?
17:47:14 <Vorpal> ais523, and 50£ is 538.03kr hm
17:47:18 <Vorpal> 500 SEK notes are common
17:47:23 <fizzie> 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 <elliott_> this reddit troll sure does really like Crysis
17:47:28 <Vorpal> I mean I probably have one in my wallet
17:47:38 <ais523> elliott_: why /can't/ a troll like Crysis?
17:47:47 <elliott_> 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:53 <ais523> is there something inherent in trolling that makes it hard to appreciate famously top-of-the-line graphics?
17:48:03 <ais523> but I'm implying you did so as to start a pointless argument
17:48:17 <elliott_> My favourite kind of argument.
17:48:20 <ais523> and only as an implication, so any arguments you use to defend yourself can be used to defend me too
17:48:22 <Vorpal> 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:37 <Vorpal> well possibly a 500 kr note + a few 100 kr notes
17:48:41 <fizzie> 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 <fizzie> And I suppose some ATMs can give out 10€ notes too? But that's kind-of rare.
17:49:12 <ais523> fizzie: hmm, in the UK ATMs typically give out £20 and £10 notes; some give out £10 and £5
17:49:34 <Vorpal> ais523, I know 1000 kr notes exist but I have no idea if you get them from ATMs
17:49:38 <elliott_> hmm, there is no way this north korean reddit is not satire
17:49:38 <ais523> 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:50 <ais523> elliott_: a correct statement
17:49:59 <ais523> there's no way any hypothetical north korean reddit wouldn't be satire
17:50:06 <ais523> given that hardly any of the population has Internet access
17:50:11 <fizzie> 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 <zzo38> Have you ever made computer fonts?
17:50:22 <elliott_> ais523: well, there are north korean sympathisers who live outside of the country
17:50:26 <elliott_> ais523: there's one famous guy who runs their website
17:50:30 <elliott_> he's in, um, somewhere in Europe
17:50:37 <ais523> elliott_: sympathising with the government, or the people?
17:50:48 <elliott_> http://en.wikipedia.org/wiki/Alejandro_Cao_de_Ben%C3%B3s_de_Les_y_P%C3%A9rez
17:50:54 <ais523> I think quite a few people sympathise with the populace, as in feel sorry for them
17:51:03 <elliott_> "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 <elliott_> 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 <elliott_> http://en.wikipedia.org/wiki/Korean_Friendship_Association
17:52:35 <elliott_> http://kcna.co.jp/index-e.htm awesome, official north korean news!
17:52:48 <elliott_> sure is a lot of "... Mourn Demise of Kim Jong Il"
17:53:05 <ais523> elliott_: there were news clips of people mourning the demise of Kim Jong Il
17:53:13 <ais523> it's not at all surprising that all of North Korea /would/
17:53:16 <fizzie> 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:37 <ais523> 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 <fizzie> 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 <ais523> fizzie: do non-commemorative €2 coins exist?
17:54:05 <fizzie> They're in regular use, as well.
17:54:13 <ais523> well, yes, I guess that'd be a perfectly sensible size for a coin
17:54:15 <Vorpal> fizzie, you mean exactly one coin?
17:54:38 <fizzie> Vorpal: One design. With some limits on the amounts made, but anyway.
17:55:01 <fizzie> And actually looking at that table, Finland and Luxembourg are the only countries with all-green rows.
17:55:17 <fizzie> (And Luxembourg has already a Y in the 2012's column, I don't know how that works.)
17:55:21 <Vorpal> fizzie, green meaning? the site isn't loadingt
17:55:31 <Vorpal> or actually looks like I got the <title> now
17:55:43 <fizzie> Green meaning "issued the 2€ commemorative coin for this year".
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: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:58:10 <ais523> elliott_: hmm, how am I meant to react to that?
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: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:27 <elliott_> Conveeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeerge.
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:56 <elliott_> Vorpal: Observing values and hoping they approach 0.
18:07:10 <Vorpal> elliott_, for what purpose?
18:07:43 <Vorpal> elliott_, can you provide an useful explanation?
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: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: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:39 <ais523> Vorpal: do you know the game itself?
18:14:49 <Vorpal> ais523, but only from English sources afaik
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: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: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: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 <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: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: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:43 <ais523> that's all I noticed about it
18:18:46 <ais523> after I almost deleted it by mistake
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: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: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: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: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:57 <ais523> Vorpal: 3 and 4 are equally easy on paper
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: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:26:04 <elliott_> ais523: the right side length is infinite, imo
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: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: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: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: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: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: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: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:34:11 <ais523> err, does it require JS or something?
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:35:01 <ais523> well, OK, so not just JS, but data
18:35:14 <elliott_> yes they're going to violate your privacy by downloading information about the globe
18:36:02 <ais523> elliott_: well, they're going to tell Google that I use archive.org
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: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 <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: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: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: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
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: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: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: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: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: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: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:50 <ais523> I forget exactly how restrict works
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:50 <Vorpal> can someone link me a C11 draft? Google is still unusably slow here.
19:07:01 <ais523> Vorpal: there's one in scrollback
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:08:19 <ais523> ah, OK, you do need a restrict on just the output string
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: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: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:10:05 <Vorpal> elliott_, are there atomic primitives too?
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:26 <Vorpal> elliott_, I wouldn't put it past them to skip that
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:12 <Vorpal> The header <stdnoreturn.h> defines the macro
19:11:12 <Vorpal> which expands to _Noreturn.
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: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: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: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: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: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: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: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: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: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:23 <elliott_> the only reason people think writing reliable programs is hard is because our current environments make it hard
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:25 <ais523> err, that's not what I said?
19:21:42 <ais523> I implied that even a language that expressive isn't enough to keep bugs reasonably low
19:22:07 <elliott_> it's much better than C, though
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: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: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: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: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: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: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:45 <elliott_> micahjohnston: there's no point calling something insufficient if it's 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: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 <ais523> elliott_: I don't see why the best thing /can't/ sometimes be insufficient
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: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: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:25 <micahjohnston> but that by nature of the universe, we'll always have missing information
19:29:33 <elliott_> we don't try to measure the universe to 100% accuracy
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:31:16 <elliott_> if our goal was to measure the universe to 100% accuracy
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:40 <ais523> unless, you're not including the data carried by data-storing particles in your Universe measurements
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: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: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: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: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:30 <elliott_> Vorpal: I was talking about C11
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: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: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:15 <ais523> but if determinism the case, then the current universe, plus a timestamp, is enough to explain any future universe
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: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 <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: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: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:41 <ais523> because if you do, you reach silly conclusions
19:40:44 <elliott_> yay, now I can say I've told you so
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: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: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: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: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: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: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: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: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: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: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: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: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:38 <Deewiant> Vorpal: Available e.g. at http://filer.case.edu/dts8/thelastq.htm
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:53 <elliott_> I'm rather disturbed by the idea that agreeing with other people makes you less of an individual, though :p
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: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: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: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: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: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: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:55:09 <elliott_> ais523: re: causality, some people think it doesn't
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: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:05 <ais523> this strikes me as not being a coincidence
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:48 <elliott_> OK, what if you have a completely symmetrical room
19:57:51 <ais523> I was just using it as evidence towards what I thought the answer would be
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:24 <elliott_> there's clear interaction there, but they also don't diverge, barring nondeterministic effects coming into play
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: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: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: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:42 <elliott_> and they note that it could easily be an identical room
20:00:51 <elliott_> with a copy of themselves inside
20:01:07 <ais523> elliott_: but left-right reversed?
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: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: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: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 <elliott_> there's no "same X", just "Xness"
20:05:34 <ais523> I'm thinking about it at the moment
20:05:42 <elliott_> what we're learning today: booleans suck, let's use reals instead
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: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:10:23 <Vorpal> I might read that when I get home then
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: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: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: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: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: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: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: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: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: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: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: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: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: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:44 -!- iconmaster_ has joined.
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_> 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: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: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: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: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: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:24 <Slereah_> Also cheating : Using the code to grab it from the internet
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: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: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:19:20 -!- Slereah_ has quit (Ping timeout: 244 seconds).
22:20:22 -!- Slereah_ has joined.
22:25:35 <Sgeo> kallisti, elliott_ update
22:26:37 <Ngevd> I get paranoid about my connection
22:26:56 <fizzie> What new features in the updated elliott?
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:44 <Ngevd> Well, if this message gets through, goodnight
22:28:47 <fizzie> Is downforeveryoneorjustme.com down?
22:29:05 <Sgeo> Unless you can't see what others say
22:29:18 <Sgeo> Except Ngevd saw my update, s
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: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: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: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: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: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: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: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: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: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: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: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: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:29 <kallisti> but yes a good pen is important
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: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: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:38 <fizzie> elliott_: Climbing speed: One "T" (Twinkle of an eye).
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:40 <elliott_> Haha, the NORAD Santa thing started because of a misprinted phone number.
22:56:21 <kallisti> !perl $_='hi \$mr ${fuck face}'; print /(?:^|[^\\])(?:[\\]{2})*\$(\w+|\{.+?\})/;
22:56:23 <itidus21> so santa becomes a mathematical problem?
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:59 <kallisti> !perl $_='hi $a $b $c ${c d}'; print /(?:^|[^\\])(?:[\\]{2})*\$(\w+|\{.+?\})/g;
22:57:07 <kallisti> !perl $_='hi \\$a $b $c ${c d}'; print /(?:^|[^\\])(?:[\\]{2})*\$(\w+|\{.+?\})/g;
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: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: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:47 <itidus21> and santa uploads your presents
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:31 <elliott_> Wow, he just jumped to Norway.
23:00:47 <elliott_> fizzie: Oh, he's visited "Hell" sinky.
23:00:56 <elliott_> fizzie: What is that building it shows?
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: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: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: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: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: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: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: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: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: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: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: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: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: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: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: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: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:35 <elliott_> Write it with arrow notation instead.
23:19:47 <monqy> I still haven't bothered learning that
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: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: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:32 <elliott_> But it's about being smart enough to pick the /right/ readable implementation that's efficient :P
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:56 <Sgeo> What's wrong with pastebin.com ?
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:47 <Sgeo> How could length be made non-strict?
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:57 <elliott_> You don't understand Haskell's evaluation model.
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: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: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: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:51:18 <Gregor> Else he wouldn't have reviewed them 8-D
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 <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 <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: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: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: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.