Time Nick Message 00:04 Soni sorry 01:43 MTDiscord 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:32 MTDiscord Contentdb 09:32 erle is there any method to call on an item being destroyed other than by the item entity despawning? 09:47 MTDiscord 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 12:20 MTDiscord 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 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 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 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 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 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 "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 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 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: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 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 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 [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: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 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 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 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 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 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 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 If we were writing an engine for mineclonia instead of for all MT games, then that might be an issue 13:00 MTDiscord 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 what's the actual issue with [png? I understand you don't want to use it, but why? 13:09 MTDiscord 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 What I don't understand is what's the issue with erle's "working" map implementation? 13:13 MTDiscord 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 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 MT has a PNG encode built-in? 13:13 erle it is not suitable for stuff like this though 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 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 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 [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: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 MTDiscord 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 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 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 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 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 [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: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 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 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 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 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 erle i *definitely* should add a TODONT list hahaha 13:28 erle “frequestly questioned answers” 13:29 MTDiscord indeed, what your project will NOT do is often as important a part of its identity as what it will. 13:30 MTDiscord 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 @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 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 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 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 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 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 That's basically how you make a map in NodeCore :-D 13:37 MTDiscord 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 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 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 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 Haha, sounds pretty waterfall. 13:45 erle it was actually developed in an agile way. 13:45 MTDiscord 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 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 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 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 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 I've seen rigidity stall stupid changes a few times too. 13:54 MTDiscord 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 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 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 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 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 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 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 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 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 MTDiscord 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 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 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 Yeah, customers not paying for QA is pretty common where I work 14:08 rubenwardy [15:07] <+MTDiscord> 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 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 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 I work in the events and meetings business, principally. The requirements can change dramatically at any time. 14:13 MTDiscord 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 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 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 "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 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 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 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 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: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: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 17:13 Oblomov oh nice there's an official minetest presence on mastodon. thanks rubenwardy 17:14 rubenwardy Double the number of followers than in Twitter too 17:18 Oblomov lol 18:43 MinetestBot 02[git] 04appgurueu -> 03minetest/minetest: Docs: Recommend `self.name` (#12239) 1353c70b5 https://github.com/minetest/minetest/commit/53c70b5f27f2978029cb40845a82b681c844ec42 (152022-05-09T18:41:47Z) 18:43 MinetestBot 02[git] 04appgurueu -> 03minetest/minetest: Fix Minetest blaming the wrong mod for errors (#12241) 13089797d https://github.com/minetest/minetest/commit/089797dbe68679b744304ba016e08d30df15ab28 (152022-05-09T18:42:43Z) 18:45 MinetestBot 02[git] 04appgurueu -> 03minetest/minetest: HUD: Update selection mesh every frame (#12270) 13c2898f5 https://github.com/minetest/minetest/commit/c2898f53bc3eb1f22daf93b37608156885fe5c5a (152022-05-09T18:43:47Z) 18:45 MinetestBot 02[git] 04SmallJoker -> 03minetest/minetest_game: Carts: Improve movement behaviour (#2951) 1338307da https://github.com/minetest/minetest_game/commit/38307da22a6c74b45f021ad627b21b73672dfe14 (152022-05-09T18:44:06Z) 19:22 MinetestBot 02[git] 04sfan5 -> 03minetest/minetest: Add more Prometheus metrics (#12274) 13f5a8593 https://github.com/minetest/minetest/commit/f5a8593b11382b70ee969dc93b71f34fb0cad5df (152022-05-09T19:20:58Z) 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 Pretty sure there is no technical way to tell 23:30 MTDiscord 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 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 uses the chat window 23:33 MTDiscord 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 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 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 (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 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 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 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 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 yes, 100% 23:41 settl3r[m] s/big/thick/ 23:42 MTDiscord 100% thick 23:42 settl3r[m] s/big/thick/, s/t0/to/ 23:42 settl3r[m] 100 blocks wide? 23:42 MTDiscord 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 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 material doesn't really matter much, it's the protection mod that matters. 23:44 MTDiscord 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 What's the X problem here? 23:46 MTDiscord 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 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 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 I'm pretty sure general area security isn't a thing in MT. You need specific threats to defend against. 23:49 MTDiscord 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 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 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 a physical wall isn't the correct solution 23:52 MTDiscord 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 and of course they only protect against what they protect against, which may or may not be enough 23:52 MTDiscord If teleportation and interaction prevention don't suffice the I think we're screwed 23:53 MTDiscord I mean if it were me, I'd just lay in wait and murder that alt and take the booth... 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 Then what happens if I just take it? 23:54 MTDiscord 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.