ccanassa
This is a language/research project. I want to explore what a combination of a purely functional language and a very advanced compiler is capable of generating in terms of JS.
One novel idea (AFAIK) is adding a borrow checker. Other languages targeting the browser have added borrow checkers, but that's been driven by WASM. In Beni, lists are immutable, but instead of being implemented using tries, they use regular JS arrays with in-place mutations. The borrow checker guarantees that ownership isn't shared and that it's safe to update them. One concern I have is that this could cause DX issues due to borrow checker errors. I don't think that's going to be an issue given that the language is functional, but it's still an open question.
The "Platforms" concept is an idea I borrowed from Roc, which also inspired many of Beni's design decisions. In Beni, you can't call JS directly, just like in Elm. Platforms wrap the JS ecosystem in a safe way so that it can be consumed by Beni. There's currently no way to install third-party JS libraries. I believe the NPM ecosystem is broken: even small libraries pull in hundreds of indirect dependencies. With AI, new CVEs are being found every week, and keeping `npm audit` clean has become a daily struggle.
The irony is that updating dependencies to fix these mostly harmless CVEs just increases the risk of supply chain attacks. My idea for Beni is to make it "batteries included" so that people need fewer third-party dependencies. For everything else, I think the correct approach is to vendor the code you need.
https://github.com/entomorph/reverse-engineering
I started the project when ChatGPT 4 was first released, using it as a way to explore what LLMs could actually do. I also find working on it very relaxing, there is something cool about uncovering secrets hidden in code for more than twenty years.
In Django, you can change a single field in a model, and that update automatically cascades through to database migrations, validations, admin panels, and even user-facing forms in the HTML.
Django works perfectly with green threads. It’s a superior model to async and avoids the whole function-coloring mess. I’ve seen Django setups outperform Go-based services running under similar conditions.
JavaScript is a terrible language and should only be used when there’s absolutely no alternative, such as in browsers.
Python libraries are much more stable and reliable.
I’ve been building web apps since the ’90s, and I never understood the appeal of PHP. It was always a terrible language, and there were usually better alternatives available.
I’m not even talking about large codebases. It struggles to generate a valid ~400 LOC TypeScript file when that requires above-average type system knowledge. Try asking it to write a new-style decorator (added in 2023), and it mostly just hallucinates or falls back to the old syntax.
Given TypeScript’s popularity, it’s clear that developers really appreciate types. Honestly, the lack of types is what eventually drove me away from Clojure.
Moreover, our LAN parties had an unexpected benefit: we all became TCP/IP network experts. Each of us knew how to construct our cables.
"Any sufficiently large Flask project contains an ad hoc, informally-specified, bug-ridden, slow implementation of half of Django."
Just sticky with Django. It's stable, well-maintaned and includes most batteries out-of-the-box.
I can't recommend it. We found many bugs in the more advanced features of Celery (like Canvas) we also ran into some really weird issues like tasks getting duplicated for no reason [1].
The most concerning problem is that the project was abandoned. The original creator is not working on it anymore and all issues that we raised were ignored. We had to fork the project and apply our own fixes to it. This was 4 years ago so maybe things improved since them.
Celery is also extremely complex.
I would recommend https://dramatiq.io/ instead.
My first job was to write C code for industrial machines that replaced humans doing manual work. Sometimes I even had to go watch them work so I could fully understand what they were doing.
In my second job as a developer, I wrote a Django application that automated away a whole department in the company. I saw 100 people getting fired due to a script that I wrote.
That was all happening in the third world country were I came from. These were real people getting fired, with families that depend on them. Most of them were already in poverty even before being fired.
These artists complaining sound like a very 1st world problem to me. I doubt that anyone actually "lost a job" because of this technology so far.
I forked an open source reversed engineered implementation of that game some time ago, you can see it in here: https://github.com/canassa/betrayal-at-krondor
My hope was to get it working and eventualy update some of its graphics but I never had the time to properly work on it.
I made the mistake of picking Flask for a really big project when these microframeworks were a fad and everyone was dismissing the big ones like Django and RoR. That was a very costly mistake. I learned the hard way provides way so many things out-of-box that I always took for granted but I had to manually implement in Flask.
Take tests for example, Django automatically makes sure that any DB operation is cleaned by the end of the test. That's sometimes that I never gave a thought until our Flask tests started leaking everywhere. The way that Django handles that problem is very clever and we had to manually do it Flask.
- Python already includes the venv module, you don't need to install anything, just run `python -m venv <venv_dir>`
- You should manage multiple versions with pyenv instead of brew. Pyenv can be installed with brew.
I migrated the CI/CD of my company to Poetry some time ago, it worked fine for some time until we needed a feature that Poetry didn't support. I submitted a PR adding the feature to Poetry but their sole developer was apparently taking some time off and the project remained without any development for several months.
I migrated the CI/CD to use my own Poetry fork but it was very cumbersome, Poetry has a very weird build system so forking it is not simple.
At this point, I realized that I was just wasting time. There is nothing that Poetry does that the other (old and stable) tools don't do. Poetry was the result of me falling for the shiny toy syndrome.
- This forces me to research first, if I am dropping €500 on a new piece of woodworking equiment I want to make sure that's not going to be wasted.
- There is a better market for used expensive tools and they can sell for a even higher price than a new one (I am looking at you Festool Domino)
- I pet my expensive tools. The cheap stuff just get throw around and get lost.
- There is a argument about buying a cheap one first and then once it breaks you get a better one. That doesn't really work for me, several of these cheap tools can last for ages.
- Good tools requires less skill to use; they just do their job. With cheap tools you have to account not only your lack of skill but also deviations introduced by the tool.