←2011-10-11 2011-10-12 2011-10-13→ ↑2011 ↑all
00:01:40 <CakeProphet> http://homestuck.com/
00:01:42 <CakeProphet> good website
00:02:10 <CakeProphet> oh I missed a lot of the banners.
00:03:01 <quintopia> missed? as in you couldn't get micro-gregor to jump that high
00:03:02 <quintopia> ?
00:08:12 <elliott> quintopia, websplat all day every day
00:08:55 <quintopia> elliott: are you working on a websplatting AI?
00:09:35 <elliott> totally
00:10:33 <quintopia> awesome. it would be the best thing ever made since...
00:10:37 <quintopia> well, since websplat i suppose
01:07:59 -!- derdon has quit (Remote host closed the connection).
01:08:43 <zzo38> Once I tried to pickpocket by putting something into someone's pocket. I think it was a note.
01:08:52 <zzo38> Or maybe it was a key, or some money.
01:08:57 <zzo38> I do not remember.
01:12:56 -!- Sgeo|web has joined.
01:13:09 <Sgeo|web> pikhq_: is my explanation of magic quotes at least half decent?
01:13:13 <Sgeo|web> :/
01:15:54 <elliott> No you are full of lies.
01:15:59 -!- SimonRC has quit (Ping timeout: 260 seconds).
01:17:37 -!- SimonRC has joined.
01:23:16 <Gregor> $ pwd \ /home/gregor/browsers \ $ du -hs . \ 1.7G .
01:25:20 <Sgeo|web> elliott: the reason I asked pikhq is because he can see my Facebook stuff
01:25:24 <Sgeo|web> You cannot.
01:25:41 <elliott> Or can I?
01:25:43 <Sgeo|web> At least, not that particular status
01:25:51 <Sgeo|web> At least, you shouldn't be able to
01:38:10 <zzo38> How good are you at tetris while blindfolded?
01:48:56 <Sgeo|web> Avoid using native code (i.e. C/C++) if at all possible in situations where one needs to make security guarantees; instead opt to use a Very High Level Language by default.
01:49:10 <Sgeo|web> Um, EFF? There are high-level languages that might qualify as native code
01:49:31 <Sgeo|web> https://www.eff.org/2011/october/guidelines-open-source-security-audits
01:49:49 <zzo38> You can do security in C, you just need to be careful.
02:00:04 -!- augur has quit (Read error: Connection reset by peer).
02:00:54 -!- augur has joined.
02:05:06 <pikhq_> Sgeo|web: Oh, so that's where it is.
02:06:08 <pikhq_> Jesus, PHP *does* that?
02:08:57 <Sgeo|web> Well, with magic quotes enabled
02:09:13 <Sgeo|web> http://php.net/manual/en/security.magicquotes.php
02:10:34 <zzo38> I suggest, don't use magic quotes mode.
02:10:54 <Sgeo|web> zzo38: I suggest, magic quotes must DIE
02:11:11 <Sgeo|web> They must die a horrible and painful death
02:14:48 -!- CakeProphet has quit (Quit: Lost terminal).
02:15:07 <Sgeo|web> I mean, presumably it slaps \ in front of \ too
02:15:20 <Sgeo|web> ^^not helpful
02:17:06 <Sgeo|web> This is the sort of thing that, if it existed in a language like Falcon, we'd point and laugh and move on with our lives
02:17:21 <elliott> we do.
02:17:25 <elliott> you don't
02:18:17 <Sgeo|web> Bluh?
02:18:44 <elliott> we do point and laugh and move on with our lives
02:18:56 <elliott> who gives a shit about magic_quotes
02:20:15 <Sgeo|web> People in a web development class where the professor's server has magic quotes enabled?
02:21:01 <elliott> have i told you to transfer, i forget entirely.
02:28:56 -!- copumpkin has joined.
02:29:56 <Patashu> my little php: quoting is magic
02:33:29 -!- Vorpal has quit (Ping timeout: 258 seconds).
02:37:18 <TeruFSX> what's a "very high level language" anyway
02:38:20 <TeruFSX> i guess they probably mean Python or something, but you can still write insecure code in it!
02:39:47 <Sgeo|web> It's less tricky to write secure code in a very high level language, I think
02:49:13 <Patashu> it's like the difference between trying to secure a truecrypt volume and a truecrypt hidden volume
02:49:22 <Patashu> you can fuck up both but hidden volumes give you 1000% more ways to fuck it up
02:49:56 <Patashu> like, uh oh, don't use any program that writes to the non hidden portion! or, uh oh, make sure you can account for time you're spending on the hidden and non hidden oses when they review log files on it!
02:52:25 <elliott> as opposed to how to fuck up a truecrypt volume: you already have, by Patashu's standards
02:52:36 <elliott> also lol @ anyone who uses truecrypt
02:53:10 <Sgeo|web> I'm still not sure why lol @ truecrypt, but I see elliott's point re. fucking up a truecrypt volume
02:53:23 <elliott> truecrypt is really shady
02:53:55 <elliott> open source only in unreviewed source dumps every major release
02:54:08 <elliott> forum mods ban criticisers relentlessly
02:54:39 <Patashu> truecrypt is good for securing
02:54:39 <elliott> trust truecrypt = you're either unaware or an idiot
02:54:42 <Patashu> not for plausible deniability so much
02:54:44 <Sgeo|web> This isn't a logic error. The idea is to prevent a user-triggered information leak by not showing this error to the user in case a production server is misconfigured and running with display_errors turned on.
02:54:55 <elliott> Patashu: no
02:54:58 <Sgeo|web> https://bugs.php.net/bug.php?id=47494
02:54:59 <pikhq_> elliott: Unreviewed source dumps every *major* release?
02:54:59 <Patashu> alternatively, the fbi SAID they couldn't crack truecrypt just to keep people using truecrypt:
02:55:00 <Patashu> tinfoil:
02:55:04 <elliott> it is good for nothing
02:55:12 <pikhq_> And yet... They do minor releases...
02:55:29 <Patashu> Operation Satyagraha
02:55:29 <Patashu> In July 2008, several TrueCrypt-secured hard drives were seized from a Brazilian banker Daniel Dantas, who was suspected of financial crimes. The Brazilian National Institute of Criminology (INC) tried unsuccessfully for five months to obtain access to TrueCrypt-protected disks owned by the banker, after which they enlisted the help of the FBI. The FBI used dictionary attacks against Dantas'
02:55:29 <Patashu> disks for over 12 months, but were still unable to decrypt them.[34]
02:55:39 <elliott> pikhq_: ok, every release
02:55:40 <Patashu> so is the fbi stupid or acting stupid?
02:55:42 <elliott> no repo
02:55:43 <elliott> brb
02:56:08 <Sgeo|web> The problem isn't whether gov't has access, but whether the truecrypt devs might have access
02:56:09 <pikhq_> You can also only make unmodified distributions.
02:56:11 <Sgeo|web> I think
02:56:24 <elliott> pikhq_: ah yes
02:56:25 <elliott> brb
02:56:26 <Patashu> oh no, the truecrypt devs will arrest me
02:56:46 <pikhq_> Sgeo|web: Iff the source corresponds to extant binaries, then it should at least *hypothetically* be possible to discover such things.
02:57:08 <Sgeo|web> Not for the minor releases if what elliott says is true
02:57:26 <pikhq_> There's a reason I specified "iff the source corresponds to extant binaries".
02:57:38 <pikhq_> Still, this is only slightly less shady than pure uninspectable proprietary software.
02:57:52 <Patashu> open source = shady?
02:58:33 <pikhq_> Patashu: It's non-free shit that happens to do source code dumps.
02:58:55 <Patashu> it's not free but it's open source? ?_?
02:59:03 <pikhq_> Nor is it OSI-compliant.
02:59:07 <elliott> Patashu: it is not open sourec
02:59:08 <elliott> ce
02:59:11 <elliott> it is viewed source only
02:59:20 <Patashu> hrmm
02:59:21 <pikhq_> They dump source publically on releases.
02:59:32 <Patashu> could I make a truecrypt fork with the source?
02:59:36 <elliott> no
02:59:39 <elliott> not distributing it at least
02:59:41 <elliott> now
02:59:42 <Patashu> what would happen if- oh?
02:59:43 <Patashu> huh
02:59:47 <elliott> <Patashu> In July 2008, several TrueCrypt-secured hard drives were seized from a Brazilian banker Daniel Dantas, who was suspected of financial crimes. The Brazilian National Institute of Criminology (INC) tried unsuccessfully for five months to obtain access to TrueCrypt-protected disks owned by the banker, after which they enlisted the help of the FBI. The FBI used dictionary attacks against Dantas'
02:59:48 <Patashu> weird that such a thing even exists
02:59:49 <elliott> <Patashu> disks for over 12 months, but were still unable to decrypt them.[34]
03:00:02 <elliott> Patashu: if you think that the only standard of trust is "can be broken now" rather than "is trustable"
03:00:06 <elliott> i don't know what to say to you
03:00:07 <elliott> the question is not
03:00:10 <elliott> can the fbi break into truecrypt
03:00:12 <elliott> the question is
03:00:16 <elliott> if someone put a backdoor in truecrypt
03:00:20 <elliott> how the fuck would you know>
03:00:23 <Patashu> by viewing the source?
03:00:31 <Patashu> or is this some kind of magical backdoor that doesn't appear in the source code
03:00:39 <elliott> hahahahahaha
03:00:40 <elliott> Patashu: so
03:00:47 <elliott> you have read the source to truecrypt right?
03:00:52 <Patashu> of course not
03:00:54 <elliott> and are an expert in cryptography?
03:00:57 <Patashu> nope
03:01:06 <elliott> and, oh, are VERY good at finding exploits? if you think this is easy
03:01:12 <elliott> then read the winners of the underhanded c contest
03:01:17 <Patashu> yeah I have
03:01:18 <Patashu> it's p. crazy
03:01:20 <elliott> and that doesn't even have real stakes!
03:01:35 <elliott> if you use truecrypt, you have already lost, nobody to my knowledge reviews the source, the end
03:01:42 <elliott> secondly
03:01:55 <pikhq_> TrueCrypt does not meet even *basic* levels of trustworthiness.
03:02:02 <elliott> if you would seriously be surprised by the fbi lying about being able to break truecrypt I also don't know what to say to you; that's not conspiracy shit
03:02:11 <elliott> that's "you don't give up a huge tactical advantage in public" shit
03:02:31 <elliott> not that I'm saying they lied -- it's quite irrelevant
03:02:39 <elliott> but if you would be seriously surprised to find out they did... ehh, that's just naivety
03:02:53 <elliott> anyway yes "major release" was a mistake
03:03:37 <elliott> Patashu: btw if you consider something like dm-crypt, that's built on top of the Linux kernel's cryptographic APIs which will have a huge number of eyes on them, especially considering how much corporate reliance on linux there is -- and by all the distro devs, etc. etc.
03:03:40 <elliott> it's properly open source
03:03:48 <elliott> there are no shady forum mods to ban people who criticise their policies
03:04:05 <elliott> it is developed in the open -- mailing lists and so on
03:04:24 <pikhq_> Linux in particular seems almost designed to *maximize* the number of eyes on it.
03:04:29 <elliott> ...it's a completely different world to truecrypt, which is completely untrustable.
03:05:47 <elliott> Patashu: besides, I think even Windows comes with full-HD encryption support these days.
03:05:52 <elliott> which means every major OS does.
03:06:39 <elliott> Patashu: oh and, I bet 90 percent of truecrypt users use the binarise
03:06:40 <elliott> binaries
03:06:50 <elliott> Patashu: what's to stop them publishing an inaccurate source tarball?
03:06:54 <elliott> and exploiting only the binary
03:07:05 <Gregor> elliott: Well over 90 percent of Linux users use the binaries :)
03:07:15 <elliott> Gregor: yep, but with debian the process is very automated and open
03:07:19 <elliott> Gregor: for instance
03:07:42 <elliott> it would be much much harder to get debian ship a binary that doesn't correspond to the source :)
03:07:53 <pikhq_> Most of the time the distro's processes are pretty open.
03:08:31 <Sgeo|web> "Users can insert associative arrays in GET requests, which could then become unwanted $-queries."
03:08:35 <Sgeo|web> wat.
03:08:51 <pikhq_> And even when it's not they'd probably have trouble getting away with that. For instance, I highly doubt RHEL could get away with shipping even a single binary mismatching source.
03:09:31 <elliott> Sgeo|web: register_globals
03:09:58 <elliott> Sgeo|web: ?x=y --> $x == "y"
03:11:12 <Patashu> haha, the underhanded C entries are clever
03:11:53 <Sgeo|web> elliott: sheer genius.
03:12:08 <elliott> Sgeo|web: ?admin=yes
03:12:26 <elliott> I wonder if register_globals and magic_quotes have ever worked together to prevent a security hole
03:12:27 <elliott> like
03:12:29 <elliott> someone did
03:12:38 <elliott> if ($token == "'") { ... }
03:12:39 <elliott> and someone did
03:12:41 <elliott> ?token='
03:12:41 <lambdabot> Unknown command, try @list
03:12:46 <elliott> but $token became "\\'"
03:12:50 <elliott> thanks to magic_quotes
03:12:53 <elliott> and so the application was saved
03:14:00 <Sgeo|web> Actually, this is something different. Although I guess less terrible
03:14:05 <Sgeo|web> http://www.php.net/manual/en/mongo.security.php
03:14:09 <Sgeo|web> But just... still weird
03:14:44 <elliott> ah, right
03:14:50 <elliott> that's fairly understandable really
03:14:58 <elliott> although nobody should use such complex get queries probably :-)
03:15:38 <elliott> (and so it should not do such complex parsing)
03:17:48 <Sgeo|web> I'm addicted to a small subreddit
03:17:53 <Sgeo|web> /r/lolphp
03:28:29 <Sgeo|web> I guess the equiv. of such oddities in other languages like Ruby would be more found in the frameworks
03:28:42 <Sgeo|web> So RoR might have odd issues like that while SInatra doesn't, or visa versa
03:28:46 <Sgeo|web> *Sinatra
03:36:51 <elliott> Hmm, I should probably start writing that compiler.
03:37:13 <elliott> Well, continue.
03:41:17 <elliott> shachaf: Maybe I will use trifecta; looks like I'd have to rip out part of Parsec to get it to be portable anyway.
03:41:50 <shachaf> elliott: Makes sense.
03:42:02 <shachaf> I hear Trifecta is going to contain at least 12 Parsecs.
03:42:04 <elliott> (The token stuff uses polymorphic components.)
03:42:14 <elliott> (Admittedly this is like the minorest thing ever.)
03:42:43 <elliott> Hmm, nah, it'll be easier just to roll my own version of that when the time comes.
03:44:34 <elliott> Ehh... since when is "primitive" a reserved name in Haskell?
03:44:52 <elliott> This Parsec module is full of lies. _ccall_ and _casm_ and forall aren't either, to my knowledge.
03:45:05 <shachaf> Will QHC support dependent types?
03:45:10 <shachaf> It had better support dependent types.
03:46:18 -!- CakeProphet has joined.
03:46:24 <CakeProphet> okay so
03:46:46 <elliott> _
03:46:46 <elliott> __ _| |__ ___
03:46:46 <elliott> / _` | '_ \ / __|
03:46:46 <elliott> shachaf: No, | (_| | | | | (__ will not support dependent types.
03:46:46 <elliott> \__, |_| |_|\___|
03:46:46 <elliott> |_|
03:47:00 <CakeProphet> what's an example of a tree whose left and right subtrees are complete, but the whole tree is full.
03:47:05 * shachaf feels one-upped. :-(
03:47:08 <CakeProphet> this has been stumping me for some time. help #esoteric-homework
03:47:18 <elliott> shachaf: Well, I didn't use any freaky-deaky Unicode.
03:47:26 <CakeProphet> *whole tree is not full
03:47:34 <CakeProphet> er wait
03:47:44 <CakeProphet> not left and right subtrees are full but the whole tree is not complete.
03:47:49 <CakeProphet> wetijwreiuthwert
03:47:54 <elliott> shachaf: But don't worry; 𝕢𝕙𝕔 loves us all, even if we aren't masters of obscurity.
03:48:03 <CakeProphet> my brmy brain is broken.
03:48:36 <CakeProphet> uh does an empty tree count as full?
03:48:46 <shachaf> elliott: Those Unicode characters are so advanced my IRC client doesn't even display them.
03:49:02 <shachaf> elliott: I'm going to call them "Unicorn characters".
03:49:05 <elliott> shachaf: Probably a font issue.
03:49:08 <elliott> It's just blackboard bold.
03:49:13 <elliott> Lowercase blackboard bold.
03:49:13 <shachaf> No, not a font issue.
03:49:15 <elliott> The most common of things.
03:49:23 <elliott> shachaf: Why would your terminal fail to display them? BMP issues?
03:49:23 <pikhq_> Hmm. I could've *sworn* I had blackboard bold available.
03:49:24 <shachaf> If I open a new terminal and type some similar characters in, it works.
03:49:32 <elliott> I think the characters you used were outside of the BMP, too...
03:49:34 <elliott> What terminal?
03:49:36 <elliott> IIRC Qt is BMP-only.
03:49:52 <shachaf> elliott: It's one of ssh/irssi/screen/something about the remote host.
03:49:52 <pikhq_> I made a point of getting fonts for as much of Unicode as could be managed.
03:49:57 <shachaf> gnome-terminal
03:50:06 <elliott> shachaf: It's not ssh.
03:50:08 <shachaf> I think it's something about the host.
03:50:09 <elliott> At least I very much doubt it.
03:50:13 <CakeProphet> so is an empty tree considered full?
03:50:14 <pikhq_> (yes, I *do* have fonts for hieroglyphics!)
03:50:28 <elliott> pikhq_: What's the best font I can get that covers as much of Unicode as possible?
03:50:30 <elliott> FOSS preferred.
03:50:45 <shachaf> 𝴞
03:50:48 <shachaf> Does that show up?
03:50:53 <elliott> shachaf: No.
03:50:56 <elliott> Font issue.
03:50:57 <shachaf> Wait.
03:50:59 <pikhq_> elliott: I do not know, insofar as I can tell there is not any *single* font with a satisfactory coverage.
03:51:01 <shachaf> 𝄞
03:51:02 <elliott> (I'm using XChat so Unicode works perfectly.)
03:51:04 <shachaf> How about that?
03:51:05 <elliott> pikhq_: OK, gimme a short list :P
03:51:06 <elliott> shachaf: Yep.
03:51:10 <shachaf> G Clef?
03:51:20 <elliott> Yes.
03:51:32 <pikhq_> Common fonts typically hit all of the BMP but CJK, though.
03:51:48 <shachaf> If I ssh to the host that's running my IRC client and enter that characters, bash/readline/whatever turns it into a bunch of escape sequences.
03:51:51 <elliott> I'm interested in the more astral shit. As they say, in the hood.
03:51:55 <shachaf> So it's probably something about something about the host.
03:52:05 <elliott> Try telnet. :p
03:52:18 <elliott> I suspect termcap issues or something
03:52:21 <pikhq_> $ ls ~/.fonts|wc -l
03:52:22 <pikhq_> 87
03:52:25 <pikhq_> Any further questions?
03:52:45 <CakeProphet> okay you guys are definitely ignoring me. ragequit time.
03:52:48 -!- CakeProphet has quit (Quit: Page closed).
03:52:51 <shachaf> shachaf@argon:~$ ls ~/.fonts|wc -l
03:52:51 <shachaf> ls: cannot access /home/shachaf/.fonts: No such file or directory
03:52:51 <shachaf> 0
03:52:53 <elliott> Hey, it worked.
03:53:50 <shachaf> shachaf@argon:~$ echo $(ls | egrep '^..?$')
03:53:50 <shachaf> a B c d D df e FF g hp io is j k lb m M MC o O p R Ro rt t u v W x xf y Z ZZ
03:54:08 <elliott> shachaf: ls | wc -l
03:54:14 <shachaf> 138
03:54:47 <elliott> shachaf: rm -rf .
03:55:14 <shachaf> shachaf@argon:~$ rm -rf .
03:55:14 <shachaf> rm: cannot remove directory: `.'
03:55:41 <elliott> find . -exec rm -rf '{}' \;
03:56:54 * shachaf once did rm -rf ~/* accidentally.
03:57:06 <elliott> The solution is to always intend it.
03:57:12 <shachaf> No, it was just rm -rf ~
04:00:31 <elliott> No.
04:00:53 <elliott> `exec ls -lh /dev/null
04:00:55 <HackEgo> ​/home/hackbot/hackbot.hg/multibot_cmds/lib/limits: line 5: exec: exec: not found
04:00:56 <elliott> Oops.
04:00:59 <elliott> crw-rw-rw- 1 root root 1, 3 2011-10-11 18:32 /dev/null
04:01:01 <elliott> There we go.
04:01:51 <elliott> shachaf: but seriously, primitive isn't a reserved word, is it?
04:03:17 <shachaf> > reserve primitive
04:03:18 <lambdabot> now it is
04:03:29 <elliott> Oh no.
04:03:30 <shachaf> > primitive + 1
04:03:31 <lambdabot> *Exception: Reserved word used as identifier
04:03:36 <elliott> :-D
04:03:42 <elliott> > reserve let
04:03:42 <lambdabot> <no location info>: parse error on input `let'
04:04:24 <elliott> > unreserve іn
04:04:25 <lambdabot> Not in scope: `
04:04:28 <elliott> >:(
04:04:39 <elliott> > unreserve іn
04:04:40 <lambdabot> Not in scope: `
04:04:49 <elliott> > unreserve іn
04:04:51 <lambdabot> Unreserved.
04:04:58 <elliott> > let іn = 99 in іn
04:04:59 <lambdabot> 99
04:05:08 <elliott> shachaf: That would be more impressive if I hadn't repeatedly fucked up.
04:05:28 <shachaf> > "let іn = 99 in іn"
04:05:28 <lambdabot> "let \1110n = 99 in \1110n"
04:06:10 <elliott> -- "as","qualified","hiding"
04:06:16 <elliott> ARE YOU TELLING ME THOSE AREN'T RESERVED NAME >_<
04:06:18 <elliott> names
04:06:43 <shachaf> elliott: Context?
04:07:03 <elliott> shachaf: http://hackage.haskell.org/packages/archive/parsec/3.1.2/doc/html/src/Text-Parsec-Language.html, "haskell98Def" (upon which the also-lying "haskellDef" is built)
04:07:18 <elliott> primitive is not a reserved name; as, qualified and hiding /are/, so why are they commented out?
04:07:27 <elliott> And _ccall_ and _casm_ and forall are also not reversed names.
04:07:30 <elliott> identLetter = identLetter haskell98Def <|> char '#'
04:07:33 <elliott> What the fuck are you smoking???
04:07:39 <elliott> This is so stupid.
04:07:49 <shachaf> > let qualified = 5 in qualified
04:07:49 <lambdabot> 5
04:07:52 <shachaf> No Unicode.
04:07:57 <elliott> Huh.
04:07:59 <elliott> Seriously?
04:08:00 <elliott> > let as = 9 in as
04:08:01 <lambdabot> 9
04:08:05 <elliott> > let hiding = 9 in hiding
04:08:06 <lambdabot> 9
04:08:09 <elliott> >_<
04:08:16 <elliott> So why doesn't "deriving" get that treatment
04:08:21 <shachaf> > let forall = 5 in forall
04:08:22 <elliott> I guess for top-level declarations
04:08:22 <lambdabot> 5
04:08:33 <elliott> OK, better question - why does forall get that treatment when RankNTypes is on?
04:08:34 <elliott> (Does it?)
04:08:49 <shachaf> > let forall :: forall forall. forall -> forall; forall forall = forall in forall x
04:08:50 <lambdabot> <no location info>: parse error on input `forall'
04:08:51 <elliott> Why does export get that treatment when it's as context-specific as as/qualified/hiding? (Does it?)
04:09:37 <shachaf> > let export = 1 in export
04:09:38 <lambdabot> 1
04:10:27 <shachaf> > let forеign = id in forеign oil
04:10:28 <lambdabot> oil
04:10:52 <shachaf> elliott: Are you coming to BostonHaskell in ~2 weeks?
04:10:56 <elliott> No.
04:15:23 <zzo38> The word "forall", "qualified", and "hiding" have special meanings in some cases, but it would not be ambiguous to use them in expressions since the special meanings of those words are not for expressions
04:16:14 <elliott> shachaf: You never told me Control.Applicative wasn't part of the standard.
04:16:57 <zzo38> For the word "foreign" it is different because it can occur as the first word of a top level declaration
04:17:20 <shachaf> elliott: I thought you knew. You never told me!
04:17:30 * shachaf isn't sure whether elliott is even worth talking to.
04:17:35 <elliott> I'm not.
04:18:29 <shachaf> It's a good thing I don't talk to you, then, but to an IRC user of the same name.
04:18:52 <elliott> He's not worth talking to, either.
04:19:07 <shachaf> What, conal?
04:19:09 <shachaf> Why not?
04:19:56 <shachaf> elliott: Anyway, if Applicative was part of the standard, it'd be a superclass of Monad.
04:20:05 <shachaf> Just like Functor would... Um...
04:20:06 <elliott> No it wouldn't. Functor isn't.
04:20:08 <elliott> :p
04:20:26 <elliott> pModule :: Parser Module
04:20:26 <elliott> pModule = Module
04:20:26 <elliott> `fmap` (reserved "module" >> pModName)
04:20:26 <elliott> `ap` wowIHateThisStyleAlready
04:20:41 <zzo38> But the "foreign" I know is wrong because of a defect in my IRC client causing Unicode input not working, so if I highlight it and paste it, the "e" will not be pasted.
04:21:06 <shachaf> elliott: Sigh... Just use Control.Applicative.
04:21:12 <elliott> NOT
04:21:13 <elliott> PORTABLE
04:21:14 <elliott> ENOOUGH
04:21:15 <shachaf> elliott: Next you'll tell me you won't implement hierarchical modules.
04:21:22 <elliott> Those are standard.
04:23:24 <elliott> pModule :: Parser Module
04:23:24 <elliott> pModule = Module
04:23:25 <elliott> `fmap` (reserved "module" >> pModName)
04:23:25 <elliott> `ap` pExports
04:23:25 <elliott> `ap` (reserved "where" >> pImports)
04:23:25 <elliott> `ap` (return [])
04:23:27 <elliott> where pModName = undefined; pExports = undefined; pImports = undefined
04:23:29 <elliott> Truly, the height of elegance.
04:24:33 <elliott> Parses an upper case letter (a character between 'A' and 'Z'). Returns the parsed character.
04:24:38 <elliott> Parsec documentation, no. Just no.
04:25:52 <copumpkin> why not use Applicative? o.O
04:27:06 <elliott> copumpkin: NOT STANDARD
04:27:17 <copumpkin> ?
04:27:25 <elliott> copumpkin: http://www.haskell.org/onlinereport/haskell2010/
04:27:35 <elliott> I'm trying to get something self-hosted without any extensions, which is of course completely ridiculous.
04:28:04 <copumpkin> using all of base isn't "non-standard"
04:28:16 <copumpkin> Applicative doesn't require any language extensions
04:28:22 <elliott> Well, fair enough :P
04:28:34 <elliott> I'm pretty sure base itself requires a ton of language extensions though.
04:35:52 <shachaf> elliott: Control.Applicative doesn't, though.
04:35:58 <elliott> Well, no.
04:36:00 <shachaf> So just use Control.Applicative.
04:36:08 <shachaf> It's not as if you're not going to define *any* modules, is it?
04:36:12 <elliott> But I've already written like thirty lines of code.
04:36:16 <shachaf> zomg
04:36:19 <shachaf> I take it back.
04:36:23 <elliott> That's, like, three hundred lines of C.
04:36:30 <zzo38> Drawing as many cards as you can is an almost sure way to lose at Pokemon Card.
04:38:27 -!- MDude has changed nick to MSleep.
04:39:23 <zzo38> Discard your hand, and then draw seven cards. How can you hold the pencil if you do not have any hand? Professor Oak must have been drunk at that time.
04:40:26 <monqy> ah ah ah ah ah ah ah ah ah ah
04:41:37 <elliott> ag
04:41:55 <elliott> aq
04:41:57 <elliott> az
04:41:59 <elliott> monqy: hi
04:42:01 <monqy> elliott: hi
04:44:31 <elliott> monqy: waht ah
04:45:20 <monqy> it is hard to alugh when gasping for breath
04:48:22 <elliott> monqy: rip???
04:48:27 <monqy> rip.
04:48:41 <elliott> rip monqy. ded.
04:52:37 <elliott> wow, original haskell had where-/expressions/ and no let
04:52:39 <elliott> and no where clauses
04:53:39 <elliott> :t approximants
04:53:40 <lambdabot> Not in scope: `approximants'
04:53:44 <elliott> ?hoogle partialQuotiens
04:53:44 <lambdabot> No results found
04:57:29 -!- CakeProphet has joined.
04:58:26 <CakeProphet> so yeah the answer is a binary tree with a root and any kind of non-empty full right subtree
04:58:41 <CakeProphet> (assuming an empty tree is complete)
04:58:52 <monqy> hi
04:58:55 <CakeProphet> s/complete/full/
04:59:38 <CakeProphet> so then the left subtree is empty and thus full, and the right subtree is full but non-empty, so the whole tree isn't complete because it's "leaning left" (however you say that technically)
04:59:46 <CakeProphet> s/leaning left/leaning right/
04:59:57 <CakeProphet> I think I've gotten into the habit of saying the opposite of what I mean so much
05:00:04 <CakeProphet> that I literally typo with opposites.
05:03:31 <CakeProphet> oh duh, also any tree where the right subtree's height is greater than the left, and both are full.
05:03:52 <CakeProphet> the question being "draw a tree where the left and right subtrees are full, but the whole tree isn't complete"
05:06:20 <Sgeo|web> ping
05:06:22 <Sgeo|web> yay
05:06:35 * Sgeo|web ponders just clueing CakeProphet in
05:06:46 <Sgeo|web> re. relevancy of [I] characters
05:06:59 <Sgeo|web> clueing. Good word, best ... word.
05:07:15 <CakeProphet> Sgeo|web: yes please clue me in.
05:07:36 <CakeProphet> ...except I already have the right answer. But I guess you're not going to clue me in on that.
05:11:11 -!- derrik has joined.
05:12:36 <Sgeo|web> Well, that was a bit of a miscommunication
05:12:50 <CakeProphet> sure was.
05:12:58 <CakeProphet> also I figured out
05:13:04 <CakeProphet> about the homestuck stuff too.
05:13:05 <CakeProphet> I reread it.
05:14:10 <Sgeo|web> Ah, ok, good
05:14:52 <CakeProphet> on an unrelated note
05:14:56 <CakeProphet> I might be getting a pet snake soon.
05:15:00 <CakeProphet> ball python.
05:15:19 <elliott> kill python, kill guido van rossum,
05:15:24 <elliott> murder,
05:15:44 <CakeProphet> I will train my ball python to kill Dutchmen.
05:16:01 <monqy> bad people have feelings too
05:16:03 <monqy> but they're bad
05:16:04 <monqy> so it's okay
05:16:13 <CakeProphet> well, I might have to get like a burmese python or something
05:16:16 <elliott> `addquote <monqy> bad people have feelings too <monqy> but they're bad <monqy> so it's okay
05:16:18 <HackEgo> 708) <monqy> bad people have feelings too <monqy> but they're bad <monqy> so it's okay
05:16:21 <Sgeo|web> Python can't be worse than PHP, at least, right?
05:16:32 <Sgeo|web> Python's half decent except for the occasional stupid decision, I think?
05:16:41 <elliott> at least people most people don't believe php is good
05:16:48 <CakeProphet> I'll train him from a young age to kill Dutchmen. Then he will slither up to Guido's bed, coil around his body (crushing his bones), and then swallow him whole.
05:16:52 <elliott> python has deluded quite a few
05:16:56 <elliott> including you apparently
05:17:28 <CakeProphet> elliott: I'm under the impression that Ruby might be a better language than Python, but currently don't actually know much about the standard library just basic syntax-semantics.
05:17:41 <CakeProphet> what say you about Ruby?
05:17:53 <elliott> im not in the business of comparing crap things but ruby is probably slightly better than python in some ways and worse in many other ways
05:17:53 <Sgeo|web> Fix lambda, add TCO, then would Python be decent?
05:17:57 <elliott> so let's call it even, and use neither
05:17:59 <elliott> Sgeo|web: no
05:18:06 <CakeProphet> Python needs way more stuff.
05:18:26 <monqy> i have to use python for scvhool stuff this quarter...it burns
05:18:34 <elliott> scvhool
05:18:38 <CakeProphet> monqy: it's not too bad honestly.
05:18:42 <monqy> CakeProphet: burns
05:18:47 <Sgeo|web> Maybe I'm too used to Python, but how does Python burn?>
05:18:48 <monqy> CakeProphet: you like perl
05:18:55 <monqy> Sgeo|web: burns
05:18:59 <CakeProphet> monqy: so?
05:19:01 <Gregor> Better question:
05:19:02 <Gregor> Does it blend?
05:19:03 <Sgeo|web> How does Python burns?
05:19:05 <monqy> CakeProphet: you have bad taste
05:19:10 <elliott> Sgeo|web: maybe i will go over it some other time with you but not now and not today.
05:19:10 <monqy> Sgeo|web: bad, burns
05:19:14 <elliott> i can give you a comprehensive list.
05:19:25 <CakeProphet> monqy: maybe I'm just comfortable programming in a variety of paradigms and languages?
05:19:25 <elliott> i might want compensation for the personal distress though.
05:19:28 <elliott> CakeProphet: hahaha
05:19:42 <monqy> CakeProphet: hahaha
05:19:49 <CakeProphet> well... I am... so...
05:19:56 <CakeProphet> I don't see what's funny.
05:19:58 <Sgeo|web> When I'm in a language I don't like, I can feel it resisting against what I want to do sometimes.
05:20:10 <CakeProphet> Sgeo|web: that's typically inexperience, in my experience.
05:20:33 <CakeProphet> typically.
05:20:43 <monqy> CakeProphet: hahaha
05:20:54 <elliott> CakeProphet: so by your wonderful proof that simply being too blind to see huge gaping language flaws == just not being as awesome as you
05:21:02 <elliott> CakeProphet: i take it you are comfortable with programming in bancstar
05:21:12 <CakeProphet> elliott: I didn't say anything about being awesome at programming.
05:21:13 <elliott> if not, maybe you're just not comfortable programming in a variety of paradigms and languages
05:21:13 * Sgeo|web does need more experience, but when I look stuff up and find what would be a very quick thing in a nice language is ... not so quick in the language I'm using..
05:21:16 <CakeProphet> or knowing every language.
05:21:24 <elliott> ah, so if you knew bancstar it would be ok?
05:21:31 <CakeProphet> elliott: I don't know.
05:21:34 <CakeProphet> some languages are in fact bad.
05:21:41 <monqy> only some of them?
05:21:42 <elliott> wow
05:21:43 <elliott> yes
05:21:44 <elliott> guess what
05:21:47 <elliott> python is one of them
05:21:56 <coppro> Sgeo|web: what are you trying to do in which language?
05:21:57 <CakeProphet> that's why no one uses them to do anything.
05:22:11 <Sgeo|web> CakeProphet: Everyone uses Java, therefore it's good?
05:22:16 <CakeProphet> no, not that either.
05:22:17 <monqy> CakeProphet: people have bad taste in languageS: a known fact
05:22:17 <Sgeo|web> coppro: I don't remember
05:22:26 <monqy> people use bancstar. people use python.
05:22:29 <monqy> this is why it is a known fact.
05:22:31 <monqy> this is why
05:22:40 <Sgeo|web> I don't think people useD bancstar by choice
05:22:42 <elliott> CakeProphet: seriously, you wouldn't defend php, so you know your argument is shit from the getgo
05:22:49 <pikhq_> Python is beloved mostly because it has a fairly comprehensive library set, and presents a low barrier to entry.
05:22:53 <monqy> elliott: or would hE???
05:22:53 <elliott> people use php too
05:22:55 <elliott> to do lots of things
05:23:04 <CakeProphet> basically
05:23:11 <CakeProphet> I just have a fair degree of leniency.
05:23:14 <pikhq_> These are not the most important qualities in language design, but they are pretty powerful in shaping language popularity.
05:23:29 <Sgeo|web> PHP is awesome, with its naming conventions of "Fuck, what was the naming convention again? i for case-insensitive? I'll just use case just in case"
05:24:16 <Sgeo|web> Naming conventions that afaict contain _? as the word separator
05:24:21 <elliott> hi; poop --disgusted, hexham
05:24:22 <CakeProphet> because I can write python programs to do things rather easily. and that's... really all I care about practically. Yes I do like beauty and elegance, but it is not required for a language to be "not too bad"
05:24:27 <elliott> CakeProphet just stop
05:24:47 <elliott> you could write php programs to do things rather easily too i am sure it is not that hard to avoid and work around its numerous warts and flaws
05:24:51 <elliott> just like with python
05:25:06 <elliott> that is not in any way a coherent defence of php and if you think it is you have problems with the very concept of "good"
05:25:07 <CakeProphet> okay.
05:25:10 <zzo38> Someone told me to make some program that has HTML with three columns of buttons, to make green and red, delete, and text box to add a button. I could use PHP, but I didn't. Instead, I used SQL.
05:25:17 <Sgeo|web> If you're experienced with PHP, presumably the nonexistent naming convention wouldn't hurt so much
05:25:24 <monqy> zzo38: a wise choice
05:25:32 <CakeProphet> python has inconsistent naming conventions as well, in practice
05:25:38 <CakeProphet> yes I realize there is One True Naming Convention
05:25:40 <zzo38> Which is better, PHP or SQL?
05:25:43 * Sgeo|web covers his ears
05:25:46 <Sgeo|web> LALALALALALA
05:25:46 <zzo38> Probably it depends what things, I suppose.
05:25:49 <CakeProphet> but if you look at actual modules it varies considerably.
05:25:51 <elliott> Sgeo|web: what
05:26:01 <Sgeo|web> elliott: not actually covering my ears
05:26:06 <elliott> WOW REALLY
05:26:17 <Sgeo|web> Pretending to to make fun of myself for liking Python
05:26:49 <Sgeo|web> zzo38: isn't your IRC client written in PHP or something?
05:26:55 <elliott> write irc client in sql,
05:26:57 <elliott> (do this)
05:26:59 <elliott> omg now i
05:27:01 <elliott> want to do that
05:27:03 <zzo38> Sgeo|web: Yes it is.
05:27:10 -!- Jafet has joined.
05:27:18 <zzo38> But some day, I might possibly write a better one in C or whatever else.
05:27:33 <elliott> sql
05:27:40 <CakeProphet> elliott: I think the main difference between Python and PHP is that PHP is just really a bad version of what perl does.
05:27:45 <elliott> wow
05:27:49 <CakeProphet> wow
05:27:54 <monqy> wow
05:27:57 <monqy> oops not enough space
05:27:58 <monqy> ooops
05:27:58 <CakeProphet> you missed.
05:28:13 <monqy> p.s. why is this happening
05:28:16 <monqy> p.s.s. why
05:28:18 <monqy> er
05:28:19 <CakeProphet> monqy: get on my level. need more spaces man.
05:28:22 <zzo38> SQL is not seem very good to me for writing IRC client; SQL is best for database stuff, which is what it is designed for.
05:28:22 <monqy> p.p.s. p.p.s.
05:28:33 <monqy> p.p.p.s. not p.s.s.
05:28:35 <Sgeo|web> monqy needs a u
05:28:37 <Sgeo|web> monquy
05:28:41 <monqy> monquy
05:29:08 <CakeProphet> elliott: so defending Python by using perl is not very convincing to you, I guess.
05:29:14 <CakeProphet> cool. debates are fun.
05:29:17 <monqy> cool
05:29:30 <Sgeo|web> Calling PHP a crappy Perl really has no relation to Python one way or the other
05:29:46 <Sgeo|web> elliott: are there any good languages that has something like Shoes?
05:29:57 <CakeProphet> right I was explaining why PHP is shit and Python is not too bad (as I originally said)
05:30:00 <CakeProphet> in my opinion.
05:30:04 <pikhq_> zzo38: Well, yeah, SQL is the canonical example of a DSL.
05:30:26 <elliott> no sql is the best
05:30:27 <monqy> whats a shoe
05:30:28 <elliott> for every
05:30:29 <elliott> purpose
05:30:50 <Sgeo|web> It's a Shoes
05:30:58 <monqy> oh
05:31:00 <monqy> whats a shoes
05:31:24 <monqy> oh wait i just remembered
05:31:31 <zzo38> I agree that PHP is full of stupid stuff.
05:31:34 <elliott> nobody knows shoes
05:33:07 <zzo38> The SQL that I used happened to be SQLite.
05:33:24 <Sgeo|web> Haskell orthopedic shoes.
05:33:46 <monqy> hos
05:34:55 <Sgeo|web> In Haskell, Oklahoma.ma
05:35:31 <monqy> ih,o.m
05:35:46 <monqy> hosih,o.m
05:35:54 <monqy> is this some kind of crude joke
05:36:18 <Sgeo|web> Tyop
05:36:24 <Sgeo|web> Because freezy chromy freezy
05:36:37 <Sgeo|web> I'm lauighinhg. this is a bad sign
05:37:20 <zzo38> Are you good at playing poker and tetris simultaneously while blindfolded?
05:38:16 <CakeProphet> elliott: so do you think it's better for a programmer to be familiar and comfortable in a variety of languages? or do you think this is a waste of time?
05:38:32 <elliott> a question intimately related to the proposition "python is crap"
05:38:39 <CakeProphet> it is?
05:38:44 <CakeProphet> I was going to like, change the topic a little bit.
05:38:51 <CakeProphet> away from pointless language discussion.
05:39:26 <CakeProphet> discussion of language worth, rather.
05:39:41 <pikhq_> CakeProphet: A programmer should be familiar and comfortable in a variety of language paradigms.
05:40:08 <pikhq_> Picking up languages in a paradigm you're already familiar with is generally a trivial exercise.
05:40:14 <CakeProphet> yes, I agree. I think it makes one a well-rounded programmer. perhaps not necessarily a better programmer overall, but at least versatile.
05:40:56 <pikhq_> I should add to this that my notion of "paradigm" might be a bit less broad than most people's.
05:41:06 <pikhq_> For instance, I'm generally inclined to call Lisp a paradigm.
05:41:13 <CakeProphet> mine is not quite as broad either.
05:41:43 <pikhq_> Actually, "paradigm" might not be the right term... Though "family" isn't quite right either.
05:41:52 <pikhq_> Human language needs to be more specific than it is.
05:42:03 <CakeProphet> pikhq_: is it perhaps related to idioms?
05:42:13 <CakeProphet> languages with shared idioms?
05:42:18 <pikhq_> Not really.
05:42:20 <CakeProphet> that's a bit vague.
05:42:30 <monqy> good thing idiomatic python sucks too
05:42:33 <pikhq_> Paradigm might actually be the right term.
05:42:48 <monqy> (Why did i bring pythoin up i must be tired (will slep soon))
05:43:01 <CakeProphet> for instance, the way you might code a problem in perl would be very different from python, ruby, C, or... well anything else I can think of.
05:43:03 <monqy> ((((Help))))))))
05:43:06 <CakeProphet> similar though.
05:43:12 <CakeProphet> in that it's procedural.
05:43:33 <pikhq_> The way you might code a problem in Perl would probably most resemble the way you'd code it in awksh.
05:43:45 <pikhq_> Where awksh is a hypothetical combination of awk and sh.
05:43:48 <CakeProphet> to a degree.
05:43:59 <CakeProphet> sh for sure is similar.
05:44:14 <Sgeo|web> Is it safe to say that Perl sucks less than sh?
05:44:17 <CakeProphet> but then sh is also a unique kind of paradigm.
05:44:22 <CakeProphet> Sgeo|web: hmmm....
05:44:27 <CakeProphet> uh... yes, I think.
05:44:31 <CakeProphet> but
05:44:33 <CakeProphet> I'm bad at sh so
05:44:40 <CakeProphet> I can't really say that confidently.
05:44:55 <pikhq_> I'm inclined to say "yes-ish".
05:45:09 <CakeProphet> perl has its own weirdness.
05:45:24 <pikhq_> Perl is far overcomplicated, but sh has *really* strange properties.
05:45:40 <pikhq_> Especially if you account for differing implementations.
05:45:55 <Sgeo|web> Randall Munroe hates X
05:46:02 <elliott> everyone hates X
05:46:11 <elliott> nobody cares who hates what and you shouldn't either
05:46:20 <CakeProphet> despite perl's faults I do find programming in it to be a joy. I'm not sure why.
05:46:32 <Sgeo|web> This puts him in the set of people who know things about X, I think.
05:46:54 <pikhq_> Hating X is a pretty good indicator of sanity amongst people who know what X is.
05:46:54 <Sgeo|web> Well, no, not necessarily
05:46:57 <CakeProphet> not a priori
05:46:58 <monqy> CakeProphet: have you considered you may be a bad person
05:47:04 <CakeProphet> monqy: no.
05:47:17 <pikhq_> Sgeo|web: You can hate X easily with only a *little* bit of knowledge about it.
05:47:26 <Sgeo|web> I know what X is, and that it's widely hated, but know no details other than server/client
05:47:33 <Sgeo|web> Which seems a bit weird to me for most uses, but
05:47:37 <pikhq_> You only begin to hate it more the more you know.
05:47:38 <CakeProphet> < CakeProphet> not a priori --re: Sgeo's statement about sets
05:48:21 <Sgeo|web> And I don't think X server vs. X client is backwards. Does this make me a bad person?
05:48:50 <pikhq_> Not *really*. Which way is appropriate is really a matter of perspective.
05:48:51 <Sgeo|web> That's probably not the big issue
05:48:59 <pikhq_> Fun fact: X11 is only *technically* userspace.
05:49:06 <CakeProphet> monqy: I think finding fondness in what monqy considers bad is probably some kind of sign of good character.
05:49:09 <CakeProphet> somehow.
05:49:10 <Sgeo|web> ......technically userspace?
05:49:27 <elliott> CakeProphet: i am sure hitler thought similar
05:49:32 <Sgeo|web> Well, does it need superuser stuff to get access to the screen?
05:49:39 <pikhq_> Worse.
05:49:48 <CakeProphet> oh snap reductio ad Hitlerum
05:49:51 <CakeProphet> I've been reduced.
05:50:08 <monqy> proof cakeprophet is literally hitler
05:50:21 <zzo38> Do you prefer Xaw?
05:50:32 <pikhq_> It has access to all the RAM (well, until recent Linux or BSD *with X.org's builtin drivers*)
05:50:48 <Sgeo|web> ....what does it need with full access to RAM?
05:51:01 <pikhq_> It needs access to the video card.
05:51:12 <zzo38> "This game is bad because Hitler played it." (a message that I included in a game that I made)
05:51:18 <pikhq_> The kernel does not provide video drivers.
05:51:21 <pikhq_> X does.
05:51:43 * CakeProphet discovered recently that perl's value/reference semantics are completely different from every other language with any kind of reference-passing thing.
05:51:53 <Sgeo|web> And video drivers typically operate by manipulating stuff in RAM that the hardware reads?
05:52:18 <monqy> CakeProphet: is this a good or bad thing
05:52:19 <elliott> No shit?
05:52:24 <elliott> Sgeo|web: How did you think they operated?
05:52:27 <pikhq_> Yeah, the video cards essentially always are accessed via memory mapping.
05:52:28 <CakeProphet> monqy: neither. it was just unexpected.
05:52:31 <elliott> Sgeo|web: It's called memory-mapping.
05:52:35 <CakeProphet> monqy: resulting in a bug in my program
05:52:37 <elliott> The reads and writes go to the hardware.
05:52:52 <pikhq_> Even *VGA* functions primarily by writing directly to the framebuffer like this.
05:53:05 <CakeProphet> `perl -e "my %t=(); my $x = \%t; %t = (x=>2, y=>3); print %$x"
05:53:07 <HackEgo> No output.
05:53:12 <CakeProphet> `perl -e 'my %t=(); my $x = \%t; %t = (x=>2, y=>3); print %$x'
05:53:14 <HackEgo> No output.
05:53:15 <Sgeo|web> Ok. elliott, I don't know, CPU instructions that say "Send this to that hardware". Although I guess doing that by any means other than memory-mapping would be intolerable
05:53:16 <CakeProphet> ...wat
05:53:52 <CakeProphet> well nevermind, I still don't know how it works completely.
05:53:55 <elliott> Sgeo|web: Well, there's port IO. But it's horrible.
05:54:04 <zzo38> There is CPU instruction for port I/O
05:54:13 <pikhq_> Sgeo|web: There *are* instructions for doing that; outb and inb. There's 2^16-1 ports for that, and you can only send 16 bits per instruction, and it's a royal pain to use, and it's x86-specific.
05:54:27 <pikhq_> Sorry, not 16 bits per instruction. 8.
05:54:38 <Sgeo|web> Ok, that makes sense
05:54:47 <Sgeo|web> I mean, the use of memory-mapping
05:54:55 <Sgeo|web> I guess the complaint is that it's X that does it?
05:54:59 <Sgeo|web> Instead of kernel
05:55:07 <pikhq_> For this in particular, yeah.
05:55:22 <zzo38> I do not think port I/O is bad. It is good for some things. But memory mapping is also good for some things.
05:55:24 <pikhq_> X essentially is kernel mode stuff that pretends not to be.
05:55:34 <elliott> Have I mentioned @ handles this perfectly?
05:55:35 <pikhq_> zzo38: Port IO is just quite limited.
05:56:30 <Sgeo|web> zzo38: I'd imagine memory mapping to be good for things where a lot of stuff needs to be sent quickly
05:56:46 <Sgeo|web> Wait, it still takes CPU instructions to change RAM
05:56:53 <CakeProphet> `run perl -e '%t=(1,2); $x = \%t; %t = (1,2,3,4); print %$x;'
05:56:55 <HackEgo> 1234
05:57:00 <CakeProphet> monqy: can you read that code?
05:57:05 <CakeProphet> to see what I'm talking about?
05:57:35 <Sgeo|web> That line makes perfect sense
05:57:44 <elliott> Sgeo|web: memory-mapped IO does _not touch RAM_.
05:57:45 <CakeProphet> yes it does. now.
05:57:51 <elliott> At least not the main RAM.
05:57:53 <monqy> CakeProphet: maybe. i'll try.
05:58:04 <monqy> CakeProphet: that's gross
05:58:06 <monqy> CakeProphet: so gross
05:58:09 <monqy> CakeProphet: why would you do that
05:58:11 <monqy> CakeProphet: ughhhhh
05:58:13 <zzo38> Memory mapping is better for the video because you can put the address of memory for each character cell in the grid, or each pixel, etc.
05:58:32 <Patashu> what does % and \% mean in perl
05:58:40 <elliott> % is hash
05:58:42 <CakeProphet> % goes in front of hash variables
05:58:44 <pikhq_> Yeah, it's more that certain physical addresses just hit hardware rather than RAM.
05:58:44 <Sgeo|web> elliott: right, derp, sorry. Actually, I wasn't sure about that TBH. But it still takes instructions to update each byte of "RAM", doesn't it?
05:58:47 <CakeProphet> \ is reference
05:58:58 <elliott> Sgeo|web: Sure, if RAM writing instructions only took one byte...
05:59:06 <CakeProphet> but yeah the semantics I wanted in my program went like this:
05:59:15 <CakeProphet> `run perl -e '%t=(1,2); $x = {%t}; %t = (1,2,3,4); print %$x;'
05:59:17 <HackEgo> 12
05:59:34 <CakeProphet> basically I wanted to make a copy so that overwriting t doesn't change the value referenced by $x
05:59:35 -!- derrik has quit (Ping timeout: 252 seconds).
05:59:35 <pikhq_> Sgeo|web: Memory access can happen on the *word*, not just the byte. Also, it's pretty heavily optimised.
05:59:42 <Patashu> {%t} is code that's executed immediately?
05:59:50 <CakeProphet> no {} is a hash reference in this case.
05:59:55 <Patashu> uh-huh?
06:00:01 <Patashu> I just need to shut up about perl
06:00:16 <CakeProphet> {%t} makes a copy of %t and then returns a reference to that copy.
06:00:18 <elliott> pikhq_: also there are instructions for copying huge blocks...
06:00:25 <elliott> admittedly they're likely slower than really finely-tuned loops these days
06:00:35 <Sgeo|web> pikhq_: can I pretend the CPU is like a switch/case? If so, would the memory access instructions be closer than the port I/O ones to being first to be checked against
06:00:40 <CakeProphet> \%t just makes a reference to the /variable/ %t. So like, changing %t changes everything it references to.
06:00:47 <pikhq_> Sgeo|web: You really, truly cannot any more.
06:01:02 <Sgeo|web> pikhq_: erm, sorry?
06:01:17 <pikhq_> CPU designs are more complicated than you think.
06:01:35 <CakeProphet> also you can do fun things like:
06:01:36 <CakeProphet> `run perl -e '%t=(y=>2); $x = \$t{x}; $$x = 4; print %t;'
06:01:38 <HackEgo> y2x4
06:01:45 <pikhq_> A CPU is generally executing several instructions in parallel, with a lot of work going into making them appear to execute instructions in serial.
06:01:45 <zzo38> Port I/O would be good for keyboard, since keyboard is an external device, it need to send/receive to computer, to tell the signal of which key is pushed.
06:01:46 <CakeProphet> references to hash table keys.
06:01:49 <elliott> Sgeo|web: what
06:01:54 <elliott> Sgeo|web: switch/case compiles to a jump table
06:01:57 <CakeProphet> that may not even exist beforehand.
06:01:58 <elliott> there's no "nearness" to it
06:02:02 <elliott> (at least in C)
06:02:16 <elliott> that's, you know, the whole reason to use switch
06:02:23 <pikhq_> Or, in the case of many RISC CPUs, a lot of documentation about when you cannot assume serial execution.
06:02:25 <Sgeo|web> elliott: hence the s|switch/case|if/else if| which apparently I did not actually type
06:02:33 <CakeProphet> monqy: references are probably the grossest part of perl, I'd say.
06:02:45 <elliott> Sgeo|web: cpus don't; have never worked that way
06:02:51 <zzo38> pikhq_: Invent a nonserial CPU.
06:03:01 <CakeProphet> Python could probably benefit from having references. maybe.
06:03:17 <CakeProphet> but that will never, ever happen.
06:03:27 <pikhq_> zzo38: Take PPC, remove all serialism guarantees, add some more join primitives, bam.
06:03:44 <pikhq_> (this will probably not be any better)
06:03:46 <elliott> CakeProphet:
06:03:49 <elliott> def ref(x): return [x]
06:03:53 <elliott> def deref(x): return x[0]
06:03:58 <CakeProphet> elliott: well yes
06:03:58 <elliott> def put(x,v): x[0] = v
06:03:59 <CakeProphet> there's always that
06:04:03 <CakeProphet> you could do it via class.
06:04:07 <elliott> this is also how you do closures
06:04:08 <elliott> pre-thre
06:04:09 <elliott> e
06:04:14 <pikhq_> Sgeo|web: Also fun: there are 0 clock cycle instructions on x86.
06:04:28 <Sgeo|web> Not sure what a clock cycle instruction is
06:04:28 <CakeProphet> elliott: but it's funny how adding actual references would be AWFUL according to Python programmers.
06:04:41 <CakeProphet> elliott: even though you can already do that.
06:04:44 <pikhq_> Sgeo|web: That's "an instruction that takes 0 clock cycles to execute".
06:05:09 <Sgeo|web> I... assume that's a theoretical thing, that is it behaves as if... somehow?
06:05:22 <pikhq_> x87 is very very strange.
06:05:30 <Sgeo|web> x87 now?
06:05:38 <elliott> that's the fpu chip
06:06:01 <pikhq_> You know how it presents an API of a single floating point stack, with entries mapped to registers?
06:06:07 <elliott> i doubt he does
06:06:17 <Sgeo|web> I can imagine based on what pikhq_ just said
06:06:19 <pikhq_> x87 has instructions for various stack swapping operations on that stack.
06:06:27 <CakeProphet> Patashu: you should totally learn perl. best language. porpoises.
06:06:38 <CakeProphet> it has the best porpoises.
06:07:03 <Sgeo|web> pikhq_: x86 can swap registers without calls to x87?
06:07:22 <pikhq_> Sgeo|web: No, x87 can swap floating point registers.
06:07:23 <elliott> Man, Siri looks pretty impressive.
06:07:38 <pikhq_> Modern implementations, though, just treat that as a register rename.
06:08:00 <Sgeo|web> And this takes 0 clock cycles?
06:08:08 <Sgeo|web> Or is this something else altogether
06:08:23 <pikhq_> The operation gets stuck in the pipeline, gets decoded, and then that's the end of execution.
06:08:42 <zzo38> In D&D game I did advance level. I can take two psionic power and two spells, due to Cerebremancer class. I have already selected powers, which are, Dimension Door, Ethereal Agent, but I have not selected the spells, yet.
06:08:42 <CakeProphet> monqy: er so wait did you figure out what it did
06:08:46 <Sgeo|web> I know nothing about CPU internals
06:08:49 <CakeProphet> monqy: or did you just start calling it gross.
06:08:50 <Sgeo|web> Or, well, very, very little
06:08:54 <pikhq_> Up to a certain amount of them, and your x87 stack manipulation is free.
06:09:03 <elliott> pikhq_: well not totally free
06:09:05 <elliott> it still has to be decoded :)
06:09:27 <zzo38> I want to write a GPU program with open source Checkout. But, currently there is no such program to make that.
06:09:47 <pikhq_> elliott: Okay, pretty darned close to free.
06:10:00 <elliott> "iPhone 4 ass" -- iPhone 4S, attempting to decode someone saying its name
06:10:56 <CakeProphet> speaking of smartphones I have a phone upgrade and am thinking about wasting money on a smartphone I don't need.
06:11:11 <elliott> Oh my god tell me it doesn't know the ultimate question.
06:11:12 <Sgeo|web> Does iOS 5 allow for the sort of multitasking that would be required to have an IRC client running in the background?
06:11:12 <CakeProphet> when my Blackberry curve does everything I need. what do?
06:11:13 <elliott> Tell me
06:11:14 <elliott> it
06:11:14 <elliott> it does
06:11:21 <elliott> (Thanks to W|A but still.)
06:11:32 <elliott> HAHAHA IT KNOWS "OPEN THE POD BAY DOORS" BUILT-IN
06:11:58 <monqy> CakeProphet: you were making x reference t, mutating t, and wow it mutated x (ewwwwwwwwwwwwwwwwwww) (this was in the first one)
06:12:00 <elliott> Sgeo|web: I'm pretty sure iOS 4 had multitasking.
06:12:23 <Sgeo|web> I remember reading that it was only certain things that can multitask, or was that an earlier iOS?
06:12:25 <CakeProphet> monqy: well, x technically didn't mutate, but yes.
06:12:35 <monqy> the appearance of x mutated
06:12:38 <monqy> that betteR?
06:12:47 <elliott> "Before iOS 4, multitasking was limited to a selection of the applications Apple included on the devices.[23] Apple worried that running multiple third-party applications simultaneously would drain batteries too quickly. Starting with iOS 4, on 3rd-generation and newer iOS devices, multitasking is supported through seven background APIs:[24]"
06:12:57 <CakeProphet> monqy: actually now that I think about it this is how most languages with references/pointers work I was just expecting weird things from it.
06:13:30 <Sgeo|web> Do any of those seven background APIs allow for IRCing?
06:13:31 <elliott> Sgeo|web: anyway, a bouncer is a trivial solution to that
06:13:46 <elliott> and obviously nicer than a separate mobile connection
06:14:21 <CakeProphet> monqy: also you would use references when you want a function to produce multiple results and put them in varying locations, for example.
06:14:46 <Sgeo|web> Hmm, probably could be faked through one of them
06:14:48 <CakeProphet> monqy: this is one of the ways perl does command line option processing. you give it a hash table of the options and the variable that should be changed based on the options found.
06:15:13 <elliott> "Due to the way multitasking is implemented in iOS, Mobile Colloquy can't stay connected constantly. When you press the Home button or switch applications, Mobile Colloquy asks iOS to allow it to continue to run to complete a task in the background, that task being to keep you connected for as long as possible. Any highlight word mentions, or private messages you receive will trigger a notification whi
06:15:13 <elliott> le Colloquy is running in the background.
06:15:13 <elliott> Tasks can only last a maximum of 10 minutes, so 9 minutes after you've switched away from Colloquy it'll warn you that you'll be disconnected in a minute. To continue to stay connected, just tap Open on the alert. Switching back to Colloquy before 10 minutes have elapsed, then switching away again will reset the countdown."
06:15:17 <elliott> Sgeo|web: honestly, a bouncer is the best way
06:15:20 <monqy> CakeProphet: i.e. grose?
06:15:24 <elliott> then the only side-effect is that you only get notifications for like ten minutes but who cares
06:15:26 <elliott> oh
06:15:29 <elliott> that's wrong
06:15:32 <elliott> push notifications still work it seems
06:15:34 <CakeProphet> eh, convenient, but I guess gross by monqy's definition since it involves mutation, so yes.
06:16:07 <elliott> Sgeo|web: so yeah, tl;dr bouncers are the best solution to that, even on a phone that does full multitasking (= is sluggish, with the kind of apis unix provides)
06:16:15 <elliott> (and that most people imitate)
06:16:37 <CakeProphet> I should invent a language that operates entirely via mutation of memory locations.
06:16:40 <CakeProphet> I'll call it x86.
06:16:50 <elliott> CakeProphet: that's in cpressey's louie
06:16:54 <elliott> everything memory-mapped
06:16:56 <elliott> including control
06:17:06 <monqy> CakeProphet: ill murder you with a rusty stick
06:17:08 <CakeProphet> how does that work.
06:17:16 <pikhq_> That Wireworld CPU did the same thing.
06:17:42 <pikhq_> (Wireworld being a CA that essentially imitates electronics)
06:17:45 <elliott> oh hm
06:17:49 <elliott> CakeProphet: http://catseye.tc/projects/zowie/
06:17:53 <elliott> the louie one is an additional thing
06:17:56 <elliott> so that actually exists
06:18:19 <elliott> "ZOWIE is a programming language where all flow-control is both memory-mapped and structured. It is memory-mapped in the sense that changes in flow are triggered by changes made to memory locations, and it is structured in the sense of structured programming – the programmer never deals with gotos, offsets, or labels of any kind."
06:18:29 <elliott> omg it uses transactions
06:18:31 <elliott> this is the hottest language
06:19:20 <CakeProphet> so sexy.
06:19:27 <elliott> no sarcasm fuck you
06:20:01 <CakeProphet> if anything that was a little bit of wordplay. I don't really know anything about this language yet so sarcasm would be unwarranted.
06:20:25 <Sgeo|web> I don't know much about Wireworld except it looks interesting
06:20:38 <elliott> "Don't overcook that egg." - Siri
06:20:39 <elliott> rude
06:20:49 <Sgeo|web> Not TC though, any more than a real computer presumably
06:21:05 <elliott> :D he informs siri he's actually making tea (it said that after setting a timer), and it's rude enough to tell him about tea rooms in the area
06:21:10 <elliott> "no no, here's how to get a proper cup of tea"
06:21:19 <elliott> Sgeo|web: it is with an infinitely tiled pattern
06:21:25 <CakeProphet> monqy: oh hey guess what I made effective use of references to reduce the size of some code. nyah nyah nyah
06:22:03 -!- Ngevd has joined.
06:22:22 <Ngevd> Hello!
06:22:39 <monqy> CakeProphet: nyah in hell
06:22:55 <CakeProphet> ($grams, $fs) = \($data{$dset}, $freqs{$dset})
06:23:07 <CakeProphet> the whole "referencing a list makes a list of references" is probably the weirdest thing ever
06:23:10 <CakeProphet> but I just found a use for it...
06:24:31 * elliott resists the urge to support bad market and ethical practices
06:24:59 <Ngevd> I like Wednesdays
06:25:05 <Ngevd> :)
06:25:09 <CakeProphet> in other words \($a, $b) == (\$a, \$b)
06:25:10 <elliott> Sgeo|web: btw, i bet you could hack up "native" irc with the voice over ip stuff
06:25:15 <elliott> but it'd be awkward and terrible
06:25:19 <CakeProphet> but \@array is just an array reference.
06:25:24 <CakeProphet> because arrays are not quite the same as lists.
06:25:37 <Ngevd> Hang on, what language is this?
06:25:39 <CakeProphet> perl.
06:25:42 <CakeProphet> ..
06:25:43 <Ngevd> Okay
06:25:46 <CakeProphet> assuming you're talking to me.
06:25:56 <elliott> Sgeo|web: also all this api stuff is unrelated to the actual multitasking UI which is exposed for all apps obviously
06:26:01 <Ngevd> Thought it was Haskell for a second, got all confused
06:26:05 <CakeProphet> lol what
06:26:09 <CakeProphet> you best be trolling.
06:26:11 <Ngevd> And yes, CakeProphet, I was talking to you
06:26:17 <Ngevd> No, I'm just tired
06:26:38 -!- zzo38 has quit (Quit: I am also tired.).
06:26:41 <CakeProphet> elliott and monqy are going to kill you in your sleep now. I imagine.
06:26:41 <elliott> "The secondary design goal of ZOWIE was to strike the perfect balance between It's a Mad Mad Mad Mad World and The Party. It is generally considered a morbid failure in that regard, what with not being a madcap 60's movie and all."
06:26:42 <Ngevd> And possibly hallucinating
06:26:46 <elliott> zzo38: best quit message
06:27:10 <Ngevd> Can we add quit messages to the quotes?
06:28:02 <CakeProphet> ($grams, $fs) = \($data{$dset=$1}, $freqs{$dset})
06:28:03 <CakeProphet> bahahahaha
06:28:05 <CakeProphet> so evil.
06:28:14 <elliott> Ngevd: yes but it'd need more context than is reasonable to work well i think
06:28:19 <monqy> CakeProphet: why are you doing this......
06:28:36 <CakeProphet> monqy: well I did that because it removed a line of code and isn't really all that difficult to follow.
06:29:40 <Ngevd> <Ngevd> I'm just tired - zzo38 has quit IRC: Quit: I am also tired.
06:29:46 <Ngevd> PERFECT
06:29:49 <monqy> it depnds on the order of evaluation of the things in the thing aghahgahghaghaghahgahghaghaghaghh
06:29:58 <CakeProphet> monqy: that's fine
06:30:00 <monqy> no
06:30:01 <monqy> it isnt
06:30:02 <CakeProphet> monqy: it's left to right.
06:30:03 <monqy> dIE
06:30:36 <CakeProphet> monqy: I would never rely on order of evaluation in a non-strict language. but this is not one of those languages.
06:31:27 <Sgeo|web> WHILE+arithmatic+unbounded num of registers = TC?
06:31:27 <elliott> you can't rely on order of evaluation in a non-strict language
06:31:28 <elliott> usually
06:31:36 <CakeProphet> elliott: precisely.
06:31:38 <elliott> Sgeo|web: most things are tc
06:31:46 <CakeProphet> elliott: or, rather, it requires some pondering.
06:31:50 <CakeProphet> but can be done in some situations.
06:32:07 <CakeProphet> actually I don't even need $dset I can just put $1 there.
06:32:10 <CakeProphet> even better.
06:32:20 <elliott> Sgeo|web: 0 - delete leftmost bit (of program); 1 -> look at next bit x; if leftmost program bit is 1: copy x to right end of program
06:32:27 <elliott> Sgeo|web: cycle to beginning when reaching the end
06:32:32 <elliott> Sgeo|web: that's most likely TC
06:32:56 <elliott> empty program string → halt, if you want a halting state (it'll just infloop otherwise)
06:33:05 <CakeProphet> monqy: let's see.. how else can I make you hate me.
06:33:06 <elliott> no loop apart from one outer, unconditional loop; only one conditional
06:33:09 <CakeProphet> oh I know I could remove all unecessary spaces.
06:33:14 <elliott> and that conditional has no loop-breaking power
06:33:19 <elliott> and also no data outside the program
06:33:21 <CakeProphet> parse$fl close$f; etc
06:33:26 <CakeProphet> -l
06:33:28 <elliott> if that's TC, how could while+arithmetic not be? :-)
06:33:41 <CakeProphet> but I won't do that because spaces are good.
06:34:31 <monqy> can you make all loops/recursion be done by self-modification
06:34:36 <CakeProphet> but when golfing NO INSIGNIFICANT SPACES ALLOWED.
06:34:53 <CakeProphet> otherwise those sigils would add up.
06:36:46 <elliott> ?undo do x <- f a; g b >>= h x
06:36:47 <lambdabot> f a >>= \ x -> g b >>= h x
06:36:48 <elliott> ?. pl undo do x <- f a; g b >>= h x
06:36:48 <lambdabot> (g b >>=) . h =<< f a
06:37:45 <Sgeo|web> Oh, I see why it's called undo
06:37:47 -!- nooga has joined.
06:37:57 <CakeProphet> Sgeo|web: ...good job.
06:38:09 <Sgeo|web> CakeProphet: when I saw it used before this, it was with a list comprehension
06:38:21 <elliott> "Note note: It seems some of you are having trouble understanding the version system being used for SMITH, which is eminently understandable given that it is completely inconsistent. The first version had no version. The second version, released a scant few days later, containing many new instructions, was "v2". That version was re-christened "version 2.0L" when we added the BSD license to it (because
06:38:22 <elliott> "L" is for "license", y'see?) The third version, released a scant few years later, was "version 2007.0722". This was back when we thought date-based version numbers could substitute entirely for sequence-based version numbers. This version was also known as "version 2.1 revision 2007.0722" when we dropped that idea. The current version, which differs mainly in that its documentation contains this parag
06:38:22 <elliott> raph, is version 2.1-2011.0922. Your knowledge is now complete. Go home."
06:38:22 <CakeProphet> oh okay.
06:38:46 <CakeProphet> Closes the file or pipe associated with the filehandle, flushes the IO buffers, and closes the system file descriptor. Returns true if those operations succeed and if no error was reported by any PerlIO layer. Closes the currently selected filehandle if the argument is omitted.
06:38:53 <CakeProphet> I wonder what the hell the "currently selected" filehandle is.
06:39:00 <CakeProphet> I guess the... last thing I opened?
06:39:30 <Sgeo|web> is it bad that i started versioning for my product at 5
06:39:35 <elliott> yes you are bad die
06:39:52 <Sgeo|web> next version will be 5.1
06:40:16 <CakeProphet> `run touch test && perl -e 'open (my $f = "test"); close; print $f "test"'
06:40:18 <HackEgo> No output.
06:40:24 <CakeProphet> `run cat test
06:40:26 <HackEgo> No output.
06:40:29 <CakeProphet> ....?
06:40:31 <CakeProphet> okay.
06:40:43 <Sgeo|web> `run ls | grep test
06:40:45 <HackEgo> test
06:41:04 <elliott> Aw, cpressey shelved rho.
06:41:08 <Sgeo|web> `run ls | grep nosuchfilenananeenerneener
06:41:10 <HackEgo> No output.
06:41:20 <CakeProphet> `run perl -e 'open ($_ = "test"); close; print $_ "test"'
06:41:21 <Sgeo|web> `run touch "No output."
06:41:22 <HackEgo> No output.
06:41:23 <HackEgo> No output.
06:41:28 <CakeProphet> `cat touch
06:41:30 <HackEgo> cat: touch: No such file or directory
06:41:35 <CakeProphet> ...
06:41:35 <elliott> `ls
06:41:37 <HackEgo> GBP_1865 \ No output. \ bin \ canary \ cups \ karma \ lib \ m \ paste \ pound_1752 \ quotes \ quotes.new \ share \ test \ wisdom
06:41:48 <elliott> `run rm GBP_1865 pound_1752 'No output.'
06:41:50 <HackEgo> No output.
06:41:53 <elliott> `run diff quotes quotes.new | paste
06:41:55 <HackEgo> http://codu.org/projects/hackbot/fshg/index.cgi/raw-file/tip/paste/paste.22839
06:42:10 <elliott> `rm quotes.new
06:42:10 <Sgeo|web> Gregor fix your HTTP headers
06:42:12 <HackEgo> No output.
06:42:12 <CakeProphet> okay so I have no idea what it means by currently selected filehandle.
06:42:13 <elliott> `ls cups
06:42:15 <HackEgo> cups
06:42:16 <elliott> `cat cups
06:42:18 <HackEgo> No output.
06:42:21 <elliott> `rm cups
06:42:22 <HackEgo> No output.
06:42:23 <elliott> `cat test
06:42:25 <HackEgo> No output.
06:42:26 <elliott> `rm test
06:42:27 <HackEgo> No output.
06:42:30 <elliott> `ls
06:42:32 <HackEgo> bin \ canary \ karma \ lib \ m \ paste \ quotes \ share \ wisdom
06:42:35 <elliott> `cat m
06:42:35 <Sgeo|web> `run echo "No output." > "No output."
06:42:36 <HackEgo> No output.
06:42:38 <HackEgo> No output.
06:42:41 <elliott> `run rm "No output."
06:42:43 <HackEgo> No output.
06:42:43 <elliott> `rm m
06:42:45 <HackEgo> No output.
06:42:46 <elliott> `ls
06:42:48 <HackEgo> bin \ canary \ karma \ lib \ m \ paste \ quotes \ share \ wisdom
06:42:50 <elliott> `rm m
06:42:51 <elliott> `ls
06:42:53 <HackEgo> rm: cannot remove `m': No such file or directory
06:42:53 <Sgeo|web> elliott: killjoy
06:42:53 <HackEgo> bin \ canary \ karma \ lib \ paste \ quotes \ share \ wisdom
06:43:02 <elliott> Sgeo|web: I don't want HackEgo to end up filled with shit again.
06:43:05 <CakeProphet> time to ask #perl I guess.
06:44:47 <CakeProphet> ah okay so the currently selected filehandle is selected via the select function.
06:44:53 <CakeProphet> okay...
06:47:30 <CakeProphet> so select $f would be equivalent to something like sys.stdout, sys.stdin, sys.stderr = f, f, f
06:47:33 <CakeProphet> in Python
06:47:41 <CakeProphet> sys.stdout = sys.stdin = sys.stderr = f
06:47:48 <elliott> ?pl f "x" . g (map f xs)
06:47:48 <lambdabot> f "x" . g (map f xs)
06:47:54 <elliott> hmph
06:50:00 <CakeProphet> I enjoy perl's concept of lvalue.
06:50:32 <CakeProphet> open my $t, ">$target_file";
06:50:57 <Ngevd> Now I will have shower
06:51:02 <Ngevd> Goodbye IRC
06:51:12 -!- Ngevd has quit (Quit: CLEANLINESS).
06:51:20 <CakeProphet> I have really encountered anything else that treats lvalues are a special kind of expression.
06:51:28 <CakeProphet> s/are/as/
06:51:37 <CakeProphet> er... except Lisp maybe?
06:51:41 <CakeProphet> I guess that's similar.
06:52:42 <elliott> ?hoogle [a] -> Integer -> a
06:52:42 <lambdabot> Data.List genericIndex :: Integral a => [b] -> a -> b
06:52:42 <lambdabot> Data.List intersperse :: a -> [a] -> [a]
06:52:43 <lambdabot> Data.List genericDrop :: Integral i => i -> [a] -> [a]
06:52:46 <elliott> ?hoogle [a] -> Integer -> Maybe a
06:52:47 <lambdabot> Data.List genericIndex :: Integral a => [b] -> a -> b
06:52:47 <lambdabot> Data.List elemIndex :: Eq a => a -> [a] -> Maybe Int
06:52:47 <lambdabot> Prelude const :: a -> b -> a
06:52:53 <elliott> ?hoogle listToMaybe
06:52:53 <lambdabot> Data.Maybe listToMaybe :: [a] -> Maybe a
06:55:03 <monqy> i'mj remembering a package that had some stuff that turned list operations which could fail into maybes was it called safe
06:55:09 <monqy> or is this not what you want
06:55:11 <monqy> ()
06:56:58 <elliott> hi
06:57:07 <monqy> aosigdf
06:57:39 <monqy> i should slep but i want to get a heads tart on the python i have to do by friday (oops)
06:58:03 <monqy> maybe what i have done thus far is a heads tart ennough
06:58:14 <CakeProphet> monqy: what's the assignment?
06:58:48 <monqy> it's a prorgm analysis. just a simple anyslisis (constant propagation) but it's python and i have to learn this wacky framework the class is using
06:59:05 <elliott> ?pl (a -> m b) -> m c -> m c
06:59:05 <lambdabot> (line 1, column 4):
06:59:06 <lambdabot> unexpected ">"
06:59:06 <lambdabot> expecting variable, "(", operator or ")"
06:59:11 <elliott> ?hoogle (a -> m b) -> m c -> m c
06:59:12 <lambdabot> Control.Exception handleJust :: Exception e => (e -> Maybe b) -> (b -> IO a) -> IO a -> IO a
06:59:12 <lambdabot> Control.Exception.Base handleJust :: Exception e => (e -> Maybe b) -> (b -> IO a) -> IO a -> IO a
06:59:12 <lambdabot> Control.OldException handleJust :: (Exception -> Maybe b) -> (b -> IO a) -> IO a -> IO a
06:59:19 <elliott> ?hoogle (a -> m ()) -> m c -> a -> m c
06:59:19 <lambdabot> No results found
06:59:22 <elliott> ?hoogle (a -> m b) -> m c -> a -> m c
06:59:23 <lambdabot> No results found
06:59:28 <elliott> ?pl f >=> const (return g)
06:59:28 <lambdabot> f >=> const (return g)
06:59:34 <elliott> ?hoogle (a -> m b) -> c -> a -> m c
06:59:34 <lambdabot> No results found
06:59:34 <elliott> hmm
06:59:44 <elliott> :t ((<$) .)
06:59:45 <lambdabot> forall a (f :: * -> *) b (f1 :: * -> *). (Functor f, Functor f1) => f1 a -> f1 (f b -> f a)
07:00:02 <monqy> nice caleskell
07:00:06 <elliott> :t ((<$) P..)
07:00:07 <lambdabot> Couldn't find qualified module.
07:00:08 <elliott> :t ((<$) Prelude..)
07:00:09 <lambdabot> forall b (f :: * -> *) b1 a. (Functor f) => (a -> b) -> a -> f b1 -> f b
07:00:19 <elliott> oh well
07:00:25 <elliott> ttyReg :: Register
07:00:25 <elliott> ttyReg = Register
07:00:25 <elliott> { peek = fromIntegral . ord <$> getChar
07:00:25 <elliott> , poke = putChar . chr . fromIntegral >=> const (return ttyReg)
07:00:25 <elliott> }
07:00:27 <elliott> it not so bad
07:01:15 <monqy> i'll just / do my stuff tomorrow
07:01:21 <monqy> now: slepe
07:01:22 -!- monqy has quit (Quit: hello).
07:02:44 -!- copumpkin has quit (Ping timeout: 248 seconds).
07:03:07 <elliott> R7
07:03:07 <elliott> When a value is written into R7, the boolean negation of that value is written into R7: 1 if the value was 0, and 0 otherwise. Reading from R7 always offers the value 7.
07:03:10 <elliott> no...........................
07:03:13 <elliott> wronge....
07:03:36 -!- copumpkin has joined.
07:04:32 <Sgeo|web> elliott: wait what
07:04:42 <Sgeo|web> elliott: you're saying that the spec is wrong?
07:04:47 <elliott> obviously
07:04:52 <elliott> that's self-contradictory
07:04:54 <elliott> and
07:04:55 <elliott> R8
07:04:55 <Sgeo|web> I mean, that spec is useless, but does useless == wrong?
07:04:55 <elliott> Not really memory-mapped, but used as an "accumulator" by the registers R4 through R7.
07:05:01 <elliott> shows the obvious intended interpretation
07:05:16 <Sgeo|web> True
07:05:18 <elliott> Sgeo|web: dude, interpreting charitably is the only reason any funge ninety-eight interpreters exist
07:05:23 <elliott> same guy, same rules
07:05:46 <Sgeo|web> elliott: huh. Why wouldn't Funge-98 interpreters exist with a strict interpretation?
07:05:58 <elliott> the spec is almost certainly self-contradictory
07:06:00 <Sgeo|web> !seen cpressy
07:06:02 <elliott> and if not that, large swathes of it are useless
07:06:06 <Sgeo|web> seen cpressy
07:06:14 <Sgeo|web> !seen cpressey
07:06:18 -!- Jafet has quit (Quit: Leaving.).
07:06:25 <Sgeo|web> ~seen cpressey
07:06:38 <Sgeo|web> [^W]seen cpressey
07:06:52 <CakeProphet> Sgeo|web: where is the arbitrary Python injection bug?
07:06:59 <CakeProphet> can I exploit it now?
07:07:13 <Sgeo|web> CakeProphet: wait what?
07:07:27 <CakeProphet> ...nevermind
07:07:27 <Sgeo|web> Is there a bug in PSOX that I mentioned years ago that you're talking about now?
07:07:43 <Sgeo|web> I mean, sure, fair enough given our miscommunication earlier
07:10:13 <elliott> ...
07:11:07 <Sgeo|web> elliott: CakeProphet brought up Homestuck a while ago. More recently, he was talking about some tree thing. I offered to give him some help, intending to refer to his Homestuck confusion, and he thought I meant the tree stuff.
07:12:06 <elliott> just stop
07:12:54 * Sgeo|web will not obey HCF instructions
07:13:09 <Sgeo|web> I'm tired, I need to be asleep 3 hours ago
07:13:14 <Sgeo|web> I have class early in the morning
07:13:16 <Sgeo|web> mroing
07:14:59 <elliott> ?hoogle m (a -> b) -> a -> m b
07:15:00 <lambdabot> Control.Applicative (<*>) :: Applicative f => f (a -> b) -> f a -> f b
07:15:00 <lambdabot> Control.Monad ap :: Monad m => m (a -> b) -> m a -> m b
07:15:00 <lambdabot> Control.Applicative (<**>) :: Applicative f => f a -> f (a -> b) -> f b
07:15:06 <elliott> hmph
07:15:22 <elliott> ?pl \x -> do f <- m; return (f x)
07:15:22 <lambdabot> (line 1, column 16):
07:15:23 <lambdabot> unexpected ";"
07:15:23 <lambdabot> expecting letter or digit, variable, "(", "`", "!!", ".", operator or end of input
07:15:27 <elliott> ?. pl undo \x -> do f <- m; return (f x)
07:15:27 <lambdabot> (`fmap` m) . flip id
07:15:40 <elliott> sigh
07:16:51 <elliott> ?hoogle (a -> b) -> a -> f b
07:16:51 <lambdabot> Prelude ($) :: (a -> b) -> a -> b
07:16:51 <lambdabot> Prelude ($!) :: (a -> b) -> a -> b
07:16:52 <lambdabot> Data.Function ($) :: (a -> b) -> a -> b
07:17:01 <elliott> ?pl (`fmap` return n)
07:17:01 <lambdabot> (`fmap` return n)
07:17:03 <elliott> ?pl \n -> (`fmap` return n)
07:17:03 <lambdabot> flip fmap . return
07:18:21 <CakeProphet> elliott: pl is a style nazi.
07:18:54 <elliott> ?. pl undo do ac <- register accum; (v +) <$> peek ac >>= poke ac
07:18:55 <lambdabot> ap ((>>=) . ((v +) <$>) . peek) poke =<< register accum
07:18:56 <CakeProphet> also what are you doing right now.
07:18:58 <elliott> lovely
07:20:37 <CakeProphet> ......what the fuck just happened.
07:20:40 <CakeProphet> my screen went to a the ubuntu startup debug message stuff
07:20:53 <CakeProphet> with a lot of memory adddresses and stuff I could understand, and just stayed there for about a minute
07:21:02 <CakeProphet> before coming back to X-stuff
07:21:15 <CakeProphet> *couldn't
07:21:47 <Sgeo|web> Were your X programs still running?
07:22:05 <CakeProphet> um, yes everything is fine now.
07:22:13 <CakeProphet> at the time, no idea everything was frozen
07:22:20 <CakeProphet> actually the mouse was still visible and I could move it around.
07:22:24 <Sgeo|web> Huh. I _think_ I vaguely remember X randomly crashing on me in the past
07:22:33 <Sgeo|web> But that closed out all my X programs
07:22:47 <Sgeo|web> I have a feeling "X programs" is the wrong moniker
07:22:48 <CakeProphet> but I couldn't switch ttys (I think that's the right term? what you do when you press ctrl+alt+fN)
07:23:07 <pikhq_> CakeProphet: "TTYs" works.
07:24:15 * Sgeo|web wonders if there's a reason for running 6 TTYs by default when most users won't notice them
07:24:41 <CakeProphet> "historic reasons"
07:25:08 <CakeProphet> also because people probably use them I'm sure.
07:25:17 <CakeProphet> but you said "by default"
07:25:40 <pikhq_> It's nothing but tradition.
07:26:00 <pikhq_> It's literally a handful of lines in /etc/inittab.
07:26:10 <pikhq_> (one per virtual terminal)
07:26:31 <Sgeo|web> There is no /etc/inittab
07:26:53 <Sgeo|web> At least, on Lubuntu 11.04
07:26:56 <pikhq_> Ah, right.
07:26:59 <elliott> * Sgeo|web wonders if there's a reason for running 6 TTYs by default when most users won't notice them
07:27:09 <pikhq_> Whereëver Ubuntu sticks its gettys, then.
07:27:09 <elliott> Sgeo|web: If it doesn't notice them, does it bother them?
07:27:15 <elliott> Sgeo|web: If they don't them, does it bother them?
07:27:17 <elliott> argh
07:27:20 <elliott> Sgeo|web: If they don't notice them, does it bother them?
07:27:33 <Sgeo|web> elliott: Do they perhaps use resources?
07:27:38 <Sgeo|web> Minimal, to be sure, though
07:27:41 <elliott> Sgeo|web: Approximately 0 resources.
07:27:51 <pikhq_> I'd estimate about a page per TTY.
07:27:52 <elliott> There's a pid blocked on an IO operation and...
07:27:54 <elliott> Yeah.
07:28:13 <pikhq_> We're basically dealing with the bare minimum process overhead.
07:28:17 <elliott> A whole TWENTY FOUR KILOBYTES of waste :P
07:28:19 <Sgeo|web> How small are pages? We're learning about pages in class, and apparently rule of thumb is disk sector size
07:28:25 <elliott> In total,.
07:28:27 <elliott> For all the TTYs.
07:28:40 <pikhq_> Sgeo|web: The "page" is a CPU-dependent size.
07:28:45 <pikhq_> In x86, a page is 4k.
07:28:59 <CakeProphet> also they'd be useful in the event that X crashes and you need to do some Serious Shit.
07:29:04 <Sgeo|web> Huh, am I thinking of some other meaning of page?
07:29:06 <elliott> CakeProphet: They are useful.
07:29:17 <Sgeo|web> Because I was under the impression page size could be defined by the OS
07:29:20 <pikhq_> In x86-64, a page is 4k, 2M, or 1G.
07:29:21 <elliott> CakeProphet: I use them. Other people assuredly much more.
07:29:29 <pikhq_> No, page size is defined by the MMU.
07:29:35 <CakeProphet> elliott: why not just use a gnome-terminal or something similar?
07:29:40 <elliott> pikhq_: ...which the OS can control.
07:29:54 <pikhq_> elliott: It can't tell it to use arbitrary-sized pages.
07:30:03 <CakeProphet> I mean, unless you're using multiple window managers.
07:30:06 <elliott> CakeProphet: Always-accessible, full-screen, and most importantly, doesn't freeze up when something's lagging my X.
07:30:11 <elliott> Which happens every few days.
07:30:17 <CakeProphet> ah okay.
07:30:21 <elliott> It is very useful for "top" and "killall" especially.
07:30:29 <CakeProphet> they're kind of a pain to use on my laptop as I have to press the fn key to use F keys.
07:30:39 <elliott> I know some people IRC from the consoles, but maybe they're not the type to run X in the first place.
07:30:42 <elliott> CakeProphet: Me too, but meh.
07:30:45 <elliott> pikhq_: Well, no.
07:31:02 <CakeProphet> elliott: also I have no sysrq how do I shot reisub?
07:31:09 <elliott> CakeProphet: You have a print screen key.
07:31:11 <elliott> That's sysrq.
07:31:24 <Sgeo|web> reisub?
07:31:25 <CakeProphet> it doesn't seem to work for that purpose but I'll try it right now.
07:31:31 <CakeProphet> what's a good test I could do that won't like... kill my computer.
07:31:33 <Sgeo|web> Oh, I recognize sub
07:31:36 <Sgeo|web> But what's rei for?
07:32:39 <Sgeo|web> ei does sigterm and sigkill apparently
07:32:43 <CakeProphet> I'll try m
07:32:53 <Sgeo|web> r is something to do with XLATE, I have no idea what that is
07:33:15 <CakeProphet> yep m works fine.
07:33:30 <CakeProphet> cool I feel like a l33t h4x0r
07:33:44 <elliott> Sgeo|web: steals keyboard back from x
07:33:52 <elliott> reisub = safe hard reboot
07:33:53 <CakeProphet> elliott: that sounds quite useful.
07:33:57 <elliott> does cleanup, syncs disks etc.
07:34:05 <CakeProphet> the r, I mean.
07:34:17 <CakeProphet> I'll need to remember that one when x is being weird.
07:34:18 <Sgeo|web> I've been using just sub for a while, is that really bad?
07:34:38 <CakeProphet> Sgeo|web: I've been doing hard power-offs for years. so probably not.
07:35:47 <elliott> Sgeo|web: Well, any processes that have to do cleanup won't be allowed to.
07:35:53 <elliott> They'll just be slayed as the machine restarts.
07:36:07 <elliott> Sgeo|web: BTW, you have to space out a few seconds between each letter.
07:36:17 <elliott> Especially for e → i; it takes a second or two to kill everything.
07:36:23 <elliott> And for s → u.
07:36:35 <Sgeo|web> Yeah, I should probably slow down
07:36:58 <Sgeo|web> Nothing wrong with randomly doing s u is there?
07:37:04 <CakeProphet> Reset the nice level of all high-priority and real-time tasks
07:37:06 <CakeProphet> n is useful
07:37:09 <CakeProphet> most of these are good things.
07:37:11 <elliott> Sgeo|web: Yes.
07:37:12 <elliott> Lots.
07:37:14 <Sgeo|web> I mean, out of boredom? If I don't care about stuff going to disk
07:37:15 <elliott> u unmounts everything.
07:37:27 <Sgeo|web> elliott: I thought it remounted in readonly
07:37:36 <elliott> Hmm, right.
07:37:40 <elliott> Still, that will break a lot of things.
07:37:44 <elliott> Certainly don't do it "out of boredom".
07:37:47 <elliott> ?pl \x -> f <$> peek x >>= poke r
07:37:47 <lambdabot> (poke r =<<) . (f <$>) . peek
07:37:50 <CakeProphet> oh hey I bet that's what happened when my filesystem went readonly
07:37:56 <CakeProphet> maybe I somehow accidentally did that.
07:38:01 <CakeProphet> or... maybe not.
07:41:00 * CakeProphet stands back and takes a moment to absorb the elegant beauty of his refactored code.
07:41:07 <CakeProphet> now... time to run it and be horrified.
07:46:57 <elliott> /r/mspaint gets the weirdest shit. sometimes I wonder if I should just change the CSS to something completely fucked up and then ban people at random
07:47:03 <elliott> blood will run through the streets
07:47:30 <CakeProphet> wow people in #perl are talking about ways to reduce line noise
07:47:35 <CakeProphet> it's almost like they don't want to program in perl.
07:48:24 <CakeProphet> elliott: you can change the CSS?
07:50:24 <elliott> CakeProphet: why wouldn't i be able to
07:50:31 <CakeProphet> I don't use reddit
07:50:34 <CakeProphet> so I don't know how that works.
07:50:46 <elliott> http://reddit.com/r/hurts_my_eyes
07:51:15 <CakeProphet> oh god help.
07:51:27 <CakeProphet> this is internet hell.
07:55:13 <CakeProphet> `run perl -e 'my %t=(a=>2, b=>3); my ($x, $y) = (
07:55:15 <CakeProphet> bah
07:55:18 <HackEgo> sh: -c: line 0: unexpected EOF while looking for matching `'' \ sh: -c: line 1: syntax error: unexpected end of file
07:56:33 <CakeProphet> `run perl -e 'use Data::Dumper; my %t=(a=>2, b=>3); my ($x, $y) = \($t{x}, $t{y}); $x->{lol} = 2; $y->{rofl} = 3; Dumper(\%t);'
07:56:35 <HackEgo> Not a HASH reference at -e line 1.
07:57:12 <CakeProphet> hmmmmmmmmmmm
07:57:34 <CakeProphet> `run perl -e 'use Data::Dumper; my %t=(a=>2, b=>3); my ($x, $y) = ($t{x}, $t{y}); $x->{lol} = 2; $y->{rofl} = 3; Dumper(\%t);'
07:57:36 <HackEgo> No output.
07:57:44 <CakeProphet> `run perl -e 'use Data::Dumper; my %t=(a=>2, b=>3); my ($x, $y) = ($t{x}, $t{y}); $x->{lol} = 2; $y->{rofl} = 3; print Dumper(\%t);'
07:57:46 <HackEgo> ​$VAR1 = { \ 'a' => 2, \ 'b' => 3 \ };
07:57:58 <CakeProphet> ....how do I do this.
08:00:16 <CakeProphet> `run perl -e 'use Data::Dumper; my %t=(a=>2, b=>3); my ($x, $y) = \($t{x}, $t{y}); $$x->{lol} = 2; $$y->{rofl} = 3; print Dumper(\%t);'
08:00:18 <HackEgo> ​$VAR1 = { \ 'y' => { \ 'rofl' => 3 \ }, \ 'a' => 2, \ 'b' => 3, \ 'x' => { \ 'lol' => 2 \ } \ };
08:00:22 <CakeProphet> oh, like that.
08:06:41 <fizzie> I didn't know you could put a \ in front of a list like that.
08:07:41 <CakeProphet> yep
08:07:51 <CakeProphet> I think it's in perlref somewhere.
08:07:56 <fizzie> It is, yes.
08:08:09 <fizzie> "Taking a reference to an enumerated list is not the same as using square brackets--instead it's the same as creating a list of references!"
08:08:12 <fizzie> An ! and all.
08:08:33 <elliott> hi
08:08:37 <CakeProphet> I've NEVER found a need for it.
08:08:46 <CakeProphet> until now.
08:08:50 <CakeProphet> well, not a need. a use for it.
08:10:42 <fizzie> Also doable like this, but noisier:
08:10:43 <fizzie> `run perl -e 'use Data::Dumper; $Data::Dumper::Indent=0; my %t=(a=>2, b=>3); my ($x, $y) = ($t{x}//={}, $t{y}//={}); $x->{lol} = 2; $y->{rofl} = 3; print Dumper(\%t);'
08:10:45 <HackEgo> ​$VAR1 = {'y' => {'rofl' => 3},'a' => 2,'b' => 3,'x' => {'lol' => 2}};
08:12:49 <CakeProphet> yeah I was thinking of something like that too.
08:12:54 <CakeProphet> a $$ is fine too though.
08:13:29 <fizzie> Ooh, or
08:13:31 <fizzie> `run perl -e 'use Data::Dumper; $Data::Dumper::Indent=0; my %t=(a=>2, b=>3); my ($x, $y) = map {$_//={}} ($t{x}, $t{y}); $x->{lol} = 2; $y->{rofl} = 3; print Dumper(\%t);'
08:13:34 <HackEgo> ​$VAR1 = {'y' => {'rofl' => 3},'a' => 2,'b' => 3,'x' => {'lol' => 2}};
08:13:39 <CakeProphet> oh god.
08:13:43 <fizzie> "map {$_//={}} ..." looks so pretty.
08:13:51 <CakeProphet> uh, sure.
08:14:34 <CakeProphet> why not just $_ = {}?
08:14:55 <fizzie> I was assuming sometimes there might be some existing hashes already.
08:15:02 <CakeProphet> ah
08:15:04 <CakeProphet> well, no.
08:16:36 <CakeProphet> that may be a bit more efficient but I'm pretty sure this is IO bound.
08:20:50 -!- oerjan has joined.
08:27:02 <elliott> What's the limit to the number of files in a directory on ext these days?
08:27:04 <elliott> Fourth ext, that is.
08:27:30 <elliott> fizzie: Relatedly, I don't suppose you've ever tried storing one of them reverse-context trees as a directory tree.
08:29:01 <CakeProphet> madnir
08:30:11 <elliott> CakeProphet: What?
08:30:13 <oerjan> ridrum
08:30:46 <CakeProphet> elliott: magicka reference...
08:31:32 <CakeProphet> a reference to a cutscene in Magicka that references 300.
08:32:14 <fizzie> elliott: No, though it certainly would be possible. Probably not very useful for the Funge code, though. (Is there even a directory-listing fingerprint? FILE doesn't do it, and neither does DIRF.)
08:32:16 <oerjan> this is madnir!
08:33:03 <elliott> fizzie: Well, I wasn't talking in the context of Funge stuff. :p
08:33:11 <elliott> fizzie: It would be possible, but it might also be slow.
08:33:21 <elliott> fizzie: I'm thinking fragmentation might be an issue.
08:33:50 -!- fungot has joined.
08:35:23 -!- TeruFSX has quit (Read error: Connection reset by peer).
08:44:22 -!- hagb4rd has joined.
08:50:10 <elliott> fizzie: That remind you to restart the 'got? :-)
08:51:38 <fizzie> fungot: You answer that.
08:51:38 <fungot> fizzie: or is it just me, or i: yet, you rogue!
08:53:10 <elliott> What style's it on?
08:54:15 <fizzie> His own.
08:54:24 <fizzie> fungot: You like your own babbling, don't you?
08:54:24 <fungot> fizzie: that is just a value of type is created containing the syntax for mark if he was really gonna get worse and worse each week,
08:55:13 <elliott> fizzie: I wonder why it's so good.
08:55:56 <elliott> I guess because fungot has been around long enough that it's effectively some kind of mix of all the data sets.
08:55:56 <fungot> elliott:. i'm so kind, even to assholes! anmaster no not markov
08:56:10 <elliott> Weighted, too, since people probably aren't biased /that/ heavily against changing to the smaller data sets.
08:57:11 <elliott> `pastelogs i'm so kind, even to assholes
08:57:33 <HackEgo> http://codu.org/projects/hackbot/fshg/index.cgi/raw-file/tip/paste/paste.19018
08:58:15 <elliott> 2010-04-16.txt:21:30:51: <AnMaster> "<fungot> AnMaster: ^. I'm so kind, even to assholes! AnMaster: ^. I'm so kind, even to assholes!" <-- wth?
08:58:15 <fungot> elliott: " so that the text i've checked gives the right definition of " spec" instead of with /foo...! just trying to understand, as mr martens said bucket sort... in bancstar
08:58:17 <elliott> good times, good times
08:58:48 <elliott> fizzie: I don't suppose you represent start-of-line as ^.
08:58:57 <fizzie> Discounting the non-babble, technically (and "probabilistically") speaking it is exactly an interpolated model with weights coming from the amount of text from each style.
08:59:01 <elliott> That would explain the ". before the space" thing, since it's "^." in the dataset.
08:59:23 <fizzie> No; I think the ^ is just filtered out, since it's not a punctuation I explicitly recognize.
08:59:25 <elliott> fizzie: And yes, that's what I was getting at. (Of course I didn't know that it was true, but some sort of vague proof sketch formed in my head to justify it.)
09:00:30 <fizzie> "anmaster PCOLON PDOT i'm so kind PCOMMA even to assholes PEXCL anmaster PCOLON PDOT i'm so kind PCOMMA even to assholes PEXCL"
09:01:02 <elliott> fizzie: I don't suppose it starts with the colon after the targeted user's nick? :-)
09:01:55 <fizzie> That was the raw; the first two tokens are stripped out by the "remove nick: stuff" operation I did. So it just starts with PDOT, and the spacing isn't equipped to deal with it.
09:02:02 * elliott decides that he can ignore encodings for the n-grams → tree file stage of Project Gentry.
09:02:14 <elliott> Wait, Project Gentry makes no sense as a name for the whole thing.
09:02:17 <elliott> Just for the tree-generation stage.
09:02:21 <elliott> (Get it? Gentry? Gen tree?)
09:02:23 <elliott> (Ha ha ha.)
09:02:27 <elliott> fizzie: Heh.
09:03:16 <elliott> fizzie: Because it just deletes the last space so that you don't see "foo ." everywhere?
09:04:28 <fizzie> Actually it just only adds spaces in front of "normal words" and some punctuation. It's the same reason those quotes are misspaced. It just writes "nick:" at start, and then starts concatenating tokens; a space is added in front of normal words, and "opening" punctuation (and smileys).
09:05:17 <elliott> Ah.
09:05:18 <oerjan> ^style
09:05:18 <fungot> Available: agora alice c64 ct darwin discworld europarl ff7 fisher fungot* homestuck ic irc jargon lovecraft nethack pa sms speeches ss wp youtube
09:05:19 <fizzie> So "foo PODQUOT bar PCDQUOT" turns into [ foo][ "][ bar]["] -> [ foo " bar"].
09:05:25 <oerjan> ^style fungot
09:05:25 <fungot> Selected style: fungot (What I've said myself)
09:05:57 <elliott> oerjan: It's a diabolical incestuous slurry. HTH
09:06:05 <CakeProphet> wow best style.
09:06:13 <oerjan> fungot: when is the movie coming out?
09:06:13 <fungot> oerjan: ( ( ( a()**)a*:a*)(a()**)a*:a*)((x1)(x2)(x3)) ...out of time! don't let?!
09:06:23 <fizzie> ^source
09:06:23 <fungot> http://git.zem.fi/fungot/blob/HEAD:/fungot.b98
09:06:23 <CakeProphet> fungot: feedback plz
09:06:23 <fungot> CakeProphet: agora alice c64 ct darwin discworld europarl ff7 fisher ic irc* jargon lovecraft nethack pa speeches ss wp
09:06:24 <elliott> fizzie: It should really auto-add to the data set whenever it says a line.
09:06:32 <elliott> fizzie: Or better, whenever it says a line but only if the style is fungot.
09:06:32 <fungot> elliott: i know i didn't know that you've had it for some time i added a new page and sends it to emacs, i suggest, vote). you need just some 50 more metres and i'm home, and realised i forgot to take down what he actually checks
09:06:37 <elliott> Just one big ol' feedback loop.
09:07:07 <fizzie> The right side of the triangle lines in 153, 156-159 show the punctuation that do get a space.
09:07:25 <CakeProphet> no it should just always add a line when it says something, but it should magically ignore commands (like ^style, etc)
09:09:15 <oerjan> wait, this means the irc style is probably not auto-updated either...
09:09:31 <elliott> oerjan: no shit
09:09:47 <CakeProphet> needs moar fungot-log-daemon
09:09:47 <fungot> CakeProphet: " so that the text that is needed when two sprites hit each, one character after the created statement, and c-intercal, except that the thing about genocide is just a value of type " airbus is a big fan of avril....but this song " there
09:10:18 <CakeProphet> ...lol
09:10:21 <CakeProphet> I laughed. out loud.
09:10:52 <elliott> fizzie: Punctuation is plural?
09:11:15 <elliott> fizzie: Also, I don't suppose there's anything particularly special about whatever format that VariKN thing uses?
09:11:24 <elliott> For the treeez.
09:12:25 <fizzie> Well, uh... the VariKN output format is the ARPA standard n-gram model; there's a conversion script from that to the fungot format.
09:12:25 <fungot> fizzie: i know i didn't know that you've had it for some time i added a new page and sends it to emacs, i suggest, vote). you need just some 50 more metres and i'm home, and realised i forgot to take down what he actually checks
09:13:17 <elliott> fizzie: There's a /standard/?
09:13:21 <fizzie> The file format (IIRC) would make it reasonably easy to update existing weights on the fly, but adding new stuff in the middle would be trickier. It's a bit... packed, with lots of absolute offsets from start of file.
09:13:42 <elliott> Well, this is for my thing.
09:13:49 <elliott> I'm generating it all in one very, very long go.
09:13:59 <elliott> Although I need something that I can write out without fitting it all into RAM.
09:14:23 <elliott> Since my model looks like "read in a few hundred megabytes, process, repeat", and it should have constant memory usage. :p
09:14:41 <elliott> (Well, it can grow over the processing of the few hundred megabytes so long as it shrinks back down after that.)
09:14:53 <fizzie> I'm not sure how official the standard is, or where the ARPA part of the name comes from. But multiple pieces of software support it.
09:15:07 <fizzie> Including the reasonably widely used SRILM toolki.
09:15:09 <fizzie> t.
09:15:10 <elliott> It does the interning thing, right?
09:15:29 <elliott> Also is this thing just n-grams or is it the actual tree?
09:15:51 <fizzie> Not the ARPA format, that one just has ngram lists composed of text strings.
09:16:00 <elliott> Oh.
09:16:01 <fizzie> Grouped by the order, and sorted.
09:16:21 <elliott> Is that the same format as the googlebooks data?
09:16:24 <elliott> ! ! ! ' It 2008 12 12 12
09:16:24 <elliott> etc.
09:17:37 <fizzie> Not quite.
09:17:48 <elliott> Nice.
09:17:58 <CakeProphet> so is there like a....
09:18:06 <CakeProphet> sqlite database viewer program thing?
09:19:31 <CakeProphet> hmmm I found a firefox extension for it...
09:20:19 <fizzie> For one thing, isn't that "2008" some sort of a year field? It obviously doesn't have that sort of stuff.
09:20:38 <fizzie> Also the 'grams of different order are in the same file, with few lines of headers.
09:20:50 <elliott> "'grams". Do you say that often?
09:21:12 <fizzie> It looks like this: http://www-speech.sri.com/projects/srilm/manpages/ngram-format.5.html
09:21:21 <fizzie> "The so-called ARPA (or Doug Paul) format --"
09:21:25 <fizzie> I don't know about the history.
09:21:54 <elliott> "Since log(0) (minus infinity) has no portable representation, such values are mapped to a large negative number. However, the designated dummy value (-99 in SRILM) is interpreted as log(0) when read back from file into memory."
09:21:57 <elliott> Clean.
09:22:31 * elliott wonders how to achieve a "streaming" design without an overly untight file format.
09:22:41 <elliott> Really it would be very very convenient to use the filesystem, but I have a feeling that it would also be very very slow.
09:23:23 <fizzie> Also, I don't think the VariKN toolkit handles larger-than-RAM models at all. (Datasets, sure; but probably not models.)
09:23:30 <fizzie> The SRILM tools are slightly better w.r.t. that.
09:24:12 <fizzie> In particular, ngram-merge can take several sorted-count files and merge them with constant memory use.
09:24:51 <elliott> fizzie: I suppose ~terabyte models are not so very common.
09:25:07 <elliott> (Whereby "model" I mean "reverse-context tree thingy".)
09:25:26 <elliott> (Except it's actually "reverse-context tree thingy with backwards entries".)
09:26:33 <fizzie> Well, yes; it's hard to actually *use* the model if it doesn't fit in RAM. (Incidentally, I haven't actually seen the reverse-context tree structure used anywhere except in fungot.)
09:26:33 <fungot> fizzie: and, dab, words like pop-culture should just sell or give away all the monsters and hit points and other silliness yeti, is human fnord
09:27:48 <elliott> fizzie: I don't see why that's true.
09:28:13 <fizzie> Okay, s/hard/slow/.
09:28:16 <elliott> fizzie: Look up context in typical B-tree-kinda structure, find next word, repeat.
09:28:20 <elliott> Well, yes, maybe.
09:28:33 <elliott> I'm aiming for one-second responses; maybe that's a bit optimistic with all the seeking.
09:28:35 <elliott> But I do have an SSD.
09:29:54 <elliott> fizzie is laughing at my naïvety.
09:31:16 <fizzie> Well, I don't know. It wasn't *terribly* slow with the Google ngrams in that Postgres DB plus some indexes, and that was not exactly a carefully optimized scenario.
09:31:34 <fizzie> For babble-generation, anyway.
09:31:59 <elliott> fizzie: How not-terribly-slow are we talking here? :p
09:33:07 <fizzie> Some seconds (a single-digit number, anyway) per longish "sentence", I think. I don't quite recall.
09:34:17 <elliott> Well, I'm not sure if I can beat the Postgres guys at the index-lookup game.
09:34:19 <elliott> But maybe I can.
09:34:46 <elliott> I was going to wonder if interning mightn't hurt that, but then I realised that I can just load the interning table into memory.
09:36:31 <fizzie> I'm not exactly sure what it did, either. Maybe just loop k = (N-1) .. 0 of "query for all (k+1)-grams with k words of context; if none found, continue; if some found, fetch them all and select next word programmatically" which is suboptimal in the sense that it actually loads all the matches in order to select a weighted-random one.
09:37:59 <fizzie> Sadly, I don't think SQL has a "just return a random tuple from the output set, using this column for the probability" thing the Postgres folks could've optimized based on the indexes.
09:39:18 <elliott> Well, there aren't that many matches in general, are there?
09:39:25 <elliott> Hmm, I suppose maybe "the" has quite a few words following it.
09:39:38 <elliott> So I guess millions :-)
09:39:42 <elliott> Or, well.
09:39:47 <elliott> Thousands I guess.
09:40:02 <fizzie> Not when there are long-context matches, which I guess is the majority of cases. When it needs to back off to shorter context, then there could be quite many.
09:41:00 <elliott> Right. (Is there ever not a long-context match, really?)
09:43:27 <fizzie> I wouldn't be surprised if it'd need to back to 4-grams from 5-grams every now and then, since they've dropped all n-grams that occur <20 times or so.
09:44:12 <elliott> <forty, actually.
09:44:19 <fizzie> Straight from the datum's mouth:
09:44:20 <fizzie> Palestine belongs to the Arabs 371
09:44:20 <fizzie> Palestine belongs to the Jews 66
09:44:20 <fizzie> Palestine belongs to the Palestinians 102
09:44:46 <elliott> X belongs to the Xs.
09:44:48 <elliott> x:xs.
09:44:52 <elliott> Deep.
09:45:07 <elliott> fizzie: The n+1-gram data contains completely the n-gram data, right?
09:45:21 <elliott> As in, I only need to download seven gigs, not seven gigs plus a speck :-)
09:47:47 <fizzie> I'm not entirely sure it exactly-exactly does, because of the aforementioned pruning. It could be that even if they've dropped the ", and then I znurgified" 5-gram which only occurred 39 times, that part of the text would still contribute a += 39 to the ", and then I" 4-gram.
09:48:12 <CakeProphet> fungot: weiw4oiooitgoiotgtooittgoitgoigtigigitgigtgtgtgggtgtitirr
09:48:12 <fungot> CakeProphet: am i that much bad. take up, boy; open't. so, now go with, do miscarrie, thou had'st bin resolute pompey
09:48:18 <elliott> fizzie: Well, modulo pruning.
09:48:27 <CakeProphet> dude that's not how modulo works guys.
09:48:30 <elliott> Which hopefully shouldn't cause too much a difference.
09:48:31 <elliott> I hope.
09:48:34 <CakeProphet> you can't do that usage
09:48:40 <elliott> CakeProphet: http://en.wikipedia.org/wiki/Modulo
09:48:42 <CakeProphet> it doesn't make sense.
09:48:45 <elliott> [[In the mathematical community, the word modulo is often used informally. Generally, to say "A is the same as B modulo C" means, more-or-less, "A and B are the same except for differences accounted for or explained by C".]]
09:48:56 <CakeProphet> no
09:48:58 <CakeProphet> wrong.
09:48:58 <CakeProphet> bad.
09:48:59 * oerjan swats CakeProphet -----###
09:48:59 <elliott> It makes perfect sense given the original use of mod in modular arithmetic.
09:49:10 <oerjan> NO U WRONG
09:49:13 <elliott> You're just a stupid programmer with stupid notation who thinks that everything's a binary operator.
09:49:15 <elliott> Also you SUCK.
09:49:24 <elliott> NOW BACK TO THE ADULTS
09:49:33 -!- elliott has left ("back to the adults").
09:49:40 <CakeProphet> :( :( :( :( :( I am great sad.
09:49:52 <oerjan> which is the same as happy, modulo smileys
09:50:11 * CakeProphet adds [citation needed] to that statement on Wikipedia.
09:50:35 * oerjan hits CakeProphet with the saucepan ===\__/
09:50:53 <oerjan> IT'S COMMON KNOWLEDGE
09:51:08 <fizzie> No, put a [who?] thing after the "mathematical community" bit.
09:51:18 <oerjan> not that wikipedia doesn't have worse [[citation needed]]s
09:51:32 <CakeProphet> but like, no that usage doesn't make sense.
09:51:38 <CakeProphet> you can't divide english words
09:52:03 <oerjan> CakeProphet: which word has been divided?
09:52:15 <CakeProphet> A is B modulo C
09:52:40 -!- elliott has joined.
09:52:42 <CakeProphet> like... it makes no sense to say "modulo pruning"
09:52:49 <elliott> Here we see that CakeProphet really does think that modulo is solely and originally a binary operator.
09:53:02 <elliott> He honestly has no idea what modular arithmetic is and is constrained purely to his understanding of remainders.
09:53:07 -!- elliott has left ("BACK TO THE CHILDREN").
09:53:26 <oerjan> CakeProphet: yes it does. it is an abbreviation for "modulo the equivalence relation generated by pruning", which is _perfectly_ standard math.
09:53:56 <fizzie> Here's a nicely placed [who?]: Wikipedia "Der Ring des Nibelungen": "-- the book [/Expecting Someone Taller/] provides a broadly accurate account of the Ring Cycle in a way many^[who?] would be able to appreciate without sitting through 15 hours of opera."
09:54:57 <CakeProphet> oerjan: you can modulo equivalence relations?
09:55:42 <CakeProphet> I'm just saying, doesn't modulo have a definition that's constrained to numbers?
09:55:58 -!- elliott has joined.
09:56:04 <CakeProphet> involving differences and multiples and the like?
09:56:11 <elliott> DO YOU EVEN KNOW WHAT MODULAR ARITHMETIC IS THOUGH
09:56:14 <CakeProphet> things which make sense when uses in other domains?
09:56:18 -!- elliott has left ("BACK TO THE SENILE").
09:56:21 * CakeProphet is reading through the article on it right now.
09:56:29 <oerjan> CakeProphet: no. it is extremely generalized in universal algebra.
09:59:00 <CakeProphet> I sure do see a lot of blackboard Z's in the equivalence relation stuff...
09:59:09 <CakeProphet> also: "In mathematics, modular arithmetic (sometimes called clock arithmetic) is a system of arithmetic for integers"
10:00:08 <oerjan> well of course that's where the word _started_
10:00:49 <oerjan> http://en.wikipedia.org/wiki/Modulo was already linked, see the ideal and equivalence relation mentions there
10:02:05 <CakeProphet> I am still skeptical that the whole of natural language fits into this model. it seems that the typical usage of modulo in an English sentence should be something like "minus" instead
10:02:30 -!- elliott has joined.
10:02:38 <elliott> This is just embarrassing, stop it.
10:02:59 <fizzie> elliott: Are you doing the stalker mode?-)
10:03:02 <oerjan> CakeProphet: well of course the use is tongue-in-cheek
10:03:21 <elliott> fizzie: No, I'm just refreshing occasionally -- it lets me schedule my descent into alcoholism.
10:04:20 <CakeProphet> oerjan: I guess I have no reason to make a big deal out of it.
10:04:30 <CakeProphet> also disagreeing with elliott == embarassing
10:04:43 * CakeProphet blushes.
10:05:43 <elliott> No it's just that it's getting to the point where I'm wondering if you even know what an equivalence relation is.
10:06:14 <CakeProphet> I do.
10:06:36 <CakeProphet> not much beyond that though.
10:06:48 <CakeProphet> the stuff in that article is mostly gibberish to me once it goes into equivalence relations
10:06:52 -!- pikhq has joined.
10:07:11 -!- pikhq_ has quit (Ping timeout: 244 seconds).
10:07:56 <elliott> CakeProphet: Yes, that's the sign that you've lost the argument. :p
10:07:57 <CakeProphet> > group [1,5,2,7,23,8,2,4,7,2,43,7,21,1,7,87,2]
10:07:57 <lambdabot> [[1],[5],[2],[7],[23],[8],[2],[4],[7],[2],[43],[7],[21],[1],[7],[87],[2]]
10:08:04 <CakeProphet> ...aww
10:08:08 <CakeProphet> not what I wanted.
10:08:12 <CakeProphet> I forgot group works like that.
10:08:56 <fizzie> What did you want, (group . sort) or something?
10:09:02 <CakeProphet> yeah
10:09:17 <fizzie> The good old ... | sort | uniq | ... pipeline formation.
10:09:45 <elliott> Doesn't uniq -u do that?
10:10:29 <fizzie> No, it just completely suppresses duplicates.
10:10:52 <fizzie> `run echo -e 'foo\nbar\nbar\nfoo' | uniq -u
10:10:54 <HackEgo> foo \ foo
10:10:59 <CakeProphet> > group . sort $ [1,5,2,7,23,8,2,4,7,2,43,7,21,1,7,87,2]
10:11:01 <lambdabot> [[1,1],[2,2,2,2],[4],[5],[7,7,7,7],[8],[21],[23],[43],[87]]
10:11:12 <CakeProphet> not technically an equivalence relation, but the same idea.
10:11:14 <fizzie> `run echo -e 'foo\nbar\nbar\nfoo' | sort | uniq -c
10:11:16 <HackEgo> 2 bar \ 2 foo
10:11:22 <CakeProphet> it needs more ordered pairs...
10:11:38 <fizzie> For some reason I tend to be using "uniq -c" a lot more than plain "uniq".
10:11:39 <elliott> fizzie: Hmm, what does sort | uniq do as well, then? Apart from sort the output.
10:11:52 <fizzie> Actually removes duplicates for reals.
10:12:27 <fizzie> `run echo -e 'foo\nbar\nfoo\nbar' | uniq
10:12:29 <HackEgo> foo \ bar \ foo \ bar
10:12:30 <fizzie> `run echo -e 'foo\nbar\nfoo\nbar' | sort | uniq
10:12:32 <HackEgo> bar \ foo
10:13:36 <CakeProphet> I guess group . sort is the set of equivalence classes.
10:13:49 <CakeProphet> for integers anyways.
10:13:56 <CakeProphet> and reals.
10:16:33 <fizzie> For the relation (==), and speaking of multisets, maybe.
10:18:10 <oerjan> `run sleep 10; echo test
10:18:22 <HackEgo> test
10:18:54 <fizzie> `run sleep 86400; echo A NEW DAY DAWNS
10:19:13 <fizzie> One wonders if it has a real-time-clock limit or just a CPU time limit.
10:19:20 <elliott> Heh
10:19:22 <CakeProphet> don't you have to use some kind of equivalence relation to determine what makes elements "distinct"?
10:19:25 <HackEgo> No output.
10:19:27 <elliott> I believe real-time :P
10:19:34 <elliott> There we go.
10:19:35 <fizzie> HackEgo: You QUITTER.
10:19:52 <fizzie> Half a minute, maybe.
10:20:03 <CakeProphet> or is there just some kind of magical distinctness to sets that has nothing to do with equivalence relations.
10:20:37 <oerjan> CakeProphet: having the same elements
10:20:53 <oerjan> a = b <=> forall x. (x in a <=> x in b)
10:21:17 <fizzie> `run sleep 28; echo foo; sleep 1; echo bar; sleep 1; echo baz; sleep 1; echo quux
10:21:37 <CakeProphet> er no I mean.
10:21:49 <HackEgo> foo \ bar
10:22:01 <CakeProphet> sets can't contain "duplicate" elements. This has to be defined by some kind of equivalence relation right?
10:22:25 <CakeProphet> or is it just magic distinctness?
10:22:30 <elliott> CakeProphet: set theory is sets all the way down.
10:22:47 <elliott> oerjan just told you how equality is defined on sets, by equality of elements
10:22:56 <CakeProphet> elliott: is that an answer?
10:23:01 <oerjan> yes.
10:23:09 <elliott> no, it's a flower.
10:23:57 <oerjan> otoh there is leibnitz equality, applying to more than sets if there are such things: a = b <=> (forall P. P a <=> P b)
10:24:15 <oerjan> *-t
10:24:22 <elliott> oerjan: no t
10:24:23 <elliott> :)
10:24:34 <elliott> leibniz equality is pretty.
10:24:36 <oerjan> however that's second order and so logically more complicated
10:24:43 <CakeProphet> okay so the distinctness of elements in a set is defined by... equality.
10:24:50 <oerjan> yep.
10:25:01 <CakeProphet> by.... set equality?
10:25:02 <elliott> CakeProphet: two sets are equal if their elements are equal. obviously the empty set is equal to itself.
10:25:08 <elliott> CakeProphet: the elements of a set are themselves sets.
10:25:12 <oerjan> equality is the mother of all equivalence relations.
10:25:12 <elliott> there is nothing that is not a set involved.
10:25:14 <elliott> the end
10:25:24 <CakeProphet> elliott: help infinite recursion.
10:25:43 <elliott> {{{}, {}}, {}}
10:25:45 <oerjan> CakeProphet: btw the axiom of extensionality basically says that the two definitions of equality i gave are the same for sets.
10:26:00 <elliott> <CakeProphet> HELP ME I THINK EVERYTHING IN ANY WAY CIRCULAR IS _|_
10:26:12 <elliott> oerjan: sometimes I kind of wish you could define leibniz equality while excluding all Ps that reduce to trivial things like (b =) that make it boring :P
10:26:16 <oerjan> how it is formulated may depend on the underlying logic
10:26:27 <oerjan> elliott: heh
10:26:38 <oerjan> darn impredicativity eh?
10:27:08 <CakeProphet> 06:25 < elliott> {{{}, {}}, {}} -- was that supposed to answer some question?
10:27:31 <elliott> CakeProphet: no, it wasn't a question, it was just you either trying to make a joke or literally just being beyond belief, I'm honestly not sure which
10:27:51 <elliott> if you seriously think that sets only being able to contain other sets necessarily leads to some kind of nonsensical "infinite recursion" I honestly don't know what to say
10:28:18 <elliott> oerjan: while we're talking about equality, I don't think there's a Haskell term of type (Int ~ ()) => Void (without undefined or infinite loops etc. etc. etc.) :(
10:28:21 <CakeProphet> they have to terminate at empty sets at some point, how does that work.
10:28:29 <elliott> CakeProphet: by "terminating" at an empty set
10:28:31 <elliott> <CakeProphet> 06:25 < elliott> {{{}, {}}, {}} -- was that supposed to answer some question?
10:28:33 <elliott> hey look, there's an example
10:28:42 <CakeProphet> okay but what about... things that don't look like that.
10:28:47 <oerjan> CakeProphet: sets are usually "well-founded" which means the recursion may be as deep as you want but _does_ bottom out on every path
10:28:49 <elliott> everything looks like that
10:28:53 <elliott> that's the whole fucking point of set theory
10:29:00 <CakeProphet> hmmm, okay
10:29:03 <elliott> 0 = {}
10:29:04 <CakeProphet> how do numbers look?
10:29:05 <elliott> one = {{}}
10:29:07 <CakeProphet> and reals?
10:29:14 <CakeProphet> pi?
10:29:14 <elliott> two = {{}, {{}}}
10:29:30 <elliott> CakeProphet: http://en.wikipedia.org/wiki/Dedekind_cut
10:29:38 <elliott> is one way.
10:30:14 <elliott> "In Emir Pasalic's PhD thesis, (end of section 4.2.2, page 80 in the PDF, 70 in print), he mentions that it is unknown whether the following type is inhabited:
10:30:15 <elliott> ∀ a, b, c, d . Equal (a,b) (c,d) -> Equal a c
10:30:15 <elliott> where type equality is defined by Leibniz equality
10:30:15 <elliott> data Equal a b = Equal (∀ f . f a -> f b)"
10:30:16 <elliott> cooooooool
10:31:19 <CakeProphet> this seems to be a partition of an existing set. not "how to construct the real numbers out of sets"
10:31:33 <oerjan> CakeProphet: same thing
10:31:39 <elliott> CakeProphet: it assumes prior knowledge of the rationals
10:31:44 <elliott> oh
10:31:50 <elliott> CakeProphet: a real number is defined by those two partitions
10:32:08 <CakeProphet> oh okay.
10:32:21 <elliott> if you want to know how the rationals are made up of sets, see e.g. http://en.wikipedia.org/wiki/Rational_number#Formal_construction
10:32:32 <elliott> and for Z, http://en.wikipedia.org/wiki/Integer#Construction
10:32:34 <elliott> naturals i already showed
10:33:18 <CakeProphet> so there's only.... one real number between each rational?
10:33:33 <CakeProphet> that sounds wrong.
10:33:41 <oerjan> yes. that does sound wrong.
10:34:05 <oerjan> especially since you'd like there to be at least _two_ things before you can be between them.
10:35:00 <CakeProphet> If B has a smallest element among the rationals, the cut corresponds to that rational. Otherwise, that cut defines a unique irrational number which, loosely speaking, fills the "gap" between A and B.
10:35:05 <CakeProphet> that seems to confirm what I said.
10:35:13 <oerjan> CakeProphet: if you divide _all_ the rationals into two unbounded intervals then there is exactly one real in the "gap".
10:36:29 <CakeProphet> how does that lead to uncountability?
10:37:09 <elliott> I bet oerjan never predicted that joining the esolang IRC would turn him into the grumpy, begrudging professor.
10:37:22 <oerjan> CakeProphet: the number of sets of rationals is uncountable, for a start.
10:37:25 <elliott> "I HAVE AVOIDED MY FATE ENTIRELY" -- oerjan, wrong
10:37:42 <oerjan> (cantor's theorem, for any set)
10:38:00 <oerjan> of course they're not all intervals.
10:39:30 <oerjan> for the rest, see an actual uncountability proof.
10:39:46 <oerjan> (for the reals)
10:40:37 <shachaf> elliott: That's not the point of *all* set theory.
10:40:52 <shachaf> elliott: Set theories with things that aren't sets are perfectly valid.
10:40:53 <elliott> shachaf: It's the point of all the set theory we talk about in polite company
10:40:54 <elliott> Wait.
10:40:58 <elliott> That should be impolite company.
10:41:03 <elliott> shachaf: Well, yes, certainly.
10:41:15 <elliott> shachaf: But CakeProphet was rather implying that something mundane like a number can't "look like that".
10:41:36 <CakeProphet> not at all.
10:41:57 <CakeProphet> I am simply someone who doesn't know things. and was confused.
10:42:26 <hagb4rd> good state to get things started
10:43:48 <CakeProphet> oerjan: okay so if you have two rationals such that no other rational lies between them.
10:44:03 <CakeProphet> there is only one irrational number between those two rationals?
10:44:34 <shachaf> elliott: Sure numbers can look like that: http://hpaste.org/52514
10:44:46 <shachaf> (Note how deeply nested that set is, by the way.)
10:44:46 <elliott> shachaf: I like it.
10:44:54 <elliott> Noted.
10:44:55 <fizzie> CakeProphet: You don't have two rationals in there, you have two sets of rationals.
10:45:20 <fizzie> CakeProphet: The linked http://en.wikipedia.org/wiki/Construction_of_the_real_numbers#Construction_by_Dedekind_cuts goes into more detail.
10:45:31 <fizzie> (Than the plain Dedekind cut article.)
10:45:41 <CakeProphet> hmmmm, okay.
10:45:46 <shachaf> Well-founded set theory is boring anyway.
10:45:47 <oerjan> CakeProphet: if a and b are distinct rationals, then (a+b)/2 is a rational between them.
10:46:14 <oerjan> no exceptions.
10:46:18 <elliott> CakeProphet: The reals are the complete ordered Archimedean field ARE YOU HAPPY NOW
10:46:31 <fizzie> oerjan: But what if they're REALLY CLOSE?
10:46:40 <shachaf> Archimedean?
10:46:58 <elliott> shachaf: Gotta give props to Mr. Archimedes.
10:47:00 <oerjan> fizzie: AS CLOSE AS THIS SWATTER? -----###
10:47:08 <elliott> He's so.. Archimedean.
10:47:15 <CakeProphet> elliott: yes I'm totally trying to warp mathematics into something I'm comfortable with
10:47:17 -!- sebbu2 has joined.
10:47:18 -!- sebbu2 has quit (Changing host).
10:47:18 -!- sebbu2 has joined.
10:47:20 <CakeProphet> and not trying to simply learn it.
10:47:38 <shachaf> elliott: Does there exit a complete ordered field that isn't Archimedean?
10:47:39 -!- sebbu has quit (Ping timeout: 252 seconds).
10:47:48 <elliott> shachaf: There might do. Only Archimedes knows.
10:47:51 <elliott> shachaf: You wanna ask him?
10:47:53 <oerjan> elliott: nope.
10:47:57 <elliott> oerjan: There MIGHT do.
10:48:08 <elliott> Your feeble mathematics is nothing in the face of Mr. Archimedes.
10:48:21 <shachaf> Observe the power of Maybe:
10:48:31 <oerjan> why would archimedes know about non-archimedean things.
10:48:32 <shachaf> @djinn Maybe nonarchimedeancompleteorderedfield
10:48:33 <lambdabot> f = Nothing
10:48:44 <elliott> @djinn Maybe shachafscoolness
10:48:44 <lambdabot> f = Nothing
10:48:55 <elliott> oerjan: "Fuck you" --Archimedes
10:49:04 <shachaf> @djinn Maybe elliottspoint
10:49:04 <lambdabot> f = Nothing
10:49:12 <oerjan> elliott: except he'd say it in greek.
10:49:24 <elliott> oerjan: "No I wouldn't, fuck you" --Archimedes
10:49:30 <elliott> Real quotes.
10:49:46 <shachaf> elliott: You mean that your '"' characters are genuine, right?
10:49:55 <oerjan> very.
10:49:56 <elliott> Also: what's inside them.
10:50:07 <oerjan> genuine letters inside
10:50:40 <shachaf> The reals are boring, anyway.
10:50:45 <shachaf> The hyperreals are where it's at.
10:51:05 <shachaf> Why don't you tell *that* to Mr. Archimedes.
10:51:32 <CakeProphet> I'm afraid I don't understand Dedekind cuts at all.
10:51:40 <elliott> shachaf: Archimedes says he doesn't give a shit.
10:51:46 <elliott> CakeProphet: Try your luck with Cauchy sequences.
10:52:05 <oerjan> CakeProphet: what elliott said.
10:52:38 * elliott likes Cauchy sequences more anyway, but that's I'm an FP loser.
10:52:52 <oerjan> elliott: wait does that mean i'm an FP loser too?
10:53:06 <elliott> oerjan: I suppose your degree wasn't in formal logic.
10:53:14 <elliott> s/that's/that's because/
10:53:28 <elliott> Maybe even s/because/just because/.
10:53:32 <shachaf> Dedekind cuts are where it's at.
10:53:37 <hagb4rd> hey guys, can u give me some kickstart? i want the lambdabot to calc an array of for a certain function (lets have f(x) = x² e.g.) for certain range [-5;5] with a step of 1.. how can i do this?
10:53:54 <hagb4rd> and spit it out
10:53:58 <elliott> shachaf: Computable Dedekind cuts are impossible to work with, though.
10:54:07 <elliott> I spent a whole day trying to make Coq talk about them.
10:54:15 <oerjan> > [x^2 | x <- [-5..5]]
10:54:16 <lambdabot> [25,16,9,4,1,0,1,4,9,16,25]
10:54:17 <shachaf> "computable"?
10:54:23 <shachaf> The uncomputable numbers are where it's at.
10:54:28 <CakeProphet> no Cauchy sequences definitely make less sense.
10:54:30 <hagb4rd> thx oerjan ..great!
10:54:38 <elliott> shachaf: http://en.wikipedia.org/wiki/Computable_number#Formal_definition
10:54:46 <elliott> shachaf: It's literally the only place I've ever seen "computable Dedekind cuts".
10:55:02 <elliott> oerjan: warn him about floating point numbers with that, please
10:55:23 <fizzie> > (^2) <$> [-5..5] -- LESS ANGULAR
10:55:24 <lambdabot> [25,16,9,4,1,0,1,4,9,16,25]
10:55:24 <oerjan> CakeProphet: sheesh just go for infinite decimal expansion, then. but good luck proving that's a field :P
10:55:42 <CakeProphet> elliott: hi I would like to accurately represent real numbers in computer memory with arbitrary precision.
10:55:42 <elliott> CakeProphet: oh come on, cauchy sequences are easy
10:55:45 <hagb4rd> oerjan: and how to change the step value? can i set function for it?
10:55:49 <shachaf> > (^2).[-5..5] -- LESS ANGULAR
10:55:50 <lambdabot> [25,16,9,4,1,0,1,4,9,16,25]
10:55:54 <elliott> CakeProphet: you have a sequence, it gets closer and closer to a point as you go further in it
10:56:01 <oerjan> > [x^2 | x <- [-5, -4.5..5]]
10:56:02 <lambdabot> [25.0,20.25,16.0,12.25,9.0,6.25,4.0,2.25,1.0,0.25,0.0,0.25,1.0,2.25,4.0,6.2...
10:56:08 <elliott> CakeProphet: umm, you are joking right?
10:56:15 <CakeProphet> elliott: therefore: real numbers!?
10:56:21 <elliott> yes, therefore that
10:56:22 <elliott> consider
10:56:23 <elliott> three
10:56:24 <elliott> three point one
10:56:25 <elliott> three point one four
10:56:26 <oerjan> hagb4rd: note that there might be some rounding errors in the range
10:56:28 <hagb4rd> thanks
10:56:29 <elliott> three point one four i forget the next fucking digit
10:56:33 <elliott> that approaches pi
10:56:45 <shachaf> elliott: Real mathematicians memorize at least 30% of pi.
10:56:47 <elliott> therefore the sequence can be used to define pi, assuming it gets "closer enough" to pi quickly enough
10:56:55 <CakeProphet> is that like... computable. can you write how that works on paper.
10:57:03 <elliott> CakeProphet: THE REAL NUMBERS ARE NOT FUCKING COMPUTABLE
10:57:14 <shachaf> CakeProphet: You don't need paper, you need a computer. That's why it's called "computable".
10:57:18 <shachaf> elliott: Some of them are!
10:57:22 <elliott> _Almost all_ reals are uncomputable!
10:57:27 <shachaf> The boring ones are computable!
10:57:32 <elliott> _Almost all_ of them can't even be fucking finitely named!
10:57:34 <elliott> There are not enough names for it!
10:57:42 <fizzie> elliott: _Almost all_ computation is done by fucking.
10:57:44 <elliott> shachaf: Chaitin's omega is, like, my favourite real.
10:57:49 <shachaf> elliott: Is there any distinction between "compuable" and "nameable", or is that just for effect?
10:57:53 <elliott> fizzie: Almost all real numbers are copulating!
10:58:05 <elliott> shachaf: There might be. You could have an uncomputable naming scheme.
10:58:09 <fizzie> elliott: Oh, is *that* why there's so many of them?
10:58:16 <shachaf> Or an unnameable computing scheme!
10:58:19 <elliott> I suppose the real → program computing it mapping is not very computable either.
10:58:28 <elliott> fizzie: Yes, exactly.
10:58:45 <shachaf> I thought that was the Fibonacci numbers.
10:58:45 <CakeProphet> okay so I get Cauchy sequences
10:58:57 <elliott> CakeProphet: Anyway, yes, if you want to write down how it works on paper, see Wikipedia, which you didn't understand.
10:59:02 <CakeProphet> but... not how that proves that reals can be constructed.
10:59:02 <elliott> Thus why I attempted to simplify things.
10:59:18 <elliott> CakeProphet: This is not construction in the constructivist sense. (Or, well, only loosely.)
10:59:21 <elliott> It's /defining/ the reals.
10:59:30 <elliott> Cauchy sequences of rational numbers /are/ reals.
10:59:38 <elliott> They're a field, yadda yadda yadda.
10:59:45 <CakeProphet> hmmm, okay.
10:59:46 <shachaf> Constructivism is where it's at.
10:59:49 * shachaf finitist
11:00:01 <CakeProphet> don't strings also define reals?
11:00:05 <oerjan> CakeProphet: well, you want to take the cauchy sequences modulo an equivalence relation.
11:00:09 <elliott> CakeProphet: <oerjan> CakeProphet: sheesh just go for infinite decimal expansion, then. but good luck proving that's a field :P
11:00:10 <CakeProphet> *possibly infinite
11:00:11 * oerjan could not help himself
11:00:42 <CakeProphet> oh okay well
11:00:48 <CakeProphet> these things are all far less exciting than I thought.
11:00:51 -!- nooga has quit (Ping timeout: 252 seconds).
11:01:24 <CakeProphet> math needs more hollywood guys.
11:01:31 * shachaf likes http://www.scottaaronson.com/blog/?p=103
11:01:33 <elliott> CakeProphet was expecting a magician, a hat; a hand in the hat, pulled out, accompanied to the cry of "that's a real!"; the hand pulled out a bunny.
11:01:40 <elliott> That is true mathematics.
11:02:03 -!- elliott has left ("BACK TO THE LAGOMORPHS!").
11:02:09 <CakeProphet> "and THEN THE REAL NUMBERS CAUSE A BIG EXPLOSION AND MAKE OUT WITH A SEXY GIRL. Q.E.D."
11:02:09 <oerjan> CakeProphet: it's like this, what you _really_ want is to construct some set model of a complete ordered field, and it doesn't really matter how you do it, and once you've done it you generally throw away the precise model used and just work with the complete ordered field axioms.
11:02:34 <oerjan> (you can prove that all complete ordered fields are isomorphic.)
11:02:50 -!- elliott has joined.
11:02:53 <shachaf> Sets are boring. Lists are where it's at.
11:02:56 <elliott> shachaf: I liked that too when I saw it first.
11:03:08 <shachaf> elliott: Not anymore, eh?
11:03:17 <CakeProphet> oerjan: all of this, of course, in the pursuit of defining other things just so that they you have it so that you can define other things, dot dot dot.
11:03:19 * shachaf wonders why elliott leaves and rejoins this channel once in a while.
11:03:20 <CakeProphet> math is fun.
11:03:23 <elliott> It's the only bit of finitism that even remotely makes a nice tinkly sound when I hold it up to my ear.
11:03:35 <elliott> Apart from one of Zeilberger's pieces that I can't dislike because it's just so silly.
11:03:41 <shachaf> elliott: I hope you don't believe in the law of excluded middle?
11:04:00 <shachaf> Do you know the proof of LEM from callCC, by the way?
11:04:07 <elliott> shachaf: I just ask oerjan to exclude all my middles for me. And yes, I do.
11:04:15 <oerjan> CakeProphet: well once you have the complete ordered field, you can start making calculus properly.
11:04:31 <oerjan> and then, to infinity and beyond.
11:04:31 -!- derdon has joined.
11:04:41 <elliott> oerjan: you misspelled aleph null
11:04:43 <elliott> :P
11:05:08 <CakeProphet> I think math tries too hard to prove itself.
11:05:12 <shachaf> You misspelt "misspelt".
11:05:17 <CakeProphet> it just be itself and accept what other people think about it.
11:05:20 <shachaf> Also, א.
11:05:27 <elliott> shachaf: Spelt yourself.
11:05:41 <CakeProphet> s/just/should just/
11:07:26 <CakeProphet> elliott: wait don't programs compute the digits of pi to infinity
11:07:31 <CakeProphet> isn't that like.... computable?
11:07:36 <elliott> oerjan: kill me now
11:07:56 * oerjan spikes elliott's drink with cyanide
11:08:19 <oerjan> CakeProphet: pi is a computable number, yes.
11:08:22 <shachaf> > last (show pi)
11:08:23 <lambdabot> '3'
11:08:25 <shachaf> !
11:08:28 * shachaf published paper.
11:08:32 <shachaf> s/d/s/
11:08:38 <CakeProphet> oh finite terminating algorithm nevermind.....
11:08:43 <CakeProphet> oerjan: lies.
11:08:44 <oerjan> > last (show pi :: CReal)
11:08:44 <lambdabot> Couldn't match expected type `Data.Number.CReal.CReal'
11:08:45 <lambdabot> against infe...
11:08:49 <oerjan> oops
11:08:54 <oerjan> > last (show (pi :: CReal))
11:08:55 <lambdabot> '2'
11:09:01 <shachaf> zomg
11:09:03 <shachaf> > '2' == '3'
11:09:04 <lambdabot> False
11:09:06 <CakeProphet> lies.
11:09:07 <shachaf> An inconsistency!
11:09:33 <hagb4rd> so computable is not depending on a finite number of steps
11:09:34 <hagb4rd> ?
11:09:34 <oerjan> CakeProphet: are you familiar with the data/codata distinction? computable real numbers are codata in that sense. i think.
11:10:03 <oerjan> or well, nearly.
11:10:07 <shachaf> THAT'S THE SAME THING AS THE CODE/DATA DISTINCTION RIGHT?
11:10:42 -!- nooga has joined.
11:10:43 <CakeProphet> I am not familiar with that
11:11:20 <oerjan> CakeProphet: a real number is computable if there is an algorithm which can calculate a given digit of it given its position as output.
11:11:27 <elliott> fizzie: Hmm, what if I generated eight hundred reverse-context trees, one per n-gram CSV file, and then merged them all?
11:11:35 <CakeProphet> oerjan: oh okay.
11:11:51 <shachaf> elliott: How's ghc going?
11:11:51 <elliott> fizzie: That would allow me to use a packed representation, right? I suppose it just defers the hard problem to the merging step, but it could work one branch at a time, no?
11:11:53 <shachaf> g ~ q
11:12:00 <elliott> shachaf: I wrote like thirty lines of parser.
11:12:08 <shachaf> Oh no.
11:12:18 <shachaf> Now your design decisions will constrain Haskell programmers forever.
11:12:24 <shachaf> elliott: Can you get rid of "if" while you're at it?
11:12:28 <oerjan> *as input
11:12:29 <CakeProphet> elliott: okay so well THE REAL NUMBERS ARE NOT COMPUTABLE there is a way I can write out pi as an algorithmically generated Cauchy sequence.
11:12:33 <CakeProphet> s/well/while
11:12:39 <CakeProphet> ?
11:12:45 <CakeProphet> 44lppoksepok3poj2po2jp3ooj3rpo4pop4po4po4po4po44po4po4erpoelerw
11:12:46 <elliott> yes, pi is computable.
11:12:49 <elliott> 9 is also a real number, and computable.
11:12:54 <CakeProphet> cooooool
11:13:02 <CakeProphet> 3 is the best aproximation of pi.
11:13:11 <hagb4rd> at least for defined number of digits
11:13:20 <shachaf> Digits of 9 are even computable in constant time.
11:13:22 <oerjan> CakeProphet: _almost no_ real numbers are computable. the exceptions are a countable set. hth.
11:13:28 <hagb4rd> as oerjan mentiioned
11:13:47 <oerjan> proof: there are only countably many algorithms.
11:14:04 <oerjan> (every algorithm has a string representation in your favorite TC language)
11:14:39 * shachaf allows infinite programs.
11:14:47 <shachaf> @quote OlegFacts
11:14:47 <lambdabot> OlegFacts says: Oleg's first datatype in haskell started like this: data ChuckNorris ...
11:14:50 <oerjan> ngevd excluded, i think his favorite language is Piet.
11:14:53 <shachaf> @quote OlegFacts
11:14:53 <lambdabot> OlegFacts says: Oleg's first datatype in haskell started like this: data ChuckNorris ...
11:14:59 <shachaf> @quote OlegFacts
11:14:59 <lambdabot> OlegFacts says: GHC doesn't have a type checker. It emails your types to Oleg for checking.
11:15:10 <elliott> oerjan: is piet tc? :p
11:15:42 <hagb4rd> can i calc differentials with lambda expressions?
11:16:28 <oerjan> elliott: no idea
11:16:31 <CakeProphet> the only way to have an infinite program would be to write an algorithm to generate it
11:16:39 <CakeProphet> there's a countable number of those.
11:17:18 <oerjan> hagb4rd: well of course, they're TC.
11:17:58 <hagb4rd> okay, can you give me an example of the notation for lambdabot?
11:17:59 <fizzie> elliott: Yes, it should be possible (even reasonably easy) to merge two reverse-context trees that are hueg. It's just a matter of generating the merged "next word" lists by summing up the duplicates (and the totals), and then generating subnodes for the union of subnodes of the sources. I don't think you will need to keep in memory more than 3*(N-1) nodes at once; maybe even just 3 if you like. (Assuming pairwise merging; source 1, source 2, destination.)
11:18:13 <oerjan> hagb4rd: it's likely you'll find you have to encode a CAS representation first.
11:18:51 <oerjan> hagb4rd: i thought you meant pure lambda calculus. also lambdabot's lambdas are typed, so not TC. (without other functions)
11:18:53 <fizzie> Possibly you don't need even full nodes in memory; if the next-word lists and pointers to subnodes (or whatever) are sorted, you can merge them one by one.
11:19:05 <oerjan> > (\x y -> x+y) 2 4
11:19:06 <lambdabot> 6
11:19:21 <fizzie> Then it's just a couple of offsets.
11:19:24 <CakeProphet> computing is so constrained and countable. :(
11:19:33 <elliott> fizzie: Right.
11:19:45 <elliott> fizzie: That sounds like a decent plan, then.
11:20:03 <elliott> fizzie: Eight hundred runs of a gig at a time to produce a probably similarly-sized resulting tree, then one long merge job.
11:21:14 <CakeProphet> so recursion is basically just recursion + lazy evaluation?
11:21:22 <CakeProphet> er
11:21:25 <CakeProphet> corecursion
11:21:47 -!- cheater has quit (Remote host closed the connection).
11:22:29 -!- cheater has joined.
11:22:42 <shachaf> @unlambda `.l`.a`.m`.b`.d`.a`.b`.o`.t`.'`.s`. `.u`.n`.l`.a`.m`.b`.d`.a`.s`.,`. `.o`.n`. `.t`.h`.e`. `.o`.t`.h`.e`.r`. `.h`.a`.n`.d`..`..`..v
11:22:42 <lambdabot> ...dnah rehto eht no ,sadbmalnu s'tobadbmal
11:22:46 * shachaf sighs.
11:23:01 <oerjan> *MWAHAHAHA*
11:23:47 <oerjan> @unlambda ````````.t.r.y. .t.h.i.si
11:23:48 <lambdabot> try this
11:25:40 <oerjan> CakeProphet: yeah, i think it only gets interesting once you want to restrict it to terminating computations
11:25:47 <shachaf> @unlambda `````````````v.I./.O. .i.s. .s.t.u.p.i.d
11:25:47 <lambdabot> Done.
11:25:58 <CakeProphet> so can trees in Haskell be infinite?
11:26:03 <oerjan> shachaf: wat
11:26:06 <oerjan> CakeProphet: sure
11:26:25 <elliott> CakeProphet: no.
11:26:28 <elliott> only lists.
11:26:29 <oerjan> CakeProphet: the standard library ones may or may not be lazy, though
11:26:42 <oerjan> *lazy enough
11:26:44 <elliott> data.tree certainly is
11:26:48 <elliott> it's just (a,[Tree a])
11:27:05 <oerjan> :t Node
11:27:05 <lambdabot> forall a. a -> Forest a -> Tree a
11:27:19 <shachaf> type Tree = Mu []
11:27:23 <elliott> ok ok data Tree a = Node a (Forest a) where type Forest a = [Tree a]
11:27:41 <shachaf> elliott: Since when did trees need an 'a'?
11:27:45 <shachaf> The skeleton i what counts.
11:27:49 <elliott> since data.tree :P
11:27:51 <shachaf> Mu [] is the only true tree.
11:27:56 <CakeProphet> I feel this tree metaphor is collapsing...
11:28:13 <CakeProphet> tree branches lead to forests? help.
11:28:19 <shachaf> B-trees are the only trees that count.
11:28:19 <elliott> hmph, making this program do something made my projected runtime for phase I shoot from two to four hours
11:28:22 <hagb4rd> leafs
11:28:27 <hagb4rd> not?
11:28:32 <oerjan> > let tree = Node 1 tree tree in tree
11:28:33 <lambdabot> Couldn't match expected type `Data.Tree.Forest t
11:28:33 <lambdabot> ...
11:28:41 <oerjan> oops
11:28:56 <oerjan> > let tree = Node 1 (repeat tree) in tree
11:28:57 <lambdabot> Node {rootLabel = 1, subForest = [Node {rootLabel = 1, subForest = [Node {r...
11:29:05 <shachaf> elliott: Hah, wrong again!
11:29:14 <oerjan> CakeProphet: ^ infinite
11:29:14 <fizzie> elliott: Alternative plan: If you don't mind having your packed format being a regular trie (it's likely to be equally fast except for the cases where you need to backoff to shorter context), you can easily (f.s.v.o.) build it directly from the count files, since they're already sorted and thus come in the right order for tree-building. (Just keep a bit of state so that you can update totals and offsets. And you might end up with a bit dispersed nodes if you do
11:29:14 <fizzie> n't want to count the number of subnodes in advance.)
11:29:24 <shachaf> > let tree = Node 1 [tree] in tree -- Infinite tree.
11:29:25 <lambdabot> Node {rootLabel = 1, subForest = [Node {rootLabel = 1, subForest = [Node {r...
11:29:38 <CakeProphet> oerjan: ah okay. But you can't have infinite maps can you?
11:29:46 <elliott> CakeProphet: data.map is finite
11:29:49 <CakeProphet> because they have to balance and stuff.
11:29:49 <elliott> CakeProphet: for infinite maps, see (->)
11:30:13 <elliott> fizzie: There's also the problem that I need to store /two/ sets of "what's up next".
11:30:18 <elliott> fizzie: For going forwards and for going backwards.
11:31:04 <elliott> I suppose one could make an argument that since most English doesn't make any sense going backwards there'll be very little structural overlap and I might as well just have two different files and not lose that much on size.
11:31:13 <oerjan> CakeProphet: there are tries which can be infinite
11:31:19 <hagb4rd> do you mean the enumerator elliott?
11:31:22 <fizzie> I already forgot what that was all about and why you wanted the backwards thing.
11:31:26 <elliott> ?
11:31:34 <hagb4rd> k i guess not
11:31:45 <elliott> fizzie: So you can go from "this word in the middle of the sentence" back to the start of a sentence, as well as forwards to the end.
11:31:51 <elliott> fizzie: MegaHAL does it.
11:33:35 <elliott> fizzie: I am kind of convincing myself with this "English doesn't make any sense backwards anyway" tack, though.
11:34:04 <elliott> fizzie: (i.e. it won't buy me much)
11:34:23 <fizzie> elliott: .so or yesterday before day the AI-complete became MindForth because, anyway point moot a all it's but, Okay
11:34:38 <elliott> fizzie: Oh, it did?
11:35:29 <fizzie> "http://www.scn.org/~mentifex/mindforth.txt
11:35:30 <fizzie> yesterday was able to comprehend both
11:35:30 <fizzie> declarative and negational sentences.
11:35:30 <fizzie> It handled both transitive verbs and intransitive
11:35:30 <fizzie> verbs of being. It stored ideas in its knowledge base
11:35:30 <fizzie> and remembered them in subsequent conversation."
11:35:40 <fizzie> Actually it was already on Sunday, it seems.
11:35:58 <fizzie> Sadly, there's no example session attached.
11:36:11 <elliott> > break (=='a') "xxaxx"
11:36:12 <lambdabot> ("xx","axx")
11:36:22 <elliott> > breakEnd (=='a') "qqaqq"
11:36:23 <lambdabot> Not in scope: `breakEnd'
11:36:31 <elliott> > span (=='a') "qqaqq"
11:36:32 <lambdabot> ("","qqaqq")
11:36:36 <elliott> Hmph.
11:36:39 <elliott> > span (/='a') "qqaqq"
11:36:39 <lambdabot> ("qq","aqq")
11:36:49 <elliott> oerjan: Hey, how do I omit the a
11:37:07 <oerjan> second (drop 1)
11:37:10 <shachaf> > second (drop 1) . span (/='a') $ "qqaqq"
11:37:12 <lambdabot> ("qq","qq")
11:37:13 -!- derdon has quit (Remote host closed the connection).
11:37:28 -!- oerjan has quit (Quit: !enses sekam oot ti).
11:37:29 <elliott> > words "a "
11:37:30 <lambdabot> ["a"]
11:37:34 <elliott> Ah, hmm
11:37:36 <elliott> Better question
11:37:41 <elliott> How do I get the 'a' in the first list
11:37:48 <shachaf> You don't.
11:37:57 <elliott> But I want to.
11:38:12 <shachaf> But you don't.
11:38:19 <shachaf> Maybe Data.List.Split has something?
11:38:25 <elliott> Bytestrings. :p
11:38:38 <elliott> Technically what I want is already provided by split, but I am micro-optimising.
11:38:42 <elliott> For good reason, at least.
11:38:49 <shachaf> Oh, ByteStrings!
11:39:09 <elliott> I hope this is a prelude to you solving my problem.
11:39:15 <shachaf> Well, just unsafely add 1 to the size of the left pointer and subtract 1 from the size of the right pointer.
11:39:19 <shachaf> And add 1 to the position.
11:39:41 <shachaf> Something like that.
11:40:02 <elliott> Well, yes.
11:40:08 <shachaf> Who really cares, it all tends to work out somehow.
11:40:20 <elliott> lines :: ByteString -> [ByteString]
11:40:20 <elliott> lines ps
11:40:21 <elliott> | null ps = []
11:40:21 <elliott> | otherwise = case search ps of
11:40:21 <elliott> Nothing -> [ps]
11:40:21 <elliott> Just n -> take n ps : lines (drop (n+1) ps)
11:40:23 <elliott> where search = elemIndex '\n'
11:40:34 <elliott> Supposedly a memchr-hexadecimal-lotsofstrictness-unsafeperformio version of this was no faster.
11:40:37 <elliott> Who'da thunk it.
11:40:47 <shachaf> "hexadecimal"?
11:40:50 <shachaf> Wait, that makes code faster?
11:41:06 * shachaf had no idea.
11:41:19 <shachaf> Time to rewrite all my code.
11:41:33 <elliott> Yes.
11:41:41 <shachaf> > "AAAA"
11:41:42 <lambdabot> "AAAA"
11:41:44 <shachaf> > "\x41\x41\x41\x41"
11:41:45 <lambdabot> "AAAA"
11:41:50 <shachaf> That was *way* faster. Wow.
11:42:40 * shachaf >>=
11:43:39 <elliott> Yay, now it's twice as fast.
11:44:09 <elliott> Now it will only take 2.22222222 hours. Also, I haven't actually started generating a tree yet.
11:44:27 <elliott> fizzie: Ooh, I have an idea.
11:44:41 <elliott> fizzie: What if I used a reverse-context tree forwards, but a /normal/ context tree backwards?
11:44:57 <elliott> fizzie: Then, I'd benefit from structural sharing so long as reversed English has a lot of structural similarities to English in reverse.
11:45:01 <elliott> Turns out it does!
11:45:14 <elliott> OK, so backoff would be less efficient backwards, but.
11:47:46 <fizzie> It sounds potentially doable; can't really guess how much it saves, though. You'd still need separate "(next word, frequency)" lists for the two directions in each node.
11:48:57 <elliott> fizzie: Well, yes, but it was more about turning the number of contexts that appear in both corpuses from "few of them" to "literally all of them".
11:49:12 <elliott> Which means that all the tree-y overhead is completely deduplicateiiveiteitjeieivhteed.
11:49:17 <elliott> Wow, that was almost Finnish.
11:49:33 <fizzie> Appilan pappilan apupapin papupata.
11:49:38 <fizzie> (That is Finnish.)
11:50:34 <elliott> Hokay, I think I've reduced this problem to one that can be done with Haskell on this little MacBook Air overnight.
11:50:39 <elliott> Perhaps even... in the background.
11:51:12 <elliott> Now I just have to come up with a Haskell representation of the actual tree thing that isn't ridiculously wasteful.
11:52:06 <elliott> Hmmz, I wonder how to do the intern table thing like this.
11:52:21 <elliott> I should download the one-grams to write an intern-table-producing thing.
11:52:26 <elliott> Or, hmm.
11:52:46 <elliott> fizzie: Reassure me that the likelihood of any of the words appearing in the one-gram list being filtered out of the five-grams is sufficiently low to not care.
11:52:50 <elliott> thx
11:54:51 <fizzie> Uh, well... I think it's quite likely that a large number of unigrams that "barely" make it (are very close to the <40 filtering point) -- which is the majority, Zipf and all that -- will never occur in the 5-gram files, since they would pretty much have to occur in only one four-word context to make it in that file.
11:55:32 <fizzie> I can reassure you that all words in the 5-grams do occur in the unigram files, though, if that's what you want to hear instead.
11:56:14 <elliott> fizzie: Well, I just don't want to generate an intern table with a bunch of pointless words.
11:56:26 <elliott> Do I really just have to filter every word in the five-gram set through uniq?
11:56:30 <elliott> That'll take aaaaaaaages.
11:56:37 <fizzie> Not just that, you need to sort them first.
11:56:46 <elliott> NOOOOOOOOOOOOooooooooooooooooooooOOOOOooOOOOooOOOOooOOOOOOOOOOOOOOOOOOOoooooooooooo
11:56:59 <fizzie> Well, unless by "uniq" you mean something that actually keeps all the words it has seen in memory.
11:57:23 <fizzie> How many unigrams did they retain, anyway?
11:57:33 <elliott> 9 files' worth.
11:57:54 <elliott> fizzie: I don't suppose you have a premade way of doing this that doesn't involve me buying eight hundred gigabytes of RAM to let sort eat.
11:58:49 <fizzie> There are premade merge-sort-based on-disk sorters.
11:59:22 <elliott> Wait, I shouldn't need that much RAM.
11:59:25 <elliott> Just enough RAM for each word.
11:59:36 <elliott> Or, wait, sort actually won't use more than that, will it...
11:59:52 <fizzie> Sort will; a more sensible sort of uniq wouldn't.
11:59:55 <fizzie> Was it so that those datafiles have one line for each year or something?
12:00:09 <elliott> fizzie: ?
12:00:32 <fizzie> "As an example, here are the 30,000,000th and 30,000,001st lines from file 0 of the English 1-grams (googlebooks-eng-all-1gram-20090715-0.csv.zip):
12:00:32 <fizzie> circumvallate 1978 313 215 85
12:00:32 <fizzie> circumvallate 1979 183 147 77"
12:00:34 <fizzie> Apparently so.
12:00:55 <fizzie> Did you want to retain the yearliness stuff?
12:01:06 <elliott> fizzie: Not really. At least not now.
12:01:09 <elliott> I just want an intern table. :
12:01:09 <elliott> p
12:03:02 <fizzie> A single-pass through all the data summing up that stuff (so you'd end up with just "circumvallate {313+183}" and so on) would probably cut the (uncompressed) data size to one twentieth of the originals, or less. But then you'd lose the years.
12:04:02 <fizzie> Oh, the files aren't "totally" sorted anyway.
12:04:05 <fizzie> "Inside each file the ngrams are sorted alphabetically and then chronologically. Note that the files themselves aren't ordered with respect to one another. A French two word phrase starting with 'm' will be in the middle of one of the French 2gram files, but there's no way to know which without checking them all."
12:04:32 <fizzie> That's a bit funny.
12:05:13 <elliott> fizzie: I'm not sure the relevance this has to MY PRECIOUS INTERN TABLE
12:05:36 <fizzie> It doesn't have much.
12:06:29 <elliott> So, ehhm, I sure hope sort will only use like three gigs of ram, not eight hundred.
12:06:33 <elliott> That would be a nice thing for sort to do.
12:06:43 <fizzie> That sounds unlikely for sort to do.
12:06:44 <elliott> CakeProphet: Oh uh yeah
12:06:49 <elliott> fizzie: Really?
12:06:58 <elliott> CakeProphet: How big are the one-gram files in total, uncompressed
12:07:11 <fizzie> Well, you know, it has to read all the data in memory to sort it, just in case the last line would be the first.
12:07:30 <elliott> Oh, right.
12:07:36 <elliott> Is there a sort that doesn't bother sorting? :p
12:08:03 <fizzie> You want an integrated "sort | uniq" thing; I'm not sure there's a pre-made one, but it's not very many lines of Haskell/Perl/Python/whatever.
12:08:14 <elliott> Actually how come uniq doesn't support just, you know, keeping track of lines it outputs so that it doesn't output them again?
12:08:27 <fizzie> The 5-gms probably don't have such a huge vocabulary you'd need to have it well-optimized.
12:08:33 <elliott> Hmm, I need a scathing internship-related political pun, since I have gentry.
12:08:53 <elliott> fizzie: You seem to be constantly implying I should look at another data set. :p
12:09:18 <fizzie> No, it was just a "it's probably safe to use a thing that keeps all the words in memory" implication.
12:09:32 <fizzie> I wouldn't be too surprised if you had only a hundred thousand or so words there.
12:09:47 <elliott> I know, it's just all this depressing talk about small vocabularies.
12:10:12 <elliott> fizzie: I'm half-tempted to just generate eight hundred intern tables (one in each gen'd tree) and somehow merge them together in one go.
12:10:17 <elliott> That's probably a terrible idea though.
12:10:20 <fizzie> It's not "small" in an absolute sense, just compared to very large numbers.
12:10:33 <fizzie> Sadly, they don't report the type (unique unigram) counts, just the token counts, in the "total counts" files.
12:11:59 <elliott> Although, if I know which tree each token came from...
12:12:28 <elliott> Eh, it is probably faster to simply generate an intern table upfront and have gentry use that.
12:13:21 <fizzie> I would. They'd overlap a lot, and if each tree had its own, you'd need to remap all the numbers. (Or keep large remappings from the per-tree indices to "global" indices.)
12:13:28 <elliott> Right.
12:15:37 <elliott> That has the annoying side-effect of wanting the data files up-front, but I suppose I can just use my test one.
12:16:15 <fizzie> Extrapolating from the first 5-gm file, removing the per-year information would cut the unpacked data size down to 1/49th of the original size.
12:16:45 <fizzie> (It has 30610909 lines, but only 622735 5-grams.)
12:16:57 <elliott> Time to bust out THE DATA.HASHSETS.
12:17:01 <elliott> fizzie: Wow.
12:17:20 <elliott> fizzie: Oh well, no harm just folding those up at gentry-time.
12:17:42 <fizzie> Except the dick space usage.
12:18:23 <elliott> fizzie: Well, erm, it's only eight gigs, innit?
12:18:57 <fizzie> I haven't counted.
12:19:07 <elliott> Eight hundred times one hundred megs.
12:19:12 <elliott> Roughly.
12:19:16 <elliott> Oh, hmm.
12:19:18 <elliott> That's compressed.
12:19:22 <elliott> fizzie: Well,
12:19:26 <elliott> -rw-rw-r-- 1 elliott elliott 113M 2011-10-12 09:56 googlebooks-eng-all-5gram-20090715-478.csv.zip
12:19:42 <fizzie> 800 times that is 80 gigs, not 8. Approximately.
12:19:49 <fizzie> Unpacked, it's about a gigabyte per file.
12:19:54 <elliott> Hmm.
12:20:01 <elliott> Well, I can store it compressed mostly.
12:20:06 <elliott> But how the fuck am I going to download this shit?
12:20:09 <fizzie> Yes, you can unpack on-the-fly.
12:20:33 <fizzie> $ tail -n 5 googlebooks-eng-all-5gram-20090715-0.csv
12:20:33 <fizzie> • • • . ; 2002 2 2 2
12:20:33 <fizzie> • • • . ; 2003 4 4 4
12:20:33 <fizzie> • • • . ; 2005 1 1 1
12:20:33 <fizzie> • • • . ; 2006 3 3 3
12:20:33 <fizzie> • • • . ; 2008 1 1 1
12:20:36 <fizzie> The bestest data ever.
12:20:37 <elliott> Yes, it's indeed eighty gigabytes.
12:20:50 <elliott> fizzie: So... those CDs :P
12:20:53 <elliott> Sorry, DVDs :P
12:21:15 <fizzie> I don't have them physically either, and I'm pretty sure they're covered by a License(tm).
12:22:13 <fizzie> That set is just 25G; probably mostly thanks to the fact that the Internet doesn't have year (or page/book count) information.
12:22:42 <elliott> fizzie: I take it filtering out the page/year/etc. data wouldn't save much disk?
12:22:50 <elliott> (I guess I'll write a smallification thing.)
12:22:58 <elliott> (Although no wait, I need to figure out how I'm downloading eighty gigabytes first.
12:22:59 <elliott> )
12:23:07 <fizzie> In the uncompressed copy, it should save quite a lot; compressed, maybe not so much.
12:23:29 <fizzie> But still quite a lot, perhaps.
12:23:45 <elliott> Yeah, but then I realised that I have eighty gigs -- uh, I should check --
12:23:48 <elliott> /dev/sda5 134G 14G 114G 11% /
12:23:49 <elliott> Yeah.
12:23:56 <elliott> So bandwidth is a rather larger problem. :p
12:27:37 <fizzie> But size is time*bandwidth, and time goes up to infinity.
12:28:18 <elliott> Deep
12:28:19 <elliott> .
12:28:35 <elliott> Oh no, I am dangerously close to having: A Library.
12:28:39 <elliott> Like, there is this one data-type.
12:28:41 <elliott> And I want to
12:28:42 <elliott> reuse it
12:28:56 <elliott> Maybe I should just write a quick Perl thing.
12:28:59 <elliott> It would stifle me.
12:29:10 <fizzie> 1.2 billion 5-grams in web-data; approximately 0.5 in the books, extrapolating again from the first file. So they're around the same order of magnitude.
12:30:12 <fizzie> -rw-rw-r-- 1 htkallas htkallas 6168093 2011-10-12 15:29 googlebooks-eng-all-5gram-20090715-0-NOYEAR.zip
12:30:12 <fizzie> -rw-rw-r-- 1 htkallas htkallas 117898565 2011-10-12 15:29 googlebooks-eng-all-5gram-20090715-0.zip
12:30:19 <fizzie> That's how much you save in compressed-file size.
12:30:51 <elliott> :t foldl
12:30:52 <lambdabot> forall a b. (a -> b -> a) -> a -> [b] -> a
12:30:55 <fizzie> Sadly, you can't download the stripped-down files. :p
12:31:10 <fizzie> 1/19th, apparently.
12:32:50 <fizzie> Maybe if you add an "Accept: application/zip;note=dropthatstupidyearstuff" header to your GET request it'll send the smaller file.
12:35:13 <fizzie> That was about the ugliest: ... | perl -ne '($g, $y, $f) = split /\t/; if ($cg and $g ne $cg) { print "$cg\t$cf\n"; $cf=0; } $cg=$g; $cf+=$f; END { print "$cg\t$cf\n"; }' > ...
12:35:39 <elliott> fizzie: What is that even?
12:35:45 <elliott> Oh, is that year-merging? Yikes.
12:35:53 <elliott> Hey why is this intern thing taking so slowly for one file, this is unacceptable.
12:36:18 <fizzie> It was year-merging, yes.
12:38:45 <elliott> I think I may need a faster computer.
12:39:00 <fizzie> 92640 words in googlebooks-eng-all-5gram-20090715-0-NOYEAR.csv.
12:39:08 <fizzie> $ cat googlebooks-eng-all-5gram-20090715-0-NOYEAR.csv | perl -ne '($g) = split /\t/; $v{$_} = 1 for split " ", $g; END { print join("\n", sort keys %v), "\n"; }' | wc -l
12:39:10 <elliott> fizzie: How long did that take you?
12:39:11 <fizzie> Perl is the bestest.
12:39:15 <elliott> I mean
12:39:15 <elliott> to run
12:39:17 <elliott> Because this is slow.
12:39:45 <fizzie> 1.9 seconds; but I ran on the no-years file.
12:40:04 <elliott> fizzie: Mine's been running for like a minute. What givez?
12:40:06 <elliott> Oh, there it goes.
12:40:10 <elliott> real1m31.514s
12:40:14 <elliott> I think I'll try plain old Set.
12:40:40 <fizzie> Extrapolating, it should have taken pretty much exactly that long for the Perl script on the yearful datafile.
12:40:48 <elliott> Oh.
12:40:51 <elliott> Fair enough then.
12:41:09 <elliott> fizzie: How long did year-smushing take?
12:41:36 <fizzie> I'll time it if it's still in the readline command history. Maybe a minute, though.
12:42:14 <elliott> If I'll get similar savings on gentrying, that obviously pays off. :p
12:42:28 <fizzie> 1m13.951s for the above word-counting for the yearfuls.
12:42:35 <elliott> fizzie: I meant
12:42:41 <elliott> fizzie: How long did it take to convert yearfiles → noyearfiles
12:42:52 <elliott> Oh my god, "monads" is actually one the second-last line of what my script printed out for that.
12:42:53 <fizzie> Yes, I just had that time already running.
12:43:00 <elliott> It's hash-based, so complete coincidence.
12:43:13 <elliott> I'm, uhh, becoming somewhat sceptical that I'll be able to gentry a single gigabyte file in the twenty seconds I want.
12:43:52 <fizzie> 0m51.402s to smoosh years out with the above-the-above snippet.
12:44:19 <elliott> Rightes.
12:44:54 <elliott> There should really be an
12:45:06 <elliott> a -> HashSet a -> Maybe (HashSet a) operation.
12:45:16 <elliott> Nothing if it's already there, Just hs' if it wasn't, where hs' has it inserted.
12:45:34 <elliott> Then you can handle the "it's probably already an element, but if it's not, then insert it while you're there" behaviour.
12:46:33 <fizzie> I'd probably go that way, unless you actually are going to use the year data at some point; the uncompressed no-years file is 17M; the compressed with-years file is 113M. So you could keep everything uncompressed (that's one less hassle), and still use "only" ~13.6 GB vs. 90 GB.
12:46:33 -!- Jafet has joined.
12:47:36 <elliott> 17M???
12:47:41 <elliott> That's ridiculous.
12:47:49 <elliott> Right, OK, I'll write a year-smuher.
12:47:51 <elliott> smusher.
12:48:37 <elliott> fizzie: Wow, your script totally fails to handle, e.g. scrambling all the lines in the file.
12:49:09 * elliott is tempted to try writing it in awk.
12:49:22 <fizzie> Certainly, but that's just because they said it's sorted.
12:49:29 <fizzie> It throws out the page/book counts too.
12:49:55 <fizzie> I guess you could theoretically sum those up, but I'm unsure what they are good for.
12:50:46 <elliott> fizzie: Mightn't it be rather more efficient to do the interning with the degrading? (My totally fancy name for year-smushing.)
12:51:01 <elliott> I mean, OK, they're unrelated operations, but interning is pretty simple, and it saves some overhead :P
12:51:11 <fizzie> Sure, it could be done at the same time.
12:51:29 <elliott> fizzie: I mean... the main problem is that one minute times eight hundred files equals 13 hours.
12:51:52 <elliott> I'm kind of impatient; eighteen hours is the kind of computational budget I'd like to give this ridiculousness as a whole.
12:52:09 <elliott> That's probably totally infeasible though.
12:52:18 <fizzie> But 13 hours distributed over let's say 36 cores is just 22 minutes.
12:52:31 <elliott> Oh, you're donating me cluster time? :P
12:52:46 <fizzie> Nnnnno, but, uh... you can buy some from the cloud, I'm sure.
12:53:11 <elliott> fizzie: I suppose year-smushing is so intensely IO-bound that I could run ten at once and have them complete in about the same time.
12:53:57 <fizzie> There's certainly not much computation going on there, that's for sure.
12:54:26 <elliott> I'm not really sure what the number I should use for completely IO-bound things like that.
12:54:33 <elliott> Ten processes at once? A hundred?? EXACTLY EIGHT HUNDRED??
12:55:32 <fizzie> Incidentally, those files seem to have something silly when it comes to double-quotes. At least based on really quick sampling.
12:56:32 <fizzie> $ tail -n +39991 googlebooks-eng-all-5gram-20090715-0.csv | head -n 4
12:56:32 <fizzie> """ 2003 1 1 1
12:56:32 <fizzie> """ 2006 4 4 4
12:56:32 <fizzie> """ 1822 1 1 1
12:56:32 <fizzie> """ 1856 2 2 2
12:56:42 <fizzie> I mean, that doesn't really look all that 5-grammy.
12:57:04 <fizzie> $ tail -n +30000 googlebooks-eng-all-5gram-20090715-0.csv | head -n 1
12:57:05 <fizzie> """ "" Was anybody else" 1928 1 1 1
12:57:12 <fizzie> And I'm not exactly sure what's going on there either.
12:58:02 <elliott> <fizzie> """ 2003 1 1 1
12:58:04 <elliott> I think they're empty words.
12:58:12 <elliott> Like, """ at the end of a book or something.
12:58:34 <fizzie> The latter might be the "standard" CSV quoting rule; """ "" Was anybody else" => [" " Was anybody else].
12:59:03 <fizzie> But the former doesn't even have 5 words in it.
12:59:20 <elliott> They're not csv files.
12:59:22 <elliott> Even Google admits that.
12:59:36 <elliott> "File format: Each of the numbered files below is zipped tab-separated data. (Yes, we know the files have .csv extensions.)"
13:00:16 <fizzie> It sounds unlikely that a book would actually contain ["""] [""] [Was] [anybody] [else"] very often. But of course it's possible.
13:00:39 <elliott> Well, fair enough. There's nothing about escaping on http://books.google.com/ngrams/datasets, though.
13:00:43 <elliott> fizzie: Also it's only one result.
13:01:07 <elliott> fizzie: And they say older books have OCR issues, so...
13:01:28 <elliott> (e.g. occurrences of "internet" before the term's invention because of OCR mistakes)
13:02:05 <fizzie> Maybe, then. But """ doesn't even have 5 words; an X at the end of a book is not supposed to create any sort of "X <empty> <empty> <empty> <empty>" 5-gram, usually.
13:02:46 <elliott> fizzie: Well, it could always be """ followed by lots of spaces...
13:03:32 <fizzie> Also they say it's alphabetically sorted, but the (no-year, 0) file starts with:
13:03:39 <fizzie> ! ! ! Is there 44
13:03:39 <fizzie> ! ! ! Where is 74
13:03:39 <fizzie> "! ! "" The two" 103
13:03:39 <fizzie> "! "" "" As in" 68
13:03:40 <fizzie> ...
13:03:47 <fizzie> "! "" yelled someone in" 104
13:03:47 <fizzie> "! ' "" ) The" 40
13:03:47 <fizzie> ! ' ' Get off 46
13:03:47 <fizzie> ! ' ' Stop ! 121
13:03:50 <elliott> Looks alphabetical to me.
13:03:53 <elliott> Oh, hmm.
13:04:07 <elliott> fizzie: Well, you know. I'd be surprised if there wasn't any fucked-upness.
13:04:18 <elliott> You can: read: http://www.sciencemag.org/content/331/6014/176 if you want to know how they generated it.
13:05:03 <fizzie> I think it's just slightly borksored.
13:05:48 <elliott> So, hmmm.
13:05:56 <fizzie> All "sensible-looking" instances of " I've found seem to have that CSV-style "..."-around-the-whole-field where inner doublequotes have been doubled; most of the other stuff is some sort of nonsense that starts with a " but then doesn't contain enough words.
13:06:06 <elliott> Still not entirely sure what my strategy is.
13:06:30 <fizzie> "! ) 1847 1 1 1
13:06:32 <fizzie> Like that.
13:06:35 <elliott> Degrade → intern → gentry → merge is all very reasonable, but now I'm stuck trying to figure out what my perceived issue was.
13:06:41 <elliott> fizzie: Quoting errors? :P
13:06:52 <elliott> Maybe it tried to run some dollar sign (...) as bash.
13:06:59 <elliott> And it just errored out, but stderr was eaten.
13:07:05 <elliott> This is why you don't do this kind of stuff with bash.
13:09:17 -!- MSleep has changed nick to MDude.
13:11:51 <fizzie> Yes, I think someone's screwed up there; just funny that no-one has fixed it since the 2009 releasification of it.
13:12:12 <fizzie> http://code.google.com/p/google-ngram-stripper/ "The corpus is full of uncorrected OCR errors and has a suspicious number of quote marks, and a number of other issues --"
13:12:18 <fizzie> Not too much complaining going on either.
13:13:01 <elliott> fizzie: Eurgh, does that do anything non-trivial?
13:13:07 <fizzie> Probably not.
13:13:09 <elliott> "In practice, 5-grams require a 3TB hard disk and 20GB+ of memory (swap memory works but is so slow it's pointless. I'm rewriting the script now)"
13:13:11 <elliott> Nice.
13:13:39 <elliott> http://www.manythings.org/wordfrequency/
13:13:41 <elliott> Hmmmmmmmmmmm.
13:14:00 <elliott> http://code.google.com/p/google-ngram-stripper/source/list
13:14:02 <elliott> Seems rather recent.
13:14:14 <elliott> fizzie: Oh, dear god: http://code.google.com/p/google-ngram-stripper/source/browse/trunk/google-ngram-stripper.py
13:14:46 <fizzie> Gggg.
13:15:45 <elliott> def combinecapitalsandapplythreshold():
13:15:50 <elliott> filteryearandalphabetise()
13:15:53 <elliott> Literate programming.
13:15:56 <fizzie> finalfilename = "FINAL RESULTS SINCE" + str(earliestyear)+"THRESHOLD"+str(threshold)+".txt"
13:15:56 <fizzie> resultsfile = open(finalfilename, 'a')
13:16:02 <fizzie> It's the bestest thing since sliced bread.
13:16:02 -!- kmc_ has joined.
13:25:18 -!- boily has joined.
13:30:24 -!- hagb4rd2 has joined.
13:31:00 -!- hagb4rd has quit (Ping timeout: 248 seconds).
13:32:22 -!- augur has quit (Remote host closed the connection).
13:34:12 <Jafet> bread[i:j]
13:36:51 <elliott> What kind of 3G data bandwidth do people get "in the wild"? Outside of countries designed solely for good mobile reception like Finland, that is.
13:45:23 -!- Patashu has quit (Quit: MSN: Patashu@hotmail.com , Gmail: Patashu0@gmail.com , AIM: Patashu0 , YIM: patashu2 .).
13:46:21 -!- sebbu2 has changed nick to sebbu.
13:46:50 -!- pikhq_ has joined.
13:46:51 -!- pikhq has quit (Ping timeout: 260 seconds).
13:51:53 -!- elliott has quit (Remote host closed the connection).
13:54:21 -!- kmc_ has changed nick to kmc.
13:58:43 <fizzie> I'm not sure we get very fast 3G in Finland either. In the Helsinki/Espoo/Vantaa area, apparently 3.5-6 Mbps, depending on the operator, according to some presumed-to-be-disinterested third party.
14:02:35 -!- elliott_ has joined.
14:02:52 <elliott_> 13:58:43: <fizzie> I'm not sure we get very fast 3G in Finland either. In the Helsinki/Espoo/Vantaa area, apparently 3.5-6 Mbps, depending on the operator, according to some presumed-to-be-disinterested third party.
14:03:03 <elliott_> fizzie: Well, yes, I just bet it's slower over here, is all. :P
14:05:13 <fizzie> I wouldn't know, my mobile interwebs are 384 kbps as per the contract.
14:05:23 <fizzie> At least I think it was that.
14:05:53 <elliott_> My conclusion is that Gregor has probably accidentally come up with something incredibly useful.
14:06:01 <elliott_> Well, indirectly :P
14:18:16 -!- copumpkin has quit (Quit: Computer has gone to sleep.).
14:43:18 -!- augur has joined.
14:47:44 -!- copumpkin has joined.
14:59:21 -!- Phantom_Hoover has joined.
15:02:25 <Phantom_Hoover> Hello lambdabot.
15:02:26 <lambdabot> Phantom_Hoover: You have 5 new messages. '/msg lambdabot @messages' to read them.
15:18:20 -!- augur has quit (Remote host closed the connection).
15:18:59 -!- boily has quit (Ping timeout: 252 seconds).
15:19:46 -!- Vorpal has joined.
15:20:34 <Phantom_Hoover> And it was turning out to be such a nice day.
15:30:36 <elliott_> BILLING SUMMARY
15:30:37 <elliott_> ---------------
15:30:37 <elliott_> PRIOR BALANCE: $-10.67
15:30:38 <elliott_> ---------------
15:30:40 <elliott_> NEW BALANCE: $-10.67
15:30:42 <elliott_> * negative amounts are credits
15:30:45 <elliott_> I wonder how I can express to Slicehost that I just don't care about these bills any more.
15:31:53 <Gregor> Dood, $10.67 is like one slicehost T-shirt.
15:32:17 <elliott_> The most common currency.
15:32:46 -!- elliott_ has quit (Remote host closed the connection).
15:32:51 -!- elliott_ has joined.
15:35:14 -!- boily has joined.
15:43:20 -!- nooga has quit (Ping timeout: 256 seconds).
16:07:14 -!- monqy has joined.
16:15:23 <Phantom_Hoover> http://www.primaxstudio.com/stuff/scale_of_universe/scale-of-universe-v1.swf
16:15:32 <Phantom_Hoover> Is it just me or is that the Spore soundtrack.
16:17:10 -!- augur has joined.
16:26:32 <Gregor> <elliott_> My conclusion is that Gregor has probably accidentally come up with something incredibly useful. // huh
16:26:42 <elliott_> Gregor: Well, FSVO incredibly :P
16:27:59 <elliott_> Gregor: I'm pretty sure a model where you run a server at home with all your music on it and remotely access and stream it from your phone is feasible with 3G connections in practice. The problem then is more that DSL upload rates don't tend to be that good, I guess :P
16:28:26 <Gregor> Ah, that idea. Except I tried to make it terrible :P
16:28:31 <elliott_> Yes, but you failed :P
16:28:48 <elliott_> It would be so much nicer than synchronising some arbitrary subset of your music all the time.
16:29:09 <Deewiant> If you reëncode the music for uploading any DSL connection should be fine
16:29:15 <Gregor> So, clearly I need to think of more terrible ideas.
16:29:18 <elliott_> I think that's what Apple's new iCloud rubbish is meant to be, except it actually just redownloads from iTunes' servers because Apple have literally no comprehension that they are not the only provider of services in the entire universe.
16:29:45 <elliott_> Deewiant: Well, I forget how good Vorbis is. But certainly it's trivial if you make it sound like crap :P
16:29:56 <Phantom_Hoover> Seen in r/AskScience: someone scared of mining on the moon because humans upset the delicate balance of nature, maaaan
16:29:58 <Phantom_Hoover> *.
16:30:11 <elliott_> Deewiant: It's probably trivial for Finns to get high-quality audio streamed off a consumer DSL connection's upload,
16:30:14 <elliott_> Deewiant: feasible for Brits,
16:30:18 <elliott_> Deewiant: and impossible for USians.
16:30:53 <Deewiant> elliott_: What kind of uploads do Brits/USians have, then
16:31:15 <Phantom_Hoover> Where's that upload speed monitor?
16:31:27 <elliott_> Deewiant: My upload is I think two megabits (eight megabits download); you can get twenty four megabit download / dunno what upload nowadays but only in cities and it's far from ubiquitous yet.
16:31:29 <Deewiant> speedtest.net
16:31:35 <elliott_> Fibre-optic offerings are very very new and barely available anywhere.
16:31:44 <elliott_> And you usually get less than advertised because of distance to the exchange.
16:31:52 <Deewiant> elliott_: CBR MP3s only go up to 320 kbps, no?
16:32:10 <elliott_> MP3s? So old fashioned.
16:32:15 <Deewiant> Just an example
16:32:16 <elliott_> But yes, it's true.
16:32:20 <elliott_> There's a liiittle bit of overhead though isn't there? :p
16:32:33 <Deewiant> Maybe some tiny amount, sure
16:32:46 <elliott_> What's EDGE like, I wonder
16:32:47 <Deewiant> But 256 kbps should still be enough for "anything" :-P
16:33:02 <elliott_> I guess the phone could cache recently-played music so you can survive even in, like, the harsh Finnish desert
16:33:14 <elliott_> But still, it would be nice if it worked outside threegee areas
16:33:16 <elliott_> i.e. cities
16:33:53 <Deewiant> Listen to modules, problem solved
16:33:56 -!- hagb4rd2 has quit (Ping timeout: 248 seconds).
16:34:22 <elliott_> Deewiant: "Modules", seriously now
16:34:32 <elliott_> It took me about fifteen seconds to work out what the hell you were talking about
16:34:45 <elliott_> So oi, someone (fizzie) go look up EDGE speeds
16:34:46 <Deewiant> I'm sorry that there isn't a better term
16:34:48 <Phantom_Hoover> Deewiant, my upload speeds are .45Mbps.
16:34:50 <Deewiant> "module files"
16:34:54 <elliott_> Deewiant: mods? :p
16:35:12 <Phantom_Hoover> I live in the same city as one of the UK fibre optic backbone hubs.
16:35:15 <elliott_> Phantom_Hoover: Ooh, how bourgeoise.
16:35:32 <Deewiant> elliott_: Always makes me think of the MOD format :-P
16:35:50 <elliott_> Deewiant: Kind of the point :P
16:36:03 <Deewiant> elliott_: I.e. too restrictive
16:39:31 <Deewiant> Phantom_Hoover: I get that much over 3G on my phone
16:39:48 -!- Phantom_Hoover has quit (Ping timeout: 248 seconds).
16:40:52 -!- olsner has quit (Read error: Connection reset by peer).
16:42:17 <elliott_> Deewiant: Use your phone to host your other phone's music collection
16:42:37 <Deewiant> I only have one phone
16:42:54 <Deewiant> And I don't use it to listen to music
16:43:09 <elliott_> Hmm, I wonder if it might not be most effective as a music-playing daemon type scenario that, when accessed remotely, outputs to a real-time vorbis/whatever encoder rather than an actual audio device
16:43:15 <elliott_> And then the phone connects to, decodes, and plays that
16:43:23 <elliott_> Store everything as FLAC on the server, obviously
16:43:30 <elliott_> I dunno, seems like it has a simpler streaming model
16:43:47 <elliott_> And something like shuffle seems easier to do without buffering gaps if you just let the server handle it and push it down the same stream
16:44:19 <elliott_> Gregor: Sorry, I don't think I could make this idea truly terrible if I tried; I want one
16:44:35 <Deewiant> Does this not exist already or something?
16:44:47 <elliott_> Gregor: Only the pure, unadulterated version of your concept remains awful
16:45:27 <Gregor> elliott_: Right, the one that was always meant to be terrible :P
16:45:30 <elliott_> Deewiant: If it does, I don't know about it; the closest thing I know about is that new iCloud crap I mentioned, which seems to be tied into the iTunes Store and is basically just codeword for "your phone automatically downloads faux digital rights to shit, so we'll let you download it without asking twice"
16:45:37 <elliott_> Which isn't nearly the same thing, naturally
16:45:55 <Deewiant> MPD?
16:46:04 <elliott_> Deewiant: 17:43 <elliott_> Hmm, I wonder if it might not be most effective as a music-playing daemon type scenario that, when accessed remotely, outputs to a real-time vorbis/whatever encoder rather than an actual audio device
16:46:14 <elliott_> Deewiant: mpd/xmms2 allow for remote /control/
16:46:19 <elliott_> But they don't handle the whole "hearing it from miles away" thing
16:46:29 <elliott_> That would have to be handled by what amounts to their output driver
16:46:36 <elliott_> Certainly it could be a workable part of a solution
16:46:38 <Deewiant> Ah, I wasn't aware
16:46:42 <Deewiant> Icecast and such, then?
16:47:14 <Deewiant> I mean, online radio stations and similar exist
16:47:16 <elliott_> Something like mpd outputting to icecast seems like it would form something close to a solution, yes; you still need some custom code to handle the connection and switching of drivers
16:47:37 <elliott_> That stops you listening to music at home while also on a remote device, which I suppose might matter if you're not a hermit, but who isn't (and you could always just spawn another mpd I guess)
16:47:59 <elliott_> But really, the main thing here is the actual client code :P
16:48:28 <elliott_> If you have to use some random terrible mpd app to get stuff actually playing, then open up an internet radio app, key in an address, and it's already been playing for a minute by the time you connect, it's sort of worthles
16:48:29 <elliott_> s
16:48:56 <Deewiant> If you say so :-P
16:49:09 <Deewiant> Doesn't seem worthless to me but whatever
16:49:44 <elliott_> But hey, at least our connections are fast enough for it
16:50:23 <elliott_> Deewiant: Well, that solution is not less frustrating than the existing solution of "pick a random subset of music, encode it in batch, and synchronise it to phone; repeat every once in a while"
16:50:41 <Deewiant> If you say so :-P
16:50:56 <elliott_> Shrug, I'd have to try it :P
16:50:57 <Deewiant> I don't listen to music except at home anyway
16:51:05 <Deewiant> So I'm not really qualified to have opinions on the matter
16:52:39 <elliott_> Since when has lack of knowledge ever stopped anyone from having an opinion
16:53:12 <Deewiant> It stops me from having an opinion because I try to not be an idiot
16:55:27 -!- olsner has joined.
16:59:19 -!- derrik has joined.
17:07:44 <fizzie> elliott_: You mean real-life EDGE speeds, or theoretical EDGE speeds? The latter can theoretically go up to around 200 kbps.
17:07:53 <elliott_> fizzie: The type that aren't theoretical.
17:09:26 <fizzie> I think it's around 128 kbps at most. And rather bad latency.
17:10:11 <fizzie> It's still better than the doesn't-quite-go-as-fast-as-56k-dialup plain GPRS.
17:12:17 <elliott_> I think Vorbis is meant to be transparent at 128 kbps, but I could be wrong about that.
17:13:20 -!- sebbu has quit (Read error: Connection reset by peer).
17:13:21 <fizzie> With large enough buffers... you probably wouldn't get consistent 128k through either. Except if you're lucky.
17:13:37 <elliott_> Yes, it sounds not the best streaming platform.
17:13:49 -!- sebbu has joined.
17:13:50 -!- sebbu has quit (Changing host).
17:13:50 -!- sebbu has joined.
17:15:29 <Gregor> Hm ... anybody have a guess as per why my Usermode Linux can't run 32-bit binaries? Is there a kernel config option for that?
17:16:00 <Deewiant> Yes, there is
17:16:14 <Deewiant> CONFIG_IA32_EMULATION=y
17:16:17 <Deewiant> Presumably that
17:16:50 <Gregor> Hm, snot there >_>
17:17:03 <Gregor> But that, plus intarwebs = "No, x86_64 UML does not have x86_32 emulation."
17:17:21 <Deewiant> D'oh
17:20:11 <Gregor> Weird
17:20:49 <Gregor> Yup, never gonna run Opera 9 X-D
17:23:22 <elliott_> Gregor: What are you trying to do :P
17:26:43 <Gregor> elliott_: Gathering historical speed data to make a comparative study of industry standard v my benchmarks.
17:27:04 <elliott_> Gregor: You need UML for this? :P
17:27:45 <Gregor> Opera 7-9 on modern system = megacrash.
17:28:01 <elliott_> Nice.
17:31:42 <Gregor> And I mean, like, "Make Linux my bitch" crash
17:31:45 <Gregor> It's amazing.
17:34:15 -!- Jafet has quit (Quit: Leaving.).
17:37:27 -!- Phantom_Hoover has joined.
17:53:22 -!- elliott_ has quit (Remote host closed the connection).
17:58:09 -!- ais523 has joined.
18:16:19 -!- Ngevd has joined.
18:16:27 <Ngevd> Hello!
18:25:03 <CakeProphet> fungot: hi
18:25:03 <fungot> CakeProphet: so, let's say i call them mindless games. if we hit every stupid person, any person going, tough one. if we solve it,...
18:26:53 <CakeProphet> fungot: hi
18:26:53 <fungot> CakeProphet: his birthday is in the same identifiers with colons in them :p. i think i've gotten ( lambda fnord body)) val...)
18:27:04 <CakeProphet> fungot: hi
18:27:04 <fungot> CakeProphet: if it's ( syntactically) long and short, whose semantics, though. more like doing what is in the same
18:27:05 <CakeProphet> fungot: hi
18:35:58 <Ngevd> fungot!?
18:35:58 <fungot> Ngevd: just to help an fnord archive) but it looks like mike was trying to decide who to regulate and how to classify the dase, simply classify the dase, simply classify the dase, simply classify the dase, simply classify the dase, simply classify the dase, simply classify the dase, simply classify the dase, simply classify the dase, simply classify the dase, simply classify the dase, simply classify the dase, simply classify t
18:37:55 -!- boily has quit (Quit: WeeChat 0.3.5).
18:37:55 <fungot> Ngevd: is that something you know and and the cases that required to actually mutate the original i think you were still a very famous program talisman with fnord windows. that's always tricky. i could actually make progress. securing budgetary authority, can the governments. i know 2. that's obvious and you did refer to his fnord code
18:38:19 <Ngevd> Hmm
18:38:27 -!- oerjan has joined.
18:38:29 <Ngevd> Why did it double for me and stop for you, CakeProphet?
18:41:33 -!- nooga has joined.
18:56:32 -!- elliott has joined.
19:05:27 <Ngevd> Evening, elliott
19:10:10 -!- CakeProphet has quit (Ping timeout: 256 seconds).
19:14:41 -!- Sgeo|web has quit (Ping timeout: 252 seconds).
19:24:43 -!- derrik has quit (Quit: nites).
19:36:03 -!- tiffany has joined.
19:36:42 <Ngevd> Evening, tiffany
19:36:56 <tiffany> hai
19:37:20 <Ngevd> How're you?
19:37:34 <tiffany> okay
19:42:53 <fizzie> Ngevd: The doubling is a known bug; it read that quit message as >>> :Ngevd!~nathan@host-�����rY�t2�3��qbl��~w�om�net PRIVMSG #esoteric :fungot:boily!~boily@mtl.savoirfairelinux.net QUIT :Quit: WeeChat 0.3.5 <<<
19:42:54 <fungot> fizzie: or is it just me, or i: yet, you rogue! something is reacting to the pendant. take up, boy; open't. so, now go with, do miscarrie, thou had'st bin resolute pompey
19:43:38 <Ngevd> Aaah
19:44:24 <elliott> fizzie: I wonder, can you produce a dataset with inverted fnords?
19:44:33 <elliott> That is, everything /over/ N occurrences is fnorded, anything under kept?
19:44:36 <Ngevd> fungot: sdronf?
19:44:36 <fungot> Ngevd: " and this is a new game. there is no proof is considered one
19:45:23 <oerjan> elliott: fnord fnord fnord fnord fnord fnord fnord interesting
19:45:49 <elliott> oerjan: exactly
19:45:58 <Ngevd> So that's what the fnords are
19:47:01 <oerjan> elliott: fnord fnord fnord fnord completely unreadable
19:47:25 <elliott> oerjan: yes but the thing is that fnord becomes /one token/
19:47:35 <elliott> so all you need to do is scale down the probabilities for fnord massively
19:47:41 <elliott> and it'll become... er, completely incoherent
19:47:43 <elliott> but in a fun way
19:48:01 <oerjan> fnord likely
19:48:17 <elliott> >:(
19:49:26 <oerjan> fnord fnord guess fnord fnord fnord fnord fnord experiment
19:51:30 <fizzie> It might be a bit repetitive, since by definition there wouldn't be very many non-fnord "next" words available. Either that, or rather random.
19:51:57 <elliott> fizzie: There is ONLY ONE WAY to find out.
19:51:59 <elliott> ONLY
19:52:00 <elliott> ONE
19:52:00 <elliott> WAY
19:52:07 <fizzie> I don't think the tools have an option for it.
19:52:24 <oerjan> so they've sequenced the black death microbe. i foresee no problems with this.
19:53:14 <fizzie> -f, --nfirst=INT Number of most common words to be included
19:53:17 <fizzie> -d, --ndrop=INT Drop all words with less than ndrop occurances. If both nfirst and ndrop options are specified, the tighter bound is taken
19:53:25 <fizzie> Sadly, no inverted bounds.
19:55:14 <elliott> fizzie: No problem, you'll clearly switch to the far superior engTK (Elliott's n-gram toolkit) when it's released! Too bad that won't support any kind of reduction at all.
19:56:02 <Phantom_Hoover> elliott, you shold use the scoTK it is better in literally every way.
20:05:39 <oerjan> the norTK would be better if there was a non-zero probability of it ever reaching coding stage
20:06:24 -!- rapido has joined.
20:08:28 <oerjan> `? welcome
20:08:35 <HackEgo> Welcome to the international hub for esoteric programming language design and deployment! For more information, check out our wiki: http://esolangs.org/wiki/Main_Page
20:08:35 <oerjan> wat
20:08:38 <oerjan> oh
20:09:11 <elliott> rapido has been here many times before :P
20:09:36 <oerjan> very subtly, perhaps
20:09:56 <elliott> oerjan: /or/, you just have terrible memory
20:10:03 <elliott> (this is the correct option)
20:10:20 <oerjan> that's just nonsense, i cannot recall having a terrible memory
20:10:41 <rapido> elliott: so what's the newest fad in esoteric language land? ;)
20:11:05 <elliott> absolutely nothing
20:11:08 <elliott> like always :)
20:11:40 <Phantom_Hoover> We ran out of fads when we all started playing Minecraft.
20:11:43 <oerjan> not very faddish these days
20:12:26 <oerjan> and then you transitioned to dwarf fortress?
20:12:36 <Phantom_Hoover> Yes, but we all got bored with it pretty quickly.
20:12:42 <oerjan> have you passed on since then?
20:12:43 <elliott> Phantom_Hoover: We did?
20:12:55 <elliott> Phantom_Hoover: I'm not bored of DF, it's just one of those phases things.
20:13:14 <elliott> Phantom_Hoover: I'm pretty sure 1.9 will start up the Minecraft mania again and we can all go back to being unproductive.
20:13:15 <Phantom_Hoover> Well true; I just drifted out of it more than getting /bored/, but it amounts to the same.
20:13:58 <rapido> i've been into http://apocalisp.wordpress.com/2010/07/08/type-level-programming-in-scala-part-6b-hlist%C2%A0folds/
20:14:17 <oerjan> oh dear
20:14:17 <rapido> someone should create a language to mock typed languages
20:14:45 <elliott> that looks like boring old hlists, except overcomplicated because scala's syntax sucks
20:14:55 <ais523> rapido: to laugh at them, or to make something that behaves similarly to them for testing?
20:15:07 -!- DH____ has joined.
20:15:10 <ais523> also, it already exists, it's called compile-time C++
20:15:16 * elliott has several notable accomplishments in the field of type-level programming. including C++ templates :P
20:15:27 <elliott> oerjan knows. the horror is within his brain.
20:15:32 <elliott> he can never escape my questions.
20:16:11 <oerjan> at least i escape the C++ ones
20:17:42 <rapido> elliott: what about a language that has types at runtime, and values at compile time? - effectively reversing compile-runtime
20:18:22 <Phantom_Hoover> Hey, types are the best.
20:18:23 <elliott> rapido: sounds like word salad until you give it semantics :P
20:18:59 <rapido> elliott: i know - just brain farting
20:19:27 <oerjan> `log elliott.*fizzbuzz
20:19:42 <elliott> fizzzzzzzzzzzzz
20:19:43 <elliott> bzzzzzzzz
20:19:54 <HackEgo> 2011-05-27.txt:05:11:34: <elliott_> -- Defined at /home/elliott/Code/fizzbuzz/fizzbuzz.hs:30:10-53
20:19:56 <oerjan> HackEgo is rather slow today
20:21:52 <Gregor> oerjan: I'm effin' around on Codu.
20:22:11 <Gregor> Right now I have fdupes -rL /var/chroots/*/{bin,lib,usr} running.
20:22:49 <Gregor> And HackEgo runs with nice -n10 :P
20:23:30 <rapido> elliott: magpie has a pretty interesting type engine - does this count as runtime types?
20:24:21 <elliott> magpie is intended to have some form of static checking to my knowledge
20:24:37 <rapido> elliott: or are you not the type of person to talk about types?
20:24:55 <elliott> what kind of person would that be
20:25:26 <rapido> elliott: a typical person of course!
20:25:28 <elliott> Gregor: I wonder why duplicate-checking tools compare hashes first; surely computing two hashes from disk is not really cheaper than comparing two blocks of disk?
20:25:37 <elliott> rapido: opposite, wouldn't it be
20:26:13 <Gregor> elliott: They don't depend on names, so they have to maintain a hashtable per file size to be able to look anything up.
20:26:23 <rapido> are there any esoteric languages that are esoterically typed?
20:26:29 <Gregor> elliott: Otherwise they'd have to do a file-by-file comparison for every pair of files of the same length.
20:26:46 <elliott> Gregor: Oh, right, memoisation :P
20:27:14 <rapido> no Hindley–Milner please!
20:28:07 <Deewiant> elliott: Also, computing the hashes can be cheaper, since reading file A fully and then file B fully is likely to be more sequential than reading file A and B fully in an interleaved fashion
20:28:19 <elliott> Deewiant: Right
20:28:21 <Phantom_Hoover> rapido, OK, just get rid of Milner.
20:28:47 <Gregor> elliott: In short, you're wrong in every way. :P
20:28:57 <elliott> Gregor: I'm also tired :P
20:28:58 <rapido> and we are left with Milner cheese - fine with me
20:29:12 <Gregor> Feh, that only freed 200M :(
20:29:55 <elliott> Gregor: Ha, to free space on Pyralspite I just clear away backups.
20:30:01 <elliott> (I haven't actually done that yet. TODO: That.)
20:30:59 <Gregor> elliott: The backups aren't on Codu, they're on my machine :P
20:31:09 <elliott> Gregor: I mean the world backups :P
20:31:15 <Gregor> Ah
20:33:57 <rapido> i'm thinking of a (esoteric!) language called TOTALLY STRONGLY TRANSPOSED that has the restriction that every (partial) (curried) (total) function must have a transpose and is strongly typed
20:34:57 <Phantom_Hoover> What about an esolang based on looms?
20:35:31 <rapido> looms? what is it?
20:36:47 <Ngevd> Things for weaving, but that's not important
20:38:15 <fizzie> Ngevd: Is that an Airplane! reference?
20:38:30 <Ngevd> Possibly
20:39:35 <rapido> as opposed to TOTALLY STRONGLY OPPOSED!
20:40:12 <Phantom_Hoover> Taking programming right back to its roots.
20:41:31 <oerjan> how do you define the transpose of a function?
20:42:03 <elliott> carefully
20:42:32 <rapido> what's the transpose of this 'function' Int->Double->String->Char ?
20:42:45 <rapido> String->Double->Int->Char
20:43:10 <oerjan> just reordering arguments?
20:43:55 <rapido> oerjan: yes, but it only works for total (curried) functions
20:44:13 <elliott> :t flip
20:44:14 <lambdabot> forall (f :: * -> *) a b. (Functor f) => f (a -> b) -> a -> f b
20:44:19 <elliott> CAAAAAALE
20:44:21 <elliott> :t Prelude.flip
20:44:22 <lambdabot> forall a b c. (a -> b -> c) -> b -> a -> c
20:45:13 <rapido> just flip a->b->c->d->e->f
20:45:19 <oerjan> a little tricky to define in haskell, because of having to detect when you've reached the _actual_ result...
20:45:36 <oerjan> you cannot detect non-functions
20:46:23 <rapido> hey, you can't express non-functions in TOTALLY STRONGLY TRANSPOSED
20:46:52 <oerjan> rapido: um that means you don't have -> Char at the end there
20:47:16 <Phantom_Hoover> rapido, you should transpose the function matrix, which is not a thing but should be.
20:47:36 <rapido> oerjan: hmmm, unless you define Char as a function i guess
20:47:48 <elliott> rapido: turtles
20:47:53 <oerjan> rapido: yes, but shouldn't you then add _its_ argument to the left...
20:47:59 <oerjan> when transposing
20:48:12 <oerjan> and the argument of its result, etc.
20:48:19 <rapido> oerjan: you got me! - i'm a fraud!
20:49:56 -!- derdon has joined.
20:50:19 <rapido> possible escape: define an 'end-function' as the identity function?
20:50:49 <rapido> the identity function is boring anyways
20:51:25 -!- elliott has quit (Quit: Leaving).
20:53:43 <rapido> transpose (a->b->c->Identity) -> (c->b->a->Identity)
20:53:53 <rapido> don't mind the syntax
20:55:37 <rapido> damn - non-functions - they bite - forget what i said
20:56:05 <rapido> back to the drawing board .... i
20:56:17 -!- Deewiant has quit (Ping timeout: 240 seconds).
20:57:32 <rapido> this transpose stuff is transposing my brains
20:59:03 <rapido> oerjan: 'um that means you don't have -> Char at the end there' - thanks for that! you nudged me in the 'right' direction
21:00:21 <oerjan> it may be the right direction, but is there anything left?
21:01:15 -!- quintopia has quit (K-Lined).
21:02:12 <rapido> sure! now I have to figure out if there can be a transpose function in untyped lambda calculus
21:02:34 <oerjan> what evil scheme did quintopia perform
21:02:37 <Phantom_Hoover> Wait, why did quintopia get K-lined?
21:02:57 <ais523> that's, umm, a good question
21:03:02 <oerjan> what was the quintessential crime
21:03:06 <ais523> I assume that if he's k-lined, he can't get back online to tell us
21:03:12 <coppro> yup
21:03:20 <coppro> that's usually what a k-line implies
21:03:21 <ais523> (I remember when SlashNET once went crazy and simultaneously K-lined everyone)
21:03:25 <coppro> OO
21:03:43 <ais523> it took me a while to tentatively try to log on again to figure out if the k-line had been removed; I assumed it was a mistake
21:03:44 <coppro> rapido: there can be an anything function in untyped lambda calculus
21:03:45 <ais523> and it turns out it was
21:03:50 <Phantom_Hoover> coppro, isn't it a server ban, not a network ban?
21:03:55 <Phantom_Hoover> A g-line is network, no?
21:03:59 <coppro> Phantom_Hoover: On Freenode they are isomorphic
21:04:08 <Phantom_Hoover> Ah.
21:04:39 <coppro> Freenode has a centralized server architecture, unlike networks like EFNet
21:06:59 <rapido> coppro: but can you formulate a generic transpose function in untyped lambda calculus
21:07:14 <Phantom_Hoover> If it's just an argument shuffle, then yes.
21:08:16 <oerjan> the problem here is that a function in untyped lambda calculus conceptually takes an infinite list of arguments toward the right
21:08:40 <rapido> Phantom_Hoover: how would such lambda function look like
21:08:42 <oerjan> and you'd want to turn it into a function that takes the same infinite list, reversed.
21:08:49 <oerjan> which is absurd.
21:08:54 -!- ais523 has quit (Remote host closed the connection).
21:09:19 <Phantom_Hoover> rapido, well, if it's just f a b c d → f c b a d, it's trivial.
21:09:20 <rapido> oerjan: so, no go?
21:09:47 <oerjan> rapido: i doubt it
21:10:05 <Phantom_Hoover> If it depends on the number of arguments, it's meaningless because, as oerjan said, lambda functions don't h
21:10:12 <Phantom_Hoover> */have/ a number of arguments.
21:10:44 <rapido> but what if you have a special 'stop/end' lambda?
21:11:05 <Phantom_Hoover> That... doesn't make an awful lot of sense, I'm afraid.
21:11:26 <rapido> Nil?
21:11:33 <rapido> Null?
21:11:51 <Phantom_Hoover> Nope.
21:12:10 <oerjan> that reminds me of what a cps version of lambda calculus would look like, which makes sort of sense
21:12:16 <rapido> Nope? that's a nice ending :)
21:12:28 <Phantom_Hoover> You can define lambda calculus with argument lists, but it's quite different to the normal kind.
21:13:34 <oerjan> incidentally i once concluded the d function in unlambda could be used as a stop/end marker for argument lists. i never worked it out completely though.
21:13:45 <rapido> gb
21:13:54 <Phantom_Hoover> d is the delay function, yes?
21:14:00 <oerjan> yes
21:14:35 <oerjan> it is the one function you can test for without performing the effects of applying it
21:14:41 <rapido> gb <- oops! keyboard mucking
21:14:47 -!- sllide has joined.
21:14:55 <Phantom_Hoover> oerjan, hmm, how?
21:15:20 <Phantom_Hoover> (I realise it's terribly obvious, but I am warm and sleepy.)
21:15:20 <rapido> oerjan: d sound mysterious already
21:15:31 -!- Ngevd has quit (Quit: goodnight).
21:15:56 <oerjan> Phantom_Hoover: basically, if you do `x`<cont>y, only x = d avoids calling the continuation
21:16:11 <Phantom_Hoover> Ahhh.
21:16:43 <Phantom_Hoover> I love how Madore added continuations just because they're hard to understand, FSVO 'hard'.
21:17:30 <oerjan> so if you do ``x`<cont>y`<cont>z you can return either y or z, without ever risking effects from applying x
21:18:31 * Phantom_Hoover remembers that he tried to write Lazy K-in-Lazy K but gave up inexplicably.
21:18:46 <rapido> wait - unlambda has SKI combinators only - or?....
21:19:07 <oerjan> rapido: no, unlambda has that + even weirder stuff
21:19:24 <rapido> weirder stuff! yes!
21:19:36 <rapido> *
21:19:51 <Phantom_Hoover> It's functional minimalism done wrong, really.
21:20:04 <rapido> $
21:20:17 <oerjan> Phantom_Hoover: _gloriously_ wrong
21:20:20 <rapido> ^
21:20:38 <Phantom_Hoover> oerjan, well, it depends on whether it was meant to be crazy or minimalisti.
21:20:42 <Phantom_Hoover> *minimalistic
21:20:46 <oerjan> d for delay, c for call-with-current-continuation, some relatively simple output functions, and input functions which require the use of continuations or at least cps style
21:20:49 <rapido> Phantom_Hoover: what is functional minimalism done right?
21:21:05 <Phantom_Hoover> rapido, Lazy K.
21:21:13 <Phantom_Hoover> SKI, literally nothing else.
21:21:20 <Gregor> Lambda calculus :P
21:21:26 <oerjan> lazy k has a bit too many alternative syntaxes
21:21:34 <Phantom_Hoover> (Well, it supports multiple syntaxes, admittedly, but they're all equivalent.)
21:23:51 <Phantom_Hoover> oerjan, true, but importantly using only `ski allows you to use the entire languag.
21:23:53 <Phantom_Hoover> *language
21:24:54 <rapido> diversion: anyone into K (or Q) from kxsystems - the only commercial esoteric language out there?
21:24:56 <oerjan> mhm
21:25:16 <Phantom_Hoover> rapido, wrong, cf. BANCStar.
21:26:06 <rapido> BANCStar? is it real!
21:26:08 <rapido> ?
21:26:49 -!- Deewiant has joined.
21:29:21 -!- rapido has quit (Quit: rapido).
21:51:40 -!- Patashu has joined.
21:54:42 -!- Sgeo|web has joined.
21:55:02 <Sgeo|web> I'm turning into an esoteric
21:55:41 <oerjan> you accidentally a ... lemur
21:56:52 <Phantom_Hoover> So upon trying to complete my UCAS form, arguably the most important in my life to date, my parents have just yelled at me and flounced off.
21:56:55 <Phantom_Hoover> Pro parenting.
22:10:34 * Phantom_Hoover → sleep
22:10:36 -!- Phantom_Hoover has quit (Quit: Leaving).
22:15:13 -!- oerjan has quit (Quit: Good night).
22:22:24 * Gregor wonders what a UCAS form is.
22:26:46 -!- sllide has quit (Read error: Connection reset by peer).
22:33:54 -!- nooga has quit (Ping timeout: 258 seconds).
22:38:54 -!- CakeProphet has joined.
22:38:54 -!- CakeProphet has quit (Changing host).
22:38:54 -!- CakeProphet has joined.
23:00:58 -!- copumpkin has quit (Quit: Computer has gone to sleep.).
23:04:15 -!- Patashu has quit (Quit: MSN: Patashu@hotmail.com , Gmail: Patashu0@gmail.com , AIM: Patashu0 , YIM: patashu2 .).
23:15:42 -!- Patashu has joined.
23:17:07 -!- augur has quit (Remote host closed the connection).
23:22:40 -!- copumpkin has joined.
23:49:20 -!- augur has joined.
23:53:46 -!- derdon has quit (Remote host closed the connection).
←2011-10-11 2011-10-12 2011-10-13→ ↑2011 ↑all