Time Nick Message 00:00 user333_ also i recently realized that having 10 stacks of cobble in your inventory is equal to having a cubic kilometer of rocks in your backpack 00:00 user333_ no 00:00 user333_ 1000 cubic meters 00:00 user333_ a lot 00:02 rubenwardy I really like adding translation support to my software. I do it a lot from the start as it's so much easier then 00:02 rubenwardy I wish I was multilingual 00:03 cheapie I mostly only speak English - I can read (but not really write) most Spanish, and a few dozen words in German, and that's about it 00:04 erle user333_ compressed cobble is where it is 00:04 erle user333_ so voxelibre has this idea of compressed cobble. like 9 cobble = 1 compressed cobble 00:04 erle you can of course doubly compress cobble 00:05 rubenwardy I think I like it because it increases the usability of an application without too much cost (usually) and also opens it up to a wider audience 00:05 erle it's very funny to just hand someone a single 8 times compressed cobble 00:05 cheapie Said German is mostly just enough to do random in-game shitposting in Bonnthal: https://cheapiesystems.com/media/images/screenshot_20251024_150020.png 00:05 rubenwardy Renewed Tab has a lot of German and Chinese speaking users. It was even featured in a German tech magazine 00:05 erle rubenwardy didn't you have another language in school? 00:05 rubenwardy I did French at school but I messed around and have forgotten it. I didn't do any foreign languages at GCSE 00:05 erle i learned english in german school. i also had exposure to dutch, italian, and for years i did latin. 00:06 erle from latin i remember that gallia is divided into three parts! 00:06 rubenwardy others had the option of German or Spanish 00:06 erle basically what you need to understand asterix 00:07 erle i once read an article about how to be a cool old person, learn a new language every 10 years or so 00:07 erle then again, i think one needs a reason 00:07 erle i never found anyone who knows arabic enough to add support for letter shaping to unicode_text 00:07 rubenwardy my reason is that I'd like to escape this hateful island 00:08 erle UK? 00:08 rubenwardy yes 00:08 erle if so, you are not the first person who hates it there and explictly says it's full of hate 00:08 erle also i heard it has no high speed rail 00:09 rubenwardy there's HS1, the eurostar 00:09 erle rubenwardy well the complaint came from a guy from manchester 00:09 erle i am willing to believe that there is no high speed rail from there to london 00:09 rubenwardy ah yeah that was HS2 00:10 erle oh lol 00:10 erle so you have one (1) high speed rail 00:10 rubenwardy HS2 is under construction but is massively over budget, delayed, and sabotaged. The original idea was to link London, Birmingham, and Manchester together but the government cancelled the Manchester bit 00:10 rubenwardy the Birmingham-Manchester bit was much more important than Birm-London 00:10 erle yes he explained that using bottles (we were at a bar) 00:10 erle “this bottle is manchester, this is london, and this is somewhere in between like 5 miles outside london. this is where construction stopped” 00:11 erle something like that 00:11 erle a british gal also told me that if your smartcard is from a transport union (or how it's called) that is too far away from your destination, you can not load “tram credits” on it. 00:11 rubenwardy i do not know what this means 00:11 erle “tram credits?” i asked? turns out the british digitalization involves replicating every paper ticket on a smartcard that doesn't have enough space 00:12 erle i pointed out that the german d-ticket just uses the smart card as “i am allowed to take any regional transport” and it seemed alien to her 00:12 erle then again, later i understood why 00:12 erle in germany, politicians decided that “one ticket for a months” means no tracking etc. – but different regional transport operators exist 00:12 erle so the reconciliation is a job for the politicians 00:13 erle whereas in UK and NL you have tracking solutions that automatically assign money to whatever operator did each leg of your journey 00:13 cheapie erle: https://cheapiesystems.com/media/images/screenshot_20251101_191300.png 00:13 erle cheapie this amused me more than it had any right to do 00:14 rubenwardy it's very cool how in german you have the deutschland ticket for all public transport and regional rail in a month 00:14 erle cheapie i almost shat myself laughing 00:14 cheapie heh 00:14 rubenwardy like just our city monthly tickets are 3x that 00:15 [MatrxMT] rubenwardy: monthly subscription tickets were not particularly cheap before the introduction of the D-Ticket 00:15 cheapie erle: It used to say Brandfall of course, but I'm not sure it was ever anywhere near the elevators... at least right now, the elevators are at the other end of the building 00:15 erle rubenwardy yeah i realized it whenn i went to NL 00:15 erle rubenwardy in NL just taking the train one way for 3 hours and back costs the same as d-ticket for a month 00:16 erle rubenwardy what you have to understand about the d-ticket is that it was politicians finally doing something good for the people that was tangible for millions … and they could have done before! just the conservative-led governments never did so. 00:17 erle rubenwardy i find it kinda depressing to know that this *could* be done easily all along 00:17 erle but a merkel govt. would never 00:19 erle rubenwardy the nice thing is that no no politcian wants to be the one that abolishes it. but they'll probably make it more and more expensive. 00:19 erle can't have good public transport. after all, germany is land of cars! 00:19 erle rubenwardy is german or dutch difficult for you if you are english monolingual? 00:43 rubenwardy dk 00:43 rubenwardy idk 00:44 rubenwardy I've only started learning some German. It seems a bit easier to understand than French but the sentences are currently very simple 00:44 rubenwardy I've heard Swedish is the easiest to learn from English 00:56 rubenwardy Anyway. Translation instructions here ;) https://github.com/luanti-org/luanti-org.github.io/?tab=readme-ov-file#for-translators 02:08 Confines user333_ thx for 270,000 server joins 02:11 user333_ :D 02:11 user333_ yw 02:11 mrcheese XDDD 02:12 mrcheese i also did that :PPP 02:12 user333_ i will now credit mrcheese as my unidentified friend 02:12 user333_ what happened to the server this time? 02:13 mrcheese yea lol what happened 02:19 [MatrxMT] when a brit says hateful, it just means an object of their own hate 02:19 rubenwardy terf island 02:19 [MatrxMT] it's meant both ways this time, of course 02:21 [MatrxMT] maybe you can just move to wales or scotland and they'll leave the union 02:22 repetitivestrain i'd have used "infernal" or a similarly vicious qualifier in the interests of the more cosmopolitan audiences here :-) 02:23 repetitivestrain although rubenwardy's meaning was manifest in context 02:24 repetitivestrain i have however observed that luanti is an overwhelmingly dach affair 02:24 repetitivestrain for reasons unknown 02:25 [MatrxMT] gee, mostly barebones and not pretty; free software... advtrains, technic, celevator.. I think it's just perfect for germans 02:26 [MatrxMT] I'm not saying Germans don't like pretty things, but, there are enough "simulationen" out of that country 03:03 Confines I turned off the server until I had time to patch that 03:03 Confines It was doing fine but the db was about 24mb so I didn't wanna leave it on creating entries 03:17 user333_ so we didnt crash it :c 03:19 user333_ well i found 3 exploits to break your server, let's see what else i can find 03:25 mrcheese :P 03:26 mrcheese 24MB.... thats insane XD 03:26 user333_ yeah, and not nearly enough to crash it 03:33 mrcheese yea 03:34 mrcheese well leave it running for like a week or smth 03:34 user333_ Confines is patching it as we speak, we need to find a new exploit 03:36 Confines Alright, that is all patched 03:36 Confines I mean those hardly broke the server, it was working fine lmao 03:37 user333_ true, but it is annoying 03:37 Confines true 03:37 Confines I was gonna do some fun coding :wilted_rose: 03:38 user333_ now open an irc channel for me :P 03:38 Confines I should do that 03:39 user333_ yes, i have proven myself worthy of joining you, haven't i? 03:40 Confines Lol 03:40 MTDiscord Kinky. 03:44 mrcheese :P 03:55 user333_ now to find some new exploit 03:56 MTDiscord Excellent. 03:56 user333_ you sound happy that i'm trying to destroy your backend server 04:02 MTDiscord It's not my server. 04:02 MTDiscord ( ͡° ͜ʖ ͡°) 04:03 user333_ "TeamAcedia's server", whichyou should also care about bc you kinda rely on it :P 04:03 user333_ *which you 04:03 MTDiscord Nah. 04:05 Confines We rely on nathan not the other way around 04:05 Confines where else would we see the word Kinky 04:06 user333_ uh... in a tube manufacturing factory 04:22 Confines user333_ join #teamacedia 04:23 mrcheese whats stopping others from joining? :P 04:23 Confines Nothing 04:23 Confines its public 04:27 user333_ ooo 09:03 MinetestBot 02[git] 04cx384 -> 03luanti-org/luanti: Fix missing airlike buffer info 13f2eabdd https://github.com/luanti-org/luanti/commit/f2eabdd1d521beba20f210b95517e249a63995ee (152025-11-02T09:01:53Z) 13:24 [MatrxMT] i can't get `core.sound_play` working in `core.after` 13:25 [MatrxMT] oh whoops, i used an unknown sound and it didn't warn me 13:45 MTDiscord how should it warn you 13:53 cheapie et086: A warning on the client that it was asked to play a sound it doesn't have (like it does with textures) would be nice 13:53 MTDiscord the issue is that the engine makes sounds to things like player_jump, which don't have to exist 13:54 cheapie Could those just be excluded from that? 13:54 MTDiscord we can modify SoundMaker in game.cpp 13:56 MTDiscord hmm SoundSpec::use_local_fallback seems related, but is always true? 13:58 sfan5 the server could warn for this, since it knows all sound files 13:59 [MatrxMT] CSMs need extra files in $PATH_USER/sounds to play sounds... but they can play any sound from the server too I think 13:59 [MatrxMT] at least I don't remember media working properly for CSMs 13:59 [MatrxMT] sorry to even mention them :P 14:20 erle user333_ did you read the LANGSEC thing 14:26 user333_ some of it 14:28 erle user333_ how much 14:29 user333_ a few pages, i have things to do irl yk :P 15:23 rubenwardy test 15:25 cheapie test failed 15:30 erle user333_ tell me when you have read and comprehended seven turrets of babel 15:31 user333_ uhhh ok 15:43 Krock test failed (copy 2) 15:45 user333_ test failed successfully 20:35 MinetestBot 02[git] 04SmallJoker -> 03luanti-org/luanti: Break include chains and tidy (#16640) 13329e210 https://github.com/luanti-org/luanti/commit/329e21032647863879737f7d198a5a2bc87ccc9d (152025-11-02T20:33:10Z) 20:37 MinetestBot 02[git] 04sfan5 -> 03luanti-org/luanti: Default-initialize SColor 138350fb7 https://github.com/luanti-org/luanti/commit/8350fb734abf9ead60517fb2ed7fb0da8d923de7 (152025-11-02T20:36:39Z) 20:39 MTDiscord I'm experiencing a memoryleak-looking issue with a 5.12.0 server when I have rollback enabled. I have no way to prove the issue on a testserver since it requires a lot of people doing a lot of things (500k to 1.2M actions per day). Please advise: Report now as 5.12.0 issue or wait till we upgraded main to 5.14.0 and try again there? 20:40 sfan5 don't report issues for outdated engine versions 20:40 MTDiscord The vector change in 5.13.0 prevents upgrading until every mod is fixed 20:40 sfan5 vector change? 20:40 sfan5 also rollback is pretty pointless, I wouldn't recommend anyone to use it 20:41 cheapie Rollback works alright since the changes a year-ish ago 20:41 MTDiscord Vector change: "Vectors passed to C++ API functions may no longer have nil components." 20:41 MTDiscord Apparently some mods do not consider that and crash. We have plenty of those unfortunately. 20:41 sfan5 that's misleading, it only raises a warning 20:43 MTDiscord Rollback: We used it extensively, our rollback databases exceeded 100 GB quite often and there are items relying on it. It doesn't work in any case, but for us it was more than "good enough". We only found that the memory issue is tied to rollback by accident. 20:43 sfan5 cheapie: in practice what do you use rollback for? I wouldn't trust the code to revert changes correctly 20:43 cheapie sfan5: For figuring out who griefed a thing and rolling back the destruction, generally speaking it seems to do this no problem 20:44 cheapie We do have a cleanup script that runs nightly to get rid of actions older than a certain age (how old depends on the privs of the player who did them) to keep the DB from growing indefinitely 20:45 erle bastrabun how can an item rely on rollback? 20:45 sfan5 hmm 20:46 MTDiscord erle: can't speak for bastrabun, but some servers make the ability to inspect rollback logs for certain areas a game mechanic 20:46 erle i didn't know that was possible, the moar you know 20:46 cheapie Looks like at the moment I have it set for 90 days for most players, and immediately (every night) for players with the "daily_rollback_cleanup" priv 20:46 MTDiscord Regarding the "vector change": We upgraded our testserver to 5.13.0 and mods crash when we use vector-y things, where 5.12.0 does not crash doing the same action. 20:47 MTDiscord what does the crash say? 20:47 crazylad luatic: yes, iirc the Your Land server has such a tool to open a formspec revealing the rollback logs 20:47 MTDiscord erle: We have a craftable magnifier that shows who did what on the clicked position 20:48 sfan5 https://github.com/luanti-org/luanti/commit/a5263dc7e the relevant commit btw 20:48 sfan5 and https://github.com/luanti-org/luanti/commit/5c2599315 20:48 MTDiscord It does not perform rollbacks (that's for staff only), but it shows actions on a block. 20:51 MTDiscord Bastrabun: i understood you're fairly sure that this is related to rollback? how? 20:52 MTDiscord and if so, can you maybe it narrow a bit further, e.g. were there substantial queries (via core.rollback_get_node_actions), substantial reverts? 20:54 MTDiscord it looks like action_latest_buffer might never be cleared? 20:55 MTDiscord in rollback.cpp 20:55 MTDiscord see RollbackManager::addAction(const RollbackAction & action) 20:56 sfan5 RollbackManager::flush() does that 20:56 sfan5 wait 20:56 MTDiscord only the other one 🙃 20:57 MTDiscord action_todisk_buffer.clear();, but i see no line that would ever shrink action_latest_buffer 20:58 MTDiscord looking at all references via clangd, it seems this might be a leak 20:58 MTDiscord luatic: I am fairly sure only due to the fact that with rollback enabled and beetween 500k and 1.2M dig and place actions per day, we never made it beyodn 20 day uptime. I occasionally asked in discord providing htop screenshots what might be the cause, in short it shows crazy numbers like 70GB virt memory and 30 GB res memory usage. It increases somewhat linearly over time until we restart or the inevitable OOM hits. Then, with no other 20:58 MTDiscord change, we disabled rollback and ever since virt memory was around 10 GB and res between 5 GB and 7 GB, with an uptime of 9d. At that time, with rollback, we'd already have hit 20Gb res easily 20:59 sfan5 the RollbackManager::getSuspect logic is a bit weird but I guess the idea is that it should only concern recent actions 20:59 MTDiscord We hardly ever "roll back" actions and even the tool mentioned is expensive and not used terribly often, so I assume entering into the DB is what causes it 20:59 MTDiscord sfan5: my guess would be that that was the plan but either the logic for clearing got removed or never written 🙃 21:00 sfan5 the fact that rollback has had an obvious memory leak apparently since its inception says a lot about how well supported this feature is 21:03 MTDiscord If there is any way we could help debug the problem, do say. That's why I asked whether to open an issue on the old version, so that we can discuss there. 21:03 cheapie I guess I've never noticed the leak since VE-C restarts every night for backup and maintenance 21:03 MTDiscord Bastrabun: I think we have at least one plausible culprit, I'll write a patch 21:03 MTDiscord Should be fairly easy, can just drop all actions that are too old 21:05 MTDiscord cheapie: We try to avoid restarts as long as players are affected 21:05 cheapie How do you manage backups? postgres? 21:06 MTDiscord hot backups via postgres 21:06 cheapie And I guess you just do player cleanup live? 21:06 MTDiscord We restore immediately afterwards to a testserver to see whether backups is good 21:06 MTDiscord player cleanup? 21:06 cheapie Dropping old accounts that haven't logged in in forever 21:07 MTDiscord Player cleanup was discussed, but never acted upon. There's 130k + accounts right now 21:08 cheapie On VE-C we delete any accounts that haven't logged in after 7 days if they don't have interact, 1 year if they do. Any accounts with any elevated privs never get deleted. 21:11 sfan5 a piece of good news: the rollback code will break after 2038 21:11 Krock horray 21:13 MTDiscord Not to worry. We'll ask AI for a quick fix. 21:24 MTDiscord ah shit now i gotta regenerate my github token 21:24 MTDiscord anyways Bastrabun untested, but you can give this a shot: https://github.com/appgurueu/minetest/pull/new/fix/rollback-leak 21:25 MTDiscord wait did i push on the wrong branch.. 21:25 MTDiscord pushed now 21:26 sfan5 the 100 there is not a seconds value 21:27 sfan5 well somewhat, but also somewhat not 21:27 MTDiscord sfan5: well i guess i can choose a better variable name, but i don't really want to fix the rollback code relying on time_t being in seconds.. 21:28 sfan5 no I mean 100 is part of the scoring method somehow 21:28 sfan5 anyway my fix is while (action_latest_buffer.size() >= 250) { action_latest_buffer.pop_front(); } 21:29 sfan5 might be a bad idea but I don't expect more than 250 rollback actions to happen in the relevant time frame 21:32 MTDiscord Thanks, I will try that patch. For my understanding: This is a PR to master, can I apply this patch on a 5.12.0 server as well? What exactly does it do? "Flush actions" does not mean "remove from rollback database, just from memory? 21:32 MTDiscord "flush" means "remove from memory, add to database" 21:34 MTDiscord Alright. Now I only need to find a way to do 1.2M dig or place actions per day on the testserver 21:34 SwissalpS reverse order, I hope ;) 21:34 sfan5 !c 1.2 * 1_000_000 / (24*60*60) 21:34 MinetestBot 13.88888888888889 21:34 sfan5 !c 1.2 * 1_000_000 / (24*60*60) * 100 21:34 MinetestBot 1388.888888888889 21:35 MTDiscord what the patch (the patches) do is they truncate a certain list of recorded rollback actions used internally for suspect blaming if it gets too large, they should apply to 5.12.0 just fine 21:44 erle i don't get how you can program this without a test case. do you just model the entire state in your head? 21:44 erle i mean i do have an attention deficit 21:44 erle so i can't. but can other people do it? 21:58 sfan5 some more good news: if you're 134217729 nodes away from an action happening you might be wrongly blamed for it 21:58 MTDiscord lol 21:59 MTDiscord erle: personally i try to reason about code statically when i can get away with it and writing a test case seems like too much work 21:59 sfan5 (due to integer underflow) 22:28 erle luatic did you ever use framaC or semgrep? 22:29 erle luatic especially semgrep is *really* useful for reasoning about bugs. but it can't do cross-file control flow. 22:30 erle luatic i did use semgrep years ago though to analyze dupe bug fixes. turns out that when lizzd fixed a dupe bug at several places in the code i was able to write a semgrep pattern to find one more place to dupe. 22:30 erle lizzy i mean 22:31 erle i showed that to coworkers who proceeded to use semgrep with some public “common C and C++ errors” dataset and didn't get *at all* that i was talking about “if you fix a bug, write a semgrep pattern to find the entire category of bugs that are similar to that” or “if you find a security issue, write a semgrep pattern to find other exploitable code in the same project”. 22:32 erle i mean you can easily write a rule to e.g. find all double-frees 22:32 erle but that's something other tools do too 22:32 erle “find me all functions that operate on a variable of type so and so where the value escapes its scope unprocessed” is something most tools *don't* do 22:34 whosit in our modset we found a bunch of mods doing `if not thing == "something" then` meaning to do `if thing ~= "something" then` instead... using normal grep though ;D I assume there lots more in luanti ecosystem 22:36 whosit so yeah, figuring out the bug and doing search for similar cases when possible is useful... 22:36 whosit lots of mods don't assume `puncher ~= nil` in on_punch - and that's also potential crash 22:37 whosit *I mean, assume not nil 22:37 erle whosit if i were a coredev i'd write a semgrep rule to run against cdb for every possible API change to check if it was breaking stuff 22:38 MTDiscord if i'm not mistaken semgrep seems to have commercialized it might be worth looking into alternatives 22:38 erle is it non-free? 22:38 erle it was always commercial 22:38 erle whosit the thing is, semgrep can do analysis on the AST. so like if in python you do “import foo as bar” and later “bar.baz()”, then semgrep will find it, if your pattern looks for “foo.baz()” but grep will not 22:39 MTDiscord they changed the licensing around their ruleset i believe 22:39 erle their ruleset is not what i care much about 22:39 erle as i said, semgrep with existing rulesets is okay-ish 22:39 erle but the real power is in making a semgrep rule for bugs or code smell and finding every single one of them 22:39 MTDiscord and have also dropped official support for the free "community edition" if i'm reading this right 22:40 whosit I agree that being able to grep AST + some semantics is more powerful than just text, just adding real-life luanti examples where there are lots of lurking bugs this can catch 22:40 MTDiscord sorry my statement was slightly incorrect 22:40 MTDiscord it was stated they consider it obsolete 22:40 erle steyerofoam that is unfortunate. i don't see it here: https://semgrep.dev/docs/getting-started/quickstart-ce 22:41 erle steyerofoam well even if it is abandoned, it uses tree-sitter, so you can basically rely on it for a while until it bitrots 22:41 MTDiscord erle: i suppose, but there seems to be a fork 22:41 erle what i also learned is that kotlin + spring is basically not statically analyze-able 22:42 erle you mean this? https://www.aikido.dev/blog/launching-opengrep-why-we-forked-semgrep 22:42 MTDiscord yeah that's the one 22:43 MTDiscord oh so they took code out of the open-source one judging by that? weird 22:43 erle > Follow along on X. 22:43 erle sorry that platform is too hitlerite for me lol 22:44 MTDiscord true but they are still businesspeople to an extent i think so it tracks 22:44 MTDiscord the people who made the fork i mean 22:48 erle steyerofoam makes sense. lots of companies are interally organized by stalinist principles. 22:48 erle few are worker-owned collectives or publicly-owned corporations