00:21:01 -!- carado has quit (Ping timeout: 246 seconds). 00:26:47 -!- nooga has quit (Ping timeout: 255 seconds). 00:36:57 -!- nooga has joined. 00:38:18 -!- Vorpal has quit (Ping timeout: 276 seconds). 00:48:21 r5k1/1bqp2pp/1p2p1r1/3P1p2/2P5/1Q1N3n/P4PPP/R1R2B1K b - - 0 23 01:06:45 I thought some spammer got in here until I saw it was zzo38 01:07:08 i don't think that's a valid URL 01:07:15 -!- nooga has quit (Ping timeout: 248 seconds). 01:07:27 Everything that glitters is not an URL. 01:07:36 Spammers aren't known for always actually giving URLs 01:07:45 Despite that being the sensible thing to do 01:08:14 -!- TeruFSX has quit (Ping timeout: 252 seconds). 01:11:14 No try it making the URL. 01:11:28 Tell them it is the URL. 01:11:33 Even if it isn't 01:13:30 Fiora: yo magnus is on the wikipedia frontpage :P 01:13:41 I saw! 01:14:13 How often do you check the Wikipedia frontpage? 01:14:19 once a day 01:14:25 ish, yeah 01:14:56 just after 0:00 UTC-ish, if i'm online then 01:16:36 since that is when most of the panels update 01:20:33 Ngô Đình Diệm sounds like the nicest guy 01:21:30 ha 01:22:26 Maybe I will go ahead and write mamb for Racket 01:36:37 Do you know of QR code implementation in TeX? 01:41:51 hm it should really be Élő rating >:) 01:42:37 oerjan: Should it be? I didn't know that. 01:43:09 the > means i'm not _entirely_ serious. 01:43:52 he was only 10 years old when he moved to the us, so probably didn't use the accents much 01:43:55 I am not _entirely_ serious either. 01:51:12 speaking of wikipedia, today's featured article 01:51:15 "He ultimately received over 386,000 more votes than the total number of registered voters." 01:53:02 as i said, the nicest guy 01:58:58 also has an even more inglorious death than your average coup victim 02:03:58 oerjan: best quote pairing ever 02:04:35 quintopia: erm, what? 02:05:13 * oerjan demands context for that statement 02:06:55 -!- TeruFSX has joined. 02:07:09 quintopia: i have no idea what you are referring to 02:09:32 * oerjan hits quintopia with the saucepan ===\__/ 02:18:12 the canada quotes 02:19:13 ah 03:33:44 -!- Phantom_Hoover has quit (Remote host closed the connection). 03:57:49 -!- DH____ has quit (Read error: Connection reset by peer). 03:58:10 -!- DHeadshot has joined. 03:58:19 -!- oerjan has quit (Quit: Good night). 03:59:17 -!- copumpkin has quit (Ping timeout: 252 seconds). 03:59:50 -!- copumpkin has joined. 04:01:19 -!- DHeadshot has quit (Read error: Connection reset by peer). 04:09:44 ?`quote 04:09:44 contrapumpkin says: like yoda, I speak now 04:09:46 buh 04:09:49 `quote 04:09:50 429) If in some day, I publish some book, that might include some of the programs I have written too, but also some other books, possibly. However I never yet publish any book. 04:11:41 `quote 04:11:42 343) Fiddle. It makes a big difference, you know. 04:11:50 @zzo38_ebooks 04:11:50 Unknown command, try @list 04:17:13 -!- hagb4rd2 has quit (Read error: Connection reset by peer). 04:20:48 What is (\f x -> f x x) commonly referred to as? Hoogle and Hayoo are failing 04:21:10 dup? 04:21:16 oh 04:21:21 you mean the lambda thing 04:21:23 ah 04:23:26 Well, I was searching by type signature 04:28:51 :t join 04:28:52 Monad m => m (m a) -> m a 04:31:22 -!- WeThePeople has quit (Quit: Leaving). 04:42:23 -!- copumpkin has quit (Quit: Computer has gone to sleep.). 04:51:44 -!- DHeadshot has joined. 05:00:16 -!- DHeadshot has quit (Read error: Connection reset by peer). 05:00:21 -!- DH____ has joined. 05:05:04 -!- DH____ has quit (Read error: Connection reset by peer). 05:05:09 -!- DHeadshot has joined. 05:06:55 *sigh* 05:14:22 apparently the Galaksija microcomputer had three error messages: "WHAT?", "HOW?", and "SORRY" 05:23:06 -!- WeThePeople has joined. 05:27:05 -!- DHeadshot has quit (Read error: Connection reset by peer). 05:30:59 -!- TeruFSX has quit (Ping timeout: 255 seconds). 05:32:25 someone paste me the character for bottom 05:33:00 -!- DHeadshot has joined. 05:33:15 ⊥ 05:33:55 thx 05:35:05 Deewiant: can i get a \exists too? 05:35:46 https://en.wikipedia.org/wiki/Table_of_mathematical_symbols 05:35:59 I can't figure out a compose-key combo for that one 05:36:19 i take it back 05:36:40 what i need is a backwards lowercase e 05:37:17 ɘ 05:37:29 thx 05:37:39 Or ə 06:03:34 FreeFull: copumpkin is correct 06:04:20 quintopia: What? 06:04:31 join has a completely different type signature 06:04:35 it was called join 06:04:57 > (join (*)) 3 06:04:59 9 06:05:02 though apparently not the same join as lambda knows 06:05:02 Huh 06:05:32 Is the :t and > using different joins 06:05:49 Neither seems to be in the standard Prelude 06:12:09 -!- Sgeo_ has joined. 06:12:38 -!- Sgeo has quit (Ping timeout: 245 seconds). 06:17:32 How did I ever live without internal defines? Besides when I was in languages where there are local variables, I mean 06:17:42 Erm, bad phrasing 06:17:46 haha 06:17:56 But Clojure is all "use let"y, meaning more nesting 06:17:58 For example 06:18:18 Whereas C# or Java or Python etc. etc. it ... seems simpler in that regard 06:18:51 And here is Scheme (and Racket), with allowing define forms inside function bodies that lexically scope the entire function body 06:19:04 Just as convenient as in those... non-lispy languages 06:20:03 why does scheme use internal defines instead of just letrec? 06:20:29 I don't know about Scheme in general, but Racket converts internal defines to letrec I think 06:21:16 yes, but why 06:21:42 It's nice syntax sugar? 06:22:01 scheme's define is weird 06:22:09 it's like an assignment but also not 06:22:22 Also it means you can write a function for internal use using define's () shortcut for defining a procedure 06:22:34 yes, that's nice 06:22:47 let doesn't support that sugar, right? no reason it couldn't, in principle 06:23:00 as i understand define only actually works at (for?) the toplevel, and anywhere else it's just letrec 06:23:00 (let (((f x) (* x 2))) (f 3)) 06:31:44 * FreeFull prefers haskell for his functional programming nowadays 06:46:37 Even if let had that, I'd still prefer the lack of nesting given by internal defines 06:47:22 FreeFull, I want macros. And also changing code at run-time, but that last part means I should probably be wary of Racket 06:47:27 *easy macros 06:51:48 just because Scheme and Haskell are both "functional languages" is no reason to pick only one 06:51:53 they are very different languages 06:52:05 i might as well say "i prefer python over scheme for my dynamically typed programming" 06:52:19 "functional language" is never a very well defined category anyway 06:52:23 rant rant rant 06:52:36 kmc have you heard about this thing "structured programming" that's all the rage 06:52:52 goto 4 lyfe 06:53:28 people argued about goto being structured even. guess it's just something programmers do a lot 06:53:31 kmc: syntax error, unexpected "lyfe" 06:53:33 I'm weird and want to have a preference for a single language. And instead, I am a serial monogamist language person. 06:53:57 we have noticed 06:58:08 -!- hagb4rd has joined. 06:59:07 "How to run computation without ever dispatching an instruction: life on the edge of the double-fault" 07:00:54 I never have any idea if kmc is quoting something or making something funny up 07:01:03 this is from a 29C3 talk 07:01:16 this one http://events.ccc.de/congress/2012/Fahrplan/events/5265.en.html 07:01:32 you can download the video; i am watching it now 07:02:15 Maybe later. I hope I remember, it sounds interesting 07:02:19 I don't know much about hardware 07:03:01 "hardware" is such an arbitrary line these days 07:03:03 but yes 07:03:13 there is a particular abstraction layer where it makes sense to talk about these things 07:03:27 if you don't know much about that layer, it will be hard to follow 07:05:00 FreeFull: join is in Control.Monad, and for the function instance you need Control.Monad.Instances (which is indirectly imported by lots of things) 07:10:25 kmc, I don't see a download link there :( 07:10:36 http://events.ccc.de/congress/2012/wiki/Documentation 07:10:43 i didn't link directly because there are various formats 07:11:12 Ah 07:11:12 kmc: wait, without ever dispatching an instruction? 07:11:37 yeah :) 07:12:45 -!- WeThePeople has quit (Quit: Leaving). 07:16:06 hax 07:16:13 i won't spoil it but you should watch the talk :) 07:16:20 link? 07:16:26 oic 07:16:53 -!- WeThePeople has joined. 07:17:06 where's the download link? 07:17:51 Sgeo_ just asked that 07:18:00 there are various ways to get the video, listed at http://events.ccc.de/congress/2012/wiki/Documentation 07:18:09 oh <_> I can't read 07:18:25 A lot of the other talks sound interesting too 07:18:33 i torrented them; i don't know which mirror is the fastest 07:19:11 oh god all this stuff looks so interesting @_@ 07:21:08 wow the torrent is fast 07:21:36 The stuff that's in a language I don't understand does not seem interesting. Actually, it is, but there's about a 0% chance of me watching it. 07:22:08 that's true. I don't know enough german for those :< 07:22:09 :< 07:23:57 ich bedaure fast alle meine Deutsche Vokalbeln fergessen 07:25:39 Bike: "turing complete trapping" <-- you should watch this XD 07:26:44 apparently before the NX bit existed on x86, PaX emulated it by exploiting the fact that there are separate TLBs for instructions and data 07:26:47 that's really cool 07:28:04 Wow 07:28:36 kmc: Yeah, 07:28:39 [ 0.000000] Notice: NX (Execute Disable) protection missing in CPU! 07:28:41 [ 0.000000] NX (Execute Disable) protection: approximated by x86 segment limits 07:28:52 that is a different emulation 07:28:58 Ah, ok 07:29:25 the talk discusses that as well 07:29:38 it's bad because you get only 1.5 GB address space for code and data each 07:29:50 also because segmentation is slow on new processors because people don't use it 07:30:08 * ion scrolls up and checks out the talk 07:30:23 ion: you have some old machine handy i see :) 07:30:38 kmc: Yeah, my puny home server that’s slowly dying. 07:31:22 ... traps write data to the "stack" ... you can set the "stack" wherever you want, including inside the page tables ... 07:31:24 ion: you're running a PaX kernel? 07:31:26 that is. magnificent 07:32:14 kmc: Nope, i skimmed over the channel talk (including your message) a bit too quickly and missed “PaX”. 07:32:55 ah 07:33:04 it seems mainline linux got this emulation, then 07:33:16 but i bet they don't do the crazy split TLB emulation 07:33:17 A direct link to torrents http://skowron.biz/29c3.rss and a direct link to the torrent http://mirror.netcologne.de/CCC/29C3/mp4-h264-HQ/29c3-5265-en-page_fault_liberation_army_h264.mp4.torrent 07:33:31 oh nice, i forget that torrents can be distributed via RSS :) 07:33:35 kmc: I think this emulation is based on PAE. 07:33:39 "trap oriented programming" 07:34:10 so is this a "watch for horror" thing or a "watch for interest" thing or... why am i even askin 07:34:13 ion: how's that? 07:34:15 interest!! 07:34:16 Crap oriented programming 07:34:17 it's super cool 07:34:18 watch because it's fucking cool 07:34:29 it's mostly about *useful* crazy hacks 07:34:42 they just throw in the "MMU as turing tarpit" part because why not 07:35:16 * Bike digs around for torrent program 07:35:27 there are direct HTTP download links as well 07:35:33 wow, OllyBone's trick 07:35:34 "Once-the.rockets/are-up..who/cares-where.they/come-down.That's N.O-T/MY-D/E.PA/R.T-ME-N/T." is it supposed to look like this..>? 07:35:42 yes 07:35:46 hackers 07:35:47 german hackers 07:35:52 ¬_¬ 07:36:13 kmc: I haven’t studied the details, but apparently PAE provides an official NX flag or something. http://en.wikipedia.org/wiki/Physical_Address_Extension 07:36:38 do i need video or can i just get the mp3s to listen to 07:36:44 they have slides 07:36:56 there's mp3s too 07:36:57 powerpoint, my nemesis. 07:36:58 the torrent is crazy fast, don't worry about it 07:37:09 i was just thinking i could listen to them at work. 07:37:29 at least there's mp3s on this http mirror i'm looking at 07:37:48 i meant, am i going to miss anything by not getting the video. 07:38:07 oh 07:38:33 ooh, it covers how they reverse engineered skype and got past its anti-debugger stuff 07:38:37 using this kind of stuff 07:39:11 "en-howto_hack_the_law_mp3.mp3" 07:39:28 ion: if you had NX bit via PAE then it wouldn't say "NX protection missing in CPU" 07:39:30 he hacked the law and the, the law won, he hacked the law and the, the law won 07:39:37 ++ 07:40:02 well, i suppose i can't not start with the one about tamagotchis 07:40:06 PAE is the one and only way to have a true NX bit on 32-bit x86 07:40:12 start with the paging thing XD 07:40:16 MMUs are fun 07:40:26 and arguably on 64-bit, since the 64-bit page tables are an extension of the PAE ones 07:41:22 wow, how do you use the TLB to emulate NX? 07:41:32 kmc: Hmm, good point. 07:41:33 (but that's a core part of AMD64 architecture, not an extension) 07:41:34 there's separate instruction and data TLBs 07:41:43 Hmm. Racket structs are more interesting then I thought. It _almost_ makes me want to forgive them for their OO system 07:41:45 https://wiki.ubuntu.com/Security/Features#nx 07:42:53 oooh they're talking about memory segments 07:42:55 kmc: I (apparently mis-) interpreted from the Wikipedia page that anything with PAE support would have NX support, but it seems mine supports PAE but not NX. 07:43:18 Sgeo_: what's wrong with the oo 07:43:55 olsner: you mark all data pages as not present. then when there's a fault you mark it present, read from that address to get it in the TLB, and un-mark it again 07:44:24 "there are things that use the stack for instructinos [...] gcc can create those trampolines, because gcc is a piece of shit, sorry [laughs]" 07:44:31 Bike, single-dispatch single-inheritance class-based. Seems too ... like it's trying to act a little like Java, although it's still more flexible 07:44:43 and this gives you an opportunity to check if the access was actually an attempt to execute data memory 07:44:52 by checking if the instruction pointer == faulting address 07:44:58 Also, you typically use a piece of syntax to call a method 07:45:01 but wow, this is brilliant. using 286-style segmentation to implement NX on a modern machine 07:45:03 Sgeo_: class-based meaning not message passing based? 07:45:20 well modern machine has NX 07:45:27 that's more like "pre 2005 machine" 07:45:35 Bike, I .. wasn't aware those were connected. Smalltalk is class-based and message passing 07:45:35 something like that yes >_< 07:45:39 scary to say that 2005 is eight years ago :x 07:45:43 -!- sebbu2 has joined. 07:45:43 -!- sebbu2 has quit (Changing host). 07:45:43 -!- sebbu2 has joined. 07:45:48 right, so every tlb miss (for an NX page?) ends up being a page fault? sounds expensive 07:45:50 it is ;-; I feel old 07:45:54 Sgeo_: well i don't know what you mean by "class-based". not prototype-based? 07:46:03 Bike, yes. Not prototype-based 07:46:18 mm 07:46:26 has anyone written a more interesting one? 07:46:36 For Racket, or in general? 07:46:45 racket 07:47:07 olsner: yes i think so 07:47:09 I think so, but it's part of some larger thing 07:47:13 fwiw, the page fault handler's error code indicates whether the fault was an instruction fetch so you don't have to compare the fault address 07:47:19 that's useful 07:47:34 It doesn't seem well documented 07:48:14 The page on the Racket site says to go to the author's home page. The author's home page says that the page is outdated and to go to the PLT Scheme (Racket's old name) site 07:48:23 scheme's had TELOS and whatever in the past, some of those have probably been ported to racket 07:48:36 comparing would be "hard" to get right, since you might get a fault for a byte in the middle of the instruction 07:48:47 What good is it if it's not well documented 07:48:53 -!- sebbu has quit (Ping timeout: 245 seconds). 07:48:55 yeah that's true 07:49:21 i would be interested to know what the performance penalty is 07:49:25 let's see if they say 07:49:44 https://pax.grsecurity.net/docs/pageexec.old.txt appears to describe the trick 07:49:48 * Sgeo_ can't wait to watch this talk 07:50:51 Also, I don't know if Swindle's basic syntax extensions are needed to use the OO stuff well 07:50:56 I'd rather not 07:51:07 soft-filled TLBs are so much nicer, but apparently they always perform terribly 07:51:08 (have to use modified define syntax, I mean) 07:51:10 so uh, which of these talks are you talking about 07:51:14 these titles are not terribly helpful 07:51:26 * olsner just thought "they should make this into a flag in the page table" 07:51:28 Bike, presumably page fault liberation army 07:51:39 oh, that's not on this page... 07:52:01 How much of this will be understandable to someone not very familiar with memory ... mapping ... wahtever this is 07:52:10 PPC has a strange compromise solution where there is a real TLB and then a hash table in main memory extending the TLB, and then that's soft-filled 07:52:28 oh, it's in the mp4s but not the mp3s. grand. 07:52:30 ohhhh, thta's the reason they didn't like using segments for this, because of the overhead 07:52:36 I knew about the overhead, I was wondering when that would come up 07:52:41 Sgeo_: probably not very 07:52:42 since modern intel chips do not make segments fast at all <_<; 07:52:45 :( 07:52:48 I think it's like 1 extra cycle for every memory load 07:52:49 they breeze through an intro 07:53:01 Ok, ok, I'll try then 07:53:19 Sgeo_: um... it'd probably be good if you knew like how pages work 07:53:20 maybe read this http://www.cs.cmu.edu/~410/doc/segments/segments.html 07:53:24 like at the level of a college cs class 07:53:39 just watch the talk and ask questions here if you're confused 07:53:48 :D 07:53:53 that works! 07:54:07 well not always 07:54:30 it's possible to fail to understand something in such a way that you can't formulate a meaningful question about it 07:54:38 that's always really frustrating on both ends 07:54:50 * Sgeo_ reads 07:54:53 it might be hard to understand paging without knowing what it's typically used for 07:54:57 in 8 minutes I'll be able to watch 07:55:45 the high level overview is that x86 translates virtual addresses (what normal programs use) first to linear addresses and then to physical addresses 07:55:47 Also, I have taken an OS class, although we didn't learn x86 specific stuff really 07:56:07 this assumes like the high level paging knowledge, not the x86-specific knowledge, I think 07:56:10 And our homework assignments were on a CPU simulator of sorts 07:56:15 like, the presentation is basically -about- all the x86 stuff they don't teach you 07:56:22 virtual->linear is accomplished by segmentation, which that link discusses... basically you add a constant "where code starts" or "where data starts" value to the address, and check it against a maximum size 07:57:08 Ok 07:57:09 linear->physical is accomplished by paging, which allows every 4 kB of linear memory to be placed somewhere completely different in physical memory 07:57:27 * Sgeo_ vaguely remembers that sort of thing 07:57:39 well, hmm. 07:57:46 so paging is far more flexible, and most processors have only paging, so most OSes use only paging 07:57:55 they configure x86 segmentation in a vestigial mode which that document also describes 07:58:10 but segmentation is still useful for particular things, some of which this talk discusses 07:58:51 paging is used to implement all kinds of goodies, like shared memory, memory-mapped files, swap, copy-on-write fork(), sharing of read-only code between different processes, etc 07:59:23 .... oh *wow*. that is magnificently evil my gosh 07:59:48 they set the page to be okay, load it into the dtlb by accessing it, and then right after, set it to be not-okay 07:59:56 so the dtlb is lied to about the page's actual state 08:00:02 and then when the itlb fetches it later, it faults 08:00:43 thus making the itlb and dtlb disagree even though they weren't supposed to 08:00:58 Fiora, will that be understandable to me when I see it in the presentation? 08:00:59 (by "most processors have only paging" I meant most architectures... x86 always has segmentation as well, even in modern chips) 08:01:09 Sgeo_: you need to know what the TLB is as well, which they kind of gloss over 08:01:16 but it's just a cache for the page tables 08:01:34 yeah, the TLB is just a cache for page table info so the cpu doesn't ave to constantly fetch it 08:01:34 it would be really inefficient if every memory access required several other memory accesses to read these page tables out of memory 08:01:45 Ok 08:01:48 the itlb is for instructions, dtlb for data, there's two separtae ones 08:01:58 the key is that (on x86 anyway) you can change the page table out from under the CPU, and it doesn't automatically update this cache 08:02:00 I feel so ignorant :( 08:02:09 your' 08:02:14 you're not :< 08:02:24 when you change page tables you're supposed to tell the CPU so it can flush the TLB 08:02:32 but this is a cool trick you can play if you don't 08:02:53 basically you can set it up so that when loading data pages, the CPU thinks the page is fine, but when loading the /same page/ as an instruction page, it page faults. 08:03:04 which stops you from executing a data page. 08:03:05 (that TLB flush is also why switching address spaces is expensive, which is why most OSes put the kernel and userspace in the same address space, which in turn leads to all manner of security problems) 08:03:47 fwiw I find this talk a lot easier to watch at slightly higher than normal speed 08:03:53 most talks, really 08:04:05 But it is useful to execute data pages! 08:04:10 if a speaker goes "uh"ing and handwaving for long enough, i lose attention span and my mind wanders and then 10 seconds later i have to rewind 08:04:21 zzo38: yes, it's particularly useful to attackers 08:04:53 kmc: Not what I meant though; I meant for programming. 08:05:32 zzo38: you might like the talk about the Galaksija computer 08:05:33 There are better ways to secure a system. 08:05:42 zzo38: you can execute data pages even on an NX system, I think 08:05:48 you just have to explicitly ask the OS for it 08:05:57 O, OK, then. 08:06:10 sure, the OS can enforce a policy against it, or not 08:06:13 Linux typically does not 08:06:29 ROP payloads often end with calling mprotect() to set some page RWX and then you win. 08:06:54 i think PaX has a mode to forbid that, though 08:07:09 I guess then you'd have to whitelist programs that use JITs? 08:07:25 yeah, it can store per-executable exceptions in an ELF header 08:07:31 Watching talk now 08:07:38 or your JIT can be carefully coded so that no page is writable and executable at the same time 08:07:57 wait, but can't an exploit still work with that? 08:08:00 mprotect can drop W and add X in the same call 08:08:09 Yeah, I thought that was the way people did it 08:08:42 or am I missing something >_< 08:08:54 like is there a reason that an exploit can't do that too? 08:09:15 the exploit is not running arbitrary code yet 08:09:51 ooooh, I see 08:10:16 yeah, I always thought jits were supposed to do that (never have W and X on at the same time) 08:10:18 say you have found a bug such that you can write arbitrary content to certain parts of memory, and then redirect the instruction pointer to wherever you like 08:10:37 a classic stack smashing exploit is an example of this 08:11:05 W^X policy prevents the straightforward attack where you write your shellcode and then jump to it 08:11:53 makes sense 08:11:59 there are of course many other ways to exploit such a bug, and W^X does not try to stop them all 08:12:45 ah so here's the code I was thinking of... I guess it does the W^X thing 08:12:45 e.g. JIT spraying, where the shellcode is composed of bytes that the JIT intentionally wrote into a code page 08:13:05 c->lumMmxextFilterCode = mmap(NULL, c->lumMmxextFilterCodeSize, PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_ANONYMOUS, -1, 0); 08:13:08 init_hscaler_mmxext(dstW, c->lumXInc, c->lumMmxextFilterCode, c->hLumFilter, c->hLumFilterPos, 8); 08:13:11 mprotect(c->lumMmxextFilterCode, c->lumMmxextFilterCodeSize, PROT_EXEC | PROT_READ); 08:13:17 but yeah, there would be some additional benefit to a policy of "no W page can ever become X", and it would break JITs for sure 08:13:17 map R|W, init the code, map R|X 08:13:24 and i don't know if PaX implements that one 08:13:54 which JIT is that? 08:14:11 that's a really simple example since I didn't want to dig into a really fancy actual JIT 08:14:27 I keep pausing to look stuff up 08:14:28 swscale has the ability to runtime-generate an mmx image rescaling algorithm 08:14:48 which to me is just O_____O 08:14:52 buhhhh 08:15:05 This is really making me wish I took CS 08:15:13 Would CS talk about this stuff? 08:15:13 (generate based on the input and output resolutions and number of taps etc I think?) 08:15:19 Or still just turing machines and the like? 08:15:42 what is "CS" in this context 08:15:45 are you talking about some specific course or just a CS program in general? 08:15:56 CS program in general 08:15:57 um.... my program had some low level classes that covered things like paging and memory (basics) and some high level things like algorithms and natural deduction and complexity 08:16:06 most university CS programs offer a variety of classes from theoretical to practical 08:16:10 i would think any cs program worth its salt goes over these things in addition to algorithmics (jazzarithmics) 08:16:18 there were some electives for really icky low level things like filesystems and networks and OSs 08:16:19 any decent one will have some kind of intro systems course which covers paging and what-not 08:16:22 whether you remember it or not is another matter 08:16:24 and by icky I mean wonderful 08:16:26 it may or may not be required 08:16:34 I hate my college 08:16:49 so, you weren't a CS major? 08:16:58 "Computer Programming/Information Systems" 08:17:02 in our intro systems class we implemented some OS-like things in Linux userspace, trapping e.g. SIGALRM for a scheduler interrupt and SIGSEGV for page fault handler 08:17:04 ouch 08:17:05 it was pretty weird 08:17:07 but fun 08:17:19 then the advanced systems class involved making changes to an actual Linux kernel 08:17:29 a ton of code reading, very little code writing 08:17:47 kind of crazy to do an assignment where you spend 20 hours and then turn in 20 lines of code 08:17:57 that sounds actually useful 08:17:59 kmc, grad or undergrad? 08:18:04 I feel betrayed 08:18:09 as far as i can tell from fiora's mailing list stalking that's how most actual linux patches work 08:18:11 undergrad elective, with some grad students in the class as well 08:18:19 And there's no way I could get into a grad CS program, is there 08:18:20 :( 08:18:22 http://pdos.csail.mit.edu/6.828/2012/ is a very cool upper level OS class at MIT 08:18:30 the labs are online 08:18:47 you need to be pretty comfortable with C to do this class 08:18:49 Sgeo_: just tell them you hang out with lens developers. if they don't know what that means recite some type signatures 08:19:06 but maybe you can learn the OS-specific stuff as you go 08:19:56 I want to make the computer which includes security by simplifying instead of by overcomplicating things. 08:22:02 neat that they use git to hand in the lab assignments 08:22:47 yes, it is nice 08:23:08 you can merge the TA handout for the next lab with your solution to the previous one 08:23:19 it also means more students are exposed to Git 08:24:36 it's too easy to graduate knowing all kinds of fancy CS stuff but without knowing the basic tools a software engineer needs 08:24:45 I think we used svn in a few classes 08:24:46 in some sense it's not their job to teach those things to you 08:24:49 no kidding :/ 08:25:05 but even nudging people in the right direction is a win 08:25:11 "get them using source control" is like the main thing i've heard suggested for CS programs, now that i think about it 08:25:13 it's terrifying how many programmers don't use version control at all 08:25:19 it's kind of hard to disagree with... 08:26:02 to me CVS and SVN are almost totally different in purpose from Git, Darcs, etc 08:26:12 oh yeah? 08:26:23 the former are useful for collaborating with others, but not much else 08:26:32 the latter are pervasive tools that help with every part of workflow 08:27:01 I tried to get us to use version control on Senior Project 08:27:03 collaboration but also debugging, testing, etc 08:27:12 mm 08:27:20 But the server move did not go smoothly for the .hg stuff, so I sort of just gave up 08:27:29 i'm bad at git but git bisect seems pretty incredibly useful 08:27:37 git bisect? 08:27:43 with Git you can easily create an experimental branch fro some crazy idea, or make 5 commits as you figure something out and then squash them together 08:27:51 Oh woah 08:27:57 "git-bisect - Find by binary search the change that introduced a bug" 08:27:57 doing these things with svn sounds like a huge pain 08:28:00 (at git bisect) 08:28:10 oh no did I start a git vs svn flamewar 08:28:11 maybe it's cause i never learned svn very well 08:28:24 no i don't think anyone disagrees that git is better ;P 08:28:29 Fiora: just kmc ranting, which is fine with me for one 08:28:41 i'm just explaining why I think of Git as a different kind of tool from SVN 08:28:55 Bike: that works XD 08:29:01 troll mode: using SVN is no better than keeping your code in Dropbox 08:29:03 There's an svn-bisect as well; the checkouts tend to take longer than the bug-checking 08:29:06 sure, it's better than nothing 08:29:08 i don't know anything about svn except that only old projects seem to use it and it's ugly as hell, so 08:34:50 -!- epicmonkey has joined. 08:36:11 -!- Bike has quit (Quit: leaving). 08:36:23 How well do I need to know traps 08:36:36 Do I need to know every trap that could be .... called or triggered or whatever 08:36:39 this thing explains allabout traps, so um, it should be okay 08:36:40 no 08:36:56 the main one is page faults 08:37:49 if you try to access a virtual address that isn't mapped to any physical address, or is mapped with permissions that conflict with the type of access you want, there's a trap / fault / exception / whatever, and the OS gets to run 08:38:06 it might terminate your process, or it might do something like load a page in from swap, and your process is none the wiser 08:38:17 wow. the fault chaining using the task switch thing @___@ 08:41:50 oooh. they implement a turing tarpit with decrement-branch-if-negative 08:41:56 yes 08:41:59 see, this is totally on topic :) 08:42:18 It was already on topic with linux 08:42:58 it amazes me that any provider of x86 implementations (including virtual) manages to get all of the byzantine system-level CPU behavior correct, or that any two implementations agree 08:43:24 http://blog.xen.org/index.php/2012/06/13/the-intel-sysret-privilege-escalation/ is a notable case where Intel and AMD did not agree 08:43:42 For every byzantine instruction, there is a system somewhere that uses it 08:44:55 -!- asiekierka has quit (Excess Flood). 08:45:19 -!- asiekierka has joined. 08:46:00 "I wanted to implement a game of life that operated on your VGA framebuffer without using any instructions" 08:46:14 Has there been only one bug in the intel hypervisor? 08:46:19 I thought there were more 08:47:23 "cause KVM to kernel panic the host" XD 08:48:01 @google conway life stencil buffer 08:48:02 http://www.blitzbasic.com/Community/posts.php?topic=53803 08:48:02 Title: Stencil buffers are for life (not just xmas!) 08:48:37 https://github.com/munificent/vigil - Vigil, a very safe programming language 08:49:03 Jafet: that's cool 08:49:24 "Vigil is very similar to Python" 08:49:33 http://www710.univ-lyon1.fr/~jciehl/Public/OpenGL_PG/ch15.html#id40152 08:50:20 huh, 64-bit kills most of this. makes sense though 08:51:08 that was an incredibly cool talk, thanks kmc 08:51:32 :) 08:52:28 I'm still only 12 minutes in 09:04:53 I guess if I'm going to be a Racketeer, I should read some of Oleg's thoughts on Scheme 09:05:39 "We shall see that our code looks pretty much like the above, only with more parentheses." 09:05:53 Even Oleg is lolparentheses? 09:16:35 -!- Sanky has quit (Read error: Operation timed out). 09:19:07 -!- WeThePeople has quit (Quit: Leaving). 09:38:45 -!- zzo38 has quit (Remote host closed the connection). 09:50:26 -!- zorteg has joined. 09:56:46 -!- nooga has joined. 09:58:47 -!- epicmonkey has quit (Ping timeout: 272 seconds). 10:41:11 -!- Phantom_Hoover has joined. 10:47:26 -!- zorteg has quit (Quit: Leaving.). 10:59:11 -!- Gracenotes has quit (Ping timeout: 245 seconds). 11:00:15 -!- Gracenotes has joined. 11:01:53 -!- Taneb has joined. 11:06:09 -!- Gracenotes has quit (Ping timeout: 244 seconds). 11:07:25 -!- Gracenotes has joined. 11:24:10 -!- mig22_ has joined. 11:25:07 -!- epicmonkey has joined. 11:25:35 -!- mig22 has quit (Ping timeout: 255 seconds). 11:25:36 -!- mig22_ has changed nick to mig22. 11:27:00 -!- ais523 has joined. 11:51:54 uh 11:52:17 i'm not banned 11:54:00 -!- Gracenotes has quit (Ping timeout: 265 seconds). 11:55:11 -!- Gracenotes has joined. 11:59:00 outrage 12:04:55 -!- Gracenotes has quit (Ping timeout: 240 seconds). 12:04:55 Maybe I should play with a mainframe emulator at some point 12:05:48 -!- Gracenotes has joined. 12:07:20 -!- Taneb has quit (Quit: Page closed). 12:09:26 -!- Tod-Autojoined2 has changed nick to TodPunk. 12:18:16 Sgeo_: this one is quite entertaining: http://www.bernhard-baehr.de/pdp8e/resources/pdp8e_simulator_cocoa_preview_screenshot.jpg 12:19:14 woah 12:21:54 programming that is horrible 12:22:00 octal everywhere 12:30:32 -!- monqy has quit (Quit: hello). 12:42:16 -!- Taneb has joined. 12:57:31 -!- Nisstyre-laptop has quit (Read error: Operation timed out). 13:19:11 I think Guile's documentation is a better way to learn syntax-rules and syntax-case 14:08:02 -!- ais523_ has joined. 14:08:05 -!- ais523 has quit (Disconnected by services). 14:08:08 -!- ais523_ has changed nick to ais523. 14:17:28 -!- Phantom_Hoover has quit (Remote host closed the connection). 14:20:14 -!- boily has joined. 14:37:46 kmc, oh hey, Swindle does that thing with let 14:38:12 => (let ([((f x) y) (+ x y)]) ((f 1) 2)) 14:38:13 3 14:39:53 -!- Phantom_Hoover has joined. 14:50:20 -!- epicmonkey has quit (Remote host closed the connection). 14:50:43 -!- epicmonkey has joined. 14:50:45 -!- epicmonkey has quit (Remote host closed the connection). 14:51:03 -!- epicmonkey has joined. 14:54:27 I'm trying to think about implementing a small language for 6502 processor with 64kB RAM 14:54:42 not Forth, though 14:54:52 I suggest C++. 14:54:54 nooga: what kind of language? 14:55:47 something small and relatively expressive 14:57:06 something lispy could be cool 14:59:55 I've got C cross-compiler 15:00:15 but I wanted something self hosted 15:03:34 any ideas? :f 15:06:10 Something like Scheme? 15:06:24 how about c++ 15:13:03 try ada :-P 15:13:15 -!- Sanky has joined. 15:21:05 yup 15:21:12 C++ and ada are perfect 15:21:45 i think i'll make something between C++ and Ada and throw some bits of perl into this 15:21:58 with java runtime 15:23:21 -!- mekeor has joined. 15:34:20 -!- copumpkin has joined. 15:39:52 -!- ais523 has quit (Read error: Connection reset by peer). 15:40:13 -!- ais523 has joined. 15:43:08 The 21st century so far has been a weird thing to grow up in 15:43:47 Aren't we into the 22nd century by now? 15:44:12 Not for a while 15:44:50 Hmm, the 21st century started after less than a decade. 15:44:58 And we've had more than a decade since then. 15:51:52 Nah, it took a century for the 21st century to start, after the 19th 15:52:17 Uh, the world hasn't been *around* for a century. 15:52:39 That's just what they want you to think, shachaf 15:52:46 The world has been around for 6000 years! 15:54:41 More like 6000 DAYS. 16:14:04 -!- lightquake has quit (Read error: Operation timed out). 16:14:14 -!- jiella has joined. 16:14:48 -!- mekeor has quit (Remote host closed the connection). 16:16:33 -!- WeThePeople has joined. 16:17:58 -!- lightquake has joined. 16:18:37 i believe we are all part of the subconsciousness of a cookie being baked in an oven running on netbsd programmed with something between C++ and Ada including some bits of Perl and COBOL - an elegant, flexible and well-defined system where asking for the time is undefined behavior. 16:19:16 I'm allergic to COBOL chips. can I have some without? 16:25:54 maybe bioly exists in the subconscious memory subsystem where COBOL is not allowed to read or write 16:31:20 meaning my self exists in a recursive collective subconscience? 16:31:47 * boily pokes himself to test his tangibility 16:31:51 boily: oh, that much is /obvious/ 16:32:56 ais523: indeed, you are imagining me. 16:33:10 -!- WeThePeople has quit (Quit: Leaving). 16:34:50 -!- ais523 has left ("someone is going to mention Feather, I know it"). 16:35:01 so guys 16:35:06 eodermdrome is pretty great 16:36:34 Phantom_Hoover, where are you going with this 16:42:09 -!- WeThePeople has joined. 16:49:30 -!- atriq has joined. 16:49:54 -!- Taneb has quit (Ping timeout: 240 seconds). 16:52:18 -!- atriq has changed nick to Taneb. 17:00:09 -!- Taneb has quit (Ping timeout: 260 seconds). 17:05:04 -!- Taneb has joined. 17:05:44 -!- Taneb has quit (Client Quit). 17:27:48 -!- jiella has quit (Ping timeout: 272 seconds). 17:43:20 -!- AnotherTest has joined. 17:43:23 -!- AnotherTest has left. 17:43:26 -!- AnotherTest has joined. 17:43:37 -!- Bike has joined. 17:50:11 -!- zzo38 has joined. 17:51:59 -!- copumpkin has quit (Ping timeout: 252 seconds). 17:52:32 -!- copumpkin has joined. 17:58:25 -!- WeThePeople has quit (Quit: Leaving). 18:02:08 fizzie: Do you know anything about Borland Turbo C? 18:02:11 Specifically do you have a copy. 18:02:14 -!- mig22 has quit (Ping timeout: 240 seconds). 18:03:30 elliott: zomg 18:03:33 I used that once! 18:03:45 #include 18:04:24 I should have a copy of two point something (2.01) somewhere; I think it was a free download for a while? (I also have a copy of Borland C++ 4.52 that came with a magazine, and maybe 5.0 too.) 18:04:27 * elliott has written a "port" of conio.h to curses. 18:04:40 fizzie: Do you feel like helping me prove someone wrong? 18:04:57 elliott: http://www.retroarchive.org/dos/lang/index.html 18:05:13 Deewiant: Um, that is like 10x less authentic than asking fizzie to do it. 18:05:27 s/authentic/work/ 18:05:40 same thing 18:05:55 My copy, if I could locate it, would very likely be that exactly same zip file. 18:06:05 But what colour would the bits be? 18:06:07 fizzie-coloured. 18:07:35 fizzie: Also you probably have a more readily accessible DOS than I do! 18:08:15 What do you need proven wrong, though? 18:08:27 If you use dosbox, make sure you let kmc prepare your archive. 18:08:35 @arrrr chive 18:08:35 Swab the deck! 18:08:51 how similar are borland and watcom compilers 18:09:15 fizzie: How random(-n) behaves 18:09:22 Watcom? don't they make tatblets? 18:09:28 cf. https://github.com/rwbarton/crawl-1.1/commit/2c69471009a26d48fe02f22adf3c650d9afbb4ed 18:09:38 Watcom C uses DOS4GW. 18:09:48 Is rwbarton/crawl similar to monqys-crawl? 18:09:48 I think Borland had a different DOS extender. 18:10:58 The documentation -- http://www.ousob.com/ng/borcpp/ng4eef8.php -- isn't really specific. 18:12:26 Deewiant: I bet you know!! 18:12:50 i love random number generators 18:12:52 they are so easy 18:13:56 #define random(num) (rand() % (num)) 18:14:03 I was right. 18:14:07 int _Cdecl rand (void); 18:14:28 Um, maybe it has different semantics for %? 18:14:34 (rand() % (num)) doesn't seem a very good way to me. 18:15:00 #define RAND_MAX 0x7FFF 18:15:06 doesn't it give you a bad distribution if rand_max doesn't divide num 18:15:12 Since it might make some numbers more likely even if rand() is uniform 18:16:05 Bike: Is that how Ubuntu got so messed up? 18:16:14 (I have written a function in TeXnicard to work around this problem, although I don't know if there is a better way?) 18:16:28 -!- WeThePeople has joined. 18:17:27 Deewiant: (Which version is that from, by the way?) 18:17:40 elliott: The zip I linked 18:17:54 Well, there's two Borland Turbo C/C++s there. 18:17:57 (This code is very "C/C++".) 18:18:00 The C. 18:18:03 For example if it is 2 bits then you modulo by 3, then it will be twice as likely 0 18:18:20 Deewiant: I'll check both, thanks. 18:18:21 elliott: It seems to run in dosbox, give me some test code for % if you want. 18:19:01 It seems to be returning positive numbers. :/ 18:19:03 printf("%d %d %d", random(-2), random(-2), random(-2)), I guess 18:19:19 vs. um, random(RAND_MAX) % (-2) I guess. 18:19:22 shachaf: Unity doesn't divide anything, no 18:21:06 https://dl.dropbox.com/u/113389132/Misc/20130103-tc_000.png => https://dl.dropbox.com/u/113389132/Misc/20130103-dosbox_000.png 18:21:50 You forgot to #include conio.h 18:21:53 And clrscr(); 18:22:24 -!- WeThePeople has quit (Ping timeout: 260 seconds). 18:22:26 And a getch() at the end, I suppose. 18:22:33 fizzie: Does tcc.exe work for you? "tcc asdf.c" produces "Undefined symbol '_main 'in module C0S" here. 18:23:07 Deewiant: Yeah, same here. I just went with the TUI; it's "Compile/Make EXE file" worked. 18:23:53 fizzie: DOS newlines helped. 18:24:14 Deewiant: Ah, right; I probably had that problem too. 18:24:26 random(-2) only produces 0 and 1, it seems. 18:24:36 -!- WeThePeople has joined. 18:24:55 Interesting. 18:26:38 So random(-n) is just random(n), I guess. 18:26:57 As opposed to rwbarton's -random(n). 18:28:50 It seems to have the sort of % that the sign of the result is always the sign of the left argument. (It produces 2 -2 2 -2 as the output of printf("%d %d %d %d", 12 % 5, (-12) % 5, 12 % (-5), (-12) % (-5).) 18:29:16 Well, OK, I really wanted it compared with random() % (-2) on a modern Unix or whatever. 18:29:36 -!- HackEgo has quit (Remote host closed the connection). 18:29:38 Hmm. 18:29:54 I think that was me. :\ 18:30:08 [20:29:19] `interp c printf("%d %d %d %d", 12 % 5, (-12) % 5, 12 % (-5), (-12) % (-5)); 18:30:11 [20:29:36] -!- HackEgo [codu@codu.org] has quit [Remote host closed the connection] 18:30:41 Pro tip: !c 18:31:42 I haven't been following THE UNIFICATION. 18:31:44 [20:31:08] ,cc for (int i = 0; i < 10; i++) printf("%ld ", random() % (-100)); /* this is a modern Unix */ 18:31:47 [20:31:10] fizzie: 83 86 77 15 93 35 86 92 49 21 18:31:54 It seems to work very much the same way. 18:32:32 Right, 18:32:32 random() returns a long, though; maybe % works differently for int and long! 18:32:57 So I wonder how this results in the bug itself and whether it really is present in the original. 18:35:44 In that code you pasted, though, the function is int random2(unsigned int rmax) and random2(-2) with the previous version does sound likely to give quite large numbers. 18:37:09 Right. 18:37:12 So I guess the fix is just 18:37:21 if ((int)rmax < 0) return random() % -(int)rmax; 18:37:43 I think this might mean -2 weapons are just as good as +2 weapons, which is... something. 18:38:21 Seems to me like the right fix would be to make it take a signed int. :-P 18:38:46 Deewiant: Have you *seen* this code? 18:39:04 I took a quick browse, yes. 18:39:16 It's certainly got a lot of comments. 18:39:46 -!- WeThePeople has quit (Quit: Leaving). 18:39:59 https://raw.github.com/rwbarton/crawl-1.1/master/source.txt is enlightening. 18:40:04 Some of my plans for the near future: 18:40:05 [...] 18:40:08 Replace those mons_thing and item_thing variables with structs - if anyone knows what a struct is and how to use it, please tell me; 18:40:57 What is that, the oldest version of crawl you could find or something? 18:41:25 what... 18:41:31 Deewiant: It's the oldest version of Crawl that got a public source release. 18:41:36 The (few) older versions are just DOS binaries. 18:41:42 Right. 18:41:56 And why is anything being done with it? 18:42:00 "pointers, because I just didn't (and still don't really) understand what they're supposed to be so useful for" 18:42:13 Deewiant: I wanted to see what it was like and didn't know about the DOS binaries. 18:42:25 Okay. 18:42:36 Are they structs now? 18:43:16 zzo38: In the ~16 years of development it's had since then it has figured out what classes are 18:43:49 Turbo C does produce buggy results -- https://dl.dropbox.com/u/113389132/Misc/20130103-tc_002.png => https://dl.dropbox.com/u/113389132/Misc/20130103-tc_001.png (now with conio.h) -- but the comment there says "// for BC", and perhaps some version has made random(num) an actual function int random(int num), in which case random2(-2) would just give (rand() % (-2)), i.e. 0 or 1. 18:43:56 I think in C++ a class and struct are the same, isn't it? 18:44:19 except for the default visibility 18:44:34 class members are private by default, structs public 18:44:46 fizzie: You might want to try with Turbo C++ instead. 18:44:50 Since the code is, in fact, C++. 18:44:55 (OK, "C++") 18:45:13 kmc: That also extends to inheriting from a struct/class. 18:45:18 If you don't specify public/private. 18:45:50 (That's a difference that can actually affect other people, so I think of it as more important.) 18:45:59 Which is one of the things of C++ which doesn't make sense of its design. I don't mean the features of C++ are bad, but I do mean that they implemented all of it into C++ badly, especially by trying to make it C, which it isn't, and anyways it still isn't compatible with C, due to void* and so on. 18:47:29 http://www.bunniestudios.com/blog/?p=898 woah apparently (some) microSD cards have a full ARM core inside 18:47:55 -!- mig22 has joined. 18:48:54 "A /structure/ is a class defined with the /class-key/ |struct|; its members and base classes (clause 10) are public by default (clause 11)." (C++03) 18:49:25 -!- asiekierka has quit (Excess Flood). 18:49:32 -!- asiekierka has joined. 18:57:05 it's funny how ARM and AVR and PIC and 8051 architectures invisibly outnumber x86 by probably a factor of 100 18:57:15 I think in C++ a class and struct are the same, isn't it? <-- also you don't need to create instances with "new". i always wondered how it allocates memory, but it works) 18:57:33 even an "x86 PC" has more ARM cores than x86 cores 18:58:39 -!- WeThePeople has joined. 18:58:55 zzo38: and as consquence you have no constructors in struct 18:59:47 Would it allocate memory like in C, then? 19:00:28 hagb4rd: i think you are confused 19:00:37 Hm. The only difference between struct and class in C++, is that in a struct all members are public by default 19:00:45 there is no difference between structs and classes in terms of memory allocation 19:00:48 whereas in a class, all members are private by default 19:00:56 "class foo { public: ... }" is exactly equivalent to "struct foo { ... }" 19:01:03 okay 19:01:07 if you say so 19:01:19 "new" is used to allocate things on the heap 19:01:33 e.g. instances of classes 19:01:37 yep 19:01:40 but like in C, you can also allocate these things on the stack 19:01:43 or in global static memory 19:01:47 really? 19:01:49 yes 19:01:50 cool 19:01:58 class Foo {}; int main() { Foo x; ... } 19:02:16 C++ is the only language where objects are truly first-class, rather than just references to objects 19:02:31 are you sure "only" is true 19:02:35 you can even pass objects by value and return them by value from functions 19:02:40 though this is often inefficient 19:02:41 elliott: no 19:02:43 i lie 19:02:58 kmc: you liar :/ 19:03:06 so you use &obj to pass as reference? 19:03:18 you would declare the parameter that way, yes 19:03:21 when you call it, you don't use & 19:03:28 yes 19:03:35 kmc: And that part is different from C 19:03:57 references are... not exactly a first-class type, but you can use them in places other than function parameters 19:04:02 The first part, pass objects by value and return them by value from functions, is same as C. 19:04:07 you can have local variables that are references, or class members 19:05:48 You are declaring an empty structure there though; is that OK? 19:06:13 yeah, you can have empty structures 19:06:20 though their sizeof will be at least 1 19:07:49 Why should their sizeof be one instead of zero? 19:08:06 In C will it be zero? 19:08:33 In the GCC extension the size is zero. 19:08:42 (In C it's not legal.) 19:08:53 (And "G++ treats empty structures as if they had a single member of type char".) 19:08:57 C++ guarantees that &a[1] != &a[0] or something 19:09:10 i don't remember exactly 19:09:19 maybe &a[0] could be NaN 19:09:23 haha 19:09:24 PHP style 19:09:29 @tell ais523 irony of all ironies: although anticipation2 depends on programs not checking twice before starting to clear a cell, it is crushed by programs who don't check twice before leaving a cell! 19:09:29 Consider it noted. 19:10:42 Deewiant: Do you happen to know where all the header files are in these Turbo C(++) distributions? 19:11:07 elliott: In tc201.zip they were in disk3 19:11:15 lol 19:11:27 -rw-rw-rw- 1 elliott users 5 Feb 27 1991 DISK3.DSK 19:11:35 * elliott suspects that doesn't contain any headers. 19:11:46 UM 19:11:48 Um* 19:11:57 In fact all the DISK?.DSK files are 5 bytes. 19:12:01 http://sprunge.us/GiNa 19:12:08 Heh, the contents of DISK3.DSK is: DISK$ 19:12:09 Heh, the contents of DISK3.DSK is: DISK3 19:12:28 Oh, that's very different from tcpp101.zip. 19:13:22 huh. hackego never came back. 19:14:58 ragequit? 19:15:11 -!- GreyKnight has joined. 19:15:14 "I'm not interpreting this C! " 19:15:14 Then what is the file for? 19:15:41 I nominate fizzie to figure out what these tcpp101 files are. 19:15:45 `quote 19:15:52 - C++! Turbo C++ offers you the full power of C++ programming, 19:15:52 implementing the entire C++ 2.0 language as defined by the AT&T 19:15:52 specification. To help you get started, we're also including 19:15:52 C++ class libraries. 19:15:56 is `quote handled by the bot that is not here anymore? 19:15:59 - ANSI C! A 100% implementation of the ANSI C standard. 19:16:09 100%, hah! 19:16:14 My guess (re DISK?.DSK) is marker files for a "is this disk the disk 3?" query. 19:16:23 When are they going to put it back? 19:16:25 Sgeo_: have you read Oleg's discussion on delimited continuations? I thought it was something you might find interesting. http://okmij.org/ftp/continuations/index.html#tutorial 19:16:32 fizzie: I actually meant you should figure out where random() is defined. 19:17:06 olsner: `quote is HackEgo who indeed seems to be missing 19:17:16 fizzie: For installing from floppy disks? Maybe it is, then. 19:17:43 elliott: #define random(num) (int)(((long)rand()*(num))/(RAND_MAX+1)) 19:17:47 And if so will it work if you have DISK1.DSK and DISK2.DSK then when it is finish with disk 1 will it then know not to change disks? 19:17:50 elliott: is that disk3.dsk file the only file on disk 3? 19:18:22 elliott: So it in fact *will* return negative numbers for num == -2. 19:18:28 olsner: No, it has DISK[1234].DSK in the archive. 19:18:45 fizzie: Mhm. 19:18:54 ah, so it's all the disks combined then 19:19:34 Sgeo_: http://pllab.is.ocha.ac.jp/~asai/cw2011tutorial/main-e.pdf is the main bit. Apparently Racket supports shift/reset so you should be able to play around in there? 19:20:07 fizzie: I guess I should just make random2 be return (long)rand()*rmax / (RAND_MAX+1) then. 19:20:14 Or, um, does that work properly with the unsigned int argument? 19:20:17 Signedness is confusing. 19:21:03 elliott: RAND_MAX these days might also be too large for that to work. It's kind of counting on long being twice as long as int. 19:21:25 Right. 19:21:29 * elliott sigh 19:21:46 maybe int64_t instead? 19:21:52 turbo c had 16-bit ints? 19:21:53 fizzie: Though rand() does return int? 19:22:04 Oh, but there's still 32-bit machines in the world. 19:22:11 are we doing C archaeology? 19:22:15 olsner: It did, yes. 19:22:48 cool, I've never used a compiler that did that, afaik 19:23:30 I'm guessing compilers on 16-bit microcontrollers would use 16-bit ints? 19:23:36 nooga: how's the 6502 language coming along? This interests me 19:23:40 fizzie: I guess rwbarton's fix is the closest to that semantics, then? 19:23:48 I think I remember some libraries have a fuss about being "16-bit int safe" 19:24:14 Fiora: probably they would... I've never written C for any of them though :) 19:24:36 elliott: Yeah; closest to the intent, even if it's not quite bug-compatible. (And saying "Turbo C" does it is slightly a misnomer, if it's only Turbo C++'s random(n) that does.) 19:25:07 I think SDCC uses 16-bit ints, generally. 19:25:08 afaik the size of int really is represented my the architecture used.. so it's a good idea to use int32_t or whatever you want it to be 19:25:22 -my+by 19:25:33 Even on arguably "8-bit" architectures. 19:25:58 the weirdest though are the architectures that don't have 8-bit types 19:26:04 well, int has to be >= 16-bit according to the standard? 19:26:14 I forgot which TI DSP it was but some popular one has 16-bit as its smallest data type 19:26:23 so sizeof(char) is 2 19:26:29 Fiora: sizeof (char) cannot be 2. 19:26:36 -!- Taneb has joined. 19:26:38 Fiora: It will have sizeof (char) == 1, CHAR_BIT == 16. 19:26:42 ... it can't be? I guess... yeah 19:26:44 that makes sense 19:26:46 CHAR_BIT == 16 19:26:54 Quite a lot of DSPs go that way. 19:27:04 I think TI's own compiler for the C54x series did it. 19:27:15 so does that mean sizeof(int) is 2, even though it's a 32-bit int? 19:27:16 fizzie: size of char is C's fundamental storage space unit, more or less 19:27:26 er 19:27:26 > let sizeof=id;char=16 in sizeof(char) 19:27:27 *Fiora: 19:27:27 16 19:27:35 Fiora: so that just means sizeof(int16_t) would just be 1 or whatever 19:27:56 yeah, I think it was the C54x I was thinking of 19:28:01 Fiora: Yes, though I think the TI compiler has CHAR_BIT == 16, sizeof (char) == 1, sizeof (int) == 1, sizeof (long) == 2 because it works a lot better with 16-bit numbers. 19:28:14 ooh. 19:28:21 wow, that is confusing 19:28:25 I didn't even know sizeof(int) could be 1 19:28:32 It just needs to be 16 bits. 19:28:49 Deewiant: fizzie: Congratulations on your "props": https://github.com/ehird/crawl-1.1/pull/6 19:28:54 Fiora: some architectures have bytes that aren't 8 bits wide :-o 19:28:59 Motorola's DSP56k makes CHAR_BIT == 24, sizeof (char) == sizeof (int), don't know about sizeof (long) there. (Probably 2, since it doesn't have enough bits.) 19:29:08 GreyKnight: I knew about that! but it was usually like 9-bit chars or something 19:29:11 not.... 16-bit bytes? 19:29:19 I hope they won't remove support of ARMv2 and so on in GCC, since I intend to use that. 19:29:22 CHAR_BIT=24? O_O 19:29:34 is there an upper limit on CHAR_BIT? 19:29:43 I think there was something with 11-bit bytes... In theory there could be any number 19:29:47 it's so so so dumb that char can be signed or unsigned 19:29:52 There's some Cray with 32-bit chars, isn't there? 19:29:54 What ARM features are used in GCC when you put certain mode? 19:30:01 what the heck is a signed char, i never got that 19:30:01 Fiora: AD SHARC has CHAR_BIT == 32. 19:30:11 The signed char/unsigned char/char thing is great. 19:30:11 Bike: it's just a number between -128 and 127 19:30:14 poorly named 19:30:15 (And probably sizeof (long) == 1.) 19:30:28 i suppose being a "char" nowadays is ridiculous anyway 19:30:29 so char, short, int, and long are the same size 19:30:32 that's kind of magnificent? 19:30:39 and float, I guess, too 19:30:39 and then some people add wchar and so on and it's all fucky 19:30:40 kmc: if you stick to ASCII then it won't matter! :o) 19:30:50 yeah until someone exploits your program 19:31:11 fizzie: awesome :-D 19:31:15 -!- asiekierka has quit (Ping timeout: 248 seconds). 19:31:16 I don't know of a non-DSP example, and I think I didn't hit on any that I'd really count when last "researching" (fancy word for Googling a bit) this. 19:31:43 DSPs are fun 19:31:57 this came up in one of the exploitation wargames i played 19:32:01 they have all kinds of weirdnesses, I remember hearing about one that had a gazillion delay slots 19:32:02 Would C with unlimited numbers of char be matching any version of the C specification? 19:32:02 DSP and DS9K share the first two latters. just saying 19:32:16 elliott: But not the latter two latters. 19:32:17 Bike: I liked Java's idea of just having char mean "Unicode-width" and be done with it. Then have a separate proper "byte" type for octets. 19:32:24 there was an array "int count[256]" and then it would loop over a string doing "count[*str]++" 19:32:35 kmc: Hey, that was level07_alt or something, wasn't it? 19:32:37 kmc: "exploitation wargames"? 19:32:37 but if you had bytes above 0x7F then it would actually corrupt the 128 words before that array 19:32:40 yeah 19:32:41 I should go back to that sometime. 19:32:47 http://io.netgarage.org/ 19:32:49 * shachaf had forgotten. 19:32:51 (they moved?) 19:32:51 GreyKnight: better but still probably causes a few problems with people thinking a char is like in C? 19:32:51 -!- asiekierka has joined. 19:33:01 They moved? What! 19:33:26 GreyKnight: doesn't java manage to fuck up non-BMP 19:33:26 GreyKnight: basically, you log in as user level1, there's a setuid binary that runs as user level2, you exploit it 19:33:41 then there's another binary that runs as level3 19:33:42 etc 19:33:45 fun times 19:33:59 They use some evil encoding on their website. :-( 19:34:02 There's a strictly word-addressed Cray box where still CHAR_BIT == 8, but on the other hand void * (and char *) representation is complicated and includes a word pointer + inter-word offset to denote a particular byte. 19:34:13 Bike: Screw 'em B-) elliott: I am not sure actually kmc: oh I see! That sounds interesting 19:34:18 "The SHARC DSP and MIPS-X use a double branch delay slot; such a processor will execute a pair of instructions following a branch instruction before the branch takes effect." 19:34:24 * GreyKnight saves vertical space ,o/ 19:34:30 (I don't recall if it actually has sizeof (void *) > sizeof (int *); I think not, it was just some bits. 19:34:53 fizzie: is that actual legal? can differently typed poiners have different sizes? 19:34:54 Just use 128-bit chars and set sizeof(everything) = 1. 19:35:03 Fiora: Sure, it's legal. 19:35:10 wow 19:35:23 elliott: What about my 256-bit variables? 19:35:24 yeah, strange but legal 19:35:39 But the language still has to be able to convert them, right? 19:35:43 Fiora: They can have different representations, I think. 19:35:49 Fiora: (Though void * and char * must have the same representation; as do pointers to any struct; and some other similar exceptions.) 19:35:50 But is sizeof(void*) GreyKnight: yeah it's a really fun game 19:36:18 zzo38: I think that's still legal, if you can guarantee that all valid int *s can be converted to a void * and back, e.g. if int * has some padding bits. 19:36:23 there's a lot of variety actually 19:36:43 fizzie: O, OK, I didn't think of that way 19:36:46 I'm now imagining using that whole rule for tagged pointers 19:36:47 some of your standard binary exploitation, some reverse engineering, some developing exploits for real (old) software, some programming weir machines 19:36:51 But yes I suppose it can work. 19:37:19 weir? 19:37:35 weird 19:37:37 heh 19:37:41 oh 19:37:43 l 19:37:49 like a toaster 19:37:52 How do I git-show the second commit in the list git-log gives me? 19:37:54 kmc: I like how you can add stuff to a file that is pushed to the website (dodgy javascript aside) 19:37:59 Fiora: Oh, and the TI C54x also has two delay slots, but some instructions (those followed by an immediate) are twice as fat, so sometimes you can fit only one instruction in the delay slots. (And the assembler doesn't warn you, since it can't know your intent; though it might warn you if you put a wide instruction in the second delay slot.) 19:38:38 that ... wow 19:38:55 yes 19:39:12 variable instruction length + delay slots sounds like an insane combination 19:39:23 also if you get to level20 there's a directory of stuff that other people who got to level20 wanted to share with people who can get to level20 19:39:25 Fiora: You do need to use a specific form of branch to get delay slots, though. (The plain "B" is pretty much a "BD; NOP; NOP".) 19:39:25 how big are the C54x instructions, 2/4 or 4/8? 19:40:53 Mostly they're one word (16 bits), so the delay slots are two words following the branch. 19:41:07 that is awkward 19:41:18 oh, so it's just like thumb-2 19:41:56 "40-bit arithmetic logic unit, including a 40-bit barrel shifter and two independent 40-bit accumulators" 40-bit o_O 19:41:58 kmc: maybe we should do something esolangy along these lines :-) 19:42:29 is that for floating point MAC or something? 19:42:30 "More bits than you'll ever need" 19:42:31 Every buggy program is actually an esolang where the only way to get things done is to exploit it. 19:42:32 Fiora: The fixed-point DSPs often have larger-than-word-size accumulators so that you have some extra headroom. 19:42:38 oooh 19:42:41 Fiora: (It doesn't do anything floating.) 19:42:46 ah, I see 19:42:51 shachaf: I was thinking something to do with nested Turing tarpits? 19:42:52 what about the 17 bit multiplier? 19:43:38 -!- copumpkin has quit (Ping timeout: 252 seconds). 19:43:54 " Single-instruction repeat and block repeat operations" wow, it has "loop" instructions? 19:44:10 -!- copumpkin has joined. 19:44:13 conditional stores! 19:44:18 i think i said here before that attacking vulnerable programs is the practical application of esoteric programming 19:44:20 memmmove /instructions/ 19:44:27 mmmmmmmmmemmove 19:44:34 Fiora: If you're reading about the C54x, that's the RPTB[D], and I was just figuring it out in order to understand what the delay slots were doing. 19:45:18 I'm reading the "DSP programmer's guide" 19:45:35 I feel like now is a good time to link to http://esolangs.org/wiki/Talk:Timeline_of_esoteric_programming_languages#AS.2F400 19:45:38 re crazy CPU architectures 19:45:52 "The AS/400 (the ultimate CISC) might qualify as an unintentionally esoteric computer architecture. It has transcendental math, iconv, malloc/realloc/free, (almost) sprintf, mark-and-sweep garbage collection, compression, and encryption, as single assembly instructions. It has 128-bit segmented pointers (which are bit patterns but not integers), EBCDIC characters, no (visible) registers, hardware malloc() instead of a stack for function arguments/lo 19:46:07 yes i love that one 19:46:10 STM #4000h,AR2 ; Load pointer to source in data memory. 19:46:10 STM #100h,AR3 ; Load pointer to destination in data memory. 19:46:10 RPT #(1024–1) ; Move 1024 value. 19:46:11 MVDD *AR2+,*AR3+ 19:46:14 omg 19:46:17 cal variables, and trap representations." 19:46:25 that's how you do a 1024-byte memcpy on this chip 19:46:31 with the RPT instruction 19:46:43 er, 4096 bytes >_>; 19:46:45 wow 19:46:51 elliott: I actually worked on some of these once (not that long ago, maybe 10 years?). The machines are still in use as far as I know 19:46:52 I think 19:47:04 Fiora: "RPTB addr" will load PC+2 (PC+4 for RPTBD) into RSA (block-repeat start address register) and addr to REA (block-repeat end address register), and the hardware will then cause that block to be repeated as many times as the BRC (block-repeat counter) specifies. 19:47:05 (an insurance company) 19:47:13 http://esolangs.org/wiki/User:Ian/Computer_architectures mentions "DSPs: DSP56300 (hardware DO loops), SHARC (hardware COME FROM!!!)" 19:47:36 these DSPs are like 19:47:38 the revenge of CISC 19:47:39 and it's wonderful 19:48:16 Fiora: Have you read about the FFT addressing modes yet? 19:48:35 what O____O 19:48:36 AS/400 is 128-bits (in 1988; and I even saw the advertisement in an issue of Byte magazine from that time). 19:49:09 Fiora: Some of them have kind of bit-reversed addressing modes for implementing FFT faster. 19:49:10 Fiora: but does it have a printf instruction? 19:49:20 "The C54x implements division operations by using repeated conditional subtraction." 19:50:00 oic, these are code examples, it doesn't have a div instruction 19:50:22 Fiora: And pretty much all have special circular-buffer addressing. 19:50:28 is it a neuman or harvard architecture? 19:50:43 fizzie: FFT addressing??? 19:50:48 "Example 3–4 uses a 6-term Taylor series expansion to approximate the square root of a single-precision 32-bit number" 19:50:49 elliott: That AS/400 thing is indeed great. 19:50:54 * boily is positively terrified by the idea 19:50:54 that.... that's actually a cool idea 19:51:27 shachaf liking something??? 19:51:34 Circular buffer addressing seems it would be useful in many cases. 19:51:45 elliott: huh? i like a lot of things!! 19:52:13 FFT involves that "read this in bit-reversed order" step, so there's a "post-increment except in a bit-reversed fashion" addressing mode. 19:52:23 shachaf: Name three! 19:53:20 -!- Frooxius has joined. 19:53:28 wow. dsps are crazy 19:55:14 If AR2 is 0b01101100 and AR0 is 0b00001000, then using *AR2+0B as an operand means "take data from address 0b01101100, but also increment AR2 to point at 0b01100010" (because rev(rev(0b1100)+1) = 0b0010; AR0 must be 2^(N-1) where 2^N is the FFT size). 19:55:57 I didn't have an occasion to use that (TI delivers these with optimized FFT libs), but I do think I did use the circular-buffer addressing. 19:56:04 -!- WeThePeople has quit (Quit: Leaving). 19:56:54 http://i.imgur.com/vj74U.png 19:57:04 ... okay, this is one category of addressing modes. 19:57:06 just, erm. one. 19:57:16 http://sprunge.us/IPHd yeah, there it is; *TMP+% is a ring buffer thing. 19:57:22 endofunctor in the category of addressing modes 19:58:04 http://i.imgur.com/bNZNx.png here's the fft one 19:58:16 Fiora: I hope you like the parallel instructions too; that ST B, *UDPTR+ || MPY *PPTR+, B is a single opcode. 19:58:31 the "do math and do an unrelated load/store at the same time"? 19:58:37 Fiora: (There's all kinds of crummy restrictions re which registers are usable when and where, due to running out of bits.) 19:58:56 that's like x86 memory operands on acid 19:59:39 http://books.google.com/books?id=2A_2-v3raKEC&pg=PA290&lpg=PA290 <-- this is what I'm reading right now 19:59:59 -!- WeThePeople has joined. 20:00:42 -!- oerjan has joined. 20:01:06 heh, the VAX MOVTC command is basically tr(1) in a single instruction :-D 20:01:56 Fiora: "ST B, *TMP+0% || MPY *PPTR+, B" means: store old value of B >> 16 into the memory pointed by address register TMP, then post-increment it by AR0 and take the result modulo the circular addressing register BK; while doing that, also multiply B with the data pointed by PPTR, and post-increment that register. 20:01:57 tr(1)? 20:02:07 as in translate 20:02:11 and CASEx has no upper limit on its number of operands (and hence instruction length) other than the size of memory. In theory it could be up to 4GB long :-o 20:02:12 i assume? 20:02:21 Fiora: the unix tr utility 20:02:31 ooh 20:02:44 now i'm wondering if anyone's designed a "snobol machine" 20:03:02 fizzie: that... just.... woooow 20:03:12 POLYx: evaluate polynomial 20:03:17 `run echo 'like this' | tr a-z n-za-m 20:03:26 HackEgo is on strike 20:03:32 WAT 20:03:33 GreyKnight: i mentioned this before, but i had a professor who wrote binary search as a vax instruction 20:03:39 UNHEARD OF 20:03:44 fizzie, how can I also make it whistle Beethoven's Fifth at the same time?? 20:03:44 HE'S FIRED 20:03:53 !sh echo 'like this' | tr a-z n-za-m 20:03:58 yvxr guvf 20:04:03 Bike: I'm not even surprised at this point! 20:04:14 i think POLYx is kind of famous thoug 20:04:16 h 20:04:24 "Square and subtract: This instruction stores the data-memory value Smem in T, then it squares Smem and subtracts the product from src. The result is stored in src." 20:04:30 which is a bit silly, it's not even really that complicated to evaluate a polynomial 20:04:39 at least not compared to fizzie's bit there 20:05:02 this is insane and wonderful 20:05:20 Gregor: TELL HACKEGO HE'S FIRED FOR ABSENCE 20:05:45 Fiora: The MAC instructions are kind of nice too. "MACR *AR5+, *AR2, B, A" computes *AR5 * *AR2 (AR5 is also post-incremented), then adds that to B and stores the result to A. Have to love a four-operand opcode. 20:05:58 (Admittedly the two last operands each can only be A or B, since there's just two accumulators.) 20:06:36 i read that * as convolution, and... i'm not sure i'm wrong? help 20:06:51 Sadly, it's just a product. :/ 20:07:05 Oh, and the R means "add 2^15 to the product and then clear bits 0..15 to 0" so that it's a round-to-nearest fixed-point multiplication. 20:07:26 fizzie: x86 has that one at least! 20:07:33 ... the MAC one 20:07:38 "NES CIC (LFSR-based PC, meaning the address of the next instruction is determined by what is basically a random number generator!)" 20:07:39 Yes, finally. 20:07:44 yay for xop and fma4 20:07:48 GreyKnight: wat 20:08:00 Well, x86 also has those AES-related instructions. 20:08:07 x86 has rounding fixed point multiplication now too with pmulhrsw 20:08:24 :t join 20:08:25 Bike: from the list on http://esolangs.org/wiki/User:Ian/Computer_architectures 20:08:26 Monad m => m (m a) -> m a 20:08:30 fantastic 20:08:43 makes Malbolge look like small beans 20:09:09 (Generally speaking bits 0..15 of the accumulators A and B tend to be extra precision, 16..31 the actual data, and 32..39 the extra guard bits so that you don't wrap prematurely when summing things up; if you store A or B to memory, it will actually write bits 16..31 there.) 20:09:15 oh right, vax's "increment literal" addressng modes. 20:09:29 -!- WeThePeople has quit (Quit: Leaving). 20:09:48 fizzie: those guard bits actually sound incredibly useful 20:09:50 "has 6 operands" 20:10:14 hmm, that thing being discussed as the as/400 instruction set earlier is actually (afaict) their cpu-independent intermediate language - when installing on your iSeries thingy it'll get translated to something sane like POWER instructions 20:10:22 «EDITPC converts a number from packed BCD to ASCII using its own mini instruction set (called patterns). It's used extensively in the printf() function in VAX BSD for %d formats. Of course, this mini instruction set itself has variable-length instructions!» 20:10:34 fmaddps xmm0, xmm1, xmm2, [rax+rbx*4+175232] ; yay x86 20:11:00 man, and i thought machines not based on executing instructions were weird 20:11:05 heh, Ian suggests the following modification if anyone makes a new VAX: "Also extend the maximum degree of POLYx from 31 to 65,535 because it already uses a word operand." 20:11:13 genius 20:11:31 "BBxx: branch on bit. The VAX has instructions for branching based on whether a bit is set or clear, and then optionally clearing or setting the bit regardless of the condition." neat! 20:11:48 "EMODH #5345.1524[r7], @mul_ext_ptr[r0], #3.141592765[r5], @int_table[r1], @frac_table[r2]" it's beautiful 20:12:06 though the original as/400 had an instruction set "similar to the IBM 370", which is also quite CISC 20:12:25 -!- HackEgo has joined. 20:12:40 `echo hi 20:12:41 hi 20:12:45 HackEgo: read the back log, we tried to use you earlier 20:13:03 hmm, HackEgo is also the bot that makes the logs, isn't it? 20:13:08 "XFC: extended function call. The user can create their own instruction in microcode and the VAX will decode all the specifiers for them. " oh, so that's how that works 20:13:39 olsner: well codu has logs anyway, looks like. does hackego have a spy 20:13:59 Fiora: look at callg in this list ._. 20:14:05 callg? 20:14:08 um, link? 20:14:13 in http://esolangs.org/wiki/User:Ian/Computer_architectures 20:14:16 might be glogbot that logs 20:14:19 Fiora: It also has a two-port (data) memory, so you can do ST B, *AR1+0% || LD A, *AR2+ in a single cycle. (Then again, I suppose the operation itself, or the other parallel ones -- ST||ADD, ST||SUB, ST||MPY, ST||MAC, ST||MAS, LD||MAC, LD||MAS -- are not all that fancy when you consider that the C64x is an actual VLIW.) 20:14:21 "call with general argument list" 20:14:36 omg 20:14:45 wow, and the hardware enforces the ABI 20:14:51 "Free Activation Group-Based Heap Space Storage" a useful instruction 20:15:31 yes, this is hardware malloc, isn't it 20:15:37 "EMODH: the longest instruction on the VAX, besides the CASE instructions. As I wrote on Wikipedia, EMODH #5345.1524[r7], @mul_ext_ptr[r0], #3.141592765[r5], @int_table[r1], @frac_table[r2] is 2+18+6+18+6+6, or 56 bytes." 20:15:42 a 56-byte instruction? 20:15:56 "hardware COME FROM" 20:15:57 I think if you showed that to an x86 instruction decoder engineer it might send them comatose 20:16:09 Fiora: or give them ideas 20:16:43 Fiora: Also fancy: conditional SIMD: http://everything2.com/title/FirePath 20:16:51 http://publib.boulder.ibm.com/infocenter/iseries/v7r1m0/index.jsp?topic=/rzatk/mitoc.htm jesus this whole thing 20:16:52 (Includes a nice snippet.) 20:17:16 "Preserve the calling invocation and pass control to either the program entry procedure of a bound program or the external entry point of a non-bound program identified by pgmOrTmpltPtr." this is an instruction 20:17:42 "The SIMD nature of the instruction set is complemented by the way FirePath predication works. Rather than predicate an entire instruction's execution on a single bit, like IA-64's predication, FirePath has 8-bit predicate registers, each bit controlling the conditional writeback of a separate byte in an operation's result, thus allowing conditional operations to be performed in a SIMD fashion." wooow 20:17:51 they're /registers/ instead of bits in the instructino 20:17:55 so it can be changed on runtime 20:18:07 and I thought the vector units on the PS2 were insane @_@ 20:18:17 a hardware compression instruction, that can use of one two algorithms 20:18:31 -!- sebbu2 has changed nick to sebbu. 20:18:32 (on the PS2, there are 2-4 operand vector instructions, and ALL operands can be arbitrarily shuffled as part of the instruction) 20:18:35 instructinos are instructions that interact only very weakly with processors 20:19:05 (4 floats per vectorish I think) 20:19:08 " the supercharged bastard son of ARM" 20:19:10 Sophie Wilson talked a bit about the FirePath when she was giving a lecture at an event; that's the only place I've even heard of the whole thing; it seems it hasn't really been used outside of Broadcom's non-consumer DSL devices. 20:19:33 Did anyone ever find the mysterious Mondrian language? 20:19:48 There are about three references to it on the internet 20:19:58 how had I not heard of Sophie Wilson ;-; 20:20:07 she designed ARM, woow 20:20:18 "Materialize Authorized Users (MATAUU)" what the fuck is this machine even for 20:20:43 transporter control? 20:20:57 ha, variable length nop 20:21:11 Split User in Pattern Buffer into Good and Evil Halves (SUPBGEH) :o) 20:21:44 * Fiora gapes and adds a new idol to her list 20:21:44 There are "official" (FSVO) variable-length NOP lists for x86 too, in the manuals of both AMD and Intel. 20:22:15 fizzie: well it's not really variable length so much as nop with an operand indicating how many bytes to skip 20:22:24 That's also called a jump. :p 20:22:28 oh hey it's ebcdic based 20:22:30 -!- WeThePeople has joined. 20:22:49 fizzie: nope it's called "NOOPS" 20:23:01 Bike: What does the "NOOBS" instruction do? 20:23:18 quit if the current user isn't properly authorized probably 20:23:26 this does have user control stuff in hardware 20:23:38 and that's... an instruction? 20:23:42 that's... kind of terrifying 20:24:03 «The instruction materializes the authorization states and the identification of the user profile(s). The materialization options (operand 3) for the system object (operand 2) are returned in the receiver (operand 1). The materialization options for operand 3 have the following format: » 20:24:43 The DSP course where we fiddled with the C54x was possibly my favourite course. Even if it wasn't perhaps all that terribly useful. 20:24:47 Fiora: huh, she was on proto-EIDOS's board, too. cool 20:25:04 I wonder what all that "materialization" stuff is about 20:25:29 "Speed up CALLx and POLYx just to anger VAX detractors who don't follow Moore's Law" ok 20:25:54 "Add an Execute instruction like the S/360 and PDP-10 that executes one instruction at its target and then returns. " hah, i forgot about this 20:26:53 elliott: from rwbarton/crawl earlier: "Keep on adding hordes of little features, so that one day Crawl can be a bloated monster just like NetHack! (this has always been my dream)" <-- we're living the dream! 20:27:58 maybe i should go stare at dataflow processors now 20:28:06 or that neuro stuff 20:28:54 Bike: Incidentally, the C54x also has an instruction called "POLY Smem"... but it only does a simple A = round((A >> 16) * T + B) operation; it's "useful for polynomial evaluation to implement computations that take one cycle per monomial to execute". 20:29:25 kmc: you know things about terminals right 20:29:42 fizzie: didn't the vax just use the same method anyway but make the whole chain one instruction 20:30:02 elliott: some 20:30:11 anything more complicated than horn's method probably isn't worth implementing in hardware 20:30:20 -!- etb has left. 20:30:23 kmc: what's up with character width 20:30:37 wow i got that name wrong. whatever 20:31:07 Bike: Er, I mean, to be entirely accurate, it does a simple A = round((A >> 16) * T + B); B = (Smem) << 16 operation. I suppose that latter part is going to be useful too for actually looping the thing. 20:31:25 (Presumably with a post-increment Smem operand so that it'll keep loading different coefficients.) 20:31:40 (And T is where you put 'x' into.) 20:31:57 right 20:32:33 elliott: i know, right 20:32:38 seriously though, what's your question 20:32:47 kmc: well 20:32:52 "int main() is in CRAWL99.CPP (the 99 is a version number, which started at 1 about 18 months ago)" <-- implies no source control? Not that it's surprising in context. 20:32:53 (So I suppose RPT #8; POLY AR0+ is *almost* a evaluate-an-8th-degree polynomial instruction, even if it technically is two.) 20:32:57 kmc: that more or less is my question 20:32:59 afaik there are only 3 possible widths as reported by wcwidth() 20:33:01 0, 1, 2 20:33:04 plus -1 for unknown character 20:33:18 well I am so used to thinking of a terminal as a grid 20:33:26 but that does not really seem to work when you introduce this stuff 20:33:31 but the "east asian width" character property defined on unicode takes on more values 20:33:36 (and also the fact that lines have endings rather than just being padded out by spaces I guess) 20:33:43 (I mean RPT #7; naturally "RPT #X; Y" repeats Y (X+1) times.) 20:33:50 (full, half, wide, narrow, ambiguous?) 20:34:05 probably due to roundtrip concerns with other encodings 20:34:08 elliott: yeah 20:34:19 i think basically the wide character lives in the first of the two cells 20:34:31 and then whatever's in the second cell is irrelevant? 20:34:48 i'm not sure if it's defined what happens if for example you write "XY", move to the X, write a fullwidth character, then write a space 20:34:55 if the Y comes back or not 20:35:00 KeithW in #mosh probably knows 20:35:05 he has a hobby of torturing terminals 20:35:27 basically I am trying to write a terminal graphics library for Haskell (like ncurses but hopefully not shit) 20:35:36 I don't like those features of Unicode 20:35:50 which involves trying to come up with a representation of "something you can paint on a terminal" that composes in some nice way 20:36:05 i.e. you can say "ok, render this bit beside this other bit" etc. and it all works reasonably 20:36:08 Perhaps write the library, either to ignore Unicode, or to have an option to turn it off 20:36:13 but terminals not being grids is sort of getting in the way of this 20:36:27 so I am not really sure what semantic model I should be using 20:36:37 Sounds like a text-based diagrams 20:37:46 yes I quite like diagrams' design 20:39:11 kmc: ...and then this gets even more complicated because I'd quite like some notion of a "scalable" version of these, e.g. you can make something that renders a bunch of text and wraps it according to the width it actually displays at; put two of them next to each other and the whole thing will fill the terminal 20:39:42 interesting 20:39:49 but this is kind of tricky when I have no idea how to represent this stuff in a way that behaves properly for multiple-width characters 20:40:36 You could also use "ZEUX encoding" although that is CP437 only and doesn't work on anything other than the Linux console, and even then it won't work unless you have the files to work it with; however, this does mean that you can convert to/from .MZM format. 20:40:53 -!- greyooze has joined. 20:41:24 (MZM is not limited to CP437 either, but it does require 8-bit character encoding.) 20:41:27 @tell nooga i'm not banned <-- DID YOU EXPECT TO BE? 20:41:27 Consider it noted. 20:42:10 (And with 16 colors usable for background and foreground, although it does not matter what colors these are.) 20:42:29 -!- GreyKnight has quit (Ping timeout: 252 seconds). 20:42:34 -!- greyooze has changed nick to GreyKnight. 20:42:49 you can talk to keith about the terminal state data type in mosh 20:42:59 what's ZEUX encoding and how does it solve the problem? 20:43:47 i think it stores the same wide character in both cells 20:44:04 no, i'm wrong 20:44:07 mm 20:44:17 GreyKnight: It makes it so that you don't have to worry about wide characters 20:44:17 if ( chwidth == 2 ) { /* erase overlapped cell */ 20:44:17 if ( fb.ds.get_cursor_col() + 1 < fb.ds.get_width() ) { 20:44:17 fb.reset_cell( fb.get_mutable_cell( fb.ds.get_cursor_row(), fb.ds.get_cursor_col() + 1 ) ); 20:44:33 But it might be insufficient for what you are making, possibly 20:44:38 I'd rather abstract from that somehow, since algorithms like "put these two grids beside each other" will depend on wide-characterness 20:45:02 yes 20:46:19 I guess a terminal is in some ways fundamentally more like a list of lists than a grid 20:46:27 but that's such an ugly thing to actually work with 20:46:40 does it help you avoid worrying about wide characters by the simple expedient of "not supported" :-I 20:46:56 `addquote -!- ais523 has parted #esoteric ("someone is going to mention Feather, I know it"). 20:47:00 893) -!- ais523 has parted #esoteric ("someone is going to mention Feather, I know it"). 20:47:01 yeah the mosh representation is like that 20:47:10 but i think it still maintains a rectangular list of lists 20:47:20 oerjan: it's funny he should mention it, I had a question 20:47:26 but he left :-( 20:47:56 if you have some totally general idea of gluing together arbitrary size rectangles 20:48:07 then a terminal can just be a bunch of 1x1 and 2x1 rectangles glued together 20:48:27 don't forget 0x1 20:48:39 why rectangles? What about a hexagonal gridded terminal :o) 20:48:45 kmc: not sure how that view handles varying line lengths though 20:48:53 well I guess you can glue them together vertically and just not pad out stuff 20:50:06 kmc: I was hoping for a representation that looked something like a map or a function, though; otherwise you'll end up gluing together trees "manually" to do something like e.g. drawing an ASCII-arty picture on a grid (consider a game display or whatever) 20:50:10 it's tricky 20:50:52 -!- AnotherTest has quit (Quit: Leaving.). 20:53:12 Can you make non-Unicode version using only 1x1 and no 2x1, or else provide an interface for such thing, so that it can be used in the simplified mode? 20:54:39 * elliott isn't really interested in writing a library that can't display CJK text. 20:55:17 > 5 ^ 36 20:55:18 14551915228366851806640625 20:56:14 * kmc high-fives elliott 20:56:53 elliott: Even in 1x1 only mode, it might still display CJK text on a wide-only terminal. 20:57:46 But another possibility to make a grid with wide characters even in a narrow-text, is to make each cell to be narrow/left-half/right-half. 20:59:38 that sounds sort of similar to what he's doing 20:59:53 -!- monqy has joined. 21:01:31 This could also be a way to store a Unicode text in a board mode MZM. Layer mode MZM has only color/character (8-bits each). Board mode MZM is dual-layer (top and bottom layers), and has a kind for each cell in addition, and an optional program for the top layer. When converting between board/layer mode, only the top layer is used. 21:02:03 Therefore you can use the bottom layer for the high bits of the character code, and use the kind octet to specify narrow/left-half/right-half. 21:04:12 look, Unicode is not perfect, but it is The Standard 21:05:26 I thought ASCII was the standard. 21:05:39 PETSCII 21:05:39 That's what the S stands for. 21:05:54 EBCDIC for life 21:06:40 @tell ais523 I had a question but this message utility is too small to contain it. I posted it on your wiki user talk page instead. 21:06:41 Consider it noted. 21:10:19 iso-8859-8 forever 21:11:20 does Israel have any entertainingly strange locally developed '80's microcomputers? 21:11:45 Hmm, I don't know. 21:12:21 JIS X 0212 represent 21:13:10 -!- Nisstyre-laptop has joined. 21:14:29 the Wikipedia entry for [[Four-Corner Method]] includes an example: «The code of 法 (pinyin: fǎ; meaning "method/law/France" [...]» 21:14:32 best character 21:15:50 kmc: I'm told that GOLEM is maybe interesting? 21:15:53 http://he.wikipedia.org/wiki/%D7%92%D7%95%D7%9C%D7%9D_(%D7%9E%D7%97%D7%A9%D7%91) 21:16:46 GreyKnight: i think my favorite is still that character for some kind of noodle that has like thirty radicals 21:18:14 How is that best character 21:18:29 John is the best character 21:18:34 shachaf: worth it for the name alone 21:19:09 Bike: is that the one? https://en.wikipedia.org/wiki/Bi%C3%A1ng 21:19:41 boily: yep. 21:19:48 strokes not radicals. i'm no good at chinese 21:20:22 That thing has 58 strokes 21:20:32 pff, the chinese text is svgs instead of text 21:20:40 you're dropping the ball unicode 21:20:41 There are reasonably common characters with 30 strokes 21:21:09 `pastelogs JIT 21:21:27 http://codu.org/projects/hackbot/fshg/index.cgi/raw-file/tip/paste/paste.28983 21:21:44 58 strokes 21:21:58 you'd get RSI just writing it once 21:21:59 oh! hackEgo's back! 21:22:25 Hmm, not what I was looking for. 21:22:30 Bike: it's not in Unicode according to WP >:-o 21:22:34 outrageous 21:22:48 there was a little emergency maintenance at my subway stop today: https://twitter.com/mbtaGM/status/286944708087930880/photo/1 21:23:03 multiocular o: higher priority than noodles 21:23:33 i think in the back you can see where they have grounded the third rail to the running rail, Just In Case 21:23:48 Bike: To be fair, almost every Chinese character looks like noodles. 21:23:54 fizzie: you should finish that jitfunge thing 21:25:39 Wikipedia thinks the world's most significant news story right now is some chess guy got a high rating that nobody but other chess guys cares about? Really, Wikipedia? This is how Wikipedia interprets the world around it? Has DYK staged a coup on the news section? Embarrassing. Townlake (talk) 03:54, 3 January 2013 (UTC) 21:26:08 Glad to see WP is as much of a soap opera as ever 21:26:11 -_- 21:26:21 "The real entertainment is on the talk pages" 21:26:56 i think i still have a text file somewhere of pickings from the transhumanism article 21:27:16 i used to have a markov chain bot trained from the talk pages about various religions and religious figures 21:27:18 there was a guy insisting some incidental diagram was bad because theh brain doesn't store information, it's just a radio tranceiver to the akashic records 21:27:23 so it would just argue with itself about religion endlessly 21:27:32 Bike: o_O 21:27:44 Bike: do you have enough hard disk space for storing that text file :-U 21:27:57 ("notoriously verbose") 21:28:41 Bike: nice 21:28:52 Can you make up a version of the pastelogs which can specify the start date? 21:29:40 zzo38: It's too late: You've already made it up. 21:29:47 The patent, trademark, and copyright all belong to you. 21:29:59 nice it degenerated into a policy argument 21:30:13 elliott: why are you reading [[Talk:Main page]] 21:30:27 shachaf: Well, I officially release all of that into the public domain. 21:31:25 shachaf: because it's the best 21:31:36 http://en.wikipedia.org/wiki/Talk:Transhumanism/Archive_11#Non-Local_Memory.21 aha, found it 21:31:41 also because I check the main page and the talk page link is too damn prominent to avoid clicking 21:31:51 «Also, many other scientists are aware of the NON-LOCAL nature of memories, eg. Nikola Tesla, who gave the AC electricity to the world (and opened the doors to 'modern age') knew a whole century ago, that brain is just a sort of antenna to somewhere else where these data are actually stored.» 21:32:35 I'd better stay away from Faraday cages then 21:33:00 The thing is that this view of 'memories-IN-the-brain' is what is pseudo! Science DIDN'T find any physical traces of memories IN the brain and will never find them, so how can a view that is based on memories being STORED IN the brain be non-pseudo, and something that doesn't contradict the reality (since reality is that they are NOT found IN the brain) be 'pseudo'(?)... 21:33:08 Good point. 21:34:46 "Waldo" is a famous story, right? 21:34:49 Jafet: Did you read it? 21:35:02 the onen by... heinlein I think? 21:35:07 My memory is shachaf. 21:35:11 shachaf: did you? 21:35:24 Jafet: I think so. 21:36:33 Oh, it's the randy one with robot hands. 21:36:42 That's the one. 21:36:42 Jafet's memories are stored in shachaf? 21:36:50 @wn randy 21:36:50 *** "randy" wn "WordNet (r) 3.0 (2006)" 21:36:51 randy 21:36:51 adj 1: feeling great sexual desire; "feeling horny" [syn: 21:36:51 {aroused}, {horny}, {randy}, {ruttish}, {steamy}, {turned 21:36:51 on(p)}] 21:36:59 @wn Rand 21:36:59 *** "rand" wn "WordNet (r) 3.0 (2006)" 21:36:59 rand 21:36:59 n 1: the basic unit of money in South Africa; equal to 100 cents 21:36:59 2: United States writer (born in Russia) noted for her polemical 21:37:00 novels and political conservativism (1905-1982) [syn: {Rand}, 21:37:02 [4 @more lines] 21:37:05 does the fact that I'm the subconscious aspect of a COBOL-less cookie agrees with your brains being antennas? 21:37:19 Oh, that sort of Randy. 21:37:58 GreyKnight: how can MEMORIES be stored IN shachaf? That is pseudo gobbledygook. shachaf is my memory. 21:38:01 "ruttish" 21:38:56 pseudo gobbledygook = real science? 21:41:06 kmc: Is KeithW related to "keithw", the GHC committer? 21:42:53 olsner: it *appears* to be gobbledygook, but in actuality it's balderdash 21:44:58 boily, perhaps a cookie can act as an antenna? Time for an experiment 21:45:41 Problem #1: How to stop GreyKnight from eating the experimental apparatus 21:47:38 Solution to Problem #1: Cyanide 21:47:57 Solution to Problem #1: Canada 21:48:10 zzo38: Does Canada exist? 21:48:15 For gods' sake, I said I was sorry 21:49:50 -!- carado has joined. 21:49:54 shachaf: Yes, Canada is exist, I think so! 21:50:10 zzo38: Sure, it is exist. But I asked whether it *does* exist. 21:50:35 Canada: I sexist 21:51:56 -!- Phantom_Hoover has quit (Read error: Connection reset by peer). 21:52:21 Canada *is* existence? So if we're not in Canada, *we* don't exist 21:52:38 Canada is exist 21:52:40 GreyKnight: Canada *is* exist. 21:52:40 I exist 21:52:41 Come on. 21:52:44 Hence I Canada 21:52:51 Hence I can Ada 21:53:01 I Canada therefore I eh 21:53:29 I cannot Ada 21:53:29 -!- Phantom_Hoover has joined. 21:53:30 shachaf: there's a keithw GHC committer? 21:53:38 Hence either Canada is not exist, or I do not exist 21:53:43 shachaf: probably not, but I wouldn't be totally surprised 21:53:47 I suspect the latter 21:54:03 kmc: I was looking for something in GHC commit history earlier and saw some. 21:54:11 From 1999 to 2002. 21:54:37 I think Canada exists. I'll have to check. 21:55:14 Taneb: why would you exist? 21:55:22 olsner, who knows 21:55:29 I didn't even see a movie yesterday 21:55:52 shachaf: I think Canada does exist, too. 21:56:26 Taneb, is that why you were going to newcastle 21:56:36 Yeah 21:56:42 There were six of us 21:56:47 The cinema had six seats spare 21:56:51 Not together 21:56:54 So we didn't see it 21:57:03 Taneb: "There were four of us" is the standard version, I think. 21:57:24 (Two of them aren't in Canada, and hence don't exist) 22:03:43 can you all be less than two of them, so Canada may experimentally exist? 22:04:33 I'll believe in Canada when I see it 22:04:40 What if there were (-2) of them 22:07:55 -!- boily has quit (Quit: Poulet!). 22:12:43 i can confirm that canada existed as recently as 1995, although that was of course before the war on terror 22:13:29 -!- ais523 has joined. 22:15:50 I can vouch for 1997. 22:16:19 I've heard stories of canada but never experienced it myself 22:16:37 I used to know someone who lived in Canada 22:16:41 But she was a liar 22:16:44 Which made me sad 22:17:17 I once took the ferry over from Canada. 22:18:02 canada gave you its ferry? how generous of it 22:18:10 Taneb: what did she lie about 22:18:44 She pretended to be two people 22:18:48 And completely fooled me 22:18:53 Because I made friends with the fake 22:18:58 well the relevant question is of course whether she lied about living in canada 22:19:08 That I do not know 22:19:14 and which one of her lived in Canada? 22:19:19 *supposedly 22:19:39 she pretended that all that she wants was his money.. but all she really wanted was love love love..really sick 22:21:16 Both 22:21:29 shachaf: so did you ever write the exploit for level07_alt? it was a kinda fun constrained programming problem 22:21:40 Both ubiquitousUloid and Thollux 22:21:43 kmc: Nope. 22:21:51 I don't think I did level07_notalt, either. 22:21:55 I should go back to it. 22:23:02 yeah me too 22:23:13 i have like 5 or 6 levels left 22:23:48 a friend pointed out that the split-TLB trick we were discussing might behave weirdly on SMP 22:24:12 Split TLB? 22:24:19 maybe you weren't around 22:24:50 PaX has NX emulation that works by deliberately putting the code TLB and data TLB into inconsistent states 22:25:24 you set all data pages as non-accessible in the page tables 22:25:38 when you get a page fault, you check to see if it's really a data access and not a code fetch 22:25:46 if so, you set the page accessible, read from it, and then set it back 22:26:32 Sounds efficient 22:26:45 yeah ;P 22:26:53 it's apparently not completely awful though 22:27:06 http://pax.grsecurity.net/docs/pageexec.old.txt http://pax.grsecurity.net/docs/pageexec.txt 22:27:28 this came up in http://events.ccc.de/congress/2012/Fahrplan/events/5265.en.html 22:27:43 which you can download a video of at https://events.ccc.de/congress/2012/wiki/Documentation 22:28:04 elliott, Taneb monqy Phantom_Hoover Fiora update 22:28:11 ccc <3 22:28:27 wait, is that the chaos computer club? 22:28:33 yes 22:28:47 aw shit i'm so far behind 22:28:50 the Chaos Communication Congress actually 22:28:57 their conference 22:29:02 Oh, I've heard about that. 22:29:05 Sgeo_, thanks 22:29:08 (The TLB thing.) 22:29:53 they talked about using the same trick to trap self-modifying code 22:29:55 -!- hagb4rd has quit (Quit: this statement is false). 22:30:24 is there a version of the talk that doesn't involve video or anyone talking? 22:30:26 basically, you get a page fault on each TLB miss, so you get a page fault the first time a given page is written or executed 22:30:33 slides only? not that i've seen, sorry 22:30:43 you can watch it at high speed on mute 22:30:54 automatic extraction of slides from video would be an amusing computer vision project 22:31:37 automatic extraction of kmc from #esoteric 22:31:41 yessss 22:31:48 `pastelogs kmc 22:32:04 bl 22:32:15 http://codu.org/projects/hackbot/fshg/index.cgi/raw-file/tip/paste/paste.24432 22:32:44 kmc: extracting slides from a video of a presentation seems trivial 22:32:44 ais523: You have 2 new messages. '/msg lambdabot @messages' to read them. 22:32:44 Lumpio-: bh 22:32:50 it's basically just deduplication, right? 22:33:02 assuming that each slide is shown full-frame at some point 22:33:12 blbl 22:33:13 if not then it's a little more work 22:33:14 ЫЫ 22:33:16 * elliott wonders if ais523 is saying trivial to upset kmc. 22:33:27 anyway this is why i said "amusing" and not "publishable" ;P 22:33:34 elliott: probably! 22:33:49 quintopia: yeah, I noticed that; the problem is that although it can detect that case, it's physically impossible to synchronize on it because you can't get there fast enough 22:34:00 however, not checking twice before leaving makes you vulnerable to shudder 22:34:08 huh, perhaps I should just shudder the flag in that case :) 22:34:47 kmc: Did you hear I ragequit #-blah the other day? 22:34:55 But I went back later. 22:35:02 2011-08-29.txt:00:20:56: -!- kmc has joined #esoteric. 22:35:02 2011-08-29.txt:01:22:05: suid is irredeemably broken anyway 22:35:04 kmc: great entrance 22:35:08 shachaf: what a scandal 22:35:16 haha 22:35:30 shachaf: i did not hear of this 22:35:31 [slams open doors] YOUR WHOLE WORLD IS IRREDEEMABLY BROKEN 22:35:44 *studio audience cheers wildly* 22:35:52 Well, I guess you wouldn't've. 22:37:02 whoa, dude, monochrom has evolved into Dr. monochrom 22:37:47 Sgeo_: I posted a link for you earlier 22:38:47 GreyKnight, I ... vaguely remember seeing you give me a link, but I didn't look at it I think because I knew about it already. But I forgot exactly what it was 22:38:54 elliott: does the wiki have spoiler tags? 22:39:01 that's okay, I forgot too 22:39:06 Oh! Delimited continuations 22:39:10 I answered a question about Feather, but want to hide the answer so that it doesn't blow people's brains by mistake 22:39:14 actually, I nkow 22:39:20 the answer's in the page history now 22:39:29 so I can safely delete it, and yet people who care can still find it 22:39:36 ais523: you could just not answer 22:39:58 ais523: I think as a matter of policy I must forbid making edits that are harmful to other people 22:40:00 "If you're confused by this, then I'm not surprised and don't say I didn't warn you." 22:40:12 I deleted the section 22:40:43 ais523: you should retroactively delete it 22:40:44 : D 22:40:47 : D 22:40:50 : D 22:40:59 D: overflow 22:41:02 elliott: go install the oversight extension and give me the perms 22:41:09 ais523: don't we have oversight? 22:41:11 then I /can/ retroactively delete it, so long as it's the top edit 22:41:15 we have revision hiding, it's better 22:41:21 I didn't understan it, but I think it's because I don't know Feather 22:41:24 but leaves a mention of the revisions' existence 22:41:29 I think ais523 knows more about Esolang's MediaWiki installation than I do 22:41:37 Sgeo_: are you suggesting anyone knows Feather 22:41:42 oversight is a super secret thing that can't be undone and only other oversighters are aware of the existence of the oversighting 22:41:51 it's what developers use if they need to hide the fact that something's been hidden 22:41:54 Well, at least two people have some notion of a construct =<< 22:41:57 say, on order from the WMF 22:42:26 oversight: the <<= of mediawiki 22:42:51 well, it only allows for effectively retroactive /deletion/, and even then only on the top revision 22:44:19 ais523: "this is consistent with the example you gave" Which one? Do changes from <<= only go back as far as the last =< well =<< basically produces a new object 22:44:49 think of it like .clone() in Java 22:44:49 Oh god is Feather actually being worked on 22:44:52 Taneb: no 22:44:52 x 22:44:53 Taneb: no 22:45:00 well, GreyKnight is trying to implement it, but he doesn't understand it 22:45:07 this is not surprising, because nobody else understands it either 22:45:16 2011-08-29.txt:01:42:35: i don't know what a HackEgo is 22:45:18 2011-08-29.txt:01:59:31: what does EgoBot do? 22:45:41 kmc: the bots both have a help command, and use ` and ! respectively as command prefixes 22:45:49 thanks 22:45:53 in fact, the other #esoteric bots (apart from the logging bots) have help prefixes too 22:45:54 Taneb: yes 22:45:58 err, help commands 22:46:00 remember when kmc was in #haskell 22:46:01 fungot's prefix is ^ 22:46:08 thutubot's prefix is + but it isn't normally here 22:46:10 #haskell was much better. :-( 22:46:15 ais523: hey I'm getting somewhere! 22:46:17 and lambdabot's is @ or ? 22:46:28 Pietpot's is ) but that was here once and sucked 22:46:36 And I've lost the source 22:46:48 Taneb: was it written in piet? 22:46:52 can't wait till kmc gives up on #esoteric 22:46:55 oh, one of the reason thutubot isn't usually here is that it has a bug 22:46:56 s/written/drawn/ I guess 22:46:59 GreyKnight, yes 22:47:00 that causes it to repeat everything lambdabot says 22:47:10 it's an amusing bug but gets annoying after a while 22:47:14 -!- Bike has quit (Ping timeout: 240 seconds). 22:47:50 elliott: Then I'll have to take all my offtopicness to #mosh! 22:48:06 it was worth it just for the few seconds where elliott thought I had a working Haskell interp in Thutu, though 22:48:11 (I guess technically, I /did/, but…) 22:48:29 ah so (o =<< dummy) creates a clone... that clarifies things considerably 22:48:47 GreyKnight, PietBot could join the channel and crash when you tried to run a deadfish program! 22:48:48 also, =<< doesn't take an argument 22:48:53 why are you giving it one 22:49:25 er I had an attempt at an implementation of =<< once which you said was "basically okay", and it had a dummy argument 22:49:31 >_> 22:49:38 * GreyKnight retroactively changes his notes 22:49:42 Where is documentation on Feather? 22:49:47 Sgeo_: gon't 22:49:49 *don't 22:49:58 seriously, it's better as an injoke 22:50:06 I am keeping my notes offline so as not to injure anybody 22:50:09 :( 22:50:26 I have a vague idea about Feather, but no specifics 22:51:14 GreyKnight: something I discovered a while back is that Feather is not a good cure for depression 22:51:17 I thought it would be 22:51:23 but instead I just ended up depressed /and/ confused 22:51:45 (depression <<= nil) 22:52:24 How to Good-Bye Depression 22:52:29 GreyKnight: <<= (nil =<<), hopefully 22:52:37 otherwise, when someone gets depressed again 22:52:43 they'll end up overwriting nil 22:53:23 ^prefixes -- yo ais523 22:53:29 argh 22:53:36 fizzie: FUNGOT SHORTAGE 22:53:47 oerjan: I didn't know that existed 22:53:55 `prefixes 22:53:56 Bot prefixes: fungot ^, HackEgo `, EgoBot !, lambdabot @ or ? 22:53:59 (and, of course, it needn't have, with fungot being extensible from inside itself) 22:54:14 * GreyKnight retroactively assigns to oerjan ↞ fungot 22:54:47 GreyKnight: how do you type that character with compose? or is it impossible? 22:54:49 Oh, right, I noticed the shortage but forgot to do anything. 22:55:05 -!- fungot has joined. 22:55:10 ^show prefixes 22:55:11 (Bot prefixes: fungot ^, HackEgo `, EgoBot !, lambdabot @ or ?)S 22:55:21 It seems to be combattible. 22:55:30 I don't know; it's U+219E 22:55:42 "Neutral characters do not occur in legacy East Asian character sets. By extension, they also do not occur in East Asian typography. For example, there is no traditional Japanese way of typesetting Devanagari." 22:55:53 WELL WHY NOT 22:56:30 oh, one of the reason thutubot isn't usually here is that it has a bug <-- isn't fixing the bug just a matter of checking whether the privmsg target is thutubot itself? 22:56:40 I don't think the standard compose maps have all that many arrows, just the basic ones. 22:56:50 I assume the brain exploding stuff is a joke 22:56:55 U+291B is also relevant ⤛ 22:57:36 Sgeo_: no 22:57:38 seriously 22:57:48 I gave up Feather because I became too confused 22:57:51 and slightly addicted 22:58:03 hey I found a new fountain glyph for NetHack ⥾ 22:58:10 GreyKnight: that's not new 22:58:14 I think Un actually uses it 22:58:16 :< 22:58:24 -!- DHeadshot has quit (Read error: Connection reset by peer). 22:58:38 -!- DHeadshot has joined. 23:01:18 -!- Gracenotes has quit (Ping timeout: 264 seconds). 23:03:05 -!- Gracenotes has joined. 23:04:14 -!- Taneb has quit (Quit: Leaving). 23:08:40 -!- sebbu has quit (Read error: Connection reset by peer). 23:10:16 okay time for sleep I think 23:10:36 -!- sebbu has joined. 23:11:05 -!- GreyKnight has quit (Quit: zzz). 23:15:12 -!- Arc_Koen has joined. 23:26:05 -!- WeThePeople has quit (Quit: Leaving). 23:30:30 -!- Bike has joined. 23:34:26 * oerjan devalues his sanity *MWAHAHAHA* wait is that an appropriate use of *MWAHAHAHA* 23:35:04 `quote MWAHAHAHA 23:35:06 No output. 23:35:17 shocking 23:35:36 oerjan: what's cooler: invariant functors or profuncotrs 23:35:38 profunctors 23:35:42 "choose wisely" 23:37:11 um if it is invariant, then it must be neither covariant nor contravariant, which means it's not a functor in the first place 23:37:43 wow, Feather sounds like it was designed during a salvia trip 23:37:45 this paste is great 23:38:15 thus clearly profunctors 23:38:39 oerjan: yeah but I'm lazy 23:39:59 * oerjan swats ais523 with quintopia because both comment on long-since-passed contexts ==>D: 23:40:14 oerjan: it hasn't even scrolled off my screen yet! 23:40:20 that's not long since passed! 23:40:36 oh ok 23:40:49 I wonder how kmc got enough information about Feather to decide it sounded like a salvia trip invention 23:41:14 ais523: so =<< actually takes only one argument, right 23:41:43 it takes zero plus "this" 23:41:51 which isn't called "this" but people know what I mean by that 23:42:17 right that oo thingy people keep using 23:44:23 Feather is definitely OO 23:44:29 it wouldn't meet its original design goals otherwise 23:45:11 what are its original design goals 23:52:04 Bike: Who knows, they keep getting retroactively changed. 23:52:24 i don't even know anything about feather and i'm getting sick of the time travel jokes 23:52:28 Bike: being like Smalltalk but more light-weight 23:52:49 along the way, this evolved into "looks vaguely like Smalltalk but does what it does for entirely different reasons" 23:53:01 is it still integrated with a graphical environment 23:53:07 `addquote i don't even know anything about feather and i'm getting sick of the time travel jokes 23:53:10 894) i don't even know anything about feather and i'm getting sick of the time travel jokes 23:53:48 oerjan: Hmm? 23:53:53 oerjan: Sure it's a functor. 23:54:40 shachaf: well i don't know what an invariant functor is. 23:56:01 Well, it gives you inmap :: (a -> b) -> (b -> a) -> f a -> f b 23:56:38 ais523: i assume (o =<<) <<= x will only change the cloned object, not the original o, while o =<< x after o has been cloned will change both? 23:56:40 -!- epicmonkey has quit (Ping timeout: 272 seconds). 23:57:10 oerjan: yes 23:57:14 oerjan: Comonads? 23:57:16 good, good 23:57:24 oerjan: unless the cloned object was retroactively assigned to in the meantime 23:57:43 then you only change the original because you're retroactively changing what it was before it retroactively changed 23:57:46 in the clone 23:57:56 ....oops 23:58:44 shachaf: ok i guess there's some category that's a functor of... 23:58:51 shachaf: no, feather