00:00:09 it's a "new" thing, in the sense that it became used during the time I've been using linux 00:01:17 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 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 so tmpfs is more efficient 00:01:49 DOS also supports ramdisk 00:02:38 zzo38: but what does the program that you spawn do with its input and output? 00:03:00 Converts it into a different format. 00:03:33 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 and what do you do with the output? 00:03:51 (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 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 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 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 so it's not too large 00:05:37 It might be very large if you are printing at a high resolution. 00:06:19 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 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 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 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 but that's not a common configuration these days 00:09:56 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 you have to configure it well, and I don't know the details, but I hear it's working well 00:10:19 I didn't know it has that, but I thought of that too. 00:10:52 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 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 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 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 what will you do with the output? 00:12:59 will you send it to a printer? 00:13:18 or show it on the screen? 00:15:14 It will be combined with an in-memory picture 00:15:23 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 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 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 and I presume the same database contains other metadata over just the images 00:21:19 which is why you don't just store the compressed image in a separate file 00:23:24 Yes, that is true. 00:23:56 And that is why it isn't stored in a separate file. 00:30:13 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 then you don't need any non-blocking things 00:32:09 but it's also not too hard to handle the two pipes in a select loop if you really need to 00:32:32 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 (This program is meant to render cards for card games such as Magic: the Gathering; like MSE but different.) 00:33:47 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 Yes. 00:34:42 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 if you need both sides from the same process then that's mostly what you can do 00:35:42 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 that can depend on the converter and its options 00:36:05 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 Yes, about what you said about the converter is true, but such thing is not known by this program 00:37:18 of course another possibility is to also put the converter in the same process 00:37:30 which I could do with ImageMagick in particualr 00:37:50 because it has some dynamic libraries and documented interfaces 00:37:57 C and C++ interfaces 00:38:30 I think those allow reading compressed image streams from in memory, though I haven't actually tried that 00:38:46 Yes, although I am not even knowing if it is a format supported by ImageMagick or not, for one thing. 00:39:08 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 (I can easily change how it communicates with the external program later if needed, I suppose.) 00:40:41 sure, but you can do this with some libraries other than ImageMagick too 00:41:23 there are good reasons for that, beacuse ImageMagick doesn't natively support everything 00:42:57 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 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 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 that's when you can also rotate and crop and color correct the scan/photo, not just convert formats 00:46:40 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 (Also, the picture is not necessarily RGB and it might be CMYK instead.) 00:47:35 you can still have more than one formats, since ImageMagick handles multiple formats with a natively built in decoder 00:48:00 ImageMagick abstracts away some of those format differences 00:49:27 Probably only the artwork of the card would be stored in the database; the border pictures would be in external files. 00:49:33 sure 00:49:47 that doesn't change much of what I said 00:50:04 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 for the inner and middle borders that is 00:50:36 you can do it with the outer black (or white) border, except for Un-sets 00:51:37 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 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 Have you used Magic Set Editor? 00:52:22 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 no, I haven't used it 00:53:11 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 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 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 sure, if you have a font that contains all forty-something mana symbols, then that can work 00:58:43 plus the tap and untap symbol 00:59:01 -!- FreeFull has quit. 01:02:10 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 Do you think some special effects other than opacity might be needed? 01:32:02 hi 01:32:15 Hello 01:32:27 do we discuss magic the gathering in here? 01:33:36 my usual irc channel for it is inactive atm 01:36:04 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 Do you like to make up custom Magic: the Gathering cards? 01:36:26 Or puzzles? 01:37:12 https://tappedout.net/mtg-decks/nylea-based-mono-g/ 01:37:23 look good? 01:37:40 that was the question i asked 01:39:00 I don't know much about looking if a deck is good or not. 01:41:02 oh shit...i have more than 1 of a card and the format is edh 01:43:20 Oops, yes you are correct, you have 2x Ripjaw Raptor 01:43:31 That won't do, so you will have to change it 01:47:05 I also invented a file format for deck lists 01:51:41 cool 01:51:50 anyone use it? 01:52:29 I don't know. 01:54:27 -!- heroux has quit (Read error: Connection reset by peer). 01:55:03 Here is a file using that format: http://zzo38computer.org/textfile/miscellaneous/magic_card/decks/making_enemies.deck 01:55:31 For the commander, use a [COMMAND] block. 01:55:45 (The and are not needed if it is a single deck.) 01:56:07 [[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 [[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 if you build a tool, and it has no purpose, what's the point of the tool? 04:03:35 I don't know. 04:06:09 <\oren\> should I rewrite my font editor in Rust? 04:08:18 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 What font formats does it use? 04:38:15 <\oren\> CDF 04:38:19 <\oren\> BDF 04:38:28 OK 04:38:34 What is it written in now? 04:38:37 <\oren\> C 04:38:49 OK. Did you publish it? 04:43:59 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 OK 04:53:44 -!- heroux has quit (Read error: Connection reset by peer). 04:54:25 -!- heroux has joined. 04:56:02 What transformations can be done to improve JPEG compression without being more lossy? 04:56:16 (Assuming the file that you are trying to transform is already JPEG) 05:09:36 \oren\: valgrind? 05:10:15 how do I build this? 05:11:20 and do you have a sample file? 05:11:39 built it, now I need a sample file. 05:16:50 <\oren\> http://www.orenwatson.be/neoletters.bdf 05:17:39 You could also try pcf2bdf 05:18:37 <\oren\> oh and it also need s UnicodeData.txt from the unicode foundation 05:18:52 mind linking me that? 05:19:18 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 interesting.. 05:20:04 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 interesting, yeah that's quite the memory leak. let's see if you clean up your allocated space. 05:21:46 What if you want to make a non-Unicode font though? Then the Unicode data is not applicable. 05:21:55 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 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 I'm not that far in but I don't see any buffer cleanup, yeah. 05:26:26 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 that plus a calloc and no free. 05:27:04 yeah you haven't lost the references to anything, you just haven't cleaned up the stuff you have references to. 05:27:44 you `calloc` a big ol' hunk of space for some glyphs but you never free them. 05:29:48 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 I think valgrind can tell you which one is "lost", though. 05:30:27 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 nah, just means it's in use at exit. 05:33:22 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 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 oh no the braile works great. 05:38:17 this is garbage on my screen, though: "π”…π”‡π”‰π•–π••π•šπ•₯" 05:38:42 too compressed I guess. 05:41:56 <\oren\> https://imgur.com/GKQKGJG 05:42:37 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 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 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 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 why the hell are they missing?! 05:49:06 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 bullshit. 05:50:01 that reasoning is bullshit. 05:50:02 <\oren\> it is bullshit 05:50:22 isn't there a character reversal glyph. 05:50:41 U+202E? 05:50:42 Unicode is very messy, and is equally bad for all uses. 05:51:42 However, it does have the advantage of being compatible with ASCII, at least. 05:51:46 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 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 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 This is so far: http://zzo38computer.org/textfile/miscellaneous/utce Some stuff may be changed if needed 05:57:42 Some of these characters are also in Unicode but also many isn't. 05:58:20 (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 I think what I did is better though. 06:03:58 -!- nfd9001 has joined. 06:04:11 (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 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 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 OK 06:34:24 well, that makes my charset madness sound less insane, so good work zzo38 i agree 06:34:50 re: UNIX philosophy 07:11:28 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 (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 [[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 Hi all 08:22:06 Hello 08:29:39 zzo38: 08:29:48 Interestingly, can simulated annealing be used for PCB routing? 08:33:48 -!- nfd has quit (Ping timeout: 260 seconds). 08:35:03 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 http://apt.cs.manchester.ac.uk/projects/tools/mucs-pcb/ explicitly mentions simulated annealing. 10:43:33 -!- wib_jonas has joined. 10:45:34 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 [[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 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 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 This latter one is believed to prove at least Turing completeness, and ais523 details it in an article linked from there. 10:52:00 I wonder if you can get more than Turing completeness if you take the rules for breaking infinite loops literally. 10:55:11 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 That gives you a lot of leeway when it comes to TC-ness... by choosing sufficiently well-informed players. 10:57:10 Oh. 712.1c says tournaments are different :/ 10:57:27 Actually the article is based on a different construction 10:57:35 one that doesn't use Hungary Lynx and Noxious Ghoul 11:04:22 The tournament version of shortcuts is sufficiently fun. 11:05:11 -!- kspalaiologos has joined. 11:18:07 Ah, spoilsports: "Non-deterministic loops (loops that rely on decision trees, probability or mathematical convergence) may not be shortcut." 11:34:04 I (possibly) made a Malbolge interpreter in Malbolge 11:35:26 gah 11:35:30 10GB of ram eatenm 11:35:43 and it was swapping 11:45:16 is there any busy beaver competition? 11:46:15 As in, to find ever-busier beavers? 11:46:18 Not to my knowlege 11:48:20 yep 11:48:25 because I've got a nice one 11:48:35 that requires more gigabytes of memory than there are atoms in universe 11:48:45 and I *know* it will finish, eventually 11:49:15 How many states? 11:51:15 it's hard to tell 11:51:28 really 11:51:36 the program is around 40MB big 11:52:09 Then that's not very interesting 12:10:13 -!- Sgeo has quit (Ping timeout: 260 seconds). 12:17:57 http://www.logique.jussieu.fr/~michel/bbc.html has some pertinent numbers 12:22:26 It looks like you can require more memory than there are atms in the universe with 2 symbols and 7 states 12:25:06 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 (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 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 interesting 13:16:26 << In Haskell, we don't talk about immutability. We talk about cytoendohygrobimorphisms in the category of endobiditricomanifolds and other elementary constructs. >> 13:16:37 /r/shittyprogramming gold 13:17:35 ``` cat /hackenv/wisdom/zygo* 13:17:35 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 wha 13:18:32 ``` ls /hackenv/wisdom/zygo* 13:18:33 ​/hackenv/wisdom/zygohistomorphic prepromorphism 13:18:47 interesting 13:18:54 what is a monad anyway 13:19:17 the definition in our Polish wiki used to look like verses summoning satan 13:19:17 kspalaiologos: https://wiki.haskell.org/Zygohistomorphic_prepromorphisms 13:19:32 gosh it really exists 13:20:23 Unfortunately, no one can explain what a monad is. You have to see it for yourself. 13:21:09 can one make a monad in C? 13:21:18 or other language I'm at least barely familliar with 13:22:00 kspalaiologos: https://willamette.edu/~fruehr/haskell/evolution.html seems somewhat relevant. 13:22:25 ^ ah yes, that too 13:22:56 I have my own factorial definition at http://www.math.bme.hu/~ambrus/pu/Bin.hs 13:22:57 interesting 13:23:01 I like scheme 13:26:24 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 OO 13:27:12 who would like OO 13:27:24 all you need is procedural programming 13:27:40 OO gives you associated namespaces for your types. 13:27:43 I like that. 13:27:54 the main principle of OO is encapsulation 13:28:13 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 ("OO gives you namespaces for types" of course is the one benefit that you lose instantly when encoding it in C) 13:29:07 if two objects instances mutate (send a message) to certain single object, you lose the benefit of encapsulation 13:29:21 and there is something that resembles the state 13:29:32 Namespace for types? 13:29:39 I really liked OO for MUD programming. 13:30:04 alright? 13:30:17 I thought about extending C a bit 13:30:20 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 yeah 13:30:33 but you could do this in C 13:30:43 look at linux source code and how the drivers are implemented 13:30:51 "you can do this in C" is not a valid argument 13:31:18 it would be as comfortable when done procedurally as the example you're giving 13:31:35 It's basically a tautology. (You can program it in C, or you can't program it at all.) 13:33:22 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 (Oh and exceptions see the occasional use as well... as non-local returns.) 13:44:14 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 one could employ boehm GC 13:45:41 wib_jonas: I really try to stick to pod-types. 13:45:45 all your low level stuff is gone 13:51:34 kspalaiologos: I do use Haskell too. :P 13:52:02 any ideas on brainfuck <=> SQLite interop? 13:52:09 especially the callbacks 13:52:12 how to get over 'em 13:52:54 I'll go out on a limb and say I have better things to think about. 13:53:31 it's already an amazing thing to think about 13:53:44 also, as you use haskell you're probably experienced in CS theory 13:54:03 would you tell me how the f*ck can 3-celled brainfuck be Turing complete 13:54:07 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 I know about collatz function 13:54:21 and I know it proves turing completness 13:54:34 but it makes no sense to me that you can for example do modulus operation on it 13:54:35 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 kspalaiologos: oh you're extending bf and making it a proper language? 13:54:43 kspalaiologos: Just work through oerjan's construction. 13:54:55 It's only slightly tricky!!!1 13:55:06 kritixilithos, wiring up SQLite to write an URL shortener in brainfuck 13:55:19 int-e, I mean, possibly 13:55:21 what have you added so far? 13:55:33 interop between brainfuck and sqlite 13:55:41 currently you can just INSERT to the database 13:55:50 SELECT is being worked on because I can't get over the callback mechanism 13:56:32 I thought that if I had 3 bignum cells and a brainfuck like language 13:56:40 to prove it's turing complete I'd simulate a stack machine 13:56:47 that has two stacks and in result is turing complete 13:56:52 so the proof is more practical 13:57:20 to push something on a stack I'd just *= 255 & += n; 13:57:27 but to pop something out of the stack I need modulus 13:57:40 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 there was ESOAPI for ESOOS 13:58:04 but it's garbage for userland programming 13:58:12 that used something along ANSI escapes but better 13:58:37 kspalaiologos: pushing isn't the problem... popping is. 13:58:41 Right, and https://esolangs.org/wiki/PESOIX 13:58:42 sure 13:58:51 thats what I just said 13:58:52 You'd need a division by a constant with remainder using only two cells. 13:58:57 yes 13:59:07 The fun thing about Collatz machines is that you get 3 cells for that task, effectively. 13:59:17 s/machines/functions/ 13:59:49 but it would be possible to translate 3-cell brainfuck to 2-register MM 14:00:04 Not necessarily. 14:00:10 why 14:00:24 2-register MM is turing complete 14:00:32 it should be able to simulate any turing machine 14:00:43 Fair enough. 14:00:54 However then it won't be complexity preserving. 14:01:01 yeah 14:01:07 and the translation process may never finish 14:01:20 A direcy, complexity preserving translation will almost certainly need 3 cells. 14:01:23 *direct 14:01:26 s/cells/counters/ 14:01:33 or yeah 14:01:46 nut the thing that bothers me the most in this case are unbalanced loops 14:02:16 because one can't refer to variable register using MM 14:02:27 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 The reference to a variable register isn't a problem... just make the tape position part of the MM state. 14:03:01 ? 14:03:03 how 14:03:21 we can have just two registers, adding another variable to the state makes it very cheaty 14:03:25 hi hi hi 14:03:39 Make the MM state a pair of program position (in the brainfuck program) and current tape position (0,1,2) 14:04:11 in the runtime the state is constant? 14:04:12 That way a 3-cell Brainfuck program of length l becomes a MM with 3 registers and 3*l states. 14:04:20 no no no 14:04:24 I'm not interested in 3 registers 14:04:26 I want 2 14:04:33 And that preserves complexity. 14:04:43 *I*'m interested in preserving complexity here. 14:04:43 complexity doesn't bother me 14:04:51 well 14:05:08 You can do the usual m to 2 counters reduction afterwards. 14:05:23 At an exponential cost in runtime. 14:05:44 how 14:05:45 can I do that 14:07:46 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 (did you know that 101 is the 26th prime...) 14:08:27 umm, not 14:08:32 *no 14:08:45 but I still don't understand it 14:09:42 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 (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 well 14:11:00 yes 14:11:17 but you need modulus 14:11:29 and there is NO way to implement it on a 2 register MM 14:11:30 that's what I just called remainder. 14:11:38 yes 14:11:40 I do realise 14:11:44 You're wrong. 14:11:58 how to do this 14:11:59 You just need many states. 14:12:09 Meh. 14:14:12 http://paste.debian.net/1124843/ 14:14:48 It's important that we only ever divide by known constants. 14:16:46 interesting 14:25:14 [[Special:Log/newusers]] create * Mister14 * New user account 14:29:05 [[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 [ (^~,!)5 15:02:42 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 I should try to learn J again 15:32:24 https://www.jsoftware.com/help/learning/contents.htm 15:32:28 Never quite got the hooks and stuff last time 15:32:29 I'll probably read this one 15:33:49 `python3 -cimport math; v = 5; print(v**v, math.factorial(v)) 15:33:50 3125 120 15:35:19 a ha! 15:35:22 I understand that J code above 15:35:38 but not quite the tilde 15:36:26 [ ^~ 0 1 2 3 4 5 15:36:27 Taneb: 1 1 4 27 256 3125 15:36:49 ^~ is a monad (in the J sense, not the Haskell sense) which computes x^x 15:37:24 << The symbol for division is % (percent). >> 15:37:25 gosh why 15:37:42 every single language uses slash for division 15:37:50 it looks closer to the apl Γ· 15:38:09 it has to be a joke 15:38:19 also, why is - turned into a floor (_)? 15:38:30 `/` is used instead for reduce (and other stuff) 15:38:31 ​/`? No such file or directory 15:38:41 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 interestinb 15:39:54 kspalaiologos: because `-` is a function that can also be monadic, in which case it negates the right argument 15:40:00 kspalaiologos: - is used for subtraction and unary negation, but _ is used in a negative number literal 15:40:12 so 15:40:14 [ _2 15:40:15 kspalaiologos: _2 15:40:18 well 15:40:23 look into apl if you don't like j's symbols 15:40:24 it makes a tiny bit of sense 15:40:41 what does it mean that it's monadsic 15:40:43 *monadic 15:40:43 > let { f x = 10 * x; } in fmap f (3, 6, -2) 15:40:46 error: 15:40:46 β€’ No instance for (Functor ((,,) Integer Integer)) 15:40:46 arising from a use of β€˜e_110362’ 15:40:46 unary 15:40:49 > let { f x = 10 * x; } in fmap f (3, 6) 15:40:51 (3,60) 15:40:56 ^ this is why 15:41:16 and it's also why standard ML uses a different character for unary negation, though their specific choice is objectionable 15:41:24 I think most languages only let you express positive number literals, and simply have you apply negation on a positive literal 15:41:34 yup 15:41:35 that's right 15:41:36 [ -5 15:41:36 FireFly: _5 15:41:49 [ -2 3 15:41:50 [ * 2 3 15:41:50 kritixilithos: _2 _3 15:41:50 kspalaiologos: 1 1 15:41:53 `python3 -cprint([10 * x for x in [3, 6, -2]) 15:41:53 ​ File "", line 1 \ print([10 * x for x in [3, 6, -2]) \ ^ \ SyntaxError: invalid syntax 15:41:54 [ *: 2 3 15:41:55 kspalaiologos: 4 9 15:41:58 [ _2 3 15:41:59 kritixilithos: _2 3 15:42:00 `python3 -cprint([10 * x for x in [3, 6, -2]]) 15:42:01 ​[30, 60, -20] 15:42:05 it treats a single star like an empty variable? 15:42:06 or what 15:42:11 what? 15:42:14 (single -> without a colon) 15:42:16 no, *: is square 15:42:20 https://www.jsoftware.com/help/dictionary/vocabul.htm 15:42:37 I don't know what "treats like an empty variable" would mean here 15:42:48 it also is a function 15:42:50 a ha 15:42:55 so it returns the sign 15:43:01 [ * _2 15:43:02 kspalaiologos: _1 15:43:04 [ * 2 15:43:05 kspalaiologos: 1 15:43:06 [ * - 15:43:07 kspalaiologos: * - 15:43:15 interesting 15:43:21 I see some obfuscation potential 15:43:27 [ (* -) 10 15:43:28 kritixilithos: _100 15:43:30 [ * 2j1 15:43:31 wib_jonas: 0.894427j0.447214 15:43:39 what does j do 15:43:43 -!- imode has quit (Ping timeout: 260 seconds). 15:43:45 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 ah 15:43:53 its imaginary/complex 15:43:53 kspalaiologos: a complex number literal 15:44:03 > (2 :: Rational) / 3 15:44:05 2 % 3 15:44:27 I'm an idiot when it comes to FP, I didn't use any FP language really 15:44:47 but I spent a fair amount of time on low level programming 15:44:52 this doesn’t change that J is a write-only esolang 15:44:54 `python3 -cprint(2+1j) 15:44:55 ​(2+1j) 15:44:56 I wanted to learn FP but it seems too weird 15:44:59 what does 'low level' mean in this context? 15:45:01 `python3 -cprint(abs(2+1j)) 15:45:02 2.23606797749979 15:45:07 what 15:45:12 FireFly, I've been writing kernels 15:45:13 oh, I want the sign 15:45:34 I managed to write a simple java powered kernel lately 15:45:59 it's based around stupid implementation of SE 1.5 15:45:59 "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 but hard to write 15:46:12 so it' 15:46:14 s read only 15:46:34 no, get an apl keybaord layout and it becomes easy to write 15:46:38 `python3 -cv = 2+1j; print(v / abs(v)) 15:46:38 ​(0.8944271909999159+0.4472135954999579j) 15:46:51 kspalaiologos: equational FP languages (like Haskell or my F-turned thing) are more readable than J, I assure you 15:46:58 can't they use I instead of J to signify irrational unit? 15:47:07 s read only => rofl :D 15:47:31 possibly 15:47:41 I tried to get a taste of Elixir but currently it's 0-1 for me 15:48:30 going so hard after the state seems peculiar to me 15:48:52 what about lisp 15:49:09 I'll talk about lisp-likes: Used them, liked them 15:49:25 `python3 -cv = complex(2,1); s = v / abs(v); print("%f+%fI" % (s.real, s.imag)) # kspalaiologos: there, it uses I 15:49:26 0.894427+0.447214I 15:49:53 but my constrained mind seems to take lisp easier than languages camouflaging to be something really useful 15:50:24 any lisp? 15:50:34 your lisp may vary :D 15:50:42 CL for me please 15:51:09 bet Clojure, Racket, Scheme and CL have a ton of differences between each other 15:51:34 ah, CL is secretly an imperative language if that tag is still useful 15:51:36 JVM garbage 15:51:45 from what I’ve seen 15:51:46 is the difference in some cases 15:51:59 I'm just an ordinary procedural programming fan 15:52:21 willing to run a startup using Algol 68 15:54:12 kspalaiologos: how about using fortran 2019? 15:54:44 Have you seen Cobol on Wheelchair (or Cogs)? 15:55:09 /* it was Wheelchair: https://github.com/azac/cobol-on-wheelchair */ 15:55:29 it's actively developed (since I looked at it last time) 15:55:39 :o 15:56:06 "(c) " love it 15:56:13 anyway I often like a clean piece of imperative code 15:56:52 look on this clean piece of imperative code: https://github.com/KrzysztofSzewczyk/asmbf/blob/master/bfasm.c 15:57:13 but this is C! 15:57:23 it's beautiful nonetheless 15:57:36 and in fact 15:57:39 it's very imperative 15:57:45 and the piece is too long and is for an orchestra I think 15:58:05 the only state is global 15:58:16 and it's 2000 element int array 15:58:29 gosh, 2k10 me was a stupid person 15:58:33 risky, risky 15:58:34 why didn't I rewrite it sooner 15:58:44 why didn't I rewrite it to this day 15:59:04 I often think that about myself too 15:59:10 everyone does 15:59:40 my very old code has assignments with no space before the equals sign, only after. it's horrible. 16:00:01 I've seen code that has spaces before and after every paren 16:00:02 going like 16:00:16 while ( ( c = getchar () ) != EOF ) 16:00:20 yeah 16:00:27 hey, that doesn't have space before and after every paren 16:00:41 () 16:00:55 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 didn't copy it, because the code is long lost 16:01:17 oh yeah, my old code has space between the function name and the call parenthesis too. also horrible 16:01:37 agree 16:01:51 I almost never wrote like that at least 16:02:34 maybe because I almost started with VB6 where the IDE formats your line as you leave it 16:02:34 http://prntscr.com/qk1xun 16:02:46 this is horrible too 16:02:53 taken out of NT kernel's inet driver 16:02:56 in the original form 16:03:54 return( Err ); 16:03:56 and brackets around return 16:04:02 it's the final boss of garbage code 16:07:40 [ 5 * 4 + 3 16:07:41 kspalaiologos: 35 16:07:59 are the expressions evaluated right to left, really? 16:08:05 without caring about operator precendence? 16:08:20 interesting 16:08:52 well, the operator precedence is "all verbs are equal precedence", and verb evaluation is right to left, yes 16:09:21 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 https://www.jsoftware.com/papers/tot.htm 16:10:19 in general, APL was developed as an alternate maths notation originally, designed to be more consistent than the conventional notation 16:10:37 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 interesting 16:12:26 "A function taking a single argument on the right is called a monadic function, or a monad for short. " 16:12:38 so monad is just an unary function? 16:13:06 that's the real meaning of this buzzword which definition feels like reading Malbolge? 16:13:56 [ % 4 16:13:57 kspalaiologos: 0.25 16:14:00 this is cool though 16:14:09 kspalaiologos: no, Haskell monads are the other sort :) 16:14:29 so monad's definition varies by language? 16:14:46 kspalaiologos: compare "variadic", or the use of "monad", "dyad" in music 16:14:51 The definitive definition is whatever's in our wisdom, of course. 16:14:52 `? monad 16:14:53 (yes, it refers to the number of arguments) 16:14:54 Monads are just monoids in the category of endofunctors. 16:14:56 `? endofunctor 16:14:58 Endofunctors are just endomorphisms in the category of categories. 16:15:00 see also https://en.wikipedia.org/wiki/Arity#Terminology 16:15:02 `? endomorphism 16:15:05 Endomorphisms are just final morphisms. 16:15:08 `? morphism 16:15:09 A morphism is just a natural transformation between two diagrams of shape 1. 16:15:13 See, so useful. 16:15:21 `? final 16:15:23 ​"final" is an annotation in Java; it means the marked code will not be changed anymore and is a final version. 16:15:40 You have to pick words quite carefully to stay in the same domain of things. 16:15:42 `? category 16:15:43 A category is an enriched category where the enriching category is the category of classes. 16:15:56 `? class 16:15:58 class? Β―\(°​_o)/Β― 16:16:15 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 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 > Monads are just monoids in the category of endofunctors. < 16:16:28 :1:25: error: parse error on input β€˜in’ 16:16:31 thats like the wikipedia article looked like 16:16:35 I swear it was this 16:16:37 `? kittegory 16:16:38 A kittegory is just a small category. 16:16:39 yes, sometimes "monadic" just means "1-adic" 16:16:48 or arity 1 16:16:54 oh it also has a meaning in philosophy 16:17:02 from kant i think 16:17:19 A morphism is just a natural transformation between two diagrams of shape 1. => rofl 16:17:20 . o O ( Classes were a concept in pre-anonymous internet that have since been replaced by finely meshed masks. ) 16:18:15 from kant i think => wasn’t it Leibnitz? 16:18:31 though they could be both making their own monads 16:18:42 too many monads 16:18:59 [ * + 4 3 2 16:19:00 kspalaiologos: 1 1 1 16:19:12 [ + / 2 3 4 16:19:13 kspalaiologos: 9 16:19:18 what the heck 16:19:18 why 16:19:28 Hm? 16:19:29 What were you expecting? 16:19:44 I just switched operators 16:19:46 in +/ 2 3 4 you have the adverb / modifying the verb + to produce "sum" 16:19:50 its the same mathematical operation 16:19:53 op / x y z is equalivalent to x op y op z 16:19:56 Ah I thought / is division 16:20:07 I can't switch my mind to % 16:20:18 [ % 0 0 16:20:19 arseniiv: _ _ 16:20:24 [ % 0 1 16:20:25 arseniiv: _ 1 16:20:27 interesting 16:20:29 [ % 1 0 16:20:30 arseniiv: 1 _ 16:20:32 hm 16:20:38 [ % 1 1 16:20:38 kspalaiologos: 1 1 16:20:43 I don’t comprehend 16:20:44 no no no 16:20:47 you need to place it like 16:20:50 [ 0 % 0 16:20:51 kspalaiologos: 0 16:20:55 there we go 16:21:00 arseniiv: unary % is reciprocal, so you're taking reciprocal of 0 or 1 16:21:04 what, 0 / 0 = 0?.. 16:21:08 yes 16:21:10 it's logical 16:21:22 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 A ha 16:21:44 ah wait I thought about 0^0 maybe 16:21:46 wait 16:21:50 _ is Infinity 16:21:54 ] 0 ^ 0 16:21:56 [ 2 ^ 3 16:21:57 arseniiv: 8 16:22:04 [ 0 ^ 0 16:22:04 arseniiv: 1 16:22:09 wait 16:22:09 arseniiv: a/0 is a sane choice *if* you have to make / total. 16:22:11 what was ^ for 16:22:19 expotential 16:22:21 arseniiv: a/0 = 0 I mean. 16:22:23 or well, power 16:22:25 so ^ == *:? 16:22:29 0^0 is 1 of course. 16:22:30 no, *: is square 16:22:34 ah ok 16:22:36 *: is the same as ^&2 16:22:39 I suppose 16:22:41 at least for reals 16:22:57 1 => phew [I was trying to remember how’s that word written] 16:23:46 / means reduce? 16:23:54 int-e: maybe, but why not 1 for example. / is related to multiplication, 1 is too. 0 is less related 16:24:11 kspalaiologos: pretty much 16:25:07 I think we should continue working on EsoOS 16:25:14 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 and feature J as one of languages available there 16:25:57 why does NB. denote a comment 16:26:06 what's the acronym behind it 16:26:11 nota bene 16:26:15 ah! 16:26:16 int-e: is it because 0 is absorbing with regard to Γ— just like ∞ 16:26:24 it's been a sort of comment marker for 300 years 16:26:34 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 FireFly, yeah 16:26:56 you're right 16:27:00 I used to learn a tiny bit of Latin 16:27:13 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 I like to imagine 0 in context of nonnegative integers or rationals as 2^∞ 3^∞ 5^∞ 7^∞ … 16:27:48 [ >. 1 16:27:48 kspalaiologos: 1 16:27:48 [ 2 (*+*) 3 16:27:49 Taneb: 12 16:27:53 [ >. 21.37 16:27:54 kspalaiologos: 22 16:27:59 [ +\ 16:28:00 kspalaiologos: +\ 16:28:01 [ + 16:28:02 kspalaiologos: + 16:28:13 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 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 this was a great opportunity to make some brainfuck code 16:28:32 [ ∞ 16:28:33 arseniiv: |spelling error 16:28:33 arseniiv: | ∞ 16:28:33 arseniiv: | ^ 16:28:33 [ >. 16:28:34 kspalaiologos: >. 16:28:42 shouldn't 1 be assumed here? 16:28:45 like it is with %? 16:28:47 [ % 10 16:28:48 kspalaiologos: 0.1 16:29:07 I'm not sure what you mean 16:29:25 unary % is reciprocal, but in general the unary and binary case of a verb doesn't have to be related 16:29:33 yes 16:29:38 unary >. is ceiling, binary >. is maximum I believe 16:29:42 ah, so there is actually a monad 16:29:49 for % 16:29:52 yes 16:29:53 right 16:29:58 it's all in the vocabulary 16:30:02 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 https://www.jsoftware.com/help/dictionary/vocabul.htm is quite handy 16:30:09 btw one great thing about lisps is that their + βˆ’ Γ— / are often variadic 16:30:23 yep 16:30:41 otherwise you'd need to reduce 16:30:46 not a great deal but saves time 16:31:12 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 That gives _1 _2 _3, right? 16:32:42 [ - 1 2 3 16:32:42 kspalaiologos: _1 _2 _3 16:32:45 ye 16:32:53 -!- imode has joined. 16:32:55 [ + - 1 2 3 16:32:56 kspalaiologos: _1 _2 _3 16:33:07 Well, it does in J. In Lisp I don't know 16:33:11 [ - \ 1 2 3 16:33:12 kspalaiologos: _1 0 0 16:33:12 kspalaiologos: _1 _2 0 16:33:12 kspalaiologos: _1 _2 _3 16:33:16 whoa 16:33:17 wait 16:33:22 why did it print out 3 messages 16:33:24 \ is not / 16:33:28 because you produced a 3x3 array 16:33:29 k 16:33:34 lmao 16:33:40 J is jarring :P 16:33:54 APL is aplarring? 16:34:03 (making jars) 16:34:13 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 wait a second 16:34:18 hm what would alparring then mean 16:34:22 does this bot have some kind of protection 16:34:25 another tool in the toolbox for reasoning about problems 16:34:27 so it doesn't spam out the chat? 16:34:29 parring with aluminium? 16:34:45 [ - - - - 1 2 3 16:34:46 arseniiv: 1 2 3 16:34:51 whyy 16:35:01 [ \ \ \ 1 2 3 16:35:01 arseniiv: |syntax error 16:35:01 arseniiv: | \\\1 2 3 16:35:11 yes it’s quite protected 16:35:12 kspalaiologos: not entirely sure; I'd appreciate if you wouldn't try to get it to quit due to flooding 16:35:27 I'll just check with 6 elements 16:35:29 oh okay I won’t too 16:35:30 if it prints out then it's flawed 16:35:38 I mean it's limited to three lines at a time 16:35:45 [ - \ 1 2 4 16:35:46 kspalaiologos: _1 0 0 16:35:46 kspalaiologos: _1 _2 0 16:35:46 kspalaiologos: _1 _2 _4 16:35:47 but in principle that means you could spam lines and have it be amplified 1:3 16:35:48 [ - \ 1 2 3 4 16:35:49 kspalaiologos: _1 0 0 0 16:35:49 kspalaiologos: _1 _2 0 0 16:35:49 kspalaiologos: _1 _2 _3 0 16:35:49 kspalaiologos: _1 _2 _3 _4 16:35:52 well 16:35:53 ok maybe not 3 16:35:55 but some limit :P 16:36:01 I'll try it on pm 16:36:01 [ i.10 10 16:36:02 FireFly: 0 1 2 3 4 5 6 7 8 9 16:36:02 FireFly: 10 11 12 13 14 15 16 17 18 19 16:36:02 FireFly: 20 21 22 23 24 25 26 27 28 29 16:36:02 FireFly: 30 31 32 33 34 35 36 37 38 39 16:36:02 FireFly: 40 41 42 43 44 45 46 47 48 49 16:36:02 FireFly: 50 51 52 53 54 55 56 57 58 59 16:36:02 FireFly: 60 61 62 63 64 65 66 67 68 69 16:36:03 FireFly: 70 71 72 73 74 75 76 77 78 79 16:36:03 FireFly: ... 16:36:03 will it kick the bot? 16:36:07 ok that's the limit 16:36:20 what's i. 16:36:34 * FireFly sighs 16:36:37 ah 16:36:39 it's seq 16:36:44 but like 16:36:44 worse 16:36:45 it'd be easiest if you reference the vocabulary for looking up verbs 16:36:55 interesting 16:36:56 kspalaiologos: i. is ΞΉ :D 16:36:59 can I make it enumerate alphabet? 16:37:03 or something else? 16:37:22 Well not per se 16:37:28 there aren't really many operators here 16:37:50 bet I have seen `atoi` in some language, related to ΞΉ but don’t remember in what a way 16:38:05 but using this language already feels like driving a truck on thin ice 16:38:07 isn't that just "string to integer" 16:38:13 yep it is 16:38:13 kspalaiologos: how so? 16:38:26 seems illogical to me a bit 16:38:31 but probably because I'm not used to APL 16:38:48 is barely anyone using APL these days? 16:39:20 Not sure, I'm told it's still used a bit in financial stuffs 16:39:24 along with k 16:39:48 Didn't Phantom_Hoover get a job working with K? 16:39:49 K is crazy too 16:40:10 2_&{&/x!/:2_!x}'!R 16:40:33 FireFly, < K is the foundation for a family of financial products > -> you're right 16:41:15 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 or well, it's more oriented around nested lists (a la lisps) than APL-style rectangular arrays 16:41:40 J is much more "batteries included" 16:42:27 [ average=:+/ % 16:42:27 kspalaiologos: |ok 16:42:37 [ average 4 5 16:42:38 kspalaiologos: 4.25 4.2 16:42:38 kspalaiologos: 5.25 5.2 16:42:48 what have I done 16:44:06 * FireFly thinks 16:44:09 beating the averages 16:44:44 created a hook that uh.. creates a table of the original input and the reciprocal? 16:44:46 I guess 16:44:53 I think you meant +/ % # 16:45:00 Ah. 16:45:01 (a fork that divides the sum by the length) 16:45:15 > [1/a + b | a <- [4,5], b <- [4,5]] 16:45:18 [4.25,5.25,4.2,5.2] 16:45:27 (wrong order, right numbers) 16:45:29 [ (;/ %) 1 2 3 16:45:30 FireFly: β”Œβ”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” 16:45:30 FireFly: β”‚1 2 3β”‚1 0.5 0.333333β”‚ 16:45:30 FireFly: β””β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ 16:45:36 well okay, not a great example 16:45:46 how did you make that fancy table 16:45:47 but anyway 16:46:06 I used ; link, which boxes its left and right arguments before concatenating 16:46:13 alright 16:46:13 [ <'hello' NB. we have boxes 16:46:14 FireFly: β”Œβ”€β”€β”€β”€β”€β” 16:46:14 FireFly: β”‚helloβ”‚ 16:46:14 FireFly: β””β”€β”€β”€β”€β”€β”˜ 16:46:26 cats love J 16:46:26 but this box seems a tiny bit off 16:46:28 doesn't it 16:46:28 * FireFly nods 16:46:37 [ <<'hello' 16:46:37 int-e: β”Œβ”€β”€β”€β”€β”€β”€β”€β” 16:46:37 int-e: β”‚β”Œβ”€β”€β”€β”€β”€β”β”‚ 16:46:37 int-e: β”‚β”‚helloβ”‚β”‚ 16:46:37 int-e: β”‚β””β”€β”€β”€β”€β”€β”˜β”‚ 16:46:37 int-e: β””β”€β”€β”€β”€β”€β”€β”€β”˜ 16:46:40 ... 16:46:46 int-e: what did you expect? 16:46:52 wait 16:46:58 thats actually very interesting 16:47:02 [ <<<"bruh" 16:47:03 kspalaiologos: (< < <"_ _ _)" 16:47:07 lol 16:47:09 [ <<<'bruh' 16:47:10 kspalaiologos: β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β” 16:47:10 kspalaiologos: β”‚β”Œβ”€β”€β”€β”€β”€β”€β”β”‚ 16:47:10 kspalaiologos: β”‚β”‚β”Œβ”€β”€β”€β”€β”β”‚β”‚ 16:47:10 kspalaiologos: β”‚β”‚β”‚bruhβ”‚β”‚β”‚ 16:47:10 kspalaiologos: β”‚β”‚β””β”€β”€β”€β”€β”˜β”‚β”‚ 16:47:10 kspalaiologos: β”‚β””β”€β”€β”€β”€β”€β”€β”˜β”‚ 16:47:10 kspalaiologos: β””β”€β”€β”€β”€β”€β”€β”€β”€β”˜ 16:47:15 Taneb: It did what I expected. But it's potentially very noisy. 16:47:33 int-e: I think that's true of a lot of things involving J 16:47:35 yeah, I wonder if the default output ought to be changed to the more consise way 16:47:42 I forget the foreign for it.. 16:47:52 lessee 16:48:00 Maybe it could use double-lined boxes 16:48:10 FireFly: "concise" if you're wondering about the spelling 16:48:28 whoops 16:48:32 lessee 16:48:35 what language is it 16:48:43 french? 16:48:47 engl-ish 16:49:03 kspalaiologos: "let's see" 16:49:08 kspalaiologos: imagine a silent 't' after the first 'e' 16:49:17 ah 16:49:22 alright 16:49:26 I misunderstood the context 16:49:38 (engl-ish is a contraction of english-ish, of course) 16:49:54 what 16:49:55 `? ish 16:49:56 ish? Β―\(°​_o)/Β― 16:50:02 `? engl-ish 16:50:04 `? english-ish 16:50:12 ? 16:50:18 `? test 16:50:22 [ (9!:2)'' 16:50:22 engl-ish? Β―\(°​_o)/Β― 16:50:22 FireFly: 5 16:50:23 what just happened 16:50:24 english-ish? Β―\(°​_o)/Β― 16:50:30 test failed. HackEgo-JUnit is not available. 16:50:31 ah, a great lag 16:51:55 kspalaiologos: https://www.thefreedictionary.com/ish has the right definition. 16:52:02 (or right-ish?) 16:52:02 is it possible to make a sleep in J? 16:52:11 Hmm, is "ish" a monad (in the Haskell sense) 16:52:20 If something is red, it's red-ish 16:52:27 If something is red-ish-ish, it's red-ish 16:52:36 I don’t think the latter is true? 16:52:49 It's true-ish ;) 16:52:56 . o O ( What color is horse red-ish? ) 16:53:05 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 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 it’s weird even originally 17:01:14 I had seen it only in a book, not in vivo at all 17:01:29 quite unmemetic 17:01:47 . o O ( weird things are far more common than the word's meaning suggests ) 17:02:41 http://kspalaiologos.baselinux.net/doc/happy20.wav or http://kspalaiologos.baselinux.net/doc/unreleased.wav 17:02:43 which one is better 17:03:10 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 this one even features quite unnatural world permutation to work 17:04:15 meaning, that permutation is rare even in convoluted poetry 17:04:18 the 2nd one got cut a bit 17:05:37 kspalaiologos: both yours? 17:05:51 I'm planning to put them somewhere 17:06:31 kspalaiologos: it they are tracked, maybe modarchive or what it’s called 17:06:37 no no 17:06:38 not there 17:06:40 or e. g. Soundcloud 17:06:45 I'm not an artist 17:07:08 they are indeed tracked 17:07:31 actually, I used the first one 17:08:00 but which one is better? 17:08:05 I’m not able to review in meaningful way but both look pretty solid and fun 17:08:09 let's pretend 2nd didn't get cut 17:09:15 although there were a few songs from modarchive I liked 17:09:21 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 especially 2pi radix or 486 17:09:31 but the second is good too 17:10:05 and I used in my game a couple of months ago a song named "blinded monarch" from modarchive 17:10:09 (I myself don’t go to modarchive but I know about it via OpenMPT forum) 17:10:09 forgot the artist though 17:10:27 x86 assembly + SDL1.2 is dope though 17:10:54 https://modarchive.org/index.php?request=view_by_moduleid&query=170225 17:10:56 there it is 17:12:03 I like the alternate beat in the second at 0:30 17:13:09 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 agree 17:16:24 [[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 [[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 another very entertaining to watch trend? 17:17:00 random button on the wiki is very disappointing 17:17:09 in most cases I land either on trivial brainfuck derivative 17:17:15 or a joke language 17:19:08 -!- ais523 has joined. 17:19:48 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 +1 from me 17:20:12 kspalaiologos: yeah, unfortunate :( 17:20:18 also, we really can merge all the brainfuck substitutions 17:20:21 into one article 17:20:26 ais523: looks interesting 17:20:55 or maybe enhanced random page button ? 17:20:59 (if its doable) 17:21:09 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 that lets to filter out / in categories 17:21:20 for the purpose of being able to merge them all into a single page 17:26:15 can't someone run a perl script 17:26:18 on the server 17:26:41 to merge all pages containing the [[:Category:Trivial Brainfuck Substitution]] (or something along these lines) 17:26:56 it could be done even using shell script 17:27:15 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 then maybe use selenium? 17:27:43 to automate the browser 17:28:07 fwiw I'd be much more confident doing something like that client-side via a tool like AWB 17:28:28 whats awb 17:28:43 k AutoWikiBrowser 17:29:55 https://en.wikipedia.org/wiki/Wikipedia:AutoWikiBrowser/CheckPage#Approved_users 17:29:57 what an idiotism 17:30:10 a power user will just nop out the statements used for the check 17:30:17 if it's open source its even easier 17:31:12 kspalaiologos: it's pretty good at keeping out script kiddies 17:31:26 in which way? 17:31:34 there's no source 17:31:37 they don't even know how to override the check 17:31:40 so it's easy 17:31:48 just use dotPeek 17:32:07 or a proxy 17:32:27 that will add my username to the wiki page, there must be a programmable tool for that 17:32:31 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 block is delayed 17:32:55 whoever wants to do it will do it 17:32:58 it's pretty hard to bypass the check in the tool unknowingly 17:33:13 it seems like a cool thing to do this afternoon 17:33:28 obviously I won't "test it" 17:33:46 so using the tool contrary to the checkpage check is pretty strong evidence that someone is intentionally trying to violate policy 17:34:15 protection on the clientside is useless 17:34:55 other approach should be taken 17:34:59 the thing is, on Wikipedia anything can be reverted 17:35:07 ratelimits, have they heard of it 17:35:11 and someone having bypassed a clientside check is good evidence that it /should/ be reverted 17:35:26 possibly but reverting in batch can be sometimes bad 17:35:43 maybe the user mixed good and bad contributions? maybe someone already touched the page since "change"? 17:35:46 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 just add ratelimits 17:36:00 ratelimits on edits, no more than a page per minute 17:36:01 also, I'm pretty sure there are systems that check to see if an account is editing too fast 17:36:11 they have to check the list 17:36:14 possibly 17:36:16 that's one of the things the "bot flag" on an account is for, it disables the rate limits 17:36:22 so the clientside protection is useless 17:36:25 as the backend will take care 17:36:37 but that has to be set manually and there's vetting of the user/bot first 17:36:55 manually? 17:37:10 just get an automated system that trashes account of an user that makes more than two edits a second constantly 17:37:38 kspalaiologos: no, I mean permission to bypass rate limits has to be given manually 17:37:48 like the entry on checklist 17:38:01 the rate limits themselves are probably automatic, although I don't think I have perms to check atm 17:38:11 you're a wikipedia admin? 17:38:14 interesting 17:38:43 c'mon man 17:38:47 not right now, I was at one time though (I resigned due to lack of activity) 17:38:49 they havent even obfuscated the assembly 17:39:37 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 I haven't dug through mediawiki 17:40:18 looking at the source code for this would be pointless because it's a configuration setting, not hardcoded 17:42:09 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 << This user doesn't have enough privileges to make automatic edits on this wiki. >> 17:42:57 a check and the messagebox below 17:47:49 You just said the client-side protection is useless, now you're complaining about them not spending enough effort on it. 17:49:39 well, you see 17:49:46 when someone makes clientside protection 17:49:50 they either resign before making it 17:49:54 or make it hard to overcome 17:50:10 or duplicate it on the server side 17:50:13 there are no inbetweeners, because it has no sense to implement weak protection 17:50:52 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 wait 17:51:06 for a clientside check 17:51:10 they first connect to the wiki 17:51:14 download allowed nicks list 17:51:26 I'm talking in general here, rather than about AWB in particular 17:51:27 and then they check whether the client can proceed or not 17:51:39 well AWB uses inet connection for a clientside check 17:51:43 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 so your argument is invalid 17:52:05 which is the reason why the client-side check helps there 17:52:29 it's not effective 17:52:43 it would be a shame if (*cough*) someone, released an unlocked version. 17:52:49 that's why it doesn't work 17:53:13 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 it shouldn't cost anything 17:53:40 so having an imperfect check is a good time-saving device, compared to having no client-side check 17:53:46 if ratelimits were optimally implemented 17:54:17 there are rate limits, but manual edits can go pretty quickly sometimes 17:54:25 how quickly? 17:54:29 I think I managed something like 8/minute manually cleaning up spam 17:54:50 so the rate limits, despite not being public, are likely set to something comparable to that 17:54:52 and you think that automatic tool will edit at 8 edits a minute? 17:54:57 it'll go like crazy 17:55:11 it can go much faster in full-auto mode, but that would be noticed 17:55:15 and blocked very quickly 17:55:25 well that's a point 17:55:46 30-60/minute is common for full-auto bots, with maxlag compensation 17:56:13 anyways I think clientside check is nonsense 17:56:30 you think it would be better to not have the check? 17:56:33 my friend used to put anti-scriptkiddie check in his CS1.7 (or whatever it was called) bot 17:56:36 are you talking about irc rate limiting and jeval's rate limiter? I can tell you about these 17:56:46 wikimedia 17:56:51 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 ais523, strengthten the check to make it more effective 17:57:06 OR get rid of it completely 17:57:10 oh, wiki edits? 17:57:16 just think of power users 17:57:22 even a script kiddie can download a macro program 17:57:25 that will record mouseclocks 17:57:28 *mouseclicks 17:57:29 and keystrokes 17:57:30 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 I guess I'll have to read this scrollback later, gtg now 17:58:18 well 17:58:25 I haven't been administrating a large site 17:58:25 -!- wib_jonas has quit (Remote host closed the connection). 17:58:47 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 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 g2g 18:14:48 -!- kspalaiologos has quit (Quit: Leaving). 18:27:54 [[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 [[Langlang]] https://esolangs.org/w/index.php?diff=68703&oldid=68619 * Hex96 * (+46) 19:00:37 [[Langlang]] https://esolangs.org/w/index.php?diff=68704&oldid=68703 * Hex96 * (-2) /* Examples */ 19:03:21 [[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 [[Langlang]] https://esolangs.org/w/index.php?diff=68706&oldid=68705 * Hex96 * (+54) 19:05:58 [[Langlang]] https://esolangs.org/w/index.php?diff=68707&oldid=68706 * Hex96 * (+1) 19:11:19 [[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 [[User talk:Truttle1]] https://esolangs.org/w/index.php?diff=68709&oldid=68389 * Hex96 * (+92) 19:26:13 [[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 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 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 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 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 [[User:CarlosLuna]] M https://esolangs.org/w/index.php?diff=68711&oldid=68689 * CarlosLuna * (-196) Improving indentation 20:02:46 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 what the client side does is to just read those rate limits in the replies and wait for the appropriate time 20:03:57 " 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 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 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 good that MediaWiki folks had thought about that 20:17:31 Just try not to get carried away. 20:18:03 (I'll be the one who has to restore from backup if you do.) 20:18:36 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 (Few months of esolangs.org time is probably equivalent of few days of Wikipedia time, relatively speaking.) 20:22:14 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 It doesn't scale that way. 20:22:46 It's a logarithm of edit speed or something. 20:23:22 arseniiv: yes, it's generally a good api. not perfect, but good. 20:24:02 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 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 or was 20:25:44 I met that problem a year ago, might be fixed by now 20:27:31 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 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 Sure, that's f... well, fine, within reason. 20:36:28 obviously only if you don't overload the server 20:39:10 Hypothetically, for watching new changes, there's the push-based mechanism that can be used through having a discussion. 20:41:18 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 This is stupid... https://projecteuler.net/problem=674 is so careful to explain that one should pair "distinct expressions from file ", 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 int-e: Have you always been doing PE, or is this just for AoC withdrawal? 22:45:49 fizzie: I was clean for almost 10 years, but AoC kind of triggered this relapse 22:46:18 (Is that right? Maybe it was only 6 years) 22:46:28 A long time anyway. 22:46:29 int-e: in that case, sorry if I prompted you to this (I mentioned AoC) 22:46:38 b_jonas: don't worry about it. 22:49:14 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 int-e: solve 25 recent ones on http://www.spoj.com/ too :-) 22:50:43 10 years is about right. I stopped around https://projecteuler.net/problem=231 22:51:04 b_jonas: Yeah probably not. 22:51:34 The thing is I kind of like the combinatorial sort of problems that PE does. 22:54:29 (PE includes publishing dates with their problems so the link is suitable for dating.) 22:57:47 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 I have not touched any AoC or Intcode... this year, I think. 22:59:10 We should get kspalaiologos to write tools for that :P 23:02:22 fizzie: Oh the CA one is pretty. In the asteroid scan too much is going on. 23:02:52 int-e: Did you let the scan run to part 2? I think that's better. 23:03:28 Part 1 is just a flickery mess, it's true. 23:03:32 Hmm, ket me see. 23:03:55 Oh I remember what it was... yes, part 2 should work better. 23:04:00 I mean, it's not going to be any prettier, just less messy. 23:04:16 But now I missed the fun part. 23:05:13 Yeah, part 2 is nicer :) 23:05:42 My target asteroid 200 was in the first sweep, not sure if that's always the case. 23:06:13 Mine was too. 23:06:35 And it was number 200 as well. 23:09:35 Ah, you did the sweep differently :) 23:09:53 I actually used https://en.wikipedia.org/wiki/Stern-Brocot_tree to get the possible directions in clockwise order. 23:11:23 http://paste.debian.net/1124909/ 23:12:44 Heh, interesting. Kind of more discrete. 23:14:58 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 But yeah, atan2 seems simpler. 23:16:07 Unless you worry about rounding errors... 23:16:46 I did, but it gave the right result. :) 23:17:10 Oh yes, there is that in these competitions. 23:17:15 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 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 > asin (1/(2*48^2)) 23:20:17 2.170138905922681e-4 23:20:41 As you can see, no need to worry about rounding errors :) 23:21:31 s/angles/directions/ (and by "direction" I mean an integer vector (p,q) with gcd(p,q) = 1) 23:22:30 > atan2 1 1 - atan2 46 47 23:22:33 1.0752273791101219e-2 23:23:07 > atan2 45 46 - atan2 46 47 -- ah, this is more like it 23:23:09 -2.362948916323493e-4 23:23:53 that should be the actual minumum achievable difference 23:24:06 iuiuiu. 23:25:06 > atan2 3 3 - atan2 5 5 -- now I'm curious 23:25:09 0.0 23:26:06 fizzie: wait, your grid is so much smaller than mine! 23:26:26 I got a 48x48 one. 23:26:36 Weird. That's what I got as my input file. 23:27:22 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 346 asteroids, not many more than yours 23:27:55 Yeah, quite possibly. 23:28:36 Or maybe they just picked a random value between 20 and 50. 23:28:54 It's not like the problem became any simpler or harder because of it. 23:30:50 http://paste.debian.net/1124911/ it looks nicer this way actually 23:32:46 It does, yes. 23:32:53 My grid's so cramped. :/ 23:54:47 > (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 (-1.2929723736121446e-8,0.0)