1. 4

    Totally pointless. Cmd + Ctrl + Space is the default key combo to bring up the character palette, you can then search for whatever character you want.

    1. 2

      Oh, wow, I hadn’t realized the Character Viewer (the window opened by that shortcut) had gotten so much easier to use in more recent macOS versions – or did I never notice that top-right button that converts the floating palette into a popup near the cursor?

      Opening the Character Viewer as a palette window keeps keyboard focus in the text field you are in, so it requires a lot of mouse usage to search for and to insert the character you want. I see that after toggling the Character Viewer to the popup mode (the default mode on macOS 10.15), the search field is focused after pressing ⌃⌘Space, the arrow keys select a character, and I can insert the selected character with Return. That’s much more convenient.

      1. 2

        On newer Macs (at least the legend for it, it’s prob available or configurable), it’s just straight up bound to pressing fn.

        1. 2

          Thanks for the comment. I am going to update the article with this information.

          1. 2

            Sounds good. Sorry if I came across as harsh.

        1. 5

          once you learn JS you can do […] video games (Unity)

          Not true. Newer versions of Unity don’t have JavaScript support at all, and even in older versions that did support it, it was a weird non-standard offshoot of JavaScript instead of the kind you see in your browser.

          1. 3

            Seems a bit similar to https://soulver.app/

            1. 3
            1. 2

              So, uh, what does the disown feature do?

              1. 3

                It changes the owner of the comment or story to @inactive-user.

              1. 9

                I wish the staging area didn’t exist. Hidden state that changes by itself is a recipe for accident in any man-machine interface, and in this case, quite unnecessary.

                Wanna track, untrack or restore a file? Now it’s implicitly staged too, yet hidden from git diff, and inconveniently becomes part of the next commit, despite your explicit command to commit something else.

                When I commit something, I want to see what I have (in git diff) first and then commit specific files (or --all or even --patch for parts of files). I never want to use the staging area. Can I turn it off?

                1. 13

                  When I commit something, I want to see what I have (in git diff) first and then commit specific files (or –all or even –patch for parts of files). I never want to use the staging area. Can I turn it off?

                  You can try to adapt your habits and configuration. E.g. you can configure an alias for git add -A && git commit [...] (see https://stackoverflow.com/q/2419249/)

                  I wish the staging area didn’t exist.

                  I like it.

                  It allows for easily splitting the current changes into multiple commits. I often use git add -p to interactively select what should be part of the next commit while keeping everything else around. That can be temporary comments for what I’m going to work on next or just stuff that should be in a separate commit. Sometimes it makes sense to work on a set of changes as one work unit, but structure it differently into review units. To test & commit what is currently staged I can do:

                  git stash save --keep-index
                  git commit -m "Fix foo"
                  git stash pop

                  Even when I want to commit all current changes, I like using git add -p to review them, especially if I have touched multiple files. “Changes in foo.ext? I just did those, stage the whole file (a). Changes in bar.ext? I did those an hour ago, let’s confirm those one by one (y)…”

                  (I also use a lot of aliases, so for me git add -p becomes g ap, git stash save --keep-index is g ss, git diff --patience --cached becomes g dc, and so on)

                  (I would prefer a consistent use of “staging area” and “staged” everywhere.)

                  1. 9

                    Agreed. Mercurial gets along just fine without it and is a much easier to use DVCS system.

                    1. 1

                      I dunno. I’m much more experienced with git; which colours things, but I’ve never got myself into a jam I can’t figure out. I use mercurial for work and I’ve had weird situations I can’t explain where a file content doesn’t match what the commit diff says it should.

                    2. 4

                      Yes, index/stage interactions with diff only comparing the working tree is one of the biggest git footguns. It makes me only stage files until the absolute end before I commit.

                      1. 2

                        You can use --verbose flag to git commit to see the diff and list of files below the commit message (it will not be included in commit message). You can even make it default via git config --global commit.verbose true. This should help with such accidental commits.

                        1. 1

                          … that is the only time one is meant to stage files? Does anyone have a sane workflow that involves running git add but not following soon by git commit?

                          1. 3

                            I stage something (which could be as small as a single line) as soon as I’m happy with it, and commit when I’m happy with the change as a whole. Often I’ll write a rough version of something, stage it, and then rewrite it to be nicer - but with the safety net of being able to easily undo the change if it’s wrong.

                            I guess I could make small commits for this, but then I’d be making tonnes of tiny commits and squashing them before each push, which feels like a lot more work. I like each of my commits to pass tests, but these tiny bits I stage might not even compile.

                            Or I might make one large change, then stage and commit bits of it separately if there are multiple logical changes there.

                            It does help though that I use magit, which makes staging or unstaging things line-by-line in my text editor trivially simple. I certainly wouldn’t want to go back to using git add / git commit / etc in a terminal.

                        2. 4

                          But according to documentation if you will do git commit <pathspec> then it will ignore staging area (named index there):

                          When pathspec is given on the command line, commit the contents of the files that match the pathspec without recording the changes already added to the index.

                          And if you want to be able to review what will be committed, then just use --verbose flag for git commit or set it to be default via git config --global commit.verbose true.

                          1. 2

                            Thanks for explaining, that is good to know! Yes, I’ve noticed commit now obeys what you say, but it wasn’t always like that, and I didn’t know how to trust it, because I hadn’t seen that explanation.

                            I chose to describe the old behaviour, because it deserved mention as a contributing factor in this footgun. I can’t edit my old post anymore, but I can now delete this ingredient in my fear and distrust of the staging area.

                            1. 1

                              Well, it seems that it is there since git 2.0 so it is over 7 years now. So I would say, that unfortunately your post is more FUDy than technical.

                            2. 2

                              You can also use commit -p to commit just part of your current diff and skip the index.

                            3. 3

                              What behavior are you suggesting git add should have? Are you saying this should record file names but not contents so a later commit just includes whatever’s there?

                              1. 8

                                Git add should just git commit --amend to the last dummy commit until you give it a message. Stage is just this weird limbo between being a commit and not.

                                1. 4

                                  git add/rm should not even exist: They need to be atomic with the commit to avoid the limbo state, as you say, and that would make sense if they were options to that command: git commit --add/--rm.

                                  And git checkout <file> should of course not stage files as a side-effect of restoring them.

                                  1. 4

                                    Well, actually stage area is exactly that “dummy commit”… So it has exactly behaviour you want. I agree that git diff behaviour could be different, but with your approach it would behave exactly the same as it is doing right now.

                                    1. 3

                                      You can’t git add some stuff and then switch branches without committing because it’s not a real commit.

                                      1. 1

                                        Well, how would you differentiate between “dummy” and “real” commit then? How would you prevent it from being pushed to remote?

                                        We have git stash that provide similar functionality to what you want.

                                        1. 2

                                          Many good options here:

                                          1. Don’t distinguish at all, if you run git push with changes “staged” they get pushed.
                                          2. Don’t distinguish at all, but don’t update the branch ref until you run the new and more minimal “git commit”. If you try and run git push with changes staged, there is no altered branch to push. (Probably add a new tag along the lines of branchname#staged so you can go back to it)
                                          3. Just add a flag to the commit header, if you feel the need to distinguish (but why?)
                                          1. 1
                                            1. Then how to differentiate in git add whether create new “dummy commit” or “append to existing dummy commit”?
                                            2. As above, but additionally how to detect which commit is the “dummy commit”?
                                            3. How to differentiate between flag and user-entered value in the “dummy commit”?
                                            1. 1
                                              1. “dummy commit” is a sidetrack in my opinion. python -c 'import this' | grep Explicit

                                                git commit --add README.md # Creates a new commit
                                                git commit --amend --add main.c # Adds to the same commit

                                                If you ask me, I’m not talking about changing git add, but rather deprecating it and the whole staging area.

                                              2. Sounds stateful (might defeat the purpose)

                                              3. If you could have multiple “staged” commits on a branch, meaning unpushable, that would solve some real workflow issues, at least for me, like having to count how many commits not to push in order to push one commit (e.g. git push HEAD~42:master). No idea about implementing that flag, though.

                                              1. 1

                                                Ad 1. It is how it works today (well, you do not need --add flag). I love staging area, I really like that concept and I miss it in other tools.

                                              2. 1
                                                1. This changes the workflow to commit then add instead of add then commit. Creating a new commit is still a separate command
                                                2. The dummy commit is head. Committing dummy commit to a real commit probably implicitly creates a new dummy commit in the porcelain.
                                                3. I don’t see the issue. The flag is another metadata field (like signature) distinct by definition…
                                            2. 2

                                              git add amends the current commit if it has no message. If the current commit has a message, it creates a new commit with no message. git add --amend could be the command to edit a commit after its message has been set.

                                              Stash is useful but basically shouldn’t exist as is. That is does is a flaw in git’s model. Instead git stash could just make a nameless commit on the current branch and then set some flag somewhere so that the next “cherry-pick” command will pick up the commit you just made. There can be some list of commits that were stashed that the tool can pick up on.

                                      2. 1

                                        This is the approach I took in git9. It works well for me.

                                        1. 2

                                          How do you manage partial updates? When for example I want to add only some changes and ignore others.

                                          1. 1

                                            I don’t think this is a good workflow. How do you run tests against your partial updates?

                                            1. 2

                                              In many cases I do not need to, as these are for example minor configuration changes to make it work with my environment. In other cases these are minor documentation/comments. In other cases I split my work into separate parts after longer period without commit. In all of these cases I have CI that test my partial updates.

                                              1. 2

                                                Regardless: it’s not supported, and not particularly missed. The staging area adds a bunch of unnecessary state and complexity to both the mental model of the repository, and the implementation.

                                                It’s a feature that I don’t find pulls it’s weight.

                                    1. 2

                                      Is the self-extracting portion of zip files actually machine code? Does that mean that ZIP is an executable file format? Isn’t this awful for portability?

                                      1. 3

                                        Normally ZIP files don’t contain the self-extracting portion, it’s only used when someone wants to build an “installer”, or distribute the ZIP file to someone who might not have a ZIP unpacker.

                                        And yes, most likely the machine code will be only for one OS, but I don’t think that it’s an issue. In case the user tries to unpack the self-extracting ZIP archive on an unsupported OS, it’s normally possible to use a ZIP unpacking application that works on this OS to unpack this self-extracting ZIP archive just as if it would be a normal ZIP archive.

                                      1. 78

                                        It would help if Firefox would actually make a better product that’s not a crappy Chrome clone. The “you need to do something different because [abstract ethical reason X]” doesn’t work with veganism, it doesn’t work with chocolate sourced from dubious sources, it doesn’t work with sweatshop-based clothing, doesn’t work with Free Software, and it sure as hell isn’t going to work here. Okay, some people are going to do it, but not at scale.

                                        Sometimes I think that Mozilla has been infiltrated by Google people to sabotage it. I have no evidence for this, but observed events don’t contradict it either.

                                        1. 24

                                          It would help if Firefox would actually make a better product that’s not a crappy Chrome clone. The “you need to do something different because [abstract ethical reason X]” doesn’t work with veganism, it doesn’t work with chocolate sourced from dubious sources, it doesn’t work with sweatshop-based clothing, doesn’t work with Free Software, and it sure as hell isn’t going to work here. Okay, some people are going to do it, but not at scale.

                                          I agree, but the deck is stacked against Mozilla. They are a relatively small nonprofit largely funded by Google. Structurally, there is no way they can make a product that competes. The problem is simply that there is no institutional counterweight to big tech right now, and the only real solutions are political: antitrust, regulation, maybe creating a publicly-funded institution with a charter to steward the internet in the way Mozilla was supposed to. There’s no solution to the problem merely through better organizational decisions or product design.

                                          1. 49

                                            I don’t really agree; there’s a lot of stuff they could be doing better, like not pushing out updates that change the colour scheme in such a way that it becomes nigh-impossible to see which tab is active. I don’t really care about “how it looks”, but this is just objectively bad. Maybe if you have some 16k super-HD IPS screen with perfect colour reproduction at full brightness in good office conditions it’s fine, but I just have a shitty ThinkPad screen and the sun in my home half the time (you know, like a normal person). It’s darn near invisible for me, and I have near-perfect eyesight (which not everyone has). I spent some time downgrading Firefox to 88 yesterday just for this – which it also doesn’t easily allow, not if you want to keep your profile anyway – because I couldn’t be arsed to muck about with userChrome.css hacks. Why can’t I just change themes? Or why isn’t there just a setting to change the colour?

                                            There’s loads of other things; one small thing I like to do is not have a “x” on tabs to close it. I keep clicking it by accident because I have the motor skills of a 6 year old and it’s rather annoying to keep accidentally closing tabs. It used to be a setting, then it was about:config, then it was a userChrome.css hack, now it’s a userChrome.css hack that you need to explicitly enable in about:config for it to take effect, and in the future I probably need to sacrifice a goat to our Mozilla overlords if I want to change it.

                                            I also keep accidentally bookmarking stuff. I press ^D to close terminal windows and sometimes Firefox is focused and oops, new bookmark for you! Want to configure keybinds for Firefox? Firefox say no; you’re not allowed, mere mortal end user; our keybinds are perfect and work for everyone, there must be something wrong with you if you don’t like it! It’s pretty darn hard to hack around this too – more time than I was willing to spend on it anyway – so I just accepted this annoyance as part of my life 🤷

                                            “But metrics show only 1% of people use this!” Yeah, maybe; but 1% here and 5% there and 2% somewhere else and before you know it you’ve annoyed half (of not more) of your userbase with a bunch of stuff like that. It’s the difference between software that’s tolerable and software that’s a joy to use. Firefox is tolerable, but not a joy. I’m also fairly sure metrics are biased as especially many power users disable it, so while useful, blindly trusting it is probably not a good idea (I keep it enabled for this reason, to give some “power user” feedback too).

                                            Hell, I’m not even a “power user” really; I have maybe 10 tabs open at the most, usually much less (3 right now) and most settings are just the defaults because I don’t really want to spend time mucking about with stuff. I just happen to be a programmer with an interest in UX who cares about a healthy web and knows none of this is hard, just a choice they made.

                                            These are all really simple things; not rocket science. As I mentioned a few days ago, Firefox seems have fallen victim to a mistaken and fallacious mindset in their design.

                                            Currently Firefox sits in a weird limbo that satisfies no one: “power users” (which are not necessarily programmers and the like, loads of people with other jobs interested in computers and/or use computers many hours every day) are annoyed with Firefox because they keep taking away capabilities, and “simple” users are annoyed because quite frankly, Chrome gives a better experience in many ways (this, I do agree, is not an easy problem to solve, but it does work “good enough” for most). And hey, even “simple” users occasionally want to do “difficult” things like change something that doesn’t work well for them.

                                            So sure, while there are some difficult challenges Firefox faces in competing against Google, a lot of it is just simple every-day stuff where they just choose to make what I consider to be a very mediocre product with no real distinguishing features at best. Firefox has an opportunity to differentiate themselves from Chrome by saying “yeah, maybe it’s a bit slower – it’s hard and we’re working on that – but in the meanwhile here’s all this cool stuff you can do with Firefox that you can’t with Chrome!” I don’t think Firefox will ever truly “catch up” to Chrome, and that’s fine, but I do think they can capture and retain a healthy 15%-20% (if not more) with a vision that consists of more than “Chrome is popular, therefore, we need to copy Chrome” and “use us because we’re not Chrome!”

                                            1. 21

                                              Speaking of key bindings, Ctrl + Q is still “quit without any confirmation”. Someone filed a bug requesting this was changeable (not even default changed), that bug is now 20 years old.

                                              It strikes me that this would be a great first issue for a new contributor, except the reason it’s been unfixed for so long is presumably that they don’t want it fixed.

                                              1. 9

                                                A shortcut to quit isn’t a problem, losing user data when you quit is a problem. Safari has this behaviour too, and I quite often hit command-Q and accidentally quit Safari instead of the thing I thought I was quitting (since someone on the OS X 10.8 team decided that the big visual clues differentiating the active window and others was too ugly and removed it). It doesn’t bother me, because when I restart Safari I get back the same windows, in the same positions, with the same tabs, scrolled to the same position, with the same unsaved form data.

                                                I haven’t used Firefox for a while, so I don’t know what happens with Firefox, but if it isn’t in the same position then that’s probably the big thing to fix, since it also impacts experience across any other kind of browser restart (OS reboots, crashes, security updates). If accidentally quitting the browser loses you 5-10 seconds of time, it’s not a problem. If it loses you a load of data then it’s really annoying.

                                                1. 4

                                                  Firefox does this when closing tabs (restoring closed tabs usually restores form content etc.) but not when closing the window.

                                                  The weird thing is that it does actually have a setting to confirm when quitting, it’s just that it only triggers when you have multiple tabs or windows open and not when there’s just one tab 🤷

                                                  1. 1

                                                    The weird thing is that it does actually have a setting to confirm when quitting, it’s just that it only triggers when you have multiple tabs or windows open and not when there’s just one tab

                                                    Does changing browser.tabs.closeWindowWithLastTab in about:config fix that?

                                                    1. 1

                                                      I have it set to false already, I tested it to make sure and it doesn’t make a difference (^W won’t close the tab, as expected, but ^Q with one tab will still just quit).

                                                  2. 2

                                                    I quite often hit command-Q and accidentally quit Safari

                                                    One of the first things I do when setting up a new macOS user for myself is adding alt-command-Q in Preferences → Keyboard → Shortcuts → App Shortcuts for “Quit Safari” in Safari. Saves my sanity every day.

                                                    1. 1

                                                      Does this somehow remove the default ⌘Q binding?

                                                      1. 1

                                                        Yes, it changes the binding on the OS level, so the shortcut hint in the menu bar is updated to show the change

                                                        1. 1

                                                          It overrides it - Safari’s menu shows ⌥⌘Q against “Quit Safari”.

                                                        2. 1

                                                          You can do this in windows for firefox (or any browser) too with an autohotkey script. You can set it up to catch and handle a keypress combination before it reaches any other application. This will be global of course and will disable and ctrl-q hotkey in all your applications, but if you want to get into detail and write a more complex script you can actually check which application has focus and only block the combination for the browser.

                                                        3. 2

                                                          This sounds like something Chrome gets right - if I hit CMD + Q I get a prompt saying “Hold CMD+Q to Quit” which has prevented me from accidentally quitting lots of times. I assumed this was MacOS behaviour, but I just tested Safari and it quit immediately.

                                                        4. 6

                                                          Disabling this shortcut with browser.quitShortcut.disabled works for me, but I agree that bug should be fixed.

                                                          1. 1

                                                            Speaking of key bindings, Ctrl + Q is still “quit without any confirmation”.

                                                            That was fixed a long time ago, at least on Linux. When I press it, a modal says “You are about to close 5 windows with 24 tabs. Tabs in non-private windows will be restored when you restart.” ESC cancels.

                                                            1. 1

                                                              That’s strange. I’m using latest Firefox, from Firefox, on Linux, and I don’t ever get a prompt. Another reply suggested a config tweak to try.

                                                              1. 1

                                                                I had that problem for a while but it went away. I have browser.quitShortcut.disabled as false in about:config. I’m not sure if it’s a default setting or not.

                                                                1. 1


                                                                  It seems that this defaults to false. The fact you have it false, but don’t experience the problem, is counter-intuitive to me. Anyway the other poster’s suggestion was to flip this, so I’ll try that. Thanks!

                                                                  1. 1

                                                                    That does seem backwards. Something else must be overriding it. I’m using Ubuntu 20.04, if that matters. I just found an online answer that mentions the setting.

                                                          2. 7

                                                            On one level, I disagree – I have zero problems with Firefox. My only complaint is that sometimes website that are built to be Chrome-only don’t work sometimes, which isn’t really Firefox’s problem, but the ecosystem’s problem (see my comment above about antitrust, etc). But I will grant you that Firefox’s UX could be better, that there are ways the browser could be improved in general. However, I disagree here:

                                                            retain a healthy 15%-20% (if not more)

                                                            I don’t think this is possible given the amount of resources Firefox has. No matter how much they improve Firefox, there are two things that are beyond their control:

                                                            1. Most users use Google products (gmail, calendar, etc), and without an antitrust case, these features will be seamlessly integrated into Chrome, and not Firefox.
                                                            2. Increasingly, websites are simple not targeting Firefox for support, so normal users who want to say, access online banking, are SOL on Firefox. (This happens to me, I still have to use Chrome for some websites)

                                                            Even the best product managers and engineers could not reverse Firefox’s design. We need a political solution, unless we want the web to become Google Web (tm).

                                                            1. 3

                                                              Why can’t I just change themes?

                                                              You can. The switcher is at the bottom of the Customize Toolbar… view.

                                                              1. 2

                                                                Hm, last time I tried this it didn’t do much of anything other than change the colour of the toolbar to something else or a background picture; but maybe it’s improved now. I’ll have a look next time I try mucking about with 89 again; thanks!

                                                                1. 3

                                                                  You might try the Firefox Colors extension, too. It’s a pretty simple custom theme builder.

                                                                  1. 2

                                                                    https://color.firefox.com/ to save the trouble of searching.

                                                              2. 4

                                                                I agree with Firefox’s approach of choosing mainstream users over power-users - that’s the only way they’ll ever have 10% or more of users. Firefox is doing things with theming that I wish other systems would do - they have full “fresco” themes (images?) in their chrome! It looks awesome! I dream about entire DEs and app suites built from the ground up with the same theme of frescoes (but with an different specific fresco for each specific app, perhaps tailored to that app). Super cool!

                                                                I don’t like the lack of contrast on the current tab, but “give users the choice to fix this very specific issue or not” tends to be extremely shortsighted - the way to fix it is to fix it. Making it optional means yet another maintenance point on an already underfunded system, and doesn’t necessarily even fix the problem for most users!

                                                                More importantly, making ultra-specific optionss like that is usually pushing decisions onto the user as a method of avoiding internal politicking/arguments, and not because pushing to the user is the optimal solution for that specific design aspect.

                                                                1. 2

                                                                  As for the close button, I am like you. You can set browser.tabs.tabClipWidth to 1000. Dunno if it is scheduled to be removed.

                                                                  As for most of the other grips, adding options and features to cater for the needs of a small portion of users has a maintenance cost. Maybe adding the option is only one line, but then a new feature needs to work with the option enabled and disabled. Removing options is just a way to keep the code lean.

                                                                  My favorite example in the distribution world is Debian. Debian supports tries to be the universal OS. We are drowning with having to support everything. For examples, supporting many init systems is more work. People will get to you if there is a bug in the init system you don’t use. You spend time on this. At the end, people not liking systemd are still unhappy and switch to Devuan which supports less init systems. I respect Mozilla to keep a tight ship and maintaining only the features they can support.

                                                                  1. 7

                                                                    Nobody would say anything if their strategy worked. The core issue is that their strategy obviously doesn’t work.

                                                                    adding options and features to cater for the needs of a small portion of users

                                                                    It ’s not even about that.

                                                                    It’s removing things that worked and users liked by pretending that their preferences are invalid. (And every user belongs to some minority that likes a feature others may be unaware of.)

                                                                    See the recent debacle of gradually blowing up UI sizes, while removing options to keep them as they were previously.

                                                                    Somehow the saved cost to support some feature doesn’t seem to free up enough resources to build other things that entice users to stay.

                                                                    All they do with their condescending arrogance on what their perfectly spherical idea of a standard Firefox user needs … is making people’s lives miserable.

                                                                    They fired most of the people that worked on things I was excited about, and it seems all that’s left are some PR managers and completely out-of-touch UX “experts”.

                                                                    1. 4

                                                                      As for most of the other grips, adding options and features to cater for the needs of a small portion of users has a maintenance cost. Maybe adding the option is only one line, but then a new feature needs to work with the option enabled and disabled. Removing options is just a way to keep the code lean.

                                                                      It seems to me that having useful features is more important than having “lean code”, especially if this “lean code” is frustrating your users and making them leave.

                                                                      I know it’s easy to shout stuff from the sidelines, and I’m also aware that there may be complexities I may not be aware of and that I’m mostly ignorant of the exact reasoning behind many decisions (most of us here are really, although I’ve seen a few Mozilla people around), but what I do know is that 1) Firefox as a product has been moving in a certain direction for years, 2) that Firefox has been losing users for years, 3) that I know few people who truly find Firefox an amazing browser that a joy to use, and that in light of that 4) keep doing the same thing you’ve been doing for years is probably not a good idea, and 5) that doing the same thing but doing it harder is probably an even worse idea.

                                                                      I also don’t think that much of this stuff is all that much effort. I am not intimately familiar with the Firefox codebase, but how can a bunch of settings add an insurmountable maintenance burden? These are not “deep” things that reach in to the Gecko engine, just comparatively basic UI stuff. There are tons of projects with a much more complex UI and many more settings.

                                                                      Hell, I’d argue that even removing the RSS was also a mistake – they should have improved it instead, especially after Google Reader’s demise there was a huge missed opportunity there – although it’s a maintenance burden trade-off I can understand it better, it also demonstrates a lack of vision to just say “oh, it’s old crufty code, not used by many (not a surprise, it sucked), so let’s just remove it, people can just install an add-on if they really want it”. This is also a contradiction with Firefox’s mantra of “most people use the defaults, and if it’s not used a lot we can just remove it”. Well, if that’s true then you can ship a browser with hardly any features at all, and since most people will use the defaults they will use a browser without any features.

                                                                      Browsers like Brave and Vivaldi manage to do much of this; Vivaldi has an entire full-blown email client. I’d wager that a significant portion of the people leaving Firefox are actually switching to those browsers, not Chrome as such (but they don’t show up well in stats as they identify as “Chrome”). Mozilla nets $430 million/year; it’s not a true “giant” like Google or Apple, but it’s not small either. Vivaldi has just 55 employees (2021, 35 in 2017); granted, they do less than Mozilla, but it doesn’t require a huge team to do all of this.

                                                                      And every company has limited resources; it’s not like the Chrome team is a bottomless pit of resources either. A number of people in this thread express the “big Google vs. small non-profit Mozilla”-sentiment here, but it doesn’t seem that clear-cut. I can’t readily find a size for the Chrome team on the ‘net, but I checked out the Chromium source code and let some scripts loose on that: there are ~460 Google people with non-trivial commits in 2020, although quite a bit seems to be for ChromeOS and not the browser part strictly speaking, so my guestimate is more 300 people. A large team? Absolutely. But Mozilla’s $430/million a year can match this with ~$1.5m/year per developer. My last company had ~70 devs on much less revenue (~€10m/year). Basically they have the money to spare to match the Chrome dev team person-for-person. Mozilla does more than just Firefox, but they can still afford to let a lot of devs loose on Gecko/Firefox (I didn’t count the number devs for it, as I got some other stuff I want to do this evening as well).

                                                                      It’s all a matter of strategy; history is littered with large or even huge companies that went belly up just because they made products that didn’t fit people’s demands. I fear Firefox will be in the same category. Not today or tomorrow, but in five years? I’m not so sure Firefox will still be around to be honest. I hope I’m wrong.

                                                                      As for your Debian comparison; an init system is a fundamental part of the system; it would be analogous to Firefox supporting different rendering or JS engines. It’s not even close to the same as “an UI to configure key mappings” or “a bunch of settings for stuff you can actually already kind-of do but with hacks that you need to explicitly search for and most users don’t know it exists”, or even a “built-in RSS reader that’s really good and a great replacement for Google Reader”.

                                                                      1. 2

                                                                        I agree with most of what you said. Notably the removal of RSS support. I don’t work for Mozilla and I am not a contributor, so I really can’t answer any of your questions.

                                                                        Another example of maintaining a feature would be Alsa support. It has been removed, this upsets some users, but for me, this is understandable as they don’t want to handle bug reports around this or the code to get in the way of some other features or refactors. Of course, I use Pulseaudio, so I am quite biased.

                                                                        1. 4

                                                                          I think ALSA is a bad example; just use Pulseaudio. It’s long since been the standard, everyone uses it, and this really is an example of “147 people who insist on having an überminimal Linux on Reddit being angry”. It’s the kind of technical detail with no real user-visible changes that almost no one cares about. Lots of effort with basically zero or extremely minimal tangible benefits.

                                                                          And ALSA is a not even a good or easy API to start with. I’m pretty sure that the “ALSA purists” never actually tried to write any ALSA code otherwise they wouldn’t be ALSA purists but ALSA haters, as I’m confident there is not a single person that has programmed with ALSA that is not an ALSA hater to some degree.

                                                                          Pulseaudio was pretty buggy for a while, and its developer’s attitude surrounding some of this didn’t really help, because clearly if tons of people are having issues then all those people are just “doing it wrong” and is certainly not a reason to fix anything, right? There was a time that I had a keybind to pkill pulseaudio && pulseaudio --start because the damn thing just stopped working so often. The Grand Pulseaudio Rollout was messy, buggy, broke a lot of stuff, and absolutely could have been handled better. But all of that was over a decade ago, and it does actually provide value. Most bugs have been fixed years ago, Poettering hasn’t been significantly involved since 2012, yet … people still hold an irrational hatred towards it 🤷

                                                                          1. 1

                                                                            ALSA sucks, but PulseAudio is so much worse. It still doesn’t even actually work outside the bare basics. Firefox forced me to put PA on and since then, my mic randomly spews noise and sound between programs running as different user ids is just awful. (I temporarily had that working better though some config changes, then a PA update - hoping to fix the mic bug - broke this… and didn’t fix the mic bug…)

                                                                            I don’t understand why any program would use the PA api instead of the alsa ones. All my alsa programs (including several I’ve made my own btw, I love it whenever some internet commentator insists I don’t exist) work equally as well as pulse programs on the PA system… but also work fine on systems where audio actually works well (aka alsa systems). Using the pulse api seems to be nothing but negatives.

                                                                    2. 1

                                                                      Not sure if this will help you but I absolutely cannot STAND the default Firefox theme so I use this: https://github.com/ideaweb/firefox-safari-style

                                                                      I stick with Firefox over Safari purely because it’s devtools are 100x better.

                                                                    3. 10

                                                                      There’s also the fact that web browsers are simply too big to reimplement at this point. The best Mozilla can do (barely) is try to keep up with the Google-controlled Web Platform specs, and try to collude with Apple to keep the worst of the worst from being formally standardized (though Chrome will implement them anyway). Their ability to do even that was severely impacted by their layoffs last year. At some point, Apple is going to fold and rebase Safari on Chromium, because maintaining their own browser engine is too unprofitable.

                                                                      At this point, we need to admit that the web belongs to Google, and use it only to render unto Google what is Google’s. Our own traffic should be on other protocols.

                                                                      1. 8

                                                                        For a scrappy nonprofit they don’t seem to have any issues paying their executives millions of dollars.

                                                                        1. 1

                                                                          I mean, I don’t disagree, but we’re still talking several orders of magnitude less compensation than Google’s execs.

                                                                          1. 5

                                                                            A shit sandwich is a shit sandwich, no matter how low the shit content is.

                                                                            (And no, no one is holding a gun to Mozilla’s head forcing them to hire in high-CoL/low-productivity places.)

                                                                        2. 1

                                                                          Product design can’t fix any of these problems because nobody is paying for the product. The more successful it is, the more it costs Mozilla. The only way to pay the rent with free-product-volume is adtech, which means spam and spying.

                                                                          1. 4

                                                                            Exactly why I think the problem requires a political solution.

                                                                        3. 8

                                                                          I don’t agree this is a vague ethical reason. Problem with those are concerns like deforestation (and destruction of habitats for smaller animals) to ship almond milk across the globe, and sewing as an alternative to poverty and prostitution, etc.

                                                                          The browser privacy question is very quantifiable and concrete, the source is in the code, making it a concrete ethical-or-such choice.

                                                                          ISTR there even being a study or two where people were asked about willingness to being spied upon, people who had no idea their phones were doing what was asked about, and being disconcerted after the fact. That’s also a concrete way to raise awareness.

                                                                          At the end of the day none of this may matter if people sign away their rights willingly in favor of a “better” search-result filter bubble.

                                                                          1. 11

                                                                            I don’t think they’re vague (not the word I used) but rather abstract; maybe that’s no the best word either but what I mean with it is that it’s a “far from my bed show” as we would say in Dutch. Doing $something_better on these topics has zero or very few immediate tangible benefits, but rather more abstract long-term benefits. And in addition it’s also really hard to feel that you’re really making a difference as a single individual. I agree with you that these are important topics, it’s just that this type of argument is simply not all that effective at really making a meaningful impact. Perhaps it should be, but it’s not, and exactly because it’s important we need to be pragmatic about the best strategy.

                                                                            And if you’re given the choice between “cheaper (or better) option X” vs. “more expensive (or inferior) option Y with abstract benefits but no immediate ones”, then I can’t really blame everyone for choosing X either. Life is short, lots of stuff that’s important, and can’t expect everyone to always go out of their way to “do the right thing”, if you can even figure out what the “right thing” is (which is not always easy or black/white).

                                                                            1. 1

                                                                              My brain somehow auto-conflated the two, sorry!

                                                                              I think we agree that the reasoning in these is inoptimal either way.

                                                                              Personally I wish these articles weren’t so academic, and maybe not in somewhat niche media, but instead mainstream publications would run “Studies show people do not like to be spied upon yet they are - see the shocking results” clickbaity stuff.

                                                                              At least it wouldn’t hurt for a change.

                                                                              1. 1

                                                                                It probably wasn’t super-clear what exactly was intended with that in the first place so easy enough of a mistake to make 😅

                                                                                As for articles, I’ve seen a bunch of them in mainstream Dutch newspapers in the last two years or so; so there is some amount of attention being given to this. But as I expended on in my other lengthier comment, I think the first step really ought to be making a better product. Not only is this by far the easiest to do and within our (the community’s) power to do, I strongly suspect it may actually be enough, or at least go a long way.

                                                                                It’s like investing in public transport is better than shaming people for having a car, or affordable meat alternatives is a better alternative than shaming people for eating meat, etc.

                                                                          2. 7

                                                                            I agree to an extent. Firefox would do well to focus on the user experience front.

                                                                            I switched to Firefox way back in the day, not because of vague concerns about the Microsoft hegemony, or even concerns about web standards and how well each browser implemented them. I switched because they introduced the absolutely groundbreaking feature that is tabbed browsing, which gave a strictly better user experience.

                                                                            I later switched to Chrome when it became obvious that it was beating Firefox in terms of performance, which is also a factor in user experience.

                                                                            What about these days? Firefox has mostly caught up to Chrome on the performance point. But you know what’s been the best user experience improvement I’ve seen lately? Chrome’s tab groups feature. It’s a really simple idea, but it’s significantly improved the way I manage my browser, given that I tend to have a huge number of tabs open.

                                                                            These are the kinds of improvements that I’d like to see Firefox creating, in order to lure people back. You can’t guilt me into trying a new browser, you have to tempt me.

                                                                            1. 10

                                                                              But you know what’s been the best user experience improvement I’ve seen lately? Chrome’s tab groups feature. It’s a really simple idea, but it’s significantly improved the way I manage my browser, given that I tend to have a huge number of tabs open.

                                                                              Opera had this over ten years ago (“tab stacking”, added in Opera 11 in 2010). Pretty useful indeed, even with just a limited number of tabs. It even worked better than Chrome groups IMO. Firefox almost-kind-of has this with container tabs, which are a nice feature actually (even though I don’t use it myself), and with a few UX enhancements on that you’ve got tab groups/stacking.

                                                                              Opera also introduced tabbed browsing by the way (in 2000 with Opera 4, about two years before Mozilla added it in Phoenix, which later became Firefox). Opera was consistently way ahead of the curve on a lot of things. A big reason it never took off was because for a long time you had to pay for it (until 2005), and after that it suffered from “oh, I don’t want to pay for it”-reputation for years. It also suffered from sites not working; this often (not always) wasn’t even Opera’s fault as frequently this was just a stupid pointless “check” on the website’s part, but those were popular in those days to tell people to not use IE6 and many of them were poor and would either outright block Opera or display a scary message. And being a closed-source proprietary product also meant it never got the love from the FS/OSS crowd and the inertia that gives (not necessarily a huge inertia, but still).

                                                                              So Firefox took the world by storm in the IE6 days because it was free and clearly much better than IE6, and when Opera finally made it free years later it was too late to catch up. I suppose the lesson here is that “a good product” isn’t everything or a guarantee for success, otherwise we’d all be using Opera (Presto) now, but it certainly makes it a hell of a lot easier to achieve success.

                                                                              Opera had a lot of great stuff. I miss Opera 😢 Vivaldi is close (and built by former Opera devs) but for some reason it’s always pretty slow on my system.

                                                                              1. 1

                                                                                This is fair and I did remember Opera being ahead of the curve on some things. I don’t remember why I didn’t use it, but it being paid is probably why.

                                                                                1. 1

                                                                                  I agree, I loved the Presto-era Opera and I still use the Blink version as my main browser (and Opera Mobile on Android). It’s still much better than Chrome UX-wise.

                                                                                2. 4

                                                                                  I haven’t used tab groups, but it looks pretty similar to Firefox Containers which was introduced ~4 years ahead of that blog post. I’ll grant that the Chrome version is built-in and looks much more polished and general purpose than the container extension, so the example is still valid.

                                                                                  I just wanted to bring this up because I see many accusations of Firefox copying Chrome, but I never see the reverse being called out. I think that’s partly because Chrome has the resources to take Mozilla’s ideas and beat them to market on it.

                                                                                  Disclaimer: I’m a Mozilla employee

                                                                                3. 4

                                                                                  One challenge for people making this kind of argument is that predictions of online-privacy doom and danger often don’t match people’s lived experiences. I’ve been using Google’s sites and products for over 20 years and have yet to observe any real harm coming to me as a result of Google tracking me. I think my experience is typical: it is an occasional minor annoyance to see repetitive ads for something I just bought, and… that’s about the extent of it.

                                                                                  A lot of privacy advocacy seems to assume that readers/listeners believe it’s an inherently harmful thing for a company to have information about them in a database somewhere. I believe privacy advocates generally believe that, but if they want people to listen to arguments that use that assumption as a starting point, they need to do a much better job offering non-circular arguments about why it’s bad.

                                                                                  1. 4

                                                                                    I think it has been a mistake to focus on loss of privacy as the primary data collection harm. To me the bigger issue is that it gives data collectors power over the creators of the data and society as a whole, and drives destabilizing trends like political polarization and economic inequality. In some ways this is a harder sell because people are brainwashed to care only about issues that affect them personally and to respond with individualized acts.

                                                                                    1. 4

                                                                                      There is no brainwashing needed for people to act like people.

                                                                                      1. 1

                                                                                        do you disagree with something in my comment?

                                                                                        1. 3

                                                                                          In some ways this is a harder sell because people are brainwashed to care only about issues that affect them personally and to respond with individualized acts.

                                                                                          I’m not @halfmanhalfdonut but I don’t think that brainwashing is needed to get humans to behave like this. This is just how humans behave.

                                                                                          1. 2

                                                                                            Yep, this is what I was saying.

                                                                                            1. 1

                                                                                              things like individualism, solidarity, and collaboration exist on a spectrum, and everybody exhibits each to some degree. so saying humans just are individualistic is tautological, meaningless. everyone has some individualism in them regardless of their upbringing, and that doesn’t contradict anything in my original comment. that’s why I asked if there was some disagreement.

                                                                                              to really spell it out, modern mass media and culture condition people to be more individualistic than they otherwise would be. that makes it harder to make an appeal to solidarity and collaboration.


                                                                                              1. 1

                                                                                                I think you’re only seeing the negative side (to you) of modern mass media and culture. Our media and culture also promote unity, tolerance, respect, acceptance, etc. You’re ignoring that so that you can complain about Google influencing media, but the reality is that the way you are comes from those same systems of conditioning.

                                                                                                The fact that you even know anything about income inequality and political polarization are entirely FROM the media. People on the whole are not as politically divided as media has you believe.

                                                                                                1. 1

                                                                                                  sure, I only mentioned this particular negative aspect because it was relevant to the point I was making in my original comment

                                                                                                2. 1

                                                                                                  to really spell it out, modern mass media and culture condition people to be more individualistic than they otherwise would be. that makes it harder to make an appeal to solidarity and collaboration.

                                                                                                  I think we’re going to have to agree to disagree. I can make a complicated rebuttal here, but it’s off-topic for the site, so cheers!

                                                                                                  1. 1


                                                                                    2. 3

                                                                                      I agree with everything you’ve written in this thread, especially when it comes to the abstractness of pro-Firefox arguments as of late. Judging from the votes it seems I am not alone. It is sad to see Mozilla lose the favor of what used to be its biggest proponents, the “power” users. I truly believe they are digging their own grave – faster and faster it seems, too. It’s unbelievable how little they seem to be able to just back down and admit they were wrong about an idea, if only for a single time.

                                                                                      1. 2

                                                                                        Firefox does have many features that Chrome doesn’t have: container tabs, tree style tabs, better privacy and ad-blocking capabilities, some useful dev tools that I don’t think Chrome has (multi-line JS and CSS editors, fonts), isolated profiles, better control over the home screen, reader mode, userChrome.css, etc.

                                                                                      1. 7

                                                                                        I’ve always used whatismyip.[org|com] for my personal little things and I never knew about this site, and it has billions of requests per day. That’s quite insane.

                                                                                        1. 5

                                                                                          That’s likely because unlike whatismyip, this webpage (if you can call it that) is far more machine-readable. Whatismyip serves up a big, nicely-formatted, human-readable HTML page that happens to have your IP address somewhere inside it. Icanhazip serves a text string containing your IP address, that’s it.

                                                                                          It’s not surprising that this site ended up being attractive for botnets, malware, and irresponsibly-built software that needed to check the IP address of a machine.

                                                                                          EDIT: I see that whatismyip has an API, but it looks like you have to pay for it, which obviously makes it less attractive.

                                                                                          1. 2

                                                                                            As the author mentioned, I wonder how many of these requests are from automation (i.e. some script written by a “devop” to manage their server or a malware bot)

                                                                                          1. 3

                                                                                            Not surprising that this happened on an Adreno chip. In my experience doing mobile graphics, their drivers have been where I’ve seen the most problems, especially with their shader compiler. I’ve seen it give weird behaviour on perfectly valid (if slightly unusual) shader code before, that worked perfectly on every other GPU I tested.

                                                                                              1. 23

                                                                                                It sounds like the iPhone Timer isn’t displaying a fake time. It is just showing the rounded time. And the author tried to replicate this, oddly, by adding 500ms then rounding down. Am I missing something?

                                                                                                1. 3

                                                                                                  Yeah. I remember this from programming in BASIC on the Apple ][ as a teenager. There was no round-to-nearest function, so instead you did INT(X+0.5).

                                                                                                  Wasn’t expecting to see something this, uh, basic (sic) as the top post here! Slow news day?

                                                                                                  1. 4

                                                                                                    Yes, It’s startling to me that someone who clearly has years of developer experience under his belt could be surprised by this. Back when we started, rounding was trivial. Making user interfaces and network servers was something out of science fiction. I guess it’s the other way around now.

                                                                                                  2. 3

                                                                                                    No, you’re not. It feels like the author is looking at this and assuming it was some carefully vetted design decision, when it was likely just some programmer that, in the spur of the moment, decided to use Math.round instead of Math.floor (although IMO Math.ceil would be better than either).

                                                                                                    1. 14

                                                                                                      It’s probably intentional rounding rather than “adding half a second,” but I believe it’s a deliberate design choice. Here is a nearby clue:

                                                                                                      As the author said, if you pause with “00:00” on the timer, it will show “00:01” because there is some time left, and “00:00” would look like there is no time left. However, in some brief testing, this adjustment-on-pause did not happen at any other time that I paused except “00:00”. And on resume, the remaining duration was the fractional second, so it is specifically the displayed value that’s changed, not the underlying timer. I don’t believe this behavior would result from an accident.

                                                                                                      1. 1

                                                                                                        This is fair.

                                                                                                      2. 2

                                                                                                        The Google clock app seems to take the ceiling approach as well.

                                                                                                    1. 3

                                                                                                      We started decompling our object files and going over the symbols line by line to identify why our Swift code size was so much larger. We deleted unused features. Tyler had to rewrite the watchOS app back into objc. - https://twitter.com/StanTwinB/status/1336935373696462848

                                                                                                      Deleting features because your code size is too big seems like an antiquated problem and I’m surprised to see a problem like this appear in a modern language that is only a few years old. I don’t know enough about iOS development to tell if Uber was doing anything wrong to cause this. Is this a Swift problem?

                                                                                                      1. 4

                                                                                                        If I had to guess: they probably have client-side A/B tests (or other such things) that are controlled by a server-side config. This means the implementation for both sides of the A/B test are included in the binary.

                                                                                                        If they decided to end the A/B test and roll one side out to 100% of users… they don’t strictly need to get rid of the code for the other side. It’s a lower-priority cleanup task, the kind that can easily fall by the wayside, at least until something like this makes it more urgent.

                                                                                                        But because it’s controlled by a server-side config, the compiler and toolchain can’t actually tell whether that code is unused, because the only thing controlling it is something like

                                                                                                        if (serverSideConfig.useNewThing) {
                                                                                                        } else {

                                                                                                        As far as the compiler is concerned, doOldThing() is still referenced and “used” even if the server-side always sets useNewThing for everyone.

                                                                                                      1. 9

                                                                                                        I would love to read a thread where someone explains why the app is so gigantic to begin with. It does not do a whole lot, so what is all this code doing?

                                                                                                        1. 19

                                                                                                          The author explains this in a reply here: https://mobile.twitter.com/StanTwinB/status/1337055778256130062

                                                                                                          The app looks simple from the user perspective. But on the global scale the business rules are insanely complicated. Every region has custom rules/regulations. Different products have different workflows. Some regions have cash payments. Every airport has different pick rules…

                                                                                                          See also the people replying to that discussion, they talk about how unreliable networking means they can’t do this stuff on the backend.

                                                                                                          1. 3

                                                                                                            they talk about how unreliable networking means they can’t do this stuff on the backend.

                                                                                                            Uber is infamous for having over 9000 microservices. They even had to “re-invent” distributed tracing, because NIH syndrome or something (Jaeger, now open-tracing). I really, really doubt they do it all on the client. They have to make sure the transaction is captured anyway and without network, how can you even inform drivers?

                                                                                                            1. 4

                                                                                                              Presumably they verify everything on the backend anyway because you can’t trust the client. My guess is that the network is reliable enough to submit a new trip, but not reliable enough to make every aspect of the UI call out to the backend. Imagine opening the app, waiting for it to locate you, then waiting again while the app calls out to the network to assess regulations for where you are. Same thing picking a destination. That latency adds up, especially perceptually.

                                                                                                          2. 12

                                                                                                            Yeah that’s the part that gets me, it’s like the dril tweets about refusing to spend less on candles. Just write less code! Don’t make your app the Homer Simpson car! What is the 1mb/week of new shit your app does good for anyways? It’s easy, just play Doom instead of typing in Xcode.

                                                                                                            I don’t have hypergrowth mentality though, I guess that’s why Uber rakes in all the profits.

                                                                                                            1. 6

                                                                                                              I guess that’s why Uber rakes in all the venture capital dollars to subsidize their product

                                                                                                              Fixed it for ya ;-)

                                                                                                              1. 1

                                                                                                                I would love to see Chuck Moore’s (RIP) take on 1 MB/week. He might just have a seizure.

                                                                                                                1. 5

                                                                                                                  Thankfully, Chuck Moore is alive.

                                                                                                                  1. 6

                                                                                                                    Ah, man, well I have egg on my face. I feel quite silly. I’m going to slink into a corner somewhere.

                                                                                                              2. 5

                                                                                                                I recall a few years ago someone disassembled Facebook’s (I think) Android app and found it had some stupendously huge number of classes in it. Which led to a joke about “I guess that’s why their interviews make you implement binary trees and everything else from scratch, every developer there is required to build their own personal implementation every time they work on something”.

                                                                                                                Which is cynical, but probably not too far off the mark – large organizations tend to be terrible at standardizing on a single implementation of certain things, and instead every department/team/project builds their own that’s done just the way they want it, and when the end product is a single executable, you can see it in the size.

                                                                                                                1. 4

                                                                                                                  I wonder if there could also be some exponential copy-paste going on, where instead of refactoring some existing module to be more general so it satisfies your need, you copy-paste the files and change the bits you need. Then somebody else comes along and does the same to the package that contains both your changed copy and the original package, so there are now 4 copies of that code. The cancerous death of poorly managed software projects.

                                                                                                                  1. 2

                                                                                                                    Scary… and probably very true.

                                                                                                              1. 17

                                                                                                                I remember seeing this project and commenting on it a while ago. Looking at the new stuff, I think there’s good and bad here.

                                                                                                                The good: the FAQ on the site better explains the project and its usefulness than basically any resource you’ve written on the subject thus far. It’s helped me see the appeal of a strictly minimalist syntax that you can build more complicated syntaxes out of.

                                                                                                                (If I may add a question to the FAQ: how are you supposed to encode literal spaces or newlines?)

                                                                                                                The bad: you are still trying to punch way above your weight class with this annual report, and I don’t think you’re successful at it. This has been a problem since the first time I’ve seen this project: you’re making grand proclamations about how this could do things like revolutionize things as complex and fuzzy as law and scientific discovery, but you haven’t earned any of that yet, because you haven’t convinced me that it’s possible to do such a thing.

                                                                                                                Honestly, I think you’d be better off as selling this as an alternative minimal notation for computer-based languages, as an alternative to things like JSON, YAML, HTML, and programming-language syntax, working through actual practical implementations of this, and seeing whether you come up short. For example: you could make a tree-notation-to-HTML compiler and build the Tree Notation website with it. That would give you some real-world experience as to whether it’s useful for this kind of use case, and what pitfalls and tradeoffs there might be in adopting it.

                                                                                                                I suspected maybe you’d already done this, but looking briefly into it, it appears you haven’t, and most of the things you link to are either toy examples, which are too small for any of the flaws with real-world use of Tree Notation to come up, or they’re Ohayo, which (put bluntly) no one but you seems to use or pay attention to.

                                                                                                                I’d encourage you to go through some exercises like this in order to help bring it to relevance for a broader audience. My prediction is that you’ll find that it’ll probably end up being a bit too simplistic for everyday use. You compare it to binary, but we haven’t written programs in raw binary since punch cards fell out of fashion, because more complex languages have power and succinctness that more low-level representations do not.

                                                                                                                In fact, it’s useful to have heterogeneous syntaxes sometimes. If nothing else, it lets me differentiate between C, Lisp, JSON, and CSS at a glance without having to read the code too deeply. And I believe that, at least for professionals, syntax is not a big barrier to productivity or power, and having a simple, low-level, unified syntax is not enough of a clear benefit to cause people to abandon the tools they’ve been using for years or decades. And if the big argument that you have is that this will help with interoperability, then XKCD makes the argument better than I ever could.

                                                                                                                The point I’m getting at: you haven’t even convinced me that this is useful for the computer-syntax-based applications I’m talking about, and you’re already trying to talk me into how this is going to revolutionize things like law and science. The gap there is way bigger than e.g. replacing JSON, because things like law and science are optimized for human interpretation rather than the rigid interpretation of machines.

                                                                                                                So again: you are trying to punch way above your weight class and I don’t think you’re successful at it. I think you need to bring your ambitions down to earth, at least for a while, and make the whole thing useful before anyone will take the project seriously as anything more than one individual’s passion project.

                                                                                                                1. 4

                                                                                                                  This is a beautiful criticism. I hope to receive such criticism on one of my projects once they are ready to be posted here.

                                                                                                                  1. 3

                                                                                                                    how are you supposed to encode literal spaces or newlines?)

                                                                                                                    No need to “encode them”. TreeNotation(string).toString() === string, always. There is no escape character or need for one. This was really surprising to me years ago, but it works.

                                                                                                                     This paragraph
                                                                                                                     has a blank line above. Note that the line above starts with a space.

                                                                                                                    That being said, this does come at the cost that higher level Tree Languages have to make decisions to avoid ambiguities. I’ve got languages that implement many different strategies depending upon the domain at hand and what feels natural. So some languages will parse error nodes for blank lines, others may keep them as is, others may collapse them to 1 in a “prettify” step. But at the Tree Notation level new lines and spaces are always parsed and kept.

                                                                                                                    The spaces and newlines are also variables. This year I’ve been using tabs more as the Edge+Cell delimiter, purely to get the “tri-morphism” editing experience of programmatic, IDE, and spreadsheet capabilities out of the gate.

                                                                                                                    The bad: you are still trying to punch way above your weight class with this annual report, and I don’t think you’re successful at it.

                                                                                                                    I don’t disagree with you, I would just say I have a very long time horizon here. I’m pretty sure this is all right, and at some point the sparks from my work will collide with the kindling of some great builders who will take it to new heights OR that there is a fatal flaw that I’m still not seeing and that dooms this notation OR there is an even better thing out that will make this seem irrelevant. But the math tells me that it’s simpler than everything else and there will be strong network effects and so it should takeover at some point and be really big. I can’t do both—be mathematical about it AND not believe that it will be big. Hence I’m kind of doomed to “punch above my weight class” unless I see some better math. I think some of the stuff done in 2020 (not covered in this post), is pretty neat and exciting. We’ll see.

                                                                                                                    and make the whole thing useful

                                                                                                                    Totally agree. It’s just not that good yet. Still learning how to wield it.

                                                                                                                    1. 4

                                                                                                                      at some point the sparks from my work will collide with the kindling of some great builders who will take it to new heights OR that there is a fatal flaw that I’m still not seeing and that dooms this notation OR there is an even better thing out that will make this seem irrelevant.

                                                                                                                      You established a similar scenario in your report, but I fear that the most likely alternative that you haven’t considered is a fourth option. And I think it’s that option which @Kronopath is trying to warn you about.

                                                                                                                      I think the most likely outcome of this, as with pretty much any personal project of a smart technical maker who isn’t explicitly approaching things from a commercial standpoint, is that it is marketed poorly to anybody who would be able to do any of the above for you, and dies on the vine. The assumption you seem to be making—and I would understand why, as I’d probably make the same one—is that if you keep following your own nose on this, and diligently applying research in roughly the pattern you’ve been applying it, someone will bump into what you’ve come up with and have a productive response.

                                                                                                                      But the reality of other people is otherwise. Maybe subtlely so, but otherwise. The vast, vast majority of people who could potentially confirm your hypothesis, or satisfactorily refute it, or show you the superior artifact you wonder about, will not be prompted to do so simply by coming into contact with your work. Odds are, of course, that they won’t come into contact with it; that’s why, if you engage in canny marketing and suchlike, you’ll make it more likely that they do, because people will share around your articles. So, for instance, an exercise where you provide a robust implementation of a website in tree notation and document it and share the code might be useful for that sort of thing.

                                                                                                                      But of course, even if your potential collaborator does touch upon the work that you’re doing, your sparks and their kindling are quite unlikely to make a fire. Fires require careful attention and massive amounts of energy delicately injected into the system at key, early junctures. You gotta blow on ’em. So simply presenting your thought in a rather obscure way, where the bulk of your focus is clearly on the widest and hardest-to-fathom ramifications of your research, means that it is least likely to ignite the interest of someone coming to it entirely cold (ok, fire analogy over). Even someone who, by temperament and talent, is best-suited to contribute to your project will, by virtue of having their own momentum and own interests that by definition do not yet include Tree Notation, need to be enticed into your sphere of thought, and introduced step-by-step to the widest ramifications of what it can do with a solid and self-reinforcing curriculum of work that is interesting and complete unto itself.

                                                                                                                      1. 1

                                                                                                                        I get it, but I spend ~1% of my time on marketing posts like these, and ~99% of my time building things using these ideas and collaborating with other people on these ideas. These posts and feedback that I get are really valuable checkins, but I don’t expect Tree Notation to catch on until, as the saying goes, it goes from “possible” to “it just works”. Takes a lot of effort and resources, and I am happy to do it slower if it means I can do it all public domain. I don’t so much care how long it takes, as long as growth is good it feels like things are going in the right direction. Each year number of users of various things has grown by > 10x. So while not a roaring fire yet, it is building.

                                                                                                                        There are many websites heavily utilizing Tree Notation (here’s one demo: https://jtree.treenotation.org/treeComponentFramework/sweepercraft press “d” to see the TN), but I do agree a slow step by step tutorial could go a long way. Started one here the other day: https://github.com/treenotation/thebook

                                                                                                                  1. 4

                                                                                                                    I never had much respect for alarmism. We’ve had it, in regard to climate, for decades, and I only too well remember Al Gore warning us in 2008 of an ice-free Arctic by 2013, just to give one of many examples. Greta Thunberg is the next up-and-coming generation of climate alarmists and given we do in fact have a global warming, the human factor is yet to be assessed (consider we are easing out of a small ice-age that just, out of chance, had its lowest point in the mid 1800’s when humans started measuring temperatures systematically).

                                                                                                                    However, I still wholeheartedly support renewable energy and resource savings, because we live on a finite planet with finite resources. We should do anything to save resources and energy, but not fall in panic over it or embrace ridiculous measures that are not sustainable in the long term. Maybe it’s needed to push the majority of people, but as a rational person I feel insulted by this.

                                                                                                                    Measuring everything in “CO2 emissions” is valid, but for a different reason, in my opinion, than to mitigate the effects on the atmosphere: The carbon we emit comes from fossil fuels, which are one finite resource I think should not be “wasted”. Given “CO2 emissions” directly correlate with carbon-based fuel-consumption, it may be a bit mislabeled, but generally valid.

                                                                                                                    In terms of web development: Stop bloating your websites with too much CSS, JavaScript and excessive markup and reduce the transferred weight, but don’t panic over it or say that a website is “killing the planet”. This is an industry-wide problem and needs to be solved at scale. When this doesn’t change, your website won’t make much of a difference compared to the few major players.

                                                                                                                    1. 16

                                                                                                                      the human factor is yet to be assessed

                                                                                                                      I thought that in 2020 it is a common knowledge that humans are without a doubt responsible for global climate crisis. And temperatures are measured also by other means than direct ones. That includes geological ones.

                                                                                                                      1. 3

                                                                                                                        Indeed only a fool would say that we humans, who affect the planet in so many profound ways, have no influence on the climate. The question is: How much? An everlasting ethos, in my opinion, is resource-saving, but it needs to be balanced so we don’t throw away what we’ve achieved as a species.

                                                                                                                        1. 11

                                                                                                                          What is missing in this analysis by Carbon Brief? Most of the current natural phenomena actually contribute to global cooldown and work in our favour. Humanity carbon footprint managed to beat even that.

                                                                                                                          1. 4

                                                                                                                            Climate is extremely complex, and one can’t really predict most things. I may bring out a strawman here, but how can we be so certain about centennial climate predictions (2°C-goal until 2100, for instance) when our sophisticated climate models can’t even accurately predict next week’s weather?

                                                                                                                            But as I said in my first comment, my biggest problem is the alarmism and I’m not even denying the human influence on world climate. So I’m actually on your side and demanding the same things, only with a different viewpoint.

                                                                                                                            1. 9

                                                                                                                              how can we be so certain about centennial climate predictions (2°C-goal until 2100, for instance) when our sophisticated climate models can’t even accurately predict next week’s weather?

                                                                                                                              Because weather and climate are not the same. We can’t model turbulent flow in fluid systems, but we can predict when they change from laminar to turbulent on a piece of paper. We can’t model how chemical reactions actually work at an atomic level, but whether or not they should take place is another simple calculation. We can’t model daily changes in the stock market, but long-term finance trends are at least vaguely approachable.

                                                                                                                              1. 16

                                                                                                                                I’m not even denying the human influence on world climate.

                                                                                                                                you said, “the human factor is yet to be assessed,” when it has been assessed again and again by many well-funded organizations. that’s denial, bucko

                                                                                                                                1. 1

                                                                                                                                  No, it’s not denial and science is not a religion. Assessment means studying an effect, and I still do not think that the foregone conclusion of 100% human influence is substantial. It’s less than that, but not 0%, which would make me a denier.

                                                                                                                                  1. 1

                                                                                                                                    Assessment means studying an effect

                                                                                                                                    so by “the human factor is yet to be assessed,” did you mean that the effect has not been studied? are you not denying that the human factor has been studied?

                                                                                                                                    typically the category of “denial” doesn’t mean you think a claim has a 0% chance of being correct; most people are not 100% certain of anything and the concept of denial is broader than that in common speech. organizations of scientists studying climate change are very confident that it is largely human caused; if your confidence in that claim is somewhere nominally above 0%, it would still mean you think it is most likely untrue, and you would be denying it.

                                                                                                                                    1. 1

                                                                                                                                      An effect can be heavily studied but still inconclusively. From what I’ve seen and read, the human factor is obviously there and not only marginally above 0%, most probably way beyond that, but I wouldn’t zero out other factors either. If that means denial to you, then we obviously have different definitions of the word.

                                                                                                                                      1. 1

                                                                                                                                        saying the human factor hasn’t been assessed casts doubt on it. now you are saying it is “obviously there” which is quite different.

                                                                                                                                  1. 5

                                                                                                                                    The only thing I can do, as an individual, is to adapt, prepare and overcome. In my initial comment, I already mentioned an example for wrong alarmist predictions, and they even date back to the 60’s! Moving the fence pole and saying the arctic ice will have disappeared in the next n years won’t help bring me on board. Al Gore back then cited “irrefutable” science and I remember being presented his movie in school, but his predictions all proved to be wrong.

                                                                                                                                    Still, we are on the same side, kel: Our footprints are unsustainably large, and I as an individual strive to reduce it whenever I can. The truth is, though, that even Germany, which only contributes 2% to global carbon emissions, doesn’t play much a role here, and the big players need systemic change.

                                                                                                                                    It’s funny, actually, given this pretty much rings with the individual argument of slimming down your website: When Google, Youtube, Medium, etc. don’t move along, it doesn’t make much of a difference.

                                                                                                                                    1. 11

                                                                                                                                      The only thing I can do, as an individual, is to adapt, prepare and overcome.

                                                                                                                                      It is both frustrating and liberating how little influence an individual has. However, in the moment you decided to post a number of comments on this site, you contribute to the public opinion forming process. I think that this gives you much more influence than immediately obvious. Discussions on sites like lobste.rs are read by many people, and every reader is potentially influenced by the opinions you or anyone else express here. And with great power comes great responsibility ;-) With that in mind, I am glad that other commenters challenged your initial comments about climate “alarmism” and prompted you to clarify them.

                                                                                                                                      1. 7

                                                                                                                                        germany is the most powerful state in the european pole of the tripolar world economic system. it has much to say about how other countries it is economically tied to are allowed and enabled to industrialize and maintain their standard of living. germans own plenty of carbon-emitting capital in countries that don’t have the same level of regulation, and they need to be made accountable for the effect they have on the world.

                                                                                                                                2. 3

                                                                                                                                  so we don’t throw away what we’ve achieved as a species

                                                                                                                                  Do you truly think silly performative ecological politics are going to “throw away” your first world niceties or are you talking about how ecological collapse will likely trigger progressively even more massive failures in supply chains as we inevitably blow through 1.5C

                                                                                                                                  1. 3

                                                                                                                                    There’s more to the world than economics, e.g. achievements in human rights and freedoms. But I don’t want to go too off-topic here (we are on Lobste.rs, after all).

                                                                                                                                    1. 5

                                                                                                                                      achievements in human rights and freedoms

                                                                                                                                      None of this will matter when people living in most affected areas – that are suffering from climate crisis already (thanks to droughts, lands becoming effectively uninhabitable etc.), not to mention what will happen in the following years – will come to our first world demanding a place to live. And we will point our guns at them. As one of the commenters said: “Desperate people will do desperate things”. And all of this will happen over years, decades. Painstakingly.

                                                                                                                                      Unfortunately some people will write it off as plain alarmism while dismissing well proven scientific position. And the position is: I want to have good news but it looks really fucking bad. I’d love to ignore all those facts just to live a happier life but I find it hard. It saddens me deeply that behind that facade of freethinking, you pretty much made up your mind for good. I do not mean to insult you. It’s just the way you speak in all your comments that makes me think that way. I hope I am wrong. Eh, shame.

                                                                                                                                      One could consider famous Newsroom piece about climate change as an alarmism but unfortunately it seems to be very on point.

                                                                                                                              2. 9

                                                                                                                                The planet will be fine. It’s the people who are fucked.

                                                                                                                                George Carlin

                                                                                                                                I almost want to agree with you, except that underestimating the impact of climate change has already cost society massively and climbing.

                                                                                                                                Firstly, if you believe that our current rate of temperature change is historically typical, there’s an xkcd comic for you.

                                                                                                                                I will go as far as to say that to consider climate change an existential threat are perhaps looking at it the wrong way. But I’m not about to start undermining their cause in this way because people tend toward apathy toward long-term threats and the cost of underestimating climate change is far greater than the risk of overestimating it. Climate change has already begun to have direct costs, both monetary and humanitarian.

                                                                                                                                As an example of monetary cost, in Gore’s documentary he presents a demonstration of rising sea levels around Manhattan Island and makes a point that the September 11 memorial site will be below sea level.

                                                                                                                                This might be true, but below sea level does not mean underwater. The flooding projection makes the assumption that humans are either going to do nothing about it and drown or are going to pack up New York and leave. I think neither scenario is likely.

                                                                                                                                What will happen is that the rising sea level will be mitigated. The city will build huge-scale water-control mechanisms (such as levees). The cost of living on the island will rise sharply. Once in a while, this system will fail, temporarily flooding the homes of millions of people. They will bail it out and go on living.

                                                                                                                                Not so bad, right? The catch is that the projected cost of this, in purely financial terms, is predicted to vastly outweigh the cost of reducing pollution now. And we don’t need to hit discrete targets to see a benefit – every gram of CO2 that we don’t emit today will reduce the amount of water in a nearly-certain future flooding event.

                                                                                                                                This is beside the humanitarian cost.

                                                                                                                                Climate change does not come without opportunities. Likely, the farming season in Canada and Russia will lengthen, leading to more food produced in those countries. Cool, but meanwhile in other places, the drought season will lengthen. People won’t be magically transported from one place to another; there are logistical, political, and sociological obstacles. People stuck in those regions will become increasingly desperate, and desperate people do desperate people things. With today’s weapons technology, that’s the kind of situation that really could lead to humanity’s extinction.

                                                                                                                                So please be careful with the point-of-view that you present. You might not be wrong, but contributing to a culture that underestimates the oncoming danger is exactly what got us here in the first place.

                                                                                                                                1. 5

                                                                                                                                  I’m not denying the danger or playing it down, and we can see current effects of global warming. We humans must adapt to it, or else we will perish. It would not be far-fetched to assume that this global warming might even lead to more famines that can kill millions of people.

                                                                                                                                  The problem I see is the focus on CO2, but resource usage has many forms. Many people find pleasure in buying EVs, while charging them with coal power and not really reducing their footprint a lot (new smartphone every year, lots of technological turnover, lots of flights, etc.). I’m sure half of the people accusing me of “playing it down” have a much larger “CO2 footprint” (I’d rather call it resource footprint) than I do.

                                                                                                                                2. 9

                                                                                                                                  The climate has not changed like this before in human timescales. https://xkcd.com/1732/

                                                                                                                                  Today, denying human-induced climate change requires more than disagreeing with the scientific consensus on future predictions, it requires denying current events. The climate crisis is already here, and it already has a death toll.

                                                                                                                                  The good news is that you don’t need to update your understanding and stop swallowing narratives produced by fossil fuel corporations, although we could certainly use all the help we can get. You just need to get out of the way of people like Greta who are taking meaningful action to avert the climate crisis on a systemic level. If you live in the US, Sunrise Movement are extremely effective young organizers who deserve your respect. If all you have to offer is sniping from the sidelines, maybe you should rethink your contributions. Have you actually done anything to make the world a better place, or do you just complain about people who do the work?

                                                                                                                                  1. 5

                                                                                                                                    Given the many factors influencing climate itself and the models built to predict it, studies greatly diverge from each other. Big fossil fuel corporations cite the least-alarmist ones, and environmental extremists cite the most-alarmist ones. As always, the truth lies in the middle.

                                                                                                                                    It’s a great shame that people die from this, given it’s a negative effect of the fact that the entire industrial age (including urbanization and expansion) was built on the assumptions of a small ice age that we had until the 1850’s and 1900’s. The increasingly warm global temperature has its toll.

                                                                                                                                    My favourite example is the nordic spruce, which is the main tree for corporate wood production in Germany. It originally comes from the mountains, but was increasingly used during the industrialization and planted in normal plane land, which worked because the weather was still relatively cool. The few degrees of warming leads to a massive weakness of the trees, and our German forests, which are substantially made up of spruce monocultures, are infected with numerous diseases and pests because of this.

                                                                                                                                    Over the years I’ve read so many alarmist reports by big scientific players which proved to be completely false, which is okay. Scientists can err, especially with something as multivariate as climate. My view is that we should not only look at “CO2 emissions” as a mantra, but adapt to the changing climate (diversify forests, etc.) instead of turning this into yet another speculator’s paradise with CO2-certificates which help nothing but shift wealth.

                                                                                                                                    The real damning truth is the following: I live in Germany, and if one flipped a switch that would wipe Germany and all its inhabitants from the face of the earth, the global CO2 emissions would only drop by 2%. As always, it’s the big players (USA, China, etc.) that need to change systemically.

                                                                                                                                    Have you actually done anything to make the world a better place, or do you just complain about people who do the work?

                                                                                                                                    Not to sound too harsh, but I basically don’t matter, just like the individual Chinese or US person matters. Electronic vehicles won’t make a difference, because CO2 emissions are just offset to developing countries where the battery-components are mined and processed. Charging an EV in Germany means coal power, no matter how much you buy “eco” electricity, as it’s just a big shuffling on the energy market.

                                                                                                                                    I do my part not buying a phone or computer every year, driving a used car (Diesel), which is still more environmentally friendly than buying a new car which needs to be produced in the first place, buying regional, etc. These things, as an individual, make much more of a difference than buying a Tesla and continuing living the large lifestyle most people have gotten used to.

                                                                                                                                    1. 11

                                                                                                                                      As always, the truth lies in the middle.

                                                                                                                                      I want to call out this both-sides-ism. Basic shifting of the Overton Window can cause you to believe insane things if you assume that the truth always lies in the middle. Reasonable positions can seem extreme if you live in a society that, for example, has been shaped by fossil fuel billionaires for decades.

                                                                                                                                      It’s also wrong to ignore worst-case scenarios.

                                                                                                                                      There has been a great deal of discussion around the IPCC reports, which are very conservative (by which I mean cautious about only making predictions and proposals for which they have a great deal of evidence). Unlikely but catastrophic possibilities, such as the terrifying world without clouds scenario, also deserve attention. Beyond that are the “unknown unknowns”, the disaster scenarios that our scientists are not clever enough (or do not have the data) to anticipate.

                                                                                                                                      Global nuclear war or dinosaur killer asteroid impacts may seem unlikely today, but if we do not prepare for and take steps to avoid such cataclysms, someday we will get a very bad dice roll and reap the consequences.

                                                                                                                                      In other words, the obvious predictable results of global heating on our current trajectory are bad enough, and I do not consider discussing them to be alarmism, but edge cases that might be reasonably seen as alarmism I feel are underappreciated, rather than overpublicized as you seem to believe.

                                                                                                                                      In other words, the truth, rather than lying in the middle, might be significantly worse than any messaging from the mainstream climate movement suggests.

                                                                                                                                      1. 6

                                                                                                                                        I’ll just say that personal consumption habits are not what I’m talking about, although I can see why you would bring them up, given the article we are commenting on is about changing personal website design.

                                                                                                                                        Sustainability, and justice for those who suffer most in the climate crisis, will require changing how our society functions. It will require accounting for the true costs of our actions, and I’m not convinced that capitalism as we know it will ever hold corporations accountable for their negative externalities. It will require political change, on a local, national and global level. It will require grassroots direct action from the people. You as an individual can do little, but collectively I assure you we can change the world, for the better instead of for the worse.

                                                                                                                                        1. 6

                                                                                                                                          The role of the collective against the individual is of course a truism. The real costs of a product are often hard to reflect on. One good example is sustainably produced meat, which costs 6 times more than “normal” meat you can buy at the supermarket. Reducing meat consumption to once a week (instead of almost every day, which is insane) would greatly reduce the footprint of an individual, but I don’t hear greenpeace talking about reducing meat intake, even though it makes up 28% of global greenhouse gas emissions.

                                                                                                                                          Instead, we are told to “change society” and accept new legislation that fundamentally change not only our economies, which deserve some reform in many places, but also individual freedoms for questionable benefit other than certain profiteers in certain sectors.

                                                                                                                                          So I hope I didn’t come across as someone denying the effects of climate change. Instead, I don’t like the alarmism, which has been often debunked in the last decades, only to sell extreme political measures. A much more effective approach would be, I think, to urge people to reduce their resource footprint and allow them to make the right choices.

                                                                                                                                          To give an example, maybe the EU could stop funding mass-meat-production if they really cared about this topic at all. Because this stuff really undermines the credibility of the entire climate “movement”.

                                                                                                                                    2. 2

                                                                                                                                      (consider we are easing out of a small ice-age that just, out of chance, had its lowest point in the mid 1800’s when humans started measuring temperatures systematically).

                                                                                                                                      Have any sources so I can read more about this? First I’ve heard of this.

                                                                                                                                      1. 4

                                                                                                                                        Sure! There is a great paper called “Using Patterns of Recurring Climate Cycles to Predict Future Climate Changes” by Easterbrook et. al. (published in Evidence-Based Climate Science (Second Edition), 2016) which is sadly paywalled and I can’t fully share here, but there’s a great figure in it that shows temperature-readings from tree-rings in China.

                                                                                                                                        Between 800 and 1200, we had the global medieval warm period, which allowed people for instance to grow wine in England and is the reason why Greenland is called “green” land (because it wasn’t covered in ice when the vikings discovered around 900-1000). The temperatures were normal between 1200 and 1600, but were then followed by a “Little Ice Age” between 1600 and 1900. In general, one can indeed see that global temperatures are rising above the average over the last 2000 years, but it’s nothing unusual.

                                                                                                                                        To give one more example: Glaciers receding in Norway, due to the currently observable global warming, reveal tree logs and trading paths roughly from the Roman ages used between 300 and 1500. If you look at the aforementioned figure, this pretty much coincides with the extremely warm period beginning around 300. Even though it went below around 700, it never really go into a cold area which would’ve let the glacier “recover”, explaining that it has been used until 1500 when the next cold period (the Little Ice Age) started.

                                                                                                                                        I hope this was helpful to you!

                                                                                                                                        1. 6

                                                                                                                                          It sounds like you’re arguing that the current global temperature rise is not due to humans, or is just a natural temperature cycle coming to an end, which is extremely wrong. The slight cooling period you’re talking about did happen, but as of now both the speed and projected magnitude of the current temperature changes are unprecedented in human history.

                                                                                                                                          We can argue all day about specifically how bad things are going to get given the temperature rise, and how much someone’s stupid little personal website is going to contribute to it, but the fact that the temperature rise is man-made and is changing faster than any global temperature change ever in human history is supported by enough broad scientific consensus to be pretty much indisputable.

                                                                                                                                          1. 4

                                                                                                                                            This is a placeholder reply so I don’t forget (immediately quite busy), but there is no evidence the pre-industrial era “little ice age” was a global phenomenon.

                                                                                                                                            1. 4

                                                                                                                                              That could very well be! What I cited were results from Europe and Asia, and I would not be surprised if it turned out differently in other places of the world.

                                                                                                                                      1. 3

                                                                                                                                        I am not saying my dreams are widely shared, or good projects to take up… but I will answer the questions as stated.

                                                                                                                                        Like spreadsheet, only to data-block-first. Multidimensional arrays come first, then they are layed out to show them best (unlike spreadsheets, where huge 2D sheet is primary, then arrays are kind of clumsily specified). Of course the ranges are also named; operations are likely to be a mix of how spreadsheets work nowadays, how normal code is written in Julia/Python/R/… and some things close to APL/J. No idea whether this can be made more useful (for someone) than just the existing structured-iteration libraries, maybe with a bit better output/visualisation code…

                                                                                                                                        A DVCS that does not regress compared to Subversion. I want shallow (last month) and narrow (just this directory) checkouts supported on the level that the workflow that makes sense is just versioning entire $HOME and then sometimes extracting a subset as a project to push. Although no idea if the next iteration of Pijul will approach that.

                                                                                                                                        A hackable 2D game with proper orbital mechanics take-off-to-landing (including aerodynamic flight with a possibility of stalling before landing etc.). Orbiter definitely does more than I want, but for me a 2D version would feel a nice more casual thing. And probably 2D has better chances of not needing Wine…

                                                                                                                                        Writers have tools for sketching out and reshuffling the story; for proofs and for code documentation there is more weight on the notion of what depends on what; and sometimes one can reverse the dependency, or replace with a forward declaration; sketching and experimenting around all that can probably be aided by some kind of a tool, but no idea how it would look like. I guess it would have something in common with Tufts VUE…

                                                                                                                                        1. 3

                                                                                                                                          A DVCS that does not regress compared to Subversion. I want shallow (last month) and narrow (just this directory) checkouts supported on the level that the workflow that makes sense is just versioning entire $HOME and then sometimes extracting a subset as a project to push

                                                                                                                                          git can technically do this (using worktrees, subtrees, sparse checkouts etc.) - but the UI for it … does not exist. It seems like a low-hanging fruit to implement this (and one which some friends with whom I collaborate on monorepo tooling may end up picking at some point).

                                                                                                                                          1. 2

                                                                                                                                            The thing that git fails completely on data-model level, is that it insists a branch is a pointer. In fact it is more of a property of a commit, which leads to much much better handling of history, and as a curious (but convenient) implication also brings possibility of multiple local heads for a single branch…

                                                                                                                                            Of course all-$HOME versioning is likely to benefit from a more careful approach to branches, and maybe treating not just content but also changes as more hierarchical structures with possibility to swap a subtree of changes in place, but I really do not believe in anything starting from git here…

                                                                                                                                          2. 2

                                                                                                                                            Your spreadsheet concept basically already exists in Apple Numbers. Spreadsheets there don’t take up the whole page but instead are placed individually as a subset of the page.

                                                                                                                                            To your point on DVCS, there are big companies that do have this kind of thing available, but I’m not sure how much of it is open-sourced.

                                                                                                                                            1. 3


                                                                                                                                              Re: Apple Numbers: Hm, interesting (not interesting enough to touch macOS, but I should look up whether they support more dimensions in all that etc.). Although I would expect the background computational logic to be annoyingly restrictive, but that could be independent of the layout.

                                                                                                                                              Re: DVCS: what I hear is very restrictive actually, more about how to handle an effectively-monorepo without paying the worst-case performance cost than something thinking in terms of how to structure the workflow to be able to extract a natural subproject as a separate project retroactively.

                                                                                                                                            2. 1

                                                                                                                                              As to the first and last points, maybe https://luna-lang.org would be interesting to you? (I am a huge fanboi of them.)

                                                                                                                                              1. 1

                                                                                                                                                One more data flow language?

                                                                                                                                                I mean, data flows are cool, sure, but I am fine writing them in one of the ton of ways in text, though.

                                                                                                                                                They don’t solve the data entry + presentation issue per se (layout of computation structure and layout of a data set are different issues), and structuring a proof looks way out of scope for such a tool.

                                                                                                                                                ETA: of course a data flow language well done is cool (and any laguage paradigm well done is cool), I just don’t have a use case.

                                                                                                                                                1. 1

                                                                                                                                                  With Luna the idea is that you can write in text if you want, then jump to graphical instantly and tweak, then jump back to text, etc. with no loss of information.

                                                                                                                                                  As to the rest, I guess I don’t know the domains well enough to really grasp your needs & pain points :) just wanted to share FWIW, in case it could get you interested. Cheers!

                                                                                                                                                  1. 1

                                                                                                                                                    Sure, I understood that capability to switch between representations losslessly, I just need a reason to do significant mouse-focused work (which, indeed, is not said anywhere in my comment) so using this capability would always be a net loss for me personally.

                                                                                                                                            1. 25

                                                                                                                                              This license has probably been sufficiently analyzed here, but I want to give a tangible example on why it is problematic: A few years ago, suckless.org became a legal entity (an e.V. in Germany). Because German tax law is so complicated, we’ve decided not to apply to become a non-profit (because the cost and time for tax-declarations and other formalities would outweigh the benefits). Everyone would still agree, though, that suckless.org is not a “capitalist” entity given we release everything under MIT/ISC and don’t earn anything with the software (except donations). Nevertheless, we would be prevented from using any software licensed under the “Anti-Capitalist Software License”, as we are, formally, not a non-profit organization.

                                                                                                                                              1. 17

                                                                                                                                                wouldn’t suckless e.V. fall under

                                                                                                                                                c. An organization that seeks shared profit for all of its members and allows non-members to set the cost of their labor

                                                                                                                                                1. 5

                                                                                                                                                  That provision is so vague as to be meaningless. A lot of big software companies give stock as part of their compensation for all employees. That could be considered “shared profit”, and contractor positions could be considered “non-members setting the cost of their labour”.

                                                                                                                                                  The provision immediately after that (equal equity and voting rights) rules out those big software companies, but taken in isolation this one clause could easily apply to, say, Google.

                                                                                                                                                  1. 1

                                                                                                                                                    Employees of a for-profit corporation also set the cost of their labor.

                                                                                                                                                    1. 1

                                                                                                                                                      yeah it’s a mess

                                                                                                                                                    2. 1

                                                                                                                                                      Does it seek profits at all? If it doesn’t seek profits, then how can it seek shared profits?

                                                                                                                                                      1. 1


                                                                                                                                                        does this count as seeking?

                                                                                                                                                        1. 2

                                                                                                                                                          Is that a profit, or is it just covering operating costs? It doesn’t seem like they’re seeking shared profit for all members at all, just covering hosting costs and conferences.

                                                                                                                                                          Under a similar line, it seems as long as your’e employed, you can’t use any of the software developed under this license, since the only non-organization option for this license is:

                                                                                                                                                          a. An individual person, working for themselves

                                                                                                                                                          And that doesn’t provide a carve-out for people using the software in their spare time.

                                                                                                                                                          1. 2

                                                                                                                                                            it depends on the legal meaning of “working for themselves.” i assumed it is legally meaningless and includes people who use software in their spare time, but i am not a legal expert.

                                                                                                                                                            1. 5

                                                                                                                                                              it depends on the legal meaning of “working for themselves.” i assumed it is legally meaningless and includes people who use software in their spare time,

                                                                                                                                                              That’s the problem: That’s almost certainly what they wanted to say, but also not obviously what they said. A phrase being legally ambiguous doesn’t mean that it doesn’t apply: it means that you have to go to court to establish what it may mean.

                                                                                                                                                              1. 0


                                                                                                                                                  1. 2

                                                                                                                                                    On kyle’s profile, it says he submitted -3 stories. What?

                                                                                                                                                    1. 4


                                                                                                                                                      Apparently the fix is not correct, or at least not complete.

                                                                                                                                                      1. 1

                                                                                                                                                        I’ve seen that sometimes on accounts that have been deactivated.

                                                                                                                                                      1. 3

                                                                                                                                                        You can see a similar behavior with loads rather than branches, e.g. dereferencing a sorted array of pointers will be faster than an unsorted one. e.g. something like (pseudo code):

                                                                                                                                                        int** array = ...;
                                                                                                                                                        for (p: array)

                                                                                                                                                        A sorted array will be faster due to improved cache locality, improved TLB hits, etc

                                                                                                                                                        It’s also possible that a reverse ordered array would be slower than increasing order as depending on processor model and generation and PT entry settings. Essentially most loaders assume sequential access.

                                                                                                                                                        1. 1

                                                                                                                                                          I don’t understand your statement, and I would appreciate more details.

                                                                                                                                                          Where is the branch predication at work, (at that would be failling too often), in your example ?

                                                                                                                                                          Also could you elaborate about : “A sorted array will be faster due to improved cache locality, improved TLB hits, etc”

                                                                                                                                                          1. 3

                                                                                                                                                            It’s not branch prediction, but rather load prediction.

                                                                                                                                                            To start with the non-prediction portion are the basic L1,2,.. caches as they load in adjacent memory, if you sort your array of pointers then sequential pointers are much more like to be sufficiently close together to be pulled in together, so loads of successive entries in the array are much more likely to point to data that has been loaded into a cache line already. The TLB is a more extreme version of this essentially sequential loads reduces the likelihood that the MMU will have to do a full page table traversal to find the correct physical memory for a pointer load.

                                                                                                                                                            Following from this processors have a bunch of load and prefetch predictors (although these are partially responsible the meltdown/spectre bugs), the most basic predictors have been the same for a few decades at this point: the processor assumes that you are traversing memory sequentially, so if you load the cache line for address A the prefetch unit may choose to load the cache line for the address (A+cacheline size). Traditionally the assumption was purely increasing sequential loads so decreasing sequential would not benefit from the prefetcher.

                                                                                                                                                            Modern processors have multiple levels of exciting prediction units so they will preload all the way through *a[x] by predicting the value (a+x) and will load *(a+x) easily because in this example we are doing an in order sequential load, at this point we have a real address loaded from a predicted value, and if we’ve got that address in a cache line already then we the value from the cache line into a virtual register and carry on processing prior. The predicted loads can fail at any step along the line but each successful step in the prediction helps performance.

                                                                                                                                                            In HPC work a /lot/ of attention is put onto layout of data in memory for exactly these reasons.

                                                                                                                                                            1. 1

                                                                                                                                                              After thinking more about your example, it is indeed an extremely good example for understanding cache misses. And your present explanation is extremely insightful. I was mislead by the original stackoverflow link in which it is the leaf/final/data that are sorted.

                                                                                                                                                              However, in you example, even if sorted, there may be a little distance (offset between pointers) contained in the pointers array.

                                                                                                                                                              Do you have a simple rule, roughly, so as to estimate how much data is pre-loaded for sequential, or close to sequential pointers ?

                                                                                                                                                              It’s been some time I have not dealt with page memory. Is the page size always the same on one computer? Can it be changed or optimized at will ? Am I wrong thinking it is always related to page memory size ?

                                                                                                                                                              And how is it dealt in HPC, a domain in which I have insufficient knowledge and experience ? Do they mimic CPU cache management ? If so in which way?

                                                                                                                                                              I guess it is a lot of questions in one comment. If you think it’s too much, but that I might learn about them starting reading about some keywords, just tell me: that would be tremendously helpful for me.

                                                                                                                                                              1. 2

                                                                                                                                                                All of the predictor behaviors are super architecture specific - if you want to keep work sizes inside the cache (or even single lines) you need to know the exact architecture you’re on.

                                                                                                                                                                Memory data structure layout is effected by many factors - SIMD instructions often benefit from using unusual layouts (the classic example being instead of an array of {x,y,z,w} vectors it’s often better to have four arrays, one each for x,y,z, and w. Because reasons. But even that can change depending on the use cases. Another classic is say you have a large rectangular NxM array it can occasionally be faster to split your task into work groups that are sub-blocks of the main array.

                                                                                                                                                                For the page question, yes I mean physical pages (the TLB is essentially a virtual address to physical page map). Page size is fixed in hardware - I know windows has the idea of 64k pages (vs regular 4k) but I don’t know if there’s any physical awareness of that or if it’s just an OS optimization. But you’re not guaranteed 4k - modern iOS devices have 16k pages.

                                                                                                                                                                In general people who are really in HPC-land with real need to get as much out as possible out of the hardware will tailor everything to the exact hardware they’re using - for example on multicore systems different pieces of memory may have drastically different perf characteristics depending on the core accessing the memory.

                                                                                                                                                                I am glad I don’t work in HPC world, but I work on sufficiently perf sensitive things that I do need to consider the higher level predictor behaviors, and rely on the compiler to do the correct instruction sequencing to improve throughput (compilers often model the number of execution units, dependencies, retire buffer sizes, etc).

                                                                                                                                                            2. 2

                                                                                                                                                              olliej’s example has nothing to do with branch prediction. I’ll try to explain cache locality for you.

                                                                                                                                                              You can google that term for more information, but in short: accessing RAM is slow. In order to speed up memory access, basically all modern processors have a small bit of memory to which the processor has direct, fast access, called the cache. The problem is the cache is really tiny, and can’t hold much data.

                                                                                                                                                              The way it tries to speed up memory access is that when accessing a value from main memory (say, at address p), the chunk of memory that this value’s contained in is copied to the cache. The idea is that if you’ve accessed p, then there’s a pretty good chance you’ll be accessing values like p+1, p+2, etc. shortly after. If you don’t, and you instead access another completely random memory address, the cache then has to be flushed, and you fall back to the (very slow) main memory access again.

                                                                                                                                                              And this is where the sorted vs. unsorted pointers question comes in. If your pointers are sorted, chances are the majority of those pointer dereferences are going to be fulfilled by the cache. If they’re not sorted, it’s likely that you’ll be flushing the cache every single time.

                                                                                                                                                              1. 1

                                                                                                                                                                I have notes about cache-misses to which I would have liked to add that example.

                                                                                                                                                                However I strongly disagree with what your explaining. To the point I think it is a FALSE statement. I may look insisting, so I would gladly welcome any corrections to my point of view:

                                                                                                                                                                • In your explanation you are dealing about the way the pointer is incremented, you are dealing with the algorithm used to increment the pointer. You are not dealing with the value of the memory zone the pointer are pointing to.
                                                                                                                                                                • If you sweep your memory zone, one by one, incrementing your pointer correctly one by one: there won’t be cache misses.

                                                                                                                                                                => It has NOTHING to do with the fact that value may be sorted or not. The duration of derefencing in itself (what the original comment was about and about which I was asking) is not depending one the value, but rather on the value of the address of the pointer: this is the reason that produces a cache miss or not.

                                                                                                                                                                In a nutshell: it is the value of the pointer that creates a cache-miss or not.

                                                                                                                                                                If and only if, you need to cycle through you array in a sorted way… Only in such case you would then peek at one place in memory, then at another maybe to far. And in this case then yes, there would be cache-misses.

                                                                                                                                                                Do you see my point of view ?

                                                                                                                                                                EDIT: I finally get your point => the value of the pointers are to be sorted to have an efficient loop, so as to have a sequential cycle-through the memory zone.

                                                                                                                                                                I put that in my notes ;-) thanks.

                                                                                                                                                                But I have have to put it clearly, in that example, we are not interested at all if the int values themselves (those that are eventually pointed after two indirection) are sorted or not. I did not understood that from the original comment. And after re-reading it I still think it is misleading.

                                                                                                                                                                1. 2

                                                                                                                                                                  I think you got it in your edit: I was talking about the addresses contained within the pointers, not the integers (or whatever) the pointers were pointing to. Those addresses are also what we were sorting. Maybe I should have used the word “addresses” rather than “values” in my comment for clarity.