00:00:08 <boily> . o O ( well, except that dretched surströmming. DAMNED EXPORT LAWS! )
00:00:43 <hppavilion[2]> 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:01:11 <tswett> So lemme see. I've got: ALU instructions, memory instructions, branching instructions.
00:01:19 <oerjan> hppavilion[2]: SKIPPY would, of course, skip the following python command.
00:02:09 <hppavilion[2]> tswett: So every JMP must have a corresponding RCV
00:02:09 <tswett> Which is probably the point, isn't it?
00:02:26 <tswett> Not only that, but the RCV must specify where it's coming from.
00:02:57 <hppavilion[2]> 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 <shachaf> Having only certain points that can be jumped to has precedent.
00:03:32 <hppavilion[2]> tswett: And RBRIDGE takes two arguments, then bridges to the parter, offset by its second argument
00:04:13 <tswett> By "parter" do you mean "partner"?
00:04:15 * int-e read a nice article on cheating in contract bridge last weekend
00:04:40 <int-e> But I suspect this is unrelated.
00:04:44 <hppavilion[2]> 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 <oerjan> boily: just import the ingredients for surströmming, then make it yourself hth
00:05:00 * oerjan suppresses evil cackle
00:05:27 <int-e> shachaf: by communicating through side channels (outside of betting and cards played)
00:05:34 <tswett> 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:06:09 <int-e> 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 <hppavilion[2]> tswett: Will you be able to modify the IP manually?
00:06:22 <tswett> Then you can jump by loading stuff into a register, then MOVing that register to the IP register.
00:07:11 <b_jonas> tswett: counting the instruction pointer as a register is almost always a bad idea
00:07:17 <tswett> That leaves 7 general-purpose registers.
00:07:21 <hppavilion[2]> tswett: Didn't QUACKVM™ by zzo38® do something like that?
00:08:20 <tswett> Incrementing the instruction pointer... the way I'm imagining it, that would mean "skip the next instruction".
00:08:45 <tswett> The instruction loop would essentially be: fetch the instruction; increment the instruction pointer; execute the instruction.
00:08:49 <oerjan> decrementing the instruction pointer
00:09:26 <hppavilion[2]> tswett: The IP-as-a-register thing has been done to death; seriously, try BRIDGE :P
00:09:26 <oerjan> hppavilion[2]: only if all instructions are one byte
00:09:52 <hppavilion[2]> oerjan: Oh, right, I assumed the IP would point to the instruction itself, not the individual byte
00:10:23 <hppavilion[2]> oerjan: But if INC %ip is SKIP, then DEC %ip is hang forever
00:10:50 <hppavilion[2]> oerjan: Assuming INC and DEC work the same way, of course
00:11:09 <hppavilion[2]> oerjan: Though DEC %ip as the first instruction will actually end the program, I believe
00:12:02 <tswett> Oh right. I figure that each instruction would always be two bytes.
00:12:05 <hppavilion[2]> oerjan: Though page fault ends the program, IIIAG, so...
00:12:15 <tswett> So the IP would increase by two each time, not one.
00:12:26 <oerjan> DEC %ip will hang if it's 1 wide
00:12:28 <hppavilion[2]> tswett: Just make it multiply IP by 2 before fetching
00:12:39 <tswett> Now here's a question. How much RAM should there be?
00:12:43 <oerjan> if it's more, you'll go to something inside it
00:12:56 <tswett> hppavilion[2]: but then people won't be able to do odd-aligned instructions!
00:13:10 <hppavilion[2]> tswett: Well that's a stupid thing to do anyway...
00:13:43 <tswett> 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:38 <tswett> I'm not trying to make an esoteric instruction set.
00:15:00 -!- nooga has joined.
00:15:13 <tswett> 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 <fizzie> That works for any number.
00:15:56 <tswett> I guess I shouldn't say "RAM"; I should say "memory space".
00:16:07 <tswett> Yes, but there's a significant divide between the two buckets.
00:16:40 <tswett> So, let's imagine we go with the 64 kiB of RAM. What can you do with that?
00:16:56 <zgrep> Play a game of battleship?
00:16:57 <fizzie> Anything you could do on a C-64.
00:17:45 <hppavilion[2]> fizzie: Assuming that the IS is C-64 complete, duh
00:18:01 <int-e> tswett: how does that work for quantum computers?
00:18:04 <tswett> 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 <fizzie> Well, it was an approximation.
00:18:29 <tswett> 2 kiB. That's not bad at all.
00:18:56 <fizzie> Anything you can actually compute like that sounds remarkably simple for a console graphics mode.
00:19:33 <fizzie> Well, I mean. No character cell sort of thing?
00:19:59 <int-e> oh tiles, sprites... hmm
00:20:21 <int-e> I bet modern consoles just have framebuffers though
00:20:23 <tswett> Yeah, I think the GameBoy used tiles, right?
00:20:43 <tswett> I like the idea of making the programmer invent a stack.
00:20:46 <boily> oerjan: that sounds lovely! brilliant!
00:20:52 <int-e> (stupid 3d graphics ;-) )
00:21:20 <zgrep> int-e: How does * work for quantum computers? :P
00:21:34 <tswett> 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 <tswett> Like, you can just say "now I want to display page 17".
00:21:49 <hppavilion[2]> tswett: Are you going to have computed jumps? If so, will they be relative for static?
00:21:58 <tswett> int-e: I didn't understand your quantum computer question, so I ignored it.
00:22:12 <tswett> hppavilion[2]: yes, and I think I'll make all addressing absolute.
00:22:21 <int-e> tswett: it's fine. I just wondered about a meaningful definition of RAM size
00:22:49 <tswett> Now, the benefit of having 64 ki addressable locations is that you can store a memory address in a 16-bit word.
00:22:53 <hppavilion[2]> tswett: Why not have a memory pointer head that all memory is accessed relative to?
00:23:20 <tswett> Having something like that isn't out of the question.
00:23:45 <int-e> hppavilion[2]: "segment"
00:23:48 <hppavilion[2]> tswett: I assume you'll have a FLIP instruction that updates the display, as opposed to updating every instruction cycle?
00:23:59 <hppavilion[2]> int-e: That's what I thought, but I just said x86 to avoid looking stupid
00:24:34 <tswett> Like... conditional branching?
00:24:50 <tswett> You get "jump if zero" and "jump if not zero" instructions.
00:25:11 <fizzie> 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 <hppavilion[2]> tswett: Why not "Jump if 42" and "Jump if not 42"?
00:25:41 <fizzie> (And then for how much memory a graphics buffer takes you need to start counting the bitmap and attributes separately.)
00:26:05 <tswett> hppavilion[2]: that's a good question.
00:26:46 <hppavilion[2]> tswett: Why not put a minimized call/cc in the set as a builtin? For... some reason? Somehow?
00:27:18 <tswett> That's called "push all registers, change the stack pointer, and pop into all registers".
00:27:50 <tswett> There's nothing that's "the stack". You can have a stack.
00:28:11 <tswett> All registers. Pushing all memory would mean inserting all memory into memory.
00:28:55 <hppavilion[2]> tswett: Figure out something new & exciting for conditionals, whynot.
00:29:01 <tswett> 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:34 <int-e> a huge part of it will be ROM
00:29:42 <tswett> Lemme think about the speed.
00:29:55 <int-e> maybe some memory mapped IO for good measure
00:30:24 <hppavilion[2]> Esoteric conditionals... like... "Call this program with the accumulator set to this other value"
00:30:27 <tswett> I want it to be just fast enough that you can touch every pixel several times per frame.
00:30:34 <int-e> and of course you need some free address space for future extensions
00:31:14 <tswett> 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:32:15 <tswett> 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 <boily> hppavilion[2]: classic trampoline. nothing to worry about. much.
00:33:04 <tswett> About 200,000 instructions per second sounds like a pretty decent amount.
00:33:26 <hppavilion[2]> RSS n "restart the program with acc=n, lak=curline"
00:33:34 <int-e> 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:34:47 <tswett> Now, I don't think I can get away with having an audio buffer.
00:35:45 <tswett> Audio uses about 40,000 samples per second. You can use fewer, if you want everything to sound muffled.
00:35:51 <int-e> tswett: just have 3 square wave generators or so :P
00:36:24 <tswett> There's nothing stopping me from having sine wave generators instead.
00:36:36 <fizzie> BytePusher has an audio buffer. Granted, it's pretty fast.
00:37:18 <fizzie> (Then again, it's an OISC.)
00:37:26 <tswett> Wait, FFT sound generation might actually be a good idea.
00:38:32 <tswett> Fast Fourier transform.
00:38:47 <fizzie> 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 <int-e> FFT is a highly popular implementation of the discrete fourier transformation.
00:39:01 <tswett> Lemme think about this.
00:39:48 <tswett> Let's imagine if you had a frame that's 1 second long and contains 40,000 samples.
00:40:12 <tswett> Each sample represents, uh, 25 microseconds.
00:40:37 <hppavilion[2]> tswett: Wikipedia says the DFT uses complex numbers
00:41:21 <tswett> Now, the discrete Fourier transform of that frame buffer thing there...
00:41:34 <fizzie> It's possible to make up a "plausible" phase with pretty little loss of generality.
00:41:52 <int-e> hppavilion[2]: check out https://en.wikipedia.org/wiki/Discrete_cosine_transform
00:41:59 <tswett> hppavilion[2]: note that the Fourier transform is already super commonplace in audio progressing.
00:42:04 <tswett> s/progressing/processing/
00:42:43 <tswett> Each complex number represents (if I may fuzz things a bit) the amplitude and phase of a bit of wave.
00:42:52 <int-e> 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 <tswett> 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 <int-e> and just for the sake of dropping a buzzword I don't really understand, why not use wavelets ...
00:44:06 <int-e> tswett: regardless, shifting samples around may be an issue.
00:44:38 * boily fuzzes hppavilion[2] with his mapole
00:44:54 <tswett> 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 <tswett> 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:48 <tswett> They're complex numbers instead of real numbers, making them effectively 40,000 again.
00:46:06 <oerjan> <hppavilion[2]> tswett: Eeeeeew? <-- https://esolangs.org/wiki/SMITH
00:46:12 <fizzie> No, it's 20001 complex numbers, with a little bit of redundancy for the first and last. IIRC.
00:46:34 <fizzie> 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:48 <fizzie> (The conversion would need to be a little bit more involved than just taking the FFT.)
00:47:06 <tswett> Right, because the FFT doesn't reduce the number of numbers you're dealing with.
00:47:10 <tswett> It's still about 40,000 a second.
00:47:39 <fizzie> More to the point, it'd be very difficult to make a continuous waveform with that thing.
00:48:10 <fizzie> You'd have a discontinuity at every frame boundary, unless your audio-generating code was very very careful with the phases.
00:49:19 <tswett> Like... what if you want to have a 40.5 Hz wave?
00:49:51 <int-e> > 40000 / round (40000/40.5)
00:49:53 <lambdabot> arising from a use of ‘show_M467247251696577848318660’
00:49:53 <lambdabot> The type variable ‘a0’ is ambiguous
00:50:26 <tswett> 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 <int-e> > 40000 / fromIntegral (round (40000/40.5))
00:51:03 <tswett> All right, let's forget about audio for the time being.
00:51:15 <fizzie> Even for a continuous 41 Hz tune, you'll have to set the phase component "correctly" for every output frame.
00:53:45 <tswett> fizzie: how do you figure?
00:54:18 <tswett> One of the Fourier transform sample things is going to correspond to exactly 41 Hz.
00:54:27 <tswett> No phase difference from one second to the next.
00:57:42 <tswett> 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 <oerjan> `learn hertz (German for heart) is an SI unit equal to the frequency of an average heartbeat.
00:58:03 <HackEgo> Learned 'hertz': hertz (German for heart) is an SI unit equal to the frequency of an average heartbeat.
00:59:15 <tswett> No no, the German for "heart" is "Hörte".
01:03:20 <int-e> Mr. dswedd made a joke.
01:04:33 <oerjan> i know, although shockingly the spelling _is_ a teeny bit off.
01:06:52 -!- jaboja has joined.
01:07:07 <tswett> Next question is, I guess, how much space should be provided for long-term storage?
01:07:19 <int-e> (the Schlock mercenerary webcomic used that term somewhere, I believe)
01:08:09 <tswett> For "cartridges" (ROM storing program code and static data) and "savegames" (read-write memory for persistent stuff).
01:09:04 <int-e> wasn't this supposed to be esoteric
01:09:35 <fizzie> int-e: They had also kill-o-huertz.
01:09:45 <fizzie> int-e: http://www.schlockmercenary.com/2000-08-06
01:10:01 <int-e> pity, you could add some write only memory and some read once memory
01:10:18 <int-e> (unbuffered DRAM? hmmmmm)
01:12:31 <boily> is it possible to have unbuffered ram?
01:12:36 <int-e> oh, only two occurrences? http://www.schlockmercenary.com/2001-01-28
01:12:44 <fizzie> 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 <fizzie> 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 <fizzie> ... pitch/time-shifting them however you please.
01:13:37 <int-e> 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 <fizzie> 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 <int-e> boily: speaking of DRAM. SRAM is a different matter entirely
01:14:21 <int-e> oerjan: "Wordspiel" sounds like a Microsoft joke to me.
01:14:55 <int-e> 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 <int-e> oerjan: Anyway I can't decide whether the 'd' in "Word" was intentional.
01:17:29 * oerjan beats Muphry with the saucepan ===\__/
01:18:45 * oerjan should probably have just used google translate.
01:18:47 <fizzie> 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 <fizzie> The intention being that you can hook up some DRAM without providing any (or at least much) extra refresh circuitry.
01:19:50 <mad> I guess that makes sense on ram that doesn't have faster CAS access than the whole RAS/CAS thing `D
01:20:02 <mad> ie "almost static" ram
01:20:15 <int-e> low clock frequency
01:20:51 <tswett> 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 <mad> the limit is something like 3mhz
01:21:07 <tswett> But switching between cartridges takes 2 seconds, and the screen can't update while this is happening.
01:21:28 <mad> int-e : it makes sense in an NMOS chip
01:22:04 <mad> which are so slow that you can share like half the cycles for the CPU other half for the GPU
01:22:12 <tswett> As for savegames: You get a super generous 16 MiB. But it's byte-at-a-time sequential access.
01:22:12 <mad> and the CPU isn't even throttled
01:22:16 <oerjan> int-e: "grossen", surely? (großen?)
01:22:17 <mad> (see: C64)
01:22:23 <mad> (see: apple2)
01:22:38 <oerjan> also, why is it impossible to select single words in the GT result :(
01:22:44 <int-e> oerjan: in your context, yes.
01:22:51 <tswett> And I said 200,000 instructions per second?
01:22:53 <myname> Es brachte ihm großen Schmerz/große Schmerzen
01:23:14 <tswett> So simply reading the entire tape, and discarding everything you read, would take more than a minute.
01:23:18 <oerjan> myname: no i cobbled it together with wiktionary and memory.
01:23:40 <myname> that sounds stupidly complicated
01:23:45 <fizzie> 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 <int-e> oerjan: (note that I changed both "Schmerz" examples to nominative case)
01:24:01 <tswett> What sounds stupidly complicated?
01:24:37 <myname> translating stuff by looking up seoerate words on wiktionary
01:24:41 <fizzie> Also! I had somehow gotten the impression that `thanks was just another silly #esoteric thing, but then QC description used it today.
01:24:54 <HackEgo> Thanks, entropy. Thentropy.
01:25:04 <fizzie> 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 <tswett> 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 <tswett> 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 <oerjan> 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 <fizzie> tswett: Press play on tape.
01:28:20 <tswett> 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 <tswett> fizzie: crap, I might be too young to get that reference.
01:29:07 <oerjan> no wait, "viel". with "groß" it chose the plural, which was correct but breaks the rhyme.
01:29:41 <oerjan> (on the other hand, "ein" is wrong.)
01:30:07 <int-e> . 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 <mad> why are german plurals so complex
01:31:16 <oerjan> fizzie: `thanks is inspired by Look Around You
01:31:50 <oerjan> specifically, `thanks ants
01:32:05 <HackEgo> ls: cannot access bin/ble*: No such file or directory
01:32:13 <fizzie> (It was hard to Google for.)
01:32:37 <fizzie> Also I should've known that, I've seen that bit.
01:32:58 <oerjan> fizzie: all my attempts at clicking to select single words select the whole thing immediately.
01:34:22 <fizzie> Weird. Dragging works for me.
01:36:47 <boily> down with plurals!
01:39:02 <boily> “Thorium dioxide is used as a stabilizer in tungsten electrodes in TIG welding, electron tubes, and aircraft engines.” ← nice.
01:41:06 -!- Phantom_Hoover has quit (Read error: Connection reset by peer).
01:41:22 <HackEgo> Thanks, bcdfghjkl. Tcdfghjkl.
01:41:35 <boily> no. I'm not recording myself saying that.
01:42:57 <oerjan> int-e: so basically, no one is sure what "Fretsche" means, right?
01:43:11 <int-e> oerjan: it's a frog
01:43:44 <HackEgo> Thanks, bcdfghjklmno. Tho.
01:44:00 <HackEgo> Thanks, Mgrvgrvladje. Thadje.
01:44:03 <int-e> oerjan: clear from context (it's from the frog prince story)
01:44:25 <int-e> the Grimm version, to be more precise
01:45:00 <oerjan> 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:46 <boily> 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 <int-e> oerjan: thanks for the link... so yeah apparently people must make things complicated ;)
01:48:25 <tswett> Darn, the rules given at Wikipedia for English phonotactics don't allow arbitrarily long onsets.
01:48:56 <tswett> So I can't have a word like "spspspsplot".
01:49:20 <mad> is it possible to have more than s+consonant+y/w/l/r in english?
01:49:25 <mad> in the onset
01:49:49 <mad> or sh+consonant+y/w/l/r if you admit yiddish loans
01:50:16 <tswett> Oh yeah, I heard the word "shprig" (schprig?) on TV once.
01:50:19 <tswett> Lemme see if the rules allow arbitrarily long codas.
01:52:16 <tswett> Yup. The rules don't prohibit "eefsfsfsfs".
01:52:38 <tswett> Though people tend to pronounce that as "twelfs".
01:52:45 <int-e> "thwart" is another nice one
01:53:34 <tswett> And as for "sixths"...
01:53:50 <int-e> wtf is "sphragistic"
01:55:11 -!- boily has quit (Quit: ALREADY CHICKEN).
02:00:39 <oerjan> why did the chicken kill the channel
02:02:12 <int-e> 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:20:30 <tswett> Yeah, "x" at the beginning of a word is usually /z/.
02:20:56 <zgrep> Most languages are weird.
02:21:02 <\oren\> but my english previously contained a lot worse spelling-pronounciations
02:21:11 <zgrep> (be they spoken or programmed)
02:21:15 <tswett> Let's see, is Spanish weird?
02:21:22 <tswett> It has two different copulas. That's weird.
02:21:22 <\oren\> due to learning to read before I could talk
02:21:58 <mad> 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 <mad> maybe spanish is a little bit less weird than the european norm
02:22:35 <mad> due to lack of case
02:22:49 <mad> and nominal declensions being relatively sane
02:22:50 <tswett> How many modern Romance languages do have case?
02:23:10 <mad> romanian sorta has case-ish
02:23:11 <\oren\> french has remnants iirc
02:23:20 <mad> \oren\ : like what?
02:26:29 <mad> the pronouns are essentially bound clitics to the verb
02:26:34 <oerjan> lots of languages have remnants in the pronouns, including english.
02:26:51 <mad> when they're not bound to the verb, pronouns have no case whatsoever in french
02:27:08 <mad> moi, je veux (moi = nominative?)
02:27:21 <mad> regarde moi (moi = accusative?)
02:28:13 <mad> il le donne à moi (moi = dative?)
02:28:17 <oerjan> romance languages have more verb forms than germanic ones, though.
02:28:47 <mad> ça vient de moi (moi = ablative?)
02:29:45 <mad> 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 <oerjan> \oren\: i think so. romance have even added new verb forms that latin didn't have.
02:30:48 <mad> french is more like languages where verbs have markers for not only subject but also object and other arguments
02:31:00 <oerjan> (although dropped some, too)
02:31:03 <mad> and the markers for objects etc aren't always the same as those for subjects
02:31:09 <mad> these languages do not have case
02:31:43 <mad> english is a much better example of remanent case
02:32:18 <mad> and also you could make a much better case for I/he/she being nominative
02:32:31 <mad> because they're not bound to the verb
02:32:39 <oerjan> \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 <oerjan> and english has the progressive which neither has.
02:33:51 <mad> I/me is totally true
02:34:02 <mad> 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 <oerjan> \oren\: you need I'd too
02:34:35 <mad> \oren\ : that CAN happen actually
02:34:41 <tswett> How come French doesn't have the present progressive? Did it just get lost at some point?
02:34:45 <mad> some west african languages have exactly that :D
02:34:57 <mad> tswett : french does have a present progressive
02:35:05 <mad> "je suis en train de venir"
02:35:50 <mad> it's just that the threshold for selecting the present progressive over the ordinary present is a lot higher in french
02:36:04 <tswett> "Suis en train de venir" is quite the verb form.
02:36:04 <mad> basically you're stressing the fact that the action is progressive
02:36:21 -!- lambda-11235 has joined.
02:36:58 <tswett> 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 <tswett> "(that he) were to have been going to change"
02:37:21 <\oren\> I'mma gonna be writing
02:37:25 <mad> the one thing that modern french doesn't have is the difference between perfective and perfect
02:37:33 <mad> "I came" vs "I've come"
02:37:46 <mad> Both are "Je suis venu"
02:38:17 <mad> "J'ai" is not perfective :D
02:38:24 <mad> "Il est venu"
02:38:55 <mad> "J'ai X" is used for perfective
02:39:06 <mad> but not with reflective verbs
02:39:20 <tswett> What's a reflective verb?
02:39:24 <oerjan> french has the same thing as german, where some verbs use j'ai and some use je suis, no?
02:39:26 <mad> and not with sorta reflective verbs, which include "venir" in french
02:40:18 <mad> tswett : a lot of verbs are used with the same agent as subject and object in french
02:40:36 <mad> English : "I shave"
02:40:39 <tswett> Is that the same thing as a reflexive verb?
02:40:44 <mad> French : "Je me rase"
02:40:49 <mad> (I shave myself)
02:40:58 <mad> you cannot say "Je rase" in french
02:40:59 <oerjan> (norwegian can always use "har", although sometimes "er" is also possible)
02:41:14 <tswett> 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 <mad> reflective verbs use the verb "être" as auxillary instead of "avoir"
02:41:48 <oerjan> reflective verbs don't use "er", but passive once can.
02:41:53 <mad> "Je me suis rasé"
02:42:17 <oerjan> "Jeg har barbert meg" is the same thing as that french
02:42:19 <mad> actually english sorta has this but only for passives
02:42:24 <mad> "I was shaved"
02:42:35 <mad> uses "to be" instead of "to have" as an auxillary
02:42:43 <tswett> "El agua está hirviendo." The water is boiling? What is the water boiling, exactly?
02:42:58 <oerjan> and no:kommet = fr:venu can use "er".
02:43:23 <tswett> Actually that might be an incorrect example.
02:43:43 <mad> some verbs can be either normal or reflective with no change in meaning
02:43:53 <mad> "la porte ouvre" / "la porte s'ouvre"
02:45:02 <mad> 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 <mad> "je suis tombé" etc
02:46:12 <mad> 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 <tswett> Hey, another question.
02:47:53 <tswett> 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 <tswett> Or would you expect the result to be truncated to the least significant 16 bits?
02:48:34 <mad> tswett: x86 went the 16x16->32 way
02:48:46 <mad> so it's a valid thing
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 <mad> 68000 has a 16x16->32 multiply as well
02:51:10 <mad> actually 2
02:51:20 <mad> because there's mulu and muls (unsigned and signed)
02:51:29 <mad> but 68000 is a borderline 32bit arch
02:52:27 <mad> also 68k mul is really slow if I remember correctly
02:52:47 <mad> Other 16bit architectures have no multiplication!!!
02:52:57 <\oren\> did the 8080 or Z80 have an 8,8->16 mul instruction?
02:53:22 <mad> the z80 version of multiplication is "buy a better cpu"
02:53:42 <mad> 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 <mad> the sound cpu on the snes is 8bit and has multiplication
02:54:35 <mad> 8x8->16 I *think*
02:54:55 <\oren\> lol, write to the sound sub system to multiply
02:55:13 <tswett> Add, subtract, multiply, divide, modulo. All the arithmetic operations a boy could ever want.
02:56:44 <mad> \oren\ : there's a snes motherboard device for that actually
02:57:42 <mad> 16bit cpus tend to have lots of grody operations mixing bit depth
02:58:00 <mad> 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 <mad> x86 multiply is more like
03:00:26 <tswett> I'm not bothering to describe separate instructions for AND, OR, NAND, NOR, XOR, blah blah blah.
03:00:28 <mad> 32x32->64 but totally ignore the top 32bits so in practice 32x32->32 because of how C++ works
03:00:32 <tswett> I'm just having one instruction called "logic".
03:00:46 -!- hppavilion[2] has quit (Ping timeout: 252 seconds).
03:01:03 <mad> so it's like 32x32 multiply writes to two registers which complicates register allocation in compilers
03:01:05 <tswett> 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 <tswett> Wait, I just realized something.
03:01:40 <tswett> With four flags, you can just put an entire truth table in the opcode.
03:02:06 <tswett> 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 <mad> \oren\ : x86 sortof has that
03:03:23 -!- hppavilion[2] has joined.
03:05:01 <pikhq> x86 has that only with bizarro special cases everywhere.
03:05:11 <pikhq> Because hard instruction encoding is great.
03:05:28 <mad> x86 was designed for the 286
03:05:55 <mad> when your memory bus is limited and you have no instruction cache
03:06:07 <mad> it doesn't matter if your instruction takes 5 cycles to execute
03:06:24 <mad> because the next opcode isn't coming before that anyways
03:06:45 <mad> 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 <mad> 8086, 286 and 386 all easily starve the instruction stream
03:08:38 <tswett> \oren\: that's an interesting idea.
03:08:44 <pikhq> Less easily for 386 systems that had an external cache.
03:08:53 <tswett> I think 1111 isn't actually useless, though.
03:09:08 <tswett> There's currently no other way to set a register to -1 using only one instruction.
03:10:14 <tswett> Also, 1100 and 1010 are what you'd use for NOT.
03:11:28 <mad> 0011, 0101, 1100, 1010, 0000, 1111 are like... not too useless
03:11:37 <pikhq> NOP is certainly useful.
03:11:40 <mad> no they are useless
03:11:45 <tswett> I can get rid of MOV, actually, and just use 0101.
03:11:58 <\oren\> mad: they're useful for nopslides
03:12:06 <tswett> Come to think of it, I don't really have another NOP, either.
03:12:14 <tswett> Okay, lemme see what I've got.
03:12:16 <mad> 0001, 0010, 0100, 1000, 1110, 1101, 1011, 0111, 0110, 1001 are the useful ones
03:12:39 <mad> if your right side is an immediate then a lot of those are equivalent
03:12:43 <tswett> 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 <mad> 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 <tswett> So far I only have two instructions accepting immediates.
03:14:23 <tswett> Load lower immediate, load upper immediate.
03:14:25 <mad> \oren\ : yes, which is why some cpus implement 0001, 0010, 1110, 0110
03:14:42 <mad> and, andnot, or, xor
03:15:25 <tswett> 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 <tswett> Now, how easy should "load the lower byte of this register into the upper byte of that register" be?
03:27:56 <tswett> Because currently, the process is...
03:29:08 <tswett> 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:30:40 <tswett> I think now, for instructions, all I need is memory access stuff, and then the stranger ones.
03:32:09 <tswett> RENDER: Render a frame. MAP: Map some ROM into one of the two ROM blocks. TAPESEEK: This one's a doozy.
03:33:21 <tswett> 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:45 <hppavilion[2]> tswett: Can I get a brief architecture overview for what I've missed?
03:36:17 <tswett> https://docs.google.com/document/d/11tncxhSD3MIjNQItRqacYCzE9g4U-kGVHzgADlx4BIg/edit?usp=sharing
03:37:35 <tswett> 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 <tswett> Every clock cycle, what the tape unit does is...
03:38:39 <tswett> Oh, one more flag. The direction flag.
03:38:48 <tswett> Actually, call that the reverse flag.
03:39:51 <hppavilion[2]> tswett: Oooh, full bitwise logic instruction. I like.
03:40:01 <tswett> 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:28 <tswett> I haven't written that part yet.
03:41:46 <tswett> I figure it'll have, like, 16 MiB of storage.
03:42:34 <tswett> 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 <tswett> Except there's the TAPERESET instruction, which instantly puts you back at position 0.
03:43:15 <tswett> This means you're at one end of the tape; there's no position -1.
03:44:11 <tswett> 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<x)p*=2;
04:36:23 <\oren\> 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 <mad> 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 <mad> else if(x < 16777216)
04:38:02 <mad> etc ad nauseum
04:38:24 <mad> though it would probably generate a lot of branch prediction faults so probably not so great
04:40:53 <mad> 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 <mad> getting there
04:42:55 <mad> 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 <mad> 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 <mad> 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 <mad> 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 <mad> int shift=0; if(x >= 65536) shift += 16, x<<=16; if(x >= 256) shift += 8, x<<=8; return resTb[x] << shift;
04:45:23 <mad> 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 <mad> \oren\ : is that weird C99 stuff that only compiles in gcc?
04:50:54 <mad> " This extension is not implemented in GNU C++. "
04:51:00 <\oren\> nah, it's just a gnu extension
04:51:06 <mad> it doesn't even compile in gcc if it's a .cpp
04:52:10 <\oren\> probably because of having to call the initializer the right number of times
04:53:08 <mad> if it doesn't compile in .cpp in msvc and llvm, it's dead to me
04:56:29 <lifthrasiir> \oren\: x|=x>>1; x|=x>>2; x|=x>>4; x|=x>>8; x|=x>>16; x|=x>>32; ++x;
04:57:01 <lifthrasiir> 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 <lifthrasiir> (in reality, I believe mad's LUT code would be probably fastest)
04:57:34 <oerjan> \oren\: gcc has special functions __builtin_clz etc. that are optimized
04:58:28 <oerjan> 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 <oerjan> (as in, they use underlying special assembly if available)
04:59:19 <zzo38> You could use such thing as #ifdef if require to be use even without GNU
04:59:54 <zzo38> 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 <lifthrasiir> oerjan: ah, indeed, LZCNT came with POPCNT
05:03:18 <\oren\> hmm 1<<(32-__builtin_clz(x))
05:03:33 <lambdabot> 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 <oerjan> \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 <oerjan> 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 <zzo38> Possibly to specify volatile
05:33:15 -!- lambda-11235 has quit (Quit: Bye).
05:57:59 <HackEgo> [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 <lifthrasiir> A:; sounds like the finite-state automaton, isn't it?
06:29:51 <oerjan> you don't use "isn't it" unless "is" is the original verb (which may be auxiliary.)
06:30:28 <shachaf> oerjan: clearly that was shorthand for "isn't it so?" hth
06:31:02 <lifthrasiir> oerjan: good catch. composing a sentence with an arbitrary lookahead is a bit hard.
06:31:28 <lifthrasiir> (forgot to fix the matching verb when the original verb was changed)
06:33:57 <oerjan> i have that problem when the irc lines get too long to show in the input
06:34:22 <oerjan> 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:19:11 -!- AnotherTest has joined.
07:24:21 -!- AnotherTest has quit (Ping timeout: 276 seconds).
08:11:41 -!- lynn has joined.
08:19:28 -!- oerjan has quit (Quit: Nite).
08:31:35 -!- nooga has joined.
08:50:54 <izabera> https://imgur.com/gallery/4nSm8pw
08:51:16 <izabera> and they call *that* parenting done right?
08:52:04 -!- rodgort has quit (Ping timeout: 264 seconds).
09:01:21 -!- mroman has joined.
09:01:30 <fungot> 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 <fizzie> "You spineless, tagless g-machine" is a good insult.
10:07:01 <fizzie> fungot: What's your spine like?
10:07:01 <fungot> fizzie: i like books :) i know better than i had to take.
10:10:07 <fizzie> fungot: What's the last book you've read, then?
10:10:07 <fungot> fizzie: eval ( display ' hello) and ( " utils.ss" " walmart") are in lieksa currently. sorry.
10:10:41 <myname> 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 <mroman> fungot: Would you ban fracking?
13:34:34 <fungot> mroman: the next thing?
13:34:40 <mroman> fungot: yeah, fracking the next thing.
13:34:41 <fungot> 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 <ais523> this is getting ridiculous: https://api.left-pad.io/?str=test&len=12&ch=%22
15:05:03 <ais523> I am insanely angry about this on about three dimensions at once
15:07:44 <myname> ais523: https://github.com/jsayol/leftpad-sdk
15:09:07 -!- puck1pedia has joined.
15:09:07 <tromp_> i couldn't resist commenting in https://news.ycombinator.com/item?id=11350651
15:09:25 <ais523> I've informed the author
15:09:30 <int-e> wait... I can sort of understand that it trips on ", but why is it trying to parse its own broken json?
15:09:50 <ais523> 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 <ais523> 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:01 <ais523> 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 <ais523> 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 <int-e> anyway, this is thedailywtf material
15:13:15 -!- puck1pedia has changed nick to puckipedia.
15:13:52 <int-e> how can you rely on a remote string padding service?!
15:16:29 <ais523> it was clearly designed as a joke, but I'm still offended at how badly it's written
15:16:43 <int-e> 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 <int-e> (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 <myname> 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 <hppavilion[2]> tswett: Here's something that'd be useful for Quendle libraries
16:26:05 <hppavilion[2]> 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:45:13 -!- hppavilion[2] has quit (Ping timeout: 252 seconds).
16:56:58 <izabera> 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:33:57 <zzo38> 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 <int-e> zzo38: took some digging but "lost and found" seems to be a good guess
20:24:41 <int-e> and... oh no, what happened to tvtropes?
20:32:37 <HackEgo> [wiki] [[Special:Log/newusers]] create * Captainpicard98 * New user account
20:32:42 <int-e> Ah apparently this has been going on for 3 years now, I'm so slow to notice...
20:35:40 -!- hppavilion[1] has quit (Ping timeout: 252 seconds).
20:35:59 <shachaf> zzo38: The name "Iuckqlwviv Kjugobe" is difficult to pronounce and also to type and remember.
20:36:04 <HackEgo> [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 <shachaf> Have you considered a simpler name like "Aaron"?
20:39:56 <b_jonas> 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 <shachaf> b_jonas: I think you need tentacles to pronounce it properly.
20:52:46 <tswett> \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 <tswett> 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 <int-e> x |= x >> 1; x |= x >> 2; x |= x >> 4; x |= x >> 8; x |= x >> 16; x |= x >> 32; x += 1;
20:57:03 <lambdabot> cannot mix ‘.&.’ [infixl 7] and prefix `-' [infixl 6] in the same in...
20:57:15 <int-e> the x & -x gives you the lsb
20:57:33 <tswett> > map (\x -> x .&. (-x)) [1..] :: [Int]
20:57:34 <lambdabot> [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 <int-e> the |= >> thing is a bit longwinded...
20:59:16 <int-e> (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 <shachaf> 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 <zzo38> 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 <shachaf> zzo38: I think the last sentence was addressed to int-e?
21:19:13 <zzo38> Yes, that is correct
21:20:46 -!- AnotherTest has quit (Ping timeout: 268 seconds).
21:24:42 <int-e> 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 <int-e> (or perhaps they have a community but I'm not going to look... the layout makes my head hurt)
21:25:55 <zzo38> 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 <shachaf> Why is MediaWiki a better wiki system?
21:27:13 <zzo38> It does have problems, but it seems to be better than whatever tvtropes uses
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 <izabera> 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:28:57 <ais523> izabera: my chmod(1) allows "chmod = filename" as an input
22:29:01 <ais523> and sets the mode to 000, it seems
22:29:37 <zzo38> I think I read in some book that mode 000 is used for the file to indicate the last login time?
22:29:58 <int-e> 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 <int-e> (my chmod clears all bits as well)
22:30:20 <zzo38> (I seem to have no such file on my computer though)
22:31:12 <int-e> Ah, "further" refers to clearing all bits... fine.
22:31:15 <int-e> confusing, but fine.
22:41:11 -!- hppavilion[1] has joined.
22:41:13 <hppavilion[1]> I had a partially-esoteric language idea about 5 minutes ago
22:41:34 <hppavilion[1]> I'm calling it CASM (pronounced like "chasm") right now
22:52:23 <coppro> hppavilion[1]: isn't that just C
22:59:54 -!- jaboja has joined.
23:00:45 <HackEgo> [wiki] [[CASM]] N https://esolangs.org/w/index.php?oldid=46645 * Hppavilion1 * (+2933) Created Page
23:01:03 <HackEgo> [wiki] [[CASM]] M https://esolangs.org/w/index.php?diff=46646&oldid=46645 * Hppavilion1 * (+0) Formatting Glitch
23:01:29 <HackEgo> [wiki] [[CASM]] M https://esolangs.org/w/index.php?diff=46647&oldid=46646 * Hppavilion1 * (+1) Formatting Reglitch
23:02:14 <HackEgo> [wiki] [[CASM]] M https://esolangs.org/w/index.php?diff=46648&oldid=46647 * Hppavilion1 * (+2) unrelated formatting glitch
23:03:09 <HackEgo> [wiki] [[CASM]] https://esolangs.org/w/index.php?diff=46649&oldid=46648 * Hppavilion1 * (-4) /* How does THAT work? */ code
23:03:53 <izabera> what does that have to do with assembly?
23:04:05 <coppro> an exception based programming language
23:04:14 <coppro> i = 3 but if j = 2 then actually i = 4
23:04:32 <hppavilion[1]> izabera: Assembly doesn't have a type system, you just deal with the values in registers
23:05:13 <hppavilion[1]> 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:46 <hppavilion[1]> 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:22 <hppavilion[1]> izabera: CASM gives you some illogical value I now have to calculate
23:06:42 <izabera> you're nonsensical and not interesting
23:08:18 <hppavilion[1]> izabera: Huh, when treated as a float 5+9.2 is still 9.2
23:08:25 <hppavilion[1]> Should've seen that coming, based on how floats work
23:09:40 <hppavilion[1]> izabera: Because if you don't, you won't understand
23:09:50 <hppavilion[1]> izabera: (Though knowing me, if you do, you still might not understand)
23:25:04 -!- oerjan has joined.
23:42:36 -!- jaboja has quit (Ping timeout: 276 seconds).
23:45:02 -!- jaboja has joined.
23:45:12 -!- boily has joined.
23:46:06 <oerjan> wait, maybe that needs an extra "good"
23:46:39 <lambdabot> Local time for oerjan is Fri Mar 25 00:46:38 2016
23:46:50 <olsner> oerjan: good? are you sure?
23:47:16 <lambdabot> Local time for boily is Thu, 24 Mar 2016 19:47:06 -0400
23:47:38 <olsner> poor boily doesn't have friday yet
23:48:31 <oerjan> olsner: it's the technical term in english
23:48:54 <boily> hellørjan, hellochaf, hellolsner!
23:48:58 -!- impomatic_ has changed nick to impomatic.
23:49:04 <boily> I'm at September 2012.
23:49:24 <olsner> what are you doing all the way back there?
23:49:40 <shachaf> you must be tired of all the us election news
23:50:35 -!- jaboja has quit (Ping timeout: 244 seconds).
23:51:07 <boily> oerjan: GG binge! :D
23:51:39 <boily> election news are quite filtered up here.
23:52:27 * oerjan currently gets all his news from wikipedia's front page.
23:52:48 <oerjan> it's surprisingly free of us elections.
23:53:06 <oerjan> although niger got its president reelected.
23:53:15 -!- asie has quit (Ping timeout: 264 seconds).
23:53:50 <olsner> huh, just learnt of a new country from the wikipedia front page, "Benin"
23:54:56 <olsner> they also elected a president
23:54:57 -!- asie has joined.
23:55:24 <shachaf> oerjan: all i see is a list of languages
23:57:16 <shachaf> who are you calling stupid