Threads for ksynwa

  1. 3

    I didn’t know these documents had to be bought.

    1. 3

      Oh sweet summer child.

    1. 6

      I use the GTK2 builds of software when available rather than GTK3 because the file chooser is much easier and nicer to use. https://halestrom.net/darksleep/blog/028_ui_gripes/

      In my web browser I now save files to just one folder, then move them with a file manager (PCManFM) that lets me navigate folders by typing the start of their names on my keyboard. The GTK3 file chooser still does have one hidden way of doing this (by pressing /) but it’s really cumbersome and you lose your filename.

      I’m very scared of the GIMP’s GTK3 port. The UI is already very interaction heavy for my most common use case (open a bunch of photos, crop, resize, adjust levels, export as JPEG to a different folder, close), I expect this will only make it worse.

      The direction of Gnome has been really sad for more than 10 years. Gnome 2 was amazing. GTK2 themes were and still are awesome.

      1. 2

        I use the GTK2 builds of software when available rather than GTK3 because the file chooser is much easier and nicer to use. https://halestrom.net/darksleep/blog/028_ui_gripes/

        In my web browser I now save files to just one folder, then move them with a file manager (PCManFM) that lets me navigate folders by typing the start of their names on my keyboard.

        You can force your browser to use XDG Desktop Portals and then you can force it to use the Qt portal. The KDE file picker for example is relatively close to what GTK2 used to have (and significantly more powerful nowadays)

        1. 2

          How is this done? I have the portal installed but I have no idea how to configure it in Firefox.

          1. 2

            Instructions are under “KDE integration” at https://wiki.archlinux.org/title/Firefox

            1. Install the equivalent of xdg-desktop-portal and xdg-desktop-portal-kde in your distro.
            2. Go to about:config in firefox and set both widget.use-xdg-desktop-portal.mime-handler and widget.use-xdg-desktop-portal.file-picker to 1

            I also had to install some kde icons.

            1. 1

              Thanks a lot

          2. 1

            Ho ho ho thankyou :) The KDE file picker lets me navigate properly with the keyboard, this is much nicer.

            Instructions are under “KDE integration” at https://wiki.archlinux.org/title/Firefox

        1. 6

          I hope progress is being made on federation for gitea (and others).

          1. 5

            Git has supported “federation” from its inception. Activity-pub’ing some git frontend webshit isn’t going to work any better than adding activitypub to anything else has.

            1. 4

              The federation isn’t simply the source code repo, but stuff like issue trackers, documentation etc.

              1. 5

                Put issues and documentation into the source-code repository. Check in all relevant files. (GitHub makes this difficult; Issues are designed to be hard to move to another service.)

                1. 3

                  One way to do this, given tooling support, may be an explicit folder for ‘broken tests’; then issue reports can take the form of “pull request/patch for a broken test.”

            2. 3

              I don’t think gitea will focus on federation but a fork (forgejo) will.

                1. 2

                  Thanks for the correction

              1. 2

                I’m a little nervous about federation as a strategy here, for the same reason that I don’t think the fediverse should be the end-goal of social media: federation leads to feudalism

                I think there might need to be some creative thinking on what to do instead. taking a corporate platform and trying to mirror the identical features as if they make sense when decentralized is a bit silly. the thing where you submit changes by forking the repo was never really for the benefit of the community, it was to give github a network effect.

                people submitted patches through mailing lists for decades before github came along. it worked fine. people made local copies of repos to work in, not every contributor needed to have a published repo. I do understand why, in a world where email is for old people, that model probably needs to be rethought, but I offer it as an existence proof that there are meaningfully different strategies that work.

                (I note that the author of this article would probably still be upset about the central approver on a mailing list thing as “gatekeeping”, but I think it’s worth discussing regardless)

                1. 1

                  federation leads to feudalism

                  Can you elaborate on that? AFAIK actual feudalism only persisted because people weren’t free to switch patrons / lords / what-have-you.

                  Relatedly: this is why I worry when political power is centralised in Federal Government rather than remaining with the States (here in Australia). Granted there are efficiency arguments, but one of the major attractions of a federation is the freedom to switch states if one goes off the rails.

                  1. 2

                    I’d love to elaborate on that, and since I do kind of have a habit of saying it a lot I need to flesh out the metaphor a bit more. the following thoughts are in the nature of a first draft, not well-thought-out, so please take them for what they’re worth.

                    I see two negative aspects of federated social networks which I consider to be feudalism. the first is the power dynamic that instance operators have with respect to their members. the second, and the one that really suggests “feudalism” as a word to me, is that instances wind up in conflict with each other, staking out territory and attacking each others’ reputations and generally trying to create impermeable boundaries between parts of the fediverse, where you can’t see your friends if you’re on the wrong side of the instance-block wall.

                    I agree in principle that ease of switching would give members more power, if you could actually switch without consequences, but there are consequences, both technical (you lose all your post history) and social (you lose access to some subset of your former mutuals, and you can’t easily guess who, unless you somehow have the entire map of the political terrain in your head).

                    the other thing to keep in mind about switching is that in many cases, it doesn’t actually solve the problem. if your instance has been widely defederated due to political dynamics such as coordinated efforts to characterize marginalized groups you belong to as inherently abusive or whatever, that’s going to happen on any instance you and your friends choose to move to. switching is high-cost and at best a short-term solution to that sort of thing. so the incentive is generally to pick a place and stay there.

              1. 3

                Sorry for the tangential question but does anyone know if Emacs works natively with wayland now or is that slated with the next major release?

                There was a pgtk branch that I heard of. I also heard it was close to being merged but couldn’t follow it after that.

                1. 3

                  Yes! The pgtk branch was merged a while back. It’s still slated to be released in Emacs 30 I believe, but you can build and use the development version right now. I’ve been using it for the past few months and it works well, another big feature is that tree-sitter (named “treesit” internally) is now built-in.

                  Edit: I’m currently using commit 1c39347d58533280bae74c712ad0016a5c8992aa and it’s been very stable with Sway and Emacs running as a daemon.

                  1. 2

                    Pure GTK was merged to master a long while ago and will be included in Emacs 29, currently in pretest.

                1. 4

                  Here I thought Postgres already had a queue functionality built in. I may be thinking of its pubsub stuff though.

                  Anyone know what the gotchas for this sort of approach may be? I can imagine lots of different jobs fighting over access to the same table, but that already happens in databases anyway…

                  1. 4

                    If you are sharing a cluster, then saturating connections is definitely a concern.

                    1. 4

                      Yeah you are thinking of notification channels. It can’t be used for queues because message posted to these channels are not stored (like redis pubsub). So if a listener misses a message due to for eg. downtime, the message is just lost.

                      1. 7

                        It can be used to wake the workers and let them try to select for update skip locked and perhaps acquire a job to process without them needing to poll constantly, though.

                      2. 4

                        I haven’t actually tried this, but I posted it a year ago

                        What is SKIP LOCKED for in PostgreSQL? Most work queue implementations are wrong

                        And a comment says maybe that this is over-optimizing for FIFO semantics ?

                        Also related: https://news.ycombinator.com/item?id=29599132

                        1. 3

                          Because Postgres uses MVCC, I think you need to worry about different transactions seeing completely different queue states. I think you are certainly capable of creating a race condition by having two separate transactions both trying to accept the same item at the same time. I believe for these reasons, building a queue is considered a “no-no” in Postgres-land; I remember reading a great article about it some years back.

                          However, in searching for this article (which I couldn’t find), I found a lot of articles describing how people had successfully built a queuing system in Postgres. So it may be that either the failure scenarios are really far-fetched or that there are techniques (like row locking as described in the article) which make it reliable.

                          1. 12

                            The transaction isolation level, which is independent of MVCC or any other underlying implementation of it, keeps workers from reading the wrong state value out of the row. The problem with using Postgres as a queue is its default overly coarse row-level locking. In the past few years they’ve extended the locking model to support the queue use case, allowing concurrent workers to lock and update rows without blocking each other.

                            1. 5

                              The crates.io job queue does it by using SELECT FOR UPDATE ... SKIP LOCKED. The job runners lock the first open row in the table, work it, then either delete the row on success or update the state to failed.

                              1. 1

                                This is what I’ve done, although never deleting the rows but just setting the state (easier to just run deletes as a vacuum under times of lower load).

                                1. 2

                                  I would have thought that doing an UPDATE would have the same impact as a DELETE: both creates garbage rows that must be vacuumed. So you double the number of rows that need vacuuming.

                                  There’s two edge cases I can think of where it can be worth it. One is if the table has big columns with TOASTed data. The other is if the table has a ton of indexes. In both cases the UPDATE might avoid dealing with those “right now”, so if your DB is stressed during peak but has low load times it can make sense to batch the deletes.

                                  1. 2

                                    Postgres has HOT updates where if the update fits on the same page it can be done in place without creating vacuum load.

                                    I wonder if that can be used to avoid queue bloat. https://www.postgresql.org/docs/current/storage-hot.html

                                    1. 1

                                      Yes, we set our fillfactor to something like 10%. Or whatever the value is that means you have more space for HOT updates.

                                      1. 1

                                        I had forgotten about HOT updates! Looks like they don’t apply if you have an index on the affected column, however. That might be workable for a queue table if it’s small enough that not indexing the column is acceptable—but that then begs the question of whether deferring the deletes is necessary.

                                      2. 1

                                        https://www.postgresql.org/docs/current/storage-hot.html

                                        I don’t think this optimization applies to deletes.

                                2. 2

                                  As long as your worker accepting a job from the queue involves a write to postgres, you’re fine. If you have a bunch of workers accepting work at the same time you can get a lot of transaction retries, so it can be useful to serialize workers access to the queue table. And of course if your job queue is high volume you can shard it and serialize access to different shards. But these are all performance optimizations and not needed for correctness.

                              1. 1

                                Can somebody here explain the issue of getting uBlock Origin to work with Safari? There are adblockers offered in Safari extensions, and some charge a subscriptions. I would like to pay for uBlock Origin if it gets on there.

                                1. 2

                                  I haven’t looked at the code, so apologies if it’s obvious from it, but I would be interested in knowing which storage options the project supports.

                                  1. 2

                                    From the config it looks like the filesystem is the only option: https://pkg.go.dev/github.com/mjl-/mox/config

                                    1. 3

                                      correct. messages are stored into the file system in the form they are received. there is also database file that holds additional information, such as the smtp mailfrom, smtp/spf/dkim/dmarc validation status, message flags, prepended received/auth-results headers, etc. see https://github.com/mjl-/mox/blob/c65731ac56d8f92a134e2a8d5469e1927cefb3a6/store/account.go#L217

                                      the database file is a boltdb file. that’s a transactional, high-performance, truly single-file key/value store. i’ve added a layer on top called bstore (https://pkg.go.dev/github.com/mjl-/bstore) for common database functionality like referential integrity, indexes, unique/nonzero constraints, etc. when i started prototyping, i used sqlite. sqlite is great, but i wanted mox to be pure go.

                                      i could have added an option to store into an existing database. but then setting up mox would also require you to set up a database, and maintain it, etc. i wanted to keep it simple and self-contained.

                                      i would still be interested to hear about storage option that folks would want, and why.

                                      1. 2

                                        But sqlite is pure go :P Either with mattn/go-sqlite3, or with CGO-less modernc.org/sqlite :)

                                        I have a project where I have abstracted the storage into a couple of interfaces and it can be compiled alternatively with boltdb, sqlite, badger, or plain file-system storage support. I am curious if you’d be willing to accept changes into this direction.

                                        1. 4

                                          in my mind a “pure go application” does not include c code, which mattn/go-sqlite3 does. i’ve seen modernc.org/sqlite, but i’m not entirely at ease with the idea. a lot of code (sqlite), translated.

                                          i’m afraid adding multiple storage backend options would require a relatively large storage interface. i think there are bigger fish to fry at this moment. (:

                                          1. 1

                                            OK, fair enough.

                                  1. 5

                                    Citibank’s password isn’t case sensitive. They do not tell you this.

                                    1. 4

                                      Banks from I have seen (at least where I live) follow password practices that seem archaic. I guess it is because they had to sink their knees in the realm of online security early on and haven’t moved on from that. My bank for example does not allow pasting the username or password making the usage of a password manager a bit tricky. rofi-pass uses xdotool which helps me work around this.

                                    1. 3

                                      Sorry but what exactly does “polyfill” mean? I have little experience with javascript.

                                      1. 7

                                        JavaScript, like other Smalltalk-family languages, exposes pretty much everything to reflection. This means that there’s a very blurry line between the standard library and user code. User code can replace the global objects or methods on them that were provided by the standard library. You can effectively replace the entire standard library with your own implementation (modulo things that talk to the outside world, though you can replace these with wrappers).

                                        A polyfill is named after the goo that you use to repair cracks in the walls (which tends to have different names in different locations even in the English-speaking world. Bill Bryson’s Notes from a Big Country discusses his problems trying to find the local name after moving back to the US). The problem is that you want to use modern JavaScript features, but you also want to deploy to all browsers. The solution comes in two parts. A polyfill for the standard library, which covers the cracks and makes whatever the browser ships act like a modern version, and a transpires that converts modern JavaScript (or some other language) constructs into things supported by all browsers.

                                        1. 5

                                          My understanding is that a polyfill is effectively a compatibility layer for individual browser APIs, if the current browser supports an API used by the application then it’ll call into the browser runtime, otherwise it’ll use a reimplementation of that API from the polyfill of it.

                                          1. 4

                                            Pretty spot on, with one additional use case: support for new, unreleased features. There are JavaScript features that developers like to use that are not finalized yet and not standardised, so polyfills, hmm, fill a dual role there. One, provide access to those features before they’re standardised and implemented by all browsers, as well as testing out these things before the standard gets finalized (so if a particular feature doesn’t really work out, it doesn’t get standardised and implemented that way).

                                        1. 7

                                          It’s very interesting to see this.

                                          I would love to open source some of my older games too, but a lot of them use paid assets and tools. I would have to painstakingly rip out all the paid licensed stuff and just release my own things.. So that’s why I don’t do it.

                                          I’m glad they open-sourced it. If the game had a small community, that community can still keep playing til the sun explodes. It also serves as great learning material.

                                          All in all, very valuable contribution to gamedev, even if the game isn’t something you’re interested in. I hope to see more this kind of deal in future!

                                          1. 1

                                            There is Duelyst 2 in the works. I am not sure if is by the same devs or not though. It would be cool to see this open sourced game be forked and compete with the new game.

                                            1. 4

                                              It started as a fan project but was eventually officially licensed: https://duelyst2.com/#about

                                            2. 1

                                              I remember a while back getting the source code for… Gish? Of all things with some purchase. It was very confusing for me trying to understand what was going on with the code.

                                            1. 1

                                              When and how do you REFRESH the materialized view? I was thinking this could be done in a trigger function on the dependent tables. But since in Postgres a transaction does not end until triggers are done executing I am not sure it would a good idea. It could make an operation like changing an image subject take longer.

                                              1. 2

                                                We do not refresh on every update, which is not recommended as default materialized view refresh locks it by default. Since, in our use case, stale data could be tolerated for up to a few hours. We used to refresh the materialized view through application crons daily twice. Since the application was on rails, we used sidekiq for crons, and if you are on python, you could try celery crons.

                                              1. 12

                                                I don’t know how to read documentation for rust packages. If I am able to figure something out it is usually by accident or because I happened to Ctrl+f the correct term and not because I knew where I could find the information I needed. It’s probably because I am dumb and mostly use Python so I am used to reading docs for a high level language which usually take much less brain power.

                                                1. 9

                                                  This was a huge problem for me in the beginning until I tried to write my own crate. Then I realized that crates are organized a certain way and then everything clicked. But coming from Ruby, it was hard to get over looking for methods contained within modules or classes. Crates offer you modules, traits, structs, and functions, and if you can’t find what you’re looking for at the top level, it may be:

                                                  1. On an implementation of a trait for a struct
                                                  2. In a macro somewhere
                                                  3. Any of the above within a nested module

                                                  I generally end up using the search function regardless, but if you do have a mental model of the layout of a Rust crate it helps a lot for understanding the results of those searches.

                                                1. 2

                                                  This looks interesting—thanks.

                                                  There’s also Filippo Valsorda’s passage—a fork of pass, but like pa it uses age as a back end.

                                                  1. 13

                                                    Ok so maybe I shouldn’t be writing this comment, but honestly, ever since working for Google post-covid, I just can’t take anything they put out seriously anymore. That company is so broken I just don’t trust the quality of the engineers that work there. Like, the Google brand name is a negative for me at this point. There’s way better resources for this kind of thing.

                                                    1. 16

                                                      I think, as you say, that you should not be writing this comment; I can’t see how this is valuable:

                                                      • if you just came here and want to learn some Rust, this comment does not provide any value
                                                      • if you are unsatisfied with how Google is doing or what they are doing, this is not the place to comment about it (there are many others in fact)
                                                      1. 5

                                                        Surely it is useful in conveying the probable quality of the guide, sparing people wasted days. I came here to see if anyone had opinions on the quality, because I looked at the Kubernetes code some years back, was shocked at the poor quality, and dumbfounded that people were running their businesses on it - so if it says google, I want opinions on quality before getting involved. Given increasing consensus on google I will skip this guide.

                                                        1. 6

                                                          No, it’s not. Google is an enormous company. There is always going to be a range of quality.

                                                          Maybe OP was in a bad team. Maybe OP has a sour taste in their mouth. Maybe you have misjudged Kubernetes because it does very much appear to work for enterprise level companies.

                                                          I think it’s a bad way to go to dismiss an artifact from a large company out of hand simply because of the quality of something else. I have no love for Windows but I think Microsoft is killing it with Xbox.

                                                        2. 3

                                                          Half of the reason anyone cares about this guide at all is because it is coming from Google.

                                                          It’s very disingenuous to say “don’t say negative things about Google, it’s not relevant” when a major reason we are discussing this guide in the first place is because of Google’s positive reputation.

                                                        3. 14

                                                          I’ve heard some similar things about Google in the past several years; that said, do you think that any issues with the quality of Google engineers broadly-speaking is relevant to this Rust guide? I skimmed it and it seemed like a reasonable enough way to get programmers who have no prior Rust experience up to speed with the language reasonably quickly. I didn’t notice any major problems with it, certainly.

                                                          1. 2

                                                            I didn’t read it. I’m not saying the guide is bad. It might be good. I’m just not willing to give it a chance, there are other guides out there that are not associated with Google.

                                                            Maybe I’m wrong in this instance, but I only have one life to live. I need some kind of filter.

                                                            1. 1

                                                              Thanks for looking at the course! If you do find problems, please don’t hesitate to open issues and/or to send PRs my way via https://github.com/google/comprehensive-rust.

                                                            2. 8

                                                              That company is so broken I just don’t trust the quality of the engineers that work there

                                                              How is this related to the quality of the linked Rust guide?

                                                              There’s way better resources for this kind of thing.

                                                              Would you mind sharing those? Otherwise your comment is not very helpful.

                                                              1. 3

                                                                Thanks for being brave enough to say this. I feel obligated to back you up even though this might not be a great idea for me either.

                                                                Where to begin? A few snippets: I worked at Apple with a former senior (staff?) Google engineer who had been internally certified at Google as a Python style reviewer.

                                                                His code reviews were the absolute worst I have ever seen: he’d leave a dozen comments about the order in which variables were declared, and zero comments about actual engineering. For points of reference: at Mozilla people would leave lots of comments about style, but left even more about substance. At Figma people had a culture of leaving style to automatic tools as much as possible and had an extreme focus on substance.

                                                                The same guy refused to use an autoformatter. His friend put up a nontrivial PR at noon, he rubber stamped it literally 5 minutes later, then they complained to our manager about how I didn’t review it. I could share so much more that’s even worse from my experience with this and other Googlers, but it wouldn’t be relevant to programming language style guides and code review.

                                                                Lots of excellent people work at Google. But Google also has a subculture of cliquish freeloaders who obsess over style and language guides to obscure the amount of work that they’re actually doing. It’s not that they do no work at all: maybe 30% of their work and reputation comes from style guides and politics rather than actual work. But they will simultaneously act as if that gives them more authority rather than less.

                                                                In college I was a fan of the Google Python Language Guide and others, but after seeing the culture they bring along firsthand I now think they’re a red flag.

                                                                1. 2

                                                                  There must an English idiom about how something (not everything) which looks nice from far away look like crap from close by.

                                                                  1. 5

                                                                    All that glistens is not gold

                                                                    1. 3

                                                                      You could pull one from the movie “Clueless”:

                                                                      Tai: Do you think she’s pretty?

                                                                      Cher: No, she’s a full-on Monet.

                                                                      Tai: What’s a monet?

                                                                      *Cher: It’s like a painting, see? From far away, it’s OK, but up close, it’s a big old mess. Let’s ask a guy. Christian, what do you think of Amber?

                                                                      Christian: Hagsville.

                                                                      Cher: See?

                                                                      1. 1

                                                                        Yes. It’s “Laws are like sausages, it is better not to see them being made”. i.e. having insider information about some things makes you dislike them.

                                                                    1. 11

                                                                      In case anyone is using this for learning best practices, I want to repeat my suggestions from the zig subreddit:

                                                                      (1) Use std.fs.Dir.readFileAlloc instead of your readInputFile function.

                                                                      (2) No need to append lines into an array list. Just iterate over the memory directly.

                                                                      (4) std.fmt.digitToChar

                                                                      (6) std.fifo.LinearFifo. I’m not happy with how this data structure is named; I will likely rename it at some point.

                                                                      (9) Please be aware of what @intCast does which is asserting that the mathematical value is representable in the destination type. Also, the % operator is available but only when modulus division and remainder division would yield the same result, i.e., when the inputs are unsigned.

                                                                      1. 1

                                                                        I want to repeat my suggestions from the zig subreddit

                                                                        can you link it? wondering if you wrote more that i can read. i want to do AOC in zig as well but since i have little experience with low level programming it would help me a lot.

                                                                        1. 2

                                                                          It’s a copy and paste, no linking required.

                                                                          1. 1

                                                                            Thanks

                                                                      1. 1

                                                                        Can someone briefly explain what .net does? I know next to nothing about development on Windows.

                                                                        1. 2

                                                                          .NET is a cross platform (Android, iOS, Linux, macOS, Windows) development environment, comparable to Java.

                                                                          1. 2

                                                                            If you know Java, or at least conceptually understand Java, there are a lot of parallels:

                                                                            • JVM -> .NET CLR (“Common Language Runtime”)
                                                                            • Java standard library -> .NET BCL (“Base Class Library”)
                                                                            • Java bytecode -> .NET IL (“Intermediate Language”)

                                                                            Similar to the Java ecosystem, .NET supports multiple languages which can run and interoperate on the platform, though the big ones are all languages supported and developed by Microsoft:

                                                                            • C#, which started out looking a lot like Java, and still sometimes does, but has made different choices over the past couple decades and diverged as a result.
                                                                            • F#, a functional language designed to resemble an ML.
                                                                            • VB.NET, which is a port to .NET of Microsoft’s Visual Basic language.

                                                                            The cross-platform support is good these days; you can do .NET stuff on Windows, Mac, Linux, and a lot of deployments of web apps is on Linux. There’s also stuff in the platform for targeting mobile (iOS/Android) platforms, and for compiling to WASM.

                                                                            The main differences from Java/JVM-land, as I see them, are:

                                                                            • Different choices in how to evolve the flagship language. C# did a big compatibility break in order to have reified generics, for example, where Java kept backwards compatibility but has to do generics with type erasure. Or: Java still largely requires you to write getters/setters where C# added support for something similar to Python’s properties, and for having get/set methods that don’t require explicit code.
                                                                            • Both are ecosystems that lean heavily on the IDE, but in the .NET world it feels a bit easier to get along without one – the dotnet command-line tool lets you do a lot of the project-management stuff you’d generally be delegating to your IDE in Java, for example.
                                                                            • A single vendor (Microsoft) dominates the .NET ecosystem. In Java-land there are of course a bunch of major “everybody uses this” frameworks and tools, but they’re spread out across multiple organizations/entities which maintain them. In .NET, if you’re doing web apps you’re probably using Microsoft’s framework (ASP.NET MVC); if you’re talking to a database you’re probably using their ORM (Entity Framework); etc.
                                                                            1. 1

                                                                              A bit late but thanks a lot for the detailed response

                                                                          1. 11

                                                                            I still struggle to understand the appeal of wireless earbuds, Airpods or otherwise. Under my value system, the costs are significant while the benefit is small:

                                                                            • you have yet another battery to keep charge
                                                                            • you have another object to lose
                                                                            • you have yet another flaky wireless connection to contend with
                                                                            • you must pay a good fraction of $1000 for the mediocre audio quality supported by said wireless connection
                                                                            • you have to live with the knowledge that after two years you will have introduced yet another sliver of unrecoverable minerals to a landfill somewhere

                                                                            While the last consideration alone is, for me, enough to summarily rule out wireless earbuds from my purchasing options, apparently there is no shortage of people who feel that the benefit had in being rid of a cable outweighs all of these costs. Given that any decent set of wired earbuds will have a relatively tangle-free cable and carrying case, I can’t help but wonder whether I am failing to see some key benefit beyond not having to occasionally manage a cable.

                                                                            1. 12

                                                                              In my experience with wireless earbuds - the battery lasts lost enough that I basically never worry about it running out, the connection basically never drops out, and the audio quality is surprisingly good.

                                                                              The reason why I personally went with wireless instead of wired is that, at least at the time, I wasn’t able to find wired in-ears with good ANC. The best tech seems to go into wireless earbuds, so they can end up as the best option all-around.

                                                                              1. 2

                                                                                This is why I wound up with big wireless over-ear headphones. The best-in-class noise cancelling now is all wireless, even though I don’t particularly care about having wires or not.

                                                                              2. 10

                                                                                you must pay a good fraction of $1000 for the mediocre audio quality supported by said wireless connection

                                                                                The base model 3rd-gen AirPods are priced at $169. The “Pro” version at $249. If that’s “a good fraction of $1000”, then I’m going to start referring $1500 laptops as “a good fraction of $10k”.

                                                                                Meanwhile: I used to be skeptical. Then I got really really tired of snagging headphone cables on all sorts of things and having them ripped out of my ears or, worse, out of the jack (I once had a pair of decent headphones destroyed by being yanked untimely from the jack). And I decided to try a pair of AirPods.

                                                                                The audio quality is not “mediocre” by any reasonable measure. I own a pair of genuinely nice over-ear headphones for use at home, and I’ve basically stopped using them, in favor of the AirPods. The audio quality is just fine to my ears, and the added lightness and ability to get up and move around is a huge plus – I can listen to music while I’m puttering around doing chores or cooking or whatever and not have to carry the source device around with me or deal with a heavy headset or worry about snagging a headphone cable on things.

                                                                                you have to live with the knowledge that after two years you will have introduced yet another sliver of unrecoverable minerals to a landfill somewhere

                                                                                My first pair of AirPods lasted around five years before the battery life started to decline too much to continue my heavy daily use. I took them with me to an Apple store and handed them over to Apple to recycle as I picked up a new pair.

                                                                                you have yet another battery to keep charge

                                                                                The buds charge quickly in the case and get hours of listening time on a charge, in my experience, and the case itself is easy enough to plug in overnight.

                                                                                you have another object to lose

                                                                                As I mentioned, my first pair lasted five years, during which I lost them zero times. Including when wearing them on public transit and while out and about walking, shopping, etc. The case is about the same size as my keyring; I don’t lose that all the time, why would I lose the AirPods any more often?

                                                                                you have yet another flaky wireless connection to contend with

                                                                                I have owned flaky Bluetooth devices. I have used flaky Bluetooth devices. I have been forced to work with flaky Bluetooth devices. AirPods are what I wish every Bluetooth device could be.

                                                                                I can’t help but wonder whether I am failing to see some key benefit beyond not having to occasionally manage a cable.

                                                                                Yes. Also, several of your points are simply factually wrong.

                                                                                Having been through this cycle before, I’ll just say that Apple did with the AirPods what they did with the iPod: took a product category that historically sucked, and made one that didn’t suck.

                                                                                1. 8

                                                                                  I hate cables on and around my body so much. I always catch them on my elbows and yank them. Or stand up to get something and yank them. I got an extra long cable so I could stand up at least and it got caught on other things like my chair, or knocked things off my desk. When I had the chance to buy actually decent wireless headphones for 3x the price of my wired ones I did it without hesitation.

                                                                                  1. 7

                                                                                    Don’t throw them in a landfill! They’re a fire hazard in trash compactors. You have to keep them forever, bequeath them to your descendants, etc.

                                                                                    1. 3

                                                                                      Or sacrifice them to the garbage disposal gods! Behold the fire as they rejoice! :D

                                                                                    2. 5

                                                                                      I still struggle to understand the appeal of wireless earbuds, Airpods or otherwise.

                                                                                      I have broken multiple cable-attached devices, and physically hurt my ears, trying to use wired headsets on busy public transport.

                                                                                      1. 4

                                                                                        you have yet another battery to keep charge

                                                                                        Yes, but the battery lasts “forever”, where forever means I never have to be aware of the battery status. Maybe I charge mine every couple of weeks when I feel like it (not because I need it). When was the last time you had to be consciously aware of your wireless keyboard battery status?

                                                                                        you have another object to lose

                                                                                        Same with wired headphones, the number of objects in question is the same.

                                                                                        you have yet another flaky wireless connection to contend with

                                                                                        Not with Apple headphones you don’t. But non-Apple Bluetooth headphones are terrible here, yes.

                                                                                        you must pay a good fraction of $1000 for the mediocre audio quality supported by said wireless connection

                                                                                        The quality supported by the wireless connection is good enough, no bottleneck there, however the airpods themselves (AirPods Pro v1 and v2) are pretty mediocre in terms of audio quality, which I find surprising. I have much better IEMs than Apple AirPods. Surely Apple can do better here. I will note that AirPods Pro v2 (not v1) have the best noise cancelation of any headphone I ever tested.

                                                                                        However, audio quality is not the reason I use these headphones. It’s because they take no space, and I don’t have to deal with any wires. I have an evergrowing collection of real headphones at home, which have uncomparable audio quality, but they are simply different products with different use cases.

                                                                                        you have to live with the knowledge that after two years you will have introduced yet another sliver of unrecoverable minerals to a landfill somewhere

                                                                                        Two years is a stretch, mine don’t even last one year, maybe six months. I produce a lot of earwax and these things just get worse and worse. So what? Nothing lasts forever, I get a lot of value from $200 worth of airpods every six months.

                                                                                        1. 4

                                                                                          For me the convenience is a huge advantage. I listen to audiobooks/podcasts a lot more when it’s easy to start and stop without fiddling with cables. I only spent around $30 on mine. The sound quality is plenty good for me and I’ve never had connectivity issues.

                                                                                          1. 3

                                                                                            You only have to have a snagged headphone cable pull your $1200 phone out of your pocket and smash it on the ground once, and you’ll get it.

                                                                                            1. 2

                                                                                              I like them for sleeping. They’re a bit uncomfortable when I sleep on my side, but I got used to it. The noise cancellation is great for fans / AC or partner’s snoring.

                                                                                              1. 2

                                                                                                I find I actually do things like walk around, exercise, etc. a lot more than having to deal with wired headphone ceremony (untangling the cables….) when outside. That, and the nature of IEMs with transparency/ANC as someone who isn’t deaf but has occasional hearing difficulties is a big help. The charging isn’t also a big deal; I just throw it on a Qi pad when I’m at a desk using wired headphones (since the cable there is fine).

                                                                                                1. 1

                                                                                                  I use wired IEMs almost all the time I need to listen to audio but in the gym, while lifting, using wireless earbuds make life 1000x better.

                                                                                                  1. 1

                                                                                                    My GF has a pair of those things. We found an interesting use for them once: being able to listen to the same thing while walking. She wore one and I wore the other. The fact that it wasn’t stereo didn’t really matter, because we were listening to GPS announcements from the screenreader on her phone. She likes them because she has destroyed quite a few headphone wires over the years.

                                                                                                    I wouldn’t buy them myself. Old wired headsets are cheap, ubiquitous, reliable, and don’t need a battery. When I wore one, I always felt like it was going to fall out of my ear. I don’t know how people manage to keep them in while exercising.

                                                                                                    1. 1

                                                                                                      My GF has a pair of those things. We found an interesting use for them once: being able to listen to the same thing while walking.

                                                                                                      FWIW there are 3.5mm splitters, and nowadays iOS can attach multiple Bluetooth headsets for shared listening, at least for music.

                                                                                                  2. 1

                                                                                                    its nice to be able to wear them while exercising

                                                                                                  1. 5

                                                                                                    When I saw this article, at first I thought it was a joke, but now I think something is borked with my browser, because it looks like this. I don’t think that is how they intended the fonts to come out and it looks fine on my phone too. Does anyone know how to debug font stuff on Firefox?

                                                                                                    1. 2

                                                                                                      This might sometimes happen because of bad font fallbacks by the website and for some reason, the intended web-font could not be loaded(server down/some extension blocking it etc). But could be entirely something else in your case, let us know!

                                                                                                      1. 1

                                                                                                        “Inspect element” the text. In the CSS panel, if you hover over the font-family definition it will show you the computed value. From there you should be able to find which font is being used and why.

                                                                                                      1. 3

                                                                                                        At my work our backend uses LISTEN/NOTIFY to listen to database changes and inform the UI over the websocket connection if the user’s (who is using the browser) view needs to be refreshed.

                                                                                                        I think the idea is good but our implementation is not good. Would love to see better working examples of something like this.

                                                                                                        1. 3

                                                                                                          I’m doing the same in a Phoenix app. I start a GenServer as part of the app that handles the listens and sends out an Endpoint.broadcast/3 when a relevant one comes in (on the busy one that broadcast includes the query results the clients crave). The LiveView instances clients are on subscribe to the endpoint channel when they start up, so the updated query results generate new HTML and bang it out to the browsers.

                                                                                                          1. 2

                                                                                                            I dunno about your implementation, but like you said the idea sounds fine. We did something similar at a previous job. We had a 3rd party integration which made changes to certain models in the background, which would then trigger LISTEN/NOTIFY to tell other parts of the software to restart a computation.

                                                                                                            In my current job, we also have a “main” server which runs and sends updates to clients, and when a command line task or cron job makes some changes to the db, it informs the main server about the changes so that it can send updates to the clients.