Hacker Newsnew | past | comments | ask | show | jobs | submit | p2detar's commentslogin

Good job. I think I'm gonna play it again. Are these kenney.nl assets?

Thanks. Yes, in the game menu there is a tab with links for the assets used.

This is such a good video. Instant sub. Next to tech bros, we should also put AI-cringe bros.

We should write more web apps, more PWAs and have some sort of a way to distribute those without proprietary app stores. It's true not every mobile app can be a web app, but for a lot of cases web apps work great.

Indeed. But Lotus Notes actually had the design and data stored independent of one another and you had database templates. You could update your design without breaking the data, or even have entirely different design that works with the existing data model.

This capsule thing seems to store the design itself within the database, which is odd to me. I guess I don't get it at 100%.


Yeah, it's not an exact match. But I could email you a lotus notes nsf file and you could open it in your Notes client and have the data and the application in front of you.

I use Java every day but just to point out that your info about Go‘s GC seems out of date. They switched to Green Tea in 1.25 (I think?) - new GC that even has AVX-512 optimizations. Not sure what you mean by basic about the compiler but it‘s very fast and supports a large set of platforms. That‘s not basic to me.

We are using JDK25 and are considering rewriting parts of our product to Go because of lower memory pressure and faster startup time, i.e., cloud friendly. I actually love both languages.


> I use Java every day but just to point out that your info about Go‘s GC seems out of date.

I'm well aware that Go's GC has improved, but the moving algorithm was designed not just to be fast for a GC, but to be faster than no GC. So Go's new GC is good - for a mark and sweep collector. But it can't compete with a moving collector (the only thing that can is arenas, which are user-friendly only in Zig).

> We are using JDK25 and are considering rewriting parts of our product to Go because of lower memory pressure and faster startup time, i.e., cloud friendly.

Java probably will never have perfect warmup, but it's getting very good - https://openjdk.org/jeps/544 - probably in JDK 28.

As for memory, I think Java's memory strategy is generally misunderstood and I've given a talk about it: https://youtu.be/xr73mR7ii9M The footprint overhead exists to compensate for CPU utilisation when the CPU utilisation is more disruptive than memory usage. The problem is that many Java developers - and I'm not blaming them - don't understand this tradeoff and how to configure the JVM for optimal resource usage, but the great news is that a solution is coming soon, too - https://openjdk.org/jeps/8377305 - also possibly in JDK 28.

So it's very likely that both of these issues will be resolved six months from today, and you'd still get to enjoy better performance and telemetry than all alternatives.


A couple data points, I like Java but I've seen metrics of container fleets at multiple companies that were memory constrained with low CPU usage sitting around underutilized. The reason in both cases was a bunch of memory-heavy yet CPU-efficient Java processes.

When CPU utilisation is low, the heap can be set much smaller. Many don't know that, so in the next year we'll have the VM do it automatically: https://openjdk.org/jeps/8377305

The amount of memory a Java program uses is whatever the setting is, not how much it "needs", because the need depends on the preference of the CPU/RAM tradeoff. But again, not many understand that, so we're making that automatic.


I'm sure both of the cases I'm thinking of could have been tuned better. Just saying that it's a default case that I've seen 2 places land, both of which had a lot of smart engineers following best practices. Maybe its food for thought for you in your position

Yes, this is why we're doing automatic heap sizing :)

CPU utilization is a red herring. Unless you're doing heavy number crunching (which these days heavily favors GPUs) the practical bottleneck on CPU utilization for large general purpose programs (especially when spanning multiple cores) is memory bandwidth. And moving GC is terrible for memory bandwidth compared to both Go-style concurrent GC (which doesn't have to do bulk moves) and manual memory management.

> And moving GC is terrible for memory bandwidth compared to both Go-style concurrent GC (which doesn't have to do bulk moves) and manual memory management.

This is not true. The whole point of the algorithm - the reason it was designed - is that the amount of moving is well below what's required in a non-moving collector. The downside is that the algorithm is more complicated and requires an FFI layer for FFI, but even though non-moving collectors are far simpler to implement, every language/runtime that can use moving collectors uses them (and all of those can also use non-moving collectors, too, as Java did earlier on; concurrent mark-and-sweep collectors like Go's or Java's old CMS are easier to make). Whatever you say about the complexity of moving collectors or their impact to latency before the recent invention of pauseless moving collectors, they are widely recognised fact that as the most efficient general purpose memory management solution (but also the most elaborate).

You could argue about certain workloads, but it is ridiculous to claim that the world's top memory management researchers worked for years to come up with an algorithm to be more efficient than mark-and-sweep collectors and malloc/free failed to notice that it has to move objects around a lot (the whole point of the algorithm is that it does not), and then every language that can use the algorithm chooses to use it because they also failed to notice that the algorithm that is so much more costly to implement is so obviously worse.

BTW, Go's reason for using a simpler, older style mark-and-sweep collector isn't that it's better (Google's larger V8 team opted for a moving collector), but that Go can get away with a simpler, less efficient GC because the allocation rate is lower (and we can argue over that, but at least that would be an argument over something that could actually be controversial).

Anyway, if you're interested to know how moving collectors really work, and how they were created to be more efficient than any non-moving general memory management strategy, I go through the basics in a recent talk I gave: https://youtu.be/xr73mR7ii9M


Go's compiler is fast because it doesn't do as many advanced (read: computationally expensive) optimizations as other compilers do. No clue about Green Tea and how awesome it is :-).

Lower memory pressure is certainly a difficult thing to beat Go at, Java (OpenJDK) is probably never gonna get there. You get a lot of other stuff, like better peak performance, instead.

Btw, have you tried Leyden/AOT for better startup times? Curious about your experiences with that.


> Btw, have you tried Leyden/AOT for better startup times? Curious about your experiences with that.

Nope, not yet. It's a good question given that up to now we used to deliver our product only on-premises and Windows Server-only, but this year we are now finally going with the Cloud, which means Docker containers and Linux.

If I remember correctly Leyden required some sort of warm-up and training data collection before being able to effectively execute AOT, right? I need to freshen up my info on that.

I did try GraalVM-compiled Java executables a couple of years ago and they were not bad, but the binaries were quite big (not a showstopper though) and the class-loading issues were kind of a PITA.


A simplified way (and it is simplified) is that it takes your warmed up ordinary Java JIT JVM and dumps all of the "warmed up" stuff to an archive that's super quick to start. Then you skip a lot of interpretation, etc. You need to run your regular app while recording, in order to get something out of it.

Actually, javac itself is plenty fast, pretty similar to Go's (it also barely does any optimization)

It's usually the build systems that add quite some overhead.


Neat game! I managed to get to level 11 but got beat up.

There can be a set of really cool things one can do with Asteroids. Some years ago I made a game which is a mix of Asteroids+Bomberman+Pacman.

https://kenamick.itch.io/spaceghost-cga


This looks cool! Will try it tonight. 8k links - I guess you got a nice user-base already. Was it easy to market?


it's mostly me for now, im a hoarder for links and things to read. dogfooding the app heavily.


"Art is in the eye of the beholder" - it is me, who enjoys art and how it affects me and works with my emotions that is affected by it. Who or what the artist is, should be irrelevant, unless the artist imposes some monetary value I want to profit from at some point.


I don’t think the artist should be irrelevant - the art is the expression of the artist’s emotions. Knowing about the artist unlocks a lot of depth in the art, it’s an attempt to share and express their perspective through creative means.

Not to say how you decide to consume art isn’t valid (there is no proper definition after all). However, you’re doing a disservice to a lot of artists by dismissing their role in it all.


> However, you’re doing a disservice to a lot of artists by dismissing their role in it all.

That is a false assumption. I do not dismiss the artist role, but I also would not be interested in the artist if their art does not move me. People generally do not know who Banksy is, but he is being defined by his art, not by his persona. That may very well happen for an AI agent sometime in the future.


Just to add that nowadays once can use HCL Verse for web- or mobile app-based email access to their Lotus Notes email database. It's quite sleek and it works.


> that you could click through the interface and find a lot of capabilities that were vestigial

Lotus Notes allows you to right-click on a "document" and see absolutely all data attached to it, directly in the UI, including access permissions. This can be immensely useful, because not all data could be part of its UI representation.

The closest to this today would be inspecting the JSON data on your browser networking tab to view what your app exchanges with the server, but its much more clunky.


Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: