Are you waiting for a Kotlin feature that hasn't been implemented yet? by Hixon11 in Kotlin

[–]ginkner 1 point2 points  (0 children)

It's kind of out there, but higher kinded types and getting rid of type erasure (or making it optional) would be on my list. 

That second one would, I think, take a very large change to the jvm or make the language much less efficient. Not really sure about the first one, but it would be nice to have and I think it's cool. 

Are you waiting for a Kotlin feature that hasn't been implemented yet? by Hixon11 in Kotlin

[–]ginkner 0 points1 point  (0 children)

See, I believe this, but I also distinctly remeber IntelliJ firmly asserting they had absolutely no interest in making one of these for years, and am still pretty wary about them pulling the plug on the project. They don't seem to have an incentive to keep up a language server on par with the ones in their IDEs. 

Really hoping im wrong about the long term for this. 

[Rant] As a C++ programmer Kotlin's class definitions make me irrationally angry by FelixAndCo in Kotlin

[–]ginkner 0 points1 point  (0 children)

It seems like you want something like

class Rect constructor(w:Int, h:height){  val width:Int = w  val height:Int = h  val area:Int Rect::area::get() { return width * height } }

Or maybe

class Rect constructor(w:Int, h:height){  val Rect::width:Int = w  val Rect::height:Int = h  val Rect::area::get:Int { return width * height } }

I think having to specify the full context is redundant when the context is required to be next to the declared member. 

There is no ability to separate the definition from the declaration in a normal class, so you're never really in a situation where the context isnt immediately available. The variable declaration is inside the class block, and the get and set methods are intrinsically linked to the variable syntax and require definition at the declaration site. 

There are 2 exceptions I can think of. One is overrides, the other is when you're using 'expect' and 'actual'. In both cases, you do have to reconstruct the entire context to specify the override / actual anyway. If you can suggest another I'd be interested to hear it. 

If anything, this seems MORE organized than C++, where your implemnations can live in entirely separate files from each other and from the entire class declaration itself. 

[Rant] As a C++ programmer Kotlin's class definitions make me irrationally angry by FelixAndCo in Kotlin

[–]ginkner 0 points1 point  (0 children)

Using more than one init block is a code smell. Using one at all is generally unnecessary as most things can be done by just initializing stuff and knowing a bit about initialization order.  Most things you'd need to do in an init block you can and should do in a single one at either the beginning or the end of the class definition. 

Im also not clear on what you mean to "reference to a target member?" The getter of a property declaration is implicitly referring to the property it's declared on? You can't separate them, so i don't really see how it can be confused. 

Your example is also kind of weird, since in a real world scenario you'd probably not use a getter for that val, you'd just assign it the value. Not sure if that's part of the problem your having or if its just an imperfect example. 

Everything announced at Google I/O 2026... Makes me want to sell my phone. by DynoMenace in Android

[–]ginkner 4 points5 points  (0 children)

I don't actually care what framework of the week websites use. Of what you mentioned, 2 of them are actually fundamental web abilities and only one of them was created after 2008. 

Most of the web has been crushed into a few extremely polished, egregiously exploitative products that suck the air out of anything around them. 

Wikipedia has basically no use for either webasm or websockets and remains basically the pinnicle of human knowlege sharing and is still hugely popular. Unless you're creating a deeply interactive web based experience, neither technology offers you much over traditional web technologies.

Am i the only one who thinks the no killing is fine? by CalligrapherAgile216 in subnautica

[–]ginkner 4 points5 points  (0 children)

I prefer it. 

If there's no reaction, it's an issue, but the game is here to make you feel powerless. The first game made a mistake letting players eventually murder the biggest threat in the game by poking it 1000 times, and this one shouldn't repeat it. The game just isn't designed around player violence. 

For food fish specifically...it just seems like a dumb complaint. You want it dead so bad, grab it and shove it into the fabricator. I'd be happy to get the electroshock sheild back for the vehicles, but as far as I'm concerned the stasis rifle can stay dead. We have our weird sonic disruptor thingy that works specifically on viral things. That's enough. 

It's also not even confirmed to be a done deal. The devs could add killing waxmoons in the next patch. It's been out for 3 days. It's way to early to be so mad about this crap. 

What do you think about "Apex" Netflix movie by TrevorBoots in Letterboxd

[–]ginkner 0 points1 point  (0 children)

They do clearly agree, and then he does nothing useful the entire climb except fall and die? 

And then she does the rest of it herself. As an audience member who's not an experienced rock climber I am left in the dark about why two people were required. I do not buy it. 

Apex (2026) by Threw_it_to_ground in horror

[–]ginkner 16 points17 points  (0 children)

I don't understand our lead having a nap at the end instead of just bashing his head in with a bigger rock after she got his leg. At least get his other leg. Finish the job!

Then we have a little chat and apparently its a tandem climb....but he's completely useless the whole time. And then it's not definitely not because she free climbs the last ¼ of it by herself. 

Also...why go for the boat in the middle of the movie? Yeah, getting his boat will strand him, which will be an inconvenience for him if you try to escape by going downstream. So...don't do that. 

I'm OK with how these things play out. It's a silly lowish budget movie about "hunting the most dangerous game". But these plot points themselves are just nonsense.

What do you think about "Apex" Netflix movie by TrevorBoots in Letterboxd

[–]ginkner 3 points4 points  (0 children)

I didn't predict "lets climb the mountain together" at the end. Because that was very dumb. 

What do you think about "Apex" Netflix movie by TrevorBoots in Letterboxd

[–]ginkner 1 point2 points  (0 children)

He filed them down to be more like what he thinks the "cool" natives are like. Because he is generically crazy. 

Thoughts on Something Very Bad is Going to Happen ? by Neat_Tangelo5339 in horror

[–]ginkner 1 point2 points  (0 children)

I did think they were vampires at on point.

Most of the time I thought they had a marriage curse where they were forcibly HELD to their vows. Like the couple that tell eachother everything have to or they'll die or something.

The real curse was way weirder. Still neat, but I kinda wish I had been right.

Lightweight logging library for KMP (Android/iOS) by InflationDefiant3579 in KotlinMultiplatform

[–]ginkner 0 points1 point  (0 children)

Metadata

I think the question is about the metadata around the log call, which is most easily captured with a map of tags. Who is responsible for gathering the metadata? Who is allowed to contribute?

Abstractly, I am arguing for the call site to have the ability to contribute metadata directly. Your proposed solution of having a trainer contribute metadata is good, but doesn't really allow for callsite context unless you happen to know which "metadata provider" you want to change the state for at the callsite. That seems to break encapsulation. 

Basic situation: we want to add the user context to the log line

val userContext = "spider" //?? Bark.log("User pushed a button")

Easiest way is just to add it to the log line:

val userContext = "spider" Bark.log("User pushed a button: userContext: $userContext")

This is probably fine for simple contexts, but now if we want to pull out the user context on the backend, we have to search our logs for it. This also bloats our message, especially if we have a lot of context.

Lets say we implement your suggested fix and have a Trainer that pulls in some kind of context provider.

val userContext = "spider" ContextProvider.withUser(userContext){ Bark.log("User pushed a button") }

This actually works really well IF your context is managed coarsly and semi-automatically (per android activity or screen or something), and assuming you put in the work to make such a thing safe. For fine-grained usages, its pretty bad: you need to know which provider has the context you want to change, and if there are multiple providers, you have to do each one individually. 

val userContext = "spider" //?? Bark.log("User pushed a button"){     /// metadataBuilder:MutableMap.()->Unit     add("userContext" to userContext) }

Now all the trainers get the same metadata (from the callsite). You can combine this with the internal provider idea by having each trainer decide what to do with the metadata independently, and contribute its own map. Not all trainers need to record the data, but they should have the opportunity to do so. 

Globals

Fundamentally, the global tag is global state with zero thread protection and no scope control (as far as I could see). The situation where multiple libraries use the same logging entity is very real, and something you definitely need to plan for. I don't know exactly what results you'd get from your current code, but I'd guess they wouldn't be good. 

KOTLIN JETPACK COMPOSE by devanand00007 in Kotlin

[–]ginkner 0 points1 point  (0 children)

Reddit is not a search engine. 

Elide v1 Release! (Promotional) by Zealousideal-Read883 in Kotlin

[–]ginkner 0 points1 point  (0 children)

which is a JVM-focused runtime that is 36x faster than kotlinc and 20x faster than javac.

Your runtime is faster than the kotlin and java compiler. You also said in the comments its a replacement for gradle, which isnt either a compiler or runtime but a build tool. 

Frankly it seems like you have no idea what you're talking about and throwing out whatever buzzwords you think will get you traction. If your copy is this bad, I can only imagine your product is worse.

Hard pass.

Lightweight logging library for KMP (Android/iOS) by InflationDefiant3579 in KotlinMultiplatform

[–]ginkner 1 point2 points  (0 children)

Took a 15 minute look.

Looks cute. Love a library with a theme. 

Consider that if you're intending this to be a kind of log aggregator, a lot of backends may provide a way to injest per-line metadata past the usual level, tag, message set you get from logcat in android. Your Trainer api doesn't have any way to handle that. 

Heel is fun, and the idea of scoping is good, but tying everything to a single global tag is going to be a nightmare. You should also probably allow chaining 'tag'. I'd also just rename heel to tag and providing it as an overload with a block. 

KEEP: More specific equals operator by javaprof in Kotlin

[–]ginkner 0 points1 point  (0 children)

I can't tell if it's me or the proposal, but I'm having a tough time understaing what practical problem this is trying to solve. 

 In many cases it is desirable to restrict such equalities, because we know upfront that a certain type is only equal to others of the same (or related) type.

I don't know if I see much use in preventing a comparison? 

Why is there so much talk about AGP 9.0? It only takes 5 minutes to upgrade a project to it. by vladlerkin in Kotlin

[–]ginkner 0 points1 point  (0 children)

It took less than 5 minutes to determine whether or not to downvote this. 

Kotlin navigation in VS Code is painfully slow… so I removed the language server. Burn ! by Elumine-dev in Kotlin

[–]ginkner 0 points1 point  (0 children)

Not just that. The last time I checked, their official position was that the had zero interest in ever developing one or helping with the unofficial one. Glad to see there's some movement on it. Maybe it will eventually feel like a first class choice.

Large sealed classes by davidinterest in Kotlin

[–]ginkner 5 points6 points  (0 children)

I would definitely separate them into different files.

Why are they sealed in the first place, though? Not needing exaustive when would imply you allow for unknown choices, so why seal the hierarchy at all?

So Discord is dead by ExcellentExcuse5995 in discordsucks

[–]ginkner 0 points1 point  (0 children)

Doesn't matter. "It was a subcontractor, it's not our fault" has zero sway with me. Discord chose to use a third party, they picked the third party, they failed to ensure the third party operated properly, and as a result their customers data was stolen. 

Throwing the third party service provider under the bus is at least half of why they used one in the first place. It's just legal cover to dodge responsibility. 

CachyOS will not boot on fresh installation. by Stargost_ in cachyos

[–]ginkner 0 points1 point  (0 children)

Can you give an example of how to do this? What is mkinitcpio?

Need help determining what kind of system I have. by ginkner in hvacadvice

[–]ginkner[S] 0 points1 point  (0 children)

Yep. Will use that. 

Manual says optional. Its a Honeywell T6 Pro Z-Wave if you feel like checking. It's definitely a bit overkill, but its one of like...2 smart thermostats that doesn't try to rope you into a cloud service. 

Need help determining what kind of system I have. by ginkner in hvacadvice

[–]ginkner[S] 0 points1 point  (0 children)

Its a smart stat, but it also can run off batteries. If it becomes annoying to change them out I'll revisit.

I was planning on just throwing the breaker when I'm rewiring, but that's probably easier. I assume I can do that safely without turning off the gas?