00:03:01 <quintopia> missed? as in you couldn't get micro-gregor to jump that high
00:08:12 <elliott> quintopia, websplat all day every day
00:08:55 <quintopia> elliott: are you working on a websplatting AI?
00:10:33 <quintopia> awesome. it would be the best thing ever made since...
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: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: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: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: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: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: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:12 <pikhq_> And yet... They do minor releases...
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:40 <Patashu> so is the fbi stupid or acting stupid?
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: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: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:21 <pikhq_> They dump source publically on releases.
02:59:32 <Patashu> could I make a truecrypt fork with the source?
02:59:39 <elliott> not distributing it at least
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:10 <elliott> can the fbi break into truecrypt
03:00:16 <elliott> if someone put a backdoor in truecrypt
03:00:20 <elliott> how the fuck would you know>
03:00:31 <Patashu> or is this some kind of magical backdoor that doesn't appear in the source code
03:00:47 <elliott> you have read the source to truecrypt right?
03:00:54 <elliott> and are an expert in cryptography?
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: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: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: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: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: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: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:12:26 <elliott> I wonder if register_globals and magic_quotes have ever worked together to prevent a security hole
03:12:38 <elliott> if ($token == "'") { ... }
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: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: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:36:51 <elliott> Hmm, I should probably start writing that compiler.
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: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:46 <elliott> shachaf: No, | (_| | | | | (__ will not support dependent types.
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: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:44 <CakeProphet> not left and right subtrees are full but the whole tree is not complete.
03:47:54 <elliott> shachaf: But don't worry; 𝕢𝕙𝕔 loves us all, even if we aren't masters of obscurity.
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: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: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:50:08 <shachaf> I think it's something about the host.
03:50:09 <elliott> At least I very much doubt it.
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:59 <pikhq_> elliott: I do not know, insofar as I can tell there is not any *single* font with a satisfactory coverage.
03:51:02 <elliott> (I'm using XChat so Unicode works perfectly.)
03:51:05 <elliott> pikhq_: OK, gimme a short list :P
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:18 <elliott> I suspect termcap issues or something
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: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: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.
04:00:55 <HackEgo> /home/hackbot/hackbot.hg/multibot_cmds/lib/limits: line 5: exec: exec: not found
04:00:59 <elliott> crw-rw-rw- 1 root root 1, 3 2011-10-11 18:32 /dev/null
04:01:51 <elliott> shachaf: but seriously, primitive isn't a reserved word, is it?
04:03:31 <lambdabot> *Exception: Reserved word used as identifier
04:03:42 <lambdabot> <no location info>: parse error on input `let'
04:05:08 <elliott> shachaf: That would be more impressive if I hadn't repeatedly fucked up.
04:06:10 <elliott> -- "as","qualified","hiding"
04:06:16 <elliott> ARE YOU TELLING ME THOSE AREN'T RESERVED NAME >_<
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:49 <shachaf> > let qualified = 5 in qualified
04:08:05 <elliott> > let hiding = 9 in hiding
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:33 <elliott> OK, better question - why does forall get that treatment when RankNTypes is on?
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:10:27 <shachaf> > let forеign = id in forеign oil
04:10:52 <shachaf> elliott: Are you coming to BostonHaskell in ~2 weeks?
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: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: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: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:15 <shachaf> elliott: Next you'll tell me you won't implement hierarchical modules.
04:23:25 <elliott> `fmap` (reserved "module" >> pModName)
04:23:25 <elliott> `ap` (reserved "where" >> pImports)
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: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: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: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: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:45:20 <monqy> it is hard to alugh when gasping for breath
04:52:37 <elliott> wow, original haskell had where-/expressions/ and no let
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: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:57 <CakeProphet> I think I've gotten into the habit of saying the opposite of what I mean so much
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: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: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:15:19 <elliott> kill python, kill guido van rossum,
05:15:44 <CakeProphet> I will train my ball python to kill Dutchmen.
05:16:01 <monqy> bad people have feelings too
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: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: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:18:26 <monqy> i have to use python for scvhool stuff this quarter...it burns
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: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:42 <monqy> CakeProphet: hahaha
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: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:24 <elliott> ah, so if you knew bancstar it would be ok?
05:21:41 <monqy> only some 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:17 <monqy> CakeProphet: people have bad taste in languageS: a known fact
05:22:26 <monqy> people use bancstar. people use python.
05:22:29 <monqy> this is why it is a known fact.
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: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: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: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: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:46 <zzo38> Probably it depends what things, I suppose.
05:25:49 <CakeProphet> but if you look at actual modules it varies considerably.
05:26:01 <Sgeo|web> elliott: not actually covering my ears
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: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: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:57 <monqy> oops not enough space
05:28:13 <monqy> p.s. why is this happening
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:33 <monqy> p.p.p.s. not p.s.s.
05:29:08 <CakeProphet> elliott: so defending Python by using perl is not very convincing to you, I guess.
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:04 <pikhq_> zzo38: Well, yeah, SQL is the canonical example of a DSL.
05:31:24 <monqy> oh wait i just remembered
05:31:31 <zzo38> I agree that PHP is full of stupid stuff.
05:33:07 <zzo38> The SQL that I used happened to be SQLite.
05:35:54 <monqy> is this some kind of crude joke
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:44 <CakeProphet> I was going to like, change the topic a little bit.
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: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: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: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: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:55 <pikhq_> I'm inclined to say "yes-ish".
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: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:58 <monqy> CakeProphet: have you considered you may be a bad person
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: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: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: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: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:31 <elliott> Sgeo|web: It's called memory-mapping.
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:12 <CakeProphet> `perl -e 'my %t=(); my $x = \%t; %t = (x=>2, y=>3); print %$x'
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: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: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: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:57:44 <elliott> Sgeo|web: memory-mapped IO does _not touch RAM_.
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: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: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: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?
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:17 <pikhq_> CPU designs are more complicated than you think.
06:01:36 <CakeProphet> `run perl -e '%t=(y=>2); $x = \$t{x}; $$x = 4; print %t;'
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:54 <elliott> Sgeo|web: switch/case compiles to a jump table
06:01:58 <elliott> there's no "nearness" to it
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: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:04:07 <elliott> this is also how you do closures
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:06:01 <pikhq_> You know how it presents an API of a single floating point stack, with entries mapped to registers?
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: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: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: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: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: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:50 <elliott> CakeProphet: that's in cpressey's louie
06:17:06 <monqy> CakeProphet: ill murder you with a rusty stick
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:49 <elliott> CakeProphet: http://catseye.tc/projects/zowie/
06:17:53 <elliott> the louie one is an additional thing
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:31 <elliott> this is the hottest language
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: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: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:24:31 * elliott resists the urge to support bad market and ethical practices
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:24 <CakeProphet> because arrays are not quite the same as lists.
06:25:37 <Ngevd> Hang on, what language is this?
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: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:27:10 <Ngevd> Can we add quit messages to the quotes?
06:28:02 <CakeProphet> ($grams, $fs) = \($data{$dset=$1}, $freqs{$dset})
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:49 <monqy> it depnds on the order of evaluation of the things in the thing aghahgahghaghaghahgahghaghaghaghh
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:38 <elliott> Sgeo|web: most things are tc
06:31:46 <CakeProphet> elliott: or, rather, it requires some pondering.
06:32:07 <CakeProphet> actually I don't even need $dset I can just put $1 there.
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: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:36:46 <elliott> ?undo do x <- f a; g b >>= h x
06:36:48 <elliott> ?. pl undo do x <- f a; g b >>= h x
06:37:45 <Sgeo|web> Oh, I see why it's called undo
06:37:47 -!- nooga has joined.
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: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:30 <Sgeo|web> is it bad that i started versioning for my product at 5
06:40:16 <CakeProphet> `run touch test && perl -e 'open (my $f = "test"); close; print $f "test"'
06:41:08 <Sgeo|web> `run ls | grep nosuchfilenananeenerneener
06:41:20 <CakeProphet> `run perl -e 'open ($_ = "test"); close; print $_ "test"'
06:41:30 <HackEgo> cat: touch: No such file or directory
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: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:12 <CakeProphet> okay so I have no idea what it means by currently selected filehandle.
06:42:32 <HackEgo> bin \ canary \ karma \ lib \ m \ paste \ quotes \ share \ wisdom
06:42:35 <Sgeo|web> `run echo "No output." > "No output."
06:42:48 <HackEgo> bin \ canary \ karma \ lib \ m \ paste \ quotes \ share \ wisdom
06:42:53 <HackEgo> rm: cannot remove `m': No such file or directory
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:44:47 <CakeProphet> ah okay so the currently selected filehandle is selected via the select function.
06:47:30 <CakeProphet> so select $f would be equivalent to something like sys.stdout, sys.stdin, sys.stderr = f, f, f
06:50:57 <Ngevd> Now I will have shower
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: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: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: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: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: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:22 <elliott> ?hoogle (a -> m b) -> m c -> a -> m c
06:59:28 <elliott> ?pl f >=> const (return g)
06:59:34 <elliott> ?hoogle (a -> m b) -> c -> a -> m c
06:59:45 <lambdabot> forall a (f :: * -> *) b (f1 :: * -> *). (Functor f, Functor f1) => f1 a -> f1 (f b -> f a)
07:00:09 <lambdabot> forall b (f :: * -> *) b1 a. (Functor f) => (a -> b) -> a -> f b1 -> f b
07:00:25 <elliott> { peek = fromIntegral . ord <$> getChar
07:00:25 <elliott> , poke = putChar . chr . fromIntegral >=> const (return ttyReg)
07:01:15 <monqy> i'll just / do my stuff tomorrow
07:01:22 -!- monqy has quit (Quit: hello).
07:02:44 -!- copumpkin has quit (Ping timeout: 248 seconds).
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:36 -!- copumpkin has joined.
07:04:42 <Sgeo|web> elliott: you're saying that the spec is wrong?
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:18 <elliott> Sgeo|web: dude, interpreting charitably is the only reason any funge ninety-eight interpreters exist
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:02 <elliott> and if not that, large swathes of it are useless
07:06:18 -!- Jafet has quit (Quit: Leaving.).
07:06:52 <CakeProphet> Sgeo|web: where is the arbitrary Python injection bug?
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: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: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: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:22 <elliott> ?pl \x -> do f <- m; return (f x)
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:16:51 <elliott> ?hoogle (a -> b) -> a -> f b
07:16:51 <lambdabot> Prelude ($!) :: (a -> b) -> a -> b
07:16:52 <lambdabot> Data.Function ($) :: (a -> b) -> a -> b
07:17:03 <elliott> ?pl \n -> (`fmap` return n)
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: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:47 <Sgeo|web> Were your X programs still running?
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:25:08 <CakeProphet> also because people probably use them I'm sure.
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: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: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: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: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:40 <pikhq_> Sgeo|web: The "page" is a CPU-dependent size.
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: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: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: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:32:39 <Sgeo|web> ei does sigterm and sigkill apparently
07:32:53 <Sgeo|web> r is something to do with XLATE, I have no idea what that is
07:33:44 <elliott> Sgeo|web: steals keyboard back from x
07:33:57 <elliott> does cleanup, syncs disks etc.
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: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:14 <Sgeo|web> I mean, out of boredom? If I don't care about stuff going to disk
07:37:27 <Sgeo|web> elliott: I thought it remounted in readonly
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:50 <CakeProphet> oh hey I bet that's what happened when my filesystem went readonly
07:41:00 * CakeProphet stands back and takes a moment to absorb the elegant beauty of his refactored code.
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:50:24 <elliott> CakeProphet: why wouldn't i be able to
07:50:46 <elliott> http://reddit.com/r/hurts_my_eyes
07:55:13 <CakeProphet> `run perl -e 'my %t=(a=>2, b=>3); my ($x, $y) = (
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: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: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 \ };
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:06:41 <fizzie> I didn't know you could put a \ in front of a list like that.
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: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: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:43 <fizzie> "map {$_//={}} ..." looks so pretty.
08:14:55 <fizzie> I was assuming sometimes there might be some existing hashes already.
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:30 <elliott> fizzie: Relatedly, I don't suppose you've ever tried storing one of them reverse-context trees as a directory tree.
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: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: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: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: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: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 <fungot> Selected style: fungot (What I've said myself)
09:05:57 <elliott> oerjan: It's a diabolical incestuous slurry. HTH
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 <fungot> http://git.zem.fi/fungot/blob/HEAD:/fungot.b98
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: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: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: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: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:01 <fizzie> Grouped by the order, and sorted.
09:16:21 <elliott> Is that the same format as the googlebooks data?
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: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:16 <elliott> fizzie: Look up context in typical B-tree-kinda structure, find next word, repeat.
09:28:33 <elliott> I'm aiming for one-second responses; maybe that's a bit optimistic with all the seeking.
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: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: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: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: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:30 <elliott> Which hopefully shouldn't cause too much a difference.
09:48:40 <elliott> CakeProphet: http://en.wikipedia.org/wiki/Modulo
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:59 * oerjan swats CakeProphet -----###
09:48:59 <elliott> It makes perfect sense given the original use of mod in modular arithmetic.
09:49:13 <elliott> You're just a stupid programmer with stupid notation who thinks that everything's a binary operator.
09:49:33 -!- elliott has left ("back to the adults").
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: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:52:03 <oerjan> CakeProphet: which word has been divided?
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: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: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:56 <fizzie> What did you want, (group . sort) or something?
10:09:17 <fizzie> The good old ... | sort | uniq | ... pipeline formation.
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: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: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:30 <fizzie> `run echo -e 'foo\nbar\nfoo\nbar' | sort | uniq
10:13:36 <CakeProphet> I guess group . sort is the set of equivalence classes.
10:16:33 <fizzie> For the relation (==), and speaking of multisets, maybe.
10:18:10 <oerjan> `run sleep 10; echo 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:22 <CakeProphet> don't you have to use some kind of equivalence relation to determine what makes elements "distinct"?
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:22:01 <CakeProphet> sets can't contain "duplicate" elements. This has to be defined by some kind of equivalence relation right?
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: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: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: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: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: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:30 <elliott> CakeProphet: http://en.wikipedia.org/wiki/Dedekind_cut
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: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:50 <elliott> CakeProphet: a real number is defined by those two partitions
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:33:18 <CakeProphet> so there's only.... one real number between each rational?
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:13 <oerjan> CakeProphet: if you divide _all_ the rationals into two unbounded intervals then there is exactly one real in the "gap".
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: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: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: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: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: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: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:58 <elliott> shachaf: Gotta give props to Mr. Archimedes.
10:47:00 <oerjan> fizzie: AS CLOSE AS THIS SWATTER? -----###
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: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: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:44 <elliott> @djinn Maybe shachafscoolness
10:48:55 <elliott> oerjan: "Fuck you" --Archimedes
10:49:04 <shachaf> @djinn Maybe elliottspoint
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:46 <shachaf> elliott: You mean that your '"' characters are genuine, right?
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: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: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:23 <shachaf> The uncomputable numbers are where it's at.
10:54:28 <CakeProphet> no Cauchy sequences definitely make less sense.
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:26 <oerjan> hagb4rd: note that there might be some rounding errors in the range
10:56:29 <elliott> three point one four i forget the next fucking digit
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:45 <shachaf> I thought that was the Fibonacci numbers.
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:46 <shachaf> Constructivism is where it's at.
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:11 * oerjan could not help himself
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: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: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: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: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:05:08 <CakeProphet> I think math tries too hard to prove itself.
11:05:17 <CakeProphet> it just be itself and accept what other people think about it.
11:07:26 <CakeProphet> elliott: wait don't programs compute the digits of pi to infinity
11:07:56 * oerjan spikes elliott's drink with cyanide
11:08:19 <oerjan> CakeProphet: pi is a computable number, yes.
11:08:38 <CakeProphet> oh finite terminating algorithm nevermind.....
11:08:44 <oerjan> > last (show pi :: CReal)
11:08:44 <lambdabot> Couldn't match expected type `Data.Number.CReal.CReal'
11:08:54 <oerjan> > last (show (pi :: CReal))
11:09:33 <hagb4rd> so computable is not depending on a finite number of steps
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:07 <shachaf> THAT'S THE SAME THING AS THE CODE/DATA DISTINCTION RIGHT?
11:10:42 -!- nooga has joined.
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: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:12:00 <elliott> shachaf: I wrote like thirty lines of parser.
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: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:45 <CakeProphet> 44lppoksepok3poj2po2jp3ooj3rpo4pop4po4po4po4po44po4po4erpoelerw
11:12:49 <elliott> 9 is also a real number, and computable.
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: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: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 <lambdabot> OlegFacts says: Oleg's first datatype in haskell started like this: data ChuckNorris ...
11:14:59 <lambdabot> OlegFacts says: GHC doesn't have a type checker. It emails your types to Oleg for checking.
11:15:42 <hagb4rd> can i calc differentials with lambda expressions?
11:16:31 <CakeProphet> the only way to have an infinite program would be to write an algorithm to generate it
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:21 <fizzie> Then it's just a couple of offsets.
11:19:24 <CakeProphet> computing is so constrained and countable. :(
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: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:23:47 <oerjan> @unlambda ````````.t.r.y. .t.h.i.si
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:26:29 <oerjan> CakeProphet: the standard library ones may or may not be lazy, though
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:51 <shachaf> Mu [] is the only true tree.
11:27:56 <CakeProphet> I feel this tree metaphor is collapsing...
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: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: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 <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: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: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: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:22 <elliott> > breakEnd (=='a') "qqaqq"
11:36:49 <elliott> oerjan: Hey, how do I omit the a
11:37:10 <shachaf> > second (drop 1) . span (/='a') $ "qqaqq"
11:37:13 -!- derdon has quit (Remote host closed the connection).
11:37:28 -!- oerjan has quit (Quit: !enses sekam oot ti).
11:37:41 <elliott> How do I get the 'a' in the first list
11:38:19 <shachaf> Maybe Data.List.Split has something?
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: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:40:08 <shachaf> Who really cares, it all tends to work out somehow.
11:40:20 <elliott> lines :: ByteString -> [ByteString]
11:40:21 <elliott> | otherwise = case search ps of
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:50 <shachaf> Wait, that makes code faster?
11:41:19 <shachaf> Time to rewrite all my code.
11:41:50 <shachaf> That was *way* faster. Wow.
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: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: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: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: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: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: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: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: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: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:05:13 <elliott> fizzie: I'm not sure the relevance this has to MY PRECIOUS INTERN TABLE
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: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: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: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: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:19:07 <elliott> Eight hundred times one hundred megs.
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: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: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: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: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: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: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:56 <elliott> Maybe I should just write a quick Perl thing.
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: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: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: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: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: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: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: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:49 <elliott> Right, OK, I'll write a year-smuher.
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: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: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: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:47 <fizzie> "! "" yelled someone in" 104
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: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: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: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:39 <elliott> http://www.manythings.org/wordfrequency/
13:14:00 <elliott> http://code.google.com/p/google-ngram-stripper/source/list
13:14:14 <elliott> fizzie: Oh, dear god: http://code.google.com/p/google-ngram-stripper/source/browse/trunk/google-ngram-stripper.py
13:15:45 <elliott> def combinecapitalsandapplythreshold():
13:15:50 <elliott> filteryearandalphabetise()
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: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: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: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: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: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: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: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: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:18 <elliott_> Deewiant: and impossible for USians.
16:30:53 <Deewiant> elliott_: What kind of uploads do Brits/USians have, then
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: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:20 <elliott_> There's a liiittle bit of overhead though isn't there? :p
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: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: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: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: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: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: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: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:17:03 <Gregor> But that, plus intarwebs = "No, x86_64 UML does not have x86_32 emulation."
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:31:42 <Gregor> And I mean, like, "Make Linux my bitch" crash
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: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 <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 <fungot> CakeProphet: if it's ( syntactically) long and short, whose semantics, though. more like doing what is in the same
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: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: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: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: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 <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: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: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: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: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:09:11 <elliott> rapido has been here many times before :P
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: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:42 <oerjan> have you passed on since then?
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 <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: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: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:47 <Gregor> elliott: In short, you're wrong in every way. :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: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:36:47 <Ngevd> Things for weaving, but that's not important
20:38:15 <fizzie> Ngevd: Is that an Airplane! reference?
20:39:35 <rapido> as opposed to TOTALLY STRONGLY OPPOSED!
20:41:31 <oerjan> how do you define the transpose of a function?
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:14 <lambdabot> forall (f :: * -> *) a b. (Functor f) => f (a -> b) -> a -> f b
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:53 <oerjan> rapido: yes, but shouldn't you then add _its_ argument to the left...
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: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: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: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: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:59 <coppro> Phantom_Hoover: On Freenode they are isomorphic
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: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: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: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: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: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: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: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: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:20:17 <oerjan> Phantom_Hoover: _gloriously_ wrong
21:20:38 <Phantom_Hoover> oerjan, well, it depends on whether it was meant to be crazy or minimalisti.
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: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:24:54 <rapido> diversion: anyone into K (or Q) from kxsystems - the only commercial esoteric language out there?
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: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.
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).