reminder that the bcrypt hash function ignores input above a certain length! so if you do bcrypt(username || password) for some reason, a sufficiently long username will make it accept any password. to fix this you can sha256 the input first.
dating apps are uniquely ill-suited to finding love because there's usually a huge gap between these laundry lists of what people think they want vs. who they will actually fall for. the apps let you plug in all your incorrect criteria & select away anyone who could surprise you
Is there any way to tell Amazon Music that I don't want their streaming service but I like to buy music? The interface doesn't half make it difficult. You literally can't just search for a song or album and buy it.
@Teejip@lemire Hate to say it but that makes sense. The big problem with copilot is you don't understand what it's produced, but nobody ever understands pom files anyway.
@EricRichards22 The curse of Java is the IDE. 25% of Java code is auto-generated by Eclipse/JetBrains and developers think that's OK because it's always been that way.
Boilerplate imports, accessors, and unnecessary dozens of sort-of-but-not nested packages are the cause and the result.
This is what I allude to as hiding the complexity behind a graphical interface.
Adding a graphical user interface over something complicated and over-engineered does not make it simple and efficient.
You can have a great graphical experience while working in Go, C# or Rust. And if the build does not work, you can debug it quickly.
Java first came out with a suite of tools that was ahead of its time. You could package your software, document it, and so forth. Over time, some of the very best environments were built to serve the Java ecosystem. But it turned into a curse.
Yesterday, I'm setting up a simple benchmark for my blog post using JMH. Sounds like child's play, right? Wrong. What followed was an epic saga of build system wizardry. I spent 10x more time on the build setup than on the code. Look at the screenshot, pay attention to the necessary `<arg>-processor</arg>`? Want to build and run...
mvn clean install && java -jar target/benchmarks.jar
Why the arcane ritual? Gradle came along, promising a new dawn. But alas, it seems just as complicated.
Let us compare with C#/.NET. We find the same XML... but I can hand edit these files with relative ease (except for the silly hash codes). And once you got it working, you can just do...
dotnet build
dotnet test
dotnet format
dotnet run
Adding a dependency?
dotnet add package
You know what the equivalent is in Go? Want to write a benchmark? Write the code. No config file. No dependency. Just 'go test -bench .'.
I'm no novice. I can write my own CMake build files for C++, I've setup Cargo for Rust, programmed in Python, JavaScript. Ocaml. It always seems simpler, faster, better. Yes, even Python seems better despite all the complaints.
Basically, almost everyone spent a whole lot of effort simplifying the builds so that it is easy, reproducible, understandable, debuggable.
You should not need hundreds of lines of XML code to build a project unless it is a massive project, like your own Web browser or operating system.
But Java? It stands alone. Instead of simplifying the build, it sought to hide it under graphical interfaces. So, when you need to peek under the hood, Java's build systems feel like a labyrinth designed by a mad architect. It's not the autoconf/automake nightmare, but in this age of instant build setup, Java's build ecosystem feels like a relic, a monument to complexity overthrown by the very simplicity it once championed.
Maven and gradle are good at failing with mysterious error messages that only a C++ compiler can surpass.
@lemire Java had some good tooling, but Maven is and always was disastrously bad. Ant was bad, but perhaps fixable; Maven with everything done by undocumented plugins is just fundamentally broken. As you say, Gradle fixes the obvious problem (XML) but is equally broken in every other way
@esrtweet@adrianratnapala Another description of that workload is "office desktop".
My wife runs a business with about 10 employees. Her "girlfriend pc" / office desktop is a Raspberry Pi 5. Actually two of them, home and office. I wasn't totally confident but she loves them.
The junior dev asked the senior dev “why are you pushing this code with no abstraction? What if you want to change it in the future?”
The senior dev responded “then I will change it in the future”
In that moment the junior dev was enlightened