#dev-general

1 messages · Page 368 of 1

heady birch
#

well

#

that address looks odd

quiet depot
#

it's not a hardware issue

#

it's bad code

heady birch
#

lol

quiet depot
#

or gamma rays

stuck harbor
#

hehe I installed a macos vm

#

take that

heady birch
#

IMPOSSIBLE

stuck harbor
#

I'll buy a new gpu for passthrough

#

I thonk its on macos catalonia rn

hot hull
#

So when should I yeet that drive out the window?

quiet depot
#

god passthrough

#

so much effort

#

why can't virt manager just set it up for me

hot hull
#

My only concern is it'll damage the driveway

stuck harbor
#

much reward tho

#

ew virt manager

#

I config everything in shell scripts

quiet depot
#

cool

stuck harbor
#

even worse

||vmware||

quiet depot
#

lol

#

that's what I used to use

#

then one day I had an epiphany

#

"why am I using vmware i'm literally on linux"

stuck harbor
#

haha

#

an epiphany from the gods of unix

quiet depot
#

I don't need passthrough on pc anyway

#

if I need windows I have dual boot

#

I need it for my laptop

oblique heath
#

hot take but i think using a VM is cleaner than using dual boot

stuck harbor
#

yeah I agree tbh

quiet depot
#

it's separate drive dual boot

stuck harbor
#

I'm considering getting another gpu for passthrough

quiet depot
#

not bm's clusterfuck single drive dual boot

oblique heath
#

well even still

stuck harbor
#

I may have a windows partition on my singular 1TiB hard drive

#

possibly

quiet depot
#

I need windows on laptop for webex

stuck harbor
#

buy a mac then

oblique heath
#

using a VM is more scaleable, less risky, and there isn't enough overhead to really be concerned about

stuck harbor
#

macbook I mean

jovial warren
quiet depot
#

apple hasn't ever offered that

stuck harbor
#

well their M1 chips are pretty sick

quiet depot
#

I think you misspelt shit

stuck harbor
#

I did not

#

I've been a big supporter of arm for years

#

ofc apple pull it off on the desktop first

quiet depot
#

m1 solves fuck all

#

literally worse switching to that than linux

oblique heath
#

arm is nice but it's not good for anything besides low power

stuck harbor
#

m1 is super low tdp

jovial warren
#

the reason why things like MacOS run much smoother is because they can make assumptions about the hardware they’re running on

stuck harbor
#

and decent performance

quiet depot
#

yeah but

#

idgaf about tdp

#

i just like power

#

raw power

stuck harbor
#

I do care on laptops

jovial warren
#

Windows has to deal with drivers and shit to adapt to the OS it’s on

stuck harbor
#

I like battery

quiet depot
#

ah yeah well

jovial warren
#

laptops bad

stuck harbor
#

on desktop I actually prefer low form factor systems

jovial warren
#

desktop good laptop bad

quiet depot
#

pro gamers like me use both

jovial warren
#

nah m8, ATX best form factor

#

facts

oblique heath
#

eATX?

jovial warren
#

you can attach the most to ATX motherboards

quiet depot
#

yeah atx is really the way to go

stuck harbor
#

meh

jovial warren
#

ATX is the only way to go

quiet depot
#

iwanio are you one of those weirdos that also use half keyboards?

stuck harbor
#

yes, I am

quiet depot
#

with the num pad and arrows missing

jovial warren
#

haha knew it

stuck harbor
#

I don't need 'scroll lock'

jovial warren
#

man how can you program without arrow keys

stuck harbor
#

emacs

quiet depot
#

I use nearly my whole keyboard

jovial warren
#

if you don’t have arrow keys you’re overusing the mouse

quiet depot
#

only keys I don't use are pause break and screen lock

stuck harbor
#

no bardy

#

emacs

jovial warren
#

wat dis

stuck harbor
#

I don't need mouse or arrow keys

#

I use keybinds

jovial warren
#

my keyboard doesn’t have sys rq on it sadge

stuck harbor
#

I kinda want the massdrop alt

#

super cool

jovial warren
#

sys rq is actually still useful on Linux

stuck harbor
#

hmm?

jovial warren
#

you can directly send the kernel a SIGTERM if your UI freezes

stuck harbor
#

ah yes

oblique heath
#

or just use dont use a ui

quiet depot
#

iwanio

#

r u the kind of person that buys mouses with holes in them

jovial warren
#

I ain’t spending my time watching YouTube videos by downloading them through cURL and displaying them using ASCII characters thanks lol

oblique heath
#

if you want to watch youtube use your phone or windows

quiet depot
#

what about code

#

what do I use then

oblique heath
#

linux

jovial warren
#

IntelliJ for ASCII lol

quiet depot
#

no

#

what tool

oblique heath
#

vim

quiet depot
#

if there's no ui

#

vim

#

ok

#

can vim do everything that intellij can do?

jovial warren
#

nope

oblique heath
#

it can do like 95% of it

#

with addons

jovial warren
#

vim is a text editor

#

IntelliJ is an IDE

#

vim is a great text editor, but it will never be better than IntelliJ

oblique heath
#

what do you need to do that only intellij can do

jovial warren
#

also, I’ve used Windows for development so much now that I’ve finally started to learn how command prompt works

#

does vim have visualisation of dependencies? easy switching between files at the click of a button? ctrl+click? import optimisation? auto code formatting?

oblique heath
#

plugins

jovial warren
#

my ass

#

also, IntelliJ’s UI is just designed better and feels better than vim

hot hull
#

No reason not to use IJ

#

since it's the best there is

jovial warren
#

I mean, if you really wanna use vim, enable vim in the IntelliJ editor

#

it has an option to do that

oblique heath
#

i'm not saying use vim for the sake of using vim

#

i'm saying use vim because it does everything you need it to, in linux, without a gui

jovial warren
#

it’s like saying you should use Windows Notepad because you can write code in it

oblique heath
jovial warren
#

while technically you can, IntelliJ adds a hell of a lot more, since IntelliJ is designed for programming, Notepad isn’t

#

vim isn’t designed for programming, it’s a text editor

#

trying to turn vim into an IDE is a mistake

oblique heath
#

what is an IDE if not a fancified text editor

jovial warren
#

IDEs generally provide a lot of features that text editors just don’t

oblique heath
#

if all vim is is a text editor

#

then what's wrong with using it to make an IDE

#

aka with plugins

jovial warren
#

I guess

oblique heath
#

i mean intellij has a built in text editor after all

jovial warren
#

but not using IntelliJ is a curse

oblique heath
#

limiting yourself to only intellij is a curse

jovial warren
#

IntelliJ can do much more than vim can even dream of

oblique heath
#

it's also much heavier, and bloated compared to what you can achieve with vim

jovial warren
#

sure, use vim in the CLI, but not in the GUI

oblique heath
#

that

#

is all i'm saying

#

xd

jovial warren
#

when IntelliJ is available, always pick IntelliJ

#

also, using vim in a UI is a curse

oblique heath
#

i do agree with that

jovial warren
#

gvim is absolutely terrible

#

changing the subject, did you know Krypton has watchdog?

#

a.k.a a separate thread that makes sure the tick time doesn’t go over a certain threshold

oblique heath
#

is that what makes sure ticks catch up to the ideal tps

jovial warren
#

and shuts down the server if it does, assuming it’s crashed

oblique heath
#

how are the coroutines currently organized to tick everything

#

if that exists

jovial warren
#

it still seems a little buggy, and seems to shut down seemingly at random, but it seems to work

#

ticking is sync

oblique heath
#

ah so for now it's just a single thread

jovial warren
#

it might always be a single coroutine

#

currently, it does time syncs (increments the time and sends out time updates every second to all players)

hot hull
#

I mean does the game tick have to wait for shit to execute

jovial warren
#

wdym?

#

if you mean like how Glowstone schedules tasks in the ticking then no, tasks are scheduled completely separately

#

they are scheduled on request

hot hull
#

I don't really know what I'm talking about so kek

jovial warren
#

lemme show you

#

we won’t be doing that

#

task scheduling won’t depend on how fast the server is ticking

#

it will be scheduled and executed separately from the primary coroutine and the ticking won’t have any idea how many tasks there may be (if any)

#

because it won’t touch them

#

so you can safely schedule tasks and have the run exactly after the time you scheduled them without having them run later if the primary coroutine slows down

#

also, there’s no such thing as synchronous commands or synchronous task scheduling

#

I wanna try my best to make as much as possible safely modifiable across coroutines

oblique heath
#

so if tasks run as soon as you schedule them

#

does that mean you can say place + remove + place + remove a block ,all within the same tick

jovial warren
#

theoretically yes

oblique heath
#

will those intermediate blocks actually cause any updates to anything else

#

like if you place+remove+place+remove a redstone block next to a piston

old wyvern
#

um what

oblique heath
#

in a single tick

#

what happens

old wyvern
#

That makes ticking useless

oblique heath
#

^

#

which might not ba a bad thing per se

jovial warren
#

what else could I do though?

oblique heath
#

i would love to see a server that doesn't actually use ticking to update stuff

old wyvern
#

Let the changes be handled on each tick

oblique heath
#

at least not to the extent that minecraft currently does

#

but idk how feasible that is to do while working with a vanilla client

jovial warren
#

I don't intend for block placing and breaking to be ticked

#

I want that to be reactive

#

Block updates will be ticked ofc

#

Atm, the only thing ticked is time

#

Lol

#

Anything that has to be ticked will be ticked

prisma wave
#

Redstone

jovial warren
#

But I don't want to do a vanilla and have everything be ticked

#

Redstone is a block update

oblique heath
#

wait

jovial warren
#

So redstone will be ticked

oblique heath
#

if you place a redstone block, that will not be ticked, right

#

or will it

jovial warren
#

If you place a block from a client, the block updates will be handled reactively

oblique heath
#

okay in that case

jovial warren
#

A.k.a in the processing of the block updates

#

I mean, block breaking amounts might need to be ticked tbh

#

But again, those are block updates

oblique heath
#

so if you place a block, it'll be ticked like normal

jovial warren
#

Not sure yet

oblique heath
#

because here's a concern of mine

jovial warren
#

If a client places a block, the updates for that will be handled on the handling of the block placement

oblique heath
#

lets say a redstone block is placed in the world with an event or whatever

jovial warren
#

Or at least, I think that's the way to go

oblique heath
#

does the redstone dust the block is placed next to also reactively update

#

before the next tick

#

or does the dust wait until the next tick to update

jovial warren
#

Good point

#

Maybe placing redstone dust should cause the chain reaction of block updates

oblique heath
#

this applies elsewhere as well

#

lighting, etc

jovial warren
#

Lighting will also be reactive I think

hot hull
#

I smell lag

jovial warren
#

Yeah I also kinda smell lag

oblique heath
#

having things not be limited by the speed of a tick means you have a lot more potential to schedule a lot of work at once

#

again like placing + breaking + placing + breaking a block

#

if that happens a hundred times in a single tick, and it's reactive

#

you would need to update lighting reactively 100 times within that

#

normally you'd only register one action in a tick at most

#

so you'd only have to update lighting once

jovial warren
#

True

#

Yeah lighting can be ticked

oblique heath
#

i dont think it's as simple as that though - if you tick lighting then all the updates happen at once

jovial warren
#

I could do lighting like the JVM does garbage collection

oblique heath
#

so you're not gaining anything

jovial warren
#

A.k.a you create and destroy stuff all the time, but the lighting engine will clean up lighting every tick

oblique heath
#

yeah

jovial warren
#

Or at least, it will try

oblique heath
#

that makes sense when sending packets to clients too right

jovial warren
#

I will use Starlight for lighting

oblique heath
#

because you'd only send an update packet per tick at most if i understand right

jovial warren
#

Packets being sent to clients are reactivr

#

When the client sends me packets, I sent it packets

old wyvern
#

I hear calin

jovial warren
#

All of the packet handling is and will remain async

#

Calin?

old wyvern
#

Yes

jovial warren
#

Wat dis

old wyvern
oblique heath
#

can you remind me of the end goal of krypton again

#

what it's trying to fix

jovial warren
#

Doesn't really have one tbh

#

It's a fun project for me to work on

#

But I want its performance to at least show vanilla up

#

Just really demonstrate how bad vanilla is

oblique heath
#

lol

#

if it were me, i think the most important thing that should be improved is the obvious: vanilla only uses a single synchronous thread to tick everything

#

sure reactive is nice, but if the same amount of logic is being executed on the thread at the end of the day i dont see why it would improve efficiency

jovial warren
#

You know that reactive logic is async right?

#

All packet handling uses a separate coroutine (may use multiple in the future)

oblique heath
#

well reactive logic doesn't have to be async right

#

it can be but i dont think that's a requirement

#

when i think reactive i think events rather than a clock determining when something happens

jovial warren
#

Yeah that's what I mean too

#

All the packet handling is async

oblique heath
#

well for packets that's fine, it makes sense

#

but most of the workload isnt packets right, it's ticking the world

#

and the way i see it you have two ways to make that faster; either make it so less stuff is ticked overall (with events instead of a clock)

#

or give it more room to handle that same amount of stuff, with multiple threads

#

or both of course, both is ideal

jovial warren
jovial warren
oblique heath
#

yeah asynchronous ticking is definitely a beast

#

but if you did somehow get that working then you'd have a lot of gain

#

like, an indescribable amount

jovial warren
#

I will try to do both

#

If I can pull it off, that would be literally insane

oblique heath
#

the first point i made has been drawn out by paper and other forks already

hot hull
#

Expecting 700% performance increase

oblique heath
#

usually by removing unneeded stuff like entity stuff and all that

hot hull
#

Bardy, imma set up a test server running krypton later

jovial warren
#

I mean, the one downside to my current setup is that asynchronous authentication is impossible

jovial warren
#

See the speed

#

It's actually very fast at what it does because I cache chunks by region when I load them

#

Meaning I can just retrieve them again when you rejoin

#

Won't work forever ik, but it works for now

oblique heath
#

wdym by cache exactly

jovial warren
#

Since you always spawn in the same place

jovial warren
#

Like evicting cache for an hour

#

Just cache all the objects

oblique heath
#

right but... isn't that just you loading the chunk

jovial warren
#

Yeah

oblique heath
#

or i guess a lazy chunk would be closer to this

#

i hope

jovial warren
#

But it avoids me contacting the file system every time

#

As I said, won't work forever since it's under the assumption atm that the same chunks are always loaded every time, but it works for now

#

And it means that at a render distance of 10, you only load almost a million longs

#

For 441 chunks, that's really not bad

#

And after the initial join (which is a tiny bit slower because it has to read files), the caching makes the loading almost instant

#

And there's no delay in receiving chunks like Minecraft has either, since all of the chunk data and light update packets are sent in a for loop

oblique heath
#

would you not get the same effect by just keeping the chunk loaded when the player leaves

jovial warren
#

(Light update before chunk data because otherwise the client thinks it doesn't have lighting data and calculates light itself)

jovial warren
oblique heath
#

so all you're doing is keeping it loaded

#

okay

jovial warren
#

It means the chunks stay loaded in memory

oblique heath
#

yes

jovial warren
#

Lemme link you to the hackery that made this work lol

oblique heath
#

isn't there a loadChunk method

#

or something

#

in the spigot api

jovial warren
#

It has to calculate the positions for the chunks before it asks to load them, so the world manager can filter out anything we don't want

#

Which means 2 for loops

#

But that calculation uses a function that gets a position in a spiral in O(1), courtesy of Stack Overflow and @tranquil crane

oblique heath
#

i can't tell if you're just describing this in detail or actually making it out to be very complicated

jovial warren
jovial warren
#

The amount of looping there is a bit radical though

oblique heath
#

i see

jovial warren
#

And it's not at all optimised

#

That was my first attempt at making that work btw

#

So don't be surprised if it's trash

oblique heath
#

lol

onyx loom
#

hey bardy how far through are u on krypton so far

jovial warren
#

And that's about it

onyx loom
#

pog

#

sounds like minecraft if u ask me

jovial warren
#

Going underwater will still let you walk around like normal (because yes, updating your underwater state is server-side)

#

Not kidding

onyx loom
#

intriguing.

jovial warren
#

It confused Nicole as well lol

#

I mean, Nicole was surprised when I told her I got plugin loading working without URL class loader hacks lol

#

Oh also, sending the block break state is calculated server-side

#

So all I get is a packet when the client starts digging and when they stop digging

oblique heath
#

now as far as async ticking goes

#

i think there's actually a non zero chance to have async updates work safely and with decently efficient use of multiple threads

jovial warren
#

I was thinking of splitting the world into sections (apparently like Aether does), but that proved to be a lot more complex than it sounds

oblique heath
#

right so here's my take on that

#

you do want to split the world into sections

#

but

#

it won't be by chunk or by region or "by" anything in particular

jovial warren
#

Sections of how large btw?

oblique heath
#

see that's the wrong mindset imo

#

first we need to think about why async is bad here in the first place

#

async is bad because the result of one update can impact the result of the next

jovial warren
#

It's bad because of multiple players in the same chunk could get things out of sync?

oblique heath
#

and if we don't calculate them in the correct / consistent order, then we get random results

#

that's why everything is syncrhonous

#

my solution is

#

to use some sort of algorithm to decide whether or not two events are related

#

such that the result of one affects the other

#

then chain these along every event that happens in a tic

#

tick*

#

so you end up with "blobs" of related events

#

aka if a piston pushes a block and that causes a lighting update

jovial warren
#

@old wyvern

oblique heath
#

those are all within the same blob

#

this means that players in different regions of the world will very likely end up inside different blobs

jovial warren
#

I want some opinions on this by people who know a lot more than I do lol

oblique heath
#

and so can be processed independently

#

safely

jovial warren
#

It sounds like a good idea

#

on paper

oblique heath
#

maybe there are some issues with this i can't see right now but this would mean that on average, a busy world could spread the total work into logical chunks across potentially many threads

jovial warren
#

Well, many coroutines

oblique heath
#

the bad part is it can also be really inefficient / just as inefficient as vanilla if things are not spaced out

jovial warren
#

Yeah

#

Not enough threads is bad

oblique heath
#

no

jovial warren
#

But too many threads is also bad

oblique heath
#

i mean

oblique heath
#

coroutines run on a thread riht

#

right*

jovial warren
#

On the JVM, yeah

oblique heath
#

we want not coroutines but actual threads here

#

i think

jovial warren
#

They're very different to threads

oblique heath
#

more threads = more cores utilized

#

(ideally)

#

we don't need coroutines at all here

jovial warren
#

Coroutines are asynchronous subroutines that may be suspended and resumed freely, allowing dispatchers to easily switch between them

oblique heath
#

right but what i'm saying is we dont need to switch between stuff here

#

all of this ^ that i just said

#

should be possible with regular ol' ticking

#

instead of the event stuff you have going on

jovial warren
#

Coroutines are still more lightweight

oblique heath
#

what you're saying is use coroutines that are running on top of threads

jovial warren
#

And more idiomatic (@prisma wave)

oblique heath
#

i'm saying just run threads

#

without the coroutines

jovial warren
#

Coroutine dispatchers are extremely efficient at execution

#

Whilst they are backed by threads, coroutines are generally more efficient at a lot of things than threads

oblique heath
#

thats my point

#

you are using threads either way

oblique heath
#

we don't need to switch between stuff on these threads

#

so we dont need coroutines

old wyvern
#

Throwing a coroutine where you should simply use a thread is just dumb

jovial warren
#

I guess

oblique heath
#

anyways my second point

old wyvern
#

Co routines exist to simplify CPS

jovial warren
#

What do you think of Ivan's idea Yugi?

old wyvern
#

Not as a replacement for threads

oblique heath
#

all i mean by this is if all of the players in the world fall under the same blob

old wyvern
#

What is Ivans idea?

oblique heath
#

this offers zero benefit over regular vanilla ticking

old wyvern
#

ticking is not the issue Ivan

#

If that were the case, all existing games would be considered as performing badly

oblique heath
jovial warren
#

I think the issue is more what vanilla does when it ticks

#

Rather than the actual ticking

#

Ticking in vanilla does much more than it needs to

oblique heath
#

yes but that's not what i am trying to address

#

with my solution

jovial warren
#

Only things that have to be ticked should be ticked

oblique heath
#

you are correct that vanilla ticking does more than it needs to

#

but that's a dead horse

#

that paper and all the other performance forks have been beating to death

#

imo

old wyvern
#

Ivan, the issue is

#

For your solution to work

#

You will need to predict changes

oblique heath
#

yes

old wyvern
#

That doesnt make sense now does it?

oblique heath
#

that's where the magical algorithm comes in

#

i'm assuming here but i imagine the way it currently works is

#

that you have a long list of all world updates that need to be done every tick

#

wait

#

hmm

old wyvern
#

Yes, but the "long" list of updates are something common for all games

#

Altho it is slightly more challenging for a sandbox game

#

Its pretty much the same all the way

oblique heath
#

alright so i guess the problem is

#

that you'd need to know that exhaustive list of all updates before you can sort them

#

into unrelated blobs

jovial warren
#

I still intend to tick worlds separately btw

oblique heath
#

maybe you can step through those updates without completing them entirely, just to build that large tree of all events and organize it to be processed entirely

jovial warren
#

Because you can do that

oblique heath
#

so it's not quite as granular as deciding if any two events are unrelated, but it'd still allow for a good enough spread over several threads to be worth implementing

old wyvern
#

Again, welcome to aether engine domains

oblique heath
#

ah

#

well then

hot hull
#

Oh yea, are they gonna implement aether into java now or no

oblique heath
#

wait

#

how does the aether engine do this

If there are too many entities to simulate effectively, the region of authority will be split, enabling computation to be handled by a different worker.

for minecraft

#

assuming the region of authority is the loaded chunks around a player / group of players

#

how can it split that if we decided that you need to find all of the events are happening in order to split in the first place

old wyvern
stuck harbor
#

uwu

jovial warren
#

is Aether open-source?

oblique heath
#

well if aether is the perfect solution

#

just use aether in krypton bombardy 😉

old wyvern
hot hull
#

Isn't the C version OS?

jovial warren
#

I mean what

oblique heath
#

lol

#

but if aether ever actually gets added to the minecraft jar

jovial warren
oblique heath
#

that kind of kills the market for performance forks

jovial warren
#

yeah

#

Aether could be the Krypton killer

oblique heath
#

imo the only reason people get performance forks is to raise the ceiling for # of players

jovial warren
#

it is

#

factually

oblique heath
#

so even if (and im sure people can) further optimize the future aether minecraft jar

old wyvern
#

Aether is already being added

#

But might be for bedrock

oblique heath
#

people are going to care much much less than they do now

old wyvern
#

Not sure about the Java version

jovial warren
#

like they’ll add Aether to Java though

#

lol

oblique heath
#

they better

jovial warren
#

if Java gets Aether, that could kill Paper

oblique heath
#

it'll finally convince people to switch from 1.8

#

maybe

jovial warren
#

I think Paper would be happy though that they aren’t needed anymore

old wyvern
#

Paper depends on the "vanilla" server

jovial warren
#

true

old wyvern
#

And I assume Mojang has no plans to suppourt plugins/extensions properly

jovial warren
#

yeah

old wyvern
#

so if anything , it would improve paper by a large margin

jovial warren
#

hopefully, Aether support would spark a rewrite from scratch

oblique heath
#

careful what you wish for

#

last time we got a rewrite from scratch we ended up with... bedrock

jovial warren
#

then Bukkit could be discontinued and superceded

jovial warren
#

and it would hopefully kill the market for MCM Spigot forks

#

which would be a day I would kill to see

old wyvern
#

Java version is slowly being rewritten

jovial warren
#

yeah ik

old wyvern
#

Like World related stuff in 1.13

oblique heath
#

at the end of the day, all i want is to be able to run a single 500 player cap server on a 2011 rack server

old wyvern
#

That probably wont happen Ivan

oblique heath
#

😠

old wyvern
#

Even aether uses distributed servers I think

oblique heath
#

distributed... servers?

#

as in, more than one physical server?

old wyvern
#

Yes

oblique heath
#

that's... even BETTER

#

i can run a 5000 player cap server on 10 2011 rack servers

old wyvern
#

I doubt that

#

but yea, its nice

oblique heath
#

running a single server across more than one machine is the ideal

#

you have literally infinite room for growth

#

assuming no cap elsewhere

#

you can rack up a 10k charge on AWS in order to get a few thousand shards for your 50k pop minecraft server SMP world

jovial warren
#

where they rewrote chunk loading and made it worse, ik, I remember aikar saying

#

it uses an FJP-style thread pool iirc

#

but it’s terrible

oblique heath
#

then fix it 🤷‍♂️

jovial warren
#

1.13 was probably one of the most unstable Minecraft releases in the history of Minecraft

oblique heath
#

yeah it crushed the max server pop

#

not to mention the api changes

old wyvern
#

Notch > Microsoft Devs ??? 😮

stuck harbor
#

no

#

wrong

#

very incorrect

jovial warren
#

Notch > Jeb maybe

oblique heath
#

Notch == Mircosoft Devs < dkim

#

DKIM

jovial warren
#

because JE is still lead by Jens Bergensten

stuck harbor
#

stonks

#

well

#

meh

old wyvern
#

And yet it was better when Notch lead 😌

jovial warren
#

well, no

jovial warren
#

Notch thought that 1 chunk per file was good enough

oblique heath
#

well back then it probably was

old wyvern
#

Thing is, this kinda just randomly blew up if you think about it

jovial warren
#

MCRegion fixed that (originally a mod, just shows that Mojang is useless)

old wyvern
#

It was not made with the plan to be the most played game

jovial warren
#

true

old wyvern
#

It was just a random side project that the dude was working on

#

And it just so seemed to be something everyone liked

#

a bit too much

jovial warren
#

but you would’ve thought that you would at least rewrite the code when it becomes insufficient

stuck harbor
#

mhm that would be sensible

old wyvern
#

If it became large enough, rewriting might just not be worth it

#

Especially for a small team

stuck harbor
#

rewrite in haxe:)

jovial warren
#

it’s fucking huge now

old wyvern
#

Technical debt should be taken care of from the start

jovial warren
#

also, they have Microsoft to get developers from

old wyvern
#

And they did 1.13 🙂

jovial warren
#

they have 0 excuses other than laziness

old wyvern
#

When did microsoft buy this anyway?

#

Right after 1.7 or something right?

oblique heath
#

long time ago

old wyvern
#

oh wait yea nvm

jovial warren
#

2014

oblique heath
#

7 years or something crazy

#

i think i was in 7th grade

#

oof

jovial warren
#

I can remember discussing it at primary school lol

old wyvern
#

20Actually yes

jovial warren
#

man that was a long time ago

old wyvern
#

it was 1.7

jovial warren
#

it was 2014

old wyvern
oblique heath
#

wait

#

where's 1.7.10

jovial warren
#

looks about right

old wyvern
#

1.8+ is after microsoft deal

#

See the trend?

#

😌

#

The issue is they used the wrong language

jovial warren
#

the new objectively superior combat changes

#

haskell circlejerk incoming

old wyvern
#

ofc

prisma wave
#

Haskell good?

old wyvern
#

Obviously

#

Haskell best

prisma wave
#

ofc

jovial warren
#

and ofc Haskell is what wakes BM up

#

ffs

prisma wave
#

I've been awake for ages

#

Just busy

#

But yeah

jovial warren
#

you actually gonna come and work on Krypton soon btw?

prisma wave
#

I'm always awake for Haskell

#

Maybe

jovial warren
#

if you are, please lmk beforehand so you don’t do something already being done lol

prisma wave
#

Average non Haskell user has 0 brains

#

Average Haskell user has approximately 450

old wyvern
#

True ^

jovial warren
#

lol

#

would be nice to see you get back on the commit history again BM

oblique heath
#

do I qualify as a haskell user

#

i want brains

prisma wave
#

Maybe

#

Do you comprehend MONADS???

oblique heath
#

no 😢

#

this lazy stuff is giving me a bit of a hard time

prisma wave
#

😫

old wyvern
#

Party Mitten

oblique heath
#

what do I do if i want to force a print before i ask for user input

jovial warren
#

just put a print before the user input?

hot hull
#

kek

jovial warren
#

yeah lol

oblique heath
#

this is the output ^

old wyvern
#

disable buffered input

prisma wave
#

lmao

oblique heath
#

ah

#

i was hoping that was not important

jovial warren
#

also, you heard it here guys

prisma wave
jovial warren
#

a BMI over 14.9 is apparently fat

oblique heath
#

yeah but i figured they were saying it for their grading bot

jovial warren
#

no

#

lol

#

Yugi wtf

old wyvern
#

Yea?

oblique heath
#

so hSetBuffering stdout NoBuffering just makes it so every print flushes as soon as it's run

#

is that how it works?

#

or i guess, removes the need to "flush" at all?

jovial warren
#

Yugi I’m in English, I don’t want to see that on my screen lol

oblique heath
#

how come this works with no complaints

#

but not this

#

i thought $ did the same thing as enclosing the left right side of the statement in parentheses

lunar cypress
#

no

#

it's the same as parens on the right

#

it's left associative by default

oblique heath
#

oh sorry i meant right

lunar cypress
#

I would guess two infix operators like that are a problem

#

because they're both functions that take left and right as inputs

oblique heath
#

i was wondering if it was because of the concantenation

lunar cypress
#

I can see how that could be confusing

#

yeah well, ++ is an infix operator

oblique heath
#

i swapped the rightmost $ for parentheses, still got an error

lunar cypress
#

same problem

oblique heath
#

what exactly about ++ being infix forces me to use parentheses in place of the left $

lunar cypress
#

as I said I'm not sure but I would guess that two infix operators next to each other aren't allowed

oblique heath
#

hmm

#

that sounds reasonable enough to me

jovial warren
#

I swear ++ is suffix notation

#

ah, no, this is Haskell

#

yeah that’s infix

jovial warren
#

that thing you sent earlier

#

I was in English

old wyvern
#

What is that supposed to mean?

jovial warren
#

English class

#

I was in English class

#

I’m currently in Geography

old wyvern
#

oh

jovial warren
#

we never say the word “class” in the UK

#

well, not in this context

old wyvern
#

I was in English
just sounds out of any context

#

I was thinking it had something todo with discord's language settings

jovial warren
#

I’d say “I’m in English” where an American might say “I’m in English class” or “I’m in class”

old wyvern
#

we say with "class" here as well

jovial warren
#

yeah the UK is weird

#

@prisma wave @onyx loom this is a common thing across the country right?

lunar cypress
#

It's the same in German, but I didn't catch that either

#

well, "have" is more common then "be", so "I have English", but still

prisma wave
#

Sure

stuck harbor
#

tis common for me as well

#

ughhh

half harness
#

s so confusing, how does mc give packets to client without port forwarding?

regal gale
#

What does this mean though? Haven't opened IJ for a long time

stuck harbor
#

pfft

half harness
#

so

#

when u make mc server

#

u have to port forward

#

why not the client?

stuck harbor
#

what?

half harness
#

i prob sound so stupid rn

stuck harbor
#

your router recieves the external requests, right?

#

so u have to make 25565

#

send to the right machine

#

on the network

half harness
half harness
stuck harbor
#

well

#

so the client knows ur public ip

#

but that is for your entire LAN

half harness
#

really?

stuck harbor
#

yes

half harness
#

what if im not connected to internet

#

i have no ip?

ocean quartz
#

Duh

stuck harbor
#

correct

sweet cipher
#

How would you be on a server then?

half harness
#

ohhh

#

i thought it was unique

#

for each device

stuck harbor
#

when u change networks, u change ip

#

MAC addresses do that

half harness
#

oh

#

mac?

#

🍎

stuck harbor
#

no

#

MAC

#

not mac

half harness
#

oh

ocean quartz
#

Each device has a assigned local ip that the router takes care to link to the common public ip

stuck harbor
#

^

half harness
#

ic

#

so port forwarding just tells the correct computer?

stuck harbor
#

yes

half harness
#

then the client doesn't have to port forward

#

because it can just send the info back

#

i think

stuck harbor
#

the client can't port forward

#

that is impossible

#

the client cannot communicate with the server directly

#

it communicates with the router

half harness
#

wot

#

ohh

#

so the port

#

so that's why I can't port forward 25565 on multiple devices?

stuck harbor
#

yes

half harness
#

ohhhhhhhhh

ocean quartz
#

Imagine it as a mail delivery
The delivery man takes your package to your house, where you and your entire family live (share the same address) then it's up to your dad to give the package to the correct person in the house

half harness
#

and the mailbox is the router

#

and port forwarding is basically the dad

ocean quartz
#

Your dad in that case is the router

half harness
#

well yea

#

i meant the port forwarding port

#

of the router

#

wait what

oblique heath
#

if you think about it it doesnt matter what port a client uses

#

because they will just tell the server what it is

half harness
#

oh

oblique heath
#

the same is not true for the server port, the client needs to know that ahead of time

#

since the client goes to the server port first

half harness
#

okay 🙂

#

that makes sense why port forwarding has its name 😂

stuck harbor
#

now we have to explain XOR to dkim

#

😉

half harness
#

i thought it was just the firewall stuff

half harness
#

i saw that in kt

stuck harbor
#

do you understand what an AND gate is?

half harness
#

gate?

stuck harbor
#

oh my

half harness
#

im assuming it's &&

stuck harbor
#

welp im not teaching u all of CS

half harness
#

lmao

#

isn't it &&?

oblique heath
#

firewalls generally dont care about outbound traffic

stuck harbor
#

mm

#

indeed

#

obv UFW can care if u make it

#

cause linux is too op pls nerf

ocean quartz
#

Logical gates 😋

stuck harbor
half harness
#

i mean ive heard of gates before

oblique heath
#

yea but there is no point for most cases

half harness
#

in minecraft redstone

oblique heath
#

why would you block outgoing traffic for your own pc lol

ocean quartz
half harness
#

o

stuck harbor
#

tho

forest pecan
#

who wants a jumpscare?

oblique heath
#

how would your firewall even know

stuck harbor
#

linux

#

knows all

forest pecan
#

nobody wants jumpscare?

#

😔

oblique heath
#

nu

half harness
#

ok ill just google xor

stuck harbor
#

no you won't understand it

oblique heath
#

xor says if the two bits are the same they cancel out and equal 0

half harness
#

The XOR operation preserves randomness, meaning that a random bit XORed with a non-random bit will result in a random bit. Multiple sources of potentially ...

#

nevermind

oblique heath
#

otherwise they are 1

half harness
stuck harbor
#

eeeee

ocean quartz
#

Dkim computer chips are nothing more than many logical gates

stuck harbor
#

but reaaallly smol

#

like 6nm

#

or 14 if ur an intel plebian

oblique heath
#

or 40 if you're living in 2011

stuck harbor
#

lol

#

we need to show bm some truth tables

#

not bm

#

dkim

#

man

oblique heath
#

-|>○-

stuck harbor
#

y'all have the same name

oblique heath
#

inverter

stuck harbor
#

mmmmmm

oblique heath
#

=|>- and gate

#

=D- or gate

stuck harbor
#

mm ascii

oblique heath
#

delish

half harness
#

um

stuck harbor
#

dkim google some truth tables

#

this is real computer science

#

😉

forest pecan
#

lmao truth tables are just basically drawing a table, then the value of a and b, and then the expression being evaluated

stuck harbor
#

mmhm

ocean quartz
#

Boolean algebra 😋

half harness
#

wot

#

isn't boolean just true/false

stuck harbor
#

as with everything

#

0 and 1

ocean quartz
#

Yes sir and you can do everything with that

stuck harbor
#

boolean algebra order of operations

#

its

#

Brackets

#

NOT

#

XOR

#

something something

#

i am a very prudent student

ocean quartz
#

Math i the binary level

stuck harbor
#

biiinary

#

binary > denary

oblique heath
#

like a&&b || !a && !b && c

stuck harbor
#

the hek are the symbols u are using

oblique heath
#

given all possible combinations of values for a,b,c you have to figure out if the expression is true or false

#

i'm using symbols dkim can understand

half harness
#

lol

oblique heath
#

normally it'd be ab + a'b'c

stuck harbor
#

(A.B)+(Ā)

#

solve

half harness
#

;-;

ocean quartz
#

Ah good times, i miss school

oblique heath
stuck harbor
#

lol

#

i do not

half harness
#

I'll uh... watch some youtube

oblique heath
#

you get a big table and fill in every possible combination and its result

stuck harbor
#

i have two discords open

#

shoot

half harness
#

wot

forest pecan
#

What is !!!!!!!!!!!true

stuck harbor
#

hmwhat

forest pecan
#

solve it

#

lol

stuck harbor
#

no

half harness
oblique heath
stuck harbor
#

hehe

old wyvern
forest pecan
#

lol

unkempt tangle
#

wtf

#

microsoft is about to buy discord for 10bil

stuck harbor
#

yeah

#

yesterday's news man

unkempt tangle
#

😭

prisma wave
#

yes sir

half harness
#

maybe sir

jovial warren
#

Wat

unkempt tangle
#

Senpai 😭

#

I started using Frida

#

But still no luck 😭

jovial warren
#

Stop being so ambiguous

#

There is no context there whatsoever

stuck harbor
#

ew

unkempt tangle
#

I need welp D;

#

why cant I access those libaries

unkempt tangle
#

What does that mean? Can't he himself load the lua files?

jovial warren
#

Anyone here think it's worth adding vanilla's crash reports to Krypton btw?

forest pecan
#

Does intellij automatically change html files when I edit the javadoc in my classes?

jovial warren
#

You gotta regenerate the docs lol

#

Those HTML files are generated by the Gradle Javadoc plugin

forest pecan
#

damn it

hot hull
#

so cross server communication, what's the best way to approach it, bare in mind I need to trigger events, and send data around

obtuse gale
#

welp hello

#

can i ask a question?

hot hull
#

yes

prisma wave
#

hello jeremy clarkson

jovial warren
#

There are many options

obtuse gale
# hot hull yes

So what is the line if I want to make a menu, for example: i have 3 sorts of unbreaking, 1,2,3. but i don't want that players can instantly buy unbreaking 3, I want them to first buy unbreaking 1, and then 2 and then 3. kinda like upgrades

hot hull
jovial warren
#

I would recommend using Redis, Kafka or RabbitMQ over plugin messaging, since they are just better

#

Imo

obtuse gale
#

alright ty

hot hull
#

Bardy, plugin messaging was never even in question pog

#

link me RabbitMQ

jovial warren
#

Just google RabbitMQ lol

#

It's a bit complex to understand at first, but the amount of features it has is ridiculous

#

You have the concept of users, virtual hosts, exchanges, routing keys, queues

#

It supports pub/sub and point to point

#

It uses an acknowledgement by default I think to ensure messages are received

sweet cipher
#

Are you using SlimeWorldManager Frosty?

jovial warren
#

And supports persisting messages if one of the workers goes down, so you don't lose them

hot hull
#

not using anything at the moment

fluid river
#

Hello;
How do you hide an enchantment of an item with DeluxeMenu?

jovial warren
fluid river
#

Hop, sorry

hot hull
#

do people legit never read channel info ;C

jovial warren
#

Nope

#

Gl losing a message with RabbitMQ

sweet cipher
ocean quartz
#

I'd rather die

jovial warren
#

That would be funny lol

hot hull
#

tfw I'm support and never support anyone anymore fingerguns

jovial warren
#

Lol

#

Maybe leaving the mini mods to it is a good idea

#

Also, you know what I hate the most when people ask for support?

#

What I'm going to call channel popularity hunting

#

When people post in the channels with people in them because they're impatient shits and won't wait for someone to answer them in the correct channel

sweet cipher
jovial warren
#

Looks like clip

onyx loom
#

looks nice 🙂

jovial warren
#

I mean, he has the right colour scheme

half harness
ocean quartz
#

NetBeans isn't even the worse part about that screenshot

jovial warren
#

Never used NetBeans

#

Looks like Eclipse lol

half harness
#

yo I'm not german

jovial warren
#

Lol

#

Lol

#

696969 seconds

#

Lol

lunar cypress
#

What exactly do you expect when you insult them with a slur...

jovial warren
#

NetBeans in 2021 is a curse

#

With all respect to the team behind NetBeans, it's good, but IntelliJ is better

half harness
#

translation?

#

translate plz

lunar cypress
#

Try to put yourself in the shoes of the streamer

#

I'd be annoyed as well if some know it all just came into my chat and insulted me for not using the right program

half harness
#

o

jovial warren
#

What the Americans like to call a "smart alec" lol

old wyvern
#

link

lunar cypress
#

I dont know this dude, ive been in his stream once though I think

#

Played coc

#

awful music

forest pecan
#

holy god i just made a big run

#

i just made jd

#

for all my classes

#

with class headers

#

it was so annoying

#

lol

prisma wave
#

double tap shift

#

Iirc

obtuse gale
#

@prisma wave is it your BIRTHDAY???

lunar cypress
#

I cannot because I don't know

jovial warren
#

Redis good

#

Redis as a key-value store is actually insane

#

Redis as a messaging service is decent

ocean quartz
#

Then why are you watching it?

oblique heath
#

gotta ask him why he's not using eclipse

#

or vi

jovial warren
#

Oml

#

If you use Lombok you might as well use Kotlin

#

Facts

oblique heath
#

is he

#

vaping

hot hull
#

Tell em to uninstall

oblique heath
#

or is that a bong

half harness
jovial warren
#

Lol

half harness
#

what is a bong

jovial warren
#

Oml

lunar cypress
#

it's a shisha

jovial warren
#

Bong is the word I'm familiar with

lunar cypress
#

dunno if that's the english word though

#

we wouldn't call that a bong

jovial warren
#

Basically a thing you use to smoke

#

Like smoke weed

oblique heath
#

smoke weed, right

lunar cypress
#

bruh

#

no

jovial warren
#

Ah right

oblique heath
#

if it's not weed then it's not a bong

#

what is he smoking then

lunar cypress
#

yeah

jovial warren
#

What the fuck is that