skysight-inc/HackerNews huggingface dataset:
I'm a chronic framework/language jumper who recently switched some projects to dotnet in production, but without a previous Microsoft-flavored background. I often read hn comments to figure out what I'm missing and what to look out for here. I'm sure this thread will be searched for by people like me in the future.

In that spirit, here's my take.

Pros:

* Best performance of any language without memory management. This is true on Linux, and its memory footprint isn't bad either - especially with AoT.

* Best standard library with great docs covering 90% of what you want in most modern apps.

* Development tooling that is just awesome with rider. Easily navigate and understand the source code of imported libs.

* A reasonable syntax that doesn't make weird decisions because of deep dogma. It beats Go, for me, for instance, because it uses exceptions, generics, and LINQ. This makes the code readable and reasonable to write. I know this is controversial.

* Ridiculously simple deployment. No Redis - jobs and cache are practical in-process. Due to its performance, I don't even front it with nginx. Upload a binary on a fresh VM, supervisor and go. A tiny shell script.

Cons:

* Its object-oriented design. The way files are organized in Go makes a ton more sense and doesn't feel as heavyweight. Also, the addition of records instead of real, validatable value types was a huge missed opportunity.

* Went heavily into async/await - indeed, it was the pioneer. Thread-per-connection, co/goroutines, or green threads are actually better models for most projects. I understand the issue with overhead. But the weird call stacks, and footguns inherent are definitely not worth it.

* Compile time sucks. This is the biggest for me. Having a subsecond reload time is essential to a pleasant code flow for me. Hot reloading has too many holes to be practical and this seems like a blindspot. No one seems to mind but golang, node, and python are all much better here.

My background: I wrote some successful SaaS web apps in Django and transitioned some to dotnet for maintainability. I'd previously used C# also as a game developer with Unity. But I bounce around a lot of tech.

I'm in a unique situation as a solo project dev with a long time horizon. I can care about longevity, speed, and ease uniquely. I don't have to worry about employment opportunity of a stack, for example.

Right now, I'm trying to decide between TypeScript/node and continuing with dotnet for my next project's backend.

The backend I wrote in dotnet remains my most stable. It's beautifully simple to manage in production. If only they could make hot reload not feel so bad.
Python is not fundamentally any easier to use or to learn than something like Haskell or Clojure or Racket or Scheme (I'd argue the contrary) though. It's only true in practice out of sociohistorical accident, because your colleagues can show you how to use it to do things, because their colleagues once showed them.
But you're still doing the work. With React, you render in the client. With HTMX, you split rendering between client and server.
The big question that went unanswered... who cares? We've all heard the old trickle down rubbish before.
China rarely if ever bets on one horse. This is one of the reasons the west struggles to understand why China isn't collapsing. It's not Soviet style command economy with a single organisational structure in control over one sector. China even has multiple competing state-owned investment banks, and in most fields they have competing both state owned and private companies (note: I'm not assuming there aren't cases where this competition is heavily rigged or biased; the point is not to imply it is a free market, but that it is not the Soviet model).

With respect to Huawei, if Huawei goes, Huawei goes, and little else changes other than that the government might need to prop up some of their supply chain.

China might find itself struggling to gain full independence on the top end, but they have a range of separately operating foundry companies (SMIC, YMTC, Wingtech, Hua Hong), chip production equipment Manufacturers (Maura, JCET), and a multitude of chip design companies. China can afford a number of these - and Huawei - to fail and still have other bets.

I agree with you that the overall "project" is their Manhattan project in a sense, but that does not mean all, or even many, of the companies need to survive - they'll let individual ones fail if they don't feel like they're pulling their weight, and instead fund new/other options.

In other words: This might be "necessary" for Huawei, because Huawei wants to survive. But it's not necessary for China for Huawei to survive. Ironically that might be part of the reason for the pressure - they know there's no guarantee they'd be bailed out.
I'm not part of this scene and I'm not a collector, so I my dispassionate perspective is that at some point the cost of quality insurance is greater than the benefit. For a very important issue of a very important magazine, of course, keep it around. For a less important one, maybe retaining 95% of the data at 5% of the cost is good enough.
If your definition of "wrong" is merely "what the law currently says", California has released a patch update to your moral code.
I think it was the first language to specifically introduce the async and await keywords, but it wasn't even the first language on the .NET platform to support the programming model - that honor goes to F#. See https://tomasp.net/academic/papers/async/async.pdf
If NPR only represents a fraction of our nation’s viewpoints, they are not living up to their namesake of national public radio. If they wanted to call themselves progressive public radio I’d take no issue.
SQLite, plain localStorage in the browser, the file system for desktop apps, …?
If you build for the host architecture you can completely disable ifunc without losing anything. In Gentoo it is common to build with -march=native, and disabling ifunc is as simple as setting -multiarch in glibc's USE flags. I've seen no negative impact from it.
If you’re going to compile a language to JS, why pick TypeScript?

The Fable compiler for F# barely adds any cost on top of what TS adds in terms of dependencies, compilation and tooling and IMO gives you a much better language for developing applications. And you still get to use the JS ecosystem.

Most of the cost is related to familiarity with both F# and JS, node and the browser.

But once you match on a pipeline of Results you can never go back!
> By cultivating a bird-friendly environment, we not only nurture local populations but also cultivate a deeper awareness of our interconnectedness with the natural world.

When I was young, I had a friend tell me she was going birding, and I thought, "Why? This seems like a gigantic waste of time. They have books with photos of all the birds. And the photos are better than anything we could take on our own. Plus there are no mosquito bites with the books. No Lyme Disease with the books. etc. etc."

Fast forward a few decades and birding is a source of meditation and happiness for me.
> Wasn't c# the first to introduce the async() concept

The first google hit for this is https://dev.to/maxarshinov/a-brief-history-of-asyncawait-264...

> Despite that C# was the first mainstream language that popularised the async/await keywords, it wasn’t the language that invented the concept. F# added asynchronous workflows with await points in version 2.0 in 2007 (5 years before C#).

Which is exactly my point about c# mainstreaming and popularising concepts that already exist, even if they exist in less-known or less polished versions.

See also the usual reference: https://en.wikipedia.org/wiki/Async/await
Certainly, here's another telltale sign the content was generated by an LLM. I hope this helps you!
Same story very well filmed:

> Parts of the series are loosely inspired by the Scampia feud (the series was shot in the Vele di Scampia) and its main actors: Gennaro Savastano is modeled on Cosimo Di Lauro, while his father Pietro Savastano is based on the life of Paolo Di Lauro.

https://en.wikipedia.org/wiki/Gomorrah_(TV_series)

Book six years before this VF piece:

https://en.wikipedia.org/wiki/Gomorrah_(book)
Minimal Kotlin and Nix flake example (with Gradle 8 support)
Curious - there is one unnoticed comment on the thread that reminds me of my experience:

> I feel the opposite. Was trying some number crunching, ok net doesnt have an fft.

> What about digital filters... well... lacking

> Displaying scientic graphs, like matplotlib. Nope, there might be a commercial package, but I didnt get a budget.

As someone trying to develop numerical “enterprise” applications in the most boring, maintainable and longevous stack as possible, am I to write and maintain my own foreign function interfaces?
That’s sad and frustrating that we’ve come to this point. I posted a web service I’d done and someone questioned that. I was told “you have to have a pop up - it’s not legal to run a site without that!” (Paraphrasing). I despair of what we’ve turned the web in to.
My wife was annoyed at not having released a game for almost a year and she set a hard deadline with the smallest game idea she could think of. It became fun when the game became playable and if we had to do it again, we'd focus on getting to that stage much earlier. The game was finished before the deadline, so we even had time to polish, balance the game mechanics against each other and add a touch interface for the Android release that never happened, but made it into the source code DLC anyway. Previously, we had spent way too much time switching back and forth between Unreal Engine and Godot, not being able to decide or finish anything. Kicking each other's behind to finally get it done also helped a lot.
I mean you can always use the dotnet CLI if you want
> Every implementation will have some basic structure.

Setting aside functional vs OO paradigms, even if you have a simple helper function like:

def removeprefix(s, prefix):
if s.startswith(prefix):
return s[len(prefix):]
return s

do you write tests for it? Or do you write tests for the higher level routines which call it? I think most write tests for the function.

If you write tests for the function then you hinder future refactoring from removeprefix(s, prefix) to s.removeprefix(prefix) once you switch to a Python which implements s.removeprefix (3.9, I think?)

For example, in red-green-refactor TDD, you are not supposed to change the tests when you refactor.

What you've ended up with are tests for the specific structure, and not the general goals.

> If you don't test, or test the overall system, it takes much longer.

Good thing neither I nor the linked-to author makes either of those arguments.

> it is far more common in my experience to have stuff that isn't covered at all by tests

Which is why I use coverage-based method to identify what need more tests. Coverage is a powerful tool, and easily misused.

> If your biggest problem is that you have to delete some tests that you made obsolete, that's perfectly ok.

The biggest problem is that you decide to not refactor because there are so many tests to delete, and you have to figure out if the failing test really is okay to delete (because it was implementation specific) vs. one that needs to be updated (eg, because it handles a regression case).

> Those types of tests are not unit tests

Correct! And no one said they were.

> At work I'm faced with a ...

That's fine. You do you.
I mean it's great compared to... javascript?
Thread checker.
Moscow is the same time zone as Israel.
That's an extremely narrow view. Federal copyright law is Federal jurisdiction. States have the power to make their own non-conflicting copyright laws.
Whenever this comes up, my thought (admittedly from an outsider perspective) is that people can say that .NET is far ahead in the same way some may say that Oracle is far ahead: Both are enterprise focused technologies that were built using a sales-driven design, trying to check as many feature boxes as possible to help sales teams in their pitches. The problem is when you've been to too many sales pitches and start to equate box-checking with product quality.
> It’s inconceivable that I’ve would have found the first stage and just given up

But what you were looking at might not be the first stage.

You might be looking at the modified Makefile. You might be looking at the object files generated during the build. You might be looking at the build logs. You might be investigating a linking failure. The reason for so many layers of obfuscation, is that the attacker had no idea at which layer the good guys would start looking; at each point, they tried to hide in the noise of the corresponding build system step.

In the end, this was caught not at the build steps, but at the runtime injection steps; in a bit of poetic justice, all this obfuscation work caused so much slowdown that the obfuscation itself made it more visible. As tvtropes would say, this was a "Revealing Cover-Up" (https://tvtropes.org/pmwiki/pmwiki.php/Main/RevealingCoverup) (warning: tvtropes can be addictive)
Identity is a red herring. Backdoors are intentional vulnerabilities and are discoverable through vulnerability analysis.

You can't solve identity, and real, verified people can still betray you. Even trustworthy people can betray you, either unwillingly or unwittingly.

You can't solve vulnerability analysis either (it's the halting problem), but you also can't shirk it. You might as well go all in on it rather than undermining the basis of open source collaboration and many eyes making bugs shallow.

But it certainly is a wake up call of some kind.
Apple's New iPhone Ad: 'Don't Let Me Go'
Visual Studio has build in snippets for boilerplate stuff, so you can type class[tab], ctor[tab], prop[tab] to inject a class contrutor or property into you code. Other IDEs will have similar.

Built in ones are here https://learn.microsoft.com/en-us/visualstudio/ide/visual-cs...

If you want to apply a coding style, there are lots of free tools for that even, or you could investigate something like ReSharper from jetbrains.

https://learn.microsoft.com/en-us/visualstudio/ide/code-styl...
React is the closest to just letting me write code in a real programming language, making HTML/CSS/Web stuff a detail. At first glance, HTMX and Svelte are unappealing, because they put these web concepts on a pedestal.
Miles ahead in what race?

Honestly cannot think of any application that I would willingly choose .NET for.
I know people who love .NET but they seem to all work for large corporations, no one in startups or doing anything I find interesting seem to use it.

Maybe I have missed something?
Don't worry Svelte 5 will "rune" that feeling and pull you back into the React world.
The potential for puns is infinite. INFINITE!
Thank you for this article! Great showcase of how simple it is to set up webapps these days.

I use a very similar process, and have found this to be a godsend in making it even quicker:
https://github.com/lucaslorentz/caddy-docker-proxy

It handles the routing to multiple dockerized projects on one server, by scanning docker compose files for labels and automatically setting up the required caddy configuration.
Yeah; its usefulness is at least partially diminished by the fact that like 95% of entries are basically vandalism.
No different to why any car is able to drive 50km/h above the national speed limit.
It's a collective action problem. To get good news you need a pay a lot, or have a lot of people pay.
Also:

- Jellyfin. self hosted media streaming AKA "selfhosted Netflix"

- Moonlight. Stream games from PC to TV/laptop/phone. AKA "selfhosted stadia"

- HomeAssistant
That makes sense then.

How are heat pumps typically installed? Are they integrated into the radiator/hot water system? Or is some sort of forced air system setup installed?

I'd assume a mini split setup wouldn't be too uncommon. (Probably the cheapest route for most homes in the UK).

In the US the vast majority of homes and apartments are setup with forced air heating and cooling which really simplifies transition. I'd assume the UKs setup where everyone uses heated water to heat homes would make transition more expensive and costly.
> C and starting from the ground up with just a text editor and a compiler was quite eye opening.

yes, yes it is. Its fine for teaching, but my word when you're dropped into a large project with no context, it really really sucks. especially if someone is doing "clever" stuff (I'm looking at you research engineer writing "optimised" c++)

I was dropped into a Unity VR project with a C++ plugin than called out to a fancy backend. Unity is a bit of a arse to use because so many information is locked in videos.(thank fuck for LLMs) Everything being c# turned out to be really rather good. Especially if you have a working intellitune.

Dropping out to c++ on the back end was utterly frustrating. cryptic errors, random stack traces, lots of tears. All of that can get into the sea.
Guess we need to separate the local union members from the national organization.

This is a labor focused web site talking about labor issues. Not run by any one particular union, it isn't a union controlled web site that is trying to pump a particular message.

It is an article about labor, where the factory, local union, and national union organization, all had some part to play. So this article is covering all of those issues, not trying to be all 'super pro union'.
You think it's that bad? Usually when I search a definition it makes sense in the context that caused me to search for the definition.
Not only this, but accepting a donation is not an obligation to preserve something for an endless period of time.
For that sort of range hydrogen electric is also starting to look viable
> How can Pegasus and NSO still be allowed to exist?

Because the entities that have the power to outlaw them are their biggest customers.
I guess this was specified in a time when nobody thought it would one day be possible to embed an SVG document in an HTML DOM and add animations and interactivity in a performant way there.

ninja edit:
It's also from a time when W3C started to lose focus and authority.

It's amazing that SVG was so successful despite this mess and also the confusion potential of CSS in SVG.

Browsers ignore scripts in external SVG images. Don't know if that is for security reasons (JS sandbox unreliable) or because a full isolated JS context per image would be to expensive...
This entire thread just drips of venomous, manipulative and toxic scheming. Regardless of your intended outcomes, your methods and attitudes are atrocious.

This explains the research that shows why far left world improver types often have above average levels of dark triad personality types in their ranks.

My suggestion is: "Clean your room" - i. e. get rid of resentment and the desire to control others and rather fix your own life and use that as the starting point for being the change you want to see ripple out into the world.
The counter-argument would be that game code includes valuable IP including frameworks, models, and so on, some of which might still be in use in other games.

Software is inherently fragile and dependent on surrounding technology. Buy a hammer, get a hammer. Buy (rent) software, you get something that only works on a specific combination of hardware and OS, perhaps only with certain libraries, packages, and other extras installed.

So even with open code the game will still stop being supported on new platforms, probably quite quickly.
Is it the EU? A lot of people feel that the particular action of Ubisoft of shutting down their online service and thus making their game unplayable should violate some EU law, but I can't find anyone actually pointing to a particular law.

If the law ever changes you may have a better chance. Or such games will not be published in the first place.
From that article, "To further investigate, we can try to see if he worked on weekends or weekdays: was this a hobbyist or was he paid to do this? The most common working days for Jia were Tue (86), Wed (85), Thu (89), and Fri (79)." That makes it more likely this work was done during working hours; someone doing things outside of work hours would be more likely to produce the same amount (or more) on weekends and holidays.
I'd say the common view has changed decades ago. Public opinion regarding equal employment is pretty much the same in Japan and the US.

> Another arguably problematic thing I think I know about Japan (I hope I'm wrong in this as well) is their work culture strongly discourages switching jobs.

It's not uncommon to see people switch jobs. I think public perception on that topic has changed too in the past few decades. But one thing worth noting is that as you mentioned, Japanese workers have stronger legal protections compared to the US. It's more difficult to fire someone in Japan, so people are incentivized to keep their current jobs.

> Their salary is a pure function of how long did they work in the same company

I believe this fell out of favor, but not in a good way. The move away from seniority-based wage is often used as euphemism for pay cuts. Another case of corporations not being your friends thing.

> nobody wants to hire old people because it's almost impossible to fire them

This unfortunately is a problem, at least for jobs with decent pay I think? Unless you're rich, of course.
It always was expensive. Most people couldn't buy them, and if they had them, they'd pass them on for generations.

The difference is that today people don't think their grandkids will want to take decades old furniture in old style. They will probably live very far anyway and things change fast. Expectations and lifestyles are just different now.
If you want to link a high profile example, GitHub doesn't have one: https://github.blog/2020-12-17-no-cookie-for-you/
My grand parents had a lot of dishes/furniture/photos/books that they saved for us to inherit. For a while, we tried to let them know we weren't interested and we encouraged them to sell it or donate it, but they either couldn't part with it or wanted us to have it.

We realized the best solution was just to express thanks and gratefulness to them and then just give/sell to a junk disposal/reseller guy after they passed.
> You’ll need to provide strong regulations on the new type of Cyber Insurance to prevent that

It is ironic that this comes right after talking about healthcare. Strong regulation won't fix it, being able to opt out and move to other systems will fix it. The best insurance comes from community groups where people literally just come together to pool risk. There only needs to be enough legal protection that one member can't run off with the money.
You're 100% right except maybe about Python. Probably the biggest reason it is used is because it actually has a REPL. You can play around easily and do things like Jupyter notebooks. That's completely unimportant for most programming but it's very useful in scientific research.

Python's REPL isn't even any good, but it does at least exist which is more than you can say for most languages.

(And there's also the fact that it's crazy popular.)
Come on, aren't you the "guest language" guy?
You're going to definitely need a schema, so you want a SQL database, which leaves SQLite and Postgres. The only difference between the two is one requires a server. If that's too inconvenient, SQLite is a solid choice.
From reading the linked article it seems that they are continuously painting but it’s not really end-to-end then restart. It’s more of an ongoing maintenance as-needed, at least based on the description on that website.

Now that effectively might mean then combing over the bridge end-to-end and painting as needed so what I said might be a distinction without a difference.
20 something years ago, LILO was default on many distros and you had a choice. Not sure how grub took over.
Yeah, it has too many things. Working in mature C# codebases is like wading through a swamp, so many abstractions with long and obscure names that makes holding a mental model of the system in your head twice as hard as TS.