Time |
Nick |
Message |
00:04 |
Soni |
sorry |
00:34 |
|
Verticen joined #minetest |
00:38 |
|
Soni joined #minetest |
00:53 |
|
nm0i left #minetest |
01:03 |
|
Verticen joined #minetest |
01:15 |
|
specing_ joined #minetest |
01:43 |
MTDiscord |
<FatalError> something that hurts bones probably warrants being named after florida, after all they are the headstrong idiots of the states |
03:23 |
fluxionary |
what's the provenance of `min_minetest_version` in some mod.conf files for various mods? |
03:24 |
fluxionary |
it doesn't seem to be used anywhere? are there other similar conventions? |
03:24 |
|
peterz joined #minetest |
03:32 |
MTDiscord |
<Jonathon> Contentdb |
03:41 |
|
peterz joined #minetest |
04:00 |
|
MTDiscord joined #minetest |
05:04 |
|
Evil joined #minetest |
05:04 |
|
Mc joined #minetest |
05:04 |
|
nore joined #minetest |
05:12 |
|
nuala2 joined #minetest |
05:13 |
|
mmuller joined #minetest |
06:13 |
|
lemonzest joined #minetest |
06:32 |
|
calcul0n joined #minetest |
09:32 |
erle |
is there any method to call on an item being destroyed other than by the item entity despawning? |
09:44 |
|
Fixer joined #minetest |
09:44 |
|
YuGiOhJCJ joined #minetest |
09:47 |
MTDiscord |
<luatic> erle: /pulverize and /clearinv theoretically exist as well as moving items to "trash" slots |
09:48 |
erle |
luatic well, i just want map image garbage collection for mcl_maps |
09:48 |
erle |
i played around with my improved version of it yesterday |
09:49 |
erle |
the one that i made some months ago |
09:49 |
erle |
and was like “why haven't i released this” |
09:49 |
erle |
it saves the entire map in the item meta |
09:49 |
erle |
so that it can be recreated when the file is gone |
09:52 |
|
orwell96 joined #minetest |
10:04 |
|
orwell96 joined #minetest |
11:39 |
|
definitelya joined #minetest |
12:09 |
|
onehittoaster_ joined #minetest |
12:16 |
|
orwell96 joined #minetest |
12:20 |
MTDiscord |
<Warr1024> There's no way to tell when an itemstack is destroyed, I think. They can be created copied, moved around, serialized and deserialized, and there is no tracking for them. |
12:21 |
rubenwardy |
You'd probably want general inventory callbacks for that |
12:22 |
MTDiscord |
<Warr1024> That only works insofar as items are kept in inventories. |
12:23 |
rubenwardy |
They mostly are |
12:23 |
rubenwardy |
There's item entities |
12:23 |
rubenwardy |
And then there's the chaos of mods |
12:25 |
MTDiscord |
<Warr1024> Yeah, just mention "the chaos of mods" offhandedly like it's not 99.9% of the ecosystem or anything ? |
12:26 |
rubenwardy |
They're probably storing it as a table at that point, in which case you have no hope |
12:27 |
MTDiscord |
<Warr1024> Most items in NC actually exist as serialized strings in meta at any given time, and the only "hope" in that is that they're generally accessed through an API |
12:27 |
rubenwardy |
With inv callbacks, you could tell when it's removed from an inventory. You then have to worry about tracking it outside of inventories, and inventories being deleted |
12:27 |
MTDiscord |
<Warr1024> Except of course that things like the tote exist that can serialize entire nodes with their meta... |
12:27 |
rubenwardy |
Pretty impractical to do reliably |
12:27 |
rubenwardy |
I'd reference count and add a last accessed datetime |
12:28 |
MTDiscord |
<Warr1024> MT doesn't really offer a way to update a ref count for an itemstack, and even worse when it's in string form. |
12:28 |
rubenwardy |
You can ref count it in string form |
12:28 |
rubenwardy |
Can't* |
12:29 |
rubenwardy |
Which is what the last accessed would be for |
12:29 |
MTDiscord |
<Warr1024> "can't" sounds worse to me |
12:29 |
rubenwardy |
It's the closest you can get to a solution, an actual solution isn't possible |
12:30 |
MTDiscord |
<Warr1024> Last accessed doesn't really help because it doesn't sound like having the maps stored in a section of your world stop working because you haven't visited there in a long time would be a nice feature. |
12:30 |
rubenwardy |
But if you can regen the map image it's not a huge deal |
12:30 |
rubenwardy |
^ |
12:31 |
MTDiscord |
<Warr1024> Well, if you can regen then from embedded meta, then I wouldn't try to track anything at all, I might just have a fixed size MRU, or just never permanently store images and have the server rebuild them after any restart. |
12:32 |
rubenwardy |
Yeah. erle why do you need to cache in this way? |
12:33 |
rubenwardy |
If this is about map exploration, why not store the exploration mask as a map of mapblock positions in the item |
12:33 |
rubenwardy |
Also, maps could be limited in size |
12:33 |
rubenwardy |
Say 2km by 2km |
12:34 |
rubenwardy |
The caching could then be done for the world as a whole, like, you only need to store the map image once and then generate copies for each item with the mask applied |
12:37 |
erle |
rubenwardy real-world experience shows that a) using item meta is the only way to make maps work in map downloads b) automatic regeneration of maps is the only way to make maps work automatically on servers |
12:38 |
rubenwardy |
You can still use item meta to store map info |
12:38 |
erle |
rubenwardy the map shows the territory at the point of snapshotting it. this serves to make map art. it will later serve to have treasure maps (i.e. having a very crude map rendering in a low fidelity style). |
12:38 |
rubenwardy |
Ah, so could be outdated? I guess that makes sense |
12:39 |
erle |
yeah, there is no way around it |
12:39 |
rubenwardy |
How big is the image file, and what's in the map meta? |
12:40 |
erle |
as an example what happens if you do not do automatic regeneration: kay27 made an incompatible fork of mcl_maps for mineclone5 which requires to run a python script server side to convert older maps … and then apparently did not run it on his own servers until called out (or something like that), despite loudly proclaiming in the forums that you “just have to run that script”. |
12:40 |
erle |
now, people could say this is the fault of the server admin. |
12:40 |
erle |
i am saying: no, it is the fault of the code. everything should be handled automatically. |
12:41 |
|
orwell96_ joined #minetest |
12:42 |
erle |
rubenwardy the regeneration is two-way for me by the way. if a map item does not have an embedded (zlib-compressed) bitmap, then this is created from the existing file. if it does have one and there exists no file on disk, then the file is regenerated from the item meta. |
12:43 |
erle |
rubenwardy since writing the file from meta takes basically zero time, this would allow me to delete the file every time an item is destroyed, if it has the map bitmap in item meta. because that means that any copies of that map can trigger regeneration of the file. |
12:43 |
erle |
it sounds very clumsy, but works very well. |
12:43 |
MTDiscord |
<Warr1024> Maps are one of those features added to MC that took a lot of advantage of the fact that MC has no engine/game separation and one team has access to change anything to accomplish that goal. Making it work at all in MT seems like it'd be clunky and painful... |
12:44 |
rubenwardy |
So the map item does contain the image, and the file is only created to use as dynamic media in a GUI? |
12:44 |
rubenwardy |
Either delete all the files on start up, or use [png |
12:45 |
erle |
> use [png |
12:45 |
erle |
please stop saying that |
12:45 |
MTDiscord |
<Warr1024> Yeah, or dynamic media could add a string api |
12:46 |
erle |
rubenwardy, sorry, but literally everyone who tells me to “use PNG” for maps never tried to implement this. also [png is *by far* the worst designed texture modifier. |
12:46 |
MTDiscord |
<Warr1024> [png is probably what I would use myself, and the fact that the data is already zlib compressed sounds like the complicated part of supporting it has already been done |
12:46 |
|
Taoki joined #minetest |
12:47 |
erle |
it is not useful for bitmaps this big (128x128) and it is not useful for small bitmaps either, as the entire overhead of [png is around 100 bytes. |
12:47 |
MTDiscord |
<Warr1024> It is not by far, if it's even worst at all. There is some stuff competition for worst texture mod |
12:48 |
erle |
look, you have never done this at all. it becomes immediately obvious once you want to do simple things like “replace this pixel in the texture with another one”. |
12:49 |
erle |
i mean, i am assuming you have never done this and it might be a bit arrogant |
12:50 |
erle |
but honestly, this is again one of these problems where i am discounting the experience of every single person who has a) never read the code fleck or me wrote b) never has read the design decisions and history behind the code c) never has tried implementing it themselves |
12:51 |
MTDiscord |
<Warr1024> Yeah, that seems fair, since this is one situation where I am discounting the experience of the ONE person who continues to insist that TGA is a superior format to PNG. |
12:51 |
|
fling joined #minetest |
12:51 |
definitelya |
erle: Write a blog post about this if it irks you so much. lol |
12:51 |
erle |
Warr1024 seriously, that depends on what you are doing. |
12:52 |
definitelya |
So people can help you. |
12:52 |
MTDiscord |
<Warr1024> It seems like it's just too much of a blow to your pride to manipulate a TGA behind the scenes and just convert it to PNG for display purposes |
12:52 |
erle |
Warn1024 TGA is superiour to PNG in the same way that PNG is superior to TGA or JPEG is superior to both – every one of these formats excels under specific constraints given. |
12:52 |
erle |
(compare this to BMP, which is worse than all of these three on every axis i know) |
12:53 |
erle |
or PCX or whatever |
12:55 |
erle |
Warr1024 this is not a pride thing. i am structuring the code in the way that it is possible to add this later, but the entire logic to support that as well as TGA would probably be at least 3 to 10 times the size of the current TGA decoder. i.e. it's not worth it, ever. |
12:55 |
erle |
definitelya what irks me is that some people do not accept that there is a class of problems where every seemingly obvious answer is wrong. |
12:55 |
MTDiscord |
<Warr1024> If it's not worth a few hundred lines of code then it's not worth a few hundred lines of complaining. |
12:56 |
definitelya |
^ |
12:56 |
erle |
Warr1024 well, the primary purpose of me complaining is people looking into issues to actually understand them. |
12:57 |
definitelya |
Look at it this way; maybe it's just a matter of choosing whichever, and being ok with that decision? |
12:57 |
erle |
it's not lack of information of the topic |
12:58 |
MTDiscord |
<Warr1024> What I understand is that PNG is not optimal for erle's application. |
12:58 |
erle |
definitelya as i see it, other people are not okay with “this implementation is superior in due to X, Y, Z” because they have some vague idea that some as-of-yet-unwritten other implementation that is inherently more complex could solve problems better. |
12:58 |
erle |
Warr1024 that is entirely the issue at hand |
12:58 |
MTDiscord |
<Warr1024> If we were writing an engine for mineclonia instead of for all MT games, then that might be an issue |
13:00 |
MTDiscord |
<Warr1024> The "unwritten solution is better than this written" one is definitely a problem in MT culture, but here, [png is the written one and [tga is the unwritten one. |
13:00 |
erle |
[tga would also be a horrible stupid solution |
13:01 |
erle |
the written solution is mcl_maps, as fleck has implemented it and as i have improved it. asking me to add hundreds, possible over a thousand lines of code to it to make the code more complex just so it is in line with faulty assumptions about how textures work in games is unreasonable. |
13:04 |
erle |
Warr1024 in general what is the proper counter to “oh, this unwritten implementation *might* be better than your entirely working one” if it comes from someone who has a lack of understanding of the particular thing? |
13:04 |
erle |
i mean i have tried some things. |
13:04 |
erle |
but usually, telling people that they have no idea what they are doing, is considered offensive. |
13:05 |
erle |
and presenting them with examples of it is also considered offensive i think. |
13:08 |
MTDiscord |
<GoodClover> what's the actual issue with [png? I understand you don't want to use it, but why? |
13:09 |
MTDiscord |
<GoodClover> ah are you wanting to read the data back from the meta to manipulate? a lack of decode_png would make that hard, yeah |
13:10 |
erle |
GoodClover try parsing [png |
13:11 |
rubenwardy |
Looks like you ignored my first suggestion |
13:11 |
erle |
rubenwardy, which one? |
13:11 |
rubenwardy |
Another option would be to use ephemeral media and random file names, and delete them immediately |
13:12 |
rubenwardy |
"delete all map files on start up" |
13:12 |
erle |
rubenwardy yeah, that works better ig. it still risks a user being able to fill up the server disk by making maps and throwing them away though. ;) |
13:12 |
MTDiscord |
<Warr1024> What I don't understand is what's the issue with erle's "working" map implementation? |
13:13 |
MTDiscord |
<GoodClover> erle: if we had a decode_png function it'd be easy as: mt.decode_png(mt.decode_base64(s:sub(6, -1))), unless I'm misunderstanding something |
13:13 |
erle |
GoodClover also i would have to write a PNG encoder |
13:13 |
MTDiscord |
<Warr1024> If it already actually works and you're just trying to optimize it then why should I by sympathetic that the engine is not providing the exact right tools for that? |
13:13 |
MTDiscord |
<GoodClover> MT has a PNG encode built-in? |
13:13 |
erle |
it is not suitable for stuff like this though |
13:14 |
|
debiankaios joined #minetest |
13:14 |
erle |
use optipng on the checkerboard texture generated in devtest |
13:14 |
erle |
that texture becomes 5% of its size |
13:14 |
MTDiscord |
<Warr1024> I have a working implementation of attaching display entities to players, but in MP, depending on how players are loaded/unloaded as they come in/out of range, I have to destroy and recreate the entities periodically to try to fix them, and it doesn't always work; sometimes the entities simply refuse to display. |
13:15 |
MTDiscord |
<Warr1024> Compared to something like that, I don't see how [png matters. |
13:15 |
erle |
as far as i am aware minetest.encode_png() always encodes R8G8B8A8 while not only I currently use A1R5G5B5, the easiest in-place update can be had using a paletted bitmap (1 byte per color) |
13:15 |
MTDiscord |
<Warr1024> [png, as I understand, is really designed for mods receiving images from external scripts, in which case you'd just run your png optimizers there. |
13:15 |
|
specing_ joined #minetest |
13:16 |
erle |
Warr1024 as i have been saying, [png seems to be a feature looking for a use case – too inefficient and awkward to handle for small textures, outclassed by dynamic media for large textures. |
13:17 |
|
kamdard_ joined #minetest |
13:17 |
MTDiscord |
<Warr1024> In the case of erle's maps, the [png option optimizes never having to write anything to disk, and therefore not having to worry about GC for image files. Yes, of course there is going to be SOME trade-off for this, at least. |
13:17 |
erle |
Warr1024 “never having to write anything to disk” is not remotely something i am interested in. i am interested in simple, extensible, robust code. |
13:18 |
erle |
rubenwardy just to point it out why “delete existing images at startup” does not work: if you migrate from a version of mcl_maps that does not do this to a version that does do this, you immediately make all maps unusable. |
13:18 |
MTDiscord |
<Warr1024> The use-case for [png is basically to replace the old [combine hacks. Dynamic media, in theory, could do that too, but it adds the extra complication of having to pick filenames and deal with files on disk. |
13:18 |
erle |
rubenwardy and this is exactly one of the things why i want people to try implementing it. |
13:19 |
MTDiscord |
<Warr1024> I would prefer solutions that look complex, i.e. have some complicated internal encoding process, over processes that actually are complex, i.e. have to interface with external storage systems. |
13:20 |
MTDiscord |
<Warr1024> Honestly, if I were considering maps, I would probably either (1) use [combine, because I'd make my maps more abstract and less representational, or (2) axe the feature. So I probably can't help you with the how of something I'dn't do myself. |
13:21 |
MTDiscord |
<Warr1024> People are telling you that you have an option. You're saying you don't like the option. Then I guess that means you just stick with what you have. |
13:21 |
erle |
Warr1024 the problem is, it is quite bad at that. both constructing the string for [png and interpreting it is not easy at all. combine this with a hypothetical [pbm texture modifier, which would be absurdly easy to parse and serialize, human-readable and also be smaller than [png for every bitmap smaller than 10×10 (and probably some that are larger, this is only the bottom boundary) |
13:23 |
erle |
Warr1024 as i said before, most people telling me i have an option are, for a lack of better word, not competent to evaluate this. as soon as someone says “why don't you try X” together with “i have done this, look at this code”, i am willing to listen much more. |
13:23 |
MTDiscord |
<Warr1024> [png, [pbm, and [tga are all basically equivalent to me. Each of them would represent a way to pass an opaque string representing some image data. In all cases, encoding/decoding is just a function call, because these are all sufficiently well-established formats that I can't imagine a reason to roll my own en/decoder instead of using something already out there. |
13:24 |
|
Taoki joined #minetest |
13:25 |
erle |
from a high-level perspective, that might be true, but [pbm is just a bunch of ASCII characters. you do not need to have some random encoder to do write: P1 9 9 010010100010111110010011100010001000001000110101000101101010101100101000110010000 |
13:25 |
MTDiscord |
<Warr1024> If you're tired of getting "incompetent" opinions about it then just stop discussing it. If you want to be able to discuss it publicly, you'll just have to accept that there will be some noise about it and respond with "thanks, I'll take it under advisement." |
13:26 |
MTDiscord |
<Warr1024> Honestly I've had a lot of shit suggestions and I actually will honestly put a lot of them on my TODO list, just well below the "realistically will ever actually happen" threshold :-] |
13:26 |
erle |
(the above is a 9×9 bitmap that you can not represent smaller in PNG) |
13:26 |
erle |
Warr1024 what's the most common shit suggestion? |
13:27 |
MTDiscord |
<Warr1024> erle, I would absolutely not manipulate that image in that format. Writing the encoder myself might be simple, but I'd still probably have that separation. |
13:27 |
erle |
Warr1024 the reasons to roll your own encoder/decoder are basically either “the encoder does not exist” or “the encoder does not do what i want it to do” |
13:28 |
MTDiscord |
<Warr1024> Haha, the most common shit suggestions are the ones that either actually make my todon't list, or the ones that actually get implemented as troll or semi-troll features. |
13:28 |
|
definitelya joined #minetest |
13:28 |
|
proller joined #minetest |
13:28 |
erle |
i *definitely* should add a TODONT list hahaha |
13:28 |
erle |
“frequestly questioned answers” |
13:29 |
MTDiscord |
<Warr1024> indeed, what your project will NOT do is often as important a part of its identity as what it will. |
13:30 |
MTDiscord |
<Warr1024> My top "todon't" item is "I will not add anything that already exists." One of the more common themes I run into is people telling me "you really need to add a way to X" where the response is "clearly you haven't actually tried very hard to X, have you..." |
13:30 |
erle |
as fleckenstein said, mineclonia is basically defined by that kind of thing. whereas mineclone5 is defined by merging PRs even before the submitter has finished them ;) |
13:30 |
MTDiscord |
<luatic> @olive can parse [png trivially using modlib ;) |
13:30 |
rubenwardy |
erle: future compatibility isn't feasible, I wouldn't bother with that |
13:30 |
erle |
rubenwardy it is feasible. proof: i have already implemented it. |
13:30 |
rubenwardy |
With file leaks |
13:31 |
erle |
yeah, but in my defense, every other version of mcl_maps has the same or more “file leaks” |
13:31 |
erle |
so it's not like i am doing worse |
13:31 |
rubenwardy |
But generally, making things future compatible isn't feasible because we don't have time machines |
13:31 |
rubenwardy |
And users also don't even care |
13:32 |
MTDiscord |
<Warr1024> Leaking files is not a huge issue for MT, marginally, considering that we already "leak" map terrain via players exploring but then not developing sections of the map, i.e. filesystem bloat is already a problem, so you're just adding a couple more drops to that bucket. |
13:32 |
rubenwardy |
You need to decide on your requirements. There are multiple options here, each with different advantages |
13:32 |
erle |
rubenwardy, users care very much about their maps. making map art in mineclone games is probably the most cumbersome process in the game, as you need to scout out a 128×128 area, clear it of obstacles and then arrange your painting there so that it is visible from the sky, before you make the map. |
13:33 |
MTDiscord |
<Warr1024> Servers that actually care about GCing data bloat will probably have some kind of "periodically shut down the server and clear out fringe mapgen terrain" process, and you can just advise them to nuke the map image cache too when they do that... |
13:33 |
rubenwardy |
Users don't care about forwards compatibility, they care more about backwards compatibility |
13:33 |
erle |
rubenwardy my number one requirement is to never, ever, ruin any existing user-made content just because it is easier to implement it that way. |
13:33 |
rubenwardy |
Agreeing with what Warr1024 says though |
13:34 |
erle |
yeah, that is why i am not very concerned |
13:34 |
erle |
users are not making tons of maps |
13:34 |
erle |
i need a plan for when i want realtime maps though |
13:34 |
rubenwardy |
This was a waste of time |
13:34 |
MTDiscord |
<Warr1024> Forward compatibility is only approximately solvable at all, as it depends on being able to predict what the future will bring. All you can really do is make sure you aren't likely to be painted into a corner, and you can't expect to be able to jump forward arbitrarily many versions. |
13:34 |
rubenwardy |
Absolutely |
13:34 |
erle |
rubenwardy it was not, because if i want the map to update even with 1hz the filesystem will be full in no time. |
13:34 |
definitelya |
erle: Users can save portions of the map they care about with worldedit, or other mods. |
13:35 |
erle |
definitelya, i am talking about handheld maps, not “maps” as in worlds |
13:35 |
definitelya |
Oh sorry ahah |
13:35 |
MTDiscord |
<Warr1024> I'd have to see some benchmarks before I am willing to believe that non-contrived map usage scenarios represent a realistic threat to filesystem space... |
13:35 |
definitelya |
Was distracted |
13:35 |
erle |
definitelya, no problem |
13:35 |
erle |
“map” is overloaded here |
13:35 |
erle |
the map is not the territory hehe |
13:35 |
|
kamdard joined #minetest |
13:35 |
erle |
this reminds me of the story of borges about the king who wanted a 100% accurate map of the kingdom |
13:36 |
erle |
at the end of the story, the map is 1:1 scale |
13:36 |
erle |
and covers the entire kingdom |
13:36 |
MTDiscord |
<Warr1024> That's basically how you make a map in NodeCore :-D |
13:37 |
MTDiscord |
<Warr1024> Not only does it preserves scale, and update instantly, but it also preserves location. |
13:39 |
erle |
rubenwardy regarding forwards-compatibility, about a third or so of the design considerations in making software i create are not only about “how can i make this easy to update in the future” but also about “if some rando modifies this, how can i make it so that the easiest possible way to implement a new feature does not break compat” |
13:39 |
rubenwardy |
You Ain't Gonna Need It |
13:39 |
erle |
i think you misunderstand |
13:40 |
erle |
i am not designing new features |
13:40 |
erle |
i am trying to put the thing on rails |
13:40 |
rubenwardy |
It's hard to anticipate future requirements, doing so is likely to result in overengineering |
13:40 |
erle |
you still misunderstand |
13:40 |
rubenwardy |
And bad code |
13:40 |
erle |
i give an example |
13:40 |
MTDiscord |
<Warr1024> You actually get better forward-compat from a YAGNI approach, because simpler designs are easier to support from the future end of things. |
13:41 |
erle |
example: years ago, i created a backend that served JSON code to mobile apps. it is in production with a big company, as far as i am aware, and faster than their own system. |
13:41 |
erle |
several things i added to it make sure that it is incredibly hard to do stupid changes to the source code. |
13:42 |
erle |
for example, every output of the system is checked against both a general grammar of permitted outputs and a specific grammar for the specific function being called. |
13:42 |
MTDiscord |
<Warr1024> I've seen a lot of things done to prevent stupid changes, but so far the only impact I've seen from them has basically been (1) making it harder to do non-stupid changes, and (2) people trying to make stupid changes just have to make stupider changes now to work around the safety measures. |
13:42 |
erle |
also, the test suite tests every possible code path (there are only a few thousand of them, so it can be done in 30 minutes) |
13:43 |
erle |
now, a result of this is that if you change a function without actually specifying the permissible outputs, you are going to have a hard time actually running that code. |
13:43 |
erle |
the reason for that is that if you are doing that, you probably have *no idea* what permissible outputs are. |
13:44 |
rubenwardy |
That sounds like overly strict integration testing rather than forwards compatibility |
13:44 |
erle |
which means you skipped the design process, did not talk to the customer, etc. pp. |
13:44 |
MTDiscord |
<Warr1024> Granted, I tend to work in fields that have rapidly-evolving problems, so maybe there are other areas where problems evolve slowly enough that having highly stable solutions is valuable, but most of what I've seen has been software not changing fast enough, rather than software that changes unexpectedly. |
13:44 |
erle |
the thing is, this sounds massively overengineered, right? |
13:45 |
MTDiscord |
<Warr1024> Haha, sounds pretty waterfall. |
13:45 |
erle |
it was actually developed in an agile way. |
13:45 |
MTDiscord |
<Warr1024> Yes, it's possible to ritualistically follow agile processes without actually following the philosophy. |
13:46 |
erle |
it is just that every change to the grammar required both android and ios to sign off on it. |
13:46 |
erle |
(the app devs i mean) |
13:46 |
erle |
because the thing advertisis its own grammar. |
13:46 |
MTDiscord |
<Warr1024> I've found that 90% of the "talk to the customer about their requirements" stuff tends to happen after they've got the product in their hand. The 10% that you get before that is all either vague, or just outright wrong. Asking the customer what they want presumes that they have a pretty good idea what that is, and they're still learning it the same as you are. |
13:47 |
erle |
well, it turns out it is the only “big” application i wrote which to my knowledge had only 2 bugs, ever, in its lifetime, and one of them was entirely inconsequential, while the other was a bug in the python interpreter (thus not my fault and solved with a very ugly manual garbage collection trigger). |
13:47 |
MTDiscord |
<Warr1024> Unless you're building life support systems, I think that is FAR too few bugs. |
13:48 |
erle |
well, the joke is |
13:48 |
erle |
i chose this architecture because the other dev quit |
13:48 |
erle |
and i *really* needed to have it done |
13:48 |
erle |
so i could not afford any spare time to fix bugs later |
13:49 |
erle |
therefore i chose to make it so that it worked 100% |
13:49 |
erle |
i had a manager who understood that and backed me at every point |
13:49 |
erle |
IMO only if you have a spare budget you can afford technical debt. because you need to pay it at some point. |
13:49 |
MTDiscord |
<Warr1024> Honestly if I don't create a new bug at least every few days, then that's a red flag that I'm not working fast enough and I'm investing too much time in too little code. |
13:50 |
erle |
with any fire-and-forget solution, i.e. where you do not have the chance to fix it later, the debt is not really a debt, it's a trade-off |
13:51 |
MTDiscord |
<Warr1024> I've never seen having technical debt or not as a choice; it's only ever been a question of how much technical debt can you afford, and how much do you budget for making interest payments vs paying down principal. |
13:51 |
erle |
yeah, as i said, i could afford exactly zero tech debt |
13:51 |
erle |
i would probably have developed it in a more “normal” way if there was something like “yeah and then for 6 months you'll do tech support and bug fixing” |
13:52 |
erle |
anyways, circling back |
13:52 |
rubenwardy |
Technical debt is a natural part of flexible software development. It's how you manage it that's important |
13:52 |
erle |
the fun story is that my rigidity in the solution actually hindered someone who was incompetent to make stupid changes |
13:53 |
erle |
incompetent of the level of “this person is never going to work for this company again, ever” |
13:53 |
erle |
(someone else's words, not mine) |
13:53 |
MTDiscord |
<Warr1024> I've seen rigidity stall stupid changes a few times too. |
13:54 |
MTDiscord |
<Warr1024> The problem of course is that I've seen it also NOT stall it, because people who are going to mess up designing a solution are also going to mess up conforming to existing systems. |
13:54 |
erle |
given that programmers can have negative productivity, i feel quite proud of having foreseen such a possiblity (albeit not so soon) and doing what i could to make it hard to do stupid shit |
13:54 |
MTDiscord |
<Warr1024> and I've also seen it stall non-stupid changes plenty, to the point where I've been forced to introduce new stupid in order to make it happen. |
13:54 |
erle |
in my case, the non-stupid changes were pretty obvious |
13:55 |
erle |
basically everything that looks like a customer requirement already has a list of desired, i.e. permissible outputs |
13:55 |
rubenwardy |
I agree with using tools to aid development and quality control, I'm a big fan of linters, type checking, and unit/integ testing. But being so inflexible is very much a waterfall and not an agile thing |
13:55 |
MTDiscord |
<Warr1024> There's no real such thing as obvious. For anything that you think is impossible for someone to miss, there are several people out there with beer for you to hold. |
13:57 |
erle |
rubenwardy it works quite well in agile if the process is structured that way. for example: if you can not just send new JSON without a new schema and the app will not consume it without getting a schema it expects, you are forced to talk to the app dev. more than once this has resulted in “wait, this is hard to parse, please do not overload this field”. |
13:57 |
rubenwardy |
Having typed schema is fine, this is actually pretty common in rest APIs |
13:57 |
erle |
rubenwardy basically, i aim to reverse the “people write software that mirrors their communication structure” partially by making the software architecture require communication |
13:58 |
erle |
well, then ig you agree it is an inflexibility that is overal positive? |
13:58 |
MTDiscord |
<Warr1024> I'm a big fan of linters and will use them in every project. Test automation is a lofty goal but as I see it, far more impractical and thus limited in applicability. Type checking I've only found to be beneficial when a project is larger than the largest scale a single project should ever be; up until then, having to define types seems to cost more than the value I've gotten out of it so far. |
13:59 |
MTDiscord |
<Warr1024> You're talking about Conway's Law, erle? |
13:59 |
erle |
yeah |
13:59 |
rubenwardy |
Typed schema isn't the inflexibility I mean, it sounds like your processes themselves are inflexible. With how you talk about testing, technical debt, and requirements, it sounds like you're working on a missile not an app backend |
13:59 |
MTDiscord |
<Warr1024> It's a law in the scientific sense, not the legal sense, i.e. it's just a reflection of reality, not a thing you can choose to follow or try to break. |
14:00 |
erle |
Warr1024 you are right, all of the roadblocks only work when the person/team has constraints. mineclone5 is a good negative example, it is not even compatible with old versions of itself, even if that comatibility would only require a few item aliases or renaming mods or adding code to different mods than they added it to. |
14:00 |
MTDiscord |
<Warr1024> The most interesting thing about Conway's Law is that when you look at software that's designed and built by an individual, it shows you interesting things about the communication structure within a person. |
14:00 |
rubenwardy |
Also, personally, I don't necessarily think that app and backend should be separate teams. There should be fullstack that do both, and they should work together on user stories |
14:01 |
rubenwardy |
This is related to DevOps I guess, which is a philosophy that aims to join devs and operations |
14:01 |
rubenwardy |
Well, comparable not related |
14:01 |
erle |
Warr1024 the end result of this is that you can not make a mod that works with mineclone5 and reasonably expect it to work in the future. but since it is engineered as a monolithic ball of mud (i.e. they way it is developed could also be “everything in a single lua file”) they do not particularly care about it. |
14:03 |
erle |
rubenwardy i see “full stack” devs actually as one of the biggest threats to well-structured designs. they tend to think you can solve architectural warts soemwhere else in the stack. |
14:03 |
erle |
curiously, this also happens in minetest |
14:04 |
erle |
i have seen bugs in mods that were solved by running a patched server (instead of fixing it) and by requiring a CSM (instead of fixing it). |
14:04 |
MTDiscord |
<Warr1024> On the teams I work on, people can be specialized to some extent, but everybody is "full stack" and theoretically can be responsible for anything anywhere in the stack. There are no front-end devs who don't know how to query a database, or mid-tier folks who don't know how to do some CSS. |
14:04 |
erle |
and i have written mods myself solely to avoid buggy minetest behaviour. |
14:04 |
rubenwardy |
Yeah exactly Warr1024 |
14:04 |
erle |
Warr1024 it's the question of what hat you are wearing at the time. you can be “full stack” in experience, the danger is “everyone is allowed to change everything without consulting the rest of the team”. |
14:05 |
rubenwardy |
General software devs but with specialisation |
14:05 |
erle |
basically, mandatory reviews for everyone |
14:05 |
MTDiscord |
<Warr1024> I have never worked on a team with mandatory reviews. We've considered it, and most of the time people are pushing in that general direction ... but it's usually just out of budget. |
14:06 |
rubenwardy |
?? |
14:07 |
|
Lunatrius joined #minetest |
14:07 |
MTDiscord |
<Warr1024> I guess I'm just sort of past thinking about what I would do in an ideal team if we had unlimited budget. Everything is a trade-off and I always think about balancing the costs. |
14:07 |
erle |
btw, in my experience, CSS is the weirdest thing: there exist a TON of “web developers” who have only a very casual understanding of how CSS works and prefer to use some CSS frameworks, openly admitting they actually do not unterstand the cascade. |
14:07 |
MTDiscord |
<Warr1024> ruben, not having code reviews is not a red flag at all. |
14:07 |
erle |
rubenwardy, Warr1024 am i in a bubble or is this common for you too? |
14:07 |
MTDiscord |
<Warr1024> It just requires that your team structure its projects in such a way that no single component can bring down the whole operation. |
14:07 |
erle |
Warr1024 “no code reviews in the budget” is basically “customer will not even pay for the minimum amount of QA” |
14:07 |
erle |
oh, i see. |
14:07 |
rubenwardy |
We limit tasks to max 6 hours, and the pull request for each task must be reviewed by a coworker |
14:08 |
erle |
do you, by any chance, write erlang or elixir? |
14:08 |
MTDiscord |
<Warr1024> Yeah, customers not paying for QA is pretty common where I work |
14:08 |
rubenwardy |
[15:07] <+MTDiscord> <Warr1024> It just requires that your team structure its projects in such a way that no single component can bring down the whole operation. |
14:08 |
rubenwardy |
If you can't trust your coworkers, they shouldn't be employed |
14:08 |
MTDiscord |
<Warr1024> Shit, I'm pretty sure I've had customers who simply don't check whether they product actually worked or not even :-) |
14:08 |
erle |
i have been lucky enough to have bosses and managers who will tell the customer that the customer is always wrong if a profesisonal tells them they are. |
14:08 |
rubenwardy |
Also, we don't give our clients the option not to pay for QA |
14:08 |
erle |
rubenwardy that's the spirit |
14:09 |
erle |
i do security now, so “just put security in the budget from the start and say ‘we always do that’” is a thing |
14:09 |
MTDiscord |
<Warr1024> If you have customers who actually reliably care whether the thing you deliver them works or not, I don't know whether that makes you lucky or unlucky :-D |
14:09 |
rubenwardy |
I wouldn't accept a job offer from a company that didn't do code review lol |
14:09 |
erle |
Warr1024 may i ask what type of software you create? i have only worked on one project where people would die if it does not work, but many where people would lose money in that case. |
14:10 |
erle |
and i only did a small part in the “people would die if it does not work” thing, design for a security feature that fails-open, i.e. it goes into the “no one dies” state if the security bricks itself. |
14:11 |
erle |
the customer was very insistent on this |
14:11 |
erle |
and i admire that |
14:11 |
erle |
many customers are totally fine with a device playing dead weight if a single bit flips lol |
14:12 |
MTDiscord |
<Warr1024> I work in the events and meetings business, principally. The requirements can change dramatically at any time. |
14:13 |
MTDiscord |
<Warr1024> People may gain or lose a lot of money in the process, but I'm pretty doubtful that anyone really knows which of the changes they make results in that. |
14:13 |
erle |
hahaha |
14:14 |
MTDiscord |
<Warr1024> I'm lucky enough to avoid most of the thrash that happens on the customer side of it, and work on more R&D sorts of projects, i.e. product lines that hopefully carry over across contracts, but it's still very speculative and we're researching the market as we go, rather than designing to fixed known requirements. |
14:14 |
rubenwardy |
I work in aerospace and misc other engineering industries. No safety critical stuff though, that's another department. I do desktop and web app/tools. So full-stack with web and desktop |
14:14 |
rubenwardy |
I imagine that events and meetings was hit about as hard as aerospace in 2020 |
14:15 |
MTDiscord |
<Warr1024> Yeah, 'twas rough, though I was lucky enough to avoid the axe. |
14:15 |
rubenwardy |
yeah same |
14:15 |
rubenwardy |
I went from one of the most junior, to the most senior |
14:16 |
erle |
rubenwardy not saying i am looking for a job rn, but if you know where to look for part-time remote work that appreciates being committed to stuff working well, where would that be? |
14:16 |
erle |
rubenwardy klingon promotion? :D |
14:16 |
rubenwardy |
sounds like you want safety critical, idk about remote work though |
14:16 |
erle |
i don't want safety critical |
14:16 |
rubenwardy |
safety critical is where you get the stuff where everything is tested to strict degree |
14:16 |
erle |
i basically want to write software where a) no one dies if it malfunctions b) no one laughs at me if i make sure it 100% works (without taking excessively long) |
14:17 |
erle |
because i have learned that people will make fun of me if i ensure everything works 100% even if it takes the same amount of time as the sloppy solution |
14:17 |
erle |
i think it is an ego thing or so |
14:17 |
erle |
“you think you are so good with your boring reliance on tests” etc. pp. |
14:17 |
MTDiscord |
<Warr1024> "I don't want to work on software that people's lives will depend on because I'm too scared I'll screw something up and hurt someone" is pretty much EXACTLY the kind of thing that I'd think someone building safety-critical software will want in an employee. |
14:17 |
erle |
i prefer software being EXTREMELY boring. |
14:18 |
erle |
and that also ties into the future-proofing thing |
14:18 |
MTDiscord |
<Warr1024> If you don't choose safety-critical stuff, tough luck because it sounds like it's chosen you :-D |
14:18 |
erle |
i prefer something that obviously has no bugs but looks “ugly” to a “clever” solution that has no obvious bugs |
14:19 |
rubenwardy |
safety critical is extremely boring |
14:19 |
MTDiscord |
<Warr1024> You're like the exact opposite of me :-) |
14:20 |
erle |
oh, btw, “build systems” is a much more widespread topic than “how to make a maps mod for minetest” where a lot of people have assumptions and suggestions that a) seem obvious to them b) are wrong c) are obviously wrong when you try to implement the thing you suggest |
14:20 |
erle |
i bet you know topics like these too! |
14:20 |
erle |
bc i would like to have a catalog from others |
14:20 |
rubenwardy |
I've literally never had the problems you mention, I don't get it |
14:21 |
erle |
rubenwardy the general form of the story is dev A making something that looks complex but then dev B comes and is “why don't you just …”, that's not too rare in my work. |
14:23 |
erle |
and then dev A either explains it (for example, if dev B asks it in a review) or is dismisisve (i.e. “the reasons are X / Y / Z – if you do not believe it, try to implement or profile it yourself then you'll see”) |
14:23 |
erle |
in my experience, there are just some topics where this happens again and again and again |
14:23 |
erle |
and others where this never happens |
14:23 |
erle |
dismisisve → dismissive |
14:25 |
rubenwardy |
so, about the non-existing dependencies - is that like when you install a library that Minetest optionally uses, but it doesn't detect it? Or are there other cases? |
14:26 |
erle |
it's non-existence dependencies, not non-existing dependencies |
14:28 |
MTDiscord |
<Warr1024> In my experience, when a dev is trying to do A, and another dev comes along and suggests "why don't you just do B", then a discussion tends to ensue that results in them realizing that the best answer is probably C. |
14:29 |
erle |
rubenwardy you probably have issues caused by non-existence dependencies but do not notice them due to neither you, nor the build system being aware of it. |
14:29 |
MTDiscord |
<Warr1024> In cases where it turns out that A really WAS the right answer, this is one of those cases where if the why of A is not documented then that's a bug. |
14:30 |
erle |
rubenwardy the most common case for that is when you are including a header file and the preprocessor found it in an earlier build, but then you install something so that it would have been found before the current thing, but due to the build system not realizing that stuff is not up to date, it does not re-check. |
14:30 |
rubenwardy |
so the import path of a header file changing? |
14:31 |
erle |
rubenwardy now, there are a lot of objections, i have probably heard all of them that come down to “but this case is so rare”. yes, it's true, it is, but there are a lot of cases like that. i am only listing the one most easily to grok. |
14:31 |
erle |
rubenwardy wait, i have a writeup for that |
14:31 |
rubenwardy |
this seems like a problem that would face more cmake C++ projects, so there should be general resources for this |
14:32 |
rubenwardy |
and if not, maybe it's not a big problem |
14:32 |
rubenwardy |
you can avoid the problem if you use <> and "" correctly, by marking system imports as SYSTEM so that "" doesn't pick them up |
14:32 |
erle |
rubenwardy this should clear it up https://web.archive.org/web/20170326021857/http://news.dieweltistgarnichtso.net/posts/redo-gcc-automatic-dependencies.html |
14:34 |
erle |
rubenwardy the funny thing about this problem is that there are actual stages of grief that have been the same for everyone i have spoken to about it. it always starts with “this must be such a common problem, but i haven't seen it being addressed, so it must not be very important or impactful” and always ends with “this is everywhere”. |
14:34 |
rubenwardy |
lol |
14:35 |
erle |
the intermediate stages are stuff like “okay, this is a theoretical problem, but not particularly widespread” |
14:35 |
erle |
and “this is only a problem with C or C++ and only if you are not careful” |
14:35 |
erle |
and “okay, this is widespread, but does not result in breakage in the real world” |
14:36 |
erle |
and “this results in breakage in the real world, but not in commonly used software” |
14:36 |
rubenwardy |
I'm not a fan of globally installed libraries personally, it results in so much breakage - especially after distros update. Computers have enough memory these days |
14:36 |
erle |
and “this results in breakage in commonly-used software, but my own projects are unaffected” |
14:37 |
erle |
i'd say you are at the “this is only a problem if you are not careful” stage |
14:37 |
rubenwardy |
I want fewer problems, and more solutions |
14:37 |
sfan5 |
the truth is that most projects have accepted that this can happen and are not willing to switch to some obscure build system to avoid occasional errors |
14:37 |
rubenwardy |
and the solution cannot be switching from CMake |
14:38 |
rubenwardy |
using something like ninja instead of make would be fine though |
14:38 |
erle |
sfan5 no, the truth is that most projects have no idea that this is happening, unless it is pointed out and instead of switching build systems, the generally accepted solution is to rebuild everything every time 100%. |
14:38 |
rubenwardy |
I use ninja with mt already |
14:38 |
erle |
it is my favourite story to troll C or C+b devs btw |
14:38 |
sfan5 |
that is exactly "projects have accepted that this can happen (and developed workarounds)" |
14:38 |
erle |
ninja actually rejected the patch that would fix the most pressing issues i have described. |
14:39 |
erle |
i have mentioned that before |
14:40 |
erle |
i also mentioned before that it is not about switching to a particular build system, but to switch to a particular class of build systems, or rather, away from a class of build systems that, by design, are unfixable. |
14:40 |
erle |
again, the paper “build systems a la carte” will help you understand the tradeoffs involved |
14:40 |
erle |
https://www.microsoft.com/en-us/research/uploads/prod/2018/03/build-systems.pdf |
14:42 |
erle |
thank you for supporting my assortion “build systems are a topic where people have lots of opinions, even if they never implemented one” ;) |
14:42 |
rubenwardy |
yw |
14:42 |
rubenwardy |
Minetest isn't a build system though |
14:42 |
rubenwardy |
we want one that works well enough to not distract us from other issues |
14:43 |
erle |
me too |
14:44 |
erle |
in fact, the reason why i got into build systems at all were both spurious builds and wrong builds |
14:44 |
erle |
i was doing a podcast many years ago |
14:44 |
erle |
and converting it was the job of a build system |
14:44 |
erle |
now, if you do an overzealous build it takes a long time to transcode stuff, needlessly. and messes up file caching. |
14:45 |
erle |
if you misbuild, you get like, half an episode. |
14:45 |
erle |
it was much more obvious than with C or C++ code |
14:45 |
erle |
where a miscompilation can lurk for years or decades |
14:46 |
erle |
so i decided to dive into the topic, noticed the issues and did the bare minimum to solve those for myself, only to realize others had done this too. |
14:47 |
erle |
for example, for years daniel j. berstein has been writing his makefiles in a style that suggests he has an unreleased build tool that is solving most or all of the issues i have complained about. |
14:48 |
erle |
to someone who has researched build tools this is about as obvious as if someone who usually writes C++ writes a python program |
14:48 |
erle |
or someone who writes LISP writes a shell script |
14:49 |
erle |
DJB is famous for not being an especially social person though. didn't answer my email and i bumped twice into him, never got his source code. |
14:49 |
erle |
i later realized that libowfat was only written because libdjb had not been public domain for a long time |
14:50 |
erle |
despite people asking (it eventually was released as PD i think) |
14:52 |
erle |
anyways, the end resultis that i can run circles around ninja with relatively few lines of shell script – and so can anyone else once they accept that resolving and building dependencies in a different way than make does it (toposort followed by execution) is applicable to stuff like minetest mod loading order or module imports in programming, but not to stuff like C or C++ compilation or most use cases. |
14:53 |
erle |
rubenwardy was https://web.archive.org/web/20170326021857/http://news.dieweltistgarnichtso.net/posts/redo-gcc-automatic-dependencies.html clear enough btw? |
14:54 |
erle |
sfan5 btw “rebuild everything 100%” solves the problem of build correctness, but it is the slowest method by far, that is why i am not a fan of it. |
15:08 |
|
Guest9173 joined #minetest |
15:11 |
|
Guest9131 joined #minetest |
15:36 |
erle |
rubenwardy Warr1024 btw, the current state of dynamically updating maps is limited to points of interests via banners, as that way i only need to save some coordinates in the map item. screencast here: https://mister-muffin.de/p/YDsb |
15:37 |
erle |
if you have any ideas about how this could be more interesting, tell please |
15:37 |
|
ronoaldo joined #minetest |
15:38 |
erle |
(if the player marker is not an arrow, but a circle at the edge, then you are outside of the area) |
15:39 |
erle |
i have thought about having the banners be named POIs, but then i'd need to render text on the minimap and that seems disgusting UX |
15:40 |
erle |
also, i am thinking about making a stripped-down version of this for minetest game, but for that i'd need to know if that even makes sense. after all, maps are really cool only with item frames or when there are treasures to be found. i mean, they still serve as “here is an interesting location for you” items. |
15:41 |
erle |
but map art needs item frames obv |
15:58 |
|
grouinos joined #minetest |
16:03 |
|
Sven_vB joined #minetest |
16:35 |
|
fluxionary joined #minetest |
17:02 |
|
Talkless joined #minetest |
17:04 |
|
debiankaios joined #minetest |
17:13 |
Oblomov |
oh nice there's an official minetest presence on mastodon. thanks rubenwardy |
17:13 |
|
___nick___ joined #minetest |
17:14 |
rubenwardy |
Double the number of followers than in Twitter too |
17:15 |
|
sobkas joined #minetest |
17:18 |
Oblomov |
lol |
17:28 |
|
___nick___ joined #minetest |
17:31 |
|
___nick___ joined #minetest |
17:50 |
|
grouinos joined #minetest |
18:43 |
|
grouinos joined #minetest |
18:43 |
MinetestBot |
[git] appgurueu -> minetest/minetest: Docs: Recommend `self.name` (#12239) 53c70b5 https://github.com/minetest/minetest/commit/53c70b5f27f2978029cb40845a82b681c844ec42 (2022-05-09T18:41:47Z) |
18:43 |
MinetestBot |
[git] appgurueu -> minetest/minetest: Fix Minetest blaming the wrong mod for errors (#12241) 089797d https://github.com/minetest/minetest/commit/089797dbe68679b744304ba016e08d30df15ab28 (2022-05-09T18:42:43Z) |
18:45 |
MinetestBot |
[git] appgurueu -> minetest/minetest: HUD: Update selection mesh every frame (#12270) c2898f5 https://github.com/minetest/minetest/commit/c2898f53bc3eb1f22daf93b37608156885fe5c5a (2022-05-09T18:43:47Z) |
18:45 |
MinetestBot |
[git] SmallJoker -> minetest/minetest_game: Carts: Improve movement behaviour (#2951) 38307da https://github.com/minetest/minetest_game/commit/38307da22a6c74b45f021ad627b21b73672dfe14 (2022-05-09T18:44:06Z) |
19:22 |
MinetestBot |
[git] sfan5 -> minetest/minetest: Add more Prometheus metrics (#12274) f5a8593 https://github.com/minetest/minetest/commit/f5a8593b11382b70ee969dc93b71f34fb0cad5df (2022-05-09T19:20:58Z) |
20:20 |
|
Verticen joined #minetest |
21:33 |
|
Boingo joined #minetest |
22:00 |
|
Sven_vB joined #minetest |
22:07 |
|
Pokey joined #minetest |
22:19 |
|
Gustavo6046_ joined #minetest |
22:21 |
|
beanzilla joined #minetest |
22:25 |
|
riff_IRC joined #minetest |
22:34 |
|
panwolfram joined #minetest |
23:07 |
|
AliasAlreadyTake joined #minetest |
23:27 |
settl3r[m] |
As a server owner, can i somehow detect who has their chat deactivated (with F2) ? |
23:28 |
settl3r[m] |
Or do these clients look the same like those which just ignore the (public) chat? |
23:29 |
MTDiscord |
<Warr1024> Pretty sure there is no technical way to tell |
23:30 |
MTDiscord |
<Warr1024> you would have to come up with something you could send via chat that they would definitely respond to if they saw it, but if they're specifically trying to make you think they have chat turned off (or create plausible deniability at least) then you can't be sure of that either. |
23:31 |
settl3r[m] |
Is there a signal which i (as hypothetical admin) reaches every client, even those who have used F2? |
23:32 |
settl3r[m] |
* hypothetical admin) can send which reaches every |
23:32 |
MTDiscord |
<Warr1024> As a mod author, you can send HUDs. Those reach anyone who hasn't turned off the HUD, which would make playing difficult normally so people are less likely to do that continuously. |
23:33 |
settl3r[m] |
ah.. or i could send a PM, these cant be ignored, can they? |
23:33 |
MTDiscord |
<Jordach> uses the chat window |
23:33 |
MTDiscord |
<Warr1024> You could also send a formspec, which can be dismissed by can't be prevented preemptively, and you can spawn an entity in front of or around them, which cannot be blocked but will also be visible to anyone else nearby. |
23:34 |
MTDiscord |
<Warr1024> If you really need to get someone's attention, a kick will accomplish that, though you can't guarantee they'll see the kick message (--go users don't see those). |
23:34 |
MTDiscord |
<Warr1024> Now I'm curious what the X problem is for this. |
23:37 |
settl3r[m] |
Is there a way to check, if someone uses a bot? |
23:38 |
settl3r[m] |
* a bot (-script) ? |
23:38 |
MTDiscord |
<Warr1024> (1) subject your players to CAPTCHAs and (2) hope that there are still a couple of years before AI tech advances past human intelligence. |
23:38 |
MTDiscord |
<Warr1024> If you're worried about stuff like cheaty CSMs, you'd need to find an anticheat mod. I think there are a number of them out there in various states of incompletion. |
23:39 |
MTDiscord |
<Warr1024> Also beware that some players use cheaty CSMs due to actual legit accessibility problems so you may be introducing discrimination problems to your server if you're too aggressive against them. |
23:39 |
settl3r[m] |
i heard, that MT still has the problem of disconnection-lag, someone told me that they could glitch-dig through protected blocks.. |
23:40 |
settl3r[m] |
..thus reaching areas which are supposed to be unreachable. |
23:40 |
MTDiscord |
<Warr1024> Protection can mostly protect areas against players illegitimately modifying things, but generally doesn't work for denying them access to move through those spaces. |
23:41 |
MTDiscord |
<Warr1024> If you want to protect a building, you need to protect the whole thing, not just the outer shell, as it's not hard for players to glitch through that outer shell |
23:41 |
settl3r[m] |
How big should the outer shell be, t0 100% prevent access to the inner area? |
23:41 |
MTDiscord |
<Warr1024> yes, 100% |
23:41 |
settl3r[m] |
s/big/thick/ |
23:42 |
MTDiscord |
<Warr1024> 100% thick |
23:42 |
settl3r[m] |
s/big/thick/, s/t0/to/ |
23:42 |
settl3r[m] |
100 blocks wide? |
23:42 |
MTDiscord |
<Warr1024> 100% wide |
23:43 |
settl3r[m] |
eg. let's say we want to deny players access to a travelnet booth, how big should the wall around it be? |
23:43 |
settl3r[m] |
and what material? |
23:43 |
settl3r[m] |
obsidian? titanium? |
23:44 |
MTDiscord |
<Warr1024> you won't be able to prevent players from getting into the travelnet booth; you'll need to prevent them from being able to activate it |
23:44 |
settl3r[m] |
* obsidian, titanium, granite? |
23:44 |
MTDiscord |
<Warr1024> material doesn't really matter much, it's the protection mod that matters. |
23:44 |
MTDiscord |
<Warr1024> and of course whether or not this travelnet mod is going to cooperate with you |
23:45 |
settl3r[m] |
so the only real protection would be to remove this travelnet booth right? so we had to use an alt, who puts it into his inventory, for instance |
23:45 |
MTDiscord |
<Warr1024> What's the X problem here? |
23:46 |
MTDiscord |
<Warr1024> Are you trying to make a secret member-only area? Are you the server owner and have the power to install mods? |
23:47 |
MTDiscord |
<Warr1024> Might be simpler to just make your own teleporter that only people with certain privs can access... |
23:47 |
settl3r[m] |
no, i'm talking about two different issues, sorry |
23:47 |
MTDiscord |
<Warr1024> other players can step in but it doesn't move them if they don't have the priv |
23:47 |
settl3r[m] |
(the first was the chat issue, the second is general area security) |
23:48 |
settl3r[m] |
no in the second problem, i'm not the admin, but just a normal player of a server |
23:48 |
MTDiscord |
<Warr1024> I'm pretty sure general area security isn't a thing in MT. You need specific threats to defend against. |
23:49 |
MTDiscord |
<GoodClover> If you want to be guaranteed players can't access an area, teleport them out if inside some defined area. Protection mods can prevent Interaction (if your other mods co-operate). |
23:49 |
settl3r[m] |
ok, let's say i had enough protection blocks and granite to create a wall of 11 meters thick around a travelnet booth (in all 6 directions), how would another player 'glitch through' that 11m thick granite wall? |
23:49 |
settl3r[m] |
* 11m thick protected granite wall? |
23:50 |
MTDiscord |
<Warr1024> As far as I know there's no upper bound to how badly a player can abuse glitches and lag to pass through something or access something they shouldn't, so you would need to design anything to tolerate that. |
23:50 |
settl3r[m] |
if they started to dig through the outermost layer, the wall would quickly snap back, right? |
23:51 |
MTDiscord |
<Warr1024> Teleporting a player out when they're somewhere they shouldn't be is of limited use since (1) they may still be able to be inside for long enough, pre-teleport, to do some harm, and (2) clients control player movement anyway so it's not hard to just warp back in usually. |
23:51 |
MTDiscord |
<GoodClover> a physical wall isn't the correct solution |
23:52 |
MTDiscord |
<Warr1024> If you rely on protection blocks to protect your stuff then you'll have to rely on them throughout your entire property |
23:52 |
settl3r[m] |
ok, so i have to use an alt, to remove that booth into his inventory. That would be a perfect secure solution, right? |
23:52 |
settl3r[m] |
s/perfect/perfectly/ |
23:52 |
MTDiscord |
<Warr1024> and of course they only protect against what they protect against, which may or may not be enough |
23:52 |
MTDiscord |
<GoodClover> If teleportation and interaction prevention don't suffice the I think we're screwed |
23:53 |
MTDiscord |
<Warr1024> I mean if it were me, I'd just lay in wait and murder that alt and take the booth... |
23:53 |
|
toshiba joined #minetest |
23:54 |
settl3r[m] |
..but you cant use the booth to teleport to the other travelnet, as it has to be placed by the correct owner to work. |
23:54 |
MTDiscord |
<Warr1024> Then what happens if I just take it? |
23:54 |
MTDiscord |
<Warr1024> I can't go there, but now neither can you |
23:57 |
settl3r[m] |
ok, i have to explain the situation a bit, that you understand the setting: |
23:57 |
settl3r[m] |
the main base is located many kilometers away, and has a travelnet A. A connects to travelnet B, which is located deep in a mine (kilometrers below the ground) and there is no outer entrance to that mine. The mine can only be accessed by teleportation through that travelnet. |
23:57 |
settl3r[m] |
So there really isn't that much player traffic at station B. |
23:57 |
settl3r[m] |
s/kilometrers/kilometers/ |
23:58 |
settl3r[m] |
The only players who will ever see it, are those which dig horizontal tunnels underground to explore it, and find it by (very rare) accident. |