HNHacker News
TopNewBestAskShowJobs

Defletter

779 karma · joined May 14, 2021

submissionscomments
Defletter··on Self-hosting your own media considered harmful according to YouTube
> Assault is a very old law with a lot of case law behind it (that is the answer to the who decides) that is very easy to understand

As too with hate speech, or rather, speech that is considered harmful to society. Blasphemy used to be amongst that list but we have since moved on from the state protecting the majority from religious affront to instead protecting vulnerable minorities from attack and dehumanisation. How hate speech in defined in law very much mirrors the definitions of harassment and assault (which you appear to have no issue with): it is not mere offence and intent is necessary.

> you have no such presumption

Don't I? Freeze peach purists tend to have very similar beliefs. Speak to one and you've effectively spoken to them all.

> Rhetoric doesn't kill people, people kill people

This seems rather incongruous with your earlier quote of how words can incite violence. It's also an extremely American phrase used there to dismiss calls for gun control. I have yet to see an instance where adding proverbial fuel to a flame successfully tames it.

> Have you considered allowing the speech and punishing those who act violently because of their supposed hurt feelings?

Who precisely are you talking about here? Don't hide behind implication, name them.

> as long as we can counter them by rational argument and keep them in check by public opinion

It's interesting that you would quote this because I very much agree: for as long as rational argument is able to counter intolerance, that's all we need, and anything further is not just unnecessary but detrimental. But when rational argument becomes ineffective, as we've seen, then rational argument cannot be solely relied upon. In an age of misinformation and disinformation, the notion of 'just add more speech, that'll solve everything' is not only exceptionally naive but demonstrably ignorant. One need only look at America to see what being the freeze peachiest country gets you. The UK and the rest of Europe have speech restrictions like hate-speech laws because we have intimate knowledge of the devastation of unrestrained hate. Hate cannot be reliably restrained by speech. You may find a case here and there, but it cannot stop a mob.

---

If I may make a comparison here, the murder of the CEO of United Healthcare has seemingly opened many people's eyes to society's tolerance of state-sanction death through delays, denials, and deposals, compared to society's extreme horror at a rich person getting gunned down. And yes, them being rich matters: I'm reminded of the sheer difference in effort there was between finding the doomed Titan submersible and finding the lost workers from the Francis Scott Key Bridge collision and collapse. Notice also Mangione's perp walk: you don't get that kind of display when the gunned-down victim is poor.

What I'm getting at here is that many people in society turn a blind eye to the death and misery caused by the system. He's not able to afford his medicine and died? He should've picked a better healthcare package or changed providers. The system is given infinite grace. But when [allegedly] Mangione shot that CEO, the notion that there may have been any justification for it is out of the question. He is infinitely wrong. It was odd watching news coverage of the shooting and how they tip-toed around trying to talk about this, compared to the typical US brazenness with every other topic.

This is circling back to your "punishing those who act violently because of their supposed hurt feelings?" comment. I have my suspicions on who you're referring to, and I'm probably right, but I very much feel like you're doing what I described above, here. It's giving "milkshakes are cement".

Defletter··on Self-hosting your own media considered harmful according to YouTube
This kind of purist ideology is fine in a perfect world, but the reality is that peaceful co-existence requires intolerance of intolerance. And let's be honest here, you do agree with limiting speech: you just mentioned speech being used as "harassment" and "assault". Would you mind explaining how speech could be harassment and assault and who would decide that? And I'm presuming that you're okay with libel and slander being decided in a Court of Law and enforceable through other institutions of State?

We're not really discussing here whether limiting speech is okay, we're both already doing it. No, it's about where we draw the line. It's just where I put the line also protects vulnerable people from extremely dangerous rhetoric that kills people.

Defletter··on Self-hosting your own media considered harmful according to YouTube
I think the problem comes from an unconscious belief that the Constitution is self-executing, thus is something that can be taken for granted because it'll always be there protecting them. That they can elect someone like Trump and it's fine because he's confined by the Constitution. Ultimately, the Constitution and its amendments are just words on paper: their worth comes from the People's demand, substantiated with an implied threat of revolution, that those words be obeyed. When your society acquiesces to the tyranny of partisanship within your institutions, particularly within the Supreme Court and it's self-proclaimed right to amend the Constitution at will, your Constitution only continues to exist through inertia. Elect someone like Trump who has no regard for the law unless it's useful to him, and that inertia slows. To quote Danielle Allen: "I have seen time and again people who just stop reading at that period after 'pursuit of happiness'." (https://www.youtube.com/watch?v=AqiFMiQeXNQ)
Defletter··on Self-hosting your own media considered harmful according to YouTube
Not to be glib, but yes, that's what Public Order Offences are. Society and law exists so that we can co-exist, and people going out of their way to be offensive and provocative by, say, setting things on fire in a public space and saying hateful things... yeah, that's eminently antisocial. If you want to frame this as criminality coming from mere knowledge, you can do that, but you're obscuring context... you're literally doing the thing. Cringe.
Defletter··on Self-hosting your own media considered harmful according to YouTube
You say that like it's not already de-facto true.
Defletter··on Self-hosting your own media considered harmful according to YouTube
This tendency to obscure context is unfortunately pretty common within discussions about freedom of speech (or the lack thereof) within the UK. I would just like to point out that if your points were so evident, you wouldn't need to remove context to make them.

You may it sound like Coskun threw a Quran into his fireplace and the police kicked his door down and arrested him. You're leaving out that he travelled across the country to burn it outside Turkish consulate in London. The idea that this is "reintroducing blasphemy laws but only for Islam" is you merely repeating punditry.

Likewise, people "being arrested for silently praying around abortion clinics" is because they're violating the protective zone around abortion clinics. You can pray all you want but just a little bit over there. You have the entire country to pray for the unborn. Your rights are not being unduly abridged because there's a few 150 meter zones where doing so is considered violating the dignity of others, if not harassing them while they're vulnerable. But of course, this context can be stripped to make a point.

Defletter··on Self-hosting your own media considered harmful according to YouTube
How can someone be so confident but also so wrong?

---

EDIT: Let's remind ourselves of where FEDERAL freedom of speech comes from. Firstly, of course, is the First Amendment:

> Congress shall make no law respecting an establishment of religion, or prohibiting the free exercise thereof; or abridging the freedom of speech, or of the press; or the right of the people peaceably to assemble, and to petition the Government for a redress of grievances.

You may notice that it doesn't say "free speech is for citizens", but rather that there is a negative-right against Congress from legislating to restrict speech. But what about the President, or the judiciary, or the States? Well, Gitlow v. New York established the following:

> Assumed, for the purposes of the case, that freedom of speech and of the press are among the personal rights and liberties protected by the due process clause of the Fourteenth Amendment from impairment by the States.

- https://supreme.justia.com/cases/federal/us/268/652/

Judges need to get better at this: it NEVER is just for that case. And so the case set a precedent that the 14th Amendment's due process clause contains within itself a more powerful version of the First Amendment. Now let's remind ourselves of what the due process clause says (with the equal protect clause for good measure):

> nor shall any State deprive any person of life, liberty, or property, without due process of law; nor deny to any person within its jurisdiction the equal protection of the laws.

Now, to quote the notorious RBG:

> Nor shall any State deprive any person, not any citizen. And the choice [in] the word 'person' was quite deliberate. And similarly, nor deny to any person within its jurisdiction the equal protection of the laws. So, the United States constitution surely recognises the fundamental human rights of all persons.

- https://www.youtube.com/watch?v=pYR414Q8v6A&t=3925s

- https://www.youtube.com/watch?v=pYR414Q8v6A&t=3712s (timestamp for the question she's responding to)

Now, reasonable people can disagree on whether the due process clause should be so expansive, indeed I find the US's tendency to amend the Constitution via Supreme Court precedent to be deeply troubling, but even under a textualist reading of the First Amendment, the idea that Freedom of Speech in America is limited to citizens is deeply, deeply ignorant.

Defletter··on AI didn't kill Stack Overflow
> The steep drop post-AI is different and reflects the ability of LLMs to answer a large fraction of the sort of questions people would ask.

Yup, the fact that ChatGPT can give me answers instantly, without dismissing or XY'ing me, "why would you ever want to do that?", "why don't you just do <thing you've already mentioned you tried>", or "just google it", has almost completely removed my need for StackOverflow.

Defletter··on Learning C3
C3 looks promising, but any language that supports nulls needs null-restricted types, not whatever those contract comments are. If I wanted to have to null-check everything, or YOLO it, I would just write Java... and even Java is seeking to fix this: https://openjdk.org/jeps/8303099
Defletter··on Data breach exposes 184M passwords, likely captured by malware
I think what they're saying is that someone could pretend to be a researcher and ask for passwords to confirm that they match what was found in some fictional breached data.
Defletter··on What’s new in Swift 6.2
Many of the languages/platforms/libraries that I used (eg: Bun) do not provide any kind of named-constant for this reason: just type 1003. But the value of named constants is that you can attach documentation to them.

To clarify something I said earlier, I would rather have to stop what I'm doing to look at documentation (something that can be done within the IDE) than have to open up a browser and read through the specification to figure out what some magic-value means. Having a provided named-constant that tells me what 1003 means is very useful for me and for other maintainers or contributors to the project, and it can link to the spec for more information anyway. Just having raw magic-values is not great for maintenance. Likewise, having pretty names entirely detached from the actual close-code makes searching for places where that close-code is used much harder. Even just "1003_REFUSE" or "1003_CANNOT_ACCEPT" is so much better.

Defletter··on What’s new in Swift 6.2
> Just use semantic names like `HTTPStatus.NotFound` and you wouldn't have a problem in the first place.

Have to disagree there: when I tried re-implementing a basic websocket server in multiple languages (https://news.ycombinator.com/item?id=43800784), I found it so frustrating when they'd insist on hiding the raw close-codes behind pretty names, because it meant having to stop what I was doing to jump into the documentation to figure out what pretty name they gave a particular close code.

All I wanted was to return 1003 (https://datatracker.ietf.org/doc/html/rfc6455#section-7.4.1) if the websocket sent a string message, but:

- Dart calls this "unsupportedData" (https://api.dart.dev/stable/latest/dart-io/WebSocketStatus/u...)

- Java-Websocket calls this "REFUSE" (https://javadoc.io/doc/org.java-websocket/Java-WebSocket/lat...)

- Ktor calls this "CANNOT_ACCEPT" (https://api.ktor.io/ktor-shared/ktor-websockets/io.ktor.webs...)

And some others:

- .NET calls this "InvalidMessageType" (https://learn.microsoft.com/en-us/dotnet/api/system.net.webs...)

- libwebsockets calls this "LWS_CLOSE_STATUS_UNACCEPTABLE_OPCODE" (https://libwebsockets.org/lws-api-doc-main/html/group__wsclo...)

Just... why? Just call the thing 1003 and link to the spec.

Defletter··on CLion Is Now Free for Non-Commercial Use
> The Community Editions are more limited, but don't restrict commercial use.

I've always wondered about this. I have the All-Products Pack subscription, don't get me wrong, but I used to have the Educational licence when I was in university. What was there to stop me from using it for commercial purposes? I get that the licence restrictions are likely more targeted towards medium to large businesses than little ol' me, but to what extent is it just an honour system? Just don't commit your .idea/ folder and basically no one would have any the wiser?

Defletter··on Converting a Git repo from tabs to spaces (2016)
I've been firmly pro-spaces ever since I discovered there was an everlasting war over this, and it came about primarily over documentation. Say you're writing documentation within a /***/ block, so each line is prefixed by three characters. Now say your documentation includes a code snippet. Or lets say that particular sections of the documentation (such as JavaDoc's @see) are indented so each line always starts after the @see. You end up with documentation indented with spaces because it's the only way to ensure consistency. And if you're doing it with your documentation... why not your code too?

However, my conviction has since been tested by Dart which opinionatedly forces you to use two-space indentation. There's no way to disable this and its IDE plugins enforce the style. I just find it so difficult to read, even with Rainbow Brackets. I yearn for Dart to use tabs just so I can configure the tabs to appear as four-space indentation. Or better yet, stop trying to coerce how people write their own code.

Defletter··on Deno's Decline
Really liked Deno, particularly its support of url imports. As primarily a Java developer having to deal with Maven dependencies, I cannot stress enough how refreshing it was to just say "the dependency is right there, go get it".

The problem came when I noticed how Deno was being steered towards SaaS. For example, Deno KV, which uses SQLite internally, became available with v1.33 (https://deno.com/blog/v1.33#built-in-kv-database). But actual SQLite support did not come until v2.2 (https://deno.com/blog/v2.2#support-for-nodesqlite) nearly two years later... and it's a node api!

The fact that Deno is lagging behind Node so it can shepherd people towards a first-party alternative that they just so happen to offer premium services for is... well, it didn't bode well.

I've since abandoned Deno for Bun, which has meant giving up url imports, but Bun always feels so fresh. It gave me first-party SQLite support, not an abstraction around SQLite that they hint hint, nudge nudge me towards paying for. That said, I have felt a little uneasy about Bun since its v1.2 release (https://bun.sh/blog/bun-v1.2).

Defletter··on Programming in D: Tutorial and Reference
How so, if I may ask?
Defletter··on Programming in D: Tutorial and Reference
Might seem silly, but the choice just came from looking at (https://code.dlang.org/search?q=websockets) and seeing that serverino is the only one maintained. vibe-d isn't listed there, I only learned about that later. Basically, serverino has good SEO.
Defletter··on Programming in D: Tutorial and Reference
Oh the issue isn't with serverino itself but with the lack of tooling-support for the language features that serverino makes heavy use of. And while serverino is open source, so one can ultimately view its source code, not having access to modern IDE type inspection adds a lot of unnecessary friction.
Defletter··on Programming in D: Tutorial and Reference
Sure, but everything seems to point users towards using the compiler, not the package manager. For example:

- The tour guide first recommends dmd (https://tour.dlang.org/tour/en/welcome/run-d-program-locally), though it does mention dub at the bottom

- Clicking "Documentation -> Command-line Reference" takes you to dmd, with only the barest mention of dub

- Even this post, the "Programming in D" book, tells you to use dmd and doesn't mention dub at all.

Defletter··on Programming in D: Tutorial and Reference
Kotlin too
Defletter··on Programming in D: Tutorial and Reference
It's a tossup between Dart and Bun: Dart has better language features but Bun has better APIs. Since Bun is first and foremost a Javascript runtime, it inherits its annoyances and issues, like the complete lack of pattern matching, or switch expressions at all, or decent enums, etc. That said, Bun includes SQLite support and encryption out of the box, whereas Dart is heavily compartmentalised (https://pub.dev/publishers/dart.dev/packages). Imagine if, in Bun, importing "node:crypto" meant needing a "node:crypto" npm dependency. Dart ekes out the win though, I think.
Defletter··on Programming in D: Tutorial and Reference
Really wanted to like Dlang but I just did not have a good time with it.

One of my projects has a really simple server written in nodejs that's basically (in terms of complexity) just an auth'd chatroom, and I wanted to switch it from using raw tcp sockets to websockets. And since the server is so simple, why not refactor it to another language and see if there's no some performance gains from that? I ended up doing something pretty similar to that "Comparing 10 programming languages. I built the same app in all of them." video from Tom Delalande (https://www.youtube.com/watch?v=-MbTj8DGOP0). I had several working versions of the server in:

- Bun, using Bun APIs (https://bun.sh/docs/api/websockets)

- Dart, using Dart APIs (https://api.dart.dev/stable/latest/dart-io/WebSocket-class.h...)

- Java, using Java-WebSocket (https://github.com/TooTallNate/Java-WebSocket)

- Kotlin, using Ktor (https://start.ktor.io/p/ktor-websockets)

- Rust, using tokio-tungstenite (https://docs.rs/tokio-tungstenite/latest/tokio_tungstenite/i...)

- Zig, using websocket.zig (https://zigistry.dev/packages/karlseguin/websocket.zig/)

- D, using serverino (https://code.dlang.org/packages/serverino)

And Dlang was, by far, the worst experience out of the lot. Firstly is the lack of adequate, comprehensive, and centralised tooling. I almost gave up when dmd could not even compile a freshly init'd project. The impression I got is that you're not really meant to use dmd directly, you're meant to use dub, like how you compile Java projects with Maven/Gradle, not javac. Except that there's also apparently three competing compilers (https://wiki.dlang.org/Compilers)? And good luck remembering the names of the tooling because they're all some random three-letter combination.

Serverino makes heavy use of mixins and attributes (think Java annotations), which is not ideal. But what really killed the deal was (despite using the recommended intellij plugin (https://wiki.dlang.org/IDEs) with the recommended tools installed and setup) not being able to inspect[1] serverino's mixin or its attributes. So I look at serverino's source code, except its source also has mixins... which I can't inspect. I'm not going to use something when I cannot easily ascertain its control flow. And while, yes, I probably should have gone with vibe-d (https://code.dlang.org/packages/vibe-d%3Ahttp) in the first place, mixins and attributes are nonetheless part of the language and the tooling should be able to tell me about them.

- [1] When I say "inspect" I mean requesting the IDE to show me the source/definition so I can see what it is, what it does, and where it's known to be used.

Defletter··on Jellyfin as a Spotify alternative
Stopped using Jellyfin after it played ear-splitting screeches directly into my eardrums. It was a song from an exported iTunes library, I knew iTunes would skip over the song and didn't know why, nor was I particularly bothered. I have to assume now that the file was corrupted, and Jellyfin uncritically played it anyway. I knew I had a few other songs like that in the library and stopped using it for fear for my ears, my headphones, and my speakers.
Defletter··on Simple Web Server
Seems like most of the people in these comments have missed the point, as while I also lament the use of Electron, pasting one-liner scripts does not obviate the usefulness of this project. Clearly the point of this project is not just about setting up a simple webserver, but to provide a quick and easy gui to configure that webserver, and there's a fair amount that it allows you to configure. Your one-liner that does nothing but pipe static files as a response is not that. If that's all you need, great, then this project is not for you and that's okay.
Defletter··on Show HN: USL - A Universal Scripting Language That Outputs to 111 Languages
Heh, many languages have this inverse correlation between language features and the quality of their standard library. Zig for example has amazing language features, I wish that I could inline "orelse" or inline "catch" in Java, but I can't, and yet spinning up a cross-platform and asynchronous tcp server is infinitely easier in Java than in Zig. In fact, the more accurate correlation might be that the more annoying it is to write in a language, the more likely it is to have a thriving ecosystem, eg: Rust, Go, Javascript.
Defletter··on Zoom bias: The social costs of having a 'tinny' sound during video conferences
While that may very well be true, I'd be willing to bet that these effects are much more pronounced (and rightly so) with people who hotmic / don't use push-to-talk. As while this can be mitigated some with diligent muting by the host (or whoever), or with a raise-hand-to-talk system, it's still completely lacking in consideration for others, whereas tinny audio is something that sometimes cannot be helped.
Defletter··on German parliament votes as a Git contribution graph
> They even used PRs for actual changes proposed by the parties in the parliament. Also, the commits have their proper date, so you can `git blame` on the laws and even see which president signed-off that change.

This is something I'm very interested in for a different use case: model legislatures. The infrastructure and tooling for model congresses and parliaments is very limited: largely relegated to wikis and Google Docs. And that's fine, but it becomes a problem long term with tracking and archival.

We had a situation where our model parliament did not own the Google Doc for a particular treaty with another model legislature. It was changed out from under us, which is not ideal. But that brings into question ownership of Google Docs, and what happens if that person withdraws from the game.

Another issue is respecting and maintaining the creativity of those who play. People put a lot of effort into their bills with the fonts, formatting, layout, and imagery they use. It would be a shame to erase all that effort by converting it a bland wall of text a la markdown.

Markdown also has its issues: if the legislature removes an entry of an ordered list, how do you prevent markdown from renumbering the list? And the ways around this involve extending markdown, or using plaintext (eg: https://www.apache.org/licenses/LICENSE-2.0.txt)

Another solution could be QuillJS (https://quilljs.com/), which serialises into a JSON array of Deltas. However, this would make any kind of git-diff difficult to read. You'd need a custom differ, which is not impossible, but that may be a lot of work and may not be supported on git sites like Github.

Another issue is that, if you're using commits-as-enactments, then that probably means using the commit message (or notes) for the enactment's text. To what extent is that supported? As in, how long can commit messages be before it starts wreaking havoc on git clients? Will my Github tab or GitKraken client crash if I view the commit history? Could the commit message itself contain a serialised QuillJS document? What if that document contained a base64-encoded image?

Defletter··on Rust Additions for GCC 15 Bring Support for If-Let Statements
This is honestly a pretty perfect example of why criticising programming languages can be so frustrating: people are completely unwilling to meet you where you're at. You're response here is to say that of course while-let does that, because that's what while-let does, that's how while-let looks. I'm not being critical of Rust having pattern matching as the while-loop condition, but of how this is expressed in code, specifically with how it looks exactly like an ordinary variable definition, but doesn't at all function like one, and how that can be confusing to a non-zero amount of people. That's the extent of my complaint. I'm ganna go now.
Defletter··on Rust Additions for GCC 15 Bring Support for If-Let Statements
> you're not thinking in patterns

It's not that... well, it might be, but I use pattern matching fairly regularly in a number of languages. But Rust has hijacked the variable syntax and changed it beyond recognition: there's no matching operator being used; the same code does different things based on its surroundings:

    // This causes a compilation error
    let Some(work) = inbox.pop()
    
    // But putting it 1:1 within a while statement is fine?
    while let Some(work) = inbox.pop() { /* ... */ }
    
Whereas, with Java's pattern matching:

    while (inbox.poll() instanceof final Work work) { /* ... */ }
It borrows the variable declaration syntax too, which can be extracted fine without issue, but there's an operator being used to express that pattern matching is happening.

Different languages have different uses, histories, and quirks, yes, and this is by no means to suggest that Java is a better language or that it doesn't have its own flaws. But Rust coopting of that syntax makes the language harder to learn and harder to comprehend at a glance, in my opinion. It seems to be like one of those situations where, once you learn it, it's fine, but that's my point.

Defletter··on Rust Additions for GCC 15 Bring Support for If-Let Statements
It's certainly cleaner, but my immediate thought when reading was "that's a compile error" because it looks like it's declaring a variable with a type mismatch. This is where, in other languages, the "case" keyword (or similar) comes in handy (eg: Dart's if-case syntax[1]), except Rust doesn't have that because of its headlong pursuit of 'conciseness'.

- [1] https://github.com/dart-lang/language/issues/2181

← PreviousPage 9 of 14Next →