#help-development

1 messages ยท Page 2082 of 1

native pond
#

please help i wanna make plugin like login

#

i watch many tutorials but doesnt work

lavish hemlock
#

You could probably have something like uhh

<id here>:
  surname: <surname here>
  name: <name here>

I don't really know much about YAML since I don't use it since it's fucking atrocious

#

@kindred valley

native pond
#

please help i wanna make plugin like login
i watch many tutorials but doesnt work

lavish hemlock
#

Have you considered

#

?learnjava

undone axleBOT
granite owl
#

still looking for a way to achieve this without sending a command as console sender

lavish hemlock
#

Instead of trying to follow some shitty YouTube tutorial?

#

If you actually knew the language, you would have no problems implementing a login plugin

#

I know

#

Work and learning is hard

#

But if you try hard enough (AKA, put in a minimal amount of effort instead of copy-paste)

#

You can achieve โœจ anything โœจ

native pond
#

i am trying to do from days

kindred valley
lavish hemlock
wet breach
#

pretty sure you can still enchant random items

rough drift
lavish hemlock
#

ehh

#

I mean, it's not the worst thing

rough drift
#

uuid is much much more likely to be unique

summer scroll
native pond
#

someone help please

smoky oak
#

?notworking

undone axleBOT
#

"Does not working" is a useless statement. Please describe what exactly is not working, what you expect it to do, and what actually happens. If you get any console errors, also ?paste the entire stacktrace.

wet breach
#

if that is the goal

summer scroll
#

Yeah that's the goal, I want to add enchantment on all items

rough drift
# kindred valley id is random int
Only after generating 1 billion UUIDs every second for the next 100 years, the probability of creating just one duplicate would be about 50%. Or, to put it another way, the probability of one duplicate would be about 50% if every person on earth owned 600 million UUIDs.
```From https://en.wikipedia.org/wiki/Universally_unique_identifier#Random_UUID_probability_of_duplicates
kindred valley
rough drift
#

yes

wet breach
lavish hemlock
#

Yeah but

#

You shouldn't take implementation flaws into account

#

Since they're unintentional

wet breach
#

lol

lavish hemlock
#

And not part of the mathematics of a UUID

rough drift
#

java probs has a good impl

lavish hemlock
#

It does

#

Java's random implementation is quite complicated actually...

#

Rust's is better tho d@m

rough drift
rough drift
#

I don't understand

wet breach
#

its not an oversight, you are suppose to create your own mechanism to ensure that the uuid it generated isn't already in use

rough drift
#

its like C++ but weird

lavish hemlock
#

Aaaalso

#

There's a good chance none of your players will be alive after those 100 years

lavish hemlock
#

...including yourself

rough drift
wet breach
#

that isn't how random generation works

lavish hemlock
#

Like, UUID collision chances are astronomically low

granite owl
#

is an oversight

#

which is what the wikipedia entry says

lavish hemlock
#

Oh btw apparently Rust's rand supports SIMD

#

That's cool

#

Although most Rust things support SIMD

rough drift
#

Alright so rust is basically "look at me fancy memory handling"

lavish hemlock
#

Well it's a lot more than that

wet breach
#

My point was that while although the odds of generating a duplicate is extremely low, it doesn't factor in, how much time it would actually take to get a duplicate

lavish hemlock
#

There's also a very complicated type system

wet breach
#

you could generate a duplicate on the first try

rough drift
#

@lavish hemlock C++ vs Rust go ahead tell me the pros of rust

#

I'll wait

granite owl
#

chance going towards 0

lavish hemlock
#

Well I'm not exactly the world's best Rust programmer :p

rough drift
#

(Not counting java has there are Obvious advantages)

granite owl
#

but its always > 0

lavish hemlock
#

I also

#

Don't code C++ (anymore)

#

(because C++ is fucking terrible)

rough drift
#

C++ is actually pretty good

#

Its what I'll end up compiling my lang to eventually

wet breach
lavish hemlock
#

t h e
e r r o r
m e s s a g e s

#

t h e i n s a n e l a n g u a g e f e a t u r e s

rough drift
smoky oak
#

N O

rough drift
#

y e s

granite owl
#

thats like iterating primitive arrays using while (arr[i]) {}, will prob work, but could also cause memory violation

lavish hemlock
#

How am I supposed to write good code if I'm trying to learn the language?

#

There's a period in time where you have to rely on error messages for learning

#

and also debugging

rough drift
#

well I mean

wet breach
#

or just rely on when it crashes

lavish hemlock
#

(because IDEs don't support C++ all too well)

lavish hemlock
#

Meanwhile, Rust is fucking beautiful with its error messages

rough drift
#

C++ is def easier to wrap your head around than var x = a() => 45 * 5; x.a();

lavish hemlock
#

It absolutely enables compiler-driven development also no IDE is capable of perfectly analyzing Rust yet

rough drift
lavish hemlock
#

Rust also has a proper ecosystem as it's easy to find libraries for what you want

#

And there's an official buildsystem and package manager

#

UNLIKE SOME LANGUAGES cough cough Java cough cough C/C++

granite owl
#

i mean after ive been working alot with ArrayLists and THEN reading the documentation on it i was running furious for the potential of causing a memory leak cause it has the .trimToSize() member

rough drift
#

What in the hell is this

granite owl
#

only to realize that javas garbabe collector takes care of local scope members

#

xD

lavish hemlock
noble lantern
#

for thousands of years i lay dormant

#

who disturbs my slumber

lavish hemlock
#

It's like me getting mad at a Spanish speaker because I don't know Spanish although I do, kind of

rough drift
lavish hemlock
#

Well it's quite fluent

rough drift
#

like why is that an error?

noble lantern
#

wait

#

rust uses promise style syntax's

rough drift
#

you clear a string

#

those pointed chars are just empty

#

done

#

or \00

lavish hemlock
#

I believe it's a memory validity thing

#

You can't create an immutable reference to mutable data as that mutable data can change

wet breach
lavish hemlock
#

Therefore rendering the immutable reference invalid

#

So in order to mutate the value and have an immutable reference, you'd need to drop that mutable reference before the immutable reference is created

granite owl
rough drift
#

As soon as i get free time I need to finish my lang, istg do I just need to add good error messages?

wet breach
#

static members never get GC'ed

#

anything static never goes away

lavish hemlock
#

See, you don't need to clear the string. There's no point. When that function's scope is over the string will just get dropped so there's no need to manually clear it.

#

So

granite owl
#

so creating an arraylist in a local scope like a function must neither be cleared nor trimmed to size if you leave the scope after ur done with the arraylist

lavish hemlock
granite owl
#

cause the whole thing will get gcd

lavish hemlock
#

Where you expect an immutable reference to not change, but it does

#

And it's a good thing the error is cohesive

noble lantern
#

man

granite owl
#

unless u have a static reference to one of the lists members

noble lantern
#

im just gonna make my own programming language

#

fuck this shit

rough drift
#

just work with me on mine lmaooo /s don't please you'll regret this

wet breach
lavish hemlock
# rough drift What in the hell is this

It gives you a concise description of the error (with an error code), breaks it down via your own code, and then gives you a command to view the error in more detail. That is a perfect error message.

#

MEANWHILE

#

A C compiler would just spit a fuck ton of trash out

#

That no human could possibly process

granite owl
lavish hemlock
#

(I know this because I've used C compilers lol)

wet breach
#

Objects created in a class, however if you are wanting a class to get GC'ed then you need to ensure nothing in the class is being referenced by something

rough drift
#

?

wet breach
lavish hemlock
#

Well they'll certainly love the development process a lot more.

smoky oak
#

*any use

lavish hemlock
#

Uhh no

#

I use GCC

wet breach
#

my whole point about your memory leak worries is that generally it is the developer that causes the memory leak not the system

lavish hemlock
#

Clang is supposedly better

wet breach
#

but I was telling you how you can avoid memory leaks in an array list

#

as long as nothing in the list contains invalid references you are generally fine ๐Ÿ™‚

#

and then the list itself goes away as long as nothing is referencing the list

#

but as I said earlier a good practice though is nulling out objects ๐Ÿ™‚

#

nulling out objects no longer needed helps the GC do its job ๐Ÿ˜„

granite owl
wet breach
rough drift
lavish hemlock
#

See the whole point of Rust's fancy memory management is that it stops the developer from doing things that will almost certainly cause issues. For example, like trying to return a reference when the reference is bound to the lifetime of a function, and is therefore dropped after it is returned (This is a problem with stuff like C/C++ and is called a dangling pointer)

granite owl
noble lantern
wet breach
rough drift
#

to some more perf lang

lavish hemlock
wet breach
rough drift
noble lantern
#

Meow at 16: talks about some college level, harvard style code and languages

Me at 20: hehe happy little api's and mc plugins

rough drift
wet breach
#

more actually

noble lantern
rough drift
#

bufferedreader

noble lantern
#

ran in multiple threads

#

mmm

lavish hemlock
#

Don't even need BufferedReader :)

noble lantern
#

sexy

wet breach
lavish hemlock
#

^^

#

Lemme see if I can implement a quick line reader real quick

rough drift
#

to tokenize & parse 500k or 500M lines i forgot took me 26 seconds with my parser

noble lantern
#

3 hours later: its done

#

wtf you doing to get 500m lines

lavish hemlock
wet breach
rough drift
wet breach
#

not with javascript no

rough drift
#

yeah its made in js atm

#

due to j s o n

wet breach
#

yeah I don't use javascript

noble lantern
#

same but i only really dabble in c#, nodejs, java havent been bothered with rust or go yet

wet breach
#

I ban javascript usage from my projects ๐Ÿ˜„

noble lantern
#

about to make a C# mc serer software holdup

noble lantern
#

ngl i wanna take a crack at making another mc jar

wet breach
#

there used to be a proxy server implementating that competed against Bungeecord

#

it was made in GO

lavish hemlock
#

I'm basically Java and Kotlin only though I do want to do Rust

wet breach
#

and it was super awesome

rough drift
#

error handling is basically

if(err != null) {
  panic(err);
}
wet breach
#

It was called Lilypad

noble lantern
#

i got down to authorization and motds last time i bet i can get a joinable server xD

kindred valley
#

i dont know why its not showing the value of map

wet breach
#

I happen to know that developer too

noble lantern
noble lantern
#

imagine how fast that shit would be

#

300 tps

rough drift
#

yes

#

Actually

#

not really

lavish hemlock
#

TPS is maxed at 20 for a reason

rough drift
#

there's a go server and its not that fast

noble lantern
wet breach
#

you can make MC 300TPS already

rough drift
noble lantern
#

nah cmon

#

make everything like 50x faster

wet breach
#

you should change the TPS rate @noble lantern just to see what happens ๐Ÿ™‚

rough drift
#

Let me try

noble lantern
#

i can barely runfucking 20

rough drift
#

something

noble lantern
#

and you want me to run 40???

wet breach
#

you can and it will

noble lantern
#

okay bet

#

sec

#

how i do it lowkey

wet breach
#

you will like the change ๐Ÿ™‚

#

just let me know when you test it

#

and I will know when you have because I have done it ๐Ÿ˜›

granite owl
#

btw just some heads up if theres a better solution for this @wet breach , i have written my own ini parser to parse my config files. onLoad() i fill a static arraylist with the configs contents, such being standard messages for command outputs, settings like if the anticheat is primed etc. is there a better way to manage the amount of memory this takes?

rough drift
#

Lets see

noble lantern
#

imma google thisnow

#

brb for an hour

lavish hemlock
#

inb4 "How do you parse INI, it's not got a standard??!?!"

rough drift
#

did I just hyper speed up mc server

wet breach
granite owl
#

it is

#

as it contains say messages for command returns

granite owl
#

so i can modify the messages my plugin sends without recompiling

wet breach
#

an expiring cache

granite owl
#

like a pagefile?

rough drift
#

I think i just sped up the mc server so hard its lagging my pc

noble lantern
#

okay frost

#

tell me how pls

#

its just tps improvements not max tps :((

wet breach
#

it will initially cache what you tell it initially and it will keep things in the cache as long as it meets the criteria

#

otherwise it expires, when the value is needed again it will fetch it again if it expired

granite owl
#

hm

noble lantern
#

is it a config setting or do i gotta do it with a plugin wtf

granite owl
#

so basically set an expiration time

wet breach
granite owl
#

dont i need a subroutine to then check the expiration times of values?

wet breach
#

have to actually go in the file nothing you can do with reflection

wet breach
#

they are super handy and great

granite owl
#

hm

wet breach
#

just use its builder and all that and the lib takes care of the rest for you

noble lantern
#

ohhh bet, CraftServer class here i come

granite owl
#

but yea generally speaking, the values are expected to persist the entire lifetime

#

and only get renewed on reload

wet breach
rough drift
#

bro

#

i found something

wet breach
#

nothing in the bukkit/spigot stuff

rough drift
#

that i don't think is in aikar's flags

noble lantern
#

ahh good ol MinecraftServer

#

maybe

#

ill find it

granite owl
#

btw ive bypassed using sql with the get player uuid by name by storing them in a hashmap which gets serialized onDisable and deserialized onEnable, and then accessed from other plugins via reflection

noble lantern
#

"reflection"

its public static

granite owl
#

xD

noble lantern
#

:p

wet breach
dire marsh
rough drift
noble lantern
#

wait

#

im dumbass

#

its final

rough drift
#

yes you are

#

just use ASM

wet breach
#

then run the server

#

let me know of your results ๐Ÿ˜„

granite owl
wet breach
#

unnecessary

noble lantern
#

mm eviltoday frost i see

granite owl
#

how do i else get offline targets by their name

wet breach
rough drift
#

Me when I speed up server launch by 5 seconds

wet breach
#

Bukkit.getOfflinePlayer(UUID uuid).getName();

granite owl
#

ik about that

wet breach
rough drift
dire marsh
#

pro tip: turn spawn chunks off

granite owl
#

yea but it also makes calls to the mojang auth server

wet breach
#

if the player doesn't exist on your server

#

in which case doesn't matter anyways

rough drift
#

thats what i got rn

dire marsh
#

oh yeah viaver will add at least 1 second

wet breach
#

however you shouldn't strictly be relying on player names anyways

granite owl
wet breach
#

how would you not know their UUID?

#

is this like a command thing?

granite owl
#

so id have to do Bukkit.getOfflinePlayer(String str);

#

which is deprecated

wet breach
#

deprecations != unusable

#

its not even going to be remotely removed either

granite owl
#

so its about frontend

wet breach
noble lantern
#

reflection it is

calm whale
#

Hello there, I was following this guide: https://www.spigotmc.org/threads/guide-on-workload-distribution-or-how-to-handle-heavy-splittable-tasks.409003/

But I'm having an issue that I don't understand, did I missed something about the runnable comprehension or something else ?

public class WorkLoadRunnable implements Runnable{

    private final static double MAX_MILLIS_PER_TICK = 2.5;
    private final static int MAX_NANOS_PER_TICK = (int) (MAX_MILLIS_PER_TICK * 1E6);

    private final Deque<WorkLoad> workLoadDeque = new ArrayDeque<>();

    public void addWorkLoad(WorkLoad workLoad){
        Bukkit.broadcast(Component.text("register workload: "+this.workLoadDeque.size()));
        this.workLoadDeque.add(workLoad);
    }

    @Override
    public void run() {
        long stopTime = System.nanoTime() + MAX_NANOS_PER_TICK;

        WorkLoad nextLoad;

        if(System.nanoTime() <= stopTime){
            Bukkit.broadcast(Component.text("can clean: "+this.workLoadDeque.size()));
        }else{
            Bukkit.broadcast(Component.text("cannot clean"));
        }


        while(System.nanoTime() <= stopTime && (nextLoad = this.workLoadDeque.poll()) != null){
            Bukkit.broadcast(Component.text("try clean"));
            nextLoad.compute();
        }

        if(DragonFightListener.dragon != null){
            DragonFightListener.dragon.cleanFire();
        }
    }
}

When I'm adding the workload, the size of the array increase correctly, but it remains ร  0 in the run method.

wet breach
#

Players names and UUID association on your server will not change if someone updates their name on Mojang servers until they rejoin your server. So therefore using their name will get you the correct UUID. Second, if the player has never joined your server at all, then it will look up their UUID from Mojang servers thus still giving you the correct UUID.

smoky oak
#

spawning 40000 Particle.DustTransition in causes them to appear over a few seconds in the order they're initialized in, but the method is supposed to run in one tick and also tells me it finishes in that time in the logs. Can someone tell me why? There appears to be no lag in either the server or the client.

granite owl
#

hm

tardy delta
#

what does Component.text do?

calm whale
#

It's a paper method, it replaces the string

granite owl
#

before ive been told multiple times that it always looks up the player from the auth server

#

if that player aint online rn

supple elk
#

anyone know why this is happening ๐Ÿค”

wet breach
calm whale
rough drift
wet breach
#

so like if you start up a new server for example or reset a servers files to a clean state etc

rough drift
#

add ithe tasks back to the head of the stack

calm whale
granite owl
#

tbh at this point it doesnt really matter anymore tho cause my own way to lookup uuids is already working xD

rough drift
supple elk
smoky oak
#

i do have a loop to the effect of rotating a vector by a tiny amount 40000 times and spawning a particle at each location it points to

wet breach
granite owl
supple elk
#

yes

granite owl
#

but i guess its also good to see that im still able to write my own systems

#

if the api fails to deliver

#

xD

wet breach
#

also good

noble lantern
#

frost

#

im angry

#

not angle

supple elk
noble lantern
#

you cannot change that variable in jdk13 or higher

calm whale
supple elk
#

kk

#

which I don't so whatever

calm whale
#

so just delete the import

#

you can also enable auto import in the settings

#

it cleans import automatically

granite owl
# wet breach also good

although ive gotta admit, ive translated my ini parser from C++ to Java, which means its written low level. in a high level language xD

#

๐Ÿคฃ

calm whale
granite owl
#

but im honestly too lazy to rewrite it using the String api java uses

wet breach
granite owl
#

too bloated imo

wet breach
#

not sure what you mean too bloated

#

pretty sure the yaml parser is just as fast as your ini parser

granite owl
#

its syntax is too complex for what i need

wet breach
#

in fact yaml supports lists directly which is what you are using ๐Ÿ™‚

granite owl
#

funny but

#

i serialize some lists

#

xD

#

if i want them to persist in their exact state

wet breach
#

yeah you can use yaml for that

granite owl
#

like my hashmap holding player uuids and names

wet breach
#

since you need a map for serializing anyways, yaml supports maps directly too

granite owl
#

tbh ive just written them to a binary file so far

wet breach
#

if you are going with binary

#

which is fine

granite owl
#

i suppose u mean the advantage of yml is that it can hold multiple lists at once?

wet breach
#

I recommend looking into java's NIO package as well as using memory mapping to make loading/saving much more efficient and faster

granite owl
#

will do later

#

since my serialization and deserialization is a pretty straight forward process

#

its easy to alterate

smoky oak
granite owl
#

also i put my standard methods in a "master" plugin which all other plugins then access via reflection

#

.eans

#

means

#

if i modify my serialization methods

#

i dont need to recompile my other plugins

#

xD

#

and yes i got ALOT hate for that

wet breach
#

also good to have a separation or abstract what isn't necessary for your other plugins to always implement

granite owl
#

thats

#

why i put my standard methods in my master plugin

#

and the other plugins only use wrappers

#

that then access the actual methods via reflection properly

wet breach
#

not sure who would hate you for that, but that is actually what some here would have recommended you do

granite owl
#

like a .dll would pmuch

wet breach
#

because that would speed up development on future plugins

granite owl
#

also

#

if u need to change their implementation

#

u dont need to recompile any other plugin

#

but the master plugin

wet breach
#

well depends, for the most part that is true

granite owl
#

if

#

i choose to change the parameters

#

yes

#

everything needs to get recompiled

#

names

#

or return types

wet breach
#

plugins might need to update if you alter an implementation specific behavior, but like that shouldn't be a common thing anyways

granite owl
#

its sad tho

#

i cant outsource bukkit methods

#

because the reference to the .class files is null

#

for whatever reason

wet breach
#

what do you mean outsource bukkit methods?

granite owl
#

u know how i manage standard methods

#

like getting msgs

#

my ini parser yada yada

#

but if i try to do the same with a method that uses bukkit objects in any way

#

like

#

ChatColor.of

#

i get a null ptr error

#

because ChatColor.class couldnt be found

#

even tho the master plugin is compiled implementing the api

wet breach
#

probably because you are using the wrong ChatColor import

granite owl
#

and actually running alongside the other plugins

#

nono

#

if i use the same code in my plugins directly

#

it works just fine

#

using the bungeecord color

#

this goes with any and all

#

no matter if its Player.class not found error

#

Bukkit.class not found

wet breach
#

you mean if you use it bungeecord?

#

as in a bungee plugin?

granite owl
#

no

noble lantern
#

Jdk 16 sucks :((

rough drift
wet breach
#

then I am not understanding how you would get a class not found error for thos classes on the spigot server

granite owl
#

bukkit has the bungee string methods in itself

#

containing the string formatter

lavish hemlock
granite owl
#

chatcolor

#

etc

lavish hemlock
#

But that's with the print

rough drift
lavish hemlock
#

Full class is 43 lines

rough drift
#

also you can speed that up

granite owl
rough drift
#

rather than recreating the string builder you can save time by doing str.setLength(0);

noble lantern
#

ahh

lavish hemlock
#

Implementation is lines 18 to 36

#

Don't care about the math lol

rough drift
lavish hemlock
#

Oh

wet breach
lavish hemlock
#

It's like nearly 500k?

#

About 5 megabytes

rough drift
#

nice

#

can you send both

#

the java code and the words .txt

lavish hemlock
noble lantern
#

java has the weirdest keywords sometimes "Unsafe"

#

"theUnsafe"

lavish hemlock
#

Not a keyword

#

That's an identifier

noble lantern
#

lib

#

whatever it is

#

xD

granite owl
noble lantern
#

either way

#

weird xD

lavish hemlock
#

That's stdlib code for you

#

You should see ByteBuffer's formatting

#

It's

#

terrible

granite owl
lavish hemlock
wet breach
noble lantern
#

i mean thats just buffers do yah

#

even nodejs buffers suck

lavish hemlock
granite owl
lavish hemlock
#

Anyway without the print, it's like 55 milliseconds lmao

granite owl
#

thats the only reason why ive written a .dll like behavior in java

wet breach
#

you can tuck the .dll into the java jar just fyi ๐Ÿ˜›

granite owl
#

its outside my reachable scope

#

and i cant statically link it

#

for some reason

#

even if the compiler includes these libs directly into my .so file

#

its still giving an error that jni cant execute it

#

but if i run it locally on my ubuntu installation with my mc server

wet breach
#

probably throws some weird security exception then

granite owl
#

it works just fine

#

so its the providers fault 100%

#

but yes

#

i did actually port it using jni xD

#

for x86, x64 linux + windows

#

screw apple xD

wet breach
#

I touch nothing apple related

granite owl
#

ikr

rough drift
#
public final class LinesGoBrr {
    private static final Path PATH = Path.of("words.txt");

    public static void main(String[] args) throws IOException {
        final var start = Instant.now();

        // Actual code
        var str = new StringBuilder();
        try(final var channel = FileChannel.open(PATH)) {
            final var mapped = channel
                    .map(MapMode.READ_ONLY, 0, channel.size());
            while (mapped.remaining() > 0) {
                final var c = mapped.getChar();
                if (c != '\n') {
                    str.append(c);
                    continue;
                }
                System.out.println(str);
                str.setLength(0);
            }
        }

        // hehe funni time elapsed
        final var end = Instant.now();
        final var duration = Duration.between(start, end);
        System.out.println("Time elapsed: " + duration.toMillis() + "ms");
    }
}
```try this @lavish hemlock
#

should be faster

granite owl
#

anyone running a server on apple hardware deserves to burn in hell honestly

#

xD

wet breach
#

@noble lantern so that test how did it go?

lavish hemlock
#

oh I just realized I never closed any of the shit

rough drift
#

try it maow

#

try it

wet breach
#

my problem is apple not supporting creativity with their products

rough drift
#

@lavish hemlock fucking try it

granite owl
#

its the way apple treats its developers

lavish hemlock
#

oh btw @rough drift It doesn't work

rough drift
lavish hemlock
#

I specifically decode the returned byte buffer

#

since getChar and CharBuffer don't use UTF-8

rough drift
#

what do they use

lavish hemlock
#

I don't fuckin' know

#

an SO answer suggests UTF-16?

calm whale
#

Hey, I was following this guide: https://www.spigotmc.org/threads/guide-on-workload-distribution-or-how-to-handle-heavy-splittable-tasks.409003/

But I'm having an issue that I don't understand, when I'm adding the workload, the size of the array increase correctly, but it remains ร  0 in the run method.

Did I missed something about the runnable comprehension or something else ?

public class WorkLoadRunnable implements Runnable{

    private final static double MAX_MILLIS_PER_TICK = 2.5;
    private final static int MAX_NANOS_PER_TICK = (int) (MAX_MILLIS_PER_TICK * 1E6);

    private final Deque<WorkLoad> workLoadDeque = new ArrayDeque<>();

    public void addWorkLoad(WorkLoad workLoad){
        Bukkit.broadcast(Component.text("register workload: "+this.workLoadDeque.size()));
        this.workLoadDeque.add(workLoad);
    }

    @Override
    public void run() {
        long stopTime = System.nanoTime() + MAX_NANOS_PER_TICK;

        WorkLoad nextLoad;

        if(System.nanoTime() <= stopTime){
            Bukkit.broadcast(Component.text("can clean: "+this.workLoadDeque.size()));
        }else{
            Bukkit.broadcast(Component.text("cannot clean"));
        }


        while(System.nanoTime() <= stopTime && (nextLoad = this.workLoadDeque.poll()) != null){
            Bukkit.broadcast(Component.text("try clean"));
            nextLoad.compute();
        }

        if(DragonFightListener.dragon != null){
            DragonFightListener.dragon.cleanFire();
        }
    }
}```
noble lantern
granite owl
# wet breach my problem isn't the people that use apple

ive even grabbed the required header files from both a linux and windows JDK installation and copied them to my project locally so i can compile for both linux and windows under one and the same project and both under windows

wet breach
rough drift
wet breach
#

open it in your ide or whatever change the number save it

noble lantern
#

well

wet breach
#

compile the jar and then run it

noble lantern
#

says read only?

rough drift
wet breach
#

what do you mean read only?

#

open the class file itself in your IDe

granite owl
wet breach
#

change the value and compile XD

lavish hemlock
#

but it did run faster

#

it took 50ms

rough drift
#

hm

lavish hemlock
#

since it did nothing

#

The problem is the != '\n' logic would not work

#

Since the chars are not decoded properly

noble lantern
lavish hemlock
#

So, as it stands my solution is the best since it WORKS

rough drift
#
public final class LinesGoBrr {
    private static final Path PATH = Path.of("words.txt");

    public static void main(String[] args) throws IOException {
        final var start = Instant.now();

        // Actual code
        var str = new StringBuilder();
        try(final var channel = FileChannel.open(PATH)) {
            final var mapped = channel
                    .map(MapMode.READ_ONLY, 0, channel.size());
            try {
                while (true) {
                    final var c = mapped.getChar();
                    if (c != '\n') {
                        str.append(c);
                        continue;
                    }
                    System.out.println(str);
                    str.setLength(0);
                }
            } catch (final Exception e) {
                // End of file
            }
        }

        // hehe funni time elapsed
        final var end = Instant.now();
        final var duration = Duration.between(start, end);
        System.out.println("Time elapsed: " + duration.toMillis() + "ms");
    }
}
#

try that

wet breach
#

but by storing and using the dll from the jar itself

#

that wouldn't happen

lavish hemlock
#

27ms, and also still does not print anything @rough drift

wet breach
lavish hemlock
#

!buf.isEmpty() works just fine

#

It's equivalent to uhh

#

buf.remaining() != 0

#

and buf.remaining() is just buf.limit() - buf.position() I believe?

granite owl
#

and theres actually a very good reason for host providers to block arbitrary code injection @wet breach . just imagine the damage i could do to the cluster im on if i could break out of the env by injecting assembly code with hooks

noble lantern
#

i may have looked in the wrong directory lol

noble lantern
#

one of them has a difference MServer in them

granite owl
#

i wouldnt

#

but others might

wet breach
#

not even

#

depends on the environment and whether or not they jail processes

#

if they do jail processes then its virtually impossible

noble lantern
#

bro

granite owl
#

well there are trojans that even break out of a VM

noble lantern
#

i feel bad for spigot devs

granite owl
#

its rare

noble lantern
#

how yall wait for shit to compile longer than 30 seconds

granite owl
#

and it requires skill most ppl dont possess

#

but its possible

wet breach
#

if not, then they are still suck in a place that can't do anything

granite owl
#

i mean theres still the legal aspect

#

like

#

to own a server hosted by a provider

#

u gotta give legal info

#

so they can just sue u anyway

wet breach
#

it isn't about the legal aspect in this regard to viruses

#

viruses disregard legal stuff XD

granite owl
#

ik

#

obv

#

xD

wet breach
#

my point is, if a virus can break out of the VM, it doesn't automatically mean that once it breaks out it could still do anything

#

if the VM process is jailed to begin with, the virus is stuck in the jail which disappears when the VM goes away

granite owl
rough drift
#
public final class LinesGoBrr {
    private static final Path PATH = Path.of("words.txt");

    public static void main(String[] args) throws IOException {
        final var start = Instant.now();

        // Actual code
        final CharBuffer buf;
        try(final var channel = FileChannel.open(PATH)) {
            final var mapped = channel
                    .map(MapMode.READ_ONLY, 0, channel.size());
            buf = StandardCharsets.UTF_8.decode(mapped);
        }

        var str = new StringBuilder();
        char[] chars = new char[512];
        while (!buf.isEmpty()) {
            buf.get(chars);
            for (char ch : chars) {
                if (ch != '\n') {
                    str.append(ch);
                    continue;
                }
                System.out.println(str);
                str.setLength(0);
            }
        }

        // hehe funni time elapsed
        final var end = Instant.now();
        final var duration = Duration.between(start, end);
        System.out.println("Time elapsed: " + duration.toMillis() + "ms");
    }
}
``` @lavish hemlock try this
wet breach
#

I am surprised you are having this much difficulty XD

noble lantern
#

project has

#

so many errors

#

kinda crazy

rough drift
#

wait no

#

stop

#

don't run it

lavish hemlock
#

Ooh, this time it causes an actual exception @rough drift

#

BufferUnderflowException :)

rough drift
#

yeah i messed up

#

wait

noble lantern
#

anything to do with WorldBorders isnt in this project lmfao

granite owl
#

but yea youre right ive outsourced all my standard methods to my master plugin exactly to be able to develop new plugins faster, as well as updating them all at once by modifying the implemenation

lavish hemlock
#

Because the file is not perfectly aligned to a multiple of 512 bytes

#

Which means the emptiness check does not matter because the read will read more than it can

rough drift
#
public final class LinesGoBrr {
    private static final Path PATH = Path.of("words.txt");

    public static void main(String[] args) throws IOException {
        final var start = Instant.now();

        // Actual code
        final CharBuffer buf;
        try(final var channel = FileChannel.open(PATH)) {
            final var mapped = channel
                    .map(MapMode.READ_ONLY, 0, channel.size());
            buf = StandardCharsets.UTF_8.decode(mapped);
        }

        var str = new StringBuilder();
        char[] chars = new char[8192];
        int read;
        while (!buf.isEmpty()) {
            read = Math.min(buf.remaining(), chars.length);
            buf.get(chars, 0, read);
            for (int i = 0; i < read; i++) {
                char ch = chars[i];
                if (ch != '\n') {
                    str.append(ch);
                    continue;
                }
                System.out.println(str);
                str.setLength(0);
            }
        }

        // hehe funni time elapsed
        final var end = Instant.now();
        final var duration = Duration.between(start, end);
        System.out.println("Time elapsed: " + duration.toMillis() + "ms");
    }
}
#

fixed it

wet breach
#

what are we doing o.o

rough drift
#

fastest file reading possible

lavish hemlock
#

Okay it's like, faster by uhh

wet breach
#

need ram usage for that

lavish hemlock
#

120ms I think?

rough drift
#

POG

lavish hemlock
#

Which is basically a 1/10 of a second

wet breach
rough drift
#

yes we know

noble lantern
#

dear spigot devs i implemented those missing WorldBorder methods from the itnerfaces your welcome

rough drift
#

its with manipulating

lavish hemlock
#

Oh wait

wet breach
#

read it all as bytes, put it in a byte array until you reach the end, close out file then turn it into something useful ๐Ÿ™‚

lavish hemlock
#

@rough drift It's not faster, actually

#

I assume there was just some JVM timing shit at play

wet breach
#

however even with that, you are still only going to get to like 30ms or so

lavish hemlock
#

Only way to get faster times would be to code it in a different language :)

rough drift
#
public final class LinesGoBrr {
    private static final Path PATH = Path.of("words.txt");

    public static void main(String[] args) throws IOException {
        final var start = Instant.now();

        // Actual code
        final CharBuffer buf;
        try(final var channel = FileChannel.open(PATH)) {
            final var mapped = channel
                    .map(MapMode.READ_ONLY, 0, channel.size());
            buf = StandardCharsets.UTF_8.decode(mapped);
        }

        var str = new StringBuilder();
        char[] chars = new char[8192];
        int read;
        while (!buf.isEmpty()) {
            read = Math.min(buf.remaining(), chars.length);
            buf.get(chars, 0, read);
            for (int i = 0; i < read; i++) {
                str.append(chars[i]);
            }
        }

        // hehe funni time elapsed
        final var end = Instant.now();
        final var duration = Duration.between(start, end);
        System.out.println(str);
        System.out.println("Time elapsed: " + duration.toMillis() + "ms");
    }
}
#

there

lavish hemlock
#

JVM bottleneck

rough drift
#

try that

wet breach
#

if you want to go down to 10 or below you have to toss that file into ram

rough drift
#

oh wait

lavish hemlock
#

What we're doing

#

The file is memory-mapped

rough drift
#

wait

#

no

#

updated it

#

run it now

wet breach
noble lantern
#

its loading frost

wet breach
rough drift
#

its counting loading and processing it

noble lantern
#

pc lagging

lavish hemlock
#

Okay so this is as fast as 64ms bc you've essentially changed how the processing works

wet breach
#

alright join it @noble lantern ๐Ÿ™‚

lavish hemlock
#

Instead of printing each line as an individual line

noble lantern
#

okay there

lavish hemlock
#

You process it as one big string

wet breach
#

and have some fun with with more TPS!

rough drift
#

yeah

#

it was already doing it

lavish hemlock
#

Which is not the intended behaviour

rough drift
#

it is

lavish hemlock
#

No it is not

#

I coded the program lmao

noble lantern
#

wtf it reverted to 20 in game

rough drift
#

the output is the same no?

lavish hemlock
#

It's meant to treat each line individually

rough drift
#

alright then

lavish hemlock
#

Like if you were working with the lines individually, not just as a print

#

You would have a list of strings

#

That's not possible here

wet breach
lavish hemlock
#

But yeah it's effectively the same speed, the prints are just not measured

wet breach
#

should still get faster then 64ms

noble lantern
#

./tps still says 20

rough drift
#
public final class LinesGoBrr {
    private static final Path PATH = Path.of("words.txt");

    public static void main(String[] args) throws IOException {
        final var start = Instant.now();

        Executor executor = Executors.newScheduledThreadPool(Runtime.getRuntime().availableProcessors());

        // Actual code
        final CharBuffer buf;
        try(final var channel = FileChannel.open(PATH)) {
            final var mapped = channel
                    .map(MapMode.READ_ONLY, 0, channel.size());
            buf = StandardCharsets.UTF_8.decode(mapped);
        }

        var str = new StringBuilder();
        char[] chars = new char[8192];
        int read;
        while (!buf.isEmpty()) {
            read = Math.min(buf.remaining(), chars.length);
            buf.get(chars, 0, read);
            for (int i = 0; i < read; i++) {
                char ch = chars[i];
                if (ch != '\n') {
                    str.append(ch);
                    continue;
                }
                executor.execute(() -> System.out.println(str));
                str.setLength(0);
            }
        }

        // hehe funni time elapsed
        final var end = Instant.now();
        final var duration = Duration.between(start, end);
        System.out.println("Time elapsed: " + duration.toMillis() + "ms");
    }
}
#

try that

lavish hemlock
#

Now you're measuring executor instantiation ;)

wet breach
rough drift
#

yes

wet breach
#

or right

rough drift
#

to make it fair

#

remove the executor instantiation

#

like above the start line

wet breach
#

you need to modify the while loop @noble lantern delta stuff

lavish hemlock
#

Make it a static field, those basically load as fast as possible

rough drift
#
public final class LinesGoBrr {
    private static final Path PATH = Path.of("words.txt");
    private static final Executor executor = Executors.newScheduledThreadPool(Runtime.getRuntime().availableProcessors());

    public static void main(String[] args) throws IOException {
        final var start = Instant.now();


        // Actual code
        final CharBuffer buf;
        try(final var channel = FileChannel.open(PATH)) {
            final var mapped = channel
                    .map(MapMode.READ_ONLY, 0, channel.size());
            buf = StandardCharsets.UTF_8.decode(mapped);
        }

        var str = new StringBuilder();
        char[] chars = new char[8192];
        int read;
        while (!buf.isEmpty()) {
            read = Math.min(buf.remaining(), chars.length);
            buf.get(chars, 0, read);
            for (int i = 0; i < read; i++) {
                char ch = chars[i];
                if (ch != '\n') {
                    str.append(ch);
                    continue;
                }
                executor.execute(() -> System.out.println(str));
                str.setLength(0);
            }
        }

        // hehe funni time elapsed
        final var end = Instant.now();
        final var duration = Duration.between(start, end);
        System.out.println("Time elapsed: " + duration.toMillis() + "ms");
    }
}
#

how fast is it now?

wet breach
#

I see someone likes to spam finals everywhere

lavish hemlock
#

That's me ๐Ÿคš

rough drift
#

yes finals are good, but it was @lavish hemlock that did that

wet breach
#

finals are good, unnecessary to put everywhere

lavish hemlock
#

That's your opinion

#

My style

rough drift
#
public final class LinesGoBrr {
    private static final Path PATH = Path.of("words.txt");
    private static final Executor executor = Executors.newScheduledThreadPool(Runtime.getRuntime().availableProcessors());

    public static void main(String[] args) throws IOException {
        final var start = Instant.now();


        // Actual code
        final CharBuffer buf;
        try(final var channel = FileChannel.open(PATH)) {
            final var mapped = channel
                    .map(MapMode.READ_ONLY, 0, channel.size());
            buf = StandardCharsets.UTF_8.decode(mapped);
        }

        var str = new StringBuilder();
        char[] chars = new char[8192];
        int read;
        while (!buf.isEmpty()) {
            read = Math.min(buf.remaining(), chars.length);
            buf.get(chars, 0, read);
            for (int i = 0; i < read; i++) {
                char ch = chars[i];
                if (ch != '\n') {
                    str.append(ch);
                    continue;
                }
                String line = str.toString();
                executor.execute(() -> System.out.println(line));
                str.setLength(0);
            }
        }

        // hehe funni time elapsed
        final var end = Instant.now();
        final var duration = Duration.between(start, end);
        System.out.println("Time elapsed: " + duration.toMillis() + "ms");
    }
}
#

run that

lavish hemlock
#

Nah

rough drift
#

should be fast as fucc boi

lavish hemlock
#

I'll just figure out the executor myself

rough drift
#

no

#

i added some extra changes

lavish hemlock
#

No fuck off

#

I'm doing it myself

wet breach
#

ok, you guys are testing this wrong

lavish hemlock
#

Yeah yeah, benchmarking is preferred

wet breach
#

there is a difference between cold and warm testing

#

cold testing involves having to wait on the JVM to intialize itself as well

#

warm testing would have the JVM already running then you initiate your test

rough drift
#

we know we know

lavish hemlock
#

I'm not gonna set up JMH for this this was just meant to be like a 10 minute quick code snippet

wet breach
#

you don't need JMH for this

lavish hemlock
#

Ike's the one who wanted to optimize it to perfection lol

wet breach
#

you just need to have the JVM already running ๐Ÿ˜›

#

where you can just invoke a command to make it happen

rough drift
#

or just

lavish hemlock
rough drift
lavish hemlock
#

It never reaches the print at the end

rough drift
#

?

slim kernel
#

hello hello how can I fix this?

wet breach
#

deadlocking is fun XD

rough drift
#

EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE

#

fuck this imma stop here

wet breach
#

well whenever I get my IDE setup which probably will be some time tomorrow

rough drift
#

how long does it take

wet breach
#

I will have to demonstrate a good test in testing memory mapping Xd

rough drift
#

to install intellij

wet breach
#

I don't use intellij

slim kernel
wet breach
#

install maven

rough drift
#

what do you use

slim kernel
rough drift
#

eclipse?

wet breach
lavish hemlock
#

why would you subject yourself to that?

granite owl
# wet breach install maven

i went over to maven cause i need craftbukkit in the future(creating custom pathfindergoals) but its super anoying to be forced to use it and its anything but user friendly

rough drift
#

why

#

god why

noble lantern
#

k im just retarded

wet breach
#

because NetBeans does everything I need it to

#

there is nothing IntelliJ provides that I require or need that NetBeans doesn't already provide

slim kernel
granite owl
#

honestly from a user friendly pov

#

it was much more convinient to juse import the whole server.jar

wet breach
#

Netbeans has that

granite owl
#

and yes ik someone would bash me yelling "remapping"

quaint mantle
#

VS Code is the Real shit

rough drift
#

y e s

granite owl
wet breach
#

I have Visual Studio Professional 2019 ๐Ÿ™‚

#

that is the best version

lavish hemlock
granite owl
noble lantern
#

he does

wet breach
granite owl
#

lemao

noble lantern
#

dont let him fool you

lavish hemlock
wet breach
#

I mean, technically you could say I do

granite owl
#

and untechnically?

quaint mantle
wet breach
#

not technically, I don't

#

you know tax purposes etc ๐Ÿ˜›

granite owl
#

oh i was talking about brutto

wet breach
#

its not income if its not in money form

granite owl
#

vs community licenses permit for a total revenue of 1m$ brutto/year

wet breach
#

oh

granite owl
#

xD

#

professional is only if you make like the really big money

#

and lets be honest

#

1m/y is already big

wet breach
#

not really

granite owl
#

even with taxes

wet breach
#

I could easily spend a mil and not have really got much

noble lantern
#

if i made a mil a year ide shart myself

granite owl
#

4 houses but kay

wet breach
#

anyways there is a differences in the professional editions and community editions

noble lantern
#

professional is normally for companies

wet breach
noble lantern
#

if you use community version and use it for your own things your fine

#

as long as your income isnt based off of using that

granite owl
#

professional is for single developers making big money

#

enterprise for the same but corps

#

obv

#

its already in its name after all

wet breach
#

Enterprise just gives you that tech support stuff

#

Professional I just don't have to worry about much ๐Ÿ˜›

granite owl
#

and the license for multi user purposes

noble lantern
#

but ineed indian man giving tech support about my code

#

"why no work man"

granite owl
#

dis is marg from migrosofd

noble lantern
#

LMAO

wet breach
noble lantern
#

deadass?

wet breach
#

who do you think takes all them coding jobs XD

#

they will market themselves below $20

noble lantern
#

so all i gotta do is buy enterprise

wet breach
#

however, quality wise on the other hand they are terrible but they will create you working code though

lavish hemlock
#

@rough drift You can also cut the time down to 11ms if you read the whole buffer into an array and then do new String(bytes, UTF_8)

noble lantern
#

and i get unlimited code support

lavish hemlock
#
    private static String v1() throws IOException {
        try (var channel = FileChannel.open(PATH)) {
            final var buf = channel.map(
                MapMode.READ_ONLY,
                0, channel.size()
            );

            final int capacity = buf.capacity();
            final var bytes = new byte[capacity];
            buf.get(bytes, 0, capacity);
            return new String(bytes, UTF_8);
        }
    }
granite owl
#

ive always thought of that

lavish hemlock
#

(I know the int cast is ugly)

noble lantern
#

even with protocollib

granite owl
#

thats why ppl from western countries going into coding

#

need themselves to get hired by corps

#

which want persistent support for their products

#

like sap

#

google

#

etc

wet breach
#

Well coding jobs at least the serious ones are not being outsourced

granite owl
#

wtf is wrong with my grammar today

wet breach
#

the locations to outsource are not inherently better. Sometimes not even cheaper once you include all the other costs and what not

granite owl
#

u only outsource jobs for one time cheap ass tasks

wet breach
#

yep

granite owl
#

like coding the software for a cheap ass receiver u plan to sell low budget and never provide any support for afterwards

#

xD

noble lantern
#

then it becomes mainstream

#

and you get shit on for not supporting it

#

xD

granite owl
#

only of ur a reputable company

wet breach
#

however them Indians though make it hard to be a freelancer sometimes

#

because like I said how cheap they will go

granite owl
#

donde dell me whad do do

wet breach
#

and that is because USD is worth more then rupees

granite owl
#

^

#

ur 20$

#

is their monthly income

wet breach
#

basically

granite owl
#

a guy said that legit tourist guides are like 200rps

#

2$ for the whole day

lavish hemlock
#

Although it uses Files.lines

#

So it's not memory-mapping

granite owl
#

just for some rando weird comparation

wet breach
#

$20 = 1517.16 rupees

#

$1 = 75.86 rupees

granite owl
#

or 15โ‚ฌ

#

๐Ÿคฃ

wet breach
#

however there is an upside to this though

#

if you want to buy some really nice business suits even 3 pieces go to India

#

$100 gets you what is essentially a $1k suit

#

and they are nice

#

spend $300 and you can get 3 suits ๐Ÿ˜„

jagged thicket
#

wat no i don't think so atleast in my city good suits are nearly like 400+ dollars

wet breach
#

in India?

jagged thicket
#

yea

#

the cheap suits you are saying are basically non existent and even if you find some it won't be in the quality you mentioned

noble lantern
tardy delta
#

120 euro for a suit ๐Ÿคก

wet breach
#

just found some suits

#

$130

noble lantern
#

(not me)

wet breach
#

not sure what you are talking about them being $400+

jagged thicket
#

i mean real good suits

#

the own i use are like 20k rs

tardy delta
#

are you a maffia leader or something

jagged thicket
#

20k is very cheap lol

wet breach
lavish hemlock
#

(Passing the list is done to avoid capturing the list instantiation in the timing)

#

(This is 15ms)

jagged thicket
wet breach
#

the ones I am seeing, which would be about $1k here in the US, are averaging $130-$160

granite owl
wet breach
#

I am not talking about the super best

#

you don't need the super best but even then still not expensive for someone like me

#

to order one from India

#

far cheaper for me to order a nice decent suit from india and have it sent to the US XD

jagged thicket
#

yea right it is not as expensive as US

granite owl
#

it doesnt matter

#

u cant compare indian and us prices

#

by the price tag alone

wet breach
#

yes you can

granite owl
#

but by the average salery

#

no

#

the actual cost of an item depends on the average salery

#

relative to the price

wet breach
#

the main reason it is cheaper to buy in india other then because of the dollar value being worth more, is because the threads come from over seas to begin with most of the time, so ordering closer to the source of materials generally results in cheaper costs ๐Ÿ˜›

granite owl
#

in swizerland they make like 2-3x as much as we do in germany

#

but their items cost 4-5x as much

#

so they actually have less

#

even tho they earn more

jagged thicket
#

yea the avg salary of IT person here is like 2 lakh like 2.6k $

#

2 lakh a month i mean

wet breach
#

197,230 rupees a month?

jagged thicket
#

yea kinda

granite owl
#

if thats the average salery why are there scammers

#

scamming ppl for 500

#

and feeling rich about it

#

thats something i dont understand like

jagged thicket
#

stereotype lmao

wet breach
granite owl
#

if thats the average salery

#

how can it be

jagged thicket
#

there are scammers

granite owl
#

anyway near worthwhile

wet breach
#

you are forgetting that average salary doesn't mean cost of living

jagged thicket
#

yea cost of living is also not that much yk

wet breach
#

average salary for IT could be above what is the cost of living lol

jagged thicket
#

like for a 1500sq apartment it is 70 lakh for purchase and for rent it would be just 15 k in even capital cities

wet breach
#

the scammers are people who are lazy and don't want to work. They only need to put in a few hours and get like 5 people scammed to make anything decent

granite owl
#

yea but thats my point

jagged thicket
#

15k in 200k isn't much and our family salary is just above 200k and yea we r fine

granite owl
#

scamming 5 ppl is somewhat between 2500-5000 rupees right

#

hows that worth while

noble lantern
#

2k is 1% of theyre salary so its worth for 30 minuts of time

granite owl
#

if there are much higher saleries achievable "easily"

wet breach
noble lantern
#

IT isnt really easy in most cases

wet breach
#

that is 2,000 they are bringing in extra

noble lantern
#

most people who do that dont have jobs either

#

guarantee it

granite owl
#

obv no decent person scams someone else

#

unless theyre a banker

#

xD

wet breach
granite owl
#

nah but like lets be honest anyone can learn at least basic coding

wet breach
#

its like saying you can get a job in networking in some data center right now without needing any credentials or background

granite owl
#

its just time investment

wet breach
#

it depends what you need to prove and what they accept as proof

#

in the US we just had that problem

#

where people stopped going to school, which means less people with degrees

#

but Degrees never dictated who did or did not know stuff

noble lantern
#

a lot of companies hire without degrees ngl

jagged thicket
#

Well you are talking about the stereotypical India while most people here do not relate to those @granite owl

wet breach
#

but Degrees are what businesses required

noble lantern
#

not all of em tbh

wet breach
noble lantern
#

ahhh i see

noble lantern
#

but yeah most jobs i see for jr devs require no school time just previous experiences, which doesnt have to be prefessional 5* bussinesses

wet breach
# noble lantern ahhh i see

people didn't want to take on school debt of $100k when you can get a job and in 4 years or sometimes less make a salary of that much without a degree at all

noble lantern
#

jr devs in cali make bank its whack

granite owl
#

luckily i dont live in america

#

education is free in ger

#

๐Ÿคทโ€โ™€๏ธ

wet breach
#

well not completely

granite owl
#

yaya

wet breach
#

someone paid

granite owl
#

well

#

you pay like a complementary fee for materials

viral temple
#

i'm searching for an artist so he can make me a plugin icon

granite owl
#

50โ‚ฌish euro per school year

noble lantern
#

just looked at listings for jr devs 60k and in some cases 100k just for a nodejs dev lmfao

granite owl
#

and per month or so for a university

wet breach
#

@jagged thicket just for you

jagged thicket
#

what?

wet breach
#

make them an icon for $20 ๐Ÿ˜›

#

easy money for you ๐Ÿ™‚

granite owl
#

๐Ÿคฃ

jagged thicket
#

im bad at that

#

also why would i need that 20$

#

lol

wet breach
#

you just need to be good enough

granite owl
#

๐Ÿคฃ

viral temple
granite owl
#

good to know im not the worst here

#

๐Ÿ˜‹

noble lantern
#

ngl i paid more for a server icon one time lmao

jagged thicket
#

i don't need money , i don't have any expenditures and i don't take money for anything

wet breach
noble lantern
jagged thicket
#

i will even do it for free

slim kernel
#

pls help I cant get my maven to work .. I set the environment veriables and it workes in the cmd what do I put in intelliJ now?

wet breach
#

unless they do it free

#

XD

#

can't get cheaper then free lol

viral temple
#

then fiverr is my way to go

noble lantern
#

or uhmm

#

senior team