Guild icon
DDraceNetwork
Development / developer
Development discussion. Logged to https://ddnet.org/irclogs/ Connected with DDNet's IRC channel, Matrix room and GitHub repositories — IRC: #ddnet on Quakenet | Matrix: #ddnet-developer:matrix.org GitHub: https://github.com/ddnet
Between 2024-10-14 00:00 and 2024-10-15 00:00
Avatar
GitHub BOT 2024-10-14 04:41
Currently, lasttp is good for practice, but is insufficient when synchronization of multiple tees is required in a certain part of a map. This PR adds this functionality and provides players with a more convenient practice experience.

Checklist

  • [x] Tested the change ingame
  • [ ] Provided screenshots if it is a visual change
  • [x] Tested in combination with possibly related configuration options (sv_solo_server)
  • [ ] Written a unit test (especially base/) or added coverage to ...
Avatar
MilkeeyCat 2024-10-14 06:34
@Learath2 I need a C pro advice. What's a better way to pass tokens. Here're my 2 ideas: typedef enum: uint8_t { LITERAL, } TokenType; // Idea 1. Pass array of Token* typedef struct { TokenType kind; } Token; typedef struct { Token token; size_t value; } TokenLiteral; // And then pass an array of pointers so you can do something like dis Token *token = ...; switch(token->kind) { case LITERAL: { TokenLiteral *literal = (TokenLiteral *)token; } } // Idea 2. Big struct xd typedef struct { TokenType kind; union { size_t value; } content; } Token;
Avatar
MilkeeyCat 2024-10-14 07:03
Hm, seems if I use 2nd version it will match rust enum layout, that's nice
👀 1
Avatar
Avatar
MilkeeyCat
@Learath2 I need a C pro advice. What's a better way to pass tokens. Here're my 2 ideas: typedef enum: uint8_t { LITERAL, } TokenType; // Idea 1. Pass array of Token* typedef struct { TokenType kind; } Token; typedef struct { Token token; size_t value; } TokenLiteral; // And then pass an array of pointers so you can do something like dis Token *token = ...; switch(token->kind) { case LITERAL: { TokenLiteral *literal = (TokenLiteral *)token; } } // Idea 2. Big struct xd typedef struct { TokenType kind; union { size_t value; } content; } Token;
I like 2 better
Avatar
MilkeeyCat 2024-10-14 08:54
I yoinked first one from craftinginterpreters book santatrollet
Avatar
Avatar
MilkeeyCat
Hm, seems if I use 2nd version it will match rust enum layout, that's nice
are u using this for ffi?
08:57
rust enums arent ffi safe
08:57
only very specific ones
08:57
like Option<*mut T> (edited)
Avatar
КТО В ДДНЕТ
Avatar
yeah but what are u trying to do
Avatar
MilkeeyCat 2024-10-14 09:11
I want to pass a vec of enums in c function and back
Avatar
the enums need to be repr C
09:15
what kind of enums
Avatar
MilkeeyCat 2024-10-14 09:15
Yup
Avatar
for the vec you need to use a as_ptr and pass the len
09:16
but why u want to call a c method
Avatar
MilkeeyCat 2024-10-14 09:16
For now it's in C, but later I can compile my language
09:17
It's a "procedural macro"
09:17
brain dead edition
Avatar
MilkeeyCat 2024-10-14 09:18
Is a slice &[T] just a pointer and len? thonk
Avatar
Avatar
MilkeeyCat
Is a slice &[T] just a pointer and len? thonk
yeah
09:33
but if u want to get the ptr to use it on C u need to do as_mut_ptr or as_ptr
Avatar
Avatar
MilkeeyCat
I yoinked first one from craftinginterpreters book santatrollet
Common Initial Sequence rule is also hot, so you can pick either and be very cool
Avatar
MilkeeyCat 2024-10-14 09:45
Im wondering if it's possible to have a pointer to a fat pointer xd
Avatar
Avatar
Learath2
Also we should probably set the cache policies for these pages so these can be loaded from cache for an entire day, not like we generate them more often
Huh? The /maps/ pages are instantaneous. The ddnetdb server is under high load
10:07
You are probably thinking of /ranks/ which is only generated once an hour
Avatar
Avatar
deen
Huh? The /maps/ pages are instantaneous. The ddnetdb server is under high load
hm, it was extremely slow last night to the point that the connection between cloudflare and our server timed out
10:08
I checked the ddnet.org server and it was under a fair bit of load generating stuff, so I assumed it was that
Avatar
It still times out
10:10
Nope, it's the ddnetdb server that is slow
10:11
I guess it's time to just generate a few of the maps, doing this in the database with triggers and manual MVs would be too painful
10:11
So the idea would be that pages like Linear, Multeasymap, Tutorial are static (once per hour), everything else instant
Avatar
@deen aah, I forgot we don't generate the map pages
10:14
I wonder if just setting a cache policy might help for those, then we wouldn't need to do any work
Avatar
Yes, that would be even better, let me check
Avatar
cloudflare can serve it from the edge directly for like an hour
Avatar
But if it times out, cloudflare will never cache it 😄
Avatar
but it just needs to go through once, right? It does load sometimes 😄
Avatar
It happens to be right at the limit right now, in a few weeks it will always be too slow
Avatar
Then I guess we'll need to generate some
Avatar
what are you doing
10:56
yes
Avatar
Avatar
deen
Huh? The /maps/ pages are instantaneous. The ddnetdb server is under high load
The absolute state of mysql lol
11:06
postgres when?
Avatar
Avatar
Learath2
The absolute state of mysql lol
Jupstar ✪ 2024-10-14 11:09
Wow is ddnet so intense already?
Avatar
Avatar
Jupstar ✪
Wow is ddnet so intense already?
Linear and Multeasymap
Avatar
Avatar
Learath2
Linear and Multeasymap
Jupstar ✪ 2024-10-14 11:10
Isn't the database server separated from the game servers?
Avatar
MariaDB [teeworlds]> SELECT COUNT(*) FROM record_race WHERE Map="Multeasymap"; +----------+ | COUNT(*) | +----------+ | 1382275 | +----------+
Avatar
Avatar
Jupstar ✪
Isn't the database server separated from the game servers?
Yeah
11:11
We should have used MongoDB for it's webscale
Avatar
Jupstar ✪ 2024-10-14 11:11
😬
11:11
Well one real problem of our db is simply that we store ranks and top ranks in the same table
11:12
Even tho deen made it pretty fast, it's still lot of grouping the db has to do
Avatar
Yes, it worked fine when the count of rows was sane, but now it's getting very very expensive
11:12
We probably need to start caching the top5
Avatar
Jupstar ✪ 2024-10-14 11:13
Or store all top ranks in a second table and do top5 command etc. on that instead. Even tho I admit, keeping the db in sync is also annoying.
Avatar
Avatar
Jupstar ✪
Or store all top ranks in a second table and do top5 command etc. on that instead. Even tho I admit, keeping the db in sync is also annoying.
It would help but only gets rid of one group, right? just less work per player
Avatar
Jupstar ✪ 2024-10-14 11:15
I guess the race history is simply not interesting in 99% of time. How often do ppl do /times <name> probably rarely
11:15
Toprank is what matters (edited)
Avatar
Avatar
Learath2
It would help but only gets rid of one group, right? just less work per player
Jupstar ✪ 2024-10-14 11:16
If there would be only 1 rank per player, then MIN/MAX can use an index and are almost instant
11:16
Since no group by player name
Avatar
Avatar
Jupstar ✪
Or store all top ranks in a second table and do top5 command etc. on that instead. Even tho I admit, keeping the db in sync is also annoying.
Actually wouldn't be too too hard to have a trigger keep an up to date top ranks table
Avatar
Jupstar ✪ 2024-10-14 11:22
Yeah probably not xd
Avatar
It would be rather expensive storage-wise I'd guess
Avatar
Jupstar ✪ 2024-10-14 11:24
Currently the whole db is in RAM, but in worst case it would double storage, so maybe fine? xd
Avatar
I might create the table manually for multeasymap and see how much it helps query performance
Avatar
Jupstar ✪ 2024-10-14 11:31
Sure, tell me the results, I am interested
11:39
I wonder how well vulkan support would be 😬
justatest 1
Avatar
Jumpstar + 🌋 = 🫀
11:47
are there statistics for read vs write per day/hour/second?
11:48
for the db?
Avatar
Avatar
jxsl13
are there statistics for read vs write per day/hour/second?
this still makes me chuckle
11:50
~75mb.. good times, i wonder if i can just query that
Avatar
75mb is already wild
11:53
sqlite.zip
Avatar
/maps/ is cached in redis now
12:20
(and finally in Python3 :D)
Avatar
Avatar
meloƞ
this still makes me chuckle
Jupstar ✪ 2024-10-14 12:21
lol
12:21
Scam xD
KEKW 1
Avatar
Avatar
Jupstar ✪
Currently the whole db is in RAM, but in worst case it would double storage, so maybe fine? xd
20555169 unique Map, Name combinations, of the 41571298 total rows
Avatar
Avatar
Learath2
20555169 unique Map, Name combinations, of the 41571298 total rows
Jupstar ✪ 2024-10-14 12:22
Interesting already, but the fact that it doesn't need to iterate over the lines could still make an insane difference
12:22
Wouldn't underestimate it, so still interested in qry speed
Avatar
I was more commenting on the expected amount of extra storage/ram use that would come from having an extra table for that
Avatar
Jupstar ✪ 2024-10-14 12:23
Ah yeah
12:23
Rip 💀
Avatar
Maybe a table just containing primary keys of top ranks would work, I don't remember the primary key tho 😄
Avatar
Avatar
Learath2
Flexible Array Members don't exist in many languages. You'll have to just take the L and use a Vec (edited)
heinrich5991 2024-10-14 12:26
rust has a feature like this, but it's not well-supported. you can have struct Foo { data: i32, array: [i32], } for the example @MilkeeyCat gave, you'd use &[Macro] instead, though
Avatar
Avatar
MilkeeyCat
Look at dis santatrollet #[repr(C)] struct Macros { size: usize, _macros: [Macro; 0], } trait GimmeMacros { fn macros(&self) -> &[Macro]; } impl GimmeMacros for *const Macros { fn macros(&self) -> &[Macro] { unsafe { let skip_size = self.byte_add(size_of_val(&self.read().size)); std::slice::from_raw_parts(skip_size as *const Macro, self.read().size) } } } (edited)
heinrich5991 2024-10-14 12:27
this is illegal under rust's rules
Avatar
Avatar
heinrich5991
this is illegal under rust's rules
MilkeeyCat 2024-10-14 12:27
works for me :p
kek 1
Avatar
Avatar
heinrich5991
rust has a feature like this, but it's not well-supported. you can have struct Foo { data: i32, array: [i32], } for the example @MilkeeyCat gave, you'd use &[Macro] instead, though
ah, DSTs
12:29
Although such a type is largely useless without a way to construct it. Currently the only properly supported way to create a custom DST is by making your type generic and performing an unsizing coercion:
12:29
Yeah it does seem a little on the underbaked side in terms of language support
Avatar
MilkeeyCat 2024-10-14 12:29
libloading create didn't work when i used [Type] in a struct
Avatar
Avatar
heinrich5991
this is illegal under rust's rules
What rule does it break?
Avatar
heinrich5991 2024-10-14 12:31
you're deriving an pointer outside the struct from a pointer to the struct
Avatar
Avatar
Learath2
Although such a type is largely useless without a way to construct it. Currently the only properly supported way to create a custom DST is by making your type generic and performing an unsizing coercion:
heinrich5991 2024-10-14 12:37
you can also construct it using some unsafe stuff, but yea, not really supported
12:37
@Learath2 have you worked on the finish server yet?
Avatar
Avatar
heinrich5991
@Learath2 have you worked on the finish server yet?
Yes, I'm making the errors pretty. First time I'm using Axum
Avatar
Avatar
heinrich5991
you're deriving an pointer outside the struct from a pointer to the struct
a*
❤️ 1
Avatar
Avatar
Learath2
Yes, I'm making the errors pretty. First time I'm using Axum
heinrich5991 2024-10-14 12:50
can we see some code already? 🙂
Avatar
Avatar
heinrich5991
can we see some code already? 🙂
It's very barebones but sure, I can push it in a couple hours
owo 1
Avatar
heinrich5991 2024-10-14 12:56
cool 🙂 I'm interested in how an axum server looks like
Avatar
MilkeeyCat 2024-10-14 14:07
what's your favorite config file format? xd
Avatar
Avatar
MilkeeyCat
what's your favorite config file format? xd
Avolicious 2024-10-14 14:08
RON
Avatar
Avatar
MilkeeyCat
what's your favorite config file format? xd
toml
Avatar
Avatar
MilkeeyCat
what's your favorite config file format? xd
Just env variables
14:24
If it has to have complex types like arrays and stuff, toml
Avatar
toml
🦐 1
14:25
rust gang
Avatar
.env files is love
Avatar
env files are just very easy very quick, don't have to think too much
14:25
no parsing, no thinking of config location
Avatar
cli flags
14:28
perfection
Avatar
That's also not a bad alternative ngl, if you have few options
14:29
but parsing them can get annoying and you need all these large libraries filled to the brim with bloat
Avatar
for my clis/services I mostly combine dotenv, env, cli flags
14:30
the libs are indeed somewhat "bigger" of a dependency
Avatar
Some of the very small projects I did the cli flag parsing library is bigger than my project
Avatar
llvm converts realloc calls into mallocs
14:38
or so i seen in some cases
14:39
%18 = tail call dereferenceable_or_null(24) ptr @realloc(ptr nonnull %malloc, i64 24) llvm can track the bytes deferenceable for a given ptr
14:39
thats dope
Avatar
Avatar
Learath2
no parsing, no thinking of config location
heinrich5991 2024-10-14 14:53
no parsing? you have to know what syntax is supported and unambiguous between parsers
Avatar
Avatar
heinrich5991
no parsing? you have to know what syntax is supported and unambiguous between parsers
For env variables?
Avatar
heinrich5991 2024-10-14 14:54
for .env files
14:55
there are various libraries for various programming languages that read .env files to set environment variables
Avatar
if you start using linebreaks, you should not use a .env file
Avatar
I have yet to encounter any quirk with env files ngl. Pretty much everyone seems to implement them in atleast a similar enough manner that I never noticed any difference
Avatar
Avatar
jxsl13
if you start using linebreaks, you should not use a .env file
And yes, just all single line strings or get an actual config format
Avatar
heinrich5991 2024-10-14 14:56
(strictly speaking and not what I meant, env variables also need parsing, but that's done by glibc usually, so it's consistent)
Avatar
Avatar
Learath2
And yes, just all single line strings or get an actual config format
heinrich5991 2024-10-14 14:56
what about quote support? quotes adjacent to each other?
14:57
ABC="DEF"
14:57
duplicate keys?
Avatar
Avatar
heinrich5991
duplicate keys?
Again, not something that happens often enough in a simple enough config that I'm using env file
Avatar
heinrich5991 2024-10-14 14:57
VAR1="ABC" VAR2=ABC VAR3=ABC" VAR4='ABC' VAR5="ABC""ABC" VAR6="ABC"ABC
Avatar
I mean, you can do stupid stuff
Avatar
heinrich5991 2024-10-14 14:58
yes, and I'd like my tools to agree on rules on stupid stuff
14:58
so that they perform consistently
14:58
and not one library erroring out and the other accepting it as-is
Avatar
I don't really care, because I don't do stupid stuff
Avatar
heinrich5991 2024-10-14 14:58
because I made a mistake in the text editor
Avatar
Avatar
heinrich5991
so that they perform consistently
But in exchange you need to bring in a massive dependency that'll make your compile times and binary size worse
Avatar
it's a point, but it has such a miniscule impact even if the parsing were to be inconsistent. (edited)
Avatar
heinrich5991 2024-10-14 15:00
except for VAR3 and VAR6, I'd really like consistent behavior, they seem like things that could actually happen
Avatar
Most of the time my env vars are just API keys and I have like 5-6 of them. Is that really worth bringing in a full toml or json parser in?
Avatar
Avatar
heinrich5991
except for VAR3 and VAR6, I'd really like consistent behavior, they seem like things that could actually happen
Fwiw I actually don't even know what happens with quotes with the dotenv library in rust which is the one I use most. That's how rare this is
15:01
Given it never came up I'm guessing it adopts posix rules
Avatar
@deen Did something change with nightly building? There are now two sets of debug symbols for each day on https://ddnet.org/downloads/symbols/ since around 2024-09-29. Seems like the arm64 build is never duplicated also
Avatar
Avatar
MilkeeyCat
what's your favorite config file format? xd
txt
Avatar
Avatar
heinrich5991
cool 🙂 I'm interested in how an axum server looks like
actually can you remind me tomorrow? had something come up, will probably be late home today
Avatar
heinrich5991 2024-10-14 15:24
I'll ask again if I remember 🙂
Avatar
GitHub BOT 2024-10-14 15:35
Avatar
Avatar
Robyt3
@deen Did something change with nightly building? There are now two sets of debug symbols for each day on https://ddnet.org/downloads/symbols/ since around 2024-09-29. Seems like the arm64 build is never duplicated also
I'm struggling with dyndns since I have cgnat
15:37
so my builds are more manual than usual
15:37
for arm64 steam is not built because steam doesn't support it
15:38
So it's not just the symbol missing, there was also no release for that day/arch
15:39
You can probably delete some old nightly symbols if you need space 😄
Avatar
So far so good: /dev/md1 468G 374G 71G 85% /
Avatar
GitHub BOT 2024-10-14 15:58
0bb829b Add IStorage::RetrieveTimes function as fs_file_time wrapper - Robyt3 181b6d8 Improve skin downloading: load from downloadedskins if possible - Robyt3 c829639 Merge pull request #9123 from Robyt3/Client-Skin-Download-Refactoring - heinrich5991
16:00
bb53b9e Revert "Fix 0.7 server favorites" - ChillerDragon 0c79789 Store 0.7 favorites in url format - ChillerDragon 8290db9 Merge pull request #9142 from ChillerDragon/pr_07_fav_urls - heinrich5991
Avatar
Which part of generating the web pages is slow? 1 million finishes is a lot but should it really timeout?
Avatar
Avatar
Tater
Which part of generating the web pages is slow? 1 million finishes is a lot but should it really timeout?
Ranking, it requires a group by player, then select everyones best ranks, then rank over that
16:25
Teamranks are even worse iirc, but I don't completely remember
Avatar
What if we had a generated table of deduplicated finishes with an index over finish time to avoid the sorting? (edited)
16:26
Ah team ranks also
Avatar
Avatar
MilkeeyCat
Im wondering if it's possible to have a pointer to a fat pointer xd
MilkeeyCat 2024-10-14 16:31
Fun fact, when you pass &[T] to extern "C" function it puts pointer in one register and length in another one
Avatar
Avatar
Tater
Which part of generating the web pages is slow? 1 million finishes is a lot but should it really timeout?
It takes 13 seconds for Multeasymap which deen actually may have deduped (so we actually probably lost data for this map, not that multeasymap finishes are useful), and so long for Linear that I still didn't get the result back
16:36
SELECT l.name, mintime, l.timestamp, playcount, mintimestamp, Substring(l.server, 1, 3) FROM (SELECT * FROM record_race WHERE map = 'Multeasymap') AS l JOIN (SELECT name, Min(time) AS minTime, Count(*) AS playCount, Min(timestamp) AS minTimestamp FROM record_race WHERE map = 'Multeasymap' GROUP BY name ORDER BY mintime ASC LIMIT 20) AS r ON l.time = r.mintime AND l.name = r.name GROUP BY name ORDER BY mintime, l.name; Here is the query though
16:37
MariaDB [teeworlds]> select l.Name, minTime, l.Timestamp, playCount, minTimestamp, SUBSTRING(l.Server, 1, 3) from (select * from record_race where Map = 'Linear') as l JOIN (select Name, min(Time) as minTime, count(*) as playCount, min(Timestamp) as minTimestamp from record_race where Map = 'Linear' group by Name order by minTime ASC limit 20) as r on l.Time = r.minTime and l.Name = r.Name GROUP BY Name ORDER BY minTime, l.Name; +---------------+---------+---------------------+-----------+---------------------+---------------------------+ | Name | minTime | Timestamp | playCount | minTimestamp | SUBSTRING(l.Server, 1, 3) | +---------------+---------+---------------------+-----------+---------------------+---------------------------+ | president | 37.44 | 2024-09-29 03:00:16 | 2117 | 2024-09-29 01:45:02 | GER | | Nephritis | 38.44 | 2024-09-08 20:04:48 | 2064 | 2024-01-17 13:32:48 | RUS | | 63 turtles | 39.04 | 2024-08-31 00:24:28 | 212 | 2023-06-10 23:44:55 | RUS | | EH OS GURI | 39.24 | 2023-01-08 21:11:16 | 1965 | 2023-01-04 00:01:21 | BRA | | boss | 40.04 | 2024-09-14 19:59:14 | 76 | 2024-06-22 13:53:57 | GER | | shadowchet | 40.28 | 2023-08-07 11:12:29 | 631 | 2022-06-09 03:00:52 | IRN | | -SIKE | 40.34 | 2023-08-07 11:05:57 | 124 | 2022-04-14 10:48:29 | IRN | | Fera | 40.42 | 2021-01-16 18:43:59 | 80 | 2020-10-23 16:53:17 | BRA | | pv | 40.42 | 2021-01-16 19:01:03 | 1405 | 2020-10-20 22:50:25 | BRA | | Ɗepғořce | 40.46 | 2024-09-16 21:02:57 | 104 | 2024-03-23 17:01:46 | RUS | | Đespiᴛe | 40.62 | 2024-09-09 23:44:06 | 25 | 2024-08-13 12:01:30 | GER | | Loonex | 40.74 | 2021-01-13 04:20:13 | 63 | 2020-10-17 23:49:59 | BRA | | Bemowi | 40.76 | 2024-09-24 04:26:08 | 88 | 2024-06-03 22:20:14 | USA | | coradax | 40.94 | 2020-10-18 11:32:23 | 71 | 2020-10-10 16:00:18 | GER | | PapotaV | 41 | 2024-10-06 02:57:35 | 574 | 2021-03-16 04:55:27 | USA | | Weryxs | 41.42 | 2024-09-14 00:37:13 | 335 | 2024-06-27 23:58:55 | GER | | misstrip noob | 41.48 | 2024-07-11 00:38:55 | 5 | 2021-10-05 12:24:07 | USA | | Cougar~ | 41.6 | 2021-01-08 17:13:37 | 4 | 2020-10-18 16:47:55 | BRA | | FAIRUS | 41.66 | 2024-09-13 23:03:39 | 130 | 2021-09-05 10:35:33 | RUS | | godly | 41.7 | 2024-06-08 13:58:35 | 1101 | 2023-10-08 16:31:31 | GER | +---------------+---------+---------------------+-----------+---------------------+---------------------------+ 20 rows in set (5 min 3.551 sec)
16:37
5 minutes 3 seconds for Linear
Avatar
#include <stdio.h> int main(void) {     void *x = &x;     // We need an explicit cast for &x here, since printf is a     // varargs function.     printf("x = %p, &x = %p\n", x, (void*)&x); } And with GCC 14.2.0, this does indeed work, with zero warnings with the flags -std=c23 -Wall -Wextra -pedantic!
17:16
keks
Avatar
Jupstar ✪ 2024-10-14 17:25
Yes, wazzup?
Avatar
Avatar
Ryozuki
#include <stdio.h> int main(void) {     void *x = &x;     // We need an explicit cast for &x here, since printf is a     // varargs function.     printf("x = %p, &x = %p\n", x, (void*)&x); } And with GCC 14.2.0, this does indeed work, with zero warnings with the flags -std=c23 -Wall -Wextra -pedantic!
Wow, I actually did not know this one either
Avatar
"You can implicitly cast between void* and any other pointer type" Lmao
17:57
That's so horrible
Avatar
is there a non-sqlite dump of the database?
18:03
._. (edited)
Avatar
What's wrong with sqlite?
Avatar
nothing, just wondering
Avatar
What type of dump would you want
Avatar
.sql :D
18:05
probably 10gb text
18:05
kek
Avatar
Avatar
jxsl13
is there a non-sqlite dump of the database?
Jupstar ✪ 2024-10-14 18:05
yes
👀 1
18:06
But the website is down for me
18:06
but somewhere under statistics
Avatar
somewhat
18:06
oops
18:06
lol
18:06
18:06
csv
18:06
me gusta
18:07
~1.5gb
justatest 1
Avatar
oh lol
Avatar
1.5gb is small for a game as big as ddnet tho
18:08
I guess the terabytes of data is in teehistorian lol
18:09
wild
Avatar
Avatar
Tater
That's so horrible
Wrong opinion, dni
Avatar
Avatar
Tater
I guess the terabytes of data is in teehistorian lol
Yes many terabytes of teehistorian
Avatar
Avatar
Tater
?
Implicit casts are what make C the beautiful language it is ❤️
Avatar
you could at least enforce some sort of wildcard cast to make it clear that it's happening
Avatar
sendto(fs, buffer, final_size, 0, &this->sock_addr, 16) ❤️
Avatar
MilkeeyCat 2024-10-14 18:20
that's a better example xd
Avatar
Avatar
Learath2
SELECT l.name, mintime, l.timestamp, playcount, mintimestamp, Substring(l.server, 1, 3) FROM (SELECT * FROM record_race WHERE map = 'Multeasymap') AS l JOIN (SELECT name, Min(time) AS minTime, Count(*) AS playCount, Min(timestamp) AS minTimestamp FROM record_race WHERE map = 'Multeasymap' GROUP BY name ORDER BY mintime ASC LIMIT 20) AS r ON l.time = r.mintime AND l.name = r.name GROUP BY name ORDER BY mintime, l.name; Here is the query though
are the indexes on the production ddnet server public knowledge?
Avatar
It should be public somewhere
18:26
If not it's no secret someone can put it up
Avatar
I don't think they are genearated by the server
18:26
when it creates tables
18:30
chatgpt o1 mini happily generated dozens of ideas for speeding up the query xd
Avatar
MilkeeyCat 2024-10-14 18:31
how many of those actually work? 😬
Avatar
I expect they probably work but idk if they are actually faster
18:33
but it has all the ideas you could probably come up with on your own
18:35
it really wants to make a covering index and use a window function. it seems to always pick this strategy
Avatar
hm, some weird error popped up that blocked my game, tf?
18:44
wait i msg one of you experienced devs
Avatar
you can put it in #bugs if you want many people to look at it
Avatar
not sure if its safe to share the file? not experience myself to know
Avatar
Weirdly, this only happens when using ASAN
Avatar
I suspect clamp() wrong order
Avatar
progress bar overflow
Avatar
Avatar
Tater
I suspect clamp() wrong order
It doesn't clamp the progress amount AFAICT, it seems like more progress is being reported than expected
Avatar
Jupstar ✪ 2024-10-14 20:06
Yeah I seen that too, but dunno if asan
20:06
Maybe just slow start
Avatar
Maybe only when rendering is very slow (e.g., due to ASAN)
Avatar
Jupstar ✪ 2024-10-14 20:07
Yeah maybe I started with lavapipe
Avatar
why is importing those sql dumps into a mariadb such a pain in the ass
Avatar
While packaging taterclient for NixOS, we noticed that Nixpkgs' macOS builds of ddnet (both for upstream and forks) fail to start with the following error: dyld[28513]: Library not loaded: /nix/store/9qcrq72n5qvfx1skajjnw4067bsv2d5c-ddnet-18.4/lib/libsteam_api.dylib Referenced from: <8FFD8DC0-2313-3485-9855-CB77FB0F038F> /nix/store/9qcrq72n5qvfx1skajjnw4067bsv2d5c-ddnet-18.4/bin/DDNet Reason: tried: '/nix/store/9qcrq72n5qvfx1skajjnw4067bsv2d5c-ddnet-18.4/lib/libsteam_api.dylib' (no such file), '/System/Volumes/Preboot/Cryptexes/OS/nix/store/9qcrq72n5qvfx1skajjnw4067bsv2d5c-ddnet-18.4/lib/libsteam_api.dylib' (no such file), '/nix/store/9qcrq72n5qvfx1skajjnw4067bsv2d5c-ddnet-18.4/lib/libsteam_api.dylib' (no such file), '/usr/local/lib/libsteam_api.dylib' (no such file), '/usr/lib/libsteam_api.dylib' (no such file, not in dyld cache) I couldn't find anything in the codebase that would link against libsteam_api.dylib on macOS (edited)
20:52
Or is this the stub steam_api?
Avatar
steam library seems to be coming from an external source.
Avatar
Avatar
Scrumplex
Or is this the stub steam_api?
Jupstar ✪ 2024-10-14 20:56
yes
20:57
except you have STEAM cmake flag on, which i doubt xd
Avatar
MilkeeyCat 2024-10-14 21:03
Is there a way to stop github workflow except of clicking cancel workflow button? It's stuck for 30 mins already and nothing happens
Avatar
Jupstar ✪ 2024-10-14 21:04
no
Avatar
MilkeeyCat 2024-10-14 21:04
cool
Avatar
Jupstar ✪ 2024-10-14 21:04
Maybe you can delete it with enough permission
Avatar
its tired give it some rest
Avatar
MilkeeyCat 2024-10-14 21:05
i ran it first time in 3 months -.-
Avatar
Avatar
Jupstar ✪
Maybe you can delete it with enough permission
MilkeeyCat 2024-10-14 21:05
i can only cancel it, there's no delete button lol
Avatar
Avatar
Jupstar ✪
yes
the issue in our case seems to be that we are building the client WITHOUT the DMG option, so the library gets installed to <prefix>/lib/ddnet/ while the binary only looks in <prefix>/lib/ (edited)
21:08
I will just manually patch the binary's rpath to look in <prefix>/lib/ddnet but I might try to fix it in CMake directly
Avatar
Jupstar ✪ 2024-10-14 21:09
You can also try to static link the stub
21:10
Seems like on Linux we do that
Avatar
GitHub BOT 2024-10-14 21:21
This increments the loading progress client_data7::g_pData->m_NumImages times by calling RenderLoading: https://github.com/ddnet/ddnet/blob/8290db97b80082f10dcbece183bd5eda5ad1e8c2/src/game/client/gameclient.cpp#L388-L395 However, the total loading amount does not include the 0.7 images: https://github.com/ddnet/ddnet/blob/8290db97b80082f10dcbece183bd5eda5ad1e8c2/src/game/client/components/menus.cpp#L899 This causes the loading bar to overflow, although this is only visible w...
poggers2 1
Avatar
Avatar
GitHub
Click to see attachment 🖼️
i had to optimize country flags so we save 1kb ,meanwhile there are 0.7 sounds that are exact same as 0.6, and aren't even used? 😂
🏠 3
🔥 3
Avatar
image optim is a great tool for that justatest
Exported 262 message(s)
Timezone: UTC+0