Reading about mainframes feels very much like reading science fiction. Truly awesome technology that exists on a completely different plane of computing than anything else.
This thinly veiled advertisement claims it's a waste of time to understand the tradeoffs in the models you're using, and you should instead pay them to make those decisions for you. No thank you.
Per the ongoing Freedesktop discussion, AWS offered to host but Freedesktop is leaning towards self-hosting on Hetzner so they can control their own destiny and sponsors can contribute cash towards the bill instead of donating hardware.
I saw their original announcement and they said that their infra (3 AMD EPYC from generations ago, 3 Intel servers from 2 generations ago, 2 80-core ARM servers) would cost $24k/month at Equinix prices. I checked Hetzner's equivalent offerings, it would be ~$1.5k/month for newer AMD servers. It would probably be even less if they went with older servers listed at their auction. And it probably would be even less if they just moved their CI runners to virtual servers on Hetzner's cloud.
Seriously, Hetzner provides so much move value per dollar, sometimes I fear that one day they will find out and just jack up the prices to match the rest.
VPS business is very different than the "cloud" space.
Yes yes there are cloud features now offered by VPS providers, but they are add ons to chase demand, they aren't positioning their offering to appeal to users wanting a comprehensive suite of services on the platform. Managed databases, SMTP as a service, deployment as a service etc etc etc. For that reasons market rates are different.
For Hetzner to bump their prices significantly they would need to build a cloud platform a la AWS/GCP/Azure. Won't happen by Xmas even if went all in. They are good at what they do and make money so they stick to that.
Of course they are not in the hyperscaler space, but they are far from being "just" a VPS provider.
Their cloud always had on-demand, per-hour billing of servers and block storage volumes, all very easy to manage and provision via their API. Recently they got into object storage space. They even provide a switch to connect their cloud servers with a dedicated one, so you can have, e.g, a beefy GPU server running a LLM model and your web service auto running on the cheap.
I believe that the only thing that really holds Hetzner at their price levels is that the price-sensitive people can always threaten to move to OVH.
OVH or to hundreds of other less known infra providers.
The barrier to entry for these providers is simply, "low". So margins got to be low.
The thing that holds Hetzner and the likes is you can't purchase a package, follow the setup instructions to make cross disciplines engineering departments. It is no wonder Amazon, Google and Microsoft built a comprehensive cloud. They were in the engineering business.
It doesn't imply Hetzner aren't doing a stunning job at what they do or that running an infrastructure farm is a walk in the park.
Hetzner also has the interesting choice of consumer-grade machines which probably work fine in cases where you are constrained by CPU power rather than memory capacity/bandwidth. You'll also lose a bit of redundancy and reliability but that might not be as big of a deal since the machines are managed by them and you can probably get things replaced quickly. For example depending on the workload the CCX43s might be replaceable by the AX52.
Meanwhile for CI runners you probably could split the big bare metal servers down into smaller individual machines and run less jobs of them. Depending on the CI load profile it might also make even more sense to scale out to the cloud on high demand as opposed to having a bunch of mostly idle machines.
Hetzner has a great price but it plays not in the same league as AWS. It's cheap and good enough for some applications but I wouldn't call Hetzner a professional service.
The USA being "Free" has mostly been a myth. It's "Free" if you're a member of the owner class, else you're freedom is subject to the whims of politicians and the wealthy. Aristocracy, really.
Yes agreed, although I think it's worth pointing out that the same is true of virtually every other country as well. Historically at least the US (generally speaking, plenty of people are exceptions throughout the entire history) aspired to freedom and equality, despite falling short.
True, but the spirit of the law died a long time ago, and the vision originally created by the founders has been distorted and "mythified" in favor of the desires and vices of monied interests.
Everybody I know is happy with what Hetzner provides, even at production level. OTOH, "arguably better" DigitalOcean sent me a "Your physical host died, so we restarted it. If it persists, we'll migrate" e-mail, which just shows the reality of the hardware.
On your question, while I do not have services on Hetzner yet, I manage a lot of servers, so I know dynamics of a datacenter and what it entails to keep one up.
You're linking this everywhere, but it has absolutely zero relevance.
Your beef is not with Hetzner, but whoever decided to run the service. Unless the customer violates local legislation or the hosting providers ToS, the appropriate action is to leave the service running, be it AWS, GCP or Hetzner.
I would quite frankly have been very disappointed with them if they had done anything in response to you request.
There is no beef, just evidence that they do to run their service as professionally as other more established providers, which was the original argument and premise of the discussion.
Hetzner is German company and subject to German law. The website they were hosting did not have the (in Germany) mandatory legal notice (Impressum) or any contact details. This shifts the responsibility to the provider (Providerhaftung). Ignoring legal requirements is hardly professional.
Also I would like to note that I did neither request them to give me their customer's details nor to shut down the site. All I wanted was them to work with their customer to have the offending image removed.
Also I am convinced the porn image was not malice but an accident. The scraper replaced all profile images with ones they probably scraped from a forum. I was just unlucky to get a very indecent one.
Had Hetzner collaborated I'm pretty sure this could have been resolved in no time.
Your expectations of what you wanted from Hetzner has nothing to do with their professionalism. They most certainly acted with outmost professionalism given the situation you describe, and the behavior to be expected from any hosting provider.
I get your frustration in the situation, but even if it would have been helpful to you, it
would be extremely unprofessional for a hosting provider to invervene in the operations of its customers unless the customer violates the Terms of Service (an agreement you have no part in), a court order is made, or law enforcement makes a legally supported demand. Random legal notices sent by mail from strangers are not on this list, but could lead to Hetzner evaluating if a ToS violation is in effect that must be resolved.
If the customer is a business, it could be that they have breached the Impressum laws. It would have helped you if they had the impressum, but until legal action is taken it remains undecided if there is a violation, and if there was the consequence would be that the customer is liable for a written warning and in some cases a fine, as decided by the relevant authorities or a court of law.
I disagree. For one thing I think you misinterpret the legal situation. This is Germany, the provider is on the hook. Secondly, you do not have insight into the communication and I won't share it but I assure you their conduct was unprofessional.
Single machines die (and can't be started again for a few minutes to hours) every few months, but that's acceptable for me, and we also similar things happen at AWS.
I do. I just rent 2 computers from Hetzner. One is main another is failover. If main dies failover kicks in while main is restored on another computer. Still way way cheaper than AWS which I would not touch with wooden pole unless required by client.
They were hosting a StackOverflow copy, which is OK because of Creative Commons. All my answers were still under my name as it should be.
The only difference to the original was my profile picture, which was an explicit porn image.
For several weeks everyone searching for my name or my StackOverflow answers saw that. I'm glad that I was not looking for a job at the time.
I exhausted all possibilities on all channels to rectify this situation short of using a lawyer.
I put a lot of effort into getting things in order and seriously considered going the legal route but ultimately decided against it mainly because courts are hit and miss here when it comes to reputation damage of regular individuals as opposed to companies or celebrities.
EDIT: I should have answered your question how this is Hetzner's fault more directly. The website they were hosting did not have the (in Germany) mandatory legal notice (Impressum) or any contact details. This shifts the responsibility to the provider (Providerhaftung). Also I would like to note that I did neither request them to give me their customer's details nor to shut down the site. All I wanted was them to work with their customer to have the offending image removed.
Also I am convinced the porn image was not malice but an accident. The scraper replaced all profile images with ones they probably scraped from a forum. I was just unlucky to get a very indecent one. Had Hetzner collaborated I'm pretty sure this could have been resolved in no time.
Hi there, would you mind giving me the abuse ID for this case. (When someone creates an abuse report with us, our confirmation email includes an abuse ID in the subject line.) If you still have that, and you would like me to ask a colleague about this case, please let me know.
--Katie, Hetzner Online
To the best of my recollection I was never assigned or at least told one. I was not a customer so when my contact attempts were not ignored or answered with boilerplate, I was asked for my customer details, which I could not provide. No customer details, no support.
The channels to reach you were pretty limited and hard to find when I tried. I assure you, I tried everything short of getting a lawyer to send you paper mail.
I still have the communication history in my archives, but it would be a little effort to dig it out.
EDIT:
Found the documentation. My first complaints were in March 2011. At some point I got assigned an abuse ID MU-000B0F55-1:18. In May the issue was still unresolved.
Hi again, Looking on the date for that, we don't have data about that case simply because of data protection laws that require us to delete data after a certain time. Does the abuse still exist? If so, perhaps you can create a new ticket (and include the old abuse ID from 2011 so that they understand you tried to report this in the past. You can also include a link to this thread in hackernews and mention my name.) When you submit your abuse report, you will receive an automated response with a new abuse ID. You do not need to be a customer to submit an abuse report with us. https://abuse.hetzner.com/en?lang=en Unfortunately, I cannot submit an abuse report on your behalf. --Katie
Because they own the CDN and most of the bandwidth is from peering, so it essentially costs them nothing.
Netlify on the other hand has to pay per GB to AWS.
Netlify manages to be wildly overpriced even by AWS standards, CloudFront starts at about $85/TB, which isn't cheap by any means, but that turns into $550/TB(!!) if you go through Netlify. They have some of the most obscene bandwidth pricing in the industry by a huge margin, and to add insult to injury they don't allow you to set a spending limit either.
Both these issues can be resolved by adding some sample code to context to influence the LLM to do the desired thing.
As the op says, LLMs are going to be biased towards doing the "average" thing based on their training data. There's more old backend code on the internet than new backend code, and Tailwind is pretty dominant for frontend styling these days, so that's where the average lands.
Counterpoint: I also used to fix Lexmark printers as a field tech servicing pharmacies. It was routine to see Lexmark MS711dn printers with page counts in the millions. They did not need more than basic maintenance.
The other guy was probably working on ones that didn't get the basic maintenance. People always skimp on preventative care and then are surprised when things break.
When I worked in a computer lab 20ish years ago, being consistent about which side of the paper we loaded when we loaded paper made a huge difference. They are always stacked on the pallet the same way and had a little indicator on the flap of the wrapper around the ream that pointed down.
I'm always surprised when schools want people to donate reams of paper, instead of just ordering a pallet of paper, swapping between a bunch of different weights and qualities is going to cause more way more costs in repairs than just ordering paper by the pallet.
one of the main ones with the tray printers is dusty rollers . the rubber rollers that roll the paper out of the tray will get dirty and the paper will slip and cause jams or miss printing. of course theirs no error code for dirty rollers so the printer would say all kinds of shit because it would end up being a paper jam. we also used labels in the pharmacy and those would peel off and end up stuck all over the inside of the printer, good times haha.
Schools still want people to donate paper? My local school system got rid of most printers/copiers years ago and it takes administration approval to print something on the few that remain. My daughter is a senior and I don’t think she has brought home a piece of paper from school since 5th grade.
The grade schools around here don’t. It takes permission from a vice principal to print or copy anything. Mostly the printers/copiers are for administrative need only. All 2nd - 12th graders have school issued Chromebooks which go to and from school with them. Kindergarten and 1st grade have classroom issued Chromebooks which they use. All worksheets/workbooks are electronic.
Elimination of most printers and restrictions on the use of remaining ones was one of the cost saving measures put in place to offset the cost of issuing Chromebooks system wide. Others include getting rid of physical text books and elimination of most classroom computers. Classroom computers remain when needed for specific curriculum. For instance my daughter”s architectural drawing classes had computers for running Autocad and Revit.
Our office printer (6 years) has much fewer pages. It works fine for single-sided printing. For double-sided printing the first 20 or so pages work fine. After that nearly every back page will end up in a paper jam, always same position, no visible reason. Until the next day (or maybe a shorter wait is enough, haven't really tried). Very annoying...
After years of Python and TypeScript, I've started using Java as my default for everything. It's just so much more productive. The ancient developer memes that Java is slow and clunky don't apply anymore.
Postgres also had a long-held reputation for being slow and difficult, but it made incremental improvements for decades and now it's the default choice for databases.
I see Java in the exact same position, as the Postgres of languages.
The problem with Java since Java 8 has never been Java. It's been about the appalling ecosystem that infected it with reflection frameworks. It was bonkers that "POJO" was ever a thing that had to be defined.
It feels like these frameworks are now just falling away, which is great. I'm not even hearing about Spring anymore, and if there is any reason to not use it, it would be this cringe "how do you do fellow kids?" blurb I just saw on their front page:
> Level up your Java™ code
> With Spring Boot in your app, just a few lines of code is all you need to start building services like a boss.
I personally would reach for Go by default, but I have no ill-will to Java.
Spring boot is itself also very different than Spring, so depending on what was your last experience with these frameworks, you might be surprised.
Given, they are still quite reflection-heavy and full of POJOs and annotations, it supports compile-time resolution for many things now.
Also, you would be hard-pressed to find a more productive developer than a well-versed Spring boot guru for typical backend jobs. You might dislike the framework, but credit where it's due, it is a workhorse and the amount of time someone makes a POC, you can make it with spring properly, in a way that you can build your prod app on top. Like, it's easily as productive as RoR and similar.
Serious question - what could Spring Boot give me for POC/prototyping that Javalin or Micronaut couldn't? I really struggle to understand why most of Java shops out there have set themselves on the Boot path. Is it technology-based decision or politics?
I’m not familiar with either of those frameworks so can’t comment on them specifically, but 10+ years ago not using spring/boot entailed glueing together a lot of disparate libraries to do things spring boot had built in. Spring boot includes pretty much everything. Plus reliability, battle tested, easy to hire people with experience using it.
Spring Data can be ridiculously productive. It is definitely in the magic category, but you can just have an interface with methods named in a specific way, and then just call that from a controller class, and you have a REST API that calls into your DB for any of the usual CRUD queries immediately. And it's not even just a hack that works on the easy case, you can annotate it with complex hand-written SQL (both db-independent, but feel free to use native queries), and easily extend them with real implementations if you need more control.
I choose Spring Boot anytime I have to create a service, just for that reason.
The eco system is a huge force multiplier, and is constantly evolving. Spring Boot simplifies that a lot by simplifying the setup to the point where you often only have to add a single dependency, and everything is configured with default configurations (which you can change if necessary of course)
One example is the new Spring AI, where they have abstracted a lot of functionality and you can change providers (OpenAI, Mistral, AWS, Azure, Google) easily.
The ecosystem factor is real. I was looking at implementing the SCIM protocol [0] in our user management app, and if we were on Spring I could have just added an Apache boot-starter dependency and been done in a few days. However my company uses the Play framework and it’s going to take me weeks to implement it by hand.
If I ever found a startup I will mandate that we use Spring Boot (java/kotlin) until we grow big enough to afford the extra overhead with other frameworks. Spring Boot is truly a Get Stuff Done framework
It would be hard to convince some people of this, because "everyone knows Spring is enterprise". Unfortunately many only have experience with legacy companies, bad code or through reading old blog articles, and base their opinions on that.
It's actually something you need to have experienced yourself to recognize the possibilities.
It may sound strange, but I enjoy going through the long list of projects in the Spring web site. I almost always find something cool and is surprised at how much they can simplify complex functionality
The learning threshold is also relatively low, because they tend to use common best practices in the framework.
I’ve spoken about this before but choosingg Play and not Spring has been my companies biggest mistake. It has lead us down so many half documented custom solutions that would have just worked out of the box if we had chosen the more popular stack.
I like Kotlin, but the lack of checked exceptions really kills it for me. Exception safety is a bigger thing for me than null safety.
It‘s established patterns. Javelin or Micronaut are probably great, but not a lot of people understands how to build a real project with them. With Spring Boot you don’t even think about it.
I agree with the sentiment, but I'd move up to a version with type inference at least. I have nothing against static types and in fact in a vacuum I prefer them, but the particular brand of OO and "weak" generics that Java and C# have feels like filling forms in triplicate. "var" alleviates that significantly.
Any competent Java IDE automatically generates you a variable declaration from the expression you want to assign to it. It’s actually less keystrokes than having to type “var”. Unless you only use a simple editor that doesn’t perform static analysis, less typing is not a good excuse for using “var”.
Conversely, in Java you often use the diamond operator like in:
List<String> items = new ArrayList<>();
(Half of which, again, is code completion in your IDE.)
That doesn’t work with “var”. You’d have to write:
var items = new ArrayList<String>();
while losing the ability to constrain your variable to a narrower type.
The loss of directly seeing the type information in statements of the form
I've wrought my hands over this and eventually came to the conclusion that developers in every language that started with local type inference have embraced it. So I've mostly ignored my concerns and gone with "var for everything".
If you have trouble with a type then rename the function or variable (AKA your "foo" and "bar" example. The names are bad, fix them. Context matters, we have none here. No one has an editor that displays a single line of code at a time.). But in general we haven't had issues on our projects.
Beyond that, my IDE (Intellij) makes it easy to uncover the inferred type if I really need to be 100.00% sure what it is. In general I don't, because in general I don't care, and even before 'var' I was generally ignoring the type anyways.
I think there is a tasteful way to selectively use var where it makes sense.
Even in your example, narrowing the variable doesn't make much sense - you are in a local scope, you control everything. Narrowing is more meaningful in fields, where var won't work by design.
Locally a well-named variable is often significantly more important than some long, somewhat useless type signature, especially when the right hand side makes it clear.
.NET has true generics with full type information and struct type parameter monomorphization which works the same way generics do in Rust.
Edit: C# does have type inference for generics, just not the full HM one. It is also quite more capable for lambdas which is a bit frustrating because it does not resolve nested generics otherwise. I miss it - F# does it the way it always should have been.
There are many other differences small and big that arise from the way Java does generics and the fact that primitives can't participate - you will never see `IntStream` kind of workarounds in C#. Some libraries abuse and misuse generics for no profit (looking at you Azure SDK), but it's not as widespread. Shallow generic types are always inferred from arguments.
> you will never see `IntStream` kind of workarounds in C#.
You may not see that in Java in the future either. Java will have value objects from the Valhalla project, and part of the plan is to replace Integer with a value object. Then there will be less of a reason to use raw int primitives, because the JVM can treat value objects much more efficiently than normal objects.
The difference is that C# has been designed with proper generics since version 2 (pushed by F# research group with Don Syme) and is now on version 13. At the same time, structs have been present since version 1.
All APIs and collection types build on this foundation, with standard library leveraging generic monomorhpization for zero-cost abstractions. Code that would have needed C++ implementation in the past is naturally expressed in pure C#. Generics are fully integrated into the type system at IL level, avoiding special-cased types or bespoke compiler handling (besides monomorphization).
This enables numerous zero-cost features: tuples (unnamed/named), structs with controlled mutability and record structs, pattern matching, stack buffers that do not rely on escape analysis, structs with byref pointers for slice types (Span<T> and friends) which a good two thirds of the standard library accepts. Numeric and vector primitives are used in a simple way without setup requirements like Panama Vectors.
While project Valhalla will get Java's foot in the door in some domains, it will remain a less optimal choice than C#, C++, Rust, etc. Java's evolution primarily serves its ecosystem's needs, whereas C# benefits from being a newer language that learned from both Java and C++ and got influenced by F# and other research projects inside MS. This makes C# more idiomatic and terse. The historical drawbacks - platform lock-in, being closed-source, and having relatively weak compiler - have been resolved over the past ~9 years.
I find pretty much every ORM in any language is problematic. The best you can hope for is a certain amount of internal design consistency, so that even if you can't do what you want it's at least clear what you are doing.
The way you write this makes be think you rawdog'd Hibernate and Spring Framework. Don't do that... you will hate yourself.
Boot is something entirely different. You write very little code and get a ton done. The trade off is you are firmly now a "Boot" codebase, but once you learn how Boot works it's not a big deal.
I've had to maintain a couple Spring Boot apps and I absolutely cannot stand them: they pull in a whole pile of random dependencies and do weird things to your build with little explanation. Then, all the functionality involves a ton of classpath scanning and annotation-based DI that makes it hard to figure out how all the things fit together.
I mean, have you learnt the framework before attempting to do that?
Frameworks are frameworks, not libraries. You can't just start writing/understanding them - frameworks are different from libraries precisely because they call your code, not the reverse.
That's how all frameworks work though. This is not a criticism of Spring Boot. You are criticizing the use of a framework at all.
Some people hate to write the same basic things over and over. That's where a framework excels. Write only the glue/logic you need to make your app work.
The way you have described your experience with Spring Boot seems to imply you did not take the time to learn it at all, and therefore its' unsurprising to us you had a hard time of it.
Not writing the same thing over and over again is a feature of abstraction. A framework is a user-hostile way to abstract because it makes the source code opaque to developers. There's no reason why a library-based approach has to be more repetitive than frameworks.
Right, so you cobble together 48 different libraries, wrangle all of their configurations and stitch them all together yourself.
You do this 18 times because you have 18 different apps with similar requirements but deal with different data/endpoints/whatever.
On your 19th app you decide to standardize how you cobble together all of these libraries so that you don't have to start at ground zero every single time.
CRUD backends have well-understood requirements, in a way, a significant part of the work is done for you. You are there to customize certain parts only.
How else would you architect with this in mind? Given that literally every other framework is quite similar (RoR, PHP's solutions, etc).
There is another niche, the HTTP server libraries, but they are much more low level.
I was working with legacy code bases where the original Devs loved frameworks. Massive performance problems and nobody could understand how it all fit together at runtime.
Hibernate eventually got entirely nuked, Spring we couldn't entirely unwind easily; it had caused a whole bunch of crappy architectural issues and was too much effort to rewrite from scratch.
Although the code looked simpler using the frameworks and annotations, it was actually a huge rotten mess that didn't work well at all, with workarounds for all kinds of weird things in it.
Since I had the "joy" to use TypeORM (node.js stuff), I really value Hibernate, although there are some little corner cases I'd like to be better. But ORMs solve a really hard problem and I haven't seen anything better than Hibernate so far (and don't come up with JOOQ or MyBatis!).
14 years or less. Any version of Postgres before 9.0 was a nightmare to administer as a real production transactional dbms, at least the off the shelf version without a whole lot of tweaking without a (then very rare) pg expert.