Minetest logo

IRC log for #minetest-dev, 2020-04-14

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

All times shown according to UTC.

Time Nick Message
00:06 arthureroberer joined #minetest-dev
00:08 behalebabo joined #minetest-dev
00:17 fluxflux joined #minetest-dev
00:30 realzies joined #minetest-dev
01:18 ANAND joined #minetest-dev
01:38 realazthat joined #minetest-dev
01:38 nephele_ joined #minetest-dev
01:56 oil_boi_ joined #minetest-dev
01:56 oil_boi_ left #minetest-dev
02:05 arthureroberer95 joined #minetest-dev
05:55 calcul0n joined #minetest-dev
07:20 erlehmann_ joined #minetest-dev
08:15 ANAND joined #minetest-dev
08:38 ShadowNinja joined #minetest-dev
08:50 Qiangong2[m] joined #minetest-dev
09:11 kb1000 joined #minetest-dev
09:11 texmex joined #minetest-dev
09:11 kollaps[m] joined #minetest-dev
09:14 ANAND joined #minetest-dev
09:18 proller joined #minetest-dev
09:30 Beton joined #minetest-dev
09:54 sfan5 rubenwardy: do you think it would be useful for lua objects to have these infos? https://github.com/minetest/minetest/blob/master/src/collision.h#L44-L54
09:54 sfan5 I'm looking into giving Lua objects the collision results
09:54 sfan5 and i'd definitely expose the struct collisionMoveResult, not sure how useful the rest is however
09:55 rubenwardy makes sense
09:55 rubenwardy is that server side?
09:55 sfan5 yes
09:55 rubenwardy oh nice
10:13 erlehmann joined #minetest-dev
10:13 calcul0n_ joined #minetest-dev
10:18 erlehmann joined #minetest-dev
10:24 Gael-de-Sailly joined #minetest-dev
10:49 twoelk joined #minetest-dev
10:50 sfan5 ok so I wrote the code to push it to lua and it ... just doesn't work
10:50 sfan5 the last argument to the function call always ends up being nil
10:51 sfan5 if I swap the second and third argument, then the collision stuff gets through fine (as 2nd arg) but the last argument is still nil
10:58 sfan5 yeah nope I don't get it
11:00 sfan5 that you can't pass more than 2 arguments to on_step seems to be a fundamental law of the universe
11:05 sfan5 minetest_game is breaking this
11:05 sfan5 for fucks sake
11:17 Fixer joined #minetest-dev
11:19 absurb joined #minetest-dev
11:42 Wuzzy joined #minetest-dev
12:08 nerzhul joined #minetest-dev
12:11 nerzhul hello, just published #9665 bugfix. I found that in my hardened setup with a pg backend :)
12:11 ShadowBot https://github.com/minetest/minetest/issues/9665 -- Verify database connection on interval by nerzhul
12:24 behalebabo joined #minetest-dev
12:27 Zughy joined #minetest-dev
12:49 kilbith joined #minetest-dev
12:58 kilbith_ joined #minetest-dev
12:59 Wuzzy joined #minetest-dev
13:17 kilbith__ joined #minetest-dev
13:21 Taoki joined #minetest-dev
13:26 QwertyDragon joined #minetest-dev
13:31 Taoki joined #minetest-dev
13:42 kilbith joined #minetest-dev
14:29 Taoki joined #minetest-dev
14:46 calcul0n__ joined #minetest-dev
15:07 ANAND joined #minetest-dev
15:18 Wuzzy joined #minetest-dev
15:48 nerzhul joined #minetest-dev
15:55 nerzhul sfan5 do you have some time for #9665 please ? :)
15:55 ShadowBot https://github.com/minetest/minetest/issues/9665 -- Verify database connection on interval by nerzhul
15:55 sfan5 yes I planned to look at it next
16:13 Zughy joined #minetest-dev
16:39 nerzhul perfect, thanks
16:43 twoelk left #minetest-dev
16:52 _Zaizen_ joined #minetest-dev
17:08 sfan5 merging game#2647
17:08 ShadowBot https://github.com/minetest/minetest_game/issues/2647 -- Make default:snow collisionbox half of nodebox height by paramat
17:30 Foz joined #minetest-dev
17:33 kilbith joined #minetest-dev
17:40 Wuzzy joined #minetest-dev
18:11 calcul0n joined #minetest-dev
18:12 nerzhul sfan5: approved #9669
18:12 ShadowBot https://github.com/minetest/minetest/issues/9669 -- scriptapi: Some small optimizations to value pushing by sfan5
18:13 nerzhul sfan5: i fixed #9665 regarding your comments, and waiting for more inputs or approval on #9647 please :)
18:13 ShadowBot https://github.com/minetest/minetest/issues/9665 -- Verify database connection on interval by nerzhul
18:13 ShadowBot https://github.com/minetest/minetest/issues/9647 -- Add WorldSettings object & env var support by nerzhul
18:21 nerzhul i'm looking for modkit api and some API are mob high level and some seems to be lack on our API, builtin included i think
18:21 nerzhul i saw many mods reimplementing some helpers in the same way it's not good
18:26 kilbith joined #minetest-dev
18:26 Krock -               dst.push_back(pg_to_v3s16(results, 0, 0));
18:26 Krock +               dst.push_back(pg_to_v3s16(results, row, 0));
18:27 Krock will push that fix in 15 minutes. dunno whether the migration works afterwards, but it's surely a step into the right direction
18:27 Krock unless somebody here has a pgsql build setup plus world to test it
18:31 nerzhul i have it
18:32 nerzhul woot
18:32 nerzhul this is a very old code no ?
18:33 Krock 2017-04-23 14:35:08 +0200 303)       for (int row = 0; row < numrows; ++row)
18:33 Krock yes
18:33 nerzhul go ahead
18:34 nerzhul you are right haha
18:34 nerzhul i'm looking for the impact
18:34 nerzhul it seems it's a problem on database migration & clearObject commands only
18:34 nerzhul impact is hopefully minor it seems
18:35 nerzhul you saw it looking my PR ? :D
18:35 Krock after all the original database is still kept after the migration
18:35 Krock no, I shamelessly stole it from https://github.com/minetest/minetest/issues/9670#issuecomment-613563738
18:35 nerzhul yep and it's only for safer migration, to save the loaded blocks
18:35 nerzhul woot :(
18:36 nerzhul it matches my code analysis, perfect haha
18:36 nerzhul Krock can you take 5 min to look at my post here please: https://github.com/orgs/minetest/teams/engine/discussions/27 ?
18:39 sfan5 merging #9669 in 5m
18:39 ShadowBot https://github.com/minetest/minetest/issues/9669 -- scriptapi: Some small optimizations to value pushing by sfan5
18:41 Krock til Lua has an API for pre-allocating tables
18:41 nerzhul merging #9600
18:41 ShadowBot https://github.com/minetest/minetest/issues/9600 -- Refactor texture overrides and add new features by Df458
18:42 nerzhul sfan5: approved #9621 too
18:42 ShadowBot https://github.com/minetest/minetest/issues/9621 -- Update wireshark dissector by sfan5
18:42 sfan5 thanks
18:42 Krock pushing that prostgres fix (ok according to nerzhul)...
18:42 nerzhul yep, it was a very nice mistake 4 years ago and nobody migrated since or ? :D
18:43 sfan5 postgres is pretty good so why would you want to migrate back
18:43 nerzhul haha :D
18:43 Krock well, they apparently want to make a torrent out of it (or whatever)
18:44 nerzhul i hope the WorldSettings PR can be improved, i wait for your last comments to amend sfan5 on it, after that we will have proper for-core interface
18:46 sfan5 nerzhul: next time you merge it would be nice to clean up the commit message https://github.com/minetest/minetest/commit/5cf6318117edcae6bf30d829d9e9dd9dbf1d4bf7
18:46 nerzhul woops, right i forgot that point, sorry
18:47 nerzhul i think i will code a helper for a such thing, it's pretty common to do a search research, i think luaEntitySAO can do the helper itself, maybe with some useful filters for things with mobs => https://pastebin.com/tyArFwuQ
18:48 nerzhul `local pos = self.object:get_pos()` we have that call just before, having an optimized version can be nice
18:49 sfan5 I think most of the time is currently wasted on an inefficient get_objects_inside_radius
18:49 nerzhul yep
18:49 nerzhul it's why i think luaEntitySAO should do the search
18:50 nerzhul it's on the mob loop, with a timer, i understand why but it's consuming
18:51 Krock nerzhul: how about MinGW for GH Actions?
18:52 nerzhul i didn't do it in my poc, but if we use the travis way it should work, it's on a regular ubuntu
18:53 rubenwardy I disagree. The objects should store in spatial partition before any offer option
18:54 Krock nerzhul: getting the build log will be a click further away, and the build logs are no longer colored. however, it works, thus no objections from my side
18:54 rubenwardy Putting a cache into SAOs won't help particles or the lua APIs
18:55 nerzhul rubenwardy, we should prevent using cache where it's not needed, and i didn't talked about a cache, i talked about high level lua call on entitySAO
18:55 nerzhul to prevent heap moves/allocations between core & lua part
18:56 Krock binary tree position access
18:56 nerzhul here if i offer luaEntitySAO a getObjectAround call it permits to prevent 3 lua call (object:get_pos()), get_ojbects_inside_radius + various comparison
18:56 rubenwardy I don't understand why that would help anything
18:56 nerzhul you reduce the server load and you prevent having many call stacks between core and code, and it stays sufficiently generic
18:57 rubenwardy Optimisations are better when they don't involve any involvement from modders, and they reduce a bottle neck
18:57 nerzhul binary tree is useless in my case, i have 30 entities loaded on the map currently and that lag, it's not normal
18:57 sfan5 4 Lua -> C calls won't matter when get_objects_inside_radius takes a whole second
18:57 nerzhul i'm trying to figure which calls we can add to reduce the lua load
18:57 rubenwardy Calling a few different methods isn't a problem, get_objects_inside_radius is the problem
18:58 sfan5 rubenwardy: you don't plan to rely on libspatialindex for this do you?
18:58 rubenwardy No
18:58 sfan5 not just because I'd have to build it for windows but also because many people build without it
18:58 nerzhul i can look at both, but 2 years ago on the epixel fork my entities in pure c++ are using it without optimization and it lagged only after 1 thousands loaded
18:58 rubenwardy The simplest spatial partition is a chunk based kne
18:58 rubenwardy And should be used for most uses
18:59 sfan5 how does that look in C++?
18:59 sfan5 hm maybe I should read the wikipedia page on that
18:59 nerzhul wtf is that
18:59 nerzhul why we have a call to send mapblock from a sao position, it's wtf
18:59 nerzhul sao object sorry
19:00 rubenwardy sfan5: by chunk based, I meant like how mapblocks store modes
19:00 rubenwardy You have fixed size partitions based on space
19:00 sfan5 std::map<v3s16,std::list<ServerActiveObject*>> ?
19:01 sfan5 that would be terrible for range searches though
19:02 sfan5 https://en.wikipedia.org/wiki/Spatial_database#Spatial_index oh hmm
19:02 sfan5 I remember some issue suggesting octrees in 2013
19:02 Krock aren't objects currently assigned to a mapblock? if so, then the mapblock and its 3x3x3 * radius^3 neighbours must only be checked
19:02 nerzhul they are saved with mapblocks, but you cannot rely on that for the map for me
19:02 sfan5 they are not, mapblocks only store the static data of objects
19:02 rubenwardy No, objects are in a list in the environment currently
19:02 nerzhul mapblocks are pretty stateless
19:03 sfan5 ..which also means get_objects_inside_radius is an O(n) operation
19:03 rubenwardy There was a pr by numberzero that did what I said - moved to using a fixed size indes
19:03 rubenwardy It was merged and then reverted
19:03 Krock somehow already expected that. would also be an approach, although not the best one
19:03 Krock well yes, it was buggy
19:04 Krock large objects didn't collide with others, or small ones didn't at all (I believe)
19:04 nerzhul another point you missed on this call, on the lua side
19:04 nerzhul we do a double lookup
19:05 nerzhul we gather all ids and the we lookup the ObjectPointer based on ids
19:05 nerzhul i think one of the most costly operation is there
19:05 nerzhul we should return AO pointers directly when possible
19:05 sfan5 isn't id to object a std::map?
19:05 nerzhul std::unordered_map yep but we lookup it to
19:05 nerzhul and it's the same lookup
19:06 nerzhul ActibeObjectMgr m_active_objects map
19:06 nerzhul let me propose an optimisation on the lua call
19:10 _Zaizen_ joined #minetest-dev
19:14 sfan5 merging #9621 in 5m
19:14 ShadowBot https://github.com/minetest/minetest/issues/9621 -- Update wireshark dissector by sfan5
19:15 sfan5 and #9603
19:15 ShadowBot https://github.com/minetest/minetest/issues/9603 -- Add all src folders to doxygen by Desour
19:19 nerzhul okay i have a good design and the lambda use for filtering is quite nice too
19:19 nerzhul it should reduce massively the calls to the std::map by calling it once only
19:20 sfan5 but std::map is efficient, the problem is the linear search
19:20 sfan5 also why do client/activeobjectmgr.cpp and server/activeobjectmgr.cpp contain essentially the same code?
19:21 nerzhul yep but calling it less is also fine, if you have massive object list to search :D
19:21 nerzhul hmmm i don't know, maybe a non refactored part, if i remember both where refactored and extract from their respective env, but certainly not factorized in the past (i did that if i remember some years ago)
19:22 nerzhul in my case i have also item drop, i think mobs & item drops (which are certainly the two major usecase mods in survival) are very heavy because they must rely on that
19:26 nerzhul #9671
19:26 ShadowBot https://github.com/minetest/minetest/issues/9671 -- Optimize get_object_inside_radius call by nerzhul
19:26 nerzhul optimized version
19:26 nerzhul it's far more better except if the list is empty, it's the same complexity :)
19:26 nerzhul and also sexier c++11 :D
19:27 nerzhul and also notice that it fixes table size which is too big if we filter entities gone just after :D
19:28 nerzhul oh a second, i think we can remove the old call too
19:29 nerzhul the only call to the ids is to lookup another time after that
19:29 nerzhul i will refactor a little bit
19:30 nerzhul that may help the collision code too :D
19:30 nerzhul collisionMoveSimple call do the same thing
19:34 fluxflux joined #minetest-dev
19:42 nerzhul sfan5, and i agree that we should after my PR refactor, i can take the point
19:44 nerzhul okay #9671 is complete and unittests have been updated accordingly to the new possible scenario
19:44 ShadowBot https://github.com/minetest/minetest/issues/9671 -- Optimize get_object_inside_radius call by nerzhul
19:48 Krock nerzhul: IMO it would be more intuitive to use the filter callback as "include" rather than "exclude" from the output list
19:49 nerzhul exact, nice catch, i kept the original behaviour, i agree
19:49 Taoki joined #minetest-dev
19:52 nerzhul let ma second to compile & test and then i push force
19:53 Krock depending on how expensive it is to append table values, you could use the filter callback to push the values directly, without looping over the results for a second time.. although that's not a nice solution
19:53 nerzhul on the collision code you mean ?
19:54 Krock ModApiEnvMod::l_get_objects_inside_radius and collisionMoveSimple
19:54 Krock you basically only need a callback for matches there, and could use the results directly within the callback to push values or append them to the vector
19:54 nerzhul this can be a hack on my feature yep
19:55 nerzhul we will create a vector for nothing but why not
19:55 nerzhul we prevent looping over another
19:55 Krock question is whether the vector return value is needed in most use-cases
19:56 Krock after all it would also be possible to make it an optional pointer, and to ignore push_back for nullptr
19:57 Krock that or the callback could skip push_back anyway in the current code
19:57 nerzhul i return false in the cb and no push back in the result :D
19:58 Krock exactly yes
19:58 nerzhul for the l_get_objects_inside_radius if i push in lua direct i don't know the lua table size at allocation
19:59 nerzhul i think it will be heavier to allocate the memory on each insert than just looping on the result htere
19:59 nerzhul there*
20:00 nerzhul optimized version pushed :)
20:01 nerzhul hmm that seems broken with the latest change
20:01 nerzhul oh i inverted the condition...
20:02 nerzhul it's fixed :D i forgot to inverge the push_back condition path on the manager
20:03 nerzhul mobs seems a little bit smoother on my PC, fine
20:03 nerzhul thanks for your return Krock, waiting for your analysis/approval :D
20:07 Krock looks about right. will test tomorrow
20:07 nerzhul perfect
20:08 nerzhul i'm looking for the item drop mods, i think there is some possible optimisation paths too, but don't know if i can generate some lua api calls for that
20:08 Krock although "includeObjCallback" is a strange was to name a variable
20:08 nerzhul feel free to propose better :D
20:08 Krock I thought Minetest enforces snake case for those
20:09 nerzhul item_drop call minetest.get_player_privs every 0.2 sec omg
20:09 Krock include_callback   ("Obj" is self-explanatory due to the scope)
20:09 nerzhul it's why i like mods, you find a single call to core and then boom :D
20:10 sfan5 I doubt this is much faster but it's a good cleanup either way
20:11 Krock it reduces complexity from O(n²) to O(n) from what I can see
20:11 Krock unless unordered_map.find()  is  O(1)
20:12 sfan5 two for loops are O(n), only O(n²) if nested
20:13 Krock ikr, but getActiveObject is O(n) in worst case
20:13 sfan5 https://en.cppreference.com/w/cpp/container/unordered_map/find is linear on average, O(n) worst-case
20:13 sfan5 btw
20:13 sfan5 constant on average*
20:14 Krock after all there won't be much of a speed difference
20:14 Krock you're right
20:15 rubenwardy the worstcase would be if all the elements were in a single hash
20:33 sfan5 reminder #9617
20:33 ShadowBot https://github.com/minetest/minetest/issues/9617 -- Improve protocol-level receiving code by sfan5
21:09 kilbith joined #minetest-dev
21:20 Calinou joined #minetest-dev
21:31 fluxflux joined #minetest-dev
22:24 kilbith joined #minetest-dev
23:24 kilbith joined #minetest-dev
23:28 kilbith joined #minetest-dev
23:41 kilbith joined #minetest-dev
23:53 proller joined #minetest-dev

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