Minetest logo

IRC log for #minetest, 2023-08-26

| Channels | #minetest index | Today | | Google Search | Plaintext

All times shown according to UTC.

Time Nick Message
00:00 federalagent joined #minetest
00:00 Megaf joined #minetest
00:00 olliy joined #minetest
00:00 olliy joined #minetest
00:01 Leopold joined #minetest
00:04 panwolfram joined #minetest
00:05 frostsnow joined #minetest
00:05 mazes_80 joined #minetest
00:18 fluxionary joined #minetest
00:45 Leopold joined #minetest
01:12 Lesha_Vel joined #minetest
01:16 fling joined #minetest
01:20 smk joined #minetest
01:25 TheCoffeMaker joined #minetest
01:26 fluxionary joined #minetest
01:37 fling_ joined #minetest
02:07 HumanGeek joined #minetest
02:12 HelenasaurusRex joined #minetest
03:12 proller joined #minetest
03:29 [MTMatrix] joined #minetest
03:34 [MTMatrix] joined #minetest
03:46 thelounge650 joined #minetest
03:47 [MTMatrix]_ joined #minetest
03:48 thelounge650 test
03:48 [MTMatrix]_ <MisterE>Well, it looks like the new matrix bridge is working, on the test run
03:50 [MTMatrix] joined #minetest
03:55 [MTMatrix] joined #minetest
03:56 MisterE123 joined #minetest
03:56 MisterE123 test
03:59 MTDiscord <mistere_123> oh thats a problem: on matrix, I cant see who is speaking from discord
04:00 MTDiscord joined #minetest
04:01 [MTMatrix] joined #minetest
04:02 MTDiscord <mistere_123> Is this any better?
04:02 [MTMatrix] |MisterE|nope
04:05 [MTMatrix] joined #minetest
04:06 MTDiscord <mistere_123> test again (sorry)
04:09 [MTMatrix] joined #minetest
04:12 MisterE123 Matrix bridge is down again due to discord user ids not showing up in matrix
04:15 fluxionary_ joined #minetest
04:52 liceDibrarian joined #minetest
05:46 liceDibrarian joined #minetest
06:04 calcul0n joined #minetest
06:25 calcul0n_ joined #minetest
06:26 jaca122 joined #minetest
06:58 calcul0n_ joined #minetest
07:00 pingus joined #minetest
07:35 calcul0n_ joined #minetest
08:07 s20 joined #minetest
08:46 appguru joined #minetest
08:47 Desour joined #minetest
09:05 jaca122 joined #minetest
09:15 definitelya joined #minetest
09:35 YuGiOhJCJ joined #minetest
09:58 s20 joined #minetest
11:38 TomTom joined #minetest
11:55 vampirefrog joined #minetest
12:06 est31 joined #minetest
12:12 est31 joined #minetest
12:26 s20 joined #minetest
12:53 qqq joined #minetest
13:46 behalebabo joined #minetest
13:49 s20 joined #minetest
14:03 appguru joined #minetest
14:17 Krock Sokomine: there are a few open issues about errors and also pull requests on https://github.com/Sokomine/mg_villages/issues . Might you have time to look at them? Alternatively it could also be arranged to move the repository to minetest-mods so that multiple contributors could maintain it
14:17 Krock including you, of course.
14:26 olliy joined #minetest
14:27 TheCoffeMaker joined #minetest
14:27 erle public service announcement: mm3d is a good 3d modeling program (but you need to use the C locale, because it is confused about commas and dots in file formats when saving otherwise)
14:28 erle also don't be surprised if installing mm3d gets you blender, it's the stupidest dependency in debian ever lol
14:36 TheCoffeMaker_ joined #minetest
15:10 TheCoffeMaker joined #minetest
15:19 TheCoffeMaker_ joined #minetest
15:52 muurkha erle: thanks!
15:52 muurkha erle: glad to hear about your text rendering library and the goatseing
15:56 muurkha mm3d would benefit from a tutorial I think
16:01 erle muurkha i hope kilbith is gone for good?
16:01 erle i mean what i heard was broadly that he was always a total ass to everyone
16:01 ROllerozxa kilbith is almost certainly gone for good
16:01 erle nice
16:02 Malo95 joined #minetest
16:02 erle hey, were anyone of you at ccc camp? if so, did we maybe meet? also, anyone going to be at congress if there is one?
16:02 Malo95 hey has anyone noticed skinsdb is offline? http://minetest.fensta.bplaced.net/
16:02 Malo95 whats the deal with this, has a mirror popped up or are we without a skins dabatase currently?
16:02 muurkha I think you drove away kilbith this time
16:02 muurkha seems unlikely he's gone for good tho
16:03 Malo95 whats going on with kilbith
16:03 ROllerozxa Malo95: it's been down for a while, unfortunate but inevitable considering it's been hosted on a freehost
16:03 Malo95 is there any backup
16:03 muurkha he's been gone since the last time he argued with erlehmann
16:03 Malo95 any mirror
16:03 ROllerozxa muurkha: well he's banned and I don't think a ban appeal is on the table any time soon for him considering his behaviour
16:03 Malo95 whats the original author say, any comment from him?
16:03 muurkha ROllerozxa: that's good to hear
16:04 muurkha but he could join with another name if he wanted to grief people
16:05 Malo95 So currently there is no mirror or any way for people to get skins in skinsdb?
16:05 ROllerozxa Malo95: the hoster has been MIA for a while afaik, so something like this was pretty inevitable coming
16:05 Malo95 The mod itself ships with no skins, so if the db site it down there is also no place to download the skins.
16:05 Malo95 Ah ok so the guy is MIA too, damn.
16:05 Malo95 Some one should have backed it all up but
16:06 Malo95 it's not been down that long
16:06 ROllerozxa I'm sure some people have a backup of the skins database they can share
16:06 MTDiscord <luatic> I have one, but I don't know if I can share it :P
16:06 ROllerozxa but it was also filled with copyright infringement...
16:18 MTDiscord <bla8722> Malo95: you can also try internet archive´s wayback machine
16:20 mazes_80 joined #minetest
16:25 sparky4 joined #minetest
16:33 MTDiscord <wsor4035> I also could share a copy, not sure how legal it is though
16:34 Fleckenstein joined #minetest
16:52 Fleckenstein joined #minetest
16:59 Sokomine Krock: my problem is that i really dislike 2fa. i've forgotten my passphrase for the 2nd or 3rd time. i can still log into github but would have to change the key again. for now, i've put mg_villages on a gitlab site hosted by the server admin of the server your land
16:59 Sokomine that's a gitea instance and works password-only. but i have no idea how to sync the repositories
17:02 MTDiscord <wsor4035> if you set up remotes in your local repo, you can do git push gitea && git push github for example
17:03 MTDiscord <wsor4035> or if that gitea instance has woodpecker ci or whatever the ci for gitea is called, can make an action on commit that pushes the updates to github
17:03 Sokomine yes. but my problem is that i can't push from my local repo to github anymore as that requires a key. the password for the key is cached locally. thus i type it only once in a while. and i forget it in the meantime
17:04 Sokomine hm. if the site could push the updates to github that'd be very fine. doesn't have to be automaticly. i'd be perfectly fine with doing that manually
17:04 Krock Sokomine: hmm .. since when is 2FA enforced? I did not and probably will not set this up
17:05 Sokomine if i could tell github on its website that i want to sync the mg_villages repo with https://gitea.your-land.de/Sokomine/mg_villages that'd be great
17:05 MTDiscord <wsor4035> https://github.blog/2023-03-09-raising-the-bar-for-software-security-github-2fa-begins-march-13/
17:05 Sokomine it was for me. i couldn't proceed without setting it up
17:08 Krock hmm.. https://i.postimg.cc/wMVVFrPx/grafik.png
17:09 fluxionary joined #minetest
17:13 MTDiscord <bla8722> Sokomine: https://docs.gitea.com/next/usage/repo-mirror#setting-up-a-push-mirror-from-gitea-to-github
17:14 Sokomine krock: hm. strange
17:18 Sokomine bla: that does seem to be a good solution. looking into it right now
17:35 fluxionary joined #minetest
17:37 Sokomine ok...says it's syncinc now. hope it works! that'd be a great relief
17:53 MTDiscord <bla8722> looks like it worked
17:53 Sokomine HAH! bla solved it! my mg_villages github repositiory is up to date again :-))))
17:53 appguru joined #minetest
17:53 Sokomine rubenwardy: mg_villages is available and working again :-)))
17:54 Sokomine that's a huge relief. pushing from the command line with password is way easier than that *censored* 2fa github uses
17:55 MTDiscord <bla8722> now go fix something to check if the automatic mirroring works too lol
17:55 Sokomine but mg_villages is fixed so far :-) at least the manual update worked :-))
17:57 Krock that's great. thank you for taking care of it.
17:58 rubenwardy awesome! published on cdb again
18:00 Krock I wonder whether there's an option on github to indicate that it's a mirror
18:00 MTDiscord <wsor4035> you can turn issues off at least
18:00 Krock well that does not solve the issues though
18:00 Sokomine i was really stuck there. remembering a password that i have to use once every couple of month? not much chance :-(
18:01 rubenwardy is the gitlab repo public?
18:01 Krock Sokomine: use KeepassXC to keep track of your passwords
18:01 Sokomine 2fa is...it has its points, but most of the time it decreases security considerably
18:01 rubenwardy use a password manager, increases security by allowing your passwords to be randomly generated and all different
18:01 Sokomine well, there's some caching of passphrases involved on the command line somehow. but that makes forgetting just easier
18:01 rubenwardy 2fa improves security for those that don't have a password manager
18:01 Sokomine that's a good sum-up, yes
18:04 Sokomine still ought to offer a modpack again. but perhaps with contentdb that is less needed
18:05 rubenwardy CDB automatically installs deps, so there's no need to have a modpack with mg_villages and handle schematic
18:07 Sokomine that's good. but there are a few optional dependencies that are good to have but not necessary - like cottages (gives way more village types) and some additional village types that can be installed
18:12 MinetestBot [git] RisingLeaf -> minetest/minetest: Do not render objects that are invisble into the shadow map 6601515 https://github.com/minetest/minetest/commit/660151572fdf848ee8416eea480df42a3b317df4 (2023-08-26T18:12:17Z)
18:13 erle i did a talk on build system failure modes at ccc camp 2023 https://media.ccc.de/v/camp2023-57415-fantastic_build_system_failure_modes_and_how_to_fix_them
18:14 erle this is relevant to minetest because it is the project i know which has the most miscompiles i ever encountered
18:14 erle muurkha you might be interested
18:15 erle TL;DR: constructing a DAG for a build, then toposorting and then scheduling build steps is impossible for the general case, because you do not have enough information to construct the full DAG at the time you want to construct it. a build should rather be seen as a function that can be partially evaluated and needs to be iterated until it reaches a fixed point. think: recompile latex until the page numbers and references match up.
18:17 erle this means that no amount of fixing and testing can make DAG-toposort systems (e.g. make) get the general case right. it is easy to avoid all of these problems by using a top-down recursive build system instead.
18:17 erle i don't expect anyone to ditch cmake after the talk, but it can help to figure out when it does not make sense to spend work on fixing cmake problems once you recognize the problem is unfixable.
18:18 muurkha hmm, because for example you don't know which header files something is going to #include until you try to compile it, and some of your header files are dynamically generated?
18:18 erle yes, that is one case
18:18 erle i believe ninja has special cased c and c++ header files for that
18:18 erle but there is a simpler example
18:18 erle consider a target that needs to be always out of date at the time it is needed
18:19 erle e.g. a website footer that includes the date the page was built
18:19 muurkha that sounds like a hack to get the build system to do non-build-system things
18:19 erle the DAG thing schedules it once and every page has the same timestamp at the bottom
18:19 erle this is trivially wrong
18:19 muurkha do you have an example that wouldn't violate build reproducibility?
18:20 erle nothing violates build reproducibility, as long as you rebuild until you reach the fixed point, which you need to do anyway all the time
18:20 Talkless joined #minetest
18:20 muurkha including the date the page was built violates build reproducibility!
18:20 erle the simple case here you build using make and then use the output of gcc -MD -MF to make a new makefile and then rebuild using that is a case where you need 2 steps to get to the fixed point
18:21 erle muurkha then have the subtarget include the name of the parent target somewhere or so
18:21 erle i mean then obviously it needs to be rebuilt every single time
18:22 erle in any case, the DAG is a nice abstraction for a problem that is adjacent to, but ultimately not really, the problem a build system usually tries to solve
18:22 muurkha to me it sounds like you're saying "sometimes people want to do arbitrary computation that can access any data in the world as part of their compilation"
18:22 erle that is true
18:22 erle but what about the latex example thing
18:23 muurkha where you have to rebuild until the reference page numbers stop changing?
18:23 erle no external information, but you have to shake it until the page numbers match up with the references
18:23 erle yes
18:23 erle that is intuitively a fixed point
18:23 muurkha it is
18:23 erle and you have to rebuild *every* project until you reach a fixed point, it is only that most of the time you reach it in one or two steps, so the DAG thing kinda seems to work
18:23 erle ultimately it does not though
18:23 muurkha "work" is undefined here
18:23 erle just watch the talk and then talk to me about it afterwards? otherwise i repeat myself a lot
18:24 erle the last part about redo is only so that people know it is possible
18:24 erle to solve the issues with 4 primitves
18:24 muurkha if "work" means "compute what you want" then yes sometimes people want to compute things that aren't a conventional build system
18:24 muurkha I don't usually watch talks
18:24 erle i suggest to read the microsoft paper “build systems a la carte”
18:24 erle for the purpose of my talk, excel is a build system
18:25 erle it has inputs (cells), rules (formulas), outputs (cells)
18:25 erle and incremental rebuilds
18:25 erle also recursion etc.
18:25 erle in any case, the most common answer to my assertion is “then just don't do that” but people are doing it
18:26 erle you don't have enough info to construct a correct DAG in one pass unless you are being very careful about everything, which i have so far only seen in the embedded space (where you have maybe 12 dependencies overall. a modern C hello world has probably more.)
18:27 erle muurkha, are you familiar with DJB redo design (not the apenwarr one, it has a DAG cheating device built-in i think)
18:28 erle if yes, that solves all problems i mention in the talk, so you don't have to watch it
18:31 erle muurkha thanks for the reproducibility thing btw. but i build my webpage using redo, so it's a real problem ;)
18:31 erle muurkha do you have maybe something on build systems in your books?
18:32 erle muurkha, this is the microsoft paper https://www.microsoft.com/en-us/research/uploads/prod/2018/03/build-systems.pdf
18:34 Fleckenstein joined #minetest
18:36 erle muurkha the “wanting to compute arbitrary stuff” thing is very very common, even in reproducible builds. the errors i address are not about reproducibility of a single build, but about getting the same result between an incremental and a full build.
18:36 erle for that you need the repeated evaluation fixed point top-down thing to make it easy
18:37 erle if you don't want incremental builds, you can always rebuild everything from zero every time
18:37 erle which is trivially correct, unless your build system has no fixed point
18:37 erle i have seen makefiles where the correct binary fell out only every second time
18:37 erle because oscillations lol
18:42 HelenasaurusRex joined #minetest
19:02 est31 joined #minetest
19:02 gxt joined #minetest
19:04 muurkha I'm vaguely familiar with DJB's redo, thanks to apenwarr and to you
19:05 muurkha I keep meaning to read the SPJ paper
19:07 muurkha I agree that Excel is a build system; I've written a bit about them (though arguably nothing written on the topic by someone who hasn't read the SPJ paper merits being read)
19:08 muurkha probably the most relevant piece I've written is https://dercuano.github.io/notes/dependency-bibliography.html
19:08 muurkha but there's also https://dercuano.github.io/notes/blob-computation.html and https://dercuano.github.io/notes/blob-computation-notes.html
19:11 muurkha you'll probably also be interested in https://dercuano.github.io/topics/self-adjusting-computation.html
19:14 mrkubax10 joined #minetest
19:18 mrkubax10 joined #minetest
19:23 erle muurkha the apenwarr implementation of redo caches dependency checks in ways that make it easier to implement, but ultimately result in nasty surprises. i wrote my implementation only because apenwarr would not fix these things (because it would make the implementation arguably correct, but slower).
19:31 erle muurkha, ccache is subtly wrong
19:31 erle basically it uses the wrong cache key
19:31 erle i forgot what the correct one was
19:32 erle but you sometimes get false positives in the cache
19:32 erle which means a wrong build or no artifact at all
19:44 liceDibrarian joined #minetest
19:47 HelenasaurusRex joined #minetest
19:52 diceLibrarian joined #minetest
19:58 muurkha erle: not surprising
19:58 muurkha this reminds me of the C vs. Lisp debates of 35 years ago
20:12 jaca122 joined #minetest
20:17 erle muurkha in what ways?
20:17 erle i am 35, so
20:17 erle no memories
20:21 liceDibrarian joined #minetest
20:32 erle muurkha so i came up with this tool yesterday, redo-gcc
20:32 erle basically it invokes gcc and straces the compiler
20:32 erle and records every file gcc did not find as a non-existence dependency and every file it found as a dependency
20:32 erle the latter according to -MD -MF
20:33 erle good idea?
20:37 appguru joined #minetest
21:05 proller joined #minetest
21:05 TomTom joined #minetest
21:10 proller joined #minetest
21:15 muurkha erle: yeah, there are a lot of notes on that kind of thing in Dercuano
21:16 muurkha I think it's a good idea
21:23 erle muurkha so how do you deal with non-existence dependencies normally?
21:23 erle e.g. the target being invalidated if a new file or new build rule is created
22:20 MTDiscord <vejou> does this message show on matrix
22:24 MTDiscord <mistere_123> No
22:24 MTDiscord <mistere_123> The bridge is currently down. We might have a fix in a few hours. Or not, who knows
22:28 MTDiscord <vejou> oh i thought the whole thing was supposed to end
22:28 MTDiscord <vejou> did that change
22:29 MTDiscord <mistere_123> Not sure what you mean...
22:29 MTDiscord <vejou> i thought whatever we were using for the bridge was gonna stop servicing
22:31 MTDiscord <vejou> https://discord.com/channels/369122544273588224/747163566800633906/1144928932383162379
22:32 panwolfram joined #minetest
22:33 [MTMatrix] joined #minetest
22:35 muurkha erle: I think nonexistence dependencies are a really interesting question
22:36 [MTMatrix] MisterE | Surprise: the matrix bridge worketh, thanks luatic.
22:36 muurkha thanks luatic!
22:38 muurkha one crude way to deal with them is to treat them as read dependencies on the directory containing the nonexistent file.  this is "sound", in the sense that it will correctly rebuilding things every time rebuilding is necessary, but not "complete" in the sense of *only* rebuilding things for which rebuilding is necessary
22:38 muurkha completeness is generally considered an infeasible goal because it requires distinguishing changes to source files that affect the compiler's output from changes that don't, which in general requires solving the halting problem for the compiler
22:41 [MTMatrix] joined #minetest
22:41 muurkha but recompiling the entire world every time you add a new file to /usr/include might be too far from completeness to be useful
22:42 MTDiscord <mistere_123> sorry, one more test
22:42 fluxionary joined #minetest
22:42 muurkha in things like https://www.mail-archive.com/kragen-tol@canonical.org/msg00146.html "Make for URLs, or dependency-directed compositing" nonexistence dependencies are straightforward
22:42 erle muurkha my redo implementation does ne deps correctiy i think
22:42 erle you can't really model them properly as normal deps
22:43 erle also just to be clear, make is unfixable
22:44 muurkha yeah, I wasn't suggesting literally using make
22:44 erle every DAG-toposort system i have seen can not really accomodate NE deps
22:44 muurkha but in that setup, GETting a resource that is currently nonexistent produces a representation with a 404 error code, and as long as that representation is a valid representation for that resource, you don't trigger a rebuild
22:44 muurkha it doesn't require any special handling
22:45 erle looks like an adjacent, but different problem
22:45 erle i solved that with redo-stamp
22:45 erle which can declare a target semantically up to date while it is being built
22:45 muurkha how?
22:45 erle this is a bit weird
22:45 erle but exit code 123 means “even though this target was being scheduled for rebuild, during the rebuild it turned out it was actually fine as it is”
22:46 erle so the build system then works with the updated info that the target was up to date all along
22:46 erle p sure you can not do that with the toposort
22:46 muurkha btw, I think it would serve you well rhetorically to stop claiming that system X is "incorrect" because, although it solves problem X' correctly as the author intended, it doesn't solve problem Y' that you think is more important
22:46 erle a simple use case: you have something which is byte-wise different but semantically identical
22:47 erle library got recompiled with or without new symbols stuff or so
22:47 muurkha aha, now I understand.  yes, that seems like a good approach
22:47 muurkha although you can do it in a purer DAG system by adding an extra build step which extracts out the semantics into a new bytewise identical file
22:48 erle muurkha in terms of build systems and redo in particular i use “incorrect” usually for optimization attempts that result in build differentials from the most naive implementation.
22:49 muurkha that approach, although it's more expensive and hard to work into existing systems, does have the advantage that it prevents a build step that incorrectly† returns 123 from incorrectly† preventing later things from being built
22:49 erle wdym
22:49 erle i do not use “incorrect” for stuff that merely takes longer btw
22:49 muurkha well, suppose you have a library which may be built with or without debugging information
22:50 erle yes
22:50 muurkha maybe that debugging information doesn't end up in your final executable and so it doesn't matter
22:50 muurkha as an alternative to having the build step that builds the library return 123 to say that all that has changed is the inconsequential presence of this debugging information
22:51 muurkha you can add another build step that makes a stripped version of the library
22:51 muurkha and then link with the stripped version of the library
22:51 muurkha which will be bytewise identical if all that changed was the no-longer-present debugging information
22:52 muurkha a blob-hash-based rebuild system will detect this and not bother to relink the executable
22:52 erle an example of my usage of “incorrect”: take the apenwarr redo-always. it does, contrary to its name, not declare a target as always out of date in that particular implementation of redo, because of some caching. every implementation of redo that is simpler and every description of the command i have seen though claims that the target is always out of date. the difference is a caching layer that solves problem X' which is
22:52 erle not problem X, which is solved according to the documentation and also solved by every simpler implementation.
22:53 erle apenwarr probably thought that it would not make a difference at first, but the unit tests for apenwarr redo only work because something reaches inside the state database of the build system at runtime and forces it to *actually* rebuild always.
22:53 LizzyFleck joined #minetest
22:53 erle so, do you have a better term for “programmer added more complexity and is now solving a different problem than the original one”
22:53 muurkha but I don't think apenwarr had the objective of behaving indistinguishably from a simple build script in shell; if he did he would have accepted your bug report
22:54 LizzyFleck joined #minetest
22:54 muurkha I think he wanted to write a build system that he liked better than make
22:55 erle yeah, but he ended up trying to write a top-down recursive build system in terms of a DAG-toposort-bottom-up one which is generally not possible
22:55 erle and the reason he does not accept my report is basically “why would anyone do this”
22:56 erle i mean i know why apenwarr does this, parallelism is way easier to do with X' than with X
22:56 erle and you can cheat a lot on dependency checks
22:56 erle but ultimately, it results in incremental builds with apenwarr redo that do not match a full rebuild
22:56 erle don't quote me on that, i'm sleepy
22:57 erle but i consider a tool not doing what it's own documentation suggests as incorrect
22:57 erle oh and it's also a composition issue
22:57 erle you basically can not “nest” invocations of redo (which is why the unit testing does not work)
22:57 Fleckenstein joined #minetest
22:58 erle in any case, it does no longer solve the original problem, but a related one that is easier to solve
22:58 erle lots of software does this with good reasons
22:58 erle take fast inverse square root
22:58 erle it's incorrect (and illegal)
22:58 erle but it did exactly that
22:58 erle so how would you call the scenario “programmer choses to solve X' instead of X” in general?
22:58 erle i mean, it is not always wrong to do so
23:00 erle i suggest to look at the implementation yourself to get the picture btw
23:01 muurkha erle: I think "why would anyone do this" can be translated as "I'm not trying to solve the problem you correctly identify that this software does not solve"
23:01 erle or strace it and find out it does way fewer dependency checks than it logically would have to do
23:02 muurkha I think the general term for that scenario is "Worse is Better"
23:02 erle yeah, but in this place, better is better
23:02 muurkha you could be right about that, but it doesn't go without saying
23:03 muurkha I mean it isn't always true so it requires a convincing demonstration in any particular case
23:04 erle my implementation is a fraction of the code and does not have a dependency on python or sqlite and IIRC it is faster for everything but parallel builds where jobs take less than 1 second.
23:04 erle something like that
23:04 muurkha nice
23:04 erle the funny thing is that if you benchmark it you will notice that apenwarr redo can still be faster
23:05 erle but the reason is because it cheats on dependency checks i think
23:05 erle i can do the same: check no dependency, output an empty file
23:05 erle suddenly i am the fastest
23:06 erle in any case, i think i am a “better correct than fast” person and apenwarr is a “better fast than correct” person and i just lucked into a constructive proof that nope you don't need sqlite or so many lines of python.
23:06 erle i am not so sure about the parallelism though
23:06 erle if you know about the jobserver thing (with the fifo tokens), maybe you could look into it
23:06 erle currently i am busywaiting with sleep 1
23:06 erle which is certainly not optimal
23:07 erle also apenwarr redo has this output interleaving for parallel builds which i find nice
23:08 muurkha not familiar with the jobserver thing
23:08 muurkha have you looked at how GNU tail works on Linux, btw?
23:08 erle oh, this is a trick you'll like
23:08 muurkha tail -f I mean
23:08 erle so you want to schedule N jobs in parallel
23:09 erle you create a fifo, write N tokens into it (bytes? i forgot)
23:09 erle each job starting tries to read a token from the fifo
23:09 erle each job done writes one there
23:09 erle so you start all the jobs
23:09 muurkha that's a good idea.  so a pipe is a semaphore
23:09 muurkha (with a maximum capacity of PIPE_BUF, but that's good enough for almost all cases)
23:09 erle i heard a girl i explained this to say the same thing a few days ago
23:10 erle so for recursive builds this is a bit weird, because you don't want to block on subtargets
23:10 erle so sometimes you need additional arithmetic on when to add or remove tokens
23:10 erle muurkha, i wrote this some time back, it might do what i described http://news.dieweltistgarnichtso.net/bin/jobserver
23:12 erle but look into my redo-ifchange to see it in action
23:13 erle i wonder why i did the argument thing that way
23:13 erle i probably had a reason
23:13 erle no idea
23:16 erle muurkha i got the fifo approach from simon richter (?) years ago when we walked through berlin at night. i believe that he mentioned some software uses it. maybe the make jobserver? no idea
23:16 muurkha for a recursive build, when you block a task because it's missing a prerequisite, maybe you could put a token back into the pipe
23:17 muurkha for as long as you're blocked
23:17 erle maybe i am doing that, look at redo-ifchange
23:17 muurkha that way only the actively compiling tasks are counted
23:18 muurkha not familiar with this unlink shell command
23:18 erle it calls unlink(2)
23:18 erle to unlink, and possibly delete, a file
23:18 muurkha well, presumably, but isn't that what rm does?
23:19 muurkha we should probably have a place to discuss this where it would be on topic
23:19 muurkha maybe #scannedinavian
23:19 erle it is much safer than rm and also possibly more efficient, because it does not do anything else than accept a single file that can not be named --help or --version
23:20 erle rm -rf argument accidents go wild
23:20 erle unlink at most deletes one file
23:20 muurkha though maybe it's healthy for sfan5 to see you having a conversation where he isn't flaming you ;)
23:20 muurkha apparently unlink is, much to my surprise, in coreutils
23:21 erle i always use it instead of rm -rf if i can do that
23:21 erle i wonder if minetest is still using a vulnerable libpng hehe
23:21 erle i did mention that before some release
23:22 muurkha pretty sure the copy of minetest I'm running on here is linked with the Debian system libpng
23:22 erle ah
23:22 erle only windows users at risk then hehe
23:22 muurkha libpng16.so.16 => /lib/x86_64-linux-gnu/libpng16.so.16 (0x00007fc84b1fa000)
23:22 muurkha yeah, fuck them anyway
23:23 erle muurkha btw, if i did not mention it, uncompressed TGA fed through zlib is one of the best image formats for textures of the type and size of minetest. i found that when writing my text rendering library months ago.
23:23 muurkha that's very surprising, the Paeth compressor in PNG doesn't buy you aanything?
23:23 erle it was indeed surprising
23:23 erle and it also holds true for bigger image sizes, up to a limit
23:24 erle i believe there are two reasons for it
23:24 muurkha I mean zlib is written by two of the authors of libpng, which uses it for compression
23:24 erle first, TGA has *way* lower overhead, no checksums etc. we already know that even an uncompressed TGA can beat a small PNG on filesize, but the sizes have to be like 8×8 or so.
23:25 erle second, the compression in PNG is done by chunk if i am not mistaken.
23:25 erle which is obviously suboptimal
23:25 erle oh and third
23:25 erle the whole framing structure of PNG is hard to compress because of the checksums
23:26 erle i think
23:26 muurkha hmm, apparently I was wrong about that; Gailly and Adler aren't credited in libpng
23:26 erle basically, whatever was done at the quake era (put TGA in PK3 archives, i.e. basically zip files) is the best possible solution for small textures (for surprisingly large values of small)
23:27 erle i only ever found that out when i rendered a lot of text to a png and tried pngcrush and zlibbing a tga
23:27 erle sorry
23:27 erle i mean when i rendered a lot of text to a TGA, then converted it to PNG and then both compressed the TGA and used pngcrush on the PNG
23:28 erle it's also a write-speed issue
23:28 muurkha hmm, have you tried feeding uncompressed 8×8 TGAs through something like ncompress?
23:28 erle whatever ncompress is, it is not in the lua api of minetest
23:28 muurkha LZW
23:28 erle also 8×8 is not the size i am going for
23:28 erle give me a moment
23:30 muurkha zlib.compress(b'') in Python 3 gives an 8-byte output
23:31 muurkha compress </dev/null outputs 3 bytes
23:32 muurkha echo xyz | compress outputs 8 bytes, but echo xxx | compress outputs 7
23:32 muurkha there's also shoco but it's mostly intended for ASCII (for which it guarantees zero expansion)
23:34 erle i have whole writeup on the issue already, need to publish it
23:34 erle as it is highly unintuitive for most (including me)
23:35 erle so lets take flowers_waterlily_bottom.png from minetest_game, the thing i have here is 327 bytes and does not get smaller when i use pngcrush -brute
23:36 muurkha that's 40 times larger than the zlib overhead
23:37 erle so i chose that picture and saved it using mtpaint as a TGA image, probably not optimal, but bear with me here
23:38 erle the TGA is 390 bytes, but when using zlib-flate -compress on it, i have 302 bytes
23:38 erle and now the interesting thing is that crushing a PNG takes a lot of time
23:38 erle but dumping a bitmap and compressing it not
23:38 erle because the png crushers often try a lot of options
23:39 erle the image is atypical though
23:40 muurkha I wonder if you could beat it by Paeth-predicting the TGA and zlibbing the residuals
23:40 muurkha TGA overhead seems to be 18 bytes
23:40 erle png overhead is like 70 bytes
23:40 erle most minetest textures are a bit more than 100 bytes
23:40 erle go figure ^^
23:41 muurkha I mean, I wonder if Paeth-predicting the TGA would make the zlib output smaller or larger
23:42 muurkha a different approach would be to put a bunch of textures into one sprite sheet
23:42 erle let's try flowers_dandelion_white.png, 142 bytes. pngcrush makes it one byte bigger, so i use optipng, which does not optimize it any further.
23:42 muurkha if they were all the same width, which is common for textures, you could store one height per texture
23:44 erle flowers_dandelion_white.tga is 324 bytes, but becomes 98 (!) bytes after zlib-flate -compress
23:45 erle this is the typical case
23:45 erle this is actually a case of worse is better i guess
23:45 erle because zlib + tga reader is much less complexity than having a png reader or optimizer
23:45 erle you get faster reading and writing speed and smaller filesize
23:46 erle so basically just by implementing a reader for tga.z in minetest you could reduce filesizes of most textures by about 30%
23:47 erle and it would be massively faster than the optipng orgies that mods have to run nowadays
23:47 erle as my concern is with signs, i of course want it for ingame texture generation
23:48 erle also, if anyone had put any thought into minetest.encode_png() it would probably not exist (i keep saying that basically since it was introduced), because IIRC it does not use any predictor, so it is always worse than just zipping up the pixels
23:49 erle the spritesheet thing is obviously a good idea, yes – but you lose some composability there
23:50 erle btw, if you go implement tga.z, also implement obj.z or so
23:50 erle i think obj was the 3d text format, right?
23:51 erle muurkha, did you ever implement bidi text?
23:52 rubenwardy I feel like this would be better as a PM
23:53 erle the build system thing, probably. the TGA thing, not at all. this is good stuff.
23:53 erle and relevant to minetest, btw
23:54 erle for example, if you put textures in item meta (which i think you do), they can be 30% smalller with that trick
23:54 erle smaller meta = less lag
23:54 erle especially if you put *generated* textures in item meta, since you prob won't call optipng in your lua mods
23:55 erle anyways, if “you can have the same texture quality, but save 30% on transfer size” is not relevant, i don't know why ppl optimize their pngs at all ^^
23:56 erle thank you for coming to my TED talk :P
23:56 muurkha erle: no, I haven't done bidi.  or even hyphenation and justification.  we should probably take this somewhere where it's not off-topic
23:56 erle nah, i don't want to talk about it
23:57 erle it's just my minetest pure-lua unicode text rendering library does bidi text (badly, because incomplete)
23:57 erle and i wondered if i can hand it to someone who can do that correctly
23:57 erle ;)
23:57 erle i'll probably just release it in the broken state, as i haven't worked on it in a while
23:57 erle it can do every character in unifont and also combining characters, that should be enough to get better signs
23:58 muurkha that sounds awesome!
23:58 muurkha I'd love to have combining characters in my signs
23:58 erle the only issue is you need to provide your own unifont.hex and unifont_upper.hex
23:58 muurkha although last I checked I can't actually type accented letters in Minetest, even precomposed
23:59 erle that's an issue for someone else. i can render them in both forms.
23:59 erle also i'm pretty sure there is some possiblity to optimize tga_encoder a tiny bit, but i have not done that either

| Channels | #minetest index | Today | | Google Search | Plaintext