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 <zzo38> r5k1/1bqp2pp/1p2p1r1/3P1p2/2P5/1Q1N3n/P4PPP/R1R2B1K b - - 0 23
01:06:45 <Sgeo> I thought some spammer got in here until I saw it was zzo38
01:07:08 <oerjan> i don't think that's a valid URL
01:07:15 -!- nooga has quit (Ping timeout: 248 seconds).
01:07:27 <fizzie> Everything that glitters is not an URL.
01:07:36 <Sgeo> Spammers aren't known for always actually giving URLs
01:07:45 <Sgeo> Despite that being the sensible thing to do
01:08:14 -!- TeruFSX has quit (Ping timeout: 252 seconds).
01:11:14 <zzo38> No try it making the URL.
01:11:28 <zzo38> Tell them it is the URL.
01:13:30 <oerjan> Fiora: yo magnus is on the wikipedia frontpage :P
01:14:13 <zzo38> How often do you check the Wikipedia frontpage?
01:14:56 <oerjan> just after 0:00 UTC-ish, if i'm online then
01:16:36 <oerjan> since that is when most of the panels update
01:20:33 <oerjan> Ngô Đình Diệm sounds like the nicest guy
01:22:26 <Sgeo> Maybe I will go ahead and write mamb for Racket
01:36:37 <zzo38> Do you know of QR code implementation in TeX?
01:41:51 <oerjan> hm it should really be Élő rating >:)
01:42:37 <zzo38> oerjan: Should it be? I didn't know that.
01:43:09 <oerjan> the > means i'm not _entirely_ serious.
01:43:52 <oerjan> he was only 10 years old when he moved to the us, so probably didn't use the accents much
01:43:55 <zzo38> I am not _entirely_ serious either.
01:51:12 <Fiora> speaking of wikipedia, today's featured article
01:51:15 <Fiora> "He ultimately received over 386,000 more votes than the total number of registered voters."
01:53:02 <oerjan> as i said, the nicest guy
01:58:58 <Bike> also has an even more inglorious death than your average coup victim
02:05:13 * oerjan demands context for that statement
02:06:55 -!- TeruFSX has joined.
02:07:09 <oerjan> quintopia: i have no idea what you are referring to
02:09:32 * oerjan hits quintopia with the saucepan ===\__/
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 <lambdabot> contrapumpkin says: like yoda, I speak now
04:09:50 <HackEgo> 429) <zzo38> 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:42 <HackEgo> 343) <zzo38> Fiddle. It makes a big difference, you know.
04:11:50 <kmc> @zzo38_ebooks
04:17:13 -!- hagb4rd2 has quit (Read error: Connection reset by peer).
04:20:48 <FreeFull> What is (\f x -> f x x) commonly referred to as? Hoogle and Hayoo are failing
04:23:26 <FreeFull> Well, I was searching by type signature
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:14:22 <kmc> 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 <quintopia> someone paste me the character for bottom
05:33:00 -!- DHeadshot has joined.
05:35:05 <quintopia> Deewiant: can i get a \exists too?
05:35:46 <Deewiant> https://en.wikipedia.org/wiki/Table_of_mathematical_symbols
05:35:59 <Deewiant> I can't figure out a compose-key combo for that one
05:36:40 <quintopia> what i need is a backwards lowercase e
06:04:31 <FreeFull> join has a completely different type signature
06:05:02 <quintopia> though apparently not the same join as lambda knows
06:05:32 <FreeFull> Is the :t and > using different joins
06:05:49 <FreeFull> 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 <Sgeo_> How did I ever live without internal defines? Besides when I was in languages where there are local variables, I mean
06:17:56 <Sgeo_> But Clojure is all "use let"y, meaning more nesting
06:18:18 <Sgeo_> Whereas C# or Java or Python etc. etc. it ... seems simpler in that regard
06:18:51 <Sgeo_> And here is Scheme (and Racket), with allowing define forms inside function bodies that lexically scope the entire function body
06:19:04 <Sgeo_> Just as convenient as in those... non-lispy languages
06:20:03 <Bike> why does scheme use internal defines instead of just letrec?
06:20:29 <Sgeo_> I don't know about Scheme in general, but Racket converts internal defines to letrec I think
06:21:42 <Sgeo_> It's nice syntax sugar?
06:22:01 <kmc> scheme's define is weird
06:22:09 <kmc> it's like an assignment but also not
06:22:22 <Sgeo_> Also it means you can write a function for internal use using define's () shortcut for defining a procedure
06:22:34 <kmc> yes, that's nice
06:22:47 <kmc> let doesn't support that sugar, right? no reason it couldn't, in principle
06:23:00 <Bike> as i understand define only actually works at (for?) the toplevel, and anywhere else it's just letrec
06:23:00 <kmc> (let (((f x) (* x 2))) (f 3))
06:31:44 * FreeFull prefers haskell for his functional programming nowadays
06:46:37 <Sgeo_> Even if let had that, I'd still prefer the lack of nesting given by internal defines
06:47:22 <Sgeo_> FreeFull, I want macros. And also changing code at run-time, but that last part means I should probably be wary of Racket
06:51:48 <kmc> just because Scheme and Haskell are both "functional languages" is no reason to pick only one
06:51:53 <kmc> they are very different languages
06:52:05 <kmc> i might as well say "i prefer python over scheme for my dynamically typed programming"
06:52:19 <kmc> "functional language" is never a very well defined category anyway
06:52:23 <kmc> rant rant rant
06:52:36 <Bike> kmc have you heard about this thing "structured programming" that's all the rage
06:52:52 <kmc> goto 4 lyfe
06:53:28 <Bike> people argued about goto being structured even. guess it's just something programmers do a lot
06:53:31 <coppro> kmc: syntax error, unexpected "lyfe"
06:53:33 <Sgeo_> 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 <kmc> we have noticed
06:58:08 -!- hagb4rd has joined.
06:59:07 <kmc> "How to run computation without ever dispatching an instruction: life on the edge of the double-fault"
07:00:54 <Sgeo_> I never have any idea if kmc is quoting something or making something funny up
07:01:03 <kmc> this is from a 29C3 talk
07:01:16 <kmc> this one http://events.ccc.de/congress/2012/Fahrplan/events/5265.en.html
07:01:32 <kmc> you can download the video; i am watching it now
07:02:15 <Sgeo_> Maybe later. I hope I remember, it sounds interesting
07:02:19 <Sgeo_> I don't know much about hardware
07:03:01 <kmc> "hardware" is such an arbitrary line these days
07:03:13 <kmc> there is a particular abstraction layer where it makes sense to talk about these things
07:03:27 <kmc> if you don't know much about that layer, it will be hard to follow
07:05:00 <Deewiant> 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 <Sgeo_> kmc, I don't see a download link there :(
07:10:36 <kmc> http://events.ccc.de/congress/2012/wiki/Documentation
07:10:43 <kmc> i didn't link directly because there are various formats
07:11:12 <Fiora> kmc: wait, without ever dispatching an instruction?
07:12:45 -!- WeThePeople has quit (Quit: Leaving).
07:16:13 <kmc> i won't spoil it but you should watch the talk :)
07:16:53 -!- WeThePeople has joined.
07:17:06 <Fiora> where's the download link?
07:17:51 <kmc> Sgeo_ just asked that
07:18:00 <kmc> there are various ways to get the video, listed at http://events.ccc.de/congress/2012/wiki/Documentation
07:18:09 <Fiora> oh <_> I can't read
07:18:25 <Sgeo_> A lot of the other talks sound interesting too
07:18:33 <kmc> i torrented them; i don't know which mirror is the fastest
07:19:11 <Fiora> oh god all this stuff looks so interesting @_@
07:21:08 <Fiora> wow the torrent is fast
07:21:36 <Sgeo_> 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 <Fiora> that's true. I don't know enough german for those :<
07:23:57 <Fiora> ich bedaure fast alle meine Deutsche Vokalbeln fergessen
07:25:39 <Fiora> Bike: "turing complete trapping" <-- you should watch this XD
07:26:44 <kmc> 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 <kmc> that's really cool
07:28:36 <ion> kmc: Yeah,
07:28:39 <ion> [ 0.000000] Notice: NX (Execute Disable) protection missing in CPU!
07:28:41 <ion> [ 0.000000] NX (Execute Disable) protection: approximated by x86 segment limits
07:28:52 <kmc> that is a different emulation
07:29:25 <kmc> the talk discusses that as well
07:29:38 <kmc> it's bad because you get only 1.5 GB address space for code and data each
07:29:50 <kmc> 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 <kmc> ion: you have some old machine handy i see :)
07:30:38 <ion> kmc: Yeah, my puny home server that’s slowly dying.
07:31:22 <Fiora> ... traps write data to the "stack" ... you can set the "stack" wherever you want, including inside the page tables ...
07:31:24 <kmc> ion: you're running a PaX kernel?
07:31:26 <Fiora> that is. magnificent
07:32:14 <ion> kmc: Nope, i skimmed over the channel talk (including your message) a bit too quickly and missed “PaX”.
07:33:04 <kmc> it seems mainline linux got this emulation, then
07:33:16 <kmc> but i bet they don't do the crazy split TLB emulation
07:33:17 <ion> 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 <kmc> oh nice, i forget that torrents can be distributed via RSS :)
07:33:35 <ion> kmc: I think this emulation is based on PAE.
07:33:39 <Fiora> "trap oriented programming"
07:34:10 <Bike> so is this a "watch for horror" thing or a "watch for interest" thing or... why am i even askin
07:34:13 <kmc> ion: how's that?
07:34:16 <ion> Crap oriented programming
07:34:18 <kmc> watch because it's fucking cool
07:34:29 <kmc> it's mostly about *useful* crazy hacks
07:34:42 <kmc> 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 <kmc> there are direct HTTP download links as well
07:35:33 <Fiora> wow, OllyBone's trick
07:35:34 <Bike> "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:47 <kmc> german hackers
07:36:13 <ion> 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 <Bike> do i need video or can i just get the mp3s to listen to
07:36:57 <Bike> powerpoint, my nemesis.
07:36:58 <Fiora> the torrent is crazy fast, don't worry about it
07:37:09 <Bike> i was just thinking i could listen to them at work.
07:37:29 <monqy> at least there's mp3s on this http mirror i'm looking at
07:37:48 <Bike> i meant, am i going to miss anything by not getting the video.
07:38:33 <Fiora> ooh, it covers how they reverse engineered skype and got past its anti-debugger stuff
07:38:37 <Fiora> using this kind of stuff
07:39:11 <Bike> "en-howto_hack_the_law_mp3.mp3"
07:39:28 <kmc> ion: if you had NX bit via PAE then it wouldn't say "NX protection missing in CPU"
07:39:30 <Fiora> he hacked the law and the, the law won, he hacked the law and the, the law won
07:40:02 <Bike> well, i suppose i can't not start with the one about tamagotchis
07:40:06 <kmc> PAE is the one and only way to have a true NX bit on 32-bit x86
07:40:12 <Fiora> start with the paging thing XD
07:40:26 <kmc> and arguably on 64-bit, since the 64-bit page tables are an extension of the PAE ones
07:41:22 <olsner> wow, how do you use the TLB to emulate NX?
07:41:32 <ion> kmc: Hmm, good point.
07:41:33 <kmc> (but that's a core part of AMD64 architecture, not an extension)
07:41:34 <Fiora> there's separate instruction and data TLBs
07:41:43 <Sgeo_> Hmm. Racket structs are more interesting then I thought. It _almost_ makes me want to forgive them for their OO system
07:41:45 <ion> https://wiki.ubuntu.com/Security/Features#nx
07:42:53 <Fiora> oooh they're talking about memory segments
07:42:55 <ion> 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 <Bike> Sgeo_: what's wrong with the oo
07:43:55 <kmc> 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 <Fiora> "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 <Sgeo_> 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 <kmc> and this gives you an opportunity to check if the access was actually an attempt to execute data memory
07:44:52 <kmc> by checking if the instruction pointer == faulting address
07:44:58 <Sgeo_> Also, you typically use a piece of syntax to call a method
07:45:01 <Fiora> but wow, this is brilliant. using 286-style segmentation to implement NX on a modern machine
07:45:03 <Bike> Sgeo_: class-based meaning not message passing based?
07:45:20 <kmc> well modern machine has NX
07:45:27 <kmc> that's more like "pre 2005 machine"
07:45:35 <Sgeo_> Bike, I .. wasn't aware those were connected. Smalltalk is class-based and message passing
07:45:35 <Fiora> something like that yes >_<
07:45:39 <kmc> 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 <olsner> right, so every tlb miss (for an NX page?) ends up being a page fault? sounds expensive
07:45:50 <Fiora> it is ;-; I feel old
07:45:54 <Bike> Sgeo_: well i don't know what you mean by "class-based". not prototype-based?
07:46:03 <Sgeo_> Bike, yes. Not prototype-based
07:46:26 <Bike> has anyone written a more interesting one?
07:46:36 <Sgeo_> For Racket, or in general?
07:47:07 <kmc> olsner: yes i think so
07:47:09 <Sgeo_> I think so, but it's part of some larger thing
07:47:13 <olsner> 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 <kmc> that's useful
07:47:34 <Sgeo_> It doesn't seem well documented
07:48:14 <Sgeo_> 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 <Bike> scheme's had TELOS and whatever in the past, some of those have probably been ported to racket
07:48:36 <olsner> 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 <Sgeo_> What good is it if it's not well documented
07:48:53 -!- sebbu has quit (Ping timeout: 245 seconds).
07:48:55 <kmc> yeah that's true
07:49:21 <kmc> i would be interested to know what the performance penalty is
07:49:25 <kmc> let's see if they say
07:49:44 <olsner> 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 <Sgeo_> Also, I don't know if Swindle's basic syntax extensions are needed to use the OO stuff well
07:51:07 <kmc> soft-filled TLBs are so much nicer, but apparently they always perform terribly
07:51:08 <Sgeo_> (have to use modified define syntax, I mean)
07:51:10 <Bike> so uh, which of these talks are you talking about
07:51:14 <Bike> 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 <Sgeo_> Bike, presumably page fault liberation army
07:51:39 <Bike> oh, that's not on this page...
07:52:01 <Sgeo_> How much of this will be understandable to someone not very familiar with memory ... mapping ... wahtever this is
07:52:10 <kmc> 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 <Bike> oh, it's in the mp4s but not the mp3s. grand.
07:52:30 <Fiora> ohhhh, thta's the reason they didn't like using segments for this, because of the overhead
07:52:36 <Fiora> I knew about the overhead, I was wondering when that would come up
07:52:41 <kmc> Sgeo_: probably not very
07:52:42 <Fiora> since modern intel chips do not make segments fast at all <_<;
07:52:48 <Fiora> I think it's like 1 extra cycle for every memory load
07:52:49 <kmc> they breeze through an intro
07:53:01 <Sgeo_> Ok, ok, I'll try then
07:53:19 <Fiora> Sgeo_: um... it'd probably be good if you knew like how pages work
07:53:20 <kmc> maybe read this http://www.cs.cmu.edu/~410/doc/segments/segments.html
07:53:24 <Fiora> like at the level of a college cs class
07:53:39 <kmc> just watch the talk and ask questions here if you're confused
07:54:07 <kmc> well not always
07:54:30 <kmc> 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 <kmc> that's always really frustrating on both ends
07:54:53 <kmc> it might be hard to understand paging without knowing what it's typically used for
07:54:57 <Sgeo_> in 8 minutes I'll be able to watch
07:55:45 <kmc> 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 <Sgeo_> Also, I have taken an OS class, although we didn't learn x86 specific stuff really
07:56:07 <Fiora> this assumes like the high level paging knowledge, not the x86-specific knowledge, I think
07:56:10 <Sgeo_> And our homework assignments were on a CPU simulator of sorts
07:56:15 <Fiora> like, the presentation is basically -about- all the x86 stuff they don't teach you
07:56:22 <kmc> 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:09 <kmc> 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:46 <kmc> so paging is far more flexible, and most processors have only paging, so most OSes use only paging
07:57:55 <kmc> they configure x86 segmentation in a vestigial mode which that document also describes
07:58:10 <kmc> but segmentation is still useful for particular things, some of which this talk discusses
07:58:51 <kmc> 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 <Fiora> .... oh *wow*. that is magnificently evil my gosh
07:59:48 <Fiora> 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 <Fiora> so the dtlb is lied to about the page's actual state
08:00:02 <Fiora> and then when the itlb fetches it later, it faults
08:00:43 <Fiora> thus making the itlb and dtlb disagree even though they weren't supposed to
08:00:58 <Sgeo_> Fiora, will that be understandable to me when I see it in the presentation?
08:00:59 <kmc> (by "most processors have only paging" I meant most architectures... x86 always has segmentation as well, even in modern chips)
08:01:09 <kmc> Sgeo_: you need to know what the TLB is as well, which they kind of gloss over
08:01:16 <kmc> but it's just a cache for the page tables
08:01:34 <Fiora> yeah, the TLB is just a cache for page table info so the cpu doesn't ave to constantly fetch it
08:01:34 <kmc> it would be really inefficient if every memory access required several other memory accesses to read these page tables out of memory
08:01:48 <Fiora> the itlb is for instructions, dtlb for data, there's two separtae ones
08:01:58 <kmc> 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 <Sgeo_> I feel so ignorant :(
08:02:24 <kmc> when you change page tables you're supposed to tell the CPU so it can flush the TLB
08:02:32 <kmc> but this is a cool trick you can play if you don't
08:02:53 <Fiora> 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 <Fiora> which stops you from executing a data page.
08:03:05 <kmc> (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 <kmc> fwiw I find this talk a lot easier to watch at slightly higher than normal speed
08:03:53 <kmc> most talks, really
08:04:05 <zzo38> But it is useful to execute data pages!
08:04:10 <kmc> 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 <kmc> zzo38: yes, it's particularly useful to attackers
08:04:53 <zzo38> kmc: Not what I meant though; I meant for programming.
08:05:32 <kmc> zzo38: you might like the talk about the Galaksija computer
08:05:33 <zzo38> There are better ways to secure a system.
08:05:42 <Fiora> zzo38: you can execute data pages even on an NX system, I think
08:05:48 <Fiora> you just have to explicitly ask the OS for it
08:06:10 <kmc> sure, the OS can enforce a policy against it, or not
08:06:13 <kmc> Linux typically does not
08:06:29 <kmc> ROP payloads often end with calling mprotect() to set some page RWX and then you win.
08:06:54 <kmc> i think PaX has a mode to forbid that, though
08:07:09 <Fiora> I guess then you'd have to whitelist programs that use JITs?
08:07:25 <kmc> yeah, it can store per-executable exceptions in an ELF header
08:07:38 <kmc> or your JIT can be carefully coded so that no page is writable and executable at the same time
08:07:57 <Fiora> wait, but can't an exploit still work with that?
08:08:00 <kmc> mprotect can drop W and add X in the same call
08:08:09 <Fiora> Yeah, I thought that was the way people did it
08:08:42 <Fiora> or am I missing something >_<
08:08:54 <Fiora> like is there a reason that an exploit can't do that too?
08:09:15 <kmc> the exploit is not running arbitrary code yet
08:10:16 <Fiora> yeah, I always thought jits were supposed to do that (never have W and X on at the same time)
08:10:18 <kmc> 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 <kmc> a classic stack smashing exploit is an example of this
08:11:05 <kmc> W^X policy prevents the straightforward attack where you write your shellcode and then jump to it
08:11:59 <kmc> 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 <Fiora> ah so here's the code I was thinking of... I guess it does the W^X thing
08:12:45 <kmc> e.g. JIT spraying, where the shellcode is composed of bytes that the JIT intentionally wrote into a code page
08:13:05 <Fiora> c->lumMmxextFilterCode = mmap(NULL, c->lumMmxextFilterCodeSize, PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_ANONYMOUS, -1, 0);
08:13:08 <Fiora> init_hscaler_mmxext(dstW, c->lumXInc, c->lumMmxextFilterCode, c->hLumFilter, c->hLumFilterPos, 8);
08:13:11 <Fiora> mprotect(c->lumMmxextFilterCode, c->lumMmxextFilterCodeSize, PROT_EXEC | PROT_READ);
08:13:17 <kmc> 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 <Fiora> map R|W, init the code, map R|X
08:13:24 <kmc> and i don't know if PaX implements that one
08:13:54 <kmc> which JIT is that?
08:14:11 <Fiora> that's a really simple example since I didn't want to dig into a really fancy actual JIT
08:14:27 <Sgeo_> I keep pausing to look stuff up
08:14:28 <Fiora> swscale has the ability to runtime-generate an mmx image rescaling algorithm
08:14:48 <Fiora> which to me is just O_____O
08:15:05 <Sgeo_> This is really making me wish I took CS
08:15:13 <Sgeo_> Would CS talk about this stuff?
08:15:13 <Fiora> (generate based on the input and output resolutions and number of taps etc I think?)
08:15:19 <Sgeo_> Or still just turing machines and the like?
08:15:42 <Bike> what is "CS" in this context
08:15:45 <kmc> are you talking about some specific course or just a CS program in general?
08:15:56 <Sgeo_> CS program in general
08:15:57 <Fiora> 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 <kmc> most university CS programs offer a variety of classes from theoretical to practical
08:16:10 <Bike> i would think any cs program worth its salt goes over these things in addition to algorithmics (jazzarithmics)
08:16:18 <Fiora> there were some electives for really icky low level things like filesystems and networks and OSs
08:16:19 <kmc> any decent one will have some kind of intro systems course which covers paging and what-not
08:16:22 <Bike> whether you remember it or not is another matter
08:16:24 <Fiora> and by icky I mean wonderful
08:16:26 <kmc> it may or may not be required
08:16:49 <Bike> so, you weren't a CS major?
08:16:58 <Sgeo_> "Computer Programming/Information Systems"
08:17:02 <kmc> 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:05 <kmc> it was pretty weird
08:17:19 <kmc> then the advanced systems class involved making changes to an actual Linux kernel
08:17:29 <kmc> a ton of code reading, very little code writing
08:17:47 <kmc> kind of crazy to do an assignment where you spend 20 hours and then turn in 20 lines of code
08:17:57 <olsner> that sounds actually useful
08:17:59 <Sgeo_> kmc, grad or undergrad?
08:18:09 <Bike> as far as i can tell from fiora's mailing list stalking that's how most actual linux patches work
08:18:11 <kmc> undergrad elective, with some grad students in the class as well
08:18:19 <Sgeo_> And there's no way I could get into a grad CS program, is there
08:18:22 <kmc> http://pdos.csail.mit.edu/6.828/2012/ is a very cool upper level OS class at MIT
08:18:30 <kmc> the labs are online
08:18:47 <kmc> you need to be pretty comfortable with C to do this class
08:18:49 <Bike> 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 <kmc> but maybe you can learn the OS-specific stuff as you go
08:19:56 <zzo38> I want to make the computer which includes security by simplifying instead of by overcomplicating things.
08:22:02 <olsner> neat that they use git to hand in the lab assignments
08:22:47 <kmc> yes, it is nice
08:23:08 <kmc> you can merge the TA handout for the next lab with your solution to the previous one
08:23:19 <kmc> it also means more students are exposed to Git
08:24:36 <kmc> 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 <Fiora> I think we used svn in a few classes
08:24:46 <kmc> in some sense it's not their job to teach those things to you
08:25:05 <kmc> but even nudging people in the right direction is a win
08:25:11 <Bike> "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 <kmc> it's terrifying how many programmers don't use version control at all
08:25:19 <Bike> it's kind of hard to disagree with...
08:26:02 <kmc> to me CVS and SVN are almost totally different in purpose from Git, Darcs, etc
08:26:23 <kmc> the former are useful for collaborating with others, but not much else
08:26:32 <kmc> the latter are pervasive tools that help with every part of workflow
08:27:01 <Sgeo_> I tried to get us to use version control on Senior Project
08:27:03 <kmc> collaboration but also debugging, testing, etc
08:27:20 <Sgeo_> But the server move did not go smoothly for the .hg stuff, so I sort of just gave up
08:27:29 <Bike> i'm bad at git but git bisect seems pretty incredibly useful
08:27:43 <kmc> 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:57 <Bike> "git-bisect - Find by binary search the change that introduced a bug"
08:27:57 <kmc> doing these things with svn sounds like a huge pain
08:28:10 <Fiora> oh no did I start a git vs svn flamewar
08:28:11 <kmc> maybe it's cause i never learned svn very well
08:28:24 <kmc> no i don't think anyone disagrees that git is better ;P
08:28:29 <Bike> Fiora: just kmc ranting, which is fine with me for one
08:28:41 <kmc> i'm just explaining why I think of Git as a different kind of tool from SVN
08:28:55 <Fiora> Bike: that works XD
08:29:01 <kmc> troll mode: using SVN is no better than keeping your code in Dropbox
08:29:03 <Deewiant> There's an svn-bisect as well; the checkouts tend to take longer than the bug-checking
08:29:06 <kmc> sure, it's better than nothing
08:29:08 <Bike> 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 <Sgeo_> How well do I need to know traps
08:36:36 <Sgeo_> Do I need to know every trap that could be .... called or triggered or whatever
08:36:39 <Fiora> this thing explains allabout traps, so um, it should be okay
08:36:56 <kmc> the main one is page faults
08:37:49 <kmc> 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 <kmc> 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 <Fiora> wow. the fault chaining using the task switch thing @___@
08:41:50 <Fiora> oooh. they implement a turing tarpit with decrement-branch-if-negative
08:41:59 <kmc> see, this is totally on topic :)
08:42:18 <Jafet> It was already on topic with linux
08:42:58 <kmc> 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 <kmc> 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 <Jafet> 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 <Fiora> "I wanted to implement a game of life that operated on your VGA framebuffer without using any instructions"
08:46:14 <Jafet> Has there been only one bug in the intel hypervisor?
08:46:19 <Jafet> I thought there were more
08:47:23 <Fiora> "cause KVM to kernel panic the host" XD
08:48:01 <Jafet> @google conway life stencil buffer
08:48:02 <lambdabot> http://www.blitzbasic.com/Community/posts.php?topic=53803
08:48:02 <lambdabot> Title: Stencil buffers are for life (not just xmas!)
08:48:37 <Deewiant> https://github.com/munificent/vigil - Vigil, a very safe programming language
08:49:03 <kmc> Jafet: that's cool
08:49:24 <Jafet> "Vigil is very similar to Python"
08:49:33 <kmc> http://www710.univ-lyon1.fr/~jciehl/Public/OpenGL_PG/ch15.html#id40152
08:50:20 <Fiora> huh, 64-bit kills most of this. makes sense though
08:51:08 <Fiora> that was an incredibly cool talk, thanks kmc
08:52:28 <Sgeo_> I'm still only 12 minutes in
09:04:53 <Sgeo_> I guess if I'm going to be a Racketeer, I should read some of Oleg's thoughts on Scheme
09:05:39 <Sgeo_> "We shall see that our code looks pretty much like the above, only with more parentheses."
09:05:53 <Sgeo_> 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:54:00 -!- Gracenotes has quit (Ping timeout: 265 seconds).
11:55:11 -!- Gracenotes has joined.
12:04:55 -!- Gracenotes has quit (Ping timeout: 240 seconds).
12:04:55 <Sgeo_> 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 <nooga> Sgeo_: this one is quite entertaining: http://www.bernhard-baehr.de/pdp8e/resources/pdp8e_simulator_cocoa_preview_screenshot.jpg
12:21:54 <nooga> programming that is horrible
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 <Sgeo_> 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 <Sgeo_> kmc, oh hey, Swindle does that thing with let
14:38:12 <Sgeo_> => (let ([((f x) y) (+ x y)]) ((f 1) 2))
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 <nooga> I'm trying to think about implementing a small language for 6502 processor with 64kB RAM
14:54:54 <nortti> nooga: what kind of language?
14:55:47 <nooga> something small and relatively expressive
14:57:06 <nooga> something lispy could be cool
14:59:55 <nooga> I've got C cross-compiler
15:00:15 <nooga> but I wanted something self hosted
15:06:10 <Taneb> Something like Scheme?
15:13:15 -!- Sanky has joined.
15:21:12 <nooga> C++ and ada are perfect
15:21:45 <nooga> i think i'll make something between C++ and Ada and throw some bits of perl into this
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 <Taneb> The 21st century so far has been a weird thing to grow up in
15:43:47 <shachaf> Aren't we into the 22nd century by now?
15:44:50 <shachaf> Hmm, the 21st century started after less than a decade.
15:44:58 <shachaf> And we've had more than a decade since then.
15:51:52 <Taneb> Nah, it took a century for the 21st century to start, after the 19th
15:52:17 <shachaf> Uh, the world hasn't been *around* for a century.
15:52:39 <Taneb> That's just what they want you to think, shachaf
15:52:46 <Taneb> The world has been around for 6000 years!
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 <c00kiemon5ter> 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 <boily> I'm allergic to COBOL chips. can I have some without?
16:25:54 <c00kiemon5ter> maybe bioly exists in the subconscious memory subsystem where COBOL is not allowed to read or write
16:31:20 <boily> meaning my self exists in a recursive collective subconscience?
16:31:47 * boily pokes himself to test his tangibility
16:31:51 <ais523> boily: oh, that much is /obvious/
16:32:56 <boily> 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:36:34 <Taneb> 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 <elliott> fizzie: Do you know anything about Borland Turbo C?
18:02:11 <elliott> Specifically do you have a copy.
18:02:14 -!- mig22 has quit (Ping timeout: 240 seconds).
18:04:24 <fizzie> 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 <elliott> fizzie: Do you feel like helping me prove someone wrong?
18:04:57 <Deewiant> elliott: http://www.retroarchive.org/dos/lang/index.html
18:05:13 <elliott> Deewiant: Um, that is like 10x less authentic than asking fizzie to do it.
18:05:55 <fizzie> My copy, if I could locate it, would very likely be that exactly same zip file.
18:06:05 <elliott> But what colour would the bits be?
18:07:35 <elliott> fizzie: Also you probably have a more readily accessible DOS than I do!
18:08:15 <fizzie> What do you need proven wrong, though?
18:08:27 <shachaf> If you use dosbox, make sure you let kmc prepare your archive.
18:08:51 <kmc> how similar are borland and watcom compilers
18:09:15 <elliott> fizzie: How random(-n) behaves
18:09:22 <shachaf> Watcom? don't they make tatblets?
18:09:28 <elliott> cf. https://github.com/rwbarton/crawl-1.1/commit/2c69471009a26d48fe02f22adf3c650d9afbb4ed
18:09:48 <shachaf> Is rwbarton/crawl similar to monqys-crawl?
18:09:48 <fizzie> I think Borland had a different DOS extender.
18:10:58 <elliott> The documentation -- http://www.ousob.com/ng/borcpp/ng4eef8.php -- isn't really specific.
18:12:26 <elliott> Deewiant: I bet you know!!
18:12:50 <shachaf> i love random number generators
18:13:56 <Deewiant> #define random(num) (rand() % (num))
18:14:28 <elliott> Um, maybe it has different semantics for %?
18:14:34 <zzo38> (rand() % (num)) doesn't seem a very good way to me.
18:15:06 <Bike> doesn't it give you a bad distribution if rand_max doesn't divide num
18:15:12 <zzo38> Since it might make some numbers more likely even if rand() is uniform
18:16:05 <shachaf> Bike: Is that how Ubuntu got so messed up?
18:16:14 <zzo38> (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 <elliott> Deewiant: (Which version is that from, by the way?)
18:17:54 <elliott> Well, there's two Borland Turbo C/C++s there.
18:17:57 <elliott> (This code is very "C/C++".)
18:18:03 <zzo38> For example if it is 2 bits then you modulo by 3, then it will be twice as likely 0
18:18:20 <elliott> Deewiant: I'll check both, thanks.
18:18:21 <Deewiant> elliott: It seems to run in dosbox, give me some test code for % if you want.
18:19:01 <fizzie> It seems to be returning positive numbers. :/
18:19:03 <elliott> printf("%d %d %d", random(-2), random(-2), random(-2)), I guess
18:19:19 <elliott> vs. um, random(RAND_MAX) % (-2) I guess.
18:19:22 <Bike> shachaf: Unity doesn't divide anything, no
18:21:06 <fizzie> 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 <shachaf> You forgot to #include conio.h
18:22:24 -!- WeThePeople has quit (Ping timeout: 260 seconds).
18:22:26 <fizzie> And a getch() at the end, I suppose.
18:22:33 <Deewiant> fizzie: Does tcc.exe work for you? "tcc asdf.c" produces "Undefined symbol '_main 'in module C0S" here.
18:23:07 <fizzie> Deewiant: Yeah, same here. I just went with the TUI; it's "Compile/Make EXE file" worked.
18:24:14 <fizzie> Deewiant: Ah, right; I probably had that problem too.
18:24:26 <Deewiant> random(-2) only produces 0 and 1, it seems.
18:24:36 -!- WeThePeople has joined.
18:26:38 <elliott> So random(-n) is just random(n), I guess.
18:26:57 <elliott> As opposed to rwbarton's -random(n).
18:28:50 <fizzie> 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 <elliott> 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:54 <fizzie> I think that was me. :\
18:30:08 <fizzie> [20:29:19] <fizzie> `interp c printf("%d %d %d %d", 12 % 5, (-12) % 5, 12 % (-5), (-12) % (-5));
18:30:11 <fizzie> [20:29:36] -!- HackEgo [codu@codu.org] has quit [Remote host closed the connection]
18:31:42 <fizzie> I haven't been following THE UNIFICATION.
18:31:44 <fizzie> [20:31:08] <fizzie> ,cc for (int i = 0; i < 10; i++) printf("%ld ", random() % (-100)); /* this is a modern Unix */
18:31:47 <fizzie> [20:31:10] <candide> fizzie: 83 86 77 15 93 35 86 92 49 21
18:31:54 <fizzie> It seems to work very much the same way.
18:32:32 <Deewiant> random() returns a long, though; maybe % works differently for int and long!
18:32:57 <elliott> So I wonder how this results in the bug itself and whether it really is present in the original.
18:35:44 <fizzie> 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:12 <elliott> So I guess the fix is just
18:37:21 <elliott> if ((int)rmax < 0) return random() % -(int)rmax;
18:37:43 <elliott> I think this might mean -2 weapons are just as good as +2 weapons, which is... something.
18:38:21 <Deewiant> Seems to me like the right fix would be to make it take a signed int. :-P
18:38:46 <elliott> Deewiant: Have you *seen* this code?
18:39:16 <Deewiant> It's certainly got a lot of comments.
18:39:46 -!- WeThePeople has quit (Quit: Leaving).
18:39:59 <elliott> https://raw.github.com/rwbarton/crawl-1.1/master/source.txt is enlightening.
18:40:04 <elliott> Some of my plans for the near future:
18:40:08 <elliott> 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 <Deewiant> What is that, the oldest version of crawl you could find or something?
18:41:31 <elliott> Deewiant: It's the oldest version of Crawl that got a public source release.
18:41:36 <elliott> The (few) older versions are just DOS binaries.
18:41:56 <Deewiant> And why is anything being done with it?
18:42:00 <Bike> "pointers, because I just didn't (and still don't really) understand what they're supposed to be so useful for"
18:42:13 <elliott> Deewiant: I wanted to see what it was like and didn't know about the DOS binaries.
18:42:36 <zzo38> Are they structs now?
18:43:16 <elliott> zzo38: In the ~16 years of development it's had since then it has figured out what classes are
18:43:49 <fizzie> 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 <zzo38> I think in C++ a class and struct are the same, isn't it?
18:44:19 <kmc> except for the default visibility
18:44:34 <kmc> class members are private by default, structs public
18:44:46 <elliott> fizzie: You might want to try with Turbo C++ instead.
18:44:50 <elliott> Since the code is, in fact, C++.
18:45:13 <shachaf> kmc: That also extends to inheriting from a struct/class.
18:45:18 <shachaf> If you don't specify public/private.
18:45:50 <shachaf> (That's a difference that can actually affect other people, so I think of it as more important.)
18:45:59 <zzo38> 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 <kmc> 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 <fizzie> "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 <kmc> it's funny how ARM and AVR and PIC and 8051 architectures invisibly outnumber x86 by probably a factor of 100
18:57:15 <hagb4rd> <zzo38>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 <kmc> even an "x86 PC" has more ARM cores than x86 cores
18:58:39 -!- WeThePeople has joined.
18:58:55 <hagb4rd> zzo38: and as consquence you have no constructors in struct
18:59:47 <zzo38> Would it allocate memory like in C, then?
19:00:28 <kmc> hagb4rd: i think you are confused
19:00:37 <AnotherTest> Hm. The only difference between struct and class in C++, is that in a struct all members are public by default
19:00:45 <kmc> there is no difference between structs and classes in terms of memory allocation
19:00:48 <AnotherTest> whereas in a class, all members are private by default
19:00:56 <kmc> "class foo { public: ... }" is exactly equivalent to "struct foo { ... }"
19:01:19 <kmc> "new" is used to allocate things on the heap
19:01:33 <kmc> e.g. instances of classes
19:01:40 <kmc> but like in C, you can also allocate these things on the stack
19:01:43 <kmc> or in global static memory
19:01:58 <kmc> class Foo {}; int main() { Foo x; ... }
19:02:16 <kmc> C++ is the only language where objects are truly first-class, rather than just references to objects
19:02:31 <elliott> are you sure "only" is true
19:02:35 <kmc> you can even pass objects by value and return them by value from functions
19:02:40 <kmc> though this is often inefficient
19:02:41 <kmc> elliott: no
19:03:06 <hagb4rd> so you use &obj to pass as reference?
19:03:18 <kmc> you would declare the parameter that way, yes
19:03:21 <kmc> when you call it, you don't use &
19:03:35 <zzo38> kmc: And that part is different from C
19:03:57 <kmc> references are... not exactly a first-class type, but you can use them in places other than function parameters
19:04:02 <zzo38> The first part, pass objects by value and return them by value from functions, is same as C.
19:04:07 <kmc> you can have local variables that are references, or class members
19:05:48 <zzo38> You are declaring an empty structure there though; is that OK?
19:06:13 <kmc> yeah, you can have empty structures
19:06:20 <kmc> though their sizeof will be at least 1
19:07:49 <zzo38> Why should their sizeof be one instead of zero?
19:08:06 <zzo38> In C will it be zero?
19:08:33 <fizzie> In the GCC extension the size is zero.
19:08:42 <fizzie> (In C it's not legal.)
19:08:53 <fizzie> (And "G++ treats empty structures as if they had a single member of type char".)
19:08:57 <kmc> C++ guarantees that &a[1] != &a[0] or something
19:09:10 <kmc> i don't remember exactly
19:09:19 <olsner> maybe &a[0] could be NaN
19:09:29 <quintopia> @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:10:42 <elliott> Deewiant: Do you happen to know where all the header files are in these Turbo C(++) distributions?
19:11:07 <Deewiant> elliott: In tc201.zip they were in disk3
19:11:27 <elliott> -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:57 <elliott> In fact all the DISK?.DSK files are 5 bytes.
19:12:08 <elliott> Heh, the contents of DISK3.DSK is: DISK$
19:12:09 <elliott> Heh, the contents of DISK3.DSK is: DISK3
19:12:28 <elliott> Oh, that's very different from tcpp101.zip.
19:15:11 -!- GreyKnight has joined.
19:15:14 <fizzie> "I'm not interpreting this C! <ragequits>"
19:15:14 <zzo38> Then what is the file for?
19:15:41 <elliott> I nominate fizzie to figure out what these tcpp101 files are.
19:15:52 <elliott> - C++! Turbo C++ offers you the full power of C++ programming,
19:15:52 <elliott> implementing the entire C++ 2.0 language as defined by the AT&T
19:15:52 <elliott> specification. To help you get started, we're also including
19:15:56 <olsner> is `quote handled by the bot that is not here anymore?
19:15:59 <elliott> - ANSI C! A 100% implementation of the ANSI C standard.
19:16:14 <fizzie> My guess (re DISK?.DSK) is marker files for a "is this disk the disk 3?" query.
19:16:23 <zzo38> When are they going to put it back?
19:16:25 <GreyKnight> 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 <elliott> fizzie: I actually meant you should figure out where random() is defined.
19:17:06 <GreyKnight> olsner: `quote is HackEgo who indeed seems to be missing
19:17:16 <zzo38> fizzie: For installing from floppy disks? Maybe it is, then.
19:17:43 <fizzie> elliott: #define random(num) (int)(((long)rand()*(num))/(RAND_MAX+1))
19:17:47 <zzo38> 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 <olsner> elliott: is that disk3.dsk file the only file on disk 3?
19:18:22 <fizzie> elliott: So it in fact *will* return negative numbers for num == -2.
19:18:28 <elliott> olsner: No, it has DISK[1234].DSK in the archive.
19:18:54 <olsner> ah, so it's all the disks combined then
19:19:34 <GreyKnight> 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 <elliott> fizzie: I guess I should just make random2 be return (long)rand()*rmax / (RAND_MAX+1) then.
19:20:14 <elliott> Or, um, does that work properly with the unsigned int argument?
19:21:03 <fizzie> 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:46 <Fiora> maybe int64_t instead?
19:21:52 <olsner> turbo c had 16-bit ints?
19:21:53 <elliott> fizzie: Though rand() does return int?
19:22:04 <elliott> Oh, but there's still 32-bit machines in the world.
19:22:48 <olsner> cool, I've never used a compiler that did that, afaik
19:23:30 <Fiora> I'm guessing compilers on 16-bit microcontrollers would use 16-bit ints?
19:23:36 <GreyKnight> nooga: how's the 6502 language coming along? This interests me
19:23:40 <elliott> fizzie: I guess rwbarton's fix is the closest to that semantics, then?
19:23:48 <Fiora> I think I remember some libraries have a fuss about being "16-bit int safe"
19:24:14 <olsner> Fiora: probably they would... I've never written C for any of them though :)
19:24:36 <fizzie> 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 <fizzie> I think SDCC uses 16-bit ints, generally.
19:25:08 <hagb4rd> 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:33 <fizzie> Even on arguably "8-bit" architectures.
19:25:58 <Fiora> the weirdest though are the architectures that don't have 8-bit types
19:26:04 <olsner> well, int has to be >= 16-bit according to the standard?
19:26:14 <Fiora> I forgot which TI DSP it was but some popular one has 16-bit as its smallest data type
19:26:23 <Fiora> so sizeof(char) is 2
19:26:29 <fizzie> Fiora: sizeof (char) cannot be 2.
19:26:36 -!- Taneb has joined.
19:26:38 <fizzie> Fiora: It will have sizeof (char) == 1, CHAR_BIT == 16.
19:26:42 <Fiora> ... it can't be? I guess... yeah
19:26:54 <fizzie> Quite a lot of DSPs go that way.
19:27:04 <fizzie> I think TI's own compiler for the C54x series did it.
19:27:15 <Fiora> so does that mean sizeof(int) is 2, even though it's a 32-bit int?
19:27:16 <elliott> fizzie: size of char is C's fundamental storage space unit, more or less
19:27:26 <shachaf> > let sizeof=id;char=16 in sizeof(char)
19:27:35 <elliott> Fiora: so that just means sizeof(int16_t) would just be 1 or whatever
19:27:56 <Fiora> yeah, I think it was the C54x I was thinking of
19:28:01 <fizzie> 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:21 <Fiora> wow, that is confusing
19:28:25 <Fiora> I didn't even know sizeof(int) could be 1
19:28:32 <fizzie> It just needs to be 16 bits.
19:28:49 <elliott> Deewiant: fizzie: Congratulations on your "props": https://github.com/ehird/crawl-1.1/pull/6
19:28:54 <GreyKnight> Fiora: some architectures have bytes that aren't 8 bits wide :-o
19:28:59 <fizzie> 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 <Fiora> GreyKnight: I knew about that! but it was usually like 9-bit chars or something
19:29:11 <Fiora> not.... 16-bit bytes?
19:29:19 <zzo38> I hope they won't remove support of ARMv2 and so on in GCC, since I intend to use that.
19:29:34 <olsner> is there an upper limit on CHAR_BIT?
19:29:43 <GreyKnight> I think there was something with 11-bit bytes... In theory there could be any number
19:29:47 <kmc> it's so so so dumb that char can be signed or unsigned
19:29:52 <elliott> There's some Cray with 32-bit chars, isn't there?
19:29:54 <zzo38> What ARM features are used in GCC when you put certain mode?
19:30:01 <Bike> what the heck is a signed char, i never got that
19:30:01 <fizzie> Fiora: AD SHARC has CHAR_BIT == 32.
19:30:11 <shachaf> The signed char/unsigned char/char thing is great.
19:30:11 <kmc> Bike: it's just a number between -128 and 127
19:30:14 <kmc> poorly named
19:30:15 <fizzie> (And probably sizeof (long) == 1.)
19:30:28 <Bike> i suppose being a "char" nowadays is ridiculous anyway
19:30:29 <Fiora> so char, short, int, and long are the same size
19:30:32 <Fiora> that's kind of magnificent?
19:30:39 <Fiora> and float, I guess, too
19:30:39 <Bike> and then some people add wchar and so on and it's all fucky
19:30:40 <GreyKnight> kmc: if you stick to ASCII then it won't matter! :o)
19:30:50 <kmc> yeah until someone exploits your program
19:31:15 -!- asiekierka has quit (Ping timeout: 248 seconds).
19:31:16 <fizzie> 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:57 <kmc> this came up in one of the exploitation wargames i played
19:32:01 <Fiora> they have all kinds of weirdnesses, I remember hearing about one that had a gazillion delay slots
19:32:02 <zzo38> Would C with unlimited numbers of char be matching any version of the C specification?
19:32:02 <elliott> DSP and DS9K share the first two latters. just saying
19:32:16 <shachaf> elliott: But not the latter two latters.
19:32:17 <GreyKnight> 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 <kmc> there was an array "int count[256]" and then it would loop over a string doing "count[*str]++"
19:32:35 <shachaf> kmc: Hey, that was level07_alt or something, wasn't it?
19:32:37 <kmc> but if you had bytes above 0x7F then it would actually corrupt the 128 words before that array
19:32:41 <shachaf> I should go back to that sometime.
19:32:47 <kmc> http://io.netgarage.org/
19:32:51 <kmc> (they moved?)
19:32:51 <Bike> 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:26 <elliott> GreyKnight: doesn't java manage to fuck up non-BMP
19:33:26 <kmc> GreyKnight: basically, you log in as user level1, there's a setuid binary that runs as user level2, you exploit it
19:33:41 <kmc> then there's another binary that runs as level3
19:33:59 <shachaf> They use some evil encoding on their website. :-(
19:34:02 <fizzie> 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 <GreyKnight> Bike: Screw 'em B-) elliott: I am not sure actually kmc: oh I see! That sounds interesting
19:34:18 <Fiora> "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:30 <fizzie> (I don't recall if it actually has sizeof (void *) > sizeof (int *); I think not, it was just some bits.
19:34:53 <Fiora> fizzie: is that actual legal? can differently typed poiners have different sizes?
19:34:54 <elliott> Just use 128-bit chars and set sizeof(everything) = 1.
19:35:03 <fizzie> Fiora: Sure, it's legal.
19:35:23 <shachaf> elliott: What about my 256-bit variables?
19:35:39 <Fiora> But the language still has to be able to convert them, right?
19:35:43 <elliott> Fiora: They can have different representations, I think.
19:35:49 <fizzie> Fiora: (Though void * and char * must have the same representation; as do pointers to any struct; and some other similar exceptions.)
19:35:50 <zzo38> But is sizeof(void*)<sizeof(int*) OK?
19:36:11 <kmc> GreyKnight: yeah it's a really fun game
19:36:18 <fizzie> 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 <kmc> there's a lot of variety actually
19:36:43 <zzo38> fizzie: O, OK, I didn't think of that way
19:36:46 <Fiora> I'm now imagining using that whole rule for tagged pointers
19:36:47 <kmc> some of your standard binary exploitation, some reverse engineering, some developing exploits for real (old) software, some programming weir machines
19:36:51 <zzo38> But yes I suppose it can work.
19:37:52 <shachaf> How do I git-show the second commit in the list git-log gives me?
19:37:54 <GreyKnight> kmc: I like how you can add stuff to a file that is pushed to the website (dodgy javascript aside)
19:37:59 <fizzie> 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:39:12 <Fiora> variable instruction length + delay slots sounds like an insane combination
19:39:23 <kmc> 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 <fizzie> 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 <Fiora> how big are the C54x instructions, 2/4 or 4/8?
19:40:53 <fizzie> Mostly they're one word (16 bits), so the delay slots are two words following the branch.
19:41:07 <kmc> that is awkward
19:41:18 <Fiora> oh, so it's just like thumb-2
19:41:56 <Fiora> "40-bit arithmetic logic unit, including a 40-bit barrel shifter and two independent 40-bit accumulators" 40-bit o_O
19:41:58 <GreyKnight> kmc: maybe we should do something esolangy along these lines :-)
19:42:29 <Fiora> is that for floating point MAC or something?
19:42:31 <shachaf> Every buggy program is actually an esolang where the only way to get things done is to exploit it.
19:42:32 <fizzie> Fiora: The fixed-point DSPs often have larger-than-word-size accumulators so that you have some extra headroom.
19:42:41 <fizzie> Fiora: (It doesn't do anything floating.)
19:42:51 <GreyKnight> shachaf: I was thinking something to do with nested Turing tarpits?
19:42:52 <Fiora> what about the 17 bit multiplier?
19:43:38 -!- copumpkin has quit (Ping timeout: 252 seconds).
19:43:54 <Fiora> " Single-instruction repeat and block repeat operations" wow, it has "loop" instructions?
19:44:10 -!- copumpkin has joined.
19:44:13 <Fiora> conditional stores!
19:44:18 <kmc> i think i said here before that attacking vulnerable programs is the practical application of esoteric programming
19:44:20 <Fiora> memmmove /instructions/
19:44:27 <kmc> mmmmmmmmmemmove
19:44:34 <fizzie> 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 <Fiora> I'm reading the "DSP programmer's guide"
19:45:35 <elliott> 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 <elliott> re crazy CPU architectures
19:45:52 <elliott> "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 <kmc> yes i love that one
19:46:10 <Fiora> STM #4000h,AR2 ; Load pointer to source in data memory.
19:46:10 <Fiora> STM #100h,AR3 ; Load pointer to destination in data memory.
19:46:10 <Fiora> RPT #(1024–1) ; Move 1024 value.
19:46:17 <elliott> cal variables, and trap representations."
19:46:25 <Fiora> that's how you do a 1024-byte memcpy on this chip
19:46:31 <Fiora> with the RPT instruction
19:46:43 <Fiora> er, 4096 bytes >_>;
19:46:51 <GreyKnight> 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:47:04 <fizzie> 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:13 <zzo38> http://esolangs.org/wiki/User:Ian/Computer_architectures mentions "DSPs: DSP56300 (hardware DO loops), SHARC (hardware COME FROM!!!)"
19:47:36 <Fiora> these DSPs are like
19:47:38 <Fiora> the revenge of CISC
19:47:39 <Fiora> and it's wonderful
19:48:16 <fizzie> Fiora: Have you read about the FFT addressing modes yet?
19:48:36 <zzo38> 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 <fizzie> Fiora: Some of them have kind of bit-reversed addressing modes for implementing FFT faster.
19:49:10 <elliott> Fiora: but does it have a printf instruction?
19:49:20 <Fiora> "The C54x implements division operations by using repeated conditional subtraction."
19:50:00 <Fiora> oic, these are code examples, it doesn't have a div instruction
19:50:22 <fizzie> Fiora: And pretty much all have special circular-buffer addressing.
19:50:28 <hagb4rd> is it a neuman or harvard architecture?
19:50:43 <boily> fizzie: FFT addressing???
19:50:48 <Fiora> "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 <shachaf> elliott: That AS/400 thing is indeed great.
19:50:54 * boily is positively terrified by the idea
19:50:54 <Fiora> that.... that's actually a cool idea
19:51:27 <elliott> shachaf liking something???
19:51:34 <zzo38> Circular buffer addressing seems it would be useful in many cases.
19:51:45 <shachaf> elliott: huh? i like a lot of things!!
19:52:13 <fizzie> 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:53:20 -!- Frooxius has joined.
19:53:28 <Fiora> wow. dsps are crazy
19:55:14 <fizzie> 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 <fizzie> 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 <Fiora> http://i.imgur.com/vj74U.png
19:57:04 <Fiora> ... okay, this is one category of addressing modes.
19:57:16 <fizzie> http://sprunge.us/IPHd yeah, there it is; *TMP+% is a ring buffer thing.
19:57:22 <shachaf> endofunctor in the category of addressing modes
19:58:04 <Fiora> http://i.imgur.com/bNZNx.png here's the fft one
19:58:16 <fizzie> Fiora: I hope you like the parallel instructions too; that ST B, *UDPTR+ || MPY *PPTR+, B is a single opcode.
19:58:31 <Fiora> the "do math and do an unrelated load/store at the same time"?
19:58:37 <fizzie> 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 <Fiora> that's like x86 memory operands on acid
19:59:39 <Fiora> 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 <GreyKnight> heh, the VAX MOVTC command is basically tr(1) in a single instruction :-D
20:01:56 <fizzie> 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:02:07 <Bike> as in translate
20:02:11 <GreyKnight> 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:44 <Bike> now i'm wondering if anyone's designed a "snobol machine"
20:03:02 <Fiora> fizzie: that... just.... woooow
20:03:17 <oerjan> `run echo 'like this' | tr a-z n-za-m
20:03:33 <Bike> GreyKnight: i mentioned this before, but i had a professor who wrote binary search as a vax instruction
20:03:44 <GreyKnight> fizzie, how can I also make it whistle Beethoven's Fifth at the same time??
20:03:53 <oerjan> !sh echo 'like this' | tr a-z n-za-m
20:04:03 <GreyKnight> Bike: I'm not even surprised at this point!
20:04:14 <Bike> i think POLYx is kind of famous thoug
20:04:24 <Fiora> "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 <Bike> which is a bit silly, it's not even really that complicated to evaluate a polynomial
20:04:39 <Bike> at least not compared to fizzie's bit there
20:05:02 <Fiora> this is insane and wonderful
20:05:20 <oerjan> Gregor: TELL HACKEGO HE'S FIRED FOR ABSENCE
20:05:45 <fizzie> 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 <fizzie> (Admittedly the two last operands each can only be A or B, since there's just two accumulators.)
20:06:36 <Bike> i read that * as convolution, and... i'm not sure i'm wrong? help
20:06:51 <fizzie> Sadly, it's just a product. :/
20:07:05 <fizzie> 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 <Fiora> fizzie: x86 has that one at least!
20:07:38 <GreyKnight> "NES CIC (LFSR-based PC, meaning the address of the next instruction is determined by what is basically a random number generator!)"
20:07:44 <Fiora> yay for xop and fma4
20:07:48 <Bike> GreyKnight: wat
20:08:00 <fizzie> Well, x86 also has those AES-related instructions.
20:08:07 <Fiora> x86 has rounding fixed point multiplication now too with pmulhrsw
20:08:25 <GreyKnight> Bike: from the list on http://esolangs.org/wiki/User:Ian/Computer_architectures
20:09:09 <fizzie> (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 <Bike> oh right, vax's "increment literal" addressng modes.
20:09:29 -!- WeThePeople has quit (Quit: Leaving).
20:09:48 <Fiora> fizzie: those guard bits actually sound incredibly useful
20:09:50 <Bike> "has 6 operands"
20:10:14 <olsner> 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 <Bike> «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 <Fiora> fmaddps xmm0, xmm1, xmm2, [rax+rbx*4+175232] ; yay x86
20:11:00 <Bike> man, and i thought machines not based on executing instructions were weird
20:11:05 <GreyKnight> 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:31 <Bike> "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 <Bike> "EMODH #5345.1524[r7], @mul_ext_ptr[r0], #3.141592765[r5], @int_table[r1], @frac_table[r2]" it's beautiful
20:12:06 <olsner> 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:45 <olsner> HackEgo: read the back log, we tried to use you earlier
20:13:03 <olsner> hmm, HackEgo is also the bot that makes the logs, isn't it?
20:13:08 <Bike> "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 <Bike> olsner: well codu has logs anyway, looks like. does hackego have a spy
20:13:59 <Bike> Fiora: look at callg in this list ._.
20:14:13 <Bike> in http://esolangs.org/wiki/User:Ian/Computer_architectures
20:14:16 <olsner> might be glogbot that logs
20:14:19 <fizzie> 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 <Bike> "call with general argument list"
20:14:45 <Fiora> wow, and the hardware enforces the ABI
20:14:51 <Bike> "Free Activation Group-Based Heap Space Storage" a useful instruction
20:15:31 <Bike> yes, this is hardware malloc, isn't it
20:15:37 <Fiora> "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 <Fiora> a 56-byte instruction?
20:15:56 <Bike> "hardware COME FROM"
20:15:57 <Fiora> I think if you showed that to an x86 instruction decoder engineer it might send them comatose
20:16:09 <Bike> Fiora: or give them ideas
20:16:43 <fizzie> Fiora: Also fancy: conditional SIMD: http://everything2.com/title/FirePath
20:16:51 <Bike> http://publib.boulder.ibm.com/infocenter/iseries/v7r1m0/index.jsp?topic=/rzatk/mitoc.htm jesus this whole thing
20:16:52 <fizzie> (Includes a nice snippet.)
20:17:16 <Bike> "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 <Fiora> "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 <Fiora> they're /registers/ instead of bits in the instructino
20:17:55 <Fiora> so it can be changed on runtime
20:18:07 <Fiora> and I thought the vector units on the PS2 were insane @_@
20:18:17 <Bike> a hardware compression instruction, that can use of one two algorithms
20:18:31 -!- sebbu2 has changed nick to sebbu.
20:18:32 <Fiora> (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 <GreyKnight> instructinos are instructions that interact only very weakly with processors
20:19:05 <Fiora> (4 floats per vectorish I think)
20:19:08 <Bike> " the supercharged bastard son of ARM"
20:19:10 <fizzie> 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 <Taneb> Did anyone ever find the mysterious Mondrian language?
20:19:48 <Taneb> There are about three references to it on the internet
20:19:58 <Fiora> how had I not heard of Sophie Wilson ;-;
20:20:07 <Fiora> she designed ARM, woow
20:20:18 <Bike> "Materialize Authorized Users (MATAUU)" what the fuck is this machine even for
20:20:57 <Bike> ha, variable length nop
20:21:11 <GreyKnight> 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 <fizzie> There are "official" (FSVO) variable-length NOP lists for x86 too, in the manuals of both AMD and Intel.
20:22:15 <Bike> fizzie: well it's not really variable length so much as nop with an operand indicating how many bytes to skip
20:22:24 <fizzie> That's also called a jump. :p
20:22:28 <Bike> oh hey it's ebcdic based
20:22:30 -!- WeThePeople has joined.
20:22:49 <Bike> fizzie: nope it's called "NOOPS"
20:23:01 <fizzie> Bike: What does the "NOOBS" instruction do?
20:23:18 <Bike> quit if the current user isn't properly authorized probably
20:23:26 <Bike> this does have user control stuff in hardware
20:23:38 <Fiora> and that's... an instruction?
20:23:42 <Fiora> that's... kind of terrifying
20:24:03 <Bike> «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 <fizzie> 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 <Bike> Fiora: huh, she was on proto-EIDOS's board, too. cool
20:25:04 <olsner> I wonder what all that "materialization" stuff is about
20:25:29 <Bike> "Speed up CALLx and POLYx just to anger VAX detractors who don't follow Moore's Law" ok
20:25:54 <Bike> "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 <GreyKnight> 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 <Bike> maybe i should go stare at dataflow processors now
20:28:06 <Bike> or that neuro stuff
20:28:54 <fizzie> 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 <elliott> kmc: you know things about terminals right
20:29:42 <Bike> fizzie: didn't the vax just use the same method anyway but make the whole chain one instruction
20:30:02 <kmc> elliott: some
20:30:11 <Bike> anything more complicated than horn's method probably isn't worth implementing in hardware
20:30:20 -!- etb has left.
20:30:23 <elliott> kmc: what's up with character width
20:30:37 <Bike> wow i got that name wrong. whatever
20:31:07 <fizzie> 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 <fizzie> (Presumably with a post-increment Smem operand so that it'll keep loading different coefficients.)
20:31:40 <fizzie> (And T is where you put 'x' into.)
20:32:33 <kmc> elliott: i know, right
20:32:38 <kmc> seriously though, what's your question
20:32:52 <GreyKnight> "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 <fizzie> (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 <elliott> kmc: that more or less is my question
20:32:59 <kmc> afaik there are only 3 possible widths as reported by wcwidth()
20:33:04 <kmc> plus -1 for unknown character
20:33:18 <elliott> well I am so used to thinking of a terminal as a grid
20:33:26 <elliott> but that does not really seem to work when you introduce this stuff
20:33:31 <kmc> but the "east asian width" character property defined on unicode takes on more values
20:33:36 <elliott> (and also the fact that lines have endings rather than just being padded out by spaces I guess)
20:33:43 <fizzie> (I mean RPT #7; naturally "RPT #X; Y" repeats Y (X+1) times.)
20:33:50 <kmc> (full, half, wide, narrow, ambiguous?)
20:34:05 <kmc> probably due to roundtrip concerns with other encodings
20:34:08 <kmc> elliott: yeah
20:34:19 <kmc> i think basically the wide character lives in the first of the two cells
20:34:31 <kmc> and then whatever's in the second cell is irrelevant?
20:34:48 <kmc> 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 <kmc> if the Y comes back or not
20:35:00 <kmc> KeithW in #mosh probably knows
20:35:05 <kmc> he has a hobby of torturing terminals
20:35:27 <elliott> basically I am trying to write a terminal graphics library for Haskell (like ncurses but hopefully not shit)
20:35:36 <zzo38> I don't like those features of Unicode
20:35:50 <elliott> 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 <elliott> i.e. you can say "ok, render this bit beside this other bit" etc. and it all works reasonably
20:36:08 <zzo38> Perhaps write the library, either to ignore Unicode, or to have an option to turn it off
20:36:13 <elliott> but terminals not being grids is sort of getting in the way of this
20:36:27 <elliott> so I am not really sure what semantic model I should be using
20:36:37 <Taneb> Sounds like a text-based diagrams
20:37:46 <elliott> yes I quite like diagrams' design
20:39:11 <elliott> 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 <kmc> interesting
20:39:49 <elliott> 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 <zzo38> 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 <zzo38> (MZM is not limited to CP437 either, but it does require 8-bit character encoding.)
20:41:27 <oerjan> @tell nooga <nooga> i'm not banned <-- DID YOU EXPECT TO BE?
20:42:10 <zzo38> (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 <kmc> you can talk to keith about the terminal state data type in mosh
20:42:59 <GreyKnight> what's ZEUX encoding and how does it solve the problem?
20:43:47 <kmc> i think it stores the same wide character in both cells
20:44:04 <kmc> no, i'm wrong
20:44:17 <zzo38> GreyKnight: It makes it so that you don't have to worry about wide characters
20:44:17 <kmc> if ( chwidth == 2 ) { /* erase overlapped cell */
20:44:17 <kmc> if ( fb.ds.get_cursor_col() + 1 < fb.ds.get_width() ) {
20:44:17 <kmc> fb.reset_cell( fb.get_mutable_cell( fb.ds.get_cursor_row(), fb.ds.get_cursor_col() + 1 ) );
20:44:33 <zzo38> But it might be insufficient for what you are making, possibly
20:44:38 <elliott> I'd rather abstract from that somehow, since algorithms like "put these two grids beside each other" will depend on wide-characterness
20:46:19 <elliott> I guess a terminal is in some ways fundamentally more like a list of lists than a grid
20:46:27 <elliott> but that's such an ugly thing to actually work with
20:46:40 <GreyKnight> does it help you avoid worrying about wide characters by the simple expedient of "not supported" :-I
20:46:56 <oerjan> `addquote -!- ais523 has parted #esoteric ("someone is going to mention Feather, I know it").
20:47:00 <HackEgo> 893) -!- ais523 has parted #esoteric ("someone is going to mention Feather, I know it").
20:47:01 <kmc> yeah the mosh representation is like that
20:47:10 <kmc> but i think it still maintains a rectangular list of lists
20:47:20 <GreyKnight> oerjan: it's funny he should mention it, I had a question
20:47:56 <kmc> if you have some totally general idea of gluing together arbitrary size rectangles
20:48:07 <kmc> then a terminal can just be a bunch of 1x1 and 2x1 rectangles glued together
20:48:39 <GreyKnight> why rectangles? What about a hexagonal gridded terminal :o)
20:48:45 <elliott> kmc: not sure how that view handles varying line lengths though
20:48:53 <elliott> well I guess you can glue them together vertically and just not pad out stuff
20:50:06 <elliott> 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:52 -!- AnotherTest has quit (Quit: Leaving.).
20:53:12 <zzo38> 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:56:14 * kmc high-fives elliott
20:56:53 <zzo38> elliott: Even in 1x1 only mode, it might still display CJK text on a wide-only terminal.
20:57:46 <zzo38> 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 <GreyKnight> that sounds sort of similar to what he's doing
20:59:53 -!- monqy has joined.
21:01:31 <zzo38> 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 <zzo38> 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 <kmc> look, Unicode is not perfect, but it is The Standard
21:05:26 <shachaf> I thought ASCII was the standard.
21:05:39 <shachaf> That's what the S stands for.
21:06:40 <GreyKnight> @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:11:20 <kmc> does Israel have any entertainingly strange locally developed '80's microcomputers?
21:13:10 -!- Nisstyre-laptop has joined.
21:14:29 <GreyKnight> the Wikipedia entry for [[Four-Corner Method]] includes an example: «The code of 法 (pinyin: fǎ; meaning "method/law/France" [...]»
21:15:50 <shachaf> kmc: I'm told that GOLEM is maybe interesting?
21:15:53 <shachaf> http://he.wikipedia.org/wiki/%D7%92%D7%95%D7%9C%D7%9D_(%D7%9E%D7%97%D7%A9%D7%91)
21:16:46 <Bike> GreyKnight: i think my favorite is still that character for some kind of noodle that has like thirty radicals
21:18:14 <Lumpio-> How is that best character
21:18:29 <Taneb> John is the best character
21:19:09 <boily> Bike: is that the one? https://en.wikipedia.org/wiki/Bi%C3%A1ng
21:19:48 <Bike> strokes not radicals. i'm no good at chinese
21:20:32 <Bike> pff, the chinese text is svgs instead of text
21:20:40 <Bike> you're dropping the ball unicode
21:20:41 <Lumpio-> There are reasonably common characters with 30 strokes
21:21:27 <HackEgo> http://codu.org/projects/hackbot/fshg/index.cgi/raw-file/tip/paste/paste.28983
21:21:59 <boily> oh! hackEgo's back!
21:22:25 <shachaf> Hmm, not what I was looking for.
21:22:30 <GreyKnight> Bike: it's not in Unicode according to WP >:-o
21:22:48 <kmc> there was a little emergency maintenance at my subway stop today: https://twitter.com/mbtaGM/status/286944708087930880/photo/1
21:23:03 <Bike> multiocular o: higher priority than noodles
21:23:33 <kmc> 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 <shachaf> Bike: To be fair, almost every Chinese character looks like noodles.
21:23:54 <elliott> fizzie: you should finish that jitfunge thing
21:25:39 <elliott> 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 <GreyKnight> Glad to see WP is as much of a soap opera as ever
21:26:21 <GreyKnight> "The real entertainment is on the talk pages"
21:26:56 <Bike> i think i still have a text file somewhere of pickings from the transhumanism article
21:27:16 <kmc> i used to have a markov chain bot trained from the talk pages about various religions and religious figures
21:27:18 <Bike> 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 <kmc> so it would just argue with itself about religion endlessly
21:27:44 <GreyKnight> Bike: do you have enough hard disk space for storing that text file :-U
21:28:52 <zzo38> Can you make up a version of the pastelogs which can specify the start date?
21:29:40 <shachaf> zzo38: It's too late: You've already made it up.
21:29:47 <shachaf> The patent, trademark, and copyright all belong to you.
21:29:59 <elliott> nice it degenerated into a policy argument
21:30:13 <shachaf> elliott: why are you reading [[Talk:Main page]]
21:30:27 <zzo38> shachaf: Well, I officially release all of that into the public domain.
21:31:25 <elliott> shachaf: because it's the best
21:31:36 <Bike> http://en.wikipedia.org/wiki/Talk:Transhumanism/Archive_11#Non-Local_Memory.21 aha, found it
21:31:41 <elliott> also because I check the main page and the talk page link is too damn prominent to avoid clicking
21:31:51 <Bike> «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 <GreyKnight> I'd better stay away from Faraday cages then
21:33:00 <shachaf> 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:34:46 <shachaf> "Waldo" is a famous story, right?
21:35:02 <Bike> the onen by... heinlein I think?
21:35:07 <Jafet> My memory is shachaf.
21:36:33 <Jafet> Oh, it's the randy one with robot hands.
21:36:42 <GreyKnight> Jafet's memories are stored in shachaf?
21:36:50 <lambdabot> *** "randy" wn "WordNet (r) 3.0 (2006)"
21:36:51 <lambdabot> adj 1: feeling great sexual desire; "feeling horny" [syn:
21:36:51 <lambdabot> {aroused}, {horny}, {randy}, {ruttish}, {steamy}, {turned
21:36:59 <lambdabot> *** "rand" wn "WordNet (r) 3.0 (2006)"
21:36:59 <lambdabot> n 1: the basic unit of money in South Africa; equal to 100 cents
21:36:59 <lambdabot> 2: United States writer (born in Russia) noted for her polemical
21:37:00 <lambdabot> novels and political conservativism (1905-1982) [syn: {Rand},
21:37:05 <boily> does the fact that I'm the subconscious aspect of a COBOL-less cookie agrees with your brains being antennas?
21:37:58 <Jafet> GreyKnight: how can MEMORIES be stored IN shachaf? That is pseudo gobbledygook. shachaf is my memory.
21:38:56 <olsner> pseudo gobbledygook = real science?
21:41:06 <shachaf> kmc: Is KeithW related to "keithw", the GHC committer?
21:42:53 <GreyKnight> olsner: it *appears* to be gobbledygook, but in actuality it's balderdash
21:44:58 <GreyKnight> boily, perhaps a cookie can act as an antenna? Time for an experiment
21:45:41 <GreyKnight> Problem #1: How to stop GreyKnight from eating the experimental apparatus
21:47:38 <Taneb> Solution to Problem #1: Cyanide
21:47:57 <shachaf> Solution to Problem #1: Canada
21:48:15 <Taneb> For gods' sake, I said I was sorry
21:49:50 -!- carado has joined.
21:49:54 <zzo38> shachaf: Yes, Canada is exist, I think so!
21:50:10 <shachaf> zzo38: Sure, it is exist. But I asked whether it *does* exist.
21:51:56 -!- Phantom_Hoover has quit (Read error: Connection reset by peer).
21:52:21 <GreyKnight> Canada *is* existence? So if we're not in Canada, *we* don't exist
21:52:40 <shachaf> GreyKnight: Canada *is* exist.
21:53:29 -!- Phantom_Hoover has joined.
21:53:30 <kmc> shachaf: there's a keithw GHC committer?
21:53:38 <Taneb> Hence either Canada is not exist, or I do not exist
21:53:43 <kmc> shachaf: probably not, but I wouldn't be totally surprised
21:53:47 <Taneb> I suspect the latter
21:54:03 <shachaf> kmc: I was looking for something in GHC commit history earlier and saw some.
21:54:37 <boily> I think Canada exists. I'll have to check.
21:55:14 <olsner> Taneb: why would you exist?
21:55:29 <Taneb> I didn't even see a movie yesterday
21:55:52 <zzo38> shachaf: I think Canada does exist, too.
21:56:42 <Taneb> There were six of us
21:56:47 <Taneb> The cinema had six seats spare
21:56:54 <Taneb> So we didn't see it
21:57:03 <shachaf> Taneb: "There were four of us" is the standard version, I think.
21:57:24 <GreyKnight> (Two of them aren't in Canada, and hence don't exist)
22:03:43 <boily> can you all be less than two of them, so Canada may experimentally exist?
22:04:33 <olsner> I'll believe in Canada when I see it
22:07:55 -!- boily has quit (Quit: Poulet!).
22:12:43 <oerjan> 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:16:19 <monqy> I've heard stories of canada but never experienced it myself
22:16:37 <Taneb> I used to know someone who lived in Canada
22:16:41 <Taneb> But she was a liar
22:17:17 <shachaf> I once took the ferry over from Canada.
22:18:02 <olsner> canada gave you its ferry? how generous of it
22:18:10 <elliott> Taneb: what did she lie about
22:18:44 <Taneb> She pretended to be two people
22:18:48 <Taneb> And completely fooled me
22:18:53 <Taneb> Because I made friends with the fake
22:18:58 <oerjan> well the relevant question is of course whether she lied about living in canada
22:19:08 <Taneb> That I do not know
22:19:14 <olsner> and which one of her lived in Canada?
22:19:39 <hagb4rd> she pretended that all that she wants was his money.. but all she really wanted was love love love..really sick
22:21:29 <kmc> shachaf: so did you ever write the exploit for level07_alt? it was a kinda fun constrained programming problem
22:21:40 <Taneb> Both ubiquitousUloid and Thollux
22:21:51 <shachaf> I don't think I did level07_notalt, either.
22:23:02 <kmc> yeah me too
22:23:13 <kmc> i have like 5 or 6 levels left
22:23:48 <kmc> a friend pointed out that the split-TLB trick we were discussing might behave weirdly on SMP
22:24:19 <kmc> maybe you weren't around
22:24:50 <kmc> PaX has NX emulation that works by deliberately putting the code TLB and data TLB into inconsistent states
22:25:24 <kmc> you set all data pages as non-accessible in the page tables
22:25:38 <kmc> 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 <kmc> if so, you set the page accessible, read from it, and then set it back
22:26:53 <kmc> it's apparently not completely awful though
22:27:06 <kmc> http://pax.grsecurity.net/docs/pageexec.old.txt http://pax.grsecurity.net/docs/pageexec.txt
22:27:28 <kmc> this came up in http://events.ccc.de/congress/2012/Fahrplan/events/5265.en.html
22:27:43 <kmc> which you can download a video of at https://events.ccc.de/congress/2012/wiki/Documentation
22:28:04 <Sgeo_> elliott, Taneb monqy Phantom_Hoover Fiora update
22:28:27 <Bike> wait, is that the chaos computer club?
22:28:50 <kmc> the Chaos Communication Congress actually
22:28:57 <kmc> their conference
22:29:02 <shachaf> Oh, I've heard about that.
22:29:53 <kmc> 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 <olsner> is there a version of the talk that doesn't involve video or anyone talking?
22:30:26 <kmc> 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 <kmc> slides only? not that i've seen, sorry
22:30:43 <kmc> you can watch it at high speed on mute
22:30:54 <kmc> automatic extraction of slides from video would be an amusing computer vision project
22:31:37 <elliott> automatic extraction of kmc from #esoteric
22:32:15 <HackEgo> http://codu.org/projects/hackbot/fshg/index.cgi/raw-file/tip/paste/paste.24432
22:32:44 <ais523> kmc: extracting slides from a video of a presentation seems trivial
22:32:44 <lambdabot> ais523: You have 2 new messages. '/msg lambdabot @messages' to read them.
22:32:44 <kmc> Lumpio-: bh
22:32:50 <ais523> it's basically just deduplication, right?
22:33:02 <kmc> assuming that each slide is shown full-frame at some point
22:33:13 <kmc> if not then it's a little more work
22:33:16 * elliott wonders if ais523 is saying trivial to upset kmc.
22:33:27 <kmc> anyway this is why i said "amusing" and not "publishable" ;P
22:33:34 <kmc> elliott: probably!
22:33:49 <ais523> 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 <ais523> however, not checking twice before leaving makes you vulnerable to shudder
22:34:08 <ais523> huh, perhaps I should just shudder the flag in that case :)
22:34:47 <shachaf> kmc: Did you hear I ragequit #-blah the other day?
22:35:02 <elliott> 2011-08-29.txt:00:20:56: -!- kmc has joined #esoteric.
22:35:02 <elliott> 2011-08-29.txt:01:22:05: <kmc> suid is irredeemably broken anyway
22:35:08 <olsner> shachaf: what a scandal
22:35:30 <kmc> shachaf: i did not hear of this
22:35:31 <elliott> [slams open doors] YOUR WHOLE WORLD IS IRREDEEMABLY BROKEN
22:35:44 <kmc> *studio audience cheers wildly*
22:35:52 <shachaf> Well, I guess you wouldn't've.
22:37:02 <shachaf> whoa, dude, monochrom has evolved into Dr. monochrom
22:37:47 <GreyKnight> Sgeo_: I posted a link for you earlier
22:38:47 <Sgeo_> 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 <ais523> elliott: does the wiki have spoiler tags?
22:39:10 <ais523> 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:20 <ais523> the answer's in the page history now
22:39:29 <ais523> so I can safely delete it, and yet people who care can still find it
22:39:36 <elliott> ais523: you could just not answer
22:39:58 <elliott> ais523: I think as a matter of policy I must forbid making edits that are harmful to other people
22:40:00 <GreyKnight> "If you're confused by this, then I'm not surprised and don't say I didn't warn you."
22:40:43 <elliott> ais523: you should retroactively delete it
22:41:02 <ais523> elliott: go install the oversight extension and give me the perms
22:41:09 <elliott> ais523: don't we have oversight?
22:41:11 <ais523> then I /can/ retroactively delete it, so long as it's the top edit
22:41:15 <ais523> we have revision hiding, it's better
22:41:21 <Sgeo_> I didn't understan it, but I think it's because I don't know Feather
22:41:24 <ais523> but leaves a mention of the revisions' existence
22:41:29 <elliott> I think ais523 knows more about Esolang's MediaWiki installation than I do
22:41:37 <elliott> Sgeo_: are you suggesting anyone knows Feather
22:41:42 <ais523> 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 <ais523> it's what developers use if they need to hide the fact that something's been hidden
22:41:54 <Sgeo_> Well, at least two people have some notion of a construct =<<
22:41:57 <ais523> say, on order from the WMF
22:42:51 <ais523> well, it only allows for effectively retroactive /deletion/, and even then only on the top revision
22:44:19 <GreyKnight> ais523: "this is consistent with the example you gave" Which one? Do changes from <<= only go back as far as the last =<<? Or all the way to the beginning of the universe?
22:44:43 <ais523> well =<< basically produces a new object
22:44:49 <ais523> think of it like .clone() in Java
22:44:49 <Taneb> Oh god is Feather actually being worked on
22:45:00 <ais523> well, GreyKnight is trying to implement it, but he doesn't understand it
22:45:07 <ais523> this is not surprising, because nobody else understands it either
22:45:16 <elliott> 2011-08-29.txt:01:42:35: <kmc> i don't know what a HackEgo is
22:45:18 <elliott> 2011-08-29.txt:01:59:31: <kmc> what does EgoBot do?
22:45:41 <ais523> kmc: the bots both have a help command, and use ` and ! respectively as command prefixes
22:45:53 <ais523> in fact, the other #esoteric bots (apart from the logging bots) have help prefixes too
22:46:00 <shachaf> remember when kmc was in #haskell
22:46:08 <ais523> thutubot's prefix is + but it isn't normally here
22:46:10 <shachaf> #haskell was much better. :-(
22:46:17 <ais523> and lambdabot's is @ or ?
22:46:28 <Taneb> Pietpot's is ) but that was here once and sucked
22:46:36 <Taneb> And I've lost the source
22:46:52 <elliott> can't wait till kmc gives up on #esoteric
22:46:55 <ais523> oh, one of the reason thutubot isn't usually here is that it has a bug
22:47:00 <ais523> that causes it to repeat everything lambdabot says
22:47:10 <ais523> it's an amusing bug but gets annoying after a while
22:47:14 -!- Bike has quit (Ping timeout: 240 seconds).
22:47:50 <shachaf> elliott: Then I'll have to take all my offtopicness to #mosh!
22:48:06 <ais523> it was worth it just for the few seconds where elliott thought I had a working Haskell interp in Thutu, though
22:48:11 <ais523> (I guess technically, I /did/, but…)
22:48:29 <GreyKnight> ah so (o =<< dummy) creates a clone... that clarifies things considerably
22:48:47 <Taneb> GreyKnight, PietBot could join the channel and crash when you tried to run a deadfish program!
22:48:48 <ais523> also, =<< doesn't take an argument
22:48:53 <ais523> why are you giving it one
22:49:25 <GreyKnight> er I had an attempt at an implementation of =<< once which you said was "basically okay", and it had a dummy argument
22:49:42 <Sgeo_> Where is documentation on Feather?
22:49:58 <ais523> seriously, it's better as an injoke
22:50:06 <GreyKnight> I am keeping my notes offline so as not to injure anybody
22:50:26 <Taneb> I have a vague idea about Feather, but no specifics
22:51:14 <ais523> GreyKnight: something I discovered a while back is that Feather is not a good cure for depression
22:51:23 <ais523> but instead I just ended up depressed /and/ confused
22:52:24 <kmc> How to Good-Bye Depression
22:52:29 <ais523> GreyKnight: <<= (nil =<<), hopefully
22:52:37 <ais523> otherwise, when someone gets depressed again
22:52:43 <ais523> they'll end up overwriting nil
22:53:23 <oerjan> ^prefixes -- yo ais523
22:53:36 <oerjan> fizzie: FUNGOT SHORTAGE
22:53:47 <ais523> oerjan: I didn't know that existed
22:53:56 <HackEgo> Bot prefixes: fungot ^, HackEgo `, EgoBot !, lambdabot @ or ?
22:53:59 <ais523> (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 <ais523> GreyKnight: how do you type that character with compose? or is it impossible?
22:54:49 <fizzie> Oh, right, I noticed the shortage but forgot to do anything.
22:55:05 -!- fungot has joined.
22:55:11 <fungot> (Bot prefixes: fungot ^, HackEgo `, EgoBot !, lambdabot @ or ?)S
22:55:21 <fizzie> It seems to be combattible.
22:55:42 <kmc> "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 <kmc> WELL WHY NOT
22:56:30 <oerjan> <ais523> 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 <fizzie> I don't think the standard compose maps have all that many arrows, just the basic ones.
22:56:50 <Sgeo_> I assume the brain exploding stuff is a joke
22:57:48 <ais523> I gave up Feather because I became too confused
22:58:03 <GreyKnight> hey I found a new fountain glyph for NetHack ⥾
22:58:10 <ais523> GreyKnight: that's not new
22:58:14 <ais523> I think Un actually uses it
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: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:36 <shachaf> oerjan: what's cooler: invariant functors or profuncotrs
23:37:11 <oerjan> 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 <elliott> <kmc> wow, Feather sounds like it was designed during a salvia trip
23:38:15 <oerjan> thus clearly profunctors
23:38:39 <ais523> 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 <ais523> oerjan: it hasn't even scrolled off my screen yet!
23:40:20 <ais523> that's not long since passed!
23:40:49 <olsner> I wonder how kmc got enough information about Feather to decide it sounded like a salvia trip invention
23:41:14 <oerjan> ais523: so =<< actually takes only one argument, right
23:41:43 <ais523> it takes zero plus "this"
23:41:51 <ais523> which isn't called "this" but people know what I mean by that
23:42:17 <oerjan> right that oo thingy people keep using
23:44:23 <ais523> Feather is definitely OO
23:44:29 <ais523> it wouldn't meet its original design goals otherwise
23:45:11 <Bike> what are its original design goals
23:52:04 <fizzie> Bike: Who knows, they keep getting retroactively changed.</stupid-feather-time-travel-joke>
23:52:24 <Bike> i don't even know anything about feather and i'm getting sick of the time travel jokes
23:52:28 <ais523> Bike: being like Smalltalk but more light-weight
23:52:49 <ais523> along the way, this evolved into "looks vaguely like Smalltalk but does what it does for entirely different reasons"
23:53:01 <Bike> is it still integrated with a graphical environment
23:53:07 <elliott> `addquote <Bike> i don't even know anything about feather and i'm getting sick of the time travel jokes
23:53:10 <HackEgo> 894) <Bike> i don't even know anything about feather and i'm getting sick of the time travel jokes
23:53:53 <shachaf> oerjan: Sure it's a functor.
23:54:40 <oerjan> shachaf: well i don't know what an invariant functor is.
23:56:01 <shachaf> Well, it gives you inmap :: (a -> b) -> (b -> a) -> f a -> f b
23:56:38 <oerjan> 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:24 <ais523> oerjan: unless the cloned object was retroactively assigned to in the meantime
23:57:43 <ais523> then you only change the original because you're retroactively changing what it was before it retroactively changed
23:58:44 <oerjan> shachaf: ok i guess there's some category that's a functor of...