36 karma · joined July 24, 2024
This phenomenon terrifies me greatly - how large organisations can be ignorant of the basics of their purpose. I believe it is one and the same mechanism of collective incompetence, which can affect both a media company, a school, or a government. It's as if the humanity, under any system, were bound to create inhospitable conditions for one another.
I understand we're talking about CPU in case of Python and memory for Java and Go. While anxious overprovisioning of memory is understandable, doing the same for CPU probably means lack of understanding of the difference between CPU limits and CPU requests.
Since I've been out of DevOps for a few years, is there ever a reason not to give each container the ability to spike up to 100% of 1 core? Scheduling of mass container startup should be a solved problem by now.
Meanwhile the client is telling me is virtually impossible to find frontend devs willing to write HTML.
1. Programmer A creates a class because they need to do create an entry point, a callback, an interface... basically anything since everything requires a class. Result: we have an class.
2. Programmer B sees a class and carelessly adds instance variables, turning the whole thing mutable. Result: we have an imperative ball of mud.
3. Another programmer adds implementation inheritance for code reuse (because instance variables made factoring out common code into a function impossible without refactoring to turn instance variables from step 2 into arguments). Result: we have an imperative ball of mud and a nightmare of arbitrary dynamic dispatch.
At some point reference cycles arise and grandchild objects hold references to their grandparents in order to produce... some flat dictionary later sent over the wire.
4. As more work is done over that bit of code, the situation only worsens. Refactoring is costly and tedious, so it doesn’t happen. Misery continues until code is removed, typically because it tends to accumulate inefficiencies around itself, forcing a rewrite.
> A forest or wetland is a carbon sink only in the growth phase. In a long-term equilibrium, it's carbon-neutral, like biofuels.
Highlight: *In a long-term equilibrium*. The comment literally talks about long time periods...
> A forest or wetland is a carbon sink only in the growth phase. In a long-term equilibrium, it's carbon-neutral, like biofuels.
To which I'm stating that forests and wetlands are not carbon-neutral but carbon-negative.
Then you miss the parent comment's context and start in an inflammatory way:
> Bwahaha, this is so ridiculous.
And take it somewhere else (move the goalpost) - from whether forests are carbon neutral or not to how effective charcoal creation is at carbon capture, in our human timescale.
Meanwhile the only practical point wrt. charcoal creation from forests was:
> Humans could actually cut down old trees, dry them, and convert them to charcoal later used for soil enrichment.
Which doesn't propose an effective carbon capture solution. At most it's something like emission reduction - the key phrase is old trees. And soil enrichment.
Recommendation: don't argue against points people didn't make.
The result of subtraction is a difference. In my mind this is the most basic way to compare things. Subtraction of differing units is illegal.
The result of division is a quotient (day to day we say ratio). Division of different units is legal but not always practical.
As for using lumber for timber, when eventually disposed it would have to be turned into charcoal rather than burned for energy or let decompose in conditions that don't sequester carbon.
You also missed the point about using charcoal for soil enrichment.
Forests sequester carbon through forest fires producing charcoal. Humans could actually cut down old trees, dry them, and convert them to charcoal later used for soil enrichment.
Wetlands capture carbon by incorporating wood from dead trees in anoxic conditions.
> When plant productivity exceeds decomposition, net soil carbon accumulation occurs. This process eventually leads to the formation of deep peat deposits, which can accumulate for thousands of years.
https://link.springer.com/article/10.1007/s44246-024-00135-y (first search result for wetland carbon sink)
Hooligan-like countercultures are also excluded as far as "think" or "independently" goes for an obvious reason.
Thus, the only independent thinkers I've encountered are individuals who don't aim to have all the answers, who can accept disagreements, who attempt to know themselves - but those are individuals, not countercultures.
I'm erring on saying that countercultures were never about independent thinking. They were about fitting in with different people.
Location: London, UK
Remote: Yes
Willing to relocate: Maybe
Technologies: Python (mostly Flask/FastAPI+SQLAlchemy, browser automation), Postgres, Clojure, FP, frontend (JS/cljs, React/re-frame), DevOps (Terraform, Kubernetes), Linux (erhm, GNU/systemd/Linux), some Rust/C/C++/Go
Résumé/CV: https://drive.google.com/file/d/1dKFmLj3ILK7n7GcnlyS2WcybiPWg1uia/view
Email: jobs2025.extent293@passinbox.com
Website: https://karolinepauls.com/
Experienced (mostly) backend developer, with 12 years on the record. Wearer of the DevOps hat when needed. Eager to share skills and learn. Willing to expand to adjacent domains.I am able to work with minimal resources and deal with inherited problems. I aim to produce solutions of minimal size and complexity. If possible, I try to solve classes of problems to avoid dealing with problems one by one.
Currently a contractor with a short notice. Recent projects involved an LLM content generation pipeline and stabilisation of a reporting system.
Your software will still be a mess but a mess you can work with. Not a horror beyond comprehension. We should aim for workable mess.
This is from experience working with both procedural/functional mess and OO mess.
Asyncio in Python is a poor feature that splits the language's ecosystem into 2 mutually-incompatible worlds, something Python only gets away with because it's too big to fail.
Meanwhile we've had Gevent for decades now. It gives us async that you can forget you have. Because rather than making code async, it makes the VM async.
Gevent could have been merged into CPython, but they chose explicit "structured concurrency" and the rest is history. History of sometimes moving forward and sometimes straying from the path and getting lost.
And lost Python's asyncio is. PDB, which lots of other debuggers base on, is still broken (cannot use await). The ecosystem? IPython uses asyncio internally so it cannot easily be embedded in a working async program. The only embeddable REPL I was able to find is this: https://github.com/prompt-toolkit/ptpython/blob/master/examp...... actually, it looks like someone is working on adding `await` support to PDB now, years after asyncio's first release.
Overall, lots of churn to get something (maybe) as good as Gevent, which we had in Python 2.7, or even before.
If a similar amount of effort was spent on first-class support for code hot-reloading and live program inspection, we would get a massive boost of productivity. But somehow even otherwise bright people choose to reimplement working solutions into something objectively worse, meanwhile our development/debugging loop still emulates loading punchcards into mainframes.
Personally I've used the (ugly) Python contextvars for:
- SQS message ID in to allow extending message visibility in any place in the code
- scoped logging context in logstruct (structlog killer in development :D)
I no longer remember what I used Clojure dynvars for, probably something dumb.
That being said, I don't believe that "active" objects like DB connection/session/transaction are good candidates for a context var value. Programmers need to learn to push side effects up the stack instead. Flask-SQLAlchemy is not correct here.
Even Flask's request object being context-scoped is a bad thing since it is usually not a problem to do all the dispatching in the view.