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-05-30 00:00:00Z and 2024-05-31 00:00:00Z
Avatar
Avatar
heinrich5991
could Register be an enum, maybe?
in this case I'm thinking this
00:11
then it'd be a simple datatype represented by a byte, copying wouldn't be bad
Avatar
hm static lifetimes could also work
00:42
enum would be better tho imo
Avatar
ws-client BOT 2024-05-30 01:00:28Z
<ChillerDragon> lez go githubber dragon
01:03
<ChillerDragon> codecov.io sent me an email. Did anyone else get that? Is that from the ddnet pipelines? I don't remember giving them my email at some point
Avatar
yes, people just wrote about it a few hours ago
Avatar
Avatar
heinrich5991
could Register be an enum, maybe?
How would it look like?
Avatar
morning
Avatar
morning tea enjoyers and others
Avatar
06b0b83 update featured video - murpii
Avatar
Avatar
MilkeeyCat
morning tea enjoyers and others
Tee enjoyers
Avatar
If anyone has multimonitor setup, what does it show under the Graphics card settings?
05:56
05:57
I suspect there is a screen chooser, but I need to be sure
Avatar
there is one
06:35
06:39
it doesn't seem to work on KWin's wayland compositor though lol
Avatar
What does it show when you click it? I need that info for translation
Replying to @Ewan image.png
Avatar
Thanks!
Avatar
Avatar
Learath2
This is one of the things that annoy me the most about rust, non lexical lifetimes made it a bit better but it still annoys me so much
wouldn't have happened in C
Avatar
Avatar
MilkeeyCat
How would it look like?
You would instead of borrowing the register out of a vector of registers, be returned an owned enum of Register type
Avatar
Avatar
MilkeeyCat
wouldn't have happened in C
definitely wouldn't, C 💪
Avatar
Avatar
fokkonaut
kio didn't have my mod before the community thing. it's that i released my mod just a while ago, now they host it aswell and it's being visited by new players fast cuz its in the community tab.
Before your mod I had an average online of 45-55 players, the online that I have now is just the most loyal players who are waiting for the accounts to return owo
Avatar
Avatar
meloƞ
@TsFreddie gogo! new project UwU owo (edited)
i don't stole project from people. ryo should make it themselves
Avatar
Avatar
TsFreddie
i don't stole project from people. ryo should make it themselves
kek ddnet 3.0 in VR written in rust
Avatar
i wouldn't do that
Avatar
oh btw freddie, what languages do you use the most?
Avatar
it depends really
08:43
but i guess typescript and C#
Avatar
we hire devs at blockworlds corp
Avatar
maybe C++ as well cuz I also modify the engine and sometime write native modules.
08:49
500! strings translated (out of 607) (edited)
Avatar
Avatar
Learath2
You would instead of borrowing the register out of a vector of registers, be returned an owned enum of Register type
Avatar
Yes, atleast I think that's what heinrich was suggesting. You'll have to wait for him to know exactly
Avatar
Avatar
Learath2
Yes, atleast I think that's what heinrich was suggesting. You'll have to wait for him to know exactly
can i hire you
Avatar
Avatar
TsFreddie
can i hire you
I'm already hired until midsummer
Avatar
Avatar
Learath2
I'm already hired until midsummer
my company probably wouldn't be ready until end of the year anyway
Avatar
Then we'll have to see 🙃
Avatar
but i am probably not serious
09:09
owo
Avatar
Avatar
MilkeeyCat
wouldn't have happened in C
nothing happens on C
09:15
only UB
Avatar
Avatar
Learath2
I'm already hired until midsummer
What are you working on?
Avatar
Avatar
deen
What are you working on?
A little on the boring side. Doing some backend work in go, migrating code from a mishmash of elixir ruby and python
Avatar
i wouldn't say that's boring
Avatar
Doesn't sound as bad as your describe it 😄
09:17
But personally I enjoy reimplementing the same ideas again and again at each company I'm at, improving them with each iteration
Avatar
Avatar
deen
Doesn't sound as bad as your describe it 😄
It's not bad, but the code I'm migrating is itself not very interesting, lots of plumbing, converting api responses to requests to another api
09:19
It's also technically an internship so I'm getting paid almost nothing. Which makes it a little less enjoyable
Avatar
it is what it is
09:21
i never feel like our interns enjoy what they do cuz it is always the things that I feel too repetitive but not too difficult to start on.
09:21
and i don't know what else i could offer
09:21
also i've never done intern, so maybe i'm just a selfish person (edited)
Avatar
btw using 1 lifetime only means byte and dword need to have same lifetime
09:23
it may or not be an issue
09:23
but im having a hard time seeing what u doing there xd
09:23
if its a byte and a dword why not save a u8, etc?
Avatar
bruh i thought you were talking about real life
Avatar
we have no life here
Avatar
i was like "you get more than 1 lifetime?"
Avatar
Avatar
Ryozuki
if its a byte and a dword why not save a u8, etc?
those are the names of registers, for example 1 register can be: byte="al", dword="rax"
Avatar
ok yes use a enum
09:27
please use a rust style when coding rust
09:28
also using a enum can make this more efficient
09:28
since the enum can be optimized more
Avatar
why am I still not rusting
Avatar
the problem here is u return a reference to something inside self and then u want to mutate self while holding that ref
09:29
but if its a static known str
09:29
dont use 'a
09:29
use 'static
Avatar
One issue with an enum there is that you are now stuck to declaring a set of registers for the target architecture st compile time
Avatar
and dont use a struct lifetime
Avatar
Avatar
Learath2
One issue with an enum there is that you are now stuck to declaring a set of registers for the target architecture st compile time
i think its what u should do anyway
Avatar
i took so many iron supplements but i never rust.
Avatar
or make that struct own it
09:30
or return a index to it
09:30
anyway enum best imho
Avatar
Avatar
Ryozuki
i think its what u should do anyway
But the codegen ends up being for only one architecture as soon as you compile it
Avatar
use smallstr
09:30
and own it
09:30
then
09:30
Implements SmallString, a String-like container for small strings
Avatar
Owning it is the key here. What you use matters a little less imo
Avatar
what is he doing?
09:31
a compiler?
09:31
backend?
09:31
yeah
Avatar
As soon as you own whatever register handle you serve, there is no double mutable borrow needed
Avatar
you should either own it, or have a arena with string interning
09:31
which is what compilers do
09:32
tbh u should not overcomplicate at this stage
09:32
you should optimize later
09:32
when you have ur architecture done
09:32
its easier to reason
09:32
xd
Avatar
This is btw as designed. Rusts borrow checker doesn't look into functions. So technically what he is doing is actually sane. If you move it out of functions non lexical lifetimes will support it just fine
Avatar
Avatar
Ryozuki
tbh u should not overcomplicate at this stage
Yep, just get it working first
Avatar
This looks interesting
Avatar
a good workflow if u dont have things clear is, first own everything and setup ur stuff working, then see places where u can replace owned for references
09:35
even then, in some places owning is actually more perfomant
Avatar
For the next big language I request that they don't use a common noun
09:37
Googling stuff about go, rust, julia get janky
09:38
No verbs either pls
Avatar
lets go back to single letters 😏
Avatar
Avatar
Patiga
lets go back to single letters 😏
Idk why but it does kinda work well with whatever search algorithm google cooked up
09:40
"Rust structure"
09:41
"Go align"
Avatar
hm is there a single-letter programming language younger than 2000
Avatar
Just some of the ones I hit during this week 😛
Avatar
Avatar
Patiga
hm is there a single-letter programming language younger than 2000
D barely makes it over the line I think
09:42
Oh and also no non-letters in your language names pls. Googling for C++ and C# is also so hard
Avatar
hm d appears to not be popular enough for my ddg searches
Avatar
Avatar
TsFreddie
why am I still not rusting
I don't think Rust is the best language for game dev
09:42
especially with commercial constraints
Avatar
that's true
09:43
i could still just learn for fun tho
Avatar
Avatar
deen
especially with commercial constraints
Why?
09:44
09:44
found some untranslatable strings :^)
Avatar
Actual game devs can probably word that better than me: https://loglog.games/blog/leaving-rust-gamedev/ (comments: https://news.ycombinator.com/item?id=40172033)
Avatar
I'll give it a read but I do have some idea what it will be about
Avatar
i personally thinks it mostly comes down for being relatively new and less existing solutions for it.
Avatar
problem is that blog mostly speaks about that he hates ECS
Avatar
cuz gamedev is never just about the codes
Avatar
which is not really related to rust, but the bevy engine
Avatar
ECS is great if you know what you want. I wouldn't focus on ECS too much unless i'm making an RTS type of situation.
Avatar
Rust being great at big refactorings solves a largely self-inflicted issues with the borrow checker
Yeah I can imagine
09:48
still, i think it is fun to learn rust. i just don't have any additional mental effort i could allocate rn
Avatar
The borrow checker is an amazing piece of software. It's safety however comes at great mental cost. It will take you very very long to completely change the way you think
Avatar
u just have to accept to not rely on borrow checker for every component
09:50
inside the component itself it helps a lot tho
Avatar
Avatar
Learath2
The borrow checker is an amazing piece of software. It's safety however comes at great mental cost. It will take you very very long to completely change the way you think
but when ur proficient with rust its so much fun
09:51
like all tools, u need to adapt urself too
Avatar
I always find my iteration cycle interrupted with mental compiling of borrowing hierarchies for dozens of minutes at a time, which really takes me out of the flow
Avatar
i dont have the same fun coding in rust as i do with go or c++
Avatar
Avatar
Ryozuki
but when ur proficient with rust its so much fun
It's too much work, too much time. I have a decade of experience that needs to be overriden. The solutions I come up with instantly are usually the wrong one in Rust but in other languages they are atleast achievable
Avatar
catxplosion is it crazy that i now spend most of my time making assets anyway, coding is not really what I do dalily now
Avatar
new edlang version out!
Avatar
it'll probably change after I started my own project, since i have to get core components out before I can asset crunch
09:53
catxplosion
Avatar
Avatar
Jupstar ✪
u just have to accept to not rely on borrow checker for every component
This is something that took me too long to get to and still I'm not great at it, but you really need to learn when and how to work around the borrow checker to get truly proficient at rust
Avatar
it's all about the ecosystem and very little about the language features
09:53
for gamedev even bigger
09:54
like webdev
09:54
php sucks but laravel exists
Avatar
i ordered some fried dough cubes, ate half of them and thought, this is really bland and bad
Avatar
Avatar
Ryozuki
php sucks but laravel exists
php is not so bad these days
Avatar
then i just found out there is a tub of condensed milk in the bag...
Avatar
I'll read more of this blogpost later. I need to get back to work moving around unit tests
Avatar
Fried dough cube
Avatar
Avatar
TsFreddie
i ordered some fried dough cubes, ate half of them and thought, this is really bland and bad
whatever a Fried dough cube is
Avatar
i think gamedev in rust would be to make the engine/physics/render in rust
09:55
but game logic in other lang
09:55
with easier iteration
09:55
and no compile
Avatar
Avatar
Ryozuki
i think gamedev in rust would be to make the engine/physics/render in rust
the funny thing is, that what i enjoyed rust most in is actually writing the game logic in it xD
Avatar
renderer etc. could aswell been cpp
Avatar
i would do all pure rust
Avatar
yes
Avatar
but im talking about normies
Avatar
thats easiest xd
Avatar
they like their lua scripts
09:57
😬
Avatar
no RAII no language
Avatar
Avatar
Ryozuki
i think gamedev in rust would be to make the engine/physics/render in rust
too bad that we mostly uses existing engines to save money and time
Avatar
oh right, I had trouble sleeping last night
10:03
so i was just noting every idea i had on my phone
10:03
but everything just ended up with teeworlds
10:03
justatest
Avatar
I do that too xD. I think because teeworlds as a game has many good aspects
10:05
aspects/elements*
Avatar
eg. chat/console/simple ui/demos/map editor
10:06
🥼 🎩
Avatar
@Mr.Gh0s7 r u still working on teeworlds stuff?
10:06
havent seen ya in a while
Avatar
yeah I was on hiatus xD
10:07
I am continuing now but not as in tw dev but as in tw inspired dev ;)
Avatar
Avatar
Mr.Gh0s7
I am continuing now but not as in tw dev but as in tw inspired dev ;)
sounds like u have a real life now
10:07
😬
Avatar
wow. imagine real life
Avatar
Avatar
Jupstar ✪
sounds like u have a real life now
😅
10:08
let's go with that...
Avatar
Software used by businesses often needs to be extensible. For Arroyo, a real-time SQL engine, that means supporting user-defined functions (UDFs). But how can we support dynamic, user-written code in a static language like Rust? This post dives deep into the technical details of building a dynamically-linked, FFI-based plugin system in Rust.
Avatar
1. Create a new map. 2. Open the history view so you can observe it at the same time. 3. Right click the game layer. 4. Change the height from 50 to another value for example 100. This creates a history entry, so far so good. 5. Click on the value selector of another property, for example the Shift by property (default value 1). You only need to click briefly without changing the value. 6. Click on the value selector for the Height property again (also only briefly). This adds another hi...
Avatar
@Ryozuki i might - just for the sake of it.
Avatar
yes, like that. you can also #[derive(Copy)]. the impl Register don't have to take &self but can take self then
11:52
oh, and you should return &'static str instead of &str
Avatar
Avatar
Learath2
Oh and also no non-letters in your language names pls. Googling for C++ and C# is also so hard
that's fixed by search engines nowadays
Avatar
@heinrich5991 say it has to be borrows and the mutables are mandatory. How would you handle that?
12:01
Because technically the borrows are really disjoint, if there weren't those pesky function calls in the way blocking the borrow checkers sight, it would have been fine
Avatar
Avatar
Learath2
Because technically the borrows are really disjoint, if there weren't those pesky function calls in the way blocking the borrow checkers sight, it would have been fine
partial borrowing
12:06
else u have to take the bitter pill and pass ur stuff as function arguments
12:06
then it's not blocking the whole struct
12:06
if that was ur question
12:06
xd
Avatar
yeah, those were what I figured as well, was curious what a rust veteran though
12:08
t
Avatar
I think Ill be returning owned type and slap .clone() there
Avatar
I do understand exactly why you'd code it the way you coded it btw. It's the intuitive thing, there is a bunch of registers, you want to borrow one of them, even the sentences work out 😄
Avatar
It also works if i just return Box<&Register> but we don't do heap here
Avatar
a boxed reference
12:13
wtf
Avatar
(It works because boxes are owned)
Avatar
It works tho santatrollet
Avatar
Avatar
Learath2
(It works because boxes are owned)
Uh huh
Avatar
@MilkeeyCat show code
Avatar
Here can be your ad. Contribute to MilkeeyCat/meraki development by creating an account on GitHub.
12:15
There's also other branch
12:15
With enums
Avatar
btw, when googling around about it I found this crate https://crates.io/crates/lease which is kinda cute
Avatar
where is the code where u want to put box that otherwise doesnt work
12:15
Sec
Avatar
so register is actually a result of expr ?
12:18
or wtf should the error be from the compiler xd
Avatar
Hm?
12:18
That code doesn't work btw
12:18
Xd
Avatar
Avatar
MilkeeyCat
any rust gods, is there a way to make this piece of something work with lifetimes? https://gist.github.com/MilkeeyCat/c283438958aab52a432ec45316fe38d2 pepeW
This illustrates the issue in a minimal form I guess
Avatar
i dont understand why u'd ever box a reference to a known type (edited)
Avatar
Avatar
Learath2
This illustrates the issue in a minimal form I guess
This illustrates my skill issue xd
Avatar
Avatar
Jupstar ✪
i dont understand why u'd ever box a reference to a known type (edited)
I cooked this in my mind and checked. It worked
Avatar
Avatar
MilkeeyCat
I cooked this in my mind and checked. It worked
show how you checked I guess, that's what jupsti is curious about
Avatar
Im on phone now, Ill send code snippet later
Avatar
sure
12:20
but in my head you are not extending the lifetime of the reference by wrapping it inside a box xD
12:21
so it feels kinda weird
12:21
it's also not unsized i guess?
12:22
but anyway, do your phone call
Avatar
Maybe i had shit tons of errors and when i changed to box, it didn't show error but it's not actually correct
12:23
xd
Avatar
lmao
12:23
if it fixed an error i'd like to see that error
Avatar
Avatar
Ryozuki
gogo
i failed and reverted back to windows.
Avatar
nah wdym configuring the linux kernel
12:50
cba
12:50
gimme my gui back
12:50
catxplosion
Avatar
Avatar
meloƞ
gimme my gui back
jajajaaj but calling me gui fanboy
12:50
double standards
12:50
xd
12:50
and i thought installing arch without an install script can be annoying
12:50
gentoo is on another level
Avatar
Avatar
meloƞ
i failed and reverted back to windows.
welcome back
Avatar
my highest respect ryo
Avatar
have you heard of LFS, melon?
Avatar
LFS is easier to install than gentoo (edited)
12:51
frf
Avatar
Avatar
meloƞ
nah wdym configuring the linux kernel
there is genkernel for nobos, it configures it for you
Avatar
you installed Linux From Scratch?!?
Replying to @meloƞ LFS is easier to install than gentoo
Avatar
i think i'll just clean up my windows (so chiller and jupsti dont start puking again when i stream my desktop) (edited)
Avatar
go back try gentoo again, you must be mistaken
Avatar
I definitely won't, because I'm forced to use Windows for now too
Avatar
it's the best distro imagined by mankind, it makes me question whether intelligent creation is actually possible
Avatar
Avatar
Learath2
go back try gentoo again, you must be mistaken
i didnt use genkernel because of that: Genkernel should only be considered by users that have a required need that only Genkernel can meet, otherwise it is recommended to use the Distribution kernel or manually compile your own as it will make maintaining a Gentoo system a lot more simple.
Avatar
Avatar
meloƞ
i didnt use genkernel because of that: Genkernel should only be considered by users that have a required need that only Genkernel can meet, otherwise it is recommended to use the Distribution kernel or manually compile your own as it will make maintaining a Gentoo system a lot more simple.
or use the distribution kernel, that's also fine too, extra easy mode
Avatar
just use kubuntu and stop having excuses to use windows
Avatar
Avatar
Jupstar ✪
just use kubuntu and stop having excuses to use windows
is there any difference other than that Kubuntu is shipped with KDE isntead of gnome?
Avatar
Avatar
meloƞ
is there any difference other than that Kubuntu is shipped with KDE isntead of gnome?
that is an important difference
Avatar
used both, felt both were decent
Avatar
ppl install ubuntu and think linux sucks
Avatar
i use wayland hyprland btw
Avatar
bcs gnome sucks
Avatar
Brodie Rebertson?!
Replying to @meloƞ i use wayland hyprland btw
Avatar
i.. dont know brodie robertson
Avatar
Avatar
meloƞ
used both, felt both were decent
what exactly felt decent tho
Avatar
do something new, use a tiling wm
Avatar
the design?
Avatar
Oh, too bad
Replying to @meloƞ i.. dont know brodie robertson
Avatar
with what it comes shipped with - gnome and plasma work out of the box
Avatar
I use Debian btw
Replying to @Jupstar ✪ just use kubuntu and stop having excuses to use windows
Avatar
Avatar
egyt
I use Debian btw
i currently use debian sid
Avatar
I use stable
Avatar
i beta test for u
Avatar
debian on a home computer is wild, sid is so unstable and stable is so old
Avatar
Avatar
Learath2
debian on a home computer is wild, sid is so unstable and stable is so old
but atleast it has 1 trillion pre compiled packets
12:58
not like arch
12:58
and ubuntu is defs not hipster enough
12:58
so i have no choice
Avatar
just used nixOS for every single environment you work in like scrumplex does gigachad https://codeberg.org/Scrumplex/flake
❄️ Dotfiles and NixOS configurations
Avatar
Avatar
Jupstar ✪
but atleast it has 1 trillion pre compiled packets
I very rarely found myself missing a package on arch tbf
Avatar
Avatar
Learath2
I very rarely found myself missing a package on arch tbf
u rarely use AUR on arch?
12:59
i basically only used it lmao
12:59
i have an arch install btw
12:59
i just dont use it
Avatar
well i'd consider AUR to be part of arch, while not officially stated
Avatar
also arch is more beta than debian sid
13:00
xD
Avatar
??
Replying to @Learath2 debian on a home computer is wild, sid is so unstable and stable is so o…
Avatar
Avatar
meloƞ
well i'd consider AUR to be part of arch, while not officially stated
but i said pre-compiled xD
13:00
AUR is self-compiled
Avatar
I think I had like 7 total AUR packages. 4 of them were binary
Avatar
except you show me how to not self compile
Avatar
ah fair - skipped that message lol
Avatar
I might try Lubuntu, because why not
Avatar
egyt try uwuntu
Avatar
for me it's not really about distro anyway
Avatar
make milkeey proud
Avatar
gimme KDE + codium and i am happy i guess
Avatar
Avatar
Jupstar ✪
for me it's not really about distro anyway
i used arch and nixOS mostly for their user repositories tbh
Avatar
pacman is defs faster than apt xD
13:02
so arch is more compeeling generally
Avatar
I had like spotify, codium-bin, clang-format-static-bin and rsyslog I think
Avatar
never
Replying to @meloƞ egyt try uwuntu
Avatar
maybe like 2 more I'm forgetting
Avatar
chillerdragon BOT 2024-05-30 13:03:38Z
Debian Pog
Avatar
Debian Chad
Avatar
chillerdragon pog
Avatar
apt has a new terminal design now
13:04
have u already seen it chiller
Avatar
debian is like vanilla icecream
Avatar
Avatar
Jupstar ✪
apt has a new terminal design now
it is sad they brag about these designs
13:04
they're a few years off.
Avatar
awesome apt
13:05
awesome
13:05
lol
13:05
ü is hard to render to be fair (edited)
Avatar
If it is so hard to render two additional dots, then how impossible rendering Esperanto would be?! 😱 OH NO (edited)
Avatar
Avatar
Learath2
debian on a home computer is wild, sid is so unstable and stable is so old
I use Debian btw 😏
Avatar
his nix dotfiles are crazy all of these hosts are defined in the same dotfiles
Avatar
The amount of debian@home enjoyers is interesting, maybe it's better nowadays
Avatar
I chose it because gentoo hard kek
Avatar
Last time I used it was squeeze
13:11
Whenever I don't feel gentoo it's usually artix for me
Avatar
I installed gentoo because ryo is using it, debian because jupstar is using it xd
Avatar
I used to have artix but the constant updates made me move to antix (artix = arch, antix = debian)
13:14
and I am using testing repos mainly and sid as optional to install packages that don't exist in testing
Avatar
@meloƞ I'm using arch linux, that works wel for me
Avatar
yeah i prefer arch aswell
13:15
i tried getting into nixOS but the declarative part, while awesome and adaptable just didnt fit my need, so i use arch with nixpkgs
Avatar
Avatar
MilkeeyCat
I installed gentoo because ryo is using it, debian because jupstar is using it xd
epyc
Avatar
chillerdragon BOT 2024-05-30 13:17:15Z
Wot
Replying to @Jupstar ✪ have u already seen it chiller
Avatar
Avatar
chillerdragon
Wot
the new apt terminal design xd
Avatar
chillerdragon BOT 2024-05-30 13:17:35Z
Germany’s moment
Avatar
they make it looks bit cleaner
13:17
i mean when u do apt upgrade
Avatar
chillerdragon BOT 2024-05-30 13:19:15Z
Debian on the road and arch at home is best. Change my mind.
Avatar
i still hate that one arch maintainer
13:20
that ignored by bug report
Avatar
chillerdragon BOT 2024-05-30 13:20:37Z
Hello Fred
Avatar
back in dayz u could for example: just copy the like startline in game layer and post it in front layer.
Avatar
chillerdragon BOT 2024-05-30 13:22:57Z
Wot who which bug
Avatar
that the vulkan package breaks the pkgconfig idea
13:23
u have to explicitly install vulkan-headers, they are not a requirement
13:24
and he was so stubborn to accept i am right
13:24
just a fucker
Avatar
chillerdragon BOT 2024-05-30 13:24:47Z
Did you have a discussion? Xd
Avatar
dunno if i want to post it
13:25
but i brought it to the arch forums xD
13:25
bcs i was so mad
13:25
but on arch forums there are only arch fanboys
13:25
that's the problem
13:26
why tho
Avatar
chillerdragon BOT 2024-05-30 13:27:53Z
Hehe Heinrich stalking milkey
13:27
Lmao
Replying to @Jupstar ✪ bcs i was so mad
Avatar
nice license btw @MilkeeyCat
Avatar
Avatar
heinrich5991
I thought that if my code perfectly will never encounter that last case i can use From thonk
Avatar
Avatar
MilkeeyCat
I thought that if my code perfectly will never encounter that last case i can use From thonk
ask yourself if u want to handle unexpected errors or not
Avatar
imagine having 2 Quads exactly next to each other we should make it easier to edit the corners (example: colour) often u end up click on the wrong one and moveing it or colouring the wrong one
Avatar
errors without callstack kinda sucks too
13:32
i use backtrace with anyhow
Avatar
Avatar
MilkeeyCat
I thought that if my code perfectly will never encounter that last case i can use From thonk
Used to do value-to-value conversions while consuming the input value. It is the reciprocal of Into.
13:33
Note: This trait must not fail. The From trait is intended for perfect conversions. If the conversion can fail or is not perfect, use TryFrom.
Avatar
Avatar
heinrich5991
Note: This trait must not fail. The From trait is intended for perfect conversions. If the conversion can fail or is not perfect, use TryFrom.
do you interpret that as non panic?
Avatar
yes
Avatar
mh
13:38
if they would like you to not panic, then they should add that as language feature
Avatar
that's hard to impossible
Avatar
i'd interpret it as lossless
13:38
a perfect conversion is not a string::fromutf8_lossy
13:38
for example
Avatar
I would enjoy an unreachable!() which only compiles if the compiler can prove it ^^
Avatar
you can have it. but it's super fickle
13:39
because halting problem
Avatar
Avatar
Jupstar ✪
do you interpret that as non panic?
[When to implement From:] The conversion is infallible: if the conversion can fail, use TryFrom instead; don’t provide a From impl that panics.
(edited)
Avatar
Avatar
heinrich5991
[When to implement From:] The conversion is infallible: if the conversion can fail, use TryFrom instead; don’t provide a From impl that panics.
(edited)
but that section says "should" again
13:46
not must
13:46
the rust docs are sometimes really annoying
Avatar
there's no way to enforce it, so how would it be a "must"?
13:47
musts are reserved for unsafe stuff, I think (edited)
Avatar
sure, but if u don't expect a fail in the conversion that having to use try_into can also suck
Avatar
you can just unwrap
13:48
but then it's local to the function that tries to convert it
13:48
it documents where the wrong assumption held
Avatar
Many programming language type systems support subtyping. For instance, if the type Cat is a subtype of Animal, then an expression of type Cat should be substitutable wherever an expression of type Animal is used. Variance is how subtyping between more complex types relates to subtyping between their components. For example, how should a list of...
Avatar
Avatar
Jupstar ✪
but in my head you are not extending the lifetime of the reference by wrapping it inside a box xD
it does't work kek it didn't show these errors because of others xd
Avatar
Avatar
MilkeeyCat
it does't work kek it didn't show these errors because of others xd
figures, I guess it just silenced one error but it now fails later
13:51
I can imagine it silencing one of your lifetime errors I think
Avatar
Avatar
heinrich5991
there's no way to enforce it, so how would it be a "must"?
yes i'd say that is a problem of rust then, the language is not perfect and must be extended
13:53
or do you think it should stay unsound
13:53
by design
Avatar
Is it possible though? I think there are some theoretical issues there, the compiler just can't figure that out, no?
Avatar
Avatar
Jupstar ✪
yes i'd say that is a problem of rust then, the language is not perfect and must be extended
the problem is that you must severely restrict what the language can do for you. otherwise you run into the halting problem very soon or you have built a proof assistant
13:53
I also like proof assistants, but I haven't wrote serious progams in them yet
Avatar
mh but in this case it kinda sounds different
Avatar
(check out stuff like lean, idris or agda for such stuff, where you can prove everything and unwrap is not a thing)
Avatar
the conversion must be perfect. so i assume the problem cannot even create "branches" that lead to panic code (edited)
13:54
or to branches that must be explicitly handled
Avatar
then integer addition/array slicing would need to be forbidden, e.g.
13:57
and you can only call functions annotated with no_panic
Avatar
isnt that what u are basically saying
Avatar
then you get another color for your functions. how does that interact with the rest of the language, e.g. traits?
Avatar
Avatar
Jupstar ✪
isnt that what u are basically saying
I'm saying that the users should guarantee that there are no panics. I don't think the compiler will be able to prove it in a useful amount of cases
Avatar
mh ok
14:00
yeah i dunno i hate such questions
Avatar
and if there's still a panic in the From impl, then it's a bug. but that's what panics are for: bugs
Avatar
if milkey says the value is never one that leads to unreachable
14:00
then he kinda made this proof, independent of if it's true
Avatar
they could implement a fn from that is not the trait
Avatar
Avatar
heinrich5991
they could implement a fn from that is not the trait
sure that's one way
Avatar
Avatar
heinrich5991
I'm saying that the users should guarantee that there are no panics. I don't think the compiler will be able to prove it in a useful amount of cases
I wonder how hard it would be for a compiler to prove that a function is no_panic, you can basically walk up from panic! and color until you hit any function manually annotated no_panic where the user has guaranteed that it won't panic
Avatar
Avatar
Learath2
I wonder how hard it would be for a compiler to prove that a function is no_panic, you can basically walk up from panic! and color until you hit any function manually annotated no_panic where the user has guaranteed that it won't panic
then you forbid integer addition/array indexing, sanity assert! checks, etc.?
14:01
or do you rely on the optimizer optimizing them out?
Avatar
I was thinking an extension to integer addition and array indexing, where they would only be allowed if it can be proven that it's sane, and assert!s getting optimized out
14:04
Mh, it's not actually that easy to extend these in a useful way though, It would be easy for constant indexes
Avatar
Deref docs: expand and remove &quot;smart pointer&quot; qualifier Ready for review This is an unpolished draft to be sanity-checked Fixes #91004 ~~Comments on substance and cont...
14:04
they changed the docs bcs they noticed nobody uses wrappers like the doc intended
Avatar
You start having to think of stuff like returning constraints on the results of a function, so you can get the index of e.g. a byte by lookup and it's guaranteed to be < len(arr)
14:06
(which is going into the proof assistant territory as heinrich mentioned, perhaps a must there is in order though, should sounds too weak, though tbf idk the definitions of those words rust documentation uses)
Avatar
Avatar
Learath2
I was thinking an extension to integer addition and array indexing, where they would only be allowed if it can be proven that it's sane, and assert!s getting optimized out
yea. this is getting into proof assistant territory again, proving that integer additions do not go out of bounds
Avatar
but if we prove it. we can use the fact it never panics as optimization potential
Avatar
Avatar
heinrich5991
yea. this is getting into proof assistant territory again, proving that integer additions do not go out of bounds
It would be easy enough to show when the constraints are right there, e.g. if x < v.len() return v[x] but anything more complicated and there is a loot of peeking into functions required which is not easy (perhaps impossible without some manual annotations)
Avatar
Avatar
Jupstar ✪
but if we prove it. we can use the fact it never panics as optimization potential
I actually don't know this one. Is there some overhead for the "panicability" of the function you are calling in Rust?
Avatar
Avatar
Ryozuki
yes
he doesnt mean runtime overhead i think
14:12
i think he means if it's not transparent?
14:12
to the compiler
Avatar
Avatar
Jupstar ✪
he doesnt mean runtime overhead i think
I meant runtime, but I'm also curious what you meant
Avatar
well idk if they handle the panics/unwiding in llvm like exception handling, in llvm u can mark functions as no except etc
Avatar
Avatar
Learath2
I meant runtime, but I'm also curious what you meant
i thought u meant like if the compiler cannot guess what happens if a panic occurs
14:12
unwind
14:13
there are unwind attributes at llvm level
14:13
so it defs changes runtime perf
Avatar
Avatar
Ryozuki
well idk if they handle the panics/unwiding in llvm like exception handling, in llvm u can mark functions as no except etc
Yeah, that's why I was curious, noexcept has very nice benefits that you can immediately optimize on
Avatar
Avatar
Jupstar ✪
i thought u meant like if the compiler cannot guess what happens if a panic occurs
Sort of, but I was curious what the effects of it are. Like ok compiler can't know if a panic might occur and what that would do, so does it have to do something to prepare for that possibility?
Avatar
Languages that support exception handling typically provide a throw operation to initiate the exception process. Internally, a throw operation breaks down into two steps. A request is made to allocate exception space for an exception structure. This structure needs to survive beyond the current activation. This structure will contain the type and value of the object being thrown. A call is made to the runtime to raise the exception, passing the exception structure as an argument. In C++, the allocation of the exception structure is done by the __cxa_allocate_exception runtime function. The exception raising is handled by __cxa_throw. The type of the exception is represented using a C++ RTTI structure. (edited)
Avatar
Avatar
Learath2
Sort of, but I was curious what the effects of it are. Like ok compiler can't know if a panic might occur and what that would do, so does it have to do something to prepare for that possibility?
mh hard to say xdd but maybe it's harder with such instructions
14:16
if there are no thread::sleep etc it can probably also do other assumptions
14:17
that would benefit for an optimization if you look at the function as something that is kinda self-contained
14:17
similar to how gcc can optimize away heap allocations
14:17
but only to a very certain extend xD
14:18
guess it always depends on the complexity
Avatar
Avatar
Ryozuki
Languages that support exception handling typically provide a throw operation to initiate the exception process. Internally, a throw operation breaks down into two steps. A request is made to allocate exception space for an exception structure. This structure needs to survive beyond the current activation. This structure will contain the type and value of the object being thrown. A call is made to the runtime to raise the exception, passing the exception structure as an argument. In C++, the allocation of the exception structure is done by the __cxa_allocate_exception runtime function. The exception raising is handled by __cxa_throw. The type of the exception is represented using a C++ RTTI structure. (edited)
does edlang have heap allocs already?
Avatar
Avatar
Learath2
I actually don't know this one. Is there some overhead for the "panicability" of the function you are calling in Rust?
same as C++
Avatar
Avatar
Jupstar ✪
does edlang have heap allocs already?
ye but calling malloc urself
Avatar
i kinda also want to create a own language
14:19
i have some cool ideas against global variables
14:19
😬
14:19
but i also want to create the fastest rust serialization lib
14:19
and dd-pg
14:19
and other stuff
14:19
and i am old
14:19
shit
14:19
rq
Avatar
I want to do a language like milkeeycat is doing, there is so much to be learned doing something like that
Avatar
doit
Avatar
Avatar
Learath2
I want to do a language like milkeeycat is doing, there is so much to be learned doing something like that
I feel like if you were to make a language you would do it in a month justatest
Avatar
No way. I'm a slowpoke, I refuse to implement something if I do not really understand it
14:42
So me doing personal projects with no deadline is very slow
Avatar
But you know and understand 50x more than me so...
14:43
Ill probably never finish it xd
Avatar
Avatar
MilkeeyCat
But you know and understand 50x more than me so...
With that comes another character flaw of mine. When I know there is an optimal way to do something. It really bothers me to implement the unoptimal one 😄
14:44
But I will definitely code a compiler of sorts soon enough. I missed doing that sort of thing
14:44
Perhaps I'll use that one parser generator ryo loves this time around
14:45
What "Authed name" means there?
Avatar
Like a mod probably
Avatar
Avatar
egyt
What "Authed name" means there?
It's the color of people who are logged in to rcon
Avatar
rcon = remote console, right?
Avatar
When pressing TAB, you can see their name color change on the scoreboard
14:46
yep
Avatar
@Zwelf how is your attempt at replaying teehistorian files going nowadays?
Avatar
sometimes rust async is such a weirdo: let mut guard = self.guarded_stuff.lock(); guard.some_vec.push(val); drop(guard); if true { self.some_async_func().await; } compile error (mutex guard cannot be hold accross async calls) vs. { let mut guard = self.guarded_stuff.lock(); guard.some_vec.push(val); } if true { self.some_async_func().await; } works
Avatar
Avatar
Jupstar ✪
sometimes rust async is such a weirdo: let mut guard = self.guarded_stuff.lock(); guard.some_vec.push(val); drop(guard); if true { self.some_async_func().await; } compile error (mutex guard cannot be hold accross async calls) vs. { let mut guard = self.guarded_stuff.lock(); guard.some_vec.push(val); } if true { self.some_async_func().await; } works
I guess the compiler is just not smart enough yet
Avatar
Avatar
Jupstar ✪
sometimes rust async is such a weirdo: let mut guard = self.guarded_stuff.lock(); guard.some_vec.push(val); drop(guard); if true { self.some_async_func().await; } compile error (mutex guard cannot be hold accross async calls) vs. { let mut guard = self.guarded_stuff.lock(); guard.some_vec.push(val); } if true { self.some_async_func().await; } works
I think there's an issue for that
Avatar
Avatar
Jupstar ✪
sometimes rust async is such a weirdo: let mut guard = self.guarded_stuff.lock(); guard.some_vec.push(val); drop(guard); if true { self.some_async_func().await; } compile error (mutex guard cannot be hold accross async calls) vs. { let mut guard = self.guarded_stuff.lock(); guard.some_vec.push(val); } if true { self.some_async_func().await; } works
btw is this an actual compile error or a warning?
Avatar
error[E0277]: `*mut ()` cannot be sent between threads safely (edited)
Avatar
Ah I forgor, normal mutexes are !Send
Avatar
Note that i use parking lot, which have other requirements anyway
15:43
but in this case dunno
15:43
i mean it makes sense anyway
Avatar
Avatar
Learath2
btw is this an actual compile error or a warning?
error
Avatar
@Learath2 if u want more epyc rust async puzzles (that u can solve)
15:46
try to make a recursive async call
15:47
😄
Avatar
Avatar
Jupstar ✪
i mean it makes sense anyway
Iirc only because on most mutex implementations you are not allowed to unlock on another thread
Avatar
Avatar
Jupstar ✪
try to make a recursive async call
Sadly I've already been spoiled on this before while working on something
15:49
(the compiler directly spoils the solution when you try it btw 😄 )
Avatar
Avatar
Learath2
(the compiler directly spoils the solution when you try it btw 😄 )
oh yeah already forgot about it 😄
Avatar
I found another thing that is (or at least may be) a problem for Slavic translations: 1 new mention == %d new mentions == 9+ new mentions == Why? Because we have multiple grammatical numbers: 1 mention = 1 згадка 2~4 mentions = 2~4 згадки 5~20 mentions = 5~20 згадок After 20 the cycle repeats 21 mentions = 21 згадка 22~24 mentions = 22~24 згадки 25~30 mentions = 25~30 згадок 31 mentions = 31 згадка 32~34 mentions = 32~34 згадки 35~40 mentions = 35~40 згадок And so on and so forth...
16:17
Also, where those strings are used?
Avatar
in the editor when you get a mention ingame.
Avatar
Avatar
egyt
I found another thing that is (or at least may be) a problem for Slavic translations: 1 new mention == %d new mentions == 9+ new mentions == Why? Because we have multiple grammatical numbers: 1 mention = 1 згадка 2~4 mentions = 2~4 згадки 5~20 mentions = 5~20 згадок After 20 the cycle repeats 21 mentions = 21 згадка 22~24 mentions = 22~24 згадки 25~30 mentions = 25~30 згадок 31 mentions = 31 згадка 32~34 mentions = 32~34 згадки 35~40 mentions = 35~40 згадок And so on and so forth...
These are hell to do for languages that have them varying. Not really many ways to fix it properly without adding special cases
16:41
You'll have to just pick one
16:43
Perhaps ки because it would be correct for 2, 3 and 4 and it's rare that you get more than that many notifications while in editor. But perhaps ок because it's correct for 5, 6, 7, 8, 9+ and that set is larger
16:43
Idk, your language, you know what sounds best
Avatar
Avatar
Learath2
These are hell to do for languages that have them varying. Not really many ways to fix it properly without adding special cases
our translation system should deal with it
16:48
do we have an issue for that yet?
Avatar
Avatar
heinrich5991
our translation system should deal with it
Mh, how though, keeping this one generic is hard. Would imo belong in the language file, but I don't think we want any logic in there
16:50
Because what other language would the pattern 1,2-4,5-20,21,22-24,25-30... be useful for
Avatar
gettext can do it. they're using a different function for strings that may contain plurals
16:50
you'd declare at the top of the language file which plural rule to use
Avatar
but there isn't even guaranteed to be a plural rule that you can apply to all nouns. In turkish the plural suffix changes sound based on the sound rule of the noun it attaches to e.g.
16:52
Even in english it's not that trivial to pluralize any word, so many exceptions
Avatar
Avatar
Learath2
but there isn't even guaranteed to be a plural rule that you can apply to all nouns. In turkish the plural suffix changes sound based on the sound rule of the noun it attaches to e.g.
hm? there's a string that you translate. you insert all the necessary plurals for strings that can contain plurals
16:53
"%d out of %d servers", "%d out of %d server" (edited)
Avatar
I have a short question. How can I get the type of a Tile? For example TILE_FREEZE or TILE_UNFREEZE? It seems that the CTile index isnt meant for that...
Avatar
Avatar
heinrich5991
hm? there's a string that you translate. you insert all the necessary plurals for strings that can contain plurals
Currently say we translate %d out of %d servers and %d out of 1 server (not the real case), what do you propose these become? (edited)
Avatar
I'd translate "%d out of %d server" to all the plural rules the language needs
Avatar
And how would Localize decide which one to use?
Avatar
i.e. PluralLocalize(i, "%d out of %d server", "%d out of %d servers")
16:55
(constrains each string to one plural (this is how gettext does it))
16:55
if we wanted a fancy solution, we'd probably use something like fluent
Avatar
Avatar
heinrich5991
(constrains each string to one plural (this is how gettext does it))
We can accept that, but what I don't get is how you'd translate the 2 strings into the fairly complex pattern egyt described
Avatar
Avatar
Trexic
I have a short question. How can I get the type of a Tile? For example TILE_FREEZE or TILE_UNFREEZE? It seems that the CTile index isnt meant for that...
Or is the CTile completely wrong for that?
Avatar
Avatar
Trexic
Or is the CTile completely wrong for that?
Have you taken a look at GetTileIndex and GetFTileIndex?
Avatar
Avatar
Learath2
We can accept that, but what I don't get is how you'd translate the 2 strings into the fairly complex pattern egyt described
at the top of the file you'd declare which plural rule you need
16:59
you'd say: russian plural rule (or however they're called in a language-neutral way)
Avatar
It is supposed to be CTile::m_Index you just need to be checking the correct layer
Avatar
there are probably < 5 plural rules in the languages we translate ddnet to (edited)
Avatar
Avatar
heinrich5991
at the top of the file you'd declare which plural rule you need
Ah, so we still implement on the C++ side the plural rule
Avatar
Avatar
Learath2
Ah, so we still implement on the C++ side the plural rule
ah yes
Avatar
Okay, that was the part that I was unsure about
Avatar
I see, sorry
Avatar
Avatar
Learath2
Have you taken a look at GetTileIndex and GetFTileIndex?
I tried it with GetTile in the collision class. But I was just getting indexes from 1 to 3
Avatar
Avatar
Trexic
I tried it with GetTile in the collision class. But I was just getting indexes from 1 to 3
Well look at the definition of GetTile
17:04
It only ever returns tile indices 0 thru 4, it's only used for collision detection, so it only returns "solidish" tiles
Avatar
Got it, I needed to use GetPureMapIndex to get the index of the tile and then I could get it with GetTileIndex
Avatar
Yep
Frog122 1
Avatar
Avatar
heinrich5991
do we have an issue for that yet?
There is no issue for it iirc btw, if you want to create one
Avatar
I'll just do the roundabout way: New mentions: x
Replying to @Learath2 Perhaps ки because it would be correct for 2, 3 and 4 and it's rare th…
17:42
Replying to @heinrich5991 "20 out of 60 server", "0 out of 1 server"
17:42
^ Example
Avatar
I did so with %i minute left %i minutes left %i second left %i seconds left and with %d of %d server %d of %d servers %d player %d players
Replying to egyt I'll just do the roundabout way: […]
Avatar
yo guys what so you think about changing map change vote veto?
18:20
i havent really seen any case when vote veto helped real players doing their runs
Avatar
If you have an idea feel free to create an issue as a suggestion I guess
Avatar
i didn't check the related code though but i want to ask you what do you think if we have: an empty server 2 players joined they have their join tick (or we can reuse unique client id) another over9000 players join server, theyre trying to change map server sees that player joined later starts a map vote and server has older players that are currently in race state server vetoes the vote
Avatar
What if the 2 players want to vote yes?
Avatar
what about people beeing afk on a server?
Avatar
we can check these two cases?
18:27
yeah, i would be glad to see any other edge case actually
18:27
noted these two
18:27
owo
Avatar
Avatar
Learath2
What if the 2 players want to vote yes?
we can actually start vote and check it
Avatar
i've never seen this. how's it compare to serenityOS rn
Avatar
if they don't vote or vote no vote fails
Avatar
Avatar
meloƞ
what about people beeing afk on a server?
this one is harder imo, what about afk ranks?
Avatar
why is this getting million views?
Avatar
antiranks*
Avatar
i wonder if you can 100% guarantee that this is not abusable
Avatar
abusable as what
Avatar
Avatar
zhn
this one is harder imo, what about afk ranks?
i think you could just check for m_isAfk
Avatar
Avatar
meloƞ
i think you could just check for m_isAfk
nah i mean what to do
Avatar
Avatar
zhn
abusable as what
forcing a map vote with other people running because of a higher tickrate
Avatar
ignore them or veto vote
Avatar
Avatar
meloƞ
forcing a map vote with other people running because of a higher tickrate
what
Avatar
Avatar
Ryozuki
why is this getting million views?
this is how all dev/software youtube content looks to me
Avatar
Avatar
Ryozuki
why is this getting million views?
maybe bcs they well made? xd
Avatar
Avatar
Jupstar ✪
maybe bcs they well made? xd
"linux got wrecked by xz backdoor"
18:31
this is clickbait
18:32
it cant be well made
Avatar
they have their join tick (or we can reuse unique client id) another over9000 players join server, theyre trying to change map what if its the other way around? someone afk at start beeing in race for 2 hours jsut chatting votes a map, basically forcing the vote on people far but only racing for 20 minutes?
Avatar
he must be the first person ever to do clickbait
18:32
lmao
Avatar
Avatar
Ewan
this is how all dev/software youtube content looks to me
this is why i dont look at yt for dev stuff
18:32
its ragebait
18:33
if i make a video "rust is better than C" then i ragebait learath justatest
Avatar
Avatar
meloƞ
they have their join tick (or we can reuse unique client id) another over9000 players join server, theyre trying to change map what if its the other way around? someone afk at start beeing in race for 2 hours jsut chatting votes a map, basically forcing the vote on people far but only racing for 20 minutes?
hm good point
Avatar
Avatar
Ewan
i've never seen this. how's it compare to serenityOS rn
I haven't checked out much of it but it looks very impressive. It even has it's own scripting language and build system. Lot's of work there
Avatar
but wait how would he force it, player needs other players to vote yes
Avatar
well i mean if veto doesnt trigger the vote goes through normally instead of vetoing, even tho there are still people racing
18:36
but for that to be the case there would need to be an actual implementation XD
18:36
i think veto was discussed before
Avatar
the point of vetoing map votes is to protect active racing players
18:37
we have a way to check if player is racing
18:37
and a halfway to check if player is active
18:38
hm okey i see why veto is useless xd
18:39
seems ddnet runs out of game servers
18:39
time to implement multiworld in ddnet codebase :p
KEKW 1
Avatar
@qxdFox hier
18:57
Einfach sagen
Avatar
deutsch oder english :p
Avatar
hello so ive been having problem with lag on ger10 since i think ger2 was removed basically my ping keeps on spiking for a few milliseconds and then goes back to normal and i dont have this problem anywhere else i believe
Avatar
Avatar
Learath2
@Zwelf how is your attempt at replaying teehistorian files going nowadays?
except for my lack of time to work on it great. I'm pretty happy with the current architecture and large parts of physics is implemented. Teleporter and therefore the prng is reproducing. I would consider the physics implementation pretty far. Current next major physics is swichers and moving map entities. There are currently still bugs that look like floating point bugs, but that is a problem for the future. Most of the remaining parts is a chore of creating test cases covering all corner cases and then implementing the physics.
heartw 1
Avatar
Laser is used in both Controls tab (where it stands for "Laser Rifle`) and in Appearance tab. Well..
Replying to egyt So, to clarify myself again, I want two strings modified: […]
Avatar
Avatar
Ewan
this is how all dev/software youtube content looks to me
This is why I block YouTube in my hosts file
19:50
No hate to this person specially but this is the single video that demonstrates my point for why YouTube is nearly useless for programming https://www.youtube.com/watch?v=ZVEOxTyxbk4
19:50
Everything is fake I don't get how people watch this
19:52
There is not a gram of education to be had here (edited)
Avatar
People watch videos even if they are not useful to them
Avatar
Avatar
Peter0x44
No hate to this person specially but this is the single video that demonstrates my point for why YouTube is nearly useless for programming https://www.youtube.com/watch?v=ZVEOxTyxbk4
but this wasnt supposed to be an educational video - i actually enjoyed it, even tho its clickbaity "learning c# in a week" and the thumbnail showing yet another sandbox clone kek
Avatar
egyt: yes, it's problematic
20:07
This is why I block it
Avatar
youtube is free netflix for some, if every video i watched was educational i'd be a gigabrain
20:09
but here i am watching 10 hours of the Cat dancing to EDM
Avatar
my feed is very educational justatest
Avatar
yeah same...
Avatar
I don't have feed - I have Unhook installed
Avatar
ngl you look like the person who would have it
Avatar
Wouldn't*
Avatar
currently the friends list in the browser is sorted case-sensitive. this makes it difficult to find someone, because even if you remember someone's name you might not remember if they had a capital letter or not.
Exported 634 message(s)