00:44:12 <esowiki> [[.Oneline]] M https://esolangs.org/w/index.php?diff=78977&oldid=78963 * PythonshellDebugwindow * (+10) /* Commands */ m
00:44:24 -!- tswett has joined.
00:44:45 <tswett> tswellott, everyone. Wait, no, that's what people say *to* me.
00:50:17 -!- xelxebar has quit (Remote host closed the connection).
00:51:13 -!- xelxebar has joined.
01:26:15 -!- aaaaaa has joined.
01:37:29 -!- Lord_of_Life_ has joined.
01:37:31 -!- Lord_of_Life has quit (Ping timeout: 246 seconds).
02:19:12 <j4cbo> $ cat disk-fs.img | gzip -9 | wc -c
02:19:12 <j4cbo> $ cat disk-fs.img | gzip -9 | gzip -9 | wc -c
02:29:22 <shachaf> That's pretty surprising. This is just some normal file?
02:31:36 <shachaf> What's the original file size?
02:33:00 <j4cbo> 2 megabytes; it's an extremely sparse disk image
02:33:15 <j4cbo> http://j4cbo.com/disk-fs.img.gz if you want to poke at it
02:33:19 <int-e> `` dd if=/dev/zero of=/dev/stdout bs=1024 count=1440 | gzip -9 | gzip -9 | wc -c
02:33:21 <HackEso> 1440+0 records in \ 1440+0 records out \ 1474560 bytes (1.5 MB, 1.4 MiB) copied, 0.143643 s, 10.3 MB/s \ 68
02:33:27 <int-e> `` dd if=/dev/zero of=/dev/stdout bs=1024 count=1440 | gzip -9 | wc -c
02:33:27 <HackEso> 1440+0 records in \ 1440+0 records out \ 1474560 bytes (1.5 MB, 1.4 MiB) copied, 0.108949 s, 13.5 MB/s \ 1464
02:33:35 <j4cbo> (it's just a partition table and empty fat filesystem)
02:33:38 <int-e> not so different :)
02:34:12 <kmc> gzip has a pretty small block size right
02:35:42 <kmc> so encoding the blocks of zeros produces a repeating structure which the second gzip can compress
02:36:10 <kmc> with bzip2 and xz the double compression is larger
02:36:45 -!- ornxka has quit (Quit: No Ping reply in 180 seconds.).
02:37:07 <int-e> with bzip2 the single compression is ridiculously small though :)
02:37:22 <int-e> unsurprisingly, but still ridiculous
02:37:57 <int-e> (Unsurprisingly: The BWT has nothing to sort and RLE will work perfectly on the result.)
02:38:59 -!- ornxka has joined.
02:50:21 <fizzie> You're reminding me of that repeated compression snake oil thing.
02:55:13 <fizzie> I can't find the specific example, I think it involved a Finnish company. But something similar to https://en.m.wikipedia.org/wiki/Sloot_Digital_Coding_System
02:55:42 <int-e> there've been various claims of a compression algorithm that reduces any data large enough by some small margin (like 0.001%)
02:55:57 <imode> I vaguely remember that, yeah.
02:56:02 <int-e> which you can then iterate to compress any data to... say... approximately 2MB.
02:56:22 <kmc> right, you can easily prove with pigeonhole principle that no such scheme is lossless
02:56:35 <int-e> 8kb here, it seems
02:56:56 <int-e> tbf, if you apply a sufficiently advanced psychological model to a movie... ;-)
02:58:54 <fizzie> There's been a lot of them, yes, usually they start asking for investors' money for some reason.
03:00:26 <fizzie> Found NearZero and ZeoSync, but not the one I'm thinking of. Still think it was a Finnish company, maybe a software development one, who said a "genius" employee had come up with the scheme.
03:01:30 <fizzie> And yeah, the secret ingredient was that you could just keep repeating it.
03:01:57 <kmc> the secret ingredient is crime
03:02:25 -!- ski has quit (Ping timeout: 240 seconds).
03:02:26 <kmc> there were also "compression" tools for DOS that would just stick the leftover data in unused disk blocks
03:02:36 <int-e> . o O ( sufficiently advanced technology does not exist )
03:02:44 <kmc> so it worked for a demo but if you actually filled up the disk your "compressed" files would get corrupted
03:03:06 <int-e> kmc: my favorite "compression" technique is to store the data in file names, with all files having size 0
03:03:18 <fizzie> They have those cheap USB sticks that work on a similar principle.
03:03:33 <kmc> oh, they claim a larger capacity than they have?
03:03:42 <int-e> followed by dumping the data in /dev/null
03:03:58 <fizzie> Yeah, and then keep overwriting existing data.
03:04:00 <int-e> (we offer excellent compression; decompression will be provided in an update)
03:04:10 <kmc> i wonder what limits linux / ext4 enforces on filename size
03:04:13 <int-e> (rake in money, file for bankruptcy)
03:05:58 <imode> my compression method can reduce any size file down to one byte. it involves uploading the file to our servers. when you hand us the byte, we hand you the corresponding file. note that only 255 files can be stored at one particular moment.
03:06:09 <imode> I mean uh. compressed. yeah. compressed.
03:06:27 <imode> cloud-based compression. give me money.
03:07:08 -!- ski has joined.
03:22:55 <int-e> kmc: wow, you've reduced a size 5 string to a size 1 string <small>per node</small>
03:25:35 <zzo38> I have worked on compressions for specific purposes.
03:26:58 <fizzie> int-e: Think I've heard of the "data in file names" in the context of a trick to work around disk quota on shared systems.
03:27:39 <fizzie> I don't think I have an account on anything that could be called a "shell server" any more, that's sad. :/
03:28:21 -!- Arcorann has quit (Ping timeout: 265 seconds).
03:28:21 <zzo38> Including, compressing sokoban levels (all solvable levels can be represented, although unsolvable levels cannot always be represented), and also a picture compression (used in TeXnicard; it tends to be somewhat better than PNG in my experience)
03:29:22 <fizzie> Back in dial-up days, one of the major Finnish ISPs had this shared shell server with a mounted `/work` directory, where you could "temporarily store larger files you're working with". (It was maybe 50%/50% unauthorized copies of software and porn.)
03:30:11 <kmc> the undergrad computing club at my university had shell accounts, with storage quotas
03:30:18 <kmc> if you logged in and you were over the quota it gave you several options
03:30:24 <kmc> one was "quota roulette"
03:30:40 <kmc> which would randomly either delete some files or increase your quota permanently to fit what you had stored
03:31:41 <zzo38> What other options?
03:31:42 <fizzie> Heh. I imagine you could game that by just generating some files you don't care about and playing the roulette. Was there at least a cap or a "at most once a day" kind of a thing?
03:32:18 <kmc> zzo38: I think you could email the admins, or log in with a restricted shell for the purpose of deleting things yourself
03:32:21 <kmc> not sure what else
03:32:43 <kmc> fizzie: I don't recall
03:36:57 <fizzie> Our university campus had this rather curious network architecture where the whole place (maybe a low single-digit thousand number of people) was wired up as a single Ethernet network segment, meaning you could do SMB file sharing. People had pretty elaborate crawlers and indexers and search servers set up for browsing, though of course availability was pretty random, depending on whether whoever's
03:37:03 <fizzie> desktop it was had it on. The standard euphemism was that it was all "coursework and exercises".
03:38:47 <kmc> I had a friend who ran a script to search for open SMB shares and "back up" the files to his server
03:40:35 <kmc> I was the student IT rep for my house
03:40:50 <kmc> one time I was in the lounge reading an email about how such-and-such MAC address had been blacklisted due to suspicious activity
03:41:20 <kmc> and as I'm reading I see him enter the lounge, go over to a junk PC hiding behind a sofa, remove the network card and replace it with a new one
03:54:59 -!- aaaaaa has quit (Quit: leaving).
04:03:43 -!- delta23 has joined.
04:14:49 -!- arseniiv has joined.
04:23:16 -!- arseniiv has quit (Quit: gone too far).
04:25:29 -!- tswett has quit (Ping timeout: 245 seconds).
04:27:54 -!- arseniiv has joined.
05:00:11 -!- adu has joined.
05:13:56 -!- ski has quit (Ping timeout: 240 seconds).
05:23:26 -!- ski has joined.
05:45:19 -!- MDude has quit (Quit: Going offline, see ya! (www.adiirc.com)).
05:52:18 -!- adu has quit (Quit: adu).
07:31:39 <shachaf> int-e: If you liked Stephen's Sausage Roll, perhaps you'll like A Monster's Expedition.
08:42:25 -!- ineiros has quit (Ping timeout: 240 seconds).
08:42:58 -!- LKoen has joined.
08:47:01 -!- delta23 has quit (Quit: Leaving).
09:04:18 -!- none30 has quit (Ping timeout: 260 seconds).
09:04:56 -!- none30 has joined.
10:00:40 -!- ineiros has joined.
10:03:41 -!- delta23 has joined.
10:08:16 -!- Arcorann has joined.
10:40:27 -!- rain1 has joined.
10:47:48 <b_jonas> kmc: "what limits linux / ext4 enforces on filename size" => linux enforces 255 bytes for any pathname component (part between two slashes), strictly, because old directory listing ABIs required that and we need *some* limit and that's a good one to keep. this is ancient unix stuff, and I think all unixen except hurd stick to it, so the unix-related filesystems generally don't contain longer filenames
10:47:54 <b_jonas> either. the only time this is a problem is on NTFS, where the limit is 255 *ucs-16 codepoints* which linux decodes to utf-8 and thus may exceed 255 bytes, in which case it comes up with some replacement filename.
10:48:23 <b_jonas> kmc: full pathnames themselves don't have a limit, and they don't need one, because you can do basically anything, except for named sockets, using directory filehandles and openat now.
10:57:36 -!- sprocklem has quit (Ping timeout: 240 seconds).
10:57:51 -!- LKoen has quit (Remote host closed the connection).
11:02:54 -!- imode has quit (Ping timeout: 256 seconds).
11:11:00 -!- LKoen has joined.
11:14:18 -!- Sgeo_ has quit (Read error: Connection reset by peer).
12:52:59 <kmc> b_jonas: thanks
12:54:38 <kmc> you can't openat() a named socket? oh, because you don't open() sockets, you bind() them
12:55:16 <kmc> and struct sockaddr_un has a path field hardcoded to 108 bytes
12:56:59 <b_jonas> kmc: I think the path can be longer than that struct
12:57:09 <b_jonas> but there's no way to openat one
13:00:00 <fizzie> I've always found the whole "sockets are things in the file system" thing a little weird.
13:02:25 <fizzie> Can you umount a filesystem even if there's a non-abstract Unix domain socket open "on" it? If you bind-mount a file system with a socket on it, will accessing it via two different paths denote different sockets? What about if you have hardlinked directories? I've been assuming the thing in the filesystem is just a placeholder and possibly a container for permissions, and the path name is the real
13:02:31 <fizzie> identity of the socket.
13:03:42 <kmc> interesting questions
13:05:25 <esowiki> [[Count]] M https://esolangs.org/w/index.php?diff=78978&oldid=78971 * PythonshellDebugwindow * (-5) header, wikipedialink
13:06:00 <kmc> fizzie: to your first question: umount: /mnt/tmp: target is busy.
13:06:20 <kmc> on Linux chlorophyllum 4.19.0-12-amd64 #1 SMP Debian 4.19.152-1 (2020-10-18) x86_64 GNU/Linux
13:06:47 <kmc> not sure if that behavior is specified
13:07:38 <esowiki> [[Count]] M https://esolangs.org/w/index.php?diff=78979&oldid=78978 * PythonshellDebugwindow * (+0) /* Commands */ m
13:08:28 <kmc> connecting through a bind mount works as well
13:09:13 <fizzie> Interesting. Guess it behaves more "like a file" than I expected.
13:25:30 <b_jonas> fizzie: they're not reeally things in the file system
13:29:31 <kmc> also the directory entry continues to exist after nothing is using it
13:29:35 <kmc> and has to be unlinked manually
13:29:52 <kmc> and I think if you unmount and remount it will still be there
13:30:45 <fizzie> Yes, there's that. I guess it's just an inode, and that's used as (part of?) the key in some in-memory table when you try to connect to it.
13:31:01 <kmc> (assuming it's an actual persisted filesystem and not a tmpfs or something)
13:31:41 <kmc> the tuple of (mountpoint number, inode) is probably the actual primary key in the kernel used to find socket-related datastructures
13:31:44 <kmc> but i don't know
13:34:27 <b_jonas> kmc: yes, the normal solution is to unlink before you create the socket with bind
13:35:00 <b_jonas> and if you don't unlink, you can't bind the socket again
13:35:11 <b_jonas> it's sort of stupid, but stays like that for historical reasons
13:35:19 <kmc> that is the UNIX slogan, yes :P
13:35:29 <kmc> so after you unlink other processes can still connect by name as long as your process holds the socket open?
13:37:51 <b_jonas> I don't want to unlink while I'm still using the socket
13:38:00 <b_jonas> the name is there so that other processes can connect
13:38:08 <b_jonas> if I want them to connect, I won't unlink
13:40:14 <kmc> but then you have to be sure to unlink it as the daemon cleans up
13:40:40 <kmc> I'm not sure what the use case is for creating and immediately unlinking a named socket, when you could use an anonymous socketpair or an abstract-namespace socket (on Linux anyway)
13:45:47 <b_jonas> kmc: no, you don't have to. you *may* unlink when the daemon cleans up, but what you must do is unlink when you start the demon, before you bind to create the new socket of the same name. that, plus you often want to create those sockets on a tmpfs like /var/run so it's forgotten when the machine reboots.
13:46:10 <kmc> unlink at cleanup is more tidy though
13:46:48 <b_jonas> sure, you should unlink, but it's not a priority if your program crashes or something
13:47:09 <kmc> as long as you have the logic to handle a leftover socket when it restarts
13:48:49 <kmc> if a socket exists on disk but no process has it open, is it effectively dead?
13:48:56 <kmc> or is there a way to bind to such a socket and listen
13:50:26 <b_jonas> I mean my development cycle is like, program gives error message and exits, I look at what the problem is, attempt to fix it, restart the program. it will recreate the socket with the same name anyway, so there's not much need to clean it up between.
13:50:44 <b_jonas> and yes, I think it's effectively dead
13:53:36 <kmc> it's weird that you can't reopen it with bind()
13:54:50 -!- TheLie has joined.
13:58:13 <kmc> as a digression i started reading about the O_PATH flag to open/openat
13:58:20 <kmc> which lets you do some nifty and odd things
13:58:33 <kmc> like open a symlink itself, rather than its referent
13:59:09 <kmc> or open an executable file that you can't read, in order to exec() it out of /proc/self/fd
14:04:53 <b_jonas> kmc: yes, though the main goal is to be able to open an directory if you only have execute permission for it, not read permission, so you can still *at under it, even if you can't getdents
14:05:02 -!- deltaepsilon23 has joined.
14:05:18 -!- delta23 has quit (Disconnected by services).
14:05:19 <b_jonas> or the main benefit or whatever
14:05:22 -!- deltaepsilon23 has changed nick to delta23.
14:28:48 <b_jonas> the drawback, of course, is that it consumes one more of the very precious 32 bits of the O_* bitmask.
14:29:32 <b_jonas> like 20 of those bits are already used
14:44:50 -!- dionys has quit (Quit: WeeChat 2.0.1).
14:45:03 -!- dionys has joined.
14:49:57 -!- dionys has quit (Quit: WeeChat 2.0.1).
14:50:47 -!- dionys has joined.
15:02:37 -!- Arcorann has quit (Ping timeout: 264 seconds).
15:15:47 -!- adu has joined.
15:28:25 -!- FreeFull has joined.
15:28:37 -!- adu has quit (Quit: adu).
16:18:16 -!- ski has quit (Ping timeout: 240 seconds).
16:19:57 -!- ski has joined.
16:50:42 -!- Lord_of_Life_ has changed nick to Lord_of_Life.
17:18:02 -!- delta23 has quit (Quit: Leaving).
17:42:09 <HackEso> olist https://www.giantitp.com/comics/oots1220.html: shachaf oerjan Sgeo FireFly boily nortti b_jonas
17:57:33 -!- TheLie has quit (Remote host closed the connection).
18:10:08 -!- MDude has joined.
18:16:58 -!- imode has joined.
18:56:38 -!- ski has quit (Ping timeout: 256 seconds).
20:08:28 <int-e> shachaf: oh, by the people who made the snowman hard to build... they do know a bit or two about puzzle design
20:10:18 -!- aaaaaa has joined.
20:15:16 <esowiki> [[Fugue]] https://esolangs.org/w/index.php?diff=78980&oldid=30379 * LegionMammal978 * (+403) /* Compiler */ an annoying bug
20:19:31 -!- Sgeo has joined.
20:23:27 <esowiki> [[Fugue]] https://esolangs.org/w/index.php?diff=78981&oldid=78980 * LegionMammal978 * (-57) /* Compiler */ the bug's more annoying than I thought
20:24:46 -!- adu has joined.
20:50:17 <esowiki> [[Surtic]] M https://esolangs.org/w/index.php?diff=78982&oldid=76771 * Digital Hunter * (+48) /* Program halt */
20:51:20 <esowiki> [[Surtic]] M https://esolangs.org/w/index.php?diff=78983&oldid=78982 * Digital Hunter * (+1) /* Language basics */
20:54:40 <esowiki> [[BitSwitch]] M https://esolangs.org/w/index.php?diff=78984&oldid=78900 * PythonshellDebugwindow * (+58) /* Interpreter in Python 3 */ exit on error
20:56:39 <esowiki> [[BitSwitch]] M https://esolangs.org/w/index.php?diff=78985&oldid=78984 * PythonshellDebugwindow * (+12) /* Commands */ imm
21:00:31 -!- sprocklem has joined.
21:13:42 -!- spruit11 has quit (Quit: leaving).
21:17:16 -!- arseniiv has quit (Ping timeout: 240 seconds).
21:18:46 -!- hakatashi1 has joined.
21:19:49 -!- spruit11 has joined.
21:21:56 -!- catern has quit (Ping timeout: 256 seconds).
21:22:30 -!- hakatashi has quit (Ping timeout: 256 seconds).
21:22:46 -!- adu has quit (Quit: adu).
21:24:40 <zzo38> I don't have O_PATH described in the man page for open(2) in my computer, although O_PATH is defined in the header file.
21:26:42 <zzo38> If it were designed better, I would think it would not consume one of the 32 bits of the O_* bitmask.
21:28:25 -!- catern has joined.
21:30:10 <kmc> zzo38: how would you design it?
21:32:03 <zzo38> I would make it so that O_PATH is 0, O_RDONLY is 1, O_WRONLY is 2, and O_RDWR is 3.
21:34:23 -!- Deewiant has quit (Ping timeout: 256 seconds).
21:36:50 <b_jonas> zzo38: get a newer version of https://www.kernel.org/doc/man-pages/ then (if this is Linux that is, not a BSD)
21:37:08 <b_jonas> and read it online at https://man7.org/linux/man-pages/man2/open.2.html in the meantime
21:37:39 <b_jonas> zzo38: yes, but on Linux, 3 is already used for something incompatible
21:37:45 <zzo38> It is Linux, so, that will work. (But why does my computer have O_PATH but not the documentation of it?)
21:37:50 <b_jonas> zzo38: the open manpage actually describes that
21:38:06 <b_jonas> zzo38: it's used to open some device files in a way that allows some ioctls that require neither opening for read nor write
21:38:34 <b_jonas> zzo38: that's because the kernel and the man-pages are separate packages and you can have different versions
21:38:37 <zzo38> b_jonas: I didn't mean changing the numbers on Linux or BSD or any other existing system anyways
21:39:04 <b_jonas> that's by design, because you can have newer version of the man-pages, since they usually tell you when every new feature was added to the kernel, and you may be developing programs that may run on older kernels anyway
21:43:07 -!- Deewiant has joined.
21:50:19 <shachaf> int-e: Ah, should I try their other games also?
21:50:32 <shachaf> Maybe I'll finish this one first.
22:05:30 <int-e> shachaf: I don't know. I got the snowman thing in an ancient humble bundle and it turned out to be a pleasant surprise... including some meta level surprises. Not as crazy as SSR though. (And they have moving monsters though, so there's a timing element.)
22:06:02 <shachaf> Yes, this game also seems easier than SSR.
22:06:20 <shachaf> But I like some of the puzzle design things they do.
22:06:23 <rain1> recursed is a cool game
22:06:31 <shachaf> No timing things as far as I know.
22:08:42 <int-e> I still haven't finished Recursed
22:10:49 <int-e> Haven't touched it in a while either... I'm missing one level and a couple of gems.
22:11:48 <int-e> Oh, make that two levels.
22:17:14 <int-e> Oh well. I have a billion games to play anyway.
22:19:09 <fizzie> I've been watching someone else play Noita, and it's got quite a Bilingual Bonus (TV Tropes link omitted for health and safety reasons) for Finnish, because all the monster names are in Finnish.
22:20:36 <fizzie> (Not exactly a *puzzle* platformer, though.)
22:21:29 <int-e> roguelike... never got into those, unless you see the connection to action-rpgs like Diablo
22:22:21 <fizzie> Some of the wand-building mechanics in Noita get a little bit esolang-y.
22:22:40 <int-e> sometimes, one dimension of depth is enough
22:23:02 <int-e> (the physical one, progressing deeper into a dungeon)
22:31:37 <int-e> oh it is more of a platformer, hmm
22:32:53 <int-e> (meaning, knock yourselves out, but not for me)
22:35:16 <fizzie> It's not really for me either, but fun to watch. The only game I've been actually playing recently is Poly Bridge 2. (I know we briefly discussed bridge-building games here at one point in the past.)
22:36:21 <int-e> yeah, I'm somewhat addicted
22:36:57 <int-e> I may have shared screenshots like https://int-e.eu/~bf3/tmp/pillars2.jpg
22:37:37 <fizzie> Poly Bridge is a rather more cartoony (and/or low-poly) than that graphically, but it's much the same gameplay-wise.
22:38:34 <int-e> yeah.. AIUI, polybridge also has more materials and mechanical elements (including hydraulics)
22:40:12 <fizzie> Here's a sensible bridge I made the other day: https://zem.fi/tmp/bridge1.webm
22:40:13 <fizzie> (The "share replay" function uses a ridiculously small resolution and bitrate.)
22:40:21 <int-e> bridge constructor has wood, steel ropes (totally overpowerd), steel, concrete... that's it, I think
22:42:40 <fizzie> It's not a huge set here either. PB2 has road + reinforced road (only things vehicles can drive on), and for general construction wood, steel, rope, steel cable (totally OP, too), springs and hydraulics. But yeah, the last two make for some more dynamic things.
22:44:08 <fizzie> Though in a lot of the nominal drawbridges that offer hydraulics as an option, you can actually just leave the right sort of gap for the boat/plane/whatever.
22:47:55 <fizzie> https://zem.fi/tmp/bridge2.webm has some hydraulics in it. If you can actually make them out in that... what's that, 640x360 video at 360kbps.
22:50:53 -!- Arcorann has joined.
23:12:48 -!- sprocklem has quit (Quit: ...).
23:13:05 -!- sprocklem has joined.
23:20:56 <esowiki> [[Count]] https://esolangs.org/w/index.php?diff=78986&oldid=78979 * SpencerW * (+454)
23:44:07 <esowiki> [[Count]] https://esolangs.org/w/index.php?diff=78987&oldid=78986 * SpencerW * (+33)