HNHacker News
TopNewBestAskShowJobs

gue5t

1,698 karma · joined January 24, 2011

Sick of browser bloat. Fuck javascript; moreover, fuck the web. Startups and capitalism are antithetical to playful hacking and moral, sustainable self-conduct.

I pirate everything.

submissionscomments
gue5t··on Amazon threatens to suspend Signal's AWS account over censorship circumvention
Hardly reasonable. Domains are (in reality, if not in legislative fantasy) property of ICANN and merely rented by everyone else.
gue5t··on A look at terminal emulators, part 2
I would put good money on the first one, based on experience with GTK development and my guesses about the way Vim uses GTK (presumably, they don't do anything different across GTK2/GTK3 that they don't have to).
gue5t··on Jolla is the last company with an 'alternative' mobile operating system
In case you were asking how it might be a problem, look at some of its effects on the status quo:

Forced obsolescence, pervasive spyware/security problems, being locked into an "app" ecosystem, user-hostile antifeatures, lack of modifiability to deal with hardware degradation over time, etc.

gue5t··on Jolla is the last company with an 'alternative' mobile operating system
Companies providing operating systems is a clear conflict of interest. Evidence: the tragic state of the entire mobile ecosystem, where no hardware can be fully utilized by (or even make calls with) an open-source OS.

This article also fails to mention Tizen. Has it been abandoned? It was absolutely terrible (millions upon millions of lines of the worst C code I've ever perused) but I thought it still existed, making vaguely similar claims to open-sourcehood as SailfishOS.

The real mobile OS to watch and advocate for is postmarketOS, which attempts to get mainline Linux kernels working on phones.

gue5t··on Unauthenticated flag flipping yields remote code execution
In short, ambient authority strikes again. Environment variables were a terrible design mistake in UNIX.
gue5t··on Cryptographic Right Answers
The document misspells "haveged" as "havaged". :)
gue5t··on MesaLink: A memory-safe and OpenSSL-compatible TLS library
If you're already using Rust, you should use Rustls directly and jump on the opportunity to avoid having the absolutely fucking insane OpenSSL API in your stack at all.

Ideally such a misdesigned API would not exist at all. Library interfaces should be engineered to prevent mistakes. Here are a handful of the problems I've run into recently when dealing with legacy OpenSSL code (legacy being the reason it uses OpenSSL, not the reason it was bad):

Some error codes are `int`s, other are `long`s. Different error codes need to be passed to different stringification functions, and these have different allocation and string-loading semantics. Why on earth do I have to manually load error strings in the first place? I don't pass a string-table handle into the stringification, so I don't even get context isolation (multiple instances of OpenSSL in one thread have conflicts)!

The entire BIO framework is insanely overcomplicated and could be stripped down to a minimal buffer-based encryption API (c.f. the BSD libtls API).

Then you have API like `SSL_CTX_set_verify` which simply ignores irrelevant flags rather than returning an error about them. This is terrible.

Nobody should use OpenSSL for new projects.

gue5t··on Sl: a mirror version of ls
This code is incorrect: it has a a race condition that can cause it to use the wrong maximum width in its listing.
gue5t··on Tim Berners-Lee on the future of the web: 'The system is failing'
Which aspects of HTTP strike you as particularly elegant or well-designed?
gue5t··on Opinions on functional programming and OCaml
This rebuttal isn't very good.

The lack of canonical names for parameters to data constructors is usually addressed by convention, and can present real problems for reading unfamiliar codebases. There are solutions, but this is a legitimate complaint and saying "OO also has some nameless things" doesn't help. A more helpful response would point at lenses and tools for jumping to datatype definitions, where fields' purposes should be documented.

Functional "mutation" tracking is subsumed by dataflow tracking, which is necessary in every programming language. The rebuttal is basically right here.

Partial application is occasionally useful, but in languages where it isn't built-in, it's easy to wrap multi-argument functions in closures to curry them by hand. The comparison to overloading is based on visual similarity but has no real relevance to potential difficulty in understanding the meaning of curried function calls.

The notes on higher-order function calls and state-passing are okay, but it would be nice to note the ways state-passing can be avoided even in pure code in many functional languages.

Lack of methods is a real annoyance, not because the syntax is important, but because methods enable type-dependent dispatch. The right response here is to point at typeclasses and traits, which are how ad-hoc polymorphism is usually done in functional programming languages. In Rust, for example, traits provide methods with the same syntax as "OO" classes.

Cons-/linked lists are O(n) access and there are many situations where avoiding significant slowdowns involves roundabout code transformations or "reverse; process; reverse" nonsense. Both random-access mutable containers and immutable functional ones are useful and there are applications where the constant slodown factor due to indirection (often more so than the logarithmic factor) associated with pure data structures is prohibitive.

Poo-pooing early return rather than pointing at tools in functional languages (do-notation) for writing similiarly expressive code is ignorant at best, and disingenuous at worst.

The problem of H-M error messages bringing up two parts of a program and saying they conflict, rather than pointing at one part of the program and saying it's a mistake, is a well-known drawback. There other points in the design space of type inference and typechecking that may better align with what programmers expect for assigning "blame" to type errors.

gue5t··on Opinions on functional programming and OCaml
The pop culture of software engineering is tragic. Legitimate complaints about ergonomics and performance (linked lists are bad) are mixed here with pitiable ignorance (the problem with higher-order functions is... passing functions by name rather than making the inner application explicit? which is addressed by... eta-abstracting them, while not explicitly applying the resulting closure?). The author confuses partial application for partial evaluation, when the actual complaint seems to be about functions being curried by default: https://en.wikipedia.org/wiki/Currying#Contrast_with_partial...

There are legitimate complaints about the annoyances of threading state through pure functions, but these have been made much more cogently by other sources within the "functional programming" community: Haskell has no end of blog posts about the utility of do-notation to provide the appearance of mutability while leaving state-manipulation implementable in pure, easily-unit-tested code, and early return can also be captured with monadic notation.

The naïve rejoinder to this approach is "why use a pure language if you're just going to emulate mutation?". The answer is that it lets you reuse the pure computations that transform state in other parts of your code without having to create dummy mutable objects for them to modify, and you have guarantees that unrelated state is not perturbed; this enables purely local reasoning which keeps code easy to understand.

Presumably this is to be considered worthwhile reading because the author has a job at Facebook. It's shameful that we implicitly support the cult of corporation-worship that assumes companies wielding great social power also confer supernatural programming skill or insight on their employees (by powers of selection or mere post-hoc association).

gue5t··on Funding Yourself as a Free Software Developer
Google Books is not public: https://www.newyorker.com/business/currency/what-ever-happen...
gue5t··on C++17 – The Complete Guide
This page appears to be a product advertisement, not a resource in of itself.
gue5t··on Firefox is on a slippery slope
This is because hardware manufacturers don't upstream drivers.
gue5t··on Linux sandboxing improvements in Firefox 57
Linux's native audio API is ALSA; consult the kernel sources if you don't believe me. Pulse is a common userspace audio system, but is not the native Linux audio API.
gue5t··on Linux sandboxing improvements in Firefox 57
Webrender works like the rendering logic of a game engine. The input-handling logic of SDL and friends are badly impoverished compared to what full-blown GUI toolkits support; input methods, accessibility, multiple windows, tooltips, modal dialogs, etc. are all things the GUI toolkit takes care of.

It would be easier to simply build a Qt version of the bits that depend on GTK, so Linux users can choose between those two. But considering how little Firefox seems to care about Linux user experience (FF has been broken with transparent GTK themes since forever and nobody cares; FF removed Linux native audio support and nobody cares), I doubt this will happen and I doubt a patch would be accepted upstream for reasons of "maintenance overhead". This ignores that maintenance overhead is much higher when two independent parties have to maintain the upstream and a patchset, but is for some reason accepted practice in the open-source world.

gue5t··on Multiple Heap Buffer Overflows In the Windows DNS Client
On Linux, I'd really love a caching resolver that saves its cache persistently. I don't understand why the machine's power-on state has anything to do with the validity of the DNS cache; if the entries were good at shutdown time they ought to be good enough in a few seconds when I boot again.
gue5t··on Zuckerberg apologizes for VR cartoon tour of Puerto Rico devastation
If we had a more expressive way to classify posts than "up" or "down", I'd use it to indicate that "I want this post to be highly visible because it encourages anti-Facebook sentiment, which I consider to be a socially and politically valuable thing to do", and mark other posts with, for example, "this post contains good original research" or "this post makes accurate technical statements".

Why is HN voting so opaque, only explaining how votes work in scattered tidbits at the bottom of comment threads? A well-designed system doesn't work only because nobody knows how it works. The current method of "herd these sheeple through a maze they can't directly perceive" feels very patronizing.

At any rate, I'm not sure whether it's worth it to upvote the grandparent now, since it is apparently a censored viewpoint and merely shooting myself in the foot to do so.

gue5t··on Is AI Riding a One-Trick Pony?
Packet switching and distributed routing protocols.
gue5t··on Is AI Riding a One-Trick Pony?
"It's like saying all the cloud technology we have today is not much more than having VMs."

No shit? Unless you mean that it's ignoring the "distributed systems" part of the cloud, which is mostly a shitshow. The provisioning/configuration-management stacks are all complete wrecks, stacking hacks atop ad-hoc container schemes atop a poorly-design OS. A real distributed OS would be so much simpler and more robust.

Calling it AI is very misleading when there has been minimal progress toward actual reasoning (the closest I've seen being some LSTM work on answering simple queries about scenarios based on prose descriptions of them). It's ML, as in "learning a function", not as in "general-purpose learning like an intelligent agent does".

gue5t··on Essential has sold just 5,000 phones since launch
With ~1000 more preorders the Librem 5 will be fully funded.
gue5t··on Essential has sold just 5,000 phones since launch
I'm demand, trying to find and coordinate with other demand for the same product in order to ensure that there is a supply. Please don't treat economics as normative when it is, at best, a descriptive science. Please don't shit on me for trying to find other people who have the same ideals and want to see them become reality. It's really discouraging and runs counter to the "anything is possible" spirit of hacking.

There are specific reasons the Ouya and FxOS didn't make sense: an open game-console is already rather quixotic when all the games people want to play are closed-source and open non-games devices exist. FxOS was based on web technologies (huge mistake, given that they're garbage and inefficient), targetted at "emerging markets" (read: poor people, who for some reason are assumed to care less about their phones being slow and not having app compatibility?), and didn't make driver promises. If they had at least gotten calls to happen on a mainline kernel once I would have been convinced, but the real goal of FxOS was market share, not advancing user freedom (where hardware support, not userspace/apps, is the bottleneck). I don't know much about OpenSolaris.

gue5t··on Essential has sold just 5,000 phones since launch
If you have trouble with that on your current phone, try https://play.google.com/store/apps/details?id=is.xyz.mpv which is the Android port of mpv, successor to mplayer/mplayer2 and what I use on every one of my machines to play smooth full-screen video from youtube and everywhere else.
gue5t··on Essential has sold just 5,000 phones since launch
The copy could state more explicitly that it does work as a regular phone with your number and SIM, but it is explained under the section "A No-Carrier Phone?":

The Librem 5 can be used in any of three ways:

- With a cellular carrier provided phone number, data plan, and WiFi

- With a cellular carrier data plan, and WiFi

- With no carrier, and using only WiFi

WiFi calling and VoIP calling will be able to be provided in WiFi or data plan modes. We expect to offer call-out, and call-in with phone numbers in all of these plans as well. If you still require a “traditional” phone number through a carrier and want to make unencrypted phone calls or messaging, it will be an option you can choose, but is not required (we recommend avoiding unencrypted phone calls).

gue5t··on Essential has sold just 5,000 phones since launch
The Essential phone does nothing fundamentally new. The Librem 5, on the other hand, will if it gets crowdfunded: it'll be the first phone to not lock its users into the shitty app store paradigm where you rely on the manufacturer for a max of 2-3 years of support/security-updates while renting siloed closed-source programs that sell your usage data and show you ads. The Librem 5 will run regular Linux that keeps working until the hardware falls apart (and then some), that can be updated by anyone, not just the manufacturer, will have its kernel kept up-to-date via efforts of the entire community of Linux kernel developers, and will run applications that aren't rented and that respect their users.

The Librem 5 will have open-source drivers and a non-Android operating system running a mainline Linux kernel (atop which Android compatibility is trivial if folks want to run that).

Lots of HN readers have tech jobs and can afford to make history by crowdfunding: https://puri.sm/shop/librem-5/

gue5t··on Firefox Quantum Lands in Beta, Developer Edition
Tracking the thread through https://bugzilla.mozilla.org/show_bug.cgi?id=1207700 and https://bugzilla.mozilla.org/show_bug.cgi?id=1170342 (and ultimately https://bugs.freedesktop.org/show_bug.cgi?id=93539 ) it appears that when XI2 is used, focus-out events were not sent in rare cases under old versions of Xorg. If you're running modern software there should be no downside.
gue5t··on Firefox Quantum Lands in Beta, Developer Edition
Re: touchpad scrolling, make sure you disable "smooth" (animated) scrolling and enable precise scrolling; on Linux this requires setting MOZ_USE_XINPUT2=1 in the environment.
gue5t··on W3C abandons consensus, standardizes DRM, EFF resigns
Chrome has been shipping DRM called "Widevine" for years.
gue5t··on Zircon Kernel, Core Drivers and Services
Try https://danluu.com/file-consistency/ for one point: the filesystem isn't really even viable for data persistence.

The filesystem's "you can only persist uninterpreted bytes" policy means software can't maintain any kind of data invariant across runs; everything has to be revalidated if your process ends.

ACLs (e.g. unix permissions) are widely regarded as a mistake.

File locking is broken: https://gavv.github.io/blog/file-locks/

File metadata is easy to accidentally mangle (e.g. atime) and hurts performance (even "relatime" is slower than not causing a write for every read).

The filesystem is used both for users to organize their data files and for sharing of machine-interpreted data between programs (e.g. shared libraries and system configuration). Humans need human-readable names, and machines get confused by humans renaming things (and should probably be addressing by content, rather cryptographically or in terms of type signatures or specifications).

There are no asynchronous syscalls for interacting with the filesystem itself (e.g. `stat()`; for file contents things are onl slightly better).

Probably I'm still forgetting a number of problems, but these come to mind offhand.

gue5t··on Rob Pike's Rules of Programming (1989)
How is a for-loop not a fold?
← PreviousPage 2 of 14Next →