Time |
Nick |
Message |
00:03 |
|
prozacgod joined #minetest-dev |
00:17 |
|
Fritigern joined #minetest-dev |
00:21 |
|
Wayward_Tab joined #minetest-dev |
00:28 |
|
OldCoder joined #minetest-dev |
00:54 |
|
kahrl joined #minetest-dev |
01:00 |
|
kahrl joined #minetest-dev |
01:02 |
|
kahrl joined #minetest-dev |
01:10 |
|
est31 joined #minetest-dev |
01:26 |
est31 |
hmmmm, time for the review? |
01:27 |
hmmmm |
yeah sure |
01:30 |
hmmmm |
anybody else want to join in? |
01:39 |
hmmmm |
est31: you did test this on android right? |
01:39 |
est31 |
should I? |
01:40 |
hmmmm |
there is a lot of android build code |
01:40 |
hmmmm |
i have no idea if any of it is correct or not |
01:40 |
est31 |
ah yes I tested the building part |
01:40 |
hmmmm |
ok |
01:40 |
est31 |
(one of nrzkt's bots also tests it) |
01:46 |
|
_X_C_V_B_ joined #minetest-dev |
01:48 |
|
Zeno` joined #minetest-dev |
01:57 |
hmmmm |
hrmm |
01:57 |
hmmmm |
did you ever consider changing AUTH_MECHANISM_FIRST_SRP to, say, AUTH_MECHANISM_CREATE_ACCOUNT or something clearer? |
01:57 |
hmmmm |
AUTH_SRP_CREATE_ACCOUNT |
01:58 |
hmmmm |
AUTH_SRP_LOGIN |
01:58 |
hmmmm |
AUTH_UPGRADE_LEGACY_TO_SRP |
01:58 |
hmmmm |
idk |
01:58 |
hmmmm |
i think that adding the word MECHANISM to those enum values might be extra-verbose |
01:58 |
hmmmm |
and the space could be used to provide more/better description |
01:59 |
est31 |
ok |
01:59 |
hmmmm |
another thing, pointer values = NULL |
01:59 |
hmmmm |
not 0! |
01:59 |
est31 |
can you comment that in gituhub? |
02:00 |
est31 |
about FIRST_SRP vs CREATE_ACCOUNT: its also used for changing the password |
02:00 |
hmmmm |
sure |
02:00 |
hmmmm |
ahhh okay |
02:00 |
hmmmm |
makes more sense then |
02:00 |
hmmmm |
it'd probably be a good idea to add a comment explaining exactly which each of these mechanisms is then |
02:00 |
hmmmm |
s/is/are/ |
02:00 |
hmmmm |
also you can have multiple mechanisms per request??? |
02:01 |
est31 |
no |
02:01 |
hmmmm |
i'm confused about get_auth_mech |
02:01 |
est31 |
changing passwords is done otherwise |
02:01 |
est31 |
ah |
02:01 |
hmmmm |
I need to actually check out your branch hold on |
02:01 |
est31 |
first about the coments: there are comments |
02:01 |
hmmmm |
so then i can goto definitions of things |
02:01 |
est31 |
https://github.com/minetest/minetest/pull/2620/files#diff-d6c71fb6c2c5e2ad979f39a0422f7786R909 |
02:08 |
hmmmm |
est, about AuthMechanism |
02:08 |
hmmmm |
I see you're trying to use it like a set of flags |
02:09 |
est31 |
yes |
02:09 |
hmmmm |
but the second you combine at least two enum values it becomes an invalid value |
02:09 |
hmmmm |
AUTH_MECHANISM_SRP | AUTH_MECHANISM_LEGACY_PASSWORD is not in the enum |
02:10 |
est31 |
perhaps I should store the result in a u32 where I do that |
02:11 |
hmmmm |
why the free((char *) salt)? |
02:12 |
hmmmm |
first the style is to not have a space between unary operators and their operands |
02:12 |
est31 |
because itget_auth_mech |
02:12 |
hmmmm |
second, you don't need to cast it at all |
02:12 |
est31 |
oh sorry |
02:12 |
hmmmm |
then m_authstate = 1; |
02:12 |
est31 |
really? |
02:12 |
hmmmm |
yeah |
02:13 |
hmmmm |
in any case all these are minorish problems that can be addressed as we go along |
02:14 |
est31 |
casts are really without space? |
02:14 |
hmmmm |
yeah |
02:14 |
est31 |
I like them more with space |
02:14 |
hmmmm |
well |
02:14 |
hmmmm |
it's not a dealbreaker |
02:14 |
est31 |
yes |
02:14 |
hmmmm |
i'm just saying what the rest of the code uses |
02:14 |
est31 |
ok |
02:15 |
hmmmm |
(char *)foo is an expression consisting of the identifier 'foo' as the operand of the unary operator (char *) |
02:15 |
hmmmm |
much like ! or ~ |
02:15 |
hmmmm |
~foo |
02:15 |
hmmmm |
you don't write ~ foo, now do you :)? |
02:15 |
est31 |
yes |
02:15 |
Zeno` |
haha |
02:15 |
est31 |
nor do I write ++ i |
02:15 |
hmmmm |
I know some people who do |
02:16 |
hmmmm |
:( |
02:16 |
hmmmm |
at work we have code reviews and I have a particularily large lump of code that happened because our buildbot was broken for the longest period of time on the repo i needed to commit to |
02:16 |
hmmmm |
and now it's being reviewed too and there are like 100+ comments |
02:16 |
hmmmm |
the more you look at it, the more delay |
02:17 |
hmmmm |
because there's always SOMETHING |
02:17 |
hmmmm |
i think i would advocate pushing it as-is, as long as we don't find like horrible deadly bugs that cause bluescreens or likewise |
02:18 |
hmmmm |
and then things get fixed as we go along |
02:18 |
hmmmm |
what do the rest of you guys think |
02:19 |
hmmmm |
right now I'm just trying to understand all the paths of this code and the overall structure |
02:21 |
Zeno` |
I think the basic style issues should be fixed before merging, though |
02:21 |
Zeno` |
e.g. https://github.com/minetest/minetest/pull/2620/files#diff-34f48ad91ac6c202ac60b0348ae90e30R1019 |
02:21 |
hmmmm |
if I sat here and enumerated the style issues there would be like 50000 |
02:21 |
hmmmm |
eww yea that's gross |
02:21 |
Zeno` |
I don't know about enclosing case's within {} (a compound statement) |
02:22 |
est31 |
yes I did it because I declared variables inside the case |
02:22 |
hmmmm |
doing /that/ is fine, but putting the next case on the same line as the previous closing bracket is not |
02:22 |
hmmmm |
there are a lot of levels of review |
02:22 |
Zeno` |
I'm just unsure about the break being inside said compound statement |
02:23 |
hmmmm |
review for the code style, review of language idioms used, review of the code structure and approach, review for potential bugs and exploits, etc. |
02:23 |
Zeno` |
to me something subtle could go awry that would be difficult to find |
02:23 |
hmmmm |
sure |
02:23 |
hmmmm |
as you encounter things that are weird let's at least mark them down in the pull request |
02:23 |
Zeno` |
e.g. see Duff's Device on the intricacies of C's switch |
02:24 |
hmmmm |
so it's not forgotten about |
02:24 |
hmmmm |
duff's device? |
02:24 |
Zeno` |
http://en.wikipedia.org/wiki/Duff%27s_device |
02:24 |
hmmmm |
is that the one where it effectively pulls off a loop inside ofa switch statement |
02:24 |
Zeno` |
yeah |
02:24 |
hmmmm |
yeah hahaha |
02:24 |
hmmmm |
oh man that's crazy |
02:24 |
Zeno` |
but it's not *obvious* how the switch works |
02:24 |
hmmmm |
as long as it's well commented I'd accept that, considering the performance benefit :-) |
02:25 |
Zeno` |
well, yeah :) |
02:25 |
Zeno` |
I'm using it as an example of how switch/case is not always obvious hehe |
02:25 |
hmmmm |
that guy shouldve s/% 8/& 7/ |
02:25 |
hmmmm |
s/ \/ 8/ >> 8/ |
02:25 |
hmmmm |
erm, >> 3 |
02:26 |
est31 |
yes |
02:26 |
Zeno` |
haha |
02:26 |
sofar |
*** Error in `bin/minetest': double free or corruption (!prev): 0x0882b8c8 *** |
02:26 |
sofar |
just... starting it up |
02:26 |
sofar |
crashed immediately |
02:26 |
hmmmm |
sofar, can you reliably reproduce that? |
02:26 |
est31 |
thats natural for minetest |
02:26 |
sofar |
$ git describe --tags |
02:26 |
sofar |
0.4.11-489-g6ec3163 |
02:26 |
Zeno` |
sofar, you're not using valgrind or something are you? |
02:26 |
est31 |
the problem starts when its reproducable |
02:26 |
sofar |
Zeno`: not right now :) |
02:26 |
Zeno` |
ok |
02:27 |
sofar |
I'll do some startup cycling and see if it comes again |
02:27 |
hmmmm |
sofar, what platform is that? |
02:28 |
sofar |
linux 32bit |
02:28 |
sofar |
self-compiled, like most of my software stack :) |
02:28 |
hmmmm |
hmm |
02:29 |
sofar |
I've done at least 50+ starts with this build already since I use that to debug / work on my mods |
02:29 |
sofar |
so it's a rare thing |
02:29 |
est31 |
I'm having it too, every now and than |
02:29 |
est31 |
then* |
02:29 |
est31 |
issue is, how do you debug when you can't reproduce? |
02:31 |
_X_C_V_B_ |
is minetest web scale |
02:33 |
Zeno` |
est31, tbh I'd make those two switch cases a function each :) |
02:33 |
Zeno` |
thanks Mr ShadowBot |
02:35 |
est31 |
Zeno`, the problem with functions would be that you have to add them in the header too |
02:35 |
est31 |
and thats bad:( |
02:35 |
Zeno` |
why? |
02:35 |
est31 |
because they are nonstatic |
02:35 |
est31 |
they use the client's instance |
02:35 |
est31 |
ofc I could give the client as pointer |
02:36 |
est31 |
but dunno of that would still be cool |
02:36 |
Zeno` |
having them private or protected is bad? |
02:36 |
est31 |
if* |
02:36 |
est31 |
no |
02:37 |
Zeno` |
or yeah you could have them as a static function (not member function) in the C++ file an pass 'this' |
02:37 |
Zeno` |
I don't see much that's awful about that |
02:37 |
_X_C_V_B_ |
mongodb is webscale |
02:37 |
_X_C_V_B_ |
so, is minetest web scale???? |
02:37 |
sofar |
it's not |
02:38 |
est31 |
Zeno`, yea perhaps |
02:38 |
est31 |
can you add a github line note? |
02:38 |
est31 |
(I won't fix this right now too tired) |
02:38 |
Zeno` |
ok |
02:39 |
_X_C_V_B_ |
I'm going to make my own open source version of minecraft |
02:39 |
sofar |
cheers, please talk somewhere else |
02:40 |
_X_C_V_B_ |
o |
02:40 |
_X_C_V_B_ |
ok |
02:40 |
|
_X_C_V_B_ left #minetest-dev |
02:42 |
sofar |
o_O that... worked |
02:42 |
Zeno` |
est31, m_password == "" |
02:43 |
hmmmm |
hrmm |
02:43 |
Zeno` |
I know it *might* seem hacky but what would be wrong with simply (u8)(m_password == "") ? |
02:43 |
Zeno` |
i.e. true *is* 1 already |
02:44 |
hmmmm |
okay |
02:44 |
est31 |
yea |
02:44 |
est31 |
is false automatically 0? |
02:44 |
Zeno` |
yes, but see my line comment as well |
02:44 |
hmmmm |
so m_auth_data is an SRPUser * in the case of auth mechanism == *_SRP |
02:45 |
hmmmm |
and then it *can* be something different? |
02:46 |
est31 |
yes |
02:46 |
hmmmm |
if I were coding this I would probably use some C++ features and make AuthMethod or something into a base class |
02:46 |
hmmmm |
and then have AuthMethodSRP, AuthMethodLegacy, etc. |
02:46 |
hmmmm |
so a fundamentally different approach |
02:46 |
hmmmm |
you have things more flattened out rather than structured by class |
02:46 |
est31 |
yea I've thought of that but then I remembered of how you liked c++ |
02:46 |
hmmmm |
well |
02:46 |
hmmmm |
I like things that aren't overly complicated unless they need to be |
02:47 |
hmmmm |
you should do it however you want to have it and then unless it's absolutely horrible, we change it |
02:47 |
hmmmm |
errm, we keep it * |
02:47 |
hmmmm |
but why isn't m_chosen_auth_mech an AuthMechanism? |
02:49 |
est31 |
because I didn't want to include the header just for that |
02:49 |
est31 |
perhaps its included anyways |
02:49 |
est31 |
add a line note, I'll change it if it still compiles |
02:49 |
hmmmm |
well I'm adding line notes for everything |
02:49 |
|
prozacgod joined #minetest-dev |
02:49 |
hmmmm |
just so i don't forget it later |
02:50 |
hmmmm |
but i'm most concerned about 1). no bugs, and 2). good structure |
02:50 |
Zeno` |
oh man |
02:50 |
Zeno` |
here I am adding pedantic comments and NOW you say that |
02:50 |
hmmmm |
no |
02:50 |
hmmmm |
you can add pedantic comments too |
02:51 |
hmmmm |
it's just that they're not as high in terms of priority |
02:51 |
Zeno` |
of course not :) |
02:51 |
Zeno` |
heh |
02:51 |
hmmmm |
I have to deal with this one guy at work who is the most stubborn person in the universe |
02:51 |
est31 |
about the separate classes: currently the handlers are at one single place |
02:51 |
hmmmm |
and one missing space is like the end of the world |
02:52 |
hmmmm |
and refuses to review anything else unless all trivial style "issues" are done |
02:52 |
est31 |
so it would perhaps be confusing to separate it into other files/classes |
02:52 |
hmmmm |
it's so annoying so I try to not replicate that |
02:52 |
Zeno` |
Finally somebody uses 1 << 0, 1 << 1 etc instead of 0x1, 0x2, 0x4, 0x8, 0x10, 0x20 |
02:52 |
hmmmm |
at the end of the day, i have literally never seen him review code |
02:53 |
hmmmm |
yeah but having flags in an enum defeats the purpose |
02:53 |
est31 |
SN's idea. |
02:53 |
Zeno` |
I'm not allowed to add positive comments though |
02:53 |
est31 |
lol |
02:53 |
Zeno` |
;D |
02:53 |
est31 |
you can add them here :p |
02:53 |
Zeno` |
already have |
02:53 |
hmmmm |
there should be a Flags data type in some language |
02:54 |
est31 |
the first implementation of this used strings with every auth mechanism being a byte |
02:54 |
hmmmm |
what why :/ |
02:54 |
est31 |
when I got into issues to get it actually working I dumped it |
02:55 |
est31 |
strings might have unlimited length (so unlimited number of auth mechs) |
02:55 |
est31 |
but they are clunky |
02:55 |
hmmmm |
rolls eyes |
02:55 |
hmmmm |
yeah like we're going to have more than 42795494396 auth mechanisms |
02:55 |
est31 |
and I had those issues, so I used the c way |
02:56 |
est31 |
right now 32 are possible |
02:56 |
est31 |
thats enough |
02:59 |
Zeno` |
https://github.com/est31/minetest/blob/srplogin/src/network/serverpackethandler.cpp#L184 |
02:59 |
Zeno` |
what's that for? |
02:59 |
Zeno` |
A synonym for playerName ? |
02:59 |
est31 |
SN's casing changes |
03:00 |
est31 |
makes the protocol work for userHello, when they first registered as UsErHellO |
03:00 |
est31 |
so right now both client and server are ignoring it. |
03:01 |
Zeno` |
I don't like that... |
03:01 |
est31 |
but when we want to add it later, its there |
03:01 |
hmmmm |
lots of game networks have that case insensitivity |
03:01 |
Zeno` |
it looks too much like implementation defined behavior |
03:01 |
hmmmm |
are minetest player names currently case insensitive?? |
03:01 |
est31 |
no |
03:01 |
est31 |
there is a PR for that somewhere |
03:01 |
Zeno` |
(storing the pointer to the c_str() and then changing playerName I mean) |
03:02 |
hmmmm |
hrmm |
03:02 |
hmmmm |
yeah I think that may be undefined behavior |
03:02 |
|
Wayward_Tab joined #minetest-dev |
03:02 |
hmmmm |
i wouldn't know without consulting the standard |
03:02 |
est31 |
where do I do that? |
03:03 |
Zeno` |
hmm |
03:03 |
Zeno` |
line 165 and line 184 are what I'm wondering about |
03:04 |
Zeno` |
it just seems odd |
03:04 |
est31 |
isn't the assignment the other way round? |
03:06 |
Zeno` |
Maybe. I'm only glancing, but if the meaning isn't clear at a glance I don't like it :) i.e. if something needs to be copied to be changed then it should be copied and changed in the lines immediately following |
03:07 |
Zeno` |
and on line 165 I don't know why you're storing the pointer returned by .c_str() |
03:07 |
Zeno` |
maybe it's for convenience? |
03:07 |
est31 |
yes |
03:07 |
Zeno` |
(I could look through of course, but I'm lazy) |
03:07 |
est31 |
nono only convenience |
03:08 |
est31 |
also to keep diff small |
03:08 |
Zeno` |
I guess maybe the comment immediately above it is misleading in that case |
03:09 |
Zeno` |
Ok, what if somebody *does* change playerName after you store that pointer? |
03:09 |
est31 |
perhaps I should swap lines 182 and 183? |
03:10 |
Zeno` |
Not sure what the best way to approach it is. What I'm saying is that it could lead to bugs... |
03:10 |
Zeno` |
even if there are not currently any |
03:10 |
est31 |
yea perhaps I should add //for convenience to 164 |
03:10 |
est31 |
yes bug prevention is one of the things style tries to achieve |
03:11 |
Zeno` |
perhaps... or that *and* move it closer to where it's being used for convenience |
03:13 |
est31 |
add it as nore |
03:13 |
est31 |
note* |
03:13 |
est31 |
sorry nore :D |
03:15 |
Zeno` |
that whole function probably needs tidying up (and you probably added it in haste because it looks different to the rest of your changes heh) |
03:16 |
hmmmm |
gosh now more than ever I realize how much I hate networkpacket |
03:17 |
est31 |
? |
03:17 |
hmmmm |
is it actually necessary to overload <<? what's wrong with having explicit .insertU8() or .insertU16() calls |
03:17 |
hmmmm |
why did we agree to this |
03:17 |
Zeno` |
https://github.com/est31/minetest/blob/srplogin/src/network/serverpackethandler.cpp#L501 |
03:17 |
Zeno` |
and line 504 |
03:17 |
est31 |
its sugar |
03:17 |
est31 |
hmmmm ^ |
03:17 |
Zeno` |
wtf is that supposed to do? |
03:17 |
est31 |
yes thats the legacy password |
03:17 |
hmmmm |
it doesn't make things sweet, it makes them error prone and nonsensical |
03:18 |
est31 |
thats why we DO need new packets |
03:18 |
Zeno` |
that's just wrong |
03:18 |
Zeno` |
(not you, est, the link I pasted) |
03:18 |
est31 |
why wrong? |
03:18 |
Zeno` |
because it's dumb |
03:19 |
est31 |
perhaps it should use memcpy |
03:19 |
Zeno` |
no, the given_password array can never be filled |
03:19 |
hmmmm |
is that your code or nerzhuls? |
03:20 |
Zeno` |
nerzhuls |
03:20 |
est31 |
not mine |
03:20 |
hmmmm |
pfooooo |
03:20 |
Zeno` |
ah I see |
03:20 |
Zeno` |
yuck, yuck, yuck though |
03:20 |
hmmmm |
well what did we honestly expect |
03:20 |
est31 |
what do you mean with can never be filled? |
03:20 |
hmmmm |
let's fix it when we get a chance |
03:20 |
hmmmm |
I think a lot of the network code needs a refactor |
03:21 |
Zeno` |
est31, what is i at the end of the loop? |
03:21 |
Zeno` |
(the value of i... assuming it didn't go out of scope) |
03:21 |
est31 |
password_size - 2 |
03:21 |
est31 |
and? |
03:21 |
est31 |
then we set the last char to 0 |
03:21 |
est31 |
at password_size-1 |
03:22 |
est31 |
then we have password_size chars, terminated by 0 |
03:22 |
est31 |
regardless of what game the client wants to play with us (minetest or hack-you) |
03:23 |
Zeno` |
but... that's not PASSWORD size |
03:23 |
Zeno` |
so if I say PASSWORD_SIZE is 8, I expect the user to be able to use 8 characters for their password |
03:23 |
Zeno` |
now they can only use 8 |
03:23 |
Zeno` |
7* |
03:24 |
est31 |
so, instead of 20 you can now use 19? |
03:24 |
est31 |
hm you might be right |
03:24 |
est31 |
(that its bad) |
03:24 |
Zeno` |
this is probably why there is the weird hack in main.cpp |
03:25 |
Zeno` |
which I can't remember the line # of, but it basically truncates playernames and passwords IIRC |
03:25 |
est31 |
ok |
03:26 |
Zeno` |
don't fix it in your PR though (of course) |
03:27 |
est31 |
yes |
03:27 |
hmmmm |
what is SudoSuccess and SudoMode? |
03:27 |
est31 |
I dont touch that packet |
03:27 |
Zeno` |
it shouldn't be 0 either... should be '\0' |
03:27 |
est31 |
hmmmm, its a short name for passwordchangemode |
03:27 |
est31 |
I've tried to explain it everywhere where used |
03:28 |
hmmmm |
isn't that an indication that the naming sucks? |
03:28 |
hmmmm |
:/ |
03:28 |
Zeno` |
line 444 is the bigger problem |
03:28 |
est31 |
passwordchangemode is longer to write than sudo |
03:28 |
est31 |
also can be used later on for other "about my account" changes |
03:29 |
est31 |
link Zeno`? |
03:29 |
Zeno` |
https://github.com/est31/minetest/blob/srplogin/src/network/serverpackethandler.cpp#L444 |
03:30 |
Zeno` |
meh |
03:30 |
Zeno` |
I can't look at this |
03:30 |
est31 |
Zeno`, you are inside the wrong packet |
03:30 |
est31 |
its legacy |
03:30 |
hmmmm |
I can't fap to this |
03:30 |
Zeno` |
It's too inconsistent and my mind refuses to accept what it sees |
03:30 |
hmmmm |
http://i2.kym-cdn.com/photos/images/facebook/000/556/128/3b9.jpg |
03:31 |
hmmmm |
WTF |
03:31 |
hmmmm |
we should've caught this kind of crap before it got committed |
03:31 |
hmmmm |
well, no worries as long as it's eventually fixed |
03:33 |
est31 |
when its removed, its fixed. |
03:35 |
hmmmm |
gah |
03:35 |
hmmmm |
okay I made enough comments for now |
03:36 |
hmmmm |
I really really don't like NetworkPacket now |
03:36 |
hmmmm |
I think what's being inserted needs to be explicit and obvious |
03:36 |
hmmmm |
not... pkt >> blah >> foobar >> asdf; |
03:36 |
est31 |
thats what c++ has static typing for |
03:37 |
hmmmm |
this is painful to look at |
03:37 |
est31 |
its much shorter |
03:37 |
hmmmm |
shorter IS NOT NECESSARILY BETTER |
03:38 |
hmmmm |
we could also write our code like |
03:38 |
hmmmm |
if(a+b>34){ |
03:38 |
hmmmm |
d.crnlz(); |
03:38 |
hmmmm |
but i'm pretty sure that would make people want to stab things |
03:38 |
Zeno` |
est31, you run this on your server? |
03:39 |
est31 |
no Zeno` that server runs stable 0.4.12 :D |
03:39 |
Zeno` |
ok, just thought you did |
03:39 |
hmmmm |
what is a C String used for in the protocol again?? |
03:40 |
est31 |
? |
03:40 |
hmmmm |
putCString() |
03:40 |
est31 |
ah |
03:40 |
est31 |
its the same as << std::string(ptr, len) |
03:40 |
est31 |
spares a copy |
03:40 |
hmmmm |
yeah but why |
03:40 |
hmmmm |
what's wrong with the pascal-style strings |
03:41 |
est31 |
? |
03:41 |
est31 |
I've learned pascal once for uni, then forgot it again |
03:42 |
hmmmm |
pascal style strings are how variable length strings in packets are currently serialize |
03:42 |
hmmmm |
d |
03:42 |
est31 |
yes the fun part is putCString() does really exactly the same |
03:42 |
hmmmm |
(u16 string length) (u8 characters[]) |
03:42 |
est31 |
so it also adds the length |
03:42 |
est31 |
thats why I said its the same as |
03:42 |
hmmmm |
oh |
03:43 |
est31 |
https://github.com/est31/minetest/blob/srplogin/src/network/networkpacket.h#L49 |
03:43 |
hmmmm |
then that's not a C string.. |
03:43 |
Zeno` |
pascal strings are not nul terminated though |
03:43 |
hmmmm |
in fact you specify src and len |
03:44 |
hmmmm |
you just want to do a zero-copy string insertion |
03:44 |
Zeno` |
(well, they might be but the standard wouldn't say they have to be) |
03:44 |
Zeno` |
that is if there is a pascal standard lol |
03:44 |
|
Hunterz joined #minetest-dev |
03:44 |
hmmmm |
do you really have to define a new function for this? |
03:44 |
hmmmm |
i mean it's such a microoptimization.. |
03:44 |
est31 |
I've thought its useful at other points too |
03:45 |
est31 |
but yea that code isn't really performance relevant |
03:45 |
hmmmm |
i don't know this is so fubar |
03:45 |
hmmmm |
I wouldn't be using this operator overloaded interface to begin with |
03:45 |
hmmmm |
does anybody aside from you and nerzhul like it? |
03:46 |
est31 |
don't know |
03:46 |
est31 |
Zeno`, do you like it? |
03:46 |
hmmmm |
NetworkPacket::insertString(const std::string &); could be overloaded by NetworkPacket::insertString(void *, size_t) |
03:47 |
hmmmm |
but moreover, we need to ask the more fundamental question what makes network packets so different from other types of serialization to justify having NetworkPacket to begin with |
03:48 |
hmmmm |
how is any of this better than the istringstream-based interface we had before... :( |
03:48 |
Zeno` |
like what? |
03:48 |
Zeno` |
operator overloading used like that? |
03:48 |
Zeno` |
nah, I don't |
03:48 |
hmmmm |
you're lagging |
03:49 |
Zeno` |
yeah, because I'm not watching hehe |
03:49 |
est31 |
its easier this way than touching the raw bits and bytes |
03:49 |
Zeno` |
have to go to Dr shortly and I'm doing about 8 things at once |
03:49 |
est31 |
and less error probe |
03:49 |
est31 |
prone* |
03:49 |
hmmmm |
how is |
03:49 |
est31 |
protobuf for the poor |
03:49 |
hmmmm |
packet.data.insertU32(some_value); more error prone than pkt << some_value; |
03:49 |
hmmmm |
what happens if we have |
03:49 |
hmmmm |
int some_value;? |
03:50 |
est31 |
istringstream has insertu32? |
03:50 |
Zeno` |
the thing I don't like about pkt << some_value is what happens if some_value is not u32 and I forget to cast it? |
03:50 |
hmmmm |
now you don't know which variation of NetworkPacket::operator << gets called unless you know what the size of int is on that architecture |
03:50 |
hmmmm |
est31: no it doesn't, but that's how it was used before |
03:50 |
hmmmm |
write32(is, foobar); |
03:51 |
Zeno` |
if it's packet.data.insertU32() then it's always cast (implicitly) |
03:51 |
hmmmm |
well this could just be modified to have a more OO-style interface and bam |
03:51 |
est31 |
yes but you will have to make every single of those operations its own line |
03:51 |
Zeno` |
so I don't have to worry about data types (well sizes really) at all |
03:51 |
hmmmm |
so? |
03:51 |
hmmmm |
that's a good thing |
03:51 |
est31 |
which needlessly bloats the code |
03:51 |
hmmmm |
no way |
03:51 |
est31 |
I mean you already have all the type information you need |
03:52 |
hmmmm |
I want things being sent on the wire to be very explicit |
03:52 |
hmmmm |
I don't want it to be like |
03:52 |
Zeno` |
you mean the compiler has it :) |
03:52 |
hmmmm |
pkt<<a<<b<<c; |
03:52 |
hmmmm |
pkt<<d; some lines down |
03:52 |
hmmmm |
we should hold a vote |
03:52 |
Zeno` |
lol, the last vote didn't go very well |
03:52 |
hmmmm |
what happened to it |
03:53 |
Zeno` |
nothing... I think the "meh, I don't care" option won and both got merged hehe |
03:54 |
Zeno` |
lol, I can't find it now |
03:54 |
hmmmm |
I though it was like 4/3 |
03:54 |
Zeno` |
http://strawpoll.me/4215136/r |
03:54 |
hmmmm |
and then I ended up saying that I agree with it anyway |
03:54 |
hmmmm |
so I changed my vote |
03:55 |
hmmmm |
that's a lot of votes for not caring, who did that |
03:55 |
Zeno` |
the people who don't even have a say in the vote probably lol |
03:55 |
hmmmm |
that was so much less consequential though |
03:55 |
est31 |
yea |
03:55 |
hmmmm |
i think the clarity of what gets sent over the wire is much more important |
03:55 |
est31 |
so votes for big things should span a longer time |
03:56 |
hmmmm |
smushing it up "so the code gets bloated" is VERY debatable |
03:56 |
hmmmm |
and I completely 100% disagree |
03:56 |
est31 |
for me its important that humans can understand the code easily, and what gets sent in each packet |
03:56 |
Zeno` |
if it came down to a vote I do not like the current overloading of << method because I think it's more error prone than having the example that hmmmm typed above |
03:57 |
hmmmm |
so that's 2/2 |
03:57 |
hmmmm |
yeah I don't know |
03:57 |
hmmmm |
I need to take a break from reviewing |
03:57 |
Zeno` |
i.e. if somehow something innocently gets changed from u8 to u32 and the << does not have a (u8) cast then aren't the wrong number of bytes going to be sent? |
03:58 |
est31 |
yes but you will notice that fast wont you? |
03:58 |
Zeno` |
possibly |
03:58 |
est31 |
I mean the main thing you have to remember is that not only the order and what is sent matters but also the type |
03:59 |
Zeno` |
but if the u8 cast *is* there you won't notice it fast |
03:59 |
hmmmm |
well let's put it this way |
03:59 |
hmmmm |
the benefits of having it this way are what again? |
03:59 |
Zeno` |
and nor will you with the function approach, so we're back where we were |
03:59 |
hmmmm |
making the code shorter for something that's kind of critical anyway? |
03:59 |
est31 |
not just shorter but also easier to give a overview |
04:00 |
est31 |
I know fast *what* gets sent and recievec |
04:00 |
est31 |
d* |
04:00 |
hmmmm |
packets written with one field per line will all fit on a single screen of code |
04:00 |
hmmmm |
if you have it as a line of pkt.insertblah(); you can tell it mimics the documentation for the code |
04:00 |
hmmmm |
[U8] Command |
04:00 |
hmmmm |
[U16] Blah code |
04:01 |
hmmmm |
etc.. |
04:01 |
hmmmm |
pkt.insertU8(command); |
04:01 |
Zeno` |
to me insertU32(a) (or whatever it happens to be called) is more human readable because I don't need to know what type 'a' is |
04:01 |
Zeno` |
a<<b<<c<<d I need to know the type (and size!!!, which is a problem) of a, b, c, and d to know how many bytes there are |
04:01 |
est31 |
so perhaps it would be a good style thing to require everything declared outside the current method (global stuff and m_ stuff) to be casted |
04:02 |
est31 |
Zeno`, why is it important to know how many bytes there are? |
04:02 |
est31 |
touching raw bytes is bad |
04:02 |
Zeno` |
insert8(a); insert16(b); insert8(c); insert32(d); I can immediately see how many bytes are sent |
04:02 |
est31 |
its like using memcpy all over the place because "you know how many bytes you copy" |
04:03 |
Zeno` |
not when you're constructing something that *has* to be a certain number of bytes |
04:03 |
Zeno` |
what's wrong with memcpy()? |
04:04 |
est31 |
why should networkpackets have to have a certain size? |
04:04 |
Zeno` |
this is low level stuff so, surely, you're working with... bytes |
04:04 |
est31 |
yes, networkpacket gives you an abstraction |
04:04 |
Zeno` |
outside of serverpackethandler? |
04:04 |
est31 |
you shouldnt care about bytes |
04:04 |
Zeno` |
you don't outside of that |
04:05 |
est31 |
only about things passed to and from the packet |
04:05 |
est31 |
and their type |
04:06 |
est31 |
so what is easier, $TYPE a; pkt->put$TYPE(a); is easier or $TYPE a; pkt << a; |
04:09 |
Zeno` |
I'm doing too many things at once... need to go in 5 minutes. I think maybe I've been at "the wrong level of abstraction" if such a phrase exists |
04:09 |
est31 |
thanks Zeno` and hmmmm for the review :) |
04:09 |
Zeno` |
I was looking at things from the "inside" point of view where bytes count |
04:09 |
hmmmm |
wait it's not done yet |
04:09 |
Zeno` |
if we're outside the abstraction then everything I said above is incorrect |
04:10 |
hmmmm |
[12:04 AM] <est31> why should networkpackets have to have a certain size? |
04:10 |
hmmmm |
because reverse compatibility |
04:10 |
hmmmm |
we have a very specific format that is to be followed, and if you do, we promise you that you'll be able to talk with minetest |
04:11 |
est31 |
yes |
04:11 |
est31 |
it has to remain stable I agree |
04:12 |
est31 |
but whats better pkt >> a >> b >> c or a = pkt[1]; b = pkt[2]; c = pkt[3];? |
04:12 |
est31 |
as long as we are doing the same as that code everything is well |
04:12 |
est31 |
people should only then change things when they know whats happening |
04:24 |
|
Miner_48er joined #minetest-dev |
04:24 |
Zeno` |
anyway, back to the PR before I leave |
04:25 |
Zeno` |
The only thing I strongly disagree with is the casts where casts are not needed |
04:26 |
Zeno` |
e.g. https://github.com/minetest/minetest/pull/2620/files#diff-2d67c2347848dbd1d1d74e4b8d608694R93 |
04:26 |
Zeno` |
bbl |
04:27 |
est31 |
thats nothing to argue about, its only me not knowing c good enough :) |
04:35 |
|
cib0 joined #minetest-dev |
04:58 |
hmmmm |
so on a scale from 1 to 10, what would you rate your C? |
05:00 |
est31 |
tough question |
05:00 |
hmmmm |
and how many other languages do you know? would you call yourself experienced? |
05:01 |
hmmmm |
like what's your background |
05:01 |
hmmmm |
it's difficult to judge you. on one hand it seems like you're very knowledgable, you know a lot about cryptography and such, but your C sucks :p |
05:01 |
hmmmm |
so I don't consider you a novice |
05:01 |
est31 |
I'm studying math thats perhaps why I know cryptography |
05:02 |
est31 |
but I dont have that coding backgroung |
05:02 |
est31 |
d* |
05:02 |
hmmmm |
really? hm |
05:02 |
hmmmm |
for no coding background you're pretty good |
05:02 |
hmmmm |
keep up with it |
05:02 |
hmmmm |
I was a math person but the career prospects for pure math frankly sucks, and applied math is pretty boring |
05:02 |
hmmmm |
i wouldn't want to be an analyst |
05:02 |
hmmmm |
or actuary |
05:03 |
est31 |
yeah banking and insurance or so sucks |
05:03 |
hmmmm |
that's the only place where jobs are |
05:03 |
hmmmm |
I am so happy I ended up getting a software job in the end |
05:04 |
est31 |
I'm aiming for software too |
05:05 |
hmmmm |
i forgot a lot of math and i wish i didn't |
05:06 |
hmmmm |
trying to write a unit test for PcgRandom::randNormalDist(), so obviously I'd need to do some kind of chisq goodness of fit, but to do that i need to know the variance, but i forgot how to figure out the variance of multiple independent trials :/ |
05:07 |
est31 |
I've yet to hear this \sigma X = 1 stuff |
05:08 |
|
jin_xi joined #minetest-dev |
05:28 |
|
Wayward_Tab joined #minetest-dev |
05:30 |
|
Wayward_Tab joined #minetest-dev |
05:47 |
|
Hunterz joined #minetest-dev |
06:08 |
est31 |
many things you point out hmmmm I know, I just missed them |
06:08 |
est31 |
like identation |
06:09 |
est31 |
or that pointers should be NULL |
06:09 |
est31 |
that one I didn't deem too important |
06:59 |
|
nore joined #minetest-dev |
07:02 |
|
kilbith joined #minetest-dev |
07:05 |
|
Darcidride joined #minetest-dev |
07:12 |
|
leat2 joined #minetest-dev |
07:23 |
|
leat2 joined #minetest-dev |
07:39 |
|
FR^2 joined #minetest-dev |
07:48 |
|
leat2 joined #minetest-dev |
07:56 |
|
leat2 joined #minetest-dev |
08:04 |
|
Yepoleb joined #minetest-dev |
08:04 |
|
cib0 joined #minetest-dev |
08:28 |
|
selat joined #minetest-dev |
08:34 |
|
Hijiri joined #minetest-dev |
09:22 |
|
Megaf joined #minetest-dev |
10:03 |
|
deezl joined #minetest-dev |
10:05 |
|
VargaD joined #minetest-dev |
10:14 |
|
AnotherBrick joined #minetest-dev |
10:35 |
|
selat joined #minetest-dev |
10:50 |
|
proller joined #minetest-dev |
11:47 |
|
proller joined #minetest-dev |
11:54 |
|
err404 joined #minetest-dev |
11:57 |
|
leat2 joined #minetest-dev |
12:01 |
sfan5 |
https://github.com/minetest/minetest/issues/2656#issuecomment-96998742 |
12:01 |
sfan5 |
how relevant |
12:02 |
|
err404 joined #minetest-dev |
12:03 |
deezl |
lol |
12:04 |
deezl |
it does seem to defy logic, but there are many little things that stray a bit from reality...people seem to forget it is a game |
12:07 |
|
leat2 joined #minetest-dev |
12:17 |
|
leat2 joined #minetest-dev |
12:28 |
|
leat2 joined #minetest-dev |
12:28 |
|
prozacgod joined #minetest-dev |
12:29 |
|
neoascetic joined #minetest-dev |
12:38 |
|
Darcidride_ joined #minetest-dev |
12:41 |
|
prozacgod joined #minetest-dev |
12:58 |
|
Taoki joined #minetest-dev |
12:59 |
|
cib0 joined #minetest-dev |
13:03 |
|
AnotherBrick joined #minetest-dev |
13:21 |
|
cib0 joined #minetest-dev |
13:27 |
|
Darcidride__ joined #minetest-dev |
13:40 |
|
proller joined #minetest-dev |
14:20 |
|
est31 joined #minetest-dev |
14:28 |
|
cheapie_ joined #minetest-dev |
14:35 |
|
hmmmm joined #minetest-dev |
14:37 |
|
ElectronLibre joined #minetest-dev |
14:43 |
|
Player_2 joined #minetest-dev |
14:49 |
|
est31 joined #minetest-dev |
15:28 |
|
leat2 joined #minetest-dev |
15:30 |
|
AnotherBrick joined #minetest-dev |
15:38 |
|
leat2 joined #minetest-dev |
15:39 |
|
Hunterz joined #minetest-dev |
15:55 |
|
cib0 joined #minetest-dev |
16:02 |
|
AnotherBrick joined #minetest-dev |
16:16 |
|
Player_2 joined #minetest-dev |
16:17 |
|
Krock joined #minetest-dev |
16:45 |
|
ElectronLibre joined #minetest-dev |
17:00 |
|
Robert_Zenz joined #minetest-dev |
17:02 |
Krock |
hmmmm, https://github.com/minetest/minetest/blob/master/src/unittest/test_random.cpp#L182 do you seriously mean 'i' or shouldn't there be an other variable? |
17:02 |
Krock |
It is two times initialized |
17:02 |
hmmmm |
shoot |
17:03 |
hmmmm |
that is not good |
17:03 |
|
ElectronLibre joined #minetest-dev |
17:03 |
Krock |
Hold on, I'm doing a pull to fix all mistakes |
17:03 |
hmmmm |
but i'm surprised clang did not give a warning for shadowed variables |
17:03 |
hmmmm |
Krock, don't bother....... |
17:03 |
Krock |
well I do because there are round() issues |
17:03 |
Krock |
in the same file |
17:03 |
hmmmm |
what do you mean |
17:04 |
Krock |
MSVC doesn't have round() use myround() instead |
17:04 |
hmmmm |
nice |
17:04 |
hmmmm |
I should fix all those at the same time |
17:05 |
hmmmm |
i don't know if we should use myround() - does this work correctly for negative numbers? |
17:07 |
Krock |
floor works with negaive, so yes. |
17:08 |
Krock |
here some other tiny changes.. not worthy to create a commit for each one #2657 |
17:08 |
ShadowBot |
https://github.com/minetest/minetest/issues/2657 -- Fix several MSVC issues by SmallJoker |
17:10 |
hmmmm |
floor doesn't work for -.5 |
17:10 |
hmmmm |
it rounds up |
17:11 |
Krock |
I see |
17:11 |
hmmmm |
oh didn't I remove that constructor? |
17:11 |
Krock |
apparently you didn't |
17:12 |
hmmmm |
by the way, what version of msvc are you using |
17:14 |
Krock |
The CXX compiler identification is MSVC 16.0.30319.1 |
17:14 |
|
est31 joined #minetest-dev |
17:17 |
|
rubenwardy joined #minetest-dev |
17:20 |
|
proller joined #minetest-dev |
17:20 |
Krock |
so, the round problem is solved now |
17:22 |
hmmmm |
it would be nice to have a small script that checks modifications before committing |
17:23 |
|
Calinou joined #minetest-dev |
17:23 |
hmmmm |
looks for accidental usages of uint32_t instead of u32, or round instead of myround, for example |
17:23 |
est31 |
? |
17:23 |
Krock |
plsno |
17:23 |
hmmmm |
things that could easily break msvc builds that people don't notice |
17:23 |
Krock |
I wasn't ready with the CmakeLists.txt change |
17:23 |
hmmmm |
huh?? |
17:23 |
Krock |
see comments |
17:24 |
* Krock |
headdesks |
17:24 |
Krock |
nvm. |
17:25 |
hmmmm |
was that causing a problem?? |
17:25 |
est31 |
https://github.com/SmallJoker/minetest/commit/417a38c61e04d9f6e32defdb568892c7d8289c16 |
17:25 |
est31 |
look at cmakelists.txt |
17:25 |
hmmmm |
can see that |
17:26 |
Krock |
est31, he pushed an other commit |
17:26 |
est31 |
yes |
17:26 |
est31 |
but without cmakelists, no? |
17:26 |
hmmmm |
erm |
17:27 |
hmmmm |
doesn't that strip out all optimizations for jsoncpp |
17:27 |
|
proller joined #minetest-dev |
17:27 |
Krock |
dunno but without that line I can't compile minetest |
17:27 |
hmmmm |
it should be |
17:29 |
hmmmm |
wtf did somebody remove the flags for msvc in src/CMakeLists.txt?? |
17:30 |
hmmmm |
oh guess not |
17:30 |
Krock |
No, it's still there at line 564 |
17:30 |
Krock |
*562 |
17:31 |
hmmmm |
set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} /MT" CACHE STRING "" FORCE) |
17:31 |
hmmmm |
are you sure that it works for you without the CACHE STRING "" FORCE) ? |
17:32 |
hmmmm |
for some reason CMake ignores my custom set CMAKE_CXX_FLAGS_RELEASE otherwise |
17:32 |
Krock |
returns in " /MD /O2 /Ob2 /D NDEBUG /MT" |
17:32 |
hmmmm |
MD and MT? |
17:32 |
hmmmm |
isn't MD the debug one |
17:33 |
Krock |
they eliminate ech other |
17:33 |
Krock |
looks like MD must be removed |
17:33 |
hmmmm |
yes |
17:34 |
hmmmm |
we should be using the static version everywhere |
17:34 |
hmmmm |
don't get why it's not the case... |
17:34 |
Krock |
is it because json is included before changing the variable? |
17:35 |
hmmmm |
there's no way |
17:35 |
hmmmm |
this is supposed to be run first |
17:36 |
hmmmm |
and it's not because all the add_subdirectory() calls are before the variables get set |
17:36 |
hmmmm |
is it supposed to work like this??? |
17:38 |
|
proller joined #minetest-dev |
17:42 |
Krock |
Looking at http://www.cplusplus.com/reference/cmath/round/ is the change in myround() required to make it work exactly like the round() function |
17:42 |
hmmmm |
i tested it and what myround() had at first worked good enough i figured |
17:43 |
|
OldCoder joined #minetest-dev |
17:45 |
sfan5 |
Krock: passing random strings ("/MT") to gcc is guaranteed to break |
17:45 |
sfan5 |
(in response to https://github.com/minetest/minetest/pull/2657#discussion_r29358189) |
17:46 |
Krock |
Oh sure, haven't thought this could be a MSVC-only param :3 |
17:46 |
sfan5 |
of couse it is |
17:46 |
sfan5 |
"/MT" can be a valid path in linux |
17:46 |
sfan5 |
it can't be a compiler flag |
17:47 |
Krock |
Ah, that's the reason for '-' and '--' command line args |
17:47 |
|
Miner_48er joined #minetest-dev |
17:47 |
sfan5 |
(what if you want to compile a file called MT at the root /) |
17:47 |
sfan5 |
additionally /FLAG looks stupid, but thats just a matter of person preference |
17:48 |
est31 |
mine too btw |
17:49 |
hmmmm |
?? |
17:49 |
sfan5 |
??? |
17:49 |
hmmmm |
why add that stuff to DecoSchematic()? |
17:50 |
sfan5 |
add? you mean remove? |
17:50 |
sfan5 |
also isn't the parent class constructor automatically called? |
17:50 |
hmmmm |
yes |
17:50 |
hmmmm |
so you shouldn't need to explicitly set the same variables set the parent constructor |
17:51 |
sfan5 |
oh wait,nevermind |
17:52 |
sfan5 |
umm |
17:52 |
sfan5 |
Krock: does floor() not work for negative ints in msvc? |
17:53 |
Krock |
sfan5, it does but what if you get negative numbers to round, as example -5.5? |
17:53 |
sfan5 |
the old implementation rounds that to -5 |
17:53 |
sfan5 |
why change it |
17:53 |
hmmmm |
because it's incorrect. |
17:53 |
Krock |
the orignal round() function rounds it to -6 |
17:54 |
Krock |
and that's already the only reason for that change ^ |
17:54 |
sfan5 |
i know that it's incorrect, I was asking because the PR didn't mention fixing myround anywhere |
17:55 |
Krock |
the commit's description is correct. |
17:55 |
sfan5 |
"numeric.h -> Use - 0.5f for negative numbers" |
17:55 |
|
cib0 joined #minetest-dev |
17:55 |
sfan5 |
that doesn't really describe what you changed |
17:56 |
sfan5 |
imagine reading "numeric.h -> Use - 0.5f for negative numbers" in a commit msg, what do you think the person changed? |
17:56 |
sfan5 |
you certainly won't come up with the idea that myround was fixed to round correctly when n < 0 |
18:01 |
Krock |
I'm unsure. Is the "parent" initialization function called with the extended DecoSchematic() function? |
18:02 |
|
Hijiri joined #minetest-dev |
18:02 |
hmmmm |
test it yourself |
18:02 |
Krock |
yes, that might be the safiest way |
18:02 |
hmmmm |
hell, even use ideone |
18:03 |
Krock |
duh. what a great tool! |
18:29 |
|
jin_xi joined #minetest-dev |
18:34 |
|
blaze joined #minetest-dev |
19:00 |
|
MinetestForFun joined #minetest-dev |
19:26 |
|
Hijiri joined #minetest-dev |
19:54 |
|
MinetestForFun joined #minetest-dev |
19:59 |
|
leat2 joined #minetest-dev |
20:48 |
|
err404 joined #minetest-dev |
21:18 |
|
err404 joined #minetest-dev |
21:32 |
|
ElectronLibre left #minetest-dev |
22:32 |
hmmmm |
hrmm krock isn't around |
22:33 |
hmmmm |
I wonder how Krock was having trouble with his MSVC build when it seems fine on Travis |
22:51 |
|
Wayward_Tab joined #minetest-dev |
23:55 |
|
est31 joined #minetest-dev |
23:55 |
est31 |
hmmmm, travis builds for windows yes but not with visual studio |
23:55 |
est31 |
but doing a cross build I think |
23:55 |
est31 |
using clang |
23:56 |
hmmmm |
oh... well that's not as useful as i thought |
23:58 |
est31 |
I think what sfan5 did here was quite cool |
23:58 |
est31 |
or others |
23:58 |
est31 |
dont know the original author or whose idea it was |