Kotlin is a better Java, or simpler Scala. Simpler can be better for plenty of teams, especially for those coming from Java. But I'll not be switching any time soon.
Sidenote: Mindfulness (AKA vipassana or insight) meditation can give you that gap between feeling something, an emotion in this case, and responding to it. It's potentially useful for a lot of usecases - the NHS have been offering mindfulness-based cognitive therapy for a while now - but what you're talking about sounds very relevant!
There's quite a few options in this area. I've recently started using dokku for personal projects. My current plan is to migrate to deis in future if/when I want multiple nodes.
Which is what Dotty is attempting to do, but hopefully with minimal codebase breakage.
There's a tradeoff between breakage and improvement, but I'd like not to wait 10 years before I can use dotty (like python 2 to python 3). We can always have another dotty in 5 years time for another round of rationalisation/simplification.
I think Scala is doing a decent job at bringing these concepts together. Scala ticks all the OOP points you made - even more than Java does (Java has special primitives for int/booleans etc, in Scala that's more hidden, really everything in an object). FP also likes Encapsulation as you decided it - pure functions, that don't do side effects (even logging) without it being explicit in the type signature.
FP can model relationships/interactions OK. They just have new tools/techniques to do it. For example, instead of mutating things, you create a copy with the change. You then push the actual state/mutation to the edges of your system (e.g. the database), and thus hopefully make it easier to reason about. But it can be slower or hard to change things deep in an object graph. For slowness - we have persistent collections which re-use unchanged parts of the collection and implement performant "copying". For deep structures, Haskell & Scala have lenses.
It's still an ongoing exploration, with people borrowing/discovering new techniques, but I think it's working quite well and I'm happy to keep exploring.
In the other direction, I've been following Rust. I find it very interesting that it's got a very good type system, but still has mutation. Instead of avoiding mutation, they track ownership in the type system, and thus keep it easier to reason about. By doing this, they make the the performance/memory management easier to reason about, without making it too hard to reason about where effects are happening.
I ported a site written in vanilla Javascript. I decided to faithfully port it without any changes before introducing scala specific libraries. That was pretty painful. A bunch of manual casting for UndefOr and js.Function.
Since then I've started using some of the scalajs libraries/frameworks straight away on projects. It has been a much more pleasant experience!
I believe that works against jvm bytecode, which you don't get for scalajs. Instead the compiler has a JS specific intermediate representation which the optimizations occur on.
The comments on MongoDB JIRA ticket pretty much sum it up. A hard arbitrary limit sucks. They say the real limit would be RAM, maybe they should change to that. If there's a threshold which will impact performance, then just warn..
If you've ever bought a domain then you'll know that there are a number of providers, each with their own prices and pricing structures. I was surprised to find there isn't a price comparison website for domains, so I built one.
Hopefully it's something that would be useful to people on HN. Whilst building it, I realised I could have saved $20 on the .io domain I bought recently.
Any feedback would be much appreciated. The immediate plan is to show the prices for domain renew and transfer.