00:16:44 -!- ais523\unfoog has quit (Read error: Connection reset by peer). 00:18:46 -!- oklopol has quit (Read error: Connection reset by peer). 00:19:05 -!- oklopol has joined. 00:20:09 -!- Zuu_ has quit (Ping timeout: 244 seconds). 00:22:29 gah, the two people I was gonna talk to both quit at the same time 00:41:55 -!- augur has quit (Remote host closed the connection). 01:04:16 -!- derdon has quit (Remote host closed the connection). 01:13:18 -!- augur has joined. 01:28:43 -!- GreaseMonkey has joined. 01:28:44 -!- GreaseMonkey has quit (Changing host). 01:28:44 -!- GreaseMonkey has joined. 02:06:24 -!- nooga has quit (Ping timeout: 252 seconds). 02:27:02 -!- tiffany has quit (Quit: Leaving). 02:39:56 -!- slayerten has joined. 02:40:35 hi slayerten 02:40:37 `? welcome 02:40:39 Welcome to the international hub for esoteric programming language design and deployment! For more information, check out our wiki: http://esolangs.org/wiki/Main_Page 02:42:45 hi 02:42:48 3q 02:52:17 -!- slayerten has quit (Ping timeout: 240 seconds). 02:53:32 -!- slayerten has joined. 02:58:59 -!- slayerten has quit (Quit: Leaving.). 03:15:50 "Chili and basil give rise to its distinctive spiciness." 03:15:56 Yeah, when I think "spicy", I think "basil" 03:16:04 That spicy, spicy basil. 03:17:34 "Archive maintainers are encouraged to copy this 03:17:34 distribution to their archives outside the USA. Please get it from 03:17:34 ftp.gwdg.de; transferring this distribution from ftp.gnu.org (or any other 03:17:34 site in the USA) to a site outside the USA is in violation of US export 03:17:34 laws." 03:17:39 Wow, GNU offer a way to violate US export laws on demand. 03:17:45 Nobody outside the US download this file: http://ftp.gnu.org/gnu/glibc/glibc-crypt-2.1.tar.gz 03:18:24 It's them that violate the laws, right? 03:18:32 think so 03:18:36 i dunno 03:18:46 I might have just illegally exported it 03:18:57 heh 03:19:07 I think the burden is meant to be on the distributors, which is why everyone's paranoid about it 03:21:42 The USA has actually relaxed its export regulations since 200something. 03:21:46 2008? 2009? 03:22:06 Lesse what Wikipedia says ... 03:24:52 You have to notify the Bureau of Industry and Security. But that's all, there's no licensing or other restrictions, they just have to KNOWWWWWWWW. 03:25:05 Also it seems that for any given source release you only have to notify once. 03:25:13 (i.e. mirroring isn't an issue) 03:30:16 Heh 03:32:20 Also, you have the option of emailing them, or faxing AND mailing them! (Note: that is not an "or", it is an "and") 03:34:29 X-D 03:34:42 Now would be a great time to force a horrific question on you. 03:34:50 Gregor: How'd I override the Linux clock syscalls to always return the epoch 03:39:32 ... magick? 03:40:54 Gregor: So. Unhelpful. 03:41:14 At this rate it looks like I'm gonna have to steal Web of Lies' architecture-specific syscall-overriding code... 03:51:55 -!- TeruFSX has joined. 03:55:25 [elliott@dinky weboflies]$ sudo ./weboflies ls 03:55:25 = WARNING: mount("/home/ais523", "/tmp/home/ais523", 0, MS_BIND|MS_RDONLY, 0): No such file or directory 03:55:25 = WARNING: mount("/home/ais523/weboflies/nethack/nethack", "/tmp/var/games/nethack", 0, MS_BIND, 0): No such file or directory 03:55:25 = WARNING: mount("/etc/nethack", "/tmp/etc/nethack", 0, MS_BIND|MS_RDONLY, 0): No such file or directory 03:55:26 = WARNING: unexpected signal 11 sent to pid 13002 03:55:28 + executed program terminated 03:55:30 > 03:55:35 Gregor: Can you shoot ais for me? 03:55:45 😤😤lolwut 03:56:05 Gregor: I'm trying to get the Project Formerly Known as the Secret Project running :P 03:56:12 Is web-o-flies related to --- so yes. 03:56:23 Web o' Flies X-D 03:56:35 So much better than the alternate reading. 03:57:38 Gregor: But yeah, right now it has a bunch of lolunportable bind mounts :P 03:57:49 #if 1 03:57:49 /* make my home dir visible inside the chroot, for testing */ 03:57:49 ewarn(mkdir("/tmp/home/ais523", 0755)); 03:57:49 ewarn(mount("/home/ais523", "/tmp/home/ais523", 0, MS_BIND|MS_RDONLY, 0)); 03:57:49 /* more for-testing things */ 03:57:49 Seems that way, dunnit. 03:57:50 ewarn(mkdir("/tmp/var/games", 0755)); 03:57:52 ewarn(mkdir("/tmp/var/games/nethack", 0755)); 03:57:54 ewarn(mount("/home/ais523/weboflies/nethack/nethack", "/tmp/var/games/nethack", 0, MS_BIND, 0)); 03:57:56 ewarn(mkdir("/tmp/etc/nethack", 0755)); 03:57:58 ewarn(mount("/etc/nethack", "/tmp/etc/nethack", 0, MS_BIND|MS_RDONLY, 0)); 03:58:00 #endif 03:58:24 #if 1 03:58:24 /* make my home dir visible inside the chroot, for testing */ 03:58:24 ewarn(mkdir("/tmp/home/elliott", 0755)); 03:58:24 ewarn(mount("/home/elliott", "/tmp/home/elliott", 0, MS_BIND|MS_RDONLY, 0)); 03:58:25 #endif 03:58:27 Thar we go 03:58:29 s/if 1/if 0/ PROBLEM SOLVED 03:58:41 Gregor: Damn, I was gonna ask if you've seen the source code but then I realise ais gave it to me in private :P 03:58:44 It's... it's something else. 03:58:54 For instance it's over 4000 lines in a single C file :P 03:59:10 [elliott@dinky weboflies]$ sudo ./weboflies ls 03:59:10 = ERROR: stat proc/pid/fd: Permission denied 03:59:10 I... don't... even... 03:59:12 Remember when you complained about Plof's interpreter function? 03:59:29 Gregor: You want me to hold everyone by ais' coding standards? 03:59:34 Y'all off scot free. 04:00:10 Also, I think I have a new winner of my Unicode Nonsense Prize. 04:00:18 GOAT ain't got nothin' on CAT FACE WITH WRY SMILE 04:01:05 Wow :P 04:01:34 Gregor: http://www.fileformat.info/info/unicode/char/1f639/index.htm 04:02:06 Yeah, I found it on fileformat.info's list. 04:02:13 I feel that WRY SMILE is better though. 04:04:18 God damn Japan. 04:05:09 Gregor: Seriously though... you gotta see this thing's code before you die. 04:05:19 Every comment is like a paragraph of pure horror. 04:06:15 Gregor: Have I mentioned it does SDL support by using a PNG framebuffer? 04:06:27 (OK, it uses a framebuffer which it can screenshot to PNG :P Still) 04:06:37 (In-memory framebuffer, that is) 04:06:51 Gregor: http://www.fileformat.info/info/unicode/char/1f648/index.htm 04:09:31 U+01A2 LATIN CAPITAL LETTER OI 04:09:31 U+01A3 LATIN SMALL LETTER OI 04:09:31 These should have been called letter GHA. They are neither pronounced 'oi' nor based on the letters 'o' and 'i'. 04:09:31 -- http://unicode.org/notes/tn27/ 04:09:35 uhm, is there an esolang that the source code is raw waveform (audible or not)? 04:09:57 lifthrasiir: piet encoded as pcm :p 04:10:13 elliott: no novelty. :p 04:10:43 input-format languages are rarely novel :P something that based it on some kind of actually interesting waveformy analysis would be interesting 04:10:44 elliott: At least they kinda LOOK like OI. 04:10:49 but probably involve reals and thus be a pain to run 04:10:58 (whereby "a pain" means "impossible") 04:11:45 Gregor: Did you logread to see what the Secret Project is actually for? Wait, you never logread, do you :P 04:11:57 \/win 4 04:12:10 coppro: no...... 04:12:46 elliott: i have thought that such language may build a network of filters (or DSPs, if you prefer) and run the input through it 04:13:00 elliott: No, but I have some vague familiarity from earlier mentions of it. 04:13:01 lifthrasiir: that would be pretty. so the input would be audio too? 04:13:03 elliott: Software repeatability. 04:13:05 yes 04:13:16 Gregor: Right. It's for tool-assisted speedruns. 04:13:37 Whuhwhuh 04:13:42 there may be some fixed sources (i.e. sources and sinks) that appears in the source code as a wave literal 04:13:42 I thought it was for SCIENCE. 04:13:53 Gregor: Tool-assisted speedruns are pretty damn scientific :P 04:13:58 lul 04:14:01 We already knew it wasn't testing or anything *shrugs* 04:14:17 i don't know how to encode all these informations to some pretty waveforms though :S 04:15:07 Gregor: http://www.fileformat.info/info/unicode/char/1F46F/index.htm I... 04:16:30 http://www.fileformat.info/info/unicode/char/1f487/index.htm; very next codepoint: http://www.fileformat.info/info/unicode/char/1f488/index.htm 04:17:04 Gregor: Have I mentioned Web of Lies does cooperative scheduling by overriding every single syscall to schedule 04:17:18 So that syscalls block and yield appropriately. 04:17:30 It's so beautiful :P 04:17:54 RAT vs. MOUSE: http://www.fileformat.info/info/unicode/char/1f400/index.htm http://www.fileformat.info/info/unicode/char/1f401/index.htm 04:18:05 Gregor: Oh, and it overrides syscalls by using ptrace, transforming the arguments, calling the real syscall, then transforming the result in the process's memory in-place. 04:19:01 Gregor: MEANWHILE: http://www.fileformat.info/info/unicode/char/1f51b/index.htm 04:28:11 name a dangerous part of london 04:28:53 everywhere 04:29:02 where are you most likely to get mugged 04:30:32 glasgow 04:36:50 quintopia: 70s, Protestant neighborhood in Ireland, while being the Pope. 04:37:31 that's not in london, but i appreciate the thought 04:38:24 Oh, *in London*? 04:38:41 Just be named Guy Fawkes. That should do it. 04:38:42 :P 04:45:44 elliott: That's actually pretty damned nifty. 04:46:00 Gregor: It's /horrifying/. It /manually messes with registers/. 04:46:06 elliott: And? :P 04:46:34 elliott: This is Gregor you're talking to. 04:47:25 pikhq_: Gregor: You guys can't even begin to talk, you haven't SEEN this shit :P 04:47:43 No, but I wrote something similar in/for JavaScript ... 04:47:57 Gregor: Eh? 04:48:01 What are you referring to? 04:49:46 Gregor: Like, I can't think of ANYTHING to do with JS that would be even REMOTELY comparable to this :P 04:50:10 It's possibly the least portable C program I've ever seen. 04:50:28 elliott: Unless there's a bug in a Javascript implementation that allows him to prod registers manually. 04:50:31 :D 04:50:35 elliott: http://sss.cs.purdue.edu/projects/dynjs/jsbench-oopsla-2011.pdf 04:50:43 The least portable Javascript program! 04:51:01 Gregor: Is the similarity just "it's for repeatability" 04:51:14 Gregor: Because let me tell you, it is not the /idea/ that is horrifying here, it is very much the implementation :P 04:51:48 elliott: The implementation is PRETTY horrifying, but then JS is a highly-dynamic language with reflection, and ELF+x86 isn't. 04:52:14 Gregor: The Secret Project doesn't give a shit about ELF. I don't quite think you understand :P 04:52:17 elliott: It's the same basic idea of standing in between all the syscalls and rewriting them. 04:52:32 Gregor: It's based on constructing a chroot, starting a process, and then becoming a horrific parasite of it. 04:52:37 Yesyesyes 04:52:58 Gregor: Note that you're not MEANT to be able to "intercept" syscalls :P 04:53:09 You can just get notified when there's a syscall, pausing the process, and you happen to be able to fiddle with memory and registers. 04:53:10 ptracesayswhat 04:53:20 Ah, right. 04:53:28 Yup. 04:53:32 It's basically "interception via automated gdb" :P 04:53:52 Seriously though, using syscalls for scheduling is warped, whatever universe you're in :P 04:53:56 That being said, it seems to me like that should be implementable in a way that's only /mostly/ horrible, not /entirely/ horrible. 04:54:00 Have I mentioned it fakes a system clock? 04:54:10 elliott: Please tell me this is something absurd like orthogonal persistance via ptrace. 04:54:13 It actually manages time itself :P 04:54:22 pikhq_: No, it's the Project Formerly Known as the Secret Project. 04:54:36 That would be amazing though, you must admit. 04:54:38 pikhq_: It makes Linux (almost) deterministic. 04:54:54 (Deterministic if you don't have a loop that calls no syscalls in it) 04:55:27 To what end? 04:55:40 pikhq_: That was the Secret (you've seen ais523 talk about it, right?) 04:55:43 Turns out it's for TASes. 04:55:44 elliott: So, to what degree does it work? 04:55:47 And now, a long quote: 04:55:50 /* Linked list of future timed events, maintained in sorted order. 04:55:50 Any syscall that schedules something to happen at a particular 04:55:50 future time, such as nanosleep(2) (syscall return) or alarm(2) 04:55:50 (signal) will add an element to this list. Time does not increase 04:55:50 while any processes are executing; once all are simultaneously 04:55:51 blocked, the first element from this list is taken and resolved. 04:55:52 *Aaaah*. 04:55:53 Simultaneous events cannot happen; if an event would be added to 04:55:55 this list and another one already has the same time, the new event 04:55:57 is postponed one nanosecond. We only have to worry about one sort 04:55:59 of clock here; REALTIME and MONOTONIC are the same as system time 04:56:01 cannot be changed without root privs and we don't change it, 04:56:03 MONOTONIC_RAW is the same as MONOTONIC as we don't allow time slew, 04:56:05 ... Oh my god. 04:56:05 and we claim that all time spent executing is spent in syscalls 04:56:07 (i.e. zero lag), so PROCESS_CPUTIME_ID and THREAD_CPUTIME_ID are 04:56:09 always 0. (Likewise, of the three interval timers, ITIMER_REAL is 04:56:11 based on realtime, and the other two never fire at all.) */ 04:56:32 :D 04:56:46 Gregor: Well, right now I'm trying to get it to run on my system >_> 04:56:56 I guess for TAS being able to just fake up time is not sufficient, the goal is to have repeatable timing. 04:56:59 Gregor: But I gather it runs NetHack, and evidently runs some SDL game well enough for that stuff to be tested. 04:57:17 Gregor: He was even working on getting OpenGL working. 04:58:13 pikhq_: Here's another one for ya: 04:58:13 ais523 is a madman. 04:58:16 /* We can use procfs to get the current mappings, in order to avoid 04:58:16 overlapping an existing mapping. The mappings are given in 04:58:16 numerical order. The way it works is that we don't place anything 04:58:16 before the first or after the last mapping (to avoid writing on 04:58:16 system address space); and we place the mmap at the end of the 04:58:17 last gap in which it fits with addrnear == 0. If addrnear has a 04:58:18 value, we place it at addnear & PAGE_MASK if we can, or move it 04:58:20 backwards slightly so that it fits if we can, or otherwise at the 04:58:22 end of last the gap before addrnear where it fits or at the start 04:58:24 of the next gap afterwards where it fits, whichever is nearer. 04:58:26 There is one other rule: Linux doesn't like an mmap getting too 04:58:28 near to the end of the stack, and shrinks the stack if that is 04:58:30 done (presumably to give a guard page for stack overflow 04:58:32 protection). As such, we keep each map at least a page away 04:58:34 from each other map. */ 04:58:36 In fairness, there was a blank line before "There is one other rule". 04:59:39 Gregor: pikhq_: Here's the scheduling rules: http://sprunge.us/GGYX (He's already pasted that with the realtime-simulation bits censored, but that's public now, so *shrug*) 05:02:19 Gregor: pikhq_: OK, ais will get mad of me if I paste too much of this, but I couldn't resist: http://sprunge.us/DTJa 05:02:38 So. You can fucking TAS at syscall granularity. 05:03:59 OK, /something/ is wrong with the simulated /proc here 05:06:46 -!- monqy has quit (Quit: hello). 05:07:02 -!- Sgeo|web has joined. 05:07:22 kmc's reaction to the AW SDK: "ughhhh" 05:08:27 You're subjecting kmc to your API design? Come on, that's not fair. 05:08:30 kmc: We apologise. 05:09:37 I'm not the one providing the AW SDK! 05:10:34 Just think, all the person-hours going into this might produce a whole _three_ test bots before Sgeo|web gets bored and looks at another language. 05:11:21 Actually-written code would be a surprise, tbh 05:11:37 I said might. 05:12:02 What's more likely is that you'll make a bunch of people go to the effort of trying to figure out how to bind it for absolutely nothing, but I thought you might find me saying that a little depressing. 05:14:03 kmc: I would just use a global lock for this. 05:14:14 Wait, you're trying to stop Sgeo from doing things like that, aren't you. 05:14:20 I apologise. 05:14:59 no I am currently explaining how to do it :) 05:15:51 * shachaf monad transformers :-( 05:15:54 kmc: I meant a global global. It's not a global if you can have more than one of them. 05:16:09 But seriously, this is a hideous C API, top-level mutable variable > ReaderT implementation detail. 05:20:43 elliott, I was getting to the global global 05:20:53 Global global global. 05:20:53 why don't you follow along in #haskell instead of bugging me here 05:21:18 I can't face watching it directly. But I'll leave you to deal with the horror. :p 05:58:46 -!- kwertii has quit (Quit: bye). 06:04:23 -!- MDude has changed nick to MSleep. 06:41:06 -!- hagb4rd has quit (Ping timeout: 240 seconds). 06:44:24 -!- naskg has joined. 06:46:01 has anyone here used an Array in a legitimate purposeful Haskell program? 06:46:09 I haven't. But that's kind of expected. 06:58:05 -!- oerjan has joined. 07:03:44 would there be any values that have type-level natural types? 07:05:22 -!- naskg has quit (Read error: Connection reset by peer). 07:05:34 -!- naskg has joined. 07:06:28 :t Just (Just (Just (Just ())))) -- this has type 4, essentially? 07:06:29 parse error on input `)' 07:06:32 argh 07:06:38 :t Just (Just (Just (Just ()))) -- this has type 4, essentially? 07:06:39 Maybe (Maybe (Maybe (Maybe ()))) 07:06:58 hm wait 07:07:03 too much Nothing 07:07:12 -!- naskg has quit (Client Quit). 07:07:22 :t Identity (Identity (Identity (Identity ()))) 07:07:23 Identity (Identity (Identity (Identity ()))) 07:07:27 oerjan: but not in the actual implementation of type-level naturals right? 07:07:42 or... yes? 07:07:57 what is "the" actual implementation? 07:08:02 I don't know. 07:08:09 there isn't one? 07:08:11 * CakeProphet has no clue. 07:08:39 it may be common for pure type-level programming in haskell to use empty data types, in which case you only have undefined, which haskell cannot avoid. 07:09:27 a type-level boolean would be nice. Basically it would serve the purpose of an anonymous set of two phantom types. 07:09:37 data Zero; data Succ a 07:09:57 is "type Zero" not valid? 07:10:06 not valid. 07:10:15 a type is a synonym. 07:10:54 even the above requires EmptyDataDecls extension (sp?) 07:14:22 right I understand what type is for, it just seems that in this context they'd be completely equivalent. 07:14:43 type must be entirely expandable at compile time 07:17:56 kind / = A | B x | C x y 07:18:06 where is your God now? 07:19:29 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 07:19:45 I don't really think that kind of definition would serve any kind of purpose. 07:19:53 basically to associate a group of types to a kind. 07:20:09 kind-level metaprogramming? :P 07:20:49 kind-level naturals? WHERE DOES IT END. 07:21:02 there are kinds all the way down 07:21:10 or sorts, whatever that is 07:22:29 i do have the feeling the above definition is a confusion of levels, though 07:22:55 all the way down? 07:23:12 something like kind / x y = (* -> x) -> * -> y i could sort of believe in 07:23:23 oh, well... 07:23:35 that's more like a kind-level type declaration 07:23:37 although the mix of operator and alphanums also grates 07:23:41 I was thinking more of a kind-level data declaration 07:23:51 ah. 07:23:55 where these types suddenly have this kind. 07:24:14 analogous to these constructor functions having this type. 07:24:24 hm ok that may make sense. although you'd want x and y to be parameters on the left side. 07:24:33 or foralled 07:24:52 well... 07:25:00 parameters in kinds are typically done via -> 07:25:17 I'm confused now. :P 07:25:28 um -> _is_ a kind constructor 07:25:35 ah okay. 07:25:50 i'd expect what you define to be other kind constructors 07:26:05 that serve the purpose of.......... 07:26:08 .......... 07:26:12 (silence) 07:26:15 07:28:08 it may have some relevance to type-level programming? 07:29:18 hmmm..... 07:29:23 really * acts as a kind of kind variable. 07:29:50 well, not really. 07:30:38 also your rules about operators and variables is messed up now 07:30:48 -> is a kind operator but * is a kind variable. 07:30:48 no, it acts as a kind constant. 07:31:02 oerjan: er, I mean, yes I understand. 07:31:27 but if you added more kind distinctions then * being "any kind of type" is really kind of like a type variable, except that multiple occurences of * don't refer to the same kind. 07:31:51 argh 07:31:54 no? 07:31:55 :P 07:32:16 ...enjoy your trip to the looney bin 07:32:39 i'm outta this conversation :P 07:32:56 any further and Oerjan would descend into madness. 07:34:38 well, further. 07:34:47 into. 07:35:03 something which would require insane unicode to describe. 07:35:52 狂 07:36:19 I got this when I looked up "insane unicode" 07:36:22 it means "insane" 07:37:35 (I thought maybe I could maybe help you describe it maybe\) 07:38:09 PERHAPS SPOKEN LANGUAGE IS LIKE TYPES 07:38:25 AND THE ACTIONS THAT UNDERLY THE SPOKEN WORD ARE THE PORGRAMS 07:38:44 Maybe I make extensive use of the maybe type 07:39:12 (perhaps being a synonym for maybe, mayhaps) 07:40:46 oh no oerjan 07:40:48 i didn't realise 07:40:52 CakeProphet was trying to do haskell 07:40:53 in here 07:40:55 im so 07:40:56 sorry :( 07:41:08 has anyone here used an Array in a legitimate purposeful Haskell program? 07:41:11 elliott: HELP ME. HEEEEEEEEEEEEEEEEEEEEEEEEEEELP MEEEEEEEEEE! 07:41:13 Array is practically deprecated 07:41:26 what is "the" actual implementation? 07:41:26 elliott: kind-level metaprogramming is a state-of-art field in which I'm resorching. 07:41:32 oerjan: the new ghc extension, perhaps? 07:41:37 even the above requires EmptyDataDecls extension (sp?) 07:41:39 not in haskell2010 07:41:51 kind-level metaprogramming? :P 07:42:00 we're getting constraint kinds, and kind polymorphism is being worked on. it is in fact very useful 07:44:22 cooooool. 07:44:42 :>>:>:>>>:>:>>:>>:>:>>:> 07:48:16 :>>:>:>>>:>:>>:>>:>:>>:> 07:48:41 > let (>>:>:>>>:>:>>:>>:>:>>:>) = id in (+2) >>:>:>>>:>:>>:>>:>:>>:> 2 07:48:42 4 08:00:29 CONNNNNNNNNNNNNNS!!! 08:02:37 `QUOTE 08:02:37 -!- elliott has quit (Read error: Connection reset by peer). 08:02:42 `quote 08:02:43 ​/home/hackbot/hackbot.hg/multibot_cmds/lib/limits: line 5: exec: QUOTE: not found 08:02:44 74) I'm 100% of what sort of magic was involved in it 08:02:52 `quote 08:02:54 `quote 08:02:54 `quote 08:02:55 46) Reality isn't a part of physics 08:02:55 `quote 08:02:55 `quote 08:02:58 257) ooh I want to see ehird pole dancing I think that would be illegal. oh you are right damn :/ 08:03:00 -!- elliott has joined. 08:03:00 462) #%%:]__t�# do you see that that is great progress taking place 08:03:22 323) ZOMGMODULES, St. Christopher, saint and werewolf. 08:03:22 79) <@Lawlabee> Why does Monday start at 10PM on Sunday? 08:06:53 "@Donnenfeld: Your exploit does not work against current calibre-mount-helper, since I have fixed the mounting of symlinked dirs in both /dev and /media. Closing this bug. Re-open it only if you can point to/describe an actual exploit against current calibre-mount-helper." 08:06:56 this guy never gives up 08:07:38 elliott: he is the Rick Astley of calibre-mount-helper 08:08:14 is that you trying to troll #linux or is this something else? 08:08:32 -!- GreaseMonkey has quit (Remote host closed the connection). 08:10:07 CakeProphet: it's https://bugs.launchpad.net/calibre/+bug/885027, which you will not regret reading 08:12:04 I... 08:12:07 don't believe you. 08:12:32 -!- GreaseMonkey has joined. 08:13:10 CakeProphet: it's at #1 on proggit and had the active members of the channel in a state of awe for like over half of it a few hours ago 08:13:15 you decide :p 08:13:23 ... 08:36:38 :t fun 08:36:39 forall a. (SimpleReflect.FromExpr a) => String -> a 08:37:43 :t fun "hello" "world" 08:37:44 forall t. (SimpleReflect.FromExpr ([Char] -> t)) => t 08:37:55 :t fun show(fun "hello" "world") 08:37:56 Couldn't match expected type `String' 08:37:56 against inferred type `a -> String' 08:37:56 In the first argument of `fun', namely `show' 08:38:10 :t fun (show fun "hello" "world") 08:38:11 Couldn't match expected type `[Char] -> [Char] -> String' 08:38:11 against inferred type `String' 08:38:11 In the first argument of `fun', namely `(show fun "hello" "world")' 08:38:11 lol 08:38:15 HELP WHAT IS PRECEDENCE. 08:38:31 :t fun . show . fun "hello" $ "world" 08:38:32 Ambiguous type variable `a' in the constraints: 08:38:33 `SimpleReflect.FromExpr a' 08:38:33 arising from a use of `fun' at :1:13-23 08:38:36 :t fun . show . fun "hello" $ "world" :: Expr 08:38:37 Ambiguous type variable `a' in the constraints: 08:38:37 `SimpleReflect.FromExpr a' 08:38:37 arising from a use of `fun' at :1:13-23 08:38:40 painful to watch, mostly 08:38:40 bah 08:38:58 :t fun . show $ fun "hello" "world" :: Expr 08:38:59 Ambiguous type variable `a' in the constraints: 08:38:59 `SimpleReflect.FromExpr a' 08:38:59 arising from a use of `fun' at :1:14-32 08:39:30 CakeProphet thinks that $ are literal syntactic parentheses. 08:39:33 He is wrong. 08:39:51 oerjan: I'm trying to use fun and fold[lr] to implement unwords 08:39:55 -!- GreaseMonkey has quit (Remote host closed the connection). 08:40:10 ah. 08:40:17 but kind of lost now... 08:40:23 see above 08:40:36 :t foldr (fun . show) 08:40:37 forall b a. (Show b, SimpleReflect.FromExpr b, Show a) => b -> [a] -> b 08:40:46 :t fun . show (fun "hello" "world") 08:40:48 Couldn't match expected type `[Char]' against inferred type `Char' 08:40:48 Expected type: [String] 08:40:48 Inferred type: String 08:41:06 CakeProphet thinks (f . g x) = (f (g x)). 08:41:07 he is wrong 08:41:15 :t fun $ show (fun "hello" (var "world")) 08:41:16 Ambiguous type variable `a' in the constraints: 08:41:16 `SimpleReflect.FromExpr a' 08:41:16 arising from a use of `fun' at :1:12-36 08:41:19 :t fun $ show (fun "hello" (var "world")) :: Expr 08:41:20 Ambiguous type variable `a' in the constraints: 08:41:20 `SimpleReflect.FromExpr a' 08:41:20 arising from a use of `fun' at :1:12-36 08:41:38 ah 08:41:53 -!- GreaseMonkey has joined. 08:41:54 :t fun (show (fun "hello" (var "world"))) "hello" 08:41:56 Ambiguous type variable `a' in the constraints: 08:41:56 `SimpleReflect.FromExpr a' 08:41:56 arising from a use of `fun' at :1:11-35 08:41:58 sieijoiwejriojsdfoijweorijwer 08:43:01 :t foldr1 (show . fun) 08:43:02 Couldn't match expected type `a -> a' 08:43:02 against inferred type `String' 08:43:02 In the first argument of `(.)', namely `show' 08:43:17 erm 08:43:25 :t foldr1 ((show .) . fun) 08:43:26 Ambiguous type variable `a' in the constraints: 08:43:26 `SimpleReflect.FromExpr a' 08:43:26 arising from a use of `fun' at :1:19-21 08:43:30 you need to apply fun then show it. 08:43:37 fun "name" (var "value") 08:43:39 then show that. 08:43:47 then use that as the var 08:43:55 er 08:43:56 fun 08:43:58 actually. 08:44:33 hm 08:44:44 not sure if it's actually a valid fold. 08:44:56 > let foo [] = "end"; foo (x:xs) = show $ fun x (var (foo xs)) in foo ["a","b","c"] 08:44:57 Ambiguous type variable `a' in the constraints: 08:44:57 `GHC.Show.Show a' 08:44:58 a... 08:45:05 > let foo [] = "end"; foo (x:xs) = show (fun x (var (foo xs)) :: Expr) in foo ["a","b","c"] 08:45:06 "a b c end" 08:45:24 > let foo [] = var "end"; foo (x:xs) = fun x (foo xs) in foo ["a","b","c"] :: Expr 08:45:25 Couldn't match expected type `SimpleReflect.Expr' 08:45:25 against inferred ... 08:45:28 > let foo [] = var "end"; foo (x:xs) = fun x (foo xs) in foo ["a","b","c"] 08:45:29 No instance for (SimpleReflect.FromExpr 08:45:29 (Data.Number.Sy... 08:45:34 > let foo [] = var "end"; foo (x:xs) = fun x (foo xs) in undefined 08:45:35 *Exception: Prelude.undefined 08:45:38 hmm 08:45:43 :t let foo [] = var "end"; foo (x:xs) = fun x (foo xs) in foo 08:45:44 forall a. (SimpleReflect.FromExpr (Sym a), Show a) => [String] -> Sym a 08:45:53 > fun "hello" "world" 08:45:54 Ambiguous type variable `a' in the constraints: 08:45:54 `GHC.Show.Show a' 08:45:54 a... 08:45:56 > let foo [] = var "end"; foo (x:xs) = fun x (foo xs) in show (foo ["a","b"]) 08:45:57 No instance for (SimpleReflect.FromExpr 08:45:57 (Data.Number.Sy... 08:46:04 :-? 08:46:05 :t var 08:46:06 forall a. String -> Sym a 08:46:07 :t fun 08:46:08 forall a. (SimpleReflect.FromExpr a) => String -> a 08:46:13 oh. 08:46:14 :t x 08:46:15 Expr 08:46:17 :t fun "hello" 08:46:18 forall a. (SimpleReflect.FromExpr a) => a 08:46:19 :t name 08:46:19 Not in scope: `name' 08:46:23 huh 08:46:25 oerjan: ? 08:46:29 :t expr 08:46:29 something else is "var" 08:46:30 Expr -> Expr 08:46:36 yes 08:46:49 > SimpleReflect.var 08:46:50 Not in scope: `SimpleReflect.var' 08:47:01 well this is difficult :) 08:47:12 oh... 08:47:13 @hoogle var 08:47:14 not really 08:47:15 Language.Haskell.TH.Syntax VarE :: Name -> Exp 08:47:15 hmm 08:47:15 Language.Haskell.TH VarE :: Name -> Exp 08:47:15 Language.Haskell.TH.Lib varE :: Name -> ExpQ 08:47:25 THANKS HOOGLE 08:47:29 > let foo [] = fun "test" :: Expr; foo (x:xs) = fun x (foo xs) in show (foo ["a","b"]) 08:47:30 "a (b test)" 08:47:33 aha. 08:48:15 > let foo k [] = k $ fun "test"; foo k (x:xs) = foo (\k' -> k' x) xs in show (foo ["a","b"]) 08:48:16 Couldn't match expected type `(t -> b) -> b' 08:48:16 against inferred type ... 08:48:32 CakeProphet: this isn't going to work. 08:48:36 not without essentially defining 08:48:48 join a b = a ++ " " ++ b 08:48:51 with simplereflect 08:48:58 (yes yes I know "join" clashes there) 08:49:03 ah okay. 08:49:34 :t op 08:49:35 forall o n. (Newtype n o) => (o -> n) -> n -> o 08:49:42 wtf is that 08:50:59 -!- oerjan has quit (Quit: Later). 08:51:34 @tell oerjan you can't ask a question and then leave, jerk >:( 08:51:34 Consider it noted. 08:51:57 @tell oerjan it's from http://hackage.haskell.org/packages/archive/newtype/latest/doc/html/Control-Newtype.html 08:51:57 Consider it noted. 09:34:19 -!- ais523 has joined. 09:37:57 ais523: hi 09:38:08 [elliott@dinky hello-2.7]$ time sleep 5 09:38:08 [five second pause] 09:38:08 real0m0.000s 09:38:08 user0m0.000s 09:38:08 sys0m0.003s 09:38:18 -!- nooga has joined. 09:38:18 elliott: haha 09:38:39 I get real 0m5.014s 09:38:42 I haven't got Web of Lies to work, but this is my cheap LD_PRELOAD version of the clock hack 09:38:46 bash runs in it, which is a good start 09:38:53 I'm about to try compiling hello to prove all the naysayers wrong 09:39:00 without even bothering to backdate the source files! 09:39:11 [elliott@dinky hello-2.7]$ date 09:39:11 Thu Jan 1 01:00:00 BST 1970 09:39:11 wait, I thought BST was over. 09:39:21 oh wait 09:39:29 no, it wasn't BST on the epoch either 09:39:33 elliott: wow, such a thrill-seeker. 09:39:33 hmm 09:39:35 living life on the edge. 09:39:41 orig_gettimeofday(NULL, tz); 09:39:41 if (tp) { 09:39:41 tp->tv_sec = 0; 09:39:41 tp->tv_usec = 0; 09:39:41 } 09:39:46 maybe I should just fake the timezone too 09:39:52 I guess it might have weird effects otherwise 09:39:55 elliott: this is why I prefer to control at the syscall level, not the library level 09:40:04 ais523: yes, me too -- got a portable way? :P 09:40:13 there isn't one 09:40:27 Portable Syscall Interface 09:40:30 I suppose you could, umm, scrape the source of strace, which is reasonably portable by special-casing a bunch of OSes and archs 09:40:33 Connector Protocol 09:40:37 but syscalls are inherently nonportable, aren't they? 09:40:43 ais523: wow, gnu hello is best practices? its ./configure checks whether about a hundred libc functions are macros are not 09:40:45 :-( 09:40:58 checking whether build environment is sane... yes 09:40:59 oh, you're _very_ mistaken,a utoconf 09:41:02 s/a / a/ 09:41:12 make[2]: Warning: File `Makefile' has modification time 1320399594 s in the future 09:41:15 elliott: it only runs a few specific sanity checks 09:41:20 make[2]: warning: Clock skew detected. Your build may be incomplete. 09:41:36 [elliott@dinky hello-2.7]$ src/hello 09:41:36 Hello, world! 09:41:41 tl;dr it works perfectly fine, it just warns a lot 09:42:04 elliott: can you shout at this spambot for me? it's recommending the use of Lucinda Handwriting or Papyrus over Arial or Calibri for Christmas invitations 09:42:14 it has no taste in fonts :( 09:42:18 ais523: lucinda handwriting is a beautiful font, marred only by the fact that it doesn't exist 09:42:35 elliott: I didn't check to see if the typo was in the original, but probably 09:42:37 also, I would _probably_ use papyrus before arial. but really, everyone loves papyrus 09:42:37 try the -m flag to tar when you unpack the sources - I think that will avoid weird timestamps 09:42:38 Lucida Console is the best font. 09:42:47 olsner: no, the problem is that the timestamps are in 2011 09:42:49 olsner: it's 1970 09:42:56 this tarball comes from the future, is the problem 09:43:16 elliott: by weird I mean timestamps from 2011 09:43:22 lol 09:43:30 -m, --touch 09:43:30 don't extract file modified time 09:43:30 -m should set them all to the current time 09:43:35 right, I can do it from inside the jail 09:43:36 good idea 09:43:45 tar: hello-2.7/gnulib/m4/locale-ja.m4: time stamp 2011-03-22 17:56:57 is 1300816617 s in the future 09:43:46 I GET IT 09:43:52 WHY DOES ALL GNU SOFTWARE HAVE TO TELL ME I'M IN THE PAST JEEZ 09:43:54 I see you are partying like it's 1970. 09:43:57 --HANG hang for SECS seconds (default 3600) 09:44:20 ais523: what's that from? 09:44:22 elliott: because systems are not designed to run with a clock jammed at the epoch 09:44:24 elliott: man tar 09:44:36 not mine 09:44:37 I'm trying to work out what the option's for, also why it's in allcaps 09:44:45 I suspect it's a typo for --hang SECS 09:44:50 elliott: because systems are not designed to run with a clock jammed at the epoch 09:44:54 err, that would make more sense, yes 09:44:55 I'm sure there's /some/ legacy system... 09:45:02 elliott: it probably has the wrong epoch 09:45:14 elliott: http://vimeo.com/11414505 09:45:31 why are you linking me this 09:45:52 elliott: it's always relevant. 09:46:04 wow, thinks break more if the epoch is right 09:46:06 erm 09:46:07 the timestamp 09:46:21 * elliott configures it, then backdates them 09:46:38 ais523: btw, = ERROR: stat proc/pid/fd: Permission denied 09:46:47 ais523: I've no idea why, I've looked over the code repeatedly 09:46:56 ais523: my only changes were to change your personal bind mounts into ones for my ~ 09:47:28 oh no, not that error again 09:47:33 hahaha 09:47:41 elliott: it's something to do with security on root-executed programs 09:47:47 oh, selinux stuff? 09:48:01 note: it was "sudo ./weboflies true"; true is 64-bit, but I tried it on Web of Lies itself and it still failed, so I suspect it's a generic problem 09:48:03 sometimes just the standard protections on suid stuff 09:48:13 weboflies isn't suid :) 09:48:19 yep, but it drops permissions 09:48:19 make[2]: gnulib/m4/wchar_h.m4: Timestamp out of range; substituting 1970-01-01 01:00:00 09:48:19 make, you disappoint me 09:48:28 ais523: so, how do you fix it? 09:48:32 webo flies 09:48:58 flies that spread deadly timestamp-related diseases 09:48:59 olsner: gregor already topped it with "web o' flies" 09:49:02 -!- GreaseMonkey has quit (Quit: The Other Game). 09:49:12 web o' flies is better yes 09:49:25 elliott: hey, that was an obvious thing to do 09:49:32 yes, but did you do it? 09:49:39 yes 09:49:40 mentally 09:49:46 before the name was public 09:49:52 gregor doesn't have that problem; he doesn't have a brain 09:50:15 ais523: btw, you use clone(). wouldn't unshare() do? 09:50:20 elliott: as for that bug, removing the call to drop permissions from the main process would fix it, but I don't feel comfortable running a bunch of stuff as root 09:50:29 elliott: I suppose so; this was invented before unshare became commonly available 09:50:38 ais523: wait, how old is this program? 09:50:38 and I don't see why you wouldn't use clone rather than unshare 09:50:46 not that old, but I have an old OS 09:51:06 that only very slightly postdates unshare 09:51:16 so it's still it bit experimental in the kernel source I was reading 09:51:34 so, umm, how can I get the flies working without losing the permissions drop? modifying crap in /proc? 09:52:31 possibly, one of the settings there must be different 09:52:44 either that, or let me try to figure out what the offending line is and why it's failing 09:52:51 ais523: I know what the line is 09:52:53 I tracked it down myself 09:53:11 struct stat fdstats; 09:53:11 char procname[] = "/proc/65536/fd/4294967295"; 09:53:11 sprintf(procname, "/proc/%d/fd/%d", ptpid, 09:53:11 (int32_t)ar0.ebx); /* cast for safety */ 09:53:11 if (stat(procname, &fdstats) < 0) { 09:53:24 right 09:53:25 ais523: and the error means that a directory prefix of the statted filename isn't accessible, permissions-wise 09:53:34 ais523: aha, let me guess why 09:53:36 yep, it must be /proc/pid/fd 09:53:40 ais523: the process id involved is owned by root 09:53:42 because web of lies runs as root 09:53:46 (to start with) 09:53:51 elliott: actually, I think it's because it was previously owned by root 09:53:54 but yes, much the right idea 09:53:55 so an unprivileged user can't look at it 09:53:56 right 09:54:04 I take it you can't drop privileges before cloning? 09:54:06 but that happened to me too, and I thought I fixed it 09:54:15 not before the first clone call, which creates fakeinit 09:54:25 because root perms are needed to do things like unshare mount namespaces 09:55:00 however, it drops perms before forking the actual program under test 09:55:19 elliott: idea: does your system have a user numbered 65534? 09:55:27 it could be that the user it drops permissions /to/ doesn't exist 09:55:40 root:x:0:0:root:/root:/bin/bash 09:55:40 bin:x:1:1:bin:/bin:/bin/false 09:55:40 daemon:x:2:2:daemon:/sbin:/bin/false 09:55:40 mail:x:8:12:mail:/var/spool/mail:/bin/false 09:55:40 ftp:x:14:11:ftp:/srv/ftp:/bin/false 09:55:40 http:x:33:33:http:/srv/http:/bin/false 09:55:42 nobody:x:99:99:nobody:/:/bin/false 09:55:44 dbus:x:81:81:System message bus:/:/bin/false 09:55:46 elliott:x:1000:100:Elliott Hird,,,:/home/elliott:/bin/bash 09:55:48 avahi:x:84:84:avahi:/:/bin/false 09:55:50 usbmux:x:140:140:usbmux user:/:/sbin/nologin 09:55:52 ais523: no, but your code comments implied to me that it shouldn't matter 09:55:54 have I been lied to :-( 09:56:00 I don't think it should 09:56:00 (that's the entire contents of my /etc/apsswd, btw; surprisingly short) 09:56:04 but I'm not entirely certain 09:56:19 try setting WOLUSER_UID and WOLUSER_GID both to 99 09:56:19 ais523: want me to create one? 09:56:21 oh, ok 09:56:21 and see if it works then 09:56:34 if not, it's probably not that 09:56:59 (/etc/passwd inside the chroot makes that user exist; but ofc the system as a whole wouldn't care about that version of /etc/passwd, I just don't get why it would care at all) 09:57:00 doesn't fix the problem 09:57:12 I'm not sure whether to say "good" or "bad" 09:57:18 that was my reaction, too 09:57:21 I want to find the problem, but I'm glad that doesn't fix it 09:57:30 heh 09:57:39 ais523: I could run weboflies under gd... what am I saying, of course I can't 09:57:49 you can try, it's hilarious 09:57:55 but no, probably a bad idea 09:58:18 [elliott@dinky weboflies]$ sudo gdb ./weboflies 09:58:18 sudo: gdb: command not found 09:58:28 new machines always surprise me for at least two months after I set them up 09:58:32 on a regular basis 09:58:37 like, how have I not realised I don't have gdb before now? 09:58:45 can you run it as a regular user? 09:58:57 nope, I just haven't installed gdb yet! 09:59:17 the second clone is definitely after dropping perms 09:59:47 it might be worth looking at the perms in question yourself; stick a getchar() or something in just after the error message so that the processes stick around long enough to look at them 10:00:05 = ERROR: ptrace trace self: Operation not permitted 10:00:05 --gdb 10:00:11 then it dumps me at the web of lies console 10:00:14 first time i've seen it, actually :) 10:00:17 that seems about right 10:00:33 it might be worth looking at the perms in question yourself; stick a getchar() or something in just after the error message so that the processes stick around long enough to look at them 10:00:34 OK 10:00:40 ais523: can I printf at that point in the code? 10:00:44 it would be useful to see the pid 10:00:45 should be fine 10:00:50 I suppose I could just ps, but 10:00:54 may be better to fprintf to stderr 10:00:56 ais523: aaugh, I can't escape the gdb :) 10:01:06 elliott: try double-tapping control-C 10:01:14 and if that fails, try control-\ 10:02:20 -!- elliott has quit (Read error: Connection reset by peer). 10:02:20 -!- elliott_ has joined. 10:02:23 umm 10:02:29 i killed the gdb'd weboflies 10:02:38 and got a kernel panic for trying to kill init... 10:02:39 oh no, you didn't use sigkill, did you? 10:02:51 no, I literally just "sudo killall gdb" 10:02:59 wow 10:03:00 how... how is that even possible? it's not even the /real/ pid 1! 10:03:25 this is weboflies! 10:03:29 :D 10:03:47 ok, so... 10:03:49 where were we? :P 10:03:51 (note that a kill -9 on weboflies itself is nearly always a bad idea) 10:04:07 elliott_: adding a printf and getchar statement to the /proc/pid/fd check in icotl 10:04:10 *ioctl 10:04:14 ah, yes 10:05:30 [elliott@dinky weboflies]$ sudo ./weboflies true 10:05:31 Password: 10:05:31 = ERROR: stat proc/pid/fd: Permission denied 10:05:31 /proc/783/fd/4 10:05:34 780 pts/0 00:00:00 sudo 10:05:34 781 pts/0 00:00:00 weboflies 10:05:34 782 pts/1 00:00:00 weboflies 10:05:35 783 pts/1 00:00:00 weboflies 10:05:46 [elliott@dinky weboflies]$ ls -l /proc | grep 783 10:05:46 dr-xr-xr-x 8 65534 65534 0 Nov 4 10:04 783 10:06:04 [elliott@dinky weboflies]$ ls -l /proc/783/fd 10:06:04 ls: cannot open directory /proc/783/fd: Permission denied 10:06:09 [elliott@dinky weboflies]$ ls -ld /proc/783/fd 10:06:09 dr-x------ 2 root root 0 Nov 4 10:04 /proc/783/fd 10:06:18 ais523: so, the permissions on the process itself change properly, but not the fds 10:06:21 I keep grouping that as "webo-flies". 10:06:23 is this some effective/real uid problem? 10:06:30 fizzie: Yes, like olsner. 10:06:40 elliott_: all four UIDs are set to the same value, so I don't think so 10:06:57 I'm using setresuid 10:06:57 ais523: well, the order could matter, for changing the permissions on /proc 10:07:04 why don't you check the ownership on 781 and 783? 10:07:20 the order is "simultaneously", because I'm using setresuid 10:07:33 which is designed for avoiding race conditions in changing UIDs simultaneously 10:07:35 [elliott@dinky weboflies]$ ls -ld /proc/781{,/fd} 10:07:35 dr-xr-xr-x 8 65534 65534 0 Nov 4 10:04 /proc/781 10:07:35 dr-x------ 2 root root 0 Nov 4 10:04 /proc/781/fd 10:07:35 [elliott@dinky weboflies]$ ls -ld /proc/782{,/fd} 10:07:35 dr-xr-xr-x 8 65534 65534 0 Nov 4 10:04 /proc/782 10:07:35 dr-x------ 2 root root 0 Nov 4 10:04 /proc/782/fd 10:08:04 perhaps your kernel just doesn't like looking at even your own fds? 10:08:14 check an ordinary elliott-owned process, like your shell or something 10:08:19 [elliott@dinky weboflies]$ ls /proc/self/fd 10:08:19 0 1 2 3 10:08:27 [elliott@dinky weboflies]$ ls -ld /proc/self{,/fd} 10:08:27 lrwxrwxrwx 1 root root 64 Nov 4 10:00 /proc/self -> 834 10:08:27 dr-x------ 2 elliott users 0 Nov 4 10:07 /proc/self/fd 10:08:32 wow, how is that the other way around? 10:08:38 oh, /proc/self is a symlnik 10:08:39 symlink 10:08:42 yep 10:08:48 and symlinks don't have useful perms 10:08:50 [elliott@dinky weboflies]$ ls -ldH /proc/self{,/fd} 10:08:51 dr-xr-xr-x 8 elliott users 0 Nov 4 10:08 /proc/self 10:08:51 dr-x------ 2 elliott users 0 Nov 4 10:08 /proc/self/fd 10:08:56 ais523: I was thinking of the owner 10:08:57 * Sgeo|web is undecided whether to remove Calibre from his Windows system out of .. protest? 10:09:07 Well, that wouldn't actually do anything other than inconvience me 10:09:12 Sgeo|web: how about out of: "I don't want to get my system compromised" 10:09:24 s/that wouldn't/I'm foolish enough to believe that wouldn't/ 10:09:28 elliott_: how is a suid executable a security hole on Windows? 10:09:37 ais523: you trust that guy to write /any/ software? 10:09:44 aha, I see what you mean 10:09:50 ais523: I'm sure Sgeo|web's user has quite sufficient permissions to destroy lots of files he cares about 10:10:27 the calibre bugs struck me as being from someone who didn't realise the possibility of malicious input 10:10:39 which is typically reasonably safe on a single-user system that doesn't expose network access 10:11:04 This person is assuming single-user 10:11:06 I think he just thinks that it's not serious, because he can't conceptualise a root hole as serious on a desktop machine 10:11:26 so he thinks people are just bullying him for no reason, and won't remove features because of it 10:11:31 elliott_: well of course it can be (in case someone gets in from outside) 10:11:35 doesn't make it any less of a worrying attitude, ofc 10:11:36 but it's not as serious as on a multi-user system 10:12:33 ais523: wow, chmod works in /proc 10:12:39 erm 10:12:40 chown 10:12:45 unfortunately, it just either fails because of not having permissions, or silently fails 10:12:55 I was thinking weboflies could chown its /proc/blah/fd before dropping perms :) 10:12:56 Did you read the most recent things on the bug report? Someone stated that the exploit still works, and Kovid seems to be assuming it doesn't work just because his directory structure is different or something 10:13:07 quite a lot of weird things end up silently failing on /proc, due to not being implemented for procfs 10:13:12 elliott_: try sudo -u god 10:13:14 Sgeo|web: I don't really care what he thinks, because he's been wrong about fifty times so far 10:13:20 elliott_: oh wait that's not actually a thing? shit... 10:13:23 that explains a lot. 10:13:29 elliott_: I'm saying this is probably the 51st 10:14:04 https://bugzilla.redhat.com/show_bug.cgi?id=651183 ;; wow, not even the FUSE people can write a safe suid binary 10:14:54 The only safe suid binary is the unlinked suid binary. 10:14:54 -!- Vorpal has joined. 10:15:09 (Old saying of the jungle.) 10:15:17 "I'm glad you've restricted /dev to block devices only. Standby and I will update the exploit for this latest fix of yours." 10:15:17 s/the unliked/a dead/ 10:15:21 fizzie: Don't say that -- I gotta write one. :/ 10:15:37 what would happen if you did chmod u+s true? 10:15:39 Thankfully it should just set UID + chroot. 10:15:55 ais523: exploits would become ten times more fun 10:16:03 hmm, distros should do that, it would be entertaining 10:16:10 just setuid a bunch of really innocuous binaries 10:16:14 Oh, I misunderstood what was said, n/m my comment about Kovid's thoughts 10:16:19 I'd be surprised if true had exploits 10:16:19 can you find a hole in gnu echo? I wouldn't be surprised 10:16:21 even the GNU version 10:16:29 ais523: it uses their internationalisation stuff 10:16:34 oh right 10:16:35 that could amount to quite a lot of code 10:16:36 wait, what? 10:16:38 `run file `which true` 10:16:40 ais523: for the help text, I think 10:16:41 ​/bin/true: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.18, stripped 10:16:48 elliott_: "true --help" doesn't print anything 10:16:56 which is in keeping with the way true generally behaves 10:16:57 ais523: that's not gnu true 10:17:00 $ /bin/true --help 10:17:00 Usage: /bin/true [ignored command line arguments] 10:17:00 or: /bin/true OPTION 10:17:00 Exit with a status code indicating success. 10:17:02 that's bash true 10:17:03 `run true --help 10:17:05 No output. 10:17:06 [elliott@dinky weboflies]$ /bin/true --help 10:17:06 Usage: /bin/true [ignored command line arguments] 10:17:06 or: /bin/true OPTION 10:17:06 Exit with a status code indicating success. 10:17:06 --help display this help and exit 10:17:06 --version output version information and exit 10:17:07 right 10:17:08 NOTE: your shell may have its own version of true, which usually supersedes 10:17:08 Oh 10:17:10 the version described here. Please refer to your shell's documentation 10:17:12 for details about the options it supports. 10:17:14 Report true bugs to bug-coreutils@gnu.org 10:17:16 GNU coreutils home page: 10:17:18 what would happen if you did chmod u+s true? <-- well, true is not written to run as suid, so there might be security holes. My guess however is that for true it wouldn't actually do much. Not a lot you can do with that tool 10:17:18 General help using GNU software: 10:17:20 For complete documentation, run: info coreutils 'true invocation' 10:17:22 I had to flood that because I couldn't believe how long it was 10:17:25 yep, just found it 10:17:40 elliott_: "long", it doesn't even include a GPL copy. 10:17:44 true... bugs? 10:17:59 "true isn't being true!" "okay... now it is" 10:18:01 http://git.savannah.gnu.org/cgit/coreutils.git/tree/src/true.c 10:18:02 Hasn't there been updates to true or something? 10:18:02 heh, the info page mentions that doing something like "./true --version >&-" causes it to return false 10:18:12 setlocale (LC_ALL, ""); 10:18:12 bindtextdomain (PACKAGE, LOCALEDIR); 10:18:12 textdomain (PACKAGE); 10:18:17 juicy exploit vectors 10:18:21 version_etc (stdout, PROGRAM_NAME, PACKAGE_NAME, Version, AUTHORS, 10:18:21 (char *) NULL); 10:18:21 this too 10:18:58 ais523: any ideas wrt weboflies? 10:19:17 ugh. true should literally be int main(void) { return 0; } 10:19:20 not really; on my system I can't read fakeinits fd's, but I can read those of the program under test 10:19:26 well maybe EXIT_SUCCESS 10:19:28 but whatever 10:19:31 "In this instance, the names of the object files would be chosen by automake; they would be false-true.o and true-true.o." --automake manual 10:19:36 Vorpal: They use the same code to generate both true and false. 10:19:46 fizzie, heh 10:19:58 #if EXIT_STATUS == EXIT_SUCCESS 10:19:58 # define PROGRAM_NAME "true" 10:19:58 #else 10:19:58 # define PROGRAM_NAME "false" 10:19:58 #endif 10:20:09 elliott_: one of C-INTERCAL's temporary files is called oil-oil.c for this reason 10:20:13 oh well 10:20:29 (EXIT_STATUS defaults to EXIT_SUCCESS; false.c just #defines that and #include "true.c".) 10:20:48 Huh, what's with true-false.o and oil-oil.c? 10:21:03 Copyright (C) 1999-2003, 2005, 2007-2011 Free Software Foundation, Inc. 10:21:12 huh 10:21:16 Sgeo|web: to allow for multiple files being generated from the same source file 10:21:54 ais523: 2004 and 2006 would have been prime years to steal rights to that code, apparently. 10:22:11 oh right, .Po means dependencies, .po means internationalisation code 10:22:24 CakeProphet: those are years in which is wasn't changed, I guess 10:22:30 I'm more worried about all the years in which it was 10:22:34 yeah 10:22:36 scares me too 10:24:46 ais523: what if I... disabled file permissions checks? 10:24:55 > [1..3, 5, 7..11] 10:24:56 : parse error on input `,' 10:24:56 you can do that? 10:25:03 ^^ that should be a thing 10:25:21 !perl print (1..3, 5, 7..11) 10:25:33 slow 10:25:34 egobot is apparently perlless for some reason. 10:25:37 try `runperl 10:25:39 !help 10:25:40 ​help: General commands: !help, !info, !bf_txtgen. See also !help languages, !help userinterps. You can get help on some commands by typing !help . 10:25:40 https://bugs.launchpad.net/calibre/+bug/885027/comments/33 is this a joke or is a person who knows how to compile C code really this stupid? 10:25:44 which elliott totally forgot to delete (shhhh don't tell him) 10:25:47 !help languages 10:25:48 ​languages: Esoteric: 1l 2l adjust asm axo bch befunge befunge98 bf bf8 bf16 bf32 boolfuck cintercal clcintercal dimensifuck glass glypho haskell kipple lambda lazyk linguine malbolge pbrain perl qbf rail rhotor sadol sceql trigger udage01 underload unlambda whirl. Competitive: bfjoust fyb. Other: asm c cxx forth sh. 10:25:56 `runperl print 1 10:25:58 1 10:25:58 heh, why is perl in the eso list? 10:26:06 `runperl print (1..3, 5, 7..11) 10:26:08 12357891011 10:26:30 ais523, obviously a reference to the Perl article on the wiki 10:26:32 > concat [enumFromTo 1 3, [5], enumFromTo 7 11] 10:26:34 [1,2,3,5,7,8,9,10,11] 10:26:35 ais523: In 2009 they made it only call the local stuff when argc == 2; in 2008 they switched VERSION to Version (changed ~every app) and marked the description strings with N_ for translation; in 2007 they used a new emit_bug_reporting_address () helper instead of doing it manually, and changed GNU_PACKAGE to PACKAGE_NAME; in 2003 they changed the format of the AUTHORS macro. 10:26:43 Sgeo|web: gross 10:26:56 CakeProphet: I'm not an elegant Haskell writer 10:26:57 ais523: So it's mostly changes in the boilerplate that touch every app in there. 10:27:06 s/local/locale/ 10:27:09 that would make sense 10:27:34 > concat [[1..3], [5], [7..11]] 10:27:35 :t enumFromTo 10:27:35 [1,2,3,5,7,8,9,10,11] 10:27:36 forall a. (Enum a) => a -> a -> [a] 10:27:40 ah 10:27:52 fizzie: ais523: in 2003, they fixed a minor bug in which the value "true" was expected to return was mistakenly calculated as 4 10:28:03 "minor" bug? 10:28:09 returning true is the entire point of true 10:28:12 and 4 is a false value 10:28:17 ais523: Well, it's only four off. 10:28:19 in UNIX return codes 10:28:23 elliott_: Linky? 10:28:41 Sgeo|web: is this a joke or is a person who knows how to compile C code really this stupid? 10:28:46 elliott_, how did that bug ever slip past them? After all it wouldn't actually have worked at all 10:28:55 >_< 10:29:19 elliott_: I don't know, it hits the law of trolling and incompetence being indistinguishable past a certain point 10:29:29 * Sgeo|web is now under the impression that elliott_ was joking 10:29:32 ais523: the designers of true clearly followed the famous maxim to the highest degree: "A good value for k would be around 2, e.g., k = 1.9." 10:29:57 does this maxim work regardless of what k means? 10:30:35 ais523: well, it didn't make any sense in context either, so I have to assume so 10:30:56 AFAICT, they needed to add about four words to the paper :) 10:31:10 I suppose "would be around 2, e.g., k = 2." was deemed too obvious 10:31:50 elliott_, which paper is that from? 10:31:56 one of the Nix ones 10:31:59 ah 10:32:34 elliott_: hmm, the top proggit comment on calibre is pretty interesting, it's about how the calibre dev doesn't seem to understand that he can depend on things that aren't installed in a distro by default 10:32:42 because the whole point of a distro is resolving dependencies 10:32:53 ais523: I think that's stupid; it's fairly obvious what he meant 10:32:58 "I don't want to depend on /more/ things" 10:33:08 "installed by default on Gentoo" is being used to mean roughly "once you install a desktop" 10:33:13 in which case things like gtk will be there 10:33:14 XMLfuck would simply be an implementation of brainfuck using XML, allowing simple universal transport of brainfuck programs, without the need for complex encodings, as well as allowing it to be processed with a single XSLT to pretty-print or even execute the program. 10:33:18 what 10:33:21 something like pmount won't be, because gentoo doesn't dot his whole "infrastructure" thing :p 10:33:33 ...it's a very stupid point, but it's not quite as stupid as "I don't understand dependencies" 10:33:42 ais523: especially since his whole argument is that this is from the binary tarball version 10:33:46 and the distro packages replace them 10:33:51 so dependencies /aren't/ being handled 10:33:53 doesn't brainfuck itself allow simple universal transport of brainfuck programs? :P 10:34:05 ais523: the fact that he ships binaries of all his /other/ dependencies doesn't seem to have occured to him 10:34:11 elliott_: aha 10:34:19 "binary tarball version" 10:34:24 I think I've found TRWTF there 10:34:34 well, not to say it isn't in the source distro too 10:34:37 shipping binaries should be the distro's responsibility, if it's done at all? 10:34:43 but he claims it only /matters/ for that because debian et al. replace it 10:34:54 Hey, it's good for Linux From Scratch people... except they'd presumably use the source version 10:34:59 ais523: actually, I think he might not view pmount or whatever as a solution because he thinks people are complaining that he's not competent enough to write suid stuff 10:35:00 -!- hagb4rd has joined. 10:35:13 ais523: after all, he said he ~couldn't be trusted to modify pmount~ after someone suggested he use it 10:35:13 elliott_: well, he isn't 10:35:16 well, he isn't 10:35:17 oh, of course not 10:35:18 snap 10:35:29 but the point is that, why would that stop people complaining, from that warped point of view? 10:35:39 Why would he need to modify pmount? 10:35:39 and I don't think pmount would need modification, it was being suggested for that reason 10:35:42 AFAICT, he thinks they're complaining that he's shipping a suid binary and is untrustworthy 10:35:55 that suid binary being pmount wouldn't change that fact 10:36:00 Sgeo|web: ais523: exactly, it wouldn't 10:36:11 which is why it only makes sense if you figure out what his actual motivations behind saying that are 10:36:21 ...unless he really just has no idea how he would replace it with pmount :) 10:36:24 which is perfectly possible too 10:36:34 have I mentioned pmount is supposedly deprecated? layers!! so many layers!! 10:36:43 Anyone want to tell him that it's not whether he's malicious or not that's in question? 10:37:01 you want to talk to him? be my guest 10:37:08 you may find the experience unpleasant 10:38:45 I'm not comfortable saying "You wouldn't need to modify pmount" since I don't in fact know anything whatsoever about pmount or his use case 10:38:53 So I think I'll stay quiet 10:43:44 "That's a wierd mixture of types in that struct, I mean long and uint32, one of them has a fuzzy size (4 or 8 bytes, depending on the compiler), the other is clearly defined. Generally, I never ever use "long" as a type." 10:43:56 terrifying 10:45:19 elliott_, what? 10:45:39 long and uint32_t have different purposes, right? 10:45:48 elliott_, is that from the suid fiasco thread? 10:45:51 "long" just means "I need this to be at least 32 bits" 10:45:53 Vorpal: nope 10:46:01 elliott_, then from where? 10:46:11 ais523: context: this is somebody commenting on the virtualdub blog, so the context is both "gritty" hand-optimised C, and Windows 10:46:24 ais523: what I am learning: I am terrified of people who actually write C 10:46:25 aha 10:46:28 (as opposed to being good C programmers) 10:46:39 I mean... they avoid long... because it has a "fuzzy" size... 10:46:39 elliott_: if you aren't constantly terrified of C, you're doing things wrong 10:46:40 are there good C programmers? 10:46:42 * ais523 is doing things wrong 10:46:46 it's... 10:46:50 do they have a /concept/ of portability? 10:47:01 ais523: oh, I am 10:47:08 ais523: why do you think I avoid writing it? 10:47:10 elliott_: I've tried to teach people C 10:47:21 elliott_, the concept of portability in C is painful enough that most people ignore it when writing anything more advanced than a "hell world" 10:47:23 hello* 10:47:26 hell world 10:47:30 elliott_, exactly 10:47:43 mcmap runs on, like, at least three platforms. 10:47:46 I bet it even runs on IRIX> 10:47:48 or HP-UX! 10:48:03 elliott_, sunos with NEWS? 10:48:08 no. 10:48:10 aww 10:48:53 Vorpal: I typically care about portability in C 10:48:57 except on the Secret Project 10:49:04 there's even a comment on the #define _GNU_SOURCE 10:49:15 which shows clearly that I was thinking "hell, this is unportable enough anyway, may as well go all the way" 10:49:23 elliott_, classical MacOS? NeXTSTEP? 10:49:27 http://www.reddit.com/r/programming/comments/lxfxb/use_haskell_instead_of_c_or_fortran_for_high/ <-- challenge: find a good comment here 10:49:40 generalised challenge: find a good comment on anything (a) to do with haskell, (b) in /r/programming 10:49:40 challenge accepted 10:49:41 ais523, portability to other POSIX or to all C platforms 10:50:23 I mean, it isn't really painful to be portable to other POSIX. 10:50:47 it's easy to be portable to posix + windows 10:51:08 ais523: But is "long" closer to "int_least32_t" or "int_fast32_t"? I would guess the latter, since the former is explicitly defined so that there can be no smaller types at least 32 bits wide, while the latter is just very vaguely "fast". 10:51:10 Vorpal: normally I decide what level of portability I want based on what I'm doing 10:51:12 elliott_, as long as you use a toolkit for your GUI needs that support both yes 10:51:19 yeah every program has a gui 10:51:30 elliott_, well if one exists obviously 10:51:37 elliott_, and most programs on windows have GUIs 10:51:41 if I'm doing something that can reasonably be written in portable C89/C99, I do 10:51:44 but now throw in classical MacOS in that. Have fun. 10:51:54 but often I'm not 10:52:29 ooh, I have an idea for an increasing clock that wouldn't be prone to scheduler issues 10:52:34 elliott_: found a good comment: "C is simple until you try to do anything nontrivial in it." 10:52:36 oh? 10:52:36 why not just use thread-local storage for the counter? :) 10:53:07 elliott_, probably will work if make split the job between threads in a deterministic way I guess? 10:53:16 jobs* 10:53:24 who cares if it doesn't? i doubt it checks for anything other than clock going backwards 10:53:37 pretty sure -j uses fork() btw 10:53:43 hm okay 10:53:44 " imperative programs correspond to certain forms of adversarial games." 10:53:53 * Sgeo|web is curious about that 10:55:05 Sgeo|web: oh dear 10:55:16 I hate that terminology, and think it's rather misleading 10:55:35 here, "adversarial" means "has more than one player", not "players are trying to prevent each other winning" 10:55:36 elliott_: this might be a good comment: http://www.reddit.com/r/programming/comments/lxfxb/use_haskell_instead_of_c_or_fortran_for_high/c2wzf5b 10:56:30 CakeProphet: that's a totally offtopic flamewar :p 10:56:51 elliott_: YOUR CRITERIA SAID TO FIND A GOOD TOPIC THERE 10:56:58 CHALLENGE ACCEPTED AND WON. 10:57:05 http://www.reddit.com/r/programming/comments/lxfxb/use_haskell_instead_of_c_or_fortran_for_high/c2wehnw is there a good response to this? 10:57:20 ais523: software hate of the day: gnu make has no way to turn off clock skew warnings. like, at all. 10:57:41 elliott_: they obviously anticipate someone trying to hack time. 10:57:46 +didn't 10:57:47 /however/, I think I can avoid it 10:58:05 elliott_, that is because they serve a purpose. If there is clock skew things are likely to break 10:58:26 Vorpal: yeah, keep whining all you want, but I ran bash under that jail and absolutely everything works fine 10:58:36 configure doesn't complain at all 10:58:37 elliott_, anyway I spotted an issue with the TLS solution. 10:58:40 * CakeProphet writes a command line utility in which every line of code has an attached option that conditionally turns it off. 10:58:42 make works fine and just prints a few stupid warnings 10:58:48 bash works perfectly 10:59:38 now to see if the fine people in #make will help me figure out how to make make work with files made before make was made 10:59:40 elliott_, what if job a builds foo.c from foo.y, then another job ends up building foo.o from foo.c later on. Will foo.o always have a newer timestamp toan foo.c? 10:59:52 than* 11:00:08 Vorpal: it will have the same timestamp. other things that can cause this: foo.o being built in the same second as foo.c. 11:00:12 hardly unlikely. computers are fast. 11:00:29 also supply a string argument to the option substitutes that line of code with the given code. so then when someone reports a bug I can just say, "Oh, you're just using the full capabilities of the command line options. see the man page." 11:00:30 elliott_, hm I thought there were sub-second timestamps these days, oh well 11:00:40 Vorpal: gnu make relies on a system with sub-second timestamps? 11:00:44 Access: 2011-11-03 13:45:55.172384014 +0100 11:00:44 Modify: 2011-11-03 13:45:47.960263808 +0100 11:00:44 Change: 2011-11-03 13:45:47.964263870 +0100 11:00:44 +not 11:00:46 elliott_, nope 11:00:53 my brain hurts for some reason. 11:01:00 -!- ais523 has quit (Remote host closed the connection). 11:01:10 /* FAT filesystems round time to the nearest even second! 11:01:11 Allow for any file (NTFS or FAT) to perhaps suffer from this 11:01:11 brain damage. */ 11:01:18 heh 11:01:35 file->low_resolution_time = 1; 11:01:35 OH COME ON, just assume everything is low-resolution 11:01:42 hmm 11:01:44 what if I used -B? 11:01:54 I don't need any update logic to be done 11:02:13 That's 2-second resolution, which seems unusually low 11:02:26 elliott_, I remember that causing an infinite loop with that once 11:02:49 Deewiant: that's fat for you 11:02:56 elliott_, anyway if same-second is okay then unpacking source @0 and building @1 should work okay, no? 11:03:05 elliott_: I meant that assuming that in all cases might not be entirely sane 11:03:11 Vorpal: yes, but 1 is an ugly timestamp 11:03:18 Deewiant: Yeah but it would help here :-( 11:03:23 elliott_, *shrug* 11:03:32 Vorpal: and make sets timestamps <1970 to the epoch 11:03:36 which sucks 11:03:40 maybe i'll patch make 11:03:43 *shr* 11:03:44 shrug* 11:04:03 `log Feather 11:04:19 `log Feather 11:04:29 O(n) is slowwwwwww 11:04:32 2008-09-07.txt:20:36:00: I mean, Feather makes me go "wow" 11:04:37 2010-12-13.txt:19:53:53: ais523: Feather revision control system: every change is applied retroactively, so there are no changes to track. Problem solved! 11:04:45 elliott_, I don't see the issue with @1 not being all zeros. Only someone with some weird sort of OCD or something would have an issue with that... 11:04:57 `log Feather 11:05:02 2011-07-30.txt:07:07:32: Feather and @ are fundamentally incompatible, as far as I can tell 11:05:05 `log Feather 11:05:07 CakeProphet, doesn't it work in /msg? 11:05:10 2009-10-07.txt:15:50:42: hmm... Feather's the only language I know in which you have to worry about portability within a program 11:05:12 because this spam is annoying 11:05:58 Deewiant: Seems that they wanted to squeeze the timestamp into two bytes, and sadly 86400 > 65536. 11:05:58 it's four lines, hardly spam 11:06:08 8! 11:06:10 Vorpal: the epoch is a far nicer timestamp than @1 11:06:15 changing it later will require a rebuild of all packagse 11:06:19 patching make is the nicset solution 11:06:24 elliott_, ... OCD 11:06:36 Vorpal: paranoid schizophrenia 11:06:41 hah 11:06:59 sorry, this is the "assign mental illnesses based on how people waste time on their computers" game, right? 11:07:18 nope 11:07:27 fizzie: They could have made it have 2-second granularity before noon and 1-second after 11:07:41 heh 11:08:01 Deewiant: Indeed, that would make the most sense ever in the history of things that make sense. 11:08:28 if (! (s <= FILE_TIMESTAMP_S (ORDINARY_MTIME_MAX) 11:08:28 && product <= ts && ts <= ORDINARY_MTIME_MAX)) 11:08:28 { 11:08:28 char buf[FILE_TIMESTAMP_PRINT_LEN_BOUND + 1]; 11:08:28 ts = s <= OLD_MTIME ? ORDINARY_MTIME_MIN : ORDINARY_MTIME_MAX; 11:08:29 file_timestamp_sprintf (buf, ts); 11:08:30 error (NILF, _("%s: Timestamp out of range; substituting %s"), 11:08:32 fname ? fname : _("Current time"), buf); 11:08:34 } 11:08:36 *sigh* 11:08:38 fizzie: Time goes slower before lunch. 11:09:46 ./make.h:#define FILE_TIMESTAMP uintmax_t 11:09:49 oh come /on/ 11:09:54 how hard can it be to handle 1969? 11:10:25 heh 11:11:08 tell me not to mail the gmake lists about this as a bug 11:11:18 "hi, i have some files on a legacy system. ..." 11:11:31 I think touch(1) should require root perms 11:11:38 elliott_, why 11:11:40 just to stop people accidentally touching a really ancient file 11:11:43 those bits are precious 11:11:48 ... 11:11:56 can you imagine like 11:12:07 the last unmodified file from the original unix development 11:12:10 timestamp in the 70s 11:12:22 someone accidentally opens it in their editor 11:12:25 which saves it automatically 11:12:36 fuck! you just destroyed history! way to go. hope that autosave was WORTH it, jackass. 11:12:36 why would the editor do that 11:12:47 Vorpal: why do computers do half the things they do. 11:12:55 MATLAB epoch (though it splits dates and times, and counts days from the epoch in the 'datenum') is 1-Jan-0000. 11:13:03 elliott_, well, for the same reason as they do the other half 11:13:18 Vorpal: right. because someone fucked up. 11:13:29 fizzie: what do matlab archaeologists do 11:13:54 elliott_, I was about to say "because that is what that specific pattern of electrical signals input to the device in question will cause the transistors in it to behave" but sure, your answer works too 11:14:12 Vorpal: yes. electricity is god's fuck-up 11:14:23 wait no, god's fuck-up is the whole universe. 11:14:25 heh 11:14:30 elliott_: All the numbers are doubles, so you can count up to around -2^53 days backwards too. 11:14:36 that's one big fucking fuck-up. 11:14:41 fizzie: heh 11:14:53 Not sure if the conversion functions handle that, though. 11:14:58 fizzie: It even simulates time getting wobblier the further you get to the big bang! 11:15:04 heh 11:15:04 See, it's a feature. 11:15:14 elliott_, but why does it do that for the future too? 11:15:28 Vorpal: Maaan, you haven't heard about the bad news? 11:15:31 >> datestr(-1, 'yyyy-mm-dd') 11:15:31 ans = 11:15:31 9999-12-30 11:15:32 Nobody tell him guys. 11:15:33 It's so sad. 11:15:34 "Uh." 11:15:39 elliott_, heh 11:15:46 I suppose the 'yyyy' format doesn't quite work for that. 11:15:56 #define PARSE_FILE_SEQ(_s,_t,_c,_p,_f) \ 11:15:56 (_t *)parse_file_seq ((_s),sizeof (_t),(_c),(_p),(_f)) 11:15:56 Why, GNU, why. 11:16:12 Why not 11:16:17 elliott_, strange macro indeed 11:16:27 Deewiant: At least put the type parameter /before/ the value! 11:16:48 Maybe it makes sense 11:16:53 Maybe YOU make sense. 11:19:08 Deewiant: Can Solaris make handle timestamps from 1969 11:19:21 I dunno 11:19:26 Deewiant: If yes, I'm gonna build Kitten on top of Solaris 11:19:36 http://en.wikipedia.org/wiki/Epoch_%28reference_date%29#Notable_epoch_dates_in_computing <- that's a lot of epochs. (Also MATLAB is winning.) 11:19:56 elliott_: Give me a one-liner that checks 11:20:21 Deewiant: echo 'bar: foo ; echo yay' >Makefile; touch -d @-1 foo; make bar 11:20:27 (May require better touch(1) than Solaris has to offer) 11:20:50 touch: bad time specification 11:21:09 Deewiant: Does it have a "gtouch"?-) 11:21:14 Deewiant: touch 31-12-1969T23:59:59Z or something. 11:21:18 Erm 11:21:18 -d that 11:21:41 fizzie: Nope :-P 11:21:51 touch: bad time specification 11:22:00 usage: touch [-acm] [-r ref_file] file... 11:22:00 touch [-acm] [-t [[CC]YY]MMDDhhmm[.SS]] file... 11:22:00 touch [-acm] [-d YYYY-MM-DDThh:mm:SS[.frac][Z]] file... 11:22:00 touch [-acm] [-d YYYY-MM-DDThh:mm:SS[,frac][Z]] file... 11:22:00 touch [-acm] [MMDDhhmm[yy]] file... 11:22:26 Deewiant: I'm sure you can write something in that format 11:22:26 % echo 'bar: foo ; echo yay' >Makefile; touch -d 1969-12-31T23:59:59Z foo; make bar 11:22:29 echo yay 11:22:32 yay 11:22:38 No warnings? Sweet 11:22:39 elliott_: Your date string was wrong-endian 11:22:45 Oh, right 11:23:00 (I didn't notice until after I pasted the usage) 11:23:00 fizzie: That Cocoa epoch worries me. 11:23:10 Taking the time part into account too, it was nicely middle-endian. 11:24:13 elliott_, fun fact: A /lot/ of stuff requires gmake to build. 11:24:22 I noticed that when using freebsd 11:24:30 Let's all talk about how Vorpal is actually seriously taking me serious. 11:24:43 Yes Vorpal, I am basing Kitten on OpenSolaris because it lets me use a certain timestamp without warnings and without a clever hack. 11:24:45 elliott_, no I'm not thinking you will use solaris 11:24:53 What's Kitten 11:25:02 Deewiant: Good 11:25:02 elliott_, but I did think you might end up using a bsd make or other non-gnu make 11:25:09 And actually likely to start existing now that I have the complete design down 11:25:12 elliott_: What does it do 11:25:13 (It's not @) 11:25:26 Deewiant: It, uh... distribu...tises? What is the verb that a distribution does. 11:25:40 Vorpal: Nah 11:25:42 Alright 11:25:46 Not to start with at least 11:26:03 Disturbs. 11:26:11 Deewiant: It disturbs. 11:26:41 Deewiant: It's based on a purely functional, source-model, transparent-binary-distribution package, configuration /and service/ manager!! Transparent multilib!! FREE PONY 11:26:43 I think that'd make it a disturbance 11:27:35 Disturbitbutbution. 11:27:42 Disturbi-butt-ion. 11:27:44 Deewiant: Maybe it distempers instead. 11:27:58 A distemperance? 11:28:13 "What's your favourite Linux distemp?" 11:28:14 Yes. 11:28:20 Deewiant: It's the best distemperance. 11:28:45 Windows is my favorite linux disturbi-butt-ion 11:28:47 Have I mentioned: Generic support for subsuming other package managers??? 11:28:49 SO GOOD. 11:29:28 elliott_: is it successfully compatible with all existing systems while allow their software to cooperate seamlessly? 11:29:43 It's actually a cardboard box. 11:29:50 Inside is a kitten. 11:29:59 The kitten makes you forget there was a Linux distro, and also not care because aww, kittens. 11:31:07 "Kitten - the robot's choice." 11:31:07 http://cutekittehs.com/files/2011/08/cute-adorable-kittens-0044.jpg obligatory 11:31:24 CakeProphet, turn on that blender now! 11:31:29 SO TEMPTING 11:31:40 they should do that on "will it blend" 11:31:41 XD 11:33:11 Vorpal: Sorry but you have no soul. 11:33:18 Kitty. Kitty. Kitten I will save you. 11:33:19 There. 11:33:20 All better. 11:33:42 fizzie: OMG please please please write me some (robotfinds)Kitten ads. 11:33:46 Thx 11:33:49 blended cat is the best cat. 11:34:11 for drinks! for parties! go pitapat! go flip-flap! 11:35:23 Vorpal: Sorry but you have no soul. <-- sssh! keep quiet about that! 11:35:54 Super Sexing Shell. 11:36:00 sssh. 11:36:06 XD 11:37:51 It's at least: "bizarre ssh host management" / "super ssh" / "Simplified SGML for Serial Headers" 11:38:07 runCurses :: Curses a -> IO aSource 11:38:07 Put the terminal in graphical mode, including enabling special keys, colors, and mouse events (if supported). 11:38:07 After the Curses block has finished running, the terminal is reset to text mode. 11:38:17 Thanks for putting this at the top of the Haddock documentation, I can discount your ibrary now! 11:38:35 Something wrong? :-P 11:38:53 -!- Phantom_Hoover has joined. 11:38:55 Deewiant: Yeah, the part where it wants me to write my entire IO code in an opaque Curses monad 11:39:20 It's called type-safety 11:39:22 No transformer? 11:39:34 Deewiant: No transformer 11:39:36 It's MonadIO 11:39:38 Deewiant: Because it's literally IO 11:39:41 There was a new Discworld book????? 11:39:42 Phantom_Hoover: You have 2 new messages. '/msg lambdabot @messages' to read them. 11:39:47 Deewiant: And yes, it is; exercise: implement fixIO 11:39:48 How am I this far out of the loop. 11:39:52 erm 11:39:54 Deewiant: And yes, it is; exercise: implement forkIO 11:40:01 Deewiant: Actually let's make it easier 11:40:01 There was a new Discworld book????? <-- which one? 11:40:04 Deewiant: Implement catch 11:40:40 Deewiant: (This is "easy" in the sense of "still actually impossible") 11:40:46 Vorpal, Snuff, apparently. 11:41:04 I missed it too 11:41:04 I only noticed through Pratchett's Facebook page, three days after it was released. 11:41:05 oh well 11:41:13 OK wow hscurses why would you actually reuse ncurses' naming scheme. 11:41:15 That's... that's not a good idea. 11:41:22 vty it is I guess 11:41:34 Even if it does use under_scores 11:41:54 Actually wow these underscores really hurt me inside 11:42:33 At least it's got some nice pure stuff? 11:42:53 elliott_: Just liftIO :: Curses a -> IO a and you don't need to use runCurses? 11:43:08 Deewiant: I don't think you understand what liftIO is 11:43:19 Or how to unify types :P 11:43:21 :t liftIO 11:43:22 Ambiguous occurrence `liftIO' 11:43:23 It could refer to either `Control.Monad.Error.liftIO', imported from Control.Monad.Error 11:43:23 or `Control.Monad.Logic.liftIO', imported from Control.Monad.Logic 11:43:25 Oh, whoops 11:43:28 lambdabot... 11:43:37 heh 11:43:50 But yeah, liftIO is the other way around, duh 11:43:52 Phantom_Hoover, well I ordered the book now. 11:44:21 OItfil :: (oIdanoM m) => m a -> IO a 11:44:42 http://hackage.haskell.org/packages/archive/vty/4.7.0.6/doc/html/Graphics-Vty-Attributes.html#t:MaybeDefault 11:44:45 Gross??? 11:44:56 Why does nobody have any taste 11:45:37 http://hackage.haskell.org/package/vty-ui 11:45:42 This looks promising I guess 11:45:59 Actually no 11:46:03 I don't want any of those widgets 11:46:10 Apatr from a progress bar 11:46:14 s/Apatr/Apart/ 11:46:41 hscurses is the direct binding, makes sense that it reuses the names :-P 11:48:11 Deewiant: The world needs more "direct bindings except we use better names" 11:48:30 The problem with that is difficulty of translation 11:48:34 But sure, it could provide both 11:48:41 It has the helper thing, don't know if that's any good. 11:49:42 I'm just using vty because it has decent-looking docs and is well-maintained :P 11:49:46 Even if it does argh_ugh 11:49:47 -!- boily has joined. 11:49:54 (Technical term(tm)) 11:52:15 -!- derdon has joined. 11:55:27 -!- Phantom__Hoover has joined. 11:56:18 -!- Phantom_Hoover has quit (Ping timeout: 240 seconds). 12:00:54 elliott_: there is someone in #django named Kittens. 12:01:07 I doubt they are actually kittens. 12:01:21 elliott_: you may be surprised! 12:07:24 http://pastebin.com/EdJDazYS 12:07:27 such helpful people on #django 12:07:30 -!- ais523 has joined. 12:08:07 -!- CakeProphet has changed nick to DjangoProphet. 12:09:14 DjangoProphet: He said DjagoProphet. 12:09:20 oh he did. 12:09:28 -!- DjangoProphet has changed nick to DjagoProphet. 12:10:14 Crafty advertising tool, only help people if they agree to change their names to be based on your product. 12:10:50 "The main object. At most one should be created. An alternative is to use unsafePerformIO to automatically create a singleton Vty instance when required." 12:10:50 then ask about their irc client mysteriously. 12:10:55 Why do you DO this to me, guys. 12:11:22 Deewiant: Uuuurgh: terminal_handle :: (Applicative m, MonadIO m) => m TerminalHandle 12:12:12 DjagoProphet: Possibly the IRC client question is another part on their "will we help or not" checklist. If you were using, say, a client written in PHP, they'd be all "no wai". 12:13:13 you know what? 33554432 is an awesome power of 2 12:14:08 that's a power of 2? 12:14:10 yes 12:14:12 32M. 12:14:14 33554432 bytes should be enough for everyone. 12:14:21 2**25 12:14:24 but it doesn't /look/ like a power of two 12:14:30 that's why it's awesome 12:14:34 :( 12:14:37 elliott_: The Applicative, or what? :-P 12:14:39 It's an odd power, though, those are all a bit... odd. 12:15:08 Deewiant: (a) Literally isomorphic to IO TerminalHandle (OK, it can actually not be isomorphic, if you have a completely broken monad, in which case it'll probably do something much less sensible than a single lift) (b) Would it kill you to use liftM/return/ap when you're writing library code 12:15:22 fizzie: We should only use meta-powers of two. 12:15:54 elliott_: I'd prefer it if everything used MonadIO instead of IO: no more lifting 12:16:15 Deewiant: Encouraging monad transformer stacks on top of IO is a very bad idea 12:16:26 PowerTower is the best function. 12:16:29 elliott_: how does a number look like a power of 2? 12:16:35 Not only are they a code smell, they're just plain a pain in the arse to use 12:16:36 cf. catch 12:16:40 Yes, I know of monad-control; it's hideous 12:17:18 fizzie: I agree Tower of Power is an excellent musical group. http://www.youtube.com/watch?v=7LjrCV4Gnxw 12:17:58 elliott_: How should one avoid them; in general most programs are internally largely StateT s IO 12:18:12 Deewiant: s/most programs/most programs written in an imperative language/ 12:18:28 elliott_: No, most programs :-P 12:18:31 Nope 12:18:32 * ais523 vaguely wonders what the correct way to write "a list of 100 1s" is in OCaml 12:18:34 Most programs do I/O internally 12:18:44 It's the StateT part 12:18:50 I could write a helper function, but ideally I'd like to find something in List to do that 12:18:52 it just isn't there 12:19:02 Deewiant: If you want to thread everything through a State monad global, be my guest! (It will be horrible.) Oh, and I hope you never, ever want concurrency! 12:19:04 elliott_: Most programs have the I part of the I/O affect their state in some way 12:19:22 help what's state. 12:19:25 elliott_: I didn't say "everything", I just meant that it'd show up in a lot of places 12:19:28 Best powers of two to use: http://oeis.org/A014221 "0, 1, 2, 4, 16, 65536 ... comments: Next term has 19729 digits." 12:19:38 Deewiant: By saying most programs are (StateT s IO) you're saying that every single component of most programs needs to access and modify every piece of state, and also needs to perform completely arbitrary IO 12:19:46 elliott_: Yeah, that's not what I meant 12:19:55 Deewiant: So if you're right, modular programming is a hopeless task, separating software into components is futile, and functional programming is hopeless 12:20:03 Score one for transformer stacks? 12:20:06 elliott_: Still not what I meant 12:20:24 Deewiant: You might not mean it, but it's what you said; that's what you're claiming by putting all your program in that 12:20:35 elliott_: I said "largely" 12:20:58 elliott_: By which I meant that it'll show up in many if not most of the top-levelish functions 12:21:00 Deewiant: Then what does "largely" make it mean instead 12:21:22 People who use monad transformer stacks don't localise their use to "top-levelish" functions 12:21:23 elliott_: But of course that doesn't mean that every single IO-using or s-using function has to be in the StateT 12:21:28 I've not seen a single person do that, they stuff everything in there 12:21:31 I do :-P 12:21:37 At least nowadays 12:21:40 I don't believe you 12:21:55 And if it's just top-level functions then "MVar s -> IO a" is hardly worse than "StateT s IO a" 12:22:12 Bonus: It isn't a royal pain to make "s" a more specific type for things that only need certain parts 12:22:20 Bonus: You can do concurrency 12:22:31 fizzie: Ha. 12:22:39 Oh, it's just Ackermann. 12:22:50 * ais523 vaguely wonders what the correct way to write "a list of 100 1s" is in OCaml 12:22:54 ais523: does it have an iota operation? 12:22:58 iota : int -> int list 12:23:05 iota 9 = [0;1;2;3;4;5;6;7;8] 12:23:05 or w/e 12:23:20 no 12:23:29 ais523: seriously? 12:23:36 it can't do ranges? 12:24:09 not in Pervasives or List 12:24:25 (which, as we've already established, are the only modules allowed inside the sandbox) 12:24:32 also, those are the most obvious modules for a range operator to be in 12:24:50 isn't this what batteries is for 12:24:58 -!- pikhq_ has quit (Ping timeout: 252 seconds). 12:25:02 -!- pikhq has joined. 12:25:07 btw, I just kicked Wooble 12:25:10 for a legitimate reason 12:25:15 I thought you might be amused 12:25:46 Well, it's the PowerTower[2, n] too, just turns out it's Ackermanny too with the proper definition. 12:26:05 fizzie: is that Mathematica syntax? For shame! 12:26:41 ais523: It's Mathematica syntax because it's a Mathematica function; I don't know any other place that'd call it PowerTower. 12:27:02 hmm 12:27:12 isn't "tetration" the usual name? 12:27:37 Possibly; it's a name for it I've seen, at least. 12:28:06 And the one I was thinking of; but the http://mathworld.wolfram.com/PowerTower.html just mentions it in a somewhat non-prominent way. 12:28:07 Mathematica is actually quite similar to Prolog without the backtracking, internally 12:28:18 which is probably worrying 12:28:18 ais523: Isn't everything Wooble says kickable? 12:28:23 elliott_: no 12:28:30 Are you sure? 12:28:38 he accidentally pasted a hundreds-of-lines-long pastescript into #devnull_nethack, though, and that definitely is 12:28:57 ais523, pastescript? I was wondering what it was supposed to bea 12:28:58 be* 12:29:00 what is it for? 12:29:21 Vorpal: setting autopickup exceptions 12:29:24 aha 12:29:33 devnull turned on APE, but not the ability to configure it via the RC file 12:29:36 so you have to set them in-game 12:29:43 ais523, that sucks 12:30:02 -!- DjagoProphet has changed nick to CakeProphet. 12:30:25 there is no cow level. 12:30:31 CakeProphet, ? 12:30:37 Vorpal: Diablo meme 12:30:38 Does anyone know how to make ncurses use the "primary" screen? 12:30:42 Rather than switching away to the alternate thing. 12:30:49 Blizzard put in a secret cow level in Diablo II as a reference to it 12:30:59 I see 12:31:11 (You guys know what I mean, right?) 12:31:21 the cheat code for god mode in Diablo 2 is thereisnocowlevel 12:31:30 which, surprisingly, disabled the secret cow level. 12:31:44 elliott_, not entirely. 12:31:59 elliott_, do you mean that once you edit the program there is no trace of the stuff it displayed? 12:32:01 Vorpal: Ever noticed how curses prorgams reset your scrollbar? 12:32:02 exit* 12:32:05 elliott_, right 12:32:06 that 12:32:09 And don't leave a trace in your shell session? 12:32:09 yeah 12:32:13 http://www.youtube.com/watch?v=1XAfUcvdhmc 12:32:15 elliott_, no I don't know how 12:32:16 good music. 12:32:17 of course, as befits computer game players, they figured out a way to abuse the cow level for farming massive amounts of exp in multiplayer 12:32:20 I just want to make progress bars. :( 12:32:22 elliott_: StateT s IO doesn't preclude concurrency, you just need to runStateT them and then figure out what to do with the state afterwards 12:32:25 I guess I'll have to roll my own with ANSI? 12:32:26 elliott_, use plain termcap? 12:32:38 wait, why use screen for a progress bar? 12:32:40 ais523: isn't that pretty much its purpose? I don't think it's much of an abuse. 12:32:45 or terminfo rather 12:32:53 elliott_: ansi-terminal 12:32:53 Deewiant: "You just gotta implement your own concurrency strategy; btw hope you weren't expecting shared memory of any kind, or MVar style semantics, or transactions, or ..." 12:33:03 CakeProphet: its purpose is terminal multiplexing; I don't see what that has to do with progress bars 12:33:12 elliott_: Uh? 12:33:17 ais523: `you must have me mistaken with someone else 12:33:20 elliott_: If you want to pass in an MVar, pass in an MVar 12:33:24 elliott_: MVar a -> StateT s IO b 12:33:41 CakeProphet: no, you were talking about screen, so was I 12:33:50 Deewiant: "Most programs" don't have a bunch of state that only gets synchronised when a thread dies 12:33:54 Your scenario is ridiculous 12:34:02 ais523: oh, no I was talking about the secret cow level. 12:34:04 >_> 12:34:08 oh right 12:34:10 elliott_: You're not alone: http://www.shallowsky.com/linux/noaltscreen.html has the termcap/terminfo capability to mess with. 12:34:10 definitely not about progress bars. 12:34:11 wait, why use screen for a progress bar? 12:34:20 ais523: That's not what screen is. 12:34:39 fizzie: Heh. I want to implement this in the program though. 12:34:53 elliott_: I still don't get what you're trying to do, or to tell me 12:34:53 Deewiant: ansi-terminal hasn't been updated for over a year which is worrying 12:35:10 Also it's not exactly the most high-level API 12:35:25 But I guess it'll do 12:35:52 ais523: Do you really want me to bother explaining when the misinterpretation of terminology you made makes the chances of you giving a correct answer ~0? 12:35:59 If you don't know what the alternate screen is, you can't help :p 12:36:00 elliott_: There's wrappers to it 12:36:29 elliott_: oh, I thought you were talking about screen(1) 12:36:37 I do know what the alternate screen is 12:36:43 but I've been having serious problems following your conversation 12:36:47 which implies that I'm misunderstanding something 12:36:49 Deewiant: I see exactly one 12:36:56 elliott_: Maybe they don't have such state, but most programs don't have concurrency in the first place so I can't think of a sufficient amount of examples. But fair enough, most concurrent programs probably should avoid StateT 12:36:59 I'm asking you to explain again in different words in the hope that I understand it the second time 12:37:00 elliott_: Maybe there was only one 12:37:02 ais523: Run curses program; note how it runs on the alternate screen 12:37:04 elliott_: I've only ever used ansi-terminal directly 12:37:08 ais523: Note how all I want is an inline progress bar 12:37:21 Deewiant: It's called AC-Terminal; I think I started ignoring all packages starting with AC- because their author is an amateur or something 12:37:32 Also because there's like fifty of them 12:37:42 elliott_: Yeah fair enough 12:37:44 elliott_: aha, it's to do with curses(3), not with screen(1) 12:37:54 normally when I make progress bars, I just use a bunch of \r 12:38:00 and redraw them each time 12:38:01 ais523: It's not really to do with curses either, I'm asking for a general solution 12:38:04 that works even on dumb terminals 12:38:07 And yes, I am aware one can do progress bars in that manner 12:38:09 But not on Windows 12:38:11 but I'm not sure it's a perfect solution 12:38:14 Obviously telling me that isn't going to actually help :P 12:38:16 Deewiant: Windows doesn't respect \r? 12:38:18 'screen' has a command (termcap/terminfo/termcapinfo) to tweak the current termcap/terminfo entry without going through the hassle of editing any files; if you feel sufficiently motivated, you could check how that's done; presumably by environment variables somehow. (At least for termcap you can just set TERMCAP; don't know about terminfo, though.) 12:38:22 I'll just use ansi-terminal, it does colours and cursor controls 12:38:23 ais523: I'm pretty sure cmd.exe doesn't 12:38:26 ais523: But not entirely 12:38:33 Even if the Windows support is beyond useless to me 12:38:36 elliott_: so what are you trying to do that \r progress bars can't do? 12:39:11 Deewiant: but cmd.exe isn't responsible for rendering stdout, NTVDM is; and I know that at least the old-fashioned conio.h API handles \r just fine 12:39:21 presumably whatever it was replaced with does too 12:39:26 ais523: I'm not looking to get XY Problemed; manually writing out ANSI escape codes and \rs is as ugly and unmaintainable as it is non-portable 12:39:28 wow okay Django has stumped me. 12:39:31 Especially since I already have a solution 12:39:56 elliott_: the amusing thing is, I'm seriously considering to change Ace to hardcode ANSI escape codes rather than using termcap 12:40:03 ais523: NTVDM is the 16-bit emulator, I fail to see how it's relevant 12:40:12 Deewiant: oh, that would explain my results 12:40:13 ais523: Why not terminfo 12:40:20 elliott_: termcap/terminfo/curses/etc 12:40:30 the problem is, they adapt to the terminal you're actually using 12:40:37 which means that the ttyrec might not play back on other people's terminals 12:40:55 and often, the entries in the database are wrong, so they don't even adapt to your own terminal 12:41:10 meanwhile, VT100, and some of the extensions of it, are both standardised and actually work on pretty much all terminals in practice 12:41:20 so hardcoding that seems to work better than using terminal-specific codes 12:41:24 I guess it's a different meaning of "portable" 12:41:29 Deewiant: Barf @ it uses imperative actions to control things like colours; I guess I'll look at ansi-wl-pprint too, which is a wrapper, but I doubt it can do progress bars 12:42:39 elliott_: I think ansi-wl-pprint just has pretty printing with colours and bold and stuff, not the ability to write over earlier text 12:42:53 Deewiant: Technically, System.Console.ANSI doesn't offer that either 12:42:58 Deewiant: You have to use the cursor functions to do that 12:43:13 So I could just print out each progress bar step with the ansi-wl-pprint stuff and use ansi-terminal to overwrite it each time 12:43:13 Well, that /is/ a way of doing that 12:43:22 Do you have another way? :p 12:43:27 Right, I just meant you can't use solely ansi-wl-pprint 12:43:31 Right 12:43:40 Might be overkill for just a progress bars 12:43:42 s/s// 12:43:45 Depends on how much I use this 12:43:51 I can always make a little mini-module of tricks 12:44:01 s/s\//s$\// 12:44:12 'Thanks to Brandon S. Allbery and Curt Sampson for pointing me in the right direction on xterm title setting on haskell-cafe. The 0 signifies that both the title and icon text should be set: i.e. the text for the window in the Start bar (or similar) as well as that in the actual window title. This is chosen for consistent behaviour between Unixes and Windows." 12:44:14 --docs of hCursorUp,hCursorBackward,hCursorForward,hCursorDown 12:44:16 s/'/"/ 12:44:21 These docs are very badly organised 12:49:31 :t round 12:49:32 forall a b. (RealFrac a, Integral b) => a -> b 12:51:05 elliott_: btw, am I mad for using the powers of 2 in lexicographical order as a test input to a sort function? 12:51:11 yes 12:51:13 it seemed to be reasonably interestingly misordered 12:51:46 and hits a few expected corner cases (it's meant to be a bignum sort, and it goes a little over the range of an integer in my 32-bit OCaml impl) 12:52:51 hmm, is it a good idea to connect a wired and wireless network, both designed to go to the Internet at large, simultaneously? 12:52:58 I'm guessing no because they have different proxy settings 12:53:17 blocks :: [Char] 12:53:17 blocks = "▏▎▍▌▋▊▉█" 12:53:17 awwwww yeah 12:53:26 ais523 has no idea how fancy my progress bar is going to be. 12:54:00 ais523, they have proxy settings? 12:54:06 heh 12:54:12 the wired network firewalls everything, including 80 12:54:23 but has an autoproxy to let you access the Web 12:54:24 ais523, so you can't ssh out for example? 12:54:28 (one of the WPAD things) 12:54:28 Or use https? 12:54:34 443 can go through the proxy 12:54:47 25 works too, but only to a few addresses 12:54:50 so man in the middle by default? 12:54:54 yep 12:54:56 ouch 12:55:01 I wouldn't use that network 12:55:09 work network, they're all like that 12:55:20 and I'm surprised firefox doesn't display wrong certificate for the proxy all the time 12:55:34 well, with a work computer, it's in the root CAs 12:55:36 wrong certificate errors* 12:55:39 hm 12:55:49 ais523, I would use the wireless if it is saner 12:55:53 I think it might not decrypt the contents of an HTTPS transmission, though, just check where you're connecting 12:55:58 the wireless is saner except it keeps dropping 12:56:06 hmm, idea 12:56:09 3G 12:56:16 I'm going to connect to https://google.com in Chromium 12:56:29 that is going to use spdy, no? 12:56:36 oh right, I'm on the wireless, ofc it's going to work 12:56:42 and it did just jump to an insecure version 12:56:54 ais523, try https://encrypted.google.com 12:57:07 aha, that works 12:57:15 anyway, chromium has Google's certs hardcoded 12:57:19 *Chromium 12:57:20 ah 12:57:24 gah 12:57:27 this progress bar /almost/ works 12:57:34 so can detect MITMing even with a certificate added by your employer 12:57:39 heh 12:57:44 I'll probably try that next time I'm on the wired 12:57:54 my guess is that the proxy can tell I'm connecting to Google, but doesn't decrypt the contents 12:57:56 I'm not sure, though 12:58:15 who wants to run a program that will make them vaguely worried that their terminal can output such SMOOTH PROGRESS BARS? 12:58:28 everyone. everyone wants that program. 12:58:30 that everyone could be you. 12:58:36 elliott_, it is unicode block characters, isn't it? 12:58:38 *shrug* 12:58:45 Vorpal: yeah, but it's seriously unnerving :P 12:58:52 elliott_, doubtful 12:59:06 Vorpal: see for yourself: http://sprunge.us/IhEb 12:59:42 ais523: it should be incapable of decrypting the contents 12:59:43 > 56345683457823567897543234567 * 9313456789341754124566812142 12:59:44 524773088150368273322823696325607978422660521630529712514 12:59:46 elliott_, does it work on ghc 6.whatever? 12:59:49 sur 12:59:50 e 12:59:54 needs the small ansi-terminal library 12:59:59 too much work 13:00:10 it's in AUR 13:00:19 elliott_, I'm on my ubuntu laptop 13:00:21 also will install in about 5 seconds with "cabal install ansi-terminal" 13:00:44 Vorpal: oh, and apt-get install libghc-ansi-terminal-dev 13:00:49 ^ testcase to determine that a) the library does indeed handle bignums rather than using native ints, b) it multiplies in O(log n), not O(n) 13:00:53 depending on how new the ubuntu is 13:01:04 elliott_, 10.04 LTS 13:01:19 elliott_: what about installing Cabal? or does Ubuntu have that by default nowadays? 13:01:41 ais523: I offered that; Vorpal's just looking for excuses though, so I'm offering as many trivial solutions as possible to antagonise him 13:01:57 elliott_, I'm going to install it, sure 13:02:05 just going to take a while over 3G 13:02:13 elliott_: do Unicode block characters line up perfectly in most terminals? I'm used to them leaving pixel-wide gaps 13:02:14 (I'm not at home atm) 13:02:31 ais523: try the program and see; I've had some alignment issues getting the full thing to work, but the program doesn't suffer from them by definition 13:02:48 elliott_, yeah the package is not in the repo, will check the cabal solution 13:03:01 oh come on: Unicode has every block width going from the left from eighth to whole, but only (a) right one eighth and (b) right half 13:03:06 WHY WOULDN'T YOU JUST THROW THEM ALL IN 13:03:08 WORK WITH ME HERE 13:03:15 ▏▎▍▌▋▊▉█ 13:03:15 ▏▎▍▌▋▊▉█ 13:03:17 yeah, I'm missing System.Console.ANSI; what package is it in? 13:03:22 Lines up for me 13:03:23 libghc-ansi-terminal-dev? 13:03:34 ais523: yes 13:03:37 or just cabal install ansi-terminal 13:03:53 Vorpal: ais523: I'm not sure whether it's more or less unnerving if you take the last 0 off the threadDelay line 13:04:00 (run the program with "runhaskell foo.hs", btw) 13:04:03 the package doesn't exist in this Ubuntu 13:04:15 ais523: cabal install ansi-terminal, then; it'll install into ~/.cabal 13:04:19 elliott_, it tells me I have to cabal update first 13:04:20 and I don't have cabal either 13:04:24 what package is /that/ in? 13:04:27 Vorpal: do that, then 13:04:27 elliott_, this is going to take a while. I'm on EDGE now. 13:04:34 ah, "cabal-install" 13:04:46 ais523: you really shouldn't use debian ghc btw, but *shrug* 13:04:47 Note: there is a new version of cabal-install available. 13:04:47 To upgrade, run: cabal install cabal-install 13:04:50 should I do that? 13:04:52 probably not I guess 13:04:58 elliott_: what should be used instead? and what's wrong with debian ghc? 13:05:06 Vorpal: not unless you want to break everything 13:05:06 Vorpal: that's just what CPAN does 13:05:14 elliott_, right 13:05:18 this implies it may be a bad thing 13:05:25 elliott_, where was the link now again? 13:05:33 Vorpal: in your scrollback 13:05:38 -!- derrik has joined. 13:05:39 elliott_, *shrug* 13:05:56 Vorpal: your choice whether you want to make the cabal-install work a waste or not :) 13:06:03 i'm busy typing a response to ais523, who asked a non-trivial question 13:06:07 $ file foo.hs 13:06:07 foo.hs: UTF-8 Unicode Java program text 13:06:08 heh 13:06:29 elliott_, why is it green? 13:06:40 progress bars are green 13:06:44 elliott_, anyway it is kind of jerky 13:06:46 t.o: In function `sYB_info': 13:06:47 (.text+0x6ac): undefined reference to `ansizmterminalzm0zi5zi5_SystemziConsoleziANSIziUnix_showCursor_closure' 13:06:49 elliott_: in which OS? 13:06:52 ais523: you didn't do what I told you to do 13:07:08 what did you tell me to do? I installed cabal, then did cabal install, then tried to compile with ghc 13:07:12 ais523: the binary package installed manually; and, well, debian/ubuntu ghc /itself/ isn't broken, but it /is/ years old except in the very latest releases; but more importantly, if you install any non-core (= shipped with ghc) libraries with apt-get, then you can't mix it with cabal-installed libraries at all, which is problematic because debian's haskell library set is (a) old (b) incrediby incomplete 13:07:17 ais523: (run the program with "runhaskell foo.hs", btw) 13:07:35 ah, right 13:07:50 -!- sebbu2 has joined. 13:08:05 hmm, it's kind-of jerky due to rounding errors 13:08:16 in Unicode 13:08:24 but it does make a continuous bar in gnome-terminal 13:08:29 -!- sebbu has quit (Ping timeout: 255 seconds). 13:08:34 it's perfectly smooth here 13:08:42 sometimes it moves one pixel, sometimes too 13:08:45 *two 13:08:56 Vorpal, I'm going to guess it's the import statements 13:09:02 aha, because it can't subpixel alias, because it's green 13:09:07 Except for missing a semicolon, they're pretty much identical 13:09:13 it'd be three times smoother if it were white 13:09:15 Madoka-Kaname: and not being lowercase 13:09:21 `addquote aha, because it can't subpixel alias, because it's green it'd be three times smoother if it were white 13:09:23 706) aha, because it can't subpixel alias, because it's green it'd be three times smoother if it were white 13:09:27 *antialias 13:09:28 Well, the syntax is the same. 13:09:31 hmm, probably better with just the second one 13:09:34 `unquote 13:09:37 ​*poof* aha, because it can't subpixel alias, because it's green it'd be three times smoother if it were white 13:09:44 but that isn't funny at all then, so meh 13:09:46 You can have uppercase package names in Java (but it's probs bad practice) 13:09:47 elliott_: but out of context, it's not funny 13:09:58 yep 13:10:01 it just looks like an out-of-context "that's what she said" sort of innuendo 13:10:07 and those aren't generally that funny 13:10:12 ais523: haha omg i just created an unintentional fancy animation 13:10:23 elliott_: you don't normally omg 13:10:26 no but 13:10:27 Madoka-Kaname, hm yeah 13:10:29 this is fun :DDDDd 13:10:30 are you sure you're elliott_? 13:10:34 I wonder why it resulted as "Java" instead of "Python" 13:10:53 Java would have more semicolons 13:11:12 Madoka-Kaname, python tends to not have foo.bar when importing very often at least 13:11:29 from foo import bar 13:11:45 hmm, potentially interesting project: write a really good programming language guesser 13:11:57 that's like what file(1) tries to do, except actually working 13:12:17 ais523, ohcount has a quite okay one in it iirc. It mixes up C and C++ sometimes, but that is actually quite hard to tell apart sometimes 13:12:22 no I'm registered to freenode, if that's what you meant... I have clue what you're saying. 13:12:27 ...mischan. 13:12:39 I too have clue what you're saying. 13:12:40 you would basically have to try to parse it as both C and C++ completely and see which worked (possibly both) 13:13:04 Vorpal: a typical C++ program would contain at least one method call, which would give away that it wasn't C 13:13:15 if you aren't using methods, than what are you doing using C++? 13:13:21 ais523, well for headers it can be less clear I guess 13:13:32 right, headers are often C/C++ polyglots 13:13:40 but in the case of a header, the correct language is "cpp", I suspect 13:13:48 hm 13:14:20 ais523, anyway ohcount gets confused if you have stuff like this in a header: struct foo { int new; ... } 13:14:35 obviously C, it doesn't parse as C++ 13:14:38 indeed 13:14:54 Vorpal: It calls 'struct foo { int new; };' C 13:14:56 ais523, but a simple keyword scanning method to determine if it is C++ or C wouldn't handle that 13:15:10 Deewiant, oh kay 13:15:12 okay* 13:15:15 keyword scanning isn't really the way to go 13:15:23 Deewiant, I distinctly remember an older version didn't handle that though 13:15:24 because languages tend to have similar keywords 13:15:32 I think looking for keyword/punctuation combos would work better 13:15:56 ais523, well iirc it did that to separate C/C++ mostly. And other methods to determine it was one of them in the first place 13:16:13 how does it separate C and C++ from C# and Java? 13:16:22 they look pretty similar keyword-wise too 13:16:25 don't remember 13:16:29 it is open source anyway 13:16:31 C and C++ don't have import. 13:16:33 Right? 13:16:36 It seems to have a parser for all the languages it supports, maybe it just tries to parse as everything and then has some supersedence rules: https://github.com/blackducksw/ohcount/tree/master/src/parsers 13:16:50 Madoka-Kaname: there are C and C++ compilers that accept "#import" as a preprocessor directive 13:17:01 Oh, except no C++ 13:17:01 ais523, but that's easily distinguished from Java imports. 13:17:04 That I can see 13:17:04 #import vs import 13:17:13 right 13:17:27 Deewiant: isn't that because C++ is TC to even parse? 13:17:36 Deewiant, c.rl handles C and C++ it seems 13:17:53 More interesting might be distinguishing Java from Scala from Python using keyword scanning. 13:18:04 what on earth is .rl anyway? 13:18:15 Vorpal: Ragel 13:18:20 Well, Scala's probs a little distinctive with val/var/class/import all at once. 13:18:20 hm 13:18:23 ais523: Depends on what you call the "parse" stage, I guess 13:18:25 I'd imagine Java from Scala would be easy using punctuation 13:18:46 Deewiant, ragel being a parser generator for C? 13:18:49 Scala vs Python should be easy. 13:18:53 The former has curly braces. 13:18:57 ais523: Finding stuff like whether "new" is used as a variable name could be done before the TC part, I think 13:19:23 ais523, Java vs Groovy? 13:19:27 Java vs C#? 13:19:29 Vorpal: A parser generator, at least 13:19:31 I don't know Groovy 13:19:45 Haskell vs Python? 13:19:55 Java vs C# is easiest in practice by looking for getters and setters, the conventions for those are entirely different in the two languages and they're pretty common 13:20:08 Madoka-Kaname: "let" is all over the place in Haskell, not so in Python 13:20:20 ais523, doesn't C# use "using" and java "import" too? 13:20:25 does anyone know how to print a unicode character as high as the line height? :p 13:20:49 elliott_: use a printer? 13:20:52 ais523, Perl vs line noise? 13:20:57 ais523: heh 13:20:59 elliott_: Your blocks :: [Char] were line height for me 13:21:00 Madoka-Kaname: that one is really easy 13:21:05 Deewiant: Not for me :( 13:21:11 line noise doesn't look anything like Perl 13:21:14 have you not seen it before? 13:21:15 =p 13:21:19 Deewiant: It matters because I need to set the background so that partially-filled characters don't have a white background 13:21:25 As opposed to the grey of the rest of the unfilled area 13:21:29 More seriously. 13:21:31 But that leaves an ugly grey line above the bar for me 13:21:37 even obfuscated or golfed Perl tends to gravitate towards particular characters 13:21:49 Deewiant: Not for me :( <-- nor for me, do unicode line drawing characters join up for you 13:21:51 ? 13:21:52 Ah, hey. 13:22:05 Vorpal: That's unrelated. 13:22:21 elliott_: I think you have either a font problem or a line-spacing problem and in either case, you "can't" make it work 13:22:21 elliott_, not if the terminal inserts padding between lines 13:22:28 Deewiant: Right 13:22:31 ais523, would you look at file extensions or shebangs? 13:22:42 Deewiant: So I suppose it will still fail completely if you do the "in suck.h #define BEGIN {, #define END }; in trytofiguremeout.c #include "suck.h", no curly braces at all" thing. 13:22:42 Deewiant: I guess the only solution is to give up my fancy granularity :( 13:22:51 i.e. if extension matches a known language, that language gains supercedance over every other language, if it parses as it 13:23:05 Madoka-Kaname: yes, in practice; I'm interested in the theory of doing without, though 13:24:17 fizzie: Well yes, you can do "anything you want" with CPP, of course 13:24:27 Deewiant: Looks like gnome-terminal has the exact same problem, so I can hardly ignore it 13:25:12 elliott_: Make one-line high bars, or use something like '#' that doesn't even try to look completely filling 13:25:24 Deewiant: One-line high bars? 13:26:17 elliott_, why do you need multiline stuff here? 13:26:25 elliott_: Well, if you have one horizontal bar like ███, it doesn't matter whether it lines up with what's on the next line? Or why did you care about the lining up anyway 13:26:41 In quite a few browsers, in a "font-family: monospace;"
, mixing "normal text" and Unicode line-drawing characters ends up making the line-drawing bits misaligned badly.
13:26:41  Vorpal: ?
13:26:52  elliott_, why do you care about it being line height
13:27:05  fizzie, ouch
13:27:27  Vorpal: http://zem.fi/rfk86/ suffered from that quite a lot. :)
13:27:31  Deewiant: You don't understand; say I have a progress bar with a grey background, being filled in by green. If I use full blocks of those two colours (ignoring background), everything works fine. But, if I want to use partially-filled blocks, then every partially-filled block will have a space of /normal/ background behind it!
13:27:42  fizzie, works now in firefox, how did you fix it?
13:27:47  Deewiant: So I need to "fill in" that gap with grey somehow; the obvious way is to set the background.
13:28:06  Deewiant: But that causes an ugly grey line to appear above the progress bar, because the background fills the whole line height, including the inter-line padding.
13:28:28  elliott_, so why not leave it at the background colour of the terminal?
13:28:38  Vorpal: You misread.
13:28:39  elliott_: So: don't set the background or don't worry about the grey line
13:28:50  elliott_: it's still not going to work on terminals that render backgrounds and foregrounds differently
13:29:00  elliott_, no I didn't. I'm questioning the need of that grey background
13:29:01  e.g. jettyplay will use a darker shade for, say, "dark red" in the background than it will in the foreground
13:29:14  so you can read text even when the foreground and background are set to the same colour
13:29:19  Deewiant: If I don't set a background at all, it's not, you know, a bar; I'd rather use full blocks than make it ugly in that way. The grey line is really awful.
13:29:21  elliott_, just do a green bar that grows over the natural bg colour of the terminal
13:29:28  Anyway "don't care about it" is not a solution to problems
13:29:46  Yeah, sorry :-P
13:29:53  elliott_: How isn't it a bar if you don't set a background?
13:29:54  elliott_: rather, it's a claim that you don't need a solution to the problem
13:30:07  isn't the usual solution to put [ and ] around the bar to show its endpoints?
13:30:07  ais523: Are such claims interesting
13:30:13  elliott_: ▉█▎looks barry to me
13:30:16  I know I can resort to full blocks if I want
13:30:19  elliott_: no, but they can be correct, sometimes
13:30:27  The idea is to try and figure out if I have to
13:30:33  Vorpal: Well, it should now work in everything that does (and allows) font embedding the way it's done there; and it did work with the "regular" monospace font in *some* systems. But I do recall getting rather ragged right edges from others. I think I added a "DejaVu Sans Mono" before monospace to make it work everywhere where that font is installed, since it has all the characters the page uses.
13:30:37  ais523: I could draw a "normal" ASCII bar, I just think this looks much nicer
13:30:40  Even with full blocks
13:30:43   elliott_: ▉█▎looks barry to me <-- amusing, there is a gap between those in my irc client
13:30:49  Ditto
13:30:51  same in mine
13:30:55  Not for me
13:31:11  You have problematic terminals and/or fonts :-P
13:31:15  fizzie: I've had problems with "Monospace" referring to a non-monospace font in Windows, believe it or not
13:31:23  Deewiant: Who uses an IRC client in a terminal
13:31:25  Losers, that's who
13:31:32  Deewiant: There's a gap in xchat; there's no gap in irssi/urxvt.
13:31:46  fizzie, ah
13:31:50  You have problematic GUI IRC clients
13:32:07  Deewiant: Hmm, the fact that repositioning the cursor causes a forced scroll down in ansi-terminal is problematic
13:32:32  And seemingly not fixable from the provided API
13:32:38  hmm, what's the first power of 2 that, expressed in base 10, starts with 7?
13:32:47 * ais523 wonders how to express that in Haskell
13:33:02  @hoogle Integer -> [Integer]
13:33:02  Test.QuickCheck.Arbitrary shrink :: Arbitrary a => a -> [a]
13:33:02  Test.QuickCheck shrink :: Arbitrary a => a -> [a]
13:33:03  Prelude repeat :: a -> [a]
13:33:06  > map (2^) [0..]
13:33:07    [1,2,4,8,16,32,64,128,256,512,1024,2048,4096,8192,16384,32768,65536,131072,...
13:33:10  @hoogle Integer -> [Int]
13:33:10  elliott_: Is that somehow explicitly done by the implementation?
13:33:11  Data.Time.Calendar gregorianMonthLength :: Integer -> Int -> Int
13:33:11  Data.Time.Calendar.Julian julianMonthLength :: Integer -> Int -> Int
13:33:11  Data.Generics.Schemes gsize :: Data a => a -> Int
13:33:23  elliott_: I'm trying to find a function that list-of-digitizes a number
13:33:31  > find (("7" `isPrefixOf`) . show) $ map (2^) [0..]
13:33:33    Just 70368744177664
13:33:36  ais523: Tada
13:33:38  aha
13:33:42  > find ((== '7') . head . show) $ map (2^) [0..]
13:33:44    Just 70368744177664
13:33:45  that's actually pretty large
13:33:48  Deewiant: That too, but I don't like head :)
13:33:54   elliott_: Is that somehow explicitly done by the implementation?
13:33:57  elliott_: I thought you didn't like using "show" like this :-P
13:34:00  I forgot that Haskell strings were just lists of chars
13:34:02 -!- Patashu has quit (Ping timeout: 240 seconds).
13:34:02  Deewiant: There's gotta be some way to avoid it
13:34:03  Surely
13:34:05  :(
13:34:10  And I don't, but oh well
13:34:19  Nothing is more important than showing people how great Haskell is quickly
13:34:21  (in Ocaml, string, char list, and char array are all different types; string acts like char array, though)
13:34:24  *OCaml
13:34:31  > find (("9" `isPrefixOf`) . show) $ map (2^) [0..]
13:34:33    Just 9007199254740992
13:34:35  elliott_: I'd check the implementation first
13:34:46  > map [0..9] $ \d -> find ((show d `isPrefixOf`) . show) $ map (2^) [0..]
13:34:47    Couldn't match expected type `a -> b' against inferred type `[a1]'
13:34:48  @src Integer show
13:34:49  Source not found. That's something I cannot allow to happen.
13:34:50  hmm
13:34:53  elliott_: flip map
13:34:59  Deewiant: oh, right
13:35:02  > flip map [0..9] $ \d -> find ((show d `isPrefixOf`) . show) $ map (2^) [0..]
13:35:06    mueval-core: Time limit exceeded
13:35:08  :(
13:35:14  > [0..9] `map` \d -> find ((show d `isPrefixOf`) . show) $ map (2^) [0..]
13:35:15    Couldn't match expected type `a -> b' against inferred type `[a1]'
13:35:15  > find (("42" `isPrefixOf`) . show) $ map (2^) [0..]
13:35:17    Just 4294967296
13:35:18  elliott_: 0 won't work
13:35:20  elliott_: Ever
13:35:22  Oh :P
13:35:22  Right
13:35:35  > flip map [1..] $ \p -> find ((show p `isPrefixOf`) . show) $ map (2^) [0..]
13:35:37    [Just 1,Just 2,Just 32,Just 4,Just 512,Just 64,Just 70368744177664,Just 8,J...
13:35:47  > catMaybes . flip map [1..] $ \p -> find ((show p `isPrefixOf`) . show) $ map (2^) [0..]
13:35:48  can the list be unjusted, somehow?
13:35:49    [1,2,32,4,512,64,70368744177664,8,9007199254740992,1024,1125899906842624,12...
13:35:59  ais523: snap :)
13:36:17  map fromJust
13:36:22  Deewiant: Die
13:36:31  elliott_: More appropriate in this case
13:36:36  elliott_, what is the log_2 function in haskell now again?
13:36:40  technically, find /has/ to return Just x or else diverge, on an infinite list
13:36:44  > log2 70368744177664
13:36:45    Not in scope: `log2'
13:36:46  hm
13:36:48  not that
13:36:53  elliott_: catMaybes loses the mapping from the numbers you're looking for, in case you get Nothing
13:36:54  > length show 70368744177664
13:36:54  :t log
13:36:55    Couldn't match expected type `[a]'
13:36:55          against inferred type `a1 -> GHC...
13:36:55  forall a. (Floating a) => a -> a
13:36:56  > [n | p <- [0..], Just n <- find ((show p `isPrefixOf`) . show) $ map (2^) [0..]]
13:36:57    Couldn't match expected type `[t]'
13:36:57          against inferred type `Data.Mayb...
13:36:59  > length (show 70368744177664)
13:36:59    14
13:37:01  elliott_: I'd rather have an error
13:37:09  :t log
13:37:10  forall a. (Floating a) => a -> a
13:37:13  ^ a reasonably bad way to do log_10
13:37:24  > log 70368744177664 / log 2
13:37:25    46.0
13:37:29  well rigtht
13:37:30  > [n | p <- [1..], Just n <- find ((show p `isPrefixOf`) . show) $ map (2^) [0..]]
13:37:31    Couldn't match expected type `[t]'
13:37:31  right*
13:37:31          against inferred type `Data.Mayb...
13:37:37  so 2^46 = that number
13:37:38  oh
13:37:45  > [n | p <- [1..], let Just n = find ((show p `isPrefixOf`) . show) $ map (2^) [0..]]
13:37:46    [1,2,32,4,512,64,70368744177664,8,9007199254740992,1024,1125899906842624,12...
13:37:53  > log 9007199254740992 / log 2
13:37:53    53.0
13:38:03  > [n | p <- [1..], n <- map (2^) [0..], show p `isPrefixOf` show n]
13:38:04    [1,16,128,1024,16384,131072,1048576,16777216,134217728,1073741824,171798691...
13:38:06  Nice
13:38:08  Wait
13:38:11  Why's that broken
13:38:12  Oh
13:38:19  why is the number 0 called 0? for consistency, it should probably be the null string
13:38:26  > [n | p <- [1..], let n:_ = [n | n <- map (2^) [0..], show p `isPrefixOf` show n]]
13:38:28    [1,2,32,4,512,64,70368744177664,8,9007199254740992,1024,1125899906842624,12...
13:38:29  (Kidding :P)
13:38:41  OK, now how to avoid traversing the list of powers multiple times...
13:38:50  :t break
13:38:51  forall a. (a -> Bool) -> [a] -> ([a], [a])
13:38:59  > break (("3" `isPrefixOf`) . show) $ map (2^) [0..]
13:39:01    ([1,2,4,8,16],[32,64,128,256,512,1024,2048,4096,8192,16384,32768,65536,1310...
13:39:10  > span (("3" `isPrefixOf`) . show) $ map (2^) [0..]
13:39:11    ([],[1,2,4,8,16,32,64,128,256,512,1024,2048,4096,8192,16384,32768,65536,131...
13:39:13  aha
13:39:55  > find ((7 ==) . head . (ord <$>) . flip (showIntAtBase 10 chr) []) $ map (2^) [0..]
13:39:56    Just 70368744177664
13:39:58  > let f p xs = let (_, wow:xs') = span ((show p` isPrefixOf`) . show) xs in wow : f (p+1) xs' in f 1 $ map (2^) [0..]
13:39:59    [2,4,8,16,32,128,256,512,1024,2048,4096,8192,16384,32768,65536,131072,26214...
13:40:05  What
13:40:23  > let f p xs = let (_, wow:xs') = span ((show p `isPrefixOf`) . show) xs in wow : f (p+1) xs' in f 1 $ map (2^) [0..]
13:40:25    [2,4,8,16,32,128,256,512,1024,2048,4096,8192,16384,32768,65536,131072,26214...
13:40:29  hmm, what we really need is a partition function that sorts into more than one partition, lazily
13:40:58  Oh, wait
13:41:05  The algorithm is totally borked, I think
13:41:07  Yeah, it is
13:42:00  `pwd` =~ /production/ or die "Not downloading to production DB?";
13:42:01  ​/home/hackbot/hackbot.hg/multibot_cmds/lib/limits: line 5: exec: pwd`: not found
13:42:26  ais523: ?
13:42:26  a check that I ended up adding after accidentally putting live user data into the test DB
13:42:38  I like the question mark
13:42:41  which is possibly a worse mistake than putting test data in the production DB
13:42:46  elliott_: it's a NetHack thing
13:42:53  to put question marks on error messages that should never happen
13:42:56  @hoogle [a -> Bool] -> [a] -> [[a]]
13:42:57  Prelude dropWhile :: (a -> Bool) -> [a] -> [a]
13:42:57  Data.List dropWhile :: (a -> Bool) -> [a] -> [a]
13:42:57  Prelude filter :: (a -> Bool) -> [a] -> [a]
13:43:07  Deewiant: I bet that's some fancy applicative construction
13:43:08  Go go go
13:43:28  @hoogle [a -> Int] -> [a] -> [[a]]
13:43:28  GHC.Exts groupWith :: Ord b => (a -> b) -> [a] -> [[a]]
13:43:28  Control.Applicative (<*>) :: Applicative f => f (a -> b) -> f a -> f b
13:43:28  GHC.Exts sortWith :: Ord b => (a -> b) -> [a] -> [a]
13:43:39  society
13:43:39  @hoogle [a -> Integer] -> [a] -> [[a]]
13:43:39  GHC.Exts groupWith :: Ord b => (a -> b) -> [a] -> [[a]]
13:43:40  Control.Applicative (<*>) :: Applicative f => f (a -> b) -> f a -> f b
13:43:40  GHC.Exts sortWith :: Ord b => (a -> b) -> [a] -> [a]
13:43:40  is crazy.
13:43:48  none of those are what I want
13:43:56  wait, why the square brackets?
13:44:00  @hoogle (a -> Integer) -> [a] -> [[a]]
13:44:01  GHC.Exts groupWith :: Ord b => (a -> b) -> [a] -> [[a]]
13:44:01  GHC.Exts sortWith :: Ord b => (a -> b) -> [a] -> [a]
13:44:01  Prelude map :: (a -> b) -> [a] -> [b]
13:44:07  ais523: intentionally, duh
13:44:16  elliott_: What is that supposed to do
13:44:19  elliott_: I mean, in /my/ query
13:44:40  > let finds fs (x:xs) = map (++ finds fs xs) $ map (\f -> if f x then [x] else []) fs in finds (map (==) [0..]) [0..]
13:44:41    Occurs check: cannot construct the infinite type: t = [t]
13:44:53  Meh
13:45:31  elliott_: what's the Haskell to copy-replace the nth element of a list?
13:45:32  Oh, wouldn't work anyway
13:45:37  ais523: don't do that
13:45:39  > let finds fs (x:xs) = concatMap (++ finds fs xs) $ map (\f -> if f x then [x] else []) fs in finds (map (==) [0..]) [0..]
13:45:42    [0*Exception: stack overflow
13:45:47  elliott_: even lazily?
13:45:59  or, well, apply a function to the nth element of a list
13:46:02  ais523: yeah, laziness is a magic bullet that makes slow things super-fast
13:46:03  keeping the rest of the list the same
13:46:10  you still pay for it in the thunks
13:46:17  but more importantly, you don't index lists
13:46:26  if you're indexing lists a lot, you've done something awful
13:46:28  what do you index, instead?
13:46:33  Arrays, typically
13:46:34  it was going to be a pretty short list
13:46:35  something that isn't a list
13:46:37  a tree or a vector
13:46:43  Deewiant: Haskell has arrays?
13:46:48  ais523: Yes
13:47:00  ais523: no. haskell is a toy language
13:47:13  everyone writes their performance-critical haskell code with singly-linked lists
13:48:06 * elliott_ is also totally serious
13:48:07  meh, I'm the sort of person who'd prefer the code to be expressed as lists and the compiler to figure out how to optimize that
13:48:20  yes, you're the sort of person whose programs don't run within acceptable time limits
13:48:40  why should it be the programmer's responsibility to make basic data structures work quickly?
13:48:44  > listArray (0,MaxBound-1) [1..]
13:48:45    Not in scope: data constructor `MaxBound'
13:48:48  /kick ais523 trolling
13:48:51  > listArray (0,maxBound-1) [1..]
13:48:52    Ambiguous type variable `a' in the constraints:
13:48:52     `GHC.Num.Num a'
13:48:52       ari...
13:48:56  ah
13:49:02  > listArray (0,maxBound-1::Int) [1..]
13:49:04   Terminated
13:49:10  oh come on.
13:49:13  that's perfectly reasonable.
13:49:27  > maxBound-1::Int
13:49:28    9223372036854775806
13:49:33  really?
13:49:38  yeah dude.
13:49:41  > 2^63-1
13:49:42    9223372036854775807
13:49:50  CakeProphet, no it isn't
13:49:56  CakeProphet, it would have been if 32-bit, sure
13:50:02  gah, Network.HTTP is unusable
13:50:13  elliott_, why?
13:50:18  Vorpal: what if I want ALL MEMORY in my array?
13:50:18  stupid api
13:50:27  CakeProphet, ...
13:50:35  Vorpal: it's critical to my application.
13:50:58  CakeProphet, then run it locally on a 128-bit system?
13:51:22  wouldn't that be the same thing?
13:51:24  OK, so students seem to have found a way to cheat
13:51:30  ais523: my god.
13:51:32  incredible.
13:51:38  they're using the FFI to access the standard libraries without having to mention their names
13:51:41  all of academia will crumble.
13:51:49  and thus getting around the restriction on which modules they're allowed to use
13:51:54  that's nicely creative, I guess?
13:52:03  ais523: Haskell class?
13:52:05  ais523, heh
13:52:14  I didn't know those existed.
13:52:23  CakeProphet: OCaml
13:52:23  ais523, why would you allow access to the FFI in the first place in that context?
13:52:27  oh.
13:52:40  Vorpal: well, because it doesn't do anything that was blacklisted
13:52:44  heh
13:52:48  this is always the danger with blacklisting-based security
13:52:51  ais523: that's beautiful
13:52:55  ais523: give them top marks
13:53:01  I'm glad I have a whitelisting-based security too, on the syscalls that can be used
13:53:07  elliott_: I'd let it pass, only the answer was wrong
13:53:14  heh
13:53:16  people are trying to miss the point of the question by converting the lists of digits to strings
13:53:16 -!- sebbu2 has changed nick to sebbu.
13:53:27  my testsuite gets around that by giving them lists that don't fit into ints
13:53:34  ais523: are these master's students or
13:53:42  first years
13:53:55  ais523: :( how am i ever gonna get that cool that quickly
13:53:57  ais523, I used qsort() to answer a badly worded "implement a sorting algorithm" assignment. It passed with a note along the lines of "nice trick, will change the wording for the next year"
13:53:59  i better read up on ocaml's ffi
13:54:15  elliott_: well, they're just using "external" declarations
13:54:22  I'm not sure if that's FFI or someting else, but it looks FFIish
13:54:36  yep, looks like it
13:54:46  and the stdlibs appear to be conveniently defined with them
13:54:48  ais523, note that the assignment was in python, so it involved FFI as well
13:54:54 -!- saahil has joined.
13:55:17 -!- saahil has left.
13:55:18  I put a custom bignum implementation in one of the weekly exercises of the C course; and other assorted curiosities, like Blowfish in the one which suggested ROT-13 for "encryption"; and no-one ever commented on them at all. :(
13:55:23  Vorpal: wait, you used /C/'s qsort to answer a Python question?
13:55:41  fizzie: that's a sign of overengineering in protest at the question
13:55:54  ais523, yes because the FFI (ctype I think? Or some other FFI bit of python, forgot which one) capabilities weren't blacklisted
13:55:56  fizzie: Aww.
13:56:11  ais523: It's also/instead a sign of too much free time, perhaps.
13:56:11  ais523, anyway I was bored when I did that. Got to have some fun
13:56:15  hmm, does curl do persistent connections?
13:56:20 * ais523 compare [1; 0; 7; 3; 7; 4; 1; 8; 2; 5] [1; 0; 7; 3; 7; 4; 1; 8; 2; 3]
13:56:35  not so much you can do to catch out people who are converting to an integer in a list-of-digits comparison question
13:56:49  but those are either side of OCaml's MAXINT, which should
13:57:19  (the students who fail on that testcase will get feedback telling them that that's the testcase they failed on, which might clue them in as to what they're doing wrong)
13:57:36  ais523, there was another python assignment where I handed in two versions: A pure python one and a cython one. Then pointed out that python was very unsuitable for a game AI using alpha-beta pruning based on the maximum ply-depths that could be achieved by the respective versions.
13:58:24  well for interactive use that is
13:58:32  I think it was like 5 and 7, or such
13:59:28  ais523: hmm, are you writing this thing to try and fill some byzantine rule that says you have to be completely objective about your marking? I wouldn't put it past you :)
13:59:49  elliott_: no, I'm writing it because marking thousands of submissions by hand would take far too long
13:59:59  and get very boring, and I'd probably make mistakes
13:59:59  ais523: that's much more boring
14:00:32  ais523, how many students are taking that class?
14:00:36  ais523: if they get testcase feedback, can't they just hardcode your testcases like anagolf? :)
14:00:44  Vorpal: around 100
14:00:51  heh
14:01:13  elliott_: they get feedback on some but not all of the test cases
14:01:30  that was inspired by anagolf
14:01:30  (i.e. if their program works on the first n but fails on the n+1th and n is large enough, they don't get told what they did wrong)
14:01:30  that is quite a lot
14:02:15  django hell is a scary place.
14:03:19  hmmm why is tree not installed by defalt in ubuntu?
14:03:37  yay, my marking script handled the change to DST correctly
14:03:49  hmm, I wonder whether downloading in parallel will pay off
14:03:52  (I put extra effort into making sure it did timezone math right)
14:04:00  probably not, HTTP pipelining should take care of any overhead for the small files
14:04:16  elliott_, if they are from different hosts, sure
14:04:24  they're not
14:04:43  elliott_, iirc aptitude downloads in parallel if the packages come from different hosts, like the main repo mirror and a PPA
14:04:59  I'm probably worrying too much about this package manager's download experience :) but I sure do hate every existing package manager's handling of that
14:05:00  for example
14:05:03  but in serial if from a single host
14:05:04  To: . <.>
14:05:07  I'm pretty sure pacman doesn't use persistent http requests at all
14:05:13  it has a noticeable pause between downloading tiny tiny files
14:05:16  awful
14:05:18  hilariously, Evolution linked the second .
14:05:32  Vorpal: eh, that sounds rare enough for me to not care
14:05:45  Vorpal: the most likely scenario would be getting some binary packages from another repo that depend on stuff in the main report
14:05:46  repo
14:05:50  elliott_, well, the main mirror I use maxes out my connection anyway
14:05:52  Vorpal: I'll just group by repo so it does it as two concentrated downloads
14:06:00  hm
14:06:02  elliott_: upgrading some packages from -proposed and some from -security?
14:06:08  Vorpal: I'll probably do the equivalent of "apt-get update" in very-parallel,t hough
14:06:13  s/,t /, t/
14:06:18  since that's a large number of small files
14:06:20  latency dominates
14:06:33  I was rather happy that the phone alarm clock, when setting an alarm across the DST boundary on Saturday evening, managed to correctly calculate the "HH:MM before next alarm" info-text it shows.
14:06:38  elliott_, well it was for update, I think I have the bzr PPA and got an upgrade to that and to the main repo at the same time, thus noticed this
14:07:08  I'll probably just encapsulate this so I can add fancy parallel logic later :P
14:07:10  but pipelining is a must.
14:07:15  sure
14:08:12  elliott_: if you have multiple cores I would think utilizing parallel would generally payoff
14:08:16  ais523: you'll be pleased to know I'm using INTERCAL version numbers as the pathological test case for my version handling in my package manager
14:08:19  unless the program itself is written to utilize multiple cores.
14:08:22  CakeProphet: ...for a download?
14:08:28  MORE CPUS MORE BROADBAND
14:08:28  elliott_: oh... no.
14:08:28  elliott_: you told me that already
14:08:34  ais523: no I didn't
14:08:36  at least, not recently
14:08:41  well, you did with inst
14:08:47  elliott_: THE CPU ISN'T ASKING FAST ENOUGH
14:08:47  and I'm assuming the package manager's basedo n that
14:08:50  *on that
14:08:54  elliott_: ASK CONCURRENTLY
14:09:06  ais523: it's not
14:09:08  "may I please have bytes" * 4
14:09:11   MORE CPUS MORE BROADBAND <-- only in uplink.
14:09:22  ais523: anyway, inst didn't actually do any version number handling
14:09:29  ais523: I have to decide which version numbers are bigger than others
14:09:49  ais523: I think it can handle INTERCAL versions perfectly, it'll just need to take them in reversed form (as an internal field; the user will still see the true version number in the UI)
14:09:55  component-reversed, that is
14:10:01  heh
14:10:44  elliott_: Debian's version is to use version sort (i.e. contiguous numbers sorting as numbers, otherwise sorting alphabetically), with ~ being lexicographically negative
14:10:50  that is, 0.1~alpha1 sorts before 0.1
14:10:52  elliott_, wait isn't there some program that have the version counting down?
14:10:52 -!- derrik has quit (Quit: left).
14:10:56  (but after 0.05)
14:11:14  Vorpal: That can be represented as -n
14:11:16  err, perhaps it actually sorts before 0.05 too
14:11:17  aka pren
14:11:23  otherwise, you have the 0.9 0.10 problem
14:11:39  elliott_, hm
14:11:39  leading 0s on a component part would imply it's meant to be interpreted as a decimal, though…
14:11:53  ais523: I'm going to do something like: Map minus sign to "pre"; split into components (on "."); sort components as list, where each individual component is done numerabetically
14:11:59  ais523, I will make a package that uses fractions for the version number
14:12:01  ais523: oh, actually
14:12:10  like foo-3/4
14:12:18  or foo-1/3
14:12:23  ais523: I'm going to do something like: Map minus sign to "pre"; split into components (on "."); sort components as list, where each individual component is done numerically, with any letter on the end becoming the first digit
14:12:27  or... something like that
14:12:31  nix gets it almost right, anyway
14:12:39  elliott_: distinguish 0.5-1 from 0.5.-1
14:12:40  ais523: point is, 3.1a is older than 3.1
14:12:48  also, what the heck is 0.5-1?
14:12:52  elliott_, ooh another idea for screwy version number: foo-|1+2i|
14:12:54  elliott_: 0.5, patchlevel 1
14:12:54  that looks like a package revision number thing
14:12:59  which isn't part of the version in my system
14:13:08  well, it might be part of someone else's version numbre
14:13:09  *number
14:13:51  Just about all females often feel that exactly why all Hollywood stars common maintain its brightness as Tom in spite of frantic operate routine and large operate pressure from the skin. What do you think that they have got sufficient time to observe all attractiveness strategies and tips that his grandmother utilized to abide by?
14:14:04  what
14:14:23  we have two different spambots atm; one posts coherently, the other is a markovbot
14:14:24  Version numbers of the form e^(in), with 'n' incrementing -- because it's all cyclic, man. Far out.
14:14:30  but they both have pretty similar content apart from that
14:14:37  I'm beginning to wonder if one spambot is using the other as input
14:14:43  heh
14:15:08  fizzie, nice
14:15:33  haha
14:16:08  fizzie, problem is distros are going to just use n for the version number there
14:16:14  `addquote  Just about all females often feel that exactly why all Hollywood stars common maintain its brightness as Tom in spite of frantic operate routine and large operate pressure from the skin. What do you think that they have got sufficient time to observe all attractiveness strategies and tips that his grandmother utilized to abide by?
14:16:16  706)  Just about all females often feel that exactly why all Hollywood stars common maintain its brightness as Tom in spite of frantic operate routine and large operate pressure from the skin. What do you think that they have got sufficient time to observe all attractiveness strategies and tips that his grandmother utilized to abide by?
14:16:21  fizzie, you have to make that impossible somehow
14:16:36  hm
14:16:42  elliott_: it's really 
14:16:49  ais523: yes, but that's less baffling
14:17:09  well, people know it's me and Keymaker who deal with the spam, and Keymaker rarely comes here
14:17:14  Vorpal: Well... you could do the TeX "converges into an irrational number" thing, except make it converge as (sin x)/x (take the minima and maxima) or something, so that it wobbles up and down, not monotonically like "always add one digit" does.
14:17:15  so it's not a hard inference that I was quoting a spambot
14:17:30  fizzie, good idea
14:17:54  Debian got caught out beautifully by C-INTERCAL 1.28
14:18:05  as they used the version number literally before realising what they'd done wrong
14:18:14  ais523, heh
14:18:17  (it should have been sanitised to 0.28.1 at that point)
14:18:22  ais523, so how did they solve it?
14:18:24  (but they didn't catch it)
14:18:29  Vorpal: the next version number was 29:0.2
14:18:32  *29:0.29
14:18:33  heh
14:18:44  which is a complete abuse of the epoch field, and the packaging guidelines specifically say not to do that
14:18:49  ais523: this is why you use Kitten's package manager; you can just define the ordering version as a /function/ of the actual version
14:18:56  ais523, well, what options did they have at that point?
14:19:05  Vorpal: 1:0.29 would be correct
14:19:08  ah
14:19:16  or perhaps 1:0.29.0
14:19:24  so why didn't they do that then hm
14:19:27  or even 1:29.0
14:19:28  don't ask me
14:19:33  oh well
14:19:46  ais523, what was the clc numbering now again?
14:20:11  ais523: order_version = reverse (version_components version)
14:20:14  Vorpal: it's just like regular numbering; it sorts lexicographically by component
14:20:22  ais523: see???? SO MANY ADVANTAGES
14:20:28  it's just that the components can potentially be negative
14:20:31  ah
14:20:32  elliott_: what if you don't know Haskell?
14:20:33  right
14:20:43  ais523: have you ever /seen/ a Debian package?
14:21:29  elliott_: I've even /made/ a Debian package
14:21:37  no Haskell knowledge required
14:21:54  hmm, how do you install ghci on Gentoo, where you can't bootstrap it with a binary?
14:21:56  ais523: good thing my quoted snippet wasn't Haskell either, then
14:22:04  ais523: but seriously, Debian packages are impossible to read
14:22:13  you might have "made" one with automated tools, but they're unmaintainable binary blobs themselvse
14:22:13  elliott_: I don't have much problems reading them
14:22:15  themselves
14:22:20  except that people actually have to maintain them
14:22:25  and no, they aren't binary blobs
14:22:28  ais523: I take it you've never looked at the gcc package's debian directory
14:22:31  they're binary, but it's just a standard tarball
14:22:39   hurr what is hyperbole
14:22:50  or perhaps arball
14:23:20  yep, I deleted my gcc Debian source package as it was taking up too much space
14:24:36  @hoogle (#)
14:24:37  keyword #
14:24:37  GHC.Exts C# :: Char# -> Char
14:24:37  GHC.Exts D# :: Double# -> Double
14:24:41   hmm, how do you install ghci on Gentoo, where you can't bootstrap it with a binary? <-- you bootstrap it with a binary
14:24:44  ah right.
14:25:25  ais523, or even use a binary package version. They provide that for a few things, like openoffice, firefox, thunderbird, ghc. Where compiling takes ages and/or is a PITA
14:26:04  there seems something so wrong about binary packages in Gentoo
14:26:29  hmm, I think http-enumerator is my best bet
14:26:32  even if it has 389573489573894578934578934534789545 dependencies
14:26:38 -!- tiffany has joined.
14:26:57  ais523, well, you have to start out with a boot strap environment too. Which is a binary download. So you can build your own environment from that point
14:27:41  I vaguely assumed you bootstrapped it from your previous OS
14:27:56  ais523, nah, that is LFS
14:28:09  hmm, wasn't someone talking in here a while back about a script that downloaded the book about LFS and parsed it for the commands it needed to run?
14:28:22  I was wondering if it used OCR, that'd be even more hilarious
14:28:41  ais523, gentoo gives you a manual that tells you  to run fdisk and mkfs and so on as required, then mount it somewhere and unpack a stage3.tar.gz with some flags to preserve permissions properly
14:28:45  then you chroot into that
14:28:57  and run various commands
14:29:03  usually done from a livecd
14:29:16  could be done from another installed linux system, sure
14:29:31   hmm, wasn't someone talking in here a while back about a script that downloaded the book about LFS and parsed it for the commands it needed to run?
14:29:32  yep
14:29:39  it's actually "official"
14:29:48  ais523, the book is some HTML pages, no need for OCR
14:30:10  it's docbook, i think
14:30:24  oh maybe the html pages are generated from that
14:30:26  quite possible
14:30:57  httpRedirect :: (MonadIO m, Failure HttpException m) => Request m -> (Status -> ResponseHeaders -> Iteratee ByteString m a) -> Manager -> Iteratee ByteString m a
14:31:01  whoo boy
14:31:17  that looks annoying
14:32:16  Vorpal: what does?
14:32:21  the type
14:32:22  elliott_, btw I'm pretty sure you can get wget to pipeline requests (or at least reuse the connection) by giving it several files on the command line
14:32:29  yes, I'm sure curl does that too
14:32:31  I remember doing so at some point
14:32:39  might have been recursive mode though
14:40:50 -!- copumpkin has quit (Quit: Computer has gone to sleep.).
14:40:50  main = attermptToStopAnIdiotFromDying
14:40:52  Phantom__Hoover, I now hold the last discworld book in my hand :)
14:41:04  last, eh
14:41:10  latest
14:41:12  I suppose it's gotta be close to
14:41:33  wonder when he'll take the plunge
14:44:05 -!- Sgeo|web_ has joined.
14:46:29  http://sprunge.us/HihB
14:46:34  I am getting quite bored of typing n
14:47:42 -!- Sgeo|web has quit (Ping timeout: 265 seconds).
14:48:40  Deewiant: This is why people are wary of dependencies:
14:48:42  warning: the following (2) packages will be installed by pacman: haskell-utf8-string haskell-zlib
14:48:42  searching AUR...
14:48:42  Targets (32): haskell-semigroups-0.8-1 haskell-primitive-0.3.1-18 haskell-tagged-0.2.3.1-1 haskell-largeword-1.0.1-1 haskell-entropy-0.2.1-1 haskell-zlib-bindings-0.0.1-1 haskell-vector-0.7.1-18 haskell-cryptohash-0.7.3-1 haskell-base-unicode-symbols-0.2.2.1-1 haskell-dlist-0.5-18 haskell-cryptocipher-0.2.14-3 haskell-crypto-api-0.6.4-4 haskell-cereal-0.3.3.0-18 haskell-hashable-1.1.2.1-1 haskell-zlib-enum-0.2.1-22 haskell-tls-extra-0.3.1-4 haskell-tls-
14:48:42  0.7.2-4 haskell-monad-control-0.2.0.3-1 haskell-http-types-0.6.5.1-3 haskell-failure-0.1.0.1-18 haskell-enumerator-0.4.14-1 haskell-data-default-0.3.0-1 haskell-cprng-aes-0.2.1-23 haskell-certificate-0.9.1-4 haskell-case-insensitive-0.3.0.1-1 haskell-blaze-builder-enumerator-0.2.0.3-1 haskell-blaze-builder-0.3.0.1-18 haskell-base64-bytestring-0.1.0.3-1 haskell-attoparsec-enumerator-0.2.0.4-22 haskell-attoparsec-0.9.1.2-1 haskell-asn1-data-0.5.1-22 haske
14:48:47  ll-http-enumerator-0.7.0-4
14:49:06  why are those dependencies needed?
14:49:36  To do things, presumably
14:50:07  OTOH you're unlikely to get me to agree with your "it's easier to rewrite any library than to use it" stance either, so it's probably pointless expressing it
14:50:24  :p
14:50:40  elliott_: "any library" is wrong, there
14:50:49  it depends on exactly what you're doing
14:51:23  Looks like trifecta's dependency list
14:51:37  Deewiant: At least this one is flattened out
14:51:48  Deewiant: With trifecta you at least have the guarantee that 90% of them are by the same person
14:52:40  I've been sitting at this install prompt for ten minutes wondering whether to say y or not
14:52:51  Where'd you get those dependencies from
14:53:06  haskell-http-enumerator
14:53:32  It has a simpler API than the HTTP package and I can't figure out how to do streaming downloads with the latter
14:54:48  But
14:54:50  So many dependencies
14:55:53   Phantom__Hoover, I now hold the last discworld book in my hand :)
14:55:55  I... how...
14:55:58  Do...
14:56:05  Does Sweden have book rockets.
14:56:11  elliott_: oh right, I thought you meant those dependencies were on utf8-string and zlib
14:56:14  and I was wondering why
14:56:22  as in, from utf-8 and zlib
14:56:28  lol
14:56:41  Do you order a book, and half an hour later a missile slams into your front garden and there's a book in it.
14:57:27  Phantom__Hoover: no
14:57:54  ais523: you're not Swedish
14:58:37  Manchester is in Sweden, isn't it?
14:59:25  I'm not in Manchester
14:59:51  Dependenciesasn1-data (≥0.5.1 & <0.7), attoparsec (≥0.8.0.2 & <0.10), attoparsec-enumerator (≥0.2.0.4 & <0.3), base (4.*), base64-bytestring (0.1.*), blaze-builder (≥0.2.1 & <0.4), blaze-builder-enumerator (0.2.*), bytestring (≥0.9.1.4 & <0.10), case-insensitive (≥0.2 & <0.4), certificate (≥0.7 & <1.1), containers (≥0.2 & <0.5), cprng-aes (0.2.*), data-default (0.3.*), enumerator (≥0.4.9 & <0.5), failure (0.1.*), http-types (0.6.*), m
14:59:51  onad-control (0.2.*), network (≥2.2.1 & <2.2.3), network-bytestring (0.1.3.*), tls (≥0.8.1 & <0.9), tls-extra (≥0.3 & <0.5), transformers (0.2.*), utf8-string (≥0.3.4 & <0.4), zlib-enum (0.2.*) or
14:59:51  asn1-data (≥0.5.1 & <0.7), attoparsec (≥0.8.0.2 & <0.10), attoparsec-enumerator (≥0.2.0.4 & <0.3), base (4.*), base64-bytestring (0.1.*), blaze-builder (≥0.2.1 & <0.4), blaze-builder-enumerator (0.2.*), bytestring (≥0.9.1.4 & <0.10), case-insensitive (≥0.2 & <0.4), certificate (≥0.7 & <1.1), containers (≥0.2 & <0.5), cprng-aes (0.2.*), data-default (0.3.*), enumerator (≥0.4.9 & <0.5), failure (0.1.*), http-types (0.6.*), monad-control
14:59:55  (0.2.*), network (2.3.*), tls (≥0.8.1 & <0.9), tls-extra (≥0.3 & <0.5), transformers (0.2.*), utf8-string (≥0.3.4 & <0.4), zlib-enum (0.2.*)
15:00:02  Deewiant: Challenge: Figure out what essential difference the "or" is expressing
15:00:09  ais523, but you are in Sweden?
15:00:34  elliott_: network
15:00:54  Deewiant: Wow, skillz
15:00:58  I couldn't figure it out at all
15:01:04  Phantom__Hoover: where did I imply that?
15:01:18  ais523, well, you never /contradicted/ it.
15:01:28  and still haven't
15:03:09  ais523: hmm... log out of nickserv for a minute
15:03:18  elliott_: why?
15:03:25  that's quite a suspicious request
15:03:32  ais523: so I can do nefarious things, duh
15:03:34  specifically, whois you
15:03:45  error: target not found: haskell-data-default=0.3.0
15:03:52  Deewiant: Bonus: The package is broken
15:03:58  elliott_: This is why I use cabal-install
15:04:07  Deewiant: This is the first time it's broken :P
15:04:16  elliott_: Well, it broke once for me and that was enough
15:04:30  Deewiant: Have I mentioned that Kitten's package manager completely avoids this problem
15:04:45  wow, those are specific version number ranges
15:04:56  elliott_: if it can't solve Sudoku, it's no good at solving version clashes
15:05:02  elliott_: Because of this hackage2arch business (or whatever it was called), people just make packages all willy-nilly and then when somebody updates, if nobody else does, the dependers get screwed
15:05:09  elliott_: (I guess)
15:05:19  Deewiant: Actually no, all the AUR packages are managed by one group
15:05:31  Deewiant: But they're slower than the core repos at dependencies, apparently
15:05:39  So they end up depending on older versions than the core repos have to offer
15:05:40  elliott_: I've had intra-AUR-conflicts
15:05:49  Hmm, sucks to be you
15:05:59  Deewiant: Have I mentioned Kitten avoids this problem
15:06:07  What prevents anybody from uploading their own haskell-this-is-my-library-haha?
15:06:10 -!- copumpkin has joined.
15:06:16  In what, AUR?
15:06:16  elliott_: Let me know when it's done and working
15:06:17  Nothing
15:06:21  elliott_: Exactly :-P
15:06:32   elliott_: if it can't solve Sudoku, it's no good at solving version clashes
15:06:41  ais523: nah, you just don't need to solve them in the first place
15:06:48   wow, those are specific version number ranges
15:06:49  they're not
15:06:54  see package versioning policy
15:07:58  The package versioning policy needs a way of specifying a version range that allows for adding new (non-instance) things to a module
15:08:00  Deewiant: Hmm, I appear to be relatively fucked in terms of getting this library working at this juncture
15:08:10  elliott_: Hence cabal-install
15:08:40  haskell-ansi-terminal 0.5.5-18
15:08:40  haskell-deepseq 1.1.0.2-2.1
15:08:40  haskell-mtl 2.0.1.0-3.1
15:08:40  haskell-network 2.3.0.2-2.1
15:08:40  haskell-parsec 3.1.1-2.1
15:08:41  haskell-text 0.11.0.5-2.1
15:08:42  haskell-transformers 0.2.2.0-3.1
15:08:53  Deewiant: That's a whole... two libraries I would have to install!! Also everything would break horribly.
15:09:34  Things might not break at all depending on the precise situation
15:09:50  But, if they would: go back to the wild west and cabal-install everything
15:09:51  Deewiant: Let me rephrase that for you: I might get lucky :)
15:10:16  I think it's more a case of not getting unlucky
15:10:24  Deewiant: BTW, re: "Let me know when it's done and working", what do you think I'm attempting to install dependencies for my work on right now :)
15:10:55  So you're working on it, great; let me know when it's done and working
15:11:04  Deewiant: Maybe I won't
15:13:22 -!- derrik has joined.
15:20:51 -!- ais523_ has joined.
15:21:01 -!- Darth_Cliche has joined.
15:21:38 -!- ais523 has quit (Ping timeout: 240 seconds).
15:21:41 -!- ais523_ has changed nick to ais523.
15:24:20 -!- sebbu has quit (Read error: Connection reset by peer).
15:27:38 -!- sebbu has joined.
15:27:38 -!- sebbu has quit (Changing host).
15:27:38 -!- sebbu has joined.
15:34:11 -!- derdon has quit (Remote host closed the connection).
15:40:15  [elliott@dinky isolate]$ cabal install ansi-terminal http-enumerator
15:40:17  Deewiant: I blame you
15:40:20  Time to wait twenty years
15:48:23  I think the way Kate Beaton draws babies may be the greatest work of art the world has yet known
15:50:57 -!- tiffany has quit (Ping timeout: 258 seconds).
15:51:32  33554432
15:52:23 -!- tiffany has joined.
15:52:26  hi ais523
15:52:33  hi
15:53:09  Oh god no matter how many times I read Hark! A Vagrant it never gets old.
15:54:31 -!- monqy has joined.
16:01:37 -!- ais523_ has joined.
16:02:06 -!- ais523 has quit (Disconnected by services).
16:02:08 -!- ais523_ has changed nick to ais523.
16:26:23  Huh, the Darwin Awards exclude people with mental disorders.
16:26:29 -!- ais523 has quit (Ping timeout: 248 seconds).
16:26:46  I like how that basically makes it completely explicit that it's all just a front for being sneering assholes.
16:26:56 -!- ais523 has joined.
16:28:25  Phantom__Hoover: To be fair, it wouldn't exactly make them less of a front for being sneering assholes if they included those people.
16:28:49  They're kind of fucked whatever they do, which is usually a Sign(tm).
16:29:07  elliott_, erm, the premise that it's for people who removed themselves from the gene pool due to poor judgement would at least be /sound/.
16:29:23  Well, sure.
16:30:46  I also found it quite amusing when the woman who runs the site herself nearly DA'ed herself and acted like it was fine because it was a near miss.
16:32:18 -!- ais523 has quit (Ping timeout: 260 seconds).
16:34:12 -!- boily has quit (Read error: Operation timed out).
16:37:55  `addquote  (I'm not really sure what that explains but nor am I sure what I'm explaining, so it cancels out.)
16:37:58  707)  (I'm not really sure what that explains but nor am I sure what I'm explaining, so it cancels out.)
16:43:09 -!- Gregor has set topic: Friends don't let friends Comic Sans. | EPL evening school assignments! http://tinyurl.com/5stnu5n | It's the end of an era | RIP John McCarthy) | TO SHREDS!) |  http://codu.org/logs/_esoteric/.
16:43:35  http://en.wikipedia.org/wiki/Chunked_transfer_encoding
16:43:36  Oh come on!
16:43:41  How am I meant to implement a progress bar now?
16:44:25  progress.hs: StatusCodeException 403 (Chunk "Scripts should use an informative User-Agent string with contact information, or they may be IP-blocked without notice.\n" Empty)
16:44:32  Wow Wikipedia, that's very impolite.
16:44:39  Gregor: I can use codu.org logs as a test URLspam location right
16:44:50  Uhh, I guess?
16:44:56  Thx
16:45:32 -!- sllide has joined.
16:46:52  Gregor, have I mentioned that I wrote my folio essay for English on how Comic Sans was awful.
16:47:05  Highest-five
16:47:23  I suspect it played a large part in getting me a B.
16:47:43  You know what would have gotten you an A? *trollface*
16:47:49  IF YOU HAD WRITTEN IT IN COMIC SANS
16:48:29  Nah, the folio was only worth ~20% of the total marks and it was divided into two essays.
16:52:01  [elliott@dinky isolate]$ curl -I http://codu.org/logs/log/_esoteric/2011-10-19
16:52:01  HTTP/1.1 200 OK
16:52:01  Date: Fri, 04 Nov 2011 16:51:55 GMT
16:52:01  Server: Apache/2.2.21 (Debian)
16:52:01  X-Powered-By: PHP/5.3.8-2
16:52:02  Vary: Accept-Encoding
16:52:04  Content-Type: text/html; charset=UTF-8
16:52:08  Gregor: What's with the lack of Content-Length; why do you hate America
16:52:24  SCREW AMERICA
16:52:51  But more specifically, it generates the HTML and spits it out live *shrugs*
16:52:58  And I was too lazy to buffer just to count.
16:53:21 -!- boily has joined.
16:53:41  Gregor: Oh, it's node.js, isn't it :P
16:53:49  Indeeeeeeeeeeeeeeed.
16:53:52  Land of the "what the fuck is abstraction, you're dealing with HTTP yourself".
16:54:14  Aha, the raw logs get it right :P
16:54:15  Uhh ... no?
16:54:25  Gregor, the glogbot rsync stuff seems to be 'broken' again.
16:54:31  Phantom__Hoover: Uhh ... no?
16:54:35  !logs
16:54:44  Gregor: Uhh, no?
16:54:51  elliott_: Uhh ... no?
16:54:58  Phantom__Hoover: E_WORKSFORME
16:54:59  WHAT ARE YOU TRYING TO EXPRSES >_<
16:55:02  Uhh— no?
16:55:13  elliott_:  Land of the "what the fuck is abstraction, you're dealing with HTTP yourself". // no.
16:55:20  !logs
16:55:36  Gregor: You can hardly call node.js' API high-level :P
16:57:38  elliott_: Node's API for /what/? For actually running an HTTP server? Or for just generating pages? 'cuz the latter is, y'know, CGI.
16:58:04  Gregor: Uhh, I don't think you're meant to use its CGI stuff if you want to be Best Practices Web Scale (tm) :P
16:58:34  elliott_: Yeah, I definitely need a separate web server to gen logs now and then.
16:58:53  Gregor: I'm not saying it's required, I'm just saying that it's hardly a typical use of Node :P
17:00:07  elliott_: You're totally right that stalker mode should have a talk function.
17:00:11  It would be epic.
17:00:15  Yes.
17:00:28   An anonymous coward says: WHY HALLO THAR
17:00:36  ...Don't build it into glogbot :P
17:00:47  It's meant to be MORE stable than clog :P
17:01:09  * glogannoyingchatterbot has joined #esoteric \  WORST IMPLEMENTATION EVER? \ * glogannoyingchatterbot has parted #esoteric
17:01:29  Gregor: It would be sooo hard to add another bot :P
17:01:36  You don't have a premade library for that or anything.
17:01:54  P.S. -n would solve that
17:02:15  I think there are maybe two channels in the history of IRC that are -n :P
17:03:14  Gregor: -minecraft is one of 'em :P
17:03:24  Gregor: It is +s but -n :P
17:03:30  Anyone can talk, but NOBODY CAN KNOW OF ITS EXISTENCE.
17:04:57  elliott_: I hope your mother regrets having birthed you. :P
17:05:12  (did the :P help there)
17:05:17  I'm testing out the theory of :P
17:05:55  :) is the "I desperately need to be punched in the face several times" one.
17:05:59  Gregor's theory of :P is that :P is valid for all circumstances :P :P :P
17:06:07  Phantom__Hoover: what about :>
17:06:15  CakeProphet: Post-punching.
17:06:21  `? CakeProphet
17:06:27  ​:>
17:06:43  @hoogle (:>)
17:06:43  Data.Sequence (:>) :: Seq a -> a -> ViewR a
17:06:53  awesome.
17:07:12  I thought that operator looked familiar.
17:07:40  is Sequence a monad?
17:07:46 -!- Darth_Cliche has quit (Quit: You are now graced with my absence.).
17:07:51  same as [a] right?
17:08:08  Gregor: Rharaeraerhgaehwegh why does your HTTP server not send Content-Length /only/ to the Haskell lib
17:08:11  curl sees it just fine
17:08:33  fungot: hi
17:08:33  CakeProphet: and it's self-modifying techniques." stop immobilizes and disables you. in these bones, i shall return! by the way, the wings! now this is a way to the ocean palace? come to see you back again
17:08:43  elliott_: lul
17:09:22  Gregor: I think this library is actually TRYING to get a chunked response whenever possible :P
17:10:03  fizzie: your bot doesn't let me spam its name in privmsg and get fungotspeak
17:10:31  So does.
17:10:32  Just did it.
17:10:36   elliott_: to. why, this is for you guys are a lot
17:10:36  elliott_: so, let's say i call them mindless games. if we hit every stupid person, any person going, tough one. if we solve it,... i know...
17:10:51  fungot fungot fungot
17:10:52  Gregor: it's what that guy in medina, a village near the mystic mountain" 65,000,000 b. c.? yes, i'd have done something very brave? fnord 06:22, 29, no. 2, 2, 3, 4, 8, 13, 1(::**) ...bad insn!
17:11:03  ^style
17:11:03  Available: agora alice c64 ct darwin discworld europarl ff7 fisher fungot* homestuck ic irc jargon lovecraft nethack pa sms speeches ss wp youtube
17:11:10  ^style sms
17:11:10  Selected style: sms (National University of Singapore SMS corpus, 2011-08-20)
17:11:16  fungot fungot fungot
17:11:17  Gregor: i want to sent mesages. but u'l talk
17:11:52  ^style homestuck
17:11:53  Selected style: homestuck (Homestuck pages 1901-4673)
17:11:57  fungot: That sword alone can't ____, solve for ____.
17:11:58  elliott_: your name is, i am just as confused. emerging from the trials in the brooding. enjoy a bevverage to me or about my fuckin manners for the roof. you have given yourself a very official?
17:12:08  fungot: Wrong! You have three guesses remaining.
17:12:09  elliott_: john, the uncarved minitablet. john carved this tablet at the request. it's just a wrapper for your private reading material later
17:12:13  fungot: Wrong! You have two guesses remaining.
17:12:14  elliott_: really, it it is pretty conceivable that i was about to get blown up! :o)
17:12:18  fungot: Wrong! You have one guess remaining.
17:12:18  elliott_: an old colonel lost, but a new brother gained. together they will ascend, each time you must be adventurin'.
17:12:25  fungot: Wrong! You have no guesses remaining. Have a nice day.
17:12:36  See, it shut up like it's supposed to and all.
17:12:44  does cakeprophet mean that he can't spam fungot's name because of the shutup
17:12:44  monqy: enter name. and a whole other issue.
17:12:55  monqy: yes you are correct!
17:12:59  good job! :>
17:13:02  :>
17:14:10  I think :> is this: http://media.tumblr.com/tumblr_lr8cphyXGf1qmiocn.jpg
17:15:35  good picture
17:17:39  monqy... monqy
17:17:40  monqy
17:17:41  fix my code
17:17:46  :(
17:18:00  is it broken
17:18:07  Yes.
17:18:16  ACTUALLY it may be: SOMEONE ELSE'S CODE.
17:18:19  Let's FIND OUT.
17:23:06  monqy: btw try runhaskelling this to be really unnerved by your terminal: http://sprunge.us/IhEb
17:23:11  you will ask... whence... crahrahchters
17:27:25  wow unnnerving
17:28:20  monqy: it is like a ghost story...... for your terminale.
17:30:05  Gregor: WHYYY DO YOU CHUNK
17:30:17  elliott_: Dah chunky chunks.
17:30:23  W;Yhy
17:30:59  OHHHH, those are /record fielsd/
17:31:03  Suddenly this library makes 10x as much sense.
17:31:41 -!- ais523 has joined.
17:34:04  elliott_: Try now.
17:34:10  Gregor: What did you do :P
17:34:20  elliott_: Made it buffer and send all at once I think :P
17:34:35  Gregor: ...but this issue is with the raw logs, which you already send content-lengths for...
17:34:39  Just not whenever I use Haskell.
17:34:48  It's literally detecting whether I'm using Haskell or not and punishing me for it.
17:34:50  elliott_: OH.
17:34:59  elliott_: I thought it was the cooked logs :P
17:35:07  It was before I realised that'd never work :P
17:35:11  Testin' progress bars here, y'understand :P
17:35:18  elliott_: Well Idonno why it's chunked.
17:35:34  I suspect this HTTP library is trying to make it be chunked for ~PERFORMANCE~ >_>
17:35:41  chunk chunk
17:36:59  :t forM
17:37:00  forall a (m :: * -> *) b. (Monad m) => [a] -> (a -> m b) -> m [b]
17:38:35  status418, statusImATeapot :: Status
17:38:35  I'm a teapot
17:38:46  -- http://hackage.haskell.org/packages/archive/http-types/0.6.6/doc/html/Network-HTTP-Types.html#v:status418
17:39:28  apparently for real
17:39:47  Yes, it's part of an April Fool's RFC.
17:39:57 -!- copumpkin has quit (Read error: Connection reset by peer).
17:40:08  Hyper Text Coffee Pot Control Protocol.
17:40:34  it's just so cute that they actually gave it
17:40:35  a name
17:40:38  in a serious library
17:40:40  :))))))))))
17:40:40 -!- copumpkin has joined.
17:41:10  Status 418 is, in fact, 418 I'm a teapot.
17:41:21  The HTCPCP server is a teapot; the corresponding entity may be short and stout.
17:41:22  https://github.com/aristidb/http-types/commit/ec22a919f865f68d3da39ccb75f5d78b331606b2
17:41:24  good! patriot
17:41:41  13:40  CakeProphet: this is a really hot look for a stronger! this is so outrageous. hell fucking yes a few more things we can deploy but some things we can  deploy but some things we can deploy but some things we can deploy but some things we can deploy but some things we can deploy but some things we can
17:41:42  CakePrsw}a{~e^is@]i[iped_a/The-Prophet-Wiza:CakeProphet: what the hell was that? but from what i understand if it is applicable in any sphere, with oceans, trees, networks of pipes, the april issue of the serious business application.
17:41:43  thank you mbbx6spp. good person.
17:41:46   deploy but some thing we can deploy but some things we can deploy but some things wee can deploy but some things we can deploy bu
17:41:49  fizzie: Another corruption bug
17:42:03  whoa there fungot
17:42:03  monqy: and so it would continue. second, you could have a 8ody again and his little blinking in and out the back in case. you never know with that crazy. conveniently, you can watch what happened right here on the monitor has not lost his copy to save her!
17:42:35  i like how fungot never like
17:42:35  elliott_: but, there are imps around, but you don't have a very exciting 24 hours or so. you say you are only here to deliver a message and then i'll put in the hallway. beyond a lot
17:42:35  crashes
17:42:39  and never permanently fucks up beyond repair
17:42:47  it's always "goes wack for half a message"
17:42:56  befunge is designed for reliable applications.
17:42:58  funge-98: durable
17:42:59  ye
17:42:59  s
17:43:08  fungot: hi
17:43:08  elliott_: and it just might be all three possible codes, yielding a radically exactly the same of you.
17:43:26 * CakeProphet lol'd in real life.
17:43:36  at which part
17:43:42  yielding a radically exactly the same you.
17:43:45  the "yielding radically exactly the same" is a direct qote
17:43:59  `log yielding a radically exactly the same you.
17:44:02  elliott_: from what
17:44:04  ^style
17:44:04  http://www.mspaintadventures.com/?s=6&p=002986
17:44:04  Available: agora alice c64 ct darwin discworld europarl ff7 fisher fungot homestuck* ic irc jargon lovecraft nethack pa sms speeches ss wp youtube
17:44:06  oh
17:44:12  2011-11-04.txt:17:43:42:  yielding a radically exactly the same you.
17:44:13  hmmm, ah yes that does sound familiar.
17:44:15  "You get the BETA (3+1+1+1), now yielding a radically different hash value with the Scrabble function.
17:44:15  Which is to say a radically exactly the same value."
17:44:26  Objective-C is soo ugly
17:44:33  but still better than C++
17:45:07   -- a goon
17:45:32 -!- MSleep has changed nick to MDude.
17:45:40  [("Date","Fri, 04 Nov 2011 17:44:55 GMT"),("Server","Apache/2.2.21 (Fedora)"),("Last-Modified","Tue, 25 Oct 2011 05:21:24 GMT"),("ETag","\"6a6180d-492e2ed-4b018b5e17d00\""),("Accept-Ranges","bytes"),("Content-Length","76735213"),("Content-Type","application/x-bzip2")]
17:45:40  FINALLY, THAT WORKS
17:45:44  monqy: friendship headers
17:46:07  :t lookup
17:46:08  forall a b. (Eq a) => a -> [(a, b)] -> Maybe b
17:46:11  elliott_: I'm having no such luck with Django 1.4
17:46:20  perhaps I shouldn't use pre-alpha releases of giant enterprisey things.
17:46:46  also maybe don't use python
17:47:09  does anyone know where i can download a bunch of really small files
17:47:15  like 100K
17:47:20  or less
17:48:28  elliott_: the internet.
17:48:33  thanks
17:48:55  http://thepiratebay.org/torrent/6554331/Papers_from_Philosophical_Transactions_of_the_Royal_Society__fro
17:48:58  maybe?
17:49:04  they may be too large.
17:49:06  gnu bloat:
17:49:10   hello-1.3.tar.gz          23-May-1993 03:00   86K
17:49:10   hello-2.7.tar.gz          28-Mar-2011 18:44  586K
17:49:45 -!- boily has quit (Quit: WeeChat 0.3.6).
17:50:02  GNU hello now includes most of gnulib.
17:50:46  what
17:50:57  hmm, I think I need some kind of task manager to do this
17:50:58  elliott_: I love how django is telling me a template file doesn't exist.
17:51:06  and then I go to check on my filesystem if it exists at that path
17:51:06  pikhq: this package manager's ui is going to be so sleek, do you have any idea
17:51:08  and, oh look, it does.
17:51:26  pikhq: run this program and you will begin to have idea: http://sprunge.us/IhEb
17:51:37  perfect spook program (TM)
17:52:50  huh
17:53:09  I hate IB
17:53:25  I like how nooga has been fully reduced to just talking about his OS X development life.
17:53:42  elliott_: God damn.
17:53:54  the sleekest of progress bars. the SLEEKEST.
17:53:57  elliott_: at least I have a trusted, permanent enemy
17:54:02  nooga: :}
17:54:10  :>
17:55:02  pikhq: btw don't ^C that program, you don't get your cursor back :P
17:55:37  "reset" says wut?
17:55:59  elliott_: How do I shot web and/or install System.Console.ANSI?
17:56:23  Gregor: Search "ansi-terminal" in apt-cache
17:56:27  If recent enough Debian there'll be a -dev package
17:56:42  libghc-ansi-terminal-dev did it for me.
17:56:50  elliott_: sid, biatch, sid!
17:57:11  That progress bar has a similar effect on me to w3m's image support.
17:57:26 -!- derdon has joined.
17:57:33  It makes me stare in horror and wonder how you can even fit that many pixels into a glyph.
17:58:02  elliott_: It phails hardcore for me, I'm betting I'm in some weird no-Unicode configuration due to shitty school configuration + SSH :(
17:58:20  Gregor: Yeah, probably best to run it locally :P
17:58:34  elliott_: FIXT
17:58:45  elliott_: That is definitely a progress bar.
17:58:59  elliott_: It is extraordinarily difficult to argue with the notion that that is a progress bar.
17:59:02  IT'S MORE PROGRESS BAR THAN TERMINALS WERE MEANT TO DISPLAY
17:59:16  I CANNOT COPE WITH THE NOTION OF A BAR MOVING LESS THAN ONE VT TABLE CELL AT A TIME
17:59:16  Indeed.
17:59:18  "CakePrs€w}a{~e^is@]i[iped_a/The-Prophet-Wiza:CakeProphet: what the hell was that?" <- how appropriate.
17:59:40  Gregor: But yeah, let's see your fancy APT give you progress bars like that!!!!
17:59:43  KITTEN POWER
17:59:46  :'(
17:59:49  I hate that when you want to replicate GUI of any known app, you have to handcode every fucking single view BECAUSE Apple gives you only button and window ;F
18:00:38  elliott_: Seems you're right about nooga.
18:00:42  Yep!
18:01:01  `learn nooga hate OS X. NOOGA SMASH.
18:01:03  I knew that.
18:01:12  X-D
18:01:38  So is there any known formula for calculating download speeds and download time remaining?
18:01:47  Like, I want something decent, not something that uses Microsoft minutes.
18:01:54  There has to be some fancy formula with weighting and shit :P
18:02:33  Nope.
18:02:37  There is only failure.
18:02:41  :'(
18:03:01 -!- ais523 has quit (Ping timeout: 248 seconds).
18:03:07  http://stackoverflow.com/questions/798800/whats-the-best-way-to-calculate-remaining-download-time
18:03:08  http://stackoverflow.com/questions/2779600/how-to-estimate-download-time-remaining-accurately
18:03:14  Gregor: Ha, I just neeed an EXPONENTIAL MOVING AVERAGE.
18:06:50  Hmm. It occurs to me... I think, in common law jurisdictions, you could actually get away with signing things using a fucking *seal*.
18:07:22  pikhq: Doin' it.
18:07:36  pikhq: You do mean the animal, right?
18:07:47  pikhq: *ARR' ARR'*
18:08:06  Gregor: I do not, sadly.
18:08:16  *snaps*
18:09:35 -!- pumpkin has joined.
18:09:47  Oh, wait, I think you could.
18:09:59  A signature is any mark or action that indicates identity and intent.
18:10:07  Brand your seals and you should be good.
18:10:45 -!- pumpkin has changed nick to copumpkin_.
18:10:55 -!- copumpkin has quit (Disconnected by services).
18:10:59 -!- copumpkin_ has changed nick to copumpkin.
18:12:31  @hoogle Integer -> Integer -> Rational
18:12:31  Data.Ratio approxRational :: RealFrac a => a -> a -> Rational
18:12:31  Data.Ratio (%) :: Integral a => a -> a -> Ratio a
18:12:31  Data.Bits (.&.) :: Bits a => a -> a -> a
18:12:44  aaaargh
18:15:52  Hell. I think tattooing something on you would count as a "signature".
18:16:03  Gotta love common law.
18:20:56  OMG it's working :D
18:21:19  pikhq: Gregor: What does Unicode have to offer in the way of fun spinners???
18:21:28  \|/- is so passe.
18:21:55  elliott_: Hmmmmmmmmmm
18:22:42  Spinning arrows??? Spinning SNOWMEN??? GOATS???
18:22:53  Pile of poo becoming slowly more and more gross until a dog eats it???
18:22:55  Ew.
18:23:42 -!- pumpkin has joined.
18:24:01  elliott_: http://www.fileformat.info/info/unicode/char/2196/index.htm and http://www.fileformat.info/info/unicode/char/2197/index.htm tick-tocking like a metronome.
18:24:14  X-D
18:24:18  I like it.
18:24:43  There's actually a large set of arrows.
18:24:59  Gregor: Ooh, these four are promising:
18:25:01  http://www.fileformat.info/info/unicode/char/21b0/index.htm
18:25:02  http://www.fileformat.info/info/unicode/char/21b1/index.htm
18:25:03  http://www.fileformat.info/info/unicode/char/21b2/index.htm
18:25:05  http://www.fileformat.info/info/unicode/char/21b3/index.htm
18:25:27  ←↖↑↗→↘↓↙
18:25:31  Except the set isn't complete >_<
18:26:03  What I'd really like is, like, ten rotations of ↺ :P
18:27:04 -!- copumpkin has quit (Ping timeout: 276 seconds).
18:27:47  OMG wait, there's more right blocks than I thought?
18:27:58  spinning nipple
18:28:00 -!- pumpkin has changed nick to copumpkin.
18:28:07  oh, Apple took that
18:28:46  elliott_: There's a symbol for each phase of the moon.
18:28:50  Note, not in common fonts.
18:29:10  Argh >_< pikhq: What codepoints are these: ▎▍▌▋▊▉
18:29:17  :p
18:29:38  OMG, what if I cycled rapidly through random Braille characters as my spinner.
18:29:41  That would look so cool.
18:29:43  http://www.fileformat.info/info/unicode/block/block_elements/list.htm
18:29:46  There's the block.
18:29:49  elliott_: That ... is pretty great, actually.
18:29:58  elliott_: Make it binary counting.
18:30:10  maybe something Korean? -> http://lcweb2.loc.gov/diglib/codetables/9.3.html
18:30:13  Gregor: I stole that from a Stack Overflow answer >_> But, god damn, that's such an inspired idea :P
18:30:35  pikhq: Wrong
18:30:35  elliott_: Similarly you could use some of the "quadrant" blocks in what pikhq just posted.
18:30:49  pikhq: Note how it has all the ones from the left, but only a few from the right
18:30:53  I need to know where the other ones from the right are :P
18:31:22  nooga: Maybe
18:31:33  OMG ◴ ◷ ◶ ◵
18:31:41  Someone write a one-liner to cycle through those, I cannot believe it doesn't look cool.
18:32:47  $ while true; do echo -ne '\r◴'; sleep 0.1; echo -ne '\r◷'; sleep 0.1; echo -ne '\r◶'; sleep 0.1; echo -ne '\r◵'; done
18:32:50  Not as good as I hoped :P
18:35:47  elliott_: 's too small I think.
18:35:53  Yeah
18:38:25  .:፧
18:38:28  while true; do echo -ne '\r┭'; sleep 0.1; echo -ne '\r┮'; sleep 0.1; done
18:38:29  NAILED IT
18:38:47  Gregor: Wow, what :P
18:38:55  It's... wriggling...
18:38:57  It's a spinner, viewed on its side :P
18:39:06  ...X-D
18:39:49  ⁘⁙
18:40:08  -ne?
18:40:48  Sgeo|web_: ?
18:41:57  ⁘ ⁙
18:42:04  while true; do echo -ne '\r\xE2\x96\x9A '; sleep 0.2; echo -ne '\r\xE2\x96\x9E '; sleep 0.2; done Perfection
18:43:10  Gregor: It's dancing.
18:44:44  while true; do echo -ne '\r⁘'; sleep 0.2; echo -ne '\r⁙'; sleep 0.2; done
18:45:38  .፧ is definitely like .: but with three arguments.
18:45:55  except it's not a valid operator character. :(
18:46:10  elliott_: while true; do echo -ne '\r\xE2\x97\xBB\xE2\x97\xBD\xE2\x97\xBD '; sleep 0.1; echo -ne '\r\xE2\x97\xBD\xE2\x97\xBB\xE2\x97\xBD '; sleep 0.1; echo -ne '\r\xE2\x97\xBD\xE2\x97\xBD\xE2\x97\xBB '; sleep 0.1; echo -ne '\r\xE2\x97\xBD\xE2\x97\xBB\xE2\x97\xBD '; sleep 0.1; done
18:46:29  Gregor: Enjoying ourselves? :P
18:46:35  elliott_: Yes, but this one is legit good.
18:46:45  It is, but I can only use something one char wide >__>
18:47:02  Gregor: Because it'll turn into a ✓ once it's done :P
18:47:06  A GREEN ✓.
18:47:11 * elliott_ usability expert
18:48:16  usability experts are tools, ha ha ha
18:48:20 -!- derrik has quit (Quit: dive).
18:50:58  nt
18:51:41  elliott_: So replace it with space check space *shrugs*
18:52:31  Gregor: I'll consider it :P
18:53:18  Of course, ideally the Unicode consortium would be adding characters just for this.
18:53:21  MEATSPIN NORTH WEST
18:53:22  MEATSPIN NORTH
18:53:24  MEATSPIN NORTH EAST
18:53:27  MEATSPIN EAST
18:54:52  ELLIOTIAN MEATSPIN *
18:55:06  Wow, this code structure is going to be a pain :P
18:55:21  I need to support fully concurrent, independently-updated tasks and redraw the screen whenever any of them makes progress.
18:55:29 * elliott_ decides to throw threads at the problem.
18:55:50  ever thought about.... GUI?
18:56:03  Yeah, I should write a lovely Cocoa program with that wonderful Interface Builder.
18:56:07  yeah
18:56:08  It'll make this package manager so much better.
18:56:31  you cold write some beautiful NSView subclasses
18:56:36  and stuff
18:56:38  gradients
18:56:41  you know
18:57:12  FFFFFFUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU ry23q;0482y[09234n]901yn]-9yn]52~nty]]Ō€5~t480ee4q
18:57:33  I hate my job
18:58:47  nooga: Don't worry, it hates you too.
18:59:41  the worst part is that I'm my own boss ;F
19:00:29  I suggest: Doing a job that is a different job to that.
19:00:37 * Gregor nods sagely.
19:03:41 -!- ais523 has joined.
19:03:46  Is there a nicer way of getting the terminal width than `tput cols`?
19:04:02  One that doesn't involve shelling out.
19:04:19  elliott_: you can simulate tput cols by hand, I guess
19:04:24  What does echo -ne do?
19:04:26  And the \r?
19:04:30  ais523: That's sort of what I'm asking.
19:04:36  I guess the -e makes the \r do something?
19:04:38  By sort of I mean exactly.
19:05:10 -!- Guest63524 has quit (Read error: Connection reset by peer).
19:05:23  hmm, Apache have stopped maintaining Harmony?
19:05:42  elliott_: as far as I know, it's writing a particular terminal-dependent control string, then reading back from the terminal
19:05:48  Ugh
19:05:54  so I suppose technically, you write stdout then read stdout
19:05:59  just in case it's different from stding
19:06:01  *stdin
19:06:04  Deewiant: You shoulda told me ansi-terminal didn't do width :P
19:06:11  EVERYTHING IS SOMEBODY ELSE'S FAULT
19:06:12  ...read stdout?
19:06:23  Sgeo|web_: why not?
19:06:23   *stdin
19:06:28  it's typically open both ways
19:06:28  but it's perfectly possible
19:06:31  elliott_: that was a correction on "stding"
19:06:38  oh, heh
19:06:45 * Sgeo|web_ may have to fix PSOX
19:06:51  OH NO PSOX IS BROKEN
19:06:53  (Note: Not actually going to fix PSOX)
19:07:05  elliott_: ah, it isn't, it's an ioctl
19:07:16  TCGETS, to be precise
19:07:23  ioctls are famous for being mostly undocumented
19:07:39 * elliott_ has worked with terminal ioctls before. :-(
19:07:57  you know what, I'll just assume your terminal is 80 columns wide for now
19:08:13  ............django
19:08:13  why
19:08:14  elliott_: however, I think that one might be implemented by the Secret Project
19:08:26  the only thing worse than trying to use ioctls is trying to implement them, or something like that
19:08:33  (note: worse things exist but wouldn't make for as pithy a quote)
19:08:53 -!- Slereah_ has joined.
19:10:53  reimplementing a quarter of wget with a nicer UI sure isn't fun
19:12:30  elliott_: does wget have a programmatic interface that lets you connect it to your own progress counter, like fsck does/
19:12:46  ais523: just --progress=dot
19:12:54  and screen-scraping
19:13:00  (there's no terminal codes, but still)
19:13:06  :(
19:13:35  ais523: why do you think I'm rolling my own? :P
19:13:58  I was wondering if there was one and you didn't know of it
19:14:02  I didn't know of fsck's for ages
19:14:20  (I've never actually used it from code, although the system uses it to display fsck progress on the splash screen)
19:14:36 -!- derrik has joined.
19:14:59  data Task = Task
19:14:59    { taskName :: TVar String
19:14:59    , taskProgress :: TVar Rational
19:14:59    , taskProgressInfo :: TVar String
19:14:59    , taskDone :: TVar Bool
19:15:00    }
19:15:02  I guess this is coming together
19:15:18  hmm... maybe that should all be in a single TVar; it's not going to get independently modified
19:15:43  what is that for?
19:15:50  package manager!
19:15:54  yeah
19:16:00  but what is the package manager for
19:16:07  ais523: (apparently I can't write an interactive-ish console program without trying to surpass darcs' UI in every way)
19:16:10  nooga: Kitten
19:16:21  what was Kitten, again?
19:16:55  elliott_: darcs' UI is great although not perfect, so surpassing it is always going to lead to good UIs
19:17:29  nooga: linux distro!
19:18:03  oh right
19:18:06  ais523: My programs are pretty much either completely unusable requiring like ten shell scripts to thread them together and modifications to work with anyone else's stuff but mine, or COMPLETELY FLAWLESS HANDCRAFTED UIs.
19:18:08  (Mostly the former.)
19:19:06 -!- Zuu has joined.
19:19:33  elliott_: how it would be different from other linux distros?
19:20:15  nooga: purely functional package and configuration manager (a la Nix), generalised to be a complete service manager; seamless multilib support; hopefully not very crap???
19:22:22 -!- sllide has quit (Read error: Connection reset by peer).
19:23:37  do you have packages to manage?
19:25:42  elliott_: Hmm. So, this would probably seamlessly handle multiple libcs.
19:25:51  pikhq: Yep.
19:26:05  And thus could be the basis for a musl-and-glibc distro.
19:26:11  nooga: Sure, every package in a Linux distro shall be managed. Also the entirety of language-specific repos like CPAN and Hackage, seamlessly and automatically.
19:26:12  (glibc for everything that can't be musl)
19:26:35  pikhq: Yep. I'm actually intending to start off with a "regular" glibc/gcc setup and then move to musl as it becomes more usable (i.e. C++ support for WebKit :-P)
19:26:46  Sounds about right.
19:26:48  what's musl?
19:26:56  pikhq: The nice thing about the purely-functional package management model is that dynamic linking literally means nothing any more.
19:27:10  It's a minor space tradeoff, a very slight time tradeoff.
19:27:14  ais523: musl is an alternate libc that features better performance than glibc and better size than uclibc.
19:27:18  Saves a bit of network bandwidth for delta updates.
19:27:33  While also being written reasonably well.
19:27:46  elliott_: what if the system crashes and the partition with the libraries on can't be mounted?
19:28:09  ais523: Then the system is fucked, *just like any recent Linux distro*. :)
19:28:12  ais523: you mean the only partition that contains packages?
19:28:15  ais523: We all want Web o' Flies, why are you restricting it to elliott_? :(
19:28:23  Gregor: I'm PMing it on request
19:28:27  are you requesting?
19:28:29  ais523: REQUEST
19:28:37 * pikhq requesteth as well
19:28:46  ais523: I leaked a bit of your valuable IP in the form of the jawdropping comments, sry about that :P
19:28:46  Jesus this is too brilliant for me to not look at. :)
19:29:42  wow, all the comments on the first screenful are indicative of one insanity or another
19:29:58  and that's just in the preprocessor statements to include relevant headers with relevant options
19:30:30  I appreciate your _POSIX_C_SOURCE.
19:30:38  Though _GNU_SOURCE should suffice.
19:30:49  pikhq: no, the value I defined it to is significant, believe it or not
19:30:51  but I forget why
19:31:00  199309L is rather higher than the usual setting
19:31:25  Probably disabling some newer POSIX features.
19:32:25  oh right, the first bit after the #includes is pretty crazy too
19:33:02  I'm defining a couple of structs that aren't in any include files; the docs say you have to define them yourself, and the docs /also/ miss out a field, so if you try to define them to the docs it won't work
19:34:17  (that's for the syscall getdents; you're not supposed to use it directly, rather using a wrapper, but you can do a few things with it that you can't via the wrapper, such as listing amazingly large directories, and ofc weboflies is at the receiving end of syscalls so it has to understand getdents, not the libc equivalents)
19:34:28  Oh, it's also x86-specific.
19:35:00 -!- zzo38 has joined.
19:36:32  Where the hell is vt_kd_kbentries, anyways?
19:37:00  oh, it's in a separate file, let me paste that too
19:37:09  *Ah.*
19:37:13  http://sprunge.us/KKPf
19:38:03  ais523: I can give you a build script
19:38:11  gcc -o weboflies -m32 -O2 -g --std=gnu99 -Wall -Wextra -Wno-missing-field-initializers -Wno-missing-braces weboflies.c ktt.c -lrt -lpng
19:38:15  ktt.c is that other file ais523 just pasted
19:38:17   199309L is rather higher than the usual setting <-- hm?
19:38:26  Vorpal: for _POSIX_C_SOURCE, IIRC
19:38:27  Wait, what does `? actually do?
19:38:30  `? ?
19:38:32  ​? is wisdom
19:38:56  ais523, take a look at man 7 feature_test_macros
19:39:02  ais523, it should explain how it works
19:39:04  ais523: no, it's usually > 2001 or so
19:39:06  for the year part
19:39:30  ais523, defining it to 1 just exposes the original POSIX
19:39:45  usually I define it to 200112L for POSIX.1-2001
19:39:53  or 200809L for POSIX.1-2008
19:40:40  elliott_, I have to say that the way _XOPEN_SOURCE works in is weird. 500,600,700? How does that make sense
19:40:47  Vorpal: magic!
19:40:56  On Tuesday, FreeGeek Vancouver fixed the mail, they changed it from GNU mail to BSD mail and it could send/receive properly. But on Wednesday it broke again, somehow reverting to GNU mail. On Thursday, it worked again!
19:40:57  yes yes, magic constants
19:41:05  Vorpal: it's like BASIC line numbers, it's so they can add other values in between
19:41:38  ais523, but why start at 500 hm
19:41:47  Vorpal: It's "5.0.0", "6.0.0", "7.0.0"
19:41:54  ah, makes sense
19:42:04  pikhq, what happened to 4.0.0 though?
19:42:10  Fuck if I know.
19:42:14  and other lower numbers yeah
19:42:15  hm
19:42:31  isn't X's current version at 11, anyway?
19:42:48  Ah. They didn't use that macro for earlier versions.
19:43:06  Some idiot is setting fireworks off outside, since they apparently can't count past three.
19:43:06  ais523: This is the X/Open Portability Guide standard.
19:43:16  *Not* the X Windowing System.
19:43:46  why would two different things be called X?
19:44:11  Because people believe in confusing you.
19:44:34  = ERROR: stat proc/pid/fd: Permission denied
19:44:35  YAY
19:44:39  pikhq: join the club
19:44:51  it only works for ais523 :)
19:44:55  everyone else gets that error
19:44:59  all two of us
19:45:07  (you can generalise from two examples! I just did it!)
19:45:22  elliott_: I'd /guess/ that something's changed in Linux's handling of perms
19:45:40  http://sprunge.us/fERT And my Makefile.
19:45:45  along the lines of "you can't read a process's fds if there's ever been a root-owned process in the history of processes since"
19:46:15  I suppose you could just comment out the permission dropping in the main process, but that would be insane
19:46:27  (admittedly, it's insane enough as-is, but I don't want to make it even worse)
19:46:44  either that, or keep the root perms in reserve for when they're needed; I don't like doing that either, but it's more secure than running as root constantly
19:46:58  "6:54 remaining @ 1 Mio/s" <-- hmm, this seems worryingly long
19:47:04  there's not much space left for the filename
19:47:19  what filename lengths are you expecting?
19:47:21  ais523, hm what kernel version are you on then that make it work?
19:47:33  2.6.32-35-generic
19:47:41  ah, 10.04 LTS?
19:47:42  right
19:47:53  And I'm testing on 3.0.0-1-amd64.
19:47:58  ^Cibreoffice-af-3.4...   368.0K  398.0K/s 00:00:02 [#####-----------------]  27%
19:47:58  ok, that's what pacman's looks like
19:48:37  I think it's only just new enough to run weboflies, which requires something along the lines of 2.6.30
19:48:38  or newer
19:49:11   "6:54 remaining @ 1 Mio/s" <-- hmm, this seems worryingly long
19:49:11   there's not much space left for the filename
19:49:12  uh
19:49:14  where?
19:49:16  aww, I just had a great idea that would require me to abandon my smooth progress bar format
19:49:31  include the progress at the head of the progress bar itself, white on green
19:49:40  elliott_: like AceHack health bars?
19:49:49  Hmm
19:50:01  Would there be any problems with killing Flash when it's not in use?
19:50:04  elliott_, as long as it work over serial console :P
19:50:07  (not really)
19:50:12  ais523: I don't recall
19:50:36  hmm... /me decides that seeing how much of the file in absolute terms has downloaded so far is useless
19:50:42  a progress bar + total filesize is enough
19:51:08  "8 Gio @ 1 Mio/s; 6:54" that's better
19:51:19  Sgeo|web_: on this system, Flash isn't even running when it's not in use
19:51:31  $ killall plugin-container
19:51:32  plugin-container: no process found
19:51:41  and I assume other systems are the same
19:52:01  Vorpal: Funny thing is, almost everything that works with a Linux virtual terminal should work over a serial console.
19:52:20  The concept of a "terminal" is such a stupidly naive thing.
19:52:46  pikhq: well, it works with a couple of FIFOs and a bunch of lying about the results of ioctls
19:53:10  ais523: Yeah.
19:53:17  pikhq, well one connected to a line printer I meant ;P
19:53:20  It's a heck of a lot of lying to get programs to think it's a serial terminal.
19:53:28  ktt.c is a lookup table for the results of the ioctl to get the keyboard translation table
19:53:42  I have no idea what it means (and have failed to figure it out via looking at it); I obtained it by experiment
19:53:47  Vorpal: I'd be surprised if even vi worked like that.
19:53:56  pikhq, fair enough
19:54:05  I'm not getting programs to think it's a serial terminal; I'm getting them to think it's a VT (ctrl-alt-F1 style)
19:54:19  and that they have complete control over the keyboard and screen while it's active
19:54:26  ais523: I'm discussing Linux's normal handling of pty's.
19:54:33  ah right
19:54:41  actually, I think weboflies does connect to a pty
19:54:45  but disguises it as a tty
19:54:46  You, obviously, are adding extra magic on top of that. :)
19:56:32  you know, I think I might be concentrating a little too much on this package manager's download UI
19:57:29  elliott_: never
19:57:39  UI IS LIKE
19:57:43  THE KNOBS AND THE BUTTONS
19:57:47  THE STEERING WHEEL
19:57:53  YOU WANT YOUR PRODUCT TO BE SHARP.
19:57:58  AND EASY TO OPERATE.
19:58:06  the UI is the face
19:58:08  that greets your user.
19:58:27  More typically, the UI is the hammer. That beats your user.
19:58:29  a face of knobs and buttons and a steering wheel? that's not a pretty face
19:58:49  tells him or her what's up, provides an... interface... for the user
19:58:51  a user interface.
19:59:16  the UI is the anvil upon which the user must beat its head
20:05:06   you know, I think I might be concentrating a little too much on this package manager's download UI <-- yes
20:05:14 -!- zzo38 has left.
20:05:19  no :)
20:05:25  i fucking hate pacman's and apt's
20:05:30  elliott_, personally I would probably start out just calling out to wget, then later on I would try to format the output a bit
20:05:41  why? a call to wget is one line, there's no point
20:05:45  I know exactly how it'd work
20:05:54  I don't need to prove-of-concept to myself that I can call wget
20:06:07  oh I thought you were doing the actual implementation
20:06:21  I am
20:06:25  I would have done download the easy way
20:06:41  what does that buy me?
20:06:50  I'll have to replace it later on, anyway
20:12:21  "Search within an incognito window to avoid the Google bubble. Or you could get the Tor browser." — Sensible advice from reddit on how to get rid of search tuning temporarily.
20:12:24  Agua di Gio
20:16:22  progress: thread blocked indefinitely in an STM transaction
20:16:22  Oh no.
20:20:57  elliott_: The thing is that by doing the naive thing first you can get *working* code quickly.
20:21:12  pikhq: I already know how to write a working wget call :)
20:21:23  It is far easier to make working code better than to make perfect ideas work. :)
20:22:03  the ancient problem of enginieers: idealism
20:30:18 -!- derrik has left.
20:30:26 -!- zzo38 has joined.
20:31:16 -!- GreaseMonkey has joined.
20:33:49 -!- zzo38 has left.
20:39:21 -!- pumpkin has joined.
20:42:20 -!- copumpkin has quit (Ping timeout: 258 seconds).
20:44:22  I'm trying to code patch-bay-like view in cocoa
20:44:35  and it sucks ;|
20:45:42 -!- sebbu has quit (Read error: Connection reset by peer).
20:46:07 -!- sebbu has joined.
20:46:11 -!- sebbu has quit (Changing host).
20:46:11 -!- sebbu has joined.
20:55:53 -!- Sgeo|web_ has quit (Ping timeout: 265 seconds).
20:56:34 -!- Zuu has quit (Ping timeout: 244 seconds).
20:56:55 -!- SgeoN1 has joined.
20:57:50  I'm starting to get concerned about the frequency of non REISUBable freezes
20:58:13 -!- Zuu has joined.
20:58:47  SgeoN1: hardware troubles?
20:58:55  Is there a way to measure wear and tear on a flash drive?
20:59:03  twice, maybe
20:59:26  Is the flash drive is a recent SSD, it probably reports interesting numbers via SMART.
20:59:51  But non-responsive drives should not prevent the B in REISUB from working.
20:59:54  It's a thumb drive
21:00:34  For thumb drive, forget it. Maybe there are special controller-vendor-specific tools that could do it.
21:00:58  But for that you first would need to know the controller type, and then try to get hold of that tool (if any).
21:02:02  Most non-REISUBable freezes I experienced lately were caused by broken laptop mainboards (most likely BGA solder joints broken).
21:03:31 -!- Phantom__Hoover has left ("Leaving").
21:03:36 -!- Phantom__Hoover has joined.
21:07:29 -!- Gregor has set topic: Official support channel for Web o' Flies | EPL evening school assignments! http://tinyurl.com/5stnu5n | It's the end of an era | RIP John McCarthy) | TO SHREDS!) |  http://codu.org/logs/_esoteric/.
21:12:52  friendship headers?
21:14:15  Freaders.
21:16:10  So I learned some topology today, it seems to be the study of blobby shapes?
21:16:32  :D
21:16:51  bloody shapes
21:17:24 -!- Ngevd has joined.
21:17:34  Well, I spent today in a hot stuffy room
21:17:43  Listening to boring people drone on and on and on
21:18:03  good day
21:18:09  That's right, I've been to the House of Commons!
21:18:25  I don't go there
21:18:28  Did you know that they let you do that for the hell of it?
21:18:40  Yuo
21:18:50  monqy: really; im shocked
21:18:51  yuo
21:18:58  Turns out there's a public gallery.
21:19:02  yup
21:19:17  elliott_: about it working ore what
21:19:32  monqy: about no go house comon
21:19:42  I met Guy Opperman
21:19:57  monqy, you're an ore worker?
21:19:58  I don't meet that Guy
21:20:17  "Guy Thomas Opperman[3] (born 18 May 1965) is a British Conservative Party politician,"
21:20:21  Sounds lovely.
21:20:48  What is it with Conservatives anyway. There are so many of them.
21:20:52  Are they Tribbles.
21:21:30  Yes.
21:22:14  I guess we need more klingons
21:23:06  You always need more Klingons.
21:23:19  What problem can't be solved by throwing Klingons at it?
21:23:32  the problem of having too many klingons
21:23:45  That's the best bit
21:23:46  trick answer; there is no such thing
21:23:58  hmm, actually... they might start killing each other and solving that problem too
21:23:58  If you have too many klingons, they start killing eachother
21:24:05  olsner, of course it solves that, they're Klingons for christ's sake.
21:24:36  what if they decide it's more honorable to increase the number of klingons?
21:24:46  hmm
21:24:48  More Klingons.
21:24:49  Then they are no longer Kilingons
21:24:52  test :: IO (TChan TaskStatus -> IO (), IO ())
21:24:56  ok this will work
21:25:00  s/Kil/Kl/
21:25:00  If that doesn't work, hypervelocity Klingons.
21:25:01  killingons :>
21:25:03  I guess I will use a TChan for the TChans????
21:25:07  So many TChans.
21:25:25  tchan
21:35:10  Wow, there's actually sockpuppeting on the IWC forum
21:35:15  Over Russian translations
21:39:32 -!- pikhq_ has joined.
21:39:33 -!- pikhq has quit (Ping timeout: 256 seconds).
21:44:35  OK, here we go: http://bitbucket.org/GregorR/web-o-flies
21:49:58  Supposed to be a broken link?
21:50:03 -!- Patashu has joined.
21:54:27  "The cat righting reflex is a cat's innate ability to orient itself as it falls in order to land on its feet. The righting reflex begins to appear at 3-4 weeks of age, and is perfected at 7 weeks."
21:54:56  I want to be the person who dropped kittens and checked if they righted themselves.
21:57:23  Ngevd: SHHHH YOU'RE RUINING MY JOKE/TROLLERY
21:57:35  zzo38 is adding Gopher menu format support to Haddock.
21:57:51  He...
21:58:08  Gopher...
21:58:15  Haddock...
22:00:03  Fun fact: [[Falling cat problem]] links directly to Yang-Mills theory.
22:04:02 -!- pikhq_ has quit (Ping timeout: 240 seconds).
22:04:21 -!- pikhq has joined.
22:06:00  shachaf: It's great having zzo around in that channel, isn't it?
22:06:56  elliott_: I don't think we've had quite these kinds of proposals from anybody else.
22:07:00  zzo channel is good channel
22:09:08  http://upload.wikimedia.org/wikipedia/commons/7/78/Cat_fall_150x300_6fps.gif
22:09:13  Phantom__Hoover: I am so happy you made me find this image.
22:09:45  I love the overlayed angular momenta.
22:10:21  that image because of how good it is reminds me of http://upload.wikimedia.org/wikipedia/commons/e/e2/Sch%C3%A9ma_synchronicit%C3%A9_in_English.png
22:12:38  There is nothing that is not perfect about that diagram.
22:13:21 -!- zzo38 has joined.
22:13:41  Speak of the devil...
22:14:03  What about the devil?
22:14:21  monqy: i want to know the logic behind that diagram... actually i don't
22:14:35  monqy: i will just choose to believe someone thought of four random things and arranged them on a plus sign
22:15:40  Should Haddock output format have:  Plain TeX, gopher menu format, Plain Old Documentation, MediaWiki, etc
22:16:32 -!- derdon has quit (Remote host closed the connection).
22:16:55  I don't particularly like Haddock markup format so I made up idea of a different format:   http://sprunge.us/jdWh
22:17:16  It's perfect. Tell #haskell about it.
22:17:22  I did already.
22:17:28  better
22:17:32  Keep telling them.
22:17:32  make a replacement for TeX
22:17:37  Don't ever stop.
22:18:00  yeah
22:18:00  Phantom__Hoover: Not right now. Maybe later, when they are different people on that channel, such as the people who invented Haddock.
22:18:07  zzo38: definitely insist on .doc
22:18:20  that's a good descriptive file extenstion that's totally unique
22:19:15  The extension doesn't really matter as long as it is agreed on. Of course anything in this proposal is subject to changing.
22:19:25  he had dock.
22:19:29  but that was four letters
22:19:36  which was tooooooooooo many
22:19:59  It is OK to have more than three letters in the extension if you want to; I do not think Haddock is a DOS program!!
22:20:25  perhaps .hdd
22:20:26  quintopia: So he had to dock the last letter?
22:20:39  for "hickory dickory dock"
22:21:43  Read it and tell me if each individual thing is wrong, please.
22:22:31  i read it. i don't even know what haddock is so i can't answer that question.
22:26:06 -!- Ngevd has quit (Ping timeout: 260 seconds).
22:31:39  Does the people managing the account for HackageDB have UNIX mail? I send a UNIX message to them and I don't know if it work.
22:31:49 -!- elliott_ has quit (Ping timeout: 248 seconds).
22:32:57  Maybe it doesn't work; my name is not on there.
22:44:01  One day I invented a chess variant with the INTERCAL commands.
22:44:16  zzo38: You invent a lot of things.
22:44:57  Probably many people working in esolangs invent a lot of things it seems to be.
22:46:05  zzo38 is like that leading character in Lovecraft who only exists for the protagonist to chart the grizzly demise of.
22:54:32  lol
22:54:50  Phantom__Hoover: which is your favourite piece by Lovecraft?
22:55:17  Haven't read many; I read The Colour Out Of Space and didn't sleep that night.
23:03:02  fungot: So what about those queer angles that can be used for extradimensional travel?
23:03:03  fizzie: for hours he climbed with aching and fnord hands, induced to purchase escape at the price of the fnord and i wondered whether asenath could possibly have covered. yet nothing of what i had
23:19:49 -!- ais523 has quit (Remote host closed the connection).
23:23:35  Why does it says "No instance for (IsString ByteString)" even though it says it does?
23:24:52  Because it doesn't.
23:25:04  Import the right module -- .Char8 -- or, better yet, don't use ByteStrings as Strings (they're not).
23:26:33 -!- sllide has joined.
23:48:00  Some Ukranian guy appears to have been overloading my server sometimes.
23:48:42  Or at least their ISP is Ukranian.
23:49:09  Solution: Bomb Ukraine.
23:50:45 -!- CakeProphet has quit (Ping timeout: 248 seconds).