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