←2020-01-05 2020-01-06 2020-01-07→ ↑2020 ↑all
00:00:09 <b_jonas> it's a "new" thing, in the sense that it became used during the time I've been using linux
00:01:17 <b_jonas> earlier we only had ordinary file systems backed on ramdisks, which are like flat virtual devices that are stored in the (virtual) memory, swappable, but then the kernel has to do most of the work that it would have to do to represent the file system on a (very fast) flat block device
00:01:18 <zzo38> Specifically the data I want the external program to read is a blob in a SQLite database; maybe I should have mentioned that at first.
00:01:29 <b_jonas> so tmpfs is more efficient
00:01:49 <b_jonas> DOS also supports ramdisk
00:02:38 <b_jonas> zzo38: but what does the program that you spawn do with its input and output?
00:03:00 <zzo38> Converts it into a different format.
00:03:33 <b_jonas> are the input and output very large? do you need interactivity, that is, do you want to get part of the output while you're still streaming the input?
00:03:41 <b_jonas> and what do you do with the output?
00:03:51 <zzo38> (And actually it isn't the entire blob; a few bytes at the beginning will be skipped, and this number may vary.)
00:04:51 <zzo38> The input and output are potentially large, because it is a picture of the art in a card (e.g. the art box in a Magic: the Gathering card).
00:04:55 <b_jonas> also is the sql database in a file that is slow to read, and do you want to be able to stop reading early in case of an error?
00:05:16 <b_jonas> zzo38: just small vs large doesn't matter (unless it's so small that you just pass it in the argv), I'm asking if it can be very large
00:05:36 <b_jonas> so it's not too large
00:05:37 <zzo38> It might be very large if you are printing at a high resolution.
00:06:19 <zzo38> The SQL database is already open by the main program (TeXnicard; maybe telling it is TeXnicard is also useful to you I don't know)
00:07:17 <b_jonas> I'd probably just write the input data to a temporary regular file on a fast file system. if you can conveniently pass file descriptors to the program that you spawn, then unlink the file and pass just a file descriptor, that way if something goes wrong it's less likely that you have the temp file file remain on the disk.
00:08:16 <b_jonas> you usually don't even need an actual tmpfs, if you don't have security requirements, because if everything fits in memory and you delete the file soon then the file won't leave the cache, and if it doesn't fit in memory then writing it out to the disk is a feature,
00:08:48 <b_jonas> but if you have a fast swap device and no readily accessible file system on the fast device and no file system cache on the fast device, then you may want a tmpfs anyway
00:08:55 <b_jonas> but that's not a common configuration these days
00:09:56 <b_jonas> linux can now even handle the case when you store the file system on a slower rotating disk but cache it on a large SSD, because this is getting a commonly useful case
00:10:10 <b_jonas> you have to configure it well, and I don't know the details, but I hear it's working well
00:10:19 <zzo38> I didn't know it has that, but I thought of that too.
00:10:52 <b_jonas> that need not be true if you're using old operating system software though, but then you likely won't have a fast SSD
00:11:24 -!- LKoen has quit (Quit: “It’s only logical. First you learn to talk, then you learn to think. Too bad it’s not the other way round.”).
00:11:36 <b_jonas> I don't really know what happens on Windows, I deliberately avoid all system administration responsibilities for Windows and don't want to learn more than I really need for my job
00:11:57 <b_jonas> i.e. I don't work in system administration, but I need to administer my work desktop a bit to just use it for work
00:12:31 <zzo38> I could write the data from the database to an external file and then pass that to the external program and then read back the output into memory, I suppose, since the output is likely to be larger than the input, but then that requires making a copy of the data
00:12:53 <b_jonas> what will you do with the output?
00:12:59 <b_jonas> will you send it to a printer?
00:13:18 <b_jonas> or show it on the screen?
00:15:14 <zzo38> It will be combined with an in-memory picture
00:15:23 <b_jonas> I think this case hasn't come up for me, because I always just had the compressed image or video data stored in a disk file, and the raw data in memory going through a pipe
00:16:37 <b_jonas> in one case the uncompressed data was also in a disk file, but in a format that I had to decode in my program (not sqlite specifically), but even then the other side, the compressed data went to disk files
00:20:18 <zzo38> In my case the compressed data is in a SQLite database rather than a file by itself, and there should not be any need to store the uncompressed data in any file. The blob starts with a flag byte and then the MIME type (omitting "image/" if it belongs to that category, otherwise the full MIME type) and then the data in the format specified by the MIME type, and the configuration file specifies how to decode it.
00:21:08 <b_jonas> and I presume the same database contains other metadata over just the images
00:21:19 <b_jonas> which is why you don't just store the compressed image in a separate file
00:23:24 <zzo38> Yes, that is true.
00:23:56 <zzo38> And that is why it isn't stored in a separate file.
00:30:13 <b_jonas> zzo38: if you want to eg. send the uncompressed data to the printer, you can consider trying to not send that data through your process, so that your process only send ths compressed image to the forked process, and then the convereted output from that process is sent to whatever program does the printing
00:31:56 <b_jonas> then you don't need any non-blocking things
00:32:09 <b_jonas> but it's also not too hard to handle the two pipes in a select loop if you really need to
00:32:32 <zzo38> That picture is not the entire card, though, but only a part of it. And there is no guarantee that there will not be other stuff overlapping, or other things done to it before the page is completed.
00:33:21 <zzo38> (This program is meant to render cards for card games such as Magic: the Gathering; like MSE but different.)
00:33:47 <b_jonas> zzo38: and you want to process that uncompressed data together with some other data you read from the database, which is why you want it in the same process?
00:33:56 <zzo38> Yes.
00:34:42 <b_jonas> well, then either write something to a temporary file (that you unlink when you no longer need), or use a select loop to read and write the pipe in an unknown order
00:35:04 <b_jonas> if you need both sides from the same process then that's mostly what you can do
00:35:42 <b_jonas> though for some converters, you may be sure that it won't start writing even a header before it completely reads its input, in which case you can just write the input to the pipe and then read the output, without select or nonblocking
00:35:59 <b_jonas> that can depend on the converter and its options
00:36:05 <zzo38> Yes, OK. Probably I will just copy the data from the database to a temporary file when doing it, I suppose; that seems to be easily enough.
00:36:25 <zzo38> Yes, about what you said about the converter is true, but such thing is not known by this program
00:37:18 <b_jonas> of course another possibility is to also put the converter in the same process
00:37:30 <b_jonas> which I could do with ImageMagick in particualr
00:37:50 <b_jonas> because it has some dynamic libraries and documented interfaces
00:37:57 <b_jonas> C and C++ interfaces
00:38:30 <b_jonas> I think those allow reading compressed image streams from in memory, though I haven't actually tried that
00:38:46 <zzo38> Yes, although I am not even knowing if it is a format supported by ImageMagick or not, for one thing.
00:39:08 <b_jonas> even for embedding, I read/wrote the compressed image from/to disk files, I just manipulated the uncompressed image data in memory of the same process
00:39:39 <zzo38> (I can easily change how it communicates with the external program later if needed, I suppose.)
00:40:41 <b_jonas> sure, but you can do this with some libraries other than ImageMagick too
00:41:23 <b_jonas> there are good reasons for that, beacuse ImageMagick doesn't natively support everything
00:42:57 <zzo38> The way I have though, the user can install only the ones they need, rather than needing to add all of the dependencies that you don't use
00:42:59 <b_jonas> though you can also do conversion to a more convenient image format when you're importing to the database, and later read that convenient (but still compressed) input format with ImageMagick
00:44:19 <b_jonas> this can happen if you scan or photograph the card, but then preprocess the image and store the cleaned up image in the database as a jpeg
00:46:31 <b_jonas> that's when you can also rotate and crop and color correct the scan/photo, not just convert formats
00:46:40 <zzo38> Yes, I suppose that can also work, although then I wouldn't need to support more than one format inside the process (since conversion from any other format can be done before importing into the database), but JPEG is probably not a good choice in this case because JPEG is lossy.
00:47:29 <zzo38> (Also, the picture is not necessarily RGB and it might be CMYK instead.)
00:47:35 <b_jonas> you can still have more than one formats, since ImageMagick handles multiple formats with a natively built in decoder
00:48:00 <b_jonas> ImageMagick abstracts away some of those format differences
00:49:27 <zzo38> Probably only the artwork of the card would be stored in the database; the border pictures would be in external files.
00:49:33 <b_jonas> sure
00:49:47 <b_jonas> that doesn't change much of what I said
00:50:04 <b_jonas> mind you, these days there are too many cards with art extending outside the borders that you might not want to do that
00:50:18 <b_jonas> for the inner and middle borders that is
00:50:36 <b_jonas> you can do it with the outer black (or white) border, except for Un-sets
00:51:37 <b_jonas> but if you're assembling your own cards from art that you have, then you might store different elements of the card separately
00:51:38 <zzo38> Whether or not the art extends outside of the border wouldn't be built into the program anyways, since that stuff can be controlled by templates.
00:52:03 <zzo38> Have you used Magic Set Editor?
00:52:22 <b_jonas> one image for the art box, one image for the inner and middle border and text box, one for the text box watermark, and some for mana symbols
00:52:26 <b_jonas> no, I haven't used it
00:53:11 <b_jonas> I haven't created physical custom Magic cards, except simple proxies by putting a handwritten slip of paper next to the card inside the sleeve
00:54:39 <zzo38> Different elements of the card would be stored separately, some stuff (specific to these individual cards and the set) in the database, and other stuff (applicable to any cards) in the template.
00:57:36 <zzo38> If you are interested in TeXnicard then you should probably join the newsgroups of it. Also, for mana symbols I would probably want to use fonts instead (MSE uses pictures for the mana symbols, but I think to use fonts for the mana symbols will be better).
00:58:23 <b_jonas> sure, if you have a font that contains all forty-something mana symbols, then that can work
00:58:43 <b_jonas> plus the tap and untap symbol
00:59:01 -!- FreeFull has quit.
01:02:10 <zzo38> Yes.
01:02:58 -!- heroux has quit (Read error: Connection reset by peer).
01:03:26 -!- heroux has joined.
01:07:40 -!- budonyc has joined.
01:12:26 <zzo38> Do you think some special effects other than opacity might be needed?
01:32:02 <Lykaina> hi
01:32:15 <zzo38> Hello
01:32:27 <Lykaina> do we discuss magic the gathering in here?
01:33:36 <Lykaina> my usual irc channel for it is inactive atm
01:36:04 <zzo38> This channel isn't mainly for Magic: the Gathering, but sometimes we will discuss anything including Magic: the Gathering if there isn't the esoteric programming to discuss at the time, I suppose.
01:36:22 <zzo38> Do you like to make up custom Magic: the Gathering cards?
01:36:26 <zzo38> Or puzzles?
01:37:12 <Lykaina> https://tappedout.net/mtg-decks/nylea-based-mono-g/
01:37:23 <Lykaina> look good?
01:37:40 <Lykaina> that was the question i asked
01:39:00 <zzo38> I don't know much about looking if a deck is good or not.
01:41:02 <Lykaina> oh shit...i have more than 1 of a card and the format is edh
01:43:20 <zzo38> Oops, yes you are correct, you have 2x Ripjaw Raptor
01:43:31 <zzo38> That won't do, so you will have to change it
01:47:05 <zzo38> I also invented a file format for deck lists
01:51:41 <Lykaina> cool
01:51:50 <Lykaina> anyone use it?
01:52:29 <zzo38> I don't know.
01:54:27 -!- heroux has quit (Read error: Connection reset by peer).
01:55:03 <zzo38> Here is a file using that format: http://zzo38computer.org/textfile/miscellaneous/magic_card/decks/making_enemies.deck
01:55:31 <zzo38> For the commander, use a [COMMAND] block.
01:55:45 <zzo38> (The <DECK1> and <DECK2> are not needed if it is a single deck.)
01:56:07 <esowiki> [[Brainfuck Contest 1]] https://esolangs.org/w/index.php?diff=68695&oldid=68694 * Mikadio * (-28) /* Code that actually works as required */
01:59:32 -!- heroux has joined.
02:03:18 -!- heroux has quit (Read error: Connection reset by peer).
02:04:33 -!- heroux has joined.
02:07:57 -!- tromp_ has quit (Ping timeout: 260 seconds).
02:08:39 -!- tromp has joined.
02:10:53 <esowiki> [[Brainfuck Contest 1]] https://esolangs.org/w/index.php?diff=68696&oldid=68695 * Mikadio * (-3) /* Code that actually works as required */
03:03:26 -!- Lord_of_Life_ has joined.
03:05:43 -!- Lord_of_Life has quit (Ping timeout: 265 seconds).
03:06:18 -!- Lord_of_Life_ has changed nick to Lord_of_Life.
03:07:10 -!- heroux has quit (Read error: Connection reset by peer).
03:07:19 -!- heroux has joined.
03:20:02 -!- budonyc has quit (Quit: Leaving).
04:02:03 <imode> if you build a tool, and it has no purpose, what's the point of the tool?
04:03:35 <zzo38> I don't know.
04:06:09 <\oren\> should I rewrite my font editor in Rust?
04:08:18 <imode> what's the purpose?
04:37:42 <\oren\> it has a memory leak and I can't find it
04:38:05 <\oren\> if I rewrite it in rust, that is supposed to mean it can't have memory leaks
04:38:11 <zzo38> What font formats does it use?
04:38:15 <\oren\> CDF
04:38:19 <\oren\> BDF
04:38:28 <zzo38> OK
04:38:34 <zzo38> What is it written in now?
04:38:37 <\oren\> C
04:38:49 <zzo38> OK. Did you publish it?
04:43:59 <zzo38> I have read of use of farbfeld compressed with bzip2 for picture compression. However, if a picture is in JPEG format then it seem JPEG is a better compression, but farbfeld compressed with bzip2 will be a better compression than PNG in some cases.
04:44:29 <\oren\> http://www.orenwatson.be/neoletters_tools.tar
04:44:47 <zzo38> OK
04:53:44 -!- heroux has quit (Read error: Connection reset by peer).
04:54:25 -!- heroux has joined.
04:56:02 <zzo38> What transformations can be done to improve JPEG compression without being more lossy?
04:56:16 <zzo38> (Assuming the file that you are trying to transform is already JPEG)
05:09:36 <imode> \oren\: valgrind?
05:10:15 <imode> how do I build this?
05:11:20 <imode> and do you have a sample file?
05:11:39 <imode> built it, now I need a sample file.
05:16:50 <\oren\> http://www.orenwatson.be/neoletters.bdf
05:17:39 <zzo38> You could also try pcf2bdf
05:18:37 <\oren\> oh and it also need s UnicodeData.txt from the unicode foundation
05:18:52 <imode> mind linking me that?
05:19:18 <imode> nvm.
05:19:35 <\oren\> (this is how it displays the names) https://www.unicode.org/Public/UCD/latest/ucd/UnicodeData.txt
05:19:58 <imode> interesting..
05:20:04 <imode> how do I exit the editor?
05:20:12 <\oren\> ctrl-Q
05:20:24 <\oren\> or ctrl-X to exit without saving
05:21:32 <imode> interesting, yeah that's quite the memory leak. let's see if you clean up your allocated space.
05:21:46 <zzo38> What if you want to make a non-Unicode font though? Then the Unicode data is not applicable.
05:21:55 <imode> it looks like you never clean up the file judging by the size of the leak. the input BDF was ~3mb.
05:22:02 <\oren\> oh
05:22:04 <\oren\> hmmm
05:22:43 <imode> 4,347,372 bytes allocated and in-use at exit, but no double frees.
05:23:15 <\oren\> ok I'
05:23:30 <\oren\> fix that and then see if it still has a leak
05:24:24 <imode> I'm not that far in but I don't see any buffer cleanup, yeah.
05:26:26 <imode> when you load the font, you `malloc` quite a bit of stuff and attach it to the passed-in bdfinfo, but I don't see you freeing it.
05:26:42 <\oren\> I guess I kinda forgot that valgrind can't tell the difference between things still accessable at exit and things that have "actually" leaked
05:26:45 <imode> that plus a calloc and no free.
05:27:04 <imode> yeah you haven't lost the references to anything, you just haven't cleaned up the stuff you have references to.
05:27:44 <imode> you `calloc` a big ol' hunk of space for some glyphs but you never free them.
05:29:48 <imode> this is if you just load a font file, save and close. I imagine if you open another, you'll do the same allocations and lose the previous references.
05:29:57 <zzo38> I think valgrind can tell you which one is "lost", though.
05:30:27 <imode> it can and will.
05:30:55 <\oren\> yeah apparently I'm bad at know what valgrind is saying
05:33:01 <\oren\> I thought it meant I actually lost reference to that much
05:33:11 <imode> nah, just means it's in use at exit.
05:33:22 <imode> you'll see that with SDL and a couple of other libs.
05:36:32 <\oren\> I'm going to work on making these tools more flexible and possible to work on fonts with different dimensions
05:37:06 <imode> I dig the editing aesthetic. a lot of the glyphs are broken for me though.
05:37:52 <\oren\> Well it relies on my fon't particular method of displaying braille to look good
05:38:02 <imode> oh no the braile works great.
05:38:17 <imode> this is garbage on my screen, though: "𝔅𝔇𝔉𝕖𝕕𝕚𝕥"
05:38:42 <imode> too compressed I guess.
05:41:56 <\oren\> https://imgur.com/GKQKGJG
05:42:37 <imode> ah yeah, I can kinda see the edit part. capitals are just totally gone, though. my terminal is trying lmao.
05:42:38 <\oren\> it says BDF in fraktur and edit in blackboard bold
05:43:41 <\oren\> In my font, bold fraktur I gave up on and I made it uncial instead
05:43:50 <imode> looks solid on that screen.
05:45:39 <\oren\> https://imgur.com/yCgc3Kv I like how the unicode consortium added all these but then was like, full superscript and subscript alphabets? that's too far
05:46:23 <imode> unicode doesn't have those? wtf.
05:47:49 <\oren\> superscript small q, large C, Q, S, X, Y, Z are all that is missing for superscript
05:48:29 <zzo38> I made up a better character set for the specific use of being used on a fix pitch text grid, such as on a terminal emulator.
05:48:29 <\oren\> ᵃᵇᶜᵈᵉᶠᵍʰⁱʲᵏˡᵐⁿᵒᵖ ʳˢᵗᵘᵛʷˣʸᶻ
05:48:46 <imode> why the hell are they missing?!
05:49:06 <imode> what do they have against q, C, Q, S, X, Y and Z?
05:49:18 -!- stux has quit (Ping timeout: 260 seconds).
05:49:24 <\oren\> there was a big argument on the Unicode mailing list about it
05:49:47 <\oren\> and basically the rasoning was, unicode isn't supposed to be used for formatting
05:49:54 <imode> bullshit.
05:50:01 <imode> that reasoning is bullshit.
05:50:02 <\oren\> it is bullshit
05:50:22 <imode> isn't there a character reversal glyph.
05:50:41 <imode> U+202E?
05:50:42 <zzo38> Unicode is very messy, and is equally bad for all uses.
05:51:42 <zzo38> However, it does have the advantage of being compatible with ASCII, at least.
05:51:46 <imode> yeah, bullshit, there's many, many, _many_ cases where unicode makes explicit statements about how a thing should be formatted. if that was a disagreement, the super and subscript forms shouldn't even be included, not this half measure.
05:54:23 <zzo38> Do you like my terminal character coding? (It is not meant to be used for other purposes, though; but there may be other character sets useful for the other purposes.)
05:54:38 <imode> I don't know your terminal character coding.
05:54:41 <\oren\> I have it on my todo list to add all the missing ones in hthe PUA in my font
05:55:18 -!- stux has joined.
05:57:11 <zzo38> This is so far: http://zzo38computer.org/textfile/miscellaneous/utce Some stuff may be changed if needed
05:57:42 <zzo38> Some of these characters are also in Unicode but also many isn't.
05:58:20 <zzo38> (And in some cases, it does correspond to a Unicode character but the width may differ or the way different characters are distinguished may differ from Unicode.)
06:00:03 <\oren\> yeah width is really messy in unicode and one of the goals of my font is to be the only large font that actually has correct width as defined in Unicode Standard Annex #11 East Asian Width
06:00:56 <\oren\> becuase no other font maker seems to care, and in particular, GNU unifont has wide devanagari which is stupid
06:01:44 <\oren\> GNU unifont totally ignores the fact that nearly all terminals use the annex #11 for width data
06:03:02 <zzo38> I think what I did is better though.
06:03:58 -!- nfd9001 has joined.
06:04:11 <zzo38> (I also think that each program should do one thing well, which is the UNIX philosophy; in this case though it is the character set/coding rather than a program, but still that is what it is. This one does specifically terminal character coding. For other purposes, use something else.)
06:04:34 -!- nfd9001 has quit (Client Quit).
06:04:59 -!- nfd9001 has joined.
06:06:04 <\oren\> the main goal of my font is to display unicode correctly and more-or-less biguously in a terminal
06:06:49 <zzo38> O, OK. Well, then you have it good for that. But I think that Unicode is the wrong character set for this purpose.
06:07:19 <zzo38> Also, the word "biguously" is not in Wiktionary (nor is "biguous").
06:10:36 <\oren\> I use biguous because unambiguous seems like a double negative
06:16:16 <zzo38> OK
06:34:24 <kingoffrance> well, that makes my charset madness sound less insane, so good work zzo38 i agree
06:34:50 <kingoffrance> re: UNIX philosophy
07:11:28 <zzo38> Ghostscript includes a file viewjpeg.ps to print a JPEG file. In the comments where it says the author's address, I found a quine in PostScript.
07:14:06 <zzo38> (Also, it doesn't take the JPEG file name as a command line argument, even though Ghostscripts supports that. It is easily enough to fix it so that it does, though.)
07:26:57 -!- nfd has joined.
07:29:38 -!- nfd9001 has quit (Ping timeout: 260 seconds).
07:37:55 -!- nfd has quit (Ping timeout: 268 seconds).
07:41:59 -!- nfd9001 has joined.
07:52:18 <esowiki> [[Backhand]] M https://esolangs.org/w/index.php?diff=68697&oldid=68472 * Jo King * (+141) added links to interpreter
08:04:10 -!- nfd has joined.
08:06:54 -!- nfd9001 has quit (Ping timeout: 268 seconds).
08:07:14 -!- imode has quit (Ping timeout: 240 seconds).
08:07:20 -!- ArthurStrong has joined.
08:07:54 <ArthurStrong> Hi all
08:22:06 <zzo38> Hello
08:29:39 <ArthurStrong> zzo38:
08:29:48 <ArthurStrong> Interestingly, can simulated annealing be used for PCB routing?
08:33:48 -!- nfd has quit (Ping timeout: 260 seconds).
08:35:03 <zzo38> Maybe; I don't know.
08:39:02 -!- b_jonas has quit (Quit: leaving).
09:23:13 -!- ArthurStrong has quit (Quit: leaving).
10:33:05 <int-e> http://apt.cs.manchester.ac.uk/projects/tools/mucs-pcb/ explicitly mentions simulated annealing.
10:43:33 -!- wib_jonas has joined.
10:45:34 <wib_jonas> Lykaina: sometimes this channel talk about esoteric aspects of Magic: the Gathering. In particular, ais523 presented two attempts at proving M:tG Turing complete, in the sense that you can transform any computation to a game that terminates iff the computation terminates.
10:47:28 <esowiki> [[User talk:Hex96]] https://esolangs.org/w/index.php?diff=68698&oldid=68512 * JonoCode9374 * (+206) /* Getting one of my languages on the random language button */
10:47:36 <wib_jonas> See https://esolangs.org/wiki/Talk:StackFlow , there's one attempt to proof based on the StackFlow language, which has a bug that we couldn't fix;
10:48:07 <wib_jonas> then there's a later attempt of proof based on a simpler computation model, The Waterfall Model, where the problem hinges on compiling universal computation to a small enough Waterfall Model program
10:51:02 <wib_jonas> This latter one is believed to prove at least Turing completeness, and ais523 details it in an article linked from there.
10:52:00 <wib_jonas> I wonder if you can get more than Turing completeness if you take the rules for breaking infinite loops literally.
10:55:11 <int-e> wtf. '721.1a The rules for taking shortcuts are largely informal. As long as each player in the game understands the intent of each other player, any shortcut system they use is acceptable.'
10:55:59 <int-e> That gives you a lot of leeway when it comes to TC-ness... by choosing sufficiently well-informed players.
10:57:10 <int-e> Oh. 712.1c says tournaments are different :/
10:57:27 <wib_jonas> Actually the article is based on a different construction
10:57:35 <wib_jonas> one that doesn't use Hungary Lynx and Noxious Ghoul
11:04:22 <int-e> The tournament version of shortcuts is sufficiently fun.
11:05:11 -!- kspalaiologos has joined.
11:18:07 <int-e> Ah, spoilsports: "Non-deterministic loops (loops that rely on decision trees, probability or mathematical convergence) may not be shortcut."
11:34:04 <kspalaiologos> I (possibly) made a Malbolge interpreter in Malbolge
11:35:26 <kspalaiologos> gah
11:35:30 <kspalaiologos> 10GB of ram eatenm
11:35:43 <kspalaiologos> and it was swapping
11:45:16 <kspalaiologos> is there any busy beaver competition?
11:46:15 <Taneb> As in, to find ever-busier beavers?
11:46:18 <Taneb> Not to my knowlege
11:48:20 <kspalaiologos> yep
11:48:25 <kspalaiologos> because I've got a nice one
11:48:35 <kspalaiologos> that requires more gigabytes of memory than there are atoms in universe
11:48:45 <kspalaiologos> and I *know* it will finish, eventually
11:49:15 <Taneb> How many states?
11:51:15 <kspalaiologos> it's hard to tell
11:51:28 <kspalaiologos> really
11:51:36 <kspalaiologos> the program is around 40MB big
11:52:09 <Taneb> Then that's not very interesting
12:10:13 -!- Sgeo has quit (Ping timeout: 260 seconds).
12:17:57 <int-e> http://www.logique.jussieu.fr/~michel/bbc.html has some pertinent numbers
12:22:26 <Taneb> It looks like you can require more memory than there are atms in the universe with 2 symbols and 7 states
12:25:06 <int-e> Or 6 states, unless you compress the tape (assuming the tape is compressible... which seems likely since we do have a termination proof)
12:27:26 <int-e> (going by the 10^78 to 10^82 estimate for the number of atoms in the universe, with a very generous margin for error.)
12:29:46 <int-e> Of course the tape is very compressible if you accept a description of the form "tape after executing the TM M for n steps, starting from an empty tape".
13:04:25 <kspalaiologos> interesting
13:16:26 <kspalaiologos> << In Haskell, we don't talk about immutability. We talk about cytoendohygrobimorphisms in the category of endobiditricomanifolds and other elementary constructs. >>
13:16:37 <kspalaiologos> /r/shittyprogramming gold
13:17:35 <wib_jonas> ``` cat /hackenv/wisdom/zygo*
13:17:35 <HackEso> A zygohistomorphic prepromorphism is used when you really need both semi-mutual recursion and history and to repeatedly apply a natural transformation as you get deeper into the functor.
13:18:16 <kspalaiologos> wha
13:18:32 <kspalaiologos> ``` ls /hackenv/wisdom/zygo*
13:18:33 <HackEso> ​/hackenv/wisdom/zygohistomorphic prepromorphism
13:18:47 <kspalaiologos> interesting
13:18:54 <kspalaiologos> what is a monad anyway
13:19:17 <kspalaiologos> the definition in our Polish wiki used to look like verses summoning satan
13:19:17 <wib_jonas> kspalaiologos: https://wiki.haskell.org/Zygohistomorphic_prepromorphisms
13:19:32 <kspalaiologos> gosh it really exists
13:20:23 <wib_jonas> Unfortunately, no one can explain what a monad is. You have to see it for yourself.
13:21:09 <kspalaiologos> can one make a monad in C?
13:21:18 <kspalaiologos> or other language I'm at least barely familliar with
13:22:00 <int-e> kspalaiologos: https://willamette.edu/~fruehr/haskell/evolution.html seems somewhat relevant.
13:22:25 <wib_jonas> ^ ah yes, that too
13:22:56 <wib_jonas> I have my own factorial definition at http://www.math.bme.hu/~ambrus/pu/Bin.hs
13:22:57 <kspalaiologos> interesting
13:23:01 <kspalaiologos> I like scheme
13:26:24 <int-e> Monads in C... I suppose you can come up with some programming patterns, in a similar spirit as OO in C. But I wouldn't expect any benefit from going that route, just obfuscation.
13:26:35 -!- kritixilithos has joined.
13:27:09 <kspalaiologos> OO
13:27:12 <kspalaiologos> who would like OO
13:27:24 <kspalaiologos> all you need is procedural programming
13:27:40 <int-e> OO gives you associated namespaces for your types.
13:27:43 <int-e> I like that.
13:27:54 <kspalaiologos> the main principle of OO is encapsulation
13:28:13 <kspalaiologos> so you don't have a global state, but rather it's simplified down to object instances
13:28:34 -!- arseniiv has joined.
13:28:43 <int-e> ("OO gives you namespaces for types" of course is the one benefit that you lose instantly when encoding it in C)
13:29:07 <kspalaiologos> if two objects instances mutate (send a message) to certain single object, you lose the benefit of encapsulation
13:29:21 <kspalaiologos> and there is something that resembles the state
13:29:32 <kspalaiologos> Namespace for types?
13:29:39 <int-e> I really liked OO for MUD programming.
13:30:04 <kspalaiologos> alright?
13:30:17 <kspalaiologos> I thought about extending C a bit
13:30:20 <int-e> So you have monsters as objects, players as objects, things you carry around as objects, rooms as objects... it's mostly very tangible.
13:30:27 <kspalaiologos> yeah
13:30:33 <kspalaiologos> but you could do this in C
13:30:43 <kspalaiologos> look at linux source code and how the drivers are implemented
13:30:51 <int-e> "you can do this in C" is not a valid argument
13:31:18 <kspalaiologos> it would be as comfortable when done procedurally as the example you're giving
13:31:35 <int-e> It's basically a tautology. (You can program it in C, or you can't program it at all.)
13:33:22 <int-e> I'm quite happy with the fragment of C++ that has structs and classes, no inheritance, and a small amount of templates. I prefer it to doing the same thing in C because of the namespace thing, and well, because templates offer some amount of code generation when you need it.
13:34:12 <int-e> (Oh and exceptions see the occasional use as well... as non-local returns.)
13:44:14 <wib_jonas> int-e: yes, but with or without implicitly called user-defined destructors (and implicitly called copy/move constructors/initializers)? because that is, I think, what most clearly distinguishes C++ from C.
13:45:38 <kspalaiologos> one could employ boehm GC
13:45:41 <int-e> wib_jonas: I really try to stick to pod-types.
13:45:45 <kspalaiologos> all your low level stuff is gone
13:51:34 <int-e> kspalaiologos: I do use Haskell too. :P
13:52:02 <kspalaiologos> any ideas on brainfuck <=> SQLite interop?
13:52:09 <kspalaiologos> especially the callbacks
13:52:12 <kspalaiologos> how to get over 'em
13:52:54 <int-e> I'll go out on a limb and say I have better things to think about.
13:53:31 <kspalaiologos> it's already an amazing thing to think about
13:53:44 <kspalaiologos> also, as you use haskell you're probably experienced in CS theory
13:54:03 <kspalaiologos> would you tell me how the f*ck can 3-celled brainfuck be Turing complete
13:54:07 <int-e> I mean I admire your efforts to deprive "Brainfuck" of its esolang status, but I don't want to be part of it.
13:54:16 <kspalaiologos> I know about collatz function
13:54:21 <kspalaiologos> and I know it proves turing completness
13:54:34 <kspalaiologos> but it makes no sense to me that you can for example do modulus operation on it
13:54:35 <fizzie> There was that one brainfuck system call library thingamajick, what was it called? Wasn't really anything very surprising, though -- just a specific protocol for the input/output instructions.
13:54:36 <kritixilithos> kspalaiologos: oh you're extending bf and making it a proper language?
13:54:43 <int-e> kspalaiologos: Just work through oerjan's construction.
13:54:55 <int-e> It's only slightly tricky!!!1
13:55:06 <kspalaiologos> kritixilithos, wiring up SQLite to write an URL shortener in brainfuck
13:55:19 <kspalaiologos> int-e, I mean, possibly
13:55:21 <kritixilithos> what have you added so far?
13:55:33 <kspalaiologos> interop between brainfuck and sqlite
13:55:41 <kspalaiologos> currently you can just INSERT to the database
13:55:50 <kspalaiologos> SELECT is being worked on because I can't get over the callback mechanism
13:56:32 <kspalaiologos> I thought that if I had 3 bignum cells and a brainfuck like language
13:56:40 <kspalaiologos> to prove it's turing complete I'd simulate a stack machine
13:56:47 <kspalaiologos> that has two stacks and in result is turing complete
13:56:52 <kspalaiologos> so the proof is more practical
13:57:20 <kspalaiologos> to push something on a stack I'd just *= 255 & += n;
13:57:27 <kspalaiologos> but to pop something out of the stack I need modulus
13:57:40 <fizzie> There was https://esolangs.org/wiki/Systemf but that's not the one I was thinking of, it was more abstract and didn't introduce any new commands.
13:57:59 <kspalaiologos> there was ESOAPI for ESOOS
13:58:04 <kspalaiologos> but it's garbage for userland programming
13:58:12 <kspalaiologos> that used something along ANSI escapes but better
13:58:37 <int-e> kspalaiologos: pushing isn't the problem... popping is.
13:58:41 <fizzie> Right, and https://esolangs.org/wiki/PESOIX
13:58:42 <kspalaiologos> sure
13:58:51 <kspalaiologos> thats what I just said
13:58:52 <int-e> You'd need a division by a constant with remainder using only two cells.
13:58:57 <kspalaiologos> yes
13:59:07 <int-e> The fun thing about Collatz machines is that you get 3 cells for that task, effectively.
13:59:17 <int-e> s/machines/functions/
13:59:49 <kspalaiologos> but it would be possible to translate 3-cell brainfuck to 2-register MM
14:00:04 <int-e> Not necessarily.
14:00:10 <kspalaiologos> why
14:00:24 <kspalaiologos> 2-register MM is turing complete
14:00:32 <kspalaiologos> it should be able to simulate any turing machine
14:00:43 <int-e> Fair enough.
14:00:54 <int-e> However then it won't be complexity preserving.
14:01:01 <kspalaiologos> yeah
14:01:07 <kspalaiologos> and the translation process may never finish
14:01:20 <int-e> A direcy, complexity preserving translation will almost certainly need 3 cells.
14:01:23 <int-e> *direct
14:01:26 <int-e> s/cells/counters/
14:01:33 <kspalaiologos> or yeah
14:01:46 <kspalaiologos> nut the thing that bothers me the most in this case are unbalanced loops
14:02:16 <kspalaiologos> because one can't refer to variable register using MM
14:02:27 <int-e> Because a 3-cell Brainfuck program can divide a counter that is known to be even by 2 in two cells, while keeping another counter around. A Minsky machine cannot divide a counter in place.
14:02:51 <int-e> The reference to a variable register isn't a problem... just make the tape position part of the MM state.
14:03:01 <kspalaiologos> ?
14:03:03 <kspalaiologos> how
14:03:21 <kspalaiologos> we can have just two registers, adding another variable to the state makes it very cheaty
14:03:25 <arseniiv> hi hi hi
14:03:39 <int-e> Make the MM state a pair of program position (in the brainfuck program) and current tape position (0,1,2)
14:04:11 <kspalaiologos> in the runtime the state is constant?
14:04:12 <int-e> That way a 3-cell Brainfuck program of length l becomes a MM with 3 registers and 3*l states.
14:04:20 <kspalaiologos> no no no
14:04:24 <kspalaiologos> I'm not interested in 3 registers
14:04:26 <kspalaiologos> I want 2
14:04:33 <int-e> And that preserves complexity.
14:04:43 <int-e> *I*'m interested in preserving complexity here.
14:04:43 <kspalaiologos> complexity doesn't bother me
14:04:51 <kspalaiologos> well
14:05:08 <int-e> You can do the usual m to 2 counters reduction afterwards.
14:05:23 <int-e> At an exponential cost in runtime.
14:05:44 <kspalaiologos> how
14:05:45 <kspalaiologos> can I do that
14:07:46 <int-e> You encode counters a,b,...,z as 2^a 3^b ... 101^z. You can do division with remainder using one more counter... so you can check whether any of the original registers is 0 (--> not divisible by the corresponding prime), and increment and decrement counters as well.
14:08:02 <int-e> (did you know that 101 is the 26th prime...)
14:08:27 <kspalaiologos> umm, not
14:08:32 <kspalaiologos> *no
14:08:45 <kspalaiologos> but I still don't understand it
14:09:42 <int-e> increment b --> multiply the counter by 3. decrement b -> divide the counter by 3; if the remainder is 0, the decrement succeeds. Otherwise multiply by 3 and add the remainder back, and branch somewhere else.
14:10:33 <int-e> (You can keep track of the remainder in the finite state of the Minsky machine, and of the quotient in the other counter.)
14:11:00 <kspalaiologos> well
14:11:00 <kspalaiologos> yes
14:11:17 <kspalaiologos> but you need modulus
14:11:29 <kspalaiologos> and there is NO way to implement it on a 2 register MM
14:11:30 <int-e> that's what I just called remainder.
14:11:38 <kspalaiologos> yes
14:11:40 <kspalaiologos> I do realise
14:11:44 <int-e> You're wrong.
14:11:58 <kspalaiologos> how to do this
14:11:59 <int-e> You just need many states.
14:12:09 <int-e> Meh.
14:14:12 <int-e> http://paste.debian.net/1124843/
14:14:48 <int-e> It's important that we only ever divide by known constants.
14:16:46 <kspalaiologos> interesting
14:25:14 <esowiki> [[Special:Log/newusers]] create * Mister14 * New user account
14:29:05 <esowiki> [[Esolang:Introduce yourself]] https://esolangs.org/w/index.php?diff=68699&oldid=68693 * Mister14 * (+245) /* Introductions */
14:57:56 -!- Sgeo has joined.
15:02:41 <wib_jonas> [ (^~,!)5
15:02:42 <j-bot> wib_jonas: 3125 120
15:02:46 -!- Lord_of_Life_ has joined.
15:06:23 -!- Lord_of_Life has quit (Ping timeout: 260 seconds).
15:06:26 -!- Lord_of_Life_ has changed nick to Lord_of_Life.
15:14:13 -!- imode has joined.
15:30:53 <Taneb> I should try to learn J again
15:32:24 <kspalaiologos> https://www.jsoftware.com/help/learning/contents.htm
15:32:28 <Taneb> Never quite got the hooks and stuff last time
15:32:29 <kspalaiologos> I'll probably read this one
15:33:49 <wib_jonas> `python3 -cimport math; v = 5; print(v**v, math.factorial(v))
15:33:50 <HackEso> 3125 120
15:35:19 <kspalaiologos> a ha!
15:35:22 <kspalaiologos> I understand that J code above
15:35:38 <kspalaiologos> but not quite the tilde
15:36:26 <Taneb> [ ^~ 0 1 2 3 4 5
15:36:27 <j-bot> Taneb: 1 1 4 27 256 3125
15:36:49 <Taneb> ^~ is a monad (in the J sense, not the Haskell sense) which computes x^x
15:37:24 <kspalaiologos> << The symbol for division is % (percent). >>
15:37:25 <kspalaiologos> gosh why
15:37:42 <kspalaiologos> every single language uses slash for division
15:37:50 <kritixilithos> it looks closer to the apl ÷
15:38:09 <kspalaiologos> it has to be a joke
15:38:19 <kspalaiologos> also, why is - turned into a floor (_)?
15:38:30 <kritixilithos> `/` is used instead for reduce (and other stuff)
15:38:31 <HackEso> ​/`? No such file or directory
15:38:41 <wib_jonas> division should not get a precious single character symbol in any language, it's such a rare operation, it should just get named functions
15:38:43 <kspalaiologos> interestinb
15:39:54 <kritixilithos> kspalaiologos: because `-` is a function that can also be monadic, in which case it negates the right argument
15:40:00 <FireFly> kspalaiologos: - is used for subtraction and unary negation, but _ is used in a negative number literal
15:40:12 <kspalaiologos> so
15:40:14 <kspalaiologos> [ _2
15:40:15 <j-bot> kspalaiologos: _2
15:40:18 <kspalaiologos> well
15:40:23 <kritixilithos> look into apl if you don't like j's symbols
15:40:24 <kspalaiologos> it makes a tiny bit of sense
15:40:41 <kspalaiologos> what does it mean that it's monadsic
15:40:43 <kspalaiologos> *monadic
15:40:43 <wib_jonas> > let { f x = 10 * x; } in fmap f (3, 6, -2)
15:40:46 <lambdabot> error:
15:40:46 <lambdabot> • No instance for (Functor ((,,) Integer Integer))
15:40:46 <lambdabot> arising from a use of ‘e_110362’
15:40:46 <FireFly> unary
15:40:49 <wib_jonas> > let { f x = 10 * x; } in fmap f (3, 6)
15:40:51 <lambdabot> (3,60)
15:40:56 <wib_jonas> ^ this is why
15:41:16 <wib_jonas> and it's also why standard ML uses a different character for unary negation, though their specific choice is objectionable
15:41:24 <FireFly> I think most languages only let you express positive number literals, and simply have you apply negation on a positive literal
15:41:34 <kspalaiologos> yup
15:41:35 <kspalaiologos> that's right
15:41:36 <FireFly> [ -5
15:41:36 <j-bot> FireFly: _5
15:41:49 <kritixilithos> [ -2 3
15:41:50 <kspalaiologos> [ * 2 3
15:41:50 <j-bot> kritixilithos: _2 _3
15:41:50 <j-bot> kspalaiologos: 1 1
15:41:53 <wib_jonas> `python3 -cprint([10 * x for x in [3, 6, -2])
15:41:53 <HackEso> ​ File "<string>", line 1 \ print([10 * x for x in [3, 6, -2]) \ ^ \ SyntaxError: invalid syntax
15:41:54 <kspalaiologos> [ *: 2 3
15:41:55 <j-bot> kspalaiologos: 4 9
15:41:58 <kritixilithos> [ _2 3
15:41:59 <j-bot> kritixilithos: _2 3
15:42:00 <wib_jonas> `python3 -cprint([10 * x for x in [3, 6, -2]])
15:42:01 <HackEso> ​[30, 60, -20]
15:42:05 <kspalaiologos> it treats a single star like an empty variable?
15:42:06 <kspalaiologos> or what
15:42:11 <FireFly> what?
15:42:14 <kspalaiologos> (single -> without a colon)
15:42:16 <FireFly> no, *: is square
15:42:20 <kritixilithos> https://www.jsoftware.com/help/dictionary/vocabul.htm
15:42:37 <FireFly> I don't know what "treats like an empty variable" would mean here
15:42:48 <kritixilithos> it also is a function
15:42:50 <kspalaiologos> a ha
15:42:55 <kspalaiologos> so it returns the sign
15:43:01 <kspalaiologos> [ * _2
15:43:02 <j-bot> kspalaiologos: _1
15:43:04 <kspalaiologos> [ * 2
15:43:05 <j-bot> kspalaiologos: 1
15:43:06 <kspalaiologos> [ * -
15:43:07 <j-bot> kspalaiologos: * -
15:43:15 <kspalaiologos> interesting
15:43:21 <kspalaiologos> I see some obfuscation potential
15:43:27 <kritixilithos> [ (* -) 10
15:43:28 <j-bot> kritixilithos: _100
15:43:30 <wib_jonas> [ * 2j1
15:43:31 <j-bot> wib_jonas: 0.894427j0.447214
15:43:39 <kspalaiologos> what does j do
15:43:43 -!- imode has quit (Ping timeout: 260 seconds).
15:43:45 <arseniiv> <kspalaiologos> every single language uses slash for division => Haskell uses / for division but also % to construct rationals from integer, e. g. 2 % 3 for the number 2/3, and they are stringified accordingly, though you can also write (2 :: Rational) / 3
15:43:48 <kspalaiologos> ah
15:43:53 <kspalaiologos> its imaginary/complex
15:43:53 <wib_jonas> kspalaiologos: a complex number literal
15:44:03 <arseniiv> > (2 :: Rational) / 3
15:44:05 <lambdabot> 2 % 3
15:44:27 <kspalaiologos> I'm an idiot when it comes to FP, I didn't use any FP language really
15:44:47 <kspalaiologos> but I spent a fair amount of time on low level programming
15:44:52 <arseniiv> this doesn’t change that J is a write-only esolang
15:44:54 <wib_jonas> `python3 -cprint(2+1j)
15:44:55 <HackEso> ​(2+1j)
15:44:56 <kspalaiologos> I wanted to learn FP but it seems too weird
15:44:59 <FireFly> what does 'low level' mean in this context?
15:45:01 <wib_jonas> `python3 -cprint(abs(2+1j))
15:45:02 <HackEso> 2.23606797749979
15:45:07 <wib_jonas> what
15:45:12 <kspalaiologos> FireFly, I've been writing kernels
15:45:13 <wib_jonas> oh, I want the sign
15:45:34 <kspalaiologos> I managed to write a simple java powered kernel lately
15:45:59 <kspalaiologos> it's based around stupid implementation of SE 1.5
15:45:59 <kritixilithos> "this doesn’t change that J is a write-only esolang" apl OTOH isn't write-only, because the glyphs are easier to read
15:46:11 <kspalaiologos> but hard to write
15:46:12 <kspalaiologos> so it'
15:46:14 <kspalaiologos> s read only
15:46:34 <kritixilithos> no, get an apl keybaord layout and it becomes easy to write
15:46:38 <wib_jonas> `python3 -cv = 2+1j; print(v / abs(v))
15:46:38 <HackEso> ​(0.8944271909999159+0.4472135954999579j)
15:46:51 <arseniiv> kspalaiologos: equational FP languages (like Haskell or my F-turned thing) are more readable than J, I assure you
15:46:58 <kspalaiologos> can't they use I instead of J to signify irrational unit?
15:47:07 <arseniiv> <kspalaiologos> s read only => rofl :D
15:47:31 <kspalaiologos> possibly
15:47:41 <kspalaiologos> I tried to get a taste of Elixir but currently it's 0-1 for me
15:48:30 <kspalaiologos> going so hard after the state seems peculiar to me
15:48:52 <kritixilithos> what about lisp
15:49:09 <kspalaiologos> I'll talk about lisp-likes: Used them, liked them
15:49:25 <wib_jonas> `python3 -cv = complex(2,1); s = v / abs(v); print("%f+%fI" % (s.real, s.imag)) # kspalaiologos: there, it uses I
15:49:26 <HackEso> 0.894427+0.447214I
15:49:53 <kspalaiologos> but my constrained mind seems to take lisp easier than languages camouflaging to be something really useful
15:50:24 <arseniiv> any lisp?
15:50:34 <arseniiv> your lisp may vary :D
15:50:42 <kspalaiologos> CL for me please
15:51:09 <arseniiv> bet Clojure, Racket, Scheme and CL have a ton of differences between each other
15:51:34 <arseniiv> ah, CL is secretly an imperative language if that tag is still useful
15:51:36 <kspalaiologos> JVM garbage
15:51:45 <arseniiv> from what I’ve seen
15:51:46 <kspalaiologos> is the difference in some cases
15:51:59 <kspalaiologos> I'm just an ordinary procedural programming fan
15:52:21 <kspalaiologos> willing to run a startup using Algol 68
15:54:12 <wib_jonas> kspalaiologos: how about using fortran 2019?
15:54:44 <kspalaiologos> Have you seen Cobol on Wheelchair (or Cogs)?
15:55:09 <kspalaiologos> /* it was Wheelchair: https://github.com/azac/cobol-on-wheelchair */
15:55:29 <kspalaiologos> it's actively developed (since I looked at it last time)
15:55:39 <arseniiv> :o
15:56:06 <kspalaiologos> "(c) <DATE OVERFLOW>" love it
15:56:13 <arseniiv> anyway I often like a clean piece of imperative code
15:56:52 <kspalaiologos> look on this clean piece of imperative code: https://github.com/KrzysztofSzewczyk/asmbf/blob/master/bfasm.c
15:57:13 <arseniiv> but this is C!
15:57:23 <kspalaiologos> it's beautiful nonetheless
15:57:36 <kspalaiologos> and in fact
15:57:39 <kspalaiologos> it's very imperative
15:57:45 <arseniiv> and the piece is too long and is for an orchestra I think
15:58:05 <kspalaiologos> the only state is global
15:58:16 <kspalaiologos> and it's 2000 element int array
15:58:29 <kspalaiologos> gosh, 2k10 me was a stupid person
15:58:33 <arseniiv> risky, risky
15:58:34 <kspalaiologos> why didn't I rewrite it sooner
15:58:44 <kspalaiologos> why didn't I rewrite it to this day
15:59:04 <arseniiv> I often think that about myself too
15:59:10 <kspalaiologos> everyone does
15:59:40 <wib_jonas> my very old code has assignments with no space before the equals sign, only after. it's horrible.
16:00:01 <kspalaiologos> I've seen code that has spaces before and after every paren
16:00:02 <kspalaiologos> going like
16:00:16 <kspalaiologos> while ( ( c = getchar () ) != EOF )
16:00:20 <wib_jonas> yeah
16:00:27 <wib_jonas> hey, that doesn't have space before and after every paren
16:00:41 <kspalaiologos> ()
16:00:55 <arseniiv> once I thought that the language should have a rational implicit conversion for any occasion, between any two types, and a special syntax (instead of plain method/function names) for most operations on standard types
16:00:58 <kspalaiologos> didn't copy it, because the code is long lost
16:01:17 <wib_jonas> oh yeah, my old code has space between the function name and the call parenthesis too. also horrible
16:01:37 <arseniiv> agree
16:01:51 <arseniiv> I almost never wrote like that at least
16:02:34 <arseniiv> maybe because I almost started with VB6 where the IDE formats your line as you leave it
16:02:34 <kspalaiologos> http://prntscr.com/qk1xun
16:02:46 <kspalaiologos> this is horrible too
16:02:53 <kspalaiologos> taken out of NT kernel's inet driver
16:02:56 <kspalaiologos> in the original form
16:03:54 <kspalaiologos> return( Err );
16:03:56 <kspalaiologos> and brackets around return
16:04:02 <kspalaiologos> it's the final boss of garbage code
16:07:40 <kspalaiologos> [ 5 * 4 + 3
16:07:41 <j-bot> kspalaiologos: 35
16:07:59 <kspalaiologos> are the expressions evaluated right to left, really?
16:08:05 <kspalaiologos> without caring about operator precendence?
16:08:20 <kspalaiologos> interesting
16:08:52 <FireFly> well, the operator precedence is "all verbs are equal precedence", and verb evaluation is right to left, yes
16:09:21 <FireFly> Iverson explained quite clearly why in one of his old papers on APL, I think it was in notation as a tool for thought
16:09:38 <FireFly> https://www.jsoftware.com/papers/tot.htm
16:10:19 <FireFly> in general, APL was developed as an alternate maths notation originally, designed to be more consistent than the conventional notation
16:10:37 <FireFly> it also amongst other things introduced the notation for floor and ceiling that we use today
16:11:25 -!- kritixilithos has quit (Quit: quit).
16:11:38 <kspalaiologos> interesting
16:12:26 <kspalaiologos> "A function taking a single argument on the right is called a monadic function, or a monad for short. "
16:12:38 <kspalaiologos> so monad is just an unary function?
16:13:06 <kspalaiologos> that's the real meaning of this buzzword which definition feels like reading Malbolge?
16:13:56 <kspalaiologos> [ % 4
16:13:57 <j-bot> kspalaiologos: 0.25
16:14:00 <kspalaiologos> this is cool though
16:14:09 <arseniiv> kspalaiologos: no, Haskell monads are the other sort :)
16:14:29 <kspalaiologos> so monad's definition varies by language?
16:14:46 <FireFly> kspalaiologos: compare "variadic", or the use of "monad", "dyad" in music
16:14:51 <fizzie> The definitive definition is whatever's in our wisdom, of course.
16:14:52 <fizzie> `? monad
16:14:53 <FireFly> (yes, it refers to the number of arguments)
16:14:54 <HackEso> Monads are just monoids in the category of endofunctors.
16:14:56 <fizzie> `? endofunctor
16:14:58 <HackEso> Endofunctors are just endomorphisms in the category of categories.
16:15:00 <FireFly> see also https://en.wikipedia.org/wiki/Arity#Terminology
16:15:02 <fizzie> `? endomorphism
16:15:05 <HackEso> Endomorphisms are just final morphisms.
16:15:08 <fizzie> `? morphism
16:15:09 <HackEso> A morphism is just a natural transformation between two diagrams of shape 1.
16:15:13 <fizzie> See, so useful.
16:15:21 <Taneb> `? final
16:15:23 <HackEso> ​"final" is an annotation in Java; it means the marked code will not be changed anymore and is a final version.
16:15:40 <fizzie> You have to pick words quite carefully to stay in the same domain of things.
16:15:42 <fizzie> `? category
16:15:43 <HackEso> A category is an enriched category where the enriching category is the category of classes.
16:15:56 <Taneb> `? class
16:15:58 <HackEso> class? ¯\(°​_o)/¯
16:16:15 <FireFly> a lot of J's terminology is borrowed from linguistics, I'm not sure if the use of monadic/dyadic (which also existed back in APL) are derived from the musical terms..
16:16:18 <arseniiv> so monad's definition varies by language? => I think these times “monadic” is far more often about category theory monads, not arity-one functions
16:16:26 <kspalaiologos> > Monads are just monoids in the category of endofunctors. <
16:16:28 <lambdabot> <hint>:1:25: error: parse error on input ‘in’
16:16:31 <kspalaiologos> thats like the wikipedia article looked like
16:16:35 <kspalaiologos> I swear it was this
16:16:37 <fizzie> `? kittegory
16:16:38 <HackEso> A kittegory is just a small category.
16:16:39 <kmc> yes, sometimes "monadic" just means "1-adic"
16:16:48 <kmc> or arity 1
16:16:54 <kmc> oh it also has a meaning in philosophy
16:17:02 <kmc> from kant i think
16:17:19 <arseniiv> <HackEso> A morphism is just a natural transformation between two diagrams of shape 1. => rofl
16:17:20 <int-e> . o O ( Classes were a concept in pre-anonymous internet that have since been replaced by finely meshed masks. )
16:18:15 <arseniiv> <kmc> from kant i think => wasn’t it Leibnitz?
16:18:31 <arseniiv> though they could be both making their own monads
16:18:42 <arseniiv> too many monads
16:18:59 <kspalaiologos> [ * + 4 3 2
16:19:00 <j-bot> kspalaiologos: 1 1 1
16:19:12 <kspalaiologos> [ + / 2 3 4
16:19:13 <j-bot> kspalaiologos: 9
16:19:18 <kspalaiologos> what the heck
16:19:18 <kspalaiologos> why
16:19:28 <FireFly> Hm?
16:19:29 <Taneb> What were you expecting?
16:19:44 <kspalaiologos> I just switched operators
16:19:46 <FireFly> in +/ 2 3 4 you have the adverb / modifying the verb + to produce "sum"
16:19:50 <kspalaiologos> its the same mathematical operation
16:19:53 <Taneb> op / x y z is equalivalent to x op y op z
16:19:56 <kspalaiologos> Ah I thought / is division
16:20:07 <kspalaiologos> I can't switch my mind to %
16:20:18 <arseniiv> [ % 0 0
16:20:19 <j-bot> arseniiv: _ _
16:20:24 <arseniiv> [ % 0 1
16:20:25 <j-bot> arseniiv: _ 1
16:20:27 <kspalaiologos> interesting
16:20:29 <arseniiv> [ % 1 0
16:20:30 <j-bot> arseniiv: 1 _
16:20:32 <arseniiv> hm
16:20:38 <kspalaiologos> [ % 1 1
16:20:38 <j-bot> kspalaiologos: 1 1
16:20:43 <arseniiv> I don’t comprehend
16:20:44 <kspalaiologos> no no no
16:20:47 <kspalaiologos> you need to place it like
16:20:50 <kspalaiologos> [ 0 % 0
16:20:51 <j-bot> kspalaiologos: 0
16:20:55 <kspalaiologos> there we go
16:21:00 <FireFly> arseniiv: unary % is reciprocal, so you're taking reciprocal of 0 or 1
16:21:04 <arseniiv> what, 0 / 0 = 0?..
16:21:08 <kspalaiologos> yes
16:21:10 <kspalaiologos> it's logical
16:21:22 <Taneb> It's just as true as any other answer you can give
16:21:27 * arseniiv cries in horror
16:21:35 * FireFly pats arseniiv
16:21:42 <kspalaiologos> A ha
16:21:44 <arseniiv> ah wait I thought about 0^0 maybe
16:21:46 <kspalaiologos> wait
16:21:50 <kspalaiologos> _ is Infinity
16:21:54 <Taneb> ] 0 ^ 0
16:21:56 <arseniiv> [ 2 ^ 3
16:21:57 <j-bot> arseniiv: 8
16:22:04 <arseniiv> [ 0 ^ 0
16:22:04 <j-bot> arseniiv: 1
16:22:09 <kspalaiologos> wait
16:22:09 <int-e> arseniiv: a/0 is a sane choice *if* you have to make / total.
16:22:11 <kspalaiologos> what was ^ for
16:22:19 <FireFly> expotential
16:22:21 <int-e> arseniiv: a/0 = 0 I mean.
16:22:23 <FireFly> or well, power
16:22:25 <kspalaiologos> so ^ == *:?
16:22:29 <int-e> 0^0 is 1 of course.
16:22:30 <FireFly> no, *: is square
16:22:34 <kspalaiologos> ah ok
16:22:36 <FireFly> *: is the same as ^&2
16:22:39 <FireFly> I suppose
16:22:41 <FireFly> at least for reals
16:22:57 <arseniiv> 1 => phew [I was trying to remember how’s that word written]
16:23:46 <kspalaiologos> / means reduce?
16:23:54 <arseniiv> int-e: maybe, but why not 1 for example. / is related to multiplication, 1 is too. 0 is less related
16:24:11 <FireFly> kspalaiologos: pretty much
16:25:07 <kspalaiologos> I think we should continue working on EsoOS
16:25:14 <int-e> arseniiv: Picking 0 makes (a+b)/c = a/c + b/c and (ab)/c = a(b/c) true unconditionally. So... the choice is pragmatic.
16:25:14 <kspalaiologos> and feature J as one of languages available there
16:25:57 <kspalaiologos> why does NB. denote a comment
16:26:06 <kspalaiologos> what's the acronym behind it
16:26:11 <FireFly> nota bene
16:26:15 <kspalaiologos> ah!
16:26:16 <arseniiv> int-e: is it because 0 is absorbing with regard to × just like ∞
16:26:24 <FireFly> it's been a sort of comment marker for 300 years
16:26:34 <int-e> arseniiv: People do not agree on this universally, of course. (There are some vocal people who think that x/0 should be left as unspecified as possible... it has a value, but you don't know what it is. But then you'll still have theorems like x/0 - x/0 = 0 that will annoy the purists that you were trying to please...)
16:26:54 <kspalaiologos> FireFly, yeah
16:26:56 <kspalaiologos> you're right
16:27:00 <kspalaiologos> I used to learn a tiny bit of Latin
16:27:13 <int-e> arseniiv: So given the choice between not satisfying the purists, and a little more convenience in proving things, I'd pick convenience every time out of 10 :)
16:27:13 <arseniiv> I like to imagine 0 in context of nonnegative integers or rationals as 2^∞ 3^∞ 5^∞ 7^∞ …
16:27:48 <kspalaiologos> [ >. 1
16:27:48 <j-bot> kspalaiologos: 1
16:27:48 <Taneb> [ 2 (*+*) 3
16:27:49 <j-bot> Taneb: 12
16:27:53 <kspalaiologos> [ >. 21.37
16:27:54 <j-bot> kspalaiologos: 22
16:27:59 <kspalaiologos> [ +\
16:28:00 <j-bot> kspalaiologos: +\
16:28:01 <kspalaiologos> [ +
16:28:02 <j-bot> kspalaiologos: +
16:28:13 <arseniiv> int-e: But then you'll still have theorems like x/0 - x/0 = 0 that will annoy the purists that you were trying to please... => yeah, I’ll be annoyed for sure
16:28:23 <int-e> arseniiv: Of course, in the end you still get plenty of theorems that divide by some d and require that d != 0.
16:28:25 <kspalaiologos> this was a great opportunity to make some brainfuck code
16:28:32 <arseniiv> [ ∞
16:28:33 <j-bot> arseniiv: |spelling error
16:28:33 <j-bot> arseniiv: | ∞
16:28:33 <j-bot> arseniiv: | ^
16:28:33 <kspalaiologos> [ >.
16:28:34 <j-bot> kspalaiologos: >.
16:28:42 <kspalaiologos> shouldn't 1 be assumed here?
16:28:45 <kspalaiologos> like it is with %?
16:28:47 <kspalaiologos> [ % 10
16:28:48 <j-bot> kspalaiologos: 0.1
16:29:07 <FireFly> I'm not sure what you mean
16:29:25 <FireFly> unary % is reciprocal, but in general the unary and binary case of a verb doesn't have to be related
16:29:33 <kspalaiologos> yes
16:29:38 <FireFly> unary >. is ceiling, binary >. is maximum I believe
16:29:42 <kspalaiologos> ah, so there is actually a monad
16:29:49 <kspalaiologos> for %
16:29:52 <FireFly> yes
16:29:53 <kspalaiologos> right
16:29:58 <FireFly> it's all in the vocabulary
16:30:02 <wib_jonas> dear webpage of manufacturer, if I want to download the manual for your device, I'd like to tell you which device it is first and then choose from the languages in which a manual is available, rather than choose a language first then search for devices with a manual in that language. thank yuo.
16:30:07 <FireFly> https://www.jsoftware.com/help/dictionary/vocabul.htm is quite handy
16:30:09 <arseniiv> btw one great thing about lisps is that their + − × / are often variadic
16:30:23 <kspalaiologos> yep
16:30:41 <kspalaiologos> otherwise you'd need to reduce
16:30:46 <kspalaiologos> not a great deal but saves time
16:31:12 <arseniiv> though now I seem to think (− 1 2 3) should be treated as (1 + 2) − 3 as we drop a left operand when writing (− 2)
16:32:00 <Taneb> That gives _1 _2 _3, right?
16:32:42 <kspalaiologos> [ - 1 2 3
16:32:42 <j-bot> kspalaiologos: _1 _2 _3
16:32:45 <kspalaiologos> ye
16:32:53 -!- imode has joined.
16:32:55 <kspalaiologos> [ + - 1 2 3
16:32:56 <j-bot> kspalaiologos: _1 _2 _3
16:33:07 <Taneb> Well, it does in J. In Lisp I don't know
16:33:11 <kspalaiologos> [ - \ 1 2 3
16:33:12 <j-bot> kspalaiologos: _1 0 0
16:33:12 <j-bot> kspalaiologos: _1 _2 0
16:33:12 <j-bot> kspalaiologos: _1 _2 _3
16:33:16 <kspalaiologos> whoa
16:33:17 <kspalaiologos> wait
16:33:22 <kspalaiologos> why did it print out 3 messages
16:33:24 <Taneb> \ is not /
16:33:28 <FireFly> because you produced a 3x3 array
16:33:29 <kspalaiologos> k
16:33:34 <kspalaiologos> lmao
16:33:40 <arseniiv> J is jarring :P
16:33:54 <Taneb> APL is aplarring?
16:34:03 <arseniiv> (making jars)
16:34:13 <FireFly> it's a handy tool, and moreso I think it's handy to reason about programs in array-programming terms in my head sometimes
16:34:16 <kspalaiologos> wait a second
16:34:18 <arseniiv> hm what would alparring then mean
16:34:22 <kspalaiologos> does this bot have some kind of protection
16:34:25 <FireFly> another tool in the toolbox for reasoning about problems
16:34:27 <kspalaiologos> so it doesn't spam out the chat?
16:34:29 <arseniiv> parring with aluminium?
16:34:45 <arseniiv> [ - - - - 1 2 3
16:34:46 <j-bot> arseniiv: 1 2 3
16:34:51 <arseniiv> whyy
16:35:01 <arseniiv> [ \ \ \ 1 2 3
16:35:01 <j-bot> arseniiv: |syntax error
16:35:01 <j-bot> arseniiv: | \\\1 2 3
16:35:11 <arseniiv> yes it’s quite protected
16:35:12 <FireFly> kspalaiologos: not entirely sure; I'd appreciate if you wouldn't try to get it to quit due to flooding
16:35:27 <kspalaiologos> I'll just check with 6 elements
16:35:29 <arseniiv> oh okay I won’t too
16:35:30 <kspalaiologos> if it prints out then it's flawed
16:35:38 <FireFly> I mean it's limited to three lines at a time
16:35:45 <kspalaiologos> [ - \ 1 2 4
16:35:46 <j-bot> kspalaiologos: _1 0 0
16:35:46 <j-bot> kspalaiologos: _1 _2 0
16:35:46 <j-bot> kspalaiologos: _1 _2 _4
16:35:47 <FireFly> but in principle that means you could spam lines and have it be amplified 1:3
16:35:48 <kspalaiologos> [ - \ 1 2 3 4
16:35:49 <j-bot> kspalaiologos: _1 0 0 0
16:35:49 <j-bot> kspalaiologos: _1 _2 0 0
16:35:49 <j-bot> kspalaiologos: _1 _2 _3 0
16:35:49 <j-bot> kspalaiologos: _1 _2 _3 _4
16:35:52 <kspalaiologos> well
16:35:53 <FireFly> ok maybe not 3
16:35:55 <FireFly> but some limit :P
16:36:01 <kspalaiologos> I'll try it on pm
16:36:01 <FireFly> [ i.10 10
16:36:02 <j-bot> FireFly: 0 1 2 3 4 5 6 7 8 9
16:36:02 <j-bot> FireFly: 10 11 12 13 14 15 16 17 18 19
16:36:02 <j-bot> FireFly: 20 21 22 23 24 25 26 27 28 29
16:36:02 <j-bot> FireFly: 30 31 32 33 34 35 36 37 38 39
16:36:02 <j-bot> FireFly: 40 41 42 43 44 45 46 47 48 49
16:36:02 <j-bot> FireFly: 50 51 52 53 54 55 56 57 58 59
16:36:02 <j-bot> FireFly: 60 61 62 63 64 65 66 67 68 69
16:36:03 <j-bot> FireFly: 70 71 72 73 74 75 76 77 78 79
16:36:03 <j-bot> FireFly: ...
16:36:03 <kspalaiologos> will it kick the bot?
16:36:07 <FireFly> ok that's the limit
16:36:20 <kspalaiologos> what's i.
16:36:34 * FireFly sighs
16:36:37 <kspalaiologos> ah
16:36:39 <kspalaiologos> it's seq
16:36:44 <kspalaiologos> but like
16:36:44 <kspalaiologos> worse
16:36:45 <FireFly> it'd be easiest if you reference the vocabulary for looking up verbs
16:36:55 <kspalaiologos> interesting
16:36:56 <arseniiv> kspalaiologos: i. is ι :D
16:36:59 <kspalaiologos> can I make it enumerate alphabet?
16:37:03 <kspalaiologos> or something else?
16:37:22 <FireFly> Well not per se
16:37:28 <kspalaiologos> there aren't really many operators here
16:37:50 <arseniiv> bet I have seen `atoi` in some language, related to ι but don’t remember in what a way
16:38:05 <kspalaiologos> but using this language already feels like driving a truck on thin ice
16:38:07 <FireFly> isn't that just "string to integer"
16:38:13 <kspalaiologos> yep it is
16:38:13 <FireFly> kspalaiologos: how so?
16:38:26 <kspalaiologos> seems illogical to me a bit
16:38:31 <kspalaiologos> but probably because I'm not used to APL
16:38:48 <kspalaiologos> is barely anyone using APL these days?
16:39:20 <FireFly> Not sure, I'm told it's still used a bit in financial stuffs
16:39:24 <FireFly> along with k
16:39:48 <Taneb> Didn't Phantom_Hoover get a job working with K?
16:39:49 <kspalaiologos> K is crazy too
16:40:10 <kspalaiologos> 2_&{&/x!/:2_!x}'!R
16:40:33 <kspalaiologos> FireFly, < K is the foundation for a family of financial products > -> you're right
16:41:15 <FireFly> I think that K is kind of the theoretically beautiful, minimalistic language in the family.. although it's also fairly different from APL and J in terms of how its arrays work
16:41:30 <FireFly> or well, it's more oriented around nested lists (a la lisps) than APL-style rectangular arrays
16:41:40 <FireFly> J is much more "batteries included"
16:42:27 <kspalaiologos> [ average=:+/ %
16:42:27 <j-bot> kspalaiologos: |ok
16:42:37 <kspalaiologos> [ average 4 5
16:42:38 <j-bot> kspalaiologos: 4.25 4.2
16:42:38 <j-bot> kspalaiologos: 5.25 5.2
16:42:48 <kspalaiologos> what have I done
16:44:06 * FireFly thinks
16:44:09 <int-e> beating the averages
16:44:44 <FireFly> created a hook that uh.. creates a table of the original input and the reciprocal?
16:44:46 <FireFly> I guess
16:44:53 <FireFly> I think you meant +/ % #
16:45:00 <int-e> Ah.
16:45:01 <FireFly> (a fork that divides the sum by the length)
16:45:15 <int-e> > [1/a + b | a <- [4,5], b <- [4,5]]
16:45:18 <lambdabot> [4.25,5.25,4.2,5.2]
16:45:27 <int-e> (wrong order, right numbers)
16:45:29 <FireFly> [ (;/ %) 1 2 3
16:45:30 <j-bot> FireFly: ┌─────┬──────────────┐
16:45:30 <j-bot> FireFly: │1 2 3│1 0.5 0.333333│
16:45:30 <j-bot> FireFly: └─────┴──────────────┘
16:45:36 <FireFly> well okay, not a great example
16:45:46 <kspalaiologos> how did you make that fancy table
16:45:47 <FireFly> but anyway
16:46:06 <FireFly> I used ; link, which boxes its left and right arguments before concatenating
16:46:13 <kspalaiologos> alright
16:46:13 <FireFly> [ <'hello' NB. we have boxes
16:46:14 <j-bot> FireFly: ┌─────┐
16:46:14 <j-bot> FireFly: │hello│
16:46:14 <j-bot> FireFly: └─────┘
16:46:26 <FireFly> cats love J
16:46:26 <kspalaiologos> but this box seems a tiny bit off
16:46:28 <kspalaiologos> doesn't it
16:46:28 * FireFly nods
16:46:37 <int-e> [ <<'hello'
16:46:37 <j-bot> int-e: ┌───────┐
16:46:37 <j-bot> int-e: │┌─────┐│
16:46:37 <j-bot> int-e: ││hello││
16:46:37 <j-bot> int-e: │└─────┘│
16:46:37 <j-bot> int-e: └───────┘
16:46:40 <int-e> ...
16:46:46 <Taneb> int-e: what did you expect?
16:46:52 <kspalaiologos> wait
16:46:58 <kspalaiologos> thats actually very interesting
16:47:02 <kspalaiologos> [ <<<"bruh"
16:47:03 <j-bot> kspalaiologos: (< < <"_ _ _)"
16:47:07 <FireFly> lol
16:47:09 <kspalaiologos> [ <<<'bruh'
16:47:10 <j-bot> kspalaiologos: ┌────────┐
16:47:10 <j-bot> kspalaiologos: │┌──────┐│
16:47:10 <j-bot> kspalaiologos: ││┌────┐││
16:47:10 <j-bot> kspalaiologos: │││bruh│││
16:47:10 <j-bot> kspalaiologos: ││└────┘││
16:47:10 <j-bot> kspalaiologos: │└──────┘│
16:47:10 <j-bot> kspalaiologos: └────────┘
16:47:15 <int-e> Taneb: It did what I expected. But it's potentially very noisy.
16:47:33 <Taneb> int-e: I think that's true of a lot of things involving J
16:47:35 <FireFly> yeah, I wonder if the default output ought to be changed to the more consise way
16:47:42 <FireFly> I forget the foreign for it..
16:47:52 <FireFly> lessee
16:48:00 <Taneb> Maybe it could use double-lined boxes
16:48:10 <int-e> FireFly: "concise" if you're wondering about the spelling
16:48:28 <FireFly> whoops
16:48:32 <kspalaiologos> lessee
16:48:35 <kspalaiologos> what language is it
16:48:43 <kspalaiologos> french?
16:48:47 <int-e> engl-ish
16:49:03 <FireFly> kspalaiologos: "let's see"
16:49:08 <int-e> kspalaiologos: imagine a silent 't' after the first 'e'
16:49:17 <kspalaiologos> ah
16:49:22 <kspalaiologos> alright
16:49:26 <kspalaiologos> I misunderstood the context
16:49:38 <int-e> (engl-ish is a contraction of english-ish, of course)
16:49:54 <kspalaiologos> what
16:49:55 <int-e> `? ish
16:49:56 <HackEso> ish? ¯\(°​_o)/¯
16:50:02 <kspalaiologos> `? engl-ish
16:50:04 <kspalaiologos> `? english-ish
16:50:12 <kspalaiologos> ?
16:50:18 <kspalaiologos> `? test
16:50:22 <FireFly> [ (9!:2)''
16:50:22 <HackEso> engl-ish? ¯\(°​_o)/¯
16:50:22 <j-bot> FireFly: 5
16:50:23 <kspalaiologos> what just happened
16:50:24 <HackEso> english-ish? ¯\(°​_o)/¯
16:50:30 <HackEso> test failed. HackEgo-JUnit is not available.
16:50:31 <kspalaiologos> ah, a great lag
16:51:55 <int-e> kspalaiologos: https://www.thefreedictionary.com/ish has the right definition.
16:52:02 <int-e> (or right-ish?)
16:52:02 <kspalaiologos> is it possible to make a sleep in J?
16:52:11 <Taneb> Hmm, is "ish" a monad (in the Haskell sense)
16:52:20 <Taneb> If something is red, it's red-ish
16:52:27 <Taneb> If something is red-ish-ish, it's red-ish
16:52:36 <arseniiv> I don’t think the latter is true?
16:52:49 <Taneb> It's true-ish ;)
16:52:56 <int-e> . o O ( What color is horse red-ish? )
16:53:05 <arseniiv> hm maybe then it’s monad-ish
16:54:22 -!- Sgeo_ has joined.
16:57:40 -!- Sgeo has quit (Ping timeout: 258 seconds).
16:58:33 <arseniiv> int-e: reminds me about a partially obtuse riddle mentioning a horse too, which has an usual translation “when one buys a horse, what (=in which state) it is?” and an intended translation like “when one have a horse washed” instead of the first, and the answer is then “it is wet”
17:00:49 <arseniiv> it’s weird even originally
17:01:14 <arseniiv> I had seen it only in a book, not in vivo at all
17:01:29 <arseniiv> quite unmemetic
17:01:47 <int-e> . o O ( weird things are far more common than the word's meaning suggests )
17:02:41 <kspalaiologos> http://kspalaiologos.baselinux.net/doc/happy20.wav or http://kspalaiologos.baselinux.net/doc/unreleased.wav
17:02:43 <kspalaiologos> which one is better
17:03:10 <arseniiv> also one about horses from a book: “do horses go to a ball” with an intended reparse “do [somebody plural] walk on the balcony”
17:03:56 <arseniiv> this one even features quite unnatural world permutation to work
17:04:15 <arseniiv> meaning, that permutation is rare even in convoluted poetry
17:04:18 <kspalaiologos> the 2nd one got cut a bit
17:05:37 <arseniiv> kspalaiologos: both yours?
17:05:51 <kspalaiologos> I'm planning to put them somewhere
17:06:31 <arseniiv> kspalaiologos: it they are tracked, maybe modarchive or what it’s called
17:06:37 <kspalaiologos> no no
17:06:38 <kspalaiologos> not there
17:06:40 <arseniiv> or e. g. Soundcloud
17:06:45 <kspalaiologos> I'm not an artist
17:07:08 <kspalaiologos> they are indeed tracked
17:07:31 <kspalaiologos> actually, I used the first one
17:08:00 <kspalaiologos> but which one is better?
17:08:05 <arseniiv> I’m not able to review in meaningful way but both look pretty solid and fun
17:08:09 <kspalaiologos> let's pretend 2nd didn't get cut
17:09:15 <kspalaiologos> although there were a few songs from modarchive I liked
17:09:21 <arseniiv> as the first is longer, there is more material to judge on… hm. I can’t say I wouldn’t pick the first
17:09:23 <kspalaiologos> especially 2pi radix or 486
17:09:31 <arseniiv> but the second is good too
17:10:05 <kspalaiologos> and I used in my game a couple of months ago a song named "blinded monarch" from modarchive
17:10:09 <arseniiv> (I myself don’t go to modarchive but I know about it via OpenMPT forum)
17:10:09 <kspalaiologos> forgot the artist though
17:10:27 <kspalaiologos> x86 assembly + SDL1.2 is dope though
17:10:54 <kspalaiologos> https://modarchive.org/index.php?request=view_by_moduleid&query=170225
17:10:56 <kspalaiologos> there it is
17:12:03 <arseniiv> I like the alternate beat in the second at 0:30
17:13:09 <kspalaiologos> 2nd one will be looped so it's quite short and the alternate beat was very important because it would feel terribly if the same part was looped over and over
17:16:10 <arseniiv> agree
17:16:24 <esowiki> [[User talk:Hex96]] https://esolangs.org/w/index.php?diff=68700&oldid=68698 * Hex96 * (+82) /* Getting one of my languages on the random language button */
17:16:37 <esowiki> [[User talk:Hex96]] https://esolangs.org/w/index.php?diff=68701&oldid=68700 * Hex96 * (+1) /* Getting one of my languages on the random language button */
17:16:40 <kspalaiologos> another very entertaining to watch trend?
17:17:00 <kspalaiologos> random button on the wiki is very disappointing
17:17:09 <kspalaiologos> in most cases I land either on trivial brainfuck derivative
17:17:15 <kspalaiologos> or a joke language
17:19:08 -!- ais523 has joined.
17:19:48 <ais523> perhaps constant-output languages should be split out of [[Category:Languages]] in order to discourage random spamming of trivially simple language ideas in order to discouarge attempts to bias the random-language functionality?
17:20:08 <kspalaiologos> +1 from me
17:20:12 <arseniiv> kspalaiologos: yeah, unfortunate :(
17:20:18 <kspalaiologos> also, we really can merge all the brainfuck substitutions
17:20:21 <kspalaiologos> into one article
17:20:26 <arseniiv> ais523: looks interesting
17:20:55 <kspalaiologos> or maybe enhanced random page button ?
17:20:59 <kspalaiologos> (if its doable)
17:21:09 <ais523> something I've been meaning to do for a while but never got around to was to write a metalanguage that generated BF-equivalents (and maybe some almost-equivalents)
17:21:09 <kspalaiologos> that lets to filter out / in categories
17:21:20 <ais523> for the purpose of being able to merge them all into a single page
17:26:15 <kspalaiologos> can't someone run a perl script
17:26:18 <kspalaiologos> on the server
17:26:41 <kspalaiologos> to merge all pages containing the [[:Category:Trivial Brainfuck Substitution]] (or something along these lines)
17:26:56 <kspalaiologos> it could be done even using shell script
17:27:15 <ais523> MediaWiki's DB organisation is kind-of fragile, it's certainly possible to do that but I wouldn't be at all confident the script was touching every table it needed to in the correct way
17:27:38 <kspalaiologos> then maybe use selenium?
17:27:43 <kspalaiologos> to automate the browser
17:28:07 <ais523> fwiw I'd be much more confident doing something like that client-side via a tool like AWB
17:28:28 <kspalaiologos> whats awb
17:28:43 <kspalaiologos> k AutoWikiBrowser
17:29:55 <kspalaiologos> https://en.wikipedia.org/wiki/Wikipedia:AutoWikiBrowser/CheckPage#Approved_users
17:29:57 <kspalaiologos> what an idiotism
17:30:10 <kspalaiologos> a power user will just nop out the statements used for the check
17:30:17 <kspalaiologos> if it's open source its even easier
17:31:12 <ais523> kspalaiologos: it's pretty good at keeping out script kiddies
17:31:26 <kspalaiologos> in which way?
17:31:34 <kspalaiologos> there's no source
17:31:37 <ais523> they don't even know how to override the check
17:31:40 <kspalaiologos> so it's easy
17:31:48 <kspalaiologos> just use dotPeek
17:32:07 <kspalaiologos> or a proxy
17:32:27 <kspalaiologos> that will add my username to the wiki page, there must be a programmable tool for that
17:32:31 <ais523> also, the list is enforced two ways: both by the tool itself, and by Wikipedia administrators who can block accounts that are using automated editing illegally
17:32:49 <kspalaiologos> block is delayed
17:32:55 <kspalaiologos> whoever wants to do it will do it
17:32:58 <ais523> it's pretty hard to bypass the check in the tool unknowingly
17:33:13 <kspalaiologos> it seems like a cool thing to do this afternoon
17:33:28 <kspalaiologos> obviously I won't "test it"
17:33:46 <ais523> so using the tool contrary to the checkpage check is pretty strong evidence that someone is intentionally trying to violate policy
17:34:15 <kspalaiologos> protection on the clientside is useless
17:34:55 <kspalaiologos> other approach should be taken
17:34:59 <ais523> the thing is, on Wikipedia anything can be reverted
17:35:07 <kspalaiologos> ratelimits, have they heard of it
17:35:11 <ais523> and someone having bypassed a clientside check is good evidence that it /should/ be reverted
17:35:26 <kspalaiologos> possibly but reverting in batch can be sometimes bad
17:35:43 <kspalaiologos> maybe the user mixed good and bad contributions? maybe someone already touched the page since "change"?
17:35:46 <ais523> yes, that's why it's a good idea to have a system that lets you know whether reverting in batch is likely to be helpful
17:35:46 <kspalaiologos> just add ratelimits
17:36:00 <kspalaiologos> ratelimits on edits, no more than a page per minute
17:36:01 <ais523> also, I'm pretty sure there are systems that check to see if an account is editing too fast
17:36:11 <kspalaiologos> they have to check the list
17:36:14 <kspalaiologos> possibly
17:36:16 <ais523> that's one of the things the "bot flag" on an account is for, it disables the rate limits
17:36:22 <kspalaiologos> so the clientside protection is useless
17:36:25 <kspalaiologos> as the backend will take care
17:36:37 <ais523> but that has to be set manually and there's vetting of the user/bot first
17:36:55 <kspalaiologos> manually?
17:37:10 <kspalaiologos> just get an automated system that trashes account of an user that makes more than two edits a second constantly
17:37:38 <ais523> kspalaiologos: no, I mean permission to bypass rate limits has to be given manually
17:37:48 <kspalaiologos> like the entry on checklist
17:38:01 <ais523> the rate limits themselves are probably automatic, although I don't think I have perms to check atm
17:38:11 <kspalaiologos> you're a wikipedia admin?
17:38:14 <kspalaiologos> interesting
17:38:43 <kspalaiologos> c'mon man
17:38:47 <ais523> not right now, I was at one time though (I resigned due to lack of activity)
17:38:49 <kspalaiologos> they havent even obfuscated the assembly
17:39:37 <ais523> the abuse filter configuration is stored in a non-public database; however, there is a public page listing a subset of it, but it's unclear whether rate limits would be in the public or the private subset
17:40:03 <kspalaiologos> I haven't dug through mediawiki
17:40:18 <ais523> looking at the source code for this would be pointless because it's a configuration setting, not hardcoded
17:42:09 <ais523> OK, I checked the public part of the configuration: it states that a rate limit exists; however, the exact numbers are not public
17:42:46 <kspalaiologos> << This user doesn't have enough privileges to make automatic edits on this wiki. >>
17:42:57 <kspalaiologos> a check and the messagebox below
17:47:49 <fizzie> You just said the client-side protection is useless, now you're complaining about them not spending enough effort on it.
17:49:39 <kspalaiologos> well, you see
17:49:46 <kspalaiologos> when someone makes clientside protection
17:49:50 <kspalaiologos> they either resign before making it
17:49:54 <kspalaiologos> or make it hard to overcome
17:50:10 <ais523> or duplicate it on the server side
17:50:13 <kspalaiologos> there are no inbetweeners, because it has no sense to implement weak protection
17:50:52 <ais523> client-side validation that's duplicated on the server-side is pretty helpful because it saves the server time dealing with known bad values, and saves the user time too because the client-side check is faster when using a slow Internet connection
17:51:02 <kspalaiologos> wait
17:51:06 <kspalaiologos> for a clientside check
17:51:10 <kspalaiologos> they first connect to the wiki
17:51:14 <kspalaiologos> download allowed nicks list
17:51:26 <ais523> I'm talking in general here, rather than about AWB in particular
17:51:27 <kspalaiologos> and then they check whether the client can proceed or not
17:51:39 <kspalaiologos> well AWB uses inet connection for a clientside check
17:51:43 <ais523> in AWB, the server-side duplication is a little less accurate because it isn't always 100% obvious whether someone's using AWB or not
17:51:43 <kspalaiologos> so your argument is invalid
17:52:05 <ais523> which is the reason why the client-side check helps there
17:52:29 <kspalaiologos> it's not effective
17:52:43 <kspalaiologos> it would be a shame if (*cough*) someone, released an unlocked version.
17:52:49 <kspalaiologos> that's why it doesn't work
17:53:13 <ais523> people bypassing the check basically just costs the Wikipedia administrators time in cleaning the issue up, it doesn't do lasting damage
17:53:29 <kspalaiologos> it shouldn't cost anything
17:53:40 <ais523> so having an imperfect check is a good time-saving device, compared to having no client-side check
17:53:46 <kspalaiologos> if ratelimits were optimally implemented
17:54:17 <ais523> there are rate limits, but manual edits can go pretty quickly sometimes
17:54:25 <kspalaiologos> how quickly?
17:54:29 <ais523> I think I managed something like 8/minute manually cleaning up spam
17:54:50 <ais523> so the rate limits, despite not being public, are likely set to something comparable to that
17:54:52 <kspalaiologos> and you think that automatic tool will edit at 8 edits a minute?
17:54:57 <kspalaiologos> it'll go like crazy
17:55:11 <ais523> it can go much faster in full-auto mode, but that would be noticed
17:55:15 <ais523> and blocked very quickly
17:55:25 <kspalaiologos> well that's a point
17:55:46 <ais523> 30-60/minute is common for full-auto bots, with maxlag compensation
17:56:13 <kspalaiologos> anyways I think clientside check is nonsense
17:56:30 <ais523> you think it would be better to not have the check?
17:56:33 <kspalaiologos> my friend used to put anti-scriptkiddie check in his CS1.7 (or whatever it was called) bot
17:56:36 <wib_jonas> are you talking about irc rate limiting and jeval's rate limiter? I can tell you about these
17:56:46 <kspalaiologos> wikimedia
17:56:51 <ais523> there's a statement along the lines of "locks are to keep out honest users", this will prevent anyone honest using it without getting authorisation
17:57:01 <kspalaiologos> ais523, strengthten the check to make it more effective
17:57:06 <kspalaiologos> OR get rid of it completely
17:57:10 <wib_jonas> oh, wiki edits?
17:57:16 <kspalaiologos> just think of power users
17:57:22 <kspalaiologos> even a script kiddie can download a macro program
17:57:25 <kspalaiologos> that will record mouseclocks
17:57:28 <kspalaiologos> *mouseclicks
17:57:29 <kspalaiologos> and keystrokes
17:57:30 <ais523> it's easy to bypass by someone who wants to be an issue, but those people are rare, and the existence of the check makes it clear that such people are being intentionally unconstructive when they get caught (which normally happens quickly)
17:58:07 <wib_jonas> I guess I'll have to read this scrollback later, gtg now
17:58:18 <kspalaiologos> well
17:58:25 <kspalaiologos> I haven't been administrating a large site
17:58:25 -!- wib_jonas has quit (Remote host closed the connection).
17:58:47 <kspalaiologos> but I believe I'd get that sorted out in a better way it is right now
17:58:51 -!- FreeFull has joined.
17:58:57 <kspalaiologos> obviously it's not terrible, it's just meh
18:10:37 -!- LKoen has joined.
18:13:43 -!- LKoen has quit (Remote host closed the connection).
18:14:06 -!- LKoen has joined.
18:14:38 <kspalaiologos> g2g
18:14:48 -!- kspalaiologos has quit (Quit: Leaving).
18:27:54 <esowiki> [[Comp]] https://esolangs.org/w/index.php?diff=68702&oldid=68668 * Hex96 * (+75) /* commands */
18:29:50 -!- LKoen has quit (Remote host closed the connection).
18:45:52 -!- Frater_EST has joined.
18:58:36 <esowiki> [[Langlang]] https://esolangs.org/w/index.php?diff=68703&oldid=68619 * Hex96 * (+46)
19:00:37 <esowiki> [[Langlang]] https://esolangs.org/w/index.php?diff=68704&oldid=68703 * Hex96 * (-2) /* Examples */
19:03:21 <esowiki> [[Langlang]] https://esolangs.org/w/index.php?diff=68705&oldid=68704 * Hex96 * (+83) /* Examples */
19:04:23 -!- imode has quit (Ping timeout: 260 seconds).
19:05:39 <esowiki> [[Langlang]] https://esolangs.org/w/index.php?diff=68706&oldid=68705 * Hex96 * (+54)
19:05:58 <esowiki> [[Langlang]] https://esolangs.org/w/index.php?diff=68707&oldid=68706 * Hex96 * (+1)
19:11:19 <esowiki> [[Langlang]] https://esolangs.org/w/index.php?diff=68708&oldid=68707 * Hex96 * (+55) /* calculator */
19:14:16 -!- ais523 has quit (Remote host closed the connection).
19:18:00 -!- Frater_EST has left.
19:25:48 <esowiki> [[User talk:Truttle1]] https://esolangs.org/w/index.php?diff=68709&oldid=68389 * Hex96 * (+92)
19:26:13 <esowiki> [[User talk:Truttle1]] https://esolangs.org/w/index.php?diff=68710&oldid=68709 * Hex96 * (+2)
19:39:01 -!- b_jonas has joined.
19:58:34 <b_jonas> kspalaiologos: for merging brainfuck equivalents, note that Ook! has some historical significance so I'd prefer it to have its own page
19:59:46 <b_jonas> kspalaiologos, ais523: the esolangs.org wiki has the api.php interface enabled, at https://esolangs.org/w/api.php , documented at https://www.mediawiki.org/wiki/API:Main_page ,
20:00:05 <b_jonas> that's the interface that I recommend if you want to make automated changes to lots of pages, or other complex automation
20:00:44 <b_jonas> it's not the only API, eg. there's also https://esolangs.org/wiki/Special:Export , but it's a very general one, and usually it's the most convenient one for automation
20:02:14 <esowiki> [[User:CarlosLuna]] M https://esolangs.org/w/index.php?diff=68711&oldid=68689 * CarlosLuna * (-196) Improving indentation
20:02:46 <b_jonas> kspalaiologos: yes, of course there are rate limits on the server. why would you think there aren't? the interface even tells you what rate it wants you to edit stuff, because sometimes the Mediawiki servers are overloaded, in which case they ask bots to edit slower
20:03:12 <b_jonas> what the client side does is to just read those rate limits in the replies and wait for the appropriate time
20:03:57 <b_jonas> "<ais523> that's one of the things the "bot flag" on an account is for, it disables the rate limits" => no, not really. the bot flag is more for marking bots that are trusted so that people patrolling RecentChanges or other lists of changes can easily ignore bot edits
20:08:33 <b_jonas> the point of the client-side rate limits is that they can submit your write request slowly enough that the server doesn't ban you for editing more quickly. those client-side rate limits are what let you spam the server. if you remove them, you'll just get your request refused by the server in a busy loop.
20:16:22 <arseniiv> <b_jonas> that's the interface that I recommend if you want to make automated changes to lots of pages, or other complex automation => this is great! (possibly; didn’t read what it allows)
20:17:01 <arseniiv> good that MediaWiki folks had thought about that
20:17:31 <fizzie> Just try not to get carried away.
20:18:03 <fizzie> (I'll be the one who has to restore from backup if you do.)
20:18:36 <fizzie> Also, anything that *requires* "complex automation" is probably sufficiently drastic to have a talk page discussion for a few months before implementing.
20:19:03 <fizzie> (Few months of esolangs.org time is probably equivalent of few days of Wikipedia time, relatively speaking.)
20:22:14 <b_jonas> fizzie: no it's not. en.wikipedia has hundreds of edits per minute, and even the smaller wikipedias have a lot of edits. the esolangs wiki has had less than 100000 edits total.
20:22:30 <fizzie> It doesn't scale that way.
20:22:46 <fizzie> It's a logarithm of edit speed or something.
20:23:22 <b_jonas> arseniiv: yes, it's generally a good api. not perfect, but good.
20:24:02 <b_jonas> sometimes it lags a little behind the other latest developments of mediawiki and its extensions, so there can be extension functions that work but not yet accessible through the api,
20:24:47 <b_jonas> or sometimes the permissions are inconsistent, as in there's at least one list that I can query through the default html interface anonymously, but get a permission error if I try to query it through api.php
20:24:59 <b_jonas> or was
20:25:44 <b_jonas> I met that problem a year ago, might be fixed by now
20:27:31 <arseniiv> <fizzie> Just try not to get carried away. => for my part, I’m not going to use it at all :D but glad anyway
20:29:44 <b_jonas> fizzie: discussion before implementing it => only if it has write operations I think. api.php is useful for read-only stuff too, such as watching new changes
20:33:41 -!- arseniiv has quit (Ping timeout: 268 seconds).
20:34:25 <fizzie> Sure, that's f... well, fine, within reason.
20:36:28 <b_jonas> obviously only if you don't overload the server
20:39:10 <fizzie> Hypothetically, for watching new changes, there's the push-based mechanism that can be used through having a discussion.
20:41:18 <fizzie> And the data dump for local analysis purposes, though there's a link to that on the main page, so it's very discoverable.
20:41:25 -!- Sgeo__ has joined.
20:44:47 -!- Sgeo_ has quit (Ping timeout: 268 seconds).
21:41:30 <int-e> This is stupid... https://projecteuler.net/problem=674 is so careful to explain that one should pair "distinct expressions from file <file name here>", and the file contains a duplicate entry... and turns out you are supposed to compare expressions with different line numbers instead, even if they are the same.
22:14:22 -!- Sgeo_ has joined.
22:17:59 -!- Sgeo__ has quit (Ping timeout: 265 seconds).
22:34:27 <fizzie> int-e: Have you always been doing PE, or is this just for AoC withdrawal?
22:45:49 <int-e> fizzie: I was clean for almost 10 years, but AoC kind of triggered this relapse
22:46:18 <int-e> (Is that right? Maybe it was only 6 years)
22:46:28 <int-e> A long time anyway.
22:46:29 <b_jonas> int-e: in that case, sorry if I prompted you to this (I mentioned AoC)
22:46:38 <int-e> b_jonas: don't worry about it.
22:49:14 <int-e> I'm kind of proving to myself that I can still do this. The trick will be to stop when I reach the milestone I set out with (solving the 25 most recent problems. I have two to go.)
22:50:27 <b_jonas> int-e: solve 25 recent ones on http://www.spoj.com/ too :-)
22:50:43 <int-e> 10 years is about right. I stopped around https://projecteuler.net/problem=231
22:51:04 <int-e> b_jonas: Yeah probably not.
22:51:34 <int-e> The thing is I kind of like the combinatorial sort of problems that PE does.
22:54:29 <int-e> (PE includes publishing dates with their problems so the link is suitable for dating.)
22:57:47 <fizzie> int-e: I've been toying with the idea of doing p5.js visual illustrations out of my solutions, did two already -- https://zem.fi/tmp/aoc-2019-p5/ -- but not sure if I'll finish, not all of them are as visual. Though many are.
22:58:32 <int-e> I have not touched any AoC or Intcode... this year, I think.
22:59:10 <int-e> We should get kspalaiologos to write tools for that :P
23:02:22 <int-e> fizzie: Oh the CA one is pretty. In the asteroid scan too much is going on.
23:02:52 <fizzie> int-e: Did you let the scan run to part 2? I think that's better.
23:03:28 <fizzie> Part 1 is just a flickery mess, it's true.
23:03:32 <int-e> Hmm, ket me see.
23:03:55 <int-e> Oh I remember what it was... yes, part 2 should work better.
23:04:00 <fizzie> I mean, it's not going to be any prettier, just less messy.
23:04:16 <int-e> But now I missed the fun part.
23:05:13 <int-e> Yeah, part 2 is nicer :)
23:05:42 <fizzie> My target asteroid 200 was in the first sweep, not sure if that's always the case.
23:06:13 <int-e> Mine was too.
23:06:35 <int-e> And it was number 200 as well.
23:09:35 <int-e> Ah, you did the sweep differently :)
23:09:53 <int-e> I actually used https://en.wikipedia.org/wiki/Stern-Brocot_tree to get the possible directions in clockwise order.
23:11:23 <int-e> http://paste.debian.net/1124909/
23:12:44 <fizzie> Heh, interesting. Kind of more discrete.
23:14:58 <fizzie> I did consider doing the same thing I did (reuse part 1's 'get visible' function, sort the result) but using a quadrant-and-slope kind of thing for the sort instead of atan2.
23:15:38 <int-e> But yeah, atan2 seems simpler.
23:16:07 <int-e> Unless you worry about rounding errors...
23:16:46 <fizzie> I did, but it gave the right result. :)
23:17:10 <int-e> Oh yes, there is that in these competitions.
23:17:15 <fizzie> I guess the whole "only the visible ones" + the limited size of the grid means you can't really get angles that near each other.
23:19:58 <int-e> But let's see... two subsequent angles span a parallelogram of area 1, so the angle between them is arcsin(1/(ab)) where a and b are the lengths of the vectors... which are less than sqrt(2)*48.
23:20:13 <int-e> > asin (1/(2*48^2))
23:20:17 <lambdabot> 2.170138905922681e-4
23:20:41 <int-e> As you can see, no need to worry about rounding errors :)
23:21:31 <int-e> s/angles/directions/ (and by "direction" I mean an integer vector (p,q) with gcd(p,q) = 1)
23:22:30 <int-e> > atan2 1 1 - atan2 46 47
23:22:33 <lambdabot> 1.0752273791101219e-2
23:23:07 <int-e> > atan2 45 46 - atan2 46 47 -- ah, this is more like it
23:23:09 <lambdabot> -2.362948916323493e-4
23:23:53 <int-e> that should be the actual minumum achievable difference
23:24:06 <int-e> iuiuiu.
23:25:06 <int-e> > atan2 3 3 - atan2 5 5 -- now I'm curious
23:25:09 <lambdabot> 0.0
23:26:06 <int-e> fizzie: wait, your grid is so much smaller than mine!
23:26:26 <int-e> I got a 48x48 one.
23:26:36 <fizzie> Weird. That's what I got as my input file.
23:27:22 <fizzie> This is the one day I did real early (as in, leaderboard early), I guess it's technically possible they might have changed the size? Sounds odd though.
23:27:23 <int-e> 346 asteroids, not many more than yours
23:27:55 <int-e> Yeah, quite possibly.
23:28:36 <int-e> Or maybe they just picked a random value between 20 and 50.
23:28:54 <int-e> It's not like the problem became any simpler or harder because of it.
23:30:50 <int-e> http://paste.debian.net/1124911/ it looks nicer this way actually
23:32:46 <fizzie> It does, yes.
23:32:53 <fizzie> My grid's so cramped. :/
23:54:47 <int-e> > (atan2 7673 4316 - atan2 7657 4307 :: Double, atan2 7673 4316 - atan2 7657 4307 :: Float) -- single precision is not enough on an 8K display
23:54:50 <lambdabot> (-1.2929723736121446e-8,0.0)
←2020-01-05 2020-01-06 2020-01-07→ ↑2020 ↑all