1. 4

    As a user of software, if distro packages aren’t available, I’m happy if I can find a docker image or flatpak.

    1. 5

      Pretty amazing and great work about something people often overlook — how do we ensure we have something clean in our toolchains. I’m also wondering how the story will look in 30 years from now — would there be a need to compile GCC suite at all, or majority of software will be written in different set of languages, like Go, Rust,

      1. 2

        Even today, you might get away with using some other compiler in place of GCC. Like, clang or llvm or something. Uh, I don’t know the details here; not my area of expertise!

        But, that doesn’t change the nature of the situation you’re describing–it only changes the particulars. Substituting one big compiler project for another doesn’t scratch that itch.

        The Rust compiler is currently written in Rust, so it has a bootstrapping problem, just like GCC does. See this fine article about that: https://guix.gnu.org/blog/2018/bootstrapping-rust/

        I don’t know about golang. Hm, apt-get build-dep golang-go tries to pull in GCC. So, that’s a data point.

        1. 2

          The current golang is built using go. But a previous version (1.4?) was built using C. So that is used for bootstrapping.

          1. 2

            This script installs from sources latest released version of Go without any prior Go compiler available in roughly 20 minutes (most of that time is spent in selftests of Go) on my weak machine.

      1. 12

        Since we’re discussing how this is off topic, I’ll make an off-topic comment about how the copy of this site is very easy to read (with respect to colors and typography).

        1. 3

          The content is good too. The author’s reference to Shenzhen as “Big Rock Candy Mountain” elicited one of those spontaneous cubicle giggles that outs me as obviously NOT reading documentation… :(

          1. 3

            Documentation used to be written to elicit giggles. Not all of it, but a part of quality documentation

        1. 6

          According to the responses from keybase, this is not really automatic. But it is too easy to accidentally do it (tap the wallet tab and tap through the popups to close them). And the “no way to delete” part is really bad.

          Keybase also apparently doesn’t give you the ability to restrict messaging to contacts only. I sense a common theme: lack of user control.

          I have deleted my account. In all these years, I have never actually used it for anything, and this buttcoin-funded stuff in general is annoying.

          1. 3

            The chat was pretty convenient. I still have it just in case it’s useful again. Rarely use it.

            The thing that nags me about it is the sheer size of it every time my software updater runs. And how often it runs just for Keybase. There’s just something about crypto, secure, and 100+MB in same sentence that makes me think one word shouldn’t be in there. Without that word, I start wondering if it should be a point of trust. Then, I don’t actually trust it.

            1. 1

              Have you tried matrix/riot for chat? How is keybase better/worse?

              1. 2

                All the Matrix threads I see mention a bunch of problems. So, I’ve decided to stay off it until they get it where they want to be. I haven’t tried Riot since I thought it was Matrix, too.

                Keybase was pretty simple, like an old IM. I haven’t used it for anything other than sending plain text. It’s kind of convenient for the discovery process. There’s people I knew that were on there, I just typed their name into chat, sent a message, and they replied. We went back and forth a bit. There’s some protection built-in to protect the casual conversation. It was good for basic chat in non-paranoid situation. I GPG-encrypt text and zip files that I send for more serious stuff.

                Main drawback of Keybase was two-fold: it has a strange way of moving to new machines requiring two to make it work; so little use that I totally forgot about it and that when doing a clean reinstall. I copied everything to new system except Keybase. Lost that key which let me see those prior conversations. Now, they’re lost without re-authentication (assuming I understand correctly) with new ones done under new key. Again, Keybase wasn’t useful for anything critical to me so no big deal. Just kind of wish it just had a file for each device that I could use instead of their authentication system over multiple devices.

                1. 2

                  Riot is a matrix client, yes. Matrix has had lots of problems, but most have been fixed and work is underway to fix the rest. E.g. E2E encryption is not on by default, but should be during this fall. And matrix has (encrypted) key backup to the home server, should you wish to use it.

                  1. 1

                    Some friends and I tried out Riot and there were… a lot of problems. Some of them seemed like simple UI problems that would never have passed UX review (e.g. intermingling personal preferences and room-wide settings in the same dialog box) and others were harder to figure out (random flakiness in message availability that could have been client, server, or even protocol issues). I’ve also heard that enabling federation in the Synapse server implementation causes massive performance issues.

                    I want to like it. It’s just really not there yet.

                    1. 1

                      When was this? Because it improves constantly and fairly quickly.

                      1. 1

                        Two months ago.

                        I just fired up Riot to answer that question, and as the history spooled back down from the server to the client, it played a little snippet of ringtone for every voice call I’d ever gotten, with call notifications flashing up and disappearing. -.-

                    2. 1

                      The other solutions I had mostly just worked. That’s why I avoided Matrix with its many problems. I’ll be happy to try it when it’s a fully-working solution. At least for the common uses. Obviously, I don’t need every extra feature to be perfect or anything.

              2. 2

                How Keybase was supposed to make money has been a murky area from the start. I’m disappointed they didn’t go with a paid “corporate” tier, or charge a yearly subscription for stuff like the git repos. That would have alleviated concerns about their funding. Airdropping XLM does the precise opposite.

                1. 3

                  They were pretty clear that they didn’t have a business model: https://github.com/keybase/keybase-issues/issues/788

                  “Dunno lol” seems to be how a lot of startups operate. Seems like a bad idea. :-)

                2. 2

                  I have deleted my account. In all these years, I have never actually used it for anything, and this buttcoin-funded stuff in general is annoying.

                  I ended up doing the same after years of not using it, despite accumulating a small social graph there.

                1. 5

                  This is mostly not good, these email validation/testing requests are blocked in practice.Meaning most mail servers should accept mail for any user and drop it for invalid destination addresses. This kind of thing would have been clever in the 90s, now it should be largely not possible.

                  1. 2

                    Agreed. The best way to check if an email address is valid is to send email to it (with a verification link? please don’t send tracking pixels)

                    1. 1

                      Everything inside me screams that this should not be possible and is a very stupid idea for mail servers to do it like this, but in practice it is surprisingly effective! We’re using this at work to check e-mail addresses are valid when entering them into forms, and it works for a large percentage of mail servers.

                    1. 3

                      What’s the engine?

                      1. 5

                        I was curious as well from the README.org in git: “Next supports GNU/Linux, macOS, and Guix with engine support for WebKit and WebEngine/Blink.”

                        1. 8

                          I would be tempted to try this, but I really don’t want to contribute to making the WebKit monoculture even worse.

                          1. 10

                            Look I am very vocal about browser monoculture and am a volunteer for Mozilla but I think you should reconsider here. Next browser has a lot going for it and the engine is not where its interesting parts are. The fact that it supports more than one engine makes it easier in the future to port to a non webkit-derived engine. A web with more user agents is always good, specially new browsers like this which are trying something different UX wise.

                            Also, remember that Mozilla doesn’t make it easy for people to build on top of their engine. It is very hard to start a browser today and not go in the webkit/blink path. For example, I wanted a Web View for Racket because I couldn’t find one, I ended up with a mvp of a webkit wrapper. I’d prefer to go with Gecko but couldn’t find how. It is not as if the developer of Next browser is actively supporting a browser monoculture, they are doing what they can and shipping a nice product with the engines that are available today. I think that is great.

                            1. 2

                              Qutebrowser supports more than one engine, and is arguably much more mature than this project.

                              1. 6

                                It is not a competition. You can support Qutebrowser, or this one, or both. The more the merrier. If instead of supporting small independent vendors, we keep pointing fingers shouting $ALTERNATIVE is better then we just end with less browsers.

                                I like Qutebrowser too, and Dillo. We need to support a diverse ecosystem, even if in terms of engines things are looking rather grim.

                                1. 5

                                  then we just end with less browsers

                                  Except we don’t actually get “more browsers” in a meaningful way; we just have the same browser over and over again with different trimmings.

                                  1. 2

                                    Yes you do. Most of the differences are happening outside the engine with different browsers packing different UX, ad-blocking and other features.

                                    I too want more engines but we don’t have more engines to embed. At the moment all the embedable engines are webkit/blink derived. MacOS WKWebView, Windows 10 is getting blink, Linux is mostly around WebKitGTK and QtWebEngine.

                                    Yes, I agree we need more web engines but the web got so complicated that no one can build them from scratch anymore. Unless devs start contributing massively to Mozilla to make Gecko embedable (checkout GeckoView which is an embedable Gecko but as far as the repo goes, there are only samples for Android), we won’t have alternatives.

                                  2. 3

                                    This is far from a ‘diverse’ ecosystem. All of these browsers use webengine or webkit.

                                    1. 1

                                      Diversity is not an absolute, it is a spectrum. It is more diverse to have more user agents even if they use similar engines but are exploring different approaches to the rest of the app than it is to have just three browsers, two of which are webkit/blink. Opera, Brave, are all blink based and some of their innovations are being adopted by other browsers. I’m sure everyone would like more engines but we don’t have them.

                                      Mozilla should throw more weight into making GeckoView work well on the Desktop so that people could build browsers with it, but even without that, more user agents is better.

                                  3. 2

                                    Indeed, and as a former Qutebrowser user myself I can say that it inspired me for many features of Next. Note that Next takes a radically different approach though: it exposes 100% of its (Lisp) code base to the user, open for configuration. The goal is to have something extremely extensible / hackable.

                                    The minibuffer UX of Next is mostly inspired by Emacs Helm / Ivy and that differs quite a lot from Qutebrowser approach.

                                  4. 2

                                    Isn’t servo easier to embed? Why not go with that?

                                    1. 3

                                      Servo is very incomplete.

                                  5. 2

                                    What do you mean? We support 2 engines (and possibly more in the future), there is no monoculture here :p

                                    1. 8

                                      Like the old joke goes: “We play both kinds of music here: country and western.”

                                      1. 3

                                        I don’t get the joke, there are two browser engines, and the chrome here is agnostic of the engine.

                                        1. 8

                                          They’re both just different variants of one Google-backed codebase; it’s still a Google monoculture.

                                          1. 4

                                            Are Google contributions being backported into WebKit? Otherwise, Google hasn’t exerted influence over WebKit since they forked off six years ago, right?

                                            1. 2

                                              I’d say it’s the other way around: Google forked WebKit. WebKitGTK is developed independently. If I understand it right, WebKit has a long history (KHTML) that predates the work of Google.

                                            2. 2

                                              The “chrome”? Did you mean the “core”?

                                              1. 9

                                                Browser chrome usually means browser ui

                                      2. 2

                                        Indeed. For now the PyQtWebengine port needs a bit of finishing but we are working on it. Soon both renderers will be equally usable!

                                    1. 1
                                      • Firefox (with ublock origin, umatrix, privacy badger, https everywhere, vimium)
                                      • urxvt
                                      • weechat-matrix for most chats (matrix, irc, whatsapp, facebook, hangouts, …)
                                      • vim (and some neovim)
                                      • zsh (mostly own customizations, not oh-my-zsh, XDG tweaks https://wiki.archlinux.org/index.php/XDG_Base_Directory#Support )
                                      • tmux
                                      • ssh/mosh
                                      • ansible
                                      • bitwarden (bitwarden_rs on my own server)
                                      • ttrss
                                      • signal
                                      • debian, ubuntu and nixos (moving towards the latter)
                                      • notion wm (what am I going to use with wayland?)
                                      • git
                                      • golang
                                      • ripgrep
                                      • neomutt
                                      • gsuite
                                      1. 1

                                        Ansible, icinga, vim, git, pass, terminator, screen, cinnamon, firefox, debian, claws, wireguard, openvpn, nginx, borg, irssi, dehydrated

                                        1. 1

                                          borg? borgbackup or the google cluster manager?

                                        1. 6

                                          Does it make sense to criticize GitHub for being “centralized”? GitHub is just a single storage location - it’s up to the user whether they host code in multiple locations or treat GitHub as the central repo. What would it mean for GitHub itself to be decentrallized?

                                          And I personally don’t worry about the other concerns, either. I almost always have code I care about duplicated on my personal machines and sr.ht, so I (and others using the code) have access regardless of what happens to GitHub.

                                          Reflecting on it now, I treat GitHub like a specialized hosting service - useful, but easy to replace.

                                          1. 14

                                            Does it make sense to criticize GitHub for being “centralized”? GitHub is just a single storage location

                                            If you only use github for git.. then yes. But I suspect most people/projects use it for issue/task tracking, wiki hosting, CI/CD, and whatever else microsoft has added since I last looked at it.

                                            1. 7

                                              At DragonFly BSD, we usually get these requests to move to GitHub on a relatively frequent basis (we just use it as a mirror for our self-hosted Git repository).

                                              I think the overall issue is that it’s nice to have your contributions centralised, such that you could easily showcase your activity for employment purposes or whatnot. It’d be cool if there was a distributed issue tracking system akin to Git itself.

                                              1. 3

                                                I’ve never used it so I can’t vouch for it’s quality but “Integrated Bug Tracking, Wiki, Forum, and Technotes” is the first bulletpoint on Fossil’s homepage. As I understand it, it’s written by the sqlite people and is basically git with a sqlite db instead of a .git folder.

                                                1. 2

                                                  The problem is, last checked, Fossil has problems with large repositories, some of the OpenBSD people tried to import OpenBSD sources into Fossil, and after a few days of active import process running, gave up.

                                                  Fossil is awesome for small source repo’s, but it apparently doesn’t work very well with larger sources. DragonflyBSD being a derivative of FreeBSD will be even larger than OpenBSD.

                                                  I use fossil for lots of my personal stuff, as it will never reach the sizes of a full OS source.

                                                  1. 2

                                                    Fossil has problems with large repositories

                                                    This is incorrect. At NetBSD, we’ve been using Fossil since mid-2011 for continual export of our CVS repository; in fact, it is the basis for our GitHub mirror — we do the exporting CVS ⇛ Fossil ⇛ Git, and I’m not aware of any issues.

                                                    FWIIW, NetBSD probably has the largest repository out of all the BSDs, so, if we can do it, and OpenBSD can’t, it means they’re probably doing something wrong.

                                                    1. 2

                                                      WOW! thank you for your reply! My source was from upstream of the comment you linked: https://lobste.rs/s/sxpmar/game_trees_version_control_system_under#c_6nwn2k

                                                      So it seems OpenBSD maybe is doing something wrong, or something unique in how they are/were trying to use Fossil.

                                                2. 3

                                                  I appreciate you guys holding out! I would hope the developers who want GitHub are a vocal minority.

                                                  1. 2

                                                    There are some built on top of git. And some projects use mailing lists for issue tracking. But better distributed issue trackers would certainly be welcome.

                                                  2. 3

                                                    My major issue with that (as maintainer of the coreboot repos) is that’s impossible to disable some of GitHub’s features, especially the “Pull Request”. We use github as a read-only mirror as a convenience to folks who ask for it and every now and then I have to close these things and ask people to push their contributions to our own system.

                                                    1. 2

                                                      One of my favorite examples of this is Linus’s kernel mirror on github, hundreds of PRs are filed there and, if you knew anything about kernel development, you’d know that’s not at all what the kernel development workflow is like.

                                                      1. 1

                                                        Sounds like a good reason to not have a GitHub mirror. Everyone on GitHub also has a web browser and can view your code without GitHub just fine.

                                                  1. 2
                                                    1. 8

                                                      If you find yourself writing (or debugging) bash (or sh) you should use shellcheck as well https://www.shellcheck.net/

                                                      1. 3

                                                        Great advice, shellcheck is awesome.

                                                        I always use shellcheck, and all of my bash scripts start with

                                                        #!/bin/bash
                                                        
                                                        set -euo pipefail
                                                        

                                                        Together those two things save me from so much frustration!

                                                        1. 4

                                                          I can’t help but point out that should be #!/usr/bin/env bash. But good work on the set statement. Sorry ;)

                                                          1. 3

                                                            Well, I guess it depends. I mostly write shell scripts for my job as sysadmin, and I prefer to use /bin/bash for those. Not all systems are fully under my control, and /usr/bin/env bash would mean that I’d be at mercy of the PATH variable. Since I know that I have system bash available in /bin/bash I prefer to hardcode that.

                                                            For more portable scripts, or for scripts in other languages, yes, then I’d use /usr/bin/env.

                                                            1. 3

                                                              Another thing I like to do is to fail fast; avoid trying to do error handling unless there’s a good reason to do so. It’s often just as good to just fail hard and log what went wrong.

                                                              I sometimes add a trap for the ERR signal, which causes bash to call the trap function upon exit:

                                                              A trap on ERR, if set, is executed before the shell exits.

                                                              Something like this:

                                                              declare -ri             \
                                                                      EXIT_SUCCESS=0  \
                                                                      EXIT_WARNING=1  \
                                                                      EXIT_CRITICAL=2 \
                                                                      EXIT_UNKNOWN=3
                                                              
                                                              declare -i EXIT=$EXIT_UNKNOWN
                                                              declare STATUS='UNKNOWN - Exit before logic'
                                                              
                                                              function _exit() {
                                                                # Status and quit
                                                                echo "${STATUS}"
                                                                exit $EXIT
                                                              }
                                                              
                                                              trap _exit ERR
                                                              

                                                              This ensures that no matter how the script exits my exit handler function will always get called. The particular snippet above is from an Icinga check I’m writing right now :)

                                                              1. 1

                                                                From my live NixOS system:

                                                                bb010g ~ % file /{,usr/}bin/bash
                                                                /bin/bash:     cannot open `/bin/bash' (No such file or directory)
                                                                /usr/bin/bash: cannot open `/usr/bin/bash' (No such file or directory)
                                                                
                                                                1. 2

                                                                  Yes, which is why I wrote that for more portable scripts I’d use /usr/bin/env ;)

                                                                  (…that does exist, doesn’t it?)

                                                                  I’ve played around with Guix a bit, same thing there. But the systems I manage are neither GuixSD nor NixOS, so my approach works just fine for my purposes.

                                                        1. 2

                                                          This excellent talk brought a YAML realisation to me: https://www.youtube.com/watch?v=O8xLxNje30M

                                                          YAML is not terminated. So when we send it over HTTP, it’s hard to make sure we actually sent the entire content and the connection didn’t get closed midflight.

                                                          1. 7

                                                            CSS and JS files aren’t terminated either. HTTP has a content length header for a reason?

                                                            1. 1

                                                              YAML has document start “—” and document end “…”, but a single file/stream can contain multiple documents.

                                                            1. 4

                                                              The only good config file format is a SQLite database

                                                              1. 7

                                                                With some YAML in it!

                                                                  1. 1

                                                                    How do you feel about a tree of text files, each corresponding to a config key?

                                                                    How many keys are in your config file? 100? 1000? 10,000?

                                                                    Even 10,000 text files in a tree of subdirectories is not that unmanageable.

                                                                    You can store them in a repo, and be able to immediately see what’s changed without even doing a diff.

                                                                    Also one of the most accessible formats as far as tooling.

                                                                    Easy to write GetConfig() and SetConfig() for, and performs well with basic caching (static hash in these functions.)

                                                                    Did I miss anything?

                                                                    Oh yeah, defaults. I have an imperfect solution to defaults that I use in my current project. There is a default/ directory, which contains all the default settings in the same format.

                                                                    Example: default/interface/voting/enable_checkboxes

                                                                    The first time GetConfig() is called on this value, if it is not present in config/interface/voting/enable_checkboxes, the value from default/ is copied over.

                                                                    This also allows me to have a test which checks for orphaned default settings (if they’re present in default/ but not in config/ after test script.)

                                                                      1. 2

                                                                        Hey I first thought you were kidding but that’s pretty much how /proc works on Linux!

                                                                        1. 2

                                                                          DJB config? at least qmail does something similar

                                                                      1. 5

                                                                        maybe unpopular: i can read and write pretty much anything more easy than yaml. especially things which are braced like json or have similar open/close tags like.. apache config?

                                                                        even more unpopular: and i can use tabs for indentation with these formats! the character invented for indenting things! my editor from before i was born can display tabs with a width i like!

                                                                        back to topic: i think a small tcl would be a real good local optimum for configuration files. cf. Tcl the Misunderstood.

                                                                        1. 6

                                                                          Just to be pedantic, weren’t tabs intended for tabulation, rather than code indentation?

                                                                          1. 2

                                                                            TSV best SV.

                                                                            1. 4

                                                                              Let me introduce you to my friends in the ASCII table: 0x1c-0x1f; file, group, record and unit separator. Woefully underused.

                                                                              1. 2

                                                                                Woefully underused.

                                                                                For good reason. They are poorly supported by almost all tooling, and they don’t rigorously solve any additional problems over tabs (or any other delimiter).

                                                                                1. 1

                                                                                  That sounds pretty cool. While not superior to TSV due to tooling, it’s still very nice to have explicit characters toward this end. It would be cool to have something like \fs \gs \rs \us as a way to type them. Even if just supported by a editor extension. I will say, in response to @burntsushi I think they do solve certain problems over tabs, most notably the ability to specify many tables in a file, and many “files” within a file. It also means one could have tabs, whitespace, etcetera without needing to escape it. If I could open up a single document that represents many text files transparently as many text files in my editor, that would be a pretty cool feature. Similarly I do think being able to represent many “sheets” in a csv is also probably very useful. What would this format be called? If it doesn’t already have a name I think “.dsv” is probably not a bad one, I’m also fond of “.gru” or “.gruf” . Sounds like a fun weekend project to make an extension that handles these gracefully, and has a “save as csv/tsv/etc”.

                                                                                  1. 1

                                                                                    It also means one could have tabs, whitespace, etcetera without needing to escape it.

                                                                                    Right, but you then need to escape whatever delimiter you’re using, unless you ban it from being used. That’s kind of what I was getting at.

                                                                                    1. 1

                                                                                      I think the whole idea of file, group, record, unit delimiter characters is as delimiters. The common use of comma and tab as punctuation characters means that we will have to escape them regularly. It’s much easier to ban the use of characters that are unused for any language construct.

                                                                                      1. 1

                                                                                        Yes, I understand the concept behind them. If you can really get away with banning them completely, then sure, they can solve a problem nicely that tabs/commas probably can’t (modulo the fact that tooling sucks for them). But personally, I’d be surprised if you could get away with such a ban. If you have to implement escaping even in some cases, then it pretty much drags everything down with it. Escaping is pretty much the only reason why CSV parsing is as complex as it is, and more than that, tends to put a cap on performance (depending on your parsing architecture).

                                                                                        1. 1

                                                                                          Why would you be surprised if I could “get away with such a ban”. We can do so by edict, and if you can’t handle it then use some other format. If you are storing \fs \gs \rs \us then it’s not the format for you. If you strip out these control codes, then this is indeed the format for you.

                                                                                          It looks like there’s already a precedence for how to type these.

                                                                                          ctrl-\ File
                                                                                          ctrl-] Group
                                                                                          ctrl-^ Record
                                                                                          ctrl-_ Unit
                                                                                          
                                                                                          1. 1

                                                                                            Because we are collectively (including myself) very bad at saying “No,” especially when someone comes to you with a valid use case.

                                                                                            I’m not really interested in discussing this further. Bottom line is if you can get away with that ban, then great. Your point stands. There’s really no point in debating why I personally would be surprised if you could.

                                                                                            1. 1

                                                                                              The statement just sounded like you had an example case in mind. I was hoping you were holding out talking about it because it takes effort to describe. Nebulous fears are valid. Often there are unknowns, I just thought you had something concrete in mind.

                                                                                              1. 1

                                                                                                Ah gotya. Yes, mostly nebulous at this point.

                                                                            1. 7

                                                                              I love LSP for go development but I am really not a fan of having to install JS and dependencies like yarn just to get coc.vim. I much prefer https://github.com/autozimu/LanguageClient-neovim along with some tweaks to get the LSP support. I really need to put my .vimrc up somewhere so I can link to it.

                                                                              1. 3

                                                                                I agree this is a real problem. If I have to pull in the world to run your plugin I’ll pass.

                                                                                1. 1

                                                                                  please do

                                                                                1. 1

                                                                                  Blockchain and GDPR compliance…

                                                                                  1. 6

                                                                                    tldr: everything is a DB entry.

                                                                                    I guess, compared to everything-is-a-file, a DB could be a regulated and formatted way of storing information. Instead of millions of file formats/types, you end up with millions of DB schema. I’m not sure if this is going to help.

                                                                                    1. 7

                                                                                      Didn’t BeOS already do this 20 years ago…?

                                                                                      1. 6

                                                                                        Note this article is from 1996 or earlier. The idea was definitely in the air.

                                                                                        1. 4

                                                                                          It really irks me when documents like this have no dates attached to them.

                                                                                          1. 3

                                                                                            I did not know that. Thanks!

                                                                                            edit: oh wow, that site’s a treasure trove

                                                                                            1. 1

                                                                                              The year should be in the title, really.

                                                                                            2. 4

                                                                                              Haiku has reimplimented it.

                                                                                              It’s a cool idea. It means that many apps become easier. An mp3 player, for example, doesn’t have to keep a precompiled database of parsed mp3 tags, it can instead offload that work to the filesystem (once those tags have been turned into file attributes). It also means you can have it play “all mp3s on the disk”, rather than building lists of music directories, etc. It can be a remarkable toolset for an application developer.

                                                                                              In fact, IIRC, the Haiku addressbook app uses files that have no content, only attributes. The file name is the contact name, and everything else is added through database operations.

                                                                                              1. 1

                                                                                                Even Microsoft took a crack at the idea in the early 00’s.

                                                                                              2. 4

                                                                                                Many mainframe operating systems have record-oriented filesystems. https://en.wikipedia.org/wiki/Record-oriented_filesystem

                                                                                                1. 2

                                                                                                  ls providing a list of files means you don’t have to call with certain flags to get the information you want.

                                                                                                  It also means that you don’t have to make sure every tool includes a “parse input” and “format output” layer, since there’s already some structure (this doesn’t rule it out entirely but it means you can survive without it)

                                                                                                  I bet a lot more people would be OK doing ops work if you could operate with tools at the same level as most development work

                                                                                                1. 3

                                                                                                  For small diagram-like SVGs there is also the final trick of inlining the resulting SVG directly into the page, removing the opportunity for any network delay to creep in at all, and allowing all those small files to share a compression dictionary.

                                                                                                  I found the most effective approach was in the form of a url-encoded (not base64) data: URL, as it meant toggling inlining only involved changing <img src=> attributes, which could be done centrally from a Django template tag, with no other changes in page structure. By using the less efficient URL encoding rather than base64, redundant substrings within each SVG are byte aligned so gzip over the whole page is much more effective, even though the decompressed page is usually much larger

                                                                                                  1. 1

                                                                                                    Http2 server push and multiplexing help with latency even when it’s a separate request

                                                                                                    1. 1

                                                                                                      HTTP/2 push is great, but it requires the alignment of many things stretching across many layers, something like:

                                                                                                      • a separate file or webapp headers to emit hints to the web server
                                                                                                      • a web server to understand the hints
                                                                                                      • all proxies and load balancers to accept and forward them
                                                                                                      • a proxy to own the client and also persist a list of files that have already been pushed to it
                                                                                                      • clients to receive and act on them correctly

                                                                                                      for example with Firefox talking to Apache2, the browser acts completely differently on page refresh than it does for a new cold connection. No reason to avoid it, but some inline strings on a page are vastly easier to avoid messing up

                                                                                                    2. 1

                                                                                                      crazy the things we do to get our page loading just a couple hundred milliseconds faster

                                                                                                      1. 3

                                                                                                        Milliseconds on a frictionless sphere perhaps, but on typical 3G or transcontinental connections the removal of every DNS lookup, SSL connection setup or even a single roundtrip before the browser knows to fetch a file quickly adds up to multiple seconds. Offering a snappy experience isn’t a nice-to-have

                                                                                                    1. 2

                                                                                                      I’m reading:

                                                                                                      • Dreams of My Russian Summers by Andreï Makine. Interesting book about soviet times
                                                                                                      • Red Seas Under Red Skies by Scott Lynch. I really like the Gentleman Bastards series

                                                                                                      Recently finished:

                                                                                                      • The Lies of Locke Lamora by Scott Lynch. The first Gentleman Bastards book
                                                                                                      • The Player of Games by Iain M Banks. Recently started reading Culture series and like it a lot
                                                                                                      • Summerland by Hannu Rajaniemi. It was nice, but I liked his Le Flambeur series better
                                                                                                      • Declare by Tim Powers. Took a while to get up to speed but was nice once in did.
                                                                                                      • The Books of Babel series by Joshiah Bancroft. Really liked this steampunk series
                                                                                                      1. 1

                                                                                                        The Books of Babel series are fantastic (but no spoilers for the Hod King, please, I have it in the pile to read!).