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: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: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: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: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: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: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: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: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: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:37:12 <Lykaina> https://tappedout.net/mtg-decks/nylea-based-mono-g/
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: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: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:34 <zzo38> What is it written in now?
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: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: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:35 <\oren\> (this is how it displays the names) https://www.unicode.org/Public/UCD/latest/ucd/UnicodeData.txt
05:20:04 <imode> how do I exit the editor?
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:43 <imode> 4,347,372 bytes allocated and in-use at exit, but no double frees.
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: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:50:01 <imode> that reasoning is bullshit.
05:50:22 <imode> isn't there a character reversal glyph.
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:34:24 <kingoffrance> well, that makes my charset madness sound less insane, so good work zzo38 i agree
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: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:46:15 <Taneb> As in, to find ever-busier beavers?
11:46:18 <Taneb> Not to my knowlege
11:48:35 <kspalaiologos> that requires more gigabytes of memory than there are atoms in universe
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: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: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:33 <HackEso> /hackenv/wisdom/zygohistomorphic prepromorphism
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:20:23 <wib_jonas> Unfortunately, no one can explain what a monad is. You have to see it for yourself.
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:56 <wib_jonas> I have my own factorial definition at http://www.math.bme.hu/~ambrus/pu/Bin.hs
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:40 <int-e> OO gives you associated namespaces for your types.
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:39 <int-e> I really liked OO for MUD programming.
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: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:41 <int-e> wib_jonas: I really try to stick to pod-types.
13:51:34 <int-e> kspalaiologos: I do use Haskell too. :P
13:52:54 <int-e> I'll go out on a limb and say I have better things 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: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: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: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: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:52 <int-e> You'd need a division by a constant with remainder using only two cells.
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:54 <int-e> However then it won't be complexity preserving.
14:01:20 <int-e> A direcy, complexity preserving translation will almost certainly need 3 cells.
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:21 <kspalaiologos> we can have just two registers, adding another variable to the state makes it very cheaty
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: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:33 <int-e> And that preserves complexity.
14:04:43 <int-e> *I*'m interested in preserving complexity here.
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: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: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: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:59 <int-e> You just need many states.
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: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: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:33:49 <wib_jonas> `python3 -cimport math; v = 5; print(v**v, math.factorial(v))
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: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: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:43 <wib_jonas> > let { f x = 10 * x; } in fmap f (3, 6, -2)
15:40:46 <lambdabot> • No instance for (Functor ((,,) Integer Integer))
15:40:49 <wib_jonas> > let { f x = 10 * x; } in fmap f (3, 6)
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: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:55 <j-bot> kspalaiologos: 4 9
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: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:43:07 <j-bot> kspalaiologos: * -
15:43:28 <j-bot> kritixilithos: _100
15:43:31 <j-bot> wib_jonas: 0.894427j0.447214
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:53 <wib_jonas> kspalaiologos: a complex number literal
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:59 <FireFly> what does 'low level' mean in this context?
15:45:34 <kspalaiologos> I managed to write a simple java powered kernel lately
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: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: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: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:53 <kspalaiologos> but my constrained mind seems to take lisp easier than languages camouflaging to be something really useful
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:54:12 <wib_jonas> kspalaiologos: how about using fortran 2019?
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: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:45 <arseniiv> and the piece is too long and is for an orchestra I think
15:59:04 <arseniiv> I often think that about myself too
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:27 <wib_jonas> hey, that doesn't have space before and after every paren
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:01:17 <wib_jonas> oh yeah, my old code has space between the function name and the call parenthesis too. also horrible
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:07:59 <kspalaiologos> are the expressions evaluated right to left, really?
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:12:26 <kspalaiologos> "A function taking a single argument on the right is called a monadic function, or a monad for short. "
16:13:06 <kspalaiologos> that's the real meaning of this buzzword which definition feels like reading Malbolge?
16:13:57 <j-bot> kspalaiologos: 0.25
16:14:09 <arseniiv> kspalaiologos: no, Haskell monads are the other sort :)
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: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: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:05 <HackEso> Endomorphisms are just final morphisms.
16:15:09 <HackEso> A morphism is just a natural transformation between two diagrams of shape 1.
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:43 <HackEso> A category is an enriched category where the enriching category is the category of classes.
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: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:19:00 <j-bot> kspalaiologos: 1 1 1
16:19:29 <Taneb> What were you expecting?
16:19:46 <FireFly> in +/ 2 3 4 you have the adverb / modifying the verb + to produce "sum"
16:19:53 <Taneb> op / x y z is equalivalent to x op y op z
16:20:38 <j-bot> kspalaiologos: 1 1
16:21:00 <FireFly> arseniiv: unary % is reciprocal, so you're taking reciprocal of 0 or 1
16:21:22 <Taneb> It's just as true as any other answer you can give
16:21:44 <arseniiv> ah wait I thought about 0^0 maybe
16:22:09 <int-e> arseniiv: a/0 is a sane choice *if* you have to make / total.
16:22:21 <int-e> arseniiv: a/0 = 0 I mean.
16:22:29 <int-e> 0^0 is 1 of course.
16:22:57 <arseniiv> 1 => phew [I was trying to remember how’s that word written]
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: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: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: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: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:33 <j-bot> arseniiv: |spelling error
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:38 <FireFly> unary >. is ceiling, binary >. is maximum I believe
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: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 <j-bot> kspalaiologos: _1 _2 _3
16:32:53 -!- imode has joined.
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: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:28 <FireFly> because you produced a 3x3 array
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:18 <arseniiv> hm what would alparring then mean
16:34:25 <FireFly> another tool in the toolbox for reasoning about problems
16:35:01 <j-bot> arseniiv: |syntax error
16:35:01 <j-bot> arseniiv: | \\\1 2 3
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:38 <FireFly> I mean it's limited to three lines at a time
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: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: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:45 <FireFly> it'd be easiest if you reference the vocabulary for looking up verbs
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:39:20 <FireFly> Not sure, I'm told it's still used a bit in financial stuffs
16:39:48 <Taneb> Didn't Phantom_Hoover get a job working with K?
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 <j-bot> kspalaiologos: |ok
16:42:38 <j-bot> kspalaiologos: 4.25 4.2
16:42:38 <j-bot> kspalaiologos: 5.25 5.2
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: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:27 <int-e> (wrong order, right numbers)
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:46:06 <FireFly> I used ; link, which boxes its left and right arguments before concatenating
16:46:13 <FireFly> [ <'hello' NB. we have boxes
16:46:46 <Taneb> int-e: what did you expect?
16:47:03 <j-bot> kspalaiologos: (< < <"_ _ _)"
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: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:49:03 <FireFly> kspalaiologos: "let's see"
16:49:08 <int-e> kspalaiologos: imagine a silent 't' after the first 'e'
16:49:38 <int-e> (engl-ish is a contraction of english-ish, of course)
16:50:30 <HackEso> test failed. HackEgo-JUnit is not available.
16:51:55 <int-e> kspalaiologos: https://www.thefreedictionary.com/ish has the right definition.
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:56 <int-e> . o O ( What color is horse red-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:01:14 <arseniiv> I had seen it only in a book, not in vivo at all
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: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:06:31 <arseniiv> kspalaiologos: it they are tracked, maybe modarchive or what it’s called
17:08:05 <arseniiv> I’m not able to review in meaningful way but both look pretty solid and fun
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: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:54 <kspalaiologos> https://modarchive.org/index.php?request=view_by_moduleid&query=170225
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: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:17:09 <kspalaiologos> in most cases I land either on trivial brainfuck derivative
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:12 <arseniiv> kspalaiologos: yeah, unfortunate :(
17:20:18 <kspalaiologos> also, we really can merge all the brainfuck substitutions
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:20 <ais523> for the purpose of being able to merge them all into a single page
17:26:41 <kspalaiologos> to merge all pages containing the [[:Category:Trivial Brainfuck Substitution]] (or something along these lines)
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:28:07 <ais523> fwiw I'd be much more confident doing something like that client-side via a tool like AWB
17:29:55 <kspalaiologos> https://en.wikipedia.org/wiki/Wikipedia:AutoWikiBrowser/CheckPage#Approved_users
17:30:10 <kspalaiologos> a power user will just nop out the statements used for the check
17:31:12 <ais523> kspalaiologos: it's pretty good at keeping out script kiddies
17:31:37 <ais523> they don't even know how to override the check
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:58 <ais523> it's pretty hard to bypass the check in the tool unknowingly
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:59 <ais523> the thing is, on Wikipedia anything can be reverted
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: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:16 <ais523> that's one of the things the "bot flag" on an account is for, it disables the rate limits
17:36:37 <ais523> but that has to be set manually and there's vetting of the user/bot first
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:38:01 <ais523> the rate limits themselves are probably automatic, although I don't think I have perms to check atm
17:38:47 <ais523> not right now, I was at one time though (I resigned due to lack of activity)
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: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: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: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: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:52:05 <ais523> which is the reason why the client-side check helps there
17:52:43 <kspalaiologos> it would be a shame if (*cough*) someone, released an unlocked version.
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:40 <ais523> so having an imperfect check is a good time-saving device, compared to having no client-side check
17:54:17 <ais523> there are rate limits, but manual edits can go pretty quickly sometimes
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: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:46 <ais523> 30-60/minute is common for full-auto bots, with maxlag compensation
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: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: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: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.
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: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: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: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: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: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:23:07 <int-e> > atan2 45 46 - atan2 46 47 -- ah, this is more like it
23:23:53 <int-e> that should be the actual minumum achievable difference
23:25:06 <int-e> > atan2 3 3 - atan2 5 5 -- now I'm curious
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: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