Time Nick Message 05:02 est31 is this << stuff really that bad? 05:03 est31 When I edit or read network code, I'm interested in the logic 05:03 est31 what the program does 05:03 est31 I dont want to waste my time scrolling over 05:04 est31 resp_pkt.putString(str); 05:04 est31 resp_pkt.putInt(1); 05:04 est31 resp_pkt.putCString(str,3); 05:04 est31 and so on 05:04 est31 and splitting it up just hides the problem 05:05 est31 because then you can't get an overview of what happens 05:05 est31 with << I can use kate's doubleclick word highlight feature and quickly see where data is accessed 05:05 est31 ok that one is perhaps replaceable by doubleclicking resp_pkt 05:19 est31 Zeno`, about #2657, do you know whether /MT option is harmful or bad? 05:19 ShadowBot https://github.com/minetest/minetest/issues/2657 -- Fix several MSVC issues by SmallJoker 05:19 est31 because if not then I'll merge the patch 05:20 est31 (cant test though) 05:32 est31 whatever, its used elsewhere too 05:32 est31 people will have to recompile when they update windows their fault 05:33 est31 (or perhaps windows has binary compatibility?) 05:33 est31 I think I remember faintly of linus saying something around that linux doesnt promise binary compat 05:33 est31 perhaps that was meant in comparison with windows 05:36 Zeno` I have no idea what the MT option is 05:37 Zeno` oh multithreaded linking 05:37 Zeno` umm, I dunno tbh 05:37 est31 MD is multithreaded too 05:37 est31 but src/cmakelists.txt has mt too 05:37 Zeno` :/ 05:38 est31 so then, if the binary interface of windows sys libs change, users are already screwed 05:38 Zeno` I really don't know. Krock is (basically) the only one who makes MSVC builds so... 05:40 est31 what do you think about adding this to gitignore: 05:40 est31 +## Files related to minetest development cycle 05:40 est31 +/*.patch 05:41 Zeno` It'd be nice 05:41 est31 Then I'm merging 05:41 Zeno` I have it already in my personal repo 05:41 est31 there are tracked files inside build/android but those arent catched because its /*.patch and not *.patch 05:42 est31 pushed 05:45 hmmmm est31, you've got to remember to add newlines to the end of files 05:45 est31 didnt I? 05:46 hmmmm not for test_utilities.cpp 05:46 hmmmm but thank you for adding a unit test 05:46 hmmmm we need more of this 05:46 hmmmm oh and not for json/CMakeLists.txt either 05:46 hmmmm your editor should have an option to add newlines to the end of files 05:46 est31 hmmmm, I added them: https://github.com/minetest/minetest/commit/6626a3f72f66703a161abccab90cffcec31c3932 05:46 hmmmm if you don't do this it causes an undisableable compiler warning, and git/github moan about it too 05:47 est31 I dont see the red "newline missing" symbol 05:47 hmmmm oh okay 05:47 hmmmm it showed that in the pull request 05:47 est31 yes krock didnt add them 05:47 hmmmm ohh derr 05:47 est31 I removed them 05:47 hmmmm that's krock's patch not yours 05:47 hmmmm sorry 05:47 est31 added them* 05:48 est31 I also moved the s32 cast out like Zeno` suggested at my patch 05:48 Zeno` ? 05:48 est31 I wrote return (s32)(f < 0.f ? (f - 0.5f) : (f + 0.5f)); 05:49 Zeno` oh ok 05:49 est31 instead of return (f < 0.f ? (s32)(f - 0.5f) : (s32)(f + 0.5f)); 05:49 Zeno` yep 05:49 hmmmm you don't really need that cast 05:49 hmmmm it's implicit due to the return type 05:49 Zeno` you don't but see my comment in the PR 05:49 est31 yes Zeno` has said that 05:50 hmmmm i don't see it 05:50 est31 its outdated 05:50 hmmmm oh nevrmind it hid it 05:50 hmmmm man 05:50 hmmmm yet another hack tacked onto our make system 05:51 Zeno` I was concerned that somebody might one day change the return type to double to match C's round() and stupidly remove the cast 05:51 hmmmm that cmake file is frankly a wreck 05:51 hmmmm it's because nobody here really, truly understands CMake more than one needs to be to be functional with it 05:56 Zeno` quite funny really. I'm normally the one getting angry about casts where they're not necessary :D But in this case it's more "functional" (if you get my drift) 06:03 est31 btw, free does need casts, when you are freeing a const void * pointer 06:04 Zeno` err 06:04 est31 otherwise it wont compile 06:04 Zeno` you should not be freeing const void pointers lol 06:04 est31 they are freed automatically??? 06:04 Zeno` no 06:04 est31 so leak them? 06:04 Zeno` but why is it const? 06:05 est31 because API 06:05 est31 shitty API 06:05 Zeno` (or rather why is it pointing to const data) 06:05 Zeno` well if it's a shitty API then yeah, you'd need to cast it because you're free()ing something that is supposed to be constant 06:06 Zeno` Where does this occur? 06:06 est31 I just dont understand why C allows to modify const data 06:06 est31 https://github.com/minetest/minetest/pull/2620/files#diff-4655ab09ebe57e0ea50afe7ea42c7973R90 06:06 est31 thats the method 06:06 est31 or some other inside that file 06:07 Zeno` Oh, that's the developer's attempt at being opaque 06:07 Zeno` I don't see where the free is though 06:08 Zeno` ah 06:08 Zeno` ok 06:08 Zeno` that's dumb :) 06:09 Zeno` it shouldn't be const in the first place if the caller has to free it :/ 06:09 est31 eg here https://github.com/minetest/minetest/pull/2620/files#diff-34f48ad91ac6c202ac60b0348ae90e30R1024 06:09 Zeno` anyway, not our problem I guess 06:10 Zeno` crazy 06:11 est31 so when "should" const be used? 06:11 Zeno` when the data is constant 06:11 Zeno` and you should not modify it 06:11 Zeno` (or you're passing something to a function where the function does not modify it) 06:12 est31 I guess I'll change the library then 06:12 Zeno` Nah leave it 06:13 est31 I've more or less forked it 06:13 est31 https://github.com/est31/csrp-gmp 06:14 est31 already 12 patches by me :) 06:18 sofar do you want me to ask some folks to do a security review of it? 06:18 est31 would be great :) 06:18 sofar my first comment would be: kill SHA-1 06:18 est31 I guess though that minetest itself needs one too 06:19 sofar it likely does 06:19 est31 I dont use sha-1 06:19 sofar README says it's in the code 06:19 sofar that's what I saw 06:20 est31 yes old authentication uses sha-1 06:20 est31 ah you are at csrp-gmp 06:20 sofar am I looking at the wrong tree? 06:20 est31 no 06:21 est31 csrp-gmp and my srp patch for minetest are different things 06:21 est31 I try to keep them even but one of the changes is the hash method 06:21 est31 btw, sha-1 isn't *that* bad for password hashing 06:22 est31 I mean sha-1 is still strong for second-preimage attacks 06:24 hmmmm i think since it's technically a fork of csrp we're using now, you should clean up the interface at some point 06:24 hmmmm i.e. cut that crap where the author attempts to make the srp structure opaque 06:24 hmmmm it's messy 06:24 est31 why? 06:24 hmmmm like i said... mess 06:25 est31 so people start relying on the internal struct, the implementation changes, and bam they have a problem 06:25 hmmmm i very much, highly, highly doubt people will not rely on the internal struct. 06:26 hmmmm when's the last time you've seen people access a FILE ? 06:26 est31 so where exactly does the ugliness show up? 06:26 hmmmm when you need to cast things just in order to free them 06:26 hmmmm so either that or don't leak any details at all and put it all in srp_free() or something 06:27 est31 there is something like that 06:27 hmmmm why aren't you using it then 06:27 est31 I am 06:27 est31 its only catching a small part 06:27 hmmmm huh 06:27 est31 I'll document what is freed and what not 06:29 est31 I've updated the PR and fixed most things 06:29 est31 the casts are still open 06:30 est31 about auth.{cpp,h} location, where do you think they should be? 06:30 est31 read this: https://github.com/minetest/minetest/pull/2620#discussion_r29312976 06:30 hmmmm i think the main directory 06:30 hmmmm authentication is a central part of multiplayer 06:31 hmmmm it's not a utility at all 06:31 hmmmm that's like if i put mapgen.cpp in util 06:32 hmmmm script apis in l_util.cpp doesn't necessarily mean that they expose functionality from src/util/ 06:32 hmmmm i mean what about l_setting_set()? that's in settings.cpp 06:33 hmmmm just because a directory is 'cramped' doesn't mean that you should put a new file in an inappropriate location... we need to move other files to a more organized area 06:33 est31 yea the cramped argument is bad 06:34 hmmmm hrmm 06:34 est31 ok then ill put it into main src dir 06:34 est31 what about srp.cpp? move it too? 06:34 hmmmm i never wrote out my file-move-migration roadmap 06:34 hmmmm hrmm 06:34 hmmmm i thought it was srp.c 06:34 est31 no I made it cppp 06:34 hmmmm i have mixed feelings 06:34 est31 because I used pcgrandom 06:35 hmmmm should it be considered third party code?? 06:35 est31 I want to keep the diff between that file and csrp-gmp small 06:36 est31 if you want I can move csrp-gmp to the minetest group so that all of you can change it 06:37 hmmmm hmm 06:38 hmmmm so you don't consider srp.cpp part of minetest, or do you? 06:38 hmmmm it's up to you i think 06:38 hmmmm how do you get randomness in your fork? do you just read everything from the system random? 06:39 est31 yes 06:39 est31 urandom 06:39 sofar that's all you can do 06:39 sofar or use PRNG or a hw PRNG 06:39 est31 urandom is ususally fast enough 06:39 est31 and it is also secure 06:40 hmmmm hmm 06:40 hmmmm why did you use PcgRandom again?? 06:40 hmmmm I mean if you're using the hardware random already for seeds to pcgrandom i'm not sure what the point is 06:41 hmmmm we assume that the system random is secure 06:41 est31 yea perhaps thats a good idea 06:41 est31 just what to do on exotic platforms? 06:41 hmmmm mmeh 06:42 est31 I mean right now we are initializing pcgrandom with a constant and some time there 06:42 hmmmm i don't know 06:42 hmmmm well the implementation for pcgrand is simple enough 06:43 est31 I can use it under MIT? 06:43 hmmmm why not add a very small portable version of pcgrandom? 06:43 hmmmm yes 06:43 est31 great 06:43 hmmmm what is your current license? 06:43 est31 MIT 06:43 hmmmm ok 06:44 hmmmm as for the seed I would've recommended something like 06:44 hmmmm ((intptr_t)getpid() ^ (intptr_t)time(NULL) ^ (intptr_t)printf); 06:45 hmmmm hrmm 06:45 hmmmm or wait, getpid() is posix 06:45 est31 I'm doing this right now: https://github.com/minetest/minetest/pull/2620/files#diff-2f6369328116e9b654242a7597658a48R534 06:45 hmmmm time(NULL); is good 06:45 hmmmm hrmm 06:46 hmmmm I would say gettimeofday() but compatibility for that frankly sucks 06:46 hmmmm the problem with time(NULL) is that the seed is the same for instances started within that same second 06:46 hmmmm gettimeofday() has a reasonable difference 06:46 hmmmm why do things need to be so imcompatible!? 06:47 est31 yea :/ 06:50 est31 this is why its good to have threading in c++11 06:50 est31 no need to use porting tricks 06:50 hmmmm hindsight is 20/20 06:50 est31 ? 06:51 hmmmm in any case I'm looking through my c89 spec and it doesn't seem like there's any really good ISO C conformant way to get a seed other than time(NULL) 06:51 hmmmm sorry :/ 06:54 est31 what about clock() ? 06:55 hmmmm oh yeah that helps actually 06:55 hmmmm time(NULL) ^ clock() 06:55 est31 great 06:56 hmmmm clock helps but you can't really be sure about its quality 06:56 hmmmm nothing is defined about it other than it's monotonically increasing 06:57 est31 lol 06:57 hmmmm rather, there is CLK_TCK 06:57 hmmmm hrmm 07:12 est31 so I'll use pcgrandom for non-windows operating systems where no /dev/urandom is available. on other platforms I think its better to have a resource which is reseeded 07:12 est31 from time to time 07:25 kahrl on windows you could use CryptGenRandom 07:30 est31 yup using that 07:31 est31 (not for the patch but for csrp-gmp) 07:31 est31 goal is to unify, then cryptgenrandom seems best 07:59 est31 hmmmm, how would you propose to open files? 07:59 est31 not with FILE * then with what? 08:00 hmmmm why not file? 08:00 est31 when's the last time you've seen people access a FILE ? 08:00 hmmmm that was referring to opaque structures 08:00 est31 ah ok 08:09 est31 ok, now using unified random 09:11 sfan5 >Minetest aef1b41 09:11 sfan5 what the fuck is this 09:12 sfan5 where is the version 09:12 sfan5 [...] "Minetest/aef1b41 (Linux/3.19.3-3-ARCH x86_64)" "-" 09:12 sfan5 also this is wonderful for statical purposes 09:12 sfan5 not 09:14 sfan5 ..would be nice if it could displays the version if there are no tags in the repo 09:14 sfan5 -s 09:21 est31 here we are again 09:21 est31 lemme see I had a PR for that... 09:22 est31 sfan5, #2357 might help 09:22 ShadowBot https://github.com/minetest/minetest/issues/2357 -- Make git version discovery work on master by est31 09:22 est31 only user agent modifications have to be done 09:26 sfan5 est31: that code looks hacky 09:26 sfan5 what i would do is just fix it next release (tag master, not stable-0.4) 09:26 sfan5 (or merge them or whatever) 09:27 est31 why does it only display the hash? 09:28 est31 so in theory it should output something with 0.4.11, no? 09:31 sfan5 i used --depth=1 09:31 sfan5 that means there are no tags in the repo 09:31 sfan5 a lot of android versions have this too 09:32 sfan5 it would way easier to identify them if they still had the version 09:32 sfan5 it's not like tags are the only way to get the version 09:38 est31 yes 09:38 est31 I think I have a fix 09:38 est31 (at least in my brain, have to code and test it) 09:57 est31 sfan5, what about this: https://github.com/est31/minetest/commit/4a9c8ce10bc8fcc652fc57d99f691d91ad8f0487 09:58 est31 Its same behaviour as before when there are tags, only printing something like "0.4.12-dev-4a9c8ce" when no tags are found in history 09:59 sfan5 that looks like it might work 11:46 Kopharex Hello everyone 11:47 Kopharex I was wondering if someone could explain to me, a humble c++ beginner, how the minetest world generation works. 11:53 celeron55_ at what level? 11:54 celeron55 are you interested about the overall framework or maybe about the noise techniques, or what? 11:55 Kopharex I'm interested in a generic overview 11:55 Kopharex I'd like to create a world generation library as an exercise 11:56 Kopharex I got that perlin noise is used to create chunks, but i'm not sure how you actually do that 11:56 Kopharex The parameters in the noise function etc... 11:57 Kopharex and how that doesn't result in completely different chunks 11:57 Kopharex I'd like to understand so i can write a diagram for myself to use 11:57 celeron55 so you _do_ want to know about how perlin noise is used 11:57 Kopharex Yes, if you don't mind. 11:59 celeron55 i'm going to try to google a good introduction to this before trying to explain myself, because this is quite common in game programming 11:59 Kopharex Thanks 12:01 celeron55 hmmh, well i think you can just search for "perlin noise world generation" and get a lot of information, but i'll say a thing about chunked generation 12:01 celeron55 the thing about perlin noise is, you can query the value at a coordinate independently of anything else you might be doing 12:02 celeron55 and given the same seed and coordinate and parameters, it's going to be predictable 12:02 Kopharex i see 12:03 celeron55 so minetest can generate a chunk, and not care about what happens near it; it uses the global coordinate system to query the perlin noise so it's naturally contiguous between chunks 12:05 celeron55 this is of course possible only as long as the generator isn't modified 12:06 Kopharex ok 12:06 Kopharex so that's how the terrain is generated 12:06 Kopharex what about oceans? 12:06 celeron55 well i mean, that's how we keep it contiguous between chunks 12:07 Kopharex do you just set water under a level after the generation happened? 12:07 celeron55 of course there are many things related to for example performance and storage that you need to keep in mind, but the subject gets kind of broad if we go there 12:07 celeron55 there's generally a constant water height 12:07 Kopharex ok 12:08 Kopharex how do you create biomes after the generation? 12:08 Kopharex there were cells i recall 12:08 celeron55 some generators (see paramat's work) manage to make rivers and small lakes that can be at higher elevations 12:08 celeron55 i'm not familiar with how he does those 12:09 celeron55 there are quite many biome systems 12:09 celeron55 the simplest ones just use a few pre-selected noise parameters and have hardcoded logic for deciding based on those biome noises 12:10 Kopharex ok 12:10 celeron55 some create eg. a humidity and temperature noise and base their biome selections on those 12:12 Kopharex what if i have a container of biomes, dynamically added 12:12 celeron55 i think the built-in "v5"/"v7" biome system uses something like that and dynamically allocates biomes to a 2d result space of those two noises... or something 12:13 Kopharex some biomes include conditions, right? 12:13 celeron55 https://github.com/minetest/minetest/blob/master/src/mg_biome.cpp#L86 12:13 Kopharex like the minecraft extreme hills biome 12:13 celeron55 this is how the built-in biome system decides which biome to use 12:14 celeron55 each biome has an ideal point in those two parameters and it picks the one that is closest to whatever the noises say at a given position 12:14 Kopharex i see 12:15 Kopharex thanks for the info, i'll try to work out a flowchart. 12:15 celeron55 i don't think minetest's internal implementations ever looks up anything from the biome when generating the ground shape 12:15 celeron55 but of course a fancier system could 12:17 celeron55 you'll need to strike a balance between useless and useful complexity; useless complexity tends to make things slower and hard to understand and tune 12:18 Kopharex i was also thinking that being indipendent units chunks would be perfect for threaded optimization 12:19 celeron55 yeah it is; note that when you generate for example trees, the trees must be able to be placed between the chunks so that parts of them are on both of them 12:19 celeron55 you need some kind of a merge algorithm at the end 12:20 celeron55 or some other way of dealing with it 12:20 Kopharex couldn't you just pick a block and generate the structure around it? 12:20 celeron55 MT's multithreaded generation is kind of broken at the moment because that functionality is a bit broken 12:21 celeron55 pick a block? 12:21 Kopharex yeah, pick a block that satisfies a set of condiotions 12:21 Kopharex like if you wanted to create a mineshaft 12:22 celeron55 you mean, avoid crossing the chunk edges? 12:22 Kopharex no, just using the block as a reference point 12:22 celeron55 oh or are you referring to the way MC generates structures? 12:22 celeron55 that's indeed a possibility 12:23 Kopharex say i want to generate a tree, i pick a block on the ground, put a log there, get the one on top of it and put another log there 12:23 Kopharex seems more elegant to me 12:24 celeron55 i mean, minecraft generates structes so that it re-generates them as many times as how many chunks they can possibly touch, and always discards the generation that would go on a neighboring chunk 12:24 celeron55 in that case you can't ever cheat at all and everything must use predictable seeded pseudorandom algorithms 12:25 Kopharex ok 12:25 celeron55 (otherwise the neighboring chunks won't connect properly) 12:25 celeron55 structures* 12:26 celeron55 that's fully threadable though, so you might want it 12:39 Kopharex i was reading about the simplex perlin noise 12:39 Kopharex it is a registered patent 12:39 Kopharex it means i can't use it for commercial purposes, right? 12:40 celeron55 dunno; we use just the regular stuff 12:40 Calinou is it still patented today? 12:40 celeron55 oh wait, we actually support simplex too 12:40 Calinou https://en.wikipedia.org/wiki/Simplex_noise 12:41 Calinou “Uses of implementations in 3D and higher for textured image synthesis are covered by U.S. Patent 6,867,776 12:41 Calinou , if the algorithm is implemented using the specific techniques described in any of the patent claims.” 12:42 Kopharex so...? 12:43 celeron55 well, personally i don't care 12:45 Kopharex If i manage to create such a library i'd like to be able to use it in commercial games as well 12:45 Kopharex and not get sued doing it 12:46 celeron55 the general answer to this is that you should ask an actual lawyer 12:47 Kopharex I'll go with the classical noise just to be safe. 16:16 VanessaE minetest_gave devs: what's the status of https://github.com/minetest/minetest_game/issues/451 ? 16:17 VanessaE (short version: no-rotate flag for nodes for the screwdriver mod to check) 18:33 Calinou celeron55, minetest.net seems to be having issues? 19:16 celeron55 well what the hell 19:16 celeron55 this server sucks 20:33 ShadowNinja I noticed that the forum mixed content warnings are from the theme -- it's using the favicon and background image from the main site's theme instead of providing it's own. 20:34 ShadowNinja It shoudln't do that anyway since the sites are seperate, may have different themes, and shouldn't have their availability tied together, 20:37 paramat any thoughts on #2662 ? back later 20:37 ShadowBot https://github.com/minetest/minetest/issues/2662 -- Make cloud radius settable in .conf 23:55 hmmmm hmm 23:56 hmmmm i'd like to move away from making new settings 23:56 hmmmm we have too many settings the way it is and each of them are quite game-specific to begin with