00:00:50 CakeProphet: it is my fundamental human right to believe in joke detectors, just as it is your right not to have a working joke detector detector 00:24:32 Does the prime vertical circle have anything to do with solar noon? 00:27:12 I found this: http://kirstenmichel.com/ss2.html 00:48:49 Japanese drinking culture frightens me. 00:48:55 Why? 00:48:56 飲み放題. That means "all you can drink". 00:49:00 This is a thing. 00:53:16 you know, american "all you can eat" isn't _that_ much less frightening :P 00:53:43 (ok, so "all you can eat" exists in norway too) 00:54:06 Except "all you can eat" is not the center of an evening's activities. 00:54:15 hm 00:54:20 food -> 00:57:31 -!- monqy has quit (Ping timeout: 248 seconds). 01:08:21 -!- oerjan has quit (Quit: Good night). 01:13:23 -!- pikhq has joined. 01:13:38 -!- pikhq_ has quit (Ping timeout: 255 seconds). 01:16:05 -!- Timwi has joined. 01:16:43 -!- Timwi has quit (Client Quit). 01:19:37 -!- Patashu has quit (Quit: MSN: Patashu@hotmail.com , Gmail: Patashu0@gmail.com , AIM: Patashu0 , YIM: patashu2 , Skype: patashu0 .). 01:20:29 -!- Timwi has joined. 01:21:25 I finally have X-Chat on Mac 01:42:53 "* Channel #esoteric created on Sun Nov 26 01:42:50 2006" // we're nearing the five-year anniversary of a rather-arbitrary date that Freenode thinks #esoteric was created on for some reason. 01:44:13 -!- pikhq_ has joined. 01:44:46 -!- pikhq has quit (Ping timeout: 260 seconds). 01:45:30 -!- Timwi has quit. 01:48:43 -!- CakeProphet has quit (Ping timeout: 248 seconds). 01:53:27 -!- TeruFSX has joined. 02:05:34 -!- Jafet has joined. 02:14:20 -!- CakeProphet has joined. 02:14:20 -!- CakeProphet has quit (Changing host). 02:14:20 -!- CakeProphet has joined. 02:17:05 -!- MDude has changed nick to MSleep. 02:27:53 > letters 02:27:54 Not in scope: `letters' 02:31:11 Is that not the date this channel was created on? 02:32:07 It was registered before then, though. 02:32:51 > let letters = ['a'..'z']; t = zip letters ((drop 13 letters) ++ (take 13 letters)); rot13 c = fromMaybe c (lookup c t) in map rot13 "Grego is actually Roger G." 02:32:52 "Gertb vf npghnyyl Rbtre G." 02:32:59 oh... 02:33:00 right 02:33:05 not capital letters. 02:33:34 :t lookupWithDefault 02:33:35 Not in scope: `lookupWithDefault' 02:33:39 @hoogle lookup 02:33:40 Prelude lookup :: Eq a => a -> [(a, b)] -> Maybe b 02:33:40 Data.HashTable lookup :: HashTable key val -> key -> IO (Maybe val) 02:33:40 Data.IntMap lookup :: Key -> IntMap a -> Maybe a 02:33:57 @hoogle a -> b -> [(a,b)] -> Maybe b 02:33:58 Data.Graph.Inductive.Query.SP spLength :: (Graph gr, Real b) => Node -> Node -> gr a b -> b 02:33:58 Data.Array.MArray writeArray :: (MArray a e m, Ix i) => a i e -> i -> e -> m () 02:33:58 Data.Graph.Inductive.Query.MaxFlow maxFlow :: (DynGraph gr, Num b, Ord b) => gr a b -> Node -> Node -> b 02:34:01 @hoogle a -> b -> [(a,b)] -> b 02:34:01 Data.Graph.Inductive.Query.SP spLength :: (Graph gr, Real b) => Node -> Node -> gr a b -> b 02:34:02 Data.Graph.Inductive.Query.BFS lesp :: Graph gr => Node -> Node -> gr a b -> LPath b 02:34:02 Data.Graph.Inductive.Query.BFS esp :: Graph gr => Node -> Node -> gr a b -> Path 02:34:06 er, no. 02:34:14 @hoogle b -> a -> [(a,b)] -> b 02:34:15 Data.Graph.Inductive.Query.SP spLength :: (Graph gr, Real b) => Node -> Node -> gr a b -> b 02:34:15 Data.Graph.Inductive.Query.BFS lesp :: Graph gr => Node -> Node -> gr a b -> LPath b 02:34:15 Data.Graph.Inductive.Query.BFS esp :: Graph gr => Node -> Node -> gr a b -> Path 02:34:24 there's no lookup with default?? 02:34:48 @hoogle b -> a -> Map a b -> b 02:34:49 lambdabot hates me. 02:34:49 Data.Map findWithDefault :: Ord k => a -> k -> Map k a -> a 02:34:49 Data.Graph.Inductive.Query.SP spLength :: (Graph gr, Real b) => Node -> Node -> gr a b -> b 02:34:49 Data.Graph.Inductive.Query.BFS lesp :: Graph gr => Node -> Node -> gr a b -> LPath b 02:34:54 ah okay. 02:35:31 > let lower = ['a'..'z'];upper = ['A'..'Z'];f x = zip x ((drop 13 x) ++ (take 13 x));t = f lower ++ f upper;rot13 c = fromMaybe c (lookup c t) in map rot13 "Lawlz." 02:35:32 "Ynjym." 02:41:01 > let lower = ['a'..'z']; upper = ['A'..'Z']; f x = zip x ((drop 13 x) ++ (take 13 x)); t = M.fromList (f lower ++ f upper); rot13 c = M.findWithDefault c c t in map rot13 "Gregor is actually Roger G." 02:41:03 "Tertbe vf npghnyyl Ebtre T." 02:42:38 so at compile time does GHC compute the result of all constants? 02:43:01 so that t is just a predefined Map at runtime? 02:44:20 (repeat 1) is a constant 02:47:20 ah 02:47:46 I think in some cases you could analyze that the function terminates. 02:48:44 but if you immediately exclude all recursion then you've eliminated a large amount of constant optimization. 02:49:13 ++ on finite constant lists wouldn't allow optimization. 02:53:19 -!- Jafet has quit (Quit: Leaving.). 02:59:37 perhaps if strictness analysis determines that a constant expression can be strictly evaluated 02:59:50 then it would be safe to go ahead and precompute the result. 03:03:28 -!- copumpkin has quit (Ping timeout: 256 seconds). 03:03:50 -!- copumpkin has joined. 03:27:48 -!- Nisstyre has changed nick to \EXPERT_PROGRAMM. 03:27:58 -!- \EXPERT_PROGRAMM has changed nick to Nisstyre. 03:29:20 -!- CakeProphet has quit (Quit: Lost terminal). 03:57:11 -!- augur has changed nick to schopenhauer. 03:57:24 -!- schopenhauer has changed nick to augur. 04:04:25 -!- CakeProphet has joined. 04:04:26 -!- CakeProphet has quit (Changing host). 04:04:26 -!- CakeProphet has joined. 04:06:04 HI GAIZ 04:16:42 hi cakeprophet; all knows the problem: you need to format an os partition but want to be sure not to loose any data still hanging around somewhere in tons of garbage. can anyone recommend a tool to (pre)analyse the structure of the contente (especially user documents, pics, etc) 04:17:09 ..of the partition 04:32:17 analyze in what way? 04:32:52 I know Ubuntu has something called "disk usage analyzer" the creates a chart of disk usage per directory/file. 04:32:55 but they may not be useful for what you 04:32:59 're wanting to do. 04:33:25 hagb4rd: ^^^ 04:34:16 otherwise, if you're searching for important shit. find is a good command line tool for doing such. 04:34:19 yes exactly thank you 04:34:56 https://help.ubuntu.com/community/Baobab 04:34:58 i will give it a try 04:35:09 http://www.youtube.com/watch?v=8gpQ6nfMi80 This is meant to be funny. It is both funny and reminds me of the pain that has been inflicted upon my soul. 05:03:00 If you have an object X in a category then what is it called when no morphisms exist from X to any other object? And what is it called if the only morphism from X to X is the identity morphism? What is it called if both conditions apply? 05:13:08 -!- zzo38 has quit (Quit: zzo38). 05:32:15 -!- hagb4rd has quit (Quit: Nettalk6 - www.ntalk.de). 05:45:51 it seems to me that C++11 fixes a lot of problems with C++ 05:45:56 by making the language really terrible and ugly. 05:59:23 -!- ive has quit (Ping timeout: 248 seconds). 06:08:01 -!- hagb4rd has joined. 06:30:40 fizzie: do you know if the \p{...} regex properties require the utf8 flag to be? 06:31:26 +on 06:31:40 apparently when I decode ASCII to UTF-8 the UTF-8 flag stays off for backwards compatability. If \p{...} requires utf8 on then that may be why my code isn't working. 06:31:56 oh wait nevermind. 06:31:59 No, they should just treat it as UTF-8 regardless of the flag. 06:32:05 Of course that doesn't matter for ASCII. 06:32:15 hmmmm 06:32:55 "-- if the "locale" or "encoding" pragmas are not used and the string is not "utf8", then "[[:xxxxx:]]" (and "\w", etc.) will not match characters 0x80-0xff; whereas "\p{IsXxxxx}" will force the string to "utf8" and can match these characters (as Unicode)." 06:33:06 But if you convert from ASCII, there will be no bytes 0x80-0xff in there. 06:33:54 I have no clue why the /usr/share/dict datasets are empty after I run my script. 06:34:26 I definitely have to implement Sclipting... 06:34:57 fizzie: maybe file is giving me the incorrect encodings for them? 06:35:03 or...... I have no idea. 06:35:48 I don't: know. Incorrect encodings doesn't sound like something that'd lead to empty outputs, though. 06:36:12 fizzie: the reason the output is empty is because my regex is always succeeding on these datasets 06:36:22 Which regex is that? 06:36:29 /[^\p{Alphabetic}\p{Letter}\p{Dash_Punctuation}\p{Connector_Punctuation}']/; 06:36:36 it's supposed to skip anything that passes this. 06:38:48 I read the files in as :raw, then use decode($encoding, $input) 06:38:53 where $encoding is a command line option. 06:38:58 that defaults to utf8 06:39:26 Have you looked at the files? I don't really know about the other languages, but my /usr/share/dict/finnish has "$\" at the end of 88% of the words. (Though there's still a couple of words that should not match that.) 06:39:45 why $\ 06:41:58 I don't really know. It may be an affix marker thing; though the ispell man page doesn't really suggest so. I don't even know which program those files are for. 06:42:31 well manx for example doesn't have those 06:42:34 but still shows up as empty 06:43:07 -!- Ngevd has joined. 06:43:28 Hello! 06:43:32 hey 06:43:44 I like how a minor change to a page can be over 32000 characters 06:45:00 CakeProphet: Well, I don't know. Are you doing something else differently for the dict stuff? Could you be leaving the newline in there or something? I'm just grasping at straws here, really. Hexdump the strings that match that regex and check what's wrong with them? I'unno. 06:45:58 I can't actually read hexdumps very well. 06:46:05 maybe I should figure them out 06:46:09 or maybe you just use weird formats 06:49:16 Wide character in print at ./construct_grams.pl line 22, <$f> line 5828977. 06:49:21 also I got a lot of these in the french dataset 06:50:11 It certainly shouldn't be related to the lack of the utf8 flag, though: 06:50:13 $ perl -e '$x = "foobar"; print "is not utf8\n" unless utf8::is_utf8($x); print "no match\n" unless $x =~ /[^\p{Alphabetic}\p{Letter}\p{Dash_Punctuation}\p{Connector_Punctuation}'\'']/;' 06:50:13 is not utf8 06:50:13 no match 06:52:31 as far as the $\ I guess I'll just make a copy of the files and strip those characters out. 06:55:06 uh what's some good hexdump options 06:55:27 "hexdump -C" and "od -tx1z" are reasonable. 06:55:49 But you can just print join(" ", map { sprintf "%02x", $_ } unpack("C*", $string)), "\n" from the Perl script. 06:56:14 I think hexdump is actually simpler in this case. 06:57:41 Up to you; it's just that it'll all get smooshed into one dump. Anyway, it sounds very weird that the regex just wouldn't work; you are certain that it's because that thing is matching all the words? 06:57:56 yep I put a print after it and nothing happens 06:58:17 Did you put a print in front of it to see if you're getting there either?-) 06:58:25 yes I did that before. 06:58:52 I also tested the eng-1M set and many words pass. 06:59:08 haven't tested the other google sets. I assume all the utf-8 ones are fine. 07:01:33 fizzie: I'll sprunge an output file soon. 07:01:47 and code would probably help. 07:02:40 http://sprunge.us/DHBZ 07:03:05 ....I guess I could have used a smaller dataset. 07:04:34 -!- Ngevd has quit (Ping timeout: 258 seconds). 07:04:36 I also think you might get some shell-related munging to your string if you dump them like that. 07:04:50 -!- MDude has joined. 07:05:02 fizzie: with echo? 07:05:11 -!- MSleep has quit (Read error: Connection reset by peer). 07:05:53 Well, possibly not. At least it'll barf for any words containing a '. 07:06:29 ah... yes. 07:06:56 it's taking much longer than usual 07:06:59 perhaps the hexdumps? 07:07:21 ah yes the perl processes are stuck on pipe_wait 07:07:34 If it is in fact refusing each word, that's two new processes for each word. 07:07:37 No, three. 07:07:39 No, two. 07:07:47 lol 07:07:56 A shell and the hexdump; the echo is probably a builtin. 07:08:12 yes it is 07:08:25 * CakeProphet is master of efficient perl coding. 07:09:36 Well, I ran it locally with | head. 07:09:45 On 'finnish'. 07:09:47 00000000 61 2d 6b 6c 69 6e 69 6b 6b 61 0a 0a |a-klinikka..| 07:10:08 I'd like to point out what I said 25 minutes ago: " CakeProphet: Well, I don't know. Are you doing something else differently for the dict stuff? Could you be leaving the newline in there or something? --" 07:10:11 ...I'll do it your way. 07:10:25 The first 0a is the newline you have in your string, and that's what matching the regex. 07:10:32 (The second 0a is added by echo.) 07:10:44 ...................... 07:10:45 of course. 07:10:58 It doesn't have a \t in it, so it gets the full line. 07:11:05 yeah I don't have that problem with googledata because -- yes 07:11:16 fffwoiejriowehriuhweiufhw4ituhwiuethwef 07:11:46 I could split /[\n\t]/ or something 07:11:53 That, or chomp it. 07:11:58 ah yes chomp 07:12:04 I tend to use it because of the name. 07:12:09 yes very satisfying 07:12:49 -!- nooga has joined. 07:14:04 okay let's try this again. 07:15:38 well the scripts appear to be using memory. 07:15:40 so that's good. 07:17:40 -!- ive has joined. 07:18:31 Yes, that'll teach those RAM chips who's the boss here. 07:25:13 sweet that worked. 07:34:28 fizzie: okay so if I use a require to import the modules via string 07:34:37 how do I access variables in their namespace? 07:35:59 if do just drops variables into the current scope then I might use it instead. 07:37:39 hmmm I could use a symbolic reference maybe. 07:38:56 !perl -e '%t = (1,2); print %{"%::t"};' 07:39:08 `run perl -e '%t = (1,2); print %{"%::t"};' 07:39:19 No output. 07:39:46 `run perl -e '$t = {1,2}; print ${"$::t"};' 07:39:51 No output. 07:39:53 hmmm 07:39:56 `run perl -e '$t = {1,2}; print ${"$t"};' 07:39:59 No output. 07:43:56 -!- CakeProp1et has joined. 07:45:33 -!- CakeProphet has quit (Read error: Operation timed out). 08:03:09 `run perl -e 'use Data::Dumper; Data::Dumper::Terse = 1; print Data::Dumper::Dumper($a, $b)' 08:03:11 Can't modify non-lvalue subroutine call in scalar assignment at -e line 1, near "1;" \ Execution of -e aborted due to compilation errors. 08:03:28 `run perl -e 'use Data::Dumper; $Data::Dumper::Terse = 1; print Data::Dumper::Dumper($a, $b)' 08:03:30 undef \ undef 08:04:54 `run perl -e 'use Data::Dumper; $d = Data::Dumper->new([$a,$b]); $d->Terse(1); print $d->Dump; 08:04:57 sh: Syntax error: Unterminated quoted string 08:04:59 `run perl -e 'use Data::Dumper; $d = Data::Dumper->new([$a,$b]); $d->Terse(1); print $d->Dump;' 08:05:01 undef \ undef 08:07:00 'require' won't ever touch your namespace; you need to use a fully-qualified Package::foo name to reach into it. 08:07:39 `run perl -e 'use Data::Dumper; $d = Data::Dumper->new([[$a,$b]], [qw(x*)]; $d->Terse(1); print $d->Dump;' 08:07:41 syntax error at -e line 1, near "];" \ Execution of -e aborted due to compilation errors. 08:07:47 `run perl -e 'use Data::Dumper; $d = Data::Dumper->new([[$a,$b]], [qw(x*)]); $d->Terse(1); print $d->Dump;' 08:07:50 ​[ \ undef, \ undef \ ] 08:08:07 `run perl -e 'use Data::Dumper; $d = Data::Dumper->new([$a,$b], [qw(x*)]); $d->Terse(1); print $d->Dump;' 08:08:10 undef \ undef 08:10:04 `run perl -e 'use Data::Dumper; $d = Data::Dumper->new([[$a,$b]], [qw(*x)]); $d->Terse(1); print $d->Dump;' 08:10:07 ​( \ undef, \ undef \ ) 08:10:11 there we go. 08:10:56 `run perl -e 'use Data::Dumper; $d = Data::Dumper->new([[$a,$b]], [qw(*_)]); $d->Terse(1); print $d->Dump;' 08:11:01 ​( \ undef, \ undef \ ) 08:22:47 -!- augur has quit (Remote host closed the connection). 08:22:59 -!- augur has joined. 08:27:05 -!- Phantom_Hoover has joined. 08:27:51 `run perl -e '$_='this-is-a-test'; s/-./-\u/g;print' 08:27:53 0 08:28:04 `run perl -e '$_="this-is-a-test"; s/-./-\u/g; print' 08:28:06 this-s--est 08:28:29 `run perl -e '$_="this-is-a-test"; s/-(.)/-\u$1/g; print' 08:28:31 this-Is-A-Test 08:28:42 `run perl -e '$_="this-is-a-test"; s/(^|-)(.)/\u$1/g; print' 08:28:45 his-s--est 08:28:46 `run perl -e '$_="this-is-a-test"; s/(^|-)(.)/\u$2/g; print' 08:28:49 ThisIsATest 08:29:02 beautiful. 08:29:48 `run perl -e '$_="this--is-a-test"; s/(^|-)(.)/\u$2/g; print' 08:29:50 This-isATest 08:30:11 fizzie: that's perfectly fine 08:30:45 -!- sebbu2 has joined. 08:31:13 `run perl -e '$_="test"; s/(^|-)(.)/\u$2/g; print' 08:31:15 Test 08:33:58 -!- sebbu has quit (Ping timeout: 255 seconds). 08:35:20 fizzie: instead of manually typing option hash tables I decided to do these shenanigans. :) 08:35:51 map { my $opt=$_; s/(^|-)(.)/\u$2/g; $opt, handle_opt $_;} @datasets 08:36:51 there is no end to my overcomplicated hackery. 08:41:22 -!- ais523 has joined. 08:49:07 fizzie: http://sprunge.us/bGCK 08:49:14 this /should/ work... as far as I can tell. 08:49:34 can't test it yet (need my external) 08:50:10 here's the generation script: http://sprunge.us/dZVH 08:50:32 if you want to like, watch it break on first try as it most likely will. 08:53:20 -!- ais523 has quit (Remote host closed the connection). 08:56:20 -!- ais523 has joined. 08:56:30 slightly revised words.pl : http://sprunge.us/HMXX 09:03:22 still need to do some error handling.. 09:10:44 -!- nooga has quit (Ping timeout: 244 seconds). 09:23:21 `run perl -e 'if (my $x = 2) { print $x } print $x' 09:23:24 2 09:23:45 `run perl -e 'if (my $x = 2) { print $x } else { print $x} print $x' 09:23:48 2 09:38:01 -!- CakeProp1et has changed nick to CakeProphet. 09:48:20 http://sprunge.us/GThA 09:49:15 -!- ais523 has quit (Read error: Operation timed out). 09:49:53 -!- ais523 has joined. 10:26:29 fungot: make me a sammich 10:26:29 CakeProphet:. i'm so kind, even to assholes! anmaster no not markov anmaster no not markov 10:26:48 fungot, what's anmaster going to do with markov? 10:26:49 Phantom_Hoover: You have 1 new message. '/msg lambdabot @messages' to read it. 10:26:49 Phantom_Hoover:, so i'd make stuff up to. why, this is for you guys are a lot of the design, prisoners and slaves that have sucked. rephrase: " i tried todo a _" is 0 ( and both variables hold the same 10:27:42 * ais523 tries to figure out where fungot got "design, prisoners and slaves" from 10:27:42 ais523: is. absorb it on my door, which was just perceptibly fnord and this yields nothing itself; it keeps being removed, the queen. i see no sense 10:29:14 ais523: "ymor's ravens were notoriously loyal to their design, prisoners and slaves that have sucked blood from larger animals." 10:29:29 good to know 10:29:38 @tell oerjan You got two minutes; what are you complaining about. 10:29:38 the original sentence doesn't make all that much more sense than the fungot version 10:29:38 Consider it noted. 10:29:38 ais523: agora alice c64 ct darwin discworld europarl ff7 fisher ic irc* jargon lovecraft nethack pa speeches ss wp youtube ( some youtube comments) http://news.com.com/ fnord/ fnord and it is eta. f) the associate director of personnel may declare an interested proposal, not only to goods and service sectors. if we take a very close relationship, but the parliament has possessed him, yet he talkes well," he said, taking it out 10:29:50 haha, is that a fungot self-quote? 10:29:50 ais523: to, uhhh....... uncool it online. it was an unmanned flight--thanks for doing your homework. seriously, read description :) ( maybe i suck at english as u suck at english as u suck at english as u suck at english as u suck at english as u suck at english as u suck at english as u suck at english as u suck at english as u suck at english as u suck at english as u suck at english as u suck at english as u suck at english 10:29:57 ^style 10:29:57 Available: agora alice c64 ct darwin discworld europarl ff7 fisher fungot* homestuck ic irc jargon lovecraft nethack pa sms speeches ss wp youtube 10:30:13 It's built of everything it has said. 10:30:13 There are a lot of cycles in this mode. 10:30:30 ah right, you used fungot as a source for itself 10:30:30 ais523: just to help an fnord archive) 10:30:41 that'd explain why the source material doesn't make much more sense than the output 10:30:59 The "ymor's ravens" comment was from the 'nethack' style, obvs. 10:31:09 that's not surprising 10:36:19 Phantom_Hoover: The "anmaster no not markov" loop comes from elliott using ^echo to talk to an ignoring Vorpal, also unsurprisingly. 10:36:40 :D 10:37:03 How many times did he say that? 10:37:31 Just once, but with the sort of short context, it's enough. Because you know about ^echo. 10:37:37 ^echo Do I hear an echo? 10:37:37 Do I hear an echo? Do I hear an echo? 10:37:47 Oh, of course. 10:38:06 ^echo, the loopmaker. 10:47:40 fungot: oisosossgoisstoirtrreriteieoiey 10:47:40 CakeProphet: something like scheme48 ( upon the general position is a part of these amendments, i can only thank the president-in-office, you did hear me say that we have had in getting information with regard to monetary policy, a factor is 10:48:01 fungot: suck my dick eh heh heh heh heh huhu huhuhuhuhhuhhuhhuh 10:48:01 CakeProphet: i know i didn't know that you've already asked, but then i need to enter " qemu" to edit is the ordinary ( for call/ cc))) hangs 10:48:45 I wish there was a dataset based on everything it sees 10:48:48 including PMs 10:49:09 It doesn't log everything it sees, sadly. 10:49:18 so then I could flood it with vulgar insults. 10:49:26 ...wow, flood? that's a weird word. 10:49:32 why have I noticed that. 10:49:34 flood. 10:49:43 *not noticed 10:52:24 BLOOD. 10:59:07 `quote 10:59:10 607) I think Perl is a programming language too. [...] 10:59:20 `quote 10:59:22 253) Is there a name for something where I'm more attracted to someone if I know they've had a rough past? Sgeo, "Little Shop of Horrors" 10:59:30 `quote 10:59:32 100) Sgeo_: Gregorr: and someone could, by mistake, rewrite psox to be a weak erection if it is... A filename. 10:59:41 `quote 10:59:43 472) Phantom_Hoover: nope, I removed . from the current directory 10:59:53 wait, how did I do that? 10:59:57 now I'm interested in context 11:00:14 `log removed \. from the current directory 11:00:24 `logs removed \. from the current directory 11:00:27 ​/home/hackbot/hackbot.hg/multibot_cmds/lib/limits: line 5: exec: logs: not found 11:00:32 ah, hmm 11:00:33 2011-07, surprisingly recent. 11:00:38 2011-07-06.txt:11:51:46: 482) Phantom_Hoover: nope, I removed . from the current directory 11:00:41 ah, -06 11:01:38 It's immediately followed by "umm, from the path". 11:01:43 Which makes it less interesting. 11:02:14 Gregor: can you get a tie that's a transparent plastic thing filled with multicoloured glow in the dark liquid 11:02:29 oh right, just a thinko 11:05:29 -!- nooga has joined. 11:07:02 -!- GreaseMonkey has quit (Quit: The Other Game). 11:15:51 I should logread more often 11:20:28 -!- ive has quit (Quit: leaving). 11:26:38 -!- oerjan has joined. 11:27:48 lambdabot: boo! 11:27:58 huh 11:27:58 oerjan: You have 1 new message. '/msg lambdabot @messages' to read it. 11:28:43 lambdabot: > 2 + 2 11:28:54 lambdabot: @run 2 + 2 11:28:55 4 11:36:26 -!- nooga has quit (Ping timeout: 244 seconds). 11:37:26 -!- nooga has joined. 11:38:12 -!- copumpkin has quit (Ping timeout: 260 seconds). 11:38:38 -!- copumpkin has joined. 11:39:02 lambdabot: What is this? You keep answering every "> foo" even when it's just paste from a quoted email or something, but not when someone directly addresses you? 11:39:25 fungot: Teach some sense to your fellow bot, would you? 11:39:25 fizzie: i know i didn't know that you've already asked, but then i need to enter and it closes. :( i can pay, and those that the c-intercal, except that the thing about genocide is 11:43:26 fungot, genocide! 11:43:27 Phantom_Hoover: is. absorb it on my door, which was just perceptibly fnord and this yields nothing itself; it keeps being removed, the queen is a vain. yes is ticked). we'll know that's our memory...... calling...... that thing's not human... 11:47:19 fungot, I wonder if that sword alone can stop. 11:47:20 Phantom_Hoover: no, it's not. it's more complex than that. read the code.) good stuff ( and burning, and no clear account. in that second one is horizontally displaced by 1 pixel is sacred. just me, or i: yet, you rogue! 11:47:39 fungot, all hail horizontal displacement by one pixel! 11:47:40 Phantom_Hoover: agora alice c64 ct darwin discworld europarl ff7 fisher ic irc* jargon lovecraft nethack pa speeches ss wp youtube comments). 11:48:18 `runperl use Scalar::Util qw/dualvar/; my $dv = dualvar 42, 'sneaky'; printf "%d, %s\n", $dv, $dv; 11:48:21 42, sneaky 11:48:21 Perl <3 11:49:59 (Contextual::Return takes it rather further still.) 11:50:50 -!- azaq23 has joined. 11:59:03 anyone here know a CSS hack that's specific to Windows, as opposed to a particular browser? 11:59:10 failing that, Chrome and IE on Windows, specifically 12:02:56 Sounds more like something people would do with scripts. 12:04:16 so, my problem is that Windows Chrome isn't rendering Unicode correctly, because it's picking an inappropriate font 12:04:43 and I don't want to just arbitrarily override a list of fonts for those browsers that do Unicode properly 12:05:03 and I'm just serving a single (computer-generated) HTML file, and don't particularly want to put scripts on it for no good reason 12:06:09 Screenshots of WP pages can't be put on Commons. 12:07:06 indeed 12:07:21 the WP logo is copyrighted 12:07:24 it's OK if you crop out the logo 12:07:40 IE-specific CSS hacks are (probably) dime a dozen, but detecting between Windows Chrome and Somethingelse Chrome with pure CSS might be a bit much to ask. A five-line script to detect the situation and splunk a "fontfix" class onto the body + references to that in the CSS could be easier. But I'm no web developer. 12:12:14 yes, I think so 12:12:24 actually, IE-specific CSS hacks have pretty much disappeared since IE8 12:12:31 earlier versions are pretty easy to hack for 12:12:52 although IE deliberately misparses certain specifically-structured comments, which works on any version as it's an intended feature 12:16:15 ridiculous idea: Chrome probably recognises embedded CSS fonts 12:16:30 so I could just dump a Unicode font into the page source, probably via reference 12:16:41 -!- nooga has quit (Ping timeout: 260 seconds). 12:18:33 -!- hagb4rd has quit (Quit: Nettalk6 - www.ntalk.de). 12:21:00 But then you would (presumably) need to explicitly use that embedded font, and you didn't want to override fonts. 12:21:01 -!- azaq23 has quit (Quit: Leaving.). 12:21:26 yep 12:22:44 on a related but unrelated subject: is there a sensible algorithm to, given a list of examples, produces a wildmat pattern that matches all those examples (and preferably excludes as much else as possible) 12:25:16 As a related but unrelated answer: Emacs comes with a "regexp-opt" function which takes a list of strings and triest to generate a small regular expression which matches that list and nothing else. It is very simplistic, though. 12:26:06 It is clever enough, apparently, to produce (?:optim(?:al|i(?:[sz]e))), given the list {optimal, optimise, optimize}. 12:26:32 That last group doesn't seem so useful in there. 12:34:09 -!- pikhq has joined. 12:34:17 -!- pikhq_ has quit (Ping timeout: 255 seconds). 12:34:32 indeed 12:34:33 also, ?: isn't even Emacs regex syntax 12:34:34 so it's busy optimizing a syntax other than its own 12:35:19 Supposedly it is in Emacs23. 12:35:36 I'm going by http://www.emacswiki.org/emacs/RegexpOpt here, not an expert again. 12:35:45 Emacs finally modernised its regexen? good to hear it 12:35:46 " (regexp-opt '("alex" "albert" "alois" "bummer")) 12:35:46 results in 12:35:46 "al\\(bert\\|ex\\|ois\\)\\|bummer" 12:35:46 (or 12:35:46 "\\(?:al\\(?:bert\\|ex\\|ois\\)\\|bummer\\)" 12:35:47 in Emacs 23)." 12:36:05 I dropped the \\s from the example for legibility reasons. 12:37:26 wow, \(?: is horrendous syntax 12:37:50 I think it's easier to quote parens that are meant to match parens, then parens that are part of regex syntax 12:38:06 people call Perl unreadable, but it's really doing better than its competitors on that (that didn't just outright copy it) 12:39:24 Hysterical raisins there, probably. POSIX BREs also require \( ... \| ... \) for grouping. 12:40:05 -!- hagb4rd has joined. 12:56:09 -!- ais523_ has joined. 12:57:10 -!- boily has joined. 13:00:37 hmm, weirdest reason for a student to leave my course ever (well, so far at least): "I'm actually a second year" 13:00:40 (it's a first year course) 13:01:18 -!- zzo38 has joined. 13:01:26 Around here, those things are just very vague recommendations. Even prerequisites are rarely checked very strictly. 13:02:14 it's more important around here because it matters for mark calculation 13:03:09 Ah. Well, our courses are usually part of a particular "module", but you can generally build those up in arbitrary order. 13:09:52 -!- nooga has joined. 13:18:39 "Earth's tidal oscillations introduce dissipation at an average rate of about 3.75 terawatt." These energy-conscious days, shouldn't we be trying to cut that down a bit? 13:22:03 What would happen if you reverse the direction of the Earth spinning? 13:22:57 I don't know, but I strongly suspect time would not start to run backwards. 13:23:08 -!- MDude has quit (Ping timeout: 258 seconds). 13:23:45 I agree with that. 13:23:53 yeah the superman movie shows clear evidence of that 13:24:00 *the first 13:25:27 oerjan: Right, he spins the globe and then nothing happens. Quite an anticlimactic moment. 13:25:46 -!- MDude has joined. 13:26:14 wait what 13:26:16 Actually, didn't he just fly around backwards or something? 13:26:21 * oerjan missed a "not" up there 13:26:44 Well, maybe it's still admissible as evidence. 13:27:06 well yes, but it looked like it made the earth turn backwards 13:27:21 clearly some badass frame dragging involved 13:29:47 Speaking of which, the JET fusion reactor... sorry, "fusion device", has two 775-ton flywheels spinning at 225 rpm. That's quite a lot of spinning. 13:33:48 Alpha doesn't do moments of inertia. 13:33:50 What is this crap. 13:36:59 http://en.wikipedia.org/wiki/List_of_moments_of_inertia 13:38:20 probably m*r^2/2 13:38:48 Each flywheel has a radius of 4.5 metres. 13:39:40 this assumes uniform thickness, i think 13:39:53 Sadly, it is not. 13:40:09 Oh, but the next sentence gives the moment of inertia. :) 13:40:14 "-- weighs 775 tons (!), much of which is concentrated on the rim to form a large flywheel. For experts – the total moment of inertia is 13.5 million kg.m2 per flywheel!" 13:43:19 Giving the value to W|A works in the sense that it is interpreted as moment of inertia, but it doesn't give all those funny "comparisons" values, like it does for angular velocity and such things. 13:43:53 `frink 1/2 * 13500000 kg m^2 * (225 / min)^2 -> Joule 13:44:04 Unknown symbol "Joule" \ Warning: undefined symbol "Joule". \ Unconvertable expression: \ 94921875 m^2 s^-2 kg (energy) -> Joule (undefined symbol) 13:44:12 For example, the angular velocity of the JET flywheel is 0.75 times the angular velocity of a 3.5-inch floppy disk. 13:44:14 `frink 1/2 * 13500000 kg m^2 * (225 / min)^2 -> J 13:44:23 94921875 13:44:43 `frink 1/2 * 13500000 kg m^2 * (225 / min)^2 -> kWh 13:44:51 3375/128 (exactly 26.3671875) 13:47:19 oh hm 13:47:24 `frink 1/2 * 13500000 kg m^2 * (225 / min)^2 -> joule 13:47:32 94921875 13:47:42 was just a capitalization error 13:49:11 So it's 9.5 MJ of spinning. 13:49:17 oerjan: Today's trivia: the "Subaru equivalent" of LHC beam at top energy is 1712 km/h. (I.e. same amount of kinetic energy in a 3200 kg of mass moving at that speed.) 13:49:34 Phantom_Hoover: itym 95 13:49:43 SHUT UP OERJAN 13:50:42 fizzie, so wait, if you crashed a Subaru that fast it would turn into Higgs bosons? 13:51:01 only if you crashed it into a very tiny area 13:53:08 16 microns across at the collision point. 13:53:13 It needs to be a very small car. 13:55:25 -!- oerjan has quit (Quit: Later). 13:55:33 A barn is the best unit of area. 13:58:49 And the barn-megaparsec is the best unit of volume, mainly because the stupefying scales involved cancel out to be slightly smaller than a teaspoon. 13:59:49 -!- copumpkin has quit (Quit: Computer has gone to sleep.). 14:12:32 wouldn't barn-gigaparsec be a nicer size? 14:21:10 -!- copumpkin has joined. 14:24:51 The barn-gigaparsec describes the longuest spaghetti 14:42:27 ais523_, a gigaparsec is a nearly-useless unit, considering that the observable universe is about ten of them across. 14:45:14 -!- sllide has joined. 14:45:19 One barn-gigaparsec is 0.6 times the volume of blood in a typical human. (Thanks, W|A.) 14:50:41 -!- elliott has joined. 14:52:08 -!- elliott has quit (Client Quit). 14:52:13 -!- elliott has joined. 15:03:42 I suppose you could write it as kilobarn-megaparsec instead 15:03:47 but why be redundant on prefixes? 15:04:01 ais523_: oh dear 15:04:02 elliott: You have 5 new messages. '/msg lambdabot @messages' to read them. 15:17:04 22:58:48: I also guess it's pointless to mention that FBBI was updated too? ;-) 15:17:04 22:59:48: Somebody announced that here when it happened 15:17:05 Deewiant: Me 15:17:19 I guessed that but couldn't be bothered to check 15:19:27 00:27:12: I found this: http://kirstenmichel.com/ss2.html 15:19:27 "HOW HIGH AM I?" did not have the expected answer. 15:19:51 01:21:25: I finally have X-Chat on Mac 15:19:52 -!- MDude has quit (Ping timeout: 276 seconds). 15:20:04 Gregor: You had that before, but all X-Chat ports suck massively 15:20:16 Gregor: Or are you using it through X11 or something ridiculous like that 15:20:33 02:42:38: so at compile time does GHC compute the result of all constants? 15:20:34 02:43:01: so that t is just a predefined Map at runtime? 15:20:40 CakeProphet: Yes, GHC has solved the halting problem. 15:21:07 I don't see how that involves the halting problem 15:21:30 Deewiant: "All constants" 15:21:58 Presumably computing all constants involves computing every definition that halts, because that's the only reasonable definition of "constant" in context 15:22:02 Constants being numerical and string literals and pure functions that work on them 15:22:15 02:43:01: so that t is just a predefined Map at runtime? 15:22:17 does FBBI pass Mycology yet? 15:22:18 And character literals and whatnot 15:22:32 elliott: did you see my Prolog map, btw? it feels so wrong writing that in Prolog 15:22:33 Deewiant: f x = f x 15:22:34 Pure function 15:22:36 ais523_: Yes 15:22:47 Prolog doesn't even have first-class functions! 15:22:51 elliott: Compile time <> 15:23:04 Deewiant: Okay, so CakeProphet wants GHC to be an interpreter? 15:23:06 elliott: Or infinite compile time, whatever 15:23:28 elliott: Interpret the stuff that looks like it's constant, at compile time 15:23:44 To whatever degree possible 15:23:54 Deewiant: Nobody seriously wants that 15:23:56 If you encounter unsafePerformIO# then abort, and such 15:23:57 -!- ais523_ has quit (Quit: going back to the non-underscore version). 15:24:13 I've sometimes wanted it at least for certain definitions 15:24:21 Deewiant: So, sure, what you're saying is possible but I don't see why you think CakeProphet meant that at all :P 15:24:42 That's just what it sounded like :-P 15:24:53 First thing that came to mind from "compute the result of all constants" 15:26:17 ais523: New version appears to hit many BADs but gets through 15:26:29 Well, 9 of them 15:26:32 Er, 8 15:26:58 hmm, I mentioned my map in Prolog to a Prolog teacher who happened to be passing by 15:27:04 and he suggested I try to do lambda calculus in it 15:27:58 ais523: you'll just invent Lambda Prolog or Mercury or whatever but worse :P 15:29:00 yep, but it'll be programming for fun 15:29:04 rather than for practical use 15:29:11 so it doesn't matter if it's worse than existing impls 15:35:13 11:02:14: Gregor: can you get a tie that's a transparent plastic thing filled with multicoloured glow in the dark liquid 15:35:16 ais523: I STILL WANT THIS 15:35:23 even if that sentence uh 15:35:25 doesn't make much sense 15:35:33 I agree, it would be great 15:35:55 glow in the dark liquid already exists, but using multiple colours without it mixing would be hard 15:36:49 11:59:03: anyone here know a CSS hack that's specific to Windows, as opposed to a particular browser? 15:36:50 11:59:10: failing that, Chrome and IE on Windows, specifically 15:36:50 12:02:56: Sounds more like something people would do with scripts. 15:36:50 12:04:16: so, my problem is that Windows Chrome isn't rendering Unicode correctly, because it's picking an inappropriate font 15:36:50 12:04:43: and I don't want to just arbitrarily override a list of fonts for those browsers that do Unicode properly 15:36:53 12:05:03: and I'm just serving a single (computer-generated) HTML file, and don't particularly want to put scripts on it for no good reason 15:36:58 ais523: you really Shouldn't Do That :P 15:37:07 OS sniffing is even worse than browser sniffing, probably 15:37:14 indeed 15:37:17 ais523: Arial Unicode MS is what most people specify for full Unicode support on Windows, IIRC 15:37:20 but the page is correct, and the browsers are wrong 15:37:22 I think it comes with the OS 15:37:26 ais523: yes, so you're already doing hacks 15:37:28 and my boss is complaining about it 15:37:31 ais523: so you might as well override the fonts 15:37:35 which is a lesser hack than OS sniffing 15:37:55 but this computer doesn't even have Arial Unicode MS installed, so it wouldn't be able to display the font suggested! 15:37:58 12:16:15: ridiculous idea: Chrome probably recognises embedded CSS fonts 15:37:59 12:16:30: so I could just dump a Unicode font into the page source, probably via reference 15:38:03 ais523: umm, you could just use @font-face 15:38:16 elliott: that would require the font to exist on the target computer 15:38:27 ais523: yes, if your irc font has no @ character 15:38:31 ah, right 15:38:35 in that case, that's what I was suggesting 15:38:40 "To use web fonts, each form of the font family must be declared using the @font-face rule; for example, to use both regular and italic forms of Jos Buivenga’s Delicious font, you would put the following in your stylesheet: 15:38:41 @font-face { font-family: Delicious; src: url('Delicious-Roman.otf'); } @font-face { font-family: Delicious; font-weight: bold; src: url('Delicious-Bold.otf'); } 15:38:41 Then call it using font-family: 15:38:41 h3 { font-family: Delicious, sans-serif; }" 15:38:41 Unknown command, try @list 15:40:35 13:50:42: fizzie, so wait, if you crashed a Subaru that fast it would turn into Higgs bosons? 15:40:38 Phantom_Hoover: Yes. But only a Subaru. 15:40:41 fungot, what's anmaster going to do with markov? <-- yeah, what style was that? 15:40:41 Vorpal: that is just a value of type " airbus is a big fan of avril....but this song " there 15:40:53 ^style 15:40:53 Available: agora alice c64 ct darwin discworld europarl ff7 fisher fungot* homestuck ic irc jargon lovecraft nethack pa sms speeches ss wp youtube 15:41:04 fungot? 15:41:04 Vorpal: ( c) a player who makes further play impossible by eir actions or lack thereof, or typically good morning, or typically good morning, or typically good morning, or typically good morning, or typically good morning, or typically good morning, or typically good morning, or typically good morning, or typically good morning, or typically good morning, or typically good morning, or typically good morning, or typically good m 15:41:06 what? 15:41:15 Vorpal: it was fungot style 15:41:15 ais523: to, uhhh.... w.t.f lol ...out of time! 15:41:20 ^style fungot 15:41:20 Selected style: fungot (What I've said myself) 15:41:23 aha 15:41:24 "...out of time!" :D 15:41:28 14:42:27: ais523_, a gigaparsec is a nearly-useless unit, considering that the observable universe is about ten of them across. 15:41:31 Phantom_Hoover: Sounds good to me. 15:42:08 The rfk86 page has an Embedded OpenType version of the font in addition to the raw TTF (it was written pre-WOFF, I think), so in theory it should work also on IE 4+ (whereas only IE 9+ does TTF/WOFF); sadly, I don't think anyone has ever tested it with IE, so it might not work. 15:42:17 elliott: attoparsec is also a nice unit btw 15:42:32 http://hackage.haskell.org/package/attoparsec 15:42:38 W|A says approximately 29 across 15:42:48 elliott: oh for a package name, okay. 15:42:53 Deewiant: 10 ~ 29 15:42:55 Vorpal: I said that? 15:43:06 For large values of 10 15:43:08 elliott: no I extrapolated from the context of the link 15:43:19 elliott: anyway iirc an attoparsec is slightly more than 3 cm 15:43:33 Deewiant: Or small values of 29 15:43:38 Forsooth 15:44:31 Deewiant: Or middling values of both 15:44:44 Nah, middling won't cut it 15:46:33 Deewiant: Well, they could meet in the middle 15:46:39 Say if ten was twenty and twenty-nine was twenty too 15:47:07 Those are still a large value of ten and a small value of 29 respectively 15:47:40 Deewiant: It seems weird to call that "both", since the changes to both numbers are much less drastic than would be required otherwise 15:47:50 "Both" seems to imply strictly more effort to me 15:48:07 I never said "both" 15:48:32 Those are still a large value of ten and a small value of 29 respectively 15:48:33 But fine :P 16:13:57 -!- Ngevd has joined. 16:16:33 Hello! 16:17:40 helo 16:17:45 The wind's getting pretty nasty 16:17:50 Going to close a window 16:19:30 ais523, if you're here, wiki spam 16:28:11 -!- Phantom_Hoover has quit (Ping timeout: 248 seconds). 16:34:02 You know what would be tricky? 16:34:07 Writing a quine in Piet 16:36:18 http://mamememo.blogspot.com/2009/10/piet-quine.html 16:37:03 Crazy 16:38:13 Should be linked on the wiki 16:40:49 -!- Phantom_Hoover has joined. 16:40:57 It's dismal outside 16:41:08 Ngevd: Nice weather we're having 16:41:10 Snap 16:44:17 Ngevd wasn't complaining about the weather. 16:44:21 He was just pointing out that it's England. 16:44:41 Gregor "Literally lives in America" Gregor 16:44:58 I like how my fore and surname are both "Gregor" 16:45:24 elliott "That's my gimmick" elliott 16:45:41 My surname is to awesome to be a duplicate of my first name 16:45:47 I want a doctorate to go with it 16:46:15 Ngevd "Ngevd" Ngevd 16:46:28 Dr Ngevd 16:48:27 -!- derdon has joined. 16:49:00 Lasagne time! 16:49:05 -!- Ngevd has quit (Quit: Leaving). 16:52:07 You quoted me before; what do you know of prime vertical? 16:59:13 -!- nooga has quit (Read error: Connection reset by peer). 16:59:30 -!- nooga has joined. 17:06:31 -!- Ngevd has joined. 17:06:36 Hello! 17:09:49 -!- augur has quit (Remote host closed the connection). 17:10:02 -!- CakeProphet has quit (Ping timeout: 252 seconds). 17:12:27 -!- MDude has joined. 17:20:27 -!- Phantom_Hoover has quit (Ping timeout: 248 seconds). 17:20:36 -!- Ngevd has quit (Ping timeout: 258 seconds). 17:24:28 -!- Ngevd has joined. 17:25:07 hi everyone 17:25:15 hi 17:25:33 wow, you know how the tzdata guy was sued? 17:25:39 ICANN decided to continue maintaining the project 17:25:45 yes 17:25:47 I wouldn't have been surprised if it was Red Hat or someone 17:25:49 but ICANN? 17:25:51 neat 17:26:04 They're, like, names. 17:26:08 For timezones. 17:26:59 -!- Slereah has quit (Ping timeout: 260 seconds). 17:29:14 -!- Slereah_ has joined. 17:31:59 Sued for timezones? 17:32:17 zzo38: yes, the authors of an atlas claimed copyright infringement IIRC 17:32:33 most people think the suit doesn't make much sense, but the tzdata person can't afford to defend against it 17:32:51 -!- Phantom_Hoover has joined. 17:32:52 ais523: not the authors 17:33:03 ais523: just the copyright trolls that bought out the previous publisher 17:33:04 oh right, some people who claim to own copyright on the atlas for no obvious reaosn 17:33:17 ais523: they bought the company that owned the rights 17:33:18 that seems to be a fairly good reason 17:33:24 well, as far as the current law goes 17:34:05 elliott: apparently the copyright's actually registered to someone else 17:34:10 or at least, not obviously the same person 17:34:24 based on comments I've read, which might be incorrect 17:34:29 Someone told me that the definition of planet has changed again, or something like that, to make Pluto is now considered a planet, again. Is that correct? 17:34:31 * ais523 vaguely remembers that the UK has stupidly strict libel laws 17:34:36 no 17:34:43 (to zzo38) 17:35:00 ais523, yes 17:35:03 Apparently they heard it on the radio. 17:35:05 Exceedingly 17:35:36 zzo38: they probably heard that thing about i-forget-the-name actually probably being as big as pluto 17:36:17 Well, as far as I know the definition of a planet depends on the orbit. 17:36:42 And whether it's cleared it's orbit path or something 17:36:59 Yes, like that. 17:37:42 WTF, OpenIndiana has files in .zlib format. I don't think Debian even has a decompressor for raw zlib data. 17:38:02 yes it does, zlib :-) 17:38:08 Gregor: are you sure it's not just gz or something? 17:38:11 Gregor: what is OpenIndiana? 17:38:31 elliott: Nope. It's named .zlib, and file reports "data". I think it's reasonable to assume it's raw zlib. 17:38:37 Vorpal: Fork of OpenSolaris. 17:38:40 heh 17:38:46 Gregor: Better question, why are you... 17:38:50 elliott: Giggles? 17:38:58 Gregor: If you're into that, I guess. 17:39:09 solaris is so weird 17:39:12 like really weird 17:39:26 only ever used it once 17:39:34 hm should try it out in an vm maybe 17:39:48 Gregor: qpdf should provide zlib-flate 17:39:56 Deewiant: lolwut 17:40:15 Deewiant: strange package to do that 17:40:20 Am I installing a PDF viewer (or something thereabout) to get a zlib extractor? 17:40:23 The zlib-flate program is part of the qpdf package. 17:40:27 The zlib-flate program standard from input and writes to standard out‐ 17:40:30 put either compressing or compressing its input using raw zlib compres‐ 17:40:34 sion. This program is provided primarily as a debugging tool. It can 17:40:36 be used to uncompress or compress raw PDF streams. 17:40:39 lulz. 17:40:40 " The zlib-flate program standard from input" 17:40:41 what 17:40:48 that is not even proper English 17:41:22 hmm, a quick search shows that TAA sold something to Astrolabe, but it's unclear as to whether it was the copyright to some timezones or not 17:41:23 That fragment alone could be proper English if not for the remainder of the sentence. 17:41:31 -!- augur has joined. 17:41:53 ais523: you can't copyright timezones 17:41:58 you can copyright books, though 17:41:59 ais523: copyright to time zones? 17:42:03 elliott: well, yes 17:42:03 that makes zero sense 17:42:07 but you can only copyright the formatting of them, if they present time zone data 17:42:09 no wonder the whole thing's so confusing 17:42:13 Vorpal: someone was sued over it 17:42:19 ais523: huh 17:42:20 and stopped maintaining the time zones as a result 17:42:33 and ICANN declared themselves in charge of it and started maintaining it themselves 17:42:56 Vorpal: it's why the tz database died 17:43:04 it did? Didn't notice 17:43:09 you mean the tzdata package? 17:43:15 Vorpal: yes 17:43:16 Quite nice of ICANN. They won't be put down easily. 17:43:22 flate: inflate: data: incorrect header check >_< 17:43:29 So this .zlib file isn't even zlib. Or something. 17:43:37 Gregor: could be zlib with the header stripped 17:43:48 or with a custom header 17:43:50 ".zlib" is a pretty descriptive extension 17:43:55 if a nonstandard one 17:43:57 actually no 17:44:04 it could be a dynamically loadable format 17:44:09 what about zfs library? 17:44:14 (not a lot of sense) 17:44:24 but well if they have z-file system why not have z-libraries 17:45:00 * Gregor proceeds to actually install OpenIndiana in VirtualBox because it's easier than trying to extract this nonsense. 17:45:43 Gregor: What are you actually doing. 17:45:48 elliott: STUPID STUFF 17:45:57 Gregor: Suspicious eye. 17:45:59 s. 17:46:00 ing. 17:46:23 Gregor: you use a fork of an oracle product inside a virtual machine that is an oracle product? 17:46:36 Vorpal: Apparently. 17:46:43 Vorpal: A fork of a dead project :P 17:46:46 elliott: well yes 17:46:50 elliott: I'm using Solaris+gelfload as a target to build up a shims library which I will hopefully be able to contribute to maloader. I'm using Solaris for laffs. 17:46:52 elliott: but there is some irony in this. 17:47:08 Gregor: shims? 17:47:13 maloader? 17:47:26 Gregor: maloader? 17:47:41 https://github.com/shinh/maloader 17:47:54 Gregor: Yaaay shinh 17:47:56 nice 17:48:19 EVERYONE LOVES SHINH 17:48:40 but Mach-O loader won't actually let you run OS X executables, because of libraries. 17:49:05 `quote 17:49:07 432) I think I managed something like a one-expression increment that was only a few hundred characters long 17:49:15 yes, that sounds like me 17:49:17 Vorpal: elliott: I'm using Solaris+gelfload as a target to build up a shims library which I will hopefully be able to contribute to maloader. I'm using Solaris for laffs. 17:49:18 also, like INTERCAL 17:49:19 `quote 17:49:19 `quote 17:49:20 `quote 17:49:20 `quote 17:49:21 `quote 17:49:25 Massacre time. 17:49:26 quotestripe! 17:49:32 51) oklofok: I'm a tad over-apologetic. I apologize. 17:49:34 697) Ngevd:. i'm so kind, even to assholes! anmaster no not markov anmaster no not markov anmaster no not markov anmaster no not markov anmaster no not markov 17:49:35 I agree with 432's addition, anyway 17:49:36 Vorpal: Hence "shims". And incidentally, it does load a non-insignificant number of console binaries, including GCC and friends. 17:49:47 That was two, HackEgo. 17:49:49 322) However is probably better to have both queen/king and government in case one does bad thing, the other side can argue to them 17:49:50 436) half the time the time travel model is one where a consistent universe essentially seems impossible if it supports any nontrivial agent-like behavior (because certainly one agent will want to destroy it using a retarded paradox), the other half seems to actually assume an implicit extra time axis and moving in 17:49:50 342) elliott: hey, thinking's easier than using the Internet 17:49:58 Vorpal: (Simply by redirecting all the standard C functions to the host's libc verbatim) 17:50:13 ais523: hmm, which of those do you think is the worst? 17:50:19 Vorpal: (Which is how gelfload works too) 17:50:27 elliott: 697 17:50:39 ais523: fungot quotes are not eligible for deletion 17:50:40 elliott:, so i'd make stuff up to. why, this is for you guys are a lot, but played so bad and missed that: ( :::ass. in case you missed that: ( :::ass. in case you missed that: ( :::ass. in case you missed that: ( :::ass. in case you missed that: ( :::ass. in case you missed that: ( :::ass. in case you missed that: ( :::ass. in case you missed that: ( :::ass. in case you missed that: ( :::ass. in case you missed that: ( :::ass. 17:50:43 Gregor: well yeah 17:50:44 also, 436 is truncated, although potentially interesting 17:50:53 `run quote 436 | paste 17:50:53 322's probably the worst non-fungot one there 17:50:53 ais523: i, myself, will bring an end to all. ghosts lurk in the ruins were in truth, and everything in readiness for fnord. under these to tristan d'acunha, a volcanic origin, a high, and was fnord him with his umbrella. " who can have patience to acquire it. just fnord" brutha. " do you know much about gods, i am no fighter: 17:50:56 http://codu.org/projects/hackbot/fshg/index.cgi/raw-file/tip/paste/paste.23600 17:51:08 it's typical of zzo38, but nothing massively special 17:51:14 hmm, 436 is boring and cut off 17:51:15 `delquote 436 17:51:17 ​*poof* 17:51:21 Gregor: the value of #defines and so on will differ between systems 17:51:28 I'll do another one since that was a missed opportunity to delete something crap 17:51:29 `quote 17:51:29 `quote 17:51:30 `quote 17:51:30 `quote 17:51:30 `quote 17:51:37 gah, my browser doesn't know how to open 23600 files 17:51:41 Vorpal: Hence "shims" 17:51:43 578) I MIGHT BECOME GHOST 17:51:44 267) oerjan: also actually A(4, 4) is larger than any other integer, i learned this the other day when i was reading about this algo, it had complexity O(n a^-1(n)) = O(n a^-1(4)) 17:51:44 Gregor: yeah 17:51:45 ais523: it's not the extension, it's Gregor's server 17:51:57 152) how does a "DNA computer" work. von neumann machines? CakeProphet, that's boring in the context of DNA. It's just stealing the universe's work and passing it off as our own. 17:51:57 319) Why do you want to have sex in everything? I don't want. 17:51:57 94) I cannot eat meat that isn't flat. 17:52:08 elliott: it's both; it doesn't know the type because the server didn't tell it, so it tried to guess from the extension 17:52:15 `quote 95 17:52:17 95) Note that quote number 124 is not actually true. 17:52:24 `quote 124 17:52:25 94 doesn't look all that interesting 17:52:26 124) Darn, now I can't acknowledge the reference you were making. 17:52:34 also, 95 is massively out of context by now 17:52:35 haha, same person by coincidence 17:52:38 elliott, ais523: And I don't know why the server didn't tell it, so for right now you just have to live with it :P 17:52:39 does that make it better or worse? 17:52:41 ais523: it referred to 94 17:52:45 i'll leave 95 17:52:50 `delquote 94 17:52:52 ​*poof* 17:53:05 yep, the now-deleted 436 doesn't seem particularly quotable 17:53:15 it's like xkcd; it's vaguely thought-provoking and sometimes worth reading, but not funny 17:53:22 `quote 124 17:53:24 124) if you claim that the universe is more than 3D the burden of proof is on you to produce a klien bottle that doesn't self intersect ^ I learned that trick from atheists 17:53:27 xkcd was better when it /was/ funny :P 17:53:46 it was funny once? 17:54:08 I found the one about the doorbell funny, actually 17:54:23 but mostly only because it claimed to be a true story and I can believe that 17:54:33 xkcd is hit and miss 17:54:38 oh well, let's do another round, we don't exactly have a shortage of quotes: 17:54:40 `quote 17:54:41 `quote 17:54:41 `quote 17:54:41 `quote 17:54:42 `quote 17:54:42 Mostly miss 17:54:52 12) :d <(I can lick my nose!) 17:55:01 I personally enjoyed the one with the arrow and the boomerang 17:55:10 279) who's walter bright and why is he so bright locks: he's to D what I'm to ooc locks: guilty 17:55:10 662) But whereas the Zune UI makes one think "I want to kill myself", the Windows CE UI makes one think "I want to kill myself, but first kill my parents as punishment for bringing into this world someone who would one day own a Windows CE device." 17:55:10 466) I go to clean up the shrapnel from a teabag and you're discussing the definition of god out of nowhere. 17:55:11 555) You realise the micromanagement it took to make quintopia encrust my silver throne with emeralds rather than a jug? 17:55:22 `delquote 12 17:55:24 ​*poof* 17:55:27 -!- boily has quit (Ping timeout: 260 seconds). 17:55:33 I'm going to end up deleting every single Sine quote, aren't I :P 17:55:34 `pastequotes 17:55:37 http://codu.org/projects/hackbot/fshg/index.cgi/raw-file/tip/paste/paste.14273 17:56:03 Aww, we'll dip below seven hundred soon. 17:56:32 the Sine quotes mostly aren't all that good 17:56:37 Gregor: My joke simpler HackEgo transaction system actually seems just as good as the original one, and about ten thousand times simpler to implement... 17:56:54 elliott: THEN DO IT 17:57:02 Gregor: DO YOU EVEN REMEMBER WHAT THAT ONE WAS 17:57:10 Nope 17:57:14 If you believe the universe is 3D, the burden of proof is on you to build an embedding of every finite graph out of chewing gum and string. 17:57:25 elliott: SQL. 17:57:39 I don't know what the problem you're facing is, but since you said "transaction", the best solution is probably SQL. 17:58:00 FSVO "best solution" equal to "SQL servers are the worst place to look to for ACID guarantees" 17:58:04 Well. 17:58:09 Hmm 17:58:12 What are the relational guarantess anyway 17:58:26 They're ACID + some shit, and I think it's the rest of them SQL servers fail at, but happily don't recall 17:58:29 ANYWAY 17:58:44 elliott: FUSE filesystem over SQL. Doit. 17:58:46 I just realized that for ACIDness, I've never even thought to look at something that isn't a SQL server. 17:59:03 -!- ais523 has quit (Remote host closed the connection). 17:59:07 Gregor: Commits are only done when there are no active commands running. Whenever a command writes to the filesystem in any way, every pending command (command running or not yet committed) is cancelled and added to the redo queue /in chronological order/ (i.e. in the order HackEgo saw them). 17:59:15 Gregor: After a successful round of commits, the redo queue is executed. 17:59:27 For small applications, SQLite. For large applications, the mean-looking elephant. 17:59:50 (For really huge applications, the cute-looking elephant. But I have no idea how to use the cute-looking elephant. I bet it's really expensive.) 18:00:02 Gregor: So basically, all commands after a write only execute after that write (except they're executed preemptively because most of the time there won't be a write). 18:00:09 Gregor: It's easier to implement than explain, really :P 18:00:17 tswett: Which elephant is htat 18:00:18 I just realized that for ACIDness, I've never even thought to look at something that isn't a SQL server. <-- hm, same 18:00:19 s/ht/th/ 18:00:21 elliott: Sounds feasible to me *shrugs* 18:00:26 where else do you find ACID? 18:00:34 Vorpal: STM 18:00:38 elliott: you know. The yellow one that pushes things with its trunk. 18:00:43 Anything transactional :P 18:00:50 Doug Cutting's son's toy elephant. 18:00:52 Hadoop. 18:00:55 elliott: well, STM is not to persistent storage 18:01:05 which is kind of key for ACID 18:01:14 tswett: Hadoop is open-source :P 18:01:15 at least not in the STM stuff I have seen 18:01:25 Vorpal: It's not ACIDP. 18:01:30 Acid pee sounds awful. 18:01:32 It's ACID. 18:01:40 OK, durability is arguable. 18:01:50 But certainly transactions can't be undone in STM. 18:01:52 elliott: the D in ACID implies it yeah 18:01:52 There are ACID things that are not persistent? That sounds... not exactly pointful. 18:01:56 Vorpal: Not really. 18:02:01 elliott, Vorpal: Incidentally, gelfload can run a fair selection of Solaris binaries. 18:02:08 tswett: Sure, if you think ACI and most of D are pointless. 18:02:09 Gregor: nice 18:02:13 tswett: Ever programmed with locks? 18:02:14 elliott, Vorpal: Kinda makes you wish microcosm meaningfully existed, donnit :P 18:02:26 Oh yeah, locks. I guess it is useful after all. 18:02:30 Gregor: :P 18:02:36 -!- hagb4rd has quit (Ping timeout: 248 seconds). 18:02:45 tswett: Locks are not ACID. 18:02:46 Gregor: well it was over my head in that I couldn't understand what you actually wanted 18:02:52 tswett: Locks are proof that ACID is great. 18:02:55 Because locks are awful. 18:03:09 Oh. 18:03:23 locks are I, possibly A too, but not really 18:03:56 So instead of using locks, you just kind of take all the stuff that you'd put into a lock thingy, and put it in a transaction instead, or something? 18:04:14 I direct you to the documentation of http://hackage.haskell.org/package/stm :P 18:04:31 I suppose only http://hackage.haskell.org/packages/archive/stm/2.2.0.1/doc/html/Control-Monad-STM.html and http://hackage.haskell.org/packages/archive/stm/2.2.0.1/doc/html/Control-Concurrent-STM-TVar.html actually matter since everything else is implemented on top of them. 18:05:01 I thought everything was implemented on top of, like, Verilog. 18:05:03 * tswett coughs. 18:05:26 You use a Verilog CPU? 18:05:35 Yep. It really, really sucks. 18:05:47 yeah VHDL is way better. 18:05:51 (not really) 18:06:09 I have to reboot the computer every time I want to load or unload any code or data. 18:06:41 I mean, I can load and unload data at any time, but I have to state how much of it I want beforehand, and which pieces of code are allowed to access it. 18:06:52 Come to think of it, all this sounds kind of sexy. 18:07:12 They need to hype orElse more in the stm package documentation; it's not obvious to me that you can do (Process <$> readTChan somequeue) `orElse` (Quit <$ readTVar quitVar) by that description (which you can). 18:07:37 -!- augur has quit (Remote host closed the connection). 18:07:48 Observation: OpenIndiana kinda sucks. 18:08:00 Wow. Really??? 18:08:30 It's shocking, I know. 18:08:45 I have no idea what alwaysSucceeds is supposed to do. 18:09:01 Vorpal: And all I want is a VFS :P 18:09:48 Gregor: yeah I have no idea how to do a file system. Whatever I would invent would likely be awkward. Because I have no idea how to do one correctly. 18:09:53 tswett: Adds an invariant. 18:09:55 Gregor: say. Would you like an application virtual machine that is designed to allow multiple users to allow untrusted code simultaneously, while all their bits of code are allowed to share objects between each other? 18:10:07 tswett: http://en.wikipedia.org/wiki/Software_transactional_memory :-P 18:10:33 tswett: Have I mentioned that @ can do that? 18:10:34 Ah... right. 18:10:47 elliott: what is @? 18:11:00 tswett: I believe I explained that last time you talked here. 18:11:03 Is it your nonexistent programming project that's like my nonexistent programming projects? 18:11:12 tswett: @ is elliott's dream about making his own OS one day 18:11:32 not saying some of the ideas in it aren't good. Just saying that waiting for it is like waiting forever. 18:11:45 Vorpal: Oh please, the "@ is vapourware" tack isn't even amusing when I've been refining the design with others in public on IRC. 18:11:47 (Gee, how many abandoned projects do I have? There's Jath, PhunchLua, AcidLua... and maybe some others.) 18:12:03 elliott: do you have any sort of persistent documentation of @? 18:12:08 Vorpal: If I'd actually claimed I was coding it now, then you'd have a point. 18:12:11 Don't say "the #esoteric logs". 18:12:12 tswett: http://codu.org/logs/_esoteric/ 18:12:20 My projects have a tendency to not get far enough to count as projects, abandoned or not 18:12:24 Thank you. 18:12:43 elliott: I'm not claiming you are coding. But I'm claiming that the design is taking forever. Design, coding. Two stages of development. 18:13:09 Vorpal: So, the rate of progress doesn't matter, only time to total completion? 18:13:20 By that measure, /any/ difficult project is vapourware by definition. 18:13:26 elliott: what development methodology are you using? 18:13:30 elliott: where did I claim that? 18:13:32 Don't say "winging it" and don't say "waterfall". 18:13:57 tswett: Do I really have to name a fad? If I was winging it, I would be coding it. 18:14:00 Vorpal: elliott: I'm not claiming you are coding. But I'm claiming that the design is taking forever. Design, coding. Two stages of development. 18:14:11 Vorpal: The design is progressing at a steady rate, so you're just complaining about the absolute amount of time it's taken. 18:14:16 elliott: certainly. You must choose a fad. 18:14:19 elliott: where does that say "only time to total completion matters" 18:14:22 Therefore any difficult project is vapourware because it can't be produced in a short amount of time. 18:14:31 tswett: Pet rocks. 18:14:33 elliott: I'm complaining about the scope of the project I guess 18:14:38 elliott: good. 18:15:07 Vorpal: Damn, why didn't I try and clone Unix? 18:15:14 If only I knew it'd make Vorpal happy... 18:15:17 "If a transaction cannot be committed due to conflicting changes, it is typically aborted and re-executed from the beginning until it succeeds." That sounds pretty awesome. 18:15:31 elliott: clone plan9 instead 18:15:34 tswett: It's implemented more efficiently than that, at least in GHC STM :P 18:15:41 -!- sebbu2 has changed nick to sebbu. 18:16:20 For instance (Process <$> readTChan somequeue) `orElse` (Quit <$ readTVar quitVar) as a transaction only "executes" whenever anyone writes to the channel or the variable. 18:19:15 I suddenly wonder how efficiently one could implement the next-Fibonacci-number function. Given a Fibonacci number, return the next one. 18:19:58 I guess it's easy to do with a simple hash table as long as the size of the number has a small bound, like 64 bits. 18:20:15 tswett: next(n) = n + prev(n) :-P 18:20:32 prev(n) sounds harder. 18:21:21 Of course, it would be much easier to do if it were "given two consecutive Fibonacci numbers, return the next one". 18:21:32 Obviously prev(n) can = fib(fibno(n) - 1). 18:21:36 But that just offloads the problem to fibno. 18:21:37 It's the easiest possible non-trivial problem. 18:21:42 tswett: You can probably do it with one of the closed form solutions. 18:21:48 fibno seems pretty easy to do. Just take the log base phi or something. 18:21:52 Right. 18:22:19 next(n) = n + fib(fibno(n) - 1), where fib and fibno are closed-form. 18:22:25 That sounds pretty fast. 18:22:36 Here's a closed form solution of fib: 18:22:46 isn't there a non-recursive form of fib? 18:23:01 Vorpal really does operate about ten lines behind everyone else. 18:23:08 fib(n) = (a^n - b^n)/(a - b) 18:23:11 Where a and b are constants. 18:23:12 oh yes, the closed form 18:23:14 So... invert that, elliott. 18:23:24 elliott: that is becuase I jump between channels 18:23:36 Vorpal: Huh, is (a-b) = sqrt(five) actually? 18:23:43 erm 18:23:43 tswett:: 18:24:08 http://www.wolframalpha.com/input/?i=inverse+of+%28a^n+-+b^n%29%2F%28a+-+b%29 THAT'S NOT A PONY 18:24:24 elliott: I think so. 18:24:58 elliott: and how's it supposed to know which variable to take the inverse with respect to? 18:25:04 * elliott plugs in the values of a and b. 18:25:21 How do you know what a and b are? I don't think I told you. 18:25:36 Magic. 18:25:40 http://www.wolframalpha.com/input/?i=inverse+of+%28phi^n+-+%28-1%2Fphi%29^n%29%2Fsqrt%28five%29 Well that didn't help. 18:25:49 a = phi 18:25:52 b = -1/phi 18:25:56 http://www4c.wolframalpha.com/Calculate/MSP/MSP212719heh519ig49ig8300006a4he3dhfchf7h85?MSPStoreType=image/gif&s=33&w=240&h=190&cdf=Rotation 18:25:57 Funky. 18:26:08 nice 18:26:13 tswett: I wonder if Mathematica could handle it. 18:26:33 probably 18:26:44 There's also a closed form that involves the floor function. So... use the inverse floor function. 18:26:51 it is more advanced than W|A in general. Reminds me... Isn't Mathematica 8 out? 18:27:00 tswett: Ah yes, a common function. 18:27:10 tswett: Hmm, it actually looks doable there. 18:27:16 Maybe. 18:27:19 Hmm, no. 18:27:25 elliott: oh, and Wolfie by default assumes phi is a variable. 18:27:31 You have to say "where phi = the golden ratio" or something. 18:27:41 (And it will say "blah blah blah where phi = phi" in the result.) 18:27:46 Sigh. 18:27:49 Wolfie! 18:27:58 http://www.wolframalpha.com/input/?i=inverse+of+%28phi^n+-+%28-1%2Fphi%29^n%29%2Fsqrt%28five%29+where+phi+%3D+golden+ratio 18:28:07 tswett: See, you just take the reciprocal of the fibonacci number. : 18:28:08 :p 18:28:09 What are you idiots doing this time. 18:28:16 Phantom_Hoover: Inverting fib. 18:28:26 -!- augur has joined. 18:28:45 tswett: Hmm, next(n) = n + fib(fibno(n) - 1) is rather overcomplicated, since it's next(n) = fib(fibno(n) + 1). 18:28:48 Lemme see. Isn't every function Z -> Z extensible to an analytic function? 18:29:56 Phantom_Hoover: Oi, help us. 18:30:03 tswett: http://bigintegers.blogspot.com/2011/08/inverse-fibonacci-invfibfibnn.html 18:30:07 tswett: Here's something awful. 18:30:14 Oh, wait. 18:30:15 Has loops. 18:30:18 Wow that's ugly. 18:30:27 tswett: http://stackoverflow.com/questions/5162780/the-inverse-fibonacci-problem 18:30:29 Just use the inverse loop function. 18:30:33 tswett: Looks like there's an O(log n) algorithm for it. 18:30:52 elliott: yeah, it's called "enumerate the Fibonacci numbers intil you find it". 18:31:01 ...until. 18:31:08 tswett: Oh, right. 18:31:11 tswett: Theirs looks fancier. :( 18:31:47 Then again, I think that's actually... quadratic or cubic or something in the length of the number. So, O(log n). :P 18:31:48 The function just looks like a normal exponential one, but I'm sure you tried that. 18:32:02 next(n) = floor(log(sqrt(5) * (fibno(n) + 1))/log(phi) + 1/2) 18:32:08 Phantom_Hoover: Tried what? 18:32:09 Oh, wait, no it's not. 18:32:14 elliott, plotting fib. 18:32:21 "Measuring memory usage by counting unbounded words is sort of silly, but as long as that's the model, there's an O(log n) time, O(1) word solution similar to Nikita Rybak's that in essence computes n via its Zeckendorf representation, which is based on the Fibonacci numbers (YO DAWG)." 18:32:23 With n continuous, of course. 18:32:37 tswett: But yeah, that matrix thing looks like the best idea. 18:32:39 And also the least simple idea. 18:32:47 Ooh, wait. The problem was "Given F(n) for n > 2, what is n?". So enumerating the Fibonacci numbers would be O(n). 18:32:53 http://stackoverflow.com/questions/5162780/the-inverse-fibonacci-problem/5254783#5254783 18:32:56 Ah yes, calculation = approximation. 18:33:03 tswett: Yesyesyes but that doesn't help us. 18:33:13 Oh, the matrix thing is pretty simplpy. 18:33:18 Simple. 18:33:27 tswett: Yes, but it's not /stupidly/ simple. 18:33:44 I dunno, it seems like the obvious-ish way to do it. 18:33:53 tswett: By the way, what are you actually doing? 18:34:25 Looking for the 56th Fibonacci number? Calculate the 1st, then the 2nd, then the 4th, then the 8th, then the 16, then the 32nd, then the 64th, then the 48th, then the 56th, and hey, your'e there. 18:34:30 You're. 18:34:30 elliott: nothing. 18:34:31 http://stackoverflow.com/questions/5162780/the-inverse-fibonacci-problem/5266829#5266829 18:34:39 tswett: Hmm, what if we used the full-precision reals involved there? 18:34:47 That seems simplest. 18:34:48 40585 is the sum of the factorial of its digits 18:35:45 > let fac n = product [1..n] in fac 4 + fac 0 + fac 5 + fac 8 + fac 5 18:35:46 40585 18:36:17 115,132,219,018,763,992,565,095,597,973,971,522,401 is the sum of the 39th power of its digits 18:36:36 So is Ngevd some kind of calculating prodigy all of a sudden. 18:36:42 Ngevd: what number is the sum of the squares of its digits? 18:36:52 A website reading prodigy, I'm afraid 18:37:05 1? 18:37:11 Bravo. 18:38:10 > let digits 0 = []; digits n = uncurry (:) $ digits <$> swap (n `divMod` 10); swap (x,y) = (y,x) in digits 9909 18:38:11 [9,0,9,9] 18:38:34 > let digits 0 = []; digits n = uncurry (:) $ digits <$> swap (n `divMod` 10); swap (x,y) = (y,x); fac n = product [1..n] in 40585 == sum (map factorial (digits 40585)) 18:38:35 Not in scope: `factorial' 18:38:39 > let digits 0 = []; digits n = uncurry (:) $ digits <$> swap (n `divMod` 10); swap (x,y) = (y,x); fac n = product [1..n] in 40585 == sum (map fac (digits 40585)) 18:38:39 True 18:38:49 > let digits 0 = []; digits n = uncurry (:) $ digits <$> swap (n `divMod` 10); swap (x,y) = (y,x); fac n = product [1..n] in filter (\n -> n == sum (map fac (digits n))) [0..] 18:38:53 mueval-core: Time limit exceeded 18:38:55 > let n = read $ filter isDigit "115,132,219,018,763,992,565,095,597,973,971,522,401" :: Integer in (==n) . sum . map ((^39) . toInteger . digitToInt) . show $ n 18:38:56 Bah. 18:38:56 True 18:39:12 Prelude Control.Applicative> let digits 0 = []; digits n = uncurry (:) $ digits <$> swap (n `divMod` 10); swap (x,y) = (y,x); fac n = product [1..n] in filter (\n -> n == sum (map fac (digits n))) [0..] 18:39:12 [0,1,2,145,40585 18:39:19 I don't think I'll get another answer for a while. 18:39:31 @oeis 1,2,145,40585 18:39:31 Factorions: equal to the sum of the factorials of their digits in base 10. 18:39:32 [1,2,145,40585] 18:39:41 Heh. 18:39:43 All of the numbers that are the sums of the cubes of their digits: 1, 153, 370, 371, 407 18:39:46 There's a sequence for everything. 18:39:52 @oeis 1,153,370,371,407 18:39:52 Fixed points for operation of repeatedly replacing a number by the sum of th... 18:39:53 [0,1,153,370,371,407] 18:39:59 @oeis 115132219018763992565095597973971522401 18:40:00 Armstrong (or Plus Perfect, or narcissistic) numbers: n-digit numbers equal ... 18:40:00 [1,2,3,4,5,6,7,8,9,153,370,371,407,1634,8208,9474,54748,92727,93084,548834,1... 18:40:11 Ngevd: Are you reading the OEIS. 18:40:14 No 18:40:23 @oeis 1,1634,8208,9474 18:40:24 Fixed points for operation of repeatedly replacing a number by the sum of th... 18:40:24 [0,1,1634,8208,9474] 18:40:36 A website that was the first on my long road to esoteric programming I am reading, though 18:40:47 There's an entire seqeunce of sequences there. 18:40:49 Sequence. 18:40:58 @oeis bad numbers 18:40:59 Badly sieved numbers: as in the Sieve of Eratosthenes multiples of unmarked ... 18:40:59 [2,3,5,7,8,11,12,13,17,18,19,23,27,29,30,31,37,41,43,45,47,50,53,59,61,63,67... 18:41:03 rip 18:41:06 Do you guys mind if I just sort of correct all my typos by stating the correct word afterward, instead of jactually correcting them in place? 18:41:10 Actually. 18:42:01 brb 18:42:04 Jactually. 18:42:20 I like that typo, I must say. It seems... jactual. 18:42:57 '/win 7 18:43:19 /win 7 18:44:13 You win seven, you lose even. 18:44:23 What's that supposed to mean? 18:44:30 Who knows? 18:44:36 * elliott cracks knuckles and prepares to respond to this crazy reddit guy. 18:44:38 I see. 18:44:45 * elliott doesn't actually crack knuckles, but does prepare. 18:44:51 s/even/seven/ 18:44:52 tswett: Does that help? 18:44:55 Except only the second even. 18:44:57 Certainly. 18:45:13 elliott: okay, now I know what STM is. 18:45:20 So what the heck does alwaysSuccesds do? 18:45:23 alwaysSucceeds. 18:45:41 Did I just answer my own question, correctly? 18:46:11 tswett: It adds an invariant. 18:46:19 -!- Ngevd has quit (Ping timeout: 244 seconds). 18:46:24 Okay. Which invariant does it add, and what is the effect of that invariant? 18:46:43 alwaysSucceeds adds a new invariant that must be true when passed to alwaysSucceeds, at the end of the current transaction, and at the end of every subsequent transaction. If it fails at any of those points then the transaction violating it is aborted and the exception raised by the invariant is propagated. 18:47:06 Can you give an example? 18:47:07 So once you do (alwaysSucceeds action), that action must result in true upon execution when passed to alwaysSucceeds, 18:47:11 at the end of the current transaction, 18:47:14 and at the end of every subsequent transaction; 18:47:22 if this is ever not the case, then the transaction in which it is violated is aborted. 18:47:27 -!- ais523 has joined. 18:47:38 tswett: Oh, the invariant seems to be represented as a computation which throws an exception if the invariant is violated. 18:47:46 So e.g. alwaysSucceeds (readTVar mustAlwaysBeTrue >>= guard). 18:48:19 So I can do something like alwaysSucceeds (hey make sure this one variable is equal to five), and then any transaction that sets it to not five will fail? 18:48:31 Yes. 18:48:39 Sounds simple enough. 18:48:51 -!- Ngevd has joined. 18:49:15 What does check do? Nothing if it's true, and failure if it's false? 18:49:21 Back 18:49:23 check :: Bool -> STM a 18:49:23 check b = if b then return undefined else retry 18:49:24 #endif 18:49:30 Seems to be redundant with the standard "guard" function. 18:49:30 Awesome. 18:49:38 * elliott has used guard for that in the past. 18:50:15 I did not know of those Haskell programs but it seem it can be used for sure, it might be useful in some cases, probably. 18:50:59 Not much of a "Haskell program", it's implemented in GHC internal s:P 18:51:06 s/internal s:/internals :/ 18:51:10 I suppose GHC is a Haskell program, though :-) 18:51:26 elliott: STM doesn't have a custom definition of "fail", I don't think 18:51:39 Or hang on 18:51:40 ?ty guard 18:51:41 forall (m :: * -> *). (MonadPlus m) => Bool -> m () 18:51:43 Right, never mind 18:51:45 Right. 18:51:52 Deewiant: (It annoys me that STM doesn't have a custom definition of fail.) 18:51:54 I want to be able to write 18:51:55 do { 18:52:00 Just x <- readTVar foo; 18:52:01 ... 18:52:01 } 18:52:05 Yes, I suppose GHC is a Haskell program. 18:52:11 It annoys me that Monad still has fail 18:52:12 It makes perfect sense, declaratively :P 18:52:20 Deewiant: That's probably never going to change ever. 18:52:22 But true, that could be useful 18:52:28 There's no way to fix that in a backwards-compatible manner. 18:52:30 Just switch to Coq. 18:52:33 Deewiant: Obviously the reason is for use with do-notation. 18:52:42 zzo38: It didn't use to be the case 18:52:50 It was added because newbies got confused at MonadFail constraints appearing 18:52:51 zzo38: Just make do blocks have MonadFail m => m a type 18:52:53 If they use fail 18:52:58 Relatedly: Newbies ruined Haskell 98 18:53:00 Yeah, damn newbies. 18:53:02 Agreed 18:53:04 I think they were even imagined newbies. 18:53:09 Deewiant: Yes that is one way. 18:53:31 Deewiant: Did you know that seq was in a type class previously??? And there was a Void type???? 18:53:35 Hey, monad comprehensions are on the way back (right?) 18:53:40 So maybe we'll get there again 18:53:43 Yes, they're in latest GHC release. 18:53:48 Deewiant: Oh, and ... what else was in... 18:53:51 Deewiant: IIRC (++) was Monoid 18:53:58 Or at least some common now-monomorphic function was 18:54:01 Maybe it was map 18:54:05 Maybe both :-) 18:54:13 http://www.cs.auckland.ac.nz/references/haskell/haskell-report-1.4-html/ 18:54:18 Another way is to make up a class for DoNotation which includes the stuff for dealing with do-notation directly. And then have default instances, that you can use that. 18:54:22 elliott: (++) was MonadPlus 18:54:23 Deewiant: Basically we should just roll back to that release, add hierarchical modules, update base and call it a day. 18:54:32 elliott: And yes, map was Functor 18:54:38 Deewiant: Right. So much better. 18:54:49 Deewiant: I wonder if [a, b, c] was :: (MonadPlus m) => m a 18:54:54 It would only make sense 18:55:18 ?hoogle strict 18:55:18 module Control.Monad.RWS.Strict 18:55:19 module Control.Monad.ST.Strict 18:55:19 module Control.Monad.State.Strict 18:55:21 Deewiant: My favourite thing about 1.4 was all the standard monadic combinators were implemented with monad comprehensions 18:55:23 ?ty strict 18:55:23 Not in scope: `strict' 18:55:25 strict? 18:55:29 class Eval a where 18:55:29 seq :: a -> b -> b 18:55:29 strict :: (a -> b) -> a -> b 18:55:30 strict f x = x `seq` f x 18:55:35 Ah, yes. 18:55:40 Deewiant: That's dollar sign exclamation mark. 18:55:56 Ah, yes. 18:56:07 data a -> b -- No constructor for functions is exported. 18:56:07 data a -> b = Function (Ptr Instruction) 18:56:09 ?index ($!) 18:56:09 Prelude 18:56:31 -- right-associating infix application operator (useful in continuation- 18:56:31 -- passing style) 18:56:32 ($) :: (a -> b) -> a -> b 18:56:38 ( ) (Function ptrInstruction) x = [asm| push x; jmp $(ptrInstruction) |] 18:56:40 Yes, continuation-passing style indeed. 18:56:42 -!- nooga has quit (Ping timeout: 260 seconds). 18:56:53 Deewiant: heh 18:56:59 Deewiant: Well, it is :-P 18:57:11 Did Cont not exist back then? I guess not 18:57:16 data Int = minBound ... -1 | 0 | 1 ... maxBound 18:57:30 data Double 18:57:30 Aww, they should have tried to pseudo-enumerate it. 18:57:43 The definitions 18:57:44 -- of enumFrom and enumFromThen allow floats to be used in arithmetic 18:57:44 -- series: [0,0.1 .. 1.0]. However, roundoff errors make these somewhat 18:57:44 -- dubious. 18:57:46 Somewhat dubious indeed 18:58:00 @let foo = [1,3..10] 18:58:01 Defined. 18:58:10 > (length foo, length (map (/10) foo)) 18:58:12 (5,6) 18:58:22 * elliott thinks he already showed Deewiant that one. 18:58:38 I don't think you did, but I'm quite aware of the issue. 18:58:48 Deewiant: Conal did that one. 18:59:00 Deewiant: (He actually didn't know of the issue until a few weeks ago when people he was teaching Haskell to ran into it) 18:59:17 Deewiant: The lack of MR is to blame for that one, though. 18:59:24 As well as defaulting but that goes without saying 18:59:30 I've known of the issue for quite some time. :-P 18:59:38 We should get rid of defaulting. 18:59:40 And yeah, it sucks. 18:59:44 Umm, probably not. 18:59:50 Deewiant: Why not? 18:59:53 Deewiant: OK, for interactive use. 19:00:06 Deewiant: But I use -Wall -Werror so I don't get to use defaulting, and I literally never have problems with that. 19:00:07 For interactive use and for short one-off programs 19:00:19 Short one-off programs shouldn't rule the language :P 19:00:48 Deewiant: "default" with no types could be standardised to turn defaulting on :-P 19:00:52 (Also, -Werror?) 19:01:02 That could work :-P 19:01:20 (Also, -Werror?) 19:01:32 Deewiant: I turned it on to clean up Shiro and haven't broken the habit since 19:02:19 Deewiant: It's better than it is in C :P 19:02:53 It slows down debugging cycles :-P 19:03:30 Deewiant: It shortens them by letting me fix bugs without running anything 19:03:46 No, that's -Wall, -Werror doesn't help you there 19:04:24 Deewiant: Except for all the warnings you decide don't need fixing because they're not applicable in this case, thus making you start automatically ignore warnings 19:04:32 Okay, suppose you run x <- newTVarIO 'a'. 19:04:36 Well, that's your problem :-P 19:04:40 (Yeah, that's one hundred percent a Haskell statement.) 19:04:55 I never "automatically ignore warnings" and I find it strange that people do 19:05:10 And then you run atomically (do writeTVar x 'b'; writeTVar x 'a'), and meanwhile, you run readTVarIO x. 19:05:15 Deewiant: Because you either ignore warnings, or get bothered by the irrelevant ones every single time. 19:05:20 Is it possible that the second of those things will return 'b' instead of 'a'? 19:05:59 Warnings don't survive very long so it's not like there's many an "every single time" 19:06:23 tswett: Is that a question about STM semantics or about readTVarIO semantics 19:06:33 readTVarIO == atomically . readTVar 19:06:38 > (length foo, length (map (/10) foo), length (map (/10) (map (/10) foo))) 19:06:39 (5,6,6) 19:06:45 tswett: So no, there is no chance. 19:06:51 tswett: STM provides no backdoors. 19:08:24 So I guess the second thread reads x, and then checks to make sure nobody has written to x "concurrently", and, if so, tries again? 19:08:32 Working on Uniquode 19:08:46 tswett: Like I said, the "retry" is just a model. 19:08:55 Yes, but I'm asking about that model. 19:09:14 tswett: You can reason about STM as if it was sequential execution. 19:09:25 tswett: Oh, the (readTVarIO x) could return 'a', yes. 19:09:26 Erm 19:09:27 Right 19:09:27 -!- nooga has joined. 19:09:33 tswett: If the variable started with 'x' 19:09:36 Then it could return 'x' too. 19:09:39 But that's obvious. 19:09:43 Right. 19:09:54 I guess sequential execution is a really obvious way to think about this. 19:10:07 You can also think about it as "atomically" grabbing an exclusive lock over the entire system. 19:10:13 elliott: Solaris ls uses threads. 19:10:15 Which is the same thing :P 19:10:20 Gregor: SO FAST 19:10:31 Gregor: Does it, like, sort with parallel mergesort? 19:10:40 HellifIno 19:10:45 I just know it depends on pthreads :P 19:10:48 Gregor: It was a joke :P 19:10:54 Gregor: I find it plausible that Solaris libc depends on pthreads 19:10:56 SO IS YOUR FACE 19:11:04 So if I do atomically (do readTVar x; hey make sure x is equal to 5; writeTVar x 6), will that transaction just kinda hang around until x becomes 5, and then replace it with 6? 19:11:08 Unless pthreads depends on libc I guess :P 19:11:26 tswett: It'll block until x becomes 5, yeah. 19:11:35 Will atomically return before then? 19:11:36 tswett: Or, if we're enforcing PURE STRICT MODEL THINKING: It busyloops until x becomes 5 :P 19:11:46 tswett: No; that's why it's called "atomically". 19:11:53 * tswett nods. 19:12:04 tswett: You can of course spawn it off in a thread. 19:12:09 That's just (forkIO . atomically). 19:12:19 (In GHC, that's a lightweight thread.) 19:12:30 (GHC runs lightweight threads in a few OS threads.) 19:12:38 (You may already know this.) 19:12:58 And is there, by chance, any way to save all the relevant state to disk at regular intervals? 19:13:11 What should * do in Uniquode? 19:13:37 Ngevd: it should extend the private use areas. 19:14:36 tswett: Well, you could fork off a thread that does "atomically { x <- readTVar blah; y <- readTVar bluh; ... return MyStateRecord { foo=x, bar=y, ... } }" periodically and writes that to disk. That isn't very nice, though. (You could define a wrapper library that looks like "newTVar :: (Serialise a) => a -> STM (TVar a)" and adds it to an internal list, and uses existentials etc. to avoid actually listing out every variable there.) 19:14:56 That doesn't quite give you the D in ACID, because of course the program could crash before that serialisation happens, but it's not bad, and the wrapper library would make it seamless. 19:15:06 * tswett nods. 19:15:17 tswett: http://hackage.haskell.org/package/acid-state offers full ACID transactional storage of standard Haskell values, with on-disk persistence. 19:15:26 tswett: But it has some limitations, like you have to define transactions upfront. 19:15:36 And they can't take any parameters that aren't serialisable, for obvious reasons (it's based on log storage). 19:15:39 Erm, not log-storage. 19:15:41 But literally storing a log :P 19:15:54 An *actual log*. 19:15:59 Yes. Made out of wod. 19:15:59 wood. 19:16:04 Got it. 19:16:13 Just like trees are made out of paper. 19:16:20 Do they have wood over there? 19:16:28 In England? No. 19:16:31 * tswett nods. 19:16:34 tswett: you can buy it at petrol stations 19:16:40 also, from lumber merchants 19:16:45 depending on whether you want to burn it or make furniture out of it 19:16:47 So all of the wood there is imported. 19:16:47 We import it from the middle east 19:17:03 And Russia 19:17:04 tswett: there are some areas called "forest" that aren't actually forests 19:17:10 there are also some actual forests, though, too 19:17:21 although mostly just little ones nowadays 19:17:28 ais523: what are they? Just sort of regions that contain a bunch of places marked "tree"? 19:17:36 And are all of the actual forests imported, too? 19:17:36 most of the trees in the UK are planted deliberately 19:17:43 tswett: Piles of paper. 19:17:49 elliott: ah. 19:18:04 So do you have to manufacture paper there, or is the natural forest paper enough for all your needs? 19:18:10 And does it grow to size, or do you have to cut it? 19:18:21 paper's nearly always done from "managed forests" 19:18:22 tswett: It doesn't grow on trees, you know. 19:18:28 which are just bunches of pine trees being farmed 19:18:44 there's a little logo saying Forest Stewardry Council on it 19:18:54 to reassure people that it wasn't made from rainforests or something stupid like that 19:19:10 (incidentally, throughout this conversation, I've been serious and elliott's been joking) 19:19:22 Really??????????????????????????? 19:19:26 * tswett writes this down: British trees all say "Forest Stewardry Council" on them, except the ones imported from rainforests. 19:19:33 tswett: as for the areas called "forest" which aren't, they're places which were forests once but aren't any more 19:19:39 Also, OpenIndiana's echo command appears to output by a series of wputchars. 19:19:51 And I was talking about oil 19:20:15 elliott: now, that's too many question marks. The limit is nine. 19:20:22 Gregor: does it convert what it echos between Unicode normalization forms? that'd be hilarious 19:20:45 ais523: I choose not to find the answer to that question :P 19:21:16 -!- tiffany has joined. 19:22:23 Gregor: You gotta be joking. 19:22:51 #defineexit(a)flushb(); return (a) 19:22:53 Gregor: Holy shit... 19:24:16 I don't like that definition can you write this instead: return (flushb(),(a)) would this even work, and would that one work too 19:24:20 elliott: Best part of this completely pointless project is discovering just how retarded Solaris is :P 19:24:47 elliott: Where's that 19:25:08 Deewiant: echo.c 19:25:25 http://www.google.co.uk/url?sa=t&source=web&cd=2&sqi=2&ved=0CCkQFjAB&url=http%3A%2F%2Fcs.wmich.edu%2F~trthomps%2FClasses%2FCS%25202240%2Fsh_src%2Fheirloom-sh-050706%2Fecho.c&ei=EYGcTo7wNdSzhAeBkaGLBA&usg=AFQjCNHHVhYMfSdbCg2o1lwZmN_MOdAt4Q&sig2=ARvlnfObEYkTXCFs5ciiew 19:25:29 GOOOGLEEEE 19:25:31 oh hmm 19:25:39 it has a comment involving opensolaris but might not be opensolaris 19:25:41 http://cs.wmich.edu/~trthomps/Classes/CS%202240/sh_src/heirloom-sh-050706/echo.c 19:25:43 aha, wait, http://cvs.opensolaris.org/source/xref/onnv/onnv-gate/usr/src/cmd/sh/echo.c 19:25:46 it is 19:25:49 Deewiant: http://cvs.opensolaris.org/source/raw/onnv/onnv-gate/usr/src/cmd/sh/echo.c 19:26:01 Heh, nice 19:26:21 what does prc_buff do anyway? 19:26:38 I don't want to know 19:26:41 there is an mbtowc call in there, anyway 19:26:44 which is fun 19:27:18 I wurve Solaris :P 19:27:35 ais523: http://cvs.opensolaris.org/source/xref/onnv/onnv-gate/usr/src/cmd/sh/print.c#208 19:27:51 Writes to a buffer, evidently 19:28:04 So where's the ncurses part :P 19:28:32 http://cvs.opensolaris.org/source/xref/onnv/onnv-gate/usr/src/lib/libcurses/ ? 19:28:43 Solaris and Mac OS X are collectively a great reminder of why the UNIX brand name is not something to be proud of :P 19:30:49 Deewiant: Also, OpenIndiana's echo command appears to output by a series of wputchars. 19:32:11 I thought wputchar was like a wide putchar 19:32:47 curses would have waddch 19:32:51 oh, darn :( 19:33:00 they just /look/ like curses names 19:33:01 flushb too 19:33:10 wrefresh 19:33:48 Gregor: Curses echo: the best? 19:34:03 echochar(3X) 19:34:31 hmm, did people here see the Proggit post about how Outlook can be made to try to open a URL, without permission, on the UI thread? 19:34:40 Yes 19:34:53 yes 19:35:23 that worries me, especially the bit where MS don't consider it a security bug 19:35:29 but just a regular bug 19:36:00 Gregor: How come jslinux is so much faster than jsmips 19:36:56 -!- GreaseMonkey has joined. 19:41:49 -!- oerjan has joined. 19:46:39 ais523: OK, Python has the most ridiculous thing ever 19:48:06 the module of silly walks 19:48:15 oerjan: No: gc.garbage 19:48:19 A list. 19:49:23 elliott: Uhh, it isn't. 19:49:31 Gregor: It totally is. 19:49:43 (I suspect the answer is "Bellard" :P) 19:49:50 a linked list of garbage is a nice way to do refcounting 19:50:26 except python wants everything to be freed immediately, doesn't it 19:50:48 elliott: I think the perceived difference in time is because my fork is slow. 19:50:55 Gregor: Fair enough. 19:51:05 elliott: Actual process execution is faster. 19:51:09 oerjan: gc.garbage¶ 19:51:09 A list of objects which the collector found to be unreachable but could not be freed (uncollectable objects). By default, this list contains only objects with __del__() methods. [1] Objects that have __del__() methods and are part of a reference cycle cause the entire reference cycle to be uncollectable, including objects not necessarily in the cycle but reachable only from it. Python doesn’t collect such cycles automatically because, in genera 19:51:09 l, it isn’t possible for Python to guess a safe order in which to run the __del__() methods. If you know a safe order, you can force the issue by examining the garbage list, and explicitly breaking cycles due to your objects within the list. Note that these objects are kept alive even so by virtue of being in the garbage list, so they should be removed from garbage too. For example, after breaking cycles, do del gc.garbage[:] to empty the list. 19:51:11 It’s generally better to avoid the issue by not creating cycles containing objects with __del__() methods, and garbage can be examined in that case to verify that no such cycles are being created. 19:55:00 heh, I can't figure out if that's an argument for or against refcounting 19:55:15 (Java decided that finalizers were a bad idea, incidentally, in its solution to the same problem) 19:55:56 Finalizers are a bad idea for so many other reasons too. 19:56:00 this is, of course, not a problem in Feather 19:56:10 for oh so many reasons 19:56:30 well, unless you allow retroactive self-modification inside a destructor 19:56:35 and why would you do that? 19:57:31 Gregor: Weeell, finalisers are nice for resource management 19:57:56 Yeahyeah, I'm gettin' around to merging GGGGC's finalizers into the Fythe branch :P 19:58:25 how in the world does feather ever call destructors... 19:58:50 ais523: Why not? 19:59:13 Gregor: Good, then maybe I can start working on bigints again :P 20:05:11 -!- Ngevd has quit (Quit: Leaving). 20:05:49 -!- Ngevd has joined. 20:06:18 Deewiant: err, because I don't want to think about the implications 20:06:43 That's a bit of a cop-out 20:06:47 Let the users figure it out! 20:06:59 ais523: of course you might want to do that 20:07:05 ais523: to enforce invariants 20:07:29 hmm, am I being trolled? 20:07:32 ais523: say, if bad_thing then canary_ref := () else nop 20:07:45 canary_ref contains the sole reference to an object whose destructor goes back in time and fixes things 20:07:50 say, changes the result of a call to the "amb" operator 20:08:03 then why use destructors rather than just method calls? this isn't Reaper 20:08:21 also, you can't set canary_ref 20:08:21 ais523: why not? 20:08:28 to the first one 20:08:42 I don't see why it would cause problems to allow retroactive self-modification in destructors 20:08:43 you can only modify it so that it had the value () all along 20:08:47 it would merely cancel the destruction 20:08:56 elliott: it wouldn't; the problem then is to determine whether the destructor should be run or not 20:09:04 which is the problem the original discussion was about 20:09:10 if you make destructors pure, it's not a problem 20:09:11 ais523: that's easy 20:09:20 (note: pure destructors are useless, right?) 20:09:21 ais523: you rewind the state, modify it, and run the program 20:09:28 if it runs the destructor, then it runs 20:09:32 -!- nooga has quit (Ping timeout: 248 seconds). 20:09:32 if not, it doesn't, and it's a paradox 20:09:53 -!- quintopia has joined. 20:10:05 ais523: (obviously, this is fixed-pointed, so the destructor has to end up doing nothing) 20:10:12 ais523: (in the limit) 20:10:14 I think 20:10:17 no, you have Feather's time-travel model wrong there 20:10:32 things always have effects, but are allowed to not have causes from the same timeline 20:10:33 ais523: I wasn't saying that's what actually happened 20:10:35 there's a sort of meta-time thing 20:10:43 ais523: I was saying that's how you determine whether it runs or not 20:10:45 where each timeline can affect the timeline after it 20:10:48 elliott: oh, ouch 20:10:54 it's been such a long time, hasn't it 20:11:00 raii (Wiz Elf Mal Cha), 10794 points, killed by a raven, while fainted from lack of food 20:11:02 relevant, I guess? 20:11:06 quintopia: eh? 20:11:10 quintopia: why were you k-lined? 20:11:11 ais523: rip raii 20:11:24 since i was k-lined. too busy to solve that problem until now. 20:11:53 ah, no explanation? 20:11:54 quintopia: why did it happen 20:11:58 ais523: enjoy your spam 20:12:10 I should introduce you to kerio some time 20:12:16 actually, probably I shouldn't 20:12:19 I think they were in the quotes you linked 20:12:35 I linked quotes? 20:12:48 ais523: yep, in an attempt to prove that our qdb was awful 20:12:58 theirs is worse; the top quote quality is better, but the average quote quality is lower 20:13:14 elliott: operating a tor exit node on the IP address i was connecting from. just had to change my hostname to get back on. 20:13:42 I thought freenode allowed Tor 20:13:52 yep 20:14:01 I guess maybe you can connect with Tor, but not be an exit note yourself? 20:14:10 since they list a hidden service 20:14:49 oh, right, something irrelevant that happened in RL just reminded me of a /really really bad/ antipattern I saw in student code today 20:15:07 ais523: anyway, why introduce me to kerio 20:15:12 Antipattern? 20:15:32 approximately, it was for(int i=0;i where the loop is meant to work generally for all n >= 3 20:15:46 and will never be called with n < 3 20:15:59 also, f() wasn't a function, but a block statement (not a massively long one, but still) 20:16:05 ais523: that's not an antipattern, that's just... a bug 20:16:10 at first I thought it was a for-case, then I realised it was even worse 20:16:15 it doesn't handle n>8 20:16:18 elliott: indeed 20:16:20 oh, wait 20:16:24 ouch, it does 20:16:29 no it doesn't 20:16:29 Ngevd: like a design pattern, except it causes huge explosions on contact with software 20:16:34 ais523: yes it does; it just doesn't do anything past 8 20:16:35 it does nothing for n>8 20:16:39 ais523: oh, that's not intentional? 20:16:39 heh 20:16:43 yep, not intentional 20:16:52 they just got bored writing cases, I think 20:17:21 oh, it wasn't copy-pasted either, I could tell as all the cases were indented differently 20:17:24 So what's actually supposed to happen there 20:17:33 Start i from 3 and call f() every time? 20:18:17 Deewiant: it's equivalent to if (n >= 3 && n <= 8) for (int i = 0;i the n++ was a typo, it should have been i++ 20:18:33 typo I made, that is, not typo in the original code 20:18:34 Yeah, I know what that does 20:18:38 But I mean, what is it meant to do 20:18:48 it's meant to do for (int i = 0;i Or should the correct code not involve such a loop at all 20:18:51 Deewiant: it's equivalent to if (n >= 3 && n <= 8) for (int i = 0;i Okay 20:18:57 wait, nm 20:19:07 ais523: so what code even is this 20:19:14 elliott: homework, it's not particularly useful code 20:19:21 ais523: oh 20:19:26 I was thinking it was something you were maintaining 20:19:27 it was meant to exit on n < 3, and otherwise do f n times 20:19:37 elliott: haha, that would be really bad 20:19:52 and I'd have refactored it by now 20:20:16 it seems rather worse than for-case, where at least I can see how it happens even though it's stupid 20:21:10 Ngevd: an antipattern is a method of writing code that's been seen often enough in the wild to have a name, but makes no sense 20:21:18 Oh, okay 20:21:20 and makes the code less maintainable 20:22:05 In software engineering, an anti-pattern (or antipattern) is a pattern that may be commonly used but is ineffective and/or counterproductive in practice. 20:22:19 the page has a list of common antipatterns 20:22:39 some of which I don't know of 20:33:48 -!- tiffany has quit (Quit: Leaving). 20:43:33 -!- tiffany has joined. 20:49:45 Is it just me, or is TMVar a semantically equivalent to TVar (Maybe a)? 20:51:06 tswett: Yes. That is how it is implemented. 20:51:14 tswett: Click the "source" link at the top-right of the page. 20:51:19 Everything is implemented on top of TVars. 20:51:24 tswett: BTW, you probably want to read http://research.microsoft.com/en-us/um/people/simonpj/papers/stm/stm.pdf. 20:51:36 It covers GHC's entire STM model and implementation. 20:51:46 (Well, not the details of the implementation.) 20:52:35 -!- nooga has joined. 21:03:04 Heylook, I'm running Linux binaries on Mac. 21:04:10 *gasp* 21:04:32 gelfload: The bestest. 21:04:50 :/ 21:11:04 Gregor, loader of gelfs 21:11:24 Gregor "gelfloader" Gregor 21:11:34 If you need to run the programs I wrote, you might be able to compile them yourself (that is, if it is a C program, Haskell program, etc) and run on any computer. The other one it is more difficult but it can probably be made. 21:15:21 You are an entity that can only make false statements. How can you convince an entity that believes everything you say that you can only make false statements? 21:15:48 (this is easy) 21:16:13 elliott: are you capable of making /every/ false statement? 21:16:27 yes, but not all of them 21:16:30 (finite number of statements only) 21:16:37 (but arbitrary (finitely-sized) statements) 21:16:39 if so, who cares about convincing people, just use your ability to solve major unsolved problems via binary search 21:16:43 by seeing which statements you can make 21:16:56 ais523: IT'S A RIDDLE :P 21:16:58 -!- Ngevd has quit (Quit: Leaving). 21:17:00 Yes, that is how you answer that question. 21:17:18 elliott: well, you see, once you've gone and solved a bunch of problems like that 21:17:27 it'll become obvious that you have some magic ability to sense truth values 21:17:36 hey quintopia, Phantom_Hoover, YOU DO IT INSTEAD 21:17:38 and then it'd become an issue of only-true versus only-false, which should be obvious 21:17:58 ais523: Dude, the other entity doesn't apply intuition. 21:18:04 I said "entity" not "person" :P 21:18:11 Yes. 21:18:16 Phantom_Hoover: waht 21:19:24 Phantom_Hoover: SOLV RIDLE 21:19:30 It's trivial :P 21:19:31 Candle. 21:20:26 You are an entity that can only make false statements. How can you convince an entity that believes everything you say that you can only make false statements? 21:20:27 (this is easy) 21:20:29 Phantom_Hoover: OSOSOEVLE,VE, 21:21:04 It's half ten; you have passed the threshold beyond which answers other than 'candle' will be provided. 21:22:37 Phantom_Hoover: You're even worse than ais523. 21:22:52 elliott: (just guessing) the answer is three, right? 21:22:53 elliott, what if I tell it two contradictory lies? 21:22:58 olsner: no. 21:23:03 damn. 21:23:04 Phantom_Hoover: Then it dies. 21:23:10 Phantom_Hoover: And you lose. 21:23:13 As does humanity. 21:23:23 Phantom_Hoover: what do gnomes often own in AceHack that they don't in vanilla? 21:23:49 Candles. 21:24:06 how did you guess? 21:24:29 Phantom_Hoover: What's an obsolete method of producing light? 21:24:35 Candles. 21:25:20 Phantom_Hoover: wrong, torches 21:25:35 elliott: what's an odd number? 21:25:44 ais523: Candles. 21:25:50 elliott: wrong, 5 21:26:11 ais523: Wrong, 523>. 21:26:13 Argh. 21:26:17 ais523: Wrong, 523. 21:26:35 elliott: the only acceptable answers are from 3 to 8 inclusive 21:26:43 Phantom_Hoover: Astronomers use supernovas of type 1a as standard what? 21:26:50 Candle! 21:27:29 no, candle_s_ 21:27:42 Phantom_Hoover: What did Mr. McCandless have none of? 21:28:01 Whisky. 21:28:17 The correct answer was candles. 21:29:55 And thus we get a glimpse into the true mind of a Scot like Phantom_Hoover: Candles, whisky, and nothing else. 21:29:56 provisional list of things that are not questions to which "Candles" is the correct answer: INTERCAL, the US national debt, manhole covers, this sentence 21:30:11 ais523: candles 21:30:13 elliott, what more does one need? 21:30:19 this list is incomplete; you can help by expanding it 21:30:37 :D 21:31:21 elliott: i can just imagine Phantom_Hoover going down the stairs of his huge castle in a nightgown carrying whisky and a candle. 21:31:34 ais523: you just made me realise that I have somehow internalised Wikipedia stock phrases 21:31:50 oerjan, I have the best castle. 21:32:00 elliott: so has everyone else; that's why the {{citation needed}} meme works 21:32:12 ais523: that's a rather more obvious one than the one you used 21:32:15 yep 21:32:15 he probably also has chains; he's a phantom, after all 21:33:22 ais523: everyone else {{who}} ? 21:33:57 i guess if it really is everyone, it's not technically a weasel word 21:35:06 "everyone"'s the opposite of a weasel word 21:35:11 ais523: huh, has {{citation needed}} always been that? 21:35:14 I thought that was a redirect to {{fact}} 21:35:17 it's only weaselish due to not being believable 21:35:22 but it seems to be the other wway around 21:35:35 elliott: that name's existed pretty much forever, but {{fact}} was the official name for ages 21:35:43 right 21:35:46 it was probably changed as part of the campaign to have long readable English official names for templates 21:35:56 on the basis that it doesn't matter which name's official anyway 21:35:58 heh 21:36:03 actually, I'm inclined to agree 21:36:08 it serves as documentation 21:36:25 ais523: This template was considered for deletion on 2006 July 1. The result of the discussion was nomination withdrawn on procedural technicality (and discussion was overwhelmingly in favor of keep). 21:36:31 haha 21:36:32 --[[Template talk:Citation needed]] 21:36:37 ais523: "overwhelmingly" italicised in original 21:36:46 Delete This template is the equivalent of an editor's markup on a rough draft. It litters many otherwise good articles on Wikipedia with ugly, unprofessional looking clutter that only serves to highlight the articles' defects to non-editors. No real encyclopedia would go to press with marks like this left in its articles. This is the type of thing that belongs on an article's talk page, not in the article itself. Template:fact should be deleted a 21:36:47 nd instances of its use should be replaced with appropriate discussions on the talk pages of the articles where it is used. dryguy 17:57, 1 July 2006 (UTC) 21:36:52 I'm sure /that/ went down well 21:37:02 elliott: a general rule of Wikipedia is that any sufficiently well-known non-article page will have been nominated for deletion 21:37:04 only five thousand million billion trillion occurrences to fix 21:37:31 as a corollary, in the case of a /really/ well known-page like the main page or AfD, it will actually have been deleted 21:37:48 ais523: I saw an AfD once for [[Adolf Hitler]], where the submitter argued that since Hitler was a bad man (they didn't say evil or anything, literally "bad") there shouldn't be an article on him 21:37:49 (the developers made the sandbox undeletable at one point, because someone deleting it crashed the servers) 21:37:51 as punishment, I guess? 21:38:18 ais523: hmm, why would that crash the servers? 21:38:28 ais523: because of people trying to edit a page that doesn't exist and that codepath not being optimised? 21:38:40 elliott: no, because it was trying to move all the edits to the sandbox ever from one db table to another 21:38:44 and /that/ codepath wasn't optimised 21:38:46 ais523: haha 21:38:59 ais523: I wonder how much space the history for the sandbox takes up 21:39:45 by the year 3000, the history for the sandbox will occupy most of the main landmass on planet Xygiton 5 21:40:03 I think the sandbox history was actually perma-deleted after that incident 21:40:07 rather than just moved to the archive table 21:40:28 evil revisionists! 21:42:03 oh right, after that happened they added a limit where pages with more than 5000 revisions couldn't be deleted 21:42:25 and someone tried to edit the main page 5000 times in order to make it undeletable (Wikipedians have a tendency to come up with "ingenious" workarounds like that) 21:42:33 and then the main page actually was deleted because they'd miscounted 21:42:39 and the devs got really really angry 21:42:49 huffin' and puffin' 21:43:14 pointing out how much server load it would be to spam 5000 edits into the main page of every Wikimedia wiki in every language 21:44:12 elliott: So have you stopped using partial functions 21:44:24 Deewiant: When 21:44:32 I usually avoid partial functions, and always have 21:44:41 Deewiant: yeah he's concentrating on beating his girlfriend now 21:44:53 elliott: I mean completely 21:45:04 Deewiant: Why would I do that 21:45:06 "div" is pretty useful 21:45:47 fromMaybe (error "b is zero") (a `tryDiv` b) 21:45:58 Just musing based on that article in /r/haskell 21:45:58 Deewiant: Do you do that 21:46:13 Deewiant: Right, I don't think anyone doesn't use partial functions, and I don't know why you think I would :P 21:46:20 Things like head are pretty egregious; div isn't 21:46:25 I just saw your comments so I figured I'd ask 21:46:32 What about things like head, then? 21:46:51 Well, head's dubious enough that any use of it should probably have an explanatory error message 21:47:02 Something like div is benign 21:47:20 Although if we got a Nat1 where (0 :: Nat1) was a compile time failure, I'd be all for div :: (Integral a) => a -> Nat1 -> a 21:47:23 D'oh, I'm a bad person then 21:47:26 head /etc/passwd -n 1 || echo "there are no users help" 21:47:29 Deewiant: When do you use head 21:47:33 readOct' = fst . head . readOct 21:47:34 actually, I've got the args backwards there, right? 21:47:41 head -n 1 /etc/passwd || echo "there are no users help2 21:47:44 s/2/"/ 21:47:47 Deewiant: Here's what I normally do for read: 21:48:12 Deewiant: case reads str of [(n,"")] -> n; _ -> failSomehow 21:48:16 Deewiant: I take it this is in your UI 21:48:26 In which case you should probably do the general "print error, display usage" thing 21:48:29 It doesn't matter for quick hacks obviously 21:48:36 It's used after parsing octal digits with trifecta 21:48:48 So it "shouldn't fail ever" 21:48:48 Deewiant: Then why do you need to turn it into a string 21:48:52 You can construct a parser that reads octal 21:48:59 I need to turn it into a number 21:49:08 Deewiant: And?d 21:49:10 s/d// 21:49:20 Deewiant: To parse octal: Read octal digit, read octal number, combine the two appropriately. 21:49:27 :: Parser Integer 21:49:34 And "combine the two appropriately" is implemented in Numeric.readOct 21:49:52 Deewiant: No, combining the two is as simple as 21:50:02 d*8 + r 21:50:22 d*8 + digitToInt r 21:50:29 Um 21:50:30 d is the digit here 21:50:37 Unless your octal is backwards 21:50:45 Oh err 21:50:52 Right, you have to do it backwards 21:51:01 That's left-recursive :( 21:51:07 Deewiant: But anyway, just write your own as a Parser :P 21:51:10 Or don't, but that's what I'd do 21:51:21 It is a Parser, it just uses readOct 21:51:29 that is a rather silly thing to roll your own though... 21:51:29 Instead of a hand-written foldl 21:51:32 Deewiant: Gah 21:51:36 Deewiant: It wouldn't be a foldl 21:51:48 Deewiant: Don't read many octal digits and then combine them 21:51:53 Do it step-by-step 21:52:11 @hoogle chainl 21:52:12 Text.Parsec.Combinator chainl :: Stream s m t => ParsecT s u m a -> ParsecT s u m (a -> a -> a) -> a -> ParsecT s u m a 21:52:12 Text.ParserCombinators.ReadP chainl :: ReadP a -> ReadP (a -> a -> a) -> a -> ReadP a 21:52:12 Text.ParserCombinators.Parsec.Combinator chainl :: Stream s m t => ParsecT s u m a -> ParsecT s u m (a -> a -> a) -> a -> ParsecT s u m a 21:52:18 See 21:52:19 Tada 21:52:43 @hoogle chainl1 21:52:44 Text.Parsec.Combinator chainl1 :: Stream s m t => ParsecT s u m a -> ParsecT s u m (a -> a -> a) -> ParsecT s u m a 21:52:44 Text.ParserCombinators.ReadP chainl1 :: ReadP a -> ReadP (a -> a -> a) -> ReadP a 21:52:44 Text.ParserCombinators.Parsec.Combinator chainl1 :: Stream s m t => ParsecT s u m a -> ParsecT s u m (a -> a -> a) -> ParsecT s u m a 21:52:47 How is that different from a foldl :-P 21:53:24 Deewiant: Because you avoid the partiality? 21:53:26 Anyway it's not appropriate in this particular case as I know exactly how many characters I've got 21:53:31 How is foldl partial? 21:53:37 Deewiant: readOct is 21:53:38 Deewiant: And it also uses less memory, presumably 21:53:43 Because many has to keep them all in memory 21:54:24 At this point I was comparing foldl to chainl, not readOct 21:54:31 With a foldl it wouldn't be partial 21:55:32 ais523, when did you start being slavishly legal? 21:55:46 Phantom_Hoover: there was a time when I wasn't? 21:55:58 Deewiant: Right 21:55:59 perhaps there was, but I don't really remember it well 21:56:20 ais523, well, I mean, did you never sing Happy Birthday at parties? 21:56:58 Phantom_Hoover: it was a while before I discovered that that was illegal, and I'm still not sure on the matter 21:57:20 actually, we used to sing it to the tune of "good morning to you", because that's what was in the book of piano tunes we bought 21:57:24 (it differs by one note) 21:57:30 elliott: So it doesn't seem like chainl could help me here, and writing the foldl probably wouldn't simplify this any 21:57:45 Deewiant: Oh well, sucks to be you then 21:58:31 I can see you're interested :-) 21:58:58 ais523, I don't think that makes it legal? 21:59:21 Phantom_Hoover: it does, because IIRC Happy Birthday To You was a modification of Good Morning To You in the first place 21:59:44 oerjan: How does (forever $ a `catch` b) parse 21:59:50 Deewiant: I am, but you haven't given sufficient details 22:00:24 > (0$0 `catch`) 22:00:25 The operator `System.IO.Error.catch' [infixl 9] of a section 22:00:25 must have... 22:00:45 as forever (catch a b), i'd assume 22:01:02 oerjan: thanks 22:01:10 elliott: a <- octDigit; b <- optional octDigit; c <- optional octDigit; return (plzCombine a b c) 22:01:25 Deewiant: Dude, just unroll it 22:01:42 Deewiant: (a*16 + b*8 + c) 22:02:05 I don't like magic numbers :-P 22:02:11 elliott: technically, it has to be that or be a parse error (if there were an infixl? 0 `catch`) 22:03:03 Deewiant: Oh come on 22:03:10 oerjan: Right 22:03:37 oerjan: What about 22:03:45 forever $ B.hGetLine h >>= writeChan lineChan `catch` ignoreEOFError 22:04:15 forever (B.hGetLine h >>= (writeChan lineChan `catch` ignoreEOFError)) 22:04:20 oerjan: darn, you're right :( 22:04:22 * elliott parenthesises more 22:04:28 :P 22:04:59 `catch` presumably has no fixity defined, so defaults to infixl 9 22:05:01 ​/home/hackbot/hackbot.hg/multibot_cmds/lib/limits: line 5: exec: catch`: not found 22:05:35 it is not _that_ common to define fixities of alphanumerics 22:05:45 oerjan: well sure, but `catch` is common :P 22:05:54 Ooh, I can avoid it if I do forever . handle ignoreEOFError. 22:05:58 oh, wait 22:06:00 I don't even want to ignore it 22:06:01 I want to kill the thread 22:06:04 the division operators excepted 22:06:20 -!- Timwi has joined. 22:06:31 hmm, is there really no simpler way of doing myThreadId >>= killThread... 22:07:09 elliott: Call the continuation! 22:07:23 shachaf: THX SUPER HELPFUL :P 22:07:31 Wait, can't you just throw an exception? 22:07:40 elliott: what about simply not using catch at all? :P 22:07:51 throw ThreadKilled 22:08:06 doesn't that kill the thread 22:08:18 shachaf: Well yes but that's awful too. 22:08:22 oerjan: Yeah, but it prints an ugly error message. 22:08:26 I guess I'll just define my own loop structure. 22:08:29 kill -9 $$ 22:08:30 oh wait 22:08:34 (forever $ (B.hGetLine h >>= writeChan lineChan)) `catch` ignoreEOFError 22:08:35 that was easy 22:08:40 and I can reduce parens 22:08:44 * shachaf isn't even sure what elliott was trying to do. 22:09:03 shachaf: Quit the thread silently on EOF. 22:09:11 handle ignoreEOFError . forever $ B.hGetLine h >>= writeChan lineChan 22:09:12 Tada. 22:10:09 bewdiful 22:10:28 oerjan: I SENSE SARCASM 22:11:16 shachaf: oerjan: OK, you have to admire this GHC error for me. 22:11:18 :t forever 22:11:19 forall (m :: * -> *) a b. (Monad m) => m a -> m b 22:11:23 wom 8 22:11:25 forever $ readChan lineChan >>= B8.putStrLn 22:11:29 /home/elliott/Code/mergeln/mergeln.hs:19:3: 22:11:29 Warning: A do-notation statement discarded a result of type GHC.Prim.Any. 22:11:29 Suppress this warning by saying "_ <- ($) 22:11:29 forever (>>=) readChan lineChan B8.putStrLn", 22:11:29 or by using the flag -fno-warn-unused-do-bind 22:11:34 oerjan: shachaf: I just... 22:11:38 I am literally speechless. 22:11:44 elliott: Ooh, give it to #haskell 22:11:53 They were just talking about it. 22:12:02 elliott: D: 22:12:28 elliott: is this even in a do block? 22:12:41 coppro: yes 22:12:49 shachaf: They were? 22:13:07 elliott: Well, it might not've been "just" 22:13:21 elliott: hm it's because the forever result defaults to Any rather than (), presumably 22:14:34 oerjan: yeah 22:15:03 but logically, Any should be just as discardable 22:15:21 oerjan: apparently it's probably a bug 22:15:50 no it's how it works when you default a type variable with no class restriction 22:16:00 oerjan: no, I mean the warning 22:17:04 well it would make sense to do something else, naturally. 22:17:54 -!- augur has quit (Remote host closed the connection). 22:21:34 i vaguely recall forever used to have a stricter type, then we noticed it didn't need one 22:22:46 although i guess if you are warning against discarding non-()'s in do, then it would make sense to restrict forever to have m () argument 22:23:06 oerjan: I want forever :: IO () -> IO () 22:23:38 Some people want when :: Bool -> IO a -> IO () 22:23:53 :t when 22:23:53 forall (m :: * -> *). (Monad m) => Bool -> m () -> m () 22:24:00 Deewiant: Some people are wrong 22:24:17 -!- Patashu has joined. 22:26:00 Some kind of whenFoo :: Bool -> IO a -> IO (Maybe a) might be nice 22:27:34 Timwi: You writing half my program drove me to actually bother writing mine, so thanks I guess :P 22:28:22 ? 22:28:24 I what? 22:28:48 Timwi: You wrote half that line-merging program in C# 22:29:00 Oooh 22:29:15 Well, no need to thank since you didn’t use any of it :-p 22:29:46 I don't know what the Haskell<->C# bridges are like. 22:29:48 -!- PatashuXantheres has joined. 22:33:08 -!- Patashu has quit (Ping timeout: 260 seconds). 22:38:18 -!- nooga has quit (Ping timeout: 244 seconds). 22:38:30 -!- ive has joined. 22:44:41 ?pl if isEOFError e then return () else throwIO e 22:44:42 (line 1, column 31): 22:44:42 unexpected " " 22:44:42 expecting variable, "(", operator or "else" 22:44:47 >_< 22:44:52 ?pl unless (isEOFError e) (throwIO e) 22:44:53 unless (isEOFError e) (throwIO e) 22:44:59 ?pl \e -> unless (isEOFError e) (throwIO e) 22:44:59 liftM2 unless isEOFError throwIO 22:45:05 Deewiant: Should I should I should I 22:45:13 As opposed to using guards :-P 22:47:16 liftM2 unless reads a bit strangely IMO :-P 22:47:43 Deewiant: I would use the Applicative operators 22:47:58 unless <$> isEOFError <*> throwIO 22:49:03 Yeah, I thought about that but honestly I might also just leave it pointed 22:49:17 Deewiant: Yeah, this is just distracting me from my Weird Bug :P 22:49:30 Deewiant: A conditional + return () just made me think. 22:49:40 Also, in general I don't like "unless" but that seems like an appropriate case 22:52:17 -!- ais523 has quit (Remote host closed the connection). 22:53:39 -!- pikhq_ has joined. 22:53:57 -!- pikhq has quit (Ping timeout: 255 seconds). 22:55:30 The <*> operation in Haskell does not seem to me entirely useful for most purposes, as far as I can tell. 22:56:21 But it can be used defining other things in terms of that, I suppose, including <* and *> are automatically figured out from that, I think 22:56:39 zzo38: it is most useful when chained as f <$> m1 <*> m2 <*> ... 22:57:13 OK. I have never used it like that. 22:57:20 it then replaces all the liftA* functions, including for sizes not predefined 22:57:22 zzo38: it lets you lift a function of arbitrary arity into the monad 22:57:27 well, the applicative :-) 22:57:29 e.g. 22:57:33 really useful in parsers: 22:57:45 MyData <$> subpart <*> anothersubpart <*> anothersubpart 22:57:54 And any monad forms an applicative, so that it can work; OK 22:58:06 Elliott'sData 22:58:20 Yes, my data. 22:58:21 elliott: O, that is its use. I have just used liftM2 a lot 22:58:36 zzo38: Yeah, I prefer the applicative operators, since you need fewer parens, and you don't have to specify the arity upfront 22:58:39 liftM2 = liftA2; liftA2 f x y = f <$> x <*> y 22:59:46 OK, I suppose you are correct and that is a use. I didn't know that before. 23:00:33 But I have written parsers in Haskell, using Parsec, and I have just used liftM2, sometimes liftM3, and often using *> and <* and <|> and <$> 23:04:40 And <$ is also useful 23:05:13 -!- sllide has quit (Ping timeout: 260 seconds). 23:11:23 zzo38: oh, <*> can also be useful directly if you have a prefix operator which you want to parse as a constructor applied to its argument. and we once found a use for <**> for parsing a similar postfix operator for an esolang 23:11:48 oerjan: hmm, I don't understand what you mean there 23:12:47 well say you have a Negate constructor, then you can parse as (char '-' *> Negate) <*> expr 23:12:48 oerjan: Can you give the specific example of that use of the <*> operator? 23:13:10 or similar 23:13:43 oerjan: O, like that. Do you mean: (Negate <$ char '-') <*> expr since the arguments to *> must be the same applicatives 23:13:55 oh, right 23:15:24 and the <**> example we had was something like ... <**> ((negate <$ char '-') <|> id) 23:15:46 where - was postfix and the result of the calculation was evaluated 23:16:10 pure id 23:16:22 ok 23:17:34 hm 23:17:38 @hoogle option 23:17:38 Text.Html option :: Html -> Html 23:17:38 Text.Parsec.Combinator option :: Stream s m t => a -> ParsecT s u m a -> ParsecT s u m a 23:17:39 Text.ParserCombinators.ReadP option :: a -> ReadP a -> ReadP a 23:18:26 perhaps option id (negate <$ char '-') would have been better 23:18:41 yeah 23:20:38 oerjan: Yes that might be it 23:28:37 Have I ever mentioned how confusing it is that the Bank of Scotland and the Royal Bank of Scotland are completely separate entities? 23:29:01 They are? 23:29:05 Yep. 23:29:16 Any common ancestry? 23:29:25 Not AFAIK. 23:31:31 Yeah, they're unrelated. 23:36:52 -!- derdon has quit (Remote host closed the connection). 23:42:08 oerjan: You should debug my code. 23:43:51 there's that word, "should". 23:44:22 enslaving civilizations. 23:45:13 oerjan: :D 23:45:15 Enslivilisations. 23:45:43 elliott, I would debug your code if I didn't have this disability preventing me from doing any kind of useful work. 23:46:01 Phantom_Hoover: It's called being a teenager HAHAHAHAHAHAHA 23:47:42 darn, i'm still a teenager? 23:48:37 oerjan: Yep 23:49:22 going on thirtytwoteen... 23:49:35 oerjan, no, you're a mathematician. 23:49:52 oerjan: You're really old, man. 23:50:33 ykgomlbihywmcaidttacrt 23:50:40 oerjan: wat 23:50:56 It's oldspeak. 23:51:07 I'll translate, I know a little more of the ways of the old than you. 23:51:11 you kids get off my lawn before i hit you with my cane and i don't think that anyone can read this. 23:51:31 Dammit oerjan. 23:51:48 ...i suppose i should have given you a chance. 23:52:09 but there's that word again. 23:52:59 :D