• 1 Post
  • 32 Comments
Joined 1 year ago
cake
Cake day: June 20th, 2023

help-circle

  • The kind of farming that makes any money isn’t slow work.

    It is, however, tangible work with tangible results. Unlike spending months changing the polarity of nanoscopic silicon structure for the non-appreciation of an utterly clueless salesperson whose braindead ideas will have left the world in a worse state than you found it despite anyone’s best efforts.

    I should seriously get into woodworking. Kidding. Sorta.


  • I think that is the most controversial take I have read in my entire life.

    What good has Microsoft done for Mojang/Minecraft? They kneecapped development by splitting the codebase and tying most features to their ability to run on mobile hardware, slowed development to an absolute crawl to increase long-term revenue (these motherfuckers openly develop three new features for minecon every year, then delete two of those for no reason other than “we can”), turned the console/mobile versions into garbage microtransaction boxes, started policing private speech in private servers hosted on private hardware, turned the mod-supporting version of the game into a second-class citizen, basically made for-profit private servers illegal, etc.

    Minecraft was a great game that stood on its own merit when Microsoft bought it. Everything they did only brought it down, and the few good features the game has gained since then were long overdue and done despite Microsoft’s meddling.


  • Who is going to keep them accountable? Trees have a record high abstention rate, and if these representatives are elected by humans that’s just proportional voting with veneer on top.

    Democracy is about balancing levers, and that’s why there is more than one branch of government. Special interest groups do have power, and so does the judiciary (who may sue the government for unlawful cutting down of trees) and the executive (who may have power to declare certain government-owned land to be Protected).

    The real ecologist move would be to write a duty to protect the environment into the constitution, so that the judiciary can strike down any law that does anything to the contrary.



  • Hahaha that’s what frontend devs think, but the backend requirements are just as vague: “Just make this button work”. In my example all the requirements would actually be figured out bit by bit over months, nevermind the prescience required to foresee future architecture-breaking features or scaling requirements. At least you can make a mockup and get instant feedback, flawed as it is.

    On either side it takes experienced engineers to suss out actual requirements from customers/PMs. The main difference is that the backend (especially on the infra/devops side) is only accountable to itself if everything goes well, but ironically that means no-one knows or cares about the amount of engineering that goes into keeping PMs blissfully ignorant of the risks and complexity.


  • I love shitting on Fullstack devs as much as the next guy. However, sometimes it really just does make sense for an (often internal) product maintained by a one-person team, and it doesn’t have to mean that the organization doesn’t value them. I’ve seen it happen.

    However I would not recommend it as a career path because it’s essentially impossible to tell what you’re getting into when you get hired. Could be what I just described, could be that you inherit the full responsibility for a 20 year-old perl+php5+xhtml+angularJS mess.
    I think it can only truly make sense if you work independently and get to build projects to your own quality standards, assuming you manage to find a “scope is small enough that specialization doesn’t make sense” niche. This is very hard which is why in practice “full stack” tends to mean “master of none but good enough to get a product out the door cheaply”.


  • Real back-end requirements: when x, y goes in (in JSON-as-an-XML-CDATA-block because historical reasons), I want you to output x+y+z+æ+the proof to P=NP.

    æ will require you yo compile x+y in CSV, email it to Jenny, who will email back the answer. She doesn’t quite know how to export excel sheets though so you’d better build a robust validator. No, we don’t know what æ is supposed to look like, Rob from Frontend knows but he’s on vacation for the next 8 months.

    The request must be processed under 100 ms as the frontend team won’t be able to prioritize asynchronous loading for another 10 sprints and we don’t want the webpage to freeze.

    And why does your API return a 400 when I send a picture of my feet? Please fix urgently, these errors are polluting my monitoring dashboard and we have KPIs on monitoring alerts.


  • COL is not anywhere near $50k/y ($4100/mo!) except maaaybe in some very narrow parts (basically just SV an Manhattan, assuming you want a decently large apartment). But in either of those places an engineer makes up for it by making $150k/y instead.

    Also rich Americans have good insurance, I’m sure you could find an example of someone who had this happen but it’s basically a non-risk.

    And if healthcare was the only problem, then Canada would be an option as well. Engineers there still make a shitload more than German engineers. Watch out for the real estate market tho.


  • Even then it’s a pay cut. I know some people who moved to NA, and egotistically it’s a sound decision because engineers there are on the right side of the wealth disparity ravine. Money’s good enough that you don’t need social safety nets. And if push comes to shove, someone making $100k/y can definitely afford health insurance and the occasional trip for medical tourism.

    Now personally I believe in income redistribution so I’m happy to pay a lot of taxes in one of the most income-egalitarian countries in the world. But I’d make a shit-ton more if I lived&worked in Luxembourg or Canada.




  • You mean npm duplicates even if the the two dependency versions are compatible?

    By default yes, unless you explicity use the “peer dependency” system which isn’t the default. The “default” naive implementation is for every package in your node_modules to have a node_modules of its own, all the way down recursively. There are tricks nowdays to deduplicate packages with the exact same version, but not to automatically detect “compatible” versions and use those instead (in my experience nothing would work if that was the case, deleting package-lock.json causes way too many issues due to the… uh, let’s call it “brave” approach of JS devs to stability).

    That couldn’t be, right? Otherwise, if you installed two packages that rely on different incompatible versions of another package, one of the two would break

    Correct. This is intended behavior which is solved in several ways:

    1. Correctly declaring your dependencies. If newer versions of a dependency break your package, disallow them, but that is not normally needed for minor version changes.
    2. Focus on quality. Semver exists for a reason, and 1.2.3 should not break something built against 1.1.2. JS and NPM’s cascade of stupid implementations bred a culture of “move fast and break things”, but that’s not the norm in any other commonly used ecosystem
    3. Linux distros almost exclusively use curated repositories, so they are (mostly) internally consistent and incompatibilities are rare and quickly fixed. A good package manager will resolve dependencies and automatically detect incompatibilities, proposing several fixes (typically abort the upgrade or uninstall one of the problematic packages)
    4. Not breaking down packages into a constellation of smaller packages. glibc6 is glibc6, not glibc_string (1.2.3) + glibc_memory (2.6.5) + glibc_fs (1.5.3) + glibc_stdio (1.9.2) + glibc_threads (6.1.0) + …
      Internally glibc6 is a bunch of modules, but they get bundled into one package specifically to simplify dependency management.

    Not being able to install two versions of the same package sounds restrictive, but it’s a HUGE security benefit: glibc6 (1.2.3) is vulnerable to CVE-2024-1, then updating to glibc6 (1.2.4) secures your entire system at once. With NPM though, you have to either wait for every. single. dependency on that vulnerable package down your tree to recursively update, or patch those versions yourself (at your own risk because again, small version changes often break things since developers think that NPM’s dependency model means they don’t have to actually provide stability guarantees).




    1. Like Python, have a large and featureful standard library such that > 80% of NPM packages are redundant. Other languages allow you to make very large projects with only a few tens of dependencies. JavaScript requires THOUSANDS.
    2. With this in place, stop with the recursive dependencies, immediately and forever. Every other package manager under the sun installs the dependencies next to each other.

    I’d say pip is saner, though not by much as its support for private registries is very bad and seems designed to facilitate supply-chain attacks. I’ve heard a lot of good things about cargo but haven’t used it enough myself to have a strong opinion.


  • It’s already a thing with near-zero delay. MS Teams does it (dunno about the translation) and the QSMP Minecraft server has a bunch of livestreamers from different countries who use it for realtime translation.

    [EDIT: Live demo from today. Shit’s impressive.]

    What actually happens is that the current sentence gets “corrected” several times as you keep speaking. It’s a bit jittery and if the word order differs significantly then the translated sentence might be a bit wonky for a few seconds, and there are a few misses but overall it works really well; at least well enough that people who don’t speak each others’ language can have a conversation in their native tongues with essentially no more delay than reading speed. I can easily follow a livestream in a foreign language with the live subtitles (which was not the case a mere 6 months ago for any language other than English).


  • US-defaultism has a catch: it sometimes accidentally extends to the Commonwealth. You won’t run into most of the internationalization quirks if all you’re comparing is “British English vs American English”.
    [Sidebar: I notice this also when English speakers online assume that their audience at least has a vague idea of what Imperial units are, but while that is true of most native English speakers in the northern hemisphere who use feet and miles colloquially, for ESL audiences it’s almost always incorrect]

    I switched from AZERTY to US QWERTY permanently specifically to avoid all the issues of badly internationalized software. Bad default bindings (e.g. common vim operations like { requiring the use of AltGr), but also things like games not working at all or only partially (e.g. the number row being either unbindable, or key hints naively showing as “&” and “é” instead of “1” and “2”). Surprisingly few devs understand the difference between key codes and characters, and lots of indie games straight up don’t even internationalize and require switching layouts (good luck if there is an in-game chat).
    After getting into mechanical keyboards, the ANSI US keyboard layout has been useful as well because these are quite common. ISO mechanical keyboards are rarer, and Belgian AZERTY keycaps are borderline nonexistent.

    Also in practice I use the qwerty-fr layout which is the US layout with a French layer on AltGr. The kicker? It’s better at writing French than the French AZERTY which is missing a lot of letters (Ç, æ, œ, À, …). AZERTY is a terrible layout but that’s a separate discussion.

    Of course the Americans should develop properly internationalized software, but I personally know several fellow Belgians who switched to QWERTY for (some of) the reasons outlined above.


  • The title of the post is literally “I love my Gitea”.

    The content of them meme does conflate “git” with its various frontends (like gitea), but it’s an incredibly common misnomer so who cares?

    The person I responded to then went on a weird rant about how “git by itself is distributed” which is completely irrelevant to the point since OP’s Gitea provides a whole lot more.


  • You’re completely missing the point. Even Gitea (much simpler than GitHub, nevermind GitLab) is much more than a git backend. It’s viewable in a browser, renders markdown, has integrated CI functionality, and so on.

    Even for my meager self-host use-case, being able to view markdown docs in the browser is useful from time to time, even on my phone.

    As for the things I use (a self-hosted) GitLab instance at work for… that doesn’t even scratch the surface.