00:00:08 . o O ( well, except that dretched surströmming. DAMNED EXPORT LAWS! ) 00:00:43 tswett: And, for some reason, waste instruction space with instructions that treat their arguments as two 1-byte numbers (a, b) and have the ALU for it treat it as a+bk 00:00:58 k^2=0, k != 0 00:01:11 So lemme see. I've got: ALU instructions, memory instructions, branching instructions. 00:01:19 hppavilion[2]: SKIPPY would, of course, skip the following python command. 00:01:29 oerjan: That was my first thought 00:01:46 tswett: Why not include labels as instructions? 00:02:01 That sounds insane. 00:02:09 tswett: So every JMP must have a corresponding RCV 00:02:09 Which is probably the point, isn't it? 00:02:26 Not only that, but the RCV must specify where it's coming from. 00:02:37 tswett: Well duh; I thought that was implied 00:02:57 tswett: Even better, you have BRIDGE commands, with one argument, that each serve as a JMP to the other BRIDGE with the same argument 00:02:59 Having only certain points that can be jumped to has precedent. 00:03:06 shachaf: Yes 00:03:32 tswett: And RBRIDGE takes two arguments, then bridges to the parter, offset by its second argument 00:03:43 Bridges to the what? 00:03:58 tswett: Every BRIDGE command has an argument 00:04:13 By "parter" do you mean "partner"? 00:04:15 * int-e read a nice article on cheating in contract bridge last weekend 00:04:17 Yes 00:04:40 But I suspect this is unrelated. 00:04:42 int-e: How do you cheat? 00:04:44 tswett: And when one is encountered, it's a JMP to the other one with the same argument (if none other exists, it either terminates or restarts the program, not sure which) 00:04:47 boily: just import the ingredients for surströmming, then make it yourself hth 00:05:00 * oerjan suppresses evil cackle 00:05:27 shachaf: by communicating through side channels (outside of betting and cards played) 00:05:34 Let's say there are 8 registers, and they're all 16 bits. Now, I'm not sure if the instruction pointer should count as one of the registers. 00:05:48 tswett: No, that would be too easy 00:05:55 tswett: And defeat the point of BRIDGEs 00:05:57 I'm thinking... yes. 00:06:09 http://www.newyorker.com/magazine/2016/03/07/the-cheating-problem-in-professional-bridge is the article (Schneier mentioned it in Cryptogram) 00:06:18 tswett: Will you be able to modify the IP manually? 00:06:22 Then you can jump by loading stuff into a register, then MOVing that register to the IP register. 00:06:26 Yeah. 00:06:33 tswett: That seems too common 00:07:11 tswett: counting the instruction pointer as a register is almost always a bad idea 00:07:17 That leaves 7 general-purpose registers. 00:07:21 tswett: Didn't QUACKVM™ by zzo38® do something like that? 00:07:30 b_jonas: why's that? 00:07:38 tswett: And not a bad idea in an #esoteric way 00:07:51 tswett: INC %ip 00:08:20 Incrementing the instruction pointer... the way I'm imagining it, that would mean "skip the next instruction". 00:08:45 The instruction loop would essentially be: fetch the instruction; increment the instruction pointer; execute the instruction. 00:08:47 tswett: It would 00:08:49 decrementing the instruction pointer 00:08:51 tswett: DEC %ip 00:08:56 There you go. 00:09:09 tswett: DEC %ip hangs forever, I imagine 00:09:12 Yup. 00:09:26 tswett: The IP-as-a-register thing has been done to death; seriously, try BRIDGE :P 00:09:26 hppavilion[2]: only if all instructions are one byte 00:09:52 oerjan: Oh, right, I assumed the IP would point to the instruction itself, not the individual byte 00:10:23 oerjan: But if INC %ip is SKIP, then DEC %ip is hang forever 00:10:50 oerjan: Assuming INC and DEC work the same way, of course 00:11:09 oerjan: Though DEC %ip as the first instruction will actually end the program, I believe 00:11:19 Because integer underflow 00:11:42 or just page fault 00:11:49 oerjan: Yes, or that 00:12:02 Oh right. I figure that each instruction would always be two bytes. 00:12:05 oerjan: Though page fault ends the program, IIIAG, so... 00:12:10 no, wait 00:12:15 So the IP would increase by two each time, not one. 00:12:26 DEC %ip will hang if it's 1 wide 00:12:28 tswett: Just make it multiply IP by 2 before fetching 00:12:39 Now here's a question. How much RAM should there be? 00:12:43 if it's more, you'll go to something inside it 00:12:45 tswett: That way you can still SKIP with INC %ip 00:12:56 hppavilion[2]: but then people won't be able to do odd-aligned instructions! 00:13:10 tswett: Well that's a stupid thing to do anyway... 00:13:43 I definitely think I want to allow odd-aligned instructions. That will (although it will be very difficult, perhaps practically impossible) let a single piece of code mean two different things, depending on the alignment. 00:14:13 tswett: It's so impossible that it's pointless 00:14:19 tswett: What's wrong with BRIDGE? 00:14:38 I'm not trying to make an esoteric instruction set. 00:15:00 -!- nooga has joined. 00:15:13 There are pretty much two RAM options. Have no more than 64 KiB of RAM; or have more than 64 KiB of RAM. 00:15:54 That works for any number. 00:15:56 I guess I shouldn't say "RAM"; I should say "memory space". 00:16:00 OK... 00:16:07 Yes, but there's a significant divide between the two buckets. 00:16:40 So, let's imagine we go with the 64 kiB of RAM. What can you do with that? 00:16:56 Play a game of battleship? 00:16:57 Anything you could do on a C-64. 00:17:45 fizzie: Assuming that the IS is C-64 complete, duh 00:18:01 tswett: how does that work for quantum computers? 00:18:04 Let's suppose the display is 64 by 64 pixels. If you use a luxurious 4 bits per pixel, that means the number of bytes used for a display buffer is... 00:18:10 Well, it was an approximation. 00:18:11 > 64 * 64 `div` 2 00:18:13 2048 00:18:29 2 kiB. That's not bad at all. 00:18:56 Anything you can actually compute like that sounds remarkably simple for a console graphics mode. 00:19:15 What do you mean? 00:19:33 Well, I mean. No character cell sort of thing? 00:19:37 tswett: With * `div` 00:19:59 oh tiles, sprites... hmm 00:20:16 Right, right. 00:20:21 I bet modern consoles just have framebuffers though 00:20:23 Yeah, I think the GameBoy used tiles, right? 00:20:31 tswett: Are you going to have a stack? 00:20:43 I like the idea of making the programmer invent a stack. 00:20:45 (Or a belt?) 00:20:46 I mean, it's easy. 00:20:46 oerjan: that sounds lovely! brilliant! 00:20:52 (stupid 3d graphics ;-) ) 00:21:08 tswett: Fair enough 00:21:20 int-e: How does * work for quantum computers? :P 00:21:34 Here's an idea. Make it so that RAM is divided into 32 2-kiB "pages", and the program can use any of those pages as the display buffer. 00:21:42 Like, you can just say "now I want to display page 17". 00:21:49 tswett: Are you going to have computed jumps? If so, will they be relative for static? 00:21:58 int-e: I didn't understand your quantum computer question, so I ignored it. 00:22:12 hppavilion[2]: yes, and I think I'll make all addressing absolute. 00:22:21 tswett: it's fine. I just wondered about a meaningful definition of RAM size 00:22:49 Now, the benefit of having 64 ki addressable locations is that you can store a memory address in a 16-bit word. 00:22:51 Very nice. 00:22:53 tswett: Why not have a memory pointer head that all memory is accessed relative to? 00:23:03 Oh wait, that's x86 00:23:20 Having something like that isn't out of the question. 00:23:45 hppavilion[2]: "segment" 00:23:48 tswett: I assume you'll have a FLIP instruction that updates the display, as opposed to updating every instruction cycle? 00:23:58 Yeah, definitely. 00:23:59 int-e: That's what I thought, but I just said x86 to avoid looking stupid 00:24:23 tswett: What are conditionals? 00:24:34 Like... conditional branching? 00:24:44 tswett: Just any sort of conditional code 00:24:50 You get "jump if zero" and "jump if not zero" instructions. 00:24:51 tswett: Conditional branching is /one/ option 00:24:55 tswett: Oh... 00:25:11 A lot of them have tiles, or even for an addressable-bitmap mode at least a color palette where you have, say (for the C64 standard multicolor mode) "2 bits per pixel", but of the four possible colors one is a global background color, while the other three can be freely selected separately for each 4x8 cell. 00:25:14 tswett: Why not "Jump if 42" and "Jump if not 42"? 00:25:41 (And then for how much memory a graphics buffer takes you need to start counting the bitmap and attributes separately.) 00:26:05 hppavilion[2]: that's a good question. 00:26:10 tswett: Good. 00:26:46 tswett: Why not put a minimized call/cc in the set as a builtin? For... some reason? Somehow? 00:27:17 call/cc/if 00:27:18 That's called "push all registers, change the stack pointer, and pop into all registers". 00:27:25 tswett: Oh 00:27:39 tswett: And... you don't have a stack, so... 00:27:47 Wait, all registers or all memory? 00:27:50 There's nothing that's "the stack". You can have a stack. 00:28:01 tswett: Yes, that's what I menat 00:28:03 *meant 00:28:11 All registers. Pushing all memory would mean inserting all memory into memory. 00:28:19 tswett: Ah, yes. Right. 00:28:55 tswett: Figure out something new & exciting for conditionals, whynot. 00:29:01 Lemme be a little conservative here. The address space is 64 KiB, but you only get 8 KiB of general-purpose RAM, including the video buffer. 00:29:21 tswett: What's the other 56 KiB for? 00:29:26 I dunno. 00:29:34 a huge part of it will be ROM 00:29:39 Yup. 00:29:40 int-e: Ah, yes. ROM. 00:29:42 Lemme think about the speed. 00:29:55 maybe some memory mapped IO for good measure 00:30:24 Esoteric conditionals... like... "Call this program with the accumulator set to this other value" 00:30:27 I want it to be just fast enough that you can touch every pixel several times per frame. 00:30:34 tswett: Beat THAT, x86 00:30:34 and of course you need some free address space for future extensions 00:31:10 Or, instead of the accumulator, mem[0] 00:31:14 Here's an idea for an esoteric conditional. There are no goto statements at all; the program counter just loops through all of memory. You do "conditionals" by loading code in front of the program counter. 00:31:56 tswett: Eeeeeew? 00:32:15 So, video memory is about 2,000 bytes, and you'll want to touch it about 20 times per second, meaning 40,000 bytes per second of... stuff in order to touch it all once per frame. 00:32:28 hppavilion[2]: classic trampoline. nothing to worry about. much. 00:33:04 About 200,000 instructions per second sounds like a pretty decent amount. 00:33:26 RSS n "restart the program with acc=n, lak=curline" 00:33:34 tswett: which is why old consoles pretty much *needed* tiles and the like (you want to do other things besides drawing stuff as well) 00:33:42 Right. 00:34:47 Now, I don't think I can get away with having an audio buffer. 00:35:02 tswett: You're going to need controllers, too 00:35:45 Audio uses about 40,000 samples per second. You can use fewer, if you want everything to sound muffled. 00:35:51 tswett: just have 3 square wave generators or so :P 00:36:24 There's nothing stopping me from having sine wave generators instead. 00:36:26 Or whatever. 00:36:29 FFT sound generation! 00:36:36 BytePusher has an audio buffer. Granted, it's pretty fast. 00:37:18 (Then again, it's an OISC.) 00:37:26 Wait, FFT sound generation might actually be a good idea. 00:38:20 tswett: FFT? 00:38:32 Fast Fourier transform. 00:38:38 Free Fourier Transform? 00:38:45 Oh, fast 00:38:47 If by that you mean "write a magnitude spectrogram", it'd at least be different. Calling it a good idea might be pushing it. 00:38:57 FFT is a highly popular implementation of the discrete fourier transformation. 00:39:01 Lemme think about this. 00:39:48 Let's imagine if you had a frame that's 1 second long and contains 40,000 samples. 00:40:12 Each sample represents, uh, 25 microseconds. 00:40:37 tswett: Wikipedia says the DFT uses complex numbers 00:40:45 So if you want to use that for audio- whooooooa 00:40:47 It sure does. 00:41:21 Now, the discrete Fourier transform of that frame buffer thing there... 00:41:34 It's possible to make up a "plausible" phase with pretty little loss of generality. 00:41:37 tswett: What do you think complex sound is like? 00:41:52 hppavilion[2]: check out https://en.wikipedia.org/wiki/Discrete_cosine_transform 00:41:57 * hppavilion[2] is not, as a matter of fact, stoned right now 00:41:59 hppavilion[2]: note that the Fourier transform is already super commonplace in audio progressing. 00:42:04 s/progressing/processing/ 00:42:43 Each complex number represents (if I may fuzz things a bit) the amplitude and phase of a bit of wave. 00:42:52 tswett: okay, how do you shift a 150ms second sample inside the 1s frame? even worse, what if it spans two frames? 00:43:27 I'm not actually going to have a 1 second frame; I'm just trying to figure out what the numbers here are gonna be. 00:43:27 and just for the sake of dropping a buzzword I don't really understand, why not use wavelets ... 00:44:06 tswett: regardless, shifting samples around may be an issue. 00:44:08 tswett: Thou shalt not fuzz things 00:44:10 Not even a bit 00:44:12 - God 00:44:38 * boily fuzzes hppavilion[2] with his mapole 00:44:54 I think after DFT, it's gonna be... still 40,000 samples, I guess, but now each sample, instead of representing 25 microseconds, represents 1 hertz. 00:45:38 For reasons, the second half of that is going to be the mirror image of the first half, so you can just forget about it and use 20,000 numbers instead of 40,000. 00:45:39 But... 00:45:48 They're complex numbers instead of real numbers, making them effectively 40,000 again. 00:45:50 `? hertz 00:46:02 hertz? ¯\(°​_o)/¯ 00:46:06 tswett: Eeeeeew? <-- https://esolangs.org/wiki/SMITH 00:46:12 No, it's 20001 complex numbers, with a little bit of redundancy for the first and last. IIRC. 00:46:20 oerjan: EEEEEEEEEEEEEEEEEEEEEEW! 00:46:23 I was wondering. 00:46:34 I wouldn't build a system where the code is expected to fill in the full complex FFT of whatever signal is going to come out of it. But something where the code is expected to create a magnitude spectrogram (or in other words, produce an Y-sample magnitude spectrum X times/second) might be borderline plausible. 00:46:44 tswett: I do that occasionally, too 00:46:48 (The conversion would need to be a little bit more involved than just taking the FFT.) 00:47:06 Right, because the FFT doesn't reduce the number of numbers you're dealing with. 00:47:10 It's still about 40,000 a second. 00:47:39 More to the point, it'd be very difficult to make a continuous waveform with that thing. 00:48:10 You'd have a discontinuity at every frame boundary, unless your audio-generating code was very very careful with the phases. 00:48:46 Right. 00:49:11 Yeah, lemme see here. 00:49:19 Like... what if you want to have a 40.5 Hz wave? 00:49:51 > 40000 / round (40000/40.5) 00:49:52 No instance for (Show a0) 00:49:53 arising from a use of ‘show_M467247251696577848318660’ 00:49:53 The type variable ‘a0’ is ambiguous 00:50:26 You don't have one of those, you only have 40 Hz and 41 Hz... and all the others. And you can make a 40.5 Hz wave out of that, but you'll need to keep changing the phases. 00:50:47 > 40000 / fromIntegral (round (40000/40.5)) 00:50:49 40.48582995951417 00:51:03 All right, let's forget about audio for the time being. 00:51:15 Even for a continuous 41 Hz tune, you'll have to set the phase component "correctly" for every output frame. 00:53:45 fizzie: how do you figure? 00:54:18 One of the Fourier transform sample things is going to correspond to exactly 41 Hz. 00:54:27 No phase difference from one second to the next. 00:57:42 So where was I? 64 kiB address space, 8 kiB of RAM. 200,000 instructions per second. 64x64 pixel display, 4 bits per pixel, use whatever palette you want. 00:58:00 `learn hertz (German for heart) is an SI unit equal to the frequency of an average heartbeat. 00:58:03 Learned 'hertz': hertz (German for heart) is an SI unit equal to the frequency of an average heartbeat. 00:59:15 No no, the German for "heart" is "Hörte". 01:01:28 lol 01:03:20 Mr. dswedd made a joke. 01:04:33 i know, although shockingly the spelling _is_ a teeny bit off. 01:05:16 that pun hertz. 01:06:52 -!- jaboja has joined. 01:06:58 megahurtz 01:07:07 Next question is, I guess, how much space should be provided for long-term storage? 01:07:19 (the Schlock mercenerary webcomic used that term somewhere, I believe) 01:07:27 tswett: for what? 01:08:09 For "cartridges" (ROM storing program code and static data) and "savegames" (read-write memory for persistent stuff). 01:09:04 wasn't this supposed to be esoteric 01:09:16 No. 01:09:35 int-e: They had also kill-o-huertz. 01:09:45 int-e: http://www.schlockmercenary.com/2000-08-06 01:10:01 pity, you could add some write only memory and some read once memory 01:10:18 (unbuffered DRAM? hmmmmm) 01:12:31 is it possible to have unbuffered ram? 01:12:36 oh, only two occurrences? http://www.schlockmercenary.com/2001-01-28 01:12:44 Also right, you could have individual sine wave components. And if you had it fully imaginary, they'd even all hit 0 right at the edges of the frame, so you could adjust their amplitudes between frames. 01:12:50 Still, for style/speciality points I'd go with something where you paint a magnitude STFT only, and then use something like http://dx.doi.org/10.1109/TASSP.1984.1164317 to synthesize the audio, because then you don't need to be careful at all, and can pretty much just finger-paint spectra. Including (assuming a suitably rapid framerate) dropping sampled "images" wherever and thus ... 01:12:56 ... pitch/time-shifting them however you please. 01:13:37 boily: well, it's a bit hard to use because somebody needs to put the data back into the rows (since reading destroys them) and manually refresh them as well... 01:13:45 And the second one doesn't even mention the SI prefixes like kill-o. 01:13:50 * oerjan machte einen Wordspiel mit "Hertz". Es brachte Boily vielen Schmerz. 01:13:57 boily: speaking of DRAM. SRAM is a different matter entirely 01:14:21 oerjan: "Wordspiel" sounds like a Microsoft joke to me. 01:14:55 and I guess "grosser Schmerz" is more natural than "viel Schmerz" 01:15:43 -!- hppavilion[2] has quit (Ping timeout: 252 seconds). 01:15:51 oerjan: Anyway I can't decide whether the 'd' in "Word" was intentional. 01:16:44 dammit 01:17:13 *t 01:17:29 * oerjan beats Muphry with the saucepan ===\__/ 01:18:08 good old muphry 01:18:45 * oerjan should probably have just used google translate. 01:18:47 Fun fact: Z80 has a DRAM refresh register, R. It's an 8-bit register, where the low 7 bits are automagically incremented after every instruction fetch, and its value is sent as the low 7 bits of the address bus (with the RFSH line asserted) during one part of the machine cycle. 01:18:51 The intention being that you can hook up some DRAM without providing any (or at least much) extra refresh circuitry. 01:19:50 I guess that makes sense on ram that doesn't have faster CAS access than the whole RAS/CAS thing `D 01:19:51 :D 01:20:02 ie "almost static" ram 01:20:15 low clock frequency 01:20:50 right 01:20:51 I'm gonna be generous and say that for a cartridge, you get a whopping 256 kiB of storage. And that's just the one—your game can span multiple cartridges. 01:20:56 the limit is something like 3mhz 01:21:04 oerjan: you didn't? 01:21:07 But switching between cartridges takes 2 seconds, and the screen can't update while this is happening. 01:21:28 int-e : it makes sense in an NMOS chip 01:22:04 which are so slow that you can share like half the cycles for the CPU other half for the GPU 01:22:12 As for savegames: You get a super generous 16 MiB. But it's byte-at-a-time sequential access. 01:22:12 and the CPU isn't even throttled 01:22:16 int-e: "grossen", surely? (großen?) 01:22:17 (see: C64) 01:22:23 (see: apple2) 01:22:30 großen 01:22:38 also, why is it impossible to select single words in the GT result :( 01:22:44 oerjan: in your context, yes. 01:22:51 And I said 200,000 instructions per second? 01:22:53 Es brachte ihm großen Schmerz/große Schmerzen 01:23:14 So simply reading the entire tape, and discarding everything you read, would take more than a minute. 01:23:18 myname: no i cobbled it together with wiktionary and memory. 01:23:40 that sounds stupidly complicated 01:23:45 It shouldn't be impossible to select single words; it's not for me. Though the click-to-show-alternatives UI makes it slightly harder than necessary. 01:23:46 oerjan: (note that I changed both "Schmerz" examples to nominative case) 01:24:01 What sounds stupidly complicated? 01:24:37 translating stuff by looking up seoerate words on wiktionary 01:24:41 Also! I had somehow gotten the impression that `thanks was just another silly #esoteric thing, but then QC description used it today. 01:24:43 seperate even 01:24:52 `thanks entropy 01:24:54 Thanks, entropy. Thentropy. 01:25:04 Even with the exact same logic. So I guess it's a Thing. 01:25:04 -!- nooga has quit (Ping timeout: 252 seconds). 01:26:08 I'm gonna be a little bit merciful here. I'm gonna say that the tape has a beginning and an end, and you can always instantly jump to the beginning (but not to the end). 01:27:06 So there's no "I only want to use the first eight bytes of the tape but I'm currently on byte number 8,258,986, so bear with me while I seek to the beginning." 01:27:09 myname: well i was of course trying to do _better_ than GT. with GT's inability to get the inflection of groß right, i'll call it even. 01:27:53 tswett: Press play on tape. 01:28:20 I'm also gonna say that you can do a "start seek" operation and then do other stuff while you're waiting. 01:28:44 fizzie: crap, I might be too young to get that reference. 01:29:07 no wait, "viel". with "groß" it chose the plural, which was correct but breaks the rhyme. 01:29:41 (on the other hand, "ein" is wrong.) 01:30:07 . o O ( "Heinrich, der Wagen bricht!" -- "Nein, Herr, der Wagen nicht, es ist ein Band von meinem Herzen, das da lag in großen Schmerzen, als Ihr in dem Brunnen saßt, als Ihr eine Fretsche wast." ) 01:30:27 why are german plurals so complex 01:31:16 fizzie: `thanks is inspired by Look Around You 01:31:50 specifically, `thanks ants 01:31:53 `thanks ants 01:31:53 Thanks, ants. Thants. 01:32:04 `ls bin/ble* 01:32:05 ls: cannot access bin/ble*: No such file or directory 01:32:06 `thanks oerjan 01:32:06 Thanks, oerjan. Thoerjan. 01:32:13 (It was hard to Google for.) 01:32:37 Also I should've known that, I've seen that bit. 01:32:58 fizzie: all my attempts at clicking to select single words select the whole thing immediately. 01:34:22 Weird. Dragging works for me. 01:36:47 down with plurals! 01:36:58 `thanks whistle 01:36:59 Thanks, whistle. Thistle. 01:37:16 `thanks thanks 01:37:16 Thanks, thanks. Thanks. 01:38:10 `thanks Hanks 01:38:11 Thanks, Hanks. Thanks. 01:38:19 `thanks NO2 01:38:19 Thanks, NO2. ThO2. 01:38:31 Thorium dioxide. 01:39:02 “Thorium dioxide is used as a stabilizer in tungsten electrodes in TIG welding, electron tubes, and aircraft engines.” ← nice. 01:40:17 `thanks bat 01:40:19 Thanks, bat. That. 01:40:25 That bat. 01:41:06 -!- Phantom_Hoover has quit (Read error: Connection reset by peer). 01:41:22 `thanks bcdfghjkl 01:41:22 Thanks, bcdfghjkl. Tcdfghjkl. 01:41:35 no. I'm not recording myself saying that. 01:42:57 int-e: so basically, no one is sure what "Fretsche" means, right? 01:43:11 oerjan: it's a frog 01:43:26 `thanks schmaltz 01:43:26 Thanks, schmaltz. Thaltz. 01:43:43 `thanks bcdfghjklmno 01:43:44 Thanks, bcdfghjklmno. Tho. 01:43:59 `thanks Mgrvgrvladje 01:44:00 Thanks, Mgrvgrvladje. Thadje. 01:44:03 oerjan: clear from context (it's from the frog prince story) 01:44:25 the Grimm version, to be more precise 01:45:00 int-e: https://de.wikipedia.org/wiki/Der_Froschk%C3%B6nig_oder_der_eiserne_Heinrich#Bedeutung_des_Wortes_.E2.80.9EFretsche.E2.80.9C 01:45:22 -!- lambda-11235 has quit (Read error: Connection reset by peer). 01:45:41 * boily georgianically thwacks oerjan ”NO! I HATE THAT WORD! AAAAAAAARGH!” 01:46:14 `thanks chicken 01:46:16 Thanks, chicken. Thicken. 01:46:25 `thanks fizzie 01:46:26 Thanks, fizzie. Thizzie. 01:46:33 `thanks mink 01:46:33 Thanks, mink. Think. 01:46:46 always thanks your inner chicken. it does spiritual good. 01:47:10 -!- int-e has left ("HERETIC CHICKEN"). 01:47:10 -!- int-e has joined. 01:48:13 oerjan: thanks for the link... so yeah apparently people must make things complicated ;) 01:48:25 Darn, the rules given at Wikipedia for English phonotactics don't allow arbitrarily long onsets. 01:48:56 So I can't have a word like "spspspsplot". 01:49:13 shshshshshocking 01:49:20 is it possible to have more than s+consonant+y/w/l/r in english? 01:49:25 in the onset 01:49:39 I don't think so. 01:49:49 or sh+consonant+y/w/l/r if you admit yiddish loans 01:50:00 loans shmoans 01:50:16 Oh yeah, I heard the word "shprig" (schprig?) on TV once. 01:50:19 Lemme see if the rules allow arbitrarily long codas. 01:51:21 `? k 01:51:25 K K K Ken 01:52:16 Yup. The rules don't prohibit "eefsfsfsfs". 01:52:20 * int-e tsks ;-) 01:52:28 Nor "twelfths". 01:52:38 Though people tend to pronounce that as "twelfs". 01:52:45 "thwart" is another nice one 01:53:02 "strengths" :D 01:53:34 And as for "sixths"... 01:53:50 wtf is "sphragistic" 01:53:54 `thanks chump 01:53:55 Thanks, chump. Thump. 01:55:11 -!- boily has quit (Quit: ALREADY CHICKEN). 02:00:39 why did the chicken kill the channel 02:02:12 it got between the chicken and the road 02:09:34 -!- lynn has quit (Ping timeout: 260 seconds). 02:12:40 -!- lambda-11235 has joined. 02:14:17 -!- hppavilion[2] has joined. 02:18:59 -!- lambda-11235 has quit (Max SendQ exceeded). 02:19:45 <\oren\> apparently other people don't pronounce xylophone with a 'ks' in the onsey 02:19:52 <\oren\> *onset 02:20:30 Yeah, "x" at the beginning of a word is usually /z/. 02:20:35 * deltab nods 02:20:38 Which is weird. 02:20:56 Most languages are weird. 02:21:01 Yup. 02:21:02 <\oren\> but my english previously contained a lot worse spelling-pronounciations 02:21:11 (be they spoken or programmed) 02:21:15 Let's see, is Spanish weird? 02:21:22 It has two different copulas. That's weird. 02:21:22 <\oren\> due to learning to read before I could talk 02:21:58 spanish is within the european norm in weirdness 02:22:05 <\oren\> psychic with a p, for example, which I kept doing till I was in university 02:22:32 maybe spanish is a little bit less weird than the european norm 02:22:35 due to lack of case 02:22:49 and nominal declensions being relatively sane 02:22:50 How many modern Romance languages do have case? 02:23:10 romanian sorta has case-ish 02:23:11 <\oren\> french has remnants iirc 02:23:20 \oren\ : like what? 02:25:52 <\oren\> yah the pronouns 02:26:14 eh 02:26:29 the pronouns are essentially bound clitics to the verb 02:26:34 lots of languages have remnants in the pronouns, including english. 02:26:43 (and norwegian.) 02:26:51 when they're not bound to the verb, pronouns have no case whatsoever in french 02:27:08 moi, je veux (moi = nominative?) 02:27:21 regarde moi (moi = accusative?) 02:28:13 il le donne à moi (moi = dative?) 02:28:17 romance languages have more verb forms than germanic ones, though. 02:28:47 ça vient de moi (moi = ablative?) 02:29:45 you can analyse bound verb pronouns for case except that's also sorta wrong 02:30:21 <\oren\> oerjan: does that include German itself? 02:30:46 \oren\: i think so. romance have even added new verb forms that latin didn't have. 02:30:48 french is more like languages where verbs have markers for not only subject but also object and other arguments 02:31:00 (although dropped some, too) 02:31:03 and the markers for objects etc aren't always the same as those for subjects 02:31:09 these languages do not have case 02:31:43 english is a much better example of remanent case 02:31:49 due to 's 02:32:18 and also you could make a much better case for I/he/she being nominative 02:32:31 because they're not bound to the verb 02:32:39 \oren\: german has subjunctive and person suffixes, but other than that is about the same as norwegian. 02:32:48 <\oren\> mad: well I once had the idea of reanalyzing English such that the forms of "I" are I, me, my, I'm, and I'll 02:32:50 and english has the progressive which neither has. 02:33:51 I/me is totally true 02:34:02 but the other ones have arguments against them 02:34:14 <\oren\> effectively the tense is partially markd by a form of the subject 02:34:30 \oren\: you need I'd too 02:34:35 \oren\ : that CAN happen actually 02:34:41 How come French doesn't have the present progressive? Did it just get lost at some point? 02:34:45 some west african languages have exactly that :D 02:34:57 tswett : french does have a present progressive 02:35:05 "je suis en train de venir" 02:35:50 it's just that the threshold for selecting the present progressive over the ordinary present is a lot higher in french 02:36:04 "Suis en train de venir" is quite the verb form. 02:36:04 basically you're stressing the fact that the action is progressive 02:36:21 -!- lambda-11235 has joined. 02:36:58 Though English has some fun verb forms as well, depending on how loosely you're willing to interpret the phrase "verb form". 02:37:10 "(that he) were to have been going to change" 02:37:21 <\oren\> I'mma gonna be writing 02:37:25 the one thing that modern french doesn't have is the difference between perfective and perfect 02:37:33 "I came" vs "I've come" 02:37:46 Both are "Je suis venu" 02:38:00 Not j'ai something? 02:38:08 What's "he came"? 02:38:17 "J'ai" is not perfective :D 02:38:24 "Il est venu" 02:38:44 wait, no 02:38:55 "J'ai X" is used for perfective 02:39:06 but not with reflective verbs 02:39:20 What's a reflective verb? 02:39:24 french has the same thing as german, where some verbs use j'ai and some use je suis, no? 02:39:26 and not with sorta reflective verbs, which include "venir" in french 02:39:50 (ich habe / ich bin) 02:40:18 tswett : a lot of verbs are used with the same agent as subject and object in french 02:40:36 English : "I shave" 02:40:39 Is that the same thing as a reflexive verb? 02:40:44 French : "Je me rase" 02:40:49 (I shave myself) 02:40:58 you cannot say "Je rase" in french 02:40:59 (norwegian can always use "har", although sometimes "er" is also possible) 02:41:14 Yeah, in Spanish, if you say "ducho", literally "I shower", you're failing to specify who it is that you're showering. 02:41:45 reflective verbs use the verb "être" as auxillary instead of "avoir" 02:41:48 reflective verbs don't use "er", but passive once can. 02:41:51 *ones 02:41:53 "Je me suis rasé" 02:42:17 "Jeg har barbert meg" is the same thing as that french 02:42:19 actually english sorta has this but only for passives 02:42:24 "I was shaved" 02:42:35 uses "to be" instead of "to have" as an auxillary 02:42:43 "El agua está hirviendo." The water is boiling? What is the water boiling, exactly? 02:42:58 and no:kommet = fr:venu can use "er". 02:43:23 Actually that might be an incorrect example. 02:43:43 some verbs can be either normal or reflective with no change in meaning 02:43:53 "la porte ouvre" / "la porte s'ouvre" 02:45:02 in french there's a category of intransitive verbs that sorta act like reflective verbs by using "être" as an auxiliary for perfective 02:45:12 "je suis tombé" etc 02:46:12 it's kinda similar to the category of verbs where the subject is the agent in transitive form, it the subject is the patient is the object in intransitive form. English has that sort of verb as well: "I burn books" "I burn" 02:47:11 Hey, another question. 02:47:53 If something's a "16 bit architecture", would you expect the CPU to be able to multiply any two 16-bit words, giving you a 32-bit result? 02:48:18 Or would you expect the result to be truncated to the least significant 16 bits? 02:48:34 tswett: x86 went the 16x16->32 way 02:48:46 so it's a valid thing 02:48:49 however 02:50:14 <\oren\> I would not necessarily expect it to have a MUL instruction 02:50:56 <\oren\> but assuming it does, it would probably be 16,16->32 02:51:07 68000 has a 16x16->32 multiply as well 02:51:08 well 02:51:10 actually 2 02:51:20 because there's mulu and muls (unsigned and signed) 02:51:29 but 68000 is a borderline 32bit arch 02:52:27 also 68k mul is really slow if I remember correctly 02:52:47 Other 16bit architectures have no multiplication!!! 02:52:57 <\oren\> did the 8080 or Z80 have an 8,8->16 mul instruction? 02:53:04 ha ha no 02:53:08 <\oren\> I know 6502 doesn't 02:53:22 the z80 version of multiplication is "buy a better cpu" 02:53:42 the 65816 version of multiply on snes is done by writing to an external hardware device! 02:54:03 <\oren\> various nes games have multiply subroutines, sometimes buggy 02:54:24 the sound cpu on the snes is 8bit and has multiplication 02:54:35 8x8->16 I *think* 02:54:55 <\oren\> lol, write to the sound sub system to multiply 02:55:13 Add, subtract, multiply, divide, modulo. All the arithmetic operations a boy could ever want. 02:56:44 \oren\ : there's a snes motherboard device for that actually 02:57:42 16bit cpus tend to have lots of grody operations mixing bit depth 02:58:00 16x16->32 multiply is a perfect example of grody operation mixing bit depth :D 02:58:27 <\oren\> 8086 seems to have 8,16->16 and 8,8->16 but not 16,16->16 02:59:58 x86 multiply is more like 03:00:26 I'm not bothering to describe separate instructions for AND, OR, NAND, NOR, XOR, blah blah blah. 03:00:28 32x32->64 but totally ignore the top 32bits so in practice 32x32->32 because of how C++ works 03:00:32 I'm just having one instruction called "logic". 03:00:46 -!- hppavilion[2] has quit (Ping timeout: 252 seconds). 03:01:03 so it's like 32x32 multiply writes to two registers which complicates register allocation in compilers 03:01:05 It's either OR or XOR, depending on a flag. There are two flags for inverting the inputs, and one for inverting the output. 03:01:16 <\oren\> tswett: you can describe 6502 in that manner 03:01:21 Wait, I just realized something. 03:01:40 With four flags, you can just put an entire truth table in the opcode. 03:01:42 So... 03:02:06 0001 is AND, 0111 is OR, 1110 is NAND, 1000 is NOR, 0110 is XOR, and so forth. 03:02:28 <\oren\> 6502 has a group of instructions where 3 of the bits tell you the operaiton and 3 tell you the address mode 03:02:45 \oren\ : x86 sortof has that 03:02:46 ish 03:03:23 -!- hppavilion[2] has joined. 03:05:01 x86 has that only with bizarro special cases everywhere. 03:05:11 Because hard instruction encoding is great. 03:05:20 well 03:05:28 x86 was designed for the 286 03:05:39 88086, actually. 03:05:55 when your memory bus is limited and you have no instruction cache 03:06:07 it doesn't matter if your instruction takes 5 cycles to execute 03:06:24 because the next opcode isn't coming before that anyways 03:06:45 so crunching as much operations in as little space as possible makes sense in that setting 03:07:36 <\oren\> tswett: you cna use the entries that are useless (like 0000, 1100, 1010, 1111) for things like add and sub where it isn't a truth table. 03:07:41 8086, 286 and 386 all easily starve the instruction stream 03:08:38 \oren\: that's an interesting idea. 03:08:44 Less easily for 386 systems that had an external cache. 03:08:53 I think 1111 isn't actually useless, though. 03:09:08 There's currently no other way to set a register to -1 using only one instruction. 03:10:14 Also, 1100 and 1010 are what you'd use for NOT. 03:10:59 <\oren\> what about 0011? 03:11:23 Useless. That's NOP. 03:11:26 And 0101 is MOV. 03:11:28 0011, 0101, 1100, 1010, 0000, 1111 are like... not too useless 03:11:31 well 03:11:34 Wait, wait. 03:11:37 NOP is certainly useful. 03:11:40 no they are useless 03:11:41 :) 03:11:45 I can get rid of MOV, actually, and just use 0101. 03:11:58 <\oren\> mad: they're useful for nopslides 03:12:06 Come to think of it, I don't really have another NOP, either. 03:12:14 Okay, lemme see what I've got. 03:12:16 0001, 0010, 0100, 1000, 1110, 1101, 1011, 0111, 0110, 1001 are the useful ones 03:12:39 if your right side is an immediate then a lot of those are equivalent 03:12:43 0000: sets a register to 0. But I also have two other ways of doing that: reg := reg - reg and reg := reg mod reg. 03:13:03 then you only really need 0001, 0100, 1110, 1011, 0110 03:13:56 <\oren\> but an immediate usually is larger than a register operand 03:14:18 So far I only have two instructions accepting immediates. 03:14:23 Load lower immediate, load upper immediate. 03:14:25 \oren\ : yes, which is why some cpus implement 0001, 0010, 1110, 0110 03:14:42 and, andnot, or, xor 03:15:25 Man, I didn't expect to be able to do pretty much all of ALU, plus NOP and MOV, using just seven "instructions". 03:27:48 Now, how easy should "load the lower byte of this register into the upper byte of that register" be? 03:27:56 Because currently, the process is... 03:29:08 Copy the source register to a temporary register. Shift the temporary register left by 8. Clear the lower byte of the target register. Bitwise OR the temporary register into the target register. 03:29:23 Hello 03:30:40 I think now, for instructions, all I need is memory access stuff, and then the stranger ones. 03:31:32 tswett: Oooh, what are the strange ones? 03:31:38 Z++ machine, anyone? 03:32:09 RENDER: Render a frame. MAP: Map some ROM into one of the two ROM blocks. TAPESEEK: This one's a doozy. 03:32:15 So... 03:33:21 TAPESEEK means "seek the tape the specified number of bytes in the specified direction, optionally reading from or writing to the tape along the way, and optionally waiting for the seek to finish before proceeding". 03:34:01 -!- XorSwap has joined. 03:35:31 tswett: RNDR 03:35:45 tswett: Can I get a brief architecture overview for what I've missed? 03:36:17 https://docs.google.com/document/d/11tncxhSD3MIjNQItRqacYCzE9g4U-kGVHzgADlx4BIg/edit?usp=sharing 03:36:22 There ye go. 03:36:27 Thank you. 03:37:35 So I guess there are gonna be two flags and two registers which are all write-only: the tape read flag, the tape write flag, the tape count register, and the tape destination register. 03:37:55 Every clock cycle, what the tape unit does is... 03:38:39 Oh, one more flag. The direction flag. 03:38:48 Actually, call that the reverse flag. 03:39:51 tswett: Oooh, full bitwise logic instruction. I like. 03:40:01 If the read flag is true, copy from the tape head to the memory pointed to by the destination register. If the write flag is true, do the other way around. If the counter is 0, clear the read and write flags. Otherwise, subtract 1 from the counter, and move the tape head and the destination register both forward if the reverse flag is false, backward if it's true. 03:41:20 tswett: I see nothing about a tape 03:41:28 I haven't written that part yet. 03:41:30 There's a tape. 03:41:46 I figure it'll have, like, 16 MiB of storage. 03:42:34 Which, given the speed of this thing (200,000 instructions per second, was it?), is so much storage that it will take more than a minute just to move from one end to the other. 03:42:48 Except there's the TAPERESET instruction, which instantly puts you back at position 0. 03:43:15 This means you're at one end of the tape; there's no position -1. 03:44:11 I need to sleep. Night, everyone. 03:45:52 -!- hppavilion[2] has quit (Ping timeout: 252 seconds). 04:23:52 -!- treaki__ has joined. 04:25:29 -!- treaki_ has quit (Ping timeout: 260 seconds). 04:31:25 -!- zzo38 has joined. 04:32:08 <\oren\> what is the fastest method to find the smallest power of 2 larger than x? 04:33:12 <\oren\> i'm currently using p=1;while(p would pow(2,log(x)+1); be faster, even if x is an int? 04:36:48 <\oren\> er, i guess that log should be log2 or something. 04:37:10 <\oren\> bah, I'll just test it 04:37:39 if(x < 65536) if(x < 256) if(x < 16) if(x < 4) if(x < 2) if (x < 1) return -1; else return 0; else if(x < 8) return 2; else return 3; else if(x < 64) if(x < 32) return 5; else return 6; else if(x < 128) return 7; else return 8; else if(x < 4096) if (x < 1024) if (x < 512) return 9; else return 10; else if (x < 2048) return 11; else return 12; 04:37:58 else if(x < 16777216) 04:38:02 etc ad nauseum 04:38:24 though it would probably generate a lot of branch prediction faults so probably not so great 04:38:37 hmm 04:40:53 r=0; if(x >= 65536) r+=16, x>>=16; if(x >= 256) r+=8, x>>=8; if(x >= 16) r+=4, x>>=4; if(x >= 16) r+=4, x>>=4; if(x >= 4) r+=2, x>>=2; if(x >= 2) r+=1, x>>=1; if(x == 0) r=-1; 04:41:13 getting there 04:42:55 static const signed char resTb[256] = {0,1,2,2,4,4,4,4,8,8,8,8,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, 04:43:02 <\oren\> argh, the i/o dominates, and if I remove it gcc just blanks my whole program 04:43:12 64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64, 04:43:34 128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, 04:43:38 128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128}; 04:43:51 -!- copumpkin has quit (Read error: Connection reset by peer). 04:45:08 int shift=0; if(x >= 65536) shift += 16, x<<=16; if(x >= 256) shift += 8, x<<=8; return resTb[x] << shift; 04:45:23 warning: x must be unsigned or else you get page faults on negatives 04:45:45 -!- copumpkin has joined. 04:46:36 <\oren\> mad: I'm using this on the size of a buffer to see if I should resize it 04:47:10 <\oren\> so if it's negative, I've got... problems 04:49:18 <\oren\> also, that table can be simplified using gcc's [4...7]=4 syntax for array literals 04:49:50 \oren\ : is that weird C99 stuff that only compiles in gcc? 04:50:54 " This extension is not implemented in GNU C++. " 04:51:00 <\oren\> nah, it's just a gnu extension 04:51:06 it doesn't even compile in gcc if it's a .cpp 04:51:16 <\oren\> lol, really? hahaha 04:52:10 <\oren\> probably because of having to call the initializer the right number of times 04:53:08 if it doesn't compile in .cpp in msvc and llvm, it's dead to me 04:56:29 \oren\: x|=x>>1; x|=x>>2; x|=x>>4; x|=x>>8; x|=x>>16; x|=x>>32; ++x; 04:57:01 just to be sure that all alternatives are listed 04:57:14 <\oren\> ok, pow(log2()) is out, because gcc apparently generates CALL instructions even with every possible optimization 04:57:19 (in reality, I believe mad's LUT code would be probably fastest) 04:57:34 \oren\: gcc has special functions __builtin_clz etc. that are optimized 04:57:43 (count leading zeros) 04:58:28 see http://stackoverflow.com/questions/2589096/find-most-significant-bit-left-most-that-is-set-in-a-bit-array 04:59:10 -!- jaboja has quit (Remote host closed the connection). 04:59:15 (as in, they use underlying special assembly if available) 04:59:19 You could use such thing as #ifdef if require to be use even without GNU 04:59:54 However I use the GNU extensions; sone features are possible in GNU89 mode such as zero-length arrays and empty structures and typeof and so on 05:00:14 oerjan: ah, indeed, LZCNT came with POPCNT 05:03:18 <\oren\> hmm 1<<(32-__builtin_clz(x)) 05:03:33 ?messages-loud 05:03:33 vanila said 1d 16h 8m 9s ago: i cant load your gopher :( 05:04:21 <\oren\> nice! no calls and no jumps! 05:05:22 <\oren\> ok, that's what I'll use 05:07:27 <\oren\> I wonder what the bsrl instruction actually does? 05:08:11 \oren\: there were some comments on stack overflow that its speed depends a lot on chip versions - some do a microcode loop internally. 05:08:52 although hopefully gcc knows what to choose.. 05:09:27 <\oren\> with all the bullshit they do to my code under optimization, they'd better be worth the hassle 05:12:29 <\oren\> in particular, unit tests are annoying to do when they remove code that has no side effects 05:14:19 <\oren\> maybe I *want* it to run a loop over every 32 bit number and tell me just how long it took, eh? 05:20:10 -!- XorSwap has quit (Quit: Leaving). 05:27:54 -!- hppavilion[2] has joined. 05:29:34 Possibly to specify volatile 05:33:15 -!- lambda-11235 has quit (Quit: Bye). 05:57:59 [wiki] [[A:;]] https://esolangs.org/w/index.php?diff=46643&oldid=46638 * 27.33.99.249 * (+4) added link to deadfish from deadfish interp 06:14:54 -!- idris-bot has quit (Ping timeout: 248 seconds). 06:17:07 -!- Melvar has quit (Ping timeout: 248 seconds). 06:22:24 A:; sounds like the finite-state automaton, isn't it? 06:23:30 wait, it should be PDA instead* 06:28:47 *doesn't it 06:29:51 you don't use "isn't it" unless "is" is the original verb (which may be auxiliary.) 06:30:28 oerjan: clearly that was shorthand for "isn't it so?" hth 06:31:02 oerjan: good catch. composing a sentence with an arbitrary lookahead is a bit hard. 06:31:28 (forgot to fix the matching verb when the original verb was changed) 06:31:35 aha 06:33:57 i have that problem when the irc lines get too long to show in the input 06:34:14 *the input line 06:34:22 yep, totally an example. 06:34:41 * oerjan is frequently tempted to whack his own head. 06:37:28 -!- hppavilion[2] has quit (Ping timeout: 252 seconds). 07:03:31 Goood morning 07:19:11 -!- AnotherTest has joined. 07:24:21 -!- AnotherTest has quit (Ping timeout: 276 seconds). 07:32:21 mörnïng 08:07:21 rnømıng 08:07:38 hi satan 08:11:37 `? canary 08:11:41 -!- lynn has joined. 08:12:24 ​*tsjørp* 08:19:28 -!- oerjan has quit (Quit: Nite). 08:31:35 -!- nooga has joined. 08:50:54 https://imgur.com/gallery/4nSm8pw 08:51:16 and they call *that* parenting done right? 08:51:22 BLUE CROSS WTF 08:52:04 -!- rodgort has quit (Ping timeout: 264 seconds). 09:01:21 -!- mroman has joined. 09:01:24 fniard 09:01:29 fungot: hello there 09:01:30 mroman: spineless tagless g-machine, fnord machine, i would think" to " ' foo" just as " :print". was apparently added to vi for quick-hit editing and on remote systems. 09:45:07 -!- nooga has quit (Ping timeout: 248 seconds). 09:54:30 -!- rodgort has joined. 09:54:40 -!- nooga has joined. 10:06:46 "You spineless, tagless g-machine" is a good insult. 10:07:01 fungot: What's your spine like? 10:07:01 fizzie: i like books :) i know better than i had to take. 10:10:07 fungot: What's the last book you've read, then? 10:10:07 fizzie: eval ( display ' hello) and ( " utils.ss" " walmart") are in lieksa currently. sorry. 10:10:23 Best book. 10:10:41 i like how the parantheses match 10:20:45 -!- rodgort has quit (Read error: Connection reset by peer). 10:22:58 -!- boily has joined. 10:26:33 -!- nooga has quit (Ping timeout: 240 seconds). 10:26:58 -!- AnotherTest has joined. 10:29:47 -!- nooga has joined. 10:32:06 -!- rodgort has joined. 11:07:47 -!- Yurume has quit (Ping timeout: 248 seconds). 11:09:05 -!- Yurume has joined. 11:13:51 -!- zadock has joined. 11:22:13 -!- boily has quit (Quit: BOOKED CHICKEN). 12:08:54 -!- Melvar has joined. 12:14:19 -!- Elronnd has quit (Quit: Let's jump!). 12:18:09 -!- nooga has quit (Ping timeout: 276 seconds). 12:22:05 -!- Elronnd has joined. 12:26:40 -!- Elronnd has quit (Quit: Let's jump!). 12:26:53 -!- Elronnd has joined. 12:31:40 -!- Sgeo__ has quit (Ping timeout: 252 seconds). 12:44:36 -!- benderpc_ has joined. 12:59:20 -!- benderpc_ has changed nick to bender|. 13:01:36 -!- zadock has quit (Quit: Leaving). 13:32:35 -!- lynn_ has joined. 13:33:28 -!- lynn has quit (Ping timeout: 264 seconds). 13:34:34 fungot: Would you ban fracking? 13:34:34 mroman: the next thing? 13:34:40 fungot: yeah, fracking the next thing. 13:34:41 mroman: wanna fork io to use st style? or what about 1-? 13:42:33 -!- gde33|2 has quit. 13:49:10 -!- J_Arcane has quit (Ping timeout: 244 seconds). 14:04:15 -!- llue has quit (Quit: That's what she said). 14:05:18 -!- lambda-11235 has joined. 14:06:31 -!- mroman has quit (Quit: Lost terminal). 14:57:10 -!- lambda-11235 has quit (Quit: Bye). 15:04:34 -!- ais523 has joined. 15:04:55 this is getting ridiculous: https://api.left-pad.io/?str=test&len=12&ch=%22 15:05:03 I am insanely angry about this on about three dimensions at once 15:07:44 ais523: https://github.com/jsayol/leftpad-sdk 15:09:07 -!- puck1pedia has joined. 15:09:07 i couldn't resist commenting in https://news.ycombinator.com/item?id=11350651 15:09:25 I've informed the author 15:09:30 wait... I can sort of understand that it trips on ", but why is it trying to parse its own broken json? 15:09:50 int-e: as far as I can tell it's literally substituting the URL parameters into a string, then interpreting the resulting string as json 15:10:01 -!- bender| has quit (Ping timeout: 240 seconds). 15:11:40 -!- Effilry has joined. 15:11:47 it's doing something along the lines of (this is Perl, but it's probably written in a different language) «my $json = qq/{str:"$str", len:$len, ch:"$ch"}/; my $args = JSON->decode_json $json;» 15:11:57 err, not -> 15:12:01 it's doing something along the lines of (this is Perl, but it's probably written in a different language) «my $json = qq/{str:"$str", len:$len, ch:"$ch"}/; my $args = JSON::decode_json $json;» 15:12:57 how can you screw up something so simple? 15:13:14 -!- b_jonas has quit (*.net *.split). 15:13:14 -!- puckipedia has quit (*.net *.split). 15:13:14 -!- FireFly has quit (*.net *.split). 15:13:14 -!- izabera has quit (*.net *.split). 15:13:14 -!- vyv has quit (*.net *.split). 15:13:15 anyway, this is thedailywtf material 15:13:15 -!- puck1pedia has changed nick to puckipedia. 15:13:52 how can you rely on a remote string padding service?! 15:14:41 it's all a joke 15:16:29 it was clearly designed as a joke, but I'm still offended at how badly it's written 15:16:43 is it? https://github.com/azer/left-pad/issues/4 doesn't sound like it's all a joke. 15:17:17 -!- gde33 has joined. 15:17:17 (Of course there's hope that the left-pad.io site is a joke.) 15:18:59 -!- Effilry has changed nick to FireFly. 15:20:08 i bet there will be people using leftpad-sdk 15:25:25 -!- izabera has joined. 15:29:39 -!- b_jonas has joined. 15:29:39 -!- vyv has joined. 15:32:46 -!- sewilton has quit (Ping timeout: 248 seconds). 15:34:07 -!- sewilton has joined. 15:57:24 -!- MoALTz_ has joined. 16:00:55 -!- MoALTz has quit (Ping timeout: 244 seconds). 16:07:33 -!- lynn_ has changed nick to lynn. 16:09:33 -!- me2 has quit (Ping timeout: 240 seconds). 16:09:52 -!- me2 has joined. 16:22:11 -!- idris-bot has joined. 16:25:37 -!- hppavilion[2] has joined. 16:25:41 tswett: Here's something that'd be useful for Quendle libraries 16:26:05 tswett: If every table had a global "properties" set of strings that could be given values to denote that that table meets certain properties 16:27:19 Though that doesn't work optimally... 16:45:13 -!- hppavilion[2] has quit (Ping timeout: 252 seconds). 16:56:58 https://twitter.com/internetofshit/status/711926515366100993 16:57:50 -!- hppavilion[2] has joined. 16:58:51 -!- MoALTz_ has changed nick to MoALTz. 17:06:25 -!- spiette has joined. 17:13:43 -!- gde33 has quit. 17:14:59 -!- spiette has quit (Quit: :qa!). 17:17:08 -!- lambda-11235 has joined. 17:21:52 -!- spiette has joined. 17:26:04 -!- nooga has joined. 17:44:37 -!- hppavilion[2] has quit (Ping timeout: 252 seconds). 18:00:03 -!- gde33 has joined. 18:01:31 -!- gde33|2 has joined. 18:04:25 -!- gde33 has quit (Ping timeout: 240 seconds). 18:29:50 -!- earendel has quit (Ping timeout: 248 seconds). 18:30:42 -!- hppavilion[2] has joined. 18:31:55 tswett: Hi? 18:33:57 https://allthetropes.org/wiki/User:Zzo38/level20.tex It says "Where's LNF again?" but what does "LNF" mean? Do you know? 18:38:23 -!- hppavilion[2] has changed nick to hppavilion[1]. 18:45:20 -!- lynn_ has joined. 18:46:04 -!- lynn has quit (Disconnected by services). 18:46:07 -!- lynn_ has changed nick to lynn. 18:50:18 -!- spiette has quit (Ping timeout: 268 seconds). 18:53:24 -!- lynn_ has joined. 18:53:24 -!- lynn has quit (Disconnected by services). 18:53:28 -!- lynn_ has changed nick to lynn. 19:02:31 -!- spiette has joined. 19:03:44 -!- spiette has quit (Max SendQ exceeded). 19:04:35 -!- spiette has joined. 19:25:54 -!- vyv has quit (Quit: leaving). 19:34:47 -!- Phantom_Hoover has joined. 19:43:21 -!- jaboja has joined. 19:57:50 -!- spiette has quit (Ping timeout: 248 seconds). 20:12:43 -!- spiette has joined. 20:12:55 -!- spiette has quit (Remote host closed the connection). 20:19:56 -!- lynn_ has joined. 20:22:51 -!- lynn has quit (Ping timeout: 246 seconds). 20:24:25 -!- lynn_ has quit (Ping timeout: 240 seconds). 20:24:28 zzo38: took some digging but "lost and found" seems to be a good guess 20:24:41 and... oh no, what happened to tvtropes? 20:32:37 [wiki] [[Special:Log/newusers]] create * Captainpicard98 * New user account 20:32:42 Ah apparently this has been going on for 3 years now, I'm so slow to notice... 20:35:16 zzo38: Lambda Normal Form 20:35:40 -!- hppavilion[1] has quit (Ping timeout: 252 seconds). 20:35:59 zzo38: The name "Iuckqlwviv Kjugobe" is difficult to pronounce and also to type and remember. 20:36:04 [wiki] [[Alphabetti spaghetti]] https://esolangs.org/w/index.php?diff=46644&oldid=42980 * Captainpicard98 * (+183) Added that there is a interpreter written in C on GitHub 20:36:23 Have you considered a simpler name like "Aaron"? 20:39:56 shachaf: hard to pronounce for you maybe, but to their species it may be normal. see http://stickman.qntm.org/comics.php?n=178 20:40:27 b_jonas: I think you need tentacles to pronounce it properly. 20:41:35 or telepathy maybe 20:52:46 \oren\: you're looking for the fastest method to find the smallest power of 2 larger than x? 20:53:37 -!- hppavilion[1] has joined. 20:56:29 Hmm. I was thinking you could do something with, like, x & -x or whatever it was, but I don't think that'll work. 20:56:41 x |= x >> 1; x |= x >> 2; x |= x >> 4; x |= x >> 8; x |= x >> 16; x |= x >> 32; x += 1; 20:57:02 > 40 .&. -40 :: Int 20:57:03 Precedence parsing error 20:57:03 cannot mix ‘.&.’ [infixl 7] and prefix `-' [infixl 6] in the same in... 20:57:09 > 40 .&. (-40) :: Int 20:57:11 8 20:57:15 the x & -x gives you the lsb 20:57:19 Right. 20:57:33 > map (\x -> x .&. (-x)) [1..] :: [Int] 20:57:34 [1,2,1,4,1,2,1,8,1,2,1,4,1,2,1,16,1,2,1,4,1,2,1,8,1,2,1,4,1,2,1,32,1,2,1,4,1... 20:58:59 the |= >> thing is a bit longwinded... 20:59:16 (and depends on the word size, I did it for 64 bits) 21:12:30 -!- hppavilion[1] has quit (Ping timeout: 244 seconds). 21:15:52 copumpkin: can you confirm http://www.bloombergview.com/articles/2016-02-05/bridgewater-s-bosses-are-fighting-over-something 21:18:01 -!- lambda-11235 has quit (Quit: Bye). 21:18:19 shachaf: Yes it is difficult, although it doesn't matter, it is supposed to be strange like that and some people pronounce it differently, although yes it would be the telepathy of course can also you can know what it is. About tvtropes, it is that there was some problems so some people forked it and made All The Tropes which is better in my opinion. 21:18:53 zzo38: I think the last sentence was addressed to int-e? 21:19:13 Yes, that is correct 21:19:20 (Sorry I forgot) 21:20:46 -!- AnotherTest has quit (Ping timeout: 268 seconds). 21:24:42 Yeah, I figured it out; they started doing odd things to the license in November 2013 and now it's having visible effects: the site looks like they're just monetizing the remains but without a community. 21:25:11 (or perhaps they have a community but I'm not going to look... the layout makes my head hurt) 21:25:55 All The Tropes is also based on MediaWiki which is a better wiki system, and also on MediaWiki you can have user CSS so you can change the layout if you do not like it, anyways 21:26:54 Why is MediaWiki a better wiki system? 21:27:13 It does have problems, but it seems to be better than whatever tvtropes uses 21:27:28 shachaf, no camelcase links for a start 21:44:43 -!- b_jonas has quit (*.net *.split). 21:44:51 -!- jaboja has quit (Ping timeout: 250 seconds). 21:47:22 -!- jaboja has joined. 22:00:39 -!- b_jonas has joined. 22:02:43 -!- lynn_ has joined. 22:07:26 -!- jaboja has quit (Ping timeout: 248 seconds). 22:08:34 -!- impomatic has quit (Read error: Connection reset by peer). 22:10:49 -!- Sgeo__ has joined. 22:22:10 there's a grammar here http://pubs.opengroup.org/onlinepubs/9699919799/utilities/chmod.html and i could be wrong but i think it allows this: chmod = 22:22:14 is that correct? 22:28:57 izabera: my chmod(1) allows "chmod = filename" as an input 22:29:01 and sets the mode to 000, it seems 22:29:16 yeah i just tried 22:29:37 I think I read in some book that mode 000 is used for the file to indicate the last login time? 22:29:56 uh what? 22:29:58 hmm, that's a bug? "If perm is not specified, the '=' operation shall make no further modifications to the file mode bits." 22:30:10 (my chmod clears all bits as well) 22:30:20 (I seem to have no such file on my computer though) 22:31:12 Ah, "further" refers to clearing all bits... fine. 22:31:15 confusing, but fine. 22:32:10 thanks int-e 22:32:13 and ais523 22:32:16 and zzo38 22:41:11 -!- hppavilion[1] has joined. 22:41:13 I had a partially-esoteric language idea about 5 minutes ago 22:41:34 I'm calling it CASM (pronounced like "chasm") right now 22:41:59 It is, basically, C with no type system 22:42:05 But it still has types 22:42:08 Basically, ASM typing 22:45:20 you're confused/confusing 22:52:23 hppavilion[1]: isn't that just C 22:55:17 coppro: Nope 22:55:33 izabera: You'll see in a bit 22:59:54 -!- jaboja has joined. 23:00:45 [wiki] [[CASM]] N https://esolangs.org/w/index.php?oldid=46645 * Hppavilion1 * (+2933) Created Page 23:01:03 [wiki] [[CASM]] M https://esolangs.org/w/index.php?diff=46646&oldid=46645 * Hppavilion1 * (+0) Formatting Glitch 23:01:29 [wiki] [[CASM]] M https://esolangs.org/w/index.php?diff=46647&oldid=46646 * Hppavilion1 * (+1) Formatting Reglitch 23:01:38 izabera: There 23:02:14 [wiki] [[CASM]] M https://esolangs.org/w/index.php?diff=46648&oldid=46647 * Hppavilion1 * (+2) unrelated formatting glitch 23:03:09 [wiki] [[CASM]] https://esolangs.org/w/index.php?diff=46649&oldid=46648 * Hppavilion1 * (-4) /* How does THAT work? */ code 23:03:48 hmm 23:03:52 idea 23:03:53 what does that have to do with assembly? 23:04:04 izabera: Assembly works in a similar way to CASM 23:04:05 an exception based programming language 23:04:06 for instance 23:04:14 i = 3 but if j = 2 then actually i = 4 23:04:32 izabera: Assembly doesn't have a type system, you just deal with the values in registers 23:05:13 izabera: Which is what makes assemblies a pain in the ass to implement in anything WITH a type system- you have to find a library to store floats and ints and nats in the same format so you can bitwise convert between them 23:05:42 dude that's javascript 23:05:46 izabera: By that I mean, you deal with values in registers by telling it what type to /treat/ them as, not letting it read them as a type 23:06:06 izabera: Try 5+9.2 in JS. It gives you 14.2 23:06:22 izabera: CASM gives you some illogical value I now have to calculate 23:06:42 you're nonsensical and not interesting 23:06:51 izabera: I find it interesting 23:08:18 izabera: Huh, when treated as a float 5+9.2 is still 9.2 23:08:25 Should've seen that coming, based on how floats work 23:08:40 Wait, no... 23:08:56 Yeah, I see why now 23:09:06 The mantissa is 0, I think 23:09:32 izabera: Did you read the article? 23:09:40 izabera: Because if you don't, you won't understand 23:09:50 izabera: (Though knowing me, if you do, you still might not understand) 23:10:07 i[+:int,float]f; 23:10:10 ^ Code 23:25:04 -!- oerjan has joined. 23:42:36 oh man 23:42:36 -!- jaboja has quit (Ping timeout: 276 seconds). 23:45:02 -!- jaboja has joined. 23:45:12 -!- boily has joined. 23:45:27 bood frily 23:46:06 wait, maybe that needs an extra "good" 23:46:38 @time oerjan 23:46:39 Local time for oerjan is Fri Mar 25 00:46:38 2016 23:46:42 @time boily 23:46:50 oerjan: good? are you sure? 23:47:16 Local time for boily is Thu, 24 Mar 2016 19:47:06 -0400 23:47:38 poor boily doesn't have friday yet 23:48:31 olsner: it's the technical term in english 23:48:54 hellørjan, hellochaf, hellolsner! 23:48:58 -!- impomatic_ has changed nick to impomatic. 23:49:04 I'm at September 2012. 23:49:12 wat 23:49:22 poor boily 23:49:24 what are you doing all the way back there? 23:49:40 you must be tired of all the us election news 23:50:35 -!- jaboja has quit (Ping timeout: 244 seconds). 23:51:07 oerjan: GG binge! :D 23:51:39 election news are quite filtered up here. 23:52:27 * oerjan currently gets all his news from wikipedia's front page. 23:52:48 it's surprisingly free of us elections. 23:53:06 although niger got its president reelected. 23:53:15 -!- asie has quit (Ping timeout: 264 seconds). 23:53:50 huh, just learnt of a new country from the wikipedia front page, "Benin" 23:54:56 they also elected a president 23:54:57 -!- asie has joined. 23:55:24 oerjan: all i see is a list of languages 23:56:18 shachaf: ERM 23:56:28 *english wikipedia 23:56:38 stupid pedants 23:57:16 who are you calling stupid 23:57:25 the pedants hth