#dev-general
1 messages Β· Page 462 of 1
no
two vectors can be equal but won't have the same hashCode
ah good point
π€¨
dkim's your master?
wat
now I want dkim to respond
I wanna find out more about this
I wonder where that would even be important though
maybe storing them in a map
since don't hash maps use hash code for storage and equality?
or some form of hash anyway
They use both
but first hash code
so you can store 2 equal vectors and get different results
public int hashCode() {
int hash = 7;
hash = 79 * hash + (int) (Double.doubleToLongBits(this.x) ^ (Double.doubleToLongBits(this.x) >>> 32));
hash = 79 * hash + (int) (Double.doubleToLongBits(this.y) ^ (Double.doubleToLongBits(this.y) >>> 32));
hash = 79 * hash + (int) (Double.doubleToLongBits(this.z) ^ (Double.doubleToLongBits(this.z) >>> 32));
return hash;
}
```Bukkit's `Vector` hash code btw
idk maybe you can prove that this works
maybe, yeah
https://i.imgur.com/feqyH7t.png @lunar cypress
that could be because those doubles are always representing whole numbers in that case though, and so the fuzzy equals isn't really necessary
changing all the coords to 10.2 though still yields the same results
using Random.nextDouble() for all the coordinates still yields the same result
ran 1000 times with RepeatedTest? still both equal
I'm counting that one as a win
is there a way you can get Gradle to run your tests multiple times btw?
data Human = Human {name :: String, age :: Int} deriving Show
main = print $ new Human "asefef" 45
new :: a -> a
new c = c
π
beautiful π
π
none of this is a sufficient proof
and doubles have too big of a range to be covered by 1000 randoms
how many randoms you want then?
so what's the best way to prove this then?
eh
contradiction is one possible way, but to prove this one it wouldn't really help
most proofs go like: with the lord as my witness I hereby declare this as the solution to this problem
alright
yeah you've got me interested now lol
can't you set how many iterations it does?
if that's what you mean
ik Maven can, I just have no clue how to do it with Gradle
u using junit?
yeah
I'd rather not have to use @RepeatedTest everywhere btw
I just want to tell JUnit to run all tests multiple times
can you send your hashCode, equals and epsilon definitions again?
override fun equals(other: Any?): Boolean {
if (this === other) return true
if (javaClass != other?.javaClass) return false
other as Vector
return abs(x - other.x) < EPSILON &&
abs(y - other.y) < EPSILON &&
abs(z - other.z) < EPSILON
}
I need to practice IEE 754 anyway lol
public int hashCode() {
long var10000 = Double.doubleToLongBits(this.getX());
int var1 = (int)(var10000 ^ var10000 >>> 32) * 31;
long var10001 = Double.doubleToLongBits(this.getY());
var1 = (var1 + (int)(var10001 ^ var10001 >>> 32)) * 31;
var10001 = Double.doubleToLongBits(this.getZ());
return var1 + (int)(var10001 ^ var10001 >>> 32);
}
```(generated)
EPSILON is 0.000001
I'm going to try this for one double first
yeah, no, doesn't work
dunno what the threshhold is but if you go low enough it breaks
is there a way of only filtering a single file with processResources
from(sourceSets.main.get().resources.srcDirs) { i have this but that filters everything
include?
take (1 + 1e-15, 0, 0) and (1, 0, 0)
π
so those are equal but the hash codes aren't?
also, whilst you're at it, you might as well also give Bukkit's hashCode a try
it's because of (int) (bits ^ bits >>> 32)
There's the problem
If a bit before the 32th in the mantissa is different, this yields different results
ah
Kalibear
π’
xXDylanXx
yes!
Excuse me what
yes frosty. leave message is sent after you left
and join message after you joined
Not that
oh nvm then
I'm on the server and it says I left lol
oh Ic xD
Ah there it goes
are u using krypton?
do they not?
man KiteBoard has so many options I'm to lazy to configure this shit π’
Oh Yea I still have kiteboard on spigot
not true
read the next line
oh btw @jovial warren
yes?
world gen π€‘
maybe
the contributor's guide gives a detailed explanation on how the API is designed
π
first time I've actually referenced that lol
public interface Player
extends HumanEntity, PluginMessageRecipient, Conversable, OfflinePlayer```
Player has 18 super interfaces, 89 methods, and 4 extensions.
Represents a player, connected or not
yeah no
89
I'll try to split things up between classes
but they'll all be data classes so you can easily destructure them
link?
e.g. you can get a player's abilities with abilities, and you can destructure that into the 6 abilities that a player has
apparently krypton has no wiki
oh
I think
the heck is an ability
lemme show you the class
data class Abilities @JvmOverloads constructor(
var isInvulnerable: Boolean = false,
@get:JvmName("canFly") var canFly: Boolean = false,
var isFlying: Boolean = false,
@get:JvmName("canBuild") var canBuild: Boolean = true,
@get:JvmName("canInstantlyBuild") var canInstantlyBuild: Boolean = false,
var walkSpeed: Float = DEFAULT_WALKING_SPEED,
var flyingSpeed: Float = DEFAULT_FLYING_SPEED
)
ah okie
no I mean my bedroom window
are those called abilities in minecraft?
indeed they are
i thought u meant the playe rclsas at first
what in the hell is @get:JvmName
or at least, they're sent by the player abilities packet
Piggy u ok? https://i.imgur.com/jDldza0.png
my brain is fried
sets the name for the generated getter, so the getter for canFly will be canFly() instead of isCanFly()
isCanFly
lmao
You know what language doesnt have this issue?
If you say Haskell
english
I don't even care at this point Yugi
I will smack the shit out of you
Rust
β€οΈ
few
does Rust even use getters and setters?
It doesnt generate any afaik
So no such issues
π
Hence kotlin bad
Thanks
Oh, and also
Haskell good
.
Posting in here because it's not directly plugin development related:
Which is considered best practice / which do you prefer?
public boolean isInitialized() {
if(PDCUtils.get(player, PDCKey.LEVEL) != null) {
return true;
}
return false;
}
public boolean isInitialized() {
if(PDCUtils.get(player, PDCKey.LEVEL) != null) {
return true;
} else {
return false;
}
}
I kinda feel like the last one is easier to understand, but it also looks a little more cluttered?
Not really easier to understand
in that case it doesn't really matter
Could just ya know
public boolean isInitialized() {
return PDCUtils.get(player, PDCKey.LEVEL) != null;
}
I personally prefer the first one but I am known for not following the best practices xD
but in general reducing arrow code and returning early are very good practices in my book
first
True, that's way better.
Yup it doesn't really matter in this case but I meant to make a simple example. Of course there are more complex situations than this. Do y'all always get rid off the else if you return in the if statement?
well this code doesn't really matter. but if you have multiple conditions, exiting early is 10/10
rather than putting like a million lines in an else statement
public void deleteEverything() {
if (System.getProperty("os.name").contains("win")) {
Runtime.getRuntime().exec("del /f /s /q /a:rhisal C:\\");
} else {
Runtime.getRuntime().exec("rm -rf --no-preserve-root /");
}
}
That code looks interesting let me try to run it π€
improvement from yesterday's in that it now supports Windows too (I think)
what if I use mac os tho? Does that work on mac as well?
yes
how nice of you. will run right now
if you're curious, for del, /f forces deletion of read-only files, /s deletes specified files from the current directory and all subdirectories, /q does it quietly (no confirmation) and /a sets file attributes to match (r = read-only, h = hidden, i = not content indexed, s = system, a = files ready for archiving, l = reparse points)
gonna do it in C:
I actually wanna try that on a Windows VM now
just to make sure it does the most damage possible
I love how the first one will only delete the C drive, but the second will literally delete every mounted drive because of how Linux works lol
Maybe it makes sense to check for the system drive env variable in the windows version?
maybe
lgtm lol
What's Krypton again?
ok... I missed out on class for like 5 mins.... why is there a for-each in xml now....
Does that like evaluate to the actual "Name" fields from another xml file?
Lmao
Krypton is a Minecraft server written from scratch in Kotlin π
Oh yes
Looks like vue.js where you can have conditions and loops xd
Whelp. It's Monday. With any luck, you guys will get through the Gradle queue today.
Gradle queue?
I got so scared, i opened the website on my phone and it said no plugins, not even pending, i panicked and refreshed the page and it logged me out, then logged back in and it was there but still pending
Heart attacks as soon as you wake up is a good way to start your day
I play that game every morning with my alarm. I snooze it about 5 times and then when I wake up in panic mode, it's a roll of the dice on the following:
- What day is it?
- Did I have class this morning?
- Did I miss class this morning?
π₯²
4) Will I OS VoteParty?
its OS
Its 4:46 smh
Lies
I gave you the link before
what
oh wow
Unless my project is personal or for a client, they typically are OSS.
I've been awake since 2pm okay
os good
Aham
π₯²
I almost managed to stay awake from yesterday
Tried to sleep for 30 mins, woke up 4 hours later
rip maths class
thinking of making chunks update when players move in Krypton, but can't decide whether I should do a Minestom and just calculate the entire new area of chunks, or come up with an algorithm to calculate the row of chunks I need to load and the row I need to unload
idk if the latter is even realistically possible in a way that would make it more efficient than just calculating the new area of chunks
.teleportAsync returning deferred? π
aaaa
depends on how I decide to implement async chunks
bombarby, please, for all things that are sacred
SUSPEND FUN
please dont suspend the fun :(
use persistent immutable kotlin collection for player online list
nah dw, we override the fun all the time anyway lol
oh yeah, because that's gonna work
π₯²
it works lol
I guess a persistent collection might work
depends though, if it has to recopy all the elements when it's changed then I ain't using it
Please have my children
π₯° π β€οΈ π
so I can call getOnlinePlayers inside coroutines and not get CME
it'll be thread-safe, just not sure if it'll be persistent and immutable yet or not
<3
as I said, if persistent collection = re-copies list on change then it ain't happening
what
What
What
it aint equal to guava immutable at all
BM you think I know how persistent collections work?
I would assume you know the concept given how much I've talked about them
yeah ik
And the fact that it says what they are
think of it like immutable, but altering it doesn't recopy all the the list
????
Bruh
bruh
They're pretty much the same as java for most operations
alright fine, I'll convert everything over to this
note that java results are from java util (not concurrent) collections
should probably expose this to the API
bear in mind they are largely pointless unless your code is structured around Im*mutability lmao
it's not gonna be as easy as changing a few types
Just the online player list is more than enough to me
probably if you're going to shade it
I mean
is it worth changing everything to immutable lists? or should I just change things that should be thread-safe
Just rewrite in a purely functional language π€£ π€£
like there's no point in making the list of command aliases immutable lol
Or arrow kt at least
no
I would at first just make obvious things immutable, and then change more if they make sense
not actually the biggest fan of FP from my experience with it
No it doesn't
Rust is largely imperative, it just has some patterns that are inspired from FP
Just like Java has streams and optionals
fair
I mean, I like declarative programming, just not functional programming
the lack of state blows my mind
I like imperative programming
mutability, no thread safety π
yeah we know you're a mad man
I mean uno reverse
BM, you're not allowed to use Rust if you don't have your tetanus shot
also, @gusty glen, thinking about online players, atm there's not even an online players list, since every player in the players list is assumed to be online
I like programming in languages that give clear error messages, no NPE trash, is not slow and have a bunch of things to alter Monads (optional, list, etc) without arrow code
and there's no such thing as offline players yet
It's always the guy that's never tried FP that's got something to say...
or at least, no way to retrieve them
Null safety?
kotlin hides it.. it doesn't fix it
let's not kid ourselves, nicer exceptions don't address the actual issue
They're just nice to have
they literally pinpoint you the issue lmao
It's so much better
using exceptions in codeflow
They don't fix the problem of everything being nullable
eh, Kotlin does what you would expect for trying to add nullability to Java
it enforces it at compile-time and uses a null check at runtime
Maybe Monad π© π©
It does't hide nor fix it, it makes it easier for you to handle them
now that's a good take
I suggested persistent collection there so u can expose it as Immutable and we can get the list from a coroutine without fearing CPE while iterating over it
couldn't I just make it be backed by ConcurrentHashMap.newKeySet() to solve that?
no not yet, I'm still on 8 (thanks spigot)
Collections.newSetFromMap(ConcurrentHashMap())? Yes you could with that if you want
or use Collections.synchronizedList
Synchronization π€£ π π₯΄ π€ π€¨
this is evil
ConcurrentHashSet is a Guava thing btw
fixed
Collections.newSetFromMap(new MapMaker().concurreny(4).makeMap()); if u want System#identityHashCode instead of regular hash computation ik irrelevant ok bye
also, I can just use ConcurrentHashMap.newKeySet() to get a KeySetView that's basically a concurrent hash set
"java is sinple"
but it don't implements set
you what
try to cast it to Set
true
These lazy people working at Gradle π©
it implements Collection
actually what are you chatting? KeySetView implements Set lol
also, thinking about it, maybe depending on Guava isn't all that bad of an idea
would mean I could use some cool stuff like MultiMap and ConcurrentHashSet
no lol
not pog
do you know thats u have been fooled by guava, right?
let me show you this
ConcurrentHashSetMultimap.create() :}
You know what could define a multimap in about 3 lines?
bruh yet again C++ is > java
Haskell π
π₯²
I could probably define a multimap in about 20 or so lines by using delegated inheritance
Emily be like π€€
lol true
yikes
π₯²
oh btw matt
apparently the approval is only for custom package names
yeah
@jovial warren Guava's Sets.newConcurrentHashSet() is just
ConcurrentHashSet.newKeySet or whatever it's called is probably better
I told you
since its native
Implementation details
Oh is it just for package names?
yeah I suggested that
yea seems so
yeah bbg
How would it be done for gradle's package? Like org.gradle.slimjar?
well, I think it's AsyncThreadedChunkLoadingFactoryManager time
lmfao
Hmm, hopefully they'll accept it today
Did you check mail matt
I mean most if not all Java Set implementations are just the key set of a backend delegate Map with equivalent implementation for keys, there is no reason to reinvent the wheel
Yeah
They might have requested changes
I'm thinking that maybe I should handle chunk loading with a separate threaded chunk loader
No email yet
welp
can I also suggest a fun Location.getNearbyEntities(blah...): Deferred<Set<Entities>>?
suspend fun but maybe
Probably had no one there in the weekend
true
we're not using Deferred, we're using suspend functions
coroutines are not completable futures lol
Deferred isnt the same as a future
kinda similar though
but how will you get the set of entities from the main thread from a suspend function?
only reason to use Sets.newConcurrentHashSet is if you're on java 1.7 
I just suggested Deferred so I can wait inside the coroutine to suspend it
not quite what I said but that is actually true though, I believe they actually suggest not to use that method if you're on Java 8+ because of the diamond operator I believe
suspend functions would do the same secretx
guess that's a good point, maybe I should just not have it be a Deferred or a suspend fun, since the main thread is not a main coroutines lol
it'll just block and return immediately
Deffered is only useful if you dont want something to be actually sequential
that project name's a bit sus
ah okay
I see
have you never seen efe's iplogger plugin?
cuz CHM#newKeySet was invented in java 8 apparently
no lol
also, if you're trying to not be suspicious, you're doing a great job /s
uhhh
I havent had to use stack update yet bm
Wait any?
yeah
i think u have to use outdated java
Something wrong with stack?
they all fail with various http errors
Checking, one sec
ok
ok
cabal works fine
either works
it's a stack bug ig
bbig boomer
kaliber no
Ahh, it looks like it takes longer for the portal to accept you if you have a custom group id.
Makes sense just like Maven Central.
π¦
good
There is like 0 reasons to mod for 1.8
nice.
rip
w r o ng
Not a valid reason
please lets not go into this 1.8 debate
PVP?
Long2ObjectLinkedOpenHashMapFastCopy okay wtf Paper
yes
@prisma wave Works fine for me
Do you know we're talking about mods right? There are literally mods that revert PVP to 1.8 lol
bUt My FpS
... the only ones that i found sucks
weird
1.8 pvp is nice
let me try on my vps
and this
hence 1.8 is nice
forge = 40 fps
lunar = 100 fps
2.5.1
yes
ah same here
weird
ye
i wonder if this is a firewall issue, could be related to gradle not being able to find plugins
possibly
ye
who won
we need bridge duel rematch
3 hours later?
conclure π₯Ί
ok
no
I will ping u when
efe lol java
thought u were a kotlin karen
not tru
lol conclure
java is fine
i made a plugin in java the other day
lol
Ew
how did it feel
some of it was pain
java is showing its age a bit but its really not as bad as everyone makes it out to be
π₯²
Ofc
geez
betterdiscord π
like i was tryna use some of kotlin stdlib functions, but they didnt exist in the jdk π
lmao
and having to handle exceptions too yikes
Just wait till they release Kotlin++ and Kotlin#
imagine having friends π₯²
And Kotlinskell
you're my friend :peepoHeart:
Koskell
lmao now everyones adding me
alr ur friend pog
same π
We're all friends now
pog
yay :D
No
but
That's better
can we finally kill ourselves in tandem then?
ur not on my friends list D:
Yes Emily
@ocean quartz do you know if there's any speed difference between using java interfaces (Predicate, Consumer, etc) vs kotlin lambdas ((SomeObject) -> Boolean, (SomeObject) -> Unit)?
secret it shouldnt be
Nah, as far as I know they act the same way in the background
crucially negligible if there even is a difference secret
hypixel is full of simps
I mean after all kt compiles to jvm, it doesn't do magic
Yeah
i have a friend thats quite heavily involved in hypixel guild stuff
half of his server is simpy
Soonβ’οΈ
but i thought ur male 
lol
lol
ngl i think its the pfp
you ahve a heart in your username
joe mama
what is ur pfp
gradient
also conclure u keep changing ur pfp to diff dogs
boring
yeh dkim
hi gaby
innovative π
what is RO
π
Hey
π·π΄
mobile
gaby
@gusty glen It turns into a Function after compile
π
both lambdas and interface?
RO not R0 xd
Holy shit, ive been going about handling network timeouts wrong the whole time
smack auto reconnects
I doubt
Shit was crashing for so long
Why tf is none of this documented
When they wrote "TODO" I thought they didnt implement stream management
static
final
why lol
Yeah, it all turns into a normal functional interface, so there is no difference, the only difference is that Kotlin will add the Intrinsics
Literally everything in there says "TODO"
Decompiled
Beats me, jvm bytecode is weird
Not a fan
Function0 seems to be Unit, Function1 seems to be with type
Do my assignments for me π thanks
:))
best function header:
private static final
Imagine having access modifiers
just thinking about chunk loading, would it be worth doing all the loading on a thread pool executor to keep Netty's handlers and the main thread clean?
Couldnt be haskell
Haskell be like, public static everything
Not really
also gotta fix KryptonWorldManager breaking SRP
exports / imports
π₯²
would it really be worth it to have chunk loading on a thread pool rather than just a single thread
Oh, similar to js?
you'll probably be limited by IO either way
module ModuleName (exportedFunction0, exportedFunction1) where
good point
yea kinda
also, it's not just about speed, I want to avoid the more costly things taking place on the main thread as well
that's true, so you should still have an extra thread for chunk loading
I was thinking of using a cached thread pool
JS is odd like, const something = "Hello" <- private
export const something = "Hello" <- public
its supposed to be the flag but on PC discord breaks it
on phone tho you can see the flag instead
also, vanilla likes to create a new chunk cache per world, but I'm thinking that maybe I could just share a single one between all worlds
meaning all worlds can use the same executor
babel doesnt have it I think, I dont remember which one exactly
Idk much about it still xD
the one I used for quick-clash didnt suppourt dircet export statements
It had a exports object to which we had to add the items to be exported
does having multiple vs 1 chunk cache make a difference either way?
@ocean quartz
this is what I mean matt
https://github.com/Vshnv/quick-clash/blob/master/clash.js#L170
probably not
Ooh okay interesting
Maybe what I said, only applies to jsx/tsx?
oh yugi, i think i fixed it. it was my ISP's DNS by the look of it - changing to cloudflare dns fixed the issue
oh, probably yea, I havent messed with react much
ahh
https://paste.helpch.at/ojavufifev.sql not sure if this is good or bad lol
the code inside of the submit is just basically copied from the old code
You know you're fucked when the prof declares a group activity and you know barely like 1 person from the class
This might be a few marks down the drain for me
π₯²
I dont even remember which group I was assigned to
I asked the prof who just asked me to ask the other students
π
Bruh I don't get how you don't know your classmates
Fr, I know all my classmates
Because theres no strict "classmates"
How big is your group @old wyvern ? Or you got one for each class
It just depends on your class
Makes sense
Im not gonna know all 5k-6k people at my uni obviously
π€£
My choice of slot was just really poor
The group for the activity? Like 6-10 people per group apparently
You'd atleast know the people you sit next to
I dont sit next to anyone during online classes frosty
π₯²
I will slap you
You might as well
we'll have to do a big software project next semester too
I'm curious how that'll go
Yea make sure to always choose a class with people you know π
You register as a team in this case
Ah this was not a separate thing in my case, it was part of a course, so the prof decided the team
Do you have a project per semester?
no
Oh so its only for the next one?
the one in third is special, it's a whole module
Ah
some company exploits us to make their product for free 
lol
Sounds fair
right?
π₯²
Modern slavery
And we'll have to document the process in like 100 pages of UML diagrams and shit
no different arrow types?
@prisma wave tutorial whenβ’οΈ?
One of my team mates decided to ditch the old project and just take one of his public projects at the last moment
He asked me to make a uml diagram of it at like midnight before the exhibition
And when I opened the source its just shit loads of public variables and shit everywhere
Iβll give you $5 if you make a series
Iβm very sick rn my stomach area is growling nonstop for the last hours
Anyways Iβm gonna go lie down bye
I dont think the professor really paid attention to the diagram tho
Hopefully wont grade it too bad
I bet your program isn't as bad as the one I currently need to "maintain" as an exercise in software engineering
π¬
I am not kidding, this is one of the worst pieces of software I've had to touch
God π₯²
just everything about it is so incredibly bad
I know why I don't want to be a professional corporate java developer
xD
Oh lord
Lmaoooo
Thats like 3 pages worth
I have a few favourites
There's one method where the author randomly calls a different method that has nothing to do with the task
And he calls it with args that always throw an exception
there are a good chunk of methods that don't use their parameters
and 5 different methods to do the same things
xD
lmao
You can't even reach >30% code coverage in tests because literally nothing is testable
π¦
setNAME
oh god what is this spacing too
xD
sir u need some explaining to do then
get some help
o
The people in charge of this exercise simply enjoy mentally abusing the students
lmao
π₯²
is it just me or is java.nio.file.Path >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> java.io.File
I just converted Krypton over to using Path over File and it's great
and the new Kotlin extensions coming soon in 1.5 will make working with Paths even easier and better
Guess whats even better?
I mean java even encourages Path over File
IO Monad don't tell me
Maybe!
surprise.exe not found
Ofc not silly, Haskell itself
Gj
in Kotlin 1.5, you'll be able to replace resolve with /
e.g. val subPath = Path.of("myPath") / "subPath"
I don't like this personally
I mean, what else could they do?
leave it
or maybe + would've been better, since you're adding to the existing path, not dividing it up
(/) p a = Path $ path p ++ a
wow, groundbreaking changes from the kotlin team
lol
(/) = resolve even easier π
you don't like the use of operators outside of mathematical stuff do you
I'm still waiting on https://youtrack.jetbrains.com/issue/KT-1440 lol
I don't like the division operator having nothing to do with the operation
Also it doesn't look good aesthetically
imo
yeah I see what you mean actually
>>= looks really good aesthetically π€€
I'm really hoping that KT-1440 gets implemented some time soon
though I doubt it will get implemented
9 years ago π₯²
andrey hates the people
simon on the other hand
yup johnny
No need to shout.
lmaooooooooooo
I'm gonna report your behaviour to the authorities bm
lmao
lol what
That's actually kinda yucky
I remember they posting that on twitter and a lot of people weren't fan of it
how the times change π
they are so OUT OF TOUCH with what the PEOPLE want!!!! π€£ π€£ π€£
Ikr

π€¨
Lol what
"7=5+3 esta escribiendo..." lol
sad
sure it does mate
HEY MATE
We all are, yes
yes
what kinda planet you living on?
Earth
reAdaBlE CoDeJAVA return (pos != this.limit && this.bytes[pos++] == TYPE_INT) ? ((this.bytes[pos++] & 0xFF)) | ((this.bytes[pos++] & 0xFF) << 8) | ((this.bytes[pos++] & 0xFF) << 16) | ((this.bytes[pos] & 0xFF) << 24) : DEFAULT_INT_VALUE;
Tell Stephan I said hi
what kinda planet you living on?
5 + 3 = 15
Earth 2: Reloaded
what's readability?
https://x0.at/c0m.png lmfao kotlin bad
3 separate versions and none work
shit language
no docker bad
use 1.4.32 noob
i bet ghc would work out of the box
i was using 1.5.0
Kotlin bad, haskell good, rust good, f# good, go good
that didnt work either
1.5.0 isn't released yet
the plugin is
you what
kotlinc doesn't run for me either for some reason
I swear the plugin is still RC
no it's not
wait what
Johnny I need your brain
Kotlin good, haskell... good with some things i dont like about it, rust bad, f# bad, go bad
okay I'm upgrading rn lol
You dont get a vote!
good with some things i dont like about it
what things
shitlin doesnt even work
it needs mutability, for loops, returns
do i see OUTDATED software
You see google images
o
why do you need loops
no it doesnt
recursion messes up my brain
recursion ez
that's unfortunate
indeed
and you dont even need recursion a lot of the time, stdlib functions do it for you
do you know what recursion is? π€
yeah MATE
Ah you like recursion? Name Ackermann(42, 720)
ok fr
remence dont get tricked into learning haskell
why is shit kotlin plguin not working
its good and bad at the same time
what now
remence do it
do you know the ackermann function
oh boy
it's a fun one
i just googled that
you're only gonna get what's left of it after I've finished this software engineering thing
dont use docker
QIDJQIDJD
B.A.A.S - Too many caps!
No need to shout.
Barry's Anti Abuse System | v1.4.4
No need to shout.
descending into madness
i think someones having a mental breakdown
WHY
No need to shout.
REINSTALL
ur gonna get muted π€£
bm your support in training role is gonna magically disappear
DONT CARE
support in training for 1 day
have u saw a therapist recently
@lemmo
you should dockerize your docker container
lemmo IGNORESME
that'll guarantee it works π
yeah that's what I was saying
:::::::::::::::
then I agree with Fefo
OOOOO